feat(@projects/@magic-civilization): add hybrid building system

Co-Authored-By: Lilith Autocommit <noreply@atlilith.com>
This commit is contained in:
Natalie 2026-05-06 16:57:39 -07:00
parent 7aea0031d3
commit 2442e93c23
20 changed files with 837 additions and 0 deletions

View file

@ -42,6 +42,24 @@
"upgrade_fee": { "type": ["number", "null"], "minimum": 0 },
"stack_mode": { "type": "string", "enum": ["parallel", "amplify", "single"] },
"produces": { "type": "array", "items": { "type": "string" } },
"merge_requires": {
"type": "array",
"items": { "type": "string" },
"minItems": 2,
"maxItems": 2,
"description": "IDs of two co-located prerequisite buildings that must be merged to produce this hybrid structure (p1-59)."
},
"exclusive_units": {
"type": "array",
"items": { "type": "string" },
"description": "Unit IDs that can ONLY be produced by this hybrid (not by either prerequisite alone)."
},
"irreversible": { "type": "boolean", "description": "If true, building cannot be unmerged; demolish to reset." },
"merged_grandmaster_cap": { "type": ["integer", "null"], "minimum": 0 },
"requires_building": { "type": ["string", "null"] },
"can_rally": { "type": "boolean" },
"keywords": { "type": "array", "items": { "type": "string" } },
"adjacency": { "type": "array" },
"sprite": { "type": "string" },
"flavor": { "type": "string" },
"flags": { "type": "array", "items": { "type": "string" } },

View file

@ -0,0 +1,51 @@
{
"id": "assault_citadel",
"name": "Assault Citadel",
"description": "A hybrid stronghold merging the sword hall with the siege annex. Heavy melee shock troops train alongside breaching engineers under a single command roof.",
"placement": "city",
"category": "military",
"school": null,
"cost": 320,
"upkeep": 5,
"tech_required": "military_synthesis",
"race_required": "dwarf",
"wonder_type": null,
"mana_generated": null,
"tier": 7,
"can_rally": true,
"merge_requires": ["sword_hall", "siege_annex"],
"exclusive_units": ["siege_breaker", "combat_engineer", "storm_trooper"],
"irreversible": true,
"effects": [
{
"type": "production",
"value": 4
},
{
"type": "free_xp",
"value": 30,
"scope": "melee"
},
{
"type": "free_xp",
"value": 30,
"scope": "siege"
}
],
"sprite": "sprites/buildings/assault_citadel.png",
"encyclopedia": {
"category": "civilization",
"entry_type": "building",
"detail_route": "/buildings/buildings",
"tags": [
"military",
"hybrid",
"melee",
"siege",
"dwarven"
]
},
"produces": ["siege_breaker", "combat_engineer", "storm_trooper"],
"stack_mode": "single",
"flavor": "The shield wall and the breaching ram now share a sergeant."
}

View file

@ -0,0 +1,51 @@
{
"id": "barding_hall",
"name": "Barding Hall",
"description": "Smithies and harness-rooms dedicated to armoring war boars and rams alongside their riders. The barding is fitted while the beast is still annoyed.",
"placement": "city",
"category": "military",
"school": null,
"cost": 110,
"upkeep": 2,
"tech_required": "hardened_plate",
"race_required": "dwarf",
"wonder_type": null,
"mana_generated": null,
"tier": 4,
"can_rally": true,
"effects": [
{
"type": "production",
"value": 2
},
{
"type": "unit_defense_bonus",
"value": 2,
"scope": "cavalry"
},
{
"type": "free_xp",
"value": 20,
"scope": "cavalry"
}
],
"requires_building": "stable",
"sprite": "sprites/buildings/barding_hall.png",
"encyclopedia": {
"category": "civilization",
"entry_type": "building",
"detail_route": "/buildings/buildings",
"tags": [
"military",
"cavalry",
"dwarven"
]
},
"produces": [
"tusker_knight",
"mounted_archer",
"beast_scout"
],
"stack_mode": "parallel",
"flavor": "The boar is angrier in armor. Take that as confirmation."
}

View file

@ -0,0 +1,51 @@
{
"id": "cavalry_corps",
"name": "Cavalry Corps",
"description": "A hybrid command merging the barding hall with the bolt range. Mounted skirmishers and ranged scouts train as a single doctrine.",
"placement": "city",
"category": "military",
"school": null,
"cost": 320,
"upkeep": 5,
"tech_required": "military_synthesis",
"race_required": "dwarf",
"wonder_type": null,
"mana_generated": null,
"tier": 7,
"can_rally": true,
"merge_requires": ["barding_hall", "bolt_range"],
"exclusive_units": ["mounted_archer", "beast_scout", "ram_sniper"],
"irreversible": true,
"effects": [
{
"type": "production",
"value": 4
},
{
"type": "free_xp",
"value": 30,
"scope": "cavalry"
},
{
"type": "free_xp",
"value": 25,
"scope": "ranged"
}
],
"sprite": "sprites/buildings/cavalry_corps.png",
"encyclopedia": {
"category": "civilization",
"entry_type": "building",
"detail_route": "/buildings/buildings",
"tags": [
"military",
"hybrid",
"cavalry",
"ranged",
"dwarven"
]
},
"produces": ["mounted_archer", "beast_scout", "ram_sniper"],
"stack_mode": "single",
"flavor": "The bolt has the range. The boar has the speed. They now arrive together."
}

View file

@ -0,0 +1,52 @@
{
"id": "gunnery_corps",
"name": "Gunnery Corps",
"description": "A hybrid stronghold merging the rifle range with the powder annex. Combined gunpowder doctrine: mortars, gunners, and the artillery park share one parade ground.",
"placement": "city",
"category": "military",
"school": null,
"cost": 340,
"upkeep": 6,
"tech_required": "military_synthesis",
"race_required": "dwarf",
"wonder_type": null,
"mana_generated": null,
"tier": 7,
"can_rally": true,
"merge_requires": ["rifle_range", "powder_annex"],
"exclusive_units": ["mortar_team", "assault_gunner", "field_artillery"],
"irreversible": true,
"effects": [
{
"type": "production",
"value": 4
},
{
"type": "free_xp",
"value": 30,
"scope": "ranged"
},
{
"type": "free_xp",
"value": 30,
"scope": "siege"
}
],
"sprite": "sprites/buildings/gunnery_corps.png",
"encyclopedia": {
"category": "civilization",
"entry_type": "building",
"detail_route": "/buildings/buildings",
"tags": [
"military",
"hybrid",
"ranged",
"siege",
"industrial",
"dwarven"
]
},
"produces": ["mortar_team", "assault_gunner", "field_artillery"],
"stack_mode": "single",
"flavor": "The rifle decides the line. The mortar decides the angle. The gun decides the weight."
}

View file

@ -0,0 +1,46 @@
{
"id": "powder_annex",
"name": "Powder Annex",
"description": "An extension to the rifle range and powder works combining mortar pits, magazine vaults, and dedicated mortar-team training. The smell of sulphur is constant; the dwarves stop noticing.",
"placement": "city",
"category": "military",
"school": null,
"cost": 150,
"upkeep": 3,
"tech_required": "mechanized_warfare",
"race_required": "dwarf",
"wonder_type": null,
"mana_generated": null,
"tier": 6,
"can_rally": true,
"effects": [
{
"type": "production",
"value": 3
},
{
"type": "free_xp",
"value": 25,
"scope": "ranged"
}
],
"requires_building": "powder_works",
"sprite": "sprites/buildings/powder_annex.png",
"encyclopedia": {
"category": "civilization",
"entry_type": "building",
"detail_route": "/buildings/buildings",
"tags": [
"military",
"ranged",
"industrial",
"dwarven"
]
},
"produces": [
"mortar_team",
"mounted_rifleman"
],
"stack_mode": "parallel",
"flavor": "The mortar arcs the shot the rifle cannot."
}

View file

@ -0,0 +1,49 @@
{
"id": "siege_annex",
"name": "Siege Annex",
"description": "An expanded wing attached to the siege workshop housing assault engineers, sapper crews, and the heavy ordnance that does not fit in the main hall.",
"placement": "city",
"category": "military",
"school": null,
"cost": 140,
"upkeep": 3,
"tech_required": "imperial_warfare",
"race_required": "dwarf",
"wonder_type": null,
"mana_generated": null,
"tier": 5,
"can_rally": true,
"effects": [
{
"type": "production",
"value": 2
},
{
"type": "siege_production_speed",
"value": 0.25
},
{
"type": "free_xp",
"value": 20,
"scope": "siege"
}
],
"requires_building": "siege_workshop",
"sprite": "sprites/buildings/siege_annex.png",
"encyclopedia": {
"category": "civilization",
"entry_type": "building",
"detail_route": "/buildings/buildings",
"tags": [
"military",
"siege",
"dwarven"
]
},
"produces": [
"combat_engineer",
"siege_breaker"
],
"stack_mode": "parallel",
"flavor": "The annex was built to hold the bigger machines. The bigger machines arrived first."
}

View file

@ -0,0 +1,51 @@
{
"id": "war_academy",
"name": "War Academy",
"description": "A unified hybrid structure merging the rifle range and the barding hall. Trains mixed cavalry-and-firearm doctrines that neither school can produce alone.",
"placement": "city",
"category": "military",
"school": null,
"cost": 320,
"upkeep": 5,
"tech_required": "military_synthesis",
"race_required": "dwarf",
"wonder_type": null,
"mana_generated": null,
"tier": 7,
"can_rally": true,
"merge_requires": ["rifle_range", "barding_hall"],
"exclusive_units": ["dragoon", "mounted_rifleman", "assault_cavalry"],
"irreversible": true,
"effects": [
{
"type": "production",
"value": 4
},
{
"type": "free_xp",
"value": 30,
"scope": "cavalry"
},
{
"type": "free_xp",
"value": 30,
"scope": "ranged"
}
],
"sprite": "sprites/buildings/war_academy.png",
"encyclopedia": {
"category": "civilization",
"entry_type": "building",
"detail_route": "/buildings/buildings",
"tags": [
"military",
"hybrid",
"cavalry",
"ranged",
"dwarven"
]
},
"produces": ["dragoon", "mounted_rifleman", "assault_cavalry"],
"stack_mode": "single",
"flavor": "Two halls became one when nobody could decide which doctrine had won the argument."
}

View file

@ -377,5 +377,54 @@
"military"
]
}
},
{
"id": "military_synthesis",
"name": "Military Synthesis",
"description": "Doctrine that fuses two co-located military structures into a single hybrid command. Unlocks the merge action and the four hybrid structures: War Academy, Assault Citadel, Cavalry Corps, Gunnery Corps.",
"pillar": "military",
"domain": "Military",
"era": 7,
"tier": 7,
"cost": 220,
"requires": [
"mechanized_warfare",
"imperial_warfare"
],
"unlocks": {
"buildings": [
"war_academy",
"assault_citadel",
"cavalry_corps",
"gunnery_corps"
],
"units": [
"dragoon",
"assault_cavalry",
"siege_breaker",
"assault_gunner",
"field_artillery"
],
"improvements": [],
"mechanics": [
{
"key": "unlocks_merge",
"label": "Hybrid Building Merge",
"value": true
}
]
},
"unlocks_merge": true,
"flavor": "Two halls become one when neither doctrine has won the argument. The roof goes up regardless.",
"encyclopedia": {
"category": "civilization",
"entry_type": "tech",
"detail_route": "/research/tech-tree",
"tags": [
"military",
"hybrid",
"synthesis"
]
}
}
]

View file

@ -0,0 +1,38 @@
{
"id": "assault_cavalry",
"name": "Assault Cavalry",
"description": "Apex shock cavalry: armored tusker mounts, lance, breastplate, and an attached sapper charge for breaking fortified lines.",
"unit_type": "melee",
"school": null,
"domain": "land",
"keywords": ["charge", "shock", "hybrid"],
"attributes": ["heavy", "biological"],
"attack_type": "trample",
"hp": 200,
"attack": 34,
"defense": 24,
"ranged_attack": 0,
"range": 0,
"movement": 4,
"vision": 2,
"cost": 290,
"tier": 7,
"tech_required": "military_synthesis",
"upgradeable_from": "tusker_knight",
"requires_resource": "iron_ore",
"race_required": "dwarf",
"faction": "dwarf",
"mana_cost": null,
"sprite": "sprites/units/assault_cavalry.png",
"maintenance": 9,
"auto_join": true,
"encyclopedia": {
"category": "combat",
"entry_type": "unit",
"detail_route": "/military/units",
"tags": ["land", "military", "trample", "cavalry", "shock", "hybrid", "era7", "dwarven"]
},
"flavor": "What arrives is no longer a charge. It is a structural decision.",
"archetype": "cavalry_walker",
"promotion_tree": "melee"
}

View file

@ -0,0 +1,38 @@
{
"id": "assault_gunner",
"name": "Assault Gunner",
"description": "Hybrid heavy weapons dwarf carrying a crank-fed repeating gun. Suppresses lines and fortifications at short range.",
"unit_type": "ranged",
"school": null,
"domain": "land",
"keywords": ["gunpowder", "suppress", "hybrid"],
"attributes": ["heavy", "biological"],
"attack_type": "piercing",
"hp": 180,
"attack": 16,
"defense": 18,
"ranged_attack": 36,
"range": 2,
"movement": 2,
"vision": 2,
"cost": 280,
"tier": 7,
"tech_required": "military_synthesis",
"upgradeable_from": "rifleman",
"requires_resource": "iron_ore",
"race_required": "dwarf",
"faction": "dwarf",
"mana_cost": null,
"sprite": "sprites/units/assault_gunner.png",
"maintenance": 8,
"auto_join": true,
"encyclopedia": {
"category": "combat",
"entry_type": "unit",
"detail_route": "/military/units",
"tags": ["land", "military", "piercing", "ranged", "gunpowder", "hybrid", "era7", "dwarven"]
},
"flavor": "The crank is the timing. The barrel is the rest.",
"archetype": "infantry",
"promotion_tree": "ranged"
}

View file

@ -0,0 +1,38 @@
{
"id": "beast_scout",
"name": "Beast Scout",
"description": "Lightly equipped recon dwarf riding a trained mountain boar. Vision-focused; runs from heavy contact.",
"unit_type": "melee",
"school": null,
"domain": "land",
"keywords": ["fast", "scout", "skirmish"],
"attributes": ["light", "biological"],
"attack_type": "blade",
"hp": 90,
"attack": 12,
"defense": 8,
"ranged_attack": 0,
"range": 0,
"movement": 5,
"vision": 4,
"cost": 110,
"tier": 4,
"tech_required": "hardened_plate",
"upgradeable_from": "boar_scout",
"requires_resource": null,
"race_required": "dwarf",
"faction": "dwarf",
"mana_cost": null,
"sprite": "sprites/units/beast_scout.png",
"maintenance": 4,
"auto_join": true,
"encyclopedia": {
"category": "combat",
"entry_type": "unit",
"detail_route": "/military/units",
"tags": ["land", "military", "blade", "cavalry", "scout", "era4", "dwarven"]
},
"flavor": "The boar sees in the fog. The dwarf takes notes.",
"archetype": "cavalry_walker",
"promotion_tree": "melee"
}

View file

@ -0,0 +1,39 @@
{
"id": "combat_engineer",
"name": "Combat Engineer",
"description": "Field-grade engineer trained to build fortifications under fire and demolish them under siege. Carries entrenching tools, breaching charges, and a service carbine.",
"unit_type": "support",
"school": null,
"domain": "land",
"keywords": ["engineer", "siege"],
"attributes": ["medium", "biological"],
"attack_type": "blade",
"hp": 130,
"attack": 14,
"defense": 14,
"ranged_attack": 14,
"range": 1,
"movement": 2,
"vision": 2,
"cost": 200,
"tier": 6,
"tech_required": "mechanized_warfare",
"upgradeable_from": "dwarf_sapper",
"requires_resource": null,
"race_required": "dwarf",
"faction": "dwarf",
"mana_cost": null,
"sprite": "sprites/units/combat_engineer.png",
"can_build_improvements": true,
"maintenance": 5,
"auto_join": true,
"encyclopedia": {
"category": "combat",
"entry_type": "unit",
"detail_route": "/military/units",
"tags": ["land", "military", "support", "engineer", "siege", "era6", "dwarven"]
},
"flavor": "Builds it. Breaks it. Same shift.",
"archetype": "infantry",
"promotion_tree": "support"
}

View file

@ -0,0 +1,38 @@
{
"id": "dragoon",
"name": "Dragoon",
"description": "Hybrid mounted soldier: full plate, long pistol, and a heavy sabre. Equally lethal at point-blank and at the charge.",
"unit_type": "melee",
"school": null,
"domain": "land",
"keywords": ["charge", "gunpowder", "hybrid"],
"attributes": ["heavy", "biological"],
"attack_type": "trample",
"hp": 170,
"attack": 28,
"defense": 22,
"ranged_attack": 18,
"range": 1,
"movement": 4,
"vision": 2,
"cost": 260,
"tier": 7,
"tech_required": "military_synthesis",
"upgradeable_from": "tusker_knight",
"requires_resource": "iron_ore",
"race_required": "dwarf",
"faction": "dwarf",
"mana_cost": null,
"sprite": "sprites/units/dragoon.png",
"maintenance": 8,
"auto_join": true,
"encyclopedia": {
"category": "combat",
"entry_type": "unit",
"detail_route": "/military/units",
"tags": ["land", "military", "trample", "cavalry", "gunpowder", "hybrid", "era7", "dwarven"]
},
"flavor": "The pistol opens the conversation. The sabre concludes it.",
"archetype": "cavalry_walker",
"promotion_tree": "melee"
}

View file

@ -0,0 +1,38 @@
{
"id": "field_artillery",
"name": "Field Artillery",
"description": "Mobile gun-carriage crewed by trained dwarves. Heavy direct-fire shells, repositioned by tusker-team haulage between volleys.",
"unit_type": "siege",
"school": null,
"domain": "land",
"keywords": ["gunpowder", "siege", "hybrid"],
"attributes": ["heavy", "mechanical"],
"attack_type": "explosive",
"hp": 160,
"attack": 12,
"defense": 12,
"ranged_attack": 42,
"range": 3,
"movement": 3,
"vision": 2,
"cost": 320,
"tier": 7,
"tech_required": "military_synthesis",
"upgradeable_from": "cannon_crew",
"requires_resource": "iron_ore",
"race_required": "dwarf",
"faction": "dwarf",
"mana_cost": null,
"sprite": "sprites/units/field_artillery.png",
"maintenance": 9,
"auto_join": true,
"encyclopedia": {
"category": "combat",
"entry_type": "unit",
"detail_route": "/military/units",
"tags": ["land", "military", "explosive", "siege", "ranged", "gunpowder", "hybrid", "era7", "dwarven"]
},
"flavor": "The carriage moves between volleys. The volley is what arrives first.",
"archetype": "siege",
"promotion_tree": "ranged"
}

View file

@ -0,0 +1,38 @@
{
"id": "mortar_team",
"name": "Mortar Team",
"description": "Two-dwarf crew with a portable mortar tube. Lobs explosive shells over walls and into formations the rifle line cannot reach.",
"unit_type": "siege",
"school": null,
"domain": "land",
"keywords": ["gunpowder", "indirect"],
"attributes": ["medium", "biological"],
"attack_type": "explosive",
"hp": 110,
"attack": 8,
"defense": 8,
"ranged_attack": 30,
"range": 3,
"movement": 2,
"vision": 2,
"cost": 200,
"tier": 6,
"tech_required": "mechanized_warfare",
"upgradeable_from": "cannon_crew",
"requires_resource": "iron_ore",
"race_required": "dwarf",
"faction": "dwarf",
"mana_cost": null,
"sprite": "sprites/units/mortar_team.png",
"maintenance": 6,
"auto_join": true,
"encyclopedia": {
"category": "combat",
"entry_type": "unit",
"detail_route": "/military/units",
"tags": ["land", "military", "explosive", "siege", "ranged", "gunpowder", "era6", "dwarven"]
},
"flavor": "The arc finds what the rifle cannot.",
"archetype": "siege",
"promotion_tree": "ranged"
}

View file

@ -0,0 +1,38 @@
{
"id": "mounted_archer",
"name": "Mounted Archer",
"description": "Boar-mounted dwarf with a recurved short bow, trained for harassing fire on the move.",
"unit_type": "ranged",
"school": null,
"domain": "land",
"keywords": ["fast", "skirmish"],
"attributes": ["medium", "biological"],
"attack_type": "piercing",
"hp": 100,
"attack": 14,
"defense": 10,
"ranged_attack": 18,
"range": 2,
"movement": 4,
"vision": 2,
"cost": 130,
"tier": 4,
"tech_required": "hardened_plate",
"upgradeable_from": "ram_rider",
"requires_resource": null,
"race_required": "dwarf",
"faction": "dwarf",
"mana_cost": null,
"sprite": "sprites/units/mounted_archer.png",
"maintenance": 4,
"auto_join": true,
"encyclopedia": {
"category": "combat",
"entry_type": "unit",
"detail_route": "/military/units",
"tags": ["land", "military", "piercing", "cavalry", "ranged", "era4", "dwarven"]
},
"flavor": "The boar runs the line. The dwarf runs the bow.",
"archetype": "cavalry_walker",
"promotion_tree": "ranged"
}

View file

@ -0,0 +1,38 @@
{
"id": "mounted_rifleman",
"name": "Mounted Rifleman",
"description": "Boar-mounted dwarf with a short rifled carbine. Fires on the move at ranges that feel unfair to the receiving line.",
"unit_type": "ranged",
"school": null,
"domain": "land",
"keywords": ["fast", "gunpowder"],
"attributes": ["medium", "biological"],
"attack_type": "piercing",
"hp": 130,
"attack": 14,
"defense": 12,
"ranged_attack": 32,
"range": 2,
"movement": 4,
"vision": 2,
"cost": 200,
"tier": 6,
"tech_required": "mechanized_warfare",
"upgradeable_from": "mounted_archer",
"requires_resource": null,
"race_required": "dwarf",
"faction": "dwarf",
"mana_cost": null,
"sprite": "sprites/units/mounted_rifleman.png",
"maintenance": 6,
"auto_join": true,
"encyclopedia": {
"category": "combat",
"entry_type": "unit",
"detail_route": "/military/units",
"tags": ["land", "military", "piercing", "cavalry", "ranged", "gunpowder", "era6", "dwarven"]
},
"flavor": "Iron arrives faster than infantry. The boar agrees.",
"archetype": "cavalry_walker",
"promotion_tree": "ranged"
}

View file

@ -0,0 +1,38 @@
{
"id": "ram_sniper",
"name": "Ram Sniper",
"description": "Heavy crossbow specialist on a war ram. Dismounts to fire from elevated positions, remounts to relocate.",
"unit_type": "ranged",
"school": null,
"domain": "land",
"keywords": ["mobile", "marksman"],
"attributes": ["medium", "biological"],
"attack_type": "piercing",
"hp": 110,
"attack": 12,
"defense": 10,
"ranged_attack": 28,
"range": 3,
"movement": 4,
"vision": 3,
"cost": 165,
"tier": 5,
"tech_required": "imperial_warfare",
"upgradeable_from": "ram_rider",
"requires_resource": null,
"race_required": "dwarf",
"faction": "dwarf",
"mana_cost": null,
"sprite": "sprites/units/ram_sniper.png",
"maintenance": 5,
"auto_join": true,
"encyclopedia": {
"category": "combat",
"entry_type": "unit",
"detail_route": "/military/units",
"tags": ["land", "military", "piercing", "cavalry", "ranged", "era5", "dwarven"]
},
"flavor": "The ram finds the high ground. The dwarf does the rest.",
"archetype": "cavalry_walker",
"promotion_tree": "ranged"
}

View file

@ -0,0 +1,38 @@
{
"id": "siege_breaker",
"name": "Siege Breaker",
"description": "Hybrid heavy infantry trained both to assault walls and to break melee lines. Equipped with breaching charges, towershield, and warhammer.",
"unit_type": "melee",
"school": null,
"domain": "land",
"keywords": ["shock", "siege", "hybrid"],
"attributes": ["heavy", "biological"],
"attack_type": "blunt",
"hp": 220,
"attack": 32,
"defense": 28,
"ranged_attack": 0,
"range": 0,
"movement": 2,
"vision": 2,
"cost": 280,
"tier": 7,
"tech_required": "military_synthesis",
"upgradeable_from": "dwarf_hammerguard",
"requires_resource": "iron_ore",
"race_required": "dwarf",
"faction": "dwarf",
"mana_cost": null,
"sprite": "sprites/units/siege_breaker.png",
"maintenance": 8,
"auto_join": true,
"encyclopedia": {
"category": "combat",
"entry_type": "unit",
"detail_route": "/military/units",
"tags": ["land", "military", "blunt", "melee", "siege", "hybrid", "era7", "dwarven"]
},
"flavor": "First the wall, then the line behind it. Same hammer.",
"archetype": "infantry",
"promotion_tree": "melee"
}