Add eastern front alarm scenario

This commit is contained in:
2026-06-18 01:52:21 +09:00
parent 7b67f7ad22
commit 94996ed2ce
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 campaign scenarios.
- Fifty-one campaign scenarios.
- Grid movement.
- Unit selection.
- Move, attack, wait, end turn.
@@ -71,6 +71,7 @@ Godot 4 tactical RPG prototype inspired by classic turn-based Romance of the Thr
- Jing Province Settlement consumes the Maicheng Pursuit branch flags and settles the Jing Province command post before the next court summons.
- 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.
- 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

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

View File

@@ -0,0 +1,363 @@
{
"id": "051_eastern_front_alarm",
"name": "Eastern Front Alarm",
"objectives": {
"victory": "Reach the eastern front crossing with Cao Cao, then defeat the Wu river guard.",
"defeat": "Cao Cao is defeated or the battle reaches Turn 18."
},
"conditions": {
"victory": { "type": "all_units_defeated", "team": "enemy", "after_event": "eastern_crossing_reached" },
"defeat": [
{ "type": "any_officer_defeated", "team": "player", "officer_ids": ["cao_cao"] },
{ "type": "turn_reached", "turn": 18, "team": "player" }
]
},
"briefing": {
"title": "Eastern Front Alarm",
"location": "Eastern River Front, Ruxu Approaches, 220 CE",
"lines": [
"Wei's authority has settled in Luoyang, but the eastern rivers answer with alarm bells from Ruxu and quick Wu boats in the channels.",
"Cao Cao must reach the crossing before Wu turns the court transition into a river-front crisis."
],
"conditional_lines": [
{
"campaign_flags": { "proclaimed_wei_authority": true },
"lines": [
"Proclaiming Wei authority gives the army a clear banner, but Wu commanders now test whether that authority reaches the river."
]
},
{
"campaign_flags": { "prepared_eastern_front": true },
"lines": [
"Preparing the eastern front puts shield boats and supply carts in place before Wu can turn the current against Wei."
]
}
]
},
"shop": {
"items": [
"bean",
"wine",
"iron_sword",
"training_spear",
"short_bow",
"hand_axe",
"war_axe",
"leather_armor",
"iron_armor"
],
"conditional_items": [
{
"campaign_flags": { "proclaimed_wei_authority": true },
"items": ["imperial_seal"]
},
{
"campaign_flags": { "prepared_eastern_front": 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_ch51",
"officer_id": "cao_cao",
"team": "player",
"pos": [1, 4]
},
{
"unit_id": "guo_jia_ch51",
"officer_id": "guo_jia",
"team": "player",
"requires_joined": true,
"pos": [2, 4]
},
{
"unit_id": "zhang_he_ch51",
"officer_id": "zhang_he",
"team": "player",
"requires_joined": true,
"pos": [2, 3]
},
{
"unit_id": "xiahou_dun_ch51",
"officer_id": "xiahou_dun",
"team": "player",
"pos": [1, 5]
},
{
"unit_id": "dian_wei_ch51",
"officer_id": "dian_wei",
"team": "player",
"requires_joined": true,
"pos": [2, 5]
},
{
"unit_id": "xiahou_yuan_ch51",
"officer_id": "xiahou_yuan",
"team": "player",
"requires_joined": true,
"pos": [3, 3]
},
{
"unit_id": "cao_ren_ch51",
"officer_id": "cao_ren",
"team": "player",
"requires_joined": true,
"pos": [3, 4]
},
{
"unit_id": "wu_eastern_river_guard",
"name": "Wu Eastern River Guard",
"class_id": "commander",
"team": "enemy",
"level": 48,
"pos": [14, 4],
"base": { "hp": 160, "mp": 76, "atk": 51, "def": 42, "int": 40, "agi": 27 }
},
{
"unit_id": "ruxu_alarm_captain",
"name": "Ruxu Alarm Captain",
"class_id": "guard_captain",
"team": "enemy",
"level": 48,
"pos": [12, 4],
"base": { "hp": 130, "atk": 50, "def": 43 }
},
{
"unit_id": "gan_ning_alarm_boat",
"name": "Gan Ning Alarm Boat",
"class_id": "champion",
"team": "enemy",
"move_type": "water",
"level": 48,
"pos": [4, 3],
"base": { "hp": 158, "mp": 12, "atk": 52, "def": 38, "int": 14, "agi": 34 }
},
{
"unit_id": "eastern_front_advisor",
"name": "Eastern Front Advisor",
"class_id": "military_advisor",
"team": "enemy",
"level": 48,
"pos": [13, 5],
"skills": ["blaze", "great_mend"],
"base": { "hp": 116, "mp": 100, "atk": 8, "def": 29, "int": 51, "agi": 25 }
},
{
"unit_id": "eastern_river_spear_north",
"name": "Eastern River Spear",
"class_id": "infantry",
"team": "enemy",
"level": 48,
"pos": [12, 3],
"base": { "hp": 118, "atk": 49, "def": 39 }
},
{
"unit_id": "eastern_river_spear_south",
"name": "Eastern River Spear",
"class_id": "infantry",
"team": "enemy",
"level": 48,
"pos": [12, 5],
"base": { "hp": 118, "atk": 49, "def": 39 }
},
{
"unit_id": "ruxu_alarm_arrow_boat",
"name": "Ruxu Alarm Arrow Boat",
"class_id": "marksman",
"team": "enemy",
"move_type": "water",
"level": 48,
"pos": [5, 5],
"base": { "hp": 110, "atk": 50, "def": 25, "agi": 37 }
}
],
"events": [
{
"id": "opening",
"once": true,
"when": { "type": "battle_start" },
"actions": [
{ "type": "log", "text": "Wu boats sound the alarm along the eastern river front as Wei's new authority reaches Ruxu." }
]
},
{
"id": "opening_dialogue",
"once": true,
"when": { "type": "battle_begin" },
"actions": [
{
"type": "dialogue",
"lines": [
{ "speaker": "Cao Ren", "text": "Luoyang's seals are barely dry, and already Ruxu's water carries Wu drums." },
{ "speaker": "Guo Jia", "text": "A new authority is always tested where the map is wettest and the roads are thinnest." },
{ "speaker": "Cao Cao", "text": "Then the river will learn that Wei's order reaches farther than court stone." }
]
}
]
},
{
"id": "wei_authority_draws_wu_test",
"once": true,
"when": { "type": "turn_start", "team": "enemy", "turn": 2, "campaign_flags": { "proclaimed_wei_authority": true } },
"actions": [
{
"type": "dialogue",
"lines": [
{ "speaker": "Wu Eastern River Guard", "text": "Wei proclaims authority from Luoyang. Test whether that authority can cross water." },
{ "speaker": "Zhang He", "text": "They challenge the proclamation at the river. Good. A challenge seen is a challenge answered." }
]
},
{
"type": "spawn_deployment",
"deployment": {
"unit_id": "wu_probe_boat",
"name": "Wu Probe Boat",
"class_id": "champion",
"team": "enemy",
"move_type": "water",
"level": 48,
"pos": [5, 3],
"base": { "hp": 108, "atk": 45, "def": 29, "agi": 35 }
}
}
]
},
{
"id": "prepared_front_holds_bank",
"once": true,
"when": { "type": "turn_start", "team": "player", "turn": 2, "campaign_flags": { "prepared_eastern_front": true } },
"actions": [
{
"type": "dialogue",
"lines": [
{ "speaker": "Xiahou Yuan", "text": "The eastern front was ready. Our shield carts already cover the bank road." },
{ "speaker": "Cao Cao", "text": "Preparation turns a river alarm into a timetable." }
]
}
]
},
{
"id": "turn_4_river_alarm",
"once": true,
"when": { "type": "turn_start", "team": "enemy", "turn": 4 },
"actions": [
{
"type": "dialogue",
"lines": [
{ "speaker": "Eastern Front Advisor", "text": "Keep their army on the bank and make every plank of the crossing cost a command." },
{ "speaker": "Guo Jia", "text": "Wu wants the river to speak louder than Luoyang." }
]
}
]
},
{
"id": "eastern_crossing_reached",
"once": true,
"when": { "type": "unit_reaches_tile", "team": "player", "officer_ids": ["cao_cao"], "pos": [10, 4] },
"actions": [
{
"type": "set_objective",
"victory": "The eastern front crossing is reached. Defeat the Wu river guard.",
"defeat": "Cao Cao is defeated or the battle reaches Turn 18."
},
{
"type": "dialogue",
"lines": [
{ "speaker": "Cao Cao", "text": "This crossing answers to Wei. Break the guard before Wu turns alarm into invasion." },
{ "speaker": "Wu Eastern River Guard", "text": "A crossing is only yours while boats stop fearing your banner." }
]
},
{
"type": "spawn_deployments",
"deployments": [
{
"unit_id": "eastern_crossing_halberd_guard",
"name": "Eastern Crossing Halberd Guard",
"class_id": "guard_captain",
"team": "enemy",
"level": 48,
"pos": [16, 4],
"base": { "hp": 126, "atk": 49, "def": 42 }
},
{
"unit_id": "eastern_crossing_arrow_boat",
"name": "Eastern Crossing Arrow Boat",
"class_id": "marksman",
"team": "enemy",
"move_type": "water",
"level": 48,
"pos": [10, 1],
"base": { "hp": 102, "atk": 48, "def": 22, "agi": 36 }
}
]
}
]
},
{
"id": "turn_9_bank_stabilizes",
"once": true,
"when": { "type": "turn_start", "team": "player", "turn": 9 },
"actions": [
{
"type": "dialogue",
"lines": [
{ "speaker": "Cao Ren", "text": "The river bank is stabilizing. Wu's boats are drifting wider from the crossing." },
{ "speaker": "Cao Cao", "text": "Then let the water carry one lesson clearly." }
]
}
]
}
],
"rewards": {
"gold": 10000,
"items": ["bean", "wine", "imperial_seal"]
},
"post_battle_dialogue": [
{ "speaker": "Guo Jia", "text": "The eastern front alarm is quiet for now. Wu has learned that Wei's transition did not leave the river empty." },
{ "speaker": "Cao Ren", "text": "We can secure the eastern fleet, or press the Wu river line while their alarm is still unanswered." },
{ "speaker": "Cao Cao", "text": "A quiet river can hide a blade or carry one. Choose what the next current bears." }
],
"post_battle_choices": [
{
"id": "secure_eastern_fleet",
"label": "Secure Fleet",
"description": "Cao Cao secures the eastern fleet before the next river push.",
"set_flags": { "secured_eastern_fleet": true, "pressed_wu_river_line": false },
"gold": 1800,
"items": ["imperial_seal"]
},
{
"id": "press_wu_river_line",
"label": "Press Wu",
"description": "Cao Cao presses Wu's river line before the eastern alarm can settle.",
"set_flags": { "secured_eastern_fleet": false, "pressed_wu_river_line": true },
"gold": 1600,
"items": ["war_drum"]
}
]
}

View File

@@ -61,6 +61,7 @@ data/scenarios/047_maicheng_pursuit.json
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
```
## Campaign
@@ -123,7 +124,8 @@ The campaign file defines scenario order, resource paths, and officers who are a
{ "id": "047_maicheng_pursuit", "title": "Maicheng Pursuit", "path": "res://data/scenarios/047_maicheng_pursuit.json" },
{ "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": "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" }
]
}
```

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-scenario campaign.
- Next-battle flow exists across the current fifty-one-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-scenario campaign order exists.
- Linear fifty-one-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.
@@ -110,6 +110,7 @@
- Forty-eighth-scenario content exists with Jing Province settlement pressure, command-post remnants, Wu encirclement or Xiangfan front branch reactions, and Jing stabilization or Luoyang summons follow-up flags.
- 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.
## Milestone 5: Presentation