Add chapter battle replay entries

This commit is contained in:
2026-06-18 04:12:31 +09:00
parent 4c3621bc85
commit 87aed5a449
7 changed files with 102 additions and 30 deletions

View File

@@ -204,6 +204,25 @@ func apply_battle_result(battle_state) -> Dictionary:
var already_completed := completed_scenarios.has(battle_state.battle_id)
var rewards := battle_state.get_rewards()
var post_battle_choices := battle_state.get_post_battle_choices()
if already_completed:
var return_scenario_id := current_scenario_id if not is_campaign_complete() else ""
return {
"saved": true,
"rewards_applied": false,
"already_completed": true,
"gold": 0,
"items": [],
"joined_officers": [],
"left_officers": [],
"progression_events": [],
"next_scenario_id": return_scenario_id,
"next_scenario_title": get_scenario_title(return_scenario_id),
"scenario_id": battle_state.battle_id,
"campaign_complete": return_scenario_id.is_empty(),
"post_battle_choices": [],
"choice_applied": true,
"choice_label": ""
}
var previous_completed := completed_scenarios.duplicate()
var previous_gold := gold
var previous_inventory := inventory.duplicate(true)
@@ -217,22 +236,20 @@ func apply_battle_result(battle_state) -> Dictionary:
var reward_gold := 0
var next_scenario_id := get_next_scenario_id(battle_state.battle_id)
if not already_completed:
roster = battle_state.get_player_roster_snapshot()
inventory = battle_state.get_inventory_snapshot()
roster = battle_state.get_player_roster_snapshot()
inventory = battle_state.get_inventory_snapshot()
if not already_completed:
completed_scenarios.append(battle_state.battle_id)
reward_gold = int(rewards.get("gold", 0))
gold += reward_gold
completed_scenarios.append(battle_state.battle_id)
reward_gold = int(rewards.get("gold", 0))
gold += reward_gold
for item_id in rewards.get("items", []):
var key := str(item_id)
inventory[key] = int(inventory.get(key, 0)) + 1
rewarded_items.append(key)
joined_reward_officers = _apply_join_officers(rewards.get("join_officers", []))
left_reward_officers = _apply_leave_officers(rewards.get("leave_officers", []))
pending_post_battle_choice_scenario_id = battle_state.battle_id if not post_battle_choices.is_empty() else ""
for item_id in rewards.get("items", []):
var key := str(item_id)
inventory[key] = int(inventory.get(key, 0)) + 1
rewarded_items.append(key)
joined_reward_officers = _apply_join_officers(rewards.get("join_officers", []))
left_reward_officers = _apply_leave_officers(rewards.get("leave_officers", []))
pending_post_battle_choice_scenario_id = battle_state.battle_id if not post_battle_choices.is_empty() else ""
if not next_scenario_id.is_empty():
current_scenario_id = next_scenario_id
@@ -259,19 +276,19 @@ func apply_battle_result(battle_state) -> Dictionary:
return {
"saved": saved,
"rewards_applied": not already_completed and saved,
"already_completed": already_completed,
"rewards_applied": saved,
"already_completed": false,
"gold": reward_gold,
"items": rewarded_items,
"joined_officers": joined_reward_officers,
"left_officers": left_reward_officers,
"progression_events": battle_state.get_progression_events() if saved and not already_completed else [],
"progression_events": battle_state.get_progression_events() if saved else [],
"next_scenario_id": next_scenario_id,
"next_scenario_title": get_scenario_title(next_scenario_id),
"scenario_id": battle_state.battle_id,
"campaign_complete": next_scenario_id.is_empty(),
"post_battle_choices": post_battle_choices if saved and not already_completed else [],
"choice_applied": not saved or already_completed or post_battle_choices.is_empty(),
"post_battle_choices": post_battle_choices if saved else [],
"choice_applied": not saved or post_battle_choices.is_empty(),
"choice_label": ""
}
@@ -658,12 +675,24 @@ func get_chapter_progress_entries() -> Array:
var completed_count := 0
var current_in_chapter := false
var current_scenario_title := ""
var scenarios := []
for scenario_id in scenario_ids:
var completed := completed_scenarios.has(scenario_id)
var current := scenario_id == current_scenario_id
if completed_scenarios.has(scenario_id):
completed_count += 1
if scenario_id == current_scenario_id:
if current:
current_in_chapter = true
current_scenario_title = get_scenario_title(scenario_id)
scenarios.append({
"id": scenario_id,
"title": get_scenario_title(scenario_id),
"position": get_scenario_position_in_chapter(scenario_id),
"total": scenario_ids.size(),
"completed": completed,
"current": current,
"available": completed or current
})
entries.append({
"id": chapter_id,
"title": str(chapter_titles.get(chapter_id, chapter_id)),
@@ -672,7 +701,8 @@ func get_chapter_progress_entries() -> Array:
"completed": completed_count,
"total": scenario_ids.size(),
"current": current_in_chapter,
"current_scenario_title": current_scenario_title
"current_scenario_title": current_scenario_title,
"scenarios": scenarios
})
return entries