Right hand is mostly better, but I'm still taking it slow. Here's an update that was mostly ready before the Incident:
Fixes and Improvements
Undid a "fix" that made things worse: Single combats should no longer incorrectly end in draws, but individual ship fates in the post-combat screen may once again be incorrectly displayed as immobile. This does not affect conquest games.
When editing a ship in multiplayer, you can now go to spectate or setup a combat, and will be nicely returned to the editor after the combat.
Soil and grass is sturdier and should no longer evaporate into deep craters upon contact with crashing ships.
Added the following new letters for display in game text: đďþňčřžšßťǎăāæěĕēòôøœůÿïĐĎÞÑŇČŘŽŠSSŤÂǍĂĀÆËÂĚĔĒÒÔØŒŮŸÏÍ
Fixed a boarder pathing bug that would cause borders to not move when told to board an enemy ship.
If you load a ship where one module is blocking another (eg a slope in front of a cannon), the game now treats this as an error. This is to prevent a potential exploit where you could use a mod to disable placement restrictions but then still use the resulting ship in unmodded play.
Instead of air sailors, landships now have crew with their own visual appearance and reduced maintenance costs, designed by Meowskyi (thanks!)
Modding
Modules can now add bonuses to ships they're in using the providesBonus value. This opens up a lot of interesting potential, as bonuses can be used to change nearly everything about modules. Note that modules will grant these bonuses whether or not they're in a running state - this is to prevent paradoxical / unstable situations where a running module's bonus causes it to stop running.
You can now partially overwrite existing Loadables (game data entries) instead of having to replace the whole thing. To do this, set "patch" to true and provide a partial entry with just the keys you want added or replaced.
Multiple patches from different mods can layer on top of each other - of course with no guarantee that the end result makes sense, or that it even runs without crashing. But it allows for eg one mod to change the visual appearance of cannons, and the other once changing the damage progression.
Note that each mod still has to be loadable on its own, so you can't make a mod that requires another mod to function. For that case, just make one mod instead.
I've made a small example mod that shows both of these new modding features: an alchemist's chamber that boosts damage from explosive weapons.
Off the top of my head, here's some other things you could do with modules that add bonuses:
Increase fire safety by reducing the fireHP values of flammable modules.
Improve storage capacity for resources.
Improve stats of specific weapons like fire rate, damage, accuracy.
My right hand is currently in a cast, so there will be some delays. Nothing too serious, and it's healing well. But for now I will be a bit terse. The future will bring more bugfix updates and continuing work on the diplomacy update.
Tis the spooky season, and as is by now traditional, here's a new monster for you to fight: the clockwork cube. Cubes, in fact, as there's three of them, armed with a tentacle, a saw, and an energy beam respectively.
These will turn up during conquest play, and there's also a mission challenging you to take down all three cubes with ships worth no more than $1200. Can you figure out how?
Apart from that, there's some minor bug fixes and improvements:
Fixed a potential situation where a ship on the winning side of a fight would be incorrectly marked as lost due to being immobilised. The game now tries harder to get such ships back into the air.
Improved combat rendering speed by about 5%.
AI empires' coats of arms should better match their abilities and ship designs.
You can no longer refit dragonriders.
New cheat option to switch difficulty levels. Note that a lot of the difference between difficulty levels is in the initial starting situation, which of course this can't change.
Fixed rare text input crash.
There's still a bunch of bugs and adjustments I'm aware of that didn't make it into this update, so if you recently told me about something that needs fixing, don't worry.
Also, note that despite what it says at the top, this isn't DLC, it's a regular update to the game.
I'm now working on the AI for the upcoming diplomacy features. I've already implemented the diplomacy systems themselves: what war and peace mean, the ability to negotiate agreements and send ultimatums, and so on. But of course AI empires need to be able to interact with these systems: responding to players' diplomatic offers and making their own, and also conducting diplomacy between themselves.
Aims
The diplomacy system in Airships has a number of design goals mostly informed by my frustrations with the shortcomings of diplomacy in other games, in particularly the Civilization series and Paradox grand strategy games. (Which, to be clear, I love and have played hundreds of hours of.) In no particular order:
I want AI behaviour to make sense to the player. I want them to be able to understand why the AI makes the diplomatic decisions it does. Without this, diplomacy becomes frustrating as AIs will declare war or make peace seemingly at random. There may be a sophisticated system behind those decisions, but if the player cannot understand it, it might as well be random.
I want the diplomacy system to allow for deals between empires that consist of multiple parts. Modern strategy games generally all have this, but older Civ games do not. For example, you want to be able to sweeten a non-aggression pact by including a good trade deal.
Defensive pacts! All the mutual protection of an alliance with none of the being dragged into wars by the AI. My least favourite version of this is when your AI ally drags you into a war you don't want and then makes peace with the enemy again, a peace that does not include you. And you find yourself unable to make peace yourself, so now you're stuck in this war.
It should be possible for the player to ignore diplomatic niceties, making war on whomever they like. Of course, they will miss out on the safety and benefit of treaties.
Relatedly, no system of claims or war goals like in Paradox games. You can declare war on anyone at any time (though the diplomatic consequences may be dire) and when you conquer something, it's yours.
Finally, I want rich communications between humans and AIs. Of course, humans can use language to negotiate an agreement in detail and then put it through the diplomacy system, but how do you have this kind of conversation with an AI player? In part, this is helped by the first point, having understandable AI behaviour. You don't have to guess whether the AI wants a trade treaty - the game will tell you whether it does, and why.
The other thing I put in to make this work are ultimatums, which allow you to make a demand backed by a threat. The demand is an agreement that is against your victim's interests (give me tribute, dissolve this defensive pact I don't need anymore), and the threat is some unilateral action you could take that would be even worse (or I will declare war, or I will stop paying you tribute). This way you can actually communicate what you want and what you're prepared to do to get it.
AI Logic
These are nice goals for a diplomatic system, but how can I teach the AI to interact with them?
Again, there are things I want to avoid: AI players that love or hate you for no clear reason, AI that is not actually playing to win, AI whose decisions are so opaque as to feel random. For example, Civ 6 has the concept of AI player agendas, where e.g China wants to build world wonders and gets annoyed if you build them first. This is a cool idea in theory, but you're not actually going to avoid building wonders just because of that, right? And the AIs also have some (initially) hidden agendas, which in practice mean they just randomly like or dislike you.
So instead of an AI that likes or dislikes you, it should act according to strategic situation. If another empire is threatening, can the threat be reduced with a non-aggression pact? Or do we share a common enemy where an alliance would make sense? Can another empire be bullied into paying tribute?
The real-world term for this is "realpolitik" - a theory of international relations that's based on the relative power of states behaving "rationally" - that is, with little regard to fairness or past history. Your former enemy can become your friend if it makes sense for them to be so, and vice versa. If you are in a position of strength, you exploit that strength. The 19th century, on which the world of Airships is approximately based, was also the heyday of realpolitik, so it's a good fit.
And the AI knows what victory is in terms of the game and tries to win. Victory is achieved by conquering all cities, being in an alliance that controls all cities, or having your ruler crowned emperor. (The latter two victory conditions can also be toggled off.) This makes sense in-universe as the empires are attempting to achieve dominance over one another.
To figure out what it wants, the AI assigns each diplomatic situation (war, peace, trade treaty) a score and then tries to get to a higher-scoring situation. This means that if it really wants a non-aggression pact with you (+22) but doesn't especially want a trade treaty (-5), offering it both in the same deal will have it accept.
And these numbers get shown in the GUI for making diplomatic offers to AI players, so you don't have to guess.
To make diplomatic offers to human players, the AI can put together a package of terms that it likes and that it thinks you will like too. That second part is needed because otherwise the AI would start every negotiation with "and of course you should pay me tribute", because why not, it's nice for them. Instead, it will send you an offer that, while perhaps not entirely in your favour, is at least somewhat reasonable.
The diplomacy GUI also allows you to modify offers and send them back, so you can always change it to something more to your liking.
To come to agreements with other AI empires, the game looks at the relative strength of two empires and picks an agreement that they both like, but that's tilted towards the stronger partner. This is meant to simulate the result of a bunch of negotiations.
Ultimatums
Then there's ultimatums. A good ultimatum demands something that's in your favour and threatens something scary to the target that's also an acceptable outcome for you. The classic ultimatum is "pay me tribute or I declare war", where of course you'd like tribute, but you're powerful enough that you'd also be happy with war. Meanwhile, for your victim, tribute is unpleasant, but not as unpleasant as being conquered.
And this produces a pretty clear mathematical definition for what an ultimatum is. To construct an ultimatum, the AI can look through things it wants but its intended victim does not, and things it could do to its victim that the victim would really dislike. Those are the demand and threat of the ultimatum.
To determine whether the AI should cave in to an ultimatum - whether sent by a human player or an AI - we can also look at the difference between the demand and the threat scores. Let's say the demand is to pay tribute and enter a trade treaty, rated at -22. But the threat is war, rated at -60. So the demand is 38 points better than the threat. This is then directly converted into the likelihood that the AI will agree to the demand, by default by multiplying it by 2. So this particular ultimatum has a 76% chance of being accepted.
Unlike as with normal diplomatic offers, where you know right away whether the AI will accept, ultimatums have a probability of acceptance to make them a gamble. If they reject your ultimatum, you have to either follow through with the threat or lose a chunk of reputation.
So ultimatums can be sent from humans to humans, humans to AIs, and AIs to humans, and should be a pretty flavourful way of conducting diplomacy and getting what you want.
AI Personalities
Of course not every AI is exactly the same. All the numbers governing these evaluations can be tweaked (and modded), resulting in different personalities. Upstanding empires that don't break agreements or do ultimatums. Bullies that try to extract tribute from you but then back down from the threatened war. Lone wolves who simply want to be left in peace but will relentlessly pursue war when provoked. Diplomats who try to embed themselves into a web of pacts for safety. Traders who are mostly peaceful but won't pass up an opportunity to invade a sufficiently weak neighbour. Weaklings that will readily cave in to ultimatums. Overly principled empires who would rather be conquered than ever agree to anything they don't want. Even omnicidal maniacs who will pretty much ignore diplomacy and just attack at will.
And sometimes, you also want AIs that are more emotionally driven. There already is some of this in the system I'm building, because it does consider diplomatic grievances and reputation levels in its actions.
On top of that, AI personalities can have an attitude to other empires based on their past relationship. Were you at war? Have you been in a long-term stable pact? Do you own some land they consider theirs? In and of itself this isn't enough: geopolitics provide much more interesting motivations, and at the start, no one has any history with anyone else. But it can be a good additional layer for some personalities that deviate from this pure realpolitik concept.
What Remains
So yes, all this is what I've been working on. Things are going pretty well, with the AI able to make and respond to diplomatic messages. There's still a bunch of problems to work out. For example, if you successfully demand tribute through an ultimatum, the AI will immediately send you a diplomatic offer that just consists of cancelling the tribute, because after all, that would be to its advantage.
And I'm working on making the user interface for this as good as I can, showing the right information in the right places, plus generous quantities of tooltips.
I'm also still considering additional types of diplomatic interaction on top of the ones that currently exist, which are:
War - A state of conflict. You may freely attack each others' fleets and conquer each others' cities.
Truce - Formal cessation of hostilities. Automatically turns into a state of peace after five months.
Peace - A neutral relationship. You may not send ships to each others' cities, and doing so is a declaration of war.
Non-Aggression Pact - A promise not to attack each other. You can freely send ships to each others' cities.
Defensive Pact - A promise to defend each other. If the other empire is attacked, you automatically declare war on the attacker. If they declare war, you stay neutral.
Alliance - A full alliance sharing in all wars. Your ally's allies automatically become your allies too.
Trade Treaty - Gain 5% of each others' incomes.
Research Treaty - Gain 10% of each others' research output. Technologies the other has researched are 40% faster to research.
Tribute - Receive 10% of their income.
In particular, I'm thinking of adding the following items. To be clear, there's guarantee that these will happen.
Transferring towns. This can make sense, especially as part of a truce, but it might also be abusable, so the AI's evaluation of these transfers would have to be very careful.
Monetary payment. It would be good to be able to sweeten a deal that the AI is nearly willing to accept, but not quite. On the other hand, it would be silly if every time you did a deal with the AI, you'd ask for exactly as much money as you could with the deal still being acceptable to them. Or constantly sending ultimatums to other empires demanding amounts of money so small that they're guaranteed to give them to you to avoid war. Both of these would damage suspension of disbelief and add a bunch of tedious work for optimal play. The one place where I think demanding money would make sense is as war reparations during truce negotiations, where it would be an automatically calculated amount paid out over time, a kind of temporary tribute.
Transferring ships. As with money and towns, this is tricky because these are the things that bring you victory. Towns produce money, which is used to build ships, which is used to conquer cities, which are what you need for victory. So giving away any of those three is reducing your chances at victory. On the other hand, being able to buy ships from other human players would be kind of fun.
Insults. The ability to send insults to other empires was brought up on the Discord as a flavour / role-playing thing, but in keeping with my desire to make human/AI communication as good as possible, I do think insults could have a specific diplomatic effect. Right now I'm thinking that the way it'd work is that the insulted party can either return the insult, worsening relations, or stay silent, and lose a bit of reputation for looking weak.
Diplomatic delegations - essentially the opposite of insults, delegations cost some money and are an attempt to reduce diplomatic grievances between two empires. If accepted, both parties gain some reputation. If rejected, you lose some.
Finally, if you want to read more about realpolitik in games, or are interested in history and strategy games in general, I can highly recommend ACOUP, a blog on those topics, which has for example just covered Europa Universalis IV and Victoria II from a historian's perspective.
This update improves the smoothness and performance of the game, especially in multiplayer.
In other news, I am happy to report progress on the big diplomacy update. I have overcome a major coding hurdle and am currently in the process of testing that the game is able to properly resume/resync multiplayer games with the new features.
I hope to have an early beta available in the next few weeks. To be clear, the final release is still a while off, but what I have now will benefit from feedback.
Finally: Hi, new players who found this game via Lathrix!
This is a heads-up that the price of the game will shortly increase to $24.99. Gives you time to get it at the old price.
The game's price has risen over time, starting at just $5 for the very first release. As time goes on and I add more features, I think it's fair to adjust the price upwards too. And more features are yet to come. :D
Something I probably should have explained, sorry: I'm also raising the price in advance of the diplomacy update. When the diplomacy update drops, I want to do a sale, and I can't both raise the price and do a sale at the same time. I don't intend to raise the price for the game any further.
Added two new bonuses for coats of arms: The crossed swords are close combat specialists, increasing sawblade and flamethrower damage by 40%. The vol are aerial aces, increasing the fire rate of airplanes by 40%.
Reduced marine fire rate by 25% for balancing purposes.
Fixed a bug where ships with sails would constantly emit sail sounds.
The AI again no longer builds ships it cannot afford to maintain.
Added modding utilities for converting between the game's internal GUG format used for saves and a (more) human-readable JSON format. You can activate them by enabling "modding tools" in the settings.
Added a setting for enabling in-game cheats.
The cheats allow you to get free money, get all techs, instantly complete ship construction, prevent the AI from attacking you, destroy ships in combat, restock your resources in combat, and switch which empire you control.
They're of course only available in single-player and disable achievements. If you have suggestions for additional ones, let me know.
Why did I add cheats? Well, uh, people are cheating anyway using cheat engine and causing weird bug reports that I then have to spend time investigating. So I'd much rather give you a clean way to cheat. Plus I firmly believe that you should be able to do whatever you like with software that's on your computer. It's your computer, and I'm not a cop.
But please don't use Cheat Engine in multiplayer. It desyncs the game and then I have to spend time and energy going over the desync report. Time I could spend making cool stuff for Airships, or napping.
Since some players are having difficulties with conquest mode, here's a simple way to win it. This is not an especially exciting way to win, but it's simple: no research, ship design, building defenses, espionage, etc.
Start with a small map on very easy mode. Save up money to build two HMS Unmatched, which are a default ship design.
Using the two HMS Unmatched and whatever ship you started with, start attacking towns, which are the ones with the small icons.
Your fleet should be big enough to induce them to just surrender. If not, retreat and build another HMS Unmatched.
Pillage each town you conquer and use the money to build more HMS Unmatcheds to grow your fleet. Conquer all the towns like that.
By the end of this process, you should have about a dozen Unmatcheds. You can now start conquering the cities. They won't surrender, but you should now have massively superior firepower. In combat, tell your ships to move close to the enemy ships and buildings and then just wait for them to be destroyed.
Whenever you conquer a city, pillage it, but wait until the pillaging is complete before moving your fleet to the next city, so it can restock its ammunition.
Keep doing that until you've conquered all cities and won.
Now you can go for a higher difficulty level and start looking into using your ships more effectively and creating better ship designs.