Things have been a bit quiet because I've been taking a break, but new things are coming. The next release, due next month, is going to focus on user interface improvements. After that, I'll be working on the previously described long-term improvements to conquest.
Meanwhile, it's time for the Steam Awards again. Airships has never won an award. You could help it win an award. "Most Fun with a Machine" seems appropriate, doesn't it?
I bring you a seasonally appropriate monstrous update!
Gargoyles have started to nest in abandoned churches and factories throughout the land. These aerial predators nest in large swarms and defend their nests with acid spit.
What's more, strange giant red disks have been spotted hovering above the landscape, exuding a noxious yellow gas that is causing sickness and suffocation.
Defeating monsters can offer a new type of reward, a sudden leap ahead in your research. And with the new and improved Monster Hunter heraldic charge, you get one and a half times the research and money from defeating any biological monster.
Finally, there's also some nice new decorative windows you can use, and for modders, the ability to use frame-based animations instead of skeletal animations for crew.
Better performance in conquest mode, especially in single-player. Running multiplayer at max speed may still not be advisable depending on map size and your computer.
You can now put decals on external modules.
Potential fix for a rare desync issue.
Shot speeds vary less by default.
Cockpit is more expensive now, but bridge is a bit better.
You get a bit of extra cash to build a ship with on difficulty levels that don't have a starting one.
So I've been chewing at game design to figure out how to best improve the game and address the issues in the previous post. So here's the basic plan for getting the game into a good final state.
Diplomacy
Not only is this the top requested item, it should also stop everyone being constantly at war with each other a little bit, engaging in little back-and-forth battles. Diplomacy needs to have concrete gameplay effects, though. If all you did was declare war when you wanted to fight and sue for peace when you didn't, that wouldn't actually be any different from what we have now. So diplomacy has to be about agreements, promises, and trust.
Espionage Update
Right now, espionage is a bunch of nice ideas that aren't very satisfying. Why spend cash burning down a building when you could just build a ship and use that instead? I'm still working on the details of it, but the idea is that espionage is something you can concentrate on if you like, and that will deliver results that you can't just get some other way.
AI Ship Redesign
AI fleets are meant to be varied in their appearance, strengths, and weaknesses, but this has led to some fleet designs being way better than others. The AI is also bad at fleet composition. I'm going to go over the designs and make them more even in overall power level while preserving and enhancing what makes them unique.
Fleet Movement Mechanisms
Right now, you can just send your fleet to zoom around the map, blowing stuff up. This is not how an actual war works, and it makes geography pretty irrelevant. I'm working on mechanisms to make fleet positioning and movement more restricted and more meaningful.
After those four items are done, I'll have another look at resources and city upgrades. Apart from that, I'm also working intensely with a number of players to improve the balancing in combat, and there will be some new modules and monsters coming your way.
All of this will take a while, of course! Right now, I'm working on an update that fixes the "low hanging fruit" of balance, gameplay, and user interface issues. Then I'll be working up to diplomacy and the required AI changes.
(Slightly wonky illustrations brought to you by my attempts to learn a new drawing program. Not representative of some new art direction.)
It's been a few weeks since the release. I've squashed the immediate bugs, and while I'm generally very happy with the state of the game, it's clear that the conquest mode needs improvement.
I've gone through hundreds of recent reviews and forum threads and collected all your feedback about the conquest mode. Reading through everything that's wrong with my game was a bit... emotionally draining, but I got through it and have put together a list of the biggest issues that I think I need to address:
Conquest starts out hard, with lots of opponents to fight, and then becomes very easy once you have a big enough fleet to steamroll everyone.
Some enemy ship designs are very weak, and once you do have a big enough fleet, your ship designs don't matter very much.
The mechanics around attacking, intercepting, and fleeing cause a lot of back and forth with little progress for either side in a war.
Town defenses and counter-espionage are both expensive and not very fun.
It doesn't really matter where you attack because all cities just give you extra income.
I have a whole bunch of ideas for how to improve all this, but I want to avoid just making a pile of additional features that buries the underlying game design flaws. So I'm now going through these ideas and figuring out how they can fit together to address the points above. I'll be making another post soon detailing my plan.
In the meantime, do give me additional feedback and suggestions. Do note that there's a lot of different things I need to balance, and that your game experience may be different from others'. :)
The latest Airships update fixes a bug in the combat AI for ships. It was a rather weird and stupid bug, and so I'd like to tell you about it. I hope to entertain you and also give you a view into the game development process.
There were a lot of reports of the combat AI being very incompetent when trying to attack buildings, especially from close range. Ships would just float around unmoving instead of closing in and bringing their weapons to bear.
So I set about reproducing this problem, which turned out to be rather easy. I set up a combat of an AI grenade bomber versus a building, and the bomber completely failed to position itself.
I will explain the cause of this in a moment, but I first have to get into the detail of how combat AI works. Its main function is to evaluate possible positions for the ship to move to. For each position, it looks at how much damage it can deal from there and how much enemy fire it's exposed to. Some positions it can't get to, because something's in the way, or because they're above its service ceiling.
The other mildly confusing thing I need to mention is how the y-axis in the game's coordinate system works. It points downwards, so ships with a higher y-coordinate value are further down. And the zero point is at about 70 metres above ground. Not the most sensible way of doing things, but it just evolved that way.
I have a convenient debug view in the game that lets me see the combat AI's evaluation of all the positions it considers. In the case of the combat of the bomber versus the building, I could instantly see that it marked all the positions near the ground as unreachable. All the positions with y-coordinate greater than zero.
At this point I had a pretty good idea of what was going on. The culprit was an obscure module type value called aiMaxY. This value is used to tell the monster AI to not move too far down, because it looks weird. For example, it prevents the Aerial Jelly, which is meant to hover above your ships and attack like that, from moving all the way to the ground.
aiMaxY is set to 10000 by default, going all the way into the ground. But by looking at the debugger, I could see that the bomber's aiMaxY was actually set to 0. So the AI considered all positions where y was greater than 0 as invalid.
Now I just needed to figure out why the value was at 0 instead of 10000.
The culprit there turned out to be flipped modules. The information for flipped versions of modules is derived automatically from their un-flipped counterpart. The game does this by copying all the information and adjusting it where needed, making firing arcs point the other way, mirroring the graphical appearance, and so on.
But I had forgotten one line in this code. It didn't copy over the aiMaxY value, and instead left it at 0.
So all flipped modules would tell the combat AI to not take the ship beyond y = 0. Any airship with a flipped module had broken AI. Which was many but not all of them, making the bug appear inconsistently.
The fix was painfully easy: add that line to copy over the aiMaxY value for the flipped module. And with that one change, the AI started behaving much better!