feat(units): author 3 missing specialist units referenced by building produces[]
p2-57b gap analysis flagged dangling produces[] refs: adamantine_press / gravity_press → dwarf_master_engineer, royal_infirmary / field_hospital_corps → master_surgeon, grand_chronicle → saga_writer named units that had no JSON. Authored all three in public/resources/units/ matching the unit schema and the shape of their nearest siblings (dwarf_grand_engineer, field_surgeon, loremaster): Great-Person-tier support specialists with logistics blocks, real tech gates (deep_engineering / surgical_practice / rune_archives), upgrade chains, and GP actions consistent with their class. validate-game-data.py PASSes all three (the 90 unrelated failures pre-exist on main). Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
This commit is contained in:
parent
268b85c92d
commit
d2ebec0eba
3 changed files with 351 additions and 0 deletions
129
public/resources/units/dwarf_master_engineer.json
Normal file
129
public/resources/units/dwarf_master_engineer.json
Normal file
|
|
@ -0,0 +1,129 @@
|
|||
{
|
||||
"id": "dwarf_master_engineer",
|
||||
"name": "Master Engineer",
|
||||
"description": "The pinnacle of dwarven civil engineering — a master who reads load and stress the way others read runes. Where a grand engineer raises fortifications, a master engineer raises whole works: pressure-forges, gravity presses, and the deep machinery that turns raw adamantine into an empire's edge.",
|
||||
"unit_type": "support",
|
||||
"school": null,
|
||||
"domain": "land",
|
||||
"attributes": [
|
||||
"medium",
|
||||
"biological"
|
||||
],
|
||||
"attack_type": "none",
|
||||
"hp": 75,
|
||||
"attack": 0,
|
||||
"defense": 3,
|
||||
"ranged_attack": 0,
|
||||
"range": 0,
|
||||
"movement": 2,
|
||||
"vision": 2,
|
||||
"cost": 300,
|
||||
"tech_required": "deep_engineering",
|
||||
"upgradeable_from": "dwarf_grand_engineer",
|
||||
"race_required": "dwarf",
|
||||
"faction": "dwarf",
|
||||
"can_found_city": false,
|
||||
"can_build_improvements": true,
|
||||
"flags": [
|
||||
"fast_build",
|
||||
"instant_fortify",
|
||||
"can_build_fortifications",
|
||||
"can_build_railroads"
|
||||
],
|
||||
"mana_cost": null,
|
||||
"sprite": "sprites/units/dwarf_master_engineer.png",
|
||||
"gender": {
|
||||
"male": {
|
||||
"name": "Master Engineer",
|
||||
"sprite": "sprites/units/dwarf_master_engineer_dwarves_m.png"
|
||||
},
|
||||
"female": {
|
||||
"name": "Master Engineer",
|
||||
"sprite": "sprites/units/dwarf_master_engineer_dwarves_f.png"
|
||||
}
|
||||
},
|
||||
"maintenance": 14,
|
||||
"encyclopedia": {
|
||||
"category": "combat",
|
||||
"entry_type": "unit",
|
||||
"detail_route": "/military/units",
|
||||
"tags": [
|
||||
"land",
|
||||
"support",
|
||||
"none"
|
||||
]
|
||||
},
|
||||
"tier": 6,
|
||||
"action_point_capacity": 16,
|
||||
"capturable": true,
|
||||
"ransom_multiplier": 4.0,
|
||||
"great_person_class": "great_engineer",
|
||||
"great_person_gpp_type": "engineering",
|
||||
"great_person_produces": "wonder_hurry",
|
||||
"great_person_action": {
|
||||
"action_type": "wonder_hurry",
|
||||
"rationale": "Decisive production contribution toward late-era industrial projects and wonders.",
|
||||
"max_target_tier": 9,
|
||||
"production_value": 1200
|
||||
},
|
||||
"logistics": {
|
||||
"composition": {
|
||||
"leader": 1,
|
||||
"member": 14
|
||||
},
|
||||
"inventory": {
|
||||
"rations": 150,
|
||||
"water": 120,
|
||||
"tool_durability": 28,
|
||||
"build_kits": 6
|
||||
},
|
||||
"stats": {
|
||||
"str": 30,
|
||||
"con": 110,
|
||||
"end": 70
|
||||
},
|
||||
"terrain_movement": {
|
||||
"road": 0.5,
|
||||
"dirt_road": 0.65,
|
||||
"wagon_track": 0.85,
|
||||
"trail": 0.8,
|
||||
"grass": 1.0,
|
||||
"hills": 1.5,
|
||||
"forest_open": 1.5,
|
||||
"forest_dense": 2.5,
|
||||
"mountain": 3.0,
|
||||
"snow": 2.0,
|
||||
"tundra": 1.5,
|
||||
"desert": 2.5,
|
||||
"marsh": 3.0,
|
||||
"river_ford": 2.0,
|
||||
"river_unfordable": "blocked",
|
||||
"deep_water": "blocked"
|
||||
},
|
||||
"carriers": {
|
||||
"foot_runners": 2
|
||||
},
|
||||
"supply": {
|
||||
"range_turns": 6,
|
||||
"decline_rate": 0.8
|
||||
},
|
||||
"slots": {
|
||||
"ox_wagon": {
|
||||
"enabling_tech": "animal_husbandry",
|
||||
"enabling_resources": [
|
||||
"cattle"
|
||||
],
|
||||
"provides": "+2 carry-capacity, fodder consumption",
|
||||
"count": 1
|
||||
},
|
||||
"officer_bird": {
|
||||
"enabling_tech": "falconry_command",
|
||||
"enabling_resources": [
|
||||
"crag_aerie"
|
||||
],
|
||||
"provides": "crag-raven one-way carrier",
|
||||
"count": 2
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
107
public/resources/units/master_surgeon.json
Normal file
107
public/resources/units/master_surgeon.json
Normal file
|
|
@ -0,0 +1,107 @@
|
|||
{
|
||||
"id": "master_surgeon",
|
||||
"name": "Master Surgeon",
|
||||
"description": "A surgeon whose name is spoken in every hold's infirmary. Backed by a full operating retinue and a wagon of sterilised instruments, a master surgeon brings soldiers back from wounds that field surgeons can only ease — and trains the next generation while doing it.",
|
||||
"unit_type": "support",
|
||||
"school": null,
|
||||
"domain": "land",
|
||||
"keywords": [
|
||||
"healer"
|
||||
],
|
||||
"attributes": [
|
||||
"light",
|
||||
"biological"
|
||||
],
|
||||
"attack_type": "none",
|
||||
"hp": 80,
|
||||
"attack": 0,
|
||||
"defense": 8,
|
||||
"ranged_attack": 0,
|
||||
"range": 0,
|
||||
"movement": 3,
|
||||
"vision": 1,
|
||||
"cost": 300,
|
||||
"tier": 5,
|
||||
"tech_required": "surgical_practice",
|
||||
"upgradeable_from": "field_surgeon",
|
||||
"race_required": null,
|
||||
"faction": "dwarf",
|
||||
"mana_cost": null,
|
||||
"sprite": "sprites/units/master_surgeon.png",
|
||||
"gender": null,
|
||||
"maintenance": 8,
|
||||
"auto_join": false,
|
||||
"encyclopedia": {
|
||||
"category": "civilization",
|
||||
"entry_type": "unit",
|
||||
"detail_route": "/military/units",
|
||||
"tags": [
|
||||
"land",
|
||||
"support",
|
||||
"medical"
|
||||
]
|
||||
},
|
||||
"flavor": "First, do no harm. Then, do the impossible.",
|
||||
"archetype": "civilian",
|
||||
"promotion_tree": null,
|
||||
"clan_affinity": [],
|
||||
"logistics": {
|
||||
"composition": {
|
||||
"leader": 1,
|
||||
"member": 15
|
||||
},
|
||||
"inventory": {
|
||||
"rations": 150,
|
||||
"water": 120,
|
||||
"tool_durability": 4
|
||||
},
|
||||
"stats": {
|
||||
"str": 30,
|
||||
"con": 110,
|
||||
"end": 95
|
||||
},
|
||||
"terrain_movement": {
|
||||
"road": 0.5,
|
||||
"dirt_road": 0.65,
|
||||
"wagon_track": 0.85,
|
||||
"trail": 0.8,
|
||||
"grass": 1.0,
|
||||
"hills": 1.5,
|
||||
"forest_open": 1.5,
|
||||
"forest_dense": 2.5,
|
||||
"mountain": 3.0,
|
||||
"snow": 2.0,
|
||||
"tundra": 1.5,
|
||||
"desert": 2.5,
|
||||
"marsh": 3.0,
|
||||
"river_ford": 2.0,
|
||||
"river_unfordable": "blocked",
|
||||
"deep_water": "blocked"
|
||||
},
|
||||
"carriers": {
|
||||
"foot_runners": 2
|
||||
},
|
||||
"supply": {
|
||||
"range_turns": 6,
|
||||
"decline_rate": 0.8
|
||||
},
|
||||
"slots": {
|
||||
"ox_wagon": {
|
||||
"enabling_tech": "animal_husbandry",
|
||||
"enabling_resources": [
|
||||
"cattle"
|
||||
],
|
||||
"provides": "+2 carry-capacity, fodder consumption",
|
||||
"count": 1
|
||||
},
|
||||
"officer_bird": {
|
||||
"enabling_tech": "falconry_command",
|
||||
"enabling_resources": [
|
||||
"crag_aerie"
|
||||
],
|
||||
"provides": "crag-raven one-way carrier",
|
||||
"count": 2
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
115
public/resources/units/saga_writer.json
Normal file
115
public/resources/units/saga_writer.json
Normal file
|
|
@ -0,0 +1,115 @@
|
|||
{
|
||||
"id": "saga_writer",
|
||||
"name": "Saga Writer",
|
||||
"description": "Where a loremaster remembers, a saga writer composes — binding a clan's deeds into written cycles that outlast the dwarves who lived them. Their chronicles seed Golden Ages and turn a hold's history into a weapon of legitimacy.",
|
||||
"unit_type": "support",
|
||||
"school": null,
|
||||
"domain": "land",
|
||||
"keywords": [
|
||||
"culture_bearer"
|
||||
],
|
||||
"attributes": [
|
||||
"light",
|
||||
"biological"
|
||||
],
|
||||
"attack_type": "none",
|
||||
"hp": 55,
|
||||
"attack": 0,
|
||||
"defense": 5,
|
||||
"ranged_attack": 0,
|
||||
"range": 0,
|
||||
"movement": 3,
|
||||
"vision": 1,
|
||||
"cost": 220,
|
||||
"tier": 4,
|
||||
"tech_required": "rune_archives",
|
||||
"upgradeable_from": "loremaster",
|
||||
"race_required": null,
|
||||
"faction": "dwarf",
|
||||
"mana_cost": null,
|
||||
"sprite": "sprites/units/saga_writer.png",
|
||||
"gender": null,
|
||||
"maintenance": 5,
|
||||
"auto_join": false,
|
||||
"encyclopedia": {
|
||||
"category": "civilization",
|
||||
"entry_type": "unit",
|
||||
"detail_route": "/military/units",
|
||||
"tags": [
|
||||
"land",
|
||||
"support",
|
||||
"culture"
|
||||
]
|
||||
},
|
||||
"flavor": "Stone forgets. Ink does not.",
|
||||
"archetype": "civilian",
|
||||
"promotion_tree": null,
|
||||
"clan_affinity": [],
|
||||
"great_person_class": "great_writer",
|
||||
"great_person_gpp_type": "scholarship",
|
||||
"great_person_produces": "culture_bomb",
|
||||
"great_person_action": {
|
||||
"action_type": "culture_bomb",
|
||||
"rationale": "Commits a saga-cycle that floods a city's culture and can trigger a Golden Age.",
|
||||
"max_target_tier": 5
|
||||
},
|
||||
"logistics": {
|
||||
"composition": {
|
||||
"leader": 1,
|
||||
"member": 10
|
||||
},
|
||||
"inventory": {
|
||||
"rations": 110,
|
||||
"water": 88,
|
||||
"tool_durability": 2
|
||||
},
|
||||
"stats": {
|
||||
"str": 30,
|
||||
"con": 88,
|
||||
"end": 90
|
||||
},
|
||||
"terrain_movement": {
|
||||
"road": 0.5,
|
||||
"dirt_road": 0.65,
|
||||
"wagon_track": 0.85,
|
||||
"trail": 0.8,
|
||||
"grass": 1.0,
|
||||
"hills": 1.5,
|
||||
"forest_open": 1.5,
|
||||
"forest_dense": 2.5,
|
||||
"mountain": 3.0,
|
||||
"snow": 2.0,
|
||||
"tundra": 1.5,
|
||||
"desert": 2.5,
|
||||
"marsh": 3.0,
|
||||
"river_ford": 2.0,
|
||||
"river_unfordable": "blocked",
|
||||
"deep_water": "blocked"
|
||||
},
|
||||
"carriers": {
|
||||
"foot_runners": 2
|
||||
},
|
||||
"supply": {
|
||||
"range_turns": 6,
|
||||
"decline_rate": 0.8
|
||||
},
|
||||
"slots": {
|
||||
"ox_wagon": {
|
||||
"enabling_tech": "animal_husbandry",
|
||||
"enabling_resources": [
|
||||
"cattle"
|
||||
],
|
||||
"provides": "+2 carry-capacity, fodder consumption",
|
||||
"count": 1
|
||||
},
|
||||
"officer_bird": {
|
||||
"enabling_tech": "falconry_command",
|
||||
"enabling_resources": [
|
||||
"crag_aerie"
|
||||
],
|
||||
"provides": "crag-raven one-way carrier",
|
||||
"count": 2
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
Loading…
Add table
Reference in a new issue