Files
heros/data/scenarios/010_white_horse_relief.json

483 lines
15 KiB
JSON

{
"id": "010_white_horse_relief",
"name": "White Horse Relief",
"objectives": {
"victory": "Defeat Yan Liang's vanguard after the decoy line is sprung.",
"defeat": "Cao Cao is defeated or the battle reaches Turn 12."
},
"conditions": {
"victory": { "type": "all_units_defeated", "team": "enemy", "after_event": "turn_3_decoy_line" },
"defeat": [
{ "type": "any_officer_defeated", "team": "player", "officer_ids": ["cao_cao"] },
{ "type": "turn_reached", "turn": 12, "team": "player" }
]
},
"briefing": {
"title": "White Horse Relief",
"location": "White Horse, 200 CE",
"lines": [
"Yuan Shao's forward army presses toward White Horse with Yan Liang at its point.",
"Guo Jia proposes a decoy line: draw the vanguard down the road, then strike once its wings stretch too far."
],
"conditional_lines": [
{
"campaign_flags": { "integrated_xu_province": true },
"lines": [
"Officials left in Xu Province keep the rear quiet, letting Cao Cao commit steadier reserves to the northern front."
]
},
{
"campaign_flags": { "pressed_northern_campaign": true },
"lines": [
"The army marches quickly from Xiapi, hoping speed can strike Yuan Shao's vanguard before it settles."
]
}
],
"camp_conversations": [
{
"id": "white_horse_decoy_council",
"group": "officer",
"officer_id": "guo_jia",
"label": "Guo Jia - Decoy Line",
"speaker": "Guo Jia",
"summary": "Set the false retreat that will pull Yan Liang away from his supports.",
"lines": [
{
"speaker": "Guo Jia",
"side": "right",
"text": "Yan Liang will read a bending line as weakness. Let him see exactly enough of what he wants."
},
{
"speaker": "Cao Cao",
"side": "left",
"text": "A trap that looks too clever warns the prey. This one must look like fear."
}
]
},
{
"id": "white_horse_xiahou_dun_false_retreat",
"group": "officer",
"officer_id": "xiahou_dun",
"label": "Xiahou Dun - False Retreat",
"speaker": "Xiahou Dun",
"summary": "Prepare the center line to yield without breaking.",
"lines": [
{
"speaker": "Xiahou Dun",
"side": "left",
"text": "Men can pretend to retreat, but their backs still know the feeling. I will keep the center from turning real."
},
{
"speaker": "Guo Jia",
"side": "right",
"text": "Good. Bend the line by measure, not panic. Yan Liang must think he chose the road himself."
}
]
},
{
"id": "white_horse_xu_reserve_medicine",
"campaign_flags": { "integrated_xu_province": true },
"group": "topic",
"label": "Xu Reserve Medicine",
"summary": "Draw field medicine from the quiet rear roads secured after Xiapi.",
"lines": [
{
"speaker": "Cao Ren",
"side": "left",
"text": "Xu Province is quiet behind us. The reserve carts arrived with dry medicine and no arrows in the canvas."
},
{
"speaker": "Cao Cao",
"side": "right",
"text": "Then send it to the men who must look beaten without becoming so."
}
],
"effects": [
{
"type": "grant_item",
"item_id": "panacea",
"count": 1,
"text": "The Xu reserve medicine adds a Panacea to the field supplies."
}
]
},
{
"id": "white_horse_fast_march_beans",
"campaign_flags": { "pressed_northern_campaign": true },
"group": "topic",
"label": "Fast March Beans",
"summary": "Issue portable food to troops who reached White Horse ahead of the heavy carts.",
"lines": [
{
"speaker": "Xiahou Yuan",
"side": "right",
"text": "The army came north fast from Xiapi. The riders are fresh enough, but the footmen ate while walking."
},
{
"speaker": "Guo Jia",
"side": "left",
"text": "Give the center beans before it yields. A false retreat is easier on a full breath."
}
],
"effects": [
{
"type": "grant_item",
"item_id": "bean",
"count": 1,
"text": "The fast march beans add a Bean to the field supplies."
}
]
}
]
},
"shop": {
"items": [
"bean",
"panacea",
"wine",
"iron_sword",
"training_spear",
"short_bow",
"hand_axe",
"leather_armor",
"iron_armor"
],
"conditional_items": [
{
"campaign_flags": { "integrated_xu_province": true },
"items": ["imperial_seal"]
},
{
"campaign_flags": { "pressed_northern_campaign": true },
"items": ["war_drum"]
}
],
"merchant": {
"name": "White Horse Road Sutler",
"lines": [
"Buy before the banners start pretending to run. Once the decoy begins, every cart follows its assigned fear.",
"Beans for the center line, medicine for mistakes, and no heavy baggage where Yan Liang can see it."
]
}
},
"roster": {
"max_units": 6,
"required_officers": ["cao_cao", "guo_jia"]
},
"formation": {
"cells": [[1, 3], [1, 4], [1, 5], [2, 2], [2, 3], [2, 4], [2, 5], [2, 6], [3, 3], [3, 4]]
},
"map": {
"width": 15,
"height": 10,
"terrain": [
"GGGGGGHHGGGGGGG",
"GGFFGGHHGGGFFGG",
"GGFFRRRRRRGFFGG",
"GGGGGRGGGRGGGGG",
"RRRRRRRRRRRRRRR",
"GGGGGRGGGRGGGGG",
"GGHHGRRRGGFFFGG",
"GGHHGFFFGGFFFGG",
"GGGGGFFFGGWWGGG",
"GGGGGGGGGGWWGGG"
]
},
"deployments": [
{
"unit_id": "cao_cao_ch10",
"officer_id": "cao_cao",
"team": "player",
"pos": [1, 4]
},
{
"unit_id": "guo_jia_ch10",
"officer_id": "guo_jia",
"team": "player",
"requires_joined": true,
"pos": [2, 4]
},
{
"unit_id": "xiahou_dun_ch10",
"officer_id": "xiahou_dun",
"team": "player",
"pos": [1, 5]
},
{
"unit_id": "dian_wei_ch10",
"officer_id": "dian_wei",
"team": "player",
"requires_joined": true,
"pos": [2, 5]
},
{
"unit_id": "xiahou_yuan_ch10",
"officer_id": "xiahou_yuan",
"team": "player",
"requires_joined": true,
"pos": [2, 3]
},
{
"unit_id": "cao_ren_ch10",
"officer_id": "cao_ren",
"team": "player",
"requires_joined": true,
"pos": [3, 3]
},
{
"unit_id": "yan_liang_vanguard",
"name": "Yan Liang Vanguard",
"class_id": "elite_cavalry",
"team": "enemy",
"level": 10,
"pos": [11, 4],
"base": { "hp": 62, "atk": 20, "def": 11, "agi": 13 }
},
{
"unit_id": "yuan_shao_spear_line",
"name": "Yuan Spear Line",
"class_id": "infantry",
"team": "enemy",
"level": 9,
"pos": [9, 4],
"base": { "hp": 50, "atk": 16, "def": 10 }
},
{
"unit_id": "yuan_shao_guard",
"name": "Yuan Guard",
"class_id": "infantry",
"team": "enemy",
"level": 9,
"pos": [10, 5],
"base": { "hp": 48, "atk": 15, "def": 11 }
},
{
"unit_id": "white_horse_archer_north",
"name": "White Horse Archer",
"class_id": "archer",
"team": "enemy",
"level": 9,
"pos": [10, 2],
"base": { "hp": 34, "atk": 14, "def": 6 }
},
{
"unit_id": "white_horse_archer_south",
"name": "White Horse Archer",
"class_id": "archer",
"team": "enemy",
"level": 9,
"pos": [12, 6],
"base": { "hp": 34, "atk": 14, "def": 6 }
},
{
"unit_id": "yuan_shao_advisor",
"name": "Yuan Advisor",
"class_id": "strategist",
"team": "enemy",
"level": 9,
"pos": [12, 5],
"skills": ["blaze"],
"base": { "hp": 38, "mp": 22, "atk": 6, "def": 6, "int": 14 }
}
],
"events": [
{
"id": "opening",
"once": true,
"when": { "type": "battle_start" },
"actions": [
{ "type": "log", "text": "Yuan Shao's vanguard advances toward White Horse." }
]
},
{
"id": "opening_dialogue",
"once": true,
"when": { "type": "battle_begin" },
"actions": [
{
"type": "dialogue",
"lines": [
{ "speaker": "Guo Jia", "text": "Yan Liang is brave enough to follow a retreating banner. That is the door we open." },
{ "speaker": "Cao Cao", "text": "Then the center yields just enough. When his wings stretch, we cut them." },
{ "speaker": "Xiahou Dun", "text": "A false retreat still needs men willing to look beaten." }
]
}
]
},
{
"id": "turn_2_yan_liang_push",
"once": true,
"when": { "type": "turn_start", "team": "enemy", "turn": 2 },
"actions": [
{
"type": "dialogue",
"lines": [
{ "speaker": "Yan Liang", "text": "Cao Cao's line bends already. Drive straight down the road!" },
{ "speaker": "Guo Jia", "text": "He takes the bait. Hold until the second signal." }
]
},
{
"type": "spawn_deployments",
"deployments": [
{
"unit_id": "yan_liang_rider_north",
"name": "Yan Liang Rider",
"class_id": "cavalry",
"team": "enemy",
"level": 9,
"pos": [8, 2],
"base": { "hp": 42, "atk": 15, "def": 8, "agi": 11 }
},
{
"unit_id": "yan_liang_rider_south",
"name": "Yan Liang Rider",
"class_id": "cavalry",
"team": "enemy",
"level": 9,
"pos": [8, 6],
"base": { "hp": 42, "atk": 15, "def": 8, "agi": 11 }
}
]
}
]
},
{
"id": "turn_3_decoy_line",
"once": true,
"when": { "type": "turn_start", "team": "player", "turn": 3 },
"actions": [
{
"type": "dialogue",
"lines": [
{ "speaker": "Cao Cao", "text": "Signal the counterstroke. Yan Liang has outrun his supports." },
{ "speaker": "Guo Jia", "text": "The vanguard is isolated. Strike the horse first, then the spears." }
]
},
{
"type": "set_objective",
"victory": "Defeat Yan Liang and every isolated vanguard unit.",
"defeat": "Cao Cao is defeated or the battle reaches Turn 12."
},
{
"type": "spawn_deployments",
"deployments": [
{
"unit_id": "decoy_cutoff_guard",
"name": "Cutoff Guard",
"class_id": "infantry",
"team": "enemy",
"level": 9,
"pos": [7, 4],
"base": { "hp": 44, "atk": 15, "def": 9 }
},
{
"unit_id": "decoy_cutoff_archer",
"name": "Cutoff Archer",
"class_id": "archer",
"team": "enemy",
"level": 9,
"pos": [7, 5],
"base": { "hp": 32, "atk": 13, "def": 5 }
}
]
}
]
},
{
"id": "yan_liang_vanguard_defeated",
"once": true,
"when": { "type": "unit_defeated", "unit_ids": ["yan_liang_vanguard"] },
"actions": [
{
"type": "dialogue",
"lines": [
{ "speaker": "Guo Jia", "text": "Yan Liang's banner is down. His riders will feel that before Yuan Shao can answer." },
{ "speaker": "Cao Cao", "text": "Press the isolated vanguard and make White Horse breathe again." }
]
}
]
},
{
"id": "xu_province_reserve",
"once": true,
"when": { "type": "turn_start", "team": "player", "turn": 4, "campaign_flags": { "integrated_xu_province": true } },
"actions": [
{
"type": "dialogue",
"lines": [
{ "speaker": "Cao Ren", "text": "Xu Province's roads are quiet. The reserve wagons have arrived on time." },
{ "speaker": "Cao Cao", "text": "Order and grain win battles before blades touch." }
]
}
]
},
{
"id": "northern_pressure",
"once": true,
"when": { "type": "turn_start", "team": "enemy", "turn": 4, "campaign_flags": { "pressed_northern_campaign": true } },
"actions": [
{
"type": "dialogue",
"lines": [
{ "speaker": "Yuan Scout", "text": "Cao Cao came quickly. Send the rear riders before his men settle!" },
{ "speaker": "Xiahou Yuan", "text": "More riders from the east. They are trying to punish our speed." }
]
},
{
"type": "spawn_deployment",
"deployment": {
"unit_id": "yuan_rear_rider",
"name": "Yuan Rear Rider",
"class_id": "cavalry",
"team": "enemy",
"level": 9,
"pos": [5, 8],
"base": { "hp": 40, "atk": 15, "def": 8, "agi": 11 }
}
}
]
},
{
"id": "turn_6_finish_vanguard",
"once": true,
"when": { "type": "turn_start", "team": "player", "turn": 6 },
"actions": [
{
"type": "dialogue",
"lines": [
{ "speaker": "Guo Jia", "text": "Yan Liang's formation is no longer an army. It is a collection of frightened men." },
{ "speaker": "Cao Cao", "text": "Then finish this cleanly. White Horse must not remain under threat." }
]
}
]
}
],
"rewards": {
"gold": 1500,
"items": ["bean", "wine", "iron_armor"]
},
"post_battle_dialogue": [
{ "speaker": "Xiahou Dun", "text": "Yan Liang's charge broke exactly where Guo Jia said it would." },
{ "speaker": "Guo Jia", "text": "Bravery is useful. Predictable bravery is a road sign." },
{ "speaker": "Cao Cao", "text": "White Horse is relieved. Now Yuan Shao must answer us with more than numbers." }
],
"post_battle_choices": [
{
"id": "fortify_white_horse",
"label": "Fortify White Horse",
"description": "Cao Cao strengthens the crossing before the main Guandu confrontation.",
"set_flags": { "fortified_white_horse": true, "raided_yuan_supplies": false },
"gold": 150,
"items": ["iron_armor"]
},
{
"id": "raid_yuan_supplies",
"label": "Raid Supplies",
"description": "The army uses the vanguard's collapse to harass Yuan Shao's supply train.",
"set_flags": { "fortified_white_horse": false, "raided_yuan_supplies": true },
"gold": 100,
"items": ["wine", "training_spear"]
}
]
}