Q Why? A To create new revenue streams and maximise shareholder value by exploiting existing IP.
Q I don’t see any ads. A The 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.
Q I do see ads and I wish I didn’t. A If 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.
Q I’m not entirely clear on how to purchase the advertised items. A You may request a detailed catalogue of items by sending two Gug Shillings or other coins of equivalent value to 11 Uncouth Road, New Glottenbourg.
Q Is spider tonic made out of spiders? Is it to prevent spiders? Is it for spiders??? A What ridiculous questions. Everyone knows what spider tonic is.
Q Are Ambition Pills safe to take? A We have heard no complaints.
Q How do I drink floatmead? A Bow your head and then carefully invert the flagon to let the mead float upwards into your mouth. Swallow carefully.
Q Help! I have bred too many geckos! They’re in the walls! They’re everywhere! A Send a letter to 11c Goat Lane, Cogburgh. Enclose 3 florins to receive our highly efficaceous anti-gecko tincture.
Q I have attempted to eat a Heptascuit. A Send a letter to 11d Goat Lane, Cogburgh, enclosing your teeth.
Added an "anchor" toggle that lets you exclude ships in a fleet from being selected by default.
Ships no longer fire on harmless targets, wasting ammo.
Ships no longer think that unarmoured decorative spikes are vital enemy systems that must be destroyed at all costs.
Fixed some minor GUI/display bugs.
Limited length of ship and empire names to 50 characters to prevent messages taking up a distracting amount of space.
Game preferences are now stored in the game data directory (%APPDATA% on Windows). This improves performance of the open file screen and allows you to do a full, clean reinstall.
Improved game performance by a few percent.
Registration for non-Steam users works again.
Balance Changes
These balance changes were suggested through a community process on Discord. Thank you all for participating!
Modules
Saw blades damage 30 -> 25, but increases to 30 with advanced metallurgy tech.
A whole lot of new sails courtesy of Orang. The old sails still work but can't be placed anymore. The new sails have fewer restrictions, and various advantages and disadvantages. I also updated a number of AI ship designs to use the new sails.
A whole lot of new armour and armour variants, mostly courtesy of YellowMiner.
New heraldic charges: sextant, chalice, fist, and new coat of arms layouts: orle and double tressure, plus a bunch of AI-only ones.
New set of AI ships by Orang, in an Aztec-inspired style.
A new mechanic for calculating a ship's air resistance and hence speed from its shape. See the new drag overlays in the ship editor.
I also added thin slices of dust tanks and dust tank envelopes with ladders in to allow you to easily fix drag issues caused by having struts go through tanks. Take this example ship:
And compare it with this one, where the struts have been replaced to allow for better airflow:
Gameplay
Flamethrowers provide a steadier stream of flame.
Bomb accuracy is no longer affected by firing mode or weather effects.
Reduced restrictions on dorsal and ventral turret placement.
Hussar modules are now armourable. You may want to go back to your designs that use hussars and add armour.
Fixed graphical glitches with biplane hooks and damaged bomber planes.
Fire burns longer, does less damage, spreads faster.
Unimportant building fragments are now more aggressively deleted after battles.
Increased normal propeller propulsion by 25% and small propeller by 100%.
Interface
Fixed problem with editing landscape that placed soil underneath everything you put down, which made e.g building trees hard.
Buttons underneath the edit ship panel are no longer active or highlighted.
Removing decals now looks at the "place underneath" toggle to see which decal to remove.
Duplicating decals now also duplicates their paint.
Duplicating modules now also duplicates their window configuration.
Invading fleet indicators now show time to arrival.
Monster nest upgrade popup now properly pauses the game in single player.
You can now access the game settings from conquest mode and some other places.
Nicer-looking sliders in the settings.
Buttons and other clickable things in scrollable areas no longer extend beyond their area.
Updated heraldry editor: Each charge is now in a separate tab to make it less cramped.
Fire noises and other loops now stop playing when you pause the game.
Fixes
Improved boarder pathing on the outside of ships, especially concerning sails and other geometries with a lot of empty space.
Fixed some AI building designs pointing the wrong way.
Fixed a replay desync bug.
Fixed outline display of selected decals in flipped ships.
Outside view is now toggled off when you switch to refitting buildings from the defences screen.
Fixed bug where placing modules would use the wrong armour variant.
Fixed bug when placing a module where it looked like it would join up to another module, despite that module not having a door in that place.
Modding
Coats of arms layouts are now fully data-driven, so you can create your own layouts. Finally. That's one of the last major bits of hard-coded information in the game.
You can now derive module types, armour types, and decal types from others earlier in the load order. (Earlier in the same file, or in a file with a name that comes earlier alphabetically.) See ArmourType/Wood.json, ModuleType/JUNK_SAIL.json, and DecalType/JIB_SAIL.json for examples.
Known Issues
If you run the game in non-windowed fullscreen and alt-tab away, it stops completely, which breaks multiplayer. Use windowed fullscreen for multiplayer.
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:
Lazy Saving
Most of the game world doesn't actually change between saves. A ship that's just flying around without engaging in combat doesn't change. The landscapes of peaceful towns, with nothing crashing into them, also don't change. So re-creating all the JSON data for them isn't actually necessary. By splitting the save game into a bunch of smaller files, one for each landscape and ship, the game can avoid doing most of the work of saving.
The hard part is that it has to know when a landscape or ship did change, which means that these things now need to keep track of a version number. That version number needs to be increased whenever a change happens. If not, the save will be partially outdated.
Conveniently, I realised that during development and testing, the game can produce the JSON for things that are supposedly unchanged, and compare it with the information that's in the file on disk to see if it really hasn't changed. This lets me root out cases where the version isn't getting updated.
A Compact Format
JSON is a convenient format, but it's also very bulky. It's text-based and each data field is individually labelled, which makes it human-readable but verbose. Completely changing the data format of the game would be a huge effort. Instead, I created a more compact representation of JSON. (There's probably a lot of compact JSON representations out there, but this one is mine.)
There's a bunch of minor gains to be made. For example, the number 9845329 takes seven bytes to store in JSON but only four if you store it as an integer number. A small number like 109 fits into one byte.
The major gain is not having to repeat all the names of the fields. For example, each crew member on a ship stores a "weaponReload" value. On a ship with 100 crew, this means the letters "weaponReload" are repeated 100 times, which is 1200 bytes just for that. But in a compact format, you can just use "weaponReload" once and then refer back to that text using a back-reference that uses far fewer bytes. Because most of a JSON file's size is made up of field names, the total size of this new format is a fraction of the old one.
A back-reference here means that instead of spelling out the text you keep track of all the bits of text you used previously, and then refer to them by number when you need them again. For example the following sequence of words:
Where the numbers represent the position in the list where a word was first encountered.
What makes changing formats hard is that it needs to have 1:1 fidelity to JSON. You should be able to convert any JSON into this format and back again without losing or distorting any information.
But wait, why do we care about a compact format? We want a fast format! Well, conveniently those are very similar goals. Having to glue together far fewer bytes in less complicated ways makes this format faster. And having to write fewer bytes to disk also makes saving faster.
Results
So by combining these two techniques, saving and syncing will take two orders of magnitude less time. It's more work, but it's also necessary.
You might be wondering why I'm messing around with save formats instead of working on the diplomacy update, but the way I see it, I can't do a big update and tell everyone to play multiplayer games when there's problems like multi-second sync pauses still happening.
Improved user interface for selecting ship names: You can now set a prefix for your ships to have, and you can automatically choose distinct names or numbers when building multiple ships.
The fleet list now has a compact mode and a select all button.
You can replace modules, armour, paint, and decals in the ship editor by selecting them and choosing "replace".
You are no longer prompted to name dragon riders and fleshcrackers.
Toggle for switching to placing decorations underneath the ship.
All decoration types can now be placed underneath the ship, including flags, coats of arms, and name plates.
New AI fleets by Eliphaser, JimmyJam, Proton, 14pat and me.
Fixes
Planes go back to repair and rearm, and obey commands again.
Showing module ammo per shot/clip again.
Date panel moves to stay visible when fleet is selected.
Fixes to tentacle AI.
Boarders no longer get amnesia from going through doorways or dropping short distances. (Yes, they had doorway effect!)
Boarders will now climb down landships and buildings when stuck on them.
Planes no longer keep attacking buildings that used to be enemies but are now friendly.
Crew no longer spawn exactly on top of each other, giving the appearance of missing crew.
Planes using their weapons now reset the draw timer.
The insides of modules with no armour are now drawn even when zoomed out.
Balance
Adjusted biplane hook pricing to be consistent.
+25% accuracy for landships and buildings.
High Pressure Jelly now also increases flamethrower projectile speed.
Until recently, time has been a bit... vague in the game. Ships took some time to build, some time to move somewhere. But it's useful for players to be able to tell how long a process will actually take.
Which led to the question: how much in-game time passes in a second of the player's time? Obviously, an airship takes longer than a minute to build, so there's some time warp factor at work. Interestingly, ships do have a speed expressed in km/h, and since they move at a certain speed on the conquest map, picking a time factor also implies picking a scale for the map.
So I started juggling around some numbers and trying to figure out a time factor that felt right, that didn't make the map weirdly tiny or huge. In the end (and after some player feedback) we've ended up with one in-game day taking 0.4 seconds of player time.
Calendars
The second question was how to display this time. Airships is set in a fictional universe, so it would be jarring for dates like "November 5, 2020" to appear in the game. At the same time, players need to have a reasonable grasp of timespans. A month should be roughly thirty days, a year roughly 365. A date like "six-moon, ninth period of the goat" or a time interval like "four plorkengs" tells the player nothing.
Then Orang on the Discord pointed out that the calendar should be lunar, given that the religions in the game revolve around the moons. Lunar calendars also have the advantage that each month is the same length, and given that I didn't want to go even more overboard with all the intricacies of real calendars, that was a nice simplification.
So the calendar in the game is a lunar one, where each year is 13 months and each month is 28 days, for 364 days in a year. On Earth, lunar calendars require constant adjustment so they don't drift out of phase with the year, but in the world of Airships, the year is conveniently really exactly 364 days long. The month names are taken from the old Babylonian calendar.
Of course, the world of Airships has three moons. The calendar uses the cycle of the largest one, but there are two others with different cycles.
And this being Airships, the moons are moddable. Yes, the game has data-driven moons. And data-driven calendars, which can be different for different players.
Here are the moons:
Ea, Bringer Of Floods
28 day period. The big moon that has the major influence on the tides. Associated with fertility. The current mainstream Trilunar religion was predated by a Mono-Lunar religion that only worshipped this moon. There are still Monolunarists around, mostly in rural areas, and they're tolerated if considered backwards. And there's varying enthusiasm for the worship of the two other moons within the Trilunar church as well, bordering on crypto-monolunarism.
Tessagon, Festival Moon
61 day period. When Tessagon is full, there is a minor religious festival where people get together in their communities, relax and get drunk. It's also considered a good time for fishing.
Mith, The Unwanted
109 day period. A smaller moon with an eccentric orbit. The sophisticated theological position is that Mith is the moon of things that are unexpected, unplanned, and out of season. The folkloristic view is that it's the moon of death, accidents, and monsters. A child born when Mith is full is considered cursed.
Festivals
The major religious celebrations happen when two or three moons are full at the same time. Ea and Tessagon coincide every 1708 days, and the festival is a time of renewal. Mith and Tessagon coincide about once every 18 years, and that festival is a raucous but spooky celebration. Ea and Mith coincide about every eight years. This is a muted festival, and its main function is that debts are cleared and illegitimate children are accepted by their families.
Finally, all three moons are full about once every 511 years. These grand conjunctions are considered the start of a new epoch, though history rarely obliges. The old empire fell partway into the current epoch, on an indistinguished day. Other combinations also happen every 511 years, like the day when Ea and Tessagon are full and Mith is nowhere to be seen, or the darkest night, when there are no moons shining at all.
Heresies
So if there are Trilunarists and Monolunarists, are there Bilunarists? Well, yes! Three kinds, because there's three combinations of two moons to choose from.
The ones that believe in Ea and Tessagon, but not Mith are the most numerous. Worship of Mith and the associated festivals are not very popular in some regions. While declared Ea-Tessagon Bilunarists are rare, there are plenty of congregations that choose to downplay or outright ignore Mith.
Believing in Ea and Mith, but not Tessagon, is a position held by a few austere reformist thologians. Unlike Ea-Tessagon Bilunarists they're very outspoken about their beliefs, and are roundly ignored.
Finally, Tessagon-Mith Bilunarism is what secret Monolunarists accuse others of being, because they don't put enough emphasis on the actually important moon, Ea.
And what if you're a Worm Eye cultist? You use a completely different calendar of twelve 30-day months, because of course you don't believe in all that moon stuff!
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.
Fixes
Injured crew now have visible wounds.
Injured crew no longer get up to flinch when they are hit.
Injured crew no longer change into an air sailor outfit when they are picked up.
Game logs older than 30 days are now automatically deleted to save your disk from filling up.
Particles now obey the combat speed rather than always moving at the same speed.
Harpoons no longer produce a disappointed message that they didn't penetrate heavy armour.
Recordings of combats run at fractional speeds may still diverge, but no longer complain about it.
Fixed a physics exploit that allowed landships to fly. Thanks kouwei32 for the detailed report, including a mission demonstrating the exploit.
The industrial production bonus from the bee heraldic charge now actually works. This would be less embarassing if I didn't make the exact same mistake for the scales heraldic charge, which also was non-operational for a long time. Oh well.
Community-sourced Balance Changes
Stone wall blast damage absorb 2 -> 4
Brick wall blast damage absorb 0 -> 2
Brick wall piercing damage absorb 0 -> 1
Dragon rider cost 3000 -> 2000
Grenade damage 30 -> 20 but +5 with advanced explosives
Guided missile explode damage 500 -> 250
Biplane, triplane and bomber costs 300 -> 200 (but not torpedo bomber)
Monocoque construction now reduces plane maintenance cost by half
Clarifications
Guided missile explode damage refers to the damage caused by the module exploding, not the damage the weapon does.
Game logs are technical files used for bug fixing. They're not your saves. Your saves are safe.
1.0.18.3.1 Hotfix AKA Let's Do The Time Warp Again
Fixed crash in conquest main map when sending fleets.
+5 damage bonus to grenades from advanced explosives now actually works.
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.
Combat and Post-Combat
There is now a one-minute countdown to a draw if nothing interesting happens in a combat. There's an overlay that turns up and counts down the final 20 seconds.
Landships are no longer lost if they're in the reserve or one side withdraws before the fight starts.
You can only move ships into or out of the reserve during combat once.
Post-combat report now indicates whether ships were repaired and why.
Modules that were about to explode when combat ended no longer continue exploding in the next combat.
Partial repair no longer restores decals.
Boarders and Planes
Boarding Action mission no longer causes grenadiers to smash themselves into the ground.
Fixed problems with grenadiers getting stuck on rocks halfway to their boarding target.
Boarders should no longer fall off ships when trying to move to the entrance.
Grenadiers should no longer release their grappling hooks early and fall to their deaths.
Robot spiders and marines should no longer walk back and forth failing to make a jump.
Removed some cases of animation flicker for boarders moving along the outside of things.
Grenadiers now account for the speed of the thing they're throwing a hook at.
Planes no longer attack ships that have gone into the reserve.
Planes that are landed should no longer crash to the ground on death.
Hussars have better acceleration and should no longer flicker back and forth.
Other
Feedback button in replays.
Pirates and guardians give a bit less money, shellwalkers a bit more.