Add Ruxu advance scenario

This commit is contained in:
2026-06-18 01:03:43 +09:00
parent 8df0877f7b
commit c69dbc6c2b
5 changed files with 372 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
- Forty-one campaign scenarios.
- Forty-two campaign scenarios.
- Grid movement.
- Unit selection.
- Move, attack, wait, end turn.
@@ -62,6 +62,7 @@ Godot 4 tactical RPG prototype inspired by classic turn-based Romance of the Thr
- Hanzhong Approach consumes the Ma Chao Retreat branch flags and opens Zhang Lu's mountain gate campaign.
- Hanzhong Gate consumes the Hanzhong Approach branch flags and opens Zhang Lu submission or Hanzhong pacification follow-up choices.
- Hanzhong Settlement consumes the Hanzhong Gate branch flags and turns the basin toward a Hanzhong garrison or Ruxu pivot.
- Ruxu Advance consumes the Hanzhong Settlement branch flags and opens Ruxu bank or Sun Quan river-line follow-up choices.
- 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

@@ -208,6 +208,11 @@
"id": "041_hanzhong_settlement",
"title": "Hanzhong Settlement",
"path": "res://data/scenarios/041_hanzhong_settlement.json"
},
{
"id": "042_ruxu_advance",
"title": "Ruxu Advance",
"path": "res://data/scenarios/042_ruxu_advance.json"
}
]
}

View File

@@ -0,0 +1,359 @@
{
"id": "042_ruxu_advance",
"name": "Ruxu Advance",
"objectives": {
"victory": "Reach the Ruxu riverbank with Cao Cao, then defeat the Wu river vanguard.",
"defeat": "Cao Cao is defeated or the battle reaches Turn 18."
},
"conditions": {
"victory": { "type": "all_units_defeated", "team": "enemy", "after_event": "ruxu_bank_reached" },
"defeat": [
{ "type": "any_officer_defeated", "team": "player", "officer_ids": ["cao_cao"] },
{ "type": "turn_reached", "turn": 18, "team": "player" }
]
},
"briefing": {
"title": "Ruxu Advance",
"location": "Ruxu Riverbank, Eastern Front, 217 CE",
"lines": [
"With Hanzhong settled, Cao Cao turns back toward the lower Yangtze, where Sun Quan's river camps watch Ruxu.",
"The army must force the Ruxu bank before Wu can turn the waterline into another wall of boats, arrows, and tide."
],
"conditional_lines": [
{
"campaign_flags": { "garrisoned_hanzhong": true },
"lines": [
"The Hanzhong garrison keeps the western mountains quiet, letting Cao Cao march east without fearing a cut road behind him."
]
},
{
"campaign_flags": { "pivoted_to_ruxu": true },
"lines": [
"The fast pivot from Hanzhong brings Cao Cao to Ruxu early, but Wu scouts have raced ahead along the river channels."
]
}
]
},
"shop": {
"items": [
"bean",
"wine",
"iron_sword",
"training_spear",
"short_bow",
"hand_axe",
"war_axe",
"leather_armor",
"iron_armor"
],
"conditional_items": [
{
"campaign_flags": { "garrisoned_hanzhong": true },
"items": ["imperial_seal"]
},
{
"campaign_flags": { "pivoted_to_ruxu": 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_ch42",
"officer_id": "cao_cao",
"team": "player",
"pos": [1, 4]
},
{
"unit_id": "guo_jia_ch42",
"officer_id": "guo_jia",
"team": "player",
"requires_joined": true,
"pos": [2, 4]
},
{
"unit_id": "zhang_he_ch42",
"officer_id": "zhang_he",
"team": "player",
"requires_joined": true,
"pos": [2, 3]
},
{
"unit_id": "xiahou_dun_ch42",
"officer_id": "xiahou_dun",
"team": "player",
"pos": [1, 5]
},
{
"unit_id": "dian_wei_ch42",
"officer_id": "dian_wei",
"team": "player",
"requires_joined": true,
"pos": [2, 5]
},
{
"unit_id": "xiahou_yuan_ch42",
"officer_id": "xiahou_yuan",
"team": "player",
"requires_joined": true,
"pos": [3, 3]
},
{
"unit_id": "cao_ren_ch42",
"officer_id": "cao_ren",
"team": "player",
"requires_joined": true,
"pos": [3, 4]
},
{
"unit_id": "wu_ruxu_vanguard_admiral",
"name": "Wu Ruxu Vanguard Admiral",
"class_id": "commander",
"team": "enemy",
"level": 39,
"pos": [14, 4],
"base": { "hp": 134, "mp": 56, "atk": 40, "def": 32, "int": 32, "agi": 22 }
},
{
"unit_id": "ruxu_deck_captain",
"name": "Ruxu Deck Captain",
"class_id": "guard_captain",
"team": "enemy",
"level": 39,
"pos": [12, 4],
"base": { "hp": 110, "atk": 40, "def": 33 }
},
{
"unit_id": "gan_ning_raid_boat",
"name": "Gan Ning Raid Boat",
"class_id": "champion",
"team": "enemy",
"level": 39,
"pos": [15, 3],
"base": { "hp": 138, "mp": 12, "atk": 42, "def": 30, "int": 13, "agi": 26 }
},
{
"unit_id": "lu_meng_river_advisor",
"name": "Lu Meng River Advisor",
"class_id": "military_advisor",
"team": "enemy",
"level": 39,
"pos": [13, 5],
"skills": ["blaze", "great_mend"],
"base": { "hp": 98, "mp": 82, "atk": 8, "def": 21, "int": 42, "agi": 20 }
},
{
"unit_id": "ruxu_spear_north",
"name": "Ruxu Spear Guard",
"class_id": "infantry",
"team": "enemy",
"level": 39,
"pos": [12, 3],
"base": { "hp": 100, "atk": 40, "def": 30 }
},
{
"unit_id": "ruxu_spear_south",
"name": "Ruxu Spear Guard",
"class_id": "infantry",
"team": "enemy",
"level": 39,
"pos": [12, 5],
"base": { "hp": 100, "atk": 40, "def": 30 }
},
{
"unit_id": "ruxu_river_marksman",
"name": "Ruxu River Marksman",
"class_id": "marksman",
"team": "enemy",
"level": 39,
"pos": [13, 2],
"base": { "hp": 92, "atk": 41, "def": 17, "agi": 29 }
}
],
"events": [
{
"id": "opening",
"once": true,
"when": { "type": "battle_start" },
"actions": [
{ "type": "log", "text": "Cao Cao's eastern army reaches Ruxu, where Wu river camps guard the bank with boats, archers, and tide-watched roads." }
]
},
{
"id": "opening_dialogue",
"once": true,
"when": { "type": "battle_begin" },
"actions": [
{
"type": "dialogue",
"lines": [
{ "speaker": "Xiahou Dun", "text": "The river is wide, but the bank is narrow enough for men to die over." },
{ "speaker": "Guo Jia", "text": "Wu prefers a battlefield that moves. The tide will be their second officer." },
{ "speaker": "Cao Cao", "text": "Then seize the bank before the river receives orders." }
]
}
]
},
{
"id": "hanzhong_garrison_secures_rear",
"once": true,
"when": { "type": "turn_start", "team": "player", "turn": 2, "campaign_flags": { "garrisoned_hanzhong": true } },
"actions": [
{
"type": "dialogue",
"lines": [
{ "speaker": "Cao Ren", "text": "Reports from Hanzhong are quiet. The western garrison is holding the mountain roads." },
{ "speaker": "Cao Cao", "text": "A quiet rear lets the front speak louder." }
]
}
]
},
{
"id": "ruxu_pivot_draws_wu_scouts",
"once": true,
"when": { "type": "turn_start", "team": "enemy", "turn": 2, "campaign_flags": { "pivoted_to_ruxu": true } },
"actions": [
{
"type": "dialogue",
"lines": [
{ "speaker": "Wu Ruxu Vanguard Admiral", "text": "Cao Cao pivoted east faster than expected. Send the scout boats in before his line settles." },
{ "speaker": "Zhang He", "text": "Their scouts are quick. Good. Quick men fall before slow plans can save them." }
]
},
{
"type": "spawn_deployment",
"deployment": {
"unit_id": "wu_ruxu_scout_boats",
"name": "Wu Ruxu Scout Boats",
"class_id": "cavalry",
"team": "enemy",
"level": 39,
"pos": [16, 3],
"base": { "hp": 92, "atk": 37, "def": 21, "agi": 27 }
}
}
]
},
{
"id": "turn_4_river_tide",
"once": true,
"when": { "type": "turn_start", "team": "enemy", "turn": 4 },
"actions": [
{
"type": "dialogue",
"lines": [
{ "speaker": "Lu Meng River Advisor", "text": "Let the bank bend them inward. Arrows first, boats second, blades only when they cannot step aside." },
{ "speaker": "Guo Jia", "text": "They are using the river like a wall that breathes." }
]
}
]
},
{
"id": "ruxu_bank_reached",
"once": true,
"when": { "type": "unit_reaches_tile", "team": "player", "officer_ids": ["cao_cao"], "pos": [10, 4] },
"actions": [
{
"type": "set_objective",
"victory": "The Ruxu bank is reached. Defeat the Wu river vanguard.",
"defeat": "Cao Cao is defeated or the battle reaches Turn 18."
},
{
"type": "dialogue",
"lines": [
{ "speaker": "Cao Cao", "text": "This is the bank. Take it, and Wu must answer us on land." },
{ "speaker": "Wu Ruxu Vanguard Admiral", "text": "Ruxu answers from the river first. Hold the bank!" }
]
},
{
"type": "spawn_deployments",
"deployments": [
{
"unit_id": "ruxu_halberd_guard",
"name": "Ruxu Halberd Guard",
"class_id": "guard_captain",
"team": "enemy",
"level": 39,
"pos": [16, 4],
"base": { "hp": 108, "atk": 40, "def": 33 }
},
{
"unit_id": "ruxu_arrow_screen",
"name": "Ruxu Arrow Screen",
"class_id": "archer",
"team": "enemy",
"level": 39,
"pos": [16, 5],
"base": { "hp": 86, "atk": 39, "def": 14, "agi": 28 }
}
]
}
]
},
{
"id": "turn_9_ruxu_line_wavers",
"once": true,
"when": { "type": "turn_start", "team": "player", "turn": 9 },
"actions": [
{
"type": "dialogue",
"lines": [
{ "speaker": "Xiahou Yuan", "text": "Their river line is wavering. The boats keep backing into their own archers." },
{ "speaker": "Cao Cao", "text": "Then push until the river carries their courage away." }
]
}
]
}
],
"rewards": {
"gold": 8200,
"items": ["bean", "wine", "imperial_seal"]
},
"post_battle_dialogue": [
{ "speaker": "Guo Jia", "text": "Ruxu's bank is in our hands, but Wu still has the deeper river line and Sun Quan's banners beyond it." },
{ "speaker": "Zhang He", "text": "We can secure the bank and bring up camps, or press Sun Quan's line before Wu's ships gather." },
{ "speaker": "Cao Cao", "text": "A river battle is a question of timing. Decide whether the next answer is a stake or a blade." }
],
"post_battle_choices": [
{
"id": "secure_ruxu_bank",
"label": "Secure Bank",
"description": "Cao Cao secures the Ruxu bank and builds camps before pressing deeper into Wu's river line.",
"set_flags": { "secured_ruxu_bank": true, "pressed_sun_quan_line": false },
"gold": 1350,
"items": ["imperial_seal"]
},
{
"id": "press_sun_quan_line",
"label": "Press Sun Quan",
"description": "Cao Cao presses Sun Quan's river line before Wu can gather its ships at Ruxu.",
"set_flags": { "secured_ruxu_bank": false, "pressed_sun_quan_line": true },
"gold": 1150,
"items": ["war_drum"]
}
]
}

View File

@@ -52,6 +52,7 @@ data/scenarios/038_ma_chao_retreat.json
data/scenarios/039_hanzhong_approach.json
data/scenarios/040_hanzhong_gate.json
data/scenarios/041_hanzhong_settlement.json
data/scenarios/042_ruxu_advance.json
```
## Campaign
@@ -105,7 +106,8 @@ The campaign file defines scenario order, resource paths, and officers who are a
{ "id": "038_ma_chao_retreat", "title": "Ma Chao Retreat", "path": "res://data/scenarios/038_ma_chao_retreat.json" },
{ "id": "039_hanzhong_approach", "title": "Hanzhong Approach", "path": "res://data/scenarios/039_hanzhong_approach.json" },
{ "id": "040_hanzhong_gate", "title": "Hanzhong Gate", "path": "res://data/scenarios/040_hanzhong_gate.json" },
{ "id": "041_hanzhong_settlement", "title": "Hanzhong Settlement", "path": "res://data/scenarios/041_hanzhong_settlement.json" }
{ "id": "041_hanzhong_settlement", "title": "Hanzhong Settlement", "path": "res://data/scenarios/041_hanzhong_settlement.json" },
{ "id": "042_ruxu_advance", "title": "Ruxu Advance", "path": "res://data/scenarios/042_ruxu_advance.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 forty-one-scenario campaign.
- Next-battle flow exists across the current forty-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 forty-one-scenario campaign order exists.
- Linear forty-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.
@@ -101,6 +101,7 @@
- Thirty-ninth-scenario content exists with Hanzhong approach pressure, Zhang Lu's border guard, mountain-gate stakes, and 038 branch reactions.
- Fortieth-scenario content exists with Hanzhong gate pressure, Zhang Lu's mountain guard, pass-road siege stakes, 039 branch reactions, and submission or pacification follow-up flags.
- Forty-first-scenario content exists with Hanzhong basin settlement, storehouse pressure, Zhang Lu submission or pacification branch reactions, and Hanzhong garrison or Ruxu pivot follow-up flags.
- Forty-second-scenario content exists with Ruxu riverbank pressure, Wu vanguard resistance, Hanzhong garrison or Ruxu pivot branch reactions, and Ruxu bank or Sun Quan river-line follow-up flags.
## Milestone 5: Presentation