Comm Msg #055 - January Development Recap
Hello everyone, here’s our in-depth update for what we accomplished in January!
Functionality and UI
A big piece of functionality that was completed last month was the weapon recharge bars. These show the state of weapons on any ship. The animation below should make it pretty clear what I’m talking about:
Shields were added to the weapon recharge bars.
Some faction leader powers and ship powers were also added to the weapon recharge bars.
We got the final version of the scan action completed. This particular feature is made up of twelve distinct elements. Scan is particularly useful for people just learning what the ships do, and it does come in handy when you want to evaluate the power of another ship’s weapons as well.
Heru made it so that when ships spawn they don’t do it right on top of one another.
The amount of time a mining laser stays on when firing was shortened; when mining or melting it stays on longer.
Jury rig was added to spinward/antispinward-type actions.
Heru added a ‘not’ operator to event conditions, meaning we can now reverse any condition. So all I have to do is put a caret in front of any condition to reverse it: ^shipExists becomes “not ship exists.” I often use this to start an event only if a certain type of ship does not already exist. This helps prevent, say, two events with lifeboats appearing at the same time, or a lifeboat and a station at the same time. Getting this working correctly required a few iterations, particularly to the way the game filters and spawns events.
Once this action was available, I added ^shipExists to all of our lifeboat events, station events and a good number of other events for good measure. I also went through many events and added other ^ conditions.
Ships that have already been seized or latched can no longer be latched or seized by another ship. This covers off multiple strange situations.
Now when you hover a ship icon in the choices dialog it tells you the type of ship. This helps you understand what ships are involved in a particular event so you can better decide what you’re up against and what you may stand to gain. We still need a little polish on the way the name is displayed, but the functionality is there.
Heru added ‘orbit’ as a further specifier when you spawn a ship in an event and use the relativePosition tag. This allows me finer-grained control on where to place a ship on the playfield. I then went through all the events where we use relative position and added an appropriate orbit tag. Having this level of control was particularly helpful in early game.
The ‘follow’ command was added as an event action. It was already a command you can use as a contextual action - adding it to events allows me to create a certain type of experience that I really wanted in the game. But you’re going to have to play to find out more about that. :)
We added the ‘evacuable’ event action to the event system. This allows us to specify when a ship or station will allow crew to be picked up or dropped off. I went through our events and made sure that this tag was added appropriately, making adjustments to narrative where necessary. It took a couple of iterations to get all the functionality working just right, but it’s final now.
After this was in place, Heru made sure that abandoned ships can always be crewed.
The mission timer now changes color partway through the timer, and to another color when you’re almost out of time.
When a new mission objective appears, the text is pulsed three times to help call attention to it. A sound effect will also be added.
We finally, finally, finally changed out the dreaded magenta triangle in the minimap with final game art. I worked through a few iterations of the 3D model and played around with exactly where I wanted it to sit. It’s now final.
In another user interface improvement, hovering the planet icon in the minimap displays the resource quality at your present destination.
I finalized the UI design for weapon display based on feedback from Randall our UI guru. This made the displays more visually consistent and easier to parse. I’m not sure if we will do this before going alpha, though.
We finalized the functionality and visuals for our mouse pointer. We added what I call ‘MousePointerNope’ to clearly indicate when something isn’t possible such as trying to select a ship that isn’t yours or hovering a trade item that you cannot afford.
The old mouse pointer would display the icon of the ship you had selected. Looking at it with a critical eye, it wasn't doing what I wanted. We still needed a way to signal if you had a ship selected or not. Thanks to Randall’s suggestions I modified our mouse pointer to have an empty unselected state and we now use the original mouse pointer for when you have a ship selected. I also made some slight changes to the way we signal how many ships you have selected.
Similarly, when you hover a ship that has no contextual actions the mouse tooltip now says 'no actions' instead of 'actions' and a button hint. This helps reinforce what can and can’t be done, and makes it clear that the lack of a context menu in some cases is deliberate, not broken behavior.
Tooltips were added to the crew transfer dialog to help make that action clearer. A ‘crew not compatible’ warning was also added to help clarify certain types of crew transfers.
Sometimes you want to pull crew from one of your existing ships (abandoning it for a better one). This can mean a faction leader could be on any ship in your fleet. Because of this we decided it would be best to show crew on all ships, not just those that can carry passengers.
Empty crew slots are now also always shown in scan view for these reasons.
As a consequence, we made sure that you can evacuate the operating crew from any ship in your fleet and transfer to another compatible ship, abandoning the ship. Well, except the battleship. I’m still considering whether or not you could abandon your battleship and carry on with the game as long as you had a ship remaining in your fleet.
In the game we use three words (evacuate, rescue and crew) for basically the same action: moving crew from one ship to another. We added functionality to make sure that the player only saw one of those three words at a time, and that the word they saw was most appropriate. For example, you can only rescue from a lifeboat and you can only crew an abandoned ship. This is a little odd and came down to the lack of a single good word for the action. In practice I think it makes sense and it also helps to reinforce the state of a target ship.
Because event dialogs block your view of the starmap, and you may want to check the starmap before you commit to a mission, we decided not to have dialogs appear on either the starmap or galactic maps at all. So Heru did that. No dialogs come up in starmap or galactic map now. That means you can now switch to starmap or galactic map during an event and consider whether or not it is a good idea to take on the mission.
Heru also added a text message beneath the autopause message that pops up if an event message happens to appear while you’re in the starmap, because we also had to disable things like jumping and plotting courses while the event was in progress to make it all work, at least without a major refactor.
Heru then made sure that this autopause message didn’t display during the jump transition as it was potentially confusing.
Now when you have enough fuel for a jump but you haven’t yet plotted a course, the right arrow that is used to bring up the starmap pulses, helping to draw attention to the need to plot a course. We may yet add some text where the jump button normally sits to further reinforce the need to plot a course.
Heru improved our mission system to prevent events without a mission from adding their event title as an objective, even if the event is in progress.
We added functionality to cover off a potential conflict with scouting and events with occurIf conditions. When you scout an event the game checks to see that the occurIf conditions are met, and then shows you the ships that are involved in your scouting report. But it can happen that the occurIf conditions aren’t met when you actually jump in (if you gain a ship in the meantime or relationships change, for example). So now the event is also checked for conditions when you jump in, and if it fails it is replaced with a ‘stand-in’ event.
Marquee selection was disabled in the starmap and galactic maps. Since there wasn’t anything to marquee select, the selection was passing through into tactical, which was universally bad.
The defend, hold fire and weapons free animations were enabled for each of those contextual actions.
We separated out two combat visual effects. We now use the ‘orange circle’ effect only when an object is destroyed. In all other cases, the ‘yellow triangle explosion’ effect is used. This helps you tell the difference between destroying a fighter with your weapons versus a fighter impacting on a ship.
I added mission titles to all the farmship events to help ensure they spawn when they’re supposed to, as our event spawning system in part depends on this as a cue.
Whether or not you travel clockwise or counterclockwise around the planet is a massive tactical decision. So choosing the direction has to be really clear and usable in the game. Through a lot of hard work and quite a few iterations we’ve finally nailed it. Once again Randall’s insight brought us to the best solution. Each action now sits on one line in the context menu. Icons sit to the left, and hovering one or the other determines the direction you will travel. Marching arrows now visually show the direction of travel right on the grid so it’s crystal clear what direction that ship will go. This was a fair amount of work involving about ten items. And I’m happy to say that the directional movement UI is now well and truly final.
We added functionality to disable the jump button during dialog, trade and water riots. This covered off several issues where jumping would cause undesirable effects. Heru also made sure the jump button was greyed out during those times so it’s more clear that you can’t jump until you are done with dialog, trade or water riots.
When a ship becomes disabled in the game you have very limited actions that you can perform with it. Heru made sure that one of those actions was being able to dismiss it in a water riot, since let’s face it, a disabled ship is likely to be one of your top candidates to drop from your fleet.
Hair as a distinct character accessory per faction was added. This completes functionality to the 3D characters in the game. I still have a few 3D models to build but I’m very happy with the mix of looks that we have.
We had an issue where the jury rig command kept repeating as if it were an action like protect, but that has been fixed.
Sometimes we have issues that are a little difficult to reproduce. In these cases I try to create an event designed to test for the issue. Such was the case with an issue that we seemed to be having with protect. Turned out it was a syntax problem with an event.
Since we’ve been doing a lot of work on the event system it was expected to have some bugs pop up. We had a rare showstopper bug with the events that Heru quickly dispatched.
A particular event wasn’t working properly, and I discovered that our getShip event action required the new isPlayer tag. So I went back and added that tag to all getShip actions.
We had an issue when calling for a retreat with two different warships that is now resolved.
There was a bug that only occurred when you had an Irenic faction leader that Heru squashed.
Briefly the abort contextual option stopped saying what action you were aborting, but that’s back to working now.
We had a null reference exception when a formation hailed another ship, but that has been fixed.
I fixed a minor z-fighting issue with the summary container.
I fixed an issue where an opacity layer showed up in our story dialog.
We had a bug where I couldn’t crew an abandoned sandship but Heru got that one working again.
A bug cropped up when you were hailing and then skipping options; Heru took care of that one.
A couple of bugs centered around ships or stations marked evacuable were fixed.
A bug which made a character use only the first available accessory was resolved.
Transmogrify stopped working for a moment, but Heru was able to resurrect it.
In our multiple choice dialogs we display options that the character /could have done but currently cannot/ -- but we grey them out and make them unselectable. Briefly you were able to take those actions even if you shouldn’t have been able to. Heru quickly took care of that.
There was an issue where a shieldship wouldn’t join your fleet which I was able to fix.
I fixed a problem with the default blank text tag that actually wasn’t blank at all.
I got rid of a situation where ‘earth’ was showing up instead of ‘habitable.’
I designed and modeled the 3D arrows and animations for spinward/antispinward actions.
I also created the 3D model for the minimap wedge.
I made a few tweaks to the character heads to make sure their sizes and origins were consistent.
I added three new base male heads to help increase diversity.
I added a more formal hat to the Pact faction; they needed a bit more as the caps they were wearing weren’t differentiating them enough.
I added hair styles for the Corp, Empire and Pact males and Corp females. I’ve had so much fun coming up with distinct, identifiable hair for each faction. I have to say the Pact and Empire were the hardest, but after a lot of experimenting I’ve come up with styles that look great in the game and are distinct. A few more models in each of the styles need to be created, but they’re quite fast to make.
I created and added an animation for the ‘retreat’ action.
Events, Narrative and Balancing
Last month was all about early game events and testing/tweaking existing events. I only created a couple of new events - the current count is 396 as I removed some older test events.
The biggest effort involved me testing every single event in the game, tweaking and adjusting as I went. This took quite a lot of time as you can imagine but it was worth every moment. I caught a surprising amount of minor things, mostly spelling errors. I have a short list of fixes and enhancements that I have yet to do.
I iterated, expanded and enhanced the first mission in the game. This first event is now the most complex in the game - and it has to be. It has to do a lot including setting up the narrative. It reminds new players how to do things, but only if it looks like they need the help. There’s also a very easy mission you can take on and lots of opportunities to ask questions. And even a surprise or two.
All this complexity is either hidden or optional, but still… after you’ve played the event a couple of times a player may want to skip it. And it drives me nuts when games don’t allow you to do this, so I added a ‘skip this entire event’ type response. I then balanced early events to make sure skipping this didn’t negatively impact the game experience too much.
I added summaries to early trade events to help with context.
I moved and modified a number of events that had been occurring later in the game into more milk-run style events to help new players understand what is possible.
I made some corrections to occurIf conditions to ensure they would spawn properly.
I added lifeboat text to the ship’s lore, and polished and extended the lore for a few other ships too.
I also added hailedBy text for all of the lifeboat events, giving them more color and context.
I expanded all attackship events, for example adding triggers that cause them to stop attacking and more specific targeting behaviors per faction. There’s more work to be done there, but it is heading in the right direction.
And I took a couple of days to write the last Kickstarter update.
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, things may come up that require attention, including a number of bugs we have yet to fix. 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.
With the above disclaimer in mind, here is the list of major functionality remaining before alpha: We are having to refactor part of the event system - this has already eaten a few days and I expect it will eat a few more before it is all done properly. We still have some UI remaining to complete. We need to finish the game over/restart cycle; we haven’t yet started on saving and restoring the game state. We have to finish quite a bit of optimizing. A few more events will need to be added. And there is still more testing and balancing that will be required.
Considering that I lost a lot of time due to a pretty wicked car accident (not my fault, it’s good to be alive), I think we made very good progress. It is really wonderful to hear your enthusiasm and positive support, it really keeps us going through this final stretch.