2019 February Dev Update

It’s time for our in-depth update for what was accomplished in February!


Functionality and UI

We added the ability to submit a direct bug report or send us feedback from within the game.

Heru created an event tag to enable or disable timers in events, as well as enable or disable the visibility of the timer.  This is critical functionality for the early events, but I’ve since found a lot of ways to add even more interesting possibilities in events.

All ships now respond to a hail whether they have something interesting to say or not.  This includes ships that you’ve already hailed.  Having a ship do nothing when hailed made it feel like the game was broken.  Now a (hopefully) somewhat amusing message appears.

A 'nothing to say' message
A ‘nothing to say’ message

Also, if you try to hail an abandoned ship you get different messages than ‘nothing to say,’ but you do always get a message.

As a result of this, we made it so that you can no longer hail ships in your own fleet; this reduces clutter in the context menu as well.

And similarly you can no longer start an event if a ship in it has been harvested.  Harvested ships now display a special message if you try to hail them.

The faction leader powers ‘Intimidate’ and ‘Diplomacy’ were given spinward and antispinward commands.

You now have to finish any crew transfers in progress before you can jump.

Heru added the ability for two mission objectives to appear on screen, since there were a few cases where that might happen, and rather than restrict you to only starting one, hey, if you want to pile on the difficulty I say go for it.  This fixed a few issues that we had in the development queue.

We finished up work on objectives (aka missionTitles).  At this point newMissionTitle, timers, missions and related functionality are complete.

Events that end when you jump now completely end just before you jump away.  From both a narrative and gameplay standpoint this is an improvement, and it also helped with some event spawning issues we were having.

Related to this, an event will only end once a player has hit the jump button and confirmed to leave any scouts behind.

We also made sure that the player is kept in tactical if an event ends based on jumping so they can see the result summary.

Similarly, ship actions like hail or evac are canceled when jumping, which if you timed it just right could occur after you jumped, causing much mayhem and consternation.

Battleship to the rescue!
Battleship to the rescue!

Heru also added functionality so that event dialogs from different events queued sequentially.  So if you have more than one event running they don’t step on each other.

Dialogs now expand to fit the text that is in them.  As a result of this, I adjusted the spacing in character and event summary dialogs.  They need just a couple more tweaks to get them where I want them.

Speaking of summary dialogs, the new showResult tag allows us to suppress the result summary dialog when they aren’t necessary.  There were quite a few events that would throw an empty summary box because there wasn’t anything worth summarizing.  So now players won’t be annoyed by having to click blank boxes.

Heru began work on replacing our auto-generated names with a combination of backer names and custom names, sorted by gender and faction.  Faction leader names are now complete; the rest will be finished shortly.

Dialogs for fleet events now start after the ships in them have been spawned, so their ‘story’ dialog now shows the ship instead of a blank box.

Our internal dictionary is now used to display ship names, so for example you see Enforcer instead of EmpireDestroyer whenever looking at that type of ship.

Lastly, but certainly not least, Heru began work on adding analytics to the game.  This is a very important pre-alpha task to complete, but we’ve left it until almost last.  He and I have put several days of work into this so far.  There is plenty more work to be done there, not the least on reporting.


Heru fixed an issue where the mission timer would disappear under certain conditions.  There were a number of variations of these and they’re all fixed now.

Heru removed upperLowerCase as a requirement for actions, so now fleetevent works as well as fleetEvent does, this covers off the occasional fat-fingering of events.

We had an issue where the timer would display even if it had been set not to display, but that was taken care of.

Dusted a sandship
Dusted a sandship

There was a chance that the wrong message could be displayed as a mission objective, but that has been fixed now.

Sometimes lifeboats wouldn’t respond with their ‘nothing to say’ message, but this works now.

There were two similar issues where a ship would respond with ‘nothing to say’ but actually, they did have something to say.  Heru squashed those too.

And Heru also fixed a related bug with hailing a ship with ‘nothing to say’ with more than one of your ships.

He also fixed another ‘nothing to say’ bug that required some very specific conditions to trigger.

Heru added additional safety checks for array indexes which covered off several problems, including a situation where the game threw an error message.

Ships equipped with a mining laser and issued a protect order were trying to attack warships (which shouldn’t work) and that’s been fixed now.

I fixed an incorrectly written event that was using multiple relationship conditions and in the process discovered that I can nest condition groups.  Which is awesome.  Because that means that I can easily design conditions that trigger if, say, a ship was disabled or destroyed or jury rigged — in a single trigger.  Previously I would have to create multiple triggers.  This fixed a variety of problems I was having in a particular type of event.

Related to this I was able to use nested conditions to fix another event that involved intimidating and destroying ships.

Heru made a tweak to hailing to cover off a difficult to reproduce bug where a certain kind of ship would stop near a target ship but would not hail.  That one was seriously hard to catch.

We had some annoying issues with selection, where, for example, if a ship you had selected was destroyed or left behind, it was never de-selected and shenanigans would ensue.  There were four different cases where this could happen.  I’m happy to say that selection is working in all cases now.

Our shipAttack event command was modified to cover off an edge case that would make it impossible to jump.

Heru adjusted the cooldown on Intimidate to start only when you actually intimidated a ship, instead of immediately on triggering.

I accidentally named two different events with the same name, which made me think we had a bug.  I know, you’d think I could remember the titles of all 400+ events.

We spent a fair amount of time adjusting the event spawning system to make sure that farmships were happening under the right conditions.  Leaving farmship events to be spawned purely RNG was causing problems, so some adjustments were made there.

There was a case where the scouting timer would disappear but Heru covered that off.

I discovered that the getShip command required an ‘isPlayer’ line, so I modified all the events to include that.  With things like this I’m really glad that I used a script to generate the events, because making changes is really pretty quick.

We briefly had an issue where preTrigger events wouldn’t start dialog windows, but that’s working good now.

When we added the showResult tag there were some cases where the result summary boxes wouldn’t show text and Heru fixed that.

There was a case where a mission timer would start when the event started instead of when the enableTimer was set to yes, but that’s working properly now.

Similarly, we had a problem where mission titles would also show up when the event started, which kind of gave things away.  It’s all working as designed.

A few events were not obeying the showResult: no command, but that’s been fixed.

Darn, I really needed that that fixer
Darn, I really needed that that fixer

The bug report form was tweaked a little to make sure that it closed every time that send was hit, and some other minor usability tweaks were done.

The shieldship now ‘attacks’ by closing to within shield range of its target, where it causes damage to all warships in range.

We briefly had a prefab decide to compress text vertically, but that was a quick fix.

I fixed up some triggers that weren’t working properly in a couple of events.

There was a tricky bug where only in certain conditions a ship would fail to move after given a hail command.  Getting that one to reproduce consistently may have been the most difficult bug to track down so far.  But I’m happy to say this is fixed now.

I discovered that if you don’t include a resultSummary tag, result summaries aren’t shown.  Who would have thought?

And I fixed an unrelated issue with the result summary not showing in the first event.

I found a couple of issues with the way weapon prices were being calculated and fixed those.

I made sure that stations weren’t being created with passengers by default; this was throwing off some events.

Events, Narrative and Balancing

I adjusted weapon prices to be consistent and more in line with their abilities.  This will be the last tweak on pricing I make until post-Alpha.

Because the early events give you an opportunity to easily improve relations, I decided it would be better to start the game with all factions being hostile to you.  I really like the way this plays now.

In the process of testing and playing, I continued to make small adjustments to numerous events.  There are too many changes to note, and most of the changes are minute, but there were a lot of them.

Welcoming a gatherer to the fleet
Welcoming a gatherer to the fleet

I added some interesting timer-related actions to events based on our new functionality.

I expanded 21 events to add triggers for intimidating ships.  Now the intimidate action should work in every possible case where it can be used.

I added triggers to several events that enabled more player actions to be recognized.  I continue to be so happy with the flexibility that the event system offers.

I added our new enableTimer action to all of the events with timers.  Again, the consistent structure of events made this a pretty quick process.  I don’t know what I’d do without VIM.

I added several ‘harvested’ messages. I also added several ‘nothing to say’ messages to ships, stations and lifeboats. I added quite a few messages that pop up if the player tries to hail the wrong kind of ship when they are in a hostile or neutral relationship.  Writing these messages is so fun it’s a really nice diversion from my other tasks, so I’m just doing a few at a time.  I’ll be adding more of them leading all the way up up to the full release.

I made quite a few adjustments to the attackShip events.  I won’t give away what happens, but I’m trying to differentiate the way that different factions respond when they’re hostile.

I created proper titles for some events that didn’t have them.  These were a few test events that ended up being good enough to include in the game.

I continued to make adjustments to the starting event, including adding an option to learn a little bit about relationships.  There is definitely more work there.  At the moment I’m concerned with there being too much text to start, but then again, we do have over 5,800 lines of dialog.

I added locationChanged to some events to ensure they ended.

I tested and expanded ‘1FA’ events, variants on the attackShip events in the game.  I’m very happy with them now.

I cleaned up and made some of the ship names more consistent and updated a bit of the lore. I also more clearly differentiated the different ‘refugee’ ships of the factions. These don’t take much effort but are so fun to do.

I added ‘dummy’ tags to ensure some very early events spawned when they needed to.  The flow of the very early game is quite different so I had to use a workaround to make sure that these early events properly spawned.  It took a bit of trial and error to find out a reliable method, but I have that down now.

I added intro dialogs to early lifeboat events, since it felt like your crew would alert you if a lifeboat was spotted.  I’m really interested to hear how people feel about these.  They generally only happen in the first few days of the game.

I continued to add early milk-run events and adjust existing events to make them friendlier in the early game.  Some of these events I created have to do with getting crew to Pact ships to introduce the crew/evac mechanic.

Sometimes you can start an event just as the harvesters are swooping in, and I do like the very tense feeling that happens when there are only seconds to complete a mission before the ships you are trying to rescue are overwhelmed by the harvesters.  To help make this kind of tension possible while opening up other interesting event actions I shifted some shipProtect commands to ROE weapons free.

Gained a faction leader!
Gained a faction leader!

UI/3D Modeling

Barring alpha/beta feedback I’m happy to say that there’s not much work remaining in UI.  For UI all I did was finalize what the credits screen should look like and make some minor adjustments to sizing, formatting and placement.

I made some adjustments to the eyes on many of the models, these are now complete.

I also fixed some symmetry issues with a few accessories.

I’m most of the way done with all of the faction accessories.  I made a lot of adjustments to all of the male corp accessories, and I added male beards and hair for the Pact faction.

I also greatly improved the Rover and Pact flightsuits, and I’m very happy with them now.

There’s some more work necessary on the Corp female hair and clothes.  I also have to add more hairstyles to the Irenic male, and add detail to the Empire clothing.  That should complete all remaining work on the characters.

Sacrificing a frigate!
Sacrificing a frigate!

What’s remaining

So here is the latest update on where we stand until we reach alpha.  

DISCLAIMER: keep in mind that there are many smaller tasks that I haven’t included and things may come up that require attention.  We may decide to add things from the wishlist, or move things from beta to alpha or vice-versa.  We will certainly encounter more bugs.  None of this includes marketing tasks.  And we have more to do between alpha and beta, including the ‘end game.’

With the above disclaimer in mind, here is the list of major functionality remaining before alpha: We have one more scheduled UI element to complete.  We are on the cusp of finishing the game over/restart cycle; next will be saving and restoring the game state.  Analytics will need to be completed.  After all the bugs are fixed we will turn to optimizing.  In the meantime a few more events will need to be added.

It should be clear from reading this that we’re putting a lot of time into bug fixing.  I’ve grouped the bugs into related areas; we’ll be tackling formation bugs first.

I am deeply grateful for the thoughtful messages and positivity.  This has been a really long road, much longer than anyone expected, and I think we have the best backers of any game on Kickstarter.  We are nearly there, and I am so excited to share XO with you.

And speaking of sharing, backer Kevin McCarthy shared some great XO fan fiction with me and I think I’m going to have to design a couple of events based on it!  Be sure to check it out.  Nice work Kevin!

Brian Jamison

Creative Director, XO

Jumpdrive Studios

Portland Oregon