fertig-classic-games/data/totalannihilation-rules.json

1474 lines
31 KiB
JSON

{
"_readme": [
"Engine data for Total Annihilation. Everything the simulation knows lives here \u2014 adding a unit,",
"building, weapon, terrain type, army or map theme is a JSON-only change.",
"After editing, run `node tools/verifyTotalAnnihilation.js` \u2014 it cross-checks every id reference,",
"frame index and closed key set in this file and will tell you exactly what broke.",
"",
"Sheet resolution: a unit/building's `sheetSlot` names a field on its ARMY (unitSheet or",
"structureSheet), so one unit definition renders correctly for every army. That is what makes a",
"third army a two-line change: add an `armies` entry pointing at two new sheets in",
"data/totalannihilation-artwork.json.",
"",
"Units are drawn once and ROTATED at runtime \u2014 there are no per-facing frames. `turretFrame` is",
"an optional second sprite that aims independently of the hull.",
"",
"Domains: a unit's `domain` is \"ground\" (the default) or \"air\". Air units ignore the nav grid,",
"never collide with ground units, and while AIRBORNE can only be hit by weapons listing \"air\"",
"in `targets` \u2014 so a roster with air units MUST keep some ground weapon anti-air capable or",
"there is no answer to them. That protection comes from flying, not from having wings: a landed",
"aircraft is an ordinary ground target that anything can shoot, and it cannot fire back.",
"`domain` and the unit's `moveClass` have to agree: an air unit takes a move class flagged",
"`\"air\": true`. Terrain passability comes from the move class COST TABLE, not from the terrain's",
"own `blocksMove` \u2014 that is how `hover` crosses water without a per-terrain exception.",
"",
"Armor classes are the whole balance surface: every weapon lists a multiplier for EVERY class,",
"so a roster change is a table edit rather than a code change. Two of them exist purely so a",
"counter can be expressed at all \u2014 `air` (aircraft, separate from light/medium so a weapon can",
"be lethal to planes without also being lethal to jeeps and tanks) and `fortification` (Laser",
"Tower and Missile Launcher, separate from `structure` so a weapon can specialise in cracking",
"defences without flattening generators). Adding a class means adding a key to all 12 weapons;",
"compileRules refuses to start if one is missing, which is the point."
],
"version": 1,
"constants": {
"tickHz": 20,
"tileSize": 64,
"unitCapPerArmy": 100,
"projectileCap": 400,
"startEnergy": 1000,
"startMass": 1000,
"baseEnergyCap": 500,
"baseMassCap": 500,
"pathBudgetPerTick": 8,
"retargetPeriodTicks": 10,
"engageHoldFraction": 0.45,
"siegeHoldFraction": 0.95,
"separationStiffness": 0.55,
"shoveAfterSec": 0.6,
"stuckGiveUpSec": 3.0,
"stuckRepathSec": 1.0,
"arriveSlackPx": 12,
"friendlyFire": false,
"buildPowerNominal": 100,
"eliminateWhenUnrecoverable": true,
"victoryDefault": "commander"
},
"victoryModes": [
{
"id": "commander",
"label": "COMMANDER KILL",
"desc": "Destroy the enemy Commander and the war is over."
},
{
"id": "annihilation",
"label": "ANNIHILATION",
"desc": "Fight on after a Commander falls — an army dies when it can no longer build."
}
],
"sizeClasses": {
"small": {
"radius": 16,
"footprint": 1,
"mass": 1
},
"medium": {
"radius": 26,
"footprint": 1,
"mass": 4
},
"large": {
"radius": 44,
"footprint": 2,
"mass": 16
}
},
"armorClasses": [
"infantry",
"light",
"medium",
"heavy",
"structure",
"fortification",
"air"
],
"moveClasses": {
"foot": {
"cost": {
"ground": 1.0,
"rough": 1.3,
"road": 0.85,
"metal": 1.0,
"cliff": null,
"water": null
}
},
"tread": {
"cost": {
"ground": 1.0,
"rough": 1.8,
"road": 0.7,
"metal": 1.0,
"cliff": null,
"water": null
}
},
"wheel": {
"cost": {
"ground": 1.0,
"rough": 2.4,
"road": 0.6,
"metal": 1.0,
"cliff": null,
"water": null
}
},
"hover": {
"cost": {
"ground": 1.0,
"rough": 1.1,
"road": 0.9,
"metal": 1.0,
"cliff": null,
"water": 1.0
}
},
"air": {
"air": true,
"cost": {
"ground": 1.0,
"rough": 1.0,
"road": 1.0,
"metal": 1.0,
"cliff": 1.0,
"water": 1.0
}
}
},
"armies": [
{
"id": "arm",
"name": "ARM",
"color": "#4a90e2",
"unitSheet": "arm-units",
"structureSheet": "arm-structures"
},
{
"id": "core",
"name": "CORE",
"color": "#e05a2f",
"unitSheet": "core-units",
"structureSheet": "core-structures"
}
],
"commanders": [
{
"id": "vance",
"armyId": "arm",
"opponentId": "ethel",
"name": "Commander Ethel",
"tagline": "Holds the line, and makes you pay for every metre of it.",
"aiProfile": {
"aggression": 0.45,
"expansion": 0.65
}
},
{
"id": "klaxon",
"armyId": "core",
"opponentId": "klaxon",
"name": "Unit KLAXON",
"tagline": "Efficiency is a weapon. You are an inefficiency.",
"aiProfile": {
"aggression": 0.7,
"expansion": 0.45
}
},
{
"id": "cybro",
"armyId": "core",
"opponentId": "cybro",
"name": "Cy-Bro",
"tagline": "Builds faster than you can knock it down.",
"aiProfile": {
"aggression": 0.35,
"expansion": 0.85
}
},
{
"id": "nadia",
"armyId": "arm",
"opponentId": "nadia",
"name": "Commander Nadia",
"tagline": "Hits the flank while you watch the front.",
"aiProfile": {
"aggression": 0.8,
"expansion": 0.4
}
}
],
"terrain": [
{
"id": "ground",
"ch": ".",
"frame": 0,
"buildable": true,
"blocksMove": false,
"elevation": 0
},
{
"id": "rough",
"ch": "r",
"frame": 3,
"buildable": true,
"blocksMove": false,
"elevation": 0
},
{
"id": "road",
"ch": "=",
"frame": 8,
"buildable": true,
"blocksMove": false,
"elevation": 0
},
{
"id": "metal",
"ch": "M",
"frame": 7,
"buildable": true,
"blocksMove": false,
"elevation": 0,
"massMultiplier": 2.0
},
{
"id": "cliff",
"ch": "^",
"frame": 4,
"buildable": false,
"blocksMove": true,
"blocksFire": true,
"elevation": 1
},
{
"id": "water",
"ch": "~",
"frame": 5,
"buildable": false,
"blocksMove": true,
"elevation": -1
}
],
"weapons": [
{
"id": "rifle",
"name": "Assault Rifle",
"kind": "hitscan",
"damage": 9,
"reload": 0.5,
"burst": 3,
"burstDelay": 0.06,
"range": 200,
"spread": 0.05,
"targets": [
"ground"
],
"armorMul": {
"infantry": 1.0,
"light": 0.5,
"medium": 0.25,
"heavy": 0.15,
"structure": 0.7,
"fortification": 0.55,
"air": 0.3
},
"fx": {
"style": "tracer",
"color": "#ffe6a0",
"width": 1.5,
"lifeMs": 70
},
"sound": "sfx-ta-machinegun"
},
{
"id": "pintlegun",
"name": "Pintle Gun",
"kind": "hitscan",
"damage": 9,
"reload": 0.5,
"burst": 3,
"burstDelay": 0.06,
"range": 200,
"spread": 0.05,
"targets": [
"ground"
],
"armorMul": {
"infantry": 2.2,
"light": 0.7,
"medium": 0.3,
"heavy": 0.15,
"structure": 0.5,
"fortification": 0.4,
"air": 0.35
},
"fx": {
"style": "tracer",
"color": "#ffe6a0",
"width": 1.5,
"lifeMs": 70
},
"sound": "sfx-ta-50cal"
},
{
"id": "sniperrifle",
"name": "Marksman Rifle",
"kind": "hitscan",
"damage": 70,
"reload": 2.2,
"burst": 1,
"range": 580,
"spread": 0.0,
"targets": [
"ground"
],
"armorMul": {
"infantry": 3.2,
"light": 0.35,
"medium": 0.12,
"heavy": 0.08,
"structure": 0.08,
"fortification": 0.08,
"air": 0.15
},
"fx": {
"style": "beam",
"color": "#d8f0ff",
"width": 2,
"lifeMs": 160
},
"sound": "sfx-laser-zap"
},
{
"id": "tankgun",
"name": "120mm Cannon",
"kind": "ballistic",
"damage": 145,
"reload": 2.0,
"burst": 1,
"range": 350,
"speed": 700,
"spread": 0.015,
"leadTarget": true,
"aoe": 40,
"aoeFalloff": 0.15,
"targets": [
"ground"
],
"armorMul": {
"infantry": 1.3,
"light": 1.15,
"medium": 1.0,
"heavy": 0.8,
"structure": 1.2,
"fortification": 1.1,
"air": 1.0
},
"fx": {
"style": "shell",
"color": "#ffd27a",
"width": 3,
"muzzle": 18
},
"sound": "sfx-battle-tank"
},
{
"id": "rocketpod",
"name": "Rocket Pod",
"kind": "guided",
"damage": 48,
"reload": 4.0,
"burst": 2,
"burstDelay": 0.25,
"range": 440,
"minRange": 110,
"speed": 340,
"turnRate": 2.2,
"aoe": 48,
"aoeFalloff": 0.15,
"targets": [
"ground",
"air"
],
"armorMul": {
"infantry": 0.3,
"light": 0.6,
"medium": 1.0,
"heavy": 1.4,
"structure": 1.5,
"fortification": 1.6,
"air": 2.6
},
"fx": {
"style": "rocket",
"color": "#ff8844",
"width": 2,
"trail": true
},
"sound": "sfx-ta-rocket-1",
"impactSound": "sfx-ta-rocket-2"
},
{
"id": "shoulderrocket",
"name": "Shoulder Rocket",
"kind": "guided",
"damage": 40,
"reload": 2.2,
"burst": 1,
"range": 380,
"minRange": 60,
"speed": 260,
"turnRate": 2.0,
"aoe": 24,
"aoeFalloff": 0.15,
"targets": [
"ground",
"air"
],
"armorMul": {
"infantry": 0.3,
"light": 0.9,
"medium": 1.3,
"heavy": 1.2,
"structure": 1.2,
"fortification": 1.9,
"air": 2.8
},
"fx": {
"style": "rocket",
"color": "#ff9a5c",
"width": 1.5,
"trail": true
},
"sound": "sfx-ta-rocket-1",
"impactSound": "sfx-ta-rocket-2"
},
{
"id": "commanderlaser",
"name": "Commander Laser",
"kind": "hitscan",
"damage": 38,
"reload": 1.1,
"burst": 1,
"range": 260,
"spread": 0.01,
"targets": [
"ground"
],
"armorMul": {
"infantry": 1.3,
"light": 1.0,
"medium": 0.8,
"heavy": 0.6,
"structure": 0.5,
"fortification": 0.45,
"air": 0.8
},
"fx": {
"style": "beam",
"color": "#9ff0c8",
"width": 3,
"lifeMs": 120
},
"sound": "sfx-laser-zap"
},
{
"id": "dgun",
"name": "D-Gun",
"kind": "beam",
"damage": 2000,
"reload": 1.5,
"burst": 1,
"range": 220,
"energyPerShot": 500,
"targets": [
"ground"
],
"manual": true,
"armorMul": {
"infantry": 1,
"light": 1,
"medium": 1,
"heavy": 1,
"structure": 1,
"fortification": 1,
"air": 1
},
"fx": {
"style": "dgun",
"color": "#8ad4ff",
"width": 9,
"lifeMs": 260
},
"sound": "sfx-scifi-launch"
},
{
"id": "towerlaser",
"name": "Heavy Laser",
"kind": "hitscan",
"damage": 52,
"reload": 0.4,
"burst": 1,
"range": 340,
"spread": 0.01,
"targets": [
"ground"
],
"armorMul": {
"infantry": 1.4,
"light": 1.2,
"medium": 0.9,
"heavy": 0.55,
"structure": 0.4,
"fortification": 0.35,
"air": 1.0
},
"fx": {
"style": "beam",
"color": "#a8e8ff",
"width": 4,
"lifeMs": 140
},
"sound": "sfx-laser-zap"
},
{
"id": "towermissile",
"name": "Guided Missile",
"kind": "guided",
"damage": 135,
"reload": 1.5,
"burst": 1,
"range": 620,
"minRange": 180,
"speed": 320,
"turnRate": 2.0,
"aoe": 56,
"aoeFalloff": 0.15,
"targets": [
"ground",
"air"
],
"armorMul": {
"infantry": 0.35,
"light": 0.7,
"medium": 1.1,
"heavy": 1.5,
"structure": 1.3,
"fortification": 1.2,
"air": 2.8
},
"fx": {
"style": "rocket",
"color": "#ffb15c",
"width": 2.5,
"trail": true
},
"sound": ["sfx-ta-rocket-1", "sfx-ta-rocket-2"]
},
{
"id": "aacannon",
"name": "Air-to-Air Cannon",
"kind": "hitscan",
"damage": 44,
"reload": 1.6,
"burst": 3,
"burstDelay": 0.12,
"range": 300,
"spread": 0.02,
"targets": ["air"],
"armorMul": {
"infantry": 1.0,
"light": 1.0,
"medium": 0.85,
"heavy": 0.6,
"structure": 0.2,
"fortification": 0.2,
"air": 1.0
},
"fx": {
"style": "tracer",
"color": "#ffe89a",
"width": 2,
"muzzle": 16,
"lifeMs": 70
},
"sound": "sfx-ta-50cal"
},
{
"id": "bombrack",
"name": "Bomb Rack",
"kind": "ballistic",
"damage": 190,
"reload": 6.0,
"burst": 2,
"burstDelay": 0.35,
"range": 160,
"speed": 240,
"spread": 0.05,
"aoe": 96,
"aoeFalloff": 0.3,
"targets": ["ground"],
"armorMul": {
"infantry": 1.1,
"light": 1.0,
"medium": 1.0,
"heavy": 0.85,
"structure": 1.6,
"fortification": 1.5,
"air": 1.0
},
"fx": {
"style": "shell",
"color": "#ffb15c",
"width": 3,
"muzzle": 8
},
"sound": "sfx-scifi-launch",
"impactSound": "sfx-ta-nuclear"
}
],
"units": [
{
"id": "commander",
"name": "Commander",
"role": "builder",
"isCommander": true,
"size": "medium",
"radius": 20,
"hp": 7000,
"selfHeal": {
"fractionPerMinute": 0.33,
"pauseAfterDamageSec": 30
},
"speed": 62,
"turnRate": 3.5,
"moveClass": "foot",
"armorClass": "heavy",
"sight": 420,
"cost": {
"energy": 0,
"mass": 0
},
"buildTime": 0,
"buildPower": 100,
"buildRange": 200,
"builds": [
"energygen",
"massgen",
"barracks",
"vehicleplant",
"lasertower",
"missilelauncher",
"airfield",
"radar"
],
"produce": {
"energy": 25,
"mass": 3.0
},
"storage": {
"energy": 1000,
"mass": 1000
},
"weapons": [
"commanderlaser",
"dgun"
],
"deathExplosion": {
"radius": 280,
"damage": 1200
},
"sheetSlot": "unitSheet",
"frame": 0,
"turretFrame": 1,
"procShape": "commander",
"icon": 0,
"spritePx": 56
},
{
"id": "infantry",
"name": "Infantry",
"role": "combat",
"size": "small",
"radius": 16,
"hp": 260,
"speed": 55,
"turnRate": 6.0,
"moveClass": "foot",
"armorClass": "infantry",
"sight": 260,
"cost": {
"energy": 120,
"mass": 24
},
"buildTime": 2,
"builtBy": [
"barracks"
],
"weapons": [
"rifle"
],
"sheetSlot": "unitSheet",
"frame": 2,
"procShape": "infantry",
"icon": 1,
"spritePx": 30,
"moveSound": "sfx-march"
},
{
"id": "sniper",
"name": "Sniper",
"role": "combat",
"size": "small",
"radius": 16,
"hp": 130,
"speed": 46,
"turnRate": 5.0,
"moveClass": "foot",
"armorClass": "infantry",
"sight": 500,
"cost": {
"energy": 260,
"mass": 55
},
"buildTime": 6,
"builtBy": [
"barracks"
],
"weapons": [
"sniperrifle"
],
"sheetSlot": "unitSheet",
"frame": 3,
"procShape": "sniper",
"icon": 2,
"spritePx": 30,
"moveSound": "sfx-march"
},
{
"id": "rockettrooper",
"name": "Rocket Trooper",
"role": "combat",
"size": "small",
"radius": 16,
"hp": 150,
"speed": 50,
"turnRate": 5.5,
"moveClass": "foot",
"armorClass": "infantry",
"sight": 280,
"cost": {
"energy": 220,
"mass": 45
},
"buildTime": 5,
"builtBy": [
"barracks"
],
"weapons": [
"shoulderrocket"
],
"sheetSlot": "unitSheet",
"frame": 10,
"procShape": "rocketTrooper",
"icon": 6,
"spritePx": 30,
"moveSound": "sfx-march"
},
{
"id": "jeep",
"name": "Jeep",
"role": "scout",
"size": "small",
"radius": 20,
"hp": 480,
"speed": 175,
"turnRate": 3.4,
"moveClass": "wheel",
"armorClass": "light",
"sight": 520,
"cost": {
"energy": 320,
"mass": 70
},
"buildTime": 8,
"builtBy": [
"vehicleplant"
],
"weapons": [
"pintlegun"
],
"sheetSlot": "unitSheet",
"frame": 4,
"turretFrame": 5,
"procShape": "jeep",
"icon": 3,
"spritePx": 40,
"moveSound": "sfx-engine-medium"
},
{
"id": "tank",
"name": "Tank",
"role": "combat",
"size": "medium",
"radius": 26,
"hp": 1900,
"speed": 90,
"turnRate": 2.2,
"moveClass": "tread",
"armorClass": "medium",
"sight": 300,
"cost": {
"energy": 700,
"mass": 180
},
"buildTime": 20,
"builtBy": [
"vehicleplant"
],
"weapons": [
"tankgun"
],
"sheetSlot": "unitSheet",
"frame": 6,
"turretFrame": 7,
"procShape": "tank",
"icon": 4,
"spritePx": 54,
"moveSound": "sfx-engine-heavy"
},
{
"id": "rockettank",
"name": "Rocket Tank",
"role": "artillery",
"size": "medium",
"radius": 28,
"hp": 1050,
"speed": 75,
"turnRate": 1.8,
"moveClass": "tread",
"armorClass": "medium",
"sight": 320,
"cost": {
"energy": 1100,
"mass": 300
},
"buildTime": 28,
"builtBy": [
"vehicleplant"
],
"weapons": [
"rocketpod"
],
"sheetSlot": "unitSheet",
"frame": 8,
"turretFrame": 9,
"procShape": "rockettank",
"icon": 5,
"spritePx": 56,
"moveSound": "sfx-engine-heavy"
},
{
"id": "constructor",
"name": "Construction Vehicle",
"role": "builder",
"size": "medium",
"radius": 24,
"hp": 700,
"speed": 85,
"turnRate": 2.4,
"moveClass": "tread",
"armorClass": "light",
"sight": 340,
"cost": {
"energy": 500,
"mass": 140
},
"buildTime": 14,
"builtBy": [
"vehicleplant"
],
"buildPower": 90,
"buildRange": 180,
"builds": [
"energygen",
"massgen",
"barracks",
"vehicleplant",
"lasertower",
"missilelauncher",
"advancedvehicleplant",
"airfield",
"radar",
"advancedradar",
"radarjammer"
],
"sheetSlot": "unitSheet",
"frame": 11,
"procShape": "constructor",
"icon": 7,
"spritePx": 50,
"moveSound": "sfx-engine-heavy"
},
{
"id": "fighter",
"name": "Fighter",
"role": "combat",
"domain": "air",
"size": "small",
"radius": 22,
"hp": 820,
"speed": 290,
"turnRate": 3.0,
"moveClass": "air",
"armorClass": "air",
"sight": 620,
"cost": {
"energy": 900,
"mass": 160
},
"buildTime": 16,
"builtBy": [
"airfield"
],
"weapons": [
"aacannon",
"pintlegun"
],
"flight": {
"height": 26,
"takeoffSec": 0.45,
"landSec": 0.7,
"overshoot": 420,
"keepout": 700
},
"sheetSlot": "unitSheet",
"frame": 12,
"procShape": "fighter",
"icon": 8,
"spritePx": 46,
"moveSound": "sfx-engine-fast"
},
{
"id": "bomber",
"name": "Bomber",
"role": "artillery",
"domain": "air",
"size": "medium",
"radius": 30,
"hp": 1350,
"speed": 215,
"turnRate": 1.7,
"moveClass": "air",
"armorClass": "air",
"sight": 560,
"cost": {
"energy": 1700,
"mass": 440
},
"buildTime": 30,
"builtBy": [
"airfield"
],
"weapons": [
"bombrack"
],
"flight": {
"height": 30,
"takeoffSec": 0.7,
"landSec": 1.0,
"overshoot": 540,
"keepout": 700
},
"sheetSlot": "unitSheet",
"frame": 13,
"procShape": "bomber",
"icon": 9,
"spritePx": 60,
"moveSound": "sfx-engine-heavy"
},
{
"id": "hoverconstructor",
"name": "Hover Constructor",
"role": "builder",
"size": "medium",
"radius": 24,
"hp": 760,
"speed": 115,
"turnRate": 2.8,
"moveClass": "hover",
"armorClass": "light",
"sight": 360,
"cost": {
"energy": 640,
"mass": 175
},
"buildTime": 16,
"builtBy": [
"airfield"
],
"buildPower": 100,
"buildRange": 190,
"builds": [
"energygen",
"massgen",
"barracks",
"vehicleplant",
"lasertower",
"missilelauncher",
"advancedvehicleplant",
"airfield",
"radar",
"advancedradar",
"radarjammer"
],
"flight": {
"height": 9,
"takeoffSec": 0.35,
"landSec": 0.5
},
"sheetSlot": "unitSheet",
"frame": 14,
"procShape": "hoverConstructor",
"icon": 17,
"spritePx": 52,
"moveSound": "sfx-engine-medium"
}
],
"buildings": [
{
"id": "energygen",
"name": "Energy Generator",
"footprint": {
"w": 2,
"h": 2
},
"hp": 2440,
"armorClass": "structure",
"sight": 160,
"cost": {
"energy": 200,
"mass": 60
},
"buildTime": 12,
"produce": {
"energy": 20
},
"storage": {
"energy": 500
},
"deathExplosion": {
"radius": 110,
"damage": 160
},
"sheetSlot": "structureSheet",
"frame": 0,
"buildFrame": 1,
"procShape": "energyGen",
"icon": 10,
"idleAnimation": true
},
{
"id": "massgen",
"name": "Mass Generator",
"footprint": {
"w": 2,
"h": 2
},
"hp": 2260,
"armorClass": "structure",
"sight": 160,
"cost": {
"energy": 600,
"mass": 50
},
"buildTime": 16,
"produce": {
"mass": 2.0
},
"upkeep": {
"energy": 15
},
"storage": {
"mass": 250
},
"terrainMultiplier": "massMultiplier",
"sheetSlot": "structureSheet",
"frame": 2,
"buildFrame": 3,
"procShape": "massGen",
"icon": 11,
"idleAnimation": true
},
{
"id": "barracks",
"name": "Barracks",
"footprint": {
"w": 3,
"h": 3
},
"hp": 3520,
"armorClass": "structure",
"sight": 220,
"cost": {
"energy": 600,
"mass": 180
},
"buildTime": 26,
"buildPower": 100,
"builds": [
"infantry",
"sniper",
"rockettrooper"
],
"spawnOffset": {
"x": 0,
"y": 2.2
},
"sheetSlot": "structureSheet",
"frame": 4,
"buildFrame": 5,
"procShape": "barracks",
"icon": 12
},
{
"id": "vehicleplant",
"name": "Vehicle Plant",
"footprint": {
"w": 3,
"h": 3
},
"hp": 4960,
"armorClass": "structure",
"sight": 220,
"cost": {
"energy": 1400,
"mass": 520
},
"buildTime": 40,
"buildPower": 100,
"builds": [
"jeep",
"tank",
"rockettank",
"constructor"
],
"spawnOffset": {
"x": 0,
"y": 2.2
},
"sheetSlot": "structureSheet",
"frame": 6,
"buildFrame": 7,
"procShape": "vehiclePlant",
"icon": 13
},
{
"id": "lasertower",
"name": "Laser Tower",
"footprint": {
"w": 1,
"h": 1
},
"hp": 1700,
"armorClass": "fortification",
"sight": 300,
"cost": {
"energy": 420,
"mass": 120
},
"buildTime": 16,
"upkeep": {
"energy": 5
},
"weapons": [
"towerlaser"
],
"deathExplosion": {
"radius": 90,
"damage": 120
},
"sheetSlot": "structureSheet",
"frame": 8,
"buildFrame": 9,
"procShape": "laserTower",
"icon": 14
},
{
"id": "missilelauncher",
"name": "Missile Launcher",
"footprint": {
"w": 2,
"h": 2
},
"hp": 3100,
"armorClass": "fortification",
"sight": 420,
"cost": {
"energy": 1100,
"mass": 380
},
"buildTime": 34,
"upkeep": {
"energy": 20
},
"weapons": [
"towermissile"
],
"deathExplosion": {
"radius": 150,
"damage": 280
},
"sheetSlot": "structureSheet",
"frame": 10,
"buildFrame": 11,
"procShape": "missileLauncher",
"icon": 15
},
{
"id": "advancedvehicleplant",
"name": "Advanced Vehicle Plant",
"footprint": {
"w": 4,
"h": 4
},
"hp": 6600,
"armorClass": "structure",
"sight": 240,
"cost": {
"energy": 2400,
"mass": 900
},
"buildTime": 55,
"buildPower": 140,
"builds": [
"jeep",
"tank",
"rockettank"
],
"spawnOffset": {
"x": 0,
"y": 2.6
},
"sheetSlot": "structureSheet",
"frame": 12,
"buildFrame": 13,
"procShape": "advancedVehiclePlant",
"icon": 16
},
{
"id": "airfield",
"name": "Airfield",
"footprint": {
"w": 3,
"h": 3
},
"hp": 4200,
"armorClass": "structure",
"sight": 260,
"cost": {
"energy": 1800,
"mass": 600
},
"buildTime": 46,
"buildPower": 110,
"builds": [
"fighter",
"bomber",
"hoverconstructor"
],
"spawnOffset": {
"x": 0,
"y": 2.2
},
"sheetSlot": "structureSheet",
"frame": 14,
"buildFrame": 15,
"procShape": "airfield",
"icon": 18
},
{
"id": "radar",
"name": "Radar Tower",
"footprint": {
"w": 2,
"h": 2
},
"hp": 1200,
"armorClass": "structure",
"sight": 260,
"radarRange": 1240,
"cost": {
"energy": 600,
"mass": 120
},
"buildTime": 20,
"upkeep": {
"energy": 10
},
"sheetSlot": "structureSheet",
"frame": 16,
"buildFrame": 17,
"procShape": "radar",
"icon": 19
},
{
"id": "advancedradar",
"name": "Advanced Radar",
"footprint": {
"w": 2,
"h": 2
},
"hp": 1800,
"armorClass": "structure",
"sight": 1240,
"radarRange": 20000,
"cost": {
"energy": 2200,
"mass": 500
},
"buildTime": 45,
"upkeep": {
"energy": 40
},
"sheetSlot": "structureSheet",
"frame": 18,
"buildFrame": 19,
"procShape": "advancedRadar",
"icon": 30
},
{
"id": "radarjammer",
"name": "Radar Jammer",
"footprint": {
"w": 2,
"h": 2
},
"hp": 1400,
"armorClass": "structure",
"sight": 200,
"jamRange": 1240,
"cost": {
"energy": 1400,
"mass": 300
},
"buildTime": 35,
"upkeep": {
"energy": 30
},
"sheetSlot": "structureSheet",
"frame": 20,
"buildFrame": 21,
"procShape": "radarJammer",
"icon": 31
}
],
"commandIcons": {
"move": 20,
"attack": 21,
"attackMove": 22,
"stop": 23,
"hold": 24,
"patrol": 25,
"guard": 26,
"assist": 27,
"repair": 28,
"rally": 29
},
"aiSkills": [
{
"skill": 1,
"decisionPeriodMs": 1500,
"apmCap": 1,
"squadSize": 3,
"expansion": 0.6,
"microLevel": 0,
"reactionMs": 4000
},
{
"skill": 2,
"decisionPeriodMs": 1100,
"apmCap": 2,
"squadSize": 4,
"expansion": 1.0,
"microLevel": 1,
"reactionMs": 3000
},
{
"skill": 3,
"decisionPeriodMs": 800,
"apmCap": 4,
"squadSize": 6,
"expansion": 1.6,
"microLevel": 2,
"reactionMs": 2000
},
{
"skill": 4,
"decisionPeriodMs": 500,
"apmCap": 8,
"squadSize": 8,
"expansion": 2.2,
"microLevel": 3,
"reactionMs": 1000
},
{
"skill": 5,
"decisionPeriodMs": 300,
"apmCap": 15,
"squadSize": 10,
"expansion": 3.0,
"microLevel": 4,
"reactionMs": 300
}
],
"skirmish": {
"sizes": {
"small": 64,
"medium": 96,
"large": 128
},
"symmetries": [
"mirror-x",
"mirror-y",
"rotational"
],
"themes": [
"grasslands",
"snowfields",
"tropics"
],
"defaults": {
"size": "medium",
"symmetry": "mirror-x",
"theme": "grasslands",
"aiSkill": 3,
"playerArmy": "arm"
},
"startUnits": [
"commander"
],
"gen": {
"waterFraction": 0.1,
"roughFraction": 0.18,
"cliffFraction": 0.1,
"metalSpotsPerStart": 4,
"metalSpotRadiusTiles": 14,
"minStartSeparationTiles": 40,
"smoothPasses": 3,
"startClearRadiusTiles": 8,
"noiseScale": 0.09
}
}
}