We continued making good progress working full time on XO in March. Here’s what we accomplished:
Alexander finished out ship icons for the Empire destroyer and gunboat.
Heru added three important new features to our events system – Triggers, locationChanged and endEvent. Triggers allow us to set up conditions, and if they are fulfilled they trigger a sequence of actions.
This allowed me to flesh out our events even more. For example, with all of our events that involved combat, I set triggers to end the mission (endEvent) in failure if you jump away (locationChanged) before the mission is completed, or the ship you are trying to protect gets disabled (using existing actions).
It’s been a while since we’ve talked about it, but we use software tests to ensure that various parts of the game are working properly. Well, we added a test to verify that the Harvesters are properly latching on and disabling ships.
We continued to refine movement, including how a ship reaches its target – for example how repair ships latch on to other ships so they can effect repairs. It’s nearly perfect now, and we updated our closing and pursuing tests to reflect that. And since the repair action is fully completed, we updated our software tests for repair ships too.
We added another test to ensure that ships flying in a formation would stay at the acceleration and turn rate of the slowest ship in the fleet so they would stay in formation.
Heru added some basic intelligence to ships firing on Harvester swarms, ensuring that multiple shots are not taken on the same ship, wasting a shot.
Heru fixed bugs with the FormationAttack action in events. He also caught and eliminated an interesting edge case. When you fire on and disable a ship, and then that ship receives a repair action in an event, your ship would fire on it again immediately and disable it. So now once a ship is disabled, the attacking ship stops trying to attack it.
Another edge case was eliminated where the mission timer was not showing up when using a group of conditions that were required to complete a mission.
A few other bugs were caught and dispatched that related to displaying text in events at different times. A bug relating to repairing ships was also fixed, and also a couple related to performing actions with multiple ships selected. A few bugs in formations were found and fixed. Heru also squashed a number of minor bugs in the new fleet UI, including a strange edge case that locked up the game, which is extraordinarily rare for us.
I think the majority of Heru’s time this month went into implementing our fleet UI. The fleet UI is that list of the ships in your fleet on the left hand side of the screen. It looks simple but there’s a lot of functionality there. Left clicking on any ship icon in the list to select that ship or right clicking to zoom and lock the camera to that ship. Ships are sorted warships first, then industrial ships, then refugees. When you have too many ships to see, a scroll bar is added. Hovering over a ship icon brings up an info panel that displays health, ship weapons and information about each ship’s function. Hovering over a weapon or plan gives you stats. Left clicking on any plan replicates and equips a weapon on the hovered ship. Right clicking an equipped weapon melts it down for ore. And the amount you receive is tied to the calculated value of that weapon.
The fleet UI is now feature-complete, but it still requires substantial visual polish and optimization. We’re putting off those steps until later and focusing on features for now.
I worked up final concepts for the visual look of each faction. Using the concepts, I began creating new 3D art assets for our character models. I’m very happy with the way this is looking and I have a nice pipeline for creating and testing new accessories. I also continued the long process of cleaning up existing 3D accessories.
I was experiencing a minor but annoying bug where character names weren’t displaying correctly, and I was finally about to chase down and eliminate it through persistence and the power of ‘diff.’
In the last update I talked about the automated script I use to help me build events. Well, I continued to improve that. I adding logic for spawning new ships, story lines and mission titles. I added defaults for ‘failIf’ conditions. To support the new trigger system I built out tags for relationship changes and triggers to check for neutral and negative relationships. I added tags for giving and receiving resources, and ships joining and jumping away. And to round it out I added some basic error checking, attack and basic repair commands.
Thanks in part to that script, I finished “yamlizing” (converting from JSON to YAML) all of our events, and created more events. We have over 60 completed events so far. I’m really happy with that pace, given that we still have work to do on the event system itself as well as having trading and more ship-related functionality ahead of us.
I also created a script that walks through the existing events and tells me how many of each event exists for each type of ship that can join your fleet (as opposed to just a ship that appears in, say, an attack event). That script also provides me a total count of events that we have — the way I used to do it was starting to become unwieldy and inaccurate.
Heru expanded our event system to allow us to set a starting condition, where an event will only start if one or more conditions are met.
Using this new condition, I created some attack events. They only occur if you have a negative relationship with a particular faction. There’s basically no narrative, just angry warships bearing down on you. I look forward to creating many more of those.
Heru added a quick admin-level mode for us to change all relationship states during the game so we can more easily test events and relationship-based features in the game.
I’d been slowly working away at adding destination names to the database and we now have the number that I wanted — 400 unique names, including your backer-submitted names. Some of them are serious, some of them are unusual, and some of them are just plain silly.
Since I’m spending more and more time playing (I mean, ahem, testing) I continue to balance gameplay. In March I made some modifications to different ship speeds and their turning rates, harvester spawn times and rates, and missile and laser ranges.
In preparation for implementing stations and trading in the game, I made final tweaks to the user interface mockups and functionality. Since we have this very flexible action-based yaml event system, trading will now become an action we can trigger from an event. This gives us a lot more options to bring loot to the player. I’m very excited to start adding trading events once Heru implements the spec.
I continue to feel good about our progress. The list of things to do keeps getting smaller, but it is still large. I enjoy playing the game more and more every day. And I’m so grateful for everyone’s support and kind words!