





🌟 Special thanks to our amazing supporters:
✨ $10 Tier: [Geeks Love Detail]
🌈 $5 Tier: [Arch Toasty][Benedikt][David Martínez Martí]
Now Airships: Lost Flotilla is out I've finally been able to turn my attention to some long-standing bugs in Airships: Conquer the Skies:
Celebrate the Release of Airships: Lost Flotilla with a Special Bundle! Im excited to share that Airships: Lost Flotilla is officially out now! To celebrate, Ive put together a special bundle featuring both Airships: Conquer the Skies and Airships: Lost Flotilla. https://store.steampowered.com/bundle/49670/Airships/ This bundle is a great way to explore both games set in the same universe: In Conquer the Skies, you design and command your own fleet of airships in epic battles. In Lost Flotilla, you control a single airship in an arcade-style autoshooter, battling waves of enemies, upgrading your ship, and charting your path to safety. Bundle Deal: Save 10% on top of the 20% launch discount for Lost Flotilla! If you already own Conquer the Skies, the bundle automatically adjusts its price so you only pay for the new game. If youd like to support the game, heres how you can help:
Steam introduced a change to their launcher that broke the game on Linux. Version 1.2.7.4 fixes it again.
Airships: Conquer the Skies is part of the Planes, Trains, and Automobiles Fest which starts today. As part of this festival, the main game, the DLC and the soundtrack are discounted by 25%. Also, I've made a small update for the demo of my second game Airships: Lost Flotilla. A torpedo boat! Check it out here: https://store.steampowered.com/app/2978530/Airships_Lost_Flotilla_Demo/
The game now hides shortcut info when on Deck, in accordance with Valve's requirements for Deck compatibility. Also, if you are on Linux and the game incorrectly thinks it's on Deck, you can disable Deck support by adding the following line to vmArgs in config.json: "-Ddeck=false" (don't forget to add a comma after the previous line).
Oh look, another hotfix!
Loading no longer hangs if you are not subscribed to any workshop items. Oops.
Version 1.2.7 is out, bringing a number of new features and improvements.
Airships: Conquer the Skies has a special 50% off deal on Steam this week, so if you've been thinking about getting the game, this is the optimal time.
I'd also like to again point you towards Airships: Lost Flotilla, an autoshooter set in the same universe. You control a single airship from a top-down view, moving it arcade-style as it automatically shoots at enemies. You then collect the burning wreckage of your foes and use it to repair and upgrade your ship.
I've just released a new version of the demo that adds an overworld map. So instead of going straight into the next fight after upgrading, you instead choose where your fleet goes on its journey.
Different destinations have pros and cons in terms of what enemies you fight, the rewards you get, the available upgrades, and your relationship with local factions.
Plus, you can now install tentacles on your airship.
And finally, there is now a mysterious magical keypad...
Anyway, do try out the demo!
Fixed an issue on Linux that prevented people from being able to see ingame news and register their coat of arms.
Hi all! So as you may have noticed if you were carefully reading the discord, I've been working on a new game, and I'm finally ready to announce it - and show you a demo.
It's called Airships: Lost Flotilla, and it's an autoshooter set in the same world as Airships: Conquer the Skies. You control a single airship from a top-down view, moving it arcade-style as it automatically shoots at enemies. You then collect the burning wreckage of your foes and use it to repair and upgrade your ship.
[previewyoutube=CeEgsFIE2PI;full][/previewyoutube]
As is traditional, there's quite a lot of upgrade possibilities with different synergies. In the demo, you get access to three ships: the cruiser, the slow but powerful battleship, and the very fast aeroplane.
Actually, that's not quite true. If you happen to have a copy of Airships: Conquer the Skies installed alongside your Lost Flotilla demo, you also get the Copter, a very fragile and nimble ship with a different control scheme.
And once you defeat the boss for the first time, you also get three captains to choose from that more radically change the way the game plays: Zoe Davies massively increases your weapon accuracy, Imani van Knorpel lets you cheaply look for and pile on repeated upgrades, and Commander Yithrak gives you double fire rate whenever you get hurt.
Why yes, you do know these people already from Heroes & Villains. So you can look forward to more captains in the full release.
https://store.steampowered.com/app/2858150/Airships_Lost_Flotilla?snr=1_5_9_
Version 1.2.6.1 fixes a crash when checking workshop items during startup. Unfortunately, the fix means that startup now takes longer, but I'll see if I can speed it up again.
In time for Halloween, and because I felt like it, here's two new monsters for the game:
The heroes introduced in the Heroes & Villains DLC can be modded, changing them or adding new ones. You can download a simple example mod here, for you to study and modify. You can also look at the already existing heroes in data/crossplay/heroes/HeroType. You can probably figure things out just from that. The rest of this post attempts to document everything exhaustively, so don't feel that you have to have read all of it to start modding heroes! Reading "Basic Hero Structure" and "Recruit Hooks" and then whatever you think you need should be enough to start. You can find detailed documentation on how modding works here, but here's the short version: A mod is a folder containing an info.json file, a logo.png file, and a bunch of folders containing JSON files with the same structure as the data folder in the game. You will also need a strings/en.properties file for the text in your mod, and an images folder. Here's the basic structure:
{
"id": "MyHeroMod",
"name": {
"en": "My Hero Mod"
},
"description": {
"en": "My Hero Mod is a mod that mods heroes."
}
}
Note that for your mod, you shouldn't put the HeroType folder into a crossplay folder.
[
{
"name": "myHero",
"role": "CAPTAIN",
"img": "myHeroPortrait.jpg",
"maintenance": 10,
},
]
A hero needs at least a name, a role ("CAPTAIN" or "GOVERNOR"), a portrait image, and a maintenance value. If you want to change an existing hero in the game, use the same name to overwrite them.
The name is used to look up their display name in en.properties. The hero also needs a description under [hero name]_desc, so:
myHero=Steve Stevenson
myHero_desc=Steve is just this guy, you know?
The portrait should be a 300x300px JPG or PNG stored in the images folder. Also add 200px, 100px, and 50px downscaled versions of it to images/scaled/, with the pixel size in the name like so: myHeroPortrait-200.jpg, myHeroPortrait-100.jpg, myHeroPortrait-50.jpg.
This will spawn a new hero in the game, but they won't do anything and can't be acquired.
"recruitHooks": [
{ "type": "upgradeBuilt", "upgradeType": "fleetAcademy" },
{ "type": "combatVictory" },
{ "type": "techResearched", "tech": "CARTOGRAPHY" },
]
So the hero may turn up when you build a fleet academy, when you win a fight, or when you research cartography. See the full list at the end of this document, or look at the existing heroes.
"isTemplate": true,
"templateSpawnPerEmpire": 0.1,
"templateFirstNameKey": "M",
"templateFirstNameNum": 26,
"templateLastNameKey": "B",
"templateLastNameNum": 26,
templateSpawnPerEmpire is multiplied by the number of starting empires and rounded up to arrive at the number of such heroes to create at the start of the game.
The first name of the hero is generated by picking a number between 0 and templateFirstNameNum - 1 and then looking up "HERO_[number]" in the strings, same with the last name. So M are male names (26 available), F are female names (26 available), NB are non-binary names (6 available), and B are last names (26 available). You can also make your own name lists.
"techs": [ "CARTOGRAPHY" ],
If a hero gives a tech, it's a good idea to also specify a hireCost value, which is an up-front payment when hiring the hero, so that players can't just get a tech for nothing.
And a hero can give a bonus to the empire they're working for, which lasts as long as they're around, using "bonus".
Finally, you can use "departureBonus" to specify a bonus that the hero gives the empire when they leave it, due to stat changes or being dismissed. Right now this is just used for druid (Vex) in captains.json, who curses your empire when they depart.
"combatAbilities": [ "IMPROVISE_MUNITIONS", "SCAVENGE_MATERIALS" ],
Here's a list of all available abilities:
"edicts": [ "martial_law" ],
Then, create your edict by adding a JSON file to the Edicts folder in your mod, e.g:
[
{
"name": "martial_law",
"duration": 145600,
"icon": { "src": "heroes", "x": 16, "y": 32 },
"iconBackground": { "src": "heroes", "x": 32, "y": 32 },
"rep": -1,
"unrest": -30,
"comment": "h_martlaw",
"stat": "experience",
"statChange": 10,
"sound": "double-time"
},
]
Edicts need a name, a duration, an icon, and an iconBackground. The icon should be a 16x16px white on transparent icon with a 1px margin, and the iconBackground should be the icon plus a 1px border, fitting into those 16x16 by using the margin. (See the example mod for what that looks like.)
Edicts can make a sound. They can change the stats of the hero that enacts them (see about stats below). You can also have the hero make a comment on the edict.
Edicts can have two kinds of effects: immediate effects that happen when they're enacted, and ongoing effects that last until the end of the edict.
Immediate effects:
"clearableNests": [ "pirates", "brigands", "cultists" ],
You can use nestClearRep, nestClearMoney and nestClearResearch to add rep/money/research effects to clearing a nest. Use nestClearStat to specify the name of a stat you want to change when clearing a nest, and nestClearStatChange to specify by how much. Finally, use nestClearComment to have the hero make a comment when clearing the nest.
Moving nests (which means relocating it to an empty nest location outside your territory) has all the same fields, so moveableNests, nestMoveRep, nestMoveMoney, nestMoveResearch, nestMoveStat, nestMoveStatChange, and nestMoveComment.
"stats": [
{
"name": "experience",
"startingValue": 0,
"evolveOn100": "heroic_officer",
"changers": [
{ "type": "combatVictory", "change": 5 },
{ "type": "combatDefeat", "change": 5 },
],
},
{
"name": "pride",
"startingValue": 30,
"evolveOn100": "proud_officer",
"changers": [
{ "type": "combatVictory", "change": 10 },
{ "type": "receiveTribute", "change": 30, "comment": "fresh_officer_superiority" },
{ "type": "receiveSubmission", "change": 40, "comment": "fresh_officer_superiority" },
{ "type": "everyMonth", "change": -1 },
{ "type": "combatDefeat", "change": -10 },
],
},
],
Each stat needs a name and a starting value, and one or several changers, which specify when the stat should change. See the list of hooks below to see what changers are possible. Heroes can also make a comment when the changer is triggered.
You can also base the amount by which a stat changes on the size of the map, by adding a changeDivByCities and optionally a changeMax value. Here's an example:
{ "type": "cityGained", "change": 1, "changeDivByCities": 100, "changeMax": 10 },
This means that if you gain a town or city, the stat changes by min(changeMax, change + changeDivByCities / numberOfCitiesOnMap). So 1 plus 100 divided by the map size, but no more than 10. This is especially useful for stats with powerful effects, where you want them to happen more slowly on large maps.
When a stat reaches 0 or 100, it can affect the hero by making them leave, killing them, changing them into another hero, enabling coronation victory without having the required rep, or winning the game altogether.
Here's the values to set for these effects:
[hero1]_hire_[hero2]
to en.properties.
For example:
painted_sorceress_hire_secret_heretic=Oh, Kamina is so eager to please! We all know why, of course.
This has painted_sorceress (Izegbe) comment on you hiring secret_heretic (Kamina Ver).
{
"name": "health_and_safety_DOUBLE_TIME",
"eventInfoPrefix": "cast DOUBLE_TIME health_and_safety",
"messageImages": ["scaled/X2-Health-and-safety3-200.jpg"],
},
The eventInfoPrefix is what the system uses to match to combat events. Here, it says that DOUBLE_TIME has been cast by health_and_safety. The message has as many variations as there are message images - so just one in that case, which is:
health_and_safety_DOUBLE_TIME0=Double time, men! Like we trained!
To create a comment when a hero observes an enemy hero's ability use, add one like this:
{
"name": "HYSTERICAL_BLINDNESS_druid",
"heroType": "druid",
"sort": -1,
"eventInfoPrefix": "received HYSTERICAL_BLINDNESS",
"messageImages": ["scaled/X-34-Druid-200.jpg"]
},
Welcome to the inevitable post-release bugfix update!
I am very pleased to announce that Heroes & Villains, a DLC for Airships: Conquer the Skies, is now available!
[previewyoutube=WNErufrgWsk;full][/previewyoutube]
In Heroes & Villains, you can recruit commanders for your airships and governors for your cities, and use their special abilities to conquer the world.
Commanders can outflank enemy ships, supercharge their engines, or repurpose random objects as ammunition. And some commanders are sorcerers who can blind enemies, control the weather, or summon creatures to aid them.
Meanwhile, governors increase the productivity of cities, quiet unrest, and can pronounce edicts and events such as martial law, forced labour, or a fun masked ball.
Based on your actions, these characters can gain experience, gain or lose their loyalty, or become more angry, stressed, insane, powerful, famous. Over time, some will change into different versions of themselves - experienced or embittered or empowered. Disloyal governors can be great liabilities, while some heroes can become famous or magically powerful enough to help you win the game.
Diplomatic incidents can now arise between empires, where you have to decide whether to trust or betray your neighbours. Risk war to burnish your own reputation? Encourage cultists? Fight pirates together? The right answer depends very much on where you are, what you need, and what you know about the other empire.
Ship crew now gain experience with each battle - assuming they survive it, that is. So here's an incentive to keep those little air sailors alive, maybe give them a sickbay, maybe some better armour. Or don't bother - there's always more where they came from.
Also, here's a an extra surprise feature: You can design and award medals to ships based on their experience level. Each medal tier only has a small number of medals, and the medals are permanently lost along with their ships, so make sure you keep your medal-bearing ships alive.
Also note that if you join a multiplayer game, you can use the DLC during the game even if you haven't bought it. I wanted to avoid splitting the player base along DLC lines.
And as always with any big release, there are probably bugs, so if you encounter any problems, please report them on the Steam forums or on Discord, and I'll get to fixing them right away.
And now go enjoy the DLC!
---
I am also happy to announce that Airships is part of Simfest, the Steam festival celebrating all things related to simulation games. From today through July 24, Airships is 50% off! Do check out Simfest to see a wide variety of the latest and greatest simulation titles, both newly released and coming soon.
Alongside the DLC release, the baseline version of Airships is also getting an update with some new things and rebalancing.
Landships are now available at tier 0, using wheels instead of tracks. Of course, these landships need to be propelled somehow, which is why there's now teams of lizards you can attach to your vehicles. They're not very fast, but they're cheap and work perfectly fine.
The game now supports weapons with arcing ballistic trajectories. Most weapons still have flat trajectories, but grenades, ballistas, and heavy bombards have arced ones. In addition, there's now trebuchets as a tier 0 siege weapon, and mortars, which you get along with cannons.
Some modules got a major redesign, such as imperial cannons, which now do splash damage, acid spitters, which are now rapid fire, and targeting computers that now assist guided missiles.
The weather will now sometimes change during a fight - rain starting or ending, dusk turning into night, dawn into day, and so on. And there's a bunch of performance improvements and bug fixes, including a fix to a desync bug that's been plaguing the game for about a year now.
Here's the complete list of balance changes:
With Heroes & Villains releasing in one week, here's a post about some of the design decisions I made.
Last year, I taught a class at the Zurich University of the Arts about using game mechanics to tell stories. It was a very small class, and so we spent our time sitting together, playing games, and discussing them. We played Crusader Kings 3, Rimworld, I Was a Teenage Exocolonist, Six Ages: Ride Like the Wind, and more. I'm not sure if we figured out what was intended to be the core theme of the class, but we did learn a bunch of things about characters in games and procedural narratives.
Conveniently, I then immediately got to apply these things to the design of the Heroes & Villains expansion.
One of the surprising strengths of I Was a Teenage Exocolonist, a game about surviving your teenage years on an alien planet, is that its characters are handcrafted rather than procedurally generated. It's a game that's meant to be played through repeatedly as you figure out how to achieve your goals, and so you meet the same people again and again. My assumption would have been that you get bored of the characters, but in fact your emotional connection to them deepens with repeated playthroughs.
In comparison, Rimworld has a pretty sophisticated system for generating characters with all kinds of different traits - but because these traits get jumbled up each time you play, repeated playthroughs actually alienate me from the game characters. As I see more and more recombinations - and as people keep on dying from random rabid squirrel attacks - I stop seeing them as people and just see them as collections of traits that are more or less useful.
So for Heroes & Villains, I intentionally chose to go with handcrafted characters - quite a lot of them, more than sixty, but you'll still see them again and again. So that when you see a familiar face pop up, you'll go "oh, it's that guy!"
The second decision I made was to express stories through mechanics as much as possible. Both characters' stories and diplomatic incidents focus on mechanics and tradeoffs rather than having large amounts of flavour text.
This is a response to another game we looked at, Crusader Kings 3, which has elaborately written events with text that I read maybe once, if at all. It's just too much text, and the text is so specific and detailed that reading it actually breaks my suspension of disbelief. Oh, your dog gets lost the same way as the dogs of ten previous rulers?
They're doing their best, pumping the game full of hundreds and thousands of events - but it's a losing battle. To make people notice that there's new events in an update, you need to have a significant proportion of new ones, and so each time you have to add even more for it to be noticeable. I'm one dev. I can't possibly write hundreds of events.
Instead, I concentrated on creating interesting decisions and very little text. Heroes have different stats - Loyalty, Pride, Fear, Rage, Sanity, Stress - depending on what kind of person they are, and your game actions affect those stats. So you have Commander Bertelli, whose pride can overtake his experience and turn him into a jerk, or the Aukhan Band of Brothers, whose oath of brotherhood weakens as your empire enters modernity, or Captain Bui, who is consumed with desire for revenge on one specific empire.
The expansion also adds diplomatic incidents, which are events that happen between two empires. They're prisoner's dilemma type decisions, so you have to take into account the situation both empires are in, and their personality, be they human or AI. Perhaps you can afford to antagonise the other empire. Maybe you desperately want to reduce their reputation. Maybe they have grievances towards you, and this is your chance to get rid of them and avert war.
All together, I made those design decisions to provide interesting gameplay experiences and choices, rather than things you numbly click through. You'll be able to see them in one week, when the expansion comes out!
Fixed the AI incorrectly claiming an ultimatum was a "de facto declaration of war". Fixed some text issues.
I am happy to announce that Airships: Heroes and Villains will release on July 20, 2023. It's the first DLC for the steampunk ship-building strategy game Airships: Conquer the Skies.
In Heroes & Villains, you can recruit commanders for your airships and governors for your cities, and use their special abilities to conquer the world.
Commanders can outflank enemy ships, supercharge their engines, or repurpose random objects as ammunition. And some commanders are sorcerers who can blind enemies, control the weather, or summon creatures to aid them.
Meanwhile, governors increase the productivity of cities, quiet unrest, and can pronounce edicts and events such as martial law, forced labour, or a fun masked ball.
Based on your actions, these characters can gain experience, gain or lose their loyalty, or become more angry, stressed, insane, powerful, famous. Over time, some will change into different versions of themselves - experienced or embittered or empowered. Disloyal governors can be great liabilities, while some heroes can become famous or magically powerful enough to help you win the game.
So you should totally wishlist it.
So yesterday I promised I would show you an actual villain from the upcoming DLC. Here's Gwalo. He makes good money selling human beings, and he's happy to help you.
He slightly raises unrest in the city he's assigned to, but he also increases production by 50%, allowing it to churn out ships much faster.
And if that's too slow, he has a Forced Labour edict, which really speeds up production. It doesn't make your empire look very good, but if it delivers a defensive building in time before an invasion fleet arrives, maybe it's worth it.
And if you don't care about your reputation at all, he's happy to help you make some quick cash by enslaving the local population. There's some long-term consequences, but who cares about those - you have a world to conquer.
He'll become more loyal the more cities you pillage, giving him opportunities for his business, but he rather despises kindness, gentleness, and any kind of scientific or educational endeavour, which he does not understand.
So what does "the empire showing kindness to another" mean? Well, sometimes there are diplomatic incidents - another new feature in the DLC - and sometimes there are opportunity to be kind to another empire, such as rescuing their people from pirates, or giving them food when they're starving. Gwalo really hates it when you do that.
Anyway, that's all from me for TactiCon. I hope you enjoyed the DLC preview, and I'll just ask you one last time - to appease the Gods of Marketing - to wishlist Heroes & Villains.
Today's DLC preview post is about Vex:
Vex is a druid who often appears at the same time as some spiders or gargoyles settling into your territory. They can be hired as an airship captain, providing a number of magical spells:
Sinkhole, which spontaneously produces a massive hole in the ground, causing whatever was standing there to crash down. Great for taking out small buildings or making landships lose their footing.
Crosswinds, which for a time entirely prevents a ship from moving, letting you move your ships into an optimal position.
Air Support, here in the form of a flock of eight gargoyles, which will tear apart the enemy ships with their acid spit.
So what does Vex want from you? It's pretty simple, really: wipe out pirates, mad scientists, cultists, machine cubes, and other such blights upon nature, and leave the animals alone. Even if they're giant animals that like to eat people.
And it won't be as simple as keeping your captains' and governors' loyalty just above zero. Even before they quit, low-loyalty characters can be amenable to persuasion from other empires...
As a design note, there's no magical abilities that do direct damage, because I felt that in a game that already incorporates cannons, the ability to cast fireball wouldn't be all that exciting.
Instead, many magical abilities are about battlefield control, and they're generally "plausibly deniable". Maybe the ground did just give way? Maybe there were some unfortunate winds stopping this ship from moving? Maybe some angry gargoyles just happened to fly past and decided to exclusively attack one side's ships because they smelled wrong?
We're pretty sure that was all Vex, but we can't be certain.
Finally, I realised that I have now shown you three heroes, or at least ambiguous characters. Given that the title of the DLC is Heroes & Villains, I will do one more post tomorrow, showing you a very bad man you might nevertheless want to hire.
So yesterday we looked at Commander Bertelli, an airship captain. Today it's the turn of Viviane Garcia, a city governor and ardent socialite.
When assigned to a city, she reduces the local level of unrest, makes it significantly cheaper to build upgrades such as universities and shipyards, but also makes the city much more vulnerable to enemy spies.
She can also be called upon to organise a fabulous masked ball, raising the spirits of the citizens and granting you a bit of reputation. Of course, while everyone is wearing masks, spies have an even easier time.
The masked ball is a city edict, a temporary event that governors can invoke. Other governors have edicts such as declaring martial law, organising a scientific symposium, or using the population for unethical experiments.
(Note to self: commission a version of her portrait where she's wearing a mask.)
She has two stats, loyalty and experience.
Her loyalty is direly tested whenever you perform a spy action, but the very worst thing you can do is hire a man called Pyle McMorley.
Who?
This is McMorley:
As you can see, the antipathy is mutual.
The other stat is experience, which she gains through diplomacy, signing non-aggression pacts, defensive pacts, and alliances.
Once she reaches 100 experience, she transforms into Dame Viviane.
Now she's less interested in masked balls, and she's learned to find out and stifle enemy spies in her city - though she still despises McMorley. And now she has a fame stat, which rises slowly over time, delivering victory after about seven years - if someone doesn't get there first, or sabotages her rise to fame...
So several readers have understandably expressed concern that winning the game through fame will be overpowered. A quick victory that bypasses much of the actual gameplay. That's not the intent here - fame victory should take time and effort, and other players should have the chance to resist it, much like with coronation and worm age victories.
With a DLC like this, I think it's important that the power level of the new features is carefully adjusted. If they're underpowered, the DLC ends up not mattering, and if they're overpowered, the DLC obsoletes the gameplay of the base game. If the power level is right, though, the DLC makes the game more complex and interesting. So that's what I'm aiming for. The heroes you see in these posts will go through plenty of testing and balancing before the release.
Tomorrow: Vex! Combat Magic! Gargoyles!
Fixed a small graphical glitch with the new Suspendium Disruptor.
Heroes & Villains, the upcoming DLC, will introduce captains and governors with special abilities. Today we're having an in-depth look at Commander Bertelli:
He is a captain who may turn up for hire after you conquer a city or develop a new military training technology. As a captain, you can assign him to an airship or landship to use him in combat.
Due to his inexperience, crew actually move a bit more slowly under his command, but his recent education also makes his ship significantly safer, halving the chance of it catching fire. Plus, his ship is ready for new commands twice as fast.
He has a single activated ability, Flank, which he can use once per combat. Flank allows him to instantly move his ship to a location on the far end of the battlefield.
So if the enemy has one of those buildings with cannons sticking only out of one side, he can entirely circumvent them and destroy the building from its vulnerable rear.
Bertelli has two stats, Experience and Pride, which are influenced by events in your empire. He gains in experience from victories and defeats equally, but victories, and especially other empires submitting to yours, really inflate his pride.
If he hits 100 pride before 100 experience, he evolves into Commodore Bertelli, who does have more abilities, but does not especially inspire his men:
The commodore has three abilities:
Double Time, which rapidly increases crew speed for a while. Disarm, which lets his ship target enemy weapons with extreme accuracy. Cripple, which does the same for enemy propulsion:
And now he has a loyalty stat instead - victories, tribute, submission to feed his ego, and he'll be loyal and stay. But if your empire is humbled, he'll seek employment elsewhere.
(Tribute means paying a proportion of your income to another empire. Submission means you transfer some of your reputation to another.)
But if Commander Bertelli reaches 100 experience first, he turns into Captain Bertelli, a well-tempered heroic officer who can potentially win you the entire game:
Under Captain Bertelli, crew move faster and gain more experience after each battle, further strenghening them. He retains the flank ability and also has the cripple ability of his counterpart, and he also has Burst of Speed, which allows his ship to move much faster for a short while.
He too has a loyalty score which reflects his sense of fairness, as he wants you to refrain from tribute and submission, giving and taking.
But then he also has a Fame score, and this score has a little laurel wreath icon at the end, which means that if it hits 100, his fame is so great that he is able to unite the scattered nations under his command - winning you the game.
The road there is a long one - twenty-five combat victories, and every defeat, and every show of subterfuge and weakness makes it take even longer. But again, you will literally win the game, so perhaps it's worth investing in this man.
There are several heroes, both captains and governors, that can win the game. All of them have to evolve into a more powerful form first, and then build up a stat to 100. Any such contenders are also shown in the top right of the map screen, allowing you to keep track of who might be close to winning - so you can do something about it.
After all, if their empire is in ruins, even fame won't save them.
Tomorrow, we look at Viviane Garcia, a socialite and another potential game-winner. And if you enjoyed this, do wishlist Heroes & Villains.
Fixed a bug where AI empires would be more and more interested in non-aggression pacts the more they already had. Instead of the other way around. Math is hard.
Streaming Airships: Conquer the Skies gameplay for TactiCon. If you have questions about the game, hit me up in the chat.
Airships: Conquer the Skies is taking part in Tacticon, a celebration of strategy games on Steam. The game is 40% off, and for the next three days, I'll be posting in-depth information about the upcoming DLC, Airships: Heroes and Villains.
On Friday we'll get Commander Bertelli, a fresh-faced and proud officer.
On Saturday, it's Viviane Garcia's turn - a powerful socialite that can rise to even greater fame.
And on Sunday, we have Vex, who will have your face eaten by gargoyles if you annoy them.
Finally, Sassy Gamers have just posted a detailed interview with me, touching on game development advice, inspirations, future plans, and why I'd bring a magic carpet on a road trip.
So check out Airships if you haven't already, and wishlist Heroes & Villains, and I'll see you tomorrow.
Another update adjusting and fixing things with diplomacy AI. Plus, the smaller Suspendium Disruptor that was meant to make it into the game back in August. And I'm separating fleet AI mods from other mods, and have some additional plans for improving modding. (If you have any particular requests/complaints/questions about modding, let me know!)
A lot of updates recently because DLC development has moved along far enough that I'm playing the game a lot to test things, which means I notice bugs!
Minor update fixing a desync bug caused by Suspendium rays.
So about a week ago I had a heart attack, which is not something I can recommend. I'm now recovering reasonably well, but I'm still pretty tired and have to go through physical rehab.
Of course that does mean that the Heroes & Villains DLC will be delayed. But I was intentionally vague with the promised release date, exactly because with a solo dev, random events can cause delays. So the promised release date hasn't changed - it's still sometime in 2023.
In other news, I am happy to report that the next AMD driver update should contain a fix for the problems in Airships from their end as well. If you continue experiencing graphical problems, do let me know.
Also, there's been a report that the antivirus software MalwareBytes might be causing the game to crash. If the game is crashing to desktop with no error message, do check if your antivirus software might be killing it off. False positives do happen on occasion.
Development on Heroes & Villains was going well before the whole heart attack thing. I was working on diplomatic incidents, and there should be about 40 different ones in the game, all of them involving an interaction - a crisis or opportunity - between two empires.
I also plan to write a few dev blog posts soon, about the details of the AMD bug, and about map generation, which should hopefully be interesting.
For now, I leave you with another three hero / villain portraits:
If you previously experienced glitches or crashes using an AMD graphics card, this update should fix these. Also, if you set the game to graphics compatibility mode to make it work on your AMD card, you should now be able to turn that off - and turn on lighting effects, and get a faster, prettier game.
Note that this fix is really a workaround for a bug (or multiple bugs) in the AMD driver. I'm talking to AMD as well and hope they'll eventually resolve it on their end.
I am happy to announce the upcoming DLC for Airships - Heroes & Villains:
In Heroes & Villains, you can recruit ship captains and city governors to your cause.
Captains improve your ships' performance, and can use their abilities to turn the tide of battle. You can outflank enemy ships, cripple engines, create smokescreens, and more. Some captains also have unnatural powers that let them control the weather, confuse your enemies, or even raise the dead.
Governors can be assigned to cities to reduce unrest and increase productivity. Some of them can also issue temporary edicts such as declaring martial law, hosting a masked ball, or using the citizens for gruesome experiments. Others can get rid of monsters or pirates for you. All for a price.
Captains and governors react to events and your actions. A peace-loving governor may quit if he sees you commit one too many war crimes, whereas a researcher can gain experience from dissecting the monsters you kill. As time goes on they can change - for better or worse - and a few of them can become famous enough to re-unite the warring city-states, providing a new path to victory.
As for your crew, assuming they don't get killed in battle, they can gain experience, especially if trained by a suitable commander.
Finally, your realm can become entangled in various incidents that require you to determine - or guess at - what your opponents will do. Are they willing to risk war over a trade dispute? Is that charming nobleman an asset or a spy? Is your governor's clever plan going to work? Are you willing to accept the help of heretics?
The character art is created by Samma van Klaarbergen, and the DLC features several new pieces of music by Curtis Schweitzer.
The DLC will cost $8.99, subject to Steam regional pricing. It will release sometime in 2023, and you can wishlist it here now.
Based on requests and ideas from the Discord community, I've added a whole bunch of new heraldic charges to the game. (Heraldic charges are the images of animals and objects and so on that are found in coats of arms.)
I've also added bonuses to eight of them:
+30% armour blast resistance
No maintenance cost for town upgrades
-75% armour HP, double lift
Spies can pursue intrigues, with an increased success rate
Additional unrest from towns and cities, building cost and maintenance is halved
+50% Spy defense
Double research and reputation from universities
Double reputation from sending delegations
Finally, I also added five new heraldry layouts:
DLC Status:
[olist]
The DLC announcement will be delayed to February because I didn't account for all the things I needed lined up for it, including key artwork. Actual development on the DLC is going well, though, and I will soon be in a position to announce it. Apologies for that.
So I am about to board one of those novel heavier-than-air flying contraptions to travel to the remains of the Old Empire (AKA England), but I wanted to keep you informed of plans for next year. There'll be a bugfix release in January dealing with some user experience and balance issues, and updating the Chinese translation to an improved one created by players. And then in late January I'll be announcing an expansion for Airships. The name and topic of which is still under wraps, but I can say that Curtis Schweitzer has once again signed on to create music for it. Until then! (Image copyright Roby, CC BY-SA 2.0 be) Addendum for expectation management: The expansion isn't sea-ships, because I still have some game design problems with sea ships to figure out.
Special eras are one of the features that I introduced in the co-op and conquest update in August. These work by temporarily changing the rules of the game, and may also have a victory condition, where an empire can be rewarded for ending the era early.
Like pretty much everything in the game, these are data-driven, so you can add new ones by modding. Here's how.
(This post assumes that you know how Airships mods work. If you want an introduction to basic modding, check out this article first.)
Play in Airships progresses through a series of eras, which slowly change the game balance, decreasing the unrest from empire size, and increasing base research and the number of spies available. Each era has a chance to be a randomly chosen special era, which accumulates over time, so that while not every era is special, you will definitely get some special ones. You can see this information in StrategicEras in the game data. Of course, you can also mod this, changing the tempo and balance of the overall game if you wish.
Special eras are stored as EraModifiers in the game data. There is also always a bonus of the exact same name, which is active while the era is active. (So whenever you create a new EraModifier, create a Bonus with the same name.)
It's probably a good idea to open eraModifiers.json with your text editor so you can see concrete examples of what this article is about.
You can also download and read the example mod that adds one new EraModifier.
Here's a very simple EraModifier, Age of Plenty:
{
"name": "AGE_OF_PLENTY",
"pattern": 12,
"eraIcon": { "src": "ui", "x": 80, "y": 384 },
"eraImg": { "src": "bountiful.jpg" }
},
So apart from the name, we want a 16x16 icon for the era, a 400x300 image for the announcement dialog, and a background pattern for the dialog. (The patterns are numbered 0-24 and can be found in data/images/patterns.png. You can also leave out this value, but it's prettier if you have a suitable pattern!)
There are also three strings in en.properties associated with this modifier:
bonus_AGE_OF_PLENTY=Age of Plenty
age_desc_AGE_OF_PLENTY=An age of bountiful harvests.
age_fx_AGE_OF_PLENTY=+15% income\nDouble fleet resupply speed
So that's the name of the era, a prose description of what's happening, and a list of gameplay effects. (\n is a new line character.)
But how does this actually do anything? By being a bonus! As you may know, bonuses can have all kinds of gameplay effects in the game. For example, the AGE_OF_PLENTY bonus is used in the EmpireStat value for city income:
{
"name": "CITY_INCOME_PERCENTAGE_BONUS",
"value": {
"base": 0,
"deltas": {
"EXTRA_INCOME": 15,
"AGE_OF_PLENTY": 15,
"LONG_WINTER": -15,
"LONG_SUMMER": -10,
"AGE_OF_STORMS": -10,
"GREATER_CULT": 15,
"AUTARKY": 5,
"TEA": 5
}
}
},
There's a lot of EmpireStats that bonuses can modify - here's a full list. They can also unlock city upgrades, modules, and armour and change their stats.
Here's some examples of what an EraModifier could do via bonuses:
"desc": { "base": "age_desc_AGE_OF_UNREST", "REVOLUTION": "age_desc_AGE_OF_UNREST_revolution" },
"effectsDesc": { "base": "age_fx_AGE_OF_UNREST", "REVOLUTION": "age_fx_AGE_OF_UNREST_revolution" }
End Conditions
Last but not least, EraModifiers can have end conditions. When they are met, the era ends. Empires then receive rewards (or punishments) based on who triggered the end condition.
Here are the fields for the possible end conditions:
"eraEnderReward": {
"base": {
"name": "pietyVictory",
"title": "pietyVictoryT",
"rep": 20,
"img": { "src": "temple" },
"endsEraModifier": "AGE_OF_PIETY"
},
"WORM_EYE_CULT": {
"name": "pietyVictoryCult",
"title": "pietyVictoryCultT",
"bonus": "GREATER_CULT",
"destroyAllUpgrades": "holySite",
"img": { "src": "cultists", "x": 0, "y": 0, "w": 400, "h": 300 },
"endsEraModifier": "AGE_OF_PIETY"
}
},
For the other empires that didn't manage to control the holy sites, there are four distinct outcomes based on whether they are cultists and whether the winner is a cultist:
"eraNonEnderReward": {
"base": {
"base": {
"name": "pietyOtherVictory",
"title": "pietyOtherVictoryT",
"rep": -5,
"img": { "src": "temple" },
"endsEraModifier": "AGE_OF_PIETY"
},
"WORM_EYE_CULT": {
"name": "pietyOtherVictoryOtherCult",
"title": "pietyOtherVictoryOtherCultT",
"rep": -5,
"destroyAllUpgrades": "holySite",
"img": { "src": "cultists", "x": 0, "y": 0, "w": 400, "h": 300 },
"endsEraModifier": "AGE_OF_PIETY"
}
},
"WORM_EYE_CULT": {
"base": {
"name": "pietyOtherVictoryCult",
"title": "pietyOtherVictoryCultT",
"rep": -20,
"img": { "src": "temple" },
"endsEraModifier": "AGE_OF_PIETY"
},
"WORM_EYE_CULT": {
"name": "pietyOtherVictoryBothCult",
"title": "pietyOtherVictoryBothCultT",
"destroyAllUpgrades": "holySite",
"img": { "src": "cultists", "x": 0, "y": 0, "w": 400, "h": 300 },
"endsEraModifier": "AGE_OF_PIETY"
}
}
}
Note that eraNonEnderReward is a nested bonusable value. The first level is determined by the bonuses of the empire the reward applies to, and the second by the bonuses of the empire that ended the era.
Testing
Once you've added a new EraModifier, you can test it using the "Start Age" cheat option. Note that the game needs to be unpaused for the age to actually start. (And yes, all the cheats in the game started out as tools for testing the game.)
Conclusion and Example Mod
Putting this all together, you can create special game eras that provide variety to gameplay by changing the way the game works and giving the player interim goals. As an example of this, here's a mod that adds an Age of Schism, during which the Trilunar Church breaks into three competing sects you can try to reunite - or destroy, if you're cultists.
As always, if you have any questions about this post, feel free to comment below, and if you need help with modding, hop on the Discord and ask!Fixed land anemone text, updated German and Chinese translations.
Fixed bug where AI would apply -200 evaluation to offers for city transfers.
The game is set a little over a decade after the collapse of the old empire. The city-states that once comprised it are now fighting for supremacy, to recreate the empire under their control, or to create some new social order altogether.
What eventually became the empire started out as a confederation of city-states that shared a language, culture, and religion. They wanted a way to resolve conflicts without resorting to constant low-level warfare. So they created a legal framework for resolving these disputes and elected a chief judge to rule on cases. When the old judge died, they would each send one elector to a conclave, and the electors would discuss the merits of possible candidates and choose a new judge.
Cities each had their own method of choosing their elector. In some cases, they were an envoy sent by the city's ruler. In others, electorship was hereditary and separate, or decided upon by a council. Some cities even experimented with popular election. The ideal elector was a wise, sensible legal mind who would rationally choose the best option in the conclave. But right from the start, electors usually represented the interests of the cities they were sent by, or their own interests entirely.
As time went on, more city-states were added to this confederation, some forcibly, some voluntarily. Most of those newer members did not have the right to send electors, but a few powerful ones did.
Less than a century later, a series of military crises meant that the cities needed to have an unified response. They made the chief judge - a fierce woman called Mathilda, later Mathilda the First - into the chief general of their armies, and eventually agreed to give her the power to levy their armies at will to fight common threats.
From then on, the power of this judge-emperor increased. They were able to issue legal rulings that affected the laws within the city-states, not just between them. And they would appoint an increasing number of important and lucrative positions in a growing bureaucracy, such as the harbourmasters of the great ports.
Influence with the emperor became ever more useful and lucrative, and so the process of election became increasingly corrupt, with electors receiving exorbitant bribes and threats to support specific candidates. As each successive emperor used their power to favour their particular faction, the prestige of the institution decreased.
Corruption and favouritism evolved into infighting, assassinations, and eventually outright civil war, as multiple power blocs elected their own emperors and fought for power.
Finally, Konrad II ascended to the throne and managed to stabilise and reform the empire. He granted each member city its own elector and introduced a rule that an emperor could only be chosen by a quorum of a supermajority of electors. He also partly succeeded in reforming imperial law and administration.
And indeed, upon his death, the electors came together and peacefully voted for a successor - all but two of them, electors for two of the founding cities, who refused to attend.
For a while, this new order held and produced peace and prosperity, but over time, the administration began to decay again. Electors again started taking bribes, the quality of emperors declined, and a new problem became apparent: cities could now threaten to withold their electors, making it impossible for a new emperor to be elected. Months and sometimes even years would pass with no successor enthroned.
When elections did happen, the emperors were weak and often elderly, ruling only for a short while. Cities resorted to mutual treaties and the occasional skirmish to resolve their differences, as appealing to the justice of the emperor was no longer practical.
By this time, imperial electors had become deeply hated by the common people, emblematic of the misrule of the empire. The monstrously venal and corrupt elector became a stock character in pamphlets and plays. Some of them were attacked by mobs or forced to resign from their positions by threat of violence.
The development of powered suspendium and modern airships changed things once more. The world became more connected, and wars acquired a new speed and violence. A popular reform movement, led by nobles and military men, installed a new emperor, Theomisos V. Together, they did away with much of the bureaucratic apparatus entirely, and instead created an imperial fleet as a power base and peace-keeping force.
This movement did not last long, destroyed by infighting and the death of its most senior members. Despite the power and authority of the fleet, the empire now entered an even steeper decline, as various factions installed and deposed puppet rulers to enrich themselves and use the fleet to threaten their rivals. Cities that were on the losing side started completely ignoring imperial edicts.
Around this time, a satirist published a pamphlet tallying the exact (and surprisingly low) cost of gaining the imperial throne - the amount of bribes needed to arrange for the previous emperor's unfortunate fall from an airship, and the payments to electors to ensure your own election. Within the imperial administration, it was widely acknowledged as accurate.
The final emperor, then, was a wealthy merchant of impeccable upbringing who had bribed the right people. To the surprise of the realm, rather than wanting to enrich himself, he genuinely intended reform. Once installed on the flagship of the imperial fleet, he started issuing radical edicts to reform the empire, much to the displeasure of the wealthy and powerful.
What happened next is unclear: Some claim that he went mad, or had indeed been mad all along. Others claim that he was preparing an edict abolishing serfdom across the empire. But there definitely was some great battle involving the imperial fleet, destroying it utterly. Were they attacked by mercenaries hired by powerful factions? Did the fleet split into factions that fought each other? We don't know, but the emperor disappeared, and the power of the fleet was no more.
There were several attempts to hold a conclave afterwards, but none of them came close to having enough electors - in part because several electors were killed by angry mobs soon thereafter, and their successors were unwilling to travel. Years had passed without an emperor before, but after more than a decade, it became clear that there would not be a new conclave. The cities, now free of the constraints of imperial rule, began looking at each other and sharpening their knives...
If you enjoyed this, you may also enjoy the previous lore dump on Calendars, Moons, Festivals and Heresies.
Maybe actually fixed the network desync problem I've been chasing. Plus, combat music triggers correctly now!
Hey look, the co-op and conquest update is out! This huge update for Airships has been four years in the making, and it's the completion of an eight-year development project. Headline features are:
FYI the co-op and conquest update will release at 7 PM CET today, which is in nine hours. The reason for the timing is the mysterious internal workings of Steam.
We're now one week away from the co-op and conquest update release! In a feat of excellent timing, I've spent most of the last three weeks sick with Covid, from which I'm still recovering. Still, the release can go ahead. It's been getting beta tested for the last several months, and I'm confident it's pretty solid by now. Of course there will be bugs - there always are. If you find one, don't despair, come over to the Discord and report it in the bugs channel, or drop me an email. I am really excited that you soon all get to play the version I've been working towards for the last four years.
I am happy to announce August 16, 2022 as the definitive release date for the huge free Co-op and Conquest update to Airships: Conquer the Skies.
The update adds co-op airship combat with any number of human and AI players to each side of the fight.
It also massively expands the features of the conquest mode:
A full-featured diplomacy system. The AI takes a "realpolitik" approach, and the system explains in detail why the AI likes or dislikes a diplomatic action. So no AI opponents that hate or love you for no clear reason. Your diplomatic actions also affect your reputation in the world as a whole.
I'm especially pleased with the ultimatum system, where you can send an interaction saying "do this or else I'll do this other thing". This can be "pay me tribute or I declare war" but also more out there things like "upgrade our non-aggression pact pact to a defensive pact or I'll cancel our trade treaty".
You can now upgrade your towns and cities with shipyards, factories, police stations, pleasure palaces, labs, and more. Balance your expenditures between building up your empire and conquering more of it.
There are new systems for logistics and city unrest, as well as a fully rewritten espionage system, a revamped technology tree, and a much prettier new map.
Finally, there are now special eras in conquest that change things up by having special rules. Like an Age of Piety that reduces unrest and gives the players a bunch of holy sites to fight over. Or an Age of Exploration that lets the players send out expeditions to find knowledge and valuables.
---
Airships: Conquer the Skies is a real-time strategy game where you build steampunk vehicles and fight with them against other players and weird monsters. It's been around for a number of years and is developed solo by David Stark.
Press Kit
The combat AI no longer massively overvalues gatling guns and tries to point them at the enemy to the exclusion of all else.
Fixes a bug where a tier 0 start caused no ships or buildings to be created.
Version 1.0.23.13 has some fixes and improvements for the AI fleet creator:
This update introduces a new modding tool for creating sets of ships and buildings for the AI to use in conquest. You can unlock it by going into the Settings and enabling "Modding Tools" there.
You specify tiers of ships/buildings/landships for the AI to build. You can also tell it what ships should upgrade into other ships, or let it determine this automatically.
The technologies to research are automatically generated from the tiers you specify, but you can add additional techs to research, eg flamethrower or steel armour improvement techs.
The resulting fleets can be exported as mods and published to Steam. You can also open pre-existing built-in fleets to modify and improve them.
There is also an informational panel on the side that gives rather opinionated guidance on how to make a fleet that the AI can use properly, with enough variety of designs and so on.
Part of the reason for this new feature is that I want to overhaul the existing fleets in the game, so if you previously contributed a fleet, do have a look and get in touch.
Fixes three crash bugs:
As previously mentioned, I really enjoy the history blog ACOUP. One of the things it's brought up recently is the difference between strategy, operations, and tactics in war. I want to talk about these in terms of how they map onto computer games, including mine. Strategy is about what you're trying to achieve, and the big-picture of how you are going to achieve it. "Conquer the world with my unstoppable legions of doom" is a strategy, if a simple one. Operations is about implementing strategy: troop movements, logistics, all that stuff. "March doom legion XVI towards the capital of the Alliance of Really Nice People" is operations. Finally, tactics is about how to actually fight effectively: "Use doom trooper death cannons to vaporize enemy soldiers" is tactics. Under this terminology, a lot of strategy games are actually mostly about operations, but the other two layers also come into play. In Civilization games, the strategy layer is the different victory conditions and diplomacy between players. Because it's a game, the aim of your strategy is going to be "win the game", but it may be "win the game by conquering all enemy capitals, starting with the French next door" or "win the game by cultural dominance by cranking out lots of wonders". The meat of the game is in controlling operations, which means building units and moving them. Tactics are the fights between individual units, and are abstracted away. In Starcraft, the strategy layer is entirely determined by the plot. The player does not make strategic decisions, but rather they are given operational goals as mission victory conditions. Gameplay consists of both operations (build up an economy, expand, build units, move them into position to fight) and tactics (give commands to your units during fights). Note how the terms "macro" and "micro" nicely map onto "operations" and "tactics". In XCOM, the strategy is also told through the plot, and is roughly "use small high-tech squads to disrupt and investigate alien activities to determine and stop their evil plans". Again, you have no control over the strategy: You can't, for example, employ the strategies of "use normal national military forces to attack alien strongholds" or "ally with the alien invaders". Gameplay consists of both operations and tactics, but here it's split into two distinct modes: upgrading your base, researching technologies, and picking missions is operations, while individual missions are tactical. So finally in Airships, especially with the upcoming diplomacy update, all three layers will be represented: Like in Civ, there are multiple victory conditions and free choice as to whom to attack and whom to ally with, giving you control of strategy. And operations means building airships, landships, and buildings, and moving your forces to attack and defend. Finally, the combat mode is where the tactics happen. This is not to say that Airships is the best game out of those because it does all of these three layers. It's a design decision which layers you give the player control over. But I found it interesting to think about, especially because in terms of code, there are three AI modules that nicely map to these layers: a strategic one that handles diplomacy and victory plans, an operational one that builds and moves things, and a tactical one that commands ships in combat.
Various bug fixes, mostly to the ship editor.
After a great deal of community testing, multiplayer games should now be a lot more stable!
I've written a lot about the upcoming diplomacy update for Airships, but have so far refused to commit to a release date. Estimating how long software takes to write is hard, and I didn't want to produce a string of broken promises. Now I'm finally close enough to everything being ready that I can do so:
The diplomacy update will come out in August 2022. It's tentatively called "Airships: Conquer Together".
So that's in about five months, nicely two years after the 1.0 release. It will be a free update revamping conquest mode and adding a large number of features. A more financially savvy person would be selling this as an expansion pack or calling it "Airships 2". But it's free, because it's where I want the game to be at. After the release, any future major features will come in the form of expansion packs.
Why another five months? I want to make sure I have enough time to test, polish, and balance the game.
What does the update contain?
Co-op combat and conquest: You will be able to fight with any number of players and AIs to each side, each controlling your own ships. You can set up individual multiplayer combats with multiple players on both sides. And if you're allied in multiplayer conquest mode, you can fight alongside each other.
Full diplomatic system: You can conduct diplomacy to determine war, peace, and a number of levels of alliance and cooperation. You can send ultimatums to demand diplomatic concessions. And the AI is able to do all of this too, including a detailed numerical explanation for why it accepts or rejects a deal.
City upgrades: You can now upgrade your towns and cities with shipyards, factories, police stations, pleasure palaces, labs, and more. Balance your expenditures between building up your empire and conquering more of it.
World ages: As the game progresses, the world enters different ages that change the rules and balance of the game. An age of storms can make it harder for airships to navigate. An age of piety will see empires racing to control holy sites. An age of exploration lets you send out your ships to seek out strange new lifeforms to study and, er, plunder.
Fleet supply system: Logistics are a very important part of warfare. Yes, you can still assemble a doom stack of dozens of ships, but it will be a lot more cumbersome than a careful deployment of forces.
Reputation system: Breaking treaties and committing atrocities will decrease your standing, while defeating pirates and slaughtering monsters increases it.
New additional victory conditions: Instead of conquering every city, you can also amass enough power and reputation to have yourself declared emperor - though other players may interfere with your coronation going ahead. Or you can forge an alliance strong enough to dominate the world. Or, if you're a cultist, you can make worms erupt from everyone's eyes. That's a kind of victory, too.
New espionage system: An entirely new set of spy actions and mechanics that reward long-term planning and produce more interesting results.
A prettier map: Inspired by renaissance maps, featuring landmarks and marginalia drawings, and a clearer presentation of information.
Revamped tech tree: Based on player feedback, and adding in new technologies for city upgrades.
Revamped coat of arms bonuses: Also based on player feedback, and taking advantage of the new features in the game.
Various other balance and user interface improvements: Too many to number here individually.
So what's left to do in those five months?
Networking: This is the big show-stopper right now. Multiplayer games still have weird lag problems and failures. I really really really want to fix those before releasing an update that's about co-op combat and diplomacy. So right now, I'm doing regular test games and updates to figure out those problems and fix them. If you have had network problems with the game such as crashes or failed reconnects, please get in touch and volunteer for those test games, so I can figure out what's wrong.
Refining AI logic and performance: The new AI code for diplomacy is mostly complete now, but it simply needs more testing as well as some performance enhancements. Turns out that considering every single treaty you could sign with every single other empire in the game is kind of time-consuming!
Updating tutorials: Because the game - and especially conquest - has changed, I need to update the tutorials. As an existing player, you may not care about this, but the game needs to be accessible to new players as well.
User experience polish: With all those new features come a lot more user interfaces that have to be made usable.
Testing and balancing: Finally, an update this big simply requires a lot of testing to make sure it actually works and is reasonably balanced! There will probably be a closed beta followed by an open beta in the months leading up to the release.
And a hundred other small things. :)
Fixed performance / freezing / corruption issues with mod crossloading.
As so often after a bigger release, we now have a flurry of smaller releases to fix and improve things. This update does two things: It improves performance in conquest mode, getting rid of pauses related to the road update, and it improves the ability of tracked landships to move across rugged terrain a bit.
Fixed a bug where the ship editor would crash to the main menu.
I completely redid the way roads work to be prettier and more flexible. As a result, landships can now finally travel via multiple cities in one go. There are also more sea lanes. Saves from previous versions can be loaded in too, but might not look as pretty. If you want to finish ongoing games using the previous version, you can switch to the "1.0.22.2-oldroads" branch in Steam. Also, landships are now are 25% cheaper to build and maintain. Legs are up to 50% more expensive, relatively speaking. And there's the occasional AI player that focuses on landships. Other fixes:
I've mostly been busy with the diplomacy update - more on the state on that soon - but here is a minor update that fixes some crashes and visual issues, and improves performance:
Airships (v 1.0.22) now supports mod cross-loading, which means that you can enter any modded multiplayer game and it will automatically transfer over and activate any mods you need.
It also takes care of managing multiple versions of mods, so if you have the wrong version of a mod, it can transfer it over.
Security-wise: Airships mods are entirely data-driven, so you're not copying over any executable code.
The game also keeps the crossloaded mods separate, so it won't overwrite any existing mods you have installed.
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
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:
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.
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!
Minor update adding new map sizes (including a smaller one for multiplayer matches) and an updated Russian translation.
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
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.
This is a quick update that fixes some potential sources of multiplayer desyncs and adds more logging to catch any remaining problems. Happy playing!
After a bunch of beta testing, it's time to release the new networking code for everyone. There are still rare desyncs, but the game is able to recover from them, and I hope to hunt down the last few issues soon.
I've been working on improving the game's networking and save/load functions, and it's now time for a last open beta to make sure it all works before it gets officially released. So if you're interested, switch to the "mp_beta" branch to experience:
Well, looks like you all really enjoyed this years April Fools for Airships, which introduced a set of in-game ads for a variety of strange and frightening products and services. While April 1 has passed, by popular request, the ads will resurface occasionally in loading screens.
If you missed them, here's all the ads, plus some commentary:
These were a real product in late 19th century America. I changed frighteningly little in this ad from the original. Given the way they're advertised, you'd expect them to contain cocaine or amphetamine, but it was actually worse: they contained strychnine - hence the line about rat poisons at the bottom. I also drew the third face in the picture to show signs of risus sardonicus, also know as rictus grin, which is a symptom of strychnine poisoning.
So why would you put strychnine into these pills? My guess is that as a nerve poison, a small dose would make you tense up in a way that might be mistaken for increased vigor.
"Make easy money at home" scams have a long history extending to today. Of course, no one actually wants those geckos you're breeding, and the FAQ I wrote suggests that the real business model is selling overpriced anti-gecko tincture to the marks.
A silly pun. The three monks have beards that look like monk's beard - barbe di frate, a type of vegetable. I always get confused and call it frate di barbe instead - monk of the beard.
Floatmead is full of Suspendium and hence provides unique challenges in drinking. The contraption here is basically an upside-down Belgian beer glass holder.
These are partially a reference to Triscuits, a long-running brand of biscuit with an unclear etymology. Likely they were named Triscuits because they were baked with elec*tri*city. But "biscuit" really means "twice baked", so it should be "thrice baked", which they aren't. Anyway, Heptascuits *have* been baked seven times, rendering them akin to some new kind of metamorphic rock with infinite shelf life and zero edibility. Which brings us to the other reference, ship's biscuits or hardtack, which were the standard ship's ration during the age of sail, and only slightly more edible. Remember: if the biscuit floats, it's safe to eat. If it sings, it's not.
In our world, "moon hoax" refers to the conspiracy theory that people never actually landed on the moon. In the world of Airships, there are three moons, and no one claims to have visited them. But they're central to the dominant religion of the world, so this "moon hoax" book is really an attempt by cultists to recruit new members. There's a long tradition of cults and other fringe organisations operating their own tiny publishers to create materials and sometimes act as fronts.
Mushroom Wine from the Unterzee! This is a reference to the Fallen London universe, and Sunless Sea in particular. I'm really pleased with how the drawing of the mushrooms turned out.
This is a reference to that infamous scene in A Clockwork Orange. See "Burgess" and "Alexander Lane".
Of course I had to include a dubious "tonic". There were a lot of those in the 19th century, and some of them are in fact still around. Their ingredients ranged from harmless plant extracts to highly dubious substances, including, again, strychnine. The joke - yes, this is where I explain all the jokes - is that it's deliberately left unclear what the relationship of spiders to this tonic actually is. For spiders, against spiders, made with spiders, who knows? The offset of the color and the black is intentional, of course, meant to evoke shoddy printing.
Finally, if you look at the detail on the bottle, the ingredients include:
QWhy? ATo create new revenue streams and maximise shareholder value by exploiting existing IP. QI dont see any ads. AThe ads become available at the start of April in your local time zone, and require the game language to be set to English, French, German, or Russian. Also, make sure that you are not in a beta branch on Steam. QI do see ads and I wish I didnt. AIf you really must drive me to ruin with your unwillingness to see ads in a game you already paid money for, go into Settings & Info in the main menu to turn them off. QIm not entirely clear on how to purchase the advertised items. AYou may request a detailed catalogue of items by sending two Gug Shillings or other coins of equivalent value to 11 Uncouth Road, New Glottenbourg. QIs spider tonic made out of spiders? Is it to prevent spiders? Is it for spiders??? AWhat ridiculous questions. Everyone knows what spider tonic is. QAre Ambition Pills safe to take? AWe have heard no complaints. QHow do I drink floatmead? ABow your head and then carefully invert the flagon to let the mead float upwards into your mouth. Swallow carefully. QHelp! I have bred too many geckos! Theyre in the walls! Theyre everywhere! ASend a letter to 11c Goat Lane, Cogburgh. Enclose 3 florins to receive our highly efficaceous anti-gecko tincture. QI have attempted to eat a Heptascuit. ASend a letter to 11d Goat Lane, Cogburgh, enclosing your teeth.
I'm working on an entirely new system for saving and syncing conquest games. It's currently in beta, and it's not certain that it will make it into the game yet, but I thought you might enjoy a dive into the why and how of it. So yeah, this is a pretty technical post you can just skip if you're not into programming. tl;dr is: I'm doing things to make the game go faster. There's two closely linked things here: saving the game, and calculating checksums to make sure that multiplayer games haven't desynced. Desyncing is what happens when the realities of two players in an MP game diverge, which is of course bad. Being able to detect it helps me fix bugs that cause the game to desync. Long-term, I hope to also add in functionality for desyncs to heal automatically. Currently, both save and sync are very simple: the entire game world - map, empires, ships, landscapes - is converted to the JSON data format, basically one long blob of text. When saving, that blob of text is written as a file to disk. When syncing, the game calculates a checksum of the text and compares it to other players' checksums to make sure they're in sync. But that's a lot of data, especially in the later stages on a large map. Dozens of megabytes. And of course the game world can't change while it's being saved, and so when the game syncs or autosaves, there's a noticeable pause. Sometimes, a very noticeable pause that causes your multiplayer game to steadily fall behind, because it can't keep up. The new save system does two things to fix this, both a bit fiddly:
A wondrous All Hallows' Eve to you! Here is small update, featuring a new monster, as is traditional:
I've completely reworked the conquest mode victory and defeat screens. There are now pretty new artworks courtesy of Karina, and a set of graphs and replays.
There is now a calendar. Research, construction, and city takeovers now show how long they will take. The calendar is moddable, and different for cultist empires.
There are also seasons now, affecting the kind of weather you get.
In this release, I've focused on fixing up the rules of combat and what happens after combats, and the AI of boarders and planes. Also, there is now a "Send Feedback" button in the replay system that lets you send me the replay with a comment and bookmark of what you're seeing.
This update has one major change: Ships no longer get all their crew and resources back after a fight. If you conquer a city, you have to wait until its takeover period is complete to get your crew and resources refilled. Edit: Or go back to a city or town you already control. This has some important consequences: hit and run tactics where you repeatedly attack a city and retreat to get back resources no longer work. Not do blitzkrieg tactics where you conquer city after city without stopping. Also, if your ship loses all its crew quarters, it now still retains its crew and is no longer lost, but if it actually loses all its crew in a hostile environment, it is lost. Other changes:
To celebrate Airships selling 100k copies, I'm doing an AMA (a Q&A session) on Reddit. If you have questions about the game, its development, future plans, game development in general, or just want to be told weird animal facts, come and join us right now!
Seven years ago, I started working on a simple game about building airships and blowing them up again. Over time, it became definitely not simple, and Im very proud to announce that its now sold 100000 copies! You can build airships and landships from more than a hundred modules in a free-form way. You can ram enemy ships, board them, watch them break apart, fight against sky-krakens that eat your crew. You can conquer the world in multiplayer. You can replay fights and take over at any point to change the outcome. I designed and developed the game, made most of the graphics and sounds, did the marketing and community management. Curtis Schweitzer has created an amazing soundtrack for it, Karina S drew beautiful art, Javier Zmer improved the sound design, and many many community members have contributed graphics, ship designs, and vast amounts of feedback. The game is a hidden gem : 95% positive reviews on Steam, thousands of user-created ships and hundreds of mods in the workshop, but not much media coverage. So I admit Im also here to say: Hey! Look! We made this thing, and its actually really cool and pretty big now! Come and talk to me: Im doing an AMA on Reddit on Saturday, August 22, 20:00 CEST.
This version adds a lot of new modules and content!
New Modules:
Switzerland! Mountains! Cheese! Also: Games! Here we present a delicious selection of homegrown Swiss games, from the artistic to the deeply nerdy. Do you like machinery? We've got you covered with Farming Simulator, offering an in-depth farming experience with realistically simulated tractors. Or Transport Fever 2, covering trains, planes, trucks (no Superman, though, they didn't get the licence). Something more fantastical? Build space drones in Nimbatus or steampunk machines in Airships: Conquer the Skies. Fight interstellar nuclear war in Stellar Commanders. Keep changing shape as you fight in Morphies' Law! Fight the darkness in Towaga: Among Shadows. Execute amazing feats of gun-play using Retimed's incredibly clever local bullet-time system. Too violent? Take a haunting journey across a dry sea-bed in Far: Lone Sails. Observe the behaviour of crowds in KIDS. Raise a tribe of adorable creatures in Niche, and learn about genetics while you do. Defy gravity in Octahedron! Adventure through varied terrain to build a railway track together with your friends in Unrailed!
There is now a fancier system for choosing the screen resolution and window size for the game. You can now place and remove windows. That's all for this update! More to come in the future.
In 1.0.17, I attempted to fix the long pauses for sync and autosave by making these run at the same time as game rendering. Unfortunately, this is causing the game to freeze on some user's machines, so in 1.0.17.1, I'm reverting to the old sync/autosave system. I will look for another way to reduce these pauses and make the game run more smoothly.
https://store.steampowered.com/app/383840/Nimbatus__The_Space_Drone_Constructor/
You fly around with your ship, the Nimbatus, and build drones from modules to mine into planets and fight enemies. Which is not too dissimilar to Airships, hence this shout-out. Well, that and the friendship.
One of the coolest things about it is that you can design your own input systems for the drones, so you can bind keys to any components you want. There's also sensors and logic, so you can make some sophisticated stuff.
It's been in early access for a while, and is now launching into fullness, with a 25% sale. Check it out!
Robotic sky-squid deployed by the mad scientist. If you defeat her, you can also build them yourself.
You can now view and select the tech available in the ship editor using the Tech Filter available from the top bar.
There is now a research queue. Click on any tech to automatically queue up the research needed for it, or right-click on techs to add them to the queue.
If you missed the stream, you can watch it on YouTube now. Watch us dress up as air sailors, answer questions, and get progressively more drunk. Plus, cats. [previewyoutube=9R0qWM6j8rA;full][/previewyoutube]
It's my birthday on April 18, so I'm doing a birthday stream on the Steam store page of Airships on at 19:00 CET. Q&A, key giveaways, dressing up as air sailors. Be there!
Back nine months ago I wrote an update on the upcoming diplomacy features for Airships. Understandably, you'd like to know how they're getting along. The short version: yes, they're still coming, things just take forever, ugh. As a matter of policy I don't want to give you a detailed breakdown of how I spend my time, because that way lies madness and frustration for players and developer. But suffice it to say that life and hardware failures get in the way sometimes. And I'm basically transforming Airships from a ship-building game with a simple online battle map into something more like a fully-fledged grand strategy game. These usually are made by teams, not individual developers. So all of this is a lot of work. Where is the big diplomacy update now? Diplomacy between human players is done, as is cooperative multiplayer battles. I spent a lot of time doing some careful testing to ensure that this actually works right: players ending up on the right side of battles, logic like "if you declare war on someone, you also declare war on people they have a defensive pact with" working correctly. What's next is a bunch of secondary features meant to fix pain points with the strategic game as it is, and to flesh it out. The first one is a supply system intended to prevent what's called "doom stacks" in Stellaris - players simply lumping all of their ships into one megafleet that zips from city to city conquering, not bothering to rebuild or defend its conquest. You end up with a bunch of doom stacks chasing one another, which isn't all that much fun. The second is a resources system. Towns and cities will produce different resources required for effectively making certain modules and armour. (You'll always be able to make anything you have the tech for, it may just get expensive.) Right now, each place you can conquer is much like any other, but with resources, it will matter what you actually need. The third is a system for upgrading towns and cities, specializing them and increasing your output. Then, I want to rework espionage. Spying was meant to be a catch-up mechanic, but it doesn't really work as that, nor is it very fun. So I'll either make it work or maybe just remove it from the game. Finally, I need to update the AI so it actually understands all these new concepts. I understand that you're probably excited to try out multiplayer and diplomacy, but I do want to deliver all those things at once as a well-balanced package. This is mostly because I don't want to go up to people and say "try multiplayer, it's really good now", while I know that there's still gameplay issues I haven't addressed.
Bugfixes and balance improvements:
I was writing notes for Airships' translators, and realised that I was getting quite chatty in some of them. So I decided to go through the world background lines you see in the loading screen and add some comments.
The Builder Games Sale is now live! https://store.steampowered.com/app/342560/Airships_Conquer_the_Skies/ Airships is reduced an unprecedented 40% - it's not going to be this cheap again anytime soon. And there's a dozen other games of engineering and vehicle construction all discounted this week: https://store.steampowered.com/app/268650/From_the_Depths/ https://store.steampowered.com/app/383840/Nimbatus__The_Space_Drone_Constructor/ https://store.steampowered.com/app/244850/Space_Engineers/ https://store.steampowered.com/app/333950/Medieval_Engineers/ https://store.steampowered.com/app/585420/Trailmakers/ https://store.steampowered.com/app/397340/SimplePlanes/ https://store.steampowered.com/app/570960/Robocraft__Premium_for_Life_Pack/ https://store.steampowered.com/app/285920/TerraTech/ https://store.steampowered.com/app/284160/BeamNGdrive/ https://store.steampowered.com/app/350150/Scraps_Modular_Vehicle_Combat/ https://store.steampowered.com/app/244770/StarMade/ https://store.steampowered.com/app/343090/SimpleRockets/ https://store.steampowered.com/app/750050/Diesel_Brothers_Truck_Building_Simulator/
This version brings both a large list of bug fixes and some nice new stuff.
I've released a new update to the game and the servers. The game should now experience fewer lag spikes and no longer get stuck in reconnect loops.
This update fixes two crash bugs, one caused by loading a combat with a firing beam weapon, and one that happened when a monster nest message was meant to pop up. Apologies for those affected by the crashes. There's also still some multiplayer issues, which I'll be working on today.
[previewyoutube=oDFg42Pnh_Q;full][/previewyoutube] A few days ago, I challenged Stuff+ to fight a new monster I created: The Shellwalker, a biomechanical monstrosity with a nearly impenetrable bone shield. I set him the challenge to defeat it using a fleet worth no more than $2000, because that's the amount I needed. Yesterday, he posted a video of him defeating it, and so today, you all get the Shellwalker to play with - as a monster in conquest mode, or by trying the same challenge mission Stuff+ got. Notably, his method is very different from what I used. So enjoy this creepy new enemy, and happy Hallowe'en!
Have you ever wanted to worship the monstrous Worm Eye? Penetrate the mysteries of life and death? Summon your own undead Kraken? Well, nows your chance. Select the Worm Eye as your heraldic symbol and get access to a whole new part of the tech tree that lets you recruit cultists and shape your cult.
To try it out, start a new conquest game and make a coat of arms that uses the Worm Eye.
Unlike other heraldic symbols, the Worm Eye doesnt give you any immediate advantages, but it unlocks a new strand of the tech tree. There, you can develop your cult and delve into unhallowed mysteries.
At the first level - unlocked if youre playing on at the default starting tech level - you gain the ability to crew your ships and buildings with cultists. Theyre not quite as fast and effective as real sailors, but their fanatic devotion means that they can endure even worse living conditions, so you get more of them, and theyre cheaper, too.
At the second level, you can choose the form of your cult. Does it try to spread its beliefs, or is it a secret cult? In the former case, sympathizers in other cities make your spy actions more likely to succeed. In the latter, your cults closed nature makes enemy espionage harder. (Oh, by the way, I fixed up and rebalanced spy actions for this update.)
At the third level, another choice: Does your cult appeal to the masses, or does it court the already wealthy and powerful? Do you want even cheaper crew, or increased industrial production?
At the fourth level, your cult starts investigating deeper mysteries, blurring the line between life and death. Your sickbays can now bring dead crew back to life.
Finally, at the fifth level, you use your necromantic knowledge to resurrect and control the carcass of a giant aerial kraken. The resulting beast is rather ponderous, but very hard to kill, and its partially decayed tentacles do massive damage especially to buildings.
All this is now available in the newest Airships: Conquer the Skies update. Currently 30% off. Merry spookmas.
In honour of the season, I have supplied YouTuber Stuff+, who introduced many of you to Airships, with a new monster. [previewyoutube=CPaW2Wqd6pE;full][/previewyoutube] The Shellwalker, a biomechanical abomination. Once he is able to defeat it, I will add it to the game for everyone to, uh, enjoy.
The newest update introduces the first beam weapon to the game - a Suspendium Ray, firing charged particles. It's accurate, flexible, and fairly powerful, but also bulky.
There's also a new set of AI ship designs that specialize in those ray guns.
For modders, this means you can finally make beam-type weapons, including various options for beam dynamics, custom beam textures, and so on. As always, feel free to ask me for details on how to set this up.
Work on the big diplomacy/conquest/multiplayer update is ongoing.
The newest update to macOS, Catalina, introduces a number of new requirements for applications. It's taken a little while, but I've now released an update for Airships that should be compatible with Catalina. If you encounter any issues, please do get in touch.
There will be an official player-organised Airships tournament on September 14 and 15. There will be Fun and Prizes. To participate and get all the details, head over to the Discord server.
(Note that the tournament is endorsed by me but administered by a committee of players, who are responsible for tournament rules, referee decisions, etc.)
Fixes a number of rare crash bugs during map generation, conquest, and ship editing.
More interesting things to come - in July, I've been busy, overheated, and sick twice, but diplomacy is progressing, if more slowly than planned. (Ugh, I really dislike having to make a "and here's why nothing visible has been happening" post.)
In the meantime, I'd like to tell you about two games by friends of mine that I've been enjoying:
Nowhere Prophet is a game about taking your tribe on a pilgrimage across an alien planet, fighting your way through various enemies in a card-based combat system. I've been playing this a lot, on the lowest difficulty level, while too stupid to code, and it's very satisfying with a lot of options to unlock.
I found out about Merchant of the Skies by seeing cute pixel art of airships on Twitter. I talked the developers into letting me see it a week or so early. It's a game of trading and building up industry in a cute world of floating islands. Also, some turtledoves appear to have flown through a spatial rift and ended up there.
Version 1.0.9 is now out.
Quick update that fixes some bugs and adds a whole lot of new player-suggested city names.
Diplomacy and co-op combat are the most-requested features for the game. You want to conquer the skies together, I understand that. :)
I've been working on making this a reality, which has required a fair amount of re-engineering and game design. Today I'd like to lay out my thoughts about diplomacy in strategy games and the design I'm using for Airships.
I'm probably not alone in finding diplomacy in most strategy games really unsatisfying. The AI will hate you for no clear reason, or love you despite you clearly being a threat. Or it will refuse to make any agreement that isn't massively in its favour.
The core problem is that in a strategy game, you're playing to win. All the other empires are enemies to overcome, which makes diplomacy kind of meaningless. Any agreement you make will eventually have to be broken in the pursuit of victory. It's literally a zero-sum game.
So does the AI know it's in a zero-sum game? Is it playing to win, figuring out the optimal strategy? Or does the AI have simulated emotions, loving or hating other empires based on their actions?
Neither is satisfying. In the first case, diplomacy is ultimately pointless. In the second, it becomes a process of manipulating the AI so you can stab it in the back at the moment of your maximum convenience.
Aside: I worry that when some players ask for diplomacy, what they're really asking for is just the ability to choose when to go to war with whom. The other empires passively lining up for slaughter. I can see that this is nice for keeping difficulty on an even keel, and on the easiest difficulty level, this is fine, but otherwise, surely, we want some more initiative from the AI.
So how do we get out of this problem where neither "calculating" nor "emotional" diplomacy is actually fun to play? We figure out a way to make your diplomatic actions actually matter for gameplay, despite the game being zero-sum.
In Airships, I hope to achieve this as follows:
Each empire has a global reputation score that describes how good and honourable they're generally perceived as. Having a low reputation score makes espionage harder, conquered cities resist for longer, and pirates more likely to attack. A high reputation score does the reverse of all that.
In addition, if you have very good reputation and control more than half of the cities on the map, you can crown yourself emperor and win the game like that. The coronation takes a while and can be disrupted, but it's an alternate victory condition for people who don't enjoy crushing every last piece of resistance.
How does this tie into diplomacy? Well, declaring war in and of itself doesn't cost you reputation. Airships is set in a fantasy version of the wild and wooly days where war was considered a perfectly healthy thing to get up to, good for the digestion and all that. But breaking treaties, that's what costs you.
For example, the difference between just being at peace and being in a non-aggression pact is that you've promised not to attack each other, and you're backing that promise with a chunk of your reputation. The stronger the bond of a treaty, the more reputation you lose if you break it. So declaring war on an ally will cost you a lot of reputation.
It's breaking your word that decreases your rep, not war in and of itself. If you never make any treaties, your reputation can't be damaged - but everyone's also free to attack you.
And note that it's perfectly possible to win with really low reputation - you're just playing as the bad guys conquering the entire world.
So how do you improve your reputation? Slaying monsters, defeating pirates.
The other mechanism that complements reputation is grievances. When you do a bad thing to another empire, you lose X reputation, and you also cause X grievances with that empire. The other empire can now retaliate and have its grievances subtracted from the reputation loss it would suffer.
For example, if Kulinrovod cancels a research agreement with Ul Qoma, it loses 3 reputation and Ul Qoma gets 3 grievances with Kulinrovod. Ul Qoma can now cancel a trade agreement, which is also 3 reputation points, and pay for it by losing its 3 grievances with Kulinrovod instead of losing reputation.
Here's a rundown of all the diplomatic options that are currently planned. Note that as always, these are things I'm still working on, so they are subject to change.
Main relationship:
It appears that version 1.0.8, which was supposed to make networking faster, instead is causing the game servers to crash. I've released v1.0.8.3, which goes back to the old settings, to mitigate the issue until it's fixed properly. My apologies. Please do make sure you're using 1.0.8.3 when playing multiplayer for now.
User battlemage64 suggested we crowdsource additional city names for the game, which sounds like a fun idea. Note that I'll be kind of picky about which names I'll add though.
Here's the list of all the names in the game so far:
Krantzberg
Fjordon
Dingleton
Lonlin
Northwestex
Darkfellbane
Stormness
Hatwick
Catwick
Fruchtenbach
Irem
Mettepolis
Retropolis
Greytowers
Blackspire
Wombaton
Nuyok
Lepidoptera
Tepid Falls
Subtle Creek
Ungrashzon
Strultekud
Gomdat
Daggergild
Sigun
Lubbud
Woundford
Bardoom
Gildfield
Ulthar
Squamos
Narlikon
Pale
Kulinrovod
Zirnoglesh
Crowlantern
Ringfast
Likorsoth
Korono
Nettacar
Kolaran
Sacculina
Fructopolis
Ionesco
Nimbus
Ul Qoma
Catbridge
Gug
Kooh Der
Rizzugat
Uncton
Tapejar
Nodon
Sceral
Skulton
Palesea
Urwigg
Tis
Lioq
Kurrib
Altinzal
Cutano
Saur
Pogorra
Tuskaten
Deepcastle
Ochre Point
Eccip
Voltvale
Tibia
Eumorphia
Quannorp
Olmton
Suppurak
Uqbar
Tlon
Viscoura
Fogcastle
Railmere
Pinsea
Oculum
Heptopolis
Marshvale
Esseract
Thalmol
Innipeq
Alzh
Acurdale
Ursovril
Phore
Ondendron
Lightjar
Hennog
New Lemuria
Vaxenford
Gearbridge
Cubus
Kirkumferum
Abton Dys
Unbridge
Axis Mundi
Hypoborea
Suddene
Ys
Xur Abbon
Pramk
Ulconac
Whalton
Dragonbridge
Blackvale
Sodvale
Quagrim
Pessera
Opton
Iolet
Unsea
Harsin
Ungarden
Wurmsea
Golonac
Thulu
Drassil
Al Ikol
Tixe
Kastovic
Ummerbund
Ceteus
Stinex
Ototh
Ebecc
Orbis
Zhangor
Doveton
Korak
Zibar
Ubbahan
Nem
Xim
Okkut
Knosph
Toothford
Frogsmouth
Dentata
Speltford
Dyne
Cogburgh
Oddbury
Audanum
Arctum
Wheelton
Kanata
Version 1.0.8 is out, focusing on usability and prettiness.
You can now select modules and decals in the editor. Selected items can be moved, duplicated, deleted, and recoloured.
Nicer mod management: You can now choose the set of mods you want and then apply them all at once.
Tips and lore during world generation:
Many new paints, and more modules and decals:
I'm putting together a list of basic tips for players to display in the world generation screen. What kind of things do you think would be useful? What confused you early on, or what things did you only learn after a while? What mechanics or effects are not obvious?
This version fixes a bug introduced in v1.0.7 where players in multiplayer conquest would be stuck in "waiting for other players" mode forever. Sorry about that.
In version 1.0.8, I plan to add a few more paint colours to the game - as well as making paint and coat of arms tinctures moddable. I'm definitely adding army green, but what other colours do you feel are painfully missing in the standard set of paints?
Fig 1: Army Green paint on a battleship
After some delays due to translation, I present you with the newest update to Airships, which improves the tech tree, mitigates lag, and opens up many new modding possibilities.
Nearly all module stats can now be modified with bonuses, allowing you to do interesting new effects with techs, coats of arms, and monster nests. You can read all about how to mod with bonusable values here.
The game now has additional strategies to prevent lag caused by machines taking different amounts of time to generate maps, or by changing network conditions.
I've also rebalanced the way the tech tree works. You can now unlock improved versions of weapons by doing further research, and I've added four more tech choices. I also improved the way it looks.
New Tech Choices:
Active Stabilisation: +60% Rocket accuracy
Rapid Rocket Fire: Fire 4 small rockets for +100% damage
Monocoque Construction: +30% Airplane speed, -30% cost
Selective Uparmouring: +40% Airplane HP
Armour-Piercing Rounds: +50% Gatling gun and rifle damage
Lightweight Rounds: +50% Gatling gun and rifle accuracy and clip size
High-Pressure Jelly: +70% Flamethrower range
High-Temperature Jelly: +1 Flamethrower direct damage
All the information you need about the new loot boxes in Airships: Conquer the Skies, including detailed drop rates.
[table]
[tr][td]Q[/td][td]Spiders?[/td][/tr]
[tr][td]A[/td][td]Spiders.[/td][/tr]
[tr][td]Q[/td][td]Why?[/td][/tr]
[tr][td]A[/td][td]To create new revenue streams and maximise shareholder value by exploiting existing IP.[/td][/tr]
[tr][td]Q[/td][td]But why spiders?[/td][/tr]
[tr][td]A[/td][td]An informal office poll determined that spiders are a delicious snack.[/td][/tr]
[tr][td]Q[/td][td]What if I don't like spiders?[/td][/tr]
[tr][td]A[/td][td]Then I'd suggest you don't open the loot box.[/td][/tr]
[tr][td]Q[/td][td]Where's my loot box?[/td][/tr]
[tr][td]A[/td][td]The loot box unlocks at the start of April in your local time zone, and requires the game language to be set to English, French, German, or Russian.[/td][/tr]
[tr][td]Q[/td][td]What are the drop rates?[/td][/tr]
[tr][td]A[/td][td]
[table]
[tr][td]Common (20%)[/td][td]Spiders, Spiders, Spiders[/td][/tr]
[tr][td]Uncommon (10%)[/td][td]Spiders, Spiders[/td][/tr]
[tr][td]Rare (5%)[/td][td]Spiders, Spiders, Spiders[/td][/tr]
[tr][td]Very Rare (2%)[/td][td]Spiders, Spiders[/td][/tr]
[tr][td]Ultra Rare (1%)[/td][td]Spiders[/td][/tr]
[/table]
[/td][/tr]
[/table]
We're in one of those periods of drought where I'm working on major new changes - co-op multiplayer and diplomacy - where there isn't anything new to show you. So I took a quick break from the coding and added more pipes. T-junctions, cross-junctions, pipes as decals, and the ability to paint them. I also redid the mad science tower to make use of these new things:
Fancier things to come in the future...
I've written a comprehensive, up to date guide on how to get started with modding the game. No programming skills needed, and all the tools are freely available. Add new modules, armours, monsters, AI factions, and more.
Read the guide here.
(Let's go for really old pop culture references now! At this rate, the next post will contain a really funny pun from 13th century France.)
With the sale concluded, we have a great number of new players. Welcome! I hope you're having a good time. If you'd like to talk to other players, we've got a Discord you can join. If you have questions or suggestions, feel free to contact me directly at zarkonnen@gmail.com . If you're experiencing problems, have a look at the troubleshooting page and contact me if needed. There will be a small bug-fix release in the next few days, after which I'll post more on the future development of the game. In the meantime, if you get bored, there's a whole universe of mods and user-created contraptions for you to explore. And if you'd like to learn how to mod, check out this video.
Today's Deal: Save 25% on Airships: Conquer the Skies!*
Look for the deals each day on the front page of Steam. Or follow us on twitter or Facebook for instant notifications wherever you are!
*Offer ends Sunday at 10AM Pacific Time
Version 1.0.6 is out, bringing new modules, balance adjustments, and quality of life improvements.
Beta updates:
Next beta! These change lists are becoming shorter, which means we're homing in on being able to merge the beta into the main game.
New beta! We're getting there!
This will probably be the last beta update before merging the beta into the main game. I still need to update the AI ship designs to use the new modules, which will take a few days.
The second version of the beta is now available, with changes based on player feedback and new techs for the new modules. Short version: Sponsons are improved. They're now specifically weak in HP and firing angle but good in DPS. Turrets are less heavy. Bombs are very inaccurate to start with but benefit from an upgrading tech. And again, do give feedback. :) Long version of all the changes: +20% lift overall Aerial Charges HP 80 -> 60 shotSpeed 0.06 -> 0.1 maxUpRange 700 Inaccuracy 0.012 -> 0.08 Ballista Inaccuracy 0.004 -> 0.003 Bomb Bay Inaccuracy 0.065 -> 0.7 base and 0.35 with aerodynamics tech Deck Gun HP 50 -> 40 Inaccuracy 0.0028 -> 0.002 Dorsal Turret HP 200 -> 240 Musket Reload 1500 -> 1000 Inaccuracy 0.004 -> 0.006 penDmg 9 -> 8 Sponson Now requires sponson tech. HP 150 -> 110 Weight 140 -> 90 Cost 100 -> 80 Reload 3000 -> 2700 Inaccuracy 0.002 -> 0.0018 Suspendium cannon Inaccuracy 0.0001 -> 0.0004 penDmg 75 -> 90 Torpedo Bomber Hangar Now requires torpedo planes tech. Added bottom versions of medium turrets. Added light sponson. A bit wider firing arc, pretty good DPS for the price. Added techs for sponsons, torpedo planes, aerodynamics. Note that the AI ship designs don't use any of these techs yet!
I've put up a beta that adds a number of new modules and re-balances others. You can try it out by right-clicking on the game in your Steam library, choosing "Properties", then going into the "Betas" tab and picking "Beta" from the drop-down. Let me know what you think of the new modules and changes - do they make the game more interesting? Are they well-balanced?
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.
Quick performance/bugfix/balance release.
Version 1.0.3 brings a whole bunch of fixes and balance changes.
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.
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:
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!
Version 1.0.2 is out and finally adds keyboard configuration to the game. Let me know if there's any improvements I can make to how it works, or other accessibility improvements you'd like to see.
Next up, I'll be working on the additional issues described here.
And this is the bugfix release for the bugfix release! The game should now no longer constantly crash in the editor. My apologies about this.
The first bugfix release is out!
I have returned from gamescom, an event of truly biblical proportions. Launch week has ended, and I'm now pretty much caught up on email and tech support, so it's time to see what's next for the game. Here are the things I plan to do, in order of priority: 1. Bug fixes. The launch was mercifully low on bugs, actually. I feared much worse, because each new player is a new opportunity to find bugs no one's noticed before, so usually a large influx of new players means lots more bugs discovered. But there are a few issues, which I want to fix first. 2. Balance issues and user interface improvements. For example, I had to cut key configuration from the game to make the launch date, so I'm going to put that in ASAP. 3. Popularly requested features. Probably the things people want the most are multiplayer coop and some sort of diplomacy system. I can't guarantee that I can put those in, because there can be game design or technical difficulties, but I know you want them. :) 4. Content I really wanted to put in and had to cut. Some more techs. Monsters. Some other fun little surprises. 5. Finally, I will get started on developing an expansion pack for the game that will introduce sea ships. So the game's called "Airships", but I ended up putting in landships. This added most of a year to its development time, so I wanted to avoid repeating this with sea ships. Instead, I will take my time to do a proper job of adding water, sea ships, submarines, buoyancy, drowning, sea monsters and all that, and put it into a $5 expansion pack. And in parallel, I'm starting pre-production on the next game project, which is going to be about flying saucers...
Printing gold on T-shirts is kind of hard, but the Airships logo is gold-on-black, not yellow-on-black. Because of heraldry. So I've partnered up with Teespring to give you a one time only run of cost-price official Airships T-Shirts.
The way this works is that you pre-order the shirts with Teespring and they do one print run and send them to you. So if you want a T-shirt, order one now. Get them here:
Printed and shipped from the US.
Printed and shipped from Europe.
So by cost-price I mean that I am making zero money from this, to make them as cheap as possible, to let the most people who want one, get one.
So I think the launch went quite well! Nothing caught fire, we had a good time streaming on the Steam page, and reviews are looking good. I'm now mopping up, making notes of things to fix, and answering questions. The one thing that didn't go well was YouTube. It's the main way people find this game, and I know a lot of you have found it through Stuff+ or more recently EnterElysium, Frazzz, or GamingFTL. Before the launch, I did my best to contact more YouTubers who do construction-type games, but it's just really hard to get through to them. I know that YouTubers receive literally hundreds of emails a day from devs and marketing people, so my attempts just got lost in the noise. I also know that they may listen to their viewers. So if you're a regular viewer of a channel, here is something very helpful you can do for me: post a comment, or send a tweet, asking them to play Airships: Conquer the Skies. If they can see there's an audience for the game, they may have a look. In the meantime, I'll be over here making the game better. :)
After five years of development, Airships: Conquer the Skies is out! It started as a quick prototype inspired by FTL and Cortex Command, and was rapidly met with a lot of interest. So I... kind of kept working at it, and along the way it acquired a community, mod support, a soundtrack, landships, tentacles, and more. And speaking of this community, I am immensely grateful for it. You've helped me with finding bugs, making suggestions, creating mods, but seeing people enjoy the game has also just been a huge morale booster. So, what's next? Well, because no software is ever bug-free, I'm sure there will be a whole bunch of patches. I also ask you to be patient with me - if a lot of people buy the game, a lot of people will have questions at the same time. There's still some bits of content I'd like to add, too. Beyond that, I have plans and prototypes for the next game...
It's the day before the release! I've pushed some final fixes and improvements over the last few days: editor performance, better support for saving and loading files with Chinese letters in, and updated missions. The 1.0 version will not really be any different gameplay-wise, but it *will* feature five new tracks by Curtis Schweitzer. So now I'm running around getting the house in order for the launch. The launch trailer's cut and ready, I have sent out emails and press keys, and I'm about to revamp the store page description. The Call for GIFs has concluded, and you can see the winners here. (Steam doesn't much like large GIFs, which is why I didn't embed them here.) See you on the other side!
Version dev 10.1 is out! This is the last few features I managed to squeeze in before the release. From now until the 16th it's going to be bugfixes and maybe some work on the tutorial.
That said, I would be very grateful if you could try this one out, especially the new multiplayer features, and let me know if there's any problems.
So, new multiplayer features:
You can now collectively decide on what speed MP conquest should run at. If all players agree to pause the game, the game is paused.
And you can now edit ships in MP. There's three new little buttons for ship/landship/building editing. The state of the editor gets preserved and the design autosaved when you leave it, so you can work on ships alongside doing other things.
With the game gearing up for release, I’d like to show people all the cool things about it. For this, I’ve put a GIF creation tool in the game’s replay system. So when you replay a combat, you can hit the GIF button and record a short animation.
Now it’s a question of finding some cool-looking GIFs, and this is something you can help me with.
Anything that shows off the game, the details, the combat, the designs - modded or not. Make them, share them in places, link me to them. Of those I get sent in the next week, the creators of the three I like best will get a custom coat of arms and a sticker, and the very best one will also get a gold-print Airships T-shirt.
I am happy to announce that Airships: Conquer the Skies will be released on August 16, 2018.
It's been five years of development, nearly all of it with public builds available, going from a ship construction prototype with weirdly greenish-tinged wood to its current state, with multiplayer, dragons, landships, and well, more ship design.
Today also marks the release of dev 10, the final major pre-release version, featuring conquest multiplayer, a tech tree, and graphical improvements.
Here's a bunch of the cool stuff the game now contains:
New beta release, fixing various bugs and balance issues, getting translations up to date, and adding Korean!
Release date announcement tomorrow.
Oh, and I've set up a Developer Page on Steam now. So if you follow that, I'll see a number go up and you'll see future projects I work on.
#dontforgettolikefollowandsubscribeguys
There is now a public beta version of Airships dev 10. You can opt into it by going into the game properties in Steam, selecting the betas tab, and choosing "dev10beta".
It adds a lot of new things, including strategic conquest multiplayer and research. I'll be going over those in detail when it leaves beta.
For now, do try it out, and let me know about any bugs, crashes, or balance issues you encounter. We're coming up to the 1.0 release.
Edit: Did an update, beta 3, that fixed some crashes and desyncs.
With the new graphical options now available, I'm re-doing the AI ship designs for v10. Each opponent empire will have a specific design style that is visually distinct and has certain strengths and weaknesses. Here are some screenshots:
In other good news, I think I have convinced Kaspersky Antivirus to stop issuing false positives for the game!
This update is all about aesthetics. Ships in the game, being made of blocks, have always looked very, uh, blocky. Numerous mods have been made to address this, but mods are limited in what they can do.
The main technical change this update introduces is pixel-perfect collision for modules. This means that you can have complex, rounded shapes that collide correctly, rather than having weird non-collisions or collisions at a distance.
To take advantage of this, beyond adding pixel-perfect collision to rams and turrets, I've added a whole bunch of slopes and curves to shape your ships. These slopes and curves can also be armoured like normal modules.
In addition, there are figureheads:
Lanterns:
More sails:
There's also two new weapon modules, muskets and heavy turrets:
The appearance of many weapon barrels has also been updated to be more distinctive:
But wait, that's not all! There's flags and pennants that move based on wind and ship movement:
Oh, and around 50 new decal items, such as new gold leaf:
And "greebles", small textural details like tanks and panels:
The aim of all of this is to enable ships to have all kinds of distinctive looks, such as the following three:
Age of Sail
Battleship
Mad Max
Beyond all these new things, there are of course also some bug fixes and balance adjustments:
I've finally gone and tidied up the tags available in the workshop.
Unfortunately, the tag management is a bit unsophisticated: I can only create a white-list of tags to be shown, which means that tags I haven't thought of won't show up.
That's why I waited for quite a long time to do this tidy-up: I wanted to see what tags would naturally occur. Now, pretty much every tag that has at least a dozen or so items in it should be represented.
This isn't reflected in the game itself yet, which still lets you add arbitrary tags to ships when you upload them. I'll change it so it gives you just the existing options. And it can also auto-generate some of them, actually.
Anyway, I hope that this is an overall improvement in quality of life. If you have any tags you'd like to see added to the whitelist, let me know at any point!
Unrelatedly, here's a quick preview snap of some of the new aesthetic options in the upcoming version:
The next content update - and the final one before dev 10 - is going to focus on ways to make your ships prettier.
For dev 10, I'll be re-doing the AI ship designs to be more distinctive, so first I need to make all the tools to support this. Due to the block-based nature of the game, ships are of course kind of... blocky, but I want to add some more distinctive-looking modules and decals to support a wider variety of looks.
Currently planned are more sails, bowsprites, and a bunch of "decals" for adding detail like vents and hatches.
Beyond that, I'm interested in your suggestions! What kind of decorative / style options would you like to see to let you make more distinctive ships?
Two more things:
First off, and this is a bit awkward, but if you're playing and enjoying the game, please leave a Steam review? A recent random clump of negative reviews has pulled the "recent reviews" of the game to "Mixed". While the overall is still at "Overwhelmingly Positive", the recent reviews only look at the last month or so. I'm now worried that there's going to be a self-reinforcing process wherein bad review score -> low sales -> fewer reviews -> continued dominance of those negative reviews -> bad review score...
And as always, if you're experiencing technical problems with the game, or have crashes, balance issues, or gameplay issues you'd like to see addressed, please do get in touch. The most effective way to do so is to send an email to zarkonnen@gmail.com .
Less awkwardly, look, it's a screenshot of the upcoming tech tree!
Airships is part of this year's Indie Megabooth for PAX East. We'll be exhibiting the game, dressed in spiffy naval uniforms, for all four days, at booth #18087 in the Indie Megabooth area.
Do drop by also if you're already a player, as I'd love to meet you in person.
With the conquest multiplayer alpha on the way, my gaze now turns towards upgrading the conquest gameplay in general. If you recall, I did a big thing late last year where I asked players what they'd like to see in the finished game. Apart from conquest multiplayer, the most popular item was deeper conquest gameplay.
I'm implementing this on top of the changes I made to the game for multiplayer, which means you're going to have to wait for quite a while yet for this all to arrive, but then it will arrive all together in one glorious dev 10 update.
The first step I'm working on is the introduction of smaller towns. There's a big demand for bigger maps that take longer to play through. But instead of making a huge mosaic of dozens of empires, I'm instead keeping the number of empires the same and making them bigger. Each empire will start out with a capital city and three smaller towns (usually) surrounding it. By conquering towns, you can chip away at the might of other empires and increase your own.
Towns are basically cities in all aspects, except that they produce less income and don't have a shipyard. So you can only build defensive buildings, but no airships or landships.
So here's the implementation:
Cities are placed like before on the map, nicely spaced out. Then, towns are added, spaced more closely, and mostly placed next to their parent city. Occasionally, if there's no space, a town will end up disconnected from the parent city, which adds some variety.
Then, all the towns and cities and monster nests get connected up with roads. I've been improving that code as well, making the game better at re-using existing roads rather than creating multiple roads that run parallel or intertwine in weird ways. I've also fixed a bug where you couldn't travel to a monster nest in another territory despite there being a road going through it.
This all worked pretty well, but when I started up a large map, some painful performance problems became apparent. The game would just... pause for several seconds at the start, and then stutter constantly. I dug out my trusty profiler, and found that the strategic AI was having some problems adjusting to the new situation. I'd written some code that basically went over all cities and for each of them looked at all combination of cities. So by quadrupling the number of cities in the game, this code now took 4 x 4 x 4 times - 64 times - longer.
All in all, I found around three places where I'd written the code assuming there'd be a handful of cities. I fixed the performance problems through a combination of rewriting and just using the code less often.
Finally, I had to think about how to display the towns. With so many places now on the map, it had become very cluttered. So I made the display of things more dependent on zoom level, with the names and arms of towns only popping in when you are zoomed in enough. I also spent some time cleaning up some other parts of the map display code, resulting in an overall nicer appearance.
So what's next? I need to spend a bit more time checking the AI behaves sensibly now. Then I'll get started on the other major new features, including strategic resources and research...
Version 9.7.1 fixes a few crashes and introduces three massive new weapons:
Have fun!
So here we are, two months later, with the third instalment of the strategic multiplayer dev log. While Christmas and a busy January took their time, a lot of work has gone into making the details of conquest multiplayer work.
The setup GUI now works in the same way as resume, with a set of slots available to players. Any number of players can join in LAN and server-based MP mode, and players can also spectate.
Like in the single-player version, players are now able to do combat setup and use reserves. Combat chat is also much nicer now. Finally, there's now a detailed desync detection system that will report when the world state of two players deviates.
So now is the time to start testing this in earnest! Because it's a big update that changes a lot of things under the hood, I don't just want to dump this on all players. Instead, I'm going to start with a closed alpha.
I'm looking for a small number of players - you, perhaps - who would like to thoroughly test strategic multiplayer. I need feedback both at the technical level with detailed bug reports and at the game experience level, where you tell me what the user interface and game balance needs.
Are you up for it? Join the Discord and message me.
Quick bugfix version, fixing an espionage-related crash, and making GIF recording work properly. Have you tried GIF recording? You should! Go into a replay, choose a cool bit, and hit the GIF button. Show me your creations!
v9.7 is out! It adds improved sound effects by Javier Zumer, and a system for gathering anonymous usage statistics. I'll be using these usage statistics to make the game's GUI more accessible to new players. Do not be alarmed - I'm not making the game simpler, just easier to navigate! The usage stats cannot be connected to specific players, but if you'd like to turn them off anyway, you can do that in the game settings.
Bugfix release!
So after the initial rapid success of getting conquest multiplayer to work, it was time to see how much the multiplayer really kept in sync. It looked like it was in sync, but not every small divergence would be visible, and those small divergences could spiral into larger ones.
As an aside, idle googling has just led me to a horrible discovery: The daft Ashton Kutcher vehicle *The Butterfly Effect* somehow spawned two sequels. Yay.
Anyway, to make sure that the versions of the world on multiple players' computers were exactly the same, I wrote a checksumming system. At regular intervals, the system would take the game state, save it to disk, and take a checksum of it. It would add this checksum to a backlog, and send it across to the other players.
Upon receiving a checksum, the system would call up its own checksum for that point in time from the backlog. If the checksums disagreed, it would output the point in time where this divergence had happened and exit.
This system was very useful, as it let me do a detailed comparison (a diff) between the game states at the point of divergence. It also created a vast amount of data, because it had to write a full save game multiple times a second. It will definitely be deactivated for the release!
And indeed, it led me to find a number of problems: The names of pre-generated ships didn't match. That one was easily fixed. Another problem was that the road data wasn't quite the same, which turned out to be because the game wasn't looping over city pairs to build roads between in a consistent fashion. Looking for other such inconsistent loops also let me find what would have been a rare and subtle bug in the monster nest code.
So with the game state looking synchronous, what's next? Well, it's all the unglamorous GUI stuff. Allowing players to choose the map size and difficulty, their empire name and their coat of arms. A chat system.
Then, allowing for multiplayer conquest games to be resumed, which turns out to have lots of corner cases. What if the game is resumed with a set of players that isn't clearly identifiable as the previous players? Or with more or fewer players. What if someone exits setup at a weird moment?
I'm still working on getting all of these scenarios figured out and accounted for, but a basic GUI for resuming games exists. And once that's done, I can make available a very early version of multiplayer conquest. It will be very rough: you can't design ships, or look at city defences. Combats start right away with no setup phase and no warning. There's no diplomacy beyond what happens in the chat. The world setup is probably really unfair. But it's something that can be tried out and iterated upon.
I'm embarking on an attempt to make multiplayer strategic conquest work in Airships.
First off, to be clear, this may well not work. I wrote the strategic conquest code without thought to making it multiplayer, which means I now need to try and refit it for this purpose. It's entirely possible that I can't get it to work consistently, or that performance or UX problems make the experience a terrible one.
Still, lots and lots of people insisted they really wanted this feature, especially cooperative strategic multiplayer, so I'm giving it a try. If, after a few weeks of work, things are still a complete mess, I will shelve the attempt.
I started working on this about three days ago, having formulated an approximate plan:
Airships uses a lockstep multiplayer system. You make sure that each player has the same starting state, and the same seed for the random generator. Then you make sure to apply player commands at the same time and in the same order for all players. This way, the game state on each player's machine progresses in the same way, in "lockstep".
Lockstep has the advantage that it's fairly simple and that it requires little bandwidth. The disadvantages are high latency (which for a strategy game we don't really care about) and a kind of "butterfly effect" thing. If there's ever the slightest discrepancy between the states on different players' machines, the states will diverge more and more over time, and cannot be easily reconciliated. So it's quite nice and simple if you get it perfectly right.
The combat mode got multiplayer early on and so has grown up along with it. There have still been plenty of problems, but it generally works now and doesn't diverge. The strategic conquest mode, on the other hand, is almost as old, and written on the assumption that it's singleplayer only.
Still, technically, all it has to do to be lockstep multiplayer is two things:
A quick bugfix release.
v9.6 adds a new feature: combat replays. All fights you participate in are automatically recorded. You can play them back, analyzing them, or just glorying in explody victory. One caveat: You can only play back recordings of combats from the same version of the game, just like you can't do a multiplayer match with someone who has a different version. Replays enable these cool three things in particular:
v9.6, currently in beta, adds a replay feature to the game. All fights you do are automatically recorded and can be played back again. I'd like to show off this new feature by doing a video commentary on a multiplayer fight. To do this, I'm looking for recordings of fights. So what I'd like you to do, if you're up for it, is the following:
Fixes a problem with massive lag in multiplayer games. More to come soon.
In dev 10, I'll be concentrating on making the conquest gameplay deeper. The first step to this is to make the map zoomable.
The strategic map code is some of the oldest and least-touched code in the game. I wrote it back when I considered 1024x768 a reasonable screen resolution. And because it's at a fixed pixel scale, if you have a high-resolution screen, the maps now look tiny.
At the same time, it's also shockingly memory-inefficient. Each pixel on the map is its own map tile with information about height and city ownership. This means that larger maps - a very popularly requested feature - would consume far too much RAM.
So over the last ten days, I've rewritten it to be zoomable. Now, instead of each pixel being a tile, the tile grid is actually much more coarse, but thanks to some hopefully clever thing with the map boundary drawing, this is not particularly evident. So the new maps require 256 times less memory while being smoothly zoomable.
This is only the first step towards making the conquest mode deeper and more engaging. Nothing has actually changed about the gameplay, yet, but this will enable these improvements to happen. And if you'd like to try it out, you can switch to the "dev10alpha" branch on Steam. One caveat: this new map format is incompatible with the old one, so you won't be able to load old save games while on the alpha branch.
Have fun, and let me know if you find any bugs or have suggestions on how to further improve the zoomable maps.
Today marks the release of Airships dev 9.5. It adds a bunch of new monsters to the game, which is why I picked Halloween has the release date, of course.
To celebrate the release, I've also created a diverting quiz that lets you determine which in-game monster you most resemble. Moreover, if you tweet your monstrous identity and tag me in, you might get a free Airships steam key at the end of the week.
So, what monsters does the update add? Giant stone guardians, aerial jellies, cultists, and turtledoves. And... certain other things I'll let you discover on your own. Moreover, certain monster locations, if left alone for too long, will now upgrade into more dangerous versions. Leave pirates to ply their trade, and they will eventually band together and elect a Pirate King.
So here are the new monsters:
The beta for 9.5, the monster update, is now available. Of course, the update is scheduled to appear on the 31st.
As always, if you feel like it, opt into the beta via the game settings in Steam, and do let me know about any problems or balance issues - that's what it's for!
A quick change list:
Version 9.4.1 fixes a bunch of bugs:
Om nom nom delish
On the basis of the questionnaire I sent around last week, the Airships multiplayer hours have been shifted to times that should suit more people. Also, I made a Discord bot to tell people when it happens. The new MP hour slots are:
A new beta is available, under the beta tag "folders". It introduces support for subdirectories in the ships, saves, and combats lists, so you can better organize your stuff. You can create folders, move things in and out of them, and rename files and folders. Because it touches on how your data is stored, I've put it into a separate beta, and recommend you make a backup copy of your data folder (%APPDATA%AirshipsGame) before switching to it. I mean, I wrote the code to do the right thing, but I'm not infallible. Next up, I'll be working on build queues for cities, and while that's going on, I'd love some feedback from betaneers about the folder support.
Development on Airships has now progressed enough that I can tell you about my plans for getting to the release. First, a caveat: this is the current plan, but it may change. Work may take more time than expected, features may not work out, and I might change my mind. I'm aiming for a release date in early March 2018, with the exact day to be nailed down later. If I miss that release window, the fall-backs are July 2018 and September 2018. The reason for this timing is that it aims to avoid popular times for large games to release, such as the pre-Christmas period, and specific events like GDC and the Steam summer sale. March 2018 doesn't mean that I have another 5 months of coding time left. Since the creation of Airships is pretty much a one-man show, I have to switch hats and concentrate on things like marketing in the months before the launch. So I'm aiming to be done with the coding bit by the end of this year. So I've taken stock of the remaining work and divided it into three categories: things that absolutely need to be added to the game before release, things that would be nice but may not make the cut, and things I have to explore to see if they're possible.
I'm trying to find out what times and days would be most suited for a multiplayer hour. If you are interested in playing the game against other people, and would like a specific event to help you find opponents, please follow this finely crafted link to fill out the poll.
Version 9.3 is out! The next version will concentrate on some specific usability improvements.
Hot on the heels of the previous beta, here is 9.3b1, with some major changes:
After a protracted beta, version 9.2.4 is out, replacing the old multiplayer system.
As requested, Airships now has an official Discord server for your realtime chat needs. Click here to join.
Since the last release of Airships, I've been working on rewriting the game's networking. Having encouraged you to play more multiplayer games, it turned out that the multiplayer systems were unstable, especially the chat overlay. This major rewrite should fix this problem and also add some new convenience features. Because it's a large change, I'm first pushing this to the beta branch. As always, you can opt into the beta branch by going into the game's properties in Steam, into the Betas tab, and selecting "beta" from the drop-down. Now this is very important: please try out this new multiplayer system, and report any problems, crashes or mere frustrations you have. While I've done my best to write the code right and test it, I know from experience that it's likely I've missed things. Don't assume that some problem is obvious and that I'm aware of it. I am currently aware of zero problems with the new multiplayer code. It's up to you to tell me otherwise! Anyway, here is the change log. Assuming the beta goes well, I will push these changes to the main version of the game, and get started on the next round of improvements.
Version 9.2.2 is the first of several updates to address multiplayer performance and stability issues.
Alongside small flying units like planes and air hussars, I originally planned to add small ground troops capable of directly attacking things. It would be the obvious final recombination: there are flying units that directly shoot targets (planes), flying units that board targets (air dragoons), and ground units that board targets (marines). But there are no land troops that shoot targets.
During development of dev 9.2, I realised that there were major obstacles to making ground troops work, which is why I dropped them. Here is why:
One obstacle is their positioning and movement. Land-based boarding troops want to move to the nearest entrance for their target ship. Navigating the shifting landscape of the battle to get to that entrance is pretty tricky, but their goal is well-defined.
Flying boarding troops, well, they just fly towards the entrance in more or less a straight line.
Flying attack troops do strafing runs, flying back and forth past their target, guns blazing.
But what about land-based attack troops? They need to position themselves in a location close enough to the enemy to fire accurately, but they can't freely move in space. So they have to pick some spot on the ground, or on a floating rock, or on a construction. But this would mean that a lot of them would end up in the same spot, which is confusing and looks awful. Is that two soldiers or fifty soldiers gently wobbling and vibrating past each other?
So they also have to factor into their calculations how to position themselves not to overlap. The positioning of ground troops would depend not only on the shifting shape of the battlefield but also on the positioning of all other troops. You can see that this is quite a mess. I can write some code for this, but I think it would work badly. Troops would enter oscillations, moving back and forth between multiple positions in reaction to each other. They would get stuck and out of position. They would be very frustrating to use. And through all of this, they would be moving slowly, staying outside, vulnerable to weapons fire.
Of course, this could be fixed by giving players fine control over the troops, allowing them to be selected individually and in groups, and rapidly re-positioned as needed. But that would move the game towards a micro-heavy clickfest like StarCraft, where your ability to have massive APM and fine motor control is what matters. I have no problem with such games, but that's not what Airships is, or should be.
The second obstacle, which I already touched on above, is that walking attack units would be very vulnerable. Compared to fliers, they move more slowly and predictably and are hence easier to pick off. And unlike boarders, which only have to be outside for the time it takes to cross over to the target, they would be outside permanently.
So what niche would they fit in, tactically? Not as tough as a small landship, not as manoeuvrable as a plane.
And indeed, in-universe, this holds too. In a world where giant flying ships and armoured walkers exist, infantry is bringing a knife to a gun fight. Of course infantry exists in-universe, but it's for holding territory, occupying cities, not for breaking the enemy's strength in big battles.
So: if I can find a way to add ground troops to the game that will make them a viable, and will make the tactical options significantly more interesting, then I can try to program behaviours for them that make sense. But otherwise, it would just be a lot of work for no result other than an item on a features list.
And that's why there's no ground troops.
Next up, I'll be writing about what's coming up instead, and the general plan from now until the 1.0 release.
Hot on the heels of version 9.2 comes 9.2.1! Why so fast? Well, my plan for version 9.3 is to tackle about ten different improvements to the game. I realised that those improvements don't really depend upon another, so instead of releasing them all at once, I will be releasing them as I make them.
Which means that for a while, there will be a rather more rapid update schedule. Once we hit the work on dev 10, though, expect a final multi-month pause before anything comes out. I will likely make some deep changes to strategic conquest mode that will take a while to sort out.
So what's new in 9.2.1?
After a record number of beta iterations, Airships v9.2 is out! It introduces small flying units and troops:
Air Hussars, small one-person airships launched from a Hussar Bay. They're strong against light- to mid armoured ships that lack anti-unit weapons (see above) but are very vulnerable to anti-unit weapons and planes.
Triplanes, fast-moving heavier than air flying machines. Strong against light-armoured ships, and a bit better at dodging anti-unit weapons.
Biplanes, light planes that move very fast and are excellent at shooting down other small units like Air Hussars, Triplanes or boarders. Quite hard to hit, but their guns are pretty harmless against decent armour.
Bombers, heavy planes suitable for attacking ships and buildings. Vulnerable to flak fire and smaller fliers.
Air Dragoons, boarding troops equipped with a Suspendium-based float harness. Unlike Marines and Grenadiers, no careful positioning is needed to board enemy ships, as they can just fly over, but they're fairly expensive for their boarding strength.
To compensate for these new threats, small ship-based weapons like rifles and gatling guns are now able to directly shoot down small flying units and troops. This also allows ships to better defend themselves against existing boarding troops like marines.
9.2 also introduces two new monster types using the same code as the dragoons: clockwork wasps and giant bees. You can read about them in the new bestiary pages:
Bestiary: Clockwork Wasps
Bestiary: Giant Bees
In an ongoing effort to make it easier for people to find others to fight against in multiplayer, 9.2 introduces regular multiplayer hours, one-hour global time segments where people are encouraged to go into the MP lobby and find someone to fight against. I will be present in those times as much as possible, so if nothing else, you can fight against me.
Other improvements include various bugfixes and balance changes, massive performance and pathing improvements for boarding troops, and a rewritten audio system.
What's next? I'm planning on two more 9.x releases. The first one will tackle some of long-running user experience issues and finally make explosions behave more realistically. The second one will round out the bestiary of monsters, finally making use of the Sky Kraken and introducing some other menaces like cultists.
Then it's on to version 10, the final major development cycle before the release! Version 10 will focus on improvements to strategic conquest mode. And then - to victory!
Apart from improving boarders, Airships 9.2 will also add flying troops. This dev blog entry is about about the details of their code.
Flying troops means flying boarders like air dragoons, but also small flying units that can be launched from ships like biplanes. This might sound like an odd terminology: why is a biplane in the same category as an air sailor rather than an airship?
There are basically two types of units in terms of code: "airships", which are made of modules and can't overlap, and "troops" which are single objects, can overlap, and can go inside airships. So "airships" are airships, landships, buildings and monsters like dragons or giant spiders. "Troops" are ship crew, boarders, and now also small flyers like biplanes, air hussars and clockwork wasps.
The existing code for troops let them pop out of ships and move around outside by climbing across ships and jumping from ship to ship. They could shoot other troops while inside ships, but they couldn't use their weapons while outside. These new units needed to be able to fly around freely. They needed to be able to shoot ships, shoot each other, and be shot by ships while outside. And they needed new behaviour code to know where to move and what to shoot.
The beta of version 9.2 is now available. As always, you can opt into the beta by right-clicking on "Airships: Conquer the Skies" in your Steam library, selecting "Properties", then "Betas", and selecting "beta -" from the drop down.
In this beta, there are no translations available other than English and the new monster nests lack splash art. Apart from that it's pretty much complete. So if you try it out, please do report any issues you find, including:
The next version of Airships will focus on improvements to troops. In this post, I'm going to write about the performance and pathfinding problems that large numbers of boarding troops face, and how they have been resolved for the next version.
When I originally wrote the code for air marines and grenadiers to find their way from one ship to another, I had in mind that there would be maybe a dozen or so boarding troops in a given combat. But of course, there was actually nothing stopping players from using hundreds, and this made for some big performance problems, with the game freezing for several seconds at a time as it tried to figure out the pathing for all those troops at once.
Why was the performance on this so bad? After all, plenty of games have units pathing from one place to another, and they don't have your computer freeze up trying to figure things out. Airships is a bit of a special case, though. In most games, the shape of the environment is more or less static, and so a navigation mesh can be pre-calculated for each level. In Airships, everything is constantly changing: ships and floating rocks are in motion against each other and the ground, and parts break off and new holes get shot into ships.
What is one of those little air marines actually trying to do? It's just exited from the hatch of its own ship, and it wants to get inside of its target ship. To do this, it has to execute a series of leaps and drops between ships, rocks, and the ground. In a simple case, it just has to walk over to the target building. But in a more complex case, it has to jump between multiple things before it reaches its target. Within each of those ships or rocks, it then has to move to find a spot from which it can jump to the next place.
So there are two levels of pathing, a coarse one between things, and fine one within them. The coarse pathing already works pretty well, since there aren't that many different entities to consider. But the hard bit is the precise planning of where to go to be able to jump to another ship.
To figure out the jump, the marine has to consider a number of different places to jump from, and for each of them, a number of different places to jump to. And this information can go out of date very rapidly as ships move. So if there are hundreds of marines, and dozens of tiles to potentially jump from, and dozens of tiles to potentially land on, that's a hundred thousand or more jumps to consider. That's where the computer freezes up, while trying to process all this information in a single frame.
I was able to optimise some of the code, but this wasn't really enough. The real fix is what I ended up calling the "conch of cleverness". Instead of all troops doing these calculations simultaneously, there is now exactly one unit each frame which gets to do jumping calculations and other CPU-intensive tasks. Because the problem was less with the total amount of calculation needed, and more with how it was all happening at once. With the "conch of cleverness" passing between troops, the performance cost of doing these pathing and jumping calculations gets evened out.
This does mean that large numbers of troops now take slightly longer to figure out where they're going, but this is fine, and even kind of realistic: a crack team of four air grenadiers can move faster than a squadron of a hundred marines. And we're still talking one full calculation per frame, so at 60 FPS, a group of sixty units takes no more than a second to get organised.
It turns out that it even makes the movements of very large numbers of troops look quite nice: groups of troops will move together to a location and then wait there until it's their turn to figure out the next leg of their journey. So they automatically divide themselves into what looks like squads commanded by a leader.
Apart from performance, the other nagging problem boarding troops had was that they sometimes got stuck, unable to find their way to the entry hatch of a ship they wanted to board. The reason for this was that they simply tried to move towards their target in a straight line. As anyone who's ever moved in the physical world knows, this is not guaranteed to get you where you want to go.
In particular, it was this type of scenario, where the only way to the destination is to first go further away from it, that defeated them utterly.
And so as much as I'd tried to avoid it, it was time to put in some pathfinding for troops on the outside of ships and rocks. (I'm going to talk about ships from now on, but the same applies to floating rocks.)
But pathfinding is, again, really computationally expensive if you can't pre-calculate a nice navigation mesh. So I had to come up with a way to quickly (re-)calculate an... acceptable navigation mesh. I realised that we needed a set of tiles from which all tiles on a ship were directly visible in a straight line. That way, the pathfinding could find its way to a tile from which its destination was visible.
These tiles are the concave points of the shape of the ship, and conveniently, they're very easy to calculate. This means it's OK to do it every time a tile is destroyed or added.
Together, they form a network of tiles from which every corner of the ship is visible, but there are far fewer of them than total tiles on the ship. In fact, a rectangular ship has zero of them, as any tile can be reached in a straight line from any other tile.
With this network in place, I wrote a first version of the pathing code, a simple depth-first search of the concave tiles. I created a weird labyrinth of a building and let some marines find their way through it. And indeed, it worked! But it took an eighth of a second for a marine to find a path through the labyrinth, which was way too much.
So I sat down, opened Wikipedia, and with a few hours of cursing and head-scratching implemented A* search - the standard, traditional pathfinding algorithm. The time to solve the labyrinth went down to one millisecond. And indeed, now it was quite possible to have hundreds of marines all navigating this labyrinth with the game running smoothly.
Problem solved.
Next up, I'll be writing about introducing flying troops - Suspendium Bees, Aerial Hussars, and other delights.
Airships now includes instructions on how to set up your own multiplayer server. To be clear, you can always do multiplayer by choosing "LAN" and directly connecting to the IP address of the hosting machine. As long as that address is visible to you - so in the same LAN, not behind NAT, or using an IPv6 address. But if you don't want the hassle of typing out IP addresses, or want a multiplayer lobby, you can now set up your own. This should be useful if you want to do a tournament inside a LAN, just want a private place to play the game with others, or if the default multiplayer server is down. The latter has happened a number of times recently, for which I apologise. The servers are getting an upgrade in the next few days which should fix or at least reduce this problem. But the longer-term reason is making sure that the game can still be played in the future. I believe games are an important part of our culture, and we should make sure that they aren't lost over time. This is made difficult by legal and technical obstacles. On the legal side, the advent of de facto perpetual copyright means that games will keep on being owned by someone, probably, eventually, a large corporation. And this large corporation has no real incentive to make an old game available. There's no profit to be made from it, but setting it free would look bad on the balance sheet. On the technical side, modern games tend to be interwoven with some kind of online component. So even if you have an archive of the game somewhere, it will not work without its server, and the server code never made it past the gates of the game's creator. Old games we can emulate, but a server shutdown can mean the permanent destruction of a game, because once again, there is no incentive to preserve the server code of an unprofitable game. So what does this mean for Airships? The first step was already taken: the game has never had any DRM. I believe DRM is evil, code hostile to the user running on their machine. I also believe it's useless, as it inconveniences customers but never poses a real challenge to the motivated cracker. The second step is making is possible for you to run all aspects of the game independent of me. With the MP server instructions, we're most of the way there, though I still have to do something about the registry of coats of arms. I am figuring out how to do yet further steps. To be clear, yes, I am selling the game for money so I can purchase food and shelter - and in fact, there's a price increase coming soon - but that does not have to conflict with making sure the game can last. The instructions: RUNNING YOUR OWN AIRSHIPS MULTIPLAYER SERVER Last edited: Mar 26, 2017 If the Airships multiplayer server is unavailable, you can also set up and run your own. Note that you can always create multiplayer matches by using the "LAN" option and connecting directly to another player's IP. But if that is not possible due to NAT, or if you'd like the lobby system that the multiplayer server provides, here is how to set it up:
When you're creating a new ship design, it's nice to be able to work quickly. Having to scroll through the list of modules is pretty tedious, which is why Airships has long had search for modules. In version 9.1, I've improved the search system, allowing you to get the exact module you want with very few keystrokes.
First off, you can activate search by hitting enter, and select the top search result by hitting enter again. So you can type Enter - some letters - Enter to quickly select a module.
The simplest way to search is by typing the start of the module name:
But in some cases, there's multiple modules that start the same way. What kind of large thing would you like?
So you can type multiple words matching the start of each word in the module name:
If you already started typing "sus", and now realize you wanted the *large* suspendium chamber, you can also search for the words in the name in a different order:
Of course, the module where your query is in the right order for the name will match first.
Finally, you can also search for module by abbreviation. Type out the starting letters of the words in the name as one word:
With a little bit of practice, this will let you select exactly the module you need without even having to glance at the left of the screen.
The HMS Sojourner was an experimental airship from some years back. A huge Suspendium crystal had been found in a deep mine, and the kingdom's best scientists had examined it and found it to be flawless. A crystal of this size, powered up, could lift a ship to unprecedented heights. The Sojourner was built around the crystal, carefully cradling it in a giant frame of shock absorbers. Huge boilers and generators provided the power to energise the crystal. A team of experienced engineers tended to the engines. The captain was a steadfast veteran. The maiden flight of the Sojourner: A gaggle of naturalists brought nets and sketchbooks to capture the inhabitants of the far skies. A cadre of natural philosophers brought their instruments and theories. A priest lobbied, successfully, to be permitted on board. All were clad in wool and leather to ward off the wind and the cold. The fires were stoked, the boilers hot, the generators turning. A few smaller Suspendium chambers brought the ship to a comfortable hovering position a dozen metres off the ground. Observers were stationed on a nearby hill. The big switch was thrown. There was a loud bang, a rush of air, and the Sojourner was gone. The Sojourner project was quickly closed down, insistently forgotten. Conventional wisdom assumes that the big crystal had burst, vaporising the ship in the process. Perhaps it was flawed after all, or perhaps it was simply not safe to energise something that large. Although there was the matter, a few weeks later, of a hastily-suppressed report by the Royal Institute of Astronomy...
I like writing about bugs in Airships. I don't want to present myself as some infallible rock-star Indie developer, because I'm anything but. Airships is a game for builders and tinkerers, and I have seen again and again that you like reading about its creation, warts and all. So today we delve into The Mystery of HMS Longcat. (Note that there's a slightly nicer-formatted version of this post that includes animations here.) I was alerted to a weird bug by several users: their very largest airships would fail to reload their cannons. The first salvo would fire just fine, but new ammunition would never arrive, despite plenty of crew and ammo stores. One user helpfully supplied me with a ship design where this was happening. As an aside, this is basically the perfect setup for me to quickly diagnose and fix a problem:
AmmoJob (priority -0.81) replaced by ReadyJob (priority 0.0000003).
Negative priorities were... not meant to be a thing. So the crewman was sent out to fetch ammo, but the next time the ship re-evaluated crew assignments, it would see that there was a much more important job for him to do: stand around at the ready in case something needed doing.
The ship would then promptly re-assign the ammo job to the crewman, and the cycle would start anew.
Next stop: the code for calculating the AmmoJob's priority, where I discovered the culprit, a single-letter typo:
return staffJobPriority(ship, self, type, x);
The staffJobPriority function calculates the appropriate priority for a normal job, such as fetching ammo. It's meant to be given the following information:
0.7 - n * 0.01;
So the first AmmoJob is meant to have a priority of 0.69, the second 0.68, and so on.
But the code passed in x instead of n. Which meant that the further to the right of the ship a weapon was, the less important was its AmmoJob. And on very long ships like the Pale Mare 2, where x was greater than 70, the resulting priority became negative.
And indeed, upon fixing that line to read
return staffJobPriority(ship, self, type, n);
everything started working just fine!
What's more, I found the same typo in the priority calculation for supplying coal to modules. It had lain there undetected simply because coal-using modules tend to be at the back of the ship, where the x-values are low enough to keep the priorities positive.
In the end, a very unlikely-sounding problem was all due to some bad cross-wiring of values. Careful investigation yielded results, and the problem will be gone in the next update.A lot of the work I'm putting in for the next version of Airships relates to its interface. Be that improved module search in the editor, or the ability to mod in new map sizes and difficulty levels. One particular improvement that's long overdue is the ability to scale the user interface elements depending on the screen size.
When I started developing Airships, one of my goals was to make it playable on a resolution as low as 800x600 pixels. I also wanted crisp pixel graphics. This meant that where most modern games measure things in terms of relative size to the screen, Airships measures everything in pixels. The downside of this is that if your screen resolution is high, the user interface becomes rather... tiny. 12pt Monospace text looks crisp and readable at 800x600 but is unreadably small on a high-DPI screen.
With everything in the game based on pixels, smoothly scaling the user interface to be the same relative size for any resolution is out of the question. But I *can* make multiple versions of the GUI that are different sizes, and pick the most appropriate one. And the GUI metrics and appearance are already data-driven and moddable, so a lot of the work for doing this is already done.
I knew that radically changing the GUI scale was going to cause some problems. Places where I'd hard-coded sizes and offsets instead of calculating them properly. Assumptions based on things being approximately a certain size. The fastest way to find those places? Radically scale up the GUI and see where it breaks!
So that's what I did. I made a mod which scales up all user interface elements and metrics by a factor of two:
It's not actually that bad. And it's really obvious for me to now list and fix the problems. The incorrect calculation of button widths. The fixed width of the editor panel on the left. The incorrectly scaled right border of that panel. And so on. Once I've fixed all of them, the GUI will be fully capable of being any size it's told to be, and I can get to work on creating a system for multiple scales.
This is an in-depth tutorial for newcomers to modding Airships. We are going to make a simple mod that adds a new kind of enemy to spawn in strategic mode, a peasant uprising. You need no graphical skills for this one.
In Airships strategic mode, there are lairs on the map that are periodically occupied by monsters, pirates, and other menaces. These are referred to as "monster nests". The types of monster nests available are defined in the game data files, and you can add to them by creating a mod.
You can download the full mod from this tutorial here, for reference.
{
"id": "peasant_revolt",
"name": {
"en": "Peasant Revolt"
},
"description": {
"en": "Adds a new kind of nest, revolting peasants."
}
}
Here's an explanation of each of the elements:
[
{
"name": "brigands",
"heraldicStyle": "brigand",
"spawnWeight": 20,
"needsRoad": true,
"income": 27,
"mapImage": { "src": "ui", "x": 208, "y": 368, "w": 16, "h": 16 },
"mapBackground": { "src": "ui", "x": 208, "y": 368, "w": 16, "h": 16 },
"mapFleetImage": { "src": "ui", "x": 208, "y": 368, "w": 16, "h": 16 },
"mapFleetBackground": { "src": "ui", "x": 208, "y": 368, "w": 16, "h": 16 },
"baseConstructions": ["Brigand HQ", "Brigand Raider I"],
"additionalConstructions": ["Brigand Raider I", "Brigand Raider II", "Brigand APC", "Brigand Balloon", "Brigand Mammoth"],
"incomeModifierPercentage": -10,
"homeFleet": ["Brigand HQ"],
"minAttackFleetStrength": 300,
"attackRadius": 400,
"rewards": [
{
"name": "brigandsDefeated",
"money": 200,
"rep": 2
}
]
}
]
Note the enclosing square brackets: it's a list with one element, the "brigands" MonsterNestType. I will now go over each field and explain what it does, and how to adjust it for our peasants, then show the complete result of the adjustments.
[
{
"name": "peasantRevolt",
"heraldicStyle": "peasant",
"spawnWeight": 20,
"needsRoad": true,
"income": 20,
"mapImage": { "src": "ui", "x": 96, "y": 384, "w": 16, "h": 16 },
"mapBackground": { "src": "ui", "x": 96, "y": 384, "w": 16, "h": 16 },
"mapFleetImage": { "src": "ui", "x": 96, "y": 384, "w": 16, "h": 16 },
"mapFleetBackground": { "src": "ui", "x": 96, "y": 384, "w": 16, "h": 16 },
"baseConstructions": ["Peasant HQ", "Peasant Balloon I"],
"additionalConstructions": ["Peasant Balloon I", "Peasant Balloon II", "Peasant Balloon III", "Peasant Balloon IV", "Peasant Flagship", "Peasant Tank I", "Peasant Tank II"],
"incomeModifierPercentage": -10,
"homeFleet": ["Peasant HQ"],
"minAttackFleetStrength": 300,
"attackRadius": 400,
"rewards": [
{
"name": "peasantRevoltDefeated"
}
]
}
]
[
{
"name": "brigand",
"ruleOfTincture": false,
"firstChargeShouldHaveBonus": false,
"layouts": [
"CHARGE",
"THREE",
"BORDURE"
],
"charges": [
"ARM_AND_SABRE",
"SKULL",
"BOAR",
"WOLF",
"RAT",
"SUN",
"SPIDER"
],
"layoutTinctures": [
"SANGUINE",
"SABLE",
"MURREY",
"TENNE"
],
"chargeTinctures": [
"ARGENT",
"OR",
"SANGUINE",
"SABLE",
"VERT"
]
}
]
And again, we'll go over each field and adjust it as needed.
[
{
"name": "peasant",
"ruleOfTincture": true,
"firstChargeShouldHaveBonus": false,
"layouts": [
"CHARGE",
"COUNTERCHARGED",
"ON_BEND",
"ON_BEND_SINISTER",
"SALTIRE"
],
"charges": [
"TOWER",
"SCALES",
"TREE",
"SUN",
"WOLF",
"BOAR",
"FLOWER",
"CRESCENT",
"GOUTTE"
],
"layoutTinctures": [
"ARGENT",
"OR",
"BLEU_CELESTE",
"GULES",
"VERT",
"AZURE"
],
"chargeTinctures": [
"ARGENT",
"OR",
"BLEU_CELESTE",
"GULES",
"VERT",
"AZURE"
]
}
]
The idea with the different heraldic styles is to give each kind of opponent a different visual identity. Lots of skulls and black and red? Pirates or brigands. Things from work and nature in simple colours? Peasants.
peasantRevolt_displayName=Peasant Revolt
peasantRevolt_occupation=The local peasantry is revolting.
peasantRevolt_description=The local peasants have become dissatisfied with their lives, and have organized into a militia.
x_defeats_peasantRevolt=The peasant revolt was defeated by {0}!
peasantRevoltDefeated=Your troops round up the peasant leaders and make an example of them, and send the rest back to their fields. Peace and quiet reigns once more. LetQUOTEs hope it stays that way.
The {0} is a substitution syntax. The {0} gets replaced with the name of the empire that defeated the nest. Some text snippets get information like this substituted in. You can look at en.properties in the "lang" directory to see what kind of text snippet gets substitutions. Note that there must not be spaces between the curly brackets and the number.
The file format does not properly support single quotes / apostrophes. Instead of using one, use QUOTE in all-caps.
As the rather stuffy writer of the Bestiary states, “Pirates have their own crude tradition of flags and symbols.” This is true in the real world as well, though I actually think that pirate flags are a rather fascinating topic. And given just how blood-drenched some real-world lords and knights were, I’d accord their heraldry the same amount of respect as I would a pirate flag. That is no actual respect at all, just a healthy dose of terror.
So, pirate flags. Your fully traditional flag is the Jolly Roger, a human skull with two long bones crossed underneath it, white on black. This symbol significantly predates its use by pirates. It possibly came about because it was common to arrange skulls and bones like this in ossuaries, or out of the medieval dance of death symbolism.
From there it found its way to military insignia, used to denote fierceness, to say “not only will you die one day, that day will in fact be today because I am running you through with my sword now”. And from there to pirate flags.
The point of flags in general is communication, and the point of a pirate flag in particular is to scare the viewer into submission. Pirates didn’t actually want to fight, they wanted to plunder and get away with the least amount of effort. And so it was as important to look fierce as to actually be fierce. Blackbeard, probably the most famous pirate of them all, cultivated a fearsome image, but did not do that much fighting, and treated his captives reasonably well. After all, ransom money does not flow if your captives are assumed to be dead anyway.
Capture of the Pirate Blackbeard, Jean Leon Gerome Ferris
Beyond the skull and crossbones, pirates used a number of common symbols, all on the theme of death. Skeletons were popular, especially dancing ones. Hourglasses were also common, another element borrowed from memento mori imagery: your time has come.
Vanitas, Philippe de Champaigne
Two questions still vex us. Why were pirate flags called “Jolly Roger”, and were they always black?
“Jolly Roger” did seem to be the generally accepted term for pirate flags. It may have come from “Old Roger”, a nickname for the devil. Other theories include derivation from “Ali Rajah” (king of the sea) or “Joli Rouge” (pretty red), though Wikipedia insists the latter is clearly false.
But wait, “pretty red”? Pirate flags are black! It turns out to have been a bit more complicated than that, which brings us back to the idea of flags as communication. Most of the time, pirate ships did not fly a pirate flag at all. There was no point in bringing unwanted attention to yourself, after all. And indeed, mere possession of a pirate flag was seen as sufficient evidence to convict you of piracy!
Instead, pirates flew some harmless-looking flag, and only hoisted the pirate flag when it was time to strike. In other words, they were “sailing under false colours” and “showing their true colours” only when attacking.
And at least in some cases, pirates actually had two flags, a black one and a red one. When approaching their prey, they would hoist the black flag and fire off a warning shot. If their prey then surrendered, they would “give quarter” - not harm anyone, and simply take their valuables. But if the other ship tried to flee or fight, the red flag would be raised, meaning “no quarter”. The pirates would take the ship by force and show no mercy.
A French Ship and Barbary Pirates, ca. 1615
This mattered because pirates were not the only possible attackers for merchant ships. Vessels of governments at war with the ship’s country would do “commerce raiding”, and so would privateers commissioned by such governments. But both were required to give quarter to civilians. They could not threaten to slaughter the merchant ship’s crew, and so even though their ships might have been stronger and faster than pirate ships, it was safer to resist them. Pirates, operating outside the law, had no such limits. A privateer might be better-armed and faster, but a pirate was still far more dangerous.
This lets us construct a nice 2x2 payoff matrix for the potential victim:
Resist Surrender
Pirate Maybe escape, maybe die horribly. Lose your cargo.
Privateer Maybe escape, maybe lose your cargo. Lose your cargo.
And so the two colours of flags were very useful means of communicating a specific threat: “cooperate immediately, or we will kill you”.
Interestingly, this was much the same tactic as used by the Mongols in their conquests. The Mongol army would arrive at a city and give them a choice: surrender, and pay tribute, and be spared. Or resist, and if we breach your walls, we will put you to the sword.
Mongols at the Walls of Vladimir, Vasily Maksimov
A few survivors would be allowed to escape, to spread knowledge of the terror of the Mongol horde. Soon, even cities with very good chances at resisting a siege would surrender rather than open themselves to the possibility, however slim, of wholesale slaughter.
So there you go. To get what you want, all you need to do is persuade people.
How does Airships handle all this? By using the real world as source material while not worrying too much about details like red vs black flags. Here are some example pirate flags you will encounter in-game:
I'm starting a new series of blog posts showcasing Airships Let's Plays on YouTube. First and foremost has to be Stuff+, who's been making videos about the game for more than two years. A lot of you probably already know him because he introduced you to it!
There's now 48 videos in total, chronicling the game from early efforts until recent developments like torpedoes and monsters.
What else does Stuff+ do? He does regular in-depth previews, a lot of strategy / construction stuff like Aven Colony or Scrap Mechanic, but also other games like Space Hulk: Deathwing.
He also has a number of ongoing series about specific games at any given point, recently covering Planet Coaster, Stellaris, Transport Fever and Factorio. Plus, he has an adorable northern accent, so you should definitely check out his channel.
After a great deal of time in development, the next major release of Airships is done! Headline features include monsters like dragons and giant spiders, new music, and player-created combat scenarios. Watch the Trailer
Beta 12 is out! Also, dev 9 will officially release this Friday!
One of the new features coming in Airships dev 9 is the ability for empires to join into alliances if they're feeling threatened. This is so the end-game doesn't become a boring process of picking off weaker enemies. At higher difficulties, the AI will be quite proactive about these alliances, and the player will face increasingly united opposition on their way to victory. But what coat of arms should these alliances have? They can't just use the arms of one of the participants and ignore the others. Conveniently, this question came up a lot with real-world heraldry, and as a result there's some pretty clear precedent on how two coats of arms can be best merged.
Beta 11 is out! This adds the final features planned for 9.0, and so as soon as any bugs / balance issues are cured, version 9.0 will be live. :)
At the start of October, there was a massive LAN Party in Bern, Switzerland. It included a small Airships tournament, the first of its kind.
I started off by showing the game on-stage on Thursday with a Q&A session and a hands-on part where I taught my co-presenters the depths of aerial combat tactics.
The tournament was on Saturday and Sunday, though we spent a large chunk of Saturday gathering players. The idea was that as the first set of tournaments finished, people could switch over to Airships. But the first tournaments overran heavily, so we ended up waiting until 5 PM to kick off.
We used a double elimination tournament system to make sure everyone got to play at least a few games. On advice from other more veteran organisers, I used Challonge to set up the brackets, which was very useful, as double elimination is kind of complicated. Especially to a complete sports ignoramus like me.
Only 13 people participated in the tournament, which was fewer than I had hoped, but then we did ask people to pick up and compete in a game most of them had only just heard about. The ones who participated did so enthusiastically. Strategies developed, and the final outcome was by no means clear.
We had a good final battle with players sitting around the screen, discussing ship design and tactics, deeply involved in a game they had only just learned to play.
The tournament winner was awarded a ticket to next year’s LAN party, and I also made custom heraldic charges for the top three players:
(Yes, that is a Doge. It’s a noble heraldic animal of ancient tradition.)
In conclusion, the players had a lot of fun, and Airships is definitely suitable as a tournament game. Especially because players can work on their ship designs in the dead time between matches.
So I might do an online tournament soon. I’d run the tournament via Challonge, and the prizes would be custom heraldic charges, or perhaps a T-shirt for the winner? Let me know if that rouses your interest.
Meanwhile, I’ll be back soon with another Airships beta as we head towards the completion of dev 9...
What is this? Undo-redo functionality in the ship editor? What's next, a build queue? The mind boggles.
Beta 7 introduces a new type of message from your crew. While they've long been shouting things as they go along their business of fighting and dying, they will now occasionally pop up in the bottom left of your screen to deliver some information, commentary, or death-scream.
You can zoom in at any time to see the fate of individuals, but that's not a very useful perspective to direct a battle from, which means players spend most of their time zoomed out. The intent of this feature is to highlight things happening in the battle and to show you the faces of the people who are fighting and dying for you.
The hard part of creating NPC lines is that they can be very, very annoying.
Beta 7 fixes an embarrassing combat crash bug and adds a new minor feature: crew portraits that occasionally pop up to say things. Let me know what you think of the portraits and their frequency/obtrusiveness. I want them to add to the atmosphere of the game, not be distracting/annoying. (Known issue: you'll get the same surprised lines the n-th time you encounter a monster in strategic mode, even though your crew ought to be kind of used to it by now.)
And we are actually getting close to the dev 9 release! Yay!
Beta 6! GUI improvements!
Dev 9 beta 5 is out, fixing a bunch of crash bugs, re-balancing, and adding a new monster variant.
A new beta of Airships dev 9 is now out, with an array of minor features, adjustments and bugfixes. This is based both on beta feedback and on feedback received at gamescom. The next beta will have more major features (new monsters). Let me know what you think, and whenever you find any problems with the beta! As always, you can opt into the beta by right-clicking on Airships: Conquer the Skies in your Steam library, going to the "Betas" tab, and selecting "Beta" from the drop-down.
At gamescom, probably the most frequently asked question about Airships was: "when is the final version going to be released?" I gave some quite long answers to that, and want to reproduce my reasoning here for everyone, and also write about what's on the roadmap for the game.
Since I'm heading to gamescom shortly, I decided to put out an early beta of Airships dev 9. You can access it by opting into the beta branch on Steam.
It doesn't have the complete set of features - and monsters - yet, and is a bit rough around the edges, but I'd really appreciate your feedback at this point, especially in terms of user interface and any crashes or weird monster behaviours.
Major additions:
As part of ongoing balancing, I'm interested to hear your opinions on the bonuses given by the choice of heraldic charge in conquest mode.
I’ve written a fair amount about what the monsters in Airships are going to be like, but not much about how they’re going to fit into the game. So today I’m going to tell you about monster nests in conquest mode.
Stocks were down on news of more giant spiders eating the peasantry.
Nests are new locations on the strategic conquest map. Some of them are connected to cities by road, others are only accessible by air. They are locations where monsters, brigands and mad scientists can make their home.
Mama has found dinner for her brood.
When a nest is occupied, its tenants begin to spread their baneful influence: if the nest is within the territory of a city, that city’s income is reduced, and some kinds of nests also actively attack nearby cities. Dragons come to raid for food and shiny things, and pirates for slaves and loot. While those raids can’t conquer or destroy cities, they can cause significant damage, and successful raids also hasten the growth of the nests.
Mama is upset at your intrusion.
To root out such menaces you can deploy your fleet to attack a nest. If successful, you may also gain a reward, such as gold, reputation, or new technology. For example, clearing out a dragon nest may grant you the ability to build dragon riders, a special aerial unit.
Dracarys o’clock
Other monsters will not stick to nests, but rather attack opportunistically, like the Sky Kraken.
This kraken has found a rather large snack.
Yet others are men, mostly. Mad scientists creating death machines, brigands and pirates:
Ask not for whom the bell tolls, it tolls for thee, by means of this cutlass.
(More soon on the very specific heraldry of historical pirates.)
For now, I leave you to continue preparing for gamescom, where I’ll be showing off an early build of this all.
I am pleased to finally reveal that Airships: Conquer the Skies will be at gamescom this year, August 18 - 21.
The game will be part of the Indie Arena in Hall 10.1, along with more than 80 other games from Switzerland, Germany, and across the world. Airships will have a full-sized booth where you can learn about the game, try it out, and ask me questions. I'll be showing version 9 with its sky krakens and giant spiders.
There will also be cute papercraft airships for you to take home and glue together. I'm still working on those, but I have the shape pretty much down, and they'll be ready by August.
I'm looking forward to seeing you at gamescom! If you are a games writer or streamer, and would like to meet for an in-depth look at the game or an interview during gamescom, do get in touch.
Presskit
Airships version 8.2 is out, with a massive list of improvements, such as aerial torpedoes, a prettier map, more interesting strategic conquest, and new translations. More on the details of some of these later - for now, enjoy the improved game.
Airships v8.2 will add a new weapon to your arsenal: aerial torpedoes. Each torpedo is almost a tiny airship by itself, with a steam-driven propeller and a Suspendium chamber. And on impact, its explosive payload is so great as to punch even through the strongest armour.
Of course, for reasons of balance, this means they have a number of disadvantages too: a slow firing rate and a very narrow fire arc. And compared to cannonballs - that do their damage by slamming into stuff really fast - torpedoes have a very leisurely pace. Nor do they have a guidance system, so if you move out of their way, they will fly past and harmlessly explode in midair. This makes them mostly suitable for action against buildings, landships, and large, slow airships.
There is one more limitation. While developing this new weapon, I realized that most of its disadvantages would be negated if you fired them from very close, giving your opponent no time to dodge.
But usefully, real-world naval torpedoes have a minimum range. They are inert immediately after firing, and only arm themselves after a little while, to make sure they don’t accidentally get triggered by the ship that fired them. (If you’ve watched The Hunt for Red October, you know this.) Adding a minimum range to the aerial torpedoes makes them more like their real-life counterpart, and also makes them more balanced.
If you want to use them in strategic conquest mode, pick the mullet (six-pointed star) charge for your coat of arms. An early boost to your ability to take down defensive buildings.
Finally, let me round off this post by writing about some fun torpedo facts:
Version 8.2 brings a large number of fixes, improvements, and balance changes. As such, I'm once again doing a beta for a few days, so you can try out the update and report any immediate problems. If you're up for it, you can opt into the Beta branch on Steam to get it. Let me know about any and all problems you encounter.
The biggest changes are a new Japanese translation provided by players, a 2x larger combat map, smarter AI in strategic mode, and a new weapon, the aerial torpedo.
A while ago I listened to a podcast interview with one of the developers of Don't Starve. They were discussing the design of the Science Machine, the building that lets you discover new crafting recipes.
In its original version, players could dump any items they didn't want into the machine, and it would convert these items into points that could be spent on new crafting recipes. (That part of the discussion starts at 10:41 in the interview.)
The idea was that the machine would act as a sink for surplus items. Instead, players set up vast farms to produce as many grass bushels as possible. These produced only a tiny number of science points, but they could be reliably and safely generated in vast quantities.
This reliability and safety made the game really, really boring to play. Users had optimized their play style to be effective but boring. In the end, the developers changed the Science Machine to just directly unlock the new recipes.
The point here is that the mere presence of an option can completely unbalance gameplay. Yes, of course players could have decided not to do grass farming, but these kinds of self-imposed boundaries are hard to draw. Having easy access to grass is useful, but at what point are you grinding instead of playing? You may have had the experience too that you can often only tell that you're really bored with a game when you've been bored for hours. And for a certain, common kind of optimization-happy player, not using a game's mechanics optimally feels like missing the point.
Here's another example. I played FTL: Faster than Light a fair amount when it first came out. But the ability to pause the game ultimately made me optimize the game to be boring. A lot of things in FTL depend on very careful timing: firing weapons in just the right sequence, deploying crew, opening and closing doors, re-distributing energy. So over time, I paused the game more and more often to make sure everything was running correctly, and to give carefully timed commands. Eventually, I only let the game run for about a second before pausing again.
I tried playing the game while abstaining from the pause feature, but that made the game really hard and stressful. So clearly some use of pause was necessary, but where to draw the line? More pausing always meant playing more effectively, but boredom would creep in.
This brings me to why there is no way to precisely target weapons fire in Airships, selecting individual modules instead of entire ships. It wouldn't be hard to add to the game, but it would mean that to play optimally, you'd have to constantly adjust targeting on potentially dozens of ships. It feels frustrating that you can't give more precise commands, but it would ultimately feel more frustrating if you could.
After a series of bug fix releases for dev 8, I am now making headway on dev 9 and its menagerie of monsters. In a previous post, I showed you the tentacle movement I implemented for the game. Now I want to show you how these tentacles are actually used by the Sky Kraken.
The Kraken is a 120-metre-long aerial terror that descends from the clouds to snack on the contents of your airships. To it, your ships are nothing but boxes stuffed with delicious treats that need the occasional whack to dislodge more food.
The Kraken has four arms, each of which has two attacks at its disposal. (Yes, squid have eight arms and two tentacles, or eight arms, two tentacles and a detachable penis-tentacle if they're boy squid. But this is a 2D squid, and 8 tentacles just ended up looking crowded.)
Its preferred attack is to find an air sailor, grab him, and deliver him to the Kraken's maw, where he is messily devoured.
But if the Kraken can't see any sailors, the arms switch to the other attack, which is to repeatedly crash against the ship's hull until more food is revealed.
Needless to say, this experience doesn't go over so well with the crew.
Now the Kraken is huge, and tough, but its arms still have limited range, so if your ship can position itself out of harm's way, it may yet survive. Or you can simply throw a giant fleet full of juicy sailors at the creature, big enough to absorb the crew losses while pummelling the enemy.
But sometimes, at night, the Kraken may return, a strange glow where its eye once was, tentacles half chewed away, oozing pus and ichor...
There are two purposes to this blog post: one is to explain in detail how the lighting system works in Airships, and the other is to show you how to create graphics for the game that are in the same style as the rest.
Graphics in Airships are composed of two parts: the spritesheet and the bump map. The spritesheet image determines the basic colours of the image, while the bump map determines how they are lit up by light sources in-game.
Here's an example:
The spritesheet image of a light wooden armour tile:
Its bump map, and each of the three colour channels in it:
Different ways it can look like in-game:
Note that the spritesheet image is literally just a brown square. All the texture in-game comes from the bump map.
The bump map stores three pieces of information for each pixel: whether the surface is facing up or down, whether it's facing left or right, and how shiny the surface is. This information is stored in the red, green and blue colour channels of the image. For example, the redder a pixel is, the more strongly it gets lit up by light from above.
The game's graphics only use three values for the blue shinyness channel:
Version 8.1.4 is out, with the following improvements:
Version 8.1 hath dropped, bringing fixes, improvements, and giant sawblades to chop apart your enemies.
Want to learn how to mod the game? There's now an in-depth video tutorial for that! More detailed text-based documentation is coming soon.
Note: If you read this post on my website, there are interactive examples.
With Airships dev 8 complete, it’s time to start creating monsters.
Monsters and pirates is what dev 9 is going to be all about. What sets monsters apart from normal airships is that they can have abilities that are a little more out there, that would be hard to give to players for reasons of balance or user interface.
One of these things is tentacles. Giant aerial kraken will descend from the skies and begin snacking on your crew as you attempt to fend them off. Now, Airships’ graphics may not be the fanciest, but they do pay attention to detail. A fixed tentacle graphic swinging by would be boring: how about properly animated ones? I wanted to try, at least.
My basic approach was to use a model close to how actual tentacles work. If the basis for their movement was unrealistic, no amount of tweaking would get them to feel quite right. Compared to the limbs of creatures with bones, tentacles have a lot more degrees of freedom, and can also compress and stretch. The model I chose is as follows:
A tentacle consists of about 20 segments. Each segment is attached to the previous one with a joint. There are two muscles in each segment, which can independently shorten, up to about half of their original relaxed length. The angle of a segment is determined by the angle of the previous segment plus the angle created by the differing lengths of the muscles.
This model has two advantages: it’s close to how actual tentacles work, and the behaviour of the tentacle comes down to the behaviour of each muscle, which can be represented as a single compression value.
I programmed this model and started out with a simple rule that made the muscles relax by default, straightening the tentacle and extending it to its maximum length. Then, to test it, I turned the cursor into a kind of an “electroshock” tool which would contract nearby muscles with a mouse click. This let me check that I’d wired up the model correctly, and that the basic movement of the tentacle was fluid.
There would be an interactive sample here. Go to the version of this post on my site to see it.
My basic idea for muscle behaviour was as follows: each segment should attempt to position itself to be at a certain angle relative to the target point. Segments at the start of the tentacle should point straight towards the target, while segments towards the end should aim to be at an increasing angle towards it, still coming closer, but encircling it. Each muscle would figure out in which direction its segment needed to rotate and expand or contract accordingly.
And this already worked pretty well! The tentacle would head towards the target and then curl around it. The main problem was that it would not actually touch it. For the next iteration, I modified the behaviour so that the tip of the tentacle would again want to point straight towards the target.
I also adjusted the compressibility of the segments, making the segments at the base stiffer and the ones near the tip more flexible. Once that was in place, the tentacle was able to get within a fairly short distance of most target points.
In-game, the tentacles of the sky squid will seize individual crew members and deliver them to the maw of the creature. I programmed this in next, giving the tentacle targets that alternated between random points and a fixed point next to the tentacle’s base where the mouth would be.
There were still some cases where the tentacle would get stuck, each segment having locally optimized its position but the tentacle as a whole failing to connect, vibrating as it tried to optimize further. Effectively, the tentacle was stuck in a local maximum. No small change would improve its position. So I put in an extra rule that if the tentacle took more than about two seconds to find its target, it would temporarily relax the muscles in its base, causing a large movement that would get it unstuck.
The tentacle’s behaviour is now reliable and looks cool, and is ready to be integrated into the game.
After several months of development and two weeks of beta testing, Airships dev 8 is out. Its major new features are data-driven modding and Steam workshop integration, as well as new modules and conveniences like selection groups and auto-landscaping.
Hey! Beta 6 is out. There will probably be a beta 7 tomorrow, and then the release the day after.
When I decided to release v8 as a beta version first, I wasn't entirely sure if that was the right call. Subsequent events showed that it was the right decision.
After many months of development, Airships dev 8 is finally complete. Because it's been so long, I'm going to release it in two phases, as an opt-in beta now and then as a full release in a few days' time.
A lot of the internals have been rewritten, and so it's likely that this version is more buggy than dev 7.4. If you'd like to help me iron out these bugs, or if you want to get started with modding, or just really want to see dev 8, you can opt in. Go into the game's properties on Steam, select the "Betas" tab, and select "Beta" from the drop-down.
Once you're in the beta, do let me know about any and all problems you encounter, from crashes all the way down to balance issues, minor graphical glitches, and typos. In particular, if anything goes wrong, I'd very much like the game's log. On Windows, this is at %APPDATA%AirshipsGamelog.txt, on Mac at ~/Documents/AirshipsGame/log.txt, and on Linux at ~/.airshipsgame/log.txt.
So what's new in dev 8?
Hey, we reached 250 Steam reviews! If you've been playing the game, you've probably noticed that I've been bothering everyone about leaving a Steam review for the game. There's a reason behind this, and it's not entirely just the fuzzy feels I get when I read them: I want the game to reach an "Overwhelmingly Positive" rating, for which it needs 500 reviews in total. What's so great about that rating? Well, it means more visible evidence that people like the game, which means more players, a bigger community, and more sales. More life pumping through the game and making it greater.
So we're halfway there - a bit more than halfway, because we're actually at 251 now. So to celebrate, here's a picture of an aerial battle I commissioned a while ago:
As for dev 8 - getting there! I spent some quality time being ill, coughing and shivering, and am now just stretching my feelers back out, clearing email backlogs, re-scheduling meetings. And soon, getting back to the code and finishing the last few items.
In dev 8, game data is now loaded in from external files. As I expected, this is causing the occasional bug. In particular, some airship designs would consistently fall out of the sky. This needed to be fixed.
The first step in fixing any bug is to find a consistent way to reproduce the problem. If you can't reliably observe the problem, how can you be sure it's fixed? How can you study it? So I found a ship which reliably fell out of the sky, the "large bomber" AI ship design:
Half a minute into any combat, without fail, there would be a cry from the Suspendium chamber: "We need more coal, quick!" Coal would fail to arrive, and the ship would plummet to the ground and explode messily. The question now was why the coal wasn't getting delivered.
Job dispatch in the game works like this: Each module has jobs associated with it. Jobs can be operating the module or delivering resources like coal or water, or simply guarding the module. Jobs have different requirements for who can perform them - e.g guard jobs need to be done by armed crew members - and different priorities. So as a Suspendium chamber starts to run out of coal, the priority of its "deliver coal" job starts rising.
Jobs are allocated by priority, and crew members can abandon one job if a significantly more important one comes along. So why wasn't the coal job for the Suspendium chamber being fulfilled? I couldn't quite figure it out by just looking at the ship. But certainly, I could see no crew member picking up any coal. So perhaps there was a bug in job allocation?
I created a quick new debug overlay that showed the jobs for the currently selected ship, their priorities, and whether they had someone assigned. After filtering out the low-importance ones like "stand in this module in case you're needed", I could observe what everyone was up to while the game was running.
And yes, the coal job appeared, and was assigned, but somehow never completed. I added more detail to the overlay to show the state of the crew member who had been given the job, where they were heading, if they were carrying anything. This showed me that the assigned crew member had walked to the coal store, but was just standing there, not picking up or delivering the coal.
Now that I had an idea which part of the process was going wrong, I stepped through the code for picking up resources, and found that the crew member had a little difficulty picking up the coal: the time required to complete the action was 2147483647 milliseconds. What an interesting number.
2147483647 is the largest number that fits into an integer. Somewhere in the code, I was dividing a floating point number by zero, getting out infinity, and then converting it to an integer. Since infinity can't be represented in an integer field, the code went with the largest possible value.
And indeed: the crew member who was taking 2147483647 milliseconds - about 25 days - to pick up the coal was a guard. Guards aren't meant to do ship work, and have their work efficiency set to zero. The mistake was that the coal job accepted that guard as an assignee.
Before the change to loading in data, the code could refer to explicit crew type. After the change, it had to check properties of the crew type it was presented with, and it wasn't checking work efficiency.
Once I fixed that, the bomber stopped falling out of the sky.
[ 6081 ]
[ 1294 ]
[ 4061 ]