diff --git a/public/games/age-of-dwarves/data/schemas/building.schema.json b/public/games/age-of-dwarves/data/schemas/building.schema.json index ac006ccc..9cc11e51 100644 --- a/public/games/age-of-dwarves/data/schemas/building.schema.json +++ b/public/games/age-of-dwarves/data/schemas/building.schema.json @@ -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" } }, diff --git a/public/resources/buildings/assault_citadel.json b/public/resources/buildings/assault_citadel.json new file mode 100644 index 00000000..d811c8ef --- /dev/null +++ b/public/resources/buildings/assault_citadel.json @@ -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." +} diff --git a/public/resources/buildings/barding_hall.json b/public/resources/buildings/barding_hall.json new file mode 100644 index 00000000..f6612d94 --- /dev/null +++ b/public/resources/buildings/barding_hall.json @@ -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." +} diff --git a/public/resources/buildings/cavalry_corps.json b/public/resources/buildings/cavalry_corps.json new file mode 100644 index 00000000..495ddb7f --- /dev/null +++ b/public/resources/buildings/cavalry_corps.json @@ -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." +} diff --git a/public/resources/buildings/gunnery_corps.json b/public/resources/buildings/gunnery_corps.json new file mode 100644 index 00000000..f576939a --- /dev/null +++ b/public/resources/buildings/gunnery_corps.json @@ -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." +} diff --git a/public/resources/buildings/powder_annex.json b/public/resources/buildings/powder_annex.json new file mode 100644 index 00000000..8cd93998 --- /dev/null +++ b/public/resources/buildings/powder_annex.json @@ -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." +} diff --git a/public/resources/buildings/siege_annex.json b/public/resources/buildings/siege_annex.json new file mode 100644 index 00000000..f7387b04 --- /dev/null +++ b/public/resources/buildings/siege_annex.json @@ -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." +} diff --git a/public/resources/buildings/war_academy.json b/public/resources/buildings/war_academy.json new file mode 100644 index 00000000..161f6f6f --- /dev/null +++ b/public/resources/buildings/war_academy.json @@ -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." +} diff --git a/public/resources/techs/military.json b/public/resources/techs/military.json index 21909957..ca6b84c1 100644 --- a/public/resources/techs/military.json +++ b/public/resources/techs/military.json @@ -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" + ] + } } ] diff --git a/public/resources/units/assault_cavalry.json b/public/resources/units/assault_cavalry.json new file mode 100644 index 00000000..b9953011 --- /dev/null +++ b/public/resources/units/assault_cavalry.json @@ -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" +} diff --git a/public/resources/units/assault_gunner.json b/public/resources/units/assault_gunner.json new file mode 100644 index 00000000..d62b6a27 --- /dev/null +++ b/public/resources/units/assault_gunner.json @@ -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" +} diff --git a/public/resources/units/beast_scout.json b/public/resources/units/beast_scout.json new file mode 100644 index 00000000..aa450688 --- /dev/null +++ b/public/resources/units/beast_scout.json @@ -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" +} diff --git a/public/resources/units/combat_engineer.json b/public/resources/units/combat_engineer.json new file mode 100644 index 00000000..d2792402 --- /dev/null +++ b/public/resources/units/combat_engineer.json @@ -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" +} diff --git a/public/resources/units/dragoon.json b/public/resources/units/dragoon.json new file mode 100644 index 00000000..bf69ca9d --- /dev/null +++ b/public/resources/units/dragoon.json @@ -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" +} diff --git a/public/resources/units/field_artillery.json b/public/resources/units/field_artillery.json new file mode 100644 index 00000000..730a4d63 --- /dev/null +++ b/public/resources/units/field_artillery.json @@ -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" +} diff --git a/public/resources/units/mortar_team.json b/public/resources/units/mortar_team.json new file mode 100644 index 00000000..a88d0fc9 --- /dev/null +++ b/public/resources/units/mortar_team.json @@ -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" +} diff --git a/public/resources/units/mounted_archer.json b/public/resources/units/mounted_archer.json new file mode 100644 index 00000000..183d1834 --- /dev/null +++ b/public/resources/units/mounted_archer.json @@ -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" +} diff --git a/public/resources/units/mounted_rifleman.json b/public/resources/units/mounted_rifleman.json new file mode 100644 index 00000000..35bd8a99 --- /dev/null +++ b/public/resources/units/mounted_rifleman.json @@ -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" +} diff --git a/public/resources/units/ram_sniper.json b/public/resources/units/ram_sniper.json new file mode 100644 index 00000000..db0b1d88 --- /dev/null +++ b/public/resources/units/ram_sniper.json @@ -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" +} diff --git a/public/resources/units/siege_breaker.json b/public/resources/units/siege_breaker.json new file mode 100644 index 00000000..cb534d52 --- /dev/null +++ b/public/resources/units/siege_breaker.json @@ -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" +}