Hondo – A Copy of my Development Server Virtual Machine

To make it a little bit easier for folks to play around with Legend of Hondo (particularly the admin tools that are handy for general SWGEmu “world building”), I’ve uploaded a copy of my VirtualBox VM to my MEGA storage. You can find it here,

LoH_Public_Server_Dec_2016.7z.

It’s exactly what I use for developing Legend of Hondo (apart from having an anonymous git configuration) and it’s perfectly fine for use as the “server” portion of the single player game. The documentation is included in the zip file. Further documentation is in the github repo and here on this site.

The 20GB vdi file was compressed using 7zip on ultra compression, bringing the final file size down to 3.3GB.

At this point, it should be noted that if you do happen to get the client and server setup, I don’t recommend actually playing the game yet. Quite simply, I haven’t finished making the fundamental game play systems, nor have I completed the new player experience. So, if you did start playing now, you’d end up in situations like not having any resources to craft with or not being able to craft at all if you didn’t start as an Artisan (because you don’t have a crafting tool and there isn’t anywhere to buy or loot one). Besides, I haven’t made any of the pirate system or story content yet anyway.

I’m busy re-working the layout of the profession system at the moment and once I have finished that, I will be working on the new player experience. That way you could actually play the game without needing to use the admin account to make up for the lack of other players, etc. Time frame for that? Early Feb, 2017?

Personally, I am not playing Legend of Hondo yet, because it’s not really ready even for a “head start”. It doesn’t need to be complete to be playable, but it does at least need all the “gotchas” to be solved. Legend of Hondo Classic on the other hand is playable, because I solved all that stuff first – sometimes I wish didn’t start over again… *sigh* 🙂


Warning: Don’t use Legend of Hondo as the basis for a multi-player server. I have changed some systems that work great in a single player game, but will allow nefarious folks to grief others in a multi-player situation.


Disclaimer:
https://github.com/Tatwi/legend-of-hondo
Legend of Hondo is a personal, open source, free (as in beer!), development project. When I am finished, the sum of its parts will be a single player pirate adventure, based on SWGEmu and Star Wars Galaxies.

You are welcome to use any code, concepts, and documentation within this repository, however you do so entirely at your own risk, in accordance with the following guidelines:

R. Bassett Jr. (Tatwi) and SWGEmu disclaim all warranties of any kind, either express or implied, as to the software provided in this repository, including, but not limited to, implied warranties of fitness for a particular purpose, or non‐infringement of proprietary rights. Neither this agreement nor any documentation furnished under it is intended to express or imply any warranty that the operation of the software will be uninterrupted, timely, or error‐free.

Under no circumstances shall R. Bassett Jr. (Tatwi) or SWGEmu be liable to any user for direct, indirect, incidental, consequential, special, or exemplary damages, arising from or relating to this agreement, the software, or userʹs use or misuse of the software. Such limitation of liability shall apply whether the damages arise from the use or misuse of the software (including such damages incurred by third parties).

Information provided in this repository is done so “As-Is” and is not promised or guaranteed to be correct, current, or complete, and may be out of date and may contain technical inaccuracies or typographical errors. Any reliance on the material in this repository is at your own risk. R. Bassett Jr. (Tatwi) and SWGEmu assume no responsibility (and expressly disclaim responsibility) for keeping information current or to ensure the accuracy or completeness of any information provided. Accordingly, you should confirm the accuracy and completeness of all information provided in this repository before making any decision related to using any part of it.

By using any software, files, or concepts provided in this repository, you waive the right to SWGEmu game client support from SWGEmu and you acknowledge and accept that you will not receive support from R. Bassett Jr (Tatwi) of any kind.

Legend of Hondo is not supported or endorsed by SWGEmu.

GNU AFFERO GENERAL PUBLIC LICENSE Version 3, 19 November 2007

The $20 Christmas Giving Challenge!

It’s the most wonderful time of year and all that, so this year I decided I would do something new to celebrate in the spirit of the season: I’m going to donate $5 to four charitable or volunteer organizations! 

Sure, $5 isn’t much money, but that’s where the challenge part comes into play – if everyone who has $20 to spare this season did the same thing, then thousands of helpful organizations would get a welcome boost to their operating funds.

Even if you don’t have any money to give, your local food bank will always welcome any canned goods you could spare, the Salvation Army will always accept clothing that is in good repair (especially for children), and most hospitals will be happy to take a donation of blood (and stick you with a free flu shot on your way out, here in Canada). Even sparing just a little bit of your time to listen to a fellow human, when they need an open ear, is always a gift worth giving.

This year I have chosen to send my donations to the Toronto Children’s Hospital / Sick Kids FoundationGleaners Food BankWikipedia, and the Linux Mint project. Where will your Christmas Giving Challenge dollars go this holiday season?

Merry Christmas!

PS. While I don’t personally observe or participate in any religion, I do follow in my family’s long tradition of celebrating family and community in the general Christian manner during the Christmas season. It’s as good a time as any for friends and family to cherish their time together and to share and build their own traditions… Happy Holidays!

Hondo: A Pirate System in the Making

Taking a completed game and modding into something else entirely is usually referred to as a “total conversion mod”. A mod that turns a Battlefield into a Star Wars game is a total conversion. What I am doing with my Legend of Hondo mods for Star Wars Galaxies isn’t quite on the level of “total conversion”, given that the art and the general theme remain the same, but when it comes to its purpose and function, Legend of Hondo and Star Wars Galaxies are completely different games.

Legend of Hondo is unabashedly, unforgivingly, and truly quite awesomely a single player experience. Yes, it’s based on the SWGEmu server / SWG client technology which is capable of being played by hundreds of people simultaneously, but using LoH in that way is completely outside of the scope of its design. With that in mind, I’ve been furiously scribbling on papers and madly futzing with spreadsheets and bits of toilet paper to formulate how the “Pirate Experience” in Legend of Hondo will play out. I always knew that’s where I wanted the project to go and I had made some design notes over the last couple years, but it wasn’t until late November that I decided before moving forward with building the rest of the game play systems, I needed to hammer out how the player will progress through the game.

Much like any single player RPG, Legend of Hondo has leveling, goals, and an “end game” that can be reached. And in keeping with other open-ended RPGs, the “end game” isn’t the end of the game, rather it’s simply that point when you’ve achieved all the recognition the game offers for how fantastic you have become. You can keep on playing as long as you’d like and you’ll find something to keep yourself occupied for a long time. That said, the Pirate System does have a path to follow and works essentially like this,

– You start the game as a Scout who can learn some useful skills and make some underworld connections.
– You level up your basic skills and work on building your reputation as a criminal/pirate by doing pirate related activities and earning the Underworld skill branch.
– Once you’ve achieved all the basic skills and earned the “Aspiring Pirate” skill box (Master box), you can earn Novice Pirate.
– As a Novice Pirate you can hunt bounties and run smuggling missions for 8 crime families, four of which hate each other. You can also continue to do all the other freelance pirate you’ve always done, as well as some new freelance pirate things, but if you want to progress towards being a Master Pirate or you wish to become a Legendary Pirate or a Dread Pirate, you’ll have to earn the respect of the various criminal families.
– Becoming a Master Pirate requires playing both sides of the game, becoming respected by crime families who hate each other, which is no easy task! In fact, it may prove more difficult than becoming a legendary or dread pirate…
– Once the player has earned the 4th Renown branch skill box, they can move on to the Renown pyramid, which is geared toward operating legitimate businesses. Similarly, when the player has earned the 4th skill box of the Infamy branch, they player gains access to the Infamy pyramid that is all about running nefarious businesses.
– Once you have earned the three titles, “Master Pirate”, “The Legendary Pirate”, and “The Dread Pirate”, you’ve essentially “beat the game”. Pat yourself on the back and go pick on some Nightsisters or something. 🙂

Here’s a look at how I have organized the new skill tree. I’m still working on the roleplay prose for the descriptions, but I have the skills/stat layout in the table mostly finished. It will be a while before I push this out to the repo and when I do, it will be the foundation for the arse load of work/research that will be required to actually make the Pirate systems and the fixes/balance for the combat professions, etc. that will likely take years to complete… But, here’s the design!

And here is some more detail about the system and insight into my design decisions…

– Start as Scout (Novice Box), with the following four trees of advancement:
– Industry: Basic crafting skills that lead to Armorsmith, Bio-Engineer, Chef, Droid Engineer, Tailor, and Weaponsmith.
– Underworld: The path to crime and piracy.
– Survival: Scouting and healing related skills that lead to Ranger, Combat Medic, and Creature Handler.
– Combat: Fundamental combat skills that lead to Carbineer, Commando, Pistoleer, Rifleman, Fencer, Pikeman, Teras Kasi Artist, and Swordsman.
– Any SWG profession not listed here is not part of Legend of Hondo.
– Medical and spice crafting is part of Bio-Engineer.
– Crafting stations are made by Novice Droid Engineers (still using General Crafting Skill/XP).

Architect Removal:
– Buildings in Legend of Hondo can only be owned by using the Hondo Housing System in Mos Espa and harvesters will be replaced by static NPC Merchant locations (to avoid needing to “run a server” 24/7/365 for a single player game), therefore most of Architect was pointless.
– Decorations are one of the most important “credit sinks” in the game and are available for purchase at Merchants throughout the galaxy.

Entertainer / Musician / Dancer / Image Designer Removal:
– It just doesn’t make any sense in a single player game – sure you *could* entertain NPCs, but… no. Just… no.
– Every character can image design themselves (I always though ID was the stupidest profession ever invented in any game anyway…).

Bounty Hunter / Smuggler Removal:
– Let’s face it, Smuggler was a failure for the entire history of SWG, with the pre-cu version be a particularly pathetic “phoned in” design. Bounty Hunter wasn’t much better, as 3/4th of the profession were combat skills.
– With that in mind, I embraced the concept of both Smuggler and Bounty Hunter and made them integral parts of the Pirate skill tree. So you can actually do real smuggling missions! Crazy, I know! And, you can also still do bounty hunting missions.

Shipwright:
– Legend of Hondo will never have “Jump to Lightspeed” or any similar space flight system, so there was no point in keeping Shipwright around.
– All of the nifty art pieces can be purchased from Merchants for use as decorations.

Medic / Doctor Removal:
– I took the important aspects of a “healer” from Medic, Doctor, and Combat Medic and rolled them into a single profession (that I decided to call Combat Medic).
– Most of the functionality is still there, but organized in a way that makes it easier to balance with the combat professions.

Brawler / Marskman Removal:
– The basics of these professions have been moved into the Scout’s Combat branch. Not all of it, just “enough to be useful”.
– The idea here is to give all Pirate characters some basic combat abilities, while also pushing more advanced stuff (like defences) into the weapon-specific professions.

Merchant / Politician / Squad Leader Removal:
– Legend of Hondo simply did’t need these SWG professions.

Jedi Removal:
– The manner in which SWG implemented Jedi was dumb, especially the “force ranking system”… So, I have no use for it.
– That said, Master Fencer/Pikeman/Swordsman can craft and wield a basic lightsaber for shits and giggles (converted to normal weapon that does Energy Damage).
– Looking at the Clone Wars and Rebels cartoon series, which are considered to be official Star Wars canon, a few pirates or other degenerate types being able swing a glowbat here and there around the galaxy is far more in keeping with Star Wars than anything SOE/LA ever did with SWG…
– Also, Jedi poodoo! 🙂

Here are some point form notes about the Pirate Mission Design:

– Pirate missions are divided into 6 levels, with each level opened up by earning a skill box in the skill tree.
– Skills boxes require X amount of Pirate Experience (PE).
– PE is earned by doing pirate/criminal related things.
– Pirate Faction Points (PF) are checked in conversations with Merchants and other people, where it plays into how the people feel about the player.
– Having negative Pirate Faction will cause all of your contacts to shun you.

Levels

1. Scout: “Foot in the Door”
– Only requires Combat Experience.
– Grants access to a quest chain.
– Completing the quest chain awards the player with enough PE for the next level.
– Gains access to Fast Talking: When “Peacing out of combat” against a humanoid, the player has a chance the enemy will talk with him. If successful, the enemy will drop combat and become conversable 5 seconds. If the player doesn’t start a conversation, the enemy becomes aggressive again. In the conversation the player has the chance to bribe or persuade the enemy to let him go or even reward him. Languages, bribe/persuade, and faction standing with the NPC’s faction play into the success.

2. Scout: “Odd Jobs”
– Putting some default SWG content to better use, requiring some dialog/text updates to put things in better context.
– Slicing anything grants 5 PE.
– Random quests from “Criminals” grant 5 PE.
– Terminal Recon Missions grant 5 PE.
– Terminal Deliver Missions grant 5 PE.
– Terminal Crafting Missions grant 5 PE.
– Terminal Destroy Missions grant 25 PE.
– Terminal Missions completed on Tatooine and Lok grant 50 PF and 5 additional PE.
– Another quest chain awards 50% the PE required to reach the next level.

3. Scout: “Shady Contacts”
– Grants access to a freelance criminal organization based in Mos Taike, Tatooine, who you can do jobs for.
– Repeatable quests with 2 different objectives: Debt Collection and Robbery.
– Debt Collection: Go to location, either collect the debt or kill the debtor. Return the credits, get paid. Keep the credits, loose Pirate faction and don’t get paid.
– Robbery: Steal some objects from the location provided. Return the objects, get paid. Keep the objects, loose Pirate faction and don’t get paid.
– Grants 100 PE and 50 PF upon completion.

4. Scout: “Informants”
– Grants access to 2 additional repeatable freelance quests: Beguile and Espionage.
– Beguile: Use your bribery and persuasion skills to convince someone that you’re the person who is supposed to move a shipment of goods for them. Failure makes the target aggressive, but doesn’t’t cause you to lose anything.
– Espionage: Use your bribery and persuasion skills to get someone in an organization to hand over a data disk, without raising suspicion. Will likely require talking to several people. Failure on combat, but doesn’t cause you to lose anything.
– Grants 100 PE and 50 PF upon completion.

5. Scout: “Aspiring Pirate”
– Not quite ready to strike out on your own yet, this level grants access to 1 more freelance quest: Assassination.
– Assassination: Find the target and take them out. Or… talk with the target and double-cross the mission giver!
– Grants 100 PE and 50 PF upon completion (or 125 PE and 75 PF for a successful double-cross). A successful double-cross will actually gain you respect with other pirates!
– Another quest chain awards 25% the PE required to reach the next level.

6. Pirate: “Novice Pirate”
– You’ve built a name for yourself and have reached the final level of Pirate Mission difficulty.
– Grants access to contacts of the eight main underworld factions, 4 who are renown for their actions and 4 who are infamous for theirs.
– Initially, only the Tatooine Swoopers and Desert Demons will offer missions.
– Grants access to freelance Bounty Hunting Missions from the Bounty Hunting terminals.
– Grants access to simple Smuggling Missions for the Renown and Infamous factions.
– Grants access to Bounty Hunting Missions for the Renown and Infamous factions.
– Renown and Infamous factions each have their own XP type.
– Grants Renown XP or Infamy XP depending on success, failure, and difficulty.
– Another quest chain that awards you with one of a few types of ship to call your own, depending on your choices.
– The ship will be parked at the secondary starport in Mos Espa and it allows you to fast travel to remote places on other planets, as well as opens up ship-based smuggling and pirating missions (similar to the Corellian Corvette dungeons).

Pirate: Smuggling
– Each level of the Smuggling skill boxes grants access to more dangerous goods that need to moved.
– The more dangerous the goods, the better the pay will be! Who cares about additional risk, right?
– Success = get paid, gain PF, PE, and Renown/Infamy XP. Failure = lose PF, PE, and Renown/Infamy XP.
– Smuggling missions are essentially dangerous delivery mission where bad stuff and other complications can happen along the way.

Pirate: Bounty Hunting
– It’s the same as it was in normal SWG, only it’s all PvE content.

Pirate: Space Lane Pirating
– Once you have a ship, you can talk to any of your contacts for rumors and tips on shipments passing through various sectors.
– There are two mission options: Delegate and Lead by Example.
– Delegate: UI-only mission where you hire a crew and send them out on the mission. Your ship is unavailable for 5-15 minutes while the mission is in progress.
– Lead By Example: This is a “space dungeon” mission that starts with you boarding a ship. Once on board, you can strike a deal with the captain or fight your way to the loot.

Pirate: “Master Pirate”
– You can become “The Legendary Pirate” or “The Dread Pirate”, but you’re simply not a “Master Pirate” until you’ve successfully played all sides of the game!
– The Renown and Infamous factions hate each other, so gaining the respect of both will take a lot of effort.
– Bounty Hunting isn’t easy and mastering it will make you a force to be reckoned with.
– Becoming a Master Smuggler is more than just being a good delivery boy.
– It’s only after you truly master all aspects pirating that you deserve the title, “Master Pirate”.
– Grants sizable bonus to your mission payouts (10%)
– Grants access to exclusive Merchants throughout the galaxy who sell many items you can’t otherwise obtain.

Renown: “Legendary Pirate”
– The Renown pyramid allows you to open and manage a line of (mostly) legitimate businesses.
– The business system is UI driven, but it does take place at physical locations in the galaxy.
– You can spend your Renown XP on each box, with the final box granting you the title, “The Legendary Pirate”.

Infamy: “Dread Pirate”
– The Infamy pyramid allows you to open and manage a line of shady businesses.
– The business system is UI driven, but it does take place at physical locations in the galaxy.
– You can spend your Infamy XP on each box, with the final box granting you the title, “The Dread Pirate”.

The Ultimate Goal:
– You’ve basically “won the game” when you’ve earned the 3 titles, “Master Pirate”, “The Dread Pirate”, and “The Legendary Pirate”!
– Beyond that, you can simply enjoy the fruits of all your labor, such as your access to every pirate-faction-locked Merchant in the game.
– Really, it’s all about enjoying the journey and relishing the moment you reach the destination, rather than the destination being a “GAME OVER” moment; There are so many “sandboxy” things one can do within the Pirate System and beyond it!

The “Iron Man Challenge”
– None of the skill boxes in the Pirate System require Skill Points, as the Skill Points are reserved for “support skills” that your character will likely need.
– The ultimate challenge would be to earn the 3 top titles without EVER using a single Skill Point (on that character), relying only on the combat, healing, and crafting skills learned in Scout and Pirate!
– Of course, it would be cheating to use exploits, such as running a healer-bot on a secondary character to cheese your way to an Iron Man victory…
– Speak with “Challenger Targâryen” in Mos Espa once you have earned the 3 top titles and he will grant you the title “Iron Man” if you’ve earned it!

SWGEmu – Motivations for Modding and other Ramblings

I’m sick and tired, literally I am afraid to say, I… I have a “man-cold” and while my body may be exhausted for really no good reason at all, my not so very sleepy mind desires more than to stare into the darkness. So… I may as use this down time to post about why I spent most of November working on an “Armor Upgrade” for Legend of Hondo.

Feature Documentation:

 https://github.com/Tatwi/legend-of-hondo/blob/hondo-master/doc/features/mod-armorUpgrade.md
I suppose the primary motivation was to solve the problem of composite armor being the only really useful design. In part, because it’s ugly and let’s face it, even we men like our digital dollies to look cool (yeah, I went there). But I also looked it at from the perspective of, “gee, wouldn’t it be nice if these other dozen or so armor suits and looted armor parts were actually useful?”. And yes, I did change the white palette so I could run around in a hot pink suit of bone amor when no one is around.

Having the good fortune of playing Star Wars Galaxies in all its incarnations (and not being religiously obsessed with any particular version), as well being exposed to many different computer games and gameplay systems over the years, I went about creating an armor crafting system that is kinda sorta like what was in the final NGE version, but not. I knew that I wanted to nerf the cheese that was Armor Slicing (that thing where any idiot playing a Smuggler can use a piece of garbage to get a 37% bonus to armor, when the Armorsmiths of the galaxy have fight tooth and nail for every single percent), and that I wanted the looted pieces to play a prominent roll in the process. 

Why loot? Well, given that loot comes from enemy’s you need to fight, having a use for the loot encourages the player to go out and get it; In an open-ended single player game like LoH, it’s important to provide opportunities for the player to create generalized goals, such as, “I wonder if can make a piece of armor with low Encumbrance and good Stun resistance? Hmm… What parts would I need to make that happen and where would I get them?”. I like that sort of content, especially the exploration aspects, so I looked at armor crafting as an opportunity to provide that sort of “emergent gameplay”.

At one point I was going to create draft schematics for all the armor types that are available, but upon completing one item I realized that the boring tedium of all that paper pushing (OK, “data entry”) would be a health hazard. I mean, I am quite capable of focusing on the job, but…. JOB people – creating Lua templates and editing IFF files felt like a day at the office, rather than an enjoyable hobby. So, I did something different and made a system that allows the player to upgrade looted and NPC purchased/rewarded armor instead. Honestly, it probably took about the same amount of time, but at least I had fun making it and I added some more variety to the game (and crafting in general, as to upgrade requires a crafted armor segment). When I add the Merchant System, amongst other things the player will be able to purchase all the armor suits in the game, depending on their reputation with the various world factions. Then if they like, they can level some Armorsmith to make segments to upgrade that armor or they can take advantage of the standardized crafting system to make their own from scratch.

Thrax emailed me and asked if I had planned on doing anything with the Armor Rating system, which I had not. I never really got into the high end combat in SWG, so I wasn’t really aware of the details of the system. All I can is, yup, I totally understand why SOE had to do the CU and NGE. The pre-CU combat system and profession system are as unmaintainable and spaghetti coded as systems come. I’m all for complexity, but people, there’s a difference between being complex and being convoluted. The latter is bad and SWG has no shortage of it! After reading the guides in good o’l Biophilia’s Notebook, I concluded that it would be in my best interest to remove both Armor Rating and Armor Piercing entirely. Dumbing down the game? Yes, if you can call dealing with more combat variables than most other games even without those systems, “dumb”. 

I spent a couple days taking it apart and testing combat against various high level MOBs and when all was said and done I found that when no one had Armor Piercing and everyone had Light Armor, the player took far too much damage, far too frequently. It threw off all the calculations I had made in my previous “Life and Death Changes” patch and it became obvious that the only way to truly balance it would be to … Edit every MOB template in the game. You know, just get them all lined up reasonable-like with sensible damage values and… What do I look like, some kind of insanity-man! 

I might, but that’s beside the point. 

So, I scrapped that testing and went about testing it in the opposite direction, by embracing the Dark (convoluted…) Side and allowing the player to upgrade their Armor Rating. Turned out it wasn’t half bad after all! And that’s good, because as much as I mod the crap out of Star Wars Galaxies, I do it because I love the game; I don’t hate it and wish it was something else, I just want it to be something I understand and enjoy – completely (because, hey, I can actually DO that!). Anyway, I wanted the upgrade process to require time and effort, but also be another potentially diverse goal, rather than just the typical slap some resources together BAM we have a Landspeeder? …! With that in mind, I repurposed the looted armor segments that I had previously removed and brought back a reason to hunt them thar Peko Peko Albatrosses, etc. And I suppose now would be a good time to mention that with the two Armor Upgrade procedures, there is finally a real reason to craft an awesome Clothing and Armor Crafting Station! 

Ah, the cough medicine induced ramblings of a middle aged game modder who has nothing better to do with his smartphone as he lay helplessly man-colded in bed… Now to figure out how to make more weapons useful without jacking up SWG and bolting a whole new game underneath. Or sleep… Yeah, maybe that…

BazaarBot – A System to Automatically Sell Items on the Bazaar in SWGEmu

I’ve been taking a little break from working on Legend of Hondo and other projects to help Kinshi and the good folks from the Tarkin community set up Tarkin 2.0 for their small role playing community. That’s nice of me and all, but truth be told, a lot of the stuff I am working on is either stuff I have used in Hondo or stuff I will use all or part of for Hondo. Anyhow, today I am posting about the BazaarBot!

This is an intentionally “dumb auction bot” that periodically lists items for sale on the Bazaar Terminals in the city of Mos Entha. It can be extended to list items in other regions by providing the ObjectIDs of snapshot-file-loaded Bazaar Terminals located in different regions, but for the purposes of Tarkin that wasn’t desired (And I won’t be using it in LoH either, the functionality is there none the less). When I say that the system is dumb, I mean that it doesn’t query the market and decide what it should post. Rather, the system simply posts what the administrator wants it to post, based on their configuration. Being simple in this way gives the admin excellent control of the system, while simultaneously denying players the opportunity coerce the system into listing items more frequently or in greater quantity than the admin desires.

Here is what it can do:

  1. Create and sell stacks of any currently spawning resource.
  2. Create and sell any piece of loot.
  3. Create and sell crafted items.
  4. Log its listing and sales in a custom log file
  5. Be managed using a normal character, as it’s based around using a real character called BazaarBot.

You can checkout the source code for this feature here and read more about it in the README.md file.

Notice:
Thrax of the Project Pheonix server informed me that this mod won’t compile using the latest version of SWGEmu. I have to say, I really don’t care. The utter lack of discipline shown by the SWGEmu developers is sad, truly sad. It’s no wonder to me that it has taken them more than a decade to produce what they have, because they are constantly throwing wrenches in their machinery by making unnecessary changes to library versions and other ridiculous stuff that doesn’t NEED to be changed. It’s poor project management, plain and simple, and I can’t be arsed to chase their tail with them. So, if a SWGEmu mod that I have made doesn’t work with a version of SWGEmu newer than September 30th, 2016, then you’re on your own to fix whatever minor annoyance they have changed, because I don’t care, it’s a waste of my time.

SWGEmu – A Verbose Server Setup Guide (for Debian Linux)

I’ve seen a lot of people ask for a generic guide on how to setup a server and I’ve personally been asked many questions about the process over the years, so I decided that I would roll a server VM from scratch and document the entire process. Here is that document!

This is an intentionally verbose guide on how to download, install, and configure a SWGEmu server using a Windows host system, VirtualBox, and Debian Linux, because I hope doing this will help fill in the blanks left by other guides and tools on the subject. If you want to install the server on your server hardware directly, simply skip the VirtualBox stuff and install Debian using a CD or USB drive (and there are LOTS of guides on how to do that already). Hopefully the information provided here will be detailed enough to be useful when installing on any Linux distribution.

Tough Love Time:
Frankly and honestly, if you’re unable to follow this guide successfully, you don’t yet have enough knowledge to host or develop a server anyway. I’m not saying that you should give up, I’m saying that you should do your research on how to use Windows, Linux, VirtualBox, Git, MySQL, and so on until everything in this guide makes sense for you. I get a lot of questions from folks on this kind of thing, despite the fact that the answers are already out there on the internet for people to find. I’ve been using Windows and Linux every day since the 1990s so a massive amount of “tech stuff” is just part of my common knowledge base. Maybe you don’t have that background and that’s OK, but allow me to share with you that I got to my level of knowledge by reading web pages and books and by practicing what I read over and over again; I did not get here by pestering someone else to solve my problems for me. Don’t be a lazy pest, rather use all your problems as chances to learn something new and try your best to find the solution yourself – search, read, watch, learn! 🙂

The main software/technologies used by SWGEmu:
– GNU/Linux
– C++
– Lua
– Java
– IDL Compiler
– Berkeley Database
– MySQL Database
– Boost library
– Zlib library
– Readline libary

Setup Steps:

1. Have a 64Bit Windows or Linux host system already running, with an AMD or Intel CPU that supports virtualization. This guide will focus on using a Windows host system.

https://en.wikipedia.org/wiki/Hardware-assisted_virtualization

2. Download and install the 64Bit (AMD64) version of VirtualBox from Oracle.

https://www.virtualbox.org/wiki/Downloads

If you need help with this step, read the VirtualBox guides or watch the installation how-to video on YouTube.

3. Download the net-install iso image for the Debian 8 “Jessie” Linux Distribution.

http://cdimage.debian.org/debian-cd/8.6.0/amd64/iso-cd/debian-8.6.0-amd64-netinst.iso

4. Open VirtualBox and create a new virtual machine.
– Click the New button
– Name: My SWGEmu Server
– Type: Linux
– Version: Debian 64bit
– Memory: 2048MB minimum, more is better though, so use most or all of the green area if you won’t be doing much with the host system as well.
– Create a new virtual hard disk now
– VDI (VirtualBox Disk Image)
– Dynamically allocated
– 20GB

The final size of the VirtualBox image file will only be about 6GB on the disk, but it can expand up to 20GB without you neededing do anything, which is nice – probably unnecessary, but a nice potential time saver down the road.

5. Configure the setting of the new virtual machine.
– Click the settings button

General Window > Advanced Tab
– Shared Clipboard: Bidirectional

System Window > Processor Tab
– CPU Slider: Set it to the max green area.

If you have 6-8 CPUs available, but only 3 or 4 are showing in the green area, in my experience with AMD FX processors, it’s safe to use up to 4 of 6 or 6 of 8. More CPUs exposed to the virtual machine will reduce the compile time of the SWGEmu server considerably.

– Extended Features: Enable PAE/NX

System Window > Acceleration
– Paravirtualization Interface: Default
– Hardware Virtualziation: Enable VT-x/AMD-V and Enable Nexted Paging.

Display Window > Screen Tab
– Video Memory: 64MB or more

Storage Window
– This is where you can add “loop back file systems”, in the form of a new VDI files, which can be mounted in Linux as extra storage. The nice thing about Unix-like operating systems is that other devices, such as remote computers, other hard drives, or one of these loop back files, are seamlessly grafted onto the file system, so the OS treats it like any other part of the file system. You can use this for such things as using “mount bind in your fstab file” to put the Berkeley DB files for the server into their own file or just having a handy Linux formated backup file that is located on a different hard drive than the VDI file for your OS.
I personally have a small solid state drive (SSD), so I have my OS VDI file on the SSD with only a 512MB swap partition inside it to save space on the SSD. To augment the limited amount of swap space, I have another 8GB VDI file on my much larger normal hard drive, which acts as a Linux swap file. Linux allows for setting the priority of swap space, so it will first write to the fast 512MB on the SSD, and if that gets full it will use the slower, larger 8GB on the hard drive. Generally speaking, the swap space rarely gets used at all, even when compiling. There’s lots of powerful customization you can come up with here, if you’re willing to research on how to use it!

– Storage Tree: Click your FILENAME.vdi and if it is installed on an SSD, put a check in the Solid-state Drive box that pops up on the right side of the window.

Network Window > Adapter 1 Tab
– Attached to: Bridged Adapter

This will allow the virtual machine to get an IP address directly from your router, but we are going to setup a static ip address in Linix so that the game client can always find the server.

Shared Folders Window
– To save some sanity and storage space, you can have one folder to store the TRE files for both the game client and the server. It’s really easy to do by first sharing the game client folder in Windows, then accessing that shared folder from Linux in the virtual machine. Search for a guide on how to share a Windows folder if you don’t know how to do it. The Windows share will need to be given a name, I suggest calling it SWGEmu.

– Click the [+] button the right
– Folder Path: Other > Navigate to where you have SWGEmu installed > OK > OK

6. Install Debian Linux
– Make sure you are connected to the internet and that you can download upto 4GB of data!
– Select your VM and click the Start button
– In the Select Startup Disk window, navigate to where you saved the iso file for debian, select it, press Open, press Start

Optional:
For anyone who wants to use Debian 8 without running SystemD, now is the time to prevent its use. From the initial Debian welcome screen, use the keyboard arrow keys to select Graphical Install, hit the TAB key, and append the following preseed line at the end of the boot command:

preseed/late_command=”in-target apt-get install -y sysvinit-core”

This will allow the systemd libraries to be installed so that any software that needlessly depends upon it (bluetooth, pulse audio, etc…) will still work, but the system will but using the much faster and easier to maintain “sysV5 init” system.

– Use the keyboard arrow keys to select Graphical Install and hit the Enter key.
– Language: Select yours!
– Country: Select yours!
– Keyboard Config: American English is the default
– *wait a while*
– Host Name: swgemu (or any other single word you’d like)
– Domain name: leave it blank
– Root Password: 123456 or anything else you would like. 🙂
– Username: swgemu
– Username for account: swgemu
– User password: 123456 or anything else you would like. 🙂
– Timezone: Select yours!
– Partitioning: Guided – Use entire disk

If you know lots about Linux or you want a custom partion setup, this is the step where you can set that up. There are lots of guides on the internet to help you with this step. However, the default “Guided – Use entire disk” will suffice!

– Hard disk selection: It’s the VDI you created earlier, so just click continue.
– Partitioning: All files in one partition (recomended for new users)
– Partitioning: Finish partitioning and write changes to disk
– Warning Message: Select Yes, press Continue again. 🙂
– *wait a while*
– Configure Package Manager: Select your country
– FTP Mirror: ftp.[two letter contrycode].debian.org
– HTTP Proxy: Generally speaking, leave this blank. If you need to setup such a thing, look up how to do so on the internet.
– *wait a while*
– Popularity Contest: No
– Software Selection: Debian desktop environment, Xfce, standard system utilities

You could pick a different desktop environment, but the only ones I would personally use on a server or workspace VM are Xfce, MATE, or LXDE (in that order), because they don’t use a lot of resources. Xfce is GREAT, because it can be configured to look like any other OS, while also using very little RAM and CPU time.

– *wait a while*
– Grub boot loader: Yes
– Device for boot loader installation: /dev/sda (the VDI hard drive)
– Installation Complete: Continue and the system will reboot
– First system boot: login with swgemu / your password
– Toolbar config popup: Use default

The bottom panel with the large icons isn’t something I use, so I just delete it:
– Right click > Panel > Panel Preferences…
– Click the [-] button beside the Panel 2 drop down window to remove the panel.

Feel free to apply any other personalizations you want at this point. There are lots of guides on how to customize Xfce, with themes, artwork, etc.

Command Line and Software Info:

I will write out what to type. Press the Enter key after each command.
For installing software using the apt-get program, you must be or act as the root user. To access the root user, either log into that account or open a terminal window (Applications Menu > Terminal Emulator) and use the “su” command to become root in that window.

Linux uses a nifty system where most of the software uses a common set of libraries (of programming routines commonly referred to as “code”) that are available to the computer as whole, rather than stuffed into a single program’s folder. This is nice, because additional functionality can be added to the whole system by downloading (or making!) new libraries and fixing security issues means only updating the library in question, rather than updating every individual program that uses said library. Anyhow, at this point we will install all the libraries and programs that SWGEmu uses.

In Debian Linux, software is installed most often using the apt-get program on the command line. This will pull in pre-compiled and configured software that will work on your system from a repository created and maintained by the kind folks who work on Debian. Anything that we need that is not offered in the Debian repo will be downloaded from the main host, compiled, and installed. Sometimes this manual installation is required, because the Debian repo has an older or newer version of software than what is compatible with SWGEmu.

7. Upate the system:

apt-get update

8. Install the GCC Compiler, its toolchain, and dkms.

We need GCC to build SWGEmu, but before hand we will need to build other software, including the VirtualBox Guess Additions. The easiest way to install it in Debian is to use the shortcut:

apt-get install build-essential

DKMS is required for the VirtualBox Guest Additions:

apt-get install dkms

Users of other Linux distros will need to know the software installed by build-essential, so I have listed them below. You can reference the package names on the Debian repo website to learn exactly what versions of the software are being installed. You can get it using the tools provided to you in your distro of choice (YUM, RPM, Slack-Builds, source code, etc).

binutils dpkg-dev fakeroot g++ g++-4.9 gcc gcc-4.9 libalgorithm-diff-perl libalgorithm-diff-xs-perl libalgorithm-merge-perl libasan1 libatomic1 libc-dev-bin libc6-dev libcilkrts5 libdpkg-perl libfakeroot libfile-fcntllock-perl libgcc-4.9-dev libitm1 liblsan0 libstdc++-4.9-dev libtsan0 libubsan0 linux-libc-dev make manpages-dev

9. Install VirtualBox Guest Additions

Guest Additions allow copy/paste to work to and from the Windows/Linux as well as the ability to mount the Windows shared folder. Very handy to get this working now.

– VirtualBox Window Frame > Devices > Insert Guest Additions CD Image
– Double click on the CD icon that appears on the desktop
– In the file manager window click File > Open Terminal Here
– Type: su and press the Enter key. Enter the root user password and press the Enter key.
– Type: bash VboxLinuxAdditions.run and press the Enter key
– *wait a while*
– Reboot and log back in.

10. Install SWGEmu dependencies from the Debian repos.
– Open the command prompt and install the following packages using apt-get install
– Packages in brackets are installed automatically

gccxml
autoconf (automake autotools-dev)
libdb5.3-dev
gdb (gdb gdbserver libc6-dbg)
libtool (libltdl-dev)
libreadline-dev
libdb-dev
libssl-dev
libboost
openjdk-7-jre
openjdk-7-jre-headless
mysql-server-core-5.5 (libaio1)
mysql-server-5.5 (libdbd-mysql-perl libdbi-perl libhtml-template-perl libmysqlclient18 libterm-readkey-perl mysql-client-5.5 mysql-common)

– You will be prompted for a root password for the MySQL Server. Remember it! 12345678 works well.

libmysqlclient-dev
git
libboost-dev
(libboost-doc libboost1.55-doc libboost-atomic1.55-dev libboost-chrono1.55-dev libboost-context1.55-dev libboost-coroutine1.55-dev libboost-date-time1.55-dev libboost-exception1.55-dev libboost-filesystem1.55-dev libboost-graph1.55-dev libboost-graph-parallel1.55-dev libboost-iostreams1.55-dev libboost-locale1.55-dev libboost-log1.55-dev libboost-math1.55-dev libboost-mpi1.55-dev libboost-mpi-python1.55-dev libboost-program-options1.55-dev libboost-python1.55-dev libboost-random1.55-dev libboost-regex1.55-dev libboost-serialization1.55-dev libboost-signals1.55-dev libboost-system1.55-dev libboost-test1.55-dev libboost-thread1.55-dev libboost-timer1.55-dev libboost-wave1.55-dev libboost1.55-tools-dev libmpfrc++-dev libntl-dev)

Tip: libdb5.3 can be a funky one that is best installed with Aptitude rather than apt-get. May as well reinstall it now for good measure.

aptitude reinstall libdb5.3

Users of other distros can reference the Debian 8 package website for details on these packages.

11. Install Lua 5.3 from source.

Lua 5.3
– Open terminal and make a new junk folder called tmp

mkdir tmp
cd tmp

– Download

wget http://www.lua.org/ftp/lua-5.3.3.tar.gz

– Unpack

tar xzf lua-5.3.3.tar.gz

– Compile and install

cd lua-5.3.3
su
[enter root password]
make linux install

12. Clone the SWGEmu repos.

SWGEmu has two parts, “Core3” that contains all the game specific programming, and “MMOEngine” which handles more low level things. Core3 is open sourced, while MMOEngine is only partly so. We will use Git to clone the repositories after we create some directories to put them in.

cd ~
mkdir git
cd git
git clone http://review.swgemu.com/p/PublicEngine.git
*wait a while*
git clone http://review.swgemu.com/p/Core3.git
*wait a while*

You now have two new directories with the SWGEmu software:
/home/swgemu/git/Core3
/home/swgemu/git/PublicEngine

13. Configure the environment.

Some manual configuration is required so that the software can find all its parts when you compile it. We need to…

– Build the idl compiler and put it in the system path

cd PublicEngine/MMOEngine
make
chmod +x bin/idlc
su
[Enter system root password]
cp bin/idlc /usr/local/bin/idlc
exit (to leave the su “super user” level of the terminal)

– Add the idl compiler to the class path so Java can find it

echo ‘export CLASSPATH=”/home/swgemu/git/PublicEngine/MMOEngine/bin/idlc.jar”‘ >> /home/swgemu/.profile

– Reload your profile so it picks up the CLASSPATH without needing to reboot

source ~/.profile

– Add a symbolic link to MMOEngine so Core3 can find it

cd ~/git/Core3
ln -s ../PublicEngine/MMOEngine MMOEngine

14. Configure and build SWGEmu

In the terminal…

cd ~/git/Core3/MMOCoreORB
git checkout unstable
git pull
make config
make build

– If a dep is missing, as you will be able to acertian from the error message, install it and then…

make clean
make config
make build

15. Create a simple command line build script.

While you can continue to simply cd into the MMOCoreORB directory and type “make build” to compile the software, some folks prefer doin using Eclipse or a bash script to compile it. I prefer the bash script method, as you can type it from any location on the command line and times how long the compilation takes. The script I use was provided by Scurby.

Features:
– Tells how long the compilation took.
– Automatically maxes out multi-threaded compiliation

Usage:
build (runs what is needed to build!)
build configure (creates initial makefile config)
build clean (removes any previously compiled object code)
build idl (only recomiples the idl based code)

– Create the script file in a text editor

Application Menu > Accessories > Mousepad

Copy/Paste:

#!/bin/bash
#
# build – simple command line build script
#

cd ~/git/Core3/MMOCoreORB
export CLASSPATH=/home/swgemu/git/Core3/MMOEngine/bin/idlc.jar

EXTRA=$1

# Just in case they’ve not ran config yet
if [ ! -f build/unix/config.log ]; then
EXTRA=’config’
fi

case $EXTRA in
config ) make config; make clean ;;
clean ) make clean ;;
esac

# Always run build
if make -k build; then
echo “** BUILD SUCCESS IN $SECONDS SECOND(S) **”
exit 0
fi

# opps.
echo “** BUILD FAILED **”
exit 1

######## End of File

– Save the file

File > Save
Click swgemu on the left
Click the Create Folder button, name it bin, and hit the Enter key to enter the folder
Name: build
Click the save button

– Open a terminal and make the file exicutable

chmod +x ~/bin/build

– Reload your profile so it picks up you custom bin directory without needing to reboot

source ~/.profile

16. Install and configure Sudo

Until this point we have been using the su command to become the root or “super user” on the command line. If you would like, you can install a program called sudo which will allow you to issue single commands as root, rather than opening a whole terminal session as root. Both methods will ask you for the password, so really it’s a toss up as to which is faster. I’m having you install sudo to allow you to use an alias to mount the shared folder quickly.

su
[enter root password]
apt-get install sudo
visudo

– In the text file that opened in the program called nano, arrow down to the line below root ALL=(ALL:ALL) ALL and type

swgemu ALL=(ALL:ALL) ALL

– Save the file
Press CTL+X
Type y and hit enter
hit enter again

Now you can issue root (super user) only commands by typing: sudo [command]

17. Access the Windows shared folder.

Virtualbox can automatically mount the Windows shares it knows about, but I find that it makes the mount directory name something strange hard to redeemer. Therefore, I always manually mount it in /media/share! It’s easy to do it by typing a simple command every time you boot your server OS or you could have Linux do it automatically by adding the correct entries to the /etc/fstab file. I’ll show you how to mount it with a command and how to make an alias for the command.

– Create the destination directory.

sudo mkdir /media/share

– Create a handy alias for mounting called mountshare, assuming you named the Windows share SWGEmu.

echo “alias mountshare=’sudo mount -t vboxsf SWGEmu /media/share'” >> ~/.bashrc

– Reload your bashrc so it picks up you custom bin directory without needing to reboot

source ~/.bashrc

– Mount the share

mountshare
[enter root password when prompted]

– Check that it is mounted

df -h

You will see it listed as something like:
SWGEmu 383G 231G 152G 61% /media/share

18. Point the server to the TRE files.

This is pretty easy, as the TRE files are in the game folder in Windows and we mounted that in our Linux system at /media/share. So, we just need to edit the config file on the server.

– Open /home/swgemu/git/Core3/MMOCoreORB/bin/conf/config.lua

– Scroll down to TrePath = “/home/swgemu/Desktop/SWGEmu” and change it to

TrePath = “/media/share”

– Save the file and close it

19. Set a static IP Address

– In Windows open a command prompt

Start > Search Box > Type cmd > Hit the Enter Key

– Get your computer’s IP address

ipconfig

In the output, look for the heading Ethernet adapater Local Area Connection. Under it you will find your IPv4 address, which could look like 192.168.0.112 or 10.0.0.47 or 192.168.1.101 on most home networks. The fist three numbers in those chains are the network address and the last number is your computer on the network. Your router (also referred to as a ‘gateway’) is most often the first device on the network, so its number would look like 192.168.0.1 or 10.0.0.1 etc. For your Linux VM, you want to use a unique number that won’t be used by another device as well. 87 is a safe bet!

– In Linux, create the static IP address, being sure to edit the correct ip addresses for your network (you can 255.255.255.0 for the netmask 99.9% of the time).

Toolbar (Top-Right corner of the screen) > Right Click Network Icon > Edit Connections
Left Click Wired Connection 1 > Click Edit button
IPv4 Tab > Method: Select Manual
Click Add button beside the address and enter your network details, such as:

Address: 192.168.0.87
Netmask: 255.255.255.0
Gateway: 192.168.0.1
DNS Servers: 192.168.0.1

Click the save button
Close the network connection window
Left click on the Network icon on the toolbar and click Disconnect
Left click on the Network icon on the toolbar and click Wired connection 1 to reconnect using your new settings.

– If you’re using a different Linux disto that doesn’t have the network GUI you can try…

su
[Enter root password]
echo $’\niface eth0 inet static’ >> /etc/network/interfaces
echo “address 192.168.0.87” >> /etc/network/interfaces
echo “netmask 255.255.255.07” >> /etc/network/interfaces
echo “gateway 192.168.0.1” >> /etc/network/interfaces
/etc/init.d/networking reload

20. Configure the MySQL database server.

SWGEmu uses two database technologies, MySQL and Berkeley. The MySQL server is used to store account related information, such as character names, passwords, permission levels, and other various other bits of data. The majority of the “game data” that makes up the world, such as quest states, event timers, inventories, etc. is stored in a series of Berkeley database files. You don’t need to configure anything for the Berkeley DB, but you do need to setup the MySQL DB.

– Open up a terminal and type:

su
[Enter the system root password]
echo “mysql-server mysql-server/root_password password root” | debconf-set-selections
echo “mysql-server mysql-server/root_password_again password root” | debconf-set-selections
/etc/init.d/mysql start
exit (to exit the root prompt)

– Create the database
echo ‘CREATE DATABASE swgemu;’ | mysql -uroot -p123456

– Create the server user
echo ‘GRANT ALL ON *.* TO `swgemu`@`localhost` IDENTIFIED BY “123456”;’ | mysql -uroot -p123456

– Install the SWGEmu database templates

mysql -p123456 -e source -e ~/git/Core3/MMOCoreORB/sql/swgemu.sql;
mysql -p123456 swgemu -e source -e ~/git/Core3/MMOCoreORB/sql/datatables.sql;
mysql -p123456 swgemu -e source -e ~/git/Core3/MMOCoreORB/sql/mantis.sql;
mysql -p123456 swgemu -e source -e ~/git/Core3/MMOCoreORB/sql/updates/account_ips.sql;
mysql -p123456 swgemu -e source -e ~/git/Core3/MMOCoreORB/sql/updates/deletedcharacters_add_dbdeleted.sql;

– Update the server IP address in the SQL database

mysql -p123456 swgemu -v -e “update galaxy set address=’192.168.0.87′”

21. Boot the server for the first time.

I always use a simple bash script for this, so I can launch it from anywhere. All the script does is the same as what you can do in the terminal:

cd ~/git/Core3/MMOCoreORB/bin
./core3

If all went well, after a while the server output will read (# s) [Core] initialized

22. Log into the server with the game client to create an admin account.

– Edit you swgemu_longin.cfg file

loginServerAddress0=192.168.0.87

– Run the client

Double click SWGEmu.exe
User Name: swgemu
Password: 123456

– Log out before creating a character

– Save the server state

In the terminal where the server is running type save and hit enter. After a few seconds it will stop making output. Kill the server with CTL+C.

23. Give the swgemu account admin privileges

– Access the MySQL prompt and enter a query

mysql -p123456 swgemu
UPDATE swgemu.accounts SET admin_level=’15’ WHERE username=’swgemu’
exit

24. Reboot the server, log into the game, make a character.

You now have a functioning SWGEmu server, client, and in game admin account.

25. Optional: Install development software

If you plan on using this virtual machine as your development environment, then the following software might be helpful.

– MySQL management

apt-get install mysql-workbench

– Code merging software

apt-get install meld

– Git GUI software

apt-get install git-cola

And… that’s it! 🙂

Hondo – Meet the Hondo Housing System!

The Hondo Housing System is the result of my testing (over the last few months and at various other times over the years) various methods that allow players to live in NPC cities. There are so many ways to achieve this goal, each with their own positives and negatives. After much consideration, I chose to go the route of using outdoor terminals that allow players to purchase their houses at pre-defined locations, because I felt it would be easier for the players and more rewarding for both the players and the admin/world builders.

The system is comprised of sites, layouts, and terminals. Much like a construction site in the real world, a site in the HHS is a location in the world that is oriented facing an imaginary road. The terminal that controls the site is placed at the imaginary roadside. Sites can use one of a number of layouts and each layout contains one or more plots. Each plot contains one structure that physically fits inside its imaginary boundaries, again similar to a construction site in the real world.

Players use the system by opening the terminal menu, selecting an available plot, selecting their choice of building (from a list of ones the admin has made available for that plot), and purchasing the building. When they want to move out, they simply destroy the structure as they would any other player structure. Very straightforward.

Admins use the system by placing sites in desired locations, using either a layout that I have created or a layout they have tailor made to fit their desires for the site in question. Setup and customization is really easy once you get the hang of the work-flow.

For something a little different for “The Power of Text”, I will now point you to the detailed documentation file on GitHub and present you with the following series of videos I made to describe both the Hondo Housing System and the admin tools that I made. Enjoy!

Update March 2019:
I deleted my YouTube channel and unfortunately I neglected to backup these videos before hand. I could have sworn I had them on my hard drive, but I guess not… Ah well!

Hondo Housing System:


Admin Tools: