Add Wu counterstroke scenario

This commit is contained in:
2026-06-18 02:05:15 +09:00
parent 33a8998e1a
commit edaaf4ce71
5 changed files with 376 additions and 4 deletions

View File

@@ -4,7 +4,7 @@ Godot 4 tactical RPG prototype inspired by classic turn-based Romance of the Thr
## Current Slice ## Current Slice
- Fifty-three campaign scenarios. - Fifty-four campaign scenarios.
- Grid movement. - Grid movement.
- Unit selection. - Unit selection.
- Move, attack, wait, end turn. - Move, attack, wait, end turn.
@@ -74,6 +74,7 @@ Godot 4 tactical RPG prototype inspired by classic turn-based Romance of the Thr
- Eastern Front Alarm consumes the Wei Succession branch flags and returns the campaign to the Ruxu river front as Wu tests the transition. - Eastern Front Alarm consumes the Wei Succession branch flags and returns the campaign to the Ruxu river front as Wu tests the transition.
- Wu River Line consumes the Eastern Front Alarm branch flags and breaks open the Ruxu river line for an anchored fleet or Jianye pressure. - Wu River Line consumes the Eastern Front Alarm branch flags and breaks open the Ruxu river line for an anchored fleet or Jianye pressure.
- Jianye Approach consumes the Wu River Line branch flags and presses the lower Yangtze approach toward a secured route or forced Wu counterstroke. - Jianye Approach consumes the Wu River Line branch flags and presses the lower Yangtze approach toward a secured route or forced Wu counterstroke.
- Wu Counterstroke consumes the Jianye Approach branch flags and breaks Wu's forward answer into a held lower Yangtze route or Jianye gate pressure.
- Post-battle choices can save campaign flags that branch later briefing text, shop stock, and scenario events. - Post-battle choices can save campaign flags that branch later briefing text, shop stock, and scenario events.
- Scenario post-battle dialogue can play before the victory result panel. - Scenario post-battle dialogue can play before the victory result panel.
- Basic battle EXP, level-ups, and core first-tier class promotion routes. - Basic battle EXP, level-ups, and core first-tier class promotion routes.

View File

@@ -268,6 +268,11 @@
"id": "053_jianye_approach", "id": "053_jianye_approach",
"title": "Jianye Approach", "title": "Jianye Approach",
"path": "res://data/scenarios/053_jianye_approach.json" "path": "res://data/scenarios/053_jianye_approach.json"
},
{
"id": "054_wu_counterstroke",
"title": "Wu Counterstroke",
"path": "res://data/scenarios/054_wu_counterstroke.json"
} }
] ]
} }

View File

@@ -0,0 +1,363 @@
{
"id": "054_wu_counterstroke",
"name": "Wu Counterstroke",
"objectives": {
"victory": "Reach the counterstroke line with Cao Cao, then defeat the Wu counterstroke commander.",
"defeat": "Cao Cao is defeated or the battle reaches Turn 18."
},
"conditions": {
"victory": { "type": "all_units_defeated", "team": "enemy", "after_event": "counterstroke_line_reached" },
"defeat": [
{ "type": "any_officer_defeated", "team": "player", "officer_ids": ["cao_cao"] },
{ "type": "turn_reached", "turn": 18, "team": "player" }
]
},
"briefing": {
"title": "Wu Counterstroke",
"location": "Jianye Road and River Banks, Eastern Front, 220 CE",
"lines": [
"The open approach toward Jianye draws Wu into a counterstroke before Wei can decide whether to fortify the road or press the capital guard.",
"Cao Cao advances to seize the counterstroke line, break Wu's river response, and decide whether the lower Yangtze becomes a held route or a road to the gates."
],
"conditional_lines": [
{
"campaign_flags": { "secured_jianye_approach": true },
"lines": [
"The secured Jianye approach gives Wei prepared carts, marked crossings, and a firm place to absorb Wu's answer."
]
},
{
"campaign_flags": { "forced_wu_counterstroke": true },
"lines": [
"Forcing Wu's counterstroke pulls their captains forward in anger, but their boats now rush into battle before the rear line can fully form."
]
}
]
},
"shop": {
"items": [
"bean",
"wine",
"iron_sword",
"training_spear",
"short_bow",
"hand_axe",
"war_axe",
"leather_armor",
"iron_armor"
],
"conditional_items": [
{
"campaign_flags": { "secured_jianye_approach": true },
"items": ["imperial_seal"]
},
{
"campaign_flags": { "forced_wu_counterstroke": true },
"items": ["war_drum"]
}
]
},
"roster": {
"max_units": 7,
"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, 2], [3, 3], [3, 4], [3, 5], [3, 6]]
},
"map": {
"width": 18,
"height": 11,
"terrain": [
"WWWWWWWWWWWWWWWWWW",
"WGGGFFWWRRWWFFGGGW",
"GGGGWWGGGGRRGGGGGG",
"GGFFWWGGRRRRGFFGGG",
"RRRRRRRRRRRRRRRRRR",
"GGFFWWGGRRRRGFFGGG",
"GGGGWWGGGGRRGGGGGG",
"GHHHWWGFFFGGFFFGGG",
"GHHHWWGGGGHHHGGGGG",
"GGGGWWGGGGHHHFFGGG",
"WWWWWWWWWWWWWWWWWW"
]
},
"deployments": [
{
"unit_id": "cao_cao_ch54",
"officer_id": "cao_cao",
"team": "player",
"pos": [1, 4]
},
{
"unit_id": "guo_jia_ch54",
"officer_id": "guo_jia",
"team": "player",
"requires_joined": true,
"pos": [2, 4]
},
{
"unit_id": "zhang_he_ch54",
"officer_id": "zhang_he",
"team": "player",
"requires_joined": true,
"pos": [2, 3]
},
{
"unit_id": "xiahou_dun_ch54",
"officer_id": "xiahou_dun",
"team": "player",
"pos": [1, 5]
},
{
"unit_id": "dian_wei_ch54",
"officer_id": "dian_wei",
"team": "player",
"requires_joined": true,
"pos": [2, 5]
},
{
"unit_id": "xiahou_yuan_ch54",
"officer_id": "xiahou_yuan",
"team": "player",
"requires_joined": true,
"pos": [3, 3]
},
{
"unit_id": "cao_ren_ch54",
"officer_id": "cao_ren",
"team": "player",
"requires_joined": true,
"pos": [3, 4]
},
{
"unit_id": "wu_counterstroke_commander",
"name": "Wu Counterstroke Commander",
"class_id": "commander",
"team": "enemy",
"level": 51,
"pos": [14, 4],
"base": { "hp": 170, "mp": 82, "atk": 54, "def": 45, "int": 43, "agi": 30 }
},
{
"unit_id": "jianye_road_captain",
"name": "Jianye Road Captain",
"class_id": "guard_captain",
"team": "enemy",
"level": 51,
"pos": [12, 4],
"base": { "hp": 136, "atk": 53, "def": 46 }
},
{
"unit_id": "ling_tong_counter_boat",
"name": "Ling Tong Counter Boat",
"class_id": "champion",
"team": "enemy",
"move_type": "water",
"level": 51,
"pos": [4, 3],
"base": { "hp": 164, "mp": 12, "atk": 55, "def": 41, "int": 14, "agi": 37 }
},
{
"unit_id": "wu_counterstroke_advisor",
"name": "Wu Counterstroke Advisor",
"class_id": "military_advisor",
"team": "enemy",
"level": 51,
"pos": [13, 5],
"skills": ["blaze", "great_mend"],
"base": { "hp": 122, "mp": 106, "atk": 8, "def": 32, "int": 54, "agi": 27 }
},
{
"unit_id": "wu_counter_spear_north",
"name": "Wu Counter Spear",
"class_id": "infantry",
"team": "enemy",
"level": 51,
"pos": [12, 3],
"base": { "hp": 124, "atk": 52, "def": 42 }
},
{
"unit_id": "wu_counter_spear_south",
"name": "Wu Counter Spear",
"class_id": "infantry",
"team": "enemy",
"level": 51,
"pos": [12, 5],
"base": { "hp": 124, "atk": 52, "def": 42 }
},
{
"unit_id": "wu_counter_arrow_boat",
"name": "Wu Counter Arrow Boat",
"class_id": "marksman",
"team": "enemy",
"move_type": "water",
"level": 51,
"pos": [5, 5],
"base": { "hp": 116, "atk": 53, "def": 28, "agi": 40 }
}
],
"events": [
{
"id": "opening",
"once": true,
"when": { "type": "battle_start" },
"actions": [
{ "type": "log", "text": "Wu throws a counterstroke across the Jianye road and river banks." }
]
},
{
"id": "opening_dialogue",
"once": true,
"when": { "type": "battle_begin" },
"actions": [
{
"type": "dialogue",
"lines": [
{ "speaker": "Cao Ren", "text": "Wu is no longer waiting behind the approach. Their counterstroke is already on the road." },
{ "speaker": "Guo Jia", "text": "A rushed counterstroke spends courage before it spends judgment. Break its line and Jianye loses both." },
{ "speaker": "Cao Cao", "text": "Then meet their courage directly. We decide where this road ends." }
]
}
]
},
{
"id": "secured_approach_holds_line",
"once": true,
"when": { "type": "turn_start", "team": "player", "turn": 2, "campaign_flags": { "secured_jianye_approach": true } },
"actions": [
{
"type": "dialogue",
"lines": [
{ "speaker": "Xiahou Dun", "text": "The secured approach is holding. Their counterstroke has to hit us where the road is already ours." },
{ "speaker": "Cao Cao", "text": "Good. A prepared road turns enemy speed into noise." }
]
}
]
},
{
"id": "forced_counterstroke_rushes_boats",
"once": true,
"when": { "type": "turn_start", "team": "enemy", "turn": 2, "campaign_flags": { "forced_wu_counterstroke": true } },
"actions": [
{
"type": "dialogue",
"lines": [
{ "speaker": "Wu Counterstroke Commander", "text": "Wei forced us forward. Strike with the river boats before their column locks shields." },
{ "speaker": "Zhang He", "text": "They are committed now. If we bend their boat line, the road guard stands alone." }
]
},
{
"type": "spawn_deployment",
"deployment": {
"unit_id": "wu_rushing_counter_boat",
"name": "Wu Rushing Counter Boat",
"class_id": "champion",
"team": "enemy",
"move_type": "water",
"level": 51,
"pos": [5, 3],
"base": { "hp": 114, "atk": 48, "def": 32, "agi": 38 }
}
}
]
},
{
"id": "turn_4_counterstroke_commits",
"once": true,
"when": { "type": "turn_start", "team": "enemy", "turn": 4 },
"actions": [
{
"type": "dialogue",
"lines": [
{ "speaker": "Wu Counterstroke Advisor", "text": "Commit the center. If Wei takes this road, the capital hears hoofbeats before counsel." },
{ "speaker": "Guo Jia", "text": "Their center moves because the capital is afraid. That fear is useful ground." }
]
}
]
},
{
"id": "counterstroke_line_reached",
"once": true,
"when": { "type": "unit_reaches_tile", "team": "player", "officer_ids": ["cao_cao"], "pos": [10, 4] },
"actions": [
{
"type": "set_objective",
"victory": "The counterstroke line is reached. Defeat the Wu counterstroke commander.",
"defeat": "Cao Cao is defeated or the battle reaches Turn 18."
},
{
"type": "dialogue",
"lines": [
{ "speaker": "Cao Cao", "text": "This is the line Wu threw forward. Break it, and Jianye's guard must answer from behind its own fear." },
{ "speaker": "Wu Counterstroke Commander", "text": "A counterstroke broken still leaves a capital wall before you." }
]
},
{
"type": "spawn_deployments",
"deployments": [
{
"unit_id": "wu_counter_inner_guard",
"name": "Wu Counter Inner Guard",
"class_id": "guard_captain",
"team": "enemy",
"level": 51,
"pos": [16, 4],
"base": { "hp": 132, "atk": 52, "def": 45 }
},
{
"unit_id": "wu_counter_crossbow_boat",
"name": "Wu Counter Crossbow Boat",
"class_id": "marksman",
"team": "enemy",
"move_type": "water",
"level": 51,
"pos": [10, 1],
"base": { "hp": 108, "atk": 51, "def": 25, "agi": 39 }
}
]
}
]
},
{
"id": "turn_9_counterstroke_frays",
"once": true,
"when": { "type": "turn_start", "team": "player", "turn": 9 },
"actions": [
{
"type": "dialogue",
"lines": [
{ "speaker": "Cao Ren", "text": "Their counterstroke is fraying. The boats still cut at our flank, but the road center is losing order." },
{ "speaker": "Cao Cao", "text": "Then close the road before the river gives them another answer." }
]
}
]
}
],
"rewards": {
"gold": 10600,
"items": ["bean", "wine", "war_axe"]
},
"post_battle_dialogue": [
{ "speaker": "Guo Jia", "text": "Wu's counterstroke is spent. The lower Yangtze route can be held and widened, or Wei can press toward Jianye's gate while the enemy gathers itself." },
{ "speaker": "Cao Ren", "text": "Hold the route and no one cuts our rear. Press the gate and Wu must decide inside its own walls." },
{ "speaker": "Cao Cao", "text": "A broken counterstroke is a door. Whether we bar it behind us or step through it is the next command." }
],
"post_battle_choices": [
{
"id": "hold_lower_yangtze_route",
"label": "Hold Route",
"description": "Cao Cao holds and widens the lower Yangtze route before committing against Jianye.",
"set_flags": { "held_lower_yangtze_route": true, "pressed_jianye_gate": false },
"gold": 1950,
"items": ["imperial_seal"]
},
{
"id": "press_jianye_gate",
"label": "Press Gate",
"description": "Cao Cao presses toward Jianye's gate before Wu can rebuild its counterstroke line.",
"set_flags": { "held_lower_yangtze_route": false, "pressed_jianye_gate": true },
"gold": 1750,
"items": ["war_drum"]
}
]
}

View File

@@ -64,6 +64,7 @@ data/scenarios/050_wei_succession.json
data/scenarios/051_eastern_front_alarm.json data/scenarios/051_eastern_front_alarm.json
data/scenarios/052_wu_river_line.json data/scenarios/052_wu_river_line.json
data/scenarios/053_jianye_approach.json data/scenarios/053_jianye_approach.json
data/scenarios/054_wu_counterstroke.json
``` ```
## Campaign ## Campaign
@@ -129,7 +130,8 @@ The campaign file defines scenario order, resource paths, and officers who are a
{ "id": "050_wei_succession", "title": "Wei Succession", "path": "res://data/scenarios/050_wei_succession.json" }, { "id": "050_wei_succession", "title": "Wei Succession", "path": "res://data/scenarios/050_wei_succession.json" },
{ "id": "051_eastern_front_alarm", "title": "Eastern Front Alarm", "path": "res://data/scenarios/051_eastern_front_alarm.json" }, { "id": "051_eastern_front_alarm", "title": "Eastern Front Alarm", "path": "res://data/scenarios/051_eastern_front_alarm.json" },
{ "id": "052_wu_river_line", "title": "Wu River Line", "path": "res://data/scenarios/052_wu_river_line.json" }, { "id": "052_wu_river_line", "title": "Wu River Line", "path": "res://data/scenarios/052_wu_river_line.json" },
{ "id": "053_jianye_approach", "title": "Jianye Approach", "path": "res://data/scenarios/053_jianye_approach.json" } { "id": "053_jianye_approach", "title": "Jianye Approach", "path": "res://data/scenarios/053_jianye_approach.json" },
{ "id": "054_wu_counterstroke", "title": "Wu Counterstroke", "path": "res://data/scenarios/054_wu_counterstroke.json" }
] ]
} }
``` ```

View File

@@ -21,7 +21,7 @@
- Destination victory conditions and objective map markers exist. - Destination victory conditions and objective map markers exist.
- Turn-limit conditions and HUD turn-limit display exist. - Turn-limit conditions and HUD turn-limit display exist.
- Victory reward summary is visible. - Victory reward summary is visible.
- Next-battle flow exists across the current fifty-three-scenario campaign. - Next-battle flow exists across the current fifty-four-scenario campaign.
- Campaign completion and new-campaign reset exist. - Campaign completion and new-campaign reset exist.
- Reward inventory can be brought into the next battle. - Reward inventory can be brought into the next battle.
@@ -52,7 +52,7 @@
- Party roster persistence has a first save-file skeleton. - Party roster persistence has a first save-file skeleton.
- Level, experience, and equipment persistence. - Level, experience, and equipment persistence.
- Chapter selection and save/load. - Chapter selection and save/load.
- Linear fifty-three-scenario campaign order exists. - Linear fifty-four-scenario campaign order exists.
- Save reset exists. - Save reset exists.
- Victory rewards, consumable counts, equipment stock, and equipped gear persist. - Victory rewards, consumable counts, equipment stock, and equipped gear persist.
- A basic pre-battle shop with scenario-specific stock exists. Sell-back and richer item management are still planned. - A basic pre-battle shop with scenario-specific stock exists. Sell-back and richer item management are still planned.
@@ -113,6 +113,7 @@
- Fifty-first-scenario content exists with eastern-front alarm pressure, water-move Wu boats, Wei authority or prepared-front branch reactions, and eastern fleet or Wu river-line follow-up flags. - Fifty-first-scenario content exists with eastern-front alarm pressure, water-move Wu boats, Wei authority or prepared-front branch reactions, and eastern fleet or Wu river-line follow-up flags.
- Fifty-second-scenario content exists with Wu river-line pressure, water-move counterboats, eastern fleet or river-line pressure branch reactions, and Ruxu fleet or Jianye pressure follow-up flags. - Fifty-second-scenario content exists with Wu river-line pressure, water-move counterboats, eastern fleet or river-line pressure branch reactions, and Ruxu fleet or Jianye pressure follow-up flags.
- Fifty-third-scenario content exists with Jianye approach pressure, water-move counterboats, Ruxu fleet or Jianye-pressure branch reactions, and secured approach or Wu counterstroke follow-up flags. - Fifty-third-scenario content exists with Jianye approach pressure, water-move counterboats, Ruxu fleet or Jianye-pressure branch reactions, and secured approach or Wu counterstroke follow-up flags.
- Fifty-fourth-scenario content exists with Wu counterstroke pressure, water-move counterboats, secured approach or forced-counterstroke branch reactions, and lower Yangtze route or Jianye gate follow-up flags.
## Milestone 5: Presentation ## Milestone 5: Presentation