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!
- Added missing buildings to an AI fleet.
- Updated Russian translation. (Thanks, Meowskyi!)
- Fixed clockwork zombie appearance.
- Fixed large dome decals.
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.
Ship and City Lists
There are two new tabs in the Empire view that show you a list of all the ships and cities in your empire. The lists are sortable, and I've added as much information and interactivity in there as I could. If you have feedback or further suggestions, let me know in the comments.
Steam Deck Compatibility
Until now, Airships on the Deck had to run via Proton despite there being a native Linux version. This should now be fixed. Also, clicking on any input field should now automatically pop up the Deck keyboard. I'll be resubmitting the game for Deck verification and hoping it gets a green checkmark.
AI Fleet Revamp
The ships and buildings that AI empires build have undergone a revamp. Some old fleets have been removed, fleets are now more suitable to the difficulty level you chose, and several new fleets by WAS, yakcamkir, Clockwork Giant, Henry, and Deggo have been added.
New Armour Types and Decals
There's a whole lot of new armour variants courtesy of YellowMiner. By popular request, there are now also half-panel and dome decals.
End of Game Messages
The game now acknowledges the manner of your victory or defeat with a brief message in the end of game screen.
Other Fixes and Improvements
- There is now a "Remove All" button when editing windows.
- Steam workshop items load much faster again, speeding up the game startup.
- Construction progress is now saved properly, which may also fix some desyncs.
- Slowed down overly fast spiders.
- Removed massive gatling sponson recoil.
- The game no longer second-guesses your GUI scale choices.
- Slightly reduced the number of ritual sites needed to win via the Final Ritual.
- Various crash fixes.
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_
- Fixed leg rendering when lighting is turned off.
- Fixed font rendering in game setup.
- Fixed a crash on systems that don't handle unicode file names properly.
- Fixed text formatting of hero change message.
- Fixed turtle bonus defences maintenance reduction.
- Capitals can no longer spawn disconnected from themselves.
- Diplomatic offer editor no longer gets in front of the top bar.
This update fixes a crash specifically on Mac.
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.
- Added map overlays for trade, research, and tribute treaties.
- The ship editor now uses the last used paint for placing new modules.
- The research complete dialog no longer forces you to pick a new research immediately.
- Added one new AI fleet contributed by Gug Dug.
- Parasitic wasps now give a reward the second time you defeat them.
- The medal editor now adjusts in size if you have a lot of additional heraldic charges.
- When you click to target a ship in direct control mode, the resulting sound is now positioned correctly and obeys the volume setting.
- Fixed a desync bug.
- New Arachnophobia Mode setting: No spider monsters turn up in new single player games. All spiders are shown without legs.
- Tarantulas are more collision resistant.
- The AI no longer thinks it can use guided missiles like bombs.
- The letters and should now display correctly.
- Fixed display of obstruction beams for mortars.
- Added ExpansionMusic loadable to let modders control what music is added when the H&V expansion is active.
- Akim the sorcerer no longer has a bunch of question marks in his stats when his nemesis empire is destroyed.
- Clockwork Janissaries are now available in Design & Fight mode, at an increased price relative to when you get them through the event in Conquest.
- The game no longer endlessly bothers you about developing Clockwork Janissaries.
- Fixed some crashes and desyncs.
In time for Halloween, and because I felt like it, here's two new monsters for the game:
- Giant tarantulas, huge, tough spiders.
- Parasitical wasps that can turn your crew into clockwork zombies.
- Added setting for enabling/disabling spy actions in conquest. (You still use spies to see enemy cities either way.)
- Fixed tentacles losing track of crew or trying to grab already grabbed crew.
- You are now notified when an enemy's new alliance causes a new war for you.
- The game finally no longer sometimes repositions buildings at the start of combat.
- Fixed modded zombies turning up on the wrong side.
- Fixed spy action success chance tooltip.
- Fixed weapon barrel lighting bug.
- AI no longer gets stuck moving fleets back and forth when reinforcing an allied city.
- Fixed the game crashing when a town was incorporated into another empire in the middle of a fight over that town.
- Crew spawned through hero abilities now despawn again after combat.
- Reduced money and reputation gained from cultists spawned in the age of madness.
- Fixed camera not going up far enough in direct control mode.
- The landscape and weather selectors in combat setup now have scroll bars when needed.
- Fixed modded external barrel animations.
- When you're demanding more territory than you're offering, the decrease in AI approval is now shown as a line item in the diplomacy offer editor.
- Fixed the altitude change sound not ending when you exit direct control mode.
Diplomacy and AI
- Empires consisting of a single town can now apply to join an existing larger empire. The joined empire must be at war with anyone the town is at war with.
- When evaluating attack targets, the AI now looks at enemy fleets that could be sent to reinforce the defenses.
- AI no longer sends ship halfway across the map, ignoring supply limits.
- Roughly halved diplomacy value of towns and cities, but introduced a -40 penalty for any trade that is a loss of territory.
- Doubled interval and effect strength from insults and delegations.
- When evaluating peace, AIs now take into account whether their AI allies want peace.
Features and Adjustments
- Tech tier selector for single combats.
- Attacking fleets are now shown with red travel lines on your map.
- Allowed combat camera to zoom out more.
- Option to turn off heroes and incidents by setting their frequency to "None".
Fixes
- Wheeled and tracked landships are now much better at moving up and down slopes.
- Combats (including missions) from before version 1.2 that have a less wide combat area are now supported properly.
- No longer get a research bonus from stealing a fake occult book.
- Mods with long names now have their whole names shown in the mod list.
- Biplane hooks can be coloured and are drawn below decals.
- Weapons that have a clip greater than one and require more than one ammo to reload (such as giant flamethrowers) now show this properly in the tooltip.
- Gargoyles are now lit correctly.
- Fixed a crash caused by mods referencing techs by their old name.
- Empty tiles no longer emit fire particles.
- The appropriate number of repair crew and firefighters are now despatched to a module, rather than the maximum amount.
- The AI now researches cartography.
- Added mast pieces, bowsprits, and figureheads for buildings.
- Fixed the diplomacy AI not remembering across saves that it recently offered some treaty terms.
Balance
- Reduced pirate, pirate king, giant anemone, and cultist nest clear payouts by a third.
- Can no longer endlessly create hero events by re-researching choice techs, rebuilding city upgrades, and failing at attacks without taking any losses.
Minor Modding Fixes
- Leg images are now flipped alongside the ship the legs are attached to.
- MonsterNestType: incomeModifier, incomeModifierPercentage, and unrest are now bonusable, using the bonuses from the empire whose territory they're in.
Hero Modding
You can now set "canDismiss" in HeroTypes to false to make a hero non-dismissable. They can still leave via stat effects if you so choose. With hero stats, you can now set "winOn100" or "loseOn100" to true to make an empire lose the entire game when the stat hits that value. When that happens, the empire's territories are distributed to whatever empire is closest to each territory.
Modding Shots that Spawn Crew!
An entirely new feature, allowing you to create weapons that produce crew on impact. This is available both for ship and troop weapons. Use the following fields in ModuleType and CrewType to add this:
- spawnCrewOnImpact (CrewType) - Setting this to a CrewType will activate crew spawning.
- spawnNumCrewOnImpact (integer, default 1)
- spawnCrewInsideIfArmourPierced (true/false, default true)
- alwaysSpawnCrewInside (true/false, default false) - Note that if the hit tile is not occupable, the crew will still spawn outside the ship even if this is set to true.
- spawnCrewOnMiss (true/false, default false)
- spawnCrewOnKillBiologicalOnly (true/false, default false) - Only available for CrewType. Crew is only spawned if the shot killed an enemy crew with isMachine set to false. The "zombify enemies" flag.
Do note that of course crew have a performance cost, so if you e.g make something that makes a copy of itself every time it fires, the game might run a bit slowly after a while...
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:
- MyHeroMod/
- info.json
- logo.png
- HeroType/
- myHeroes.json
- strings/
- en.properties
- images/
- myHeroPortrait.jpg
- scaled/
- myHeroPortrait-200.jpg
- myHeroPortrait-100.jpg
- myHeroPortrait-50.jpg
{
"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.
Basic Hero Structure
To get started, create a HeroType folder inside your mod folder, and add a JSON file containing the following.
[
{
"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.
Recruit Hooks
To get heroes to turn up for recruitment, you need a list of recruit hooks, which specify events that cause them to turn up. Here's an example of three hooks:
"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.
Template Heroes
If you want to create a generic kind of hero, of which there can be multiple copies, use the following lines:
"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.
Starter Heroes
At the start of the game, players are given a choice between a set of heroes to start the game with. You can turn a template hero into a starter hero by setting isStarter to true. The game will also create additional such heroes based on templateSpawnPerEmpire if it's more than 0.
Techs and Bonuses
Heroes can give the player techs when they are hired, for example:
"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.
Passive Combat Abilities
On to making heroes actually do something! If you're creating a captain, you can give them passive combat abilities that apply to the ship or fleet they're in. The following are available: Ship:
- shipBonus: A Bonus applied to this ship alone.
- fireRatePercent
- accuracyPercent
- crewSpeedPercent
- flammabilityPercent
- explosionRiskPercent
- commandCooldownPercent
- repairAmountPercent
- firefightAmountPercent
- propulsionPercent
- liftPercent
- armourRepairPercent
- experiencePercent
- lootMoneyPercentage: Percentage of total value of destroyed enemy ships earned after combat.
- scavengeMoneyToSupply: Multiplied by total value of destroyed enemy ships to gain supply after combat. Note that 100 supply is a lot and 100 ship value is tiny, so this should be a number much smaller than 1.
- surpriseAttack: If set to true, enemy ships start on command cooldown.
- expeditionStrengthPercent: Expedition outcomes are based on total fleet strength. This is a percent bonus to fleet strength for this purpose alone.
- fleetSpeedPercent
- fleetFireRatePercent
- fleetAccuracyPercent
- fleetCrewSpeedPercent
- fleetFlammabilityPercent
- fleetExplosionRiskPercent
- fleetCommandCooldownPercent
- fleetRepairAmountPercent
- fleetFirefightAmountPercent
Combat abilities
Captains can also have active combat abilities, which are specified like this:
"combatAbilities": [ "IMPROVISE_MUNITIONS", "SCAVENGE_MATERIALS" ],
Here's a list of all available abilities:
- SMOKESCREEN
- FLANK
- IMPROVISE_MUNITIONS
- SCAVENGE_MATERIALS
- SCAVENGE_FUEL
- ENGINEERING_MIRACLE
- NECROMANTIC_INCANTATION
- EXTINGUISH
- BURST_OF_SPEED
- SUPERCHARGE_SUSPENDIUM
- FEAR
- DOUBLE_TIME
- TAUNT
- BLINDING_GLIMMER
- CROSSWINDS
- CRIPPLING_SHOT
- DISARMING_SHOT
- PARALYSIS
- TURNABOUT
- GUST_OF_WIND
- LAST_STAND
- SINKHOLE
- SUDDEN_STORM
- MOMENT_OF_DOUBT
- HYSTERICAL_BLINDNESS
- EARTHQUAKE
- CRASH_ZONE
- EMERGENCY_ORDERS
- HIGH_STORM
- AERIAL_ACE: Also specify a CrewType with aerialAceCrewType so it knows what unit to spawn.
- AIR_SUPPORT: Also specify a CrewType with airSupportCrewType and a number with airSupportNumCrew so it knows how many of what units to spawn.
- PERSONAL_GUARD: Also specify a CrewType with guardCrewType and a number with numGuards so it knows how many of what units to spawn.
Passive City Abilities
If you're making a governor, they can have passive abilities that apply to the city they're assigned to:
- unrest
- spyDefence
- productionPercent
- defenceBudget
- incomePercent
- researchPercent
- upgradeCostPercent
- upgradeSpeedPercent
- airshipSpeedPercent
- landshipSpeedPercent
- buildingSpeedPercent
Edicts
Governors can also enact edicts in cities they're assigned to. Edicts are temporary events, and unlike active captain abilities, new ones can be modded in. To add one or more edicts to a hero, add a line like this:
"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:
- money
- instantResearch
- rep
- pillaging
- unrest
- spyDefence
- production
- defenceBudget
- incomePercent
- research: Misnamed, also a percentage.
- upgradeCostPercent
- upgradeSpeedPercent
- airshipSpeedPercent
- landshipSpeedPercent
- buildingSpeedPercent
Moving and Clearing Monster Nests
Governors can have the ability to clear or move specific monster nests in the territory of their city. To specify clearable nests, add a list to "clearableNests" like so:
"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
Finally, both captains and governors can have stats, which are values between 0 and 100 that can be affected by the same kind of events as recruit hooks. You can make up any kind of stat, like "Sliminess" or "Desire for Cheese". Here's an example stats block from Commander Bertelli:
"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:
- leaveOn0: true/false
- leaveOn100: true/false
- dieOn0: true/false
- dieOn100: true/false
- evolveOn0: Name of hero to change into
- evolveOn100: Name of hero to change into
- winOn100: true/false
- coronationOn100: true/false
Testing
Once you've put together your hero, you can use the cheats (enabled in the game settings) to acquire them for testing.
Additional Features
Using Captains in Single Combats
Captains can also be used in single combats outside of the campaign by setting the singleCombatCost value.
Nemesis Empire
By setting hasNemesisEmpire to true, a hero can have a nemesis empire, which is a random empire that they hate. The game picks a random empire at the start of the game when creating the hero. Typically, the hero's loyalty changes based on how you interact with their nemesis, but the details of that are up to you. Because empires can be destroyed, you should also create a version of the hero without the nemesis stat effects and specify it in turnIntoIfNemesisIsGone. See beautiful_and_determined (Captain Bui) in captains.json for an example. Of course, a hero will never turn up for recruitment for their nemesis.
Hometown
Conversely, by setting hasHomeCity to true, a hero can have a random hometown. You can then use hooks specific to that hometown to change their stats. See science_admin (Sa'd Khayyam) in governors.json for an example. Since towns and cities cannot be destroyed, you don't need a version without a hometown.
Hire Comments
Heroes can comment on other heroes being hired without having a stat change, for additional storytelling purposes. You don't need to add anything to the HeroType for this. Simply add a line called
[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).
Combat Comments
Heroes can also make comments upon things happening in combat. This uses the PortraitMessageType system already used for generic comments on combat. To create a comment when a hero uses an ability, add a PortraitMessageType that looks like this:
{
"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"]
},
Interesting?
Heroes can have "interesting" set to true. If a player has spent two in-game years without having a hero marked as "interesting" turn up for hire, the game tries really hard to get one to turn up as soon as possible.
List of Hooks
Finally finally, here's the list of event hooks and their parameter that you can use for recruitHooks and stat changers. Note that you can find plenty of examples of these being used in captains.json and governors.json.
- anyNestDestroyed: You've destroyed a nest of any type.
- bioNestDestroyed: You've destroyed a nest marked as biological.
- nonBioNestDestroyed: You've destroyed a nest not marked as biological.
- nestDestroyed(nestType: MonsterNestType): You've destroyed a nest of this specific type.
- multiNestDestroyed(nestTypes: list of MonsterNestType): You've destroyed a nest from this list of types. The list will be referred to by the first nest on the list.
- anyNestAppeared: A nest of any type has appeared in your territory.
- bioNestAppeared: A nest marked as biological has appeared in your territory.
- nonBioNestAppeared: A nest not marked as biological has appeared in your territory.
- nestAppeared(nestType: MonsterNestType): A nest of this specific type has appeared in your territory.
- multiNestAppeared(nestTypes: list of MonsterNestType): A nest from this list of types has appeared in your territory. The list will be referred to by the first nest on the list.
- anyUpgradeBuilt: You've built a town or city upgrade.
- upgradeBuilt(upgradeType: CityUpgradeType): You've built a town or city upgrade of this type.
- takeover(takeoverType: TakeoverMethod): You've started taking over a town or city using this method.
- anySpyAction: You've done any spy action.
- spyAction(spyActionType: see list of CitySpyActions below): You've done a spy action of this type.
- anySpyActionAgainstNemesis: You've done any spy action against this hero's nemesis.
- spyActionAgainstNemesis(spyActionType: see list of CitySpyActions below): You've done a spy action of this type against this hero's nemesis.
- everyMonth: Exactly once every month.
- randomly: Triggers about every 6 months.
- rarely: Triggers about every 19 months.
- relationshipLevelUpgrade(newLevel: see list of RelationshipLevels below): Your relationship level with another empire has increased to this level.
- relationshipLevelUpgradeWithBonusEmpire(newLevel: see list of RelationshipLevels below, bonus: Bonus): Your relationship level with another empire that has this bonus has increased to this level. Used e.g to have Father Tesseract complain when you're nice to cultist empires.
- nemesisRelationshipLevelUpgrade(newLevel: see list of RelationshipLevels below): Your relationship level with this hero's nemesis has increased to this level.
- relationshipLevelDowngrade(newLevel: see list of RelationshipLevels below): Your relationship level with another empire has decreased to this level.
- relationshipLevelDowngradeWithBonusEmpire(newLevel: see list of RelationshipLevels below, bonus: Bonus): Your relationship level with another empire that has this bonus has decreased to this level.
- nemesisRelationshipLevelDowngrade(newLevel: see list of RelationshipLevels below): Your relationship level with this hero's nemesis has decreased to this level.
- tradeTreaty: You've made a trade treaty with another empire.
- tradeTreatyEnded: You've broken or dissolved a trade treaty with another empire.
- researchTreaty: You've made a research treaty with another empire.
- researchTreatyEnded: You've broken or dissolved a research treaty with another empire.
- sendTribute: You've started sending tribute to another empire.
- sendTributeToNemesis: You've started sending tribute to this hero's nemesis.
- sendTributeEnded: You've stopped sending tribute to another empire.
- receiveTribute:You've started receiving tribute from another empire.
- receiveTributeFromNemesis: You've started receiving tribute from this hero's nemesis.
- receiveTributeEnded: You've stopped receiving tribute from another empire.
- demonstrateSubmission: You've demonstrated submission to another empire.
- demonstrateSubmissionToNemesis: You've demonstrated submission to this hero's nemesis.
- receiveSubmission: You've received submission from another empire.
- receiveSubmissionFromNemesis: You've received submission from this hero's nemesis.
- cityGained: You've gained control of a town or city.
- homeCityGained: You've gained control of this hero's hometown.
- cityLost: You've lost control of a town or city.
- homeCityLost: You've lost control of this hero's hometown.
- combatVictory: You've won a battle.
- combatVictoryAgainstNemesis: You've won a battle against this hero's nemesis.
- combatDefeat: You've lost a battle.
- combatDefeatAgainstNemesis: You've lost a battle against this hero's nemesis.
- nemesisDestroyed: This hero's nemesis empire has stopped existing. (By your actions or otherwise.)
- techResearched: You've researched any technology.
- techResearched(tech: Tech): You've researched this specific technology.
- heroHired(hero: HeroType): You've hired this hero.
- heroLeft(hero: HeroType): This hero has left your employ, by being fired, or leaving, or dying.
- repLevelUpgrade: Your reputation level has increased.
- repLevelUpgrade(level: see list of RepLevels below): Your reputation level has increased to this level.
- repLevelDowngrade: Your reputation level has decreased.
- repLevelDowngrade(level: see list of RepLevels below): Your reputation level has decreased to this level.
- incident(tag: text, see list of Incident Tags below): You had a diplomatic incident outcome with this tag.
- SABOTAGE_RISE_TO_POWER
- BRIBE_GOVERNOR
- CONVERT_GOVERNOR
- INTRIGUE
- UNEARTH_SCANDALS
- ORGANISE_STRIKES
- SABOTAGE_PRODUCTION
- STEAL_RESEARCH
- STEAL_SUPPLIES
- STEAL_FUNDS
- BUILD_NETWORK
- FOMENT_UNREST
- SABOTAGE_CORONATION
- SABOTAGE_FINAL_RITUAL
- INCITE_RIOT
- INCITE_REVOLT
- WAR
- TRUCE
- PEACE
- NON_AGGRESSION_PACT
- DEFENSIVE_PACT
- ALLIANCE
- LOVED (80-100)
- LIKED (60-79)
- TOLERATED (40-59)
- DISLIKED (20-39)
- HATED (0-19)
- coop: You cooperate with another empire.
- betrayed: You were betrayed by another empire.
- betrayal: You betrayed another empire.
- kindness: You showed kindness to another empire.
- kindnessReceived: You received kindness from another empire.
Conquest Balance
- +10 base unrest in towns, +15 in cities.
- Increased maximum unrest decrease from defensive buildings from 20 to 30.
- Reduced cost of defensive buildings by 1/6.
- AI is now much more likely to enter alliances and defensive pacts once one empire controls a significant proportion of the map.
Combat Balance
- Mech squid and fleshcrackers now have a limited running time. (3 minutes and 4 minutes respectively)
- Halved mech squid HP.
- More accurate ballista.
- 50% faster wurms.
- Reduced grenade arc gravity.
- Reduced heavy wooden armour blast damage absorb from 8 back to 6.
- Increased flamethrower blast damage from 6 to 8.
- Boosted big wheel carry cap by 20%.
- Extra 10 degrees of mortar depression.
- 8 seconds until lightning starts to hit in high storm instead of 4.
Fixes
- AI no longer hires heroes it can't afford, and fires heroes if money is tight.
- Prevented buildings with keels and other constructions with the wrong kinds of modules.
- Landships can drive on constructions (other landships, buildings, airships) now.
- Fixed direct control crash.
- Fixed intercept crash.
- Fixed some causes of desync. Still hunting others.
- Fixed torpedo bombers having catastrophically bad aim at the start of combats.
Minor Fixes
- Improved Japanese font rendering.
- AI fleets consisting of single supply ships no longer attempt to conquer cities.
- Preloading weather background sound loops to make weather changes go more smoothly.
- Added missing image for age of madness.
- Added some new nest icons.
- Fixed band of brothers text.
- Fixed missing Targeting Computer string.
- Fixed damaged inverted large junk sail image.
- Deduplicated special build options.
- Prevented the same hero from turning up too often.
- Turnabout now flips tentacles.
- Prevented multiple filled nests in the same city at start.
- Added a border around the map view mode selector in the bottom right.
Hero Reworks
- Manha Ithkuil: Added Loyalty stat that decreases by 1/month and is increased by combat defeats, certain spy actions, and betraying empires in diplomatic incidents.
- Palmerston: Removing a monster nest now increases rep by 3. Can now also remove Titan Bladeweeds and Land Anemones. Added Monster Exhibition edict that increases rep, reduces unrest, and produces a bit of science.
- Sigan Sainik: Gain 3 rep from clearing nests. Maintenance reduced from 10 to 5. Building a Hospital now also grants 5 Idealism.
- Sigan the Cruel: Local production and unrest bonuses replaced by empire-wide bonus Sigan's Cruelty: +100% production, +20% town and city income, +15 unrest.
- Lord Sigan: Fame increase from clearing a nest increased from 5 to 10. Local unrest bonus replaced by empire-wide bonus Sigan's Wisdom: -10 unrest, double gentle takeover speed.
- Igor Nescimus: Once his nemesis is defeated, gains 25 XP per Police Station and Garrison built. Upgrades into a version that doubles unrest reduction from Police Stations and Garrisons.
Hero Balance Changes
- Professor John Prolix: +5 Research
- Kantorka: Unlocks Dragonriders
- Lilith: Reduced upgrade speed by a third, increased Ritual of Praise cost from 500 to 800.
- Lilith, Saviour of Mankind: Brutal takeovers now only increase Loyalty by 5 instead of 10.
- Commander Yithrak: Reduced fire rate bonus from 50% to 40%.
- Vex: Base loyalty increased from 30 to 90, loyalty gain from destroying a non-biological nest increased from 20 to 40, loyalty loss from destroying a biological nest increases from 30 to 60, added -1 loyalty per month.
- The Magnificent Alexander: Magnificent Party cost reduced from 1000 to 500, and it now also reduces 25 Boredom in Alexander.
- Captain Bertelli: Fleet crew speed bonus increased from 10% to 25%. +50% Fame gain from winning combats. Fame loss from losing combats reduced from 30 to 25.
- Akim: Maintenance reduced from 10 to 3.
- Yitzhak Sutter: Maintenance reduced from 8 to 5.
- Lacuna Abgott: Spy success chance bonus increased from 20% to 40%.
- Fatima: Maintenance increased from 8 to 12.
- Grand Sorceress Fatima: Maintenance increased from 15 to 20. Summoned guardian sprites do 80% less damage.
- Laura Ali (base): Upgrade cost reduction increased from 30% to 50%. 50% more experience gain.
- Dame Ali: Maintenance reduced from 16 to 10.
- Luca van Fruchtenbach: Added $300 one-off hire cost. Replaced 20% local spy defence with 10% empire-wide spy defence.
- Sa'd Khayyam: Symposium cost reduced from $1000 to $500. Instead of boosting local research by 20%, it now grants a lump sum of research.
- Sam: Maintenance reduced from $10 to $5. Can no longer build Mech Squid. Doubled XP gain from destroying monster nests.
- Doctor Violet: Increased maintenance from $15 to $17. Mech squid now have reduced HP and a 3 minute running time before they stop.
- Izegbe: Reduced maintenance from $12 to $9.
Starter Hero Balance Changes
- Architect: Doubled XP gain from building town and city upgrades.
- Disciplinarian: Increased unrest reduction from 25 to 30. Doubled martial law running time to a year.
- Engineer (upgraded): Fleet accuracy bonus reduced from 30% to 20%.
Special Event Hero Balance Changes
- Ascended Scholar: Summoned guardian sprites do 80% less damage.
- Mad Scientist: Instead of providing 5 research, now triples research output at the city she is assigned to. Mech squid now have reduced HP and a 3 minute running time before they stop.
- Fixed a combat desync bug.
- The governor icon is no longer drawn on top of the plague icon in the map.
- Fixed fleet ship list layout for long ships with medals.
- Gust of Wind and Sudden Storm are now weaker at the edges of the map, making them less able to smash ships together.
Welcome to the inevitable post-release bugfix update!
- The DLC now works on Macs!
- Trebuchets no longer block airflow.
- AI should no longer send so many insults and delegations.
- Reduced frequency of heroes appearing slightly.
- Added settings for frequency of heroes appearing and frequency of diplomatic incidents.
- Added toggle for hero victory.
- Better spacing of modules in editor module list.
- Disarm and Cripple abilities deactivate properly once they've taken out all weapons/propulsion.
- Added one new player-contributed fleet.
- Added the proper portrait for powered-up Zotullah. (Zotullah!)
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:
- Imperial Cannon: 400 -> 120 Piercing damage, Added 5m piercing splash radius, 7s -> 9s Reload time
- Suspendium Ray: 12 -> 15 Piercing damage
- Junk Sails: +50% HP
- Acid Spitter: +133% Shot speed, 3s -> 0.35s Reload, added 3.5s clip reload, 3 -> 20 Clip size, 10 -> 8 Blast damage, 8.5m -> 5.7m Blast splash radius, 30 -> 16 Direct damage
- Aerial Charges: +45% Shot speed, 3s -> 2s Reload, 1 -> 2 Number of shots
- Big Tracks: Added 600 ship HP bonus
- Small Tracks: Added 250 ship HP bonus
- Bomb Bay: -20% Shot speed, 6s -> 0.6s Reload, 1 -> 3 Clip size, Added 7s clip reload time, -33% Accuracy, 40 -> 30 Blast damage
- All cannons: -10% Reload time
- Command Centre: 400 -> 250 Cost
- Kinetic Bomb AKA Droppy Rock: +40% Shot speed, 2 -> 4 Clip size
- Flamethrower: 5 -> 6 Blast damage
- Giant Flamethrower: 15 -> 16 Blast damage
- Aircraft Command Deck: 500 -> 260 Cost
- Gaff Sail: 25 -> 20 Cost
- Grapeshot Cannon and Sponson: 8 -> 14 Piercing damage per shot, 28m -> 43m Shoot troops range
- Guided Missile: 25s -> 35s (25s with Targeting Computer) Reload, 3x (2x with Targeting Computer) Inaccuracy, 105 -> 90 Blast damage, 13m -> 14m Blast splash radius, 214m -> 285m (186m with Targeting Computer) Minimum range
- Hussar Rifle: +10% Accuracy
- Large Suspendium Chamber: 240 -> 220 Fire HP, 200 -> 180 Explode HP
- Suspendium Cannon: 90 -> 100 Piercing damage, Now obeys fire mode
- Targeting Computer: 400 -> 300 Weight, 20s -> 60s Coal reload, 3 -> 2 Crew, improves Guided Missile (see above)
- Heavy Bombard: 44 -> 50 Blast damage, +30% Accuracy, Made trajectory ballistic, Added 450m max range, Added 28m max up range, Added 0.7x accuracy multiplier against airships
- Ballista: Made trajectory ballistic
- Grenades: Made trajectory ballistic
- Aerial Hussars: +40% Acceleration
- Steel Wall: 36 -> 40 HP, 5 -> 10 Blast damage absorb
- Steel Armour: 50 -> 60 HP, 16 -> 22 Blast damage absorb, 6 -> 8 Piercing damage absorb
- Heavy Steel Armour: 90 -> 80 HP, 24 -> 30 Blast damage absorb
- Brick Wall: 2 -> 4 Blast damage absorb
- Stone Wall: 80 -> 85 HP, 4 -> 6 Blast damage absorb
- Massive Stone Wall: 130 -> 150 HP, 6 -> 10 Blast damage absorb
- Wooden Wall: 24 -> 30 HP, 2 -> Piercing damage absorb
- Heavy Wooden Armour: 75 -> 90 HP, 6 -> 8 Blast damage absorb, 12 -> 24 Piercing damage absorb, 12 -> 16 Weight
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.
- AI should now respect minimum interval between spy actions set by difficulty level, ending spy notice spam. (And remember that you can right-click on the notices to dismiss them.)
- Having 0 money now halves your research, halves your resupply speed, and imposes a 30% spy defence penalty.
- Made tech screen GUI clearer, I hope.
- Tech research finished popup now actually tells you the effects of the tech you researched.
- Towns and cities disconnected from your capital now have a map icon so it's more visible.
- Unrest spy action is harder, but more effective.
- Aircraft no longer land on ships that have been taken over by the enemy.
- You can no longer trick the diplomacy AI by threatening war so that that it cancels all treaties, and then declaring war anyway, saving yourself the rep loss.
- Age of Madness should no longer also spawn all kinds of other monster nests.
- Age of Quiet unrest reduction reduced from 20 to 10, and it now also halves resupply speed.
- Coronation tooltip indicates how many cities you currently have.
- AI control should no longer give orders to direct control ship.
- Updated the Java Runtime Environment to 64-bit for Windows. A 32-bit version is also still available. The switch to 64 bits means that the game can use more memory, which is useful.
- Improved performance, especially in combats where ships break into lots of fragments.
- Can no longer pointlessly build a second spy academy if one is already being built.
- Can no longer use armour replacement to add armour to external modules such as rams.
- Massively improved ship editor performance on ships with many modules.
- Slightly improved combat performance.
- Updated player-created Chinese translation.
- Removed the "Launch with System Java" launch option, as it's no longer useful or used by anyone.
- Mods are no longer automatically enabled when they're installed. Instead, newly installed mods are listed in the main menu, and you're prompted to enable them in the mod manager. This is to prevent the game from choking on attempting to load dozens of mods. Especially if you installed the game on a new machine, it would try to load every single mod you ever subscribed to.
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!)
- AI is now more likely to enter defensive pacts if it's adjacent to powerful neighbours, but otherwise less likely.
- AI generally bothers you a bit less with diplomacy offers.
- AI does spy actions less often, based on difficulty level.
- It's a bit easier again to demand territory in an ultimatum.
- Added some diplomacy advice loading quotes.
- Added smaller variant of the Suspendium Disruptor.
- AI fleets are now uploaded tagged as "Fleets" rather than "Mods", and volunteers and I will work to re-tag existing fleets, so mods are easier to find.
Example diplomacy advice
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!
- Made AI less likely to break treaties, less likely to ask for unfavourable territory trades, and less likely to do mega-alliances/pact networks. This does mean that if your current game has a mega-alliance, this patch may cause it to break up.
- Autarky now provides +15% spy defence as well as +5% town and city income. Free press research bonus raised from 10% to 15%.
- Diplomatic offer editor now copes better with long line items.
- More/better desync checks and logging.
- To avoid desyncs, the game will now refuse to use mods with missing ship designs in multiplayer.
- Evened out slope HP and height.
- Suspendium Disruptor chimney now recolorable.
- Increased unrest benefits and penalties from reputation.
- Post-game stats now include a graph of reputation.
- Can no longer intercept and fight allied fleets without declaring war.
- AI no longer asks you to help besiege a city using a fleet consisting of a single supply ship.
- AI should no longer ask for your help to besiege a city and then get cold feet and turn its fleet around.
- Editing an AI offer to include a payment now works.
- Stopped ships with lots of sails from constantly emitting sail flap sounds.
- Giant spiders no longer explode when killed.
- The E/I keys now re-hide empire stats/diplomacy as well as showing them.
- Gaining a tech that's in your research queue now removes it from the queue so it doesn't get re-researched.
- If you have enqueued a non-default choice tech (eg Free Press) and then also enqueue a tech that has that as a prerequisite (eg Bureaucracy), the game will no longer incorrectly enqueue the default choice (eg Surveillance State) as well.
Minor update fixing a desync bug caused by Suspendium rays.
- AI control is now available in all combat modes, including conquest, multiplayer, and missions.
- Fixed bug where crew would get caught in a loop of alternating between manning sickbay and fetching wounded for the sickbay.
- Visiting bees or wasps with the same ship a second time no longer prevents the nest from launching its flyers.
- After an intercept, your fleet must now return to a port rather than being able to do another intercept immediately, to prevent players from repeatedly re-intercepting and fleeing from the same fleet.
- When fleeing from being intercepted, the game now informs you that you will lose your whole fleet.
- Waves in Per Fess heraldry layout are now displayed correctly.
- The game now knows the plural of "worm eye".
- Limping back now displays accurate travel time.
- Zoom in/out keys are now remappable.
- AI less likely to flood the player with low chance of success spy actions.
- AI less likely to diplomatically interact with non-adjacent empires.
- Cleaned up duplicate English translation keys.
- Fixed some minor/rare crashes and GUI problems.
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.
- New Chinese translation created by players.
- You can now view the game setup settings during a conquest game, and use cheats to modify them. You can even do things like turn off the diplomacy system halfway through the game!
- There's now a setting for reduced visual noise, which gets rid of animations, fragments, background elements, and most particles, to make the game more accessible for people with vision/visual processing issues.
- If you are editing a ship in multiplayer, you are no longer forced to watch unrelated intercepts.
- Turning off monsters now also turns off starter monsters.
- Increased land anemone range.
- Flipped around some AI buildings that were pointing the wrong way.
- Landships can now cross oceans to friendly ports.
- Spy action notices are now shown as normal notices on the left of the screen instead of being a popup.
- Ammo overlay no longer shown for weapons that don't need ammo.
- Coronation victory setting explains that it also controls final ritual victory.
- Torpedo bombers now wait until they have a good shot instead of launching their torpedo as soon as possible.
- The game now detects when an incompatible driver is being used and automatically turns on graphics compatibility mode and tells the player, instead of crashing out. This isn't a full solution, but it's at least better. If you have an uncle that works at AMD, let me know.
- Minor graphical/text fixes.
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:
- Decrease the reputation required to start coronation to 70.
- Double the local defence budget of cities.
- Eliminate the reputation cost of breaking truces.
- Make fires nigh on impossible to put out.
- Double the unrest of cities not connected to the capital.
- Unlock a new city upgrade that can only be built during the era.
- Make Suspendium Chambers produce double lift.
- Allow everyone to train dragon riders.
- Unlock a new part of the tech tree.
- eraStartSpawnUpgrade - The CityUpgradeType to spawn.
- eraStartSpawnNumUpgrades - How many to spawn. The game will try to distribute them evenly.
- doNotSpawnUpgradeInEmpiresWithBonus - Empires with this bonus won't get any of the upgrades in their towns or cities.
- money - Money gained.
- rep - Reputation gained.
- research - Research points gained. These are applied to the current research, if one is active. Otherwise they are applied to the next research topic chosen.
- bonus - A bonus to permanently grant.
- tech - A technology to grant.
- supplies - Supplies to give to the fleet that unlocked this reward. (Only meaningful for monster nest rewards.)
- specialConstructionName - Name of a ship or landship to give to the fleet that unlocked this reward. These should be placed in a bonusConstructions folder in the mod. (Only meaningful for monster nest and expedition rewards.)
- numSpecialConstructions - Number of special constructions to grant, 1 by default.
- startEraModifier - Start a new EraModifier.
- endsEraModifier - If this is the current era modifier, end it.
- destroyAllUpgrades - Destroy all City Upgrades of this name.
- spawnWeight - Relative chance that this reward is chosen.
- onceOnly - This reward can only be given once.
- requires - Require this bonus.
- requireResearch - Research must be possible. So if the tech speed is set to No Research, this reward won't be picked.
- requireMonsters - The game must have monsters, so monster nest density must not be set to None.
- requireToggle - Require that a specific game feature is toggled on. The names of the available toggles as of this writing are: REPUTATION, DIPLOMACY, CORONATION, ALLIANCE_VICTORY, SUPPLY, and AUTORESOLVE.
- minWinningFleetCost - Only used for expedition rewards. The expedition fleet must have at least this total cost.
- maxWinningFleetCost - Only used for expedition rewards. The expedition fleet must have at most this total cost.
"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.
- Added giant land anemone monster nests.
- Ships withdrawing from a raid can now limp to the nearest safe port.
- The game now checks whether you need to declare war when you intercept a fleet.
- Halved speed at which the plague spreads.
- Fixed post-combat ship stats in conquest.
- Fixed waspkiller marine graphics.
- The AI should no longer assume that human players want to break beneficial trade treaties.
- There is now always a reward for defeating moon disks.
- Insults are now properly hidden when the option to hide them is selected.
- Fixes to French and German translations.
- New cheat option: constant monster nest raids.
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.
- Added maximum values to a number of diplomacy AI evaluations, preventing extreme numbers from distorting AI behaviour. (For example, being able to buy an entire city in exchange for a research treaty.)
- Added a button to jump to a city being transferred in diplomacy offers.
- City specials now have descriptions in Chinese, courtesy of ChenLe.
- Some minor GUI fixes.
Maybe actually fixed the network desync problem I've been chasing. Plus, combat music triggers correctly now!
- Stopped the AI from building landships it doesn't have the tech for.
- Flipped AI defensive building the right way around.
- Stealing research through espionage now works properly.
- New cheat to guarantee 100% spy success.
- Grapeshot cannons and bottom turrets now properly affected heavy gunnery bonus.
- Fixed display problem with calculation for amount of research points generated.
- Fixed display problem with city income calculation.
- Correctly named map sizes in German.
- Tribute paid is now listed in empire budget.
- Negative maintenance from modules and ships is now treated more like proper income. (This is only relevant for mods that add income-generating modules, which stopped working with the big update and should now work again.)
- Allow building multiple universities.
- Reduced income loss from rare powerful nests. Starting out next to a black dragon nest was a bit too painful.
- Ministry of security now decreases unrest by 15 points in all towns and cities instead of 10, is $200 more expensive, and no longer decreases local unrest as well, as that was really confusing.
- Spy agency now increases spy network growth speed by 50% instead of 25%.
- More error logging to hopefully track down network desyncs.
- Better, more fine-grained volume controls.
- Spy infiltration is now half as fast and the AI doesn't constantly do spy actions anymore.
- Fixed the Invictus achievement. Note that you'll have to start a new game to get the achievement. Sorry about that.
- Show correct travel time for fleets based on which ships are selected.
- Desert columns no longer randomly lift entire landships into the sky.
- List of bonuses now shown correctly.
- City upgrade construction time now displayed correctly.
- AI allies no longer take your ships out of the reserve and start giving them commands.
- Turtledove armour reward now works.
- AI no longer builds multiple monasteries in one place.
- Doubled trade treaty income and increased research treaty effect by 50%.
- Fixed trade treaty incomes on low difficulties.
- Can no longer induce revolt in cities that are still being taken over.
- AI now obeys supply limits when travelling to friendly cities.
- Unrest from empire size increased by about 25%. Unrest from recent takeover decreased.
- Made ages around 40% longer.
- Added some missing defense buildings.
- Fixed a rare landship map pathing bug.
- More work on fixing up desyncs.
- Fixed some rare crashes.
- The AI is less likely to accept ultimatums, and very unlikely to accept another ultimatum if it's recently accepted one. This should make it less straightforward to bully yourself to victory.
- Losing a city that doesn't have a ritual site no longer cancels the final ritual.
- When you get an ultimatum or offer, there is now a button to go to the other empire's capital.
- Increased cooldown time of some espionage actions.
- Settings now accessible from more places, and settings button is a gear icon instead of the word "Settings".
- You can now adjust the tooltip delay in the settings.
- Fixed airship command panel positioning when dyslexic fonts are active.
- Fixed graphical glitch in dyslexic fonts.
- Fixed some multiplayer desyncs.
- Fixed some crashes.
- Fixed some missing text.
- The soundtrack now includes the eight new tracks from the update.
- The new achievements now work.
- The landscape backdrop now changes properly when you change landscape type in combat setup.
- Fixed a number of crashes.
- Various small user interface and text fixes.
- Mech spiders now have grappling hooks.
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:
Co-Op Combat
Any number of players and AIs can fight on both sides of airship battles. You can set up custom multiplayer battles as well as fight alongside your allies in conquest mode.
Diplomacy
Previously, empires were in a state of permanent war. Now there is a detailed system of diplomacy, allowing for non-aggression pacts, defensive pacts, alliances, trade and research treaties, tribute, ceding territory, and more.
You can also send ultimatums to other empires, demanding that they accede to your terms and threatening retaliation otherwise. The AI personalities can evaluate and send any kind of diplomatic interaction, and there are tooltips that clearly explain their reasoning. There are no artificial limits on who you can go to war with, but you do have a reputation to consider. A bad reputation can make you the target of glory-seeking empires and weaken your espionage and counter-espionage efforts. And a high enough reputation - and a sizeable territory - can make it possible for you to win by crowning yourself emperor.
Upgrades and Specials
You can now upgrade your cities with shipyards to rapidly build fleets, police stations to control unrest, scientific labs, factories, skyscrapers, and more.
And some towns provide unique bonuses from resources such as silk, great forests, and floathoney and special institutions such as the Spire of Learning and the old Imperial Post Office. Depending on your strategy of choice, these towns may be extremely valuable to you.
Eras
As the game progresses, your capacity for ruling your empire increases, granting you faster research, more spies, and less unrest - and then a special era comes along that significantly changes the way the game plays. A long, deep winter freezes the land and makes it hard to procure supplies. An age of decadence offers opportunities for raising your reputation and destroying others'. Or a plague breaks out.
Some of these eras can be "won" by an empire, gaining it a massive boost in reputation or other advantages. For example, an age of piety is won by whoever controls all holy sites in the land.
Future Plans
So those are the major features. This update concludes feature development on the game, so after this, I'll be doing bug fixes and balancing, but there won't be any new free content or mechanics in the game. I will likely do a DLC for the game, but I want to fix the bugs and take some time to rest before I announce anything. :) Speaking of bugs, if you encounter problems with the game, send me an email or head over to the Discord to report them. We've been beta testing this thing heavily for the past months, but no game is ever bug-free. At this point I also want to especially thank the game's beta testers, who have found a whole bunch of bugs and some enjoyable exploits, such as "you can just pay everyone to be friends with you and win".
One More Thing
With the feature list for the update known for months and years now, I worried that the release would be a bit anticlimactic, so I snuck in one more big feature: direct control mode.
You can now select a ship, click on the direct control button, and gain fine-grained control of your craft. You can tell your weapons exactly where to fire, your engines whether to go forward, stop, or reverse, and your lift chambers which altitude to maintain. As soon as you leave direct control, your commands are forgotten, and the ship resumes normal operation. This is of course available in both singleplayer and multiplayer. :)
Other Features
Finally, here's a more or less complete list of other features that I added, though I probably forgot some things:
- Eight new music tracks by renowned musician Curtis Schweitzer
- Unrest and supply mechanics
- Revamped espionage system
- Optional combat autoresolve
- Prettier map
- New fleet designs contributed by the community
- Reactive hint system for conquest
- Many more achievements
- Updated user interface appearance
- Ability to request siege assistance from your allies
- New weather and landscape including deserts
- New technologies and modules
- All translations should be up to date, for once
- In-game manual (English only)
- Local defense budgets
- New heraldic charges and abiilities
- Tooltip values now describe what influences them
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
Sorry about that.
The combat AI no longer massively overvalues gatling guns and tries to point them at the enemy to the exclusion of all else.
- Added potential fix for desyncs.
- The game now checks more of its data for integrity. If you get a message that MP is disabled, try reinstalling the game.
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:
- You can now create and edit ship designs directly from the fleet creator.
- Extra techs that you added are no longer deleted when you edit ship tiers.
- You can now remove empty tiers even if they are not the top tier.
- You can now set ships to upgrade to ships that are ahead by more than one tier.
- Ships are labelled with their name.
- You can no longer incorrectly set ships to upgrade to themselves.
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:
- Crash caused by trying to get a variant of a decal that does not exist.
- Crash caused by assigning a ship command shortcut to none.
- Crash during combat caused by ammunition fetching getting confused.
I am also happy to report that the update is on track to release in August.
- Crew no longer grab too much ammo for large weapons and then throw it away.
- Made sure that AI researches the technology it needs to upgrade its ship designs.
- The game now preloads all music tracks at startup to run more smoothly afterwards.
- Move-to command no longer has red outline when telling ship to move to the top of the combat area.
- Module restriction beams now flip correctly.
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.
- Fixed a bug with the game getting confused about which fleet is which after loading a saved game.
- Fixed decals being lost when moving modules.
- Fixed a ship editor bug where if you right-clicked to pick up a module or decal, and then pressed a key to flip it or switch variants, it would not do so correctly.
- Fixed cases where ship could be focused on shooting and moving at the same time.
- Fixed incorrect red outlines showing up in the move ship command.
- Fixed buildings receiving the ship prefix in the rename dialog.
- Fixed landship fleets not noticing that a monster nest had been cleared or occupied, changing where they could travel to.
- Kinetic bombs no longer show a meaningless reload value.
After a great deal of community testing, multiplayer games should now be a lot more stable!
- Various networking stability fixes.
- Various performance improvements.
- Heavily decreased memory usage in long multiplayer games.
- Fixed a bug where you could not split off a fleet containing landships. Thanks to Sombrero for reporting it.
- Ships that are in the process of being boarded can no longer be put into the reserve. This is to avoid an exploit where you could lure all enemy boarders into a sacrificial ship and then put it into the reserve.
- Taking over a ship by boarding now resets fire mode and other such settings.
- Combat AI can now detect if a ship is immobilised in a position where it can't fire on anything, and will consider surrender in such cases.
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. :)
Additional fixes for rare/theoretical networking bugs.
- Fixed a bug where the game would crash on startup due to corrupted preferences. This should mean that the "full reinstall" procedure as documented in the troubleshooting docs is no longer needed. At worst, your preferences will reset.
- Improved game performance, especially landship pathing, preventing pauses in large games.
- Fixed a bug where opening the ship design list from refit mode in conquest would pause networking, causing horrible networking problems.
Fixed a crash in the key configuration screen.
- Ability to set keys to nothing in key configuration.
- Can now access key configuration from conquest menu.
- Fleshcrackers no longer jump around like they're at a rave.
- Fleshcrackers and other legged landships should no longer randomly hover in midair.
- Bombers will no longer use their bombs to attack enemy boarders. It ends badly.
- Can no longer place ships from the reserve to underground.
- Cultist crew have reduced maintenance.
- Brigands no longer spawn in monster nests without road access.
- Fixed an exploit involving module replacement.
- Observed Issue: The bad thing that happens.
- Reproduce: The detailed steps required to make the bad thing happen. Include any relevant files, e.g replays, ship designs.
- Expected: The thing that should happen instead.
- Observed Issue: The ship vanishes forever.
- Reproduce: Start a combat in conquest with multiple ships on your side. Move a ship into the reserve during combat.
- Expected: The ship shows up in the reserve list.
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:
- Option to display a clock in the corner.
- Loading from autosave no longer targets the autosave file for quick save afterwards.
- Fixed a problem where the wrong module would be selected in the editor.
- The AI no longer sends out a zillion spies and bankrupts itself in the process.
- Adding a keel in the editor now immediately has the right effect on module hit points.
- Ships no longer try to shoot at targets that have been destroyed or that ran away into the reserve.
- Guards now fight to retake captured ships and buildings.
- Crew in captured buildings no longer treasonously fire on guards.
- Crew no longer forget they're POWs when they leave a ship.
- Fixed gaps and lines in ship rendering. Finally.
- Added the letters .
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:
- Fixed combat performance problems caused by trying to play too many sound effects.
- Fixed weapon beams not being drawn at certain angles.
- Fixed crash at the end of LAN multiplayer combat.
- Fixed crash on resuming combat setup with ships already placed.
- Mod transfer is now faster, thanks to the ancient technique of "not transferring mods no one needs".
- Fixed blazon (description) of coats of arms with scarpes.
- Fixed fleet command bonus text.
- When defeating a fleshcracker mad scientist, you're now more likely to discover fleshcrackers.
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.
- Fixed dyslexic font rendering.
- Added the Cyrillic letter to the game, which was missing for some weird reason.
- Updated German translations.
- Aerial dragoons and other boarding troops now return to the ship that launched them if their target ship goes missing.
- Bees and wasps will now find a new target to invade if the old target goes missing.
- Fixed pathing issue that caused boarding crew to go back and forth endlessly.
- Fixed issues with bonuses not being applied when building ships, for starting ships, and for ships in single player combat setup.
- Rebalanced proportion of monster nest types.
Right hand is mostly better, but I'm still taking it slow. Here's an update that was mostly ready before the Incident: Fixes and Improvements
- Undid a "fix" that made things worse: Single combats should no longer incorrectly end in draws, but individual ship fates in the post-combat screen may once again be incorrectly displayed as immobile. This does not affect conquest games.
- When editing a ship in multiplayer, you can now go to spectate or setup a combat, and will be nicely returned to the editor after the combat.
- Soil and grass is sturdier and should no longer evaporate into deep craters upon contact with crashing ships.
- Added the following new letters for display in game text: SS
- Fixed a boarder pathing bug that would cause borders to not move when told to board an enemy ship.
- If you load a ship where one module is blocking another (eg a slope in front of a cannon), the game now treats this as an error. This is to prevent a potential exploit where you could use a mod to disable placement restrictions but then still use the resulting ship in unmodded play.
- Instead of air sailors, landships now have crew with their own visual appearance and reduced maintenance costs, designed by Meowskyi (thanks!)
Off the top of my head, here's some other things you could do with modules that add bonuses:
- Increase fire safety by reducing the fireHP values of flammable modules.
- Improve storage capacity for resources.
- Improve stats of specific weapons like fire rate, damage, accuracy.
- Improve lift / propulsion of specific modules.
- Change the stats of armour.
- Change the visual appearance of modules.
- Improve firefighting or repair effectiveness.
My right hand is currently in a cast, so there will be some delays. Nothing too serious, and it's healing well. But for now I will be a bit terse. The future will bring more bugfix updates and continuing work on the diplomacy update.
Tis the spooky season, and as is by now traditional, here's a new monster for you to fight: the clockwork cube. Cubes, in fact, as there's three of them, armed with a tentacle, a saw, and an energy beam respectively.
These will turn up during conquest play, and there's also a mission challenging you to take down all three cubes with ships worth no more than $1200. Can you figure out how?
Apart from that, there's some minor bug fixes and improvements:
- Fixed a potential situation where a ship on the winning side of a fight would be incorrectly marked as lost due to being immobilised. The game now tries harder to get such ships back into the air.
- Improved combat rendering speed by about 5%.
- AI empires' coats of arms should better match their abilities and ship designs.
- You can no longer refit dragonriders.
- New cheat option to switch difficulty levels. Note that a lot of the difference between difficulty levels is in the initial starting situation, which of course this can't change.
- Fixed rare text input crash.
I'm now working on the AI for the upcoming diplomacy features. I've already implemented the diplomacy systems themselves: what war and peace mean, the ability to negotiate agreements and send ultimatums, and so on. But of course AI empires need to be able to interact with these systems: responding to players' diplomatic offers and making their own, and also conducting diplomacy between themselves.
Aims
The diplomacy system in Airships has a number of design goals mostly informed by my frustrations with the shortcomings of diplomacy in other games, in particularly the Civilization series and Paradox grand strategy games. (Which, to be clear, I love and have played hundreds of hours of.) In no particular order: I want AI behaviour to make sense to the player. I want them to be able to understand why the AI makes the diplomatic decisions it does. Without this, diplomacy becomes frustrating as AIs will declare war or make peace seemingly at random. There may be a sophisticated system behind those decisions, but if the player cannot understand it, it might as well be random. I want the diplomacy system to allow for deals between empires that consist of multiple parts. Modern strategy games generally all have this, but older Civ games do not. For example, you want to be able to sweeten a non-aggression pact by including a good trade deal. Defensive pacts! All the mutual protection of an alliance with none of the being dragged into wars by the AI. My least favourite version of this is when your AI ally drags you into a war you don't want and then makes peace with the enemy again, a peace that does not include you. And you find yourself unable to make peace yourself, so now you're stuck in this war. It should be possible for the player to ignore diplomatic niceties, making war on whomever they like. Of course, they will miss out on the safety and benefit of treaties. Relatedly, no system of claims or war goals like in Paradox games. You can declare war on anyone at any time (though the diplomatic consequences may be dire) and when you conquer something, it's yours. Finally, I want rich communications between humans and AIs. Of course, humans can use language to negotiate an agreement in detail and then put it through the diplomacy system, but how do you have this kind of conversation with an AI player? In part, this is helped by the first point, having understandable AI behaviour. You don't have to guess whether the AI wants a trade treaty - the game will tell you whether it does, and why. The other thing I put in to make this work are ultimatums, which allow you to make a demand backed by a threat. The demand is an agreement that is against your victim's interests (give me tribute, dissolve this defensive pact I don't need anymore), and the threat is some unilateral action you could take that would be even worse (or I will declare war, or I will stop paying you tribute). This way you can actually communicate what you want and what you're prepared to do to get it.
AI Logic
These are nice goals for a diplomatic system, but how can I teach the AI to interact with them? Again, there are things I want to avoid: AI players that love or hate you for no clear reason, AI that is not actually playing to win, AI whose decisions are so opaque as to feel random. For example, Civ 6 has the concept of AI player agendas, where e.g China wants to build world wonders and gets annoyed if you build them first. This is a cool idea in theory, but you're not actually going to avoid building wonders just because of that, right? And the AIs also have some (initially) hidden agendas, which in practice mean they just randomly like or dislike you. So instead of an AI that likes or dislikes you, it should act according to strategic situation. If another empire is threatening, can the threat be reduced with a non-aggression pact? Or do we share a common enemy where an alliance would make sense? Can another empire be bullied into paying tribute? The real-world term for this is "realpolitik" - a theory of international relations that's based on the relative power of states behaving "rationally" - that is, with little regard to fairness or past history. Your former enemy can become your friend if it makes sense for them to be so, and vice versa. If you are in a position of strength, you exploit that strength. The 19th century, on which the world of Airships is approximately based, was also the heyday of realpolitik, so it's a good fit. And the AI knows what victory is in terms of the game and tries to win. Victory is achieved by conquering all cities, being in an alliance that controls all cities, or having your ruler crowned emperor. (The latter two victory conditions can also be toggled off.) This makes sense in-universe as the empires are attempting to achieve dominance over one another. To figure out what it wants, the AI assigns each diplomatic situation (war, peace, trade treaty) a score and then tries to get to a higher-scoring situation. This means that if it really wants a non-aggression pact with you (+22) but doesn't especially want a trade treaty (-5), offering it both in the same deal will have it accept. And these numbers get shown in the GUI for making diplomatic offers to AI players, so you don't have to guess.
To make diplomatic offers to human players, the AI can put together a package of terms that it likes and that it thinks you will like too. That second part is needed because otherwise the AI would start every negotiation with "and of course you should pay me tribute", because why not, it's nice for them. Instead, it will send you an offer that, while perhaps not entirely in your favour, is at least somewhat reasonable.
The diplomacy GUI also allows you to modify offers and send them back, so you can always change it to something more to your liking.
To come to agreements with other AI empires, the game looks at the relative strength of two empires and picks an agreement that they both like, but that's tilted towards the stronger partner. This is meant to simulate the result of a bunch of negotiations.
Ultimatums
Then there's ultimatums. A good ultimatum demands something that's in your favour and threatens something scary to the target that's also an acceptable outcome for you. The classic ultimatum is "pay me tribute or I declare war", where of course you'd like tribute, but you're powerful enough that you'd also be happy with war. Meanwhile, for your victim, tribute is unpleasant, but not as unpleasant as being conquered. And this produces a pretty clear mathematical definition for what an ultimatum is. To construct an ultimatum, the AI can look through things it wants but its intended victim does not, and things it could do to its victim that the victim would really dislike. Those are the demand and threat of the ultimatum. To determine whether the AI should cave in to an ultimatum - whether sent by a human player or an AI - we can also look at the difference between the demand and the threat scores. Let's say the demand is to pay tribute and enter a trade treaty, rated at -22. But the threat is war, rated at -60. So the demand is 38 points better than the threat. This is then directly converted into the likelihood that the AI will agree to the demand, by default by multiplying it by 2. So this particular ultimatum has a 76% chance of being accepted. Unlike as with normal diplomatic offers, where you know right away whether the AI will accept, ultimatums have a probability of acceptance to make them a gamble. If they reject your ultimatum, you have to either follow through with the threat or lose a chunk of reputation.
So ultimatums can be sent from humans to humans, humans to AIs, and AIs to humans, and should be a pretty flavourful way of conducting diplomacy and getting what you want.
AI Personalities
Of course not every AI is exactly the same. All the numbers governing these evaluations can be tweaked (and modded), resulting in different personalities. Upstanding empires that don't break agreements or do ultimatums. Bullies that try to extract tribute from you but then back down from the threatened war. Lone wolves who simply want to be left in peace but will relentlessly pursue war when provoked. Diplomats who try to embed themselves into a web of pacts for safety. Traders who are mostly peaceful but won't pass up an opportunity to invade a sufficiently weak neighbour. Weaklings that will readily cave in to ultimatums. Overly principled empires who would rather be conquered than ever agree to anything they don't want. Even omnicidal maniacs who will pretty much ignore diplomacy and just attack at will. And sometimes, you also want AIs that are more emotionally driven. There already is some of this in the system I'm building, because it does consider diplomatic grievances and reputation levels in its actions. On top of that, AI personalities can have an attitude to other empires based on their past relationship. Were you at war? Have you been in a long-term stable pact? Do you own some land they consider theirs? In and of itself this isn't enough: geopolitics provide much more interesting motivations, and at the start, no one has any history with anyone else. But it can be a good additional layer for some personalities that deviate from this pure realpolitik concept.
What Remains
So yes, all this is what I've been working on. Things are going pretty well, with the AI able to make and respond to diplomatic messages. There's still a bunch of problems to work out. For example, if you successfully demand tribute through an ultimatum, the AI will immediately send you a diplomatic offer that just consists of cancelling the tribute, because after all, that would be to its advantage. And I'm working on making the user interface for this as good as I can, showing the right information in the right places, plus generous quantities of tooltips. I'm also still considering additional types of diplomatic interaction on top of the ones that currently exist, which are:
- War - A state of conflict. You may freely attack each others' fleets and conquer each others' cities.
- Truce - Formal cessation of hostilities. Automatically turns into a state of peace after five months.
- Peace - A neutral relationship. You may not send ships to each others' cities, and doing so is a declaration of war.
- Non-Aggression Pact - A promise not to attack each other. You can freely send ships to each others' cities.
- Defensive Pact - A promise to defend each other. If the other empire is attacked, you automatically declare war on the attacker. If they declare war, you stay neutral.
- Alliance - A full alliance sharing in all wars. Your ally's allies automatically become your allies too.
- Trade Treaty - Gain 5% of each others' incomes.
- Research Treaty - Gain 10% of each others' research output. Technologies the other has researched are 40% faster to research.
- Tribute - Receive 10% of their income.
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
- Added two new bonuses for coats of arms: The crossed swords are close combat specialists, increasing sawblade and flamethrower damage by 40%. The vol are aerial aces, increasing the fire rate of airplanes by 40%.
- Reduced marine fire rate by 25% for balancing purposes.
- Fixed a bug where ships with sails would constantly emit sail sounds.
- The AI again no longer builds ships it cannot afford to maintain.
- Added modding utilities for converting between the game's internal GUG format used for saves and a (more) human-readable JSON format. You can activate them by enabling "modding tools" in the settings.
- Added a setting for enabling in-game cheats.
They're of course only available in single-player and disable achievements. If you have suggestions for additional ones, let me know. Why did I add cheats? Well, uh, people are cheating anyway using cheat engine and causing weird bug reports that I then have to spend time investigating. So I'd much rather give you a clean way to cheat. Plus I firmly believe that you should be able to do whatever you like with software that's on your computer. It's your computer, and I'm not a cop. But please don't use Cheat Engine in multiplayer. It desyncs the game and then I have to spend time and energy going over the desync report. Time I could spend making cool stuff for Airships, or napping.
- Can no longer get multiple spy actions for the price of one by clicking really fast. (Thanks to Towarish Broven for reporting that one!)
- The AI should now build a more diverse set of ships.
- Slightly improved performance in multiplayer battles.
- Modding: Line numbers in JSON errors are now correct.
- Fixed fleet list GUI glitch.
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.
- Robot tentacles now longer drop grabbed crew when losing power.
- Setting a name prefix for your ship no longer desyncs the game.
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.
- Much faster loading and saving
- Preview info of saved games
- Much faster checking of Steam subscriptions on startup
- Smoother, more resilient multiplayer
- The ability to load modded ships when you're missing some required mods
- Mechanical tentacles
- Mostly up to date translations
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:
- Much faster loading and saving
- Preview infos of saved games
- Much faster checking of Steam subscriptions on startup
- Smoother, more resilent multiplayer
- The ability to load modded ships when you're missing some required mods
- Mechanical tentacles
- Bugs, potentially
If you try it out, please document and tell me about any problems you run into! Don't assume that I already know a problem exists. You can contact me here, or on the Steam forums, or on Discord, or via email to zarkonnen@gmail.com . To switch to the beta, right-click on the game in your Steam library, choose "Properties", then select the "Betas" tab from the window that appears, and finally "mp_beta" from the drop-down in that tab.
- Fixed performance problems with grenadiers and other boarders.
- Saw blades and other ammoless weapons once again will fire at harmless targets if they have nothing better to do.
- Temporarily disabled multiplayer chat overlay, as it was causing lag spikes. It will be fixed and re-enabled soon.
- Fixed crash caused by ships producing less than 0.5 command points.
- Fixed rare crash in file screen.
- Fixed weird behaviour in file screen when you hit enter with nothing selected.
- Limited number of particles in a combat to 4000. This can be changed by editing launch_settings.json.
- You can now deactivate the enemy combat AI entirely, useful for testing purposes.
- Cow-catcher ram is now called wurm-catcher ram, as there are no cows in the game's setting.
- Instead of tips you now sometimes get in-universe ads in the world generation screen.
- Modding: Ability to hook charges/tinctures/layouts into existing heraldic styles. See Modding Notes.txt in the game data folder for details.
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.
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
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.
Features and Fixes
- 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.
- 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.
- 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).
- 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.
Additions
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.
- Missing translations.
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: 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.
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.
Features
- 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.
Example New AI Ships
Time Scales
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!
- Fixed crash in tech tree when you're not generating any research.
- Fixed possible data corruption when saving melee boarders.
A wondrous All Hallows' Eve to you! Here is small update, featuring a new monster, as is traditional:
- New plant-monster type, the Titan Bladeweed.
- Aerial torpedoes and guided missiles now get the powerful explosives bonus.
- Updated ship set by Towarish.
- Replays should finally no longer diverge.
- Additional times of day for the winter months.
- Defence and espionage screens now show the right weather for the season.
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
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.
- Better folder support in the replays list.
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:
- Improved ramming AI.
- Redid city notifications. Showing fewer unimportant notifications, like enemy cities recovering economically.
- Indicator for fleets needing repair.
- Fixed crash when trying to bribe a ship that has departed a city.
- Small pirate boarder now has all-pirate crew.
- Slightly more manoeuvrable hussars.
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:
- Command Centre: Massive bridge with an additional +30% command points generated for all ships in the fleet.
- Observation Dome: Upgrade to the crow's nest, +15% accuracy instead of +10%, and more HP.
- Aircraft Command Deck: Triples the speed at which planes can be launched. Allows for more detailed commands to be issued to the planes launched by this ship.
- Aircraft Maintenance Bay: Doubles aircraft repair speed and makes rearming 25% faster. (All planes now need to return home every once in a while to stock up on ammo.)
- Guided Missile: Massive high-tech guided missile that actively seeks out targets. Does a lot of splash damage, uses a lot of ammo, takes a long time to reload.
- Kinetic Bomb, AKA a rock you can drop on your enemies. Eventually evolves to a metal teardrop with fins you can drop on your enemies.
- Biplane hook for attaching biplanes to the underside of ships.
- One-use versions of rockets, massive rockets, and torpedoes.
- You can now see aerial torpedoes and guided missiles being assembled bit-by-bit as ammo for them arrives.
- Option for dyslexic-friendly font in the settings.
- Cultist crew now have some special shouts more appropriate to their cultist nature.
- Modules that provide a ship-wide bonus, like telescopes, now specify which modules their bonus stacks with.
- Modules and armours now tell you which mod they're from.
- AI no longer tries to outmanoeuvre faster ships.
- Explosion damage overlay now uses same code as explosions to be accurate, and supports hovering over specific modules to see just the damage they do.
- Four new sets of AI ships by superieurerobot, Orang, h, and me.
Bug fixes:
- Desync at start of MP game should no longer happen.
- At least one case of boarders just kind of jumping to their deaths is fixed.
- Entirely new logic for deciding whether a ship/building will survive a fight. This should hopefully get rid of "ghost fleets" of grounded airships and other issues like that.
- When you bury grass with stuff (like ruins, logs, etc) on it, it now converts into normal soil.
- More helpful message when mods are missing when loading a replay.
- Feedback input field is now multi-line, so you can hit enter without submitting feedback early.
- Custom charges now render correctly in counterchanged and dimidiated coats of arms.
- Particles no longer adhere to dragonriders and some other monsters.
- Heavy wooden armour: Blast absorb 4 -> 6, Piercing absorb 9 -> 12
- Steel wall: HP 27 -> 36
- Turtle shell armour: HP 45 -> 60
- Aerial charges: HP 80 -> 100
- Suspendium Ray: +50% damage
- Pressurised Suspendium Tank: Lift 900 -> 1200
- Crew shouts are now moddable. Shouts are now loadables like everything else.
- You can add guidance systems to your weapons. See GUIDED_MISSILE.json for an example.
- Support for non-1024px sprite sheets is even better now, might actually work, you never know.
- You can now specify that the barrel of a weapon should not be displayed (see ROCKETS.json) or even a whole set of stages for how the barrel changes as it's loaded. (See GUIDED_MISSILE.json.)
- Use "canResupplyInCombat": false to make a module unable to be resupplied with ammo or coal.
- Tech tree rendering does bad stuff with confusingly overlapping dependency lines.
- Landship ramming AI is broken.
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!
- Fixed issue where screen modes that are taller/wider than the biggest one were disabled.
- Fixed bug where ships breaking apart would have their modules revert to lower-tech appearances.
- Nerfed certain tactics for taking down shellwalkers and stone guardians.
- Non-red dragons fly past in the background sometimes.
- Ships animate in the editor when operational.
- Repeatedly clicking in the same place cycles between selecting the front and back decal if there are both.
- Modding: Can now use true/false for canOccupy, leftDoors, rightDoors and upDoors rather than having to list them all individually.
- Modding: Spritesheets larger than 1024px are now properly supported.
- Modding: You can now set splashFriendlyFire to false for weapon modules where you want the splash damage to only hurt enemy ships.
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.
- Modules and decals are now organised into sets of variants you can cycle through. This makes the module and decal list tidier and also allows for more visual variation.
- You can now rename cities.
- Saving and syncing no longer freeze the game, which should produce a nicer experience and fewer network issues.
- No armour is now available as an option.
- Deck-based cannon and gatling guns as well as half-sized blocks and slopes, courtesy of YellowMiner.
- Storage modules now change in appearance as they deplete, and more weapons change in appearance as technology advances, courtesy of YellowMiner.
- Added link to Nexus mods for non-Steam users and made it easier to install mods from zip files.
- Massive rockets are now 50% faster, 25% more accurate, and make a deeper sound.
- The non-conquest ship editor now has the correct techs selected for non-conquest battles.
- Monsters should no longer enter combat already damaged.
- Wasp nests now award you the cybernetics tech instead of trying to unlock aerial torpedoes directly.
- Fixed missing "Choose Research" button in the research complete dialog.
- Fixed a bug where ships would collide at a distance (for example, a bow colliding with a rectangular module despite there still being some space between them).
- Fixed a bug where cities connected by sea routes weren't treated as properly connected.
- Modding: You can now use multipliers and dividers in bonusable values instead of having to use a mess of cases. See MASSIVE_ROCKETS for an example.
- Modding: You can now specify which modules are considered the same for purposes of stacking accuracy bonuses. See TELESCOPE for an example.
- You can now switch research without losing progress.
- If you gain research points from defeating a monster nest and have no research selected, the next time you select research, the points get credited there.
- In conquest, modules are now filtered correctly based on what's available again.
- Using the tech filter now correctly adjusts the stats and appearances of things.
- If you gain a tech without its prerequisites from a monster nest reward, the tech filter no longer incorrectly enables modules from prerequisite techs.
- When you defeat a mech squid-using mad scientist you now actually get the mech squid tech.
- Mech squids are no longer afraid of the ground.
- The tech filter panel now looks better in simple graphics mode.
- Added cloth deck covers by YellowMiner.
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.
- A new "Phial" heraldic charge that increases research speed by one third.
- Fill paint button now paints externals like doors, and you can click on the button while holding down space to paint all decals at once.
- Added one new AI ship set by Master Yoba.
- Aerial charges require fewer crew now.
- Painted decals now look nicer in the editor and in the ships list.
- Name plates now limit themselves to showing as much of the ship name as fits.
- Overwriting a ship now updates the preview in the load/save screen.
- Fixed a desync caused by playing the game in single player and then in multiplayer.
- Going into the save screen no longer causes random parts of your ship to be selected.
- Replays now support using the reserve.
- Better logic for which colours get derived from your coat of arms for paint.
- Flipped versions of modules are now merged with their un-flipped versions for combat stats.
- Destroyed tracks no longer leave "invisible ghost wheel" obstacles.
- Fixed High-Temperature/High-Pressure Jelly tech prerequisite.
- Mac users no longer type gibberish.
- New visuals for a number of weapons by YellowMiner.
- Added 11 new charges ("icons") for heraldry.
- Upgraded graphics for coal stores, sickbay, saws, and more.
- Ships display nicer in the conquest mode ships list.
- If you have a custom heraldic charge in your conquest coat of arms, you can now choose what bonus you want for it.
- Fixed some combat AI bugs that caused things like fleshcrackers facing to turn away from their enemies.
- Saved games list defaults to showing most recent first.
- Repairing buildings now places them correctly and does any landscaping needed.
- Fixed saved combat loading, which previously crashed.
- Bees and wasps can actually exit their nests again.
- Decals are now properly shown in defences view when viewing the outside.
- AI alliance notices now time out after a while.
- Combat replay list now displays stuff faster when you have a lot of replays. (By actually checking the most recent replays first.)
- Fixed a bug where if you exited combat while a beam weapon was firing, it would be still firing when you re-entered combat.
- For modders: Feet on legs now flip correctly, so you can finally make non-symmetrical feet that look right!
- For modders: You can now use spritesheets with other sizes than 1024, as long as they're still squares with power of two sizes (eg 256, 512, 2048). Note that if you use very large spritesheets, they may not work on some people's machines.
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!
- Fixed a crash in combat in graphics compatibility mode. (Side note, don't use graphics compatibility mode if you can avoid it. It's slower than normal graphics.)
- Fixed crash when a fleet you had selected was destroyed.
- Changed the way shiny/non-shiny materials are rendered slightly. (Shinyness now slightly affects ambient lighting.)
- Fixed one whole typo.
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.
- More graphical upgrades and new decals by YellowMiner. Some modules now change appearance as tech level increases.
- Decals are now organised into categories, like modules.
- You can now paint modules like hatches with the paint tool.
- You can now hold down space to paint decals with the paint tool.
- Multiplayer world generation is no longer stuck indefinitely if one of the players disconnects while it's going on.
- Added confirm dialog to flee/surrender button.
- The AI now leaves after fully raiding a city in multiplayer.
- Fixed impact force for beam weapons.
- Fleshcrackers no longer shoot crew held by their own tentacles. After all, they're about to eat them.
- The targeting AI is no longer supernaturally aware of the location of pressurised suspendium chambers, making them more viable.
- You can now make mods that use bonusable values to change the appearance of modules and armour. This would previously crash the game.
- Miscellaneous other GUI improvements.
- Rebalanced suspendium dust tanks again: endcaps have more lift again, and large tanks also have more, but they're more expensive and a bit more fragile.
- Large explosive weapons now also have an impact force.
- Fixed various decal display issues.
- Fixed an issue with flipped pipes and ornate charges displaying incorrectly in graphics compatibility mode.
- Known issue: Detailed module fragments are currently missing.
- Known issue: Due to Apple's increasing restrictions, the game may no longer launch on OS X Catalina. I'm looking to see if I can fix this.
- Known issue: lantern chains are not displaying correctly.
Bugfixes and balance improvements:
- Rebalanced large dust tanks, reducing endcap lift by 50%. (Note: I will be releasing another balance update soon that reverses most of this nerf, so don't panic and redo all your designs just yet. :D )
- Fixed endless reconnect loop when resuming a conquest game with mods.
- Fleets that only have boarders and no weapons no longer just surrender.
- Fixed some AIs failing to research technologies and getting stuck on old ship designs.
- Updated all translations.
- Armoured doors are no longer weirdly super-heavy.
- Projectiles now have an impact force, pushing back the target they hit, defaulting to half their recoil.
- Many more decals are now flippable and colourable.
- Many new decals, including anchors, side lamps and lanterns, smaller ornate coats of arms, bigger roundels with charge, more masts, struts.
- Struts and solid shapes have been reworked and have their own category.
- Stained glass windows are now paintable and have more variants.
- Other minor graphics rework.
- You can now adjust the targeting weight of modules, making them more or less likely to be targeted by enemy gunners. See the keels for an example.
- Graphics are being moved around and shifted to the new modules spritesheet, but the original spritesheet will remain forever so as to not break mods that refer to it.
- You can now set ammoPerClip = 0, clip to something greater than one, and clipReloadTime to some number of milliseconds to make ammoless weapons that fire in bursts.
- You no longer need to specify the offset in external appearances if it's 0, 0.
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.
Counterfeit floathoney is made by mixing powdered Suspendium and rhododendron extract into normal honey.
Floathoney is based on "mad honey", which comes from Nepal and has hallucinogenic properties caused by toxins that come from the rhododendrons the bees harvest.
The most popular faith in the civilized world is the Trilunar one, which evolved from an earlier Mono-Lunar religion.
I wanted a generic-ish religion that isn't entirely an obvious stand-in for a real-world one.
Professor Septimus recently proclaimed a new religion of science, electricity, and Suspendium, to universal apprehension.
This is roughly a religious version of Italian futurism, and deeply shocking to a still very conservative world.
Scholars can't agree on whether magic is real, but they do agree that if it is real, it should not be practiced.
There's magic-ish effects in the game right now, like the stone guardians and the resurrected kraken, but this may also just be strange science.
In Cardinalius von Lothe's Great Book of Dragons, he identifies five kinds of dragon. Most respectable scholars are pretty sure he was high on floathoney.
This is actually correct. Red, white, black, green, grey.
According to Glassile's "Creatures of the Realm", giant aerial krakens may be tamed by prayer. No one has ever dared try this out.
This one on the other hand is, well, no.
Wurm lizards become temperamental and hard to control if they have too much Suspendium in their diet.
Because they're starting to metamorphose into something different.
Turtledoves are far more rare than they were a century ago, as they are a favoured repast of airsailors.
Sadly, giant tortoises were a very popular meal for real-life sailors and suffered these consequences.
Working in a Suspendium chamber is complex and hazardous. Double pay rates are usually applied.
Because you're working with a giant floating crystal that will explode if it develops a crack, and sheds asbestos-y dust.
A Mr Stockton is attempting to sell his "safe aerial descent device" made from cloth. Sailors distrust it. The navy thinks it too expensive.
AKA a parachute.
If the biscuit floats, it's safe to eat. If the biscuit sings, it is not.
Floating biscuits are pretty normal in the world of Airships. Singing ones, not so much.
Sometimes, a giant beehive dies and crashes to the ground. A massive opportunity and a great danger for the locals.
On the one hand, floathoney is very valuable. On the other hand, there's probably a bunch of surviving man-sized bees...
Poor crofters sometimes trap clockwork wasps until they wind down, then sell the gears. Sometimes, its friends come to the rescue.
Clockwork wasps are purely mechanical creatures that need to rewind themselves at the mainspring of their giant metal hive. So if you prevent them from doing that, they eventually become inert and harmless.
A century ago, wurm-drawn field artillery ruled the battlefield. Now, it has vanished.
The equivalent of early horse artillery in the real world. But if you have airships, artillery is rather outclassed.
Any number of cults and political movements have sprung up to fill the modern world's vacuum of meaning.
The modern world always has a vacuum of meaning, a dissolution of social mores, etc. etc.
Heavier-than-air flying machines are widely distrusted, but they are clearly effective.
Planes are still useful if you have flying rocks, because they're a lot faster.
Duelling is forbidden at the naval academy, but this is rarely enforced as long as no one dies.
Implication: As long as no one important dies.
Real floatmead is clear and faintly luminescent. The fake stuff contains commercially ground Suspendium dust.
Obviously it'd be fine if it were artisanally hand-ground Suspendium dust...
To obtain the best frost wurm hide, the beast must be caught in the spring and fed throughout summer, until its skin is supple and shining.
Sadly based on what they do to arctic foxes to get pelts.
What are birds? We just don't know.
This one's from the brilliant comedy show Look Around You. And, well, in a world where the expectation is that things float rather than fly aerodynamically, birds are perhaps a bit weird.
A recent study shows that the main cause of the old empire's collapse was a lack of tea.
Well, the British empire did basically go to war over tea, or rather over the opium they wanted to sell to even out their trade deficit.
Do not ask what's inside the three moongazy pies. Just eat them, quickly, and wash them down with plenty of beer.
Moongazy pies are, one assumes, an even more horrifying version of stargazy pies. (Warning: weird things done to fish.)
The game of Floatball enjoyed a brief spell of popularity a few years ago until it became clear that the scoring was completely unfair.
Throwing shade at Quidditch here.
There are valleys in the Goatskull Mountains where Suspendium fails to float. The locals see the rest of the world as cursed.
In other words, things are normal there. In-universe, it's because the mountains are made out of a non-Suspendium-bearing rock, and Suspendium only floats in the first place because it repels the Suspendium in the ground.
Recent archaeological excavations in the Tooth River delta have found ancient bits of carved Suspendium that were probably used for ritual purposes.
Archeologists tend to say objects were used for ritual purposes when they have no idea what they are.
What, exactly, are the moons? Were there always this many?
You'd... hope so? But it's by no means required that the world of Airships is even on a spherical planet. So, who knows.
The dose makes the poison.
Cribbed directly from Paracelsus.
- Added an easier difficulty level. Remember: Play the game at the difficulty level you enjoy it at.
- Boarders with grappling hooks are now better at grappling with Suspendium tank endcaps, rams, and similar objects.
- Torpedo bombers are better at leading their shots.
- Stone guardians are more resistant to ramming.
- Crew with no ability to board can no longer end up on enemy ships by being told to abandon ship and then move into the enemy ship. This was confusing, because they'd just stand inside the hatch looking gormless.
- Grass with stuff on (like piles of wood, signs, ruins) now gets properly converted to soil when buried.
- German translations are now up to date. Other translations are in progress.
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/
- Fixed desyncs happening right at the start of conquest games.
- Fixed some rare crashes.
- Landscape graphics have been updated and reorganised by Yellowminer.
- Changed light direction of daytime scenes to make more sense.
- The ship editor in multiplayer games now knows which modules you have available.
- Moved the "Import from File" button in the file screen to the top bar to be less confusing to new players.
- Obstruction beams now visible even when the distance between two modules is zero.
- Removed "Outside View" toggle in tutorials.
- Small ornate nameplates now display correctly.
- Items in the landscape editor palette are now better spaced and easier to click.
This version brings both a large list of bug fixes and some nice new stuff.
- Post-combat stats.
- All-new achievement icons.
- Two new achievements: "We Have Reserves" for sacrificing 100 crew for a victory and "Dumb Ways to Die" for having your crew die in 10 different ways in the same fight.
- Nicer combat setup dialog.
- Collapsible chat windows in combat and conquest mode.
- Fixed crash in conquest mode caused by selected ships being destroyed.
- Fixed crash when user would try to paste from an empty clipboard.
- Fixed combat desync issue.
- Rearranged ships in tutorials a bit to make them work more reliably.
- Flipped land blocks rendered properly.
- Giant spiders now die all at once rather than in halves.
- Cursor no longer instantly turns into selection cross cursor when you click somewhere.
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.
- Fixed desync caused by Shellwalkers in multiplayer.
- Fixed crash caused by trying to do a spy action when the spy has been caught.
- Cultist nest buildings now have cultist crew.
- If you're a cultist empire, you get special messages for cultist nests. (They're "heretics" from your point of view.)
- Suspendium Ray damage increased but made less effective against armour.
Modding:
- You can now specify alternate text for monster nests based on a bonus that an empire has.
- You can now specify a pixel amount for shells to shift when they open. (See data/ModuleType/SHELLWALKER.json.)
- Monster nest rewards can now provide technologies.
[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.
- Fixed desync caused by multiplayer speed settings.
- Bottom turret now has a ladder for easier placement.
- Fixed crash when trying to paste nonexistent text.
- Fixed save game loading crash.
- You can now switch to a compressed overview of the tech tree. (Finally. Let me know if you have suggestions for improvement of this new view.)
- The tech tree colours have been adjusted to make it clearer which techs are researchable.
- More gold leaf, for decorating slopes and domes.
- More rivets.
- Gold leaf and rivets (and crows' nests) are now paintable.
- New AI fleet by Proton.
- Can now paste text using ctrl-V.
- More than doubled set of available Chinese characters.
- After they utterly dominated in the tournament, Trained Musketeers bonus reduced from 50% to 25%.
- The screen no longer shakes when combat is paused.
- The landscape around stone guardians has been... altered.
- I've hired YellowMiner to clean up and improve graphics. He's reorganised some of the sprite sheets, and more reorganising will follow.
- You can now more fully customize landscape generation, allowing for entirely new landscape types. Here's an example LandscapeType that overrides everything.
- Graphics generation for mods is now about an order of magnitude faster.
- LandscapeTypes can specify which weathers they support. See the new RUINS LandscapeType for an example.
- You can now safely add new TimeOfDay values without causing the game to crash in low graphics mode. Just specify an appearancePostfix value that points to one of the original TimeOfDay values (DAY, NIGHT, DAWN, DUSK, SNOW, RAIN, FOG, STORM), whichever is closest in mood to the new time of day you're adding. See the new SNOWY_NIGHT TimeOfDay in the game data for an example, where the appearancePostfix is NIGHT.
- MonsterNestTypes can now specify what kind of LandscapeType they want to spawn in. See the stone guardians in the game data for an example. Note that this means that when monster nests are occupied by new monsters, the nest's landscape is re-generated.
- Improved networking code that can deal with your connection failing and automatically reconnects.
- Planes now lead their shots and are much better at intercepting each other and hitting smaller fast-moving ships.
- Biplanes have a significantly higher rate of climb and descent so they can catch up to torpedo bombers.
- You can now (finally) tell the game to auto-select your preferred screen resolution.
- Rewrote text input code to be smoother. Also now offers some support for writing Chinese/Japanese input methods in Windows, though at the moment you need to play in windowed mode to see the input window.
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.)
- A few more decorative items: ornate name plates, concave curved blocks, more domes, ornate decking, and crenellations.
- Introduced minimal upgrade time for monster nests, so you won't be surprised by pirate kings or elder dragons early in the game on lower difficulties.
- Hitting escape in a confirm dialog in the file screen no longer exits the file screen.
- Demonstertruckification: New spring values for track suspensions (based on work by Yellowminer, thank you), plus larger undercarriage graphics, so landships no longer have quite as ridiculously tall suspensions.
- New setting to reduce flashing caused by shots, explosions, lightning, etc.
- Fixed a bug where a fleet would be incorrectly unable to intercept another.
- There is no longer a giant carrot peeking out of hussar bays.
- AI vs AI combat resolution is no longer biased towards fleets of small ships.
- The AI is more likely to build large ships if it can.
- Front/back light cost and price are now the same as top/bottom.
- Added stencilled numbers as decals.
- Unable to input Chinese and Japanese characters.
- Bomber-building AI is still weirdly dominant sometimes.
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.
- Bottom-left messages that tell you when a weapon is ineffective against an armour or monster.
- You can now search by file name in open file screens.
- AI bomber fleets are now restricted to higher difficulty levels.
- The AI will no longer spam dragonriders except on high difficulty levels.
- Fixed more physics issues.
- Fixed data loading bug that ignored non-default boolean values.
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:
- War - Any fleets that encounter one another will fight. This is what it's like in the game right now.
- Ceasefire - To get to peace from war you have to go via a ceasefire. Fleets no longer fight. Violating a ceasefire carries a reputation penalty. Unbroken ceasefires eventually turn into peace.
- Peace - The new default state. Fleets that encounter each other in neutral territory don't fight. Sending a fleet to a city owned by another player is a declaration of war, though. Declaring war from this state doesn't cost any reputation.
- Non-Aggression Pact - You can now send fleets to each other's cities without causing a war. Breaking this costs rep.
- Defensive Pact - You pledge to assist your pact brother in defensive wars. Costs more rep to break.
- Alliances - You are automatically involved in your allies' wars, offensive and defensive. If your alliance controls the whole map, you win together.
- Tribute - One empire pays part of its income to the other.
- Trade Treaty - Both empires have their income slightly boosted.
- Research Treaty - Both empires have their research slightly boosted.
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:
- Various sloped and rounded struts
- Fins
- Pointy suspendium tank endcaps
Also, there's a new set of ship designs, provided by Towarish' Browen. World generation tips are moddable, of course. And so are paints, heraldic tinctures, and city names now. Fixes and improvements:
- New networking code that should prevent really high ping values and be stable.
- The game checks the validity of your data files and refuses to let you enter multiplayer if your data files are changed, as this would lead to desyncs.
- Smoother loading of ship designs in the open/save dialog. If you have a long list of really big ships, the game should no longer stutter, or at least stutter a lot less.
- You can no longer make infinitely tall towers of dirt.
- Fixes to Russian translation, provided by Towarish' Browen.
- Modules now indicate how flammable they are and how likely they are to explode.
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
- Fixed invisible damaged modules.
- Fixed crash when losing server connection.
- Fixed tech screen layout crash and improved tech screen layout.
- Fixed crash caused by mods that create quarters with no crew type set.
Also, this was actually in v1.0.7, but I forgot to mention it, the ship info now shows both the numerical quantities of resources and the resource bars.
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]
- Ship resource quantities are now displayed as bars rather than numbers, which should make them easier to read. The numbers are still available in tooltips.
- You can now explicitly tell a ship to move first and then flip, or flip first and then move.
- The game now remembers where you previously placed your ships during combat setup in conquest, and will try to use the same placements.
- Telling a ship to move vertically no longer causes it to move in a curved path. (Thanks Meowskyi for reporting this bug.)
- Monster nests now reduce income by a fixed amount rather than a percentage.
- The strategic map screen now stops you from scrolling away so far you can't see the map anymore.
- Downwards antennae are now attached correctly.
- When placing a module with upwards ladders, no longer showing connector hint into non-occupable tiles. (Thanks ImperatorRicardo for reporting this bug.)
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...
- The colors in paint and roundels for arms that don't obey the rule of tincture are now better-chosen.
- Fixed an issue caused by mods with modules that take zero time to walk through. Please don't break the laws of physics!
- Planes kept being blown up by friendly fire from bombers and torpedo bombers, so I made them immune to splash damage from their own side. Only, I got the logic the wrong way around and instead made them immune to splash damage from the enemy side only. This is now fixed.
- Toggling mods while in the process of placing a construction in the mission editor causes a crash from stale data in the construction you're placing. Made it so you can't toggle mods mid-placement anymore.
- Fixed "the service ceiling looks fine but when I go place the ship it has a service ceiling of zero" bug. Caused by job assignment system getting too excited about hunky high-HP modded crew.
- The game install folder now contains up to date information on how to run your own standalone multiplayer server. No "and then they shut the servers off and the game stopped working" for Airships!
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.)
- Save files are now about seven times smaller, which should also help with out of memory crashes when auto-saving large maps.
- Functionality for re-downloading mods and ships you published to Steam is finally restored!
- Bottom-left combat commentary from torpedo bombers.
- Red lanterns now redder.
- Modders: decals can now have light sources attached.
- Added some new decals: fake chimneys and lantern chains.
(I'm sorry)
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.
Sponsons
Light and medium cannons sticking out of the side of ships. They have no placement restrictions but a narrow fire arc.
Medium Turrets
Available in top and bottom versions, these turrets have some of the flexibility of the larger dorsal and ventral turrets but can be placed in a staggered line.
Ballistas
A cheap, low-tech weapon that offers better range than muskets or grenades.
Aerial Charges
How about a bomb that goes up? That's what an aerial charge is.
Torpedo Bombers
A new high-tech plane based on the historical Fairey Swordfish. Torpedo planes take off and release a single aerial torpedo before returning to base to re-arm.
The tech tree has been expanded with three new techs:
Aerodynamics, which now unlocks Biplanes and more accurate bombs.
Sponsons, a Tier 2 tech that gives you sponsons.
Torpedo Planes, which is a high-level tech that gives you Torpedo Bombers.
To support the new modules, there are both updated and new sets of AI ship designs, some created by me, some contributed by players.
In terms of balance adjustments, many types of armour are now significantly lighter and cheaper, making them more viable options. Planes and Aerial Hussars have also been strengthened significantly. Large Suspendium Chambers and Heavy Turrets now require less free space around them. A full list of changes is available below. I've also re-worked the game physics a bit, which means that airships now fly in more of a straight line and landships are faster. The ship editor GUI no longer lists flipped versions of modules and decals seperately. Instead, there's now horizontal and vertical flipping buttons in the list, which makes the list more compact.
Finally, there is now an option to turn off the cooldown between commands issued for ships, letting you micro the movement, priorities, and targeting of your ships as fast as your hands can manage. Available both in individual combats and in conquest mode.
Enjoy!
Full List of Balance Changes
Normal Difficulty Level Capital City Income 70 -> 80 AI Attack Interval 25s -> 32s Hard Difficulty LEvel Player Extra Money for Ships and Defences 300 -> 600 Final Player Extra Money after Placing Ships and Defences 500 -> 200 Extra AI Starting Techs 3 -> 2 Guaranteed Player Starting Ship No -> Yes Wooden Armour HP 40 -> 50 Weight 3 -> 2 Reinforced Wooden Armour Weight 18 -> 15 Steel Armour Cost 8 -> 6 HP 40 -> 50 Weight 16 -> 10 Heavy Steel Armour Cost 14 -> 10 Weight 30 -> 20 Brick Wall Cost 1 -> 0 Heavy Stone Wall Cost 8 -> 6 HP 120 -> 100 Aerial Hussar Weapon Reload 2s -> 1.8s HP 15 -> 20 Triplane Piercing Damage 6 -> 9 HP 19 -> 23 Bomber Weapon Reload 2.2s -> 1.3s HP 30 -> 36 Biplane Piercing Damage 4 -> 6 HP 14 -> 18 Air Dragoon Speed 25km/h -> 50km/h HP 7 -> 8 Aerial Torpedo Blast Splash Radius 5m -> 7m Bomb Bay Max Accurate Range 271m -> 195m (386m with Aerodynamics) Deck Gun HP 50 -> 40 Max Accurate Range 480m -> 675m Dorsal and Ventral Turrets HP 180 -> 240 Piercing Damage 70 -> 80 Flak Cannon Blast Damage 8 -> 14 Gatling Gun Crew Required 1 -> 2 Shoot Troops/Planes Range 36m -> 57m Clip 50 -> 35 Clip Reload Time 3s -> 2.5s Max Accurate Range 271m -> 226m Grapeshot Cannon Piercing Damage 10 -> 9 Number of Shots Fired 12 -> 14 Heavy Turret HP 500 -> 650 Cost 450 -> 500 Reload 4s -> 3s Fire Arc 70deg -> 100deg Musket Reload 1.5s -> 1s Max Accurate Range 338m -> 226m Piercing Damage 9 -> 8 Slopes and Blocks Cost / Block (approximate) 8 -> 4 Weight / Block (approximate) 10 -> 4 HP / Block (approximate) 40 -> 30 Suspendium Cannon Max Accurate Range 13km -> 3km Piercing Damage 70 -> 90
Beta updates:
- Fixed rendering of some flipped decals.
- Adjusted air and ground friction, ram damage.
- New brigand ship designs by user Meowskyi.
- Updated AI design sets by users StuChris and Orang.
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.
- Improved leg and track physics.
- New AI ship design set by user Orang.
- Fixed module search duplicates.
- In the editor, can now right-click on modules when in select mode to pick them up.
- Ballista: Reload 3s -> 2.5 s
- Light sponson: Inaccuracy 0.0018 -> 0.0016, Fire Arc 40 deg -> 45 deg
- Sponson: Inaccuracy 0.002 -> 0.0016
- Fixed some torpedo bomber aim logic.
- Air resistance and leg springiness are now calculated differently. Hopefully in a better way. Let me know about weirdnesses.
- Unarmed ships no longer try to go for clever positions just neatly outside the enemy's fire arcs but super-close to the enemy.
- Your final city can no longer be lost to revolt.
- Fixed weird graphics glitch in simple graphics mode where Stone Guardian shots were causing the entire sprite sheet to be drawn.
- Ships that are at exactly ground level during combat no longer cause autosave crashes to happen later.
New beta! We're getting there!
- Charges that give tech now only give one tech.
- Charges that give tech are now listed with the other charges that give bonuses rather than randomly stuck at the bottom of the list.
- Fixed issue with combat zoomed out way too much in multiplayer combat setup.
- First new ship set for AI based on steel and sponsons.
- Modules picked up with right-click are now flippable.
- Improved torpedo bomber targeting no longer gets confused by oddly-shaped ships.
- Armour buffed significantly, Torpedo Bomber made more expensive, Ballista more accurate and more damaging, Gatling more ammo-hungry.
- Landships are now 3x faster in combat and 1/4x as fast on the conquest map, bringing them in line with what their reported speed.
Adjustment Details
- Torpedo Bomber Cost $200 -> $300
- Ballista Aim 0.003 -> 0.002, Damage 22 -> 30, Shot Speed 0.5 -> 0.7, Cost $15 -> $20
- Gatling Gun Clip 50 -> 35, Clip Reload Time 4 seconds -> 2.5 seconds, shootTroopsRange 36m -> 57m
- Wooden Armour HP 40 -> 50, Weight 3 -> 2
- Heavy Wooden Armour Weight 18 -> 15
- Steel Armour Cost 8 -> 6, HP 45 -> 50, Weight 16 -> 10
- Heavy Steel Armour Cost 14 -> 10, Weight 30 -> 20
- Brick Wall Cost 1 -> 0, HP 30 -> 40
- Massive Stone Wall Cost 8 -> 6, HP 120 -> 100, blastDmgAbsorb 4 -> 6
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.
- Modules and decals with flipped versions are now directly integrated into the editor list instead of being listed separately.
- Tech connectors are a bit prettier
- Bonuses from tech choices no longer apply in single combats.
- Stained glass windows display properly again
- Minor stat adjustments, giving turrets a wider fire arc and reducing the ammo consumption of light sponsons and aerial charges.
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!
- Fixed a network desync caused by renaming buildings.
- Fixed an ancient bug that would sometimes strand crew members to float in mid-air and produce corrupt save files.
- Fixed some other crashes caused by mods.
- In conquest, fleets that lose no longer instantly re-attack.
- All translations are now up to date.
- Crew transfer command works again.
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?
New Modules
- Ballista
- Front Turret and Back Turret
- Sponson
- Aerial Charge
- Torpedo Bomber
Balance Changes
- Planes have more damage and HP
- Aerial dragoons are faster
- Gatling guns require more crew and are less accurate
- Heavy turrets are better
- Bombs are less accurate
- Lift curve has changed - harder to make high service ceilings, easier to make very low ones
Notes
The sponson and torpedo bomber modules will get their own techs. None of the stats on the new modules are final. Oh, and one last thing - there's now a "no command cooldown" option, available in single-player and multiplayer, combat and conquest. For all your high APM micro needs.
- Reworked tutorial to more clearly indicate things and run more smoothly in general.
- Surrendering when you are intercepted now wipes out your entire fleet.
- Button to select all/no ships in strategic mode.
- Fixed AI being completely disinterested in firing on boarding-only ships.
- Wood armour HP slightly increased.
- Crew now carry resources in their hands again, rather than making them float near them with their minds.
- Updated German translation. (Updated translations into other languages coming soon.)
- Some minor other GUI fixes.
- Prev/Next buttons in tutorial are now in a consistent location.
- Button to reset file screen filter.
- Ship naming dialog size and button overlap fixes.
- Escape now backs out of help, fleet selection, and city selection.
- Zooming out in combat when maximum zoom out has been achieved no longer scrolls the view.
- Zoom speed settings.
- Removed clear button from tutorials where it can break the tutorial.
- Reduced Moon Disk HP by one third.
- Moon Disc Fragment Chamber now requires you to destroy a Moon Disque before you can build it in strategic mode.
- Halved building accuracy bonus.
- Fixed crash in strategic mode caused by loading save games with different mods than the enabled ones.
- Fixed crash when tentacles grab gargoyles.
- Fixed gargoyle animation viewer crash.
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.
- Most decals and some module externals can now have custom colours.
- You can place decals underneath the ship by holding space while you click.
- Modules no longer take an absurd amount of damage from nearby modules being destroyed. This should make bigger ships more viable.
- If you're getting invaded from multiple places at once, the GUI now tells you this.
- Fixed long-running display bug in coats of arms on modded ships.
- New, more informative explosion damage overlay.
- Overlays now update correctly when you go out of the overlay, replace a module, and go back in.
- Settings screen now correctly handles windowed fullscreen.
- Fixed a bunch of rare crashes.
- Can no longer set Suspendium cannon to rapid fire for extra DPS.
- The game no longer pauses for several seconds before exiting.
- Fixed issue rendering modded armour.
- Fixed sawblade damage.
- Added recoil to imperial cannon and decreased its accuracy again.
- Fixed angle calculation for weapons. Barrels should now actually align with where the shot is going.
- Still working to track down and fix this desync bug. Maybe I got it this time!
Quick performance/bugfix/balance release.
- Better performance in conquest mode, especially in single-player. Running multiplayer at max speed may still not be advisable depending on map size and your computer.
- You can now put decals on external modules.
- Potential fix for a rare desync issue.
- Shot speeds vary less by default.
- Cockpit is more expensive now, but bridge is a bit better.
- You get a bit of extra cash to build a ship with on difficulty levels that don't have a starting one.
Version 1.0.3 brings a whole bunch of fixes and balance changes.
- You can now view your empire's current bonuses in the Empire window.
- Weapon accuracy of buildings doubled.
- AI should no longer constantly re-conquer war-torn towns and cities.
- Indicator for incoming enemy fleets.
- Slower conquest speed by default and options for half and quarter speed.
- Cleaned up landscape editor panel.
- Rapid-firing and melee weapons like gatling guns, flamethrowers and buzzsaws no longer change reload and accuracy based on fire mode.
- The AI no longer surrenders in pivotal battles.
- No starting ship for the player on higher difficulties.
- Hid (broken) editor buttons in conquest spectate mode.
- Boarders-only ships are now counted as still in-combat as long as there's boarders alive and able to perform their duties.
- Dust tank endcaps now gain increased lift from the Suspendium Specialists bonus.
- Crow's Nest, Telescope, and Targeting Computer accuracy bonuses work again.
- Rivets and masts courtesy of Faffywaffy on Discord.
Balance
In summary:
- Armour is better
- Acid spitters do a lot more damage
- Tracks and legs are more expensive
- Keels are more expensive but more effective
- Massive weapons are cheaper or better
- Small weapons have decreased accuracy against boarders and planes
Wood Wall
- Increased HP from 18 to 24
- Increaded piercing damage absorb from 1 to 2
Wood Armour
- Decreased weight from 4 to 3
- Increased blast damage absorb from 1 to 2
- Increased piercing damage absorb from 3 to 4
Reinforced Wood Armour
- Decreased weight from 30 to 18
- Increased blast damage absorb from 3 to 4
- Increased piercing damage absorb from 6 to 9
Steel Armour
- Decreased weight from 20 to 16
- Increased blast damage absorb from 12 to 16
Heavy Steel Armour
- Decreased cost from 16 to 14
- Decreased weight from 50 to 30
Stone Wall
- Decreased cost from 5 to 4
Massive stone Wall
- Decreased cost from 10 to 8
Dragonhide
- Decreased cost from 20 to 15
Shell Armour
- Decreased cost from 9 to 7
- Increased lift from 22 to 25
- Increased blast damage absorb from 2 to 4
- Increased piercing damage absorb from 2 to 4
Aerial Hussar
- Increased top speed from 150 km/h to 250 km/h
- Reduced delay between launches from 400 ms to 100 ms
- Increased piercing damage from 17 to 24
- Increased reload time from 1.7 seconds to 2 seconds
Acid Spitter
- Increased cost from 100 to 160
- Increased reload time from 2 seconds to 3 seconds
- More than doubled accuracy
- Increased direct damage from 7 to 30
- Decreased max range from 114 m to 85 m
Big Tracks
- Decreased HP from 1200 to 800
- Increased cost from 200 to 400
- Increased coal reload interval from 8 to 12 seconds
Bomb Bay
- Increased cost from 20 to 30
Small Bow
- Decreased weight from 100 to 40
- Decreased HP bonus from 150 to 110
Medium Bow
- Decreased weight from 200 to 70
- Increased cost from 80 to 90
- Decreased ship HP bonus from 300 to 250
Large Bow
- Decreased weight from 300 to 140
- Increased cost from 140 to 200
Bridge
- Increased cost from 15 to 40
Cannon
- Increased reload time from 3 to 3.5 seconds
- Increased piercing damage from 40 to 50
Deck Gun
- Decreased HP from 60 to 50
- Decreased weight from 60 to 50
- Decreased cost from 80 to 50
- Decreased reload time from 2.1 to 2 seconds
- Decreased accuracy by 30%
Decorative Items
- Generally reduced weight and cost
Dorsal Turret
- Increased cost from 120 to 150
- Decreased reload time from 4 seconds to 3 seconds
- Decreased accuracy by 25%
Flak Cannon
- Decreased cost from 120 to 100
Gatling Gun
- Decreased accuracy vs troops and planes
Giant Flamethrower
- Reduced cost from 800 to 500
Grand Keel
- Increased HP from 3000 to 4000
- Decreased weight from 4500 to 3000
- Increased cost from 300 to 360
- Decreased ship HP bonus from 7000 to 6400
Grapeshot Cannon
- Introduced 100 m max range
- Decreased piercing damage per shot from 12 to 10
- Decreased accuracy vs troops and planes
Imperial Cannon
- Increased accuracy by 25%
Large Keel
- Decreased weight from 1400 to 900
- Increased cost from 80 to 110
- Incresed HP bonus from 1400 to 1750
Large Legs
- Decreased HP from 1200 to 600
- Increased weight from 1000 to 1200
- Increased cost from 140 to 450
- Increased propulsion from 1.4 to 4
- Decreased coal reload interval from 6 seconds to 5 seconds
Large Suspendium Dust Tank
- Increased HP from 350 to 480
Large Suspendium Dust Tank Endcap
- Increased HP from 220 to 300
Massive Rockets
- Decreased cost from 500 to 400
- Increased blast splash radius from 8 m to 11 m
Medium Legs
- Decreased HP from 400 to 300
- Increased cost from 80 to 130
- Increased propulsion from 0.38 to 1.1
- Decreased coal reload interval from 15 seconds to 12 seconds
Musket
- Decreased reload time from 2.3 to 1.5 seconds
- Increased accuracy by 20%
- Increased clip size from 12 to 16
- Decreased accuracy vs troops and planes
Rifle
- Increased cost from 15 to 20
- Reduced clip size from 20 to 16
- Decreased accuracy vs troops and planes
Saw Blade
- Increased blast damage from 30 to 40
Small Keel
- Increased cost from 30 to 50
- Decreased weight from 750 to 400
- Increased ship HP bonus from 400 to 700
Small Legs
- Increased cost from 30 to 70
- Increased propulsion from 0.3 to 0.4
- Decreased coal reload interval from 30 seconds to 20 seconds
Small Tracks
- Reduced HP from 400 to 300
- Increased cost from 50 to 160
- Increased coal relaod interval from 25 seconds to 30 seconds
Spider Legs
- Decreased HP from 1200 to 800
- Increased weight from 800 to 1500
- Increased cost from 150 to 900
- Decreased propulsion from 25 (!?) to 8
- Decreased coal reload interval from 5 seconds to 4 seconds
Suspendium Cannon
- Decreased reload time from 4 seconds to 3 seconds
- Doubled accuracy
Suspendium Dust Tank
- Increased HP from 120 to 150
- Increased lift from 250 to 280
Suspendium Dust Tank Endcap
- Increased HP from 75 to 100
- Increased lift from 180 to 200
Telescope
- Decreased cost from 200 to 120
Ventral Turret
- Decreased weight from 150 to 140
- Increased cost from 120 to 150
- Decreased reload time from 4.5 to 3 seconds
- Decreased accuracy by 25%
Vertical Sail
- Increased HP from 80 to 120
- Increased propulsion from 0.07 to 0.14
- Same proportional increases for double and triple versions
So I've been chewing at game design to figure out how to best improve the game and address the issues in the previous post. So here's the basic plan for getting the game into a good final state.
Diplomacy
Not only is this the top requested item, it should also stop everyone being constantly at war with each other a little bit, engaging in little back-and-forth battles. Diplomacy needs to have concrete gameplay effects, though. If all you did was declare war when you wanted to fight and sue for peace when you didn't, that wouldn't actually be any different from what we have now. So diplomacy has to be about agreements, promises, and trust.
Espionage Update
Right now, espionage is a bunch of nice ideas that aren't very satisfying. Why spend cash burning down a building when you could just build a ship and use that instead? I'm still working on the details of it, but the idea is that espionage is something you can concentrate on if you like, and that will deliver results that you can't just get some other way.
AI Ship Redesign
AI fleets are meant to be varied in their appearance, strengths, and weaknesses, but this has led to some fleet designs being way better than others. The AI is also bad at fleet composition. I'm going to go over the designs and make them more even in overall power level while preserving and enhancing what makes them unique.
Fleet Movement Mechanisms
Right now, you can just send your fleet to zoom around the map, blowing stuff up. This is not how an actual war works, and it makes geography pretty irrelevant. I'm working on mechanisms to make fleet positioning and movement more restricted and more meaningful. After those four items are done, I'll have another look at resources and city upgrades. Apart from that, I'm also working intensely with a number of players to improve the balancing in combat, and there will be some new modules and monsters coming your way. All of this will take a while, of course! Right now, I'm working on an update that fixes the "low hanging fruit" of balance, gameplay, and user interface issues. Then I'll be working up to diplomacy and the required AI changes. (Slightly wonky illustrations brought to you by my attempts to learn a new drawing program. Not representative of some new art direction.)
It's been a few weeks since the release. I've squashed the immediate bugs, and while I'm generally very happy with the state of the game, it's clear that the conquest mode needs improvement.
I've gone through hundreds of recent reviews and forum threads and collected all your feedback about the conquest mode. Reading through everything that's wrong with my game was a bit... emotionally draining, but I got through it and have put together a list of the biggest issues that I think I need to address:
- Conquest starts out hard, with lots of opponents to fight, and then becomes very easy once you have a big enough fleet to steamroll everyone.
- Some enemy ship designs are very weak, and once you do have a big enough fleet, your ship designs don't matter very much.
- The mechanics around attacking, intercepting, and fleeing cause a lot of back and forth with little progress for either side in a war.
- Town defenses and counter-espionage are both expensive and not very fun.
- It doesn't really matter where you attack because all cities just give you extra income.
I have a whole bunch of ideas for how to improve all this, but I want to avoid just making a pile of additional features that buries the underlying game design flaws. So I'm now going through these ideas and figuring out how they can fit together to address the points above. I'll be making another post soon detailing my plan. In the meantime, do give me additional feedback and suggestions. Do note that there's a lot of different things I need to balance, and that your game experience may be different from others'. :)
The latest Airships update fixes a bug in the combat AI for ships. It was a rather weird and stupid bug, and so I'd like to tell you about it. I hope to entertain you and also give you a view into the game development process.
There were a lot of reports of the combat AI being very incompetent when trying to attack buildings, especially from close range. Ships would just float around unmoving instead of closing in and bringing their weapons to bear.
So I set about reproducing this problem, which turned out to be rather easy. I set up a combat of an AI grenade bomber versus a building, and the bomber completely failed to position itself.
I will explain the cause of this in a moment, but I first have to get into the detail of how combat AI works. Its main function is to evaluate possible positions for the ship to move to. For each position, it looks at how much damage it can deal from there and how much enemy fire it's exposed to. Some positions it can't get to, because something's in the way, or because they're above its service ceiling.
The other mildly confusing thing I need to mention is how the y-axis in the game's coordinate system works. It points downwards, so ships with a higher y-coordinate value are further down. And the zero point is at about 70 metres above ground. Not the most sensible way of doing things, but it just evolved that way.
I have a convenient debug view in the game that lets me see the combat AI's evaluation of all the positions it considers. In the case of the combat of the bomber versus the building, I could instantly see that it marked all the positions near the ground as unreachable. All the positions with y-coordinate greater than zero.
At this point I had a pretty good idea of what was going on. The culprit was an obscure module type value called aiMaxY. This value is used to tell the monster AI to not move too far down, because it looks weird. For example, it prevents the Aerial Jelly, which is meant to hover above your ships and attack like that, from moving all the way to the ground.
aiMaxY is set to 10000 by default, going all the way into the ground. But by looking at the debugger, I could see that the bomber's aiMaxY was actually set to 0. So the AI considered all positions where y was greater than 0 as invalid.
Now I just needed to figure out why the value was at 0 instead of 10000.
The culprit there turned out to be flipped modules. The information for flipped versions of modules is derived automatically from their un-flipped counterpart. The game does this by copying all the information and adjusting it where needed, making firing arcs point the other way, mirroring the graphical appearance, and so on.
But I had forgotten one line in this code. It didn't copy over the aiMaxY value, and instead left it at 0.
So all flipped modules would tell the combat AI to not take the ship beyond y = 0. Any airship with a flipped module had broken AI. Which was many but not all of them, making the bug appear inconsistently.
The fix was painfully easy: add that line to copy over the aiMaxY value for the flipped module. And with that one change, the AI started behaving much better!
- Crew chatter messages for planes.
- Tactical AI improvements, especially against buildings. More details in a write-up to come.
- Weapons can no longer lead shots beyond their firing arcs.
- Balanced keels vs bows.
- Bomb damage reduced by 20% and accuracy reduced.
- Spy messages now point to the city where the event happened.
- Can no longer view cities that haven't been fully infiltrated by a spy.
- Warning message when your computer can't keep up with multiplayer.
- Can no longer edit floating islands on the far side of the combat map to set traps.
- Cultists no longer accumulate infinite undead squid.
- Key configuration for edit modes now works.
- [strike]Maintenance cost for buildings is now at least $1.[/strike]
- Buildings with zero maintenance cost now have $1 maintenance cost, but modded buildings with negative maintenance (ie income) still have that negative maintenance.
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!
- Double clicking to load and save in file screens works correctly now.
- Pirates that have captured a landship they can't use no longer get stuck in an endless cycle of re-attacking.
- Strategic AI values have been tweaked.
- When reinforcements are moving towards a fleet, it will now wait for them to arrive before attacking.
- The strategic AI should be much less likely to constantly re-attack the same location.
- The strategic AI will no longer build pure boarding ships and then immediately scrap them again because they have no guns.
- Strategic conquest now starts out stopped both when starting a new game and when loading one. This only applies to single-player.
- Imperial cannon is more accurate and reloads more quickly.
- Rockets and bombs are less accurate.
- Hitting space in spectator mode no longer crashes the game.
- Fixed some rare crashes in map generation in archipelago mode.
- Small Suspendium chambers now get lift bonus from lozenge heraldic charge, like the other chambers.
- Damage that's too weak to penetrate armour now has a chance to do 1 damage based on relative strength, instead of always doing one damage.
- Spiderlings have longer "grappling hooks".
- Some AIs need bigger building designs to build.
- Robot spiders fail to board buildings sometimes.
- Repairing damaged buildings causes their position to shift into the ground.
- Melee combat AI vs buildings and low-flying ships is bad.
- Module info should show troop stats.
- Ability to flip and rotate decals and modules where appropriate.
- In rare cases, a crewman can be still part of a ship when his module is gone, causing him to appear to float in midair next to the ship.
- Muskets look identical to rifles.
- The game doesn't work if your Windows home folder has the letter ö in it.
- Some rare multiplayer desyncs.
- More balancing and AI improvements.
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.
GIF Film School
To create a GIF, select “Replay” from the main menu.
Pick a combat to replay.
You can play back the combat, and move the camera freely using the usual WASD/Arrow Keys/Right Drag to move and Scroll Wheel/+- to zoom.
You can click on the playback bar to move forwards and backwards.
To make a GIF, get the playback and camera to where you want to start.
Click the GIF button.
Click the OK button. The combat will start playing back again. It won’t be moving at full speed, but that’s just because it’s recording the GIF - the GIF will play back normally. You can move the camera during recording but note that a moving camera may be confusing to viewers. Hit the Escape key to finish recording. A 3-6 second GIF or so is good. If it’s too long, the file will be too big. The file will be saved automatically to the Desktop.
Sharing & Custom Arms
Share them on Steam, Twitter, Facebook, Reddit, Imgur, etc. The purpose of this exercise is to let people know about the game and get new players. Message me with the things you’ve posted, and you’ll be added to the giveaway. Note who gets rewards will be entirely at my discretion. Void where prohibited. Note that I may re-use your GIFs in other places to promote the game. The Call For GIFs ends at midnight GMT on Monday, August 13. OK, but what’s a custom coat of arms? Well, you can register a coat of arms for yourself in the game. The custom arms means I’ll draw a custom symbol of your choice - a heraldic charge - for you and link it with your account. Only you will be able to use it. (And yes, obviously, nothing obscene or awful, and nothing that someone else already has.) Here’s some examples:
So yeah, no super-fancy pixel art, but it’s all yours, and yours alone - and a grant of arms is the traditional reward for a service rendered.
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:
- Explosions
- Free-form ship design where you're not limited to some fixed layout
- Historically authentic heraldry
- Dragon taming
- Giant sky squid that eat your crew
- Grappling hooks
- Giant land-walkers
- An in-game editor for challenge missions
- A combat replay system that lets you re-enter the fight on either side
- Multiplayer map conquest
- Extensive modding support with more than a hundred mods, adding a huge number of extra modules and other things
- Explosions
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.
- Fixed a lighting error on turrets.
- You can now use the arrow keys and cursor to change the insertion point in text fields.
- Uploading ships to Steam now gives you the fixed list of tags, and auto-generates cost tags.
- Clearer indicator for which modules are disconnected.
- Mac Steam integration once again works, in a limited fashion. You can subscribe to workshop items but you can't publish them.
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!
- There's a problem on some graphics cards with the new flags code. I'm still working on fixing it, but I've made it so that the rest of the graphics draw properly if you're affected.
- Added a 1x1 inert filler block.
- Fixed some crashes.
- Armour masks now work with mods.
- Combat replays are now more visible.
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:
- All shots now do at least one point of damage, which means you no longer get into a situation where your weapons mysteriously don't fire.
- Module adjacency bonuses have been significantly decreased, to prevent penalising ships that aren't just flying bricks.
- Fleshcrackers now have a maintenance cost, preventing mad scientist nests from spawning an infinite number of them.
- Crew can no longer avoid being hurt by boarders by hiding behind the corpses of their fallen comrades. This should resolve problems with boarding stalemates.
- Fixed animation logic for bees, wasps and air dragoons - boarding flyers.
- Flamethrowers have a wider firing arc.
- Gatling guns' shots now wander rather than spraying around wildly.
- Increased armour HP by 50%.
- Doubled Air Hussar reload time.
- Spider legs now have a lot of propulsion power.
- Increased Suspendium Dust Tank HP.
- Fixed a mission editor crash.
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!
- There can now only be one Pirate King and Elder Dragon in a game at any given time, and they take longer to spawn.
- The AI can choose to stand aside and let pirates and dragons plunder its city rather than lose its fleet in a hopeless defense.
- The MP overlay now shows the most recent chat message next to the number of people online.
- The grand ram now renders correctly on enemy ships when zoomed out.
- The game now tells you when a save failed due to disk space issues.
- Fixed a playback divergence issue caused by ramming tree trunks.
- Made clicks and beeps obey the volume settings.
- Fixed various rare crash bugs.
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:
- Be predictable. Use the right random source across the board, and don't do stuff that relies on details of the player's computer, like the frame rate or details of memory allocation.
- Instead of directly manipulating the world, send command objects to the server, receive them back, and execute them at the right time.
- There is exactly one human player.
- That player is always the first empire on the map.
- Fights between all other empires can be quick-resolved.
- The game can be paused whenever it needs user input.
- Battles where commands are received through the multiplayer connection have exactly two human participants.
- Battles where commands are received through the multiplayer connection are not part of a bigger process. When they end, the "game" ends.
Two views of the world map, in sync. And it... actually kinda works! You can set up a game between two players, and the generated world is the same. You can send a fleet to another city and it moves in sync. The fights appear to stay in sync. Still, there probably are divergence issues, and there's a lot of things incidental to multiplayer that need to be made to work. Saving and loading, desync detection, dealing with disconnects. And the user experience is pretty rough right now: when a fight starts, players are simply yanked out of the map screen, straight into the fight.
The player on the right is fighting giant spiders while the one on the left is spectating. So this is an encouraging stage to be at, but I always knew that the hard part was going to be getting all the details right. Onwards!
A quick bugfix release.
- Move troops commands work again
- Fixed rare crash when AI uses reserves in combat
- Hitting space now toggles between stop and the most recent combat speed, instead of stop and 1x speed
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:
GIFs
While playing back a combat, you can click on the "GIF" button, and record a short GIF of the next few seconds of the fight. You can record it in full resolution, or at quarter size with anti-aliasing, and you can also do slow-motion recordings. The GIF will record until you hit escape, or until it reaches a size of 15 MB.
Replay analysis and commentary
While watching a replay, you can freely move and zoom around, pause, play back at various speeds, and move to a different part of the recording. This means you can analyse what went right or wrong in a fight. You can also record the replay as a video and do commentary, like this. You can probably do a better job of commenting than I did, in fact.
Taking control
Because the replay literally re-runs the combat, you can at any point choose to take control of one of the sides. Want to know if that defeat could have been avoided? Want to know what it felt like to be in charge of your opponent? The other side gets an AI commander, and you can re-write history.
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:
- Opt into the v9.6 beta.
- Do a multiplayer combat without mods.
- Go into Design & Fight -> Replays from the main menu, export the recording of the fight, and send it to zarkonnen@gmail.com
- I will then pick a particularly cool-looking combat and do a video commentary on it. :)
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.
- Increased rifle damage from 4 to 5 but decreased clip size to 20.
- Upgrading monster nests now keep their fleet and coat of arms.
- Having lots of monster nests no longer causes performance problems.
- Fixed pirate king income and missing upgrade warning message.
- Fixed weird stone guardian shot display.
- Fixed inability to design ships from defences.
- Fixed incorrect width of city menu when building things.
- Raid progress bar no longer overflows.
- Raid panel no longer hides weather info icons.
- Fixed incorrect reference to grenades in German crew shouts.
- Stopped particles stuck on ships from vibrating weirdly.
- Fixed scroll wheel hot areas for editor and ships list.
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:
Turtledoves
You have probably seen these float past in the background. It's frankly unkind to call these creatures monsters. They're peaceful and mostly harmless. You can simply let them be, or you can hunt them for their meat and shells.
Aerial Jellies
The giant, flying version of a Portuguese Man o'War. This one has a lot of tentacles and will rapidly devour your crew.
Cultists
These questionable clerics set up temples in remote regions and acquire followers with promises of a new morality, unshackled from common mores. Plus, they practice magic, which while rare, turns out to be real and very dangerous.
Stone Guardians
Gigantic animated stone statues that stand watch over certain sites. Are they protecting treasure or ritual sites? They come in a huge array of shapes and project glowing orbs of magical energy to pulverize your fleet. There's also two new construction options using monster-derived materials:
Shell Armour
Made from the remains of those poor turtledoves you hunted. It makes your ships float better.
Acid Spitter
Created by harvesting the acid produced by giant spiders or other... certain rare creatures. A short-range armour-penetrating weapon. To round it off, as usual, there's a bunch of bug fixes and performance improvements. And with that, we leave the dev 9 development cycle behind and get started on dev 10, focusing on strategic conquest.
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:
- More monster types for your fleet to discover and be devoured by.
- Some monster nests, after a while, will now upgrade into more powerful versions.
- Acid spitter weapon and turtle armour.
- Armoured doors.
- Various bug fixes and performance improvements.
Version 9.4.1 fixes a bunch of bugs:
- Fixed missing explosion overlay tooltip and repair ship text.
- Explosion overlay uses new explosion damage calculations.
- Zoom to fit shortcut key has been removed to no longer conflict with undo.
- Errors and warnings now move out of the way of the overlay chooser.
- Can now delete files in subfolders.
If I stopped development on Airships right now and called it done, what would you be most disappointed about?
Don't panic, I'm not doing that. But I want you to tell me what Airships with its potential fulfilled would look like to you. This may be really obvious to you. You may be thinking "well, of course he's going to add X, because X is the obvious thing that the game needs." But I can think of many different forms X can take, and I can't do them all, and you may have different ideas from me. If you tell me now, three months before development is scheduled to conclude, I can take it into account. Here's a list of things I can think of that might count as fulfilling the game's potential:
- A linear storyline of missions: I've always maintained that Airships is a toy box, not a linear experience to be played through. But I could add one on top.
- An economy system for the strategic mode: Moving from money to specific resources, adding trading and resource production.
- Much bigger maps for strategic mode: Adding minor towns to conquer, and more and bigger enemy empires.
- Many more modules: Many more weapons as well as more size and shape variations for existing modules.
- Multiplayer strategic mode: This would suffer from the problem that you'd spend the majority of time spectating on battles that don't involve you. But I could try to put it in.
- Many more options to visually customize and decorate the ships: different cosmetic appearances for armour and weapons, decorative modules like bowsprites and flags.
- Cities that are visible in the combat mode: civilian buildings for the defenses to protect, and for the attackers to destroy.
- Sea-going ships are planned, but as an expansion pack after early access concludes.
- Here is a blog post about why ground troops look hard and non-fun to me.
Om nom nom delish
- Folder support for ship designs and save games.
- Build queues for ships and buildings.
- You no longer get the cost of your ship refunded when it's finished building!
- Fixed crash when loading modded strategic game.
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:
- Wednesday, 23:00 UTC
- Friday, 19:00 UTC
- Sunday, 07:00 UTC
Not on the Airships discord yet? Here it is!
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.
Firmly planned
- Folder support for ship designs and build queues. This will be version dev 9.4.
- More monster stuff. Right now, there's some monsters like the aerial kraken that aren't used properly, and I want to fix that. Version dev 9.5.
- Updated sound effects for weapons and engines. Version dev 9.6.
- Basing the strategic map on Voronoi tiles instead of pixels, which will make it less memory-intensive, zoomable, and allow for bigger maps. Updating the enemy ship design to provide more interesting challenges. Version dev 10.
- Adding a tech tree, or revamping the bonus system in some other way, depending on player feedback I'll be asking you for soon. Also, nicer victory and defeat screens for strategic conquest. Version dev 10.1.
- Finally, making the hotkeys remappable. This comes at the end, because the re-mapper has to be constructed to correctly tell you when there's key conflicts, and for that, the rest of the game needs to be done. Version 1.0.
Nice to have
- Multi-part missions
- Even more monsters with additional code to support them, like giant owls
- A reputation system in strategic conquest mode
- A new crew animation system
- Replacing the way trees are handled to produce prettier, more tree-like trees
- Civilian buildings visible in city combat
- A detailed post-combat stats screen
- Different biomes like deserts
- Spectator mode for multiplayer
- Multiplayer battles with more than one player per side
- More achievements
- An intro sequence for the game
To explore
- Multiplayer strategic mode. I've previously repeatedly said that it won't work, and I still think it won't, but I want to verify this.
- Another cool thing I'm not going to tell you about yet in case it doesn't work...
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.
- Large blast type weapons now do splash damage. Their damage has been correspondingly reduced, as they now do damage to many tiles and not just one. The damage and splash area can be set separately, but for backwards compatibility, if the splash area is not set, a splash area is automatically calculated, and the damage is automatically reduced. This has significantly changed the balancing of the game and may need more iteration, but it should be the last major change to how combat works.
- Updated the Japanese, Chinese, Russian and French translations. They should now be a lot better and more complete, especially the French one.
- Legs, especially bipedal legs, should now be way more reliable. Carry weight calculations have changed, which means you may need to adjust the values in mods.
- Legs now actually consume coal.
- Fixed problem where smoke and explosions would no longer be properly textured after reloading mods.
- Crew shots inside ships no longer pierce through every single crew member on the target tile.
- F2 now properly hides the multiplayer overlay.
- Removed the ability to re-download your published mods for now, because Steam broke it. There will hopefully be a fix soon.
- You can now set a custom location for the game data directory. Only do this if you really need it for some reason!
- Fixed a bunch of crashes.
Hot on the heels of the previous beta, here is 9.3b1, with some major changes:
- Large type weapons now do splash damage. Their damage has been correspondingly reduced, as they now do damage to many tiles and not just one. The damage and splash area can be set separately, but for backwards compatibility, if the splash area is not set, a splash area is automatically calculated, and the damage is automatically reduced. This has significantly changed the balancing of the game and may need more iteration, but it should be the last major change to how combat works.
- Updated the Japanese, Chinese, Russian and French translations. They should now be a lot better and more complete, especially the French one.
- Legs, especially bipedal legs, should now be way more reliable. Carry weight calculations have changed, which means you may need to adjust the values in mods.
- Legs now actually consume coal.
- Fixed problem where smoke and explosions would no longer be properly textured after reloading mods.
- Crew shots inside ships no longer pierce through every single crew member on the target tile.
- F2 now properly hides the multiplayer overlay.
- Removed the ability to re-download your published mods for now, because Steam broke it. There will hopefully be a fix soon.
- Fixed a bunch of rare crashes.
After a protracted beta, version 9.2.4 is out, replacing the old multiplayer system.
- Rewrote network code to be faster and more reliable. The new network system connects to a separate server, and the old one will be shut down in a while.
- Reintroduced the multiplayer overlay. You can now seamlessly chat with other players in the multiplayer lobby while playing single-player games, designing ships, and so on.
- Timestamps for messages.
- Recent chat history when logging into the multiplayer lobby.
- Combat playback speed adjusts dynamically to keep the game running smoothly and lag at acceptable levels.
- The game now runs in the background, so you should be able to alt-tab away and have multiplayer chat, etc continue working.
- Prevented undo handling from eating up all the RAM and crashing the game.
- Fixed issue where ships would be non-loadable when they were made with a mod that uses custom bonuses.
- Prettier Suspendium chambers.
- Game stutters way less after big explosions.
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.
- Rewrote network code to be faster and more reliable. The new network system connects to a separate server, and the old one will be shut down in a while.
- Reintroduced the multiplayer overlay. You can now seamlessly chat with other players in the multiplayer lobby while playing single-player games, designing ships, and so on.
- Timestamps for messages.
- Recent chat history when logging into the multiplayer lobby.
- Combat playback speed adjusts dynamically to keep the game running smoothly and lag at acceptable levels.
- The game now runs in the background, so you should be able to alt-tab away and have multiplayer chat, etc continue working.
Addendum: beta 2
I've released a 2nd version of the beta that fixes some issues with lag.
- Fixed incorrect memory warnings.
- Can discard ships in-flight if needed to eg get rid of landships that block the fleet from moving.
- F2 now properly hides multiplayer chat.
- Prevented "AI uses player ship designs" feature from using lots of memory.
- Explanation that your registered coat of arms has no bonus.
Version 9.2.2 is the first of several updates to address multiplayer performance and stability issues.
- Massively reduced memory use for multiplayer battles.
- Removed 50000 and 100000 points options from multiplayer. Added 20000 option.
- Removed multiplayer chat overlay. It was badly written and caused crashes. A replacement will arrive in a future update.
- Reduced Aerial Hussar hit points.
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?
- The game no longer noticeably stutters/pauses whenever a city is conquered. Previously, it paused because it needed to redraw map tiles, but this is now organised better and no longer necessary.
- If you flee during combat setup, you no longer lose ships.
- The AI no longer incorrectly surrenders if it has only planes but no guns.
- The refit cost of constructions should no longer be incorrectly displayed.
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!
- Fixed more crash bugs.
- Relaxed overzealous use of rule of tincture in coats of arms.
- Monster nests are worse for your income but easier to defeat.
- Troops no longer stick to buildings they should just walk past.
- Troops no longer needlessly climb up trees.
- Short-range ships now position themselves better.
- Immobilized ships on the losing side of a battle are now lost.
- Wolfpack bonus now applied properly after saving and loading a game.
- Reduced save game size by 50%.
- Shot exhausts and emitters available to crew.
- Shots from modded crew are shown.
- Air hussars now do more damage, have a proper damaged appearance.
- Dragon and dragonrider flame no longer silent.
- Dragons and spiders are less susceptible to ramming.
- Alliances happen less often.
- Ships will target harmless enemies if there is nothing else to shoot.
- Some GUI cleanup.
- Multiplayer Hour! (see below)
- Troops and planes are now coloured on the basis of their coat of arms.
- Planes have a damaged appearance variant.
- Planes now crash rather than just exploding in midair.
- Bombers are a bit better now.
- Planes should be less likely to fly too low.
- Rewrote ship file dialog. It's a bit slower in some situations now but will no longer eat up all the RAM and cause the game to crash.
- Game tries to warn you if it runs low on memory.
- Decreased install size by about 150MB.
- Various bugfixes.
- Biplanes and triplanes are now significantly weaker.
- Added bomber planes.
- Weapon inaccuracy is now actually respected in planes.
- Planes no longer take off vertically.
- Weapons from mods are now automatically assigned to be able to shoot troops if they look suitable.
- Fixed issue where if the only door of a structure was shot off, boarders could not enter.
- Added jagged, splintery edges to places where things have been shot off.
- Fixed air hussars oscillating left/right when rising or falling.
- The AI is now more likely to use planes.
- Unarmed airfields no longer count as defeated.
- Plane modules are no longer really fragile and flammable.
- AI building designs have more anti-air weapons.
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.
Movement
The basic movement code for flying troops is rather simpler than for walking ones: they have a current position and velocity, and accelerate towards the target point. I discovered that by adjusting the target point on the basis of remaining time until arrival, they nicely accelerate and decelerate to precisely get to the target. This adjustment worked so well that the movement felt unnaturally clean, so I added an "overshoot" parameter to reduce the adjustment and make the movement more real-looking. The main difficulty for flying movement was avoiding the ground. While troops can fly past floating rocks, flying inside the ground looks wrong. But if they're targeting a small building, it's very possible that the direct line of flight would go through a hill. So they have to go above the hill rather than through it.
The system for ground avoidance looks both at the current location of the unit and at a location projected a bit into the future. If the ground is very close, the unit is forced to decelerate and pull up. If it's merely somewhat close, the unit can maintain its horizontal speed but is prevented from accelerating downwards. Both of these rules stop applying if the unit is very close to its target location. The result is that if you have some triplanes moving towards a building, they will fly low but not too low above the ground, and only make a final dive down when they're pretty much at the target. Another detail to make the movement of units more natural was to give them an initial launch velocity. An air hussar simply detaches and starts floating away, but a triplane obviously needs to take off at speed. After launching, the unit then gains increasing control over its movement in the space of a second or two. So the plane will take off in a straight line and then start curving towards its intended target.
Speaking of planes, there were two more movement details needed: one was simply preventing them from moving around inside ships. Remember that the code for triplane is basically the same as for an air sailor, and so unless told not to, it might start wandering around the ship, trying to fetch coal. The other one was to give planes a minimum horizontal airspeed. With the basic movement code, a plane that needed to turn around would come to a complete stop, flip around, and slowly start accelerating again. This both looks wrong and makes them too vulnerable to being shot down. So the plane now keeps track of an internal x-velocity and rounds this up to a minimum speed for actual movement. When turning around, it will instantly go from its minimum speed in one direction to the same speed in the other direction.
Shooting
Previously, ships could shoot other ships, and troops could shoot other troops inside the same ship. Both cases used the same shot objects, but I now had to refactor them to include several new scenarios: troops shooting ships, troops shooting other troops outside, and ships shooting troops. That last case also required some new logic in weapon modules to decide when they would fire at troops instead of other ships. Weapon modules generally make up their own mind as to where to shoot anyway, and obviously having to tell them to target individual enemy planes or boarders would be a micromanagement nightmare. I added a new parameter to weapons that indicated at what range they would fire on enemy troops. This is zero for larger weapons like cannons or rockets, but rifles, gatling guns, flak cannons, flamethrowers and grapeshot cannons I deemed small and flexible enough to target troops.
This does mean that if your ship has none of these weapons, it cannot shoot at incoming air units at all. However, it still can destroy the units' mothership and win the fight. Troops, even planes, don't count as having an undefeated ship in the battle, so if you blow up the plane's carrier, you win even if you're still being swarmed by a dozen planes you can't shoot down. You can't conquer a city with some planes, after all, and they'll run out of fuel soon enough. A side effect of this new code is that ordinary boarders like marines and grenadiers can now also be shot down while moving towards ships, giving players more options to block boarding attempts.
Navigation and Targeting
With aerial units able to move around and shoot at things, they still need to know where to move and what to shoot. In the case of flying boarders like giant bees or air dragoons, this is pretty simple: they move towards the closest entry point on the ship they want to board.
Flying attack units, on the other hand, do strafing runs. They pick a particular horizontal line across the target ship and fly past it, firing at the target. Then they turn around and do another run. In case their target is too close to the ground, they do a strafing run above it, as close down as they can get.
Biplanes, as specialized anti-air units, also directly intercept other flyers, moving to strafe them in preference to attacking ships.
Balancing
With all of this implemented, there remains the work of carefully balancing these additions. Each new thing in the game has to fit within the available tactical options. The intent is that Air Hussars are fairly powerful even against decently armoured enemy ships, but easy to shoot down. Triplanes are much harder to shoot, but their guns are weak against armour. Finally, Biplanes are even harder to shoot and even weaker against anything that has any armour at all, but excellent for shooting down other troops, both boarders and fliers. So ships with enough anti-air weaponry should do well against fliers, but a lightly armoured ship only armed with cannons would be very vulnerable against them. As with anything in the game, fliers should be powerful in some situations and weak in others. While I can require a coat of arms bonus for specific modules in strategic combat, in multiplayer, all modules are generally unlocked, so they still need to be balanced against each other. I can't lock away an overpowered option, so everything does have to be balanced against everything else.
The new release is currently in beta, and this balancing is ongoing. Currently, planes appear to be a bit too powerful, so they'll get downgraded in the next beta, and we'll see how that goes. Your input both in terms of balance and finding bugs is always appreciated. The next release, 9.3, is planned to be about a few specific long-running quality of life issues: splash damage from explosions and explosive weapons, build queues in strategic mode, and maybe improvements to in-combat ship movement.
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:
- Crashes
- Balance problems
- Things that are hard to understand
- Bad GUI
- Weird AI behaviour
- Things you just plain dislike and would like to be different
- Rifles, Gatling Guns, Flak Cannons, Grapeshot Cannons and Flamethrowers can now shoot at boarders and other small units. This should serve to make boarding less overpowered.
- Added: 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.
- Added: Triplanes, fast-moving heavier than air flying machines. Strong against light-armoured ships, and a bit better at dodging anti-unit weapons.
- Added: 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.
- Added: 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.
- Added: Giant Bees! Huge Floathives full of delicious Floathoney, defended by swarms of bees that will go into your ship and sting your crew to death.
- Added: Clockwork Wasps! Kind of like giant bees, but mechanical.
- Massive performance improvements for boarding troops.
- Boarding troops should no longer get stuck, unable to navigate to an entry hatch on a ship. They might still end up marooned on a floating rock or the ground with no path to their target.
- Updated audio system with proper sound loops. Part of an ongoing process to improve the SFX quality in the game.
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:
- You will need Java installed on your machine for this.
- Find the game's JAR file. On Windows and Linux, this is in the install directory as game.jar. On Mac OS X, you have to inspect the contents of the application package and find Airships.jar.
- From the command line, invoke the following command: java -Xmx64m -cp Airships.jar com.zarkonnen.airships.Server
- New audio system: sounds loop better, move around better, and can shift in volume and pitch. (Note to modders: this means you have to update how sounds for engines and Suspendium chambers are specified, sorry.)
- Reworked the way modules catch fire. Small arms are no longer much better at causing fires than big ones.
- Reworked the way fire spreads. Fire is now much more likely to spread between modules that are connected by a door.
- More messages pop up in the bottom left to inform you of various things like incoming torpedoes and fog.
- Added option for fullscreen window mode in the resolution settings.
- Button for disabling all mods at once.
- Dragon fire arc increased from 60 to 90 degrees.
- Heavy cannon reload time decreased from 8 to 6 seconds.
- Collisions between big ships do more damage.
- Night is a bit less dark yet.
- Saved combats now store the mods the combat used. Opening a combat will load in the correct mods.
- Brigands and mad scientists no longer spawn in road-less nest locations.
- Fixed some crashes and improved some minor GUI stuff.
- There are now instructions in the install directory for running your own multiplayer server.
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.
GUI Features
- GUI scaling: The game's user interface will now pick from three different sizes based on the size of the screen or window. You can also override the automatic scaling in the settings.
- Scroll bars now have scroll thumbs that indicate the visible area.
- More clever module search in the editor. Search using multiple words or by initialism, e.g "hea ca" or "hc" for Heavy Cannon.
Bug Fixes
- Fixed crew job assignment bug that causes crew to repeatedly pick up and then abandon ammo and coal jobs.
- Fixed lighting system bug if screen was resized mid-game.
- You can now set a custom multiplayer server address in launch_settings.json.
Modding
- Difficulty levels and map sizes are now moddable. Note that super-huge maps may require very powerful computers!
- Removing modules with mods once again works, even if they're referenced by ConstructionAffinities.
Balancing
- Grapeshot cannons are slightly more accurate.
Performance
- Approximately 20% CPU performance improvement for combats.
- Up to quadruple CPU performance improvement in very large battles versus AI opponents.
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:
- Tell me what you expect to happen: the cannon should be reloaded.
- Tell me what actually happens: the cannon does not get reloaded.
- Give me a simple and reliable way to see the problem for myself: a ship design where this reliably happens every time.
And indeed, after the initial salvo, crew members started walking to get ammo, only to stop and return to their posts, over and over again. Once a problem can be reproduced reliably, the next step is to try and reproduce it in as simple a way as possible. The Pale Mare 2 was a huge ship. It would be hard to pick out the exact problem from all the activity going on in the ship. The working hypothesis was that this problem only happened in very long ships, so I constructed the HMS Longcat:
This ridiculous design was much simpler but still as long as the Pale Mare 2. If the problem appeared here too, it was likely that length was the actual culprit. If it did not happen, perhaps it was related to the overall size of the ship instead. And indeed, it happened again. Next, I rebuilt the HMS Longcat into the HMS Shortcat, a ship with essentially the same modules, but more compact.
And behold, the problem went away! Crew started fetching ammunition perfectly reliably. There was one last thing to test before I started digging into the code: was the problem related to the overall length of the ship, or to the length of the part of the ship actually accessible to the crew? Given that the problem could be related to pathing, maybe the pathing failed if the crew-accessible area was too big? This resulted in the HMS Shortcat with a Tail:
And the problem was back! Simply attaching a long line of struts to a ship caused the bug to reappear. It was time to put in some logging. I started logging cases where a crewman abandoned a task for any reason, to see if I could catch them abandoning the ammo-fetching. And indeed, the log rapidly filled up with messages that crew kept on abandoning ammo jobs. I improved the logging to indicate the reason why a task was abandoned, and it told me that the ammo fetching got abandoned because there was another, much more important task to be done. So I homed in on that case and added logging to indicate the nature of these more important tasks, and the relative priority values of the old task and its replacement. Now these priority values are meant to be roughly between 0 and 1. A task with priority 1.0 is super-important and must be done immediately, while one with a priority less that 0.1 is something an air sailor can do if there's nothing else to do. Which is why I knew things had gone a little wrong when I got the following log message:
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:
- ship, the ship the job is in
- self, the module it's for
- type, the module's type
- n, the number of the job
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.
Finding your way around
To get started with modding, you first need to find two folders: the game install directory and the local AirshipsGame directory. If you're using Steam, you can find the install directory by right-clicking on "Airships: Conquer the Skies" in your Steam library, choosing "Properties", going to the "Local Files" tab and clicking on "Browse Local Files...". If you're not using Steam, the install directory is wherever you put it. The local AirshipsGame directory is where the game stores user data, such as ship designs, saves, and also mods.
- On Windows, it's at %APPDATA%\AirshipsGame.
- On Mac, it's at ~/Documents/AirshipsGame.
- On Linux, it's at ~/.airshipsgame.
Setting up the mod
So let's start creating our peasant uprising mod. Go to the local AirshipsGame directory, into the "mods" directory, and create a new directory called "peasant_revolt". To make Airships recognize "peasant_revolt" as a mod, it needs to contain an info.json file. Create this file inside the mod directory, and put in the following text:
{
"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:
- id: Each mod has an ID that should be unique. The ID and directory name should be the same. If you want to make sure that mod IDs don't conflict, prefix your ID with your name, e.g "zarkonnen_peasant_revolt".
- name: The human-readable name for the mods screen and Steam workshop. Mods support multiple languages, but you can just stick to English here.
- description: The mod's detailed description that will be shown in the mods screen and in the Steam workshop.
Once you've created that file, you can start up Airships, and the mod will be recognized and loaded in. It just doesn't do anything yet. The other piece of information the mod needs is a logo image. I wrote at the top that this tutorial needs no graphical skills, so how are you going to get that image? Simple: steal from the great masters of the past, who lived in an age before perpetual copyright. A quick Wikipedia search for "peasant revolt" yields this page and this image from 1470, which we can use for the mod.
The logo image needs to be a 512x512 pixel PNG file. Open the image in an image editor (Paint will do), and crop out a 512x512 pixel area. Save it as "logo.png" in the mod directory. Mod directory contents:
Ships and buildings
Now it's time to produce the actual content of the mod. Let's start out by creating the ships and buildings for the peasants. This peasant revolt is going to have a small headquarters, barely more than a shack, and field some very small and low-tech ships. To create those, we can use the in-game editor as normal. Create a HQ building, something like this:
and save it as "Peasant HQ". And then some very small and weak airships, like this:
and save them as "Peasant Balloon I" and so on. And maybe a marginally more powerful ship, "Peasant Flagship":
and some tanks, "Peasant Tank I", etc:
Now, go into the local AirshipsGame directory, into the "ships", "landships" and "buildings" subdirectories, find the saved constructions, and copy them all into a new directory in your mod called "monsters". This will allow the game to find them for use by the monster nest. Mod directory contents:
The monster nest
Now it's time to create the main piece of information in this mod: a new MonsterNestType. Create a "MonsterNestType" directory in your mod, and create a new file called peasants.json in it. Instead of typing out all the information for the monster nest, let's just copy-paste the one for brigands from the game data and adjust it. (The brigands nest entry is in "nests.json" in "MonsterNest" in the game data directory.) Mod directory contents:
So to start out with, your file should look like this:
[
{
"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: The name of this monster nest. Right now, this has the same name as the existing brigands monster nest, so any changes we make would override the brigands. For example, if we wanted to make brigands more likely to appear, we could change the spawnWeight to 50 and otherwise keep everything else the same. But we want to create a new type of nest, so we change the name to "peasantRevolt".
- heraldicStyle: This determines what coat of arms the monster nest will have. In the case of nonhuman monsters like dragons, this is irrelevant and can be left off. It's a reference to another data type, HeraldicStyle. We'll change it to "peasant", and create a peasant heraldic style in a bit.
- spawnWeight: How likely this type of nest is to appear. 20 is about normal, so we'll leave it at that.
- needsRoad: Some monster nest sites have roads leading to them, others don't. If the monster nest has ground units, it makes sense that it needs a road. Our peasants do, so we'll leave that at true. Dragons, for example, have this set to false.
- income: How much money the nest makes on its own accord. This needs to be balanced carefully. The maintenance cost of the nest's buildings and ships is subtracted from this, and the difference accumulates over time, letting the nest build more things. If this value is too low, the nest cannot grow, but if it's too high, it will grow too quickly and too large. Given our peasants are fairly weak opponents, let's reduce this to 20.
- mapImage: The image displayed on the strategic map for this nest. The information here means that the image comes from the "ui" spritesheet (ui.png in the "images" directory in the game data directory), and is the 16x16 rectangle at x = 208, y = 368 - which is an arm holding a scimitar. For our peasants, we want a different image, but for simplicity's sake, we'll grab one from the "ui" spritesheet as well, which has a whole lot of different 16x16 icons. Let's pick the rat icon - whoever is drawing your map doesn't think much of the peasants. Change x to 96 and y to 384.
- mapBackground: The background image for the map image. This is drawn first with the same colour as the map background before the mapImage is drawn in an ink colour. Here, we can just use the same image as above.
- mapFleetImage and mapFleetBackground: The image drawn for a moving fleet sent by this monster nest. Again, let's just use the same rat image as above.
- baseConstructions: The ships and buildings the monster nest starts out with. These names reference the ships and buildings you put into the "monsters" directory. So instead of a "Brigand HQ" and "Brigand Raider I", we want a "Peasant HQ" and "Peasant Balloon I". (Or whatever you called your constructions.)
- additionalConstructions: Once the nest has accumulated enough money to build a new thing, it will pick something from this list and build it. So this is where you put the names of all the ships and landships you made for the mod.
- incomeModifierPercentage: If this nest is within the land claimed by a city, how much it reduces the income of that city, in percent. Let's leave this at 10%.
- homeFleet: What constructions stay at home when the fleet goes out raiding? Well, in our case, obviously the Peasant HQ, because it's an immovable building.
- minAttackFleetStrength: The minimum value of the nest's fleet before it goes out raiding. The higher this is, the longer it will build up forces before attacking. Let's leave this at 300.
- attackRadius: How far away from the nest will its fleet travel to raid cities, in pixels. Let's leave that at 400 also.
- rewards: Once a monster nest has been defeated, the game picks one of a list of rewards for the player. With the brigand nest, the player finds a small stash of loot worth 200 gold. (There's also a reward of two reputation points, which currently don't do anything.) Quashing a revolt by angry, impoverished peasants is unlikely to yield any loot (or make you more popular), so let's rename the reward to "peasantRevoltDefeated" and take out the lines about money and reputation. Your reward is just that they stop bothering you, and that you no longer have that -10% income on your city.
[
{
"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"
}
]
}
]
Heraldry
Next, we need to create that heraldic style we referenced. So create a HeraldicStyle directory in the mod and create a peasant.json file. Again, we'll use an existing entry and modify it, so if you go into styles.json in the HeraldicStyle directory in the game data directory, you can grab the heraldic style used by brigands as a base. Mod directory contents:
Your file should now look like this:
[
{
"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: The name of the heraldic style. This needs to be "peasant" so that the reference from our new monster nest works correctly.
- ruleOfTincture: Whether the generated heraldry should obey the "Rule of Tincture". This is an important heraldic rule that states that "metals" - silver and gold - must not be next to other metals, and "colours" - like red, black, green - must not be next to other colours. Brigands don't care about this kind of thing, but our peasants are traditionalists, so let's set this to true.
- firstChargeShouldHaveBonus: Whether the first charge (symbol) in the generated coat of arms should be one that provides a bonus to cities. Since the brigands have no cities, this is irrelevant, and is hence turned off. We can leave it set to false for the peasants too.
- layouts: The heraldic layouts used. These vary from simple options like CHARGE (a symbol on a background) to complex ones like QUARTERLY, which is four different symbols arranged 2x2. You can see the names of layouts by looking through styles.json in the game data, and you can try out the layouts in the coat of arms editor when creating a new strategic game. Here, let's pick "CHARGE", "COUNTERCHARGED", "ON_BEND", "ON_BEND_SINISTER", and "SALTIRE", which are some fairly simple and strong choices.
- charges: The heraldic charges used. Charges are heraldic symbols. Again, you can see their official names by looking at styles.json and their appearance by trying them out in the editor. The brigands have pretty violent symbols. For our peasants, who are simple, traditional folk just out for some justice, we want different ones. Let's pick the following ones: "TOWER", "SCALES", "TREE", "SUN", "WOLF", "BOAR", "FLOWER", "CRESCENT", and "GOUTTE". (A goutte is a drop, like a tear drop or a drop of blood. Some of the official names of heraldic charges are in a weird antiquated quasi-French. Don't blame me, blame the centuries-old tradition of heraldry.)
- layoutTinctures and chargeTinctures: The tinctures (heraldic colours) that can be picked for the different elements of the coat of arms. You can specify different sets of tinctures for the symbols and for the rest of the arms. Again, the brigands are heavy on the red and black and brown. For our peasants, let's pick a slightly different colour scheme: "ARGENT", "OR", "BLEU_CELESTE", "GULES", "VERT", and "AZURE" for both layouts and charges. (That's silver, gold, sky blue, red, green and blue in heraldic quasi-French.) Note that because we turned on the Rule of Tincture, we must have both metals (silver and gold) and colours (sky blue, red, green, and blue) available, otherwise the game won't be able to make a coat of arms that uses those colours and satisfies the rule.
[
{
"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.
Images and text
Now we're nearly done! There are two things remaining to complete the appearance of our revolting peasants: the image the player gets when clicking on the monster nest, and the text snippets about it. First, the image. The game expects to find a 400x300 image of the same name as the monster nest type to illustrate the nest for the player. Let's again use the picture we used for the mod's title image, cutting out a suitable 400x300 area. Create an "images" directory in the mod and save the image as "peasantRevolt.png".
Finally, we need to create a file containing the text the mod uses. There's a gotcha here: in the game data, these files are in the "lang" directory, but in mods, they're in the "strings" directory. So create a "strings" directory with a file called "en.properties". This lets the game know that this is the file containing the extra English text for the mod. If you wanted to e.g add a French translation, you could also add a "fr.properties" file. Properties files are text files that map the names of text snippets to the actual text. Each line starts with the name of a text snippet, followed by an equals sign, followed by the text snippet. The names of the snippets are automatically derived from the entries in the game. For the monster nest we created, we need the following snippets:
- peasantRevolt_displayName: The label of the monster nest on the map.
- peasantRevolt_occupation: The message shown when the monster nest first turns up.
- peasantRevolt_description: The detailed description the player gets when they click on the nest.
- x_defeats_peasantRevolt: The message shown when a player or AI defeats the monster nest.
- peasantRevoltDefeated: The message shown with the "peasantRevoltDefeated" reward. Each reward has a text snippet like this with the same name as the reward.
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.
Testing and release
And now we're done! The entire mod directory structure should now look like this. The "generated" directory is automatically created by the game when it loads in the mod to store some extra information.
What remains is testing and fine-tuning. You can start up the game again, and the mod should load in. If you create a new strategic game, the peasant nests can turn up. If you want to make sure that you can see some quickly, temporarily increase the spawnWeight in the MonsterNestType file to 1000, which means that almost all monster nests will be peasants. Just remember to reduce it back to 20.
If the mod fails to load, have a look at your files and check that they contain the same information as the examples. Check that the ships and buildings references in the monster nest are available in the "monsters" directory in the mod. A ship called "Peasant Balloon II" should have a "Peasant Balloon II.json" file. If you think that you made a mistake somewhere in your JSON, you can use JSONLint to check it through. Once you are satisfied with the content and balance of your mod, you can upload it to Steam using the mods screen in-game, or export it as a single .amod file to import and share it on the forums. This is only an introduction to modding. To figure out how to do more, have a look at the game data files and at other people's mods. I also made a short text tutorial on adding a weapon and an in-depth video one. Try things out, experiment, and learn how to do cool new stuff. And if you have any questions, you can always contact me and I'll be happy to help. And if you found any part of this tutorial unclear or confusing, do also let me know, so I can improve it.
- New module: Grapeshot Cannon, a powerful short to medium range weapon.
- You can now launch the game if Steam is in offline mode.
- Fixed a failure to clean up de-subscribed Steam subs.
- Bombs need more ammo now.
- Alliances now get better names.
- Fixed some crashes.
- Mod support for multi-shot weapons and varying shot speeds.
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:
- Prevented the No Suspendium mod from messing up mod loading. (Yeah, that's my own mod. Oops.)
- Fixed a crash during strategic mode.
- Fixed a crash post-combat if the combat was over immediately.
- Mod loading was taking a very long time (looking as if the game had crashed) under some circumstances. This should now be fixed. If you are still encountering the problem, go into %APPDATA%AirshipGame and delete the "steam" directory, then start up the game again. It will re-download your workshop subscriptions and should then function normally.
- Fixed a bunch of in-combat crashes.
- Fixed a crash when disabling a mod.
- No, you can't have weapons with 0 reload time. :)
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
Monsters and Monster Nests
Apart from cities, the strategic map now contains monster nests, remote locations within city territories where a variety of menaces can take hold. Occupied nests reduce the income of the city, and some of them also conduct periodic raids, damaging the city and carrying away loot that lets them grow faster.
When your city is being raided, a bar appears at the top of the screen during combat indicating how badly the city has been looted. The sooner you can get the raiders to retreat, the better. Ideally, you wipe out the raiders entirely so they can't carry home the loot.
Monster nests grow over time, and the only permanent solution is to send a fleet to wipe them out. You will have to do so to strengthen your empire. And what are those monsters like? To answer this question, I have prepared a bestiary entry for each of them, scattered throughout this post. Bestiary: Pirates
Alliances
As conquests proceed and empires begin to dominate, weaker states will now band together into alliances, seeking to match the strength of their opponents. This means that getting a head start on conquest is no longer enough to win, as the remaining cities will unify against you, keeping the outcome of the game in the balance for longer.
When two empires merge, the new alliance has a coat of arms that incorporates the arms of its constituents, according to proper heraldic rules. Bestiary: Fleshcrackers
Missions
Players can now create and share custom challenges. Each mission is a combat scenario against some opponents, using either a fixed fleet, a budget to put together your own, or a mixture of the two. You can edit every aspect of the scenario, including the weather, terrain, heraldry and the intelligence of the opponent. Monsters can be placed into missions, and the entire thing is compatible with mods: you can create missions that use mods, and you can put missions into your mods to showcase your additions.
Missions can be shared via Steam workshop or exported as files, and unlike modding, no external tools are needed to create them. So you can create missions as simple as "I made a ship, can you beat it within this budget", or as complex as a finely tuned and landscaped battle making extensive use of mods. Bestiary: Dragons
Music
This update adds five new tracks by Curtis Schweitzer, played to accompany particular monsters.
Additional Improvements
The lighting system has been updated to use ambient light, giving the graphics a more unified look. Damage to external parts such as sails and chimney is now more visible.
The ship editor now supports undo/redo and has a new overlay indicating the paths crew can take. In general, the GUI's been refined based on player feedback.
The game loads a lot faster, by about a factor of five. This is done by using uncompressed graphics, which also means the install size is somewhat larger, but still pretty moderate. Boarder pathing and leg placement have been improved, and airships no longer timidly brake to avoid harmless collisions. Your crew will now occasionally pop up in the bottom left corner during combat to express their feelings. Bestiary: Giant Spiders
Next Steps
With this major release out, what's next? There's a bunch of monsters that didn't make the cut which I'll be adding over the next weeks and months, creating bestiary entries as they appear. I also want to improve support for small monsters like the spiderlings. Bestiary: Addenda
After that comes the final major development cycle before release, dev 10, where I'll be concentrating on further detail and balance for conquest as well as rounding out some other features. As always, the GUI, tutorial, and balance will be undergoing refinements. And then, version one point zero!
Beta 12 is out! Also, dev 9 will officially release this Friday!
- New music by Curtis Schweitzer!
- Landships no longer randomly fall over when reaching their destination.
- Ships that were set to "Hold Fire" no longer instantly shoot a huge number of rounds.
- Placing land blocks no longer repeatedly charges you for the same block.
- Suspendium tanks once again visible in editor.
- Fixed ordering of external module elements when looking at ship inside.
- Updated Chinese, Japanese and Russian translations. (Thanks!)
- Reduced monster nest strength.
- Empire mergers now less frequent and less intrusive.
- Made tutorial a bit clearer and more reliable.
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.
Dimidiation
The most traditional way of combining two arms is to simply cut them in half and put them next to each other. This practice, called Dimidiation, eventually fell out of favour because it can produce quite confusing results - but also quite pretty ones.
Impalement
Dimidiation was mostly replaced by impalement - not the bloody painful kind, but rather the practice of putting the entirety of both arms next to each other. It's called impalement because they're separated by a pale, a vertical line.
Note that the game simplifies the arms as it combines them, which isn't something that happened much in real-life heraldry. But the game's heraldry system doesn't support arbitrarily deep nesting - even I drew the line at that!
Quartering
No, not the bloody and painful kind either. Subdividing the field into four equal parts. This allows for up to four arms to be combined, of course, but in the case of two, the first one gets the top left and bottom right, and the second one the top right and bottom left. Note that in all of these there still is an order of precedence - arms on the left or top left are more important than others.
Other Combinations
In some cases, the heraldry system can't use the above methods, mostly if one or both of the initial arms lack a heraldic charge. Instead, it seeks to combine them in some other way. If one arms has a charge and the other does not, it produces a new arms with the charge of the one and the tinctures of the other.
And if neither arms has a charge at all, it chooses either the pattern they both share, or the pattern neither of them uses, and does its best to combine the tinctures.
Larger Alliances
But what happens when a third, fourth, fifth empire chooses to shelter under the wings of this new alliance? For alliances up to size four, the system uses quartering.
From size five onwards, it simply picks a new, unrelated, and relatively simple arms and sticks with that.
As you can see, the overall intent is to simulate the kind of discussion and horse-trading that would happen during the formation of an alliance. This is of course a detail, but quite a pleasing one. Next up will be a look at the heraldry of pirates, brigands, and other ne'er do wells.
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. :)
- Pirates and brigand nests!
- Some monsters now attack your cities, looting them more and more if you can't push back the attack.
- Small empires now merge into alliances, which should make the endgame more interesting.
- Better AI for short-ranged ships.
- Moved ship edit errors into own area for better visibility.
- Various graphical fixes.
- Destroyed Suspendium tanks now look better.
- Fixed multiplayer network desync.
- Fixed crash when entering new strategic game setup.
- Fixed crash in monster list.
- Fixed file screen crash caused by invalid ship.
- Fixed file screen crash caused by hitting up-arrow too quickly.
- Fixed crash when confirming construction from defences screen.
- Fixed mech-spider pathing crash.
- Can now press K to toggle remove tool in construction editor.
- Bonuses are now (somewhat) moddable, so you can add new ones for your new modules and armours.
- HP penalty for large constructions is now indicated as a warning, and is moddable.
- Fixed problem where loading mods in dev 9 would cause them to need to be regenerated in dev 8 every time.
- Sped up game loading times. Note that speed-up benefits may only materialize on second launch. Note this might cause graphical errors. If things go weird colours or stop displaying after this update, or if loading actually takes longer, please tell me.
- Mad scientist lairs with Fleshcrackers and Death Rays.
- Bumping against screen edge to scroll is now optional. Existing users are asked if they want to keep or disable this functionality.
- Multiplayer games now have a 3-second countdown before they start, so that the second player to declare ready has a moment to prepare.
- Better calculation of victory/defeat in combat, I hope.
- Confirm dialog for exiting from unfinished combat, and for exiting from the game altogether.
- Buttons now more clearly show their shortcut keys.
- The ship command buttons now show their shortcut keys below.
- Non-graphics-related changes to mods will no longer cause the game to re-process all its graphics, making mod development faster.
- Can now add monsters to missions.
- Better crew boarder pathing.
- Only showing applicable module and armour types in the filter list.
- Button click sound for big buttons. Made click sounds quieter.
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.
- Undo-redo in the ship editor
- Fixed bug where tracked landships were unable to move
- German translation is up to date again
- Can no longer incorrectly have bunks in landships and airships, only berths
- Fixed incorrect display of some soldier limbs
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.
- "It sure is cold outside tonight."
- "The price of wheat has risen."
- "The Clyptrastian Empire must pay for their crimes."
- "When do you get off duty?"
So what can I do as a game developer to make them immersive rather than annoying? Make them sparse, make them relevant, and make them varied. The system I constructed works in two stages: the combat checks for particular conditions to occur and generates "interesting events". The crew message system then goes through those events, checks whether they're clearly visible to the player, and matches them against crew lines. So for example, if a crewman is snatched up by a kraken tentacle, this generates an event called "grabbedBy SQUID" at the location of the crewman.
The message system applies the following checks:
- Is the event within the field of view of the player? That is, within the center 70% of the screen, horizontally and vertically.
- Is the player zoomed in enough to see what's going on? For some messages, there's also a maximum zoom level, so if you're looking at a detail, it will ignore events that are about the combat as a whole.
- Is there a fitting crew line to deliver? It can partially match against event names, so if there's a line specific to being grabbed by a kraken, that would match against "grabbedBy SQUID", but there can also be a fall-back for being grabbed by some other kind of tentacle that matches against anything starting with "grabbedBy".
- Has the same crew line already been delivered in the same combat? You don't want the same message to pop up each time someone has an encounter with a tentacle.
- Is there another crew line already visible, or was there one very recently? Forcing the lines to be spaced out a bit prevents them from being too visually distracting.
The following events are currently tracked and can create crew lines:
- Overall victory and defeat.
- A large explosion.
- Destruction of the largest ship in a fleet.
- Large numbers of boarding casualties.
- A ship is about to intentionally ram another.
- A ship is about to heavily crash into or be rammed by another.
- A ship is about to crash to the ground at speed.
- The enemy has some unusual units, such as monsters.
- One side is much stronger than the other at the start of the battle.
- A module is about to explode.
- A ship is captured.
- A crew member is grabbed by a tentacle.
- A crew member grabbed by a tentacle is devoured.
- A crew member is killed by a boarding monster, such as a black widow spider.
- A ship is hooked by a giant spider's web.
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!
- Commanders and crew now occasionally pop up in the bottom left to deliver contextual messages.
- New GUI for selection groups in combat, visible by pressing ctrl.
- Fixed crash in combat related to tracked landships.
- Increased ram and grand ram hit points.
- Tracks now actually need to touch the ground to be able to propel their ship.
- Fixed a crash in the ship editor.
- Save shortcut in strategic menu is now V, and Send Spy shortcut is now P.
- Eased off the large ship HP penalty - ships up to about 4000 weight now have full HP, after which it cuts in.
- Modules now don't instantly explode but rather spend some time "about to explode".
- Legs now get initialized correctly at the start of combats. No more landships and spiders crashing to the ground with tangled legs as combat starts.
- Introduced an outer zone in the combat map where things cannot be placed to start with.
- If you have a custom heraldic charge, you can now use it in strategic conquest mode, but you'll have to combine it with another charge to get a bonus.
- Fixed a problem where ships colliding with trees would fail to damage the trees, remaining stuck.
- Aerial torpedoes now require two ammunition per shot. This also lets modded super-guns have more balanced ammo consumption.
Beta 6! GUI improvements!
- Generated landscape is smoother.
- Game remembers which module categories were open.
- Remove button now separate from item list in ship editor.
- Damaged monsters now look noticeably injured, and die more dramatically.
- Propellers, sails, and large chimneys now indicate damage level.
- Module fragments now rendered with lighting.
- Improved leg placement and balance logic.
- Pathing overlay in editor, which gets automatically shown if ship is disconnected.
- Can now choose which construction types are allowed in multiplayer combat.
- Module search results now alphabetically sorted.
- Can no longer use normal crew as boarders.
- Game remembers multiplayer game name.
Dev 9 beta 5 is out, fixing a bunch of crash bugs, re-balancing, and adding a new monster variant.
- Added giant black widow spiders.
- Added stars at night.
- Struts now work less well to reinforce constructions and ram things.
- Actual rams now do more damage than just ramming with some other module.
- Large ships (weight 3000+) now suffer an increasing HP penalty due to lack of structural integrity. This can be partially offset by keels.
- Monster nests should no longer grow indefinitely.
- Monster nests are now placed more evenly.
- Fixed crash caused by missing spritesheet variant. Specifically, the Karda's Weather System mod no longer crashes the game on low graphics settings, it just doesn't look quite right.
- Moving a very small building no longer causes a crash. This may also improve stability in general.
- Made particle drawing faster.
- Refit/repair costs are now calculated correctly.
- Fixed inability to open ship designs from Steam.
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.
Features
- Air sailors in buildings have been replaced by soldiers. Quarters and berths have been replaced by barracks and bunks. Soldiers are tougher than air sailors, which should make buildings harder to defeat by boarding. (This last part may still need work.) (Also, do let me know if the substitution causes any problems, like crew not switching types, or being left in a weird state.)
- Right/middle click and drag to move view.
- WASD to move view. This also means that some shortcuts that were previously on those keys are now elsewhere. In particular, Save is now V and Start is now T.
- Added tutorial about commanding multiple ships.
- Spider legs (both biological and mechanical) now have an extra joint and move a bit better.
- Harpoon charge for coats of arms.
- Cut tether command button.
- New launch config to force system cursor.
Changes
- Reduced the income bonus from scales to 15%, but also actually implemented it. (Yeah. Turns out scales did not actually give you any bonus. Oops.)
- Improved lighting system to vary ambient colour and saturation depending on time of day.
- Modules at the bottom of a building are a bit stronger now.
- Cities being pacified with a fleet present can no longer revolt.
- Monster nests don't pop up again as quickly anymore.
- Can now save incomplete missions, just not play them.
- Can now move ship to other side in combat setup where appropriate.
- Improved positioning and landship tutorials.
- Ships no longer bother braking if the predicted impact is harmless, which means giving movement commands to ships in tight spots should be less frustrating now.
- Circular range limit available for weapons.
- Saw weapon now has better range calculation and a much wider arc.
Bugfixes
- Improved job assignment logic for crew, which should prevent crew members from getting stuck in a loop switching between two different jobs, doing neither.
- Can now save ships with non-ASCII characters in their names.
- Fixed strategic screen ship tooltip display.
- Fixed weird tentacle movement when attacking ship hull.
- Landships no longer completely lose their footing when turning around.
- No longer showing unavailable modules like monster body parts in the ship filter dialog.
- The resolution choices in the setting screen no longer incorrectly claim that their shortcut is ENTER.
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.
Release Date
My short answer for the release date is "When it's done. Sometime in 2017." I'm being cagey with the exact date because, as you may have noticed, my estimates have become worse with each major milestone. I once thought I'd wrap up the game in 2015, then in 2016, so I'm pushing the release window way back in advance now. Why does this keep taking longer? The more stuff you already have in your game, the more effort it is to add new things, because the new things have to correctly work with everything that's already there. The effort required to add new things is exponential. There is one more major feature cycle planned after dev 9, upgrading the strategic campaign mode and adding a multiplayer ladder. After that, there will be several months of gearing up to the release, where I intend to do nothing else than fix bugs and improve performance, balance, and GUI.
Early Access
There are three major ways in which early access games fail to deliver, and I'd like to avoid all of them. Some games are simply abandoned mid-development as the developers run out of money, or lose interest, or are eaten by alligators. Others are rushed out of early access in a buggy unfinished state, due to money pressures, publisher arrangements, or a simple lack of interest in quality. Finally, most insidiously, some games like being in early access far too much, and make no effort to ever leave. Exciting new features are added regularly, but old bugs are never addressed. For the developers, the game's selling fine in early access, so why rock the boat? I want none of this for Airships. I aim to finish the game, not endlessly add semi-working features, and I aim to release it reasonably bug-free and balanced. Of course there will be updates after the 1.0 release, but they should be bug fixes and minor adjustments, not the addition of major features missing from the game at release.
Expectations
I want to be clear about what will be in the game, and what not. The danger of talking to players about your game, as I love to do, is that you get enthusiastic and start mentioning all kinds of cool possibilities. These cool possibilities can get perceived as promises. So I've generally tried to be clear my language and not make promises I can't keep, but it's not a perfect process.
Roadmap
So here is a list of all the major features that will get added between now and version 1.0. If something is not on this list, it may not happen. Even if it would be really cool, even if I talked about it with great enthusiasm. That being said, if I did explicitly promise you a feature not on this list, please tell me! While I keep notes, it's perfectly possible I've forgotten.
Dev 9 (soon)
- More harpoon weapons
- Fleshcracker robots
- Pirates
- Cultists
- Monster nests that attack cities
Dev 9.x (in 2016)
- Quick try-out mode for your ship designs
- Flying troop types / "mini-airships"
- Suspendium bees
- Area of effect / splash / explosion damage
Dev 10 (in 2017)
- A partial rewrite of the strategic conquest. I'm currently working on the design for this.
- A multiplayer ranking system
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:
- Monsters: Dragons, Giant Spiders, Sky Krakens
- Monster nests in conquest mode
- Modules: Dragonriders, Harpoon Guns and Dragonhide Armour
- Ability to create missions in-game. You can set up a combat between particular opponents, or let the player choose their own fleet. Missions can also use mods, and you can put missions into mods. (I'll do a whole post on the mission editor in a bit.)
- Performance improvements and bug fixes.
- More monsters
- Monster nests actively attacking empires
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.
- Which ones have you tried?
- Which ones are too strong / too weak / boring?
- Ideas for new bonuses that make for an interesting change in play style?
Anvil
Steel armour absorbs 50% more damage
Boar
+30% HP for tracked landships
Crown
Conquered cities have no pacification period
Dragon
Dragonriders (in dev 9)
Eagle
All cannons are twice as accurate
Eye
Spy actions are 50% cheaper and 50% more likely to succeed
Gear
Mech Spiders
Guillotine
Revolting cities join your empire
Lion
50% faster reload in boarding combat
Mountain
+30% lift from suspendium chambers
Ram
Grand Ram
Rat
Injured crew members move at full speed
Scales
+25% income from cities
Spider
Spider legs and arachnid boarding soldiers
Star
Aerial torpedoes
Tower
+50% stone wall HP
Tree
+20% wooden armour and module HP
Waves
Fires put out twice as quickly
Wheel
Ships ready for commands twice as fast
Wolf
Small landships require half maintenance and move faster on the map
Wrench
Repair 50% faster
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
- Fixed crash while resolving AI-AI battles in conquest mode.
- Fixed crash during Chinese language conquest tutorial.
- Fixed multiplayer desync.
- Improved performance for wheeled landships.
- Ship AI no longer bumps up against the right side of the combat area while trying to get into position.
- Module prices now include the cost of their armour.
- Weapons now state the range at which they are accurate.
- Decreased deck gun reload from 2.4 seconds to 2.1 seconds.
- Increased grenade range from 21m to 24m, clip size from 3 to 6, and decreased reload from 5 seconds to 3 seconds.
- Increased Suspendium cannon accuracy by 40% and doubled shot speed.
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.
New features
- Chinese and Japanese translations!
- Aerial torpedoes: devastating but slow-moving and with a limited field of fire and a minimum range.
- Ship paint that adapts to the coat of arms of the ship's owner.
- Hold fire command.
- Explosion damage overlay in ship editor.
- Doubled the width of the combat map and increased ships' service ceiling by a third.
- Can drag the right mouse button to pick up multiple modules in the editor.
- The strategic AI now aborts attacks and reinforces its cities when needed. If an attack on a city fails, it will build up its fleet, so the next attack will be stronger.
- Can place multiple ships of the same type in one go during combat setup.
- Can now press X to flip the selected module.
- File screen now remembers your filter and sort settings and indicates when items have been filtered out.
- Quarter-speed option for combat.
- Weapon targeting no longer picks target tiles that are too well-armoured to damage.
- Ships try harder to target enemies that are close enough to hit.
- Can choose higher cost limits for multiplayer combat
- though note this may do bad things to performance.
- Can now mod the music used by the game.
- Airships now automatically specify what mods they use in their description.
- You can now add tags to mods and ships in Steam.
- Incremented save version. Saves in 8.2 are incompatible with earlier versions because the size of the combat area has changed.
Balance
- Cities in strategic mode generally have a bit more money, leading to bigger ships faster.
- You can no longer go into debt in strategic mode, but you can't move fleets while you have no money, and you are more susceptible to enemy spy actions.
- Buildings are now 20% cheaper to build and 30% cheaper to maintain.
- Increased deck gun reload from 1.8 seconds to 2.4 seconds, and increased accuracy by 20%.
- Increased dorsal turret and ventral turret accuracy by 20%.
- Decreased saw blade cost from $80 to $50.
- Increased gatling gun reload from 96 ms to 125 ms.
- Increased heavy cannon damage from 120 piercing to 150 piercing and reload from 7 seconds to 8 seconds.
- Increased suspendium cannon damage from 55 piercing to 75 piercing, reload from 3.5 seconds to 4 seconds, and accuracy by 20%.
- Increased brick wall damage absorption from 0 piercing, 0 blast to 2 piercing, 1 blast.
- Increased stone wall damage absorption from 1 piercing, 1 blast to 3 piercing, 2 blast.
- Increased massive stone wall damage absorption from 2 piercing, 2 blast to 4 piercing, 4 blast.
- Decreased cannon fire arc from 90 degrees to 70 degrees, and increased accuracy by 20%.
- Increased rocket fire arc from 180 degrees to 210 degrees, and increased accuracy by 30%.
- Increased rifle reload from 1 second to 1.3 seconds.
- Increased guard HP from 6 to 7 and damage range from 1-7 to 2-8, and increased number of guards from a guard barracks from 3 to 4.
Fixes
- Combat performance improvements.
- Landships no longer randomly stop moving because they're afraid they'd collide with their own feet.
- Refitting a ship now centers on it properly.
- The AI in conquest mode now actually has affinities for different styles of ship.
- Scrolling no longer causes random clicks in Linux.
- Fixed a bug where the info panel in the ships screen would report the wrong price.
- Fixed world generation crash.
- Fixed a crash caused by modding crew members.
- Correct bonuses now applied when loading a ship into the editor.
Cosmetic
- Prettier, tidier maps.
- Prettier, tidier fleet list.
- Made ship colours look better.
- Fixed blurry rendering of legs and tracks in the load/save ship screen.
- Fixed secret police text overlapping with bonus text in strategic screen.
- Crew walking on top of a ship no longer flicker.
- Legs are now split into ones in front of and behind the ship, and rendered accordingly.
- Better-looking explosions for exploding weapons.
- Shots can now be animated, and are lit using the lighting engine like everything else.
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:
- The word "torpedo" originally referred to stationary mines, rather than self-propelled warheads. "Damn the torpedoes, full speed ahead", actually referred to mines.
- The Mark-14 Torpedo used by the US Navy through most of World War II was infamously unreliable. In particular, the warhead tended not to detonate when hitting the target’s hull straight on. Since this was considered the “best” way of hitting the target, the harder submarine crews tried to get the torpedo working, the more likely it was to fail.
- Also in World War II, Japan fielded human-guided torpedoes, an underwater version of the better-known Kamikaze planes. While neither fate sounds pleasant, given the choice, I’d rather ride to my destruction in a plane than in a claustrophobic underwater metal tube, thank you very much.
- Finally, in the 60s, Russia developed a high-speed torpedo called Shkval, which is driven by rockets and creates a bubble of gas around itself to minimize drag.
If this looks a bit like a funeral at sea, that’s because it pretty much is. Anyway, version 8.2 is currently in beta, and barring any surprises, should be out this weekend.
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.
New features
- Japanese translation!
- Aerial torpedoes: devastating but slow-moving and with a limited field of fire and a minimum range.
- Ship paint that adapts to the coat of arms of the ship's owner.
- Hold fire command.
- Explosion damage overlay in ship editor.
- Doubled the width of the combat map and increased ships' service ceiling by a third.
- Can drag the right mouse button to pick up multiple modules in the editor.
- The strategic AI now aborts attacks and reinforces its cities when needed. If an attack on a city fails, it will build up its fleet, so the next attack will be stronger.
- Can place multiple ships of the same type in one go during combat setup.
- Can now press X to flip the selected module.
- File screen now remembers your filter and sort settings and indicates when items have been filtered out.
- Quarter-speed option for combat.
- Weapon targeting no longer picks target tiles that are too well-armoured to damage.
- Ships try harder to target enemies that are close enough to hit.
- Can choose higher cost limits for multiplayer combat
- though note this may do bad things to performance.
- Can now mod the music used by the game.
- Airships now automatically specify what mods they use in their description.
- You can now add tags to mods and ships in Steam.
Balance
- Cities in strategic mode generally have a bit more money, leading to bigger ships faster.
- You can no longer go into debt in strategic mode, but you can't move fleets while you have no money, and you are more susceptible to enemy spy actions.
- Buildings are now 20% cheaper to build and 30% cheaper to maintain.
- Increased deck gun reload from 1.8 seconds to 2.4 seconds, and increased accuracy by 20%.
- Increased dorsal turret and ventral turret accuracy by 20%.
- Increased saw blade fire arc from 60 degrees to 160 degrees, and decreased cost fromn $80 to $50.
- Increased gatling gun reload from 96 ms to 125 ms.
- Increased heavy cannon damage from 120 piercing to 150 piercing and reload from 7 seconds to 8 seconds.
- Increased suspendium cannon damage from 55 piercing to 75 piercing, reload from 3.5 seconds to 4 seconds, and accuracy by 20%.
- Increased brick wall damage absorption from 0 piercing, 0 blast to 2 piercing, 1 blast.
- Increased stone wall damage absorption from 1 piercing, 1 blast to 3 piercing, 2 blast.
- Increased massive stone wall damage absorption from 2 piercing, 2 blast to 4 piercing, 4 blast.
- Decreased cannon fire arc from 90 degrees to 70 degrees, and increased accuracy by 20%.
- Increased rocket fire arc from 180 degrees to 210 degrees, and increased accuracy by 30%.
- Increased rifle reload from 1 second to 1.3 seconds.
- Increased guard HP from 6 to 7 and damage range from 1-7 to 2-8, and increased number of guards from a guard barracks from 3 to 4.
Fixes
- Combat performance improvements.
- Landships no longer randomly stop moving because they're afraid they'd collide with their own feet.
- Refitting a ship now centers on it properly.
- The AI in conquest mode now actually has affinities for different styles of ship.
- Scrolling no longer causes random clicks in Linux.
- Fixed a bug where the info panel in the ships screen would report the wrong price.
- Fixed world generation crash.
- Fixed a crash caused by modding crew members.
- Correct bonuses now applied when loading a ship into the editor.
Cosmetic
- Prettier, tidier maps.
- Prettier, tidier fleet list.
- Fixed blurry rendering of legs and tracks in the load/save ship screen.
- Fixed secret police text overlapping with bonus text in strategic screen.
- Crew walking on top of a ship no longer flicker.
- Legs are now split into ones in front of and behind the ship, and rendered accordingly.
- Better-looking explosions for exploding weapons.
- Shots can now be animated, and are lit using the lighting engine like everything else.
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...
- Fixed issue where mods would fail to be disabled/reset when needed.
- You can now choose the time of day in single combat setup.
- Map generation now needs way less RAM. (About 160 MB less on a medium map.)
- Can now see folders in import ship dialog.
- Can no longer send blank messages in lobby chat.
- Fixed de-sync at start of multiplayer combat.
- Decals now flip with the ship if appropriate.
- Fixed error message when reloading mods.
- Fixed crash in mods screen.
- Fixed rare crash while sorting files.
- Hopefully fixed issues with starting game from Steam on some Windows machines.
- Better handling of mod loading failures.
- Mods no longer cause crashes when they try to set reload or animation interval to 0, or when they have no ID.
- More robust networking.
- Prevented players for using some special characters in ship names that would lead to crashes or failures to save. (Turns out you can't put question marks into Windows file names.)
- Can now use Cyrillic letters for ship names.
- Fixed text rendering problem that would put each character of a long word on its own line.
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:
-
128: shiny metallic things -
92: normal things -
48: dull or recessed things
-
255: pointing straight up -
192: pointing slightly up -
128: pointing towards the player -
64: pointing slightly down -
0: pointing straight down
-
255: pointing straight left -
192: pointing slightly left -
128: pointing towards the player -
64: pointing slightly right -
0: pointing straight right
could have the following bump map:
The box is a more bluish colour than the surrounding area, because it's made of metal. Its top is more red, because it's facing upwards, its bottom is less red, its left is more green, and its right is less green. Or the same image could be a cylinder with this bump map:
The best way to work with Airships' graphics is to install the GIMP image editor( (yes, that's its name) and use the mod graphics template file for it. This lets you easily edit each colour channel of the bump map separately and then combine them. But i that whole talk of channels doesn't make sense, you can also just think of the bump map as a simple image with a set of colours. Here is a complete overview of the colour values that appear on bump maps:
So to create a properly lit piece of art for Airships, you need to create both a 1024x1024 pixel spritesheet and a bump map of the same size that tells the game how to light the spritesheet. Beyond that, if you want the graphics to fit with the rest of the game, you should use the game's graphics palette:
This is a fairly simple palette, but remember: these are only the base colours of things. All the light and shadow in the game derives from the bump map. So, for example, if you want to make a machine with some panels, don't draw this:
Draw this:
And then use this bump map, and the lighting system will take care of it:
One last thing needs covering: fragment maps. These are specific to module and armour tile graphics and are used to indicate how a module or tile will break apart into pieces. Each contiguous area of the same colour turns into one fragment, and white areas are ignored. So, for example, if the machine from above has a fragment map like this:
it will break apart into two halves, with the tank going one way and the machine going the other. Or if the fragment map is like like this:
its panels will fall off independently, the rest of the machine will shatter into bits, and the tank will break in half. Adding fragment maps to your modules will make destroying them look way more awesome, which is why you should do it.
Once you have these three images for your mod, you combine them into a "Spritesheet Bundle", by creating a file in your mod's SpritesheetBundle directory that looks something like this:
More on that in this tutorial video. I hope this was a useful infodump. Go forth and mod, and feel free to message me with questions!
Version 8.1.4 is out, with the following improvements:
- Fixed crash on joining multiplayer game.
- More resilient against mods with missing graphical resources.
- Fixed some failures to reload graphics when loading mods.
- New, faster, hopefully more reliable multiplayer server.
- Suspendium cannon now has a continually animated barrel.
Version 8.1 hath dropped, bringing fixes, improvements, and giant sawblades to chop apart your enemies.
Changes
- New melee weapon: sawblade. Does a lot of damage at very close range.
- Strategic mode now auto-saves every 5 minutes.
- Debris lasts a lot longer.
- Multiplayer setup now defaults to all mods disabled.
- Weapon barrels are now drawn at correct angles across the board.
- Improved ship tactical AI for close-range weapons.
- Mods with missing graphics now refuse to load.
- Grenades can no longer be thrown arbitrarily high up.
- Ships that can't be loaded are now greyed out in ships list.
- Fixed jitterMerge behaviour. Flamethrower and gatling shots now tend to hit the same target repeatedly, which makes them more powerful!
- Support for weapons that don't require ammo.
- New modding options for animated barrels.
- New modding option for separate weapon clip reload.
- Weapons now explicitly specify the recoil they produce when firing.
- Graphics are now updated correctly when mods re-generate graphics.
- Fixed crash when landscaping.
- Fixed boarding pathing crash.
- Fixed ship display crash caused by names containing invalid letters.
Important notes for modders
- Mods with SpriteSheetBundles pointing at nonexistent images now refuse to load. If your mod stops working in v8.1, check if your SSBs are set up right.
- Previously, the ship recoil force (the amount of force by which the ship gets pushed back) was calculated automatically. It's now explicitly specified in the ModuleType as "recoilForce". If you have a cannon-type module in your mod, you should probably set this value. The standard formula is penDmg * 0.03.
- Weapon barrels can now be animated. See the new SAWBLADE module for an example. You can have both looping animations that run for a certain amount of time when the weapon fires, or per-shot animations that go through the whole animation cycle when the weapon fires.
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.
Mods
Most of the game's data now resides in external files, which can be overlaid with mods. You can create new module types, new weapons, and new types of crew members. You can also change the game balance by changing existing values, or change the way the game looks. If you'd like to get started on modding, have a look here and here], and also feel free to ask questions, including "help, my mod doesn't work, could you have a look at it". There's also a player-made modding guide in progress. You can get mods by subscribing to them in the Steam workshop. Here are some example mods I created:
Imperial Cannon
This impractically large bronze cannon does enough damage to destroy smaller modules in one hit.
No Suspendium
This mod re-balances the game by getting rid of all modules involving Suspendium, the crystal that gives airships lift. Instead, it introduces hydrogen and helium tanks, which are much larger and more fragile.
Steel UI
Changes the appearance of the game's user interface from a wood-and-gold look to a more compact steel one.
Steam workshop integration
If you have a ship design you want to share and show off, you can upload it from the ships list with a single click. It will appear in the workshop for others to subscribe to. If you're not using Steam, you can also just export the ship file and share it with others.
Deck Gun
This medium-sized piece of weaponry has a firing arc that spans from slightly pointing down to almost pointing up. It does a lot of damage for its size and price, but because it's an external module, you can't protect it with armour.
Engine Pod
Another external module. The Engine Pod needs free space both in front and behind, which limits its placement options, but it's far more powerful than a normal propeller.
Spider Bay
A nest of robotic murder-spiders. You can send these machines to board enemy ships. They're very tough and dangerous, but note that they can't take over ships, only wreak havoc.
Selection Groups
A new helpful feature suggested by a player: in combat, you can now hit control and a number key to store your current selection of ships, and just the number key to retrieve it.
Auto-Landscaping
Ever since the terrain changed from a perfectly flat plain to an actual landscape, placing buildings has been kind of annoying. You had to manually edit the terrain to produce a stable base to put the building on. I've now automated this process: when you place a building, the game will automatically adjust the terrain to make it properly supported. Importantly, this even works in multiplayer setup (though note that you have to pay for the landscaping). And it works for the AI in strategic mode, which makes it more capable of building defences.
Russian!
And yes, the game now has a Russian translation, joining English, German and French as the supported languages. (BTW, you can create new translations as mods too.)
Full Change List
New Features
- Data-driven modding system: you can add new modules and other content, and change existing information. Mods are compatible with conquest mode and multiplayer.
- Steam workshop integration: share ship designs and mods.
- Multiplayer chat overlay that’s available everywhere in-game.
- Automatic adjustment of landscape when placing buildings.
- Unit groups: press ctrl and a number to store the currently selected set of units, press the number to select them again.
- Russian translation
New Modules
- Robot spiders
- Engine pods
- Deck guns
Fixes
- Combat now waits until the victory/defeat situation has stabilized before announcing a result.
- Troops no longer massacred by wheels and feet of nonmoving landships.
- Cancelling constructions is now correctly priced across the board: 25% of costs already spent, 100% of the rest.
- Command refresh now scales with time properly.
- Fixed a bug where starting, exiting and rejoining a multiplayer game would lead to an inability to start the game, or to desyncs.
Adjustments
- Rifles consume much less ammunition.
- Rockets are a bit more accurate.
- Ships break up more epically.
- Boarders are better at jumping.
- Adjusted relative speeds of ship movement, construction and income in conquest mode.
- Increased light armour HP by 50% to make them more competitive.
- Flamethrower now more powerful, gatling gun less powerful, more expensive but also a bit more accurate.
- Cleaner look for module and decal list in editor.
Hey! Beta 6 is out. There will probably be a beta 7 tomorrow, and then the release the day after.
- Fixed a bug where starting, exiting and rejoining a multiplayer game would lead to an inability to start the game, or to desyncs.
- Cleaner look for module and decal list in editor.
- Better error message when opening a ship design that contains modules from a mod that's not loaded in.
- Mods can no longer crash the game so easily.
- Barracks are now named "Marine Barracks".
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.
- Beta 1: Crashed on launch
- Beta 2: Crashed when opening the ships list
- Beta 3: Crashed when using multiple mods in combat
- Beta 4: Crashed when viewing a ship using multiple mods
- Combat now waits until the victory/defeat situation has stabilized before announcing a result.
- Modules are now displayed alphabetically in the editor again.
- No longer connecting twice to multiplayer if the overlay is on and you enter the lobby via the main menu.
- You can now specify ships, buildings and landships for the player's use in mods.
- Mods screen now has better error reporting for when parsing of JSON files goes wrong.
- Moved all the images and sounds to the data folder, which both makes the game easier to understand for modders and should lead to generally smaller update downloads.
- Fixed crash when rendering ships using two mods at once.
- Multiplayer chat overlay button now blinks if there's unread messages.
- Rams are considered external modules again.
- Bigger, longer-lasting multiplayer messages.
- Uploaded ship previews are now GIFs showing both inside and outside.
- Troops no longer massacred by wheels and feet of nonmoving landships.
- Increased light armour HP by 50% to make them more competitive.
- Cancelling constructions is now correctly priced across the board: 25% of costs already spent, 100% of the rest.
- Multiline description input for uploading ships.
- Landscaping now doesn't add additional soil if there is already a stable surface.
- Command refresh now scales with time properly.
- Removed ability to rename ships in multiplayer setup because it caused network synchronization issues.
- Fixed missing flipped flamethrower.
- Flamethrower now more powerful, gatling gun less powerful, more expensive but also a bit more accurate.
- Light armours have 50% more HP to make them more competitive.
- Improved network error reporting.
- You can't add tags to mods or uploaded ships yet.
- The multiplayer server sometimes becomes unresponsive.
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?
- Data-driven modding system: you can add new modules and other content, and change existing information. Mods are compatible with conquest mode and multiplayer.
- Steam workshop integration: share ship designs and mods.
- Multiplayer chat overlay that's available everywhere in-game.
- Automatic adjustment of landscape when placing buildings.
- Unit groups: press ctrl and a number to store the currently selected set of units, press the number to select them again.
- Russian translation
- Robot spiders!
- Engine pods
- Deck guns
- Rifles consume much less ammunition.
- Rockets are a bit more accurate.
- Ships break up more epically.
- Boarders are better at jumping.
- Adjusted relative speeds of ship movement, construction and income in conquest mode.
- Various other minor UI and performance fixes.
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.
Airships: Conquer the Skies
David Stark
David Stark
2018-08-16
Action Indie Strategy Singleplayer Multiplayer
Game News Posts 306
🎹🖱️Keyboard + Mouse
Overwhelmingly Positive
(5250 reviews)
http://www.zarkonnen.com/airships/
https://store.steampowered.com/app/342560 
The Game includes VR Support
Airships Linux 53 [139.2 M]Airships Linux 64 [545.79 M]
Airships: Conquer the Skies - Soundtrack
Airships: Heroes and Villains
In the game, ships are viewed side-on, and their modules are operated by individual crew members. During combat, players give high-level commands to a small fleet, positioning their ships, ramming and boarding others. Ships and terrain are fully destructible: they can catch fire, explode, break apart, and fall. Players can also compete against one another in Internet and LAN matches.
The ships are highly detailed, teeming with sailors moving around at their individual tasks, like an ant farm or a cut-away drawing. The player's choices in ship layout are crucial, and an important part of the game is exploring the design space of different airships and their matching tactics.
- OS: Ubuntu/Debian/Mint
- Processor: 1.8 Ghz+Memory: 256 MB RAM
- Memory: 256 MB RAM
- Graphics: 1 GB VRAM+
- Storage: 1 GB available spaceAdditional Notes: Not currently compatible with Intel HD graphics controllers. May run on other Linux distros. but no guarantees.
- OS: Ubuntu/Debian/Mint
- Processor: 2.2Ghz+ Dual-coreMemory: 2 GB RAM
- Memory: 2 GB RAM
- Graphics: 2 GB VRAM+Network: Broadband Internet connection
- Storage: 1 GB available spaceAdditional Notes: Not currently compatible with Intel HD graphics controllers. May run on other Linux distros. but no guarantees.
[ 5901 ]
[ 1903 ]