2018 April Dev Update

A farmship in need of rescue
A farmship in need of rescue


Here’s what we got done on XO last month:

Overall, the game just got a lot harder to play. And that’s a good thing.

The player must now have the right kind of relationship with a ship in order to persuade it to join your fleet (using peaceful means). You can always convince a refugee to join your fleet — this improves your relationship with that faction. But you can’t even begin a conversation, let alone bring the much more valuable industrial ships into your fleet unless you have at least a neutral relationship. And those warships? You’d better be friendly with them if you want a chance to bring their awesome firepower under your command.


Nice barge, too bad they're enemies.
Nice barge, too bad they’re enemies.


And some of those enemy warships will now seek you out and attack if you come across them. That’s because I’ve been adding attack events that only occur if you become enemies with a given faction. The new relationship trigger Heru added to our event system makes that possible.

Speaking of events, I continue to create them. We’re up to about 80 events in the game now. I’m not going to give anything away except that I’m liking how the decisions the player makes in events have a direct effect on what is possible in the game. I’m also very happy with the range of choices and consequences.

Weapon slots were fully implemented on ships, allowing us to specify how many weapons a given ship can have as well as lock the types of weapons you can fit to a given ship based on their faction (curse those proprietary weapon standards!). This was the last piece of functionality we needed to complete before we could start on trade.

And implement trade is just what Heru did. Most of the month was spent on this and I’m happy to say that it’s nearly complete. Functionally, all that remains for trade, apart from a little polish, is to add crews — which is being worked on as I write this now.

Trade in XO is an event action, meaning I can add trade to any event in the game. I can specify whether or not the items on offer are free or require the player to give ore for them. And importantly, I can set what is available to trade on an event-by-event basis – weapons, resources, plans, crew, even ships!


Trading.  It's a thing.
Trading. It’s a thing.


And now at long last I’ve started to add trade events… and what a massive difference it makes to the experience! Now that the player can add and upgrade weapons in the game, I am turning more attention to balancing the overall flow.

To this end, I adjusted upward the amount of ore enemy warships carry to ensure they have enough ammo for a good long battle. And I tweaked the weapon and plan costs, and added ore bonuses for a number of outcomes in many events so that the player can afford to buy things.

Related to trade, Heru also added stations to the game. Stations are similar to ships except they don’t jump, cannot be part of your fleet, and sit in a fixed orbit. We already have several station models, including the new Cache I created. I plan to create more.


A station tied to a trading event
A station tied to a trading event


Heru tracked down an issue we suddenly started having that was causing the game to be extremely slow on startup. This is one of those cases where the underlying architecture can save the day. It turns out that the special tags I was using to programmatically create events were the culprit — because the text was empty. Fortunately, the system was designed so that multiple text files are combined into a master dictionary file. I only had to modify my event creation script to remove the tags from the master dictionary file — and the problem went away. Since the source files still contain the empty tags I can still use old events as templates for new ones. This may sound small, but it could have added a lot of time to development.

Heru continued to improve and refine the combat logic started last month and extended it to missiles. Fending off large waves of fighters or a big missile attack now works exactly as expected.


A mixed fleet punishing an incoming wave of fighters
A mixed fleet punishing an incoming wave of fighters


Several other combat and action edge cases were fixed – for example where an attack order wasn’t followed by a ship, or a hold fire order wasn’t followed under certain circumstances has been corrected.

I continued building out accessories for the characters you encounter in the game. All factions now have a small number of unique accessories that help to identify them. I’m really liking our “Mr. Potatohead” system for differentiating characters and how the accessories are working with each other. I also made corrections to the way those assets were being stored which made it easier for me to properly position them on each of the base character heads. Heru still needs to add the functionality to restrict faction-specific accessories to a given character, but the art assets are now there to do that.

I added names for our new ships, and some old ships too.

Heru cleaned up how we were handling explosions so they were working better. He also fixed an issue where the second ship you selected was moving more slowly than it should.

By design, events at each destination time out once created. So we did some work to improve scouting, adjusting scouting reports to expire when the event does. This fixed an issue where you’d have a scouting report that didn’t match because you took too long to jump to your destination.

Also related to scouting, Harvesters and enemy ships no longer keep targeting a ship that has jumped away. Previously attackers would wait around for the ship to return from scouting and resume their attack immediately when it returned. The fix makes scouting a tactical option to consider when a ship is in jeopardy.


A cache providing free items
A cache providing free items


Some Z-fighting issues in the user interface were cleaned up with formations and the fleet information windows.

Heru also implemented mining lasers. This was the second largest bit of functionality to be added in April. They took a lot of work to get right. As you may have guessed, mining lasers are primarily used to mine ore, which they do automatically if ore is present on a given planet. Well, the ship has to be in range, too — it’s possible to put a mining ship out of range in a formation!

But they’re weapons too.  Mining lasers are too weak to damage warships. But they can disable industrial ships, refugee ships, missiles, and importantly… Harvester fighters.

There’s a third use for the mining laser. In XO, water is collected automatically. But on low-water worlds the amount you collect won’t keep up with use, leading to water riots and ships leaving your fleet. If you have a ship with a mining laser you can melt ice to increase your water supply. Of course, if you’re melting ice you cannot collect ore or defend from Harvesters, so there’s that to consider.


Mining ships and extractors melting ice
Mining ships and extractors melting ice


So now that we have the mining laser implemented I can begin to create pirate events where mining laser-equipped ships will try to hijack your undefended industrial and refugee ships. That’s something I’ve been looking forward to for a long time.

Well that covers what we accomplished last month!