Add southern fleet scenario

This commit is contained in:
2026-06-18 02:37:12 +09:00
parent 3ee46d92e3
commit 955e777cbc
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
- Sixty-one campaign scenarios.
- Sixty-two campaign scenarios.
- Grid movement.
- Unit selection.
- Move, attack, wait, end turn.
@@ -82,6 +82,7 @@ Godot 4 tactical RPG prototype inspired by classic turn-based Romance of the Thr
- Wu Surrender consumes the Jianye Command branch flags and turns the command district victory toward accepted surrender or pursued Wu holdouts.
- Southern Holdouts consumes the Wu Surrender branch flags and clears the southern canal camp toward settled holdouts or a pressed Nanhai route.
- Nanhai Route consumes the Southern Holdouts branch flags and cuts the coastal passage toward a secured route or pressed southern fleet.
- Southern Fleet consumes the Nanhai Route branch flags and breaks the coastal anchorage toward a secured fleet or pressed Hainan coast.
- 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

@@ -308,6 +308,11 @@
"id": "061_nanhai_route",
"title": "Nanhai Route",
"path": "res://data/scenarios/061_nanhai_route.json"
},
{
"id": "062_southern_fleet",
"title": "Southern Fleet",
"path": "res://data/scenarios/062_southern_fleet.json"
}
]
}

View File

@@ -0,0 +1,363 @@
{
"id": "062_southern_fleet",
"name": "Southern Fleet",
"objectives": {
"victory": "Reach the southern fleet anchorage with Cao Cao, then defeat the fleet captain.",
"defeat": "Cao Cao is defeated or the battle reaches Turn 18."
},
"conditions": {
"victory": { "type": "all_units_defeated", "team": "enemy", "after_event": "southern_fleet_anchorage_reached" },
"defeat": [
{ "type": "any_officer_defeated", "team": "player", "officer_ids": ["cao_cao"] },
{ "type": "turn_reached", "turn": 18, "team": "player" }
]
},
"briefing": {
"title": "Southern Fleet",
"location": "Southern Fleet Anchorage, Nanhai Coast, Eastern Front, 220 CE",
"lines": [
"With the Nanhai route cut, Wu's last southern captains anchor their fleet near the coast and try to keep one passage open.",
"Cao Cao pushes along the shore road to break the anchorage and decide whether the fleet is secured or driven toward Hainan."
],
"conditional_lines": [
{
"campaign_flags": { "secured_nanhai_route": true },
"lines": [
"Securing the Nanhai route gives Wei control of the shore road, forcing the fleet to defend from a known anchorage."
]
},
{
"campaign_flags": { "pressed_southern_fleet": true },
"lines": [
"Pressing the southern fleet early has denied the captains rest, but every boat that remains now crowds the coast for a final stand."
]
}
]
},
"shop": {
"items": [
"bean",
"wine",
"iron_sword",
"training_spear",
"short_bow",
"hand_axe",
"war_axe",
"leather_armor",
"iron_armor"
],
"conditional_items": [
{
"campaign_flags": { "secured_nanhai_route": true },
"items": ["imperial_seal"]
},
{
"campaign_flags": { "pressed_southern_fleet": 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_ch62",
"officer_id": "cao_cao",
"team": "player",
"pos": [1, 4]
},
{
"unit_id": "guo_jia_ch62",
"officer_id": "guo_jia",
"team": "player",
"requires_joined": true,
"pos": [2, 4]
},
{
"unit_id": "zhang_he_ch62",
"officer_id": "zhang_he",
"team": "player",
"requires_joined": true,
"pos": [2, 3]
},
{
"unit_id": "xiahou_dun_ch62",
"officer_id": "xiahou_dun",
"team": "player",
"pos": [1, 5]
},
{
"unit_id": "dian_wei_ch62",
"officer_id": "dian_wei",
"team": "player",
"requires_joined": true,
"pos": [2, 5]
},
{
"unit_id": "xiahou_yuan_ch62",
"officer_id": "xiahou_yuan",
"team": "player",
"requires_joined": true,
"pos": [3, 3]
},
{
"unit_id": "cao_ren_ch62",
"officer_id": "cao_ren",
"team": "player",
"requires_joined": true,
"pos": [3, 4]
},
{
"unit_id": "southern_fleet_captain",
"name": "Southern Fleet Captain",
"class_id": "commander",
"team": "enemy",
"level": 59,
"pos": [14, 4],
"base": { "hp": 202, "mp": 98, "atk": 62, "def": 53, "int": 51, "agi": 38 }
},
{
"unit_id": "fleet_anchorage_guard",
"name": "Fleet Anchorage Guard",
"class_id": "guard_captain",
"team": "enemy",
"level": 59,
"pos": [12, 4],
"base": { "hp": 152, "atk": 61, "def": 54 }
},
{
"unit_id": "southern_flagship_boat",
"name": "Southern Flagship Boat",
"class_id": "champion",
"team": "enemy",
"move_type": "water",
"level": 59,
"pos": [4, 3],
"base": { "hp": 180, "mp": 12, "atk": 63, "def": 49, "int": 16, "agi": 45 }
},
{
"unit_id": "southern_fleet_advisor",
"name": "Southern Fleet Advisor",
"class_id": "military_advisor",
"team": "enemy",
"level": 59,
"pos": [13, 5],
"skills": ["blaze", "great_mend"],
"base": { "hp": 138, "mp": 122, "atk": 8, "def": 40, "int": 62, "agi": 35 }
},
{
"unit_id": "fleet_spear_north",
"name": "Fleet Spear",
"class_id": "infantry",
"team": "enemy",
"level": 59,
"pos": [12, 3],
"base": { "hp": 140, "atk": 60, "def": 50 }
},
{
"unit_id": "fleet_spear_south",
"name": "Fleet Spear",
"class_id": "infantry",
"team": "enemy",
"level": 59,
"pos": [12, 5],
"base": { "hp": 140, "atk": 60, "def": 50 }
},
{
"unit_id": "fleet_arrow_boat",
"name": "Fleet Arrow Boat",
"class_id": "marksman",
"team": "enemy",
"move_type": "water",
"level": 59,
"pos": [5, 5],
"base": { "hp": 132, "atk": 61, "def": 36, "agi": 48 }
}
],
"events": [
{
"id": "opening",
"once": true,
"when": { "type": "battle_start" },
"actions": [
{ "type": "log", "text": "Wei advances along the Nanhai coast to break the southern fleet anchorage." }
]
},
{
"id": "opening_dialogue",
"once": true,
"when": { "type": "battle_begin" },
"actions": [
{
"type": "dialogue",
"lines": [
{ "speaker": "Xiahou Yuan", "text": "The fleet is anchored close to the shore. Their boats can strike the road if we drift too wide." },
{ "speaker": "Guo Jia", "text": "A fleet without a safe coast is only timber waiting for weather." },
{ "speaker": "Cao Cao", "text": "Then take the coast and let their timber learn the wind." }
]
}
]
},
{
"id": "secured_route_marks_fleet_landing",
"once": true,
"when": { "type": "turn_start", "team": "player", "turn": 2, "campaign_flags": { "secured_nanhai_route": true } },
"actions": [
{
"type": "dialogue",
"lines": [
{ "speaker": "Cao Ren", "text": "The secured route gives us the landing marks. Their anchorage has fewer secrets than it thinks." },
{ "speaker": "Cao Cao", "text": "Good. A known shore is a conquered shore waiting for banners." }
]
}
]
},
{
"id": "pressed_fleet_commits_screen_boat",
"once": true,
"when": { "type": "turn_start", "team": "enemy", "turn": 2, "campaign_flags": { "pressed_southern_fleet": true } },
"actions": [
{
"type": "dialogue",
"lines": [
{ "speaker": "Southern Fleet Captain", "text": "Wei came too quickly. Send the screen boat forward and keep the anchorage breathing." },
{ "speaker": "Zhang He", "text": "They are already spending their screen. The fleet is less ready than its banners claim." }
]
},
{
"type": "spawn_deployment",
"deployment": {
"unit_id": "southern_screen_boat",
"name": "Southern Screen Boat",
"class_id": "champion",
"team": "enemy",
"move_type": "water",
"level": 59,
"pos": [5, 3],
"base": { "hp": 130, "atk": 56, "def": 40, "agi": 46 }
}
}
]
},
{
"id": "turn_4_fleet_tightens_anchorage",
"once": true,
"when": { "type": "turn_start", "team": "enemy", "turn": 4 },
"actions": [
{
"type": "dialogue",
"lines": [
{ "speaker": "Southern Fleet Advisor", "text": "Hold the anchorage. If Wei takes the shore marker, the fleet cannot choose its own tide." },
{ "speaker": "Guo Jia", "text": "They fear a marker more than a blade. That tells us where to stand." }
]
}
]
},
{
"id": "southern_fleet_anchorage_reached",
"once": true,
"when": { "type": "unit_reaches_tile", "team": "player", "officer_ids": ["cao_cao"], "pos": [10, 4] },
"actions": [
{
"type": "set_objective",
"victory": "The southern fleet anchorage is reached. Defeat the fleet captain.",
"defeat": "Cao Cao is defeated or the battle reaches Turn 18."
},
{
"type": "dialogue",
"lines": [
{ "speaker": "Cao Cao", "text": "This anchorage now answers to Wei. Strike down the captain and the fleet loses its harbor." },
{ "speaker": "Southern Fleet Captain", "text": "A captain can still turn harbor into open water." }
]
},
{
"type": "spawn_deployments",
"deployments": [
{
"unit_id": "southern_fleet_last_guard",
"name": "Southern Fleet Last Guard",
"class_id": "guard_captain",
"team": "enemy",
"level": 59,
"pos": [16, 4],
"base": { "hp": 148, "atk": 60, "def": 53 }
},
{
"unit_id": "southern_fleet_crossbow_boat",
"name": "Southern Fleet Crossbow Boat",
"class_id": "marksman",
"team": "enemy",
"move_type": "water",
"level": 59,
"pos": [10, 1],
"base": { "hp": 124, "atk": 59, "def": 33, "agi": 47 }
}
]
}
]
},
{
"id": "turn_9_fleet_line_wavers",
"once": true,
"when": { "type": "turn_start", "team": "player", "turn": 9 },
"actions": [
{
"type": "dialogue",
"lines": [
{ "speaker": "Dian Wei", "text": "Their shore guard is breaking. Even the boats are pulling close, like they fear the road." },
{ "speaker": "Cao Cao", "text": "Then make the road the sharper weapon." }
]
}
]
}
],
"rewards": {
"gold": 12200,
"items": ["bean", "wine", "iron_armor"]
},
"post_battle_dialogue": [
{ "speaker": "Guo Jia", "text": "The southern fleet anchorage is broken. Wei can secure the fleet under coastal order, or press the fleeing captains toward Hainan before they gather again." },
{ "speaker": "Cao Ren", "text": "Securing the fleet steadies the coast. Pressing Hainan cuts the horizon they still trust." },
{ "speaker": "Cao Cao", "text": "Ships and roads serve the same master when their captains have no choice left." }
],
"post_battle_choices": [
{
"id": "secure_southern_fleet",
"label": "Secure Fleet",
"description": "Cao Cao secures the southern fleet and folds its anchorage into Wei's coastal order.",
"set_flags": { "secured_southern_fleet": true, "pressed_hainan_coast": false },
"gold": 2350,
"items": ["imperial_seal"]
},
{
"id": "press_hainan_coast",
"label": "Press Hainan",
"description": "Cao Cao presses fleeing captains toward Hainan before they can regroup.",
"set_flags": { "secured_southern_fleet": false, "pressed_hainan_coast": true },
"gold": 2150,
"items": ["war_drum"]
}
]
}

View File

@@ -72,6 +72,7 @@ data/scenarios/058_jianye_command.json
data/scenarios/059_wu_surrender.json
data/scenarios/060_southern_holdouts.json
data/scenarios/061_nanhai_route.json
data/scenarios/062_southern_fleet.json
```
## Campaign
@@ -145,7 +146,8 @@ The campaign file defines scenario order, resource paths, and officers who are a
{ "id": "058_jianye_command", "title": "Jianye Command", "path": "res://data/scenarios/058_jianye_command.json" },
{ "id": "059_wu_surrender", "title": "Wu Surrender", "path": "res://data/scenarios/059_wu_surrender.json" },
{ "id": "060_southern_holdouts", "title": "Southern Holdouts", "path": "res://data/scenarios/060_southern_holdouts.json" },
{ "id": "061_nanhai_route", "title": "Nanhai Route", "path": "res://data/scenarios/061_nanhai_route.json" }
{ "id": "061_nanhai_route", "title": "Nanhai Route", "path": "res://data/scenarios/061_nanhai_route.json" },
{ "id": "062_southern_fleet", "title": "Southern Fleet", "path": "res://data/scenarios/062_southern_fleet.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 sixty-one-scenario campaign.
- Next-battle flow exists across the current sixty-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 sixty-one-scenario campaign order exists.
- Linear sixty-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.
@@ -121,6 +121,7 @@
- Fifty-ninth-scenario content exists with Wu surrender pressure, water-move holdout boats, command district or forced-surrender branch reactions, and accepted surrender or Wu holdout follow-up flags.
- Sixtieth-scenario content exists with southern holdout pressure, water-move escape boats, accepted surrender or pursued-holdout branch reactions, and settled holdouts or Nanhai route follow-up flags.
- Sixty-first-scenario content exists with Nanhai route pressure, water-move fleet boats, settled holdouts or pressed-route branch reactions, and secured route or southern fleet follow-up flags.
- Sixty-second-scenario content exists with southern fleet pressure, water-move screen boats, secured Nanhai route or pressed-fleet branch reactions, and secured fleet or Hainan coast follow-up flags.
## Milestone 5: Presentation