Add Wu river line scenario

This commit is contained in:
2026-06-18 01:57:13 +09:00
parent 94996ed2ce
commit e6acf124bd
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
- Fifty-one campaign scenarios.
- Fifty-two campaign scenarios.
- Grid movement.
- Unit selection.
- Move, attack, wait, end turn.
@@ -72,6 +72,7 @@ Godot 4 tactical RPG prototype inspired by classic turn-based Romance of the Thr
- Luoyang Summons consumes the Jing Province Settlement branch flags and opens the court road toward Wei's next transition.
- Wei Succession consumes the Luoyang Summons branch flags and secures the succession dais before the next frontier decision.
- 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.
- 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.
- Basic battle EXP, level-ups, and core first-tier class promotion routes.

View File

@@ -258,6 +258,11 @@
"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"
}
]
}

View File

@@ -0,0 +1,363 @@
{
"id": "052_wu_river_line",
"name": "Wu River Line",
"objectives": {
"victory": "Reach Wu's river line with Cao Cao, then defeat the Wu fleet guard.",
"defeat": "Cao Cao is defeated or the battle reaches Turn 18."
},
"conditions": {
"victory": { "type": "all_units_defeated", "team": "enemy", "after_event": "wu_river_line_reached" },
"defeat": [
{ "type": "any_officer_defeated", "team": "player", "officer_ids": ["cao_cao"] },
{ "type": "turn_reached", "turn": 18, "team": "player" }
]
},
"briefing": {
"title": "Wu River Line",
"location": "Ruxu River Line, Eastern Front, 220 CE",
"lines": [
"The eastern front alarm has quieted, but Wu's river line remains alive with watchfires, current boats, and captains testing the edge of Wei's new authority.",
"Cao Cao advances toward the river line to decide whether Ruxu becomes a stable fleet base or the first step toward deeper Wu pressure."
],
"conditional_lines": [
{
"campaign_flags": { "secured_eastern_fleet": true },
"lines": [
"Securing the eastern fleet gives Cao Cao steadier boats, screened crossings, and time to measure Wu's river guard before committing."
]
},
{
"campaign_flags": { "pressed_wu_river_line": true },
"lines": [
"Pressing Wu's river line keeps the enemy unsettled, but their captains now expect Wei to strike before the water calms."
]
}
]
},
"shop": {
"items": [
"bean",
"wine",
"iron_sword",
"training_spear",
"short_bow",
"hand_axe",
"war_axe",
"leather_armor",
"iron_armor"
],
"conditional_items": [
{
"campaign_flags": { "secured_eastern_fleet": true },
"items": ["imperial_seal"]
},
{
"campaign_flags": { "pressed_wu_river_line": 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_ch52",
"officer_id": "cao_cao",
"team": "player",
"pos": [1, 4]
},
{
"unit_id": "guo_jia_ch52",
"officer_id": "guo_jia",
"team": "player",
"requires_joined": true,
"pos": [2, 4]
},
{
"unit_id": "zhang_he_ch52",
"officer_id": "zhang_he",
"team": "player",
"requires_joined": true,
"pos": [2, 3]
},
{
"unit_id": "xiahou_dun_ch52",
"officer_id": "xiahou_dun",
"team": "player",
"pos": [1, 5]
},
{
"unit_id": "dian_wei_ch52",
"officer_id": "dian_wei",
"team": "player",
"requires_joined": true,
"pos": [2, 5]
},
{
"unit_id": "xiahou_yuan_ch52",
"officer_id": "xiahou_yuan",
"team": "player",
"requires_joined": true,
"pos": [3, 3]
},
{
"unit_id": "cao_ren_ch52",
"officer_id": "cao_ren",
"team": "player",
"requires_joined": true,
"pos": [3, 4]
},
{
"unit_id": "wu_river_line_guard",
"name": "Wu River Line Guard",
"class_id": "commander",
"team": "enemy",
"level": 49,
"pos": [14, 4],
"base": { "hp": 162, "mp": 78, "atk": 52, "def": 43, "int": 41, "agi": 28 }
},
{
"unit_id": "ruxu_fleet_captain",
"name": "Ruxu Fleet Captain",
"class_id": "guard_captain",
"team": "enemy",
"level": 49,
"pos": [12, 4],
"base": { "hp": 132, "atk": 51, "def": 44 }
},
{
"unit_id": "gan_ning_river_line_boat",
"name": "Gan Ning River Line Boat",
"class_id": "champion",
"team": "enemy",
"move_type": "water",
"level": 49,
"pos": [4, 3],
"base": { "hp": 160, "mp": 12, "atk": 53, "def": 39, "int": 14, "agi": 35 }
},
{
"unit_id": "wu_river_line_advisor",
"name": "Wu River Line Advisor",
"class_id": "military_advisor",
"team": "enemy",
"level": 49,
"pos": [13, 5],
"skills": ["blaze", "great_mend"],
"base": { "hp": 118, "mp": 102, "atk": 8, "def": 30, "int": 52, "agi": 26 }
},
{
"unit_id": "wu_river_spear_north",
"name": "Wu River Spear",
"class_id": "infantry",
"team": "enemy",
"level": 49,
"pos": [12, 3],
"base": { "hp": 120, "atk": 50, "def": 40 }
},
{
"unit_id": "wu_river_spear_south",
"name": "Wu River Spear",
"class_id": "infantry",
"team": "enemy",
"level": 49,
"pos": [12, 5],
"base": { "hp": 120, "atk": 50, "def": 40 }
},
{
"unit_id": "wu_river_arrow_boat",
"name": "Wu River Arrow Boat",
"class_id": "marksman",
"team": "enemy",
"move_type": "water",
"level": 49,
"pos": [5, 5],
"base": { "hp": 112, "atk": 51, "def": 26, "agi": 38 }
}
],
"events": [
{
"id": "opening",
"once": true,
"when": { "type": "battle_start" },
"actions": [
{ "type": "log", "text": "Wei advances from the eastern alarm toward Wu's river line at Ruxu." }
]
},
{
"id": "opening_dialogue",
"once": true,
"when": { "type": "battle_begin" },
"actions": [
{
"type": "dialogue",
"lines": [
{ "speaker": "Cao Ren", "text": "The alarm has faded, but Wu's river line still waits with boats in every channel." },
{ "speaker": "Guo Jia", "text": "A quiet river after alarm is not peace. It is the enemy listening for our next oar." },
{ "speaker": "Cao Cao", "text": "Then let them hear it. We take the line before the current chooses for us." }
]
}
]
},
{
"id": "secured_fleet_covers_advance",
"once": true,
"when": { "type": "turn_start", "team": "player", "turn": 2, "campaign_flags": { "secured_eastern_fleet": true } },
"actions": [
{
"type": "dialogue",
"lines": [
{ "speaker": "Xiahou Yuan", "text": "The secured fleet is screening our bank. Wu's side current cannot surprise the crossing." },
{ "speaker": "Cao Cao", "text": "A river guarded before battle becomes a road during battle." }
]
}
]
},
{
"id": "pressed_line_draws_counterboats",
"once": true,
"when": { "type": "turn_start", "team": "enemy", "turn": 2, "campaign_flags": { "pressed_wu_river_line": true } },
"actions": [
{
"type": "dialogue",
"lines": [
{ "speaker": "Wu River Line Guard", "text": "Wei presses before the river settles. Send counterboats through the side channel." },
{ "speaker": "Zhang He", "text": "They answer pressure with speed. That means the line can still be bent." }
]
},
{
"type": "spawn_deployment",
"deployment": {
"unit_id": "wu_side_channel_boat",
"name": "Wu Side-Channel Boat",
"class_id": "champion",
"team": "enemy",
"move_type": "water",
"level": 49,
"pos": [5, 3],
"base": { "hp": 110, "atk": 46, "def": 30, "agi": 36 }
}
}
]
},
{
"id": "turn_4_river_line_pressure",
"once": true,
"when": { "type": "turn_start", "team": "enemy", "turn": 4 },
"actions": [
{
"type": "dialogue",
"lines": [
{ "speaker": "Wu River Line Advisor", "text": "Keep their front guessing between road and water. Ruxu falls only when men trust the bank too much." },
{ "speaker": "Guo Jia", "text": "They want indecision. Give them a decision sharp enough to cross." }
]
}
]
},
{
"id": "wu_river_line_reached",
"once": true,
"when": { "type": "unit_reaches_tile", "team": "player", "officer_ids": ["cao_cao"], "pos": [10, 4] },
"actions": [
{
"type": "set_objective",
"victory": "Wu's river line is reached. Defeat the Wu fleet guard.",
"defeat": "Cao Cao is defeated or the battle reaches Turn 18."
},
{
"type": "dialogue",
"lines": [
{ "speaker": "Cao Cao", "text": "This is Wu's river line. Break the fleet guard and make Ruxu answer to Wei's command." },
{ "speaker": "Wu River Line Guard", "text": "Ruxu's water has carried more than one boast away." }
]
},
{
"type": "spawn_deployments",
"deployments": [
{
"unit_id": "wu_river_inner_guard",
"name": "Wu River Inner Guard",
"class_id": "guard_captain",
"team": "enemy",
"level": 49,
"pos": [16, 4],
"base": { "hp": 128, "atk": 50, "def": 43 }
},
{
"unit_id": "wu_river_crossbow_boat",
"name": "Wu River Crossbow Boat",
"class_id": "marksman",
"team": "enemy",
"move_type": "water",
"level": 49,
"pos": [10, 1],
"base": { "hp": 104, "atk": 49, "def": 23, "agi": 37 }
}
]
}
]
},
{
"id": "turn_9_line_bends",
"once": true,
"when": { "type": "turn_start", "team": "player", "turn": 9 },
"actions": [
{
"type": "dialogue",
"lines": [
{ "speaker": "Cao Ren", "text": "Their river line is bending. The boats are still moving, but their orders are slower." },
{ "speaker": "Cao Cao", "text": "Then make the current carry our pace, not theirs." }
]
}
]
}
],
"rewards": {
"gold": 10200,
"items": ["bean", "wine", "war_drum"]
},
"post_battle_dialogue": [
{ "speaker": "Guo Jia", "text": "Wu's river line is broken open. Ruxu can become an anchored fleet base, or the first marker on a road toward Jianye." },
{ "speaker": "Cao Ren", "text": "Anchor the fleet and the river listens longer. Press toward Jianye and Wu must answer before it is ready." },
{ "speaker": "Cao Cao", "text": "A river line broken is an invitation, not a conclusion. Choose how loudly we answer." }
],
"post_battle_choices": [
{
"id": "anchor_ruxu_fleet",
"label": "Anchor Fleet",
"description": "Cao Cao anchors the Ruxu fleet as a lasting eastern base.",
"set_flags": { "anchored_ruxu_fleet": true, "prepared_jianye_pressure": false },
"gold": 1850,
"items": ["imperial_seal"]
},
{
"id": "prepare_jianye_pressure",
"label": "Press Jianye",
"description": "Cao Cao prepares pressure toward Jianye before Wu can recover the river line.",
"set_flags": { "anchored_ruxu_fleet": false, "prepared_jianye_pressure": true },
"gold": 1650,
"items": ["war_drum"]
}
]
}

View File

@@ -62,6 +62,7 @@ data/scenarios/048_jing_province_settlement.json
data/scenarios/049_luoyang_summons.json
data/scenarios/050_wei_succession.json
data/scenarios/051_eastern_front_alarm.json
data/scenarios/052_wu_river_line.json
```
## Campaign
@@ -125,7 +126,8 @@ The campaign file defines scenario order, resource paths, and officers who are a
{ "id": "048_jing_province_settlement", "title": "Jing Province Settlement", "path": "res://data/scenarios/048_jing_province_settlement.json" },
{ "id": "049_luoyang_summons", "title": "Luoyang Summons", "path": "res://data/scenarios/049_luoyang_summons.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" }
]
}
```

View File

@@ -21,7 +21,7 @@
- Destination victory conditions and objective map markers exist.
- Turn-limit conditions and HUD turn-limit display exist.
- Victory reward summary is visible.
- Next-battle flow exists across the current fifty-one-scenario campaign.
- Next-battle flow exists across the current fifty-two-scenario campaign.
- Campaign completion and new-campaign reset exist.
- Reward inventory can be brought into the next battle.
@@ -52,7 +52,7 @@
- Party roster persistence has a first save-file skeleton.
- Level, experience, and equipment persistence.
- Chapter selection and save/load.
- Linear fifty-one-scenario campaign order exists.
- Linear fifty-two-scenario campaign order exists.
- Save reset exists.
- 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.
@@ -111,6 +111,7 @@
- Forty-ninth-scenario content exists with Luoyang court-road pressure, outer court guards, Jing stabilization or fast-summons branch reactions, and Luoyang court or Wei succession follow-up flags.
- Fiftieth-scenario content exists with Wei succession pressure, court loyalists, Luoyang court or Wei succession branch reactions, and Wei authority or eastern front 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.
## Milestone 5: Presentation