1. Airships: Conquer the Skies
  2. News

Airships: Conquer the Skies News

Ads Explained

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:
  • Pennyroyal - a toxic flower traditionally used as an abortion-inducing tea.
  • Castoreum - beaver scent gland extract used in perfumes, and as a food additive in the 19th century.
  • Parsley - a common and pretty harmless herb. It might help with digestive issues.
  • Certain Essential Saltes of Animals - a reference to HP Lovecraft's The Case of Charles Dexter Ward.

The Six Day Stilt is a location in Caves of Qud, another favourite game of mine.



Moustache tonics are a real thing. Here's one with Suspendium in, allowing for truly improbable arrangements of facial hair.



The shape of the landship is based on a giant mining truck. Note also the suggestion of two watchful eyes in the trees.



Another product that is far less altered from its original than you'd expect or hope. Wine fortified with cocaine was a real thing, and yes, there really was a brand that claimed to be endorsed by the pope.



The world of Airships lacks cows, so they have to make do with Corned Wurm, made from giant angry lizards.



Also available in a substitute version. Please don't ask what it contains, you would not like the answer.

Finally, here's a list of ideas that I didn't get around to, because I didn't have the time, or I didn't know how to draw them:
  • Hiddelsten's Vibrating Underwear
  • Mr Stockton's Safe Aerial Descent Device
  • The Todestrieb Institute recommends that men, women, and children of all ages smoke thrice daily to calm the lungs, clear out harmful Suspendium dust, and prevent disease from taking hold. (I nixed this one because I didn't want to make the lives of recovering smokers any harder.)
  • Try Floatcheese from Floatgoats!
  • The Floating Fireplace: Spreads Light and Warmth throughout the House
  • Mizzenmast's Candied Jellies
  • Athory's Blood Purifier Engine

Ads!

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.

Version 1.0.20.2 - Bugfix & Balance

[h2]Features and Fixes[/h2]
  • 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.
[h2]Balance Changes[/h2]
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.
  • Targeting computer weight 500 -> 400.
  • Grenades base damage 20 -> 25.
  • Deck gun HP 40 -> 50, added light steel armour, reduced crew requirement by 1, cost $50 -> $70, +10% accuracy, +25% shoot troops range.
  • Increased kinetic bomb accuracy by 50%.
  • Engine pod: added light steel armour.
  • Suspendium ray damage: 15 dmg x 12 shots -> 12 dmg x 12 shots.
  • Pressurised suspendium dust tank lift 1200 -> 1400.
  • Grapeshot cannon damage: 7 dmg x 14 shots -> 8 dmg x 14 shots.
  • Aerial charge: +40% accuracy, +50% speed.
  • Fire door weight 20 -> 10.
  • Triplane, Biplane, Bomber, Torpedo bomber: modules no longer produce drag.
Armour
  • Dragonhide HP 60 -> 75.
  • Massive stone wall HP 100 -> 130.
  • Reinforced wooden armour weight 15 -> 12.
  • Shell armour cost 10 -> 6 (5 -> 3 in conquest).
Decorative/structural modules
  • 1x1 slope weight 3 -> 2.
  • 3x1/1x3 slope weight 7 -> 6.
  • 4x1/1x4 slope weight 9 -> 8.
  • Round corner weight 4 -> 3.
  • Concave corner weight 3 -> 2.
  • 3x1/1x3 curve weight 7 -> 6.
  • 0.5x2/2x0.5 slope weight 3 -> 2.
  • Crenellation weight 10 -> 5.
  • Stained glass windows now have the same stats as ladderless corridors.

Version 1.0.20 - Many Things

[h2]Additions[/h2]



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:



[h2]Gameplay[/h2]
  • 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%.


[h2]Interface[/h2]
  • 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.


[h2]Fixes[/h2]
  • 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.


[h2]Modding[/h2]
  • 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.


[h2]Known Issues[/h2]
  • If you run the game in non-windowed fullscreen and alt-tab away, it stops completely, which breaks multiplayer. Use windowed fullscreen for multiplayer.
  • Missing translations.

Making Saves Go Faster

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:

[h3]Lazy Saving[/h3]

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.

[h3]A Compact Format[/h3]

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:

fruitbat, fruitbat, llama, fruitbat, iguana, squirrel, llama

can be abbreviated to:

fruitbat, 1, llama, 1, iguana, squirrel, 3

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.

[h3]Results[/h3]

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.