In April we turned almost exclusively to bug fixing. And it was a big, big month for bug fixing.
We started the month with 59 known bugs. Over the month I added 49 more bugs to the list. And in total last month no less than 99 bugs were eliminated, leaving only 9 known bugs remaining!
That is an astonishing amount of bug fixing in one month. I really have to give Heru massive credit for this pace – he was an absolute machine as we worked side by side fixing and testing bugs. This really speaks to his talent as a developer.
So I can’t say that the game will be bug-free for alpha, but I’m really happy with where we stand right now. Heru is working on the 9 remaining known bugs now.
Functionality
Heru added an isMission override to allow me to make sure certain kinds of events that had mission-like functionality didn’t trigger our mission rules. This is mostly to hold the narrative together early game.
Some of our bug fixing speed last month came from adding the ability to save games as text files and load that saved game in the Unity editor. This enabled me to save a replicable bug, attach the save game with the bug to a bug report, and for Heru to skip all the tedious bug replication steps. This also made it a lot easier for me to test that the bug was fixed. I always made sure that I couldn’t reproduce the bug the long way once a bug was fixed, though.
Spinward and antispinward actions were given to the nuke action.
Autosave was added which saves the game after each jump.
It is now no longer possible to rescue Harvester crews from their ships.
You can now only store more ore than your total capacity during trade (when you might, for example, sell one of your items and temporarily exceed your storage capacity).
Nukes now only launch when specifically directed by the player and not when auto-defending. That’s because nukes have a large area of effect and a high ore cost to use.
The fleet info list now updates during water riots.
And you can now seize a disabled ship with the Auxiliary even if you don’t have enough ore to fix it.
Bug Fixing
Note: because we fixed so many bugs I’m keeping most very brief in this month’s update.
Formation boxes disappearing – fixed.
In the galactic map, hovering unscouted destinations out of range gave incorrect resource readings.
Colors on the galactic map were not being updated.
Harvesters were not latching on ships if they were disabled by a fighter while in formation.
The self destruct action was propagating to the battleship when a frigate in a formation was abandoned, making it possible to self-destruct the battleship.
The formation placement grid was scrolling when a player scrolled the fleet list.
Formations were briefly not saving.
If you had a ship selected from the fleet info list, if you edited a formation that ship was in, the selected ship was dropped from the formation.
A bug that prevented jumping in the Windows build of the game under certain circumstances was fixed.
Save game restores were not recognizing event triggers.
Saving threw an error under certain circumstances.
The water level was not being restored if you had less than 5 water.
Restoring games sometimes threw water riots.
And another kind of water restore issue was fixed.
Save games didn’t always save the relationship state.
Formation buttons disappeared in some cases.
You could drop a ship on top of another ship in a formation.
Restoring a game from a specific event was not saving the state of jump.
After restarting from game over with a specific event, you weren’t able to plot jumps.
Jumping wasn’t clearing a second mission if two missions were running and both needed to be cleared.
A specific event wasn’t triggering when a certain kind of ship was destroyed.
New game wasn’t starting the first event when restarted from the main menu in Windows.
Then later I broke the first event and had to make some changes to it so it would properly start.
Saving during some missions was throwing an error.
Restoring accidentally swapped the health of one ship to the player’s battleship.
Once in a while I catch a minor issue with an event, usually an incorrect or missing relationship change, and I caught and fixed several of those during our epic bug fixing run.
Similarly, I sometimes catch a spelling error or mis-capitalized word. I found and fixed a couple of those too.
I caught and fixed some issues with events where mission tags weren’t clearing after the event had finished.
We had an error being thrown related to evacuating crew that is now fixed.
A long-standing bug was fixed related to formations where you couldn’t place a ship in a spot that was previously held by another ship unless you closed and re-opened the formation edit window.
There was an error that cropped up when you added an extractor to a formation when the extractor had seized a disabled ship.
Issuing an abort follow command to a formation was throwing an error.
A similar bug resurfaced later but it was due to different causes.
Restoring saved games wasn’t always using the correct color of ship.
Formation attack orders were not clearing after a formation retreat order was given.
I fixed some minor bugs with a certain type of event class.
Some changes briefly made it impossible for me to create Windows builds of the game.
A ship incorrectly closed range in a battle instead of trying remain at weapon range.
An older bug briefly resurfaced where multiple lasers would attack a single missile or fighter.
There were some cases where follow would not have the desired effect with formations.
I made sure that Harvester ships would self destruct when disabled.
Save games were not properly restoring some types of Harvester ships.
In some circumstances the use of conditional choices wasn’t properly updating the choice index, leading to incorrect choices.
A specific saved game was throwing an error.
A complex shipExists condition was causing an event not to start.
We’re now able to equip mining lasers to Empire mining ships, Corp ships that can carry them, and Rover getters and fixers. Logic was previously limiting them to Pact warships.
There was a problem with trade prices not being calculated as they were designed, but no longer.
For a long time we had a sound effect that played every time certain actions were successful, which was really helpful for testing. For example, a ship that was protecting another ship would periodically make a sound. But that’s not a good thing for players, so we removed those sounds.
Nuking a ship using an antispinward attack was throwing errors.
Formation ships weren’t saving their positions correctly in all cases.
If you had an Auxiliary ship in a formation and started it repairing, it would fall out of formation.
Autosave was not restoring the shield of shieldships in the player fleet.
Saving immediately after ending the first mission caused the game to throw an error.
Character names stopped randomizing for a bit.
A specific event wasn’t ending when it should and I had to make some changes to it.
Corp captain titles were not propagating.
Molten, Rocky and Ice worlds were not displaying their text labels in starmap.
Certain attack angles would cause ships to fly by their targets when ordered to attack instead of stopping within range.
The sound effects on/off state was not being properly displayed in the options menu.
Using the mouse wheel to select ships in your fleet was skipping disabled ships in your fleet.
Selling a mine and then equipping a mine was giving multiple lay minefield actions in the contextual actions menu.
Scanning Harvester ships was throwing an error.
Later a different problem occurred that also prevented scanning Harvester ships.
Double-nested condition groups were prematurely ending events.
A failIf condition was incorrectly triggering.
Attempting spinward intimidate failed in some cases.
Letting the timer run out on a mission that relied on rescuing a lifeboat was throwing an error.
The shipAttack action was causing missile frigates to stop moving and fail to be intimidated.
Briefly autosave threw a game-ending error.
Shield strength bars are now properly displaying above all shields.
You can now equip upgraded shields to Irenic gatherers
Gatherers no longer display a strange baby shield when their shields are turned off.
Disabled ships with shields now no longer show their shield bars.
In particular cases, formations were not hailing ships.
It is now possible to fix abandoned disabled Corp warships.
The Haggle action now only appears when there is a Corp faction leader in the player’s fleet.
Abandoned ships now show their correct crew count.
There were some strange UI issues with crew/passenger text that has been corrected.
There were some strange issues with phantom crew showing up on stations that have been eliminated.
Jumping was throwing some incorrect event text tags that I fixed up.
Restoring a specific save game was throwing a bug that halted the game.
Stations now only show their evacuable passengers, never the operating crew.
Heru fixed a bug related to transferring crew back and forth that caused some problems.
Some cases of crewing spinward wasn’t working right.
Sometimes passengers would incorrectly be displayed as crew.
One of the Empire ships wasn’t displaying its title.
Some bugs that were logged long ago were fixed by other things. Such was the case for a bug where a battleship being destroyed wouldn’t cause a game over if it were destroyed while being repaired.
The occurIf condition needed to be tweaked to properly work with ^shipExists conditions.
I found a way to trick the game into letting me use a different ship than was doing the rescue to berth the crew, but that was fixed.
During a water riot, if you dropped a ship that was selected it remained selected (forever). That’s no longer a problem.
Briefly you could dismiss your own battleship in a water riot. Not anymore.
The trade dialog no longer extends past the visible screen; we have limited the maximum number of trade items available at any given time.
A lost scout now stops and removes the scouting timer.
Ships now retain their proper color when taking damage.
An event was throwing an error relating to ore, but that was squashed.
Haggle no longer appears on crew transfers or transmogrify dialogs.
Launching a nuke at a Harvester carrier no longer locks the Windows version of the game.
shipExists no longer triggers incorrectly if a ship was in your fleet at one point but has since left or been lost.
There was a case where the battleship could be made to mine ore, but no more.
Ships that are scouting now properly update the index of the fleet during trade actions.
Equipping no longer sometimes doubles the purchase cost.
Haggling prices in the Windows build now allows you to buy the lower cost item.
Fleet events weren’t spawning because of an issue with an event, but they’re working as designed now.
Ships given the protect order no longer run away.
Save games now save damage to event ships and lifeboats.
Heru fixed a bug that prevented you from saving after a ship in your formation took damage.
‘Earth’ labels were removed from the galactic map, after sneaking in again.
Logic for occurIf was tightened up to ensure certain events did not spawn side by side.
I was using an incorrect ship ID in one of the events and fixed that.
UI
I widened the shipname display in the ship scanning window.
The camera was modified not to move down to the grid by default, but instead stay more in an isometric-style view. You can still go down to to the grid manually.
Narrative, Events and Balance
In XO we randomize some things like faction distribution, but generally we rely on proceduralization to ‘randomize according to rules’ to balance the game. It is important to me that as a player, failure isn’t completely arbitrary and that one can always trace back failure to a bad decision or lack of preparation. So after a lot of playtesting, I created some events to account for specific game/resource conditions that I felt were needed and give some recovery options.
When I test an event I have to try out all the possible options, which is a lot of fun. Sometimes I’ll think about a new way to approach an event and then will add functionality to support that action. In one of our more complex events I did just that.
And in another event type I added some different types of actions based on the player having a certain type of ship in their fleet.
I added some unique trade caches for some edge cases in the early game.
I adjusted the distance for the submedium range as there were cases where a shieldship could automatically start damaging ships when events started.
I added isMission functionality to a number of events that needed it, including the Harvester intro events. I also added missionTitles to all the events I needed to. And I went over all the mission events and made sure that indeed they should be missions.
I don’t want to give anything away but with a little creativity I was able to finally pull off one of the event types that I consider crucial for narrative and gameplay without the need to add additional functionality. This is one of those events that was always in my mind as being necessary for the game from day one. And finally it works, and just how I want it.
I expanded out the critical Harvester intro events, extending them and bracketing them with timers so that it should now be impossible to play without having some explanation of the Harvesters. This took over a week of consistent testing, tweaking and adjustment. I’ll be very interested to see if anyone can find out how to play without triggering an intro now.
As part of some changes to the way that missions were determined, I moved any ships that were spawned in the preTrigger section to the Init section of the event.
I made an adjustment as to when waterless worlds begin to appear.
I added crewCount conditions to all of the early station events and many mid game events as well.
I continued to refine the early game narrative, focusing it more on early game and leaving mid/late game narrative out almost completely.
I tested that getting faction leaders was working properly. It is. I thought there might be a way to trick the game into giving you a faction leader, but it wasn’t working, at least they way I tried.
I added and tested a wider number of intimidate actions to events.
I added narrative to almost all of the events that had lifeboat rescues. There may still be a couple that don’t have narrative yet.
I added a case for evacuating your own fleet ship to a certain event where it made sense.
I added more extensive jury rig actions to an event where that was likely.
I adjusted the timing of repair-related events to appear later in the game, including caches.
I added disabled triggers for abandoned ships in some events.
I expanded an event to give more defending actions to a group of ships.
I made two different passes on our events and added logic to properly blank out mission titles when they needed to be blank.
I changed the narrative on one of the discovery events to match the new early game narrative.
I tightened up the narrative in one of the combat missions, as well as the event timers to increase tension.
What’s remaining
So 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, which still stands at 11/19 items complete. Heru is working on final adjustments to movement and final improvements to formation movement before moving to that.
We also have 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. I do not know how long we will need to spend optimizing the game, but days to weeks seems like a reasonable range.
Lastly, I began work on the alpha trailer and have sent out a rough cut to friends in the game industry and gotten great feedback. When it is ready (as with everything XO) I will share it here first. So far it has been extremely challenging to keep it under one minute 20 seconds, but I like how it is shaping up.
Our very long road to alpha is almost done. Thank you so much for the support and the positive vibes, it really does make a difference.
Our very long road to alpha is almost done. Thank you so much for the support and the positive vibes, it really does make a difference.
Brian Jamison
Creative Director, XO
Jumpdrive Studios
Portland, Oregon