Airships: Conquer the Skies cover
Airships: Conquer the Skies screenshot
Linux PC Mac Steam Gog
Genre: Simulator, Strategy, Indie

Airships: Conquer the Skies

Version 1.2.3


  • 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.

Version 1.2.2 - Diplomacy and AI, Fixes

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.

You can use this to make boarding torpedoes, zombies, and aircraft dropping paratroopers. Or, as in the title image, gatling guns that spawn bees.



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...

Hero Modding Documentation

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

logo.png should be a 512x512 PNG and info.json should look like this:

{
"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.

Fleet:
  • 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

If you have multiple captains in a fleet, only the strongest ability counts. They don't stack.

All percentage values should be integers.

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

You can also use "research" specify an amount of research generated independent of whether they're assigned anywhere.

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

Ongoing effects:
  • 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

If you want your hero to evolve into another, set up another hero entry with spawnAtStart set to false, so that their evolved form doesn't turn up beforehand.

Note that Loyalty is a bit of a special case with stats, as a hero with a loyalty stat below 25 is corruptable by spy actions. The stat that lets you have a coronation is usually Fame, and the one that lets you win outright is usually Power, but that's not hard-coded.

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.

CitySpyActions:
  • 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

RelationshipLevels:
  • WAR
  • TRUCE
  • PEACE
  • NON_AGGRESSION_PACT
  • DEFENSIVE_PACT
  • ALLIANCE

RepLevels:
  • LOVED (80-100)
  • LIKED (60-79)
  • TOLERATED (40-59)
  • DISLIKED (20-39)
  • HATED (0-19)

Incident Tags currently being used in incidents:
  • 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.

Version 1.2.1 Balance Fixes & Hero Changes

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.


These balance changes are intended to improve the difficulty curve of the game, so you may find it somewhat harder than before.

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.

Version 1.2.0.2


  • 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.

As previously noted, if you have balance feedback on heroes or abilities, do let me know.

Version 1.2.0.1 - Fixes, Settings

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've been reading people's feedback and reviews. The most common negative feedback was the heroes happen too frequently, and that in general, messages for players to deal with turn up too frequently.

During development, I was frankly worried that the DLC wouldn't have enough of an immediately noticeable impact. So I erred on the side of too many things happening rather than too few. I've now toned down the frequency of heroes a bit, and also added game setup settings that let you choose if you'd like heroes to be a rare thing, of if you'd like to play Steampunk HR Simulator 2023.

As for balancing individual heroes, that will be an ongoing process based on your feedback, so do let me know about specific heroes that you find overpowered or underpowered.

For now, I hope you continue enjoying the game!

Airships: Heroes & Villains Available Now!

I am very pleased to announce that Heroes & Villains, a DLC for Airships: Conquer the Skies, is now available!



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.

Version 1.2 - Wurms, Trebuchets, Balance

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

Heroes & Villains Design Notes

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!

Version 1.1.11.1

Fixed the AI incorrectly claiming an ultimatum was a "de facto declaration of war". Fixed some text issues.