2019 March Dev Update

Welcome to our XO development update for March 2019!

Functionality and UI

Building a fleet
Building a fleet

By far and away our biggest accomplishment was the implementation of saving and restoring games.  This is one of those features that sounds simple, but in reality is quite complex.  Ship positions including acceleration and rotation, formations, ship and planet names, equipment, events and the state of each event, scouting reports, time and timers, resources, even weapon details like recharge state, missiles in flight and lasers being fired all had to be saved.  For various reasons we opted not to preserve the state of dialogs, so you can only save after a dialog has been completed.

Now you can save and quit the game at almost any time, and the game automatically resumes when you play again.  There is only one save; the game is still permadeath.  But now you can resume where you left off.

In the same vein we now have a completely functional final ‘game over’ and restart cycle.  Once the game is over the game stops playing after a few seconds, allowing for a slightly more dramatic end as the battleship tumbles away.

Yes, there is still more work to do on XO.  But these were the last meaningful pieces of functionality remaining before alpha.  These two tasks just kept taking more and more time to implement – basically Heru worked on them the entire month.

And we are certain to require more testing and bug fixing around saved games.  For example, we can erase a saved game using Unity, but that will need to be added to the options screen before alpha.

How to lose a farmship
How to lose a farmship

Earlier in the month I added several more final sounds into the game.

Our friends at SkewSound delivered some additional sounds – less than five remain.  SkewSound has been so great to work with throughout this project, and they continue to deliver great sound effects.  Those remaining sounds and a handful more will then need to be added to the game which will require a bit of time from Heru.

Character names now match the gender of the character portrait.  Each faction also now has names appropriate for their faction, making them easier to identify and helping to differentiate the factions.

I added a few more character accessories, rounding out the Corps.  The only things remaining are a few more hair styles for Irenic males.

Ships that are disabled now have their orders cleared.  This covers off the case where you’d fix an abandoned and disabled ship that you were previously fighting, then crew it, and then that ship would resume firing at you!

Similarly, abandoned ships were responding to triggers in events and taking actions, which didn’t make a lot of sense.  Now abandoned ships properly ignore all orders.

We had to refactor the credits screen as it wasn’t working quite right.  We use a two-column format now, which makes a lot more sense.  I put together a mockup, Heru implemented it, and I made some adjustments.  I’m happy with it now.

I also added a ‘made with’ section to the credits, because without a lot of amazing (and largely free) tools, this would have been a lot harder and a lot more expensive to make.

Some peculiarities of our game made it a little tricky to load thousands of lines of text (the names of all you wonderful backers!) so we had to play some tricks to get that working right, too.

I made some small improvements to our font and regenerated the asset in Unity.

We pushed out the arrival time of the Harvesters to give new players some breathing room and set the tone better, which needed a little bit of code work from Heru.

The evacuable tag’s functionality was expanded to include all possible ships with crew, whether crewed, part of your fleet, or disabled.  This gives me much greater flexibility in events.

I added some marketing text to the screen in preparation for alpha.

Ships now display their Official Name instead of their programmatic name in the story dialog.  For example, PactCache now displays as Emergency Cache.

Defending the battleship with a minefield
Defending the battleship with a minefield

Testing and Bugs

I spent quite a lot of time playtesting last month, mostly the new save game function but also testing specific events and all of their conditions, making tweaks and adjustments along the way.  I made many, many small adjustments so I’m just highlighting the larger ones here.

When a bug comes up, it’s surprisingly time consuming to make it a ‘reproducible’ bug.  And unless we can reproduce the bug, it is quite hard to do anything about it.  So this process consumed about half of my time in March.  I expect it to take even more of my time in April.

A good example of one of these bugs was one that only happened when you had an Irenic faction leader in your fleet and were defending from Harvester fighters.  That one was no picnic to track down, but I’m happy to say it has been nuked.

One of many bugs fixed with save games was that a new game wasn’t killing all events in progress, but we have a nice clean restart now.

Another one caused the first mission not to start on a new game under certain circumstances, but that’s fixed.

Briefly I could only save one game (ever) but that’s been fixed.  But that caused errors under certain conditions, which Heru then fixed.

About as briefly, I couldn’t jump when I started a new game.  Then new games wouldn’t overwrite the old saved game, but that was also fixed.

Then of course, I couldn’t restore a saved game.  Heru got that working again.

A good example of the complexity of saved games is this bug, now fixed, that would incorrectly restore lifeboats from any faction with pact lifeboats.

Save games weren’t saving the evacuable state of a ship, leading to problems with resumed events.  That’s working now.

New games weren’t always resetting the relationship state, but that works every time now.

I fixed a few special events that weren’t starting (therefore their triggers weren’t triggering) by making sure they automatically started.

For all of these events I also added location conditions to them so they’d end when the player jumped.

There were some minor issues with the credits not coming up quickly enough and in some cases truncating characters.  That’s all fixed.

Another minor issue with the credits had them overlapping in rare cases, but Heru fixed that too.

Defending the main fleet with a minefield
Defending the main fleet with a minefield

I fixed an issue where habitable worlds were being labeled earth.

There were a group of events that needed their preTrigger actions moved to the init section to avoid conflicts, so I did that.

Some day 2 events were not appearing as they should on day 2.  I needed to add certain triggers to make sure they would come up.  I did that too.

There were a number of early events that I’d created that weren’t showing up, this was due to the way that our events are structured.  Changing the way that events showed up would create bigger problems later in the game, so we decided to explore other options.  After some experimentation, adding a faux ship to the event solved this problem without requiring any change to code.

We had an issue where events were starting in the same hemisphere, related to how fleet events were being parsed.  This was another one of those elusive bugs.  They now appear one in each hemisphere as designed again.

There was a bug that occurred when clicking on a dialog when the main menu was displayed that is gone now.

For a while Harvesters were arriving when they shouldn’t, but that’s been locked down hard.

We’ve had to polish mission objectives and their display, making sure they go away when they should, display when they should, and show a timer when they should.  About a dozen different bugs popped up around this one.

There was a case where the evacuate action would appear instead of the crew action which was fixed.  They’re the same action, but I think the context helps set what can and can’t be done on a given ship, so it is important to me that the labels are consistent.

Heru fixed a rare lockup bug that occured if you tried to bring up the menu in the Windows version of the game.

I had to make some changes to event timing to make sure you wouldn’t jump in and have no events in the first few jumps of a game.

I cleaned up an overlapping crewCount condition in several early game events that was unnecessary.

I made some adjustments to the resultSummary dialog to fix a recurring Z-fighting issue.

A couple events had duplicate text, so I replaced them with the correct text.

I accidentally borked my project directory and had to spend a few hours manually copying changes.  Thank goodness for source control, even though Unity doesn’t always play well with it.

We had a bug where a frigate with an Irenic leader wouldn’t display the diplomacy action and I fixed that.

We worked through some issues with farmship events not spawning when they should.  It took a bit of back and forth, adjusting both events and code, but I’m very happy to say that this is now working very well and just as designed.

I did a thorough check of all ship classes, all ships and their details.  All is good.

Those mines are unlikely to help in this situation
Those mines are unlikely to help in this situation

Balance and Narrative

I was feeling like early game had way too much dead time, and plotting was one of the big culprits.  So plotting time is now based on the number of ships in your fleet, meaning you plot very fast when alone but once you get a big fleet it starts to take a meaningful amount of time.  It took some fiddling to get the balance right, but now that I’ve played several times with larger fleets of 20+ ships I really like the tension of the longer plot times coupled with the fast jumps early game.

All of the early game events were modified to bring event ships in much, much closer to your battleship.  Later in the game you have many things to do while your ships fly out to engage with event ships, but in the early game it was just… boring.  So that’s been fixed.

I enabled ice melting for the Empire mining ship, albeit very slowly.  This ship’s advantage is fast ore mining, but it felt too punitive to disable ice melting entirely.

The range of the intimidate faction leader power was greatly increased, making it less likely your ship would take a pounding when intimidating.

I added failure cases and text for an event ominously titled ‘the detonation’ — hmmm, I wonder what that one is about?

I went through all of the events and made sure they had unique titles.  I’d been using the same title for most attackship events and that was messing with other things in the game.

I also combed through all the fleet events to make sure they really should be fleet events, converting a handful to normal events.  I got a little over-excited when fleet events became possible.

Final Pact characters and character names
Final Pact characters and character names

I continued to flesh out the early game, adding narrative and milk-run events.  This was the second largest use of my time in March.  I’m happier with the variety of early events, early progression, and the overall flow of the early game now.

Some of what I had to do with the early events involved workarounds and lots of testing to make sure they spawned properly, because although the early events greatly influence the way each game plays out, they spawn and behave differently than later game events.  For one thing, they have a different pace and narrative.  The early events also need to provide teaching through opportunity and exploration.  The trick has been to make the early events contain meaningful choices as well as teach by doing rather than by tutorial or hand-holding.

I’ll be making minor changes to purely narrative events, possibly adding more events just for variety, and of course probably doing some bug fixes but otherwise the early game is finished.

I adjusted the ‘harvested’ messages you get if you try to hail a ship that has been harvested to be stories rather than dialog.  It didn’t make sense that a character dialog could pop up that you couldn’t interact with since… you can’t.

I added a trigger that allowed for attackship events to be turned away by the player, but I won’t spoil how to do it here.

I updated the triggers in some older events so that they had more flexibility.

I added lore for each of the faction caches.

I extended some events with nested conditions and added additional triggers.

I added a standardized occurIf block of conditions to help early game and certain kinds of events (like those with lifeboats) to make more sense.  So now for example you won’t come across a lifeboat sitting in front of a station.

Similarly, you’ll no longer come across two trade events at the same destination.  At the moment I am considering adding a rule about the frequency of trading.  Right now they are purely RNG (randomly generated) and sometimes it’s a little too spotty.

I’m still polishing the overall narrative feeling thanks to feedback I’ve gotten from my good friend Josh Partlow who has worked with me in the past on a lot of projects, game and otherwise.  Thanks Josh!

Shieldships bracketing a Rover station
Shieldships bracketing a Rover station

UI/3D modeling

Sometimes I need to take a break, and I find 3D modeling or polishing the UI a great way to do that. So I took a breather for an hour one day and replaced the solid up/down arrow with a more thematically-appropriate one, based on the courseline arrows.  I also adjusted the position on the screen.  I like it much better.

In preparation for some post-alpha UI improvements, I created the projectile animations for hailing, diplomacy and intimidate.

I modified the position of some UI elements so they’d look better in various resolutions.  That’ll continue to need some tweaks but we are really getting there.

The credits needed a number of small visual adjustments, so I put those in place.

I added opaque backgrounds to most of the UI elements that contain text to improve their readability.  This really helps when trying to view against the planet.

The weapon detail box needed some tweaks, so I tweaked.

Diplomacy was one of the final actions in the game requiring an animation, so I completed that and added it to the game.

I made some adjustments to the trade weapon detail view which was dropping some important bits.

What’s remaining

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

DISCLAIMER: 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.  And we have more to do between alpha and beta, including the ‘end game.’

With the above disclaimer in mind, there is only one remaining piece of major functionality remaining: analytics.  Currently 11/19 tasks on that goal are finished.  However, for the next few weeks we will be working almost exclusively on bugs. We have tens of bugs to fix, and I do continue to identify more.  For several days in April Heru and I will be working face to face so that will hopefully speed up that process.

There are also a handful of small tasks, mostly UI polish and adding sound effects, that need to be completed.  After all this we will turn to optimizing.  During this entire time I’ll be working on the alpha trailer and also adding narrative and political/relationship fleet events.

It has been so exciting to see the last pieces come into place.  I’m full of energy and enthusiasm, and I am even more excited to get feedback from you alpha testers.  We will work hard to eradicate these bugs and get the game tuned for you.  In the meantime, thank you deeply for your patience and support.

Brian Jamison

Creative Director, XO

Jumpdrive Studios

Portland, Oregon