From 9d67e0ae1dabec5c183759abad1ad69597e0d169 Mon Sep 17 00:00:00 2001 From: Wickedness Date: Mon, 27 Jul 2026 22:37:55 +0900 Subject: [PATCH] feat: add walkable Guangzong sortie camp --- ...isual-asset-prologue-exploration-report.md | 22 +- scripts/verify-camp-reward-data.mjs | 84 +- scripts/verify-flow.mjs | 2 +- ...verify-prologue-exploration-asset-data.mjs | 3 +- scripts/verify-story-asset-data.mjs | 2 +- scripts/verify-story-environment-profiles.mjs | 2 +- ...y-third-battle-priority-return-browser.mjs | 40 +- .../verify-third-camp-preparation-browser.mjs | 853 ++++++++--- scripts/verify-third-camp-preparation.mjs | 105 +- .../third-guangzong-sortie-camp.webp | Bin 0 -> 278856 bytes src/game/data/battles.ts | 22 +- src/game/data/scenario.ts | 19 +- src/game/data/thirdCampExploration.ts | 583 ++++++++ src/game/data/thirdCampPreparation.ts | 138 +- src/game/scenes/CampScene.ts | 487 +++++-- src/game/scenes/CampVisitExplorationScene.ts | 1252 +++++++++++++++-- src/game/state/thirdCampExplorationActions.ts | 463 ++++++ 17 files changed, 3519 insertions(+), 558 deletions(-) create mode 100644 src/assets/images/exploration/third-guangzong-sortie-camp.webp create mode 100644 src/game/data/thirdCampExploration.ts create mode 100644 src/game/state/thirdCampExplorationActions.ts diff --git a/docs/visual-asset-prologue-exploration-report.md b/docs/visual-asset-prologue-exploration-report.md index 64a50bc..367a7f6 100644 --- a/docs/visual-asset-prologue-exploration-report.md +++ b/docs/visual-asset-prologue-exploration-report.md @@ -11,11 +11,12 @@ files. | --- | --- | --- | | Zhuo village and militia camp | `src/assets/images/exploration/prologue-village.webp`, `prologue-militia-camp.webp` | 1920×1080 opaque WebP | | Second-victory northern village and ferry | `src/assets/images/exploration/second-pursuit-village-ferry.webp` | 1920×1080 opaque WebP | +| Third-victory Guangzong forward sortie camp | `src/assets/images/exploration/third-guangzong-sortie-camp.webp` | 1920×1080 opaque WebP | | Exploration SD characters | `src/assets/images/exploration/characters/exploration-*.webp` | 3072×768 transparent WebP sprite sheets | | First-victory camp Jian Yong | `src/assets/images/exploration/characters/exploration-jian-yong.webp` | 3072×768 transparent WebP sprite sheet | | Prologue NPC dialogue portraits | `src/assets/images/portraits/zhuo-*-yellow-turban.webp`, `zou-jing-yellow-turban.webp` | 1254×1254 WebP | -The three backgrounds reserve the exact top, right, and bottom HUD regions used +The four backgrounds reserve the exact top, right, and bottom HUD regions used by the 1920×1080 desktop layout. Each playable portion was aligned to the existing collision and interaction coordinate system before export. @@ -52,9 +53,22 @@ Its final built-in generation request was: > text, UI, logo, watermark, modern object, copied character, or copyrighted > game design. -The generated master was converted to an opaque 1920×1080 WebP with -`scripts/build-exploration-background.py`; only the optimized runtime asset is -tracked. +The third-victory variant depicts a forward-deployment camp outside +Guangzong: a north gate, broad readable crossroads, an operations tent and map +table on the left, a loaded supply cart in the lower-left, and a rally and +weapon area on the right. Its final built-in generation request was: + +> Original late-Eastern-Han Guangzong forward-deployment camp for a desktop +> historical RPG, elevated three-quarter top-down camera, warm dusk light, +> north gate and clean crossroads, left operations tent with map table, +> lower-left loaded supply cart, and right rally and weapon area. Preserve +> dark, low-detail safe zones for the fixed top, right, and bottom HUD. No +> people, text, UI, logos, modern objects, copied characters, or copyrighted +> game art. + +The generated masters were converted to opaque 1920×1080 WebP runtime assets +with the project background builder or an equivalent loss-controlled FFmpeg +conversion; only the optimized runtime assets are tracked. ### Dialogue portraits diff --git a/scripts/verify-camp-reward-data.mjs b/scripts/verify-camp-reward-data.mjs index 872f732..687d9f9 100644 --- a/scripts/verify-camp-reward-data.mjs +++ b/scripts/verify-camp-reward-data.mjs @@ -20,6 +20,16 @@ try { await server.ssrLoadModule( '/src/game/data/secondBattleReliefExploration.ts' ); + const { + thirdCampCompanionDialogues, + thirdCampExplorationVisitId + } = await server.ssrLoadModule( + '/src/game/data/thirdCampExploration.ts' + ); + const { thirdBattleReturnCampStep } = + await server.ssrLoadModule( + '/src/game/data/thirdBattleReturnDialogue.ts' + ); const scenarioData = await server.ssrLoadModule('/src/game/data/scenario.ts'); const { isCampaignStep } = await server.ssrLoadModule('/src/game/state/campaignState.ts'); const itemRewardArrays = collectItemRewardArrays(source); @@ -28,14 +38,22 @@ try { const campBattleIdKeys = new Set(campBattleIdEntries.map((entry) => entry.key)); validateCampBattleIdEntries(campBattleIdEntries, battleScenarios); const knownBondsById = collectKnownBondsById(battleScenarios, scenarioData); - const dialogueEvents = collectCampEvents(source, 'campDialogues'); + const dialogueEvents = + materializeCanonicalThirdCampCompanionDialogues( + collectCampEvents(source, 'campDialogues'), + thirdCampCompanionDialogues + ); const visitEvents = collectCampEvents(source, 'campVisits').map((event) => - materializeCanonicalSecondBattleReliefVisit( - materializeCanonicalFirstPursuitVisit( - event, - firstPursuitScoutVisitDefinition + materializeCanonicalThirdCampExplorationVisit( + materializeCanonicalSecondBattleReliefVisit( + materializeCanonicalFirstPursuitVisit( + event, + firstPursuitScoutVisitDefinition + ), + secondBattleReliefExplorationDefinition ), - secondBattleReliefExplorationDefinition + thirdCampExplorationVisitId, + thirdBattleReturnCampStep ) ); const campaignStepReferences = @@ -341,6 +359,40 @@ function collectCampEvents(text, arrayName) { })); } +function materializeCanonicalThirdCampCompanionDialogues( + events, + definitions +) { + const quote = (value) => + `'${String(value).replaceAll('\\', '\\\\').replaceAll("'", "\\'")}'`; + return events.flatMap((event) => { + if ( + !event.body.includes('...dialogue') || + !event.body.includes('choices: dialogue.choices') + ) { + return [event]; + } + return definitions.map((definition) => { + const choiceSource = definition.choices + .map( + (choice) => + `{ id: ${quote(choice.id)}, rewardExp: ${choice.rewardExp} }` + ) + .join(', '); + return { + ...event, + body: + `{ id: ${quote(definition.id)}, ` + + 'availableAfterBattleIds: [campBattleIds.third], ' + + `unitIds: [${definition.unitIds.map(quote).join(', ')}], ` + + `bondId: ${quote(definition.bondId)}, ` + + `rewardExp: ${definition.rewardExp}, ` + + `choices: [${choiceSource}] }` + }; + }); + }); +} + function materializeCanonicalFirstPursuitVisit(event, definition) { if (!event.body.includes('...firstPursuitScoutVisitDefinition')) { return event; @@ -390,6 +442,26 @@ function materializeCanonicalSecondBattleReliefVisit(event, definition) { }; } +function materializeCanonicalThirdCampExplorationVisit( + event, + visitId, + campStep +) { + if (!event.body.includes('id: thirdCampExplorationVisitId')) { + return event; + } + const quote = (value) => + `'${String(value).replaceAll('\\', '\\\\').replaceAll("'", "\\'")}'`; + const canonicalSource = + `{ id: ${quote(visitId)}, ` + + 'availableAfterBattleIds: [campBattleIds.third], ' + + `availableDuringSteps: [${quote(campStep)}], `; + return { + ...event, + body: canonicalSource + event.body.slice(1) + }; +} + function validateCampEventCollection(events, collectionName, campBattleIdKeys, isCampaignStep) { const seenIds = new Map(); let campaignStepReferenceCount = 0; diff --git a/scripts/verify-flow.mjs b/scripts/verify-flow.mjs index 0ae0a93..3227eed 100644 --- a/scripts/verify-flow.mjs +++ b/scripts/verify-flow.mjs @@ -1632,7 +1632,7 @@ try { if ( fourthBattleState.camera?.mapWidth !== 24 || fourthBattleState.camera?.mapHeight !== 20 || - fourthBattleState.victoryConditionLabel !== '장각 격파' || + fourthBattleState.victoryConditionLabel !== '장각 본대 지휘 와해' || fourthEnemies.length < 12 || !fourthEnemyBehaviors.has('aggressive') || !fourthEnemyBehaviors.has('guard') || diff --git a/scripts/verify-prologue-exploration-asset-data.mjs b/scripts/verify-prologue-exploration-asset-data.mjs index ec68c3a..934775c 100644 --- a/scripts/verify-prologue-exploration-asset-data.mjs +++ b/scripts/verify-prologue-exploration-asset-data.mjs @@ -5,7 +5,8 @@ const explorationAssetDirectory = join('src', 'assets', 'images', 'exploration') const expectedAssets = [ 'prologue-village.webp', 'prologue-militia-camp.webp', - 'second-pursuit-village-ferry.webp' + 'second-pursuit-village-ferry.webp', + 'third-guangzong-sortie-camp.webp' ]; const expectedWidth = 1920; const expectedHeight = 1080; diff --git a/scripts/verify-story-asset-data.mjs b/scripts/verify-story-asset-data.mjs index 01578e0..b6ca033 100644 --- a/scripts/verify-story-asset-data.mjs +++ b/scripts/verify-story-asset-data.mjs @@ -9,7 +9,7 @@ const validDirections = new Set(['south', 'east', 'north', 'west']); const portraitlessActorIds = new Set(['rebel-leader']); const maxAdjacentBackgroundDuplicateRate = 0.02; const maxAdjacentBackgroundRun = 3; -const expectedStoryPageCount = 468; +const expectedStoryPageCount = 469; const server = await createServer({ logLevel: 'error', diff --git a/scripts/verify-story-environment-profiles.mjs b/scripts/verify-story-environment-profiles.mjs index 1263a76..a243dd3 100644 --- a/scripts/verify-story-environment-profiles.mjs +++ b/scripts/verify-story-environment-profiles.mjs @@ -2,7 +2,7 @@ import assert from 'node:assert/strict'; import { readFileSync } from 'node:fs'; import { createServer } from 'vite'; -const expectedStoryPageCount = 468; +const expectedStoryPageCount = 469; const server = await createServer({ logLevel: 'error', server: { middlewareMode: true, hmr: false }, diff --git a/scripts/verify-third-battle-priority-return-browser.mjs b/scripts/verify-third-battle-priority-return-browser.mjs index ef1e1d8..dd8be15 100644 --- a/scripts/verify-third-battle-priority-return-browser.mjs +++ b/scripts/verify-third-battle-priority-return-browser.mjs @@ -148,6 +148,8 @@ async function verifyFixture(browser, baseUrl, fixture) { ); }); } + await page.waitForTimeout(1500); + await stopActiveGameScenes(page); const seeded = await seedThirdVictoryCamp(page, fixture); assert.deepEqual( @@ -179,14 +181,21 @@ async function verifyFixture(browser, baseUrl, fixture) { page, fixture, false, - true + false ); assert.equal(camp.campaign.step, 'third-camp'); assert.equal(camp.campBattleId, sourceBattleId); assert.equal( camp.activeTab, - 'dialogue', - `${fixture.id}: a pending priority return must reclaim focus after CampScene reuse.` + 'visit', + `${fixture.id}: the new walkable sortie camp must reclaim first focus after CampScene reuse.` + ); + assert.equal(camp.thirdCampExploration.available, true); + assert.equal(camp.thirdCampExploration.selected, true); + assert.equal(camp.thirdCampExploration.mode, 'explore'); + assertBoundsInsideViewport( + camp.thirdCampExploration.explorationButtonBounds, + `${fixture.id} third-camp exploration button` ); if (fixture.reducedMotion) { assert.equal( @@ -212,7 +221,7 @@ async function verifyFixture(browser, baseUrl, fixture) { } assertPriorityReturn(camp.thirdBattlePriorityReturn, fixture, { completed: false, - requireRowBounds: true + requireRowBounds: false }); const dialogueTab = camp.campTabs.find( @@ -244,6 +253,18 @@ async function verifyFixture(browser, baseUrl, fixture) { `dist/verification-third-battle-priority-return-${fixture.id}-tab-badge.png` ); + await clickSceneBounds( + page, + 'CampScene', + dialogueTab.bounds + ); + camp = await waitForPriorityReturn( + page, + fixture, + false, + true + ); + assert.equal(camp.activeTab, 'dialogue'); const priorityReturn = camp.thirdBattlePriorityReturn; assertPriorityReturn(priorityReturn, fixture, { completed: false, @@ -405,6 +426,8 @@ async function verifyFixture(browser, baseUrl, fixture) { }); await waitForDebugApi(page); await assertFhdViewport(page, fixture); + await page.waitForTimeout(1500); + await stopActiveGameScenes(page); await page.evaluate(async () => { await window.__HEROS_DEBUG__.goToCamp(); }); @@ -620,6 +643,15 @@ async function waitForDebugApi(page) { ); } +async function stopActiveGameScenes(page) { + await page.evaluate(() => { + const game = window.__HEROS_GAME__; + for (const scene of game?.scene.getScenes(true) ?? []) { + game.scene.stop(scene.scene.key); + } + }); +} + async function waitForPriorityReturn( page, fixture, diff --git a/scripts/verify-third-camp-preparation-browser.mjs b/scripts/verify-third-camp-preparation-browser.mjs index 9949390..7d13898 100644 --- a/scripts/verify-third-camp-preparation-browser.mjs +++ b/scripts/verify-third-camp-preparation-browser.mjs @@ -14,6 +14,9 @@ const selectionRecordId = 'third-camp-preparation-priority'; const trackedEnemyUnitId = 'guangzong-main-vanguard-a'; const priorityDialogueId = 'guan-zhang-after-guangzong-road'; const priorityDialogueBondId = 'guan-yu__zhang-fei'; +const explorationVisitId = 'third-guangzong-sortie-camp'; +const explorationActivityMarkerPrefix = + `${explorationVisitId}:activity:`; const activeThroughTurn = 3; const priorityFixtures = [ @@ -126,10 +129,11 @@ async function verifyRenderer(browser, baseUrl, rendererFixture) { await waitForDebugApi(page); await assertFhdViewport(page, rendererFixture); - if (rendererFixture.renderer === 'webgl') { - await verifyCampPreparationUi(page); - await assertFhdViewport(page, rendererFixture); - } + await verifyCampPreparationUi( + page, + rendererFixture.renderer + ); + await assertFhdViewport(page, rendererFixture); for (const priority of priorityFixtures) { await verifyBattlePriority( @@ -163,7 +167,11 @@ async function verifyRenderer(browser, baseUrl, rendererFixture) { } } -async function verifyCampPreparationUi(page) { +async function verifyCampPreparationUi(page, renderer) { + // Let the initial no-save title/story transition finish before replacing + // the campaign fixture, otherwise its already queued scene start can race + // the first exploration round trip. + await page.waitForTimeout(1500); const seeded = await seedThirdVictory(page, { acknowledgeActivities: false, selectPriorityId: null @@ -190,22 +198,19 @@ async function verifyCampPreparationUi(page) { }); let camp = await waitForPreparationToggle(page); assert.equal(camp.sortieVisible, true); - assert.equal( - preparationPriority(camp, 'information').selectable, - true, - 'Opening the briefing must count as reviewing the unlocked battle information.' - ); - assert.equal( - preparationPriority(camp, 'information').evidence?.category, - 'unlocks' - ); - assert.equal( - preparationPriority(camp, 'equipment').selectable, - false - ); - assert.equal( - preparationPriority(camp, 'companion').selectable, - false + for (const priority of priorityFixtures) { + assert.equal( + preparationPriority(camp, priority.id).selectable, + false, + `Opening the sortie briefing must not falsely complete ${priority.id}.` + ); + } + assert.equal(camp.thirdCampExploration.available, true); + assert.equal(camp.thirdCampExploration.entered, false); + assert.equal(camp.thirdCampExploration.mode, 'explore'); + assert.deepEqual( + camp.thirdCampExploration.completedActivityIds, + [] ); assertFiniteBounds( camp.thirdCampPreparation.toggleButtonBounds, @@ -220,18 +225,8 @@ async function verifyCampPreparationUi(page) { assertPreparationBrowserLayout(camp, 'initial browser'); await capture( page, - 'dist/verification-third-camp-preparation-webgl-browser.png' + `dist/verification-third-camp-exploration-${renderer}-locked.png` ); - - await selectPreparationCard(page, 'information'); - camp = await waitForCampSelection(page, 'information'); - assertPreparationSelection(camp, 'information'); - await assertCampaignSelectionPersisted( - page, - 'information', - 'information selection' - ); - const equipmentLocked = preparationPriority(camp, 'equipment'); assert.equal(equipmentLocked.selectable, false); @@ -240,136 +235,368 @@ async function verifyCampPreparationUi(page) { 'CampScene', equipmentLocked.actionButtonBounds ); - await page.waitForFunction( - () => { - const state = window.__HEROS_DEBUG__?.camp?.(); - return ( - state?.activeTab === 'equipment' && - state?.sortieVisible === false && - state?.thirdCampPreparation?.priorities?.find( - ({ id }) => id === 'equipment' - )?.selectable === true - ); - }, - undefined, - { timeout: 30000 } - ); - camp = await readCamp(page); - assert.equal(camp.activeTab, 'equipment'); + let exploration = await waitForThirdCampExploration(page); + assert.equal(exploration.locationId, explorationVisitId); + assert.equal(exploration.viewport.width, 1920); + assert.equal(exploration.viewport.height, 1080); assert.equal( - preparationPriority(camp, 'equipment').evidence?.category, - 'equipment' + exploration.background.key, + 'third-guangzong-sortie-camp-background' ); - assertPreparationSelection(camp, 'information'); - - camp = await openPreparationBrowser(page); - assertPreparationBrowserLayout(camp, 'equipment unlocked'); - await selectPreparationCard(page, 'equipment'); - camp = await waitForCampSelection(page, 'equipment'); - assertPreparationSelection(camp, 'equipment'); - await assertCampaignSelectionPersisted( - page, - 'equipment', - 'equipment selection' + assert.equal(exploration.background.ready, true); + assert.equal(exploration.background.fallback, false); + assert.equal(exploration.background.sourceWidth, 1920); + assert.equal(exploration.background.sourceHeight, 1080); + assert.equal(exploration.requiredTexturesReady, true); + assert.deepEqual( + exploration.visit.completedActivityIds, + [] ); - - const companionLocked = - preparationPriority(camp, 'companion'); - assert.equal(companionLocked.selectable, false); - await clickSceneBounds( - page, - 'CampScene', - companionLocked.actionButtonBounds - ); - await page.waitForFunction( - (dialogueId) => { - const state = window.__HEROS_DEBUG__?.camp?.(); - return ( - state?.activeTab === 'dialogue' && - state?.sortieVisible === false && - state?.selectedDialogue?.id === dialogueId && - state.selectedDialogue.completed === false && - state.selectedDialogue.choices?.length > 0 - ); - }, - priorityDialogueId, - { timeout: 30000 } - ); - camp = await readCamp(page); assert.equal( - camp.selectedDialogue.thirdBattlePriorityReturn, - true, - 'The companion activity must route to the exact result-priority return dialogue.' + exploration.visit.hudActivityTitle, + '자유 준비 0 / 3' ); - const dialogueChoice = camp.selectedDialogue.choices[0]; - assertFiniteBounds( - dialogueChoice.bounds, - `dialogue choice ${dialogueChoice.id}` + assert.equal( + exploration.visit.hudPriorityLocation, + '아직 정하지 않음' ); - assertBoundsInsideViewport( - dialogueChoice.bounds, - `dialogue choice ${dialogueChoice.id}` + assert.equal(exploration.visit.selectedPriorityId, null); + assert.equal(exploration.storyContext.sourceBattleId, sourceBattleId); + assert.equal(exploration.storyContext.targetBattleId, targetBattleId); + assert.equal( + exploration.storyContext.companionDialogueId, + priorityDialogueId ); - await clickSceneBounds( - page, - 'CampScene', - dialogueChoice.bounds + assert.equal( + exploration.storyContext.companionBondId, + priorityDialogueBondId ); - await page.waitForFunction( - ({ dialogueId, choiceId }) => { - const state = window.__HEROS_DEBUG__?.camp?.(); - return ( - state?.selectedDialogue?.id === dialogueId && - state.selectedDialogue.completed === true && - state.campaign?.campDialogueChoiceIds?.[dialogueId] === - choiceId && - state?.thirdCampPreparation?.priorities?.find( - ({ id }) => id === 'companion' - )?.selectable === true - ); - }, - { - dialogueId: priorityDialogueId, - choiceId: dialogueChoice.id - }, - { timeout: 30000 } + assert.deepEqual( + exploration.actors.map(({ id }) => id).sort(), + [ + 'companion-guan-yu', + 'companion-zhang-fei', + 'quartermaster-equipment', + 'zou-jing-operations' + ] ); + assert( + exploration.actors.every(({ moved }) => moved === false), + 'Third-camp NPCs must begin at stable authored positions.' + ); + assert.equal(exploration.dialogue.active, true); + assert.equal(exploration.dialogue.portraitVisible, true); + await advanceExplorationDialogue(page); + exploration = await readThirdCampExploration(page); + assert.equal(exploration.dialogue.active, false); - camp = await openPreparationBrowser(page); - assertPreparationBrowserLayout(camp, 'companion unlocked'); - const companion = preparationPriority(camp, 'companion'); - assert.equal(companion.evidenceKind, 'priority-return-dialogue'); - assert.equal(companion.evidence.dialogueId, priorityDialogueId); - assert.equal(companion.evidence.bondId, priorityDialogueBondId); - await selectPreparationCard(page, 'companion'); - camp = await waitForCampSelection(page, 'companion'); - assertPreparationSelection(camp, 'companion'); - await assertCampaignSelectionPersisted( - page, - 'companion', - 'companion selection' - ); await capture( page, - 'dist/verification-third-camp-preparation-webgl-selected.png' + `dist/verification-third-camp-exploration-${renderer}-arrival.png` ); + const exitStarted = await page.evaluate(() => { + const scene = window.__HEROS_GAME__?.scene.getScene( + 'CampVisitExplorationScene' + ); + return scene?.debugInteractWith?.('camp-exit') ?? false; + }); + assert.equal( + exitStarted, + true, + 'The camp exit must remain usable before any optional activity.' + ); + await page.waitForFunction( + () => + window.__HEROS_DEBUG__?.campVisitExploration?.() + ?.dialogue?.active === true + ); + await advanceExplorationDialogue(page); + try { + await waitForCamp(page, 15000); + } catch (error) { + const state = await page.evaluate(() => ({ + exploration: + window.__HEROS_DEBUG__?.campVisitExploration?.(), + camp: window.__HEROS_DEBUG__?.camp?.(), + activeScenes: + window.__HEROS_GAME__?.scene + .getScenes(true) + .map((scene) => scene.scene.key) ?? [] + })); + throw new Error( + `Optional third-camp exit did not return to Camp: ${JSON.stringify( + state + )}`, + { cause: error } + ); + } + await page.evaluate(() => { + const scene = + window.__HEROS_GAME__?.scene.getScene('CampScene'); + scene?.showSortiePrep?.(); + }); + camp = await waitForPreparationToggle(page); + const optionalChecklist = camp.sortieChecklist.find( + ({ label }) => label === '출진 우선 준비' + ); + assert.equal(optionalChecklist?.complete, true); + assert( + optionalChecklist?.detail.includes('보너스 없이 출진 가능'), + 'The sortie checklist must explicitly allow sortie without a preparation bonus.' + ); + assert.equal(camp.thirdCampPreparation.selectedPriorityId, null); + + exploration = await openThirdCampExplorationFromCamp(page); + assert.equal( + exploration.dialogue.active, + false, + 'The introduction must not repeat after the first recorded entry.' + ); + + exploration = await completeThirdCampNpcActivity( + page, + 'quartermaster-equipment', + 'equipment' + ); + assert.equal(exploration.visit.completedActivityCount, 1); + assert.equal(exploration.visit.selectedPriorityId, 'equipment'); + assert.equal( + exploration.visit.hudActivityTitle, + '자유 준비 1 / 3' + ); + assert.equal( + exploration.visit.hudPriorityLocation, + '장비 정비' + ); + assertThirdCampWorldFeedback(exploration, ['equipment']); + assert( + exploration.campaign.completedCampVisits.includes( + `${explorationActivityMarkerPrefix}equipment` + ) + ); + + const partialExit = await page.evaluate(() => { + const scene = window.__HEROS_GAME__?.scene.getScene( + 'CampVisitExplorationScene' + ); + return scene?.debugInteractWith?.('camp-exit') ?? false; + }); + assert.equal(partialExit, true); + await waitForCamp(page); await page.reload({ waitUntil: 'domcontentloaded', timeout: 90000 }); await waitForDebugApi(page); + await page.waitForTimeout(1500); await page.evaluate(async () => { + const game = window.__HEROS_GAME__; + for (const scene of game?.scene.getScenes(true) ?? []) { + game.scene.stop(scene.scene.key); + } await window.__HEROS_DEBUG__.goToCamp(); }); await waitForCamp(page); - camp = await openPreparationBrowser(page); - assertPreparationBrowserLayout(camp, 're-entered browser'); - assertPreparationSelection(camp, 'companion'); - await assertCampaignSelectionPersisted( + exploration = await openThirdCampExplorationFromCamp(page); + assert.deepEqual( + exploration.visit.completedActivityIds, + ['equipment'], + 'A partial activity must survive a Camp round trip and page reload.' + ); + assert.equal(exploration.visit.selectedPriorityId, 'equipment'); + assertThirdCampWorldFeedback(exploration, ['equipment']); + + exploration = await completeThirdCampNpcActivity( page, - 'companion', - 're-entered companion selection' + 'zou-jing-operations', + 'information' + ); + assert.deepEqual( + [...exploration.visit.completedActivityIds].sort(), + ['equipment', 'information'] + ); + assert.equal(exploration.visit.selectedPriorityId, 'information'); + assertThirdCampWorldFeedback( + exploration, + ['equipment', 'information'] + ); + + const companionActor = exploration.actors.find( + ({ activityId }) => activityId === 'companion' + ); + assert(companionActor, 'Expected a result-specific companion actor.'); + const bondExpBefore = await readCampaignBondExp( + page, + exploration.storyContext.companionBondId + ); + const companionStarted = await page.evaluate((actorId) => { + const scene = window.__HEROS_GAME__?.scene.getScene( + 'CampVisitExplorationScene' + ); + return scene?.debugInteractWith?.(actorId) ?? false; + }, companionActor.id); + assert.equal(companionStarted, true); + await advanceExplorationDialogue(page); + exploration = await readThirdCampExploration(page); + assert.equal(exploration.choice.open, true); + assert.equal(exploration.choice.mode, 'third-companion'); + assert.equal(exploration.choice.sourceNpcId, companionActor.id); + assert(exploration.choice.choices.length > 0); + await page.waitForFunction( + () => + window.__HEROS_DEBUG__?.campVisitExploration?.() + ?.choice?.ready === true + ); + exploration = await readThirdCampExploration(page); + const companionChoice = exploration.choice.choices[0]; + assertFiniteBounds( + companionChoice.bounds, + 'third-camp companion choice' + ); + assertBoundsInsideViewport( + companionChoice.bounds, + 'third-camp companion choice' + ); + await clickSceneBounds( + page, + 'CampVisitExplorationScene', + companionChoice.bounds + ); + await page.waitForFunction( + () => { + const state = + window.__HEROS_DEBUG__?.campVisitExploration?.(); + return ( + state?.visit?.completedActivityCount === 3 && + state?.visit?.selectedPriorityId === 'companion' + ); + } + ); + await advanceExplorationDialogue(page); + exploration = await readThirdCampExploration(page); + assert.deepEqual( + [...exploration.visit.completedActivityIds].sort(), + ['companion', 'equipment', 'information'] + ); + assert.equal( + exploration.visit.hudActivityTitle, + '자유 준비 3 / 3' + ); + assert.equal( + exploration.visit.hudPriorityLocation, + '동료 공명' + ); + assertThirdCampWorldFeedback( + exploration, + ['companion', 'equipment', 'information'] + ); + assert( + exploration.actors.every(({ moved }) => moved === false), + 'Talking to a companion must not teleport any camp actor.' + ); + const bondExpAfter = await readCampaignBondExp( + page, + exploration.storyContext.companionBondId + ); + assert( + bondExpAfter > bondExpBefore, + 'The first companion choice must award its bond experience.' + ); + + await page.waitForFunction( + () => { + const state = + window.__HEROS_DEBUG__?.campVisitExploration?.(); + return ( + state?.dialogue?.active === false && + state?.choice?.open === false && + state?.navigationPending === false + ); + } + ); + const companionRepeatStarted = await page.evaluate((actorId) => { + const scene = window.__HEROS_GAME__?.scene.getScene( + 'CampVisitExplorationScene' + ); + return scene?.debugInteractWith?.(actorId) ?? false; + }, companionActor.id); + assert.equal(companionRepeatStarted, true); + await advanceExplorationDialogue(page); + const bondExpAfterRepeat = await readCampaignBondExp( + page, + exploration.storyContext.companionBondId + ); + assert.equal( + bondExpAfterRepeat, + bondExpAfter, + 'Repeating the companion activity must not duplicate bond rewards.' + ); + + await capture( + page, + `dist/verification-third-camp-exploration-${renderer}-complete.png` + ); + const completedExit = await page.evaluate(() => { + const scene = window.__HEROS_GAME__?.scene.getScene( + 'CampVisitExplorationScene' + ); + return scene?.debugInteractWith?.('camp-exit') ?? false; + }); + assert.equal(completedExit, true); + await waitForCamp(page); + await page.evaluate(() => { + const scene = + window.__HEROS_GAME__?.scene.getScene('CampScene'); + scene?.showSortiePrep?.(); + }); + camp = await waitForPreparationToggle(page); + camp = await openPreparationBrowser(page); + assertPreparationBrowserLayout(camp, 'all exploration activities'); + for (const priority of priorityFixtures) { + const availability = preparationPriority(camp, priority.id); + assert.equal(availability.selectable, true); + assert.equal( + availability.evidenceKind, + 'exploration-activity', + `${priority.id} must be unlocked by its explicit walkable-camp activity marker.` + ); + assert.equal( + availability.evidence.visitId, + explorationVisitId + ); + assert.equal( + availability.evidence.activityId, + priority.id + ); + } + assertPreparationSelection(camp, 'companion'); + assertFiniteBounds( + camp.thirdCampPreparation.clearButtonBounds, + 'preparation clear button' + ); + await clickSceneBounds( + page, + 'CampScene', + camp.thirdCampPreparation.clearButtonBounds + ); + await page.waitForFunction( + () => { + const state = window.__HEROS_DEBUG__?.camp?.(); + return ( + state?.thirdCampPreparation?.browserOpen === true && + state.thirdCampPreparation.selectedPriorityId === null && + state.thirdCampPreparation.ready === false + ); + } + ); + camp = await readCamp(page); + const clearedChecklist = camp.sortieChecklist.find( + ({ label }) => label === '출진 우선 준비' + ); + assert.equal(clearedChecklist?.complete, true); + assert( + clearedChecklist?.detail.includes('보너스 없이 출진 가능') ); assert.equal( camp.campaign.completedCampVisits.includes( @@ -378,6 +605,192 @@ async function verifyCampPreparationUi(page) { false, 'A mutable preparation selection must not masquerade as a completed camp visit.' ); + assert.equal( + camp.campaign.completedCampVisits.filter((visitId) => + visitId.startsWith(explorationActivityMarkerPrefix) + ).length, + 3 + ); + await assertCampaignSelectionPersisted( + page, + null, + 'cleared optional preparation' + ); +} + +async function waitForThirdCampExploration(page) { + try { + await page.waitForFunction( + (visitId) => { + const state = + window.__HEROS_DEBUG__?.campVisitExploration?.(); + return ( + state?.scene === 'CampVisitExplorationScene' && + state?.ready === true && + state?.locationId === visitId + ); + }, + explorationVisitId, + { timeout: 30000 } + ); + } catch (error) { + const state = await page.evaluate(() => ({ + exploration: + window.__HEROS_DEBUG__?.campVisitExploration?.(), + camp: window.__HEROS_DEBUG__?.camp?.(), + activeScenes: + window.__HEROS_GAME__?.scene + .getScenes(true) + .map((scene) => scene.scene.key) ?? [] + })); + throw new Error( + `Third-camp exploration did not become ready: ${JSON.stringify( + state + )}`, + { cause: error } + ); + } + return readThirdCampExploration(page); +} + +async function openThirdCampExplorationFromCamp(page) { + let camp = await readCamp(page); + if (camp?.sortieVisible) { + await page.evaluate(() => { + const scene = + window.__HEROS_GAME__?.scene.getScene('CampScene'); + scene?.hideSortiePrep?.(); + }); + } + camp = await readCamp(page); + if (camp?.activeTab !== 'visit') { + await page.evaluate(() => { + const scene = + window.__HEROS_GAME__?.scene.getScene('CampScene'); + if (!scene) { + return; + } + scene.activeTab = 'visit'; + scene.render(); + }); + } + await page.waitForFunction( + () => { + const state = window.__HEROS_DEBUG__?.camp?.(); + return ( + state?.activeTab === 'visit' && + state?.thirdCampExploration?.available === true && + state.thirdCampExploration.explorationInteractive === true && + Boolean( + state.thirdCampExploration.explorationButtonBounds + ) + ); + } + ); + camp = await readCamp(page); + await clickSceneBounds( + page, + 'CampScene', + camp.thirdCampExploration.explorationButtonBounds + ); + const exploration = await waitForThirdCampExploration(page); + const activeScenes = await page.evaluate(() => + window.__HEROS_GAME__?.scene + .getScenes(true) + .map((scene) => scene.scene.key) ?? [] + ); + assert.equal( + activeScenes.includes('CampScene'), + false, + 'The walkable visit must replace CampScene instead of rendering over it.' + ); + return exploration; +} + +async function readThirdCampExploration(page) { + return page.evaluate(() => + window.__HEROS_DEBUG__.campVisitExploration() + ); +} + +async function advanceExplorationDialogue(page) { + for (let step = 0; step < 20; step += 1) { + const state = await page.evaluate(() => + window.__HEROS_DEBUG__?.campVisitExploration?.() + ); + if ( + state?.active === false || + state?.choice?.open || + state?.dialogue?.active === false + ) { + return state; + } + const advanced = await page.evaluate(() => { + const scene = window.__HEROS_GAME__?.scene.getScene( + 'CampVisitExplorationScene' + ); + return scene?.debugAdvanceDialogue?.() ?? false; + }); + assert.equal( + advanced, + true, + 'Expected the active exploration dialogue to advance.' + ); + } + assert.fail('Exploration dialogue did not finish within 20 advances.'); +} + +async function completeThirdCampNpcActivity( + page, + actorId, + activityId +) { + const started = await page.evaluate((targetId) => { + const scene = window.__HEROS_GAME__?.scene.getScene( + 'CampVisitExplorationScene' + ); + return scene?.debugInteractWith?.(targetId) ?? false; + }, actorId); + assert.equal(started, true, `Expected ${actorId} interaction to start.`); + await page.waitForFunction( + () => + window.__HEROS_DEBUG__?.campVisitExploration?.() + ?.dialogue?.active === true + ); + await advanceExplorationDialogue(page); + await page.waitForFunction( + (expectedActivityId) => + window.__HEROS_DEBUG__?.campVisitExploration?.() + ?.visit?.completedActivityIds?.includes( + expectedActivityId + ), + activityId + ); + return readThirdCampExploration(page); +} + +function assertThirdCampWorldFeedback(state, completedIds) { + const completed = new Set(completedIds); + for (const feedback of state.worldFeedback) { + assert.equal( + feedback.visible, + completed.has(feedback.activityId), + `${feedback.activityId} world feedback visibility` + ); + } +} + +async function readCampaignBondExp(page, bondId) { + return page.evaluate(async (targetBondId) => { + const campaignModule = await import( + '/heros_web/src/game/state/campaignState.ts' + ); + return ( + campaignModule + .getCampaignState() + .bonds.find(({ id }) => id === targetBondId)?.exp ?? 0 + ); + }, bondId); } async function verifyBattlePriority( @@ -660,6 +1073,12 @@ async function seedThirdVictory( const actionModule = await import( '/heros_web/src/game/state/thirdCampPreparationActions.ts' ); + const explorationActionModule = await import( + '/heros_web/src/game/state/thirdCampExplorationActions.ts' + ); + const explorationDataModule = await import( + '/heros_web/src/game/data/thirdCampExploration.ts' + ); const preparationModule = await import( '/heros_web/src/game/data/thirdCampPreparation.ts' ); @@ -749,23 +1168,42 @@ async function seedThirdVictory( campaignModule.completeCampaignAftermath(sourceBattleId); if (acknowledgeActivities) { - campaignModule.acknowledgeCampaignVictoryReward( - sourceBattleId, - ['unlocks', 'equipment'] - ); - const dialogueReport = campaignModule.applyCampBondExp( - priorityDialogueId, - priorityDialogueBondId, - 1, - 'verify-third-camp-preparation' - ); - if ( - !dialogueReport?.completedCampDialogues.includes( - priorityDialogueId - ) - ) { + const entry = + explorationActionModule.enterThirdCampExploration(); + if (!entry.ok) { throw new Error( - 'Failed to complete the priority return dialogue seed.' + `Failed to enter third-camp exploration: ${entry.reason}` + ); + } + for (const activityId of ['information', 'equipment']) { + const activity = + explorationActionModule.recordThirdCampExplorationActivity( + activityId + ); + if (!activity.ok) { + throw new Error( + `Failed to complete ${activityId}: ${activity.reason}` + ); + } + } + const definition = + explorationDataModule.resolveThirdCampExplorationDefinition( + campaignModule.getCampaignState() + ); + const companionChoiceId = + definition?.companionDialogue.choices[0]?.id; + if (!companionChoiceId) { + throw new Error( + 'Failed to resolve the priority return companion choice.' + ); + } + const companion = + explorationActionModule.completeThirdCampCompanionActivity( + companionChoiceId + ); + if (!companion.ok) { + throw new Error( + `Failed to complete companion activity: ${companion.reason}` ); } } @@ -1128,7 +1566,7 @@ async function waitForDebugApi(page) { ); } -async function waitForCamp(page) { +async function waitForCamp(page, timeout = 90000) { await page.waitForFunction( () => { const state = window.__HEROS_DEBUG__?.camp?.(); @@ -1143,7 +1581,7 @@ async function waitForCamp(page) { ); }, undefined, - { timeout: 90000 } + { timeout } ); return readCamp(page); } @@ -1169,42 +1607,54 @@ async function waitForPreparationToggle(page) { } async function openPreparationBrowser(page) { - const before = await readCamp(page); - if (before?.thirdCampPreparation?.browserOpen) { - return before; - } - if (!before?.sortieVisible) { - await page.evaluate(() => { - const scene = - window.__HEROS_GAME__?.scene.getScene('CampScene'); - scene.showSortiePrep(); - }); - } - const ready = await waitForPreparationToggle(page); - await clickSceneBounds( - page, - 'CampScene', - ready.thirdCampPreparation.toggleButtonBounds - ); - await page.waitForFunction( - () => { - const preparation = - window.__HEROS_DEBUG__?.camp?.() - ?.thirdCampPreparation; - return ( - preparation?.browserOpen === true && - Boolean(preparation.closeButtonBounds) && - preparation.priorities?.length === 3 && - preparation.priorities.every( - ({ cardBounds, actionButtonBounds }) => - Boolean(cardBounds && actionButtonBounds) - ) + let lastState = await readCamp(page); + for (let attempt = 0; attempt < 2; attempt += 1) { + if (!lastState?.thirdCampPreparation?.browserOpen) { + if (!lastState?.sortieVisible) { + await page.evaluate(() => { + const scene = + window.__HEROS_GAME__?.scene.getScene('CampScene'); + scene.showSortiePrep(); + }); + } + const ready = await waitForPreparationToggle(page); + await clickSceneBounds( + page, + 'CampScene', + ready.thirdCampPreparation.toggleButtonBounds ); - }, - undefined, - { timeout: 30000 } + } + await page.waitForFunction( + () => { + const preparation = + window.__HEROS_DEBUG__?.camp?.() + ?.thirdCampPreparation; + return ( + preparation?.browserOpen === true && + Boolean(preparation.closeButtonBounds) && + preparation.priorities?.length === 3 && + preparation.priorities.every( + ({ cardBounds, actionButtonBounds }) => + Boolean(cardBounds && actionButtonBounds) + ) + ); + }, + undefined, + { timeout: 30000 } + ); + await page.waitForTimeout(150); + lastState = await readCamp(page); + if (lastState?.thirdCampPreparation?.browserOpen) { + return lastState; + } + } + throw new Error( + `Preparation browser did not remain open: ${JSON.stringify({ + sortieVisible: lastState?.sortieVisible, + activeTab: lastState?.activeTab, + preparation: lastState?.thirdCampPreparation + })}` ); - return readCamp(page); } async function selectPreparationCard(page, priorityId) { @@ -1384,14 +1834,21 @@ async function assertCampaignSelectionPersisted( return raw ? JSON.parse(raw) : null; }); assert(persisted, `${label}: campaign save is missing.`); - assert.deepEqual( - persisted.thirdCampPreparationSelection, - { - sourceBattleId, - targetBattleId, - priorityId - } - ); + if (priorityId) { + assert.deepEqual( + persisted.thirdCampPreparationSelection, + { + sourceBattleId, + targetBattleId, + priorityId + } + ); + } else { + assert.equal( + persisted.thirdCampPreparationSelection, + undefined + ); + } assert.equal( persisted.completedCampVisits.includes( selectionRecordId diff --git a/scripts/verify-third-camp-preparation.mjs b/scripts/verify-third-camp-preparation.mjs index 58da91e..4ab9180 100644 --- a/scripts/verify-third-camp-preparation.mjs +++ b/scripts/verify-third-camp-preparation.mjs @@ -36,6 +36,12 @@ try { const actionModule = await server.ssrLoadModule( '/src/game/state/thirdCampPreparationActions.ts' ); + const explorationDataModule = await server.ssrLoadModule( + '/src/game/data/thirdCampExploration.ts' + ); + const explorationActionModule = await server.ssrLoadModule( + '/src/game/state/thirdCampExplorationActions.ts' + ); const campaignModule = await server.ssrLoadModule( '/src/game/state/campaignState.ts' ); @@ -50,6 +56,8 @@ try { verifyGuardedPersistentOverwrite( dataModule, actionModule, + explorationDataModule, + explorationActionModule, campaignModule, battleScenarios ); @@ -172,17 +180,29 @@ function verifyActivityGates(dataModule) { }); availability = dataModule.resolveThirdCampPreparationAvailability(acknowledged); + assert( + availability.every(({ selectable }) => selectable === false), + 'Opening reward categories alone must not complete walkable-camp activities.' + ); + + const explored = literalCampaign(dataModule, { + completedActivities: ['information', 'equipment'] + }); + availability = + dataModule.resolveThirdCampPreparationAvailability(explored); assert.equal(availability[0].selectable, true); assert.deepEqual(availability[0].evidence, { - kind: 'victory-reward-category', + kind: 'exploration-activity', battleId: dataModule.thirdCampPreparationSourceBattleId, - category: 'unlocks' + visitId: 'third-guangzong-sortie-camp', + activityId: 'information' }); assert.equal(availability[1].selectable, true); assert.deepEqual(availability[1].evidence, { - kind: 'victory-reward-category', + kind: 'exploration-activity', battleId: dataModule.thirdCampPreparationSourceBattleId, - category: 'equipment' + visitId: 'third-guangzong-sortie-camp', + activityId: 'equipment' }); assert.equal(availability[2].selectable, false); @@ -198,6 +218,7 @@ function verifyActivityGates(dataModule) { assert.equal(availability[1].selectable, false); const companion = literalCampaign(dataModule, { + completedActivities: ['companion'], completePriorityDialogue: true }); availability = @@ -208,7 +229,7 @@ function verifyActivityGates(dataModule) { assert.equal(companionAvailability?.selectable, true); assert.equal( companionAvailability?.evidence?.kind, - 'priority-return-dialogue' + 'exploration-activity' ); assert.equal( companionAvailability?.evidence?.dialogueId, @@ -219,6 +240,18 @@ function verifyActivityGates(dataModule) { 'guan-yu__zhang-fei' ); + const legacyCompanion = literalCampaign(dataModule, { + completePriorityDialogue: true + }); + assert.equal( + dataModule.resolveThirdCampPreparationAvailability( + legacyCompanion + ).find(({ priority }) => priority.id === 'companion') + ?.evidence?.kind, + 'priority-return-dialogue', + 'An already completed result dialogue must remain valid for old saves.' + ); + const unrelatedDialogue = literalCampaign(dataModule); unrelatedDialogue.completedCampDialogues = [ 'liu-guan-after-guangzong-road' @@ -299,7 +332,7 @@ function verifyTargetBattleMemoryIsolation(dataModule) { ); const stale = eligibleLiteralCampaign(dataModule, 'information'); - stale.acknowledgedVictoryRewardCategories = {}; + stale.completedCampVisits = []; assert.equal( dataModule.resolveThirdCampPreparationMemory({ campaign: stale, @@ -409,7 +442,7 @@ function verifyBattleLifecycleContract(dataModule) { memory.evidence.unitIds[0] = 'mutated'; } assert.notEqual(fresh?.label, 'mutated'); - if (fresh?.evidence.kind === 'priority-return-dialogue') { + if (fresh && 'unitIds' in fresh.evidence) { assert.notEqual(fresh.evidence.unitIds[0], 'mutated'); } }); @@ -418,6 +451,8 @@ function verifyBattleLifecycleContract(dataModule) { function verifyGuardedPersistentOverwrite( dataModule, actionModule, + explorationDataModule, + explorationActionModule, campaignModule, battleScenarios ) { @@ -432,9 +467,16 @@ function verifyGuardedPersistentOverwrite( 'activity-required' ); - campaignModule.acknowledgeCampaignVictoryReward( - dataModule.thirdCampPreparationSourceBattleId, - ['unlocks'] + const entry = explorationActionModule.enterThirdCampExploration(); + assert.equal(entry.ok, true); + const informationActivity = + explorationActionModule.recordThirdCampExplorationActivity( + 'information' + ); + assert.equal(informationActivity.ok, true); + assert.equal( + actionModule.clearThirdCampPreparationPriority().ok, + true ); let result = actionModule.setThirdCampPreparationPriority('information'); @@ -465,19 +507,35 @@ function verifyGuardedPersistentOverwrite( 'A rejected replacement must preserve the previous valid priority.' ); - campaignModule.acknowledgeCampaignVictoryReward( - dataModule.thirdCampPreparationSourceBattleId, - ['equipment'] + const equipmentActivity = + explorationActionModule.recordThirdCampExplorationActivity( + 'equipment' + ); + assert.equal(equipmentActivity.ok, true); + assert.equal( + actionModule.clearThirdCampPreparationPriority().ok, + true ); result = actionModule.setThirdCampPreparationPriority('equipment'); assert.equal(result.ok, true); assert.equal(result.changed, true); assert.equal(result.memory.priorityId, 'equipment'); - completePriorityDialogue( - dataModule, - campaignModule, - battleScenarios + const explorationDefinition = + explorationDataModule.resolveThirdCampExplorationDefinition( + campaignModule.getCampaignState() + ); + const companionChoiceId = + explorationDefinition?.companionDialogue.choices[0]?.id; + assert(companionChoiceId); + const companionActivity = + explorationActionModule.completeThirdCampCompanionActivity( + companionChoiceId + ); + assert.equal(companionActivity.ok, true); + assert.equal( + actionModule.clearThirdCampPreparationPriority().ok, + true ); result = actionModule.setThirdCampPreparationPriority('companion'); assert.equal(result.ok, true); @@ -883,12 +941,7 @@ function priorityDialogueForCampaign(campaign, dataModule) { function eligibleLiteralCampaign(dataModule, priorityId) { return literalCampaign(dataModule, { - acknowledgedCategories: - priorityId === 'information' - ? ['unlocks'] - : priorityId === 'equipment' - ? ['equipment'] - : [], + completedActivities: [priorityId], completePriorityDialogue: priorityId === 'companion', selectedPriorityId: priorityId }); @@ -898,6 +951,7 @@ function literalCampaign( dataModule, { acknowledgedCategories = [], + completedActivities = [], completePriorityDialogue = false, selectedPriorityId, legacyReportOnly = false @@ -926,7 +980,10 @@ function literalCampaign( completedCampDialogues: completePriorityDialogue ? ['guan-zhang-after-guangzong-road'] : [], - completedCampVisits: [], + completedCampVisits: completedActivities.map( + (activityId) => + `third-guangzong-sortie-camp:activity:${activityId}` + ), campVisitChoiceIds: {}, ...(selectedPriorityId ? { diff --git a/src/assets/images/exploration/third-guangzong-sortie-camp.webp b/src/assets/images/exploration/third-guangzong-sortie-camp.webp new file mode 100644 index 0000000000000000000000000000000000000000..7b402684733befaf680c81be531d480c28c0710a GIT binary patch literal 278856 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�dI*Txw8t-7%xOwyMaN?-arD30&LP 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≤r#hC-578&<2p+v2y%o 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%0AIx|iQ;|6u* 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¥*4Ne+2xU);1Uh59_>* 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

mm_VZ3V)*E&lNrl4#=H&hS+t1Y&|N3gIaig$6e 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 본영 입구 방어선 -> 측면 숲길 정리 -> 장각 본진', - focus: '관우는 요새 앞 전열을 고정하고, 장비는 숲길 궁병과 기병을 흔들며, 유비는 뒤에서 무리한 돌입을 막아야 합니다.', - roles: ['관우: 본영 입구 전열', '장비: 측면 숲길 압박', '유비: 후방 지휘/마무리 판단'], + summary: '관군의 광종 포위망 가운데 동쪽 숲 선봉을 맡아 장각 본대의 지휘를 무너뜨리는 전투입니다.', + route: '동쪽 선봉 출진점 -> 본영 입구 방어선 -> 측면 숲길 정리 -> 장각 지휘진', + focus: '관우는 동쪽 요새 앞 전열을 고정하고, 장비는 숲길 궁병과 기병을 흔들며, 유비는 포위망에서 홀로 튀어나가지 않도록 진격 속도를 맞춰야 합니다.', + roles: ['관우: 동쪽 본영 입구 전열', '장비: 측면 숲길 압박', '유비: 포위망 연계/후방 지휘'], events: { 'enemy-posture': { title: '광종 본영 진형', lines: [ - '장각은 요새와 숲길을 겹쳐 본영 입구를 막고 있습니다.', - '중앙을 서두르기 전에 측면 궁병을 줄이면 장각에게 붙는 길이 훨씬 안정됩니다.' + '장각 본대는 요새와 숲길을 겹쳐 노식의 포위망 가운데 동쪽 입구를 막고 있습니다.', + '중앙을 서두르기 전에 측면 궁병을 줄이면 지휘진에 닿는 길이 훨씬 안정됩니다.' ] }, 'cavalry-approach': { @@ -784,7 +784,7 @@ export const fourthBattleScenario: BattleScenarioDefinition = { 'leader-wavering': { title: '장각 본진 동요', lines: [ - '장각 주변 수비가 무너지면 황건 본영 전체가 흔들립니다.', + '장각의 지휘병과 주변 수비가 무너지면 황건 본대 전체가 흔들립니다.', '유비를 안전하게 두고 관우와 장비를 붙여 끝을 보십시오.' ] } @@ -794,7 +794,7 @@ export const fourthBattleScenario: BattleScenarioDefinition = { sortieLimit: 3, requiredUnits: ['liu-bei'], recommendedUnits: [ - { unitId: 'liu-bei', role: 'support', reason: '장각 격파까지 전선이 무너지지 않도록 후방 지휘가 필요합니다.' }, + { unitId: 'liu-bei', role: 'support', reason: '장각 본대의 지휘가 무너질 때까지 동쪽 선봉과 관군 포위망을 잇는 후방 지휘가 필요합니다.' }, { unitId: 'guan-yu', role: 'front', reason: '본영 정면의 요새 방어선을 뚫는 핵심 전열입니다.' }, { unitId: 'zhang-fei', role: 'flank', reason: '측면 궁병과 기병을 흔들어 본영 진입 시간을 줄입니다.' } ], @@ -821,7 +821,7 @@ export const fourthBattleScenario: BattleScenarioDefinition = { { id: 'leader', kind: 'defeat-leader', - label: '장각 격파', + label: '장각 본대 지휘 와해', rewardGold: 420, unitId: 'guangzong-main-leader-zhang-jue' }, diff --git a/src/game/data/scenario.ts b/src/game/data/scenario.ts index 02e79b5..fe30fe1 100644 --- a/src/game/data/scenario.ts +++ b/src/game/data/scenario.ts @@ -633,7 +633,7 @@ export const fourthBattleIntroPages: StoryPage[] = [ bgm: 'militia-theme', chapter: '광종 본영', background: 'story-yellow-pursuit', - text: '전령의 길이 끊기자 황건 본대는 광종 들판에 진을 굳혔다. 노란 깃발이 겹겹이 서고, 장각의 이름이 병사들 사이에 낮게 울렸다.' + text: '전령의 길이 끊기자 노식 중랑장의 관군은 광종 포위망을 좁혔다. 황건 본대는 들판에 진을 굳혔고, 의용군에는 동쪽 숲 선봉을 맡으라는 군령이 내려왔다.' }, { id: 'fourth-liu-bei-resolve', @@ -642,7 +642,7 @@ export const fourthBattleIntroPages: StoryPage[] = [ background: 'story-yellow-pursuit', speaker: '유비', portrait: 'liuBei', - text: '장각을 치는 일은 한 사람을 꺾는 일이 아니다. 두려움에 몰린 백성들이 다시 길을 찾게 하는 일이다.' + text: '스승님의 큰 포위망을 흐트러뜨리지 않고 우리에게 맡겨진 동쪽 길을 열겠다. 한 사람의 목보다, 황건 본대가 더는 백성을 몰아세우지 못하게 지휘를 끊는 것이 먼저다.' }, { id: 'fourth-guan-yu-line', @@ -651,7 +651,7 @@ export const fourthBattleIntroPages: StoryPage[] = [ background: 'story-yellow-pursuit', speaker: '관우', portrait: 'guanYu', - text: '적은 요새와 숲 사이에 궁병을 숨겼습니다. 전열을 흐트러뜨리지 않고 본영의 깃발까지 밀고 들어가야 합니다.' + text: '적은 요새와 숲 사이에 궁병을 숨겼습니다. 동쪽 전열을 흐트러뜨리지 않고 지휘 깃발까지 밀고 들어가면 포위망 전체가 움직일 수 있습니다.' }, { id: 'fourth-zhang-fei-roar', @@ -660,7 +660,7 @@ export const fourthBattleIntroPages: StoryPage[] = [ background: 'story-yellow-pursuit', speaker: '장비', portrait: 'zhangFei', - text: '좋소! 광종의 누런 깃발을 오늘 모두 뽑아 버립시다. 뒤돌아볼 틈 없이 밀고 들어가겠소!' + text: '좋소! 형님 깃발이 보이는 거리에서 동쪽 숲길부터 열겠소. 우리가 지휘진을 흔들면 관군의 포위망도 한꺼번에 조여들 것이오!' } ]; @@ -670,7 +670,7 @@ export const fourthBattleVictoryPages: StoryPage[] = [ bgm: 'militia-theme', chapter: '황건적 토벌', background: 'story-yellow-pursuit', - text: '광종의 들판에서 황건의 본영이 무너졌다. 피난민들은 오래 닫았던 문을 열고, 쓰러진 깃발 너머로 관군과 의용군을 바라보았다.' + text: '의용군이 동쪽 지휘선을 끊자 관군의 포위망이 맞물렸고 광종의 황건 본대는 와해되었다. 피난민들은 오래 닫았던 문을 열고, 쓰러진 깃발 너머의 관군과 의용군을 바라보았다.' }, { id: 'fourth-victory-liu-bei', @@ -681,12 +681,19 @@ export const fourthBattleVictoryPages: StoryPage[] = [ portrait: 'liuBei', text: '난은 잠시 가라앉았지만, 천하가 바로 선 것은 아니다. 오늘의 공이 교만이 되지 않도록 마음을 다잡자.' }, + { + id: 'fourth-victory-lu-zhi-recalled', + bgm: 'battle-prep', + chapter: '뒤집힌 군령', + background: 'story-yellow-pursuit', + text: '승전 장부의 먹이 마르기도 전에 조정의 사자가 도착했다. 포위망을 이끌던 노식은 낙양으로 소환되고, 남은 군권에는 동탁의 이름이 올랐다. 세 형제는 전장의 승리만으로 어지러운 조정을 바로잡을 수 없음을 처음 실감했다.' + }, { id: 'fourth-victory-next-era', bgm: 'battle-prep', chapter: '새로운 혼란', background: 'story-yellow-pursuit', - text: '황건의 불길이 잦아들 무렵, 조정 안에서는 또 다른 그림자가 자라났다. 동탁의 폭정에 맞서 제후들이 격문을 돌리기 시작했고, 세 형제에게도 그 소식이 닿았다.' + text: '황건의 불길이 잦아든 뒤에도 동탁의 권세는 멈추지 않았다. 마침내 제후들이 폭정에 맞설 격문을 돌리기 시작했고, 광종에서 그 이름을 먼저 들었던 세 형제에게도 소식이 닿았다.' } ]; diff --git a/src/game/data/thirdCampExploration.ts b/src/game/data/thirdCampExploration.ts new file mode 100644 index 0000000..163a3ba --- /dev/null +++ b/src/game/data/thirdCampExploration.ts @@ -0,0 +1,583 @@ +import type { + ExplorationCharacterDirection, + ExplorationCharacterTextureKey +} from './explorationCharacterAssets'; +import { + resolveThirdBattlePriorityReturnDialogue, + thirdBattleReturnSourceBattleId, + type ThirdBattlePriorityReturnDialogue, + type ThirdBattleReturnCampaignState, + type ThirdBattleReturnTargetDialogueId +} from './thirdBattleReturnDialogue'; + +export const thirdCampExplorationVisitId = + 'third-guangzong-sortie-camp'; +export const thirdCampExplorationSourceBattleId = + thirdBattleReturnSourceBattleId; +export const thirdCampExplorationTargetBattleId = + 'fourth-battle-guangzong-camp'; +export const thirdCampExplorationActivityIds = [ + 'information', + 'equipment', + 'companion' +] as const; + +export type ThirdCampExplorationActivityId = + (typeof thirdCampExplorationActivityIds)[number]; + +export type ThirdCampExplorationDialogueLine = { + readonly speaker: string; + readonly text: string; + readonly portraitKey?: string; +}; + +export type ThirdCampCompanionDialogueChoice = { + readonly id: string; + readonly label: string; + readonly response: string; + readonly rewardExp: number; +}; + +export type ThirdCampCompanionDialogueDefinition = { + readonly id: ThirdBattleReturnTargetDialogueId; + readonly title: string; + readonly availableAfterBattleIds: readonly [ + typeof thirdCampExplorationSourceBattleId + ]; + readonly unitIds: readonly [string, string]; + readonly bondId: string; + readonly rewardExp: number; + readonly lines: readonly string[]; + readonly choices: readonly ThirdCampCompanionDialogueChoice[]; +}; + +export type ThirdCampExplorationActorId = + | 'zou-jing-operations' + | 'quartermaster-equipment' + | 'companion-guan-yu' + | 'companion-zhang-fei'; + +export type ThirdCampExplorationActor = { + readonly id: ThirdCampExplorationActorId; + readonly name: string; + readonly role: string; + readonly textureKey: ExplorationCharacterTextureKey; + readonly portraitKey?: string; + readonly x: number; + readonly y: number; + readonly direction: ExplorationCharacterDirection; + readonly kind: 'activity' | 'companion'; + readonly activityId: ThirdCampExplorationActivityId; + readonly dialogue: readonly ThirdCampExplorationDialogueLine[]; + readonly repeatDialogue: readonly ThirdCampExplorationDialogueLine[]; + readonly completedDialogue: readonly ThirdCampExplorationDialogueLine[]; +}; + +export type ThirdCampExplorationActivityDefinition = { + readonly id: ThirdCampExplorationActivityId; + readonly label: string; + readonly shortLabel: string; + readonly detail: string; + readonly targetActorIds: readonly ThirdCampExplorationActorId[]; + readonly completionLine: string; + readonly worldCue: string; +}; + +export type ThirdCampExplorationDefinition = { + readonly id: typeof thirdCampExplorationVisitId; + readonly title: string; + readonly location: string; + readonly sourceBattleId: typeof thirdCampExplorationSourceBattleId; + readonly targetBattleId: typeof thirdCampExplorationTargetBattleId; + readonly heading: string; + readonly subtitle: string; + readonly description: string; + readonly background: { + readonly textureKey: 'third-guangzong-sortie-camp-background'; + readonly source: 'original-guangzong-forward-camp'; + }; + readonly introLines: readonly ThirdCampExplorationDialogueLine[]; + readonly movementBounds: { + readonly x: number; + readonly y: number; + readonly width: number; + readonly height: number; + }; + readonly player: { + readonly textureKey: 'exploration-liu-bei'; + readonly x: number; + readonly y: number; + readonly direction: ExplorationCharacterDirection; + }; + readonly exit: { + readonly id: 'camp-exit'; + readonly name: string; + readonly x: number; + readonly y: number; + }; + readonly actors: readonly ThirdCampExplorationActor[]; + readonly activities: readonly ThirdCampExplorationActivityDefinition[]; + readonly resultDialogue: ThirdBattlePriorityReturnDialogue; + readonly companionDialogue: ThirdCampCompanionDialogueDefinition; +}; + +export const thirdCampCompanionDialogues = [ + { + id: 'liu-guan-after-guangzong-road', + title: '광종 길목의 침묵', + availableAfterBattleIds: [thirdCampExplorationSourceBattleId], + unitIds: ['liu-bei', 'guan-yu'], + bondId: 'liu-bei__guan-yu', + rewardExp: 16, + lines: [ + '유비: 광종으로 가는 길은 좁고, 적은 지형을 믿고 버티고 있소.', + '관우: 험한 길에서는 말보다 마음이 먼저 흔들립니다. 제가 앞에서 병사들의 숨을 고르겠습니다.', + '유비: 운장이 앞을 잡아 준다면, 나도 뒤에서 군의 뜻을 잃지 않게 하겠소.' + ], + choices: [ + { + id: 'lead-narrow-road', + label: '좁은 길의 선봉을 맡긴다', + response: '관우는 험지를 뚫는 임무를 조용히 받아들였다.', + rewardExp: 7 + }, + { + id: 'keep-discipline', + label: '군율 유지를 당부한다', + response: '관우는 승리보다 흐트러지지 않는 행군이 더 중요하다고 답했다.', + rewardExp: 5 + } + ] + }, + { + id: 'liu-zhang-after-guangzong-road', + title: '강가의 큰소리', + availableAfterBattleIds: [thirdCampExplorationSourceBattleId], + unitIds: ['liu-bei', 'zhang-fei'], + bondId: 'liu-bei__zhang-fei', + rewardExp: 16, + lines: [ + '장비: 강가 길목이 답답해서 창을 휘두를 맛이 덜했습니다.', + '유비: 답답한 싸움에서도 익덕이 버텨 주니 병사들이 물러서지 않았소.', + '장비: 다음엔 답답한 길도 제가 먼저 웃으며 열어 보이겠습니다.' + ], + choices: [ + { + id: 'laugh-through', + label: '호방함으로 사기를 올린다', + response: '장비의 큰 웃음이 군영의 무거운 공기를 풀었다.', + rewardExp: 6 + }, + { + id: 'guard-bridgehead', + label: '교두보 수비를 맡긴다', + response: '장비는 한 발도 물러서지 않는 수비 역시 선봉의 일이라며 고개를 끄덕였다.', + rewardExp: 5 + } + ] + }, + { + id: 'guan-zhang-after-guangzong-road', + title: '험지의 호흡', + availableAfterBattleIds: [thirdCampExplorationSourceBattleId], + unitIds: ['guan-yu', 'zhang-fei'], + bondId: 'guan-yu__zhang-fei', + rewardExp: 14, + lines: [ + '관우: 숲과 언덕에서는 한 걸음 늦어도 전열 전체가 늦어진다.', + '장비: 그럴 땐 형님이 길을 재고, 제가 길을 넓히면 되지 않겠습니까?', + '관우: 좋은 말이다. 칼이 재고 창이 연다면 험지도 길이 된다.' + ], + choices: [ + { + id: 'measure-and-break', + label: '관우가 재고 장비가 뚫는다', + response: '두 사람은 험지 돌파의 역할을 명확히 나누었다.', + rewardExp: 7 + }, + { + id: 'watch-each-other', + label: '서로의 후방을 살핀다', + response: '성급한 돌파보다 빈틈을 지우는 호흡이 깊어졌다.', + rewardExp: 5 + } + ] + } +] as const satisfies readonly ThirdCampCompanionDialogueDefinition[]; + +export function isThirdCampExplorationActivityId( + value: unknown +): value is ThirdCampExplorationActivityId { + return ( + typeof value === 'string' && + (thirdCampExplorationActivityIds as readonly string[]).includes( + value + ) + ); +} + +export function thirdCampExplorationActivityProgressId( + activityId: ThirdCampExplorationActivityId +) { + return `${thirdCampExplorationVisitId}:activity:${activityId}`; +} + +export function completedThirdCampExplorationActivityIds( + completedCampVisitIds: readonly string[] +) { + const completed = new Set(completedCampVisitIds); + return thirdCampExplorationActivityIds.filter((activityId) => + completed.has(thirdCampExplorationActivityProgressId(activityId)) + ); +} + +export function getThirdCampCompanionDialogue( + dialogueId: unknown +): ThirdCampCompanionDialogueDefinition | undefined { + if (typeof dialogueId !== 'string') { + return undefined; + } + return thirdCampCompanionDialogues.find( + (dialogue) => dialogue.id === dialogueId + ); +} + +export function resolveThirdCampCompanionDialogue( + campaign?: ThirdBattleReturnCampaignState | null +) { + const resultDialogue = + resolveThirdBattlePriorityReturnDialogue(campaign); + return resultDialogue + ? getThirdCampCompanionDialogue(resultDialogue.targetDialogueId) + : undefined; +} + +export function resolveThirdCampExplorationDefinition( + campaign?: ThirdBattleReturnCampaignState | null +): ThirdCampExplorationDefinition | undefined { + const resultDialogue = + resolveThirdBattlePriorityReturnDialogue(campaign); + const companionDialogue = resultDialogue + ? getThirdCampCompanionDialogue(resultDialogue.targetDialogueId) + : undefined; + if (!resultDialogue || !companionDialogue) { + return undefined; + } + + const companionActors = companionActorsFor(resultDialogue); + const equipment = equipmentCopyFor(resultDialogue); + const actors: ThirdCampExplorationActor[] = [ + { + id: 'zou-jing-operations', + name: '추정', + role: '동쪽 삼림 선봉 작전', + textureKey: 'exploration-zou-jing', + portraitKey: 'zouJing', + x: 505, + y: 405, + direction: 'east', + kind: 'activity', + activityId: 'information', + dialogue: [ + { + speaker: '추정', + portraitKey: 'zouJing', + text: '노식 중랑장의 주력은 광종을 넓게 포위한다. 우리는 동쪽 삼림을 지나 본영 바깥 선봉과 퇴로 표식을 먼저 확인한다. 적의 첫 움직임을 읽되 본대와 이어진 길은 비워 두게.' + }, + { + speaker: '유비', + portraitKey: 'liuBei', + text: '본대보다 앞서되 고립되지는 않겠습니다. 적 선봉의 움직임과 우리 병사들이 돌아올 길을 한 작전판에 표시하겠습니다.' + } + ], + repeatDialogue: [ + { + speaker: '추정', + portraitKey: 'zouJing', + text: '본영 동쪽 선봉의 이동 표식은 작전판에 남아 있다. 출전 준비에서 다른 방침을 골라도 확인한 정보는 사라지지 않는다.' + } + ], + completedDialogue: [ + { + speaker: '추정', + portraitKey: 'zouJing', + text: '적 선봉 하나의 첫 움직임을 표시했다. 이 정보를 우선하면 배치 때 의도와 표식을 먼저 볼 수 있다.' + } + ] + }, + { + id: 'quartermaster-equipment', + name: '의용군 군수관', + role: '동림 선봉 병기·방호구', + textureKey: 'exploration-zhuo-quartermaster', + portraitKey: 'zhuoQuartermaster', + x: 360, + y: 745, + direction: 'east', + kind: 'activity', + activityId: 'equipment', + dialogue: equipment.dialogue, + repeatDialogue: equipment.repeatDialogue, + completedDialogue: equipment.completedDialogue + }, + ...companionActors + ]; + + return { + id: thirdCampExplorationVisitId, + title: '광종 동림 출진 야영지', + location: '광종 동쪽 삼림 · 노식군 외곽 포위망', + sourceBattleId: thirdCampExplorationSourceBattleId, + targetBattleId: thirdCampExplorationTargetBattleId, + heading: '본영을 향한 세 가지 준비', + subtitle: + '노식군의 큰 포위망 안에서 의용군은 동쪽 삼림 선봉을 맡습니다. 필요한 준비만 확인하고 언제든 출진할 수 있습니다.', + description: + '작전판에서 적 선봉의 움직임을 읽고, 보급 수레에서 방호구를 손보거나, 먼저 돌아온 동료와 지난 전투를 되짚을 수 있습니다. 세 활동은 모두 선택 사항이며 어느 순서로 해도 됩니다. 활동을 마칠 때마다 그 준비가 자동으로 선택되고, 마지막으로 확인한 준비 하나만 다음 전투의 초반 효과가 됩니다.', + background: { + textureKey: 'third-guangzong-sortie-camp-background', + source: 'original-guangzong-forward-camp' + }, + introLines: [ + { + speaker: '추정', + portraitKey: 'zouJing', + text: '노식 중랑장의 본대가 광종 포위망을 좁히는 동안, 그대들의 의용군은 동쪽 삼림으로 나가 적 선봉과 본영 퇴로를 끊는다.' + }, + { + speaker: '유비', + portraitKey: 'liuBei', + text: '병사들이 무엇을 준비했는지 직접 살핀 뒤 출전하겠습니다. 서두르되 준비를 의무처럼 붙잡지는 않겠습니다.' + } + ], + movementBounds: { x: 42, y: 108, width: 1404, height: 814 }, + player: { + textureKey: 'exploration-liu-bei', + x: 930, + y: 850, + direction: 'north' + }, + exit: { + id: 'camp-exit', + name: '군영 출진 장부로 돌아가기', + x: 790, + y: 914 + }, + actors, + activities: [ + { + id: 'information', + label: '추정과 본영 선봉 작전 확인', + shortLabel: '본영 정보', + detail: + '노식군의 포위망과 의용군의 동쪽 삼림 진입로를 겹쳐 적 선봉의 첫 움직임을 표시합니다.', + targetActorIds: ['zou-jing-operations'], + completionLine: + '작전판에 적 선봉의 의도와 동쪽 삼림 퇴로가 함께 표시되었습니다.', + worldCue: '작전판에 적 선봉·동림 퇴로 표식' + }, + { + id: 'equipment', + label: '군수관과 선봉 방호구 정비', + shortLabel: '장비 정비', + detail: equipment.activityDetail, + targetActorIds: ['quartermaster-equipment'], + completionLine: + '보급 수레에 수선한 방호구와 응급 천이 출전 순서대로 실렸습니다.', + worldCue: '보급 수레에 방패·응급 천 적재' + }, + { + id: 'companion', + label: `${companionDialogue.title} 되짚기`, + shortLabel: '동료 공명', + detail: + '지난 전투 결과에 가장 먼저 반응한 동료와 다음 돌파의 호흡을 정합니다.', + targetActorIds: companionActors.map((actor) => actor.id), + completionLine: + '대화에서 정한 짧은 신호가 다음 본영전의 초반 협공 약속으로 남았습니다.', + worldCue: '동료와 협공 신호 공유' + } + ], + resultDialogue, + companionDialogue + }; +} + +function companionActorsFor( + resultDialogue: ThirdBattlePriorityReturnDialogue +): ThirdCampExplorationActor[] { + const dialogue = resultDialogue.lines.map(resultDialogueLine); + const completedDialogue = [ + { + speaker: '유비', + portraitKey: 'liuBei', + text: '방금 맞춘 호흡은 출전 대열에도 전해 두었소. 다른 준비를 살펴도 이 약속은 남아 있을 것이오.' + } + ]; + + if (resultDialogue.variantId === 'fort-recovery') { + return [ + companionActor({ + id: 'companion-guan-yu', + name: '관우', + role: '강가 요새 회복책', + textureKey: 'exploration-guan-yu', + portraitKey: 'guanYu', + x: 1075, + y: 510, + direction: 'west', + dialogue, + completedDialogue + }) + ]; + } + if (resultDialogue.variantId === 'tempo-recovery') { + return [ + companionActor({ + id: 'companion-zhang-fei', + name: '장비', + role: '본영 돌파 호흡', + textureKey: 'exploration-zhang-fei', + portraitKey: 'zhangFei', + x: 1115, + y: 560, + direction: 'west', + dialogue, + completedDialogue + }) + ]; + } + return [ + companionActor({ + id: 'companion-guan-yu', + name: '관우', + role: '동림 길목 판단', + textureKey: 'exploration-guan-yu', + portraitKey: 'guanYu', + x: 1035, + y: 500, + direction: 'east', + dialogue, + completedDialogue + }), + companionActor({ + id: 'companion-zhang-fei', + name: '장비', + role: '동림 돌파 선봉', + textureKey: 'exploration-zhang-fei', + portraitKey: 'zhangFei', + x: 1240, + y: 535, + direction: 'west', + dialogue, + completedDialogue + }) + ]; +} + +function companionActor( + options: Omit< + ThirdCampExplorationActor, + 'kind' | 'activityId' | 'repeatDialogue' + > +): ThirdCampExplorationActor { + return { + ...options, + kind: 'companion', + activityId: 'companion', + repeatDialogue: options.completedDialogue + }; +} + +function resultDialogueLine(line: string): ThirdCampExplorationDialogueLine { + const separator = line.indexOf(':'); + if (separator <= 0) { + return { speaker: '동료', text: line }; + } + const speaker = line.slice(0, separator).trim(); + return { + speaker, + text: line.slice(separator + 1).trim(), + ...(portraitKeyForSpeaker(speaker) + ? { portraitKey: portraitKeyForSpeaker(speaker) } + : {}) + }; +} + +function portraitKeyForSpeaker(speaker: string) { + const portraitKeys: Readonly> = { + 유비: 'liuBei', + 관우: 'guanYu', + 장비: 'zhangFei', + 추정: 'zouJing', + '의용군 군수관': 'zhuoQuartermaster' + }; + return portraitKeys[speaker]; +} + +function equipmentCopyFor( + resultDialogue: ThirdBattlePriorityReturnDialogue +) { + if (resultDialogue.fortAchieved) { + return { + activityDetail: + '강가 요새에서 회수한 온전한 방패와 마른 결속끈을 동쪽 삼림 선봉의 첫 피격에 맞춰 배분합니다.', + dialogue: [ + { + speaker: '의용군 군수관', + portraitKey: 'zhuoQuartermaster', + text: '강가 요새를 지킨 덕에 마른 결속끈과 온전한 방패를 회수했습니다. 동쪽 숲의 낮은 가지에 걸리지 않게 방패끈부터 줄이겠습니다.' + }, + { + speaker: '유비', + portraitKey: 'liuBei', + text: '첫 충돌을 버틴 뒤 곧바로 대열을 되찾을 수 있게 앞줄부터 나누어 주시오. 무거운 물자는 본대 수레에 남깁시다.' + } + ], + repeatDialogue: [ + { + speaker: '의용군 군수관', + portraitKey: 'zhuoQuartermaster', + text: '요새에서 회수한 방패와 응급 천은 선봉 순서대로 실었습니다. 다른 준비를 골라도 정비한 장비는 그대로 남습니다.' + } + ], + completedDialogue: [ + { + speaker: '의용군 군수관', + portraitKey: 'zhuoQuartermaster', + text: '첫 피격을 한 번 흘릴 방호구를 앞줄에 배분했습니다.' + } + ] + } as const; + } + return { + activityDetail: + '강가 요새를 남긴 퇴각에서 젖고 상한 방호구를 골라 수선하고, 동쪽 삼림에서 첫 충돌을 버틸 최소 장비를 마련합니다.', + dialogue: [ + { + speaker: '의용군 군수관', + portraitKey: 'zhuoQuartermaster', + text: '강가 요새를 두고 물러오며 방패끈이 젖고 갑옷 몇 벌이 상했습니다. 멀쩡한 조각을 골라 앞줄 방호구부터 다시 묶겠습니다.' + }, + { + speaker: '유비', + portraitKey: 'liuBei', + text: '새 장비처럼 보이게 하는 것보다 첫 충돌에서 끊어지지 않는 것이 중요하오. 수선한 장비와 응급 천을 같은 수레에 실어 주시오.' + } + ], + repeatDialogue: [ + { + speaker: '의용군 군수관', + portraitKey: 'zhuoQuartermaster', + text: '젖은 끈은 모두 갈고 상한 방호구는 겹쳐 묶었습니다. 다른 준비를 골라도 수선한 장비는 그대로 남습니다.' + } + ], + completedDialogue: [ + { + speaker: '의용군 군수관', + portraitKey: 'zhuoQuartermaster', + text: '수선한 방호구가 첫 충돌을 한 번 버틸 만큼은 갖춰졌습니다.' + } + ] + } as const; +} diff --git a/src/game/data/thirdCampPreparation.ts b/src/game/data/thirdCampPreparation.ts index 086c7cd..d333b4a 100644 --- a/src/game/data/thirdCampPreparation.ts +++ b/src/game/data/thirdCampPreparation.ts @@ -2,6 +2,11 @@ import { resolveThirdBattlePriorityReturnDialogue, thirdBattleReturnSourceBattleId } from './thirdBattleReturnDialogue'; +import { + completedThirdCampExplorationActivityIds, + thirdCampExplorationVisitId, + type ThirdCampExplorationActivityId +} from './thirdCampExploration'; export const thirdCampPreparationSourceBattleId = thirdBattleReturnSourceBattleId; @@ -135,6 +140,24 @@ export const thirdCampPreparationPriorities: readonly ] as const; export type ThirdCampPreparationEvidence = + | { + kind: 'exploration-activity'; + battleId: typeof thirdCampPreparationSourceBattleId; + visitId: typeof thirdCampExplorationVisitId; + activityId: Exclude< + ThirdCampExplorationActivityId, + 'companion' + >; + } + | { + kind: 'exploration-activity'; + battleId: typeof thirdCampPreparationSourceBattleId; + visitId: typeof thirdCampExplorationVisitId; + activityId: 'companion'; + dialogueId: string; + bondId: string; + unitIds: [string, string]; + } | { kind: 'victory-reward-category'; battleId: typeof thirdCampPreparationSourceBattleId; @@ -208,6 +231,7 @@ export type ThirdCampPreparationCampaignState = { >; firstBattleReport?: ThirdCampPreparationBattleRecord | null; completedCampDialogues?: readonly unknown[]; + completedCampVisits?: readonly unknown[]; thirdCampPreparationSelection?: { sourceBattleId?: unknown; targetBattleId?: unknown; @@ -288,15 +312,19 @@ export function resolveThirdCampPreparationAvailability( })); } - const informationEvidence = acknowledgedRewardEvidence( - campaign, - 'unlocks' - ); - const equipmentEvidence = acknowledgedRewardEvidence( - campaign, - 'equipment' - ); - const companionEvidence = completedCompanionEvidence(campaign); + const informationEvidence = + completedExplorationEvidence(campaign, 'information') ?? + selectedLegacyRewardEvidence(campaign, 'information', 'unlocks'); + const equipmentEvidence = + completedExplorationEvidence(campaign, 'equipment') ?? + selectedLegacyRewardEvidence( + campaign, + 'equipment', + 'equipment' + ); + const companionEvidence = + completedExplorationEvidence(campaign, 'companion') ?? + completedCompanionEvidence(campaign); const evidenceByPriority: Partial< Record > = { @@ -515,6 +543,70 @@ function acknowledgedRewardEvidence( : undefined; } +function selectedLegacyRewardEvidence( + campaign: ThirdCampPreparationCampaignState | null | undefined, + priorityId: Extract< + ThirdCampPreparationPriorityId, + 'information' | 'equipment' + >, + category: 'unlocks' | 'equipment' +) { + const selection = campaign?.thirdCampPreparationSelection; + if ( + selection?.sourceBattleId !== + thirdCampPreparationSourceBattleId || + selection.targetBattleId !== + thirdCampPreparationTargetBattleId || + selection.priorityId !== priorityId + ) { + return undefined; + } + return acknowledgedRewardEvidence(campaign, category); +} + +function completedExplorationEvidence( + campaign: ThirdCampPreparationCampaignState | null | undefined, + activityId: ThirdCampExplorationActivityId +): Extract< + ThirdCampPreparationEvidence, + { kind: 'exploration-activity' } +> | undefined { + const completedActivityIds = + completedThirdCampExplorationActivityIds( + arrayValue(campaign?.completedCampVisits).filter( + (visitId): visitId is string => typeof visitId === 'string' + ) + ); + if (!completedActivityIds.includes(activityId)) { + return undefined; + } + if (activityId !== 'companion') { + return { + kind: 'exploration-activity', + battleId: thirdCampPreparationSourceBattleId, + visitId: thirdCampExplorationVisitId, + activityId + }; + } + + const dialogue = + resolveThirdBattlePriorityReturnDialogue(campaign); + const bond = dialogue + ? companionBondByDialogueId[dialogue.targetDialogueId] + : undefined; + return dialogue && bond + ? { + kind: 'exploration-activity', + battleId: thirdCampPreparationSourceBattleId, + visitId: thirdCampExplorationVisitId, + activityId: 'companion', + dialogueId: dialogue.targetDialogueId, + bondId: bond.bondId, + unitIds: [...bond.unitIds] + } + : undefined; +} + function completedCompanionEvidence( campaign?: ThirdCampPreparationCampaignState | null ): Extract< @@ -548,21 +640,33 @@ function resolveEffect( ): ResolvedThirdCampPreparationEffect | undefined { if ( effect.kind === 'marked-vanguard-intel' && - evidence.kind === 'victory-reward-category' && - evidence.category === 'unlocks' + ( + (evidence.kind === 'exploration-activity' && + evidence.activityId === 'information') || + (evidence.kind === 'victory-reward-category' && + evidence.category === 'unlocks') + ) ) { return { ...effect }; } if ( effect.kind === 'prepared-equipment-guard' && - evidence.kind === 'victory-reward-category' && - evidence.category === 'equipment' + ( + (evidence.kind === 'exploration-activity' && + evidence.activityId === 'equipment') || + (evidence.kind === 'victory-reward-category' && + evidence.category === 'equipment') + ) ) { return { ...effect }; } if ( effect.kind === 'return-bond-opening' && - evidence.kind === 'priority-return-dialogue' + ( + evidence.kind === 'priority-return-dialogue' || + (evidence.kind === 'exploration-activity' && + evidence.activityId === 'companion') + ) ) { return { ...effect, @@ -604,7 +708,11 @@ function clonePriority( function cloneEvidence( evidence: ThirdCampPreparationEvidence ): ThirdCampPreparationEvidence { - if (evidence.kind === 'priority-return-dialogue') { + if ( + evidence.kind === 'priority-return-dialogue' || + (evidence.kind === 'exploration-activity' && + evidence.activityId === 'companion') + ) { return { ...evidence, unitIds: [...evidence.unitIds] diff --git a/src/game/scenes/CampScene.ts b/src/game/scenes/CampScene.ts index abb7de9..710391e 100644 --- a/src/game/scenes/CampScene.ts +++ b/src/game/scenes/CampScene.ts @@ -49,6 +49,11 @@ import { thirdBattleReturnCampStep, thirdBattleReturnSourceBattleId } from '../data/thirdBattleReturnDialogue'; +import { + resolveThirdCampExplorationDefinition, + thirdCampCompanionDialogues, + thirdCampExplorationVisitId +} from '../data/thirdCampExploration'; import { thirdCampPreparationSourceBattleId, thirdCampPreparationTargetBattleId, @@ -256,9 +261,11 @@ import { } from '../state/cityStayActions'; import { secondBattleReliefProgress } from '../state/secondBattleReliefActions'; import { + clearThirdCampPreparationPriority, setThirdCampPreparationPriority, thirdCampPreparationProgress } from '../state/thirdCampPreparationActions'; +import { thirdCampExplorationProgress } from '../state/thirdCampExplorationActions'; import { clearCampaignBattleSavesForSlot } from '../state/battleSaveKeys'; import { releaseTextureSource } from '../render/loaderLifecycle'; import { isVisualMotionReduced } from '../settings/visualMotion'; @@ -331,7 +338,8 @@ type CampVisitChoice = { const directExplorationVisitIds = new Set([ firstPursuitScoutVisitId, - secondBattleReliefVisitId + secondBattleReliefVisitId, + thirdCampExplorationVisitId ]); type CampTabButtonView = { @@ -1327,7 +1335,7 @@ const sortieRulesByBattleId: Partial ({ + ...dialogue, + availableAfterBattleIds: [...dialogue.availableAfterBattleIds], + unitIds: [...dialogue.unitIds] as [string, string], + lines: [...dialogue.lines], + choices: dialogue.choices.map((choice) => ({ ...choice })) + })), { id: 'liu-guan-after-zhang-jue', title: '황건의 깃발이 꺾인 밤', @@ -8508,6 +8442,20 @@ const campVisits: CampVisitDefinition[] = [ }) ) }, + { + id: thirdCampExplorationVisitId, + title: '광종 동림 출진 야영지', + location: '광종 동쪽 삼림 · 노식군 외곽 포위망', + availableAfterBattleIds: [thirdCampPreparationSourceBattleId], + availableDuringSteps: [thirdBattleReturnCampStep], + description: + '광종 본영으로 나가기 전, 작전판·보급 수레·먼저 돌아온 동료를 직접 찾아 준비합니다.', + lines: [ + '추정: 노식 중랑장의 본대가 포위망을 좁히는 동안 의용군은 동쪽 삼림 선봉을 맡는다.', + '유비: 필요한 준비를 직접 살피되, 준비를 의무처럼 붙잡지는 않겠습니다.' + ], + choices: [] + }, { id: 'jingzhou-scholar-rumors', title: '형주 선비들의 모임', @@ -11489,6 +11437,7 @@ export class CampScene extends Phaser.Scene { private selectedVisitId = campVisits[0].id; private firstPursuitExplorationButton?: Phaser.GameObjects.Rectangle; private secondBattleReliefExplorationButton?: Phaser.GameObjects.Rectangle; + private thirdCampExplorationButton?: Phaser.GameObjects.Rectangle; private equipmentInventoryPage = 0; private equipmentPanelBackground?: Phaser.GameObjects.Rectangle; private equipmentInventoryPreviousButton?: Phaser.GameObjects.Rectangle; @@ -11550,6 +11499,7 @@ export class CampScene extends Phaser.Scene { private thirdCampPreparationBrowserOpen = false; private thirdCampPreparationToggleButton?: Phaser.GameObjects.Rectangle; private thirdCampPreparationCloseButton?: Phaser.GameObjects.Rectangle; + private thirdCampPreparationClearButton?: Phaser.GameObjects.Rectangle; private thirdCampPreparationCardViews: ThirdCampPreparationCardView[] = []; private visitedTabs = new Set(); private selectedSortieUnitIds: string[] = []; @@ -11636,6 +11586,7 @@ export class CampScene extends Phaser.Scene { this.campDialogueBodyText = undefined; this.firstPursuitExplorationButton = undefined; this.secondBattleReliefExplorationButton = undefined; + this.thirdCampExplorationButton = undefined; this.dialogueObjects = []; this.sortieObjects = []; this.sortieComparisonPanelView = undefined; @@ -11763,10 +11714,16 @@ export class CampScene extends Phaser.Scene { ? 'dialogue' : 'market'; } + const thirdExplorationProgress = + this.campaign.step === thirdBattleReturnCampStep + ? thirdCampExplorationProgress(this.campaign) + : undefined; const pendingDirectExplorationVisit = this.availableCampVisits().find( (visit) => directExplorationVisitIds.has(visit.id) && - !this.completedCampVisits().includes(visit.id) + (visit.id === thirdCampExplorationVisitId + ? !thirdExplorationProgress?.entered + : !this.completedCampVisits().includes(visit.id)) ); if (!cityStay && pendingDirectExplorationVisit) { this.selectedVisitId = pendingDirectExplorationVisit.id; @@ -13180,7 +13137,34 @@ export class CampScene extends Phaser.Scene { private availableCampVisits() { const battleId = this.currentCampBattleId(); - return this.filterCampEventsByStep(campVisits.filter((visit) => visit.availableAfterBattleIds.includes(battleId))); + return this.filterCampEventsByStep( + campVisits + .filter((visit) => visit.availableAfterBattleIds.includes(battleId)) + .map((visit) => this.campVisitWithThirdCampExploration(visit)) + ); + } + + private campVisitWithThirdCampExploration( + visit: CampVisitDefinition + ): CampVisitDefinition { + if (visit.id !== thirdCampExplorationVisitId) { + return visit; + } + const definition = resolveThirdCampExplorationDefinition( + this.campaign + ); + if (!definition) { + return visit; + } + return { + ...visit, + title: definition.title, + location: definition.location, + description: definition.description, + lines: definition.introLines.map( + (line) => `${line.speaker}: ${line.text}` + ) + }; } private completedAvailableVisits() { @@ -14667,7 +14651,7 @@ export class CampScene extends Phaser.Scene { const commandTitle = thirdCampPreparation ? thirdCampPreparation.ready ? `출진 우선 · ${thirdCampPreparation.selectedLabel}` - : '출진 우선 · 하나를 선택' + : '출진 우선 · 보너스 없음' : firstBattleFollowup ? `지난 전투 인계 · ${firstBattleFollowup.mentorName}` : '지휘관 판단'; @@ -14677,7 +14661,7 @@ export class CampScene extends Phaser.Scene { ); const commandSummary = thirdCampPreparation ? selectedPreparation?.priority.summary ?? - '실제로 확인한 정보·장비·동료 활동 가운데 이번 출진에 먼저 반영할 하나를 정하십시오.' + '야영지에서 완료한 활동은 보너스 하나로 선택할 수 있습니다. 선택하지 않고 출진해도 됩니다.' : firstBattleFollowup ? firstBattleFollowup.achieved ? `${firstBattleFollowup.originalOrderLabel} 완수 → ${firstBattleFollowup.recommendedNextOrderLabel} · ${firstBattleFollowup.focusCriterionLabel}` @@ -14700,7 +14684,7 @@ export class CampScene extends Phaser.Scene { this.renderThirdCampPreparationToggle( x + width - 86, commandY + 51, - thirdCampPreparation.ready ? '준비 변경' : '준비 선택', + thirdCampPreparation.ready ? '준비 변경' : '보너스 선택', depth + 2 ); } else if (firstBattleFollowup) { @@ -14787,13 +14771,13 @@ export class CampScene extends Phaser.Scene { background.setStrokeStyle(1, palette.gold, 0.72); this.trackSortie( - this.add.text(x + 18, y + 14, '이번 출진의 우선 준비', this.textStyle(19, '#f2e3bf', true)) + this.add.text(x + 18, y + 14, '이번 출진의 선택 보너스', this.textStyle(19, '#f2e3bf', true)) ).setDepth(depth + 1); this.trackSortie( this.add.text( x + 18, y + 41, - '실제로 확인한 활동 하나를 광종 본영전 첫 3턴에 반영합니다.', + '야영지에서 완료한 활동 중 하나만 첫 3턴에 반영합니다. 미선택 출진도 가능합니다.', this.textStyle(10, '#9fb0bf') ) ).setDepth(depth + 1); @@ -14960,37 +14944,75 @@ export class CampScene extends Phaser.Scene { this.add.text( x + 18, y + height - 25, - '권장 선택 · 출진 전에는 언제든 다른 완료 활동으로 바꿀 수 있습니다.', - this.textStyle(10, progress.ready ? '#a8ffd0' : '#ffdf7b', true) + progress.ready + ? '선택 사항 · 해제하거나 다른 완료 활동으로 바꿀 수 있습니다.' + : '선택 사항 · 보너스 없이 그대로 출진할 수 있습니다.', + { + ...this.textStyle( + 10, + progress.ready ? '#a8ffd0' : '#9fb0bf', + true + ), + wordWrap: { + width: progress.ready ? width - 158 : width - 36, + useAdvancedWrap: true + } + } ) ).setDepth(depth + 1); + + if (progress.selectedPriorityId) { + const clearX = x + width - 70; + const clearY = y + height - 24; + const clear = this.trackSortie( + this.add.rectangle(clearX, clearY, 112, 26, 0x1a2630, 0.96) + ); + clear.setDepth(depth + 2); + clear.setStrokeStyle(1, palette.blue, 0.72); + clear.setInteractive({ useHandCursor: true }); + clear.on('pointerover', () => clear.setFillStyle(0x283947, 1)); + clear.on('pointerout', () => clear.setFillStyle(0x1a2630, 0.96)); + clear.on('pointerdown', () => this.clearThirdCampPreparationSelection()); + this.thirdCampPreparationClearButton = clear; + const clearLabel = this.trackSortie( + this.add.text( + clearX, + clearY, + '선택 해제', + this.textStyle(10, '#d4dce6', true) + ) + ); + clearLabel.setOrigin(0.5); + clearLabel.setDepth(depth + 3); + clearLabel.setInteractive({ useHandCursor: true }); + clearLabel.on('pointerover', () => clear.setFillStyle(0x283947, 1)); + clearLabel.on('pointerout', () => clear.setFillStyle(0x1a2630, 0.96)); + clearLabel.on( + 'pointerdown', + () => this.clearThirdCampPreparationSelection() + ); + } } private thirdCampPreparationUnavailableLabel( reason?: ThirdCampPreparationUnavailableReason ) { if (reason === 'report-review-required') { - return '승전 보고에서 광종 본영 진입 정보를 먼저 확인해야 합니다.'; + return '야영지에서 추정과 작전판을 먼저 확인하면 선택할 수 있습니다.'; } if (reason === 'equipment-change-required') { - return '3차 승리로 받은 장비를 장비 탭에서 먼저 확인해야 합니다.'; + return '야영지 보급 수레에서 선봉 방호구를 정비하면 선택할 수 있습니다.'; } if (reason === 'priority-dialogue-required') { - return '전투 결과에 맞춰 표시된 우선 귀환 대화를 먼저 마쳐야 합니다.'; + return '야영지에서 먼저 돌아온 동료와 결과 대화를 나누면 선택할 수 있습니다.'; } return '광종 구원로 승리 기록이 있어야 선택할 수 있습니다.'; } private thirdCampPreparationLockedActionLabel( - priorityId: ThirdCampPreparationPriorityId + _priorityId: ThirdCampPreparationPriorityId ) { - if (priorityId === 'equipment') { - return '장비 보기'; - } - if (priorityId === 'companion') { - return '대화하기'; - } - return '보고 확인'; + return '야영지로'; } private selectThirdCampPreparationPriority( @@ -15014,41 +15036,35 @@ export class CampScene extends Phaser.Scene { this.showSortiePrep(); } - private openThirdCampPreparationActivity( - priorityId: ThirdCampPreparationPriorityId - ) { - if (priorityId === 'equipment') { - this.thirdCampPreparationBrowserOpen = false; - this.hideSortiePrep(); - this.activeTab = 'equipment'; - this.render(); - this.showCampNotice('3차 승전 장비를 확인했습니다. 출진 준비에서 장비 정비를 선택할 수 있습니다.'); + private clearThirdCampPreparationSelection() { + const result = clearThirdCampPreparationPriority(); + if (!result.ok) { + this.showCampNotice( + '현재 진행에서는 선택 보너스를 해제할 수 없습니다.' + ); return; } - - if (priorityId === 'companion') { - const priorityDialogue = this.thirdBattlePriorityReturnDialogue(); - if (!priorityDialogue) { - this.showCampNotice('현재 승리 기록에서 우선 귀환 대화를 확인할 수 없습니다.'); - return; - } - this.thirdCampPreparationBrowserOpen = false; - this.hideSortiePrep(); - this.activeTab = 'dialogue'; - this.selectedDialogueId = priorityDialogue.targetDialogueId; - this.render(); - this.showCampNotice('표시된 우선 귀환 대화를 마치면 동료 공명을 선택할 수 있습니다.'); - return; - } - - this.acknowledgePendingVictoryRewardCategories(['unlocks']); - this.campaign = getCampaignState(); + this.campaign = result.campaign; this.thirdCampPreparationBrowserOpen = true; soundDirector.playSelect(); - this.showCampNotice('승전 보고의 광종 본영 진입 정보를 확인했습니다.'); + this.showCampNotice( + result.changed + ? '선택 보너스를 해제했습니다. 보너스 없이 출진할 수 있습니다.' + : '현재 선택된 출진 보너스가 없습니다.' + ); this.showSortiePrep(); } + private openThirdCampPreparationActivity( + _priorityId: ThirdCampPreparationPriorityId + ) { + soundDirector.playSelect(); + this.thirdCampPreparationBrowserOpen = false; + this.startCampNavigation('CampVisitExplorationScene', { + visitId: thirdCampExplorationVisitId + }); + } + private openFirstBattleFollowupOrderBrowser() { if (!this.firstBattleCampFollowup() || !this.nextSortieScenario()) { return; @@ -20863,10 +20879,10 @@ export class CampScene extends Phaser.Scene { ...(thirdCampPreparation ? [{ label: '출진 우선 준비', - complete: thirdCampPreparation.ready, + complete: true, detail: thirdCampPreparation.ready ? `${thirdCampPreparation.selectedLabel} · 첫 3턴 반영` - : '정보·장비·동료 중 완료한 활동 하나 선택', + : '미선택 · 보너스 없이 출진 가능', priority: 'recommended' as const }] : []), @@ -21242,6 +21258,7 @@ export class CampScene extends Phaser.Scene { this.firstBattleFollowupSummaryText = undefined; this.thirdCampPreparationToggleButton = undefined; this.thirdCampPreparationCloseButton = undefined; + this.thirdCampPreparationClearButton = undefined; this.thirdCampPreparationCardViews = []; this.sortiePortraitRosterLayout = undefined; this.sortieRosterToggleBounds = []; @@ -24087,10 +24104,19 @@ export class CampScene extends Phaser.Scene { bg.setOrigin(0); bg.setStrokeStyle(1, palette.gold, 0.58); const locationLabel = this.currentCityStay()?.city.name ?? this.campSkinSelection?.skin.locationLabel ?? '현지'; - this.track(this.add.text(x + 24, y + 22, `${locationLabel} 방문`, this.textStyle(24, '#f2e3bf', true))); - this.track(this.add.text(x + 24, y + 56, '획득한 정보·보급·공명은 출진 준비와 다음 전투로 이어집니다. 방문은 한 번만 완료됩니다.', this.textStyle(14, '#d4dce6'))); - const visits = this.availableCampVisits(); + const hasThirdCampExploration = visits.some( + (visit) => visit.id === thirdCampExplorationVisitId + ); + this.track(this.add.text(x + 24, y + 22, `${locationLabel} 방문`, this.textStyle(24, '#f2e3bf', true))); + this.track(this.add.text( + x + 24, + y + 56, + hasThirdCampExploration + ? '야영지는 언제든 다시 들어갈 수 있습니다. 모든 활동은 선택 사항이며 보너스 없이 바로 출진해도 됩니다.' + : '획득한 정보·보급·공명은 출진 준비와 다음 전투로 이어집니다. 방문은 한 번만 완료됩니다.', + this.textStyle(14, '#d4dce6') + )); if (!visits.some((visit) => visit.id === this.selectedVisitId)) { this.selectedVisitId = visits[0]?.id ?? campVisits[0].id; } @@ -24153,6 +24179,11 @@ export class CampScene extends Phaser.Scene { }) ); + if (visit.id === thirdCampExplorationVisitId) { + this.renderThirdCampExplorationVisit(x, y, width, height); + return; + } + if (completed) { const chosen = this.recordedVisitChoice(visit); if (chosen) { @@ -24255,6 +24286,105 @@ export class CampScene extends Phaser.Scene { }); } + private renderThirdCampExplorationVisit( + x: number, + y: number, + width: number, + height: number + ) { + const exploration = this.campaign + ? thirdCampExplorationProgress(this.campaign) + : undefined; + const preparation = this.campaign + ? thirdCampPreparationProgress(this.campaign) + : undefined; + const completedCount = exploration?.completedActivityCount ?? 0; + const activityCount = exploration?.activities.length ?? 3; + const guide = this.track( + this.add.rectangle( + x + 18, + y + height - 104, + width - 36, + 86, + 0x151f2a, + 0.96 + ) + ); + guide.setOrigin(0); + guide.setStrokeStyle( + 1, + completedCount > 0 ? palette.green : palette.blue, + 0.66 + ); + this.track( + this.add.text( + x + 32, + y + height - 92, + `준비 활동 ${completedCount}/${activityCount} · ${ + preparation?.selectedLabel + ? `선택 보너스: ${preparation.selectedLabel}` + : '보너스 미선택' + }`, + this.textStyle( + 12, + preparation?.selectedLabel ? '#a8ffd0' : '#d4dce6', + true + ) + ) + ); + this.track( + this.add.text( + x + 32, + y + height - 70, + '세 활동은 모두 선택 사항 · 군영으로 돌아와 보너스 없이 출진 가능', + this.textStyle(10, '#9fb0bf') + ) + ); + + const buttonY = y + height - 34; + const button = this.track( + this.add.rectangle( + x + width / 2, + buttonY, + width - 64, + 34, + 0x4a371d, + 0.98 + ) + ); + button.setStrokeStyle(2, palette.gold, 0.94); + button.setInteractive({ useHandCursor: true }); + const openExploration = () => { + soundDirector.playSelect(); + this.startCampNavigation('CampVisitExplorationScene', { + visitId: thirdCampExplorationVisitId + }); + }; + button.on('pointerover', () => button.setFillStyle(0x654c25, 1)); + button.on('pointerout', () => button.setFillStyle(0x4a371d, 0.98)); + button.on('pointerdown', openExploration); + this.thirdCampExplorationButton = button; + + const ctaLabel = !exploration?.entered + ? '야영지 탐색 시작' + : completedCount < activityCount + ? '야영지 탐색 계속' + : '야영지 다시 둘러보기'; + const label = this.track( + this.add.text( + x + width / 2, + buttonY, + ctaLabel, + this.textStyle(14, '#fff2b8', true) + ) + ); + label.setOrigin(0.5); + label.setInteractive({ useHandCursor: true }); + label.on('pointerover', () => button.setFillStyle(0x654c25, 1)); + label.on('pointerout', () => button.setFillStyle(0x4a371d, 0.98)); + label.on('pointerdown', openExploration); + } + private renderVisitPreparationSummary(x: number, y: number, width: number) { const visits = this.availableCampVisits(); const completed = this.completedAvailableVisits(); @@ -24262,6 +24392,40 @@ export class CampScene extends Phaser.Scene { bg.setOrigin(0); bg.setStrokeStyle(1, palette.blue, 0.42); this.track(this.add.text(x + 14, y + 12, '현지 준비 · 다음 전투 반영', this.textStyle(17, '#f2e3bf', true))); + if ( + visits.some((visit) => visit.id === thirdCampExplorationVisitId) && + this.campaign + ) { + const exploration = thirdCampExplorationProgress(this.campaign); + const preparation = thirdCampPreparationProgress(this.campaign); + this.track( + this.add.text( + x + 14, + y + 40, + `야영지 활동 ${exploration.completedActivityCount}/${exploration.activities.length}`, + this.textStyle( + 13, + exploration.completedActivityCount > 0 ? '#a8ffd0' : '#d4dce6', + true + ) + ) + ); + this.track( + this.add.text( + x + 14, + y + 66, + preparation.selectedLabel + ? `선택 보너스 · ${preparation.selectedLabel}` + : '보너스 미선택 · 그대로 출진 가능', + this.textStyle( + 13, + preparation.selectedLabel ? '#a8ffd0' : '#9fb0bf', + true + ) + ) + ); + return; + } this.track(this.add.text(x + 14, y + 40, `방문 ${completed.length}/${visits.length} 완료`, this.textStyle(13, completed.length >= visits.length && visits.length > 0 ? '#a8ffd0' : '#d4dce6', true))); const isWolongSearch = this.currentSortieFlow().nextBattleId === campBattleIds.seventeenth; const informationLabel = isWolongSearch @@ -26063,6 +26227,7 @@ export class CampScene extends Phaser.Scene { this.campDialogueBodyText = undefined; this.firstPursuitExplorationButton = undefined; this.secondBattleReliefExplorationButton = undefined; + this.thirdCampExplorationButton = undefined; this.campRosterLayout = undefined; this.cityPanelBackground = undefined; this.cityExploreButton = undefined; @@ -26234,6 +26399,12 @@ export class CampScene extends Phaser.Scene { : undefined; const secondReliefChoiceId = this.campaign?.campVisitChoiceIds[secondBattleReliefVisitId] ?? null; + const thirdCampExplorationVisit = this.availableCampVisits().find( + (visit) => visit.id === thirdCampExplorationVisitId + ); + const thirdCampExploration = this.campaign + ? thirdCampExplorationProgress(this.campaign) + : undefined; const thirdCampPreparation = this.campaign && this.isThirdCampPreparationSlice() ? thirdCampPreparationProgress(this.campaign) : undefined; @@ -26484,6 +26655,12 @@ export class CampScene extends Phaser.Scene { closeButtonBounds: this.sortieInteractiveObjectBoundsDebug( this.thirdCampPreparationCloseButton ), + clearButtonBounds: this.sortieInteractiveObjectBoundsDebug( + this.thirdCampPreparationClearButton + ), + clearAvailable: Boolean( + thirdCampPreparation.selectedPriorityId + ), priorities: thirdCampPreparation.availability.map((entry) => { const view = this.thirdCampPreparationCardViews.find( (candidate) => candidate.priorityId === entry.priority.id @@ -26523,6 +26700,8 @@ export class CampScene extends Phaser.Scene { browserOpen: false, toggleButtonBounds: null, closeButtonBounds: null, + clearButtonBounds: null, + clearAvailable: false, priorities: [] }, firstPursuitScoutMemory: { @@ -26586,6 +26765,42 @@ export class CampScene extends Phaser.Scene { rewardText: this.visitRewardText(choice) })) ?? [] }, + thirdCampExploration: { + visitId: thirdCampExplorationVisitId, + available: Boolean(thirdCampExplorationVisit), + selected: + this.selectedVisitId === thirdCampExplorationVisitId, + entered: thirdCampExploration?.entered ?? false, + completedActivityIds: + thirdCampExploration?.completedActivityIds ?? [], + completedActivityCount: + thirdCampExploration?.completedActivityCount ?? 0, + selectedPriorityId: + thirdCampExploration?.selectedPriorityId ?? null, + ready: thirdCampExploration?.ready ?? false, + mode: !thirdCampExplorationVisit + ? 'unavailable' + : !thirdCampExploration?.entered + ? 'explore' + : (thirdCampExploration.completedActivityCount ?? 0) < + (thirdCampExploration.activities.length || 3) + ? 'continue' + : 'revisit', + explorationButtonBounds: + this.sortieInteractiveObjectBoundsDebug( + this.thirdCampExplorationButton + ), + explorationInteractive: Boolean( + this.thirdCampExplorationButton?.input?.enabled + ), + activities: + thirdCampExploration?.activities.map((activity) => ({ + id: activity.id, + label: activity.label, + completed: activity.completed, + selected: activity.selected + })) ?? [] + }, selectedDialogue: selectedCampDialogue ? { id: selectedCampDialogue.id, diff --git a/src/game/scenes/CampVisitExplorationScene.ts b/src/game/scenes/CampVisitExplorationScene.ts index 76ec0e1..cb5d199 100644 --- a/src/game/scenes/CampVisitExplorationScene.ts +++ b/src/game/scenes/CampVisitExplorationScene.ts @@ -1,6 +1,7 @@ import Phaser from 'phaser'; import campBackgroundUrl from '../../assets/images/exploration/prologue-militia-camp.webp'; import secondReliefBackgroundUrl from '../../assets/images/exploration/second-pursuit-village-ferry.webp'; +import thirdCampBackgroundUrl from '../../assets/images/exploration/third-guangzong-sortie-camp.webp'; import { soundDirector } from '../audio/SoundDirector'; import { ensureExplorationCharacterAnimations, @@ -30,12 +31,23 @@ import { type SecondBattleReliefObjectiveId } from '../data/secondBattleReliefExploration'; import { resolveSecondBattleReliefContext } from '../data/secondBattleReliefMemory'; +import { + resolveThirdCampCompanionDialogue, + resolveThirdCampExplorationDefinition, + thirdCampExplorationVisitId, + type ThirdCampCompanionDialogueChoice, + type ThirdCampExplorationActivityId +} from '../data/thirdCampExploration'; +import { + getThirdCampPreparationPriority +} from '../data/thirdCampPreparation'; import { portraitAssetEntryForStoryContext, type PortraitAssetEntry } from '../data/portraitAssets'; import { ExplorationInputController } from '../input/ExplorationInputController'; import { releaseTextureSource } from '../render/loaderLifecycle'; +import { isVisualMotionReduced } from '../settings/visualMotion'; import { getCampaignState } from '../state/campaignState'; import { completeFirstPursuitScoutVisit } from '../state/firstPursuitScoutActions'; import { @@ -43,6 +55,12 @@ import { recordSecondBattleReliefObjective, secondBattleReliefProgress } from '../state/secondBattleReliefActions'; +import { + completeThirdCampCompanionActivity, + enterThirdCampExploration, + recordThirdCampExplorationActivity, + thirdCampExplorationProgress +} from '../state/thirdCampExplorationActions'; import { startGameScene } from './lazyScenes'; const sceneWidth = 1920; @@ -62,6 +80,7 @@ const directPointerSnapRadius = 96; const transitionFadeDurationMs = 320; const campBackgroundKey = 'first-pursuit-camp-background'; const secondReliefBackgroundKey = 'second-pursuit-village-ferry-background'; +const thirdCampBackgroundKey = 'third-guangzong-sortie-camp-background'; const playerTextureKey = explorationCharacterTextureKeyByUnitTextureKey['unit-liu-bei']; @@ -69,14 +88,7 @@ type CampVisitExplorationSceneData = { visitId?: string; }; -type ExplorationActorId = - | 'jian-yong' - | 'guan-yu' - | 'zhang-fei' - | 'guan-yu-village' - | 'north-ferry-boatman' - | 'zhang-fei-ferry' - | 'jian-yong-records'; +type ExplorationActorId = string; type ExplorationActorDefinition = { id: ExplorationActorId; @@ -87,10 +99,12 @@ type ExplorationActorDefinition = { x: number; y: number; direction: ExplorationCharacterDirection; - kind: 'objective' | 'companion'; + kind: 'objective' | 'activity' | 'companion'; objectiveId?: SecondBattleReliefObjectiveId; + activityId?: ThirdCampExplorationActivityId; dialogue: readonly DialogueLine[]; repeatDialogue?: readonly DialogueLine[]; + completedDialogue?: readonly DialogueLine[]; }; type ExplorationActorView = { @@ -132,7 +146,7 @@ type DialogueState = { }; type ChoiceView = { - choice: VisitChoice; + choice: ChoiceOption; button: Phaser.GameObjects.Rectangle; }; @@ -140,6 +154,9 @@ type VisitChoice = | FirstPursuitScoutVisitChoice | SecondBattleReliefChoice; +type ChoiceOption = VisitChoice | ThirdCampCompanionDialogueChoice; +type ChoicePanelMode = 'visit' | 'third-companion'; + const firstPursuitActorDefinitions: readonly ExplorationActorDefinition[] = [ { id: 'jian-yong', @@ -247,6 +264,10 @@ const secondReliefPortraitContext = { id: 'second-pursuit-aftermath-relief-exploration', background: 'story-camp' } as const; +const thirdCampPortraitContext = { + id: 'third-guangzong-sortie-camp-exploration', + background: 'story-camp' +} as const; const firstPursuitCampExit = { id: 'camp-exit' as const, name: '군영 장부로 돌아가기', @@ -257,8 +278,10 @@ function explorationPortraitEntries( portraitContext: | typeof firstPursuitPortraitContext | typeof secondReliefPortraitContext + | typeof thirdCampPortraitContext, + activePortraitKeys: readonly string[] = portraitKeys ) { - return [...new Set(portraitKeys)] + return [...new Set(activePortraitKeys)] .map((portraitKey) => portraitAssetEntryForStoryContext( portraitKey, @@ -284,6 +307,8 @@ export class CampVisitExplorationScene extends Phaser.Scene { private promptText?: Phaser.GameObjects.Text; private objectiveStatus?: Phaser.GameObjects.Text; private objectiveCard?: Phaser.GameObjects.Rectangle; + private thirdActivityTitleText?: Phaser.GameObjects.Text; + private thirdPriorityLocationText?: Phaser.GameObjects.Text; private progressText?: Phaser.GameObjects.Text; private dialoguePanel?: Phaser.GameObjects.Container; private dialoguePortraitFrame?: Phaser.GameObjects.Rectangle; @@ -295,7 +320,14 @@ export class CampVisitExplorationScene extends Phaser.Scene { private choicePanel?: Phaser.GameObjects.Container; private choicePanelBounds?: Phaser.Geom.Rectangle; private choiceViews: ChoiceView[] = []; + private choicePanelMode: ChoicePanelMode = 'visit'; + private choiceSourceNpcId?: ExplorationActorId; private choiceReadyAt = Number.POSITIVE_INFINITY; + private thirdWorldFeedback = new Map< + ThirdCampExplorationActivityId, + Phaser.GameObjects.Container + >(); + private thirdCampFirstEntry = false; private transitionOverlay?: Phaser.GameObjects.Container; private completionToast?: Phaser.GameObjects.Container; private explorationInput?: ExplorationInputController; @@ -312,6 +344,7 @@ export class CampVisitExplorationScene extends Phaser.Scene { private lastStepAt = 0; private lastNotice = ''; private ownedPresentationTextureKeys = new Set(); + private visualMotionReduced = false; constructor() { super('CampVisitExplorationScene'); @@ -319,9 +352,11 @@ export class CampVisitExplorationScene extends Phaser.Scene { init(data?: CampVisitExplorationSceneData) { this.visitId = - data?.visitId === secondBattleReliefVisitId - ? secondBattleReliefVisitId - : firstPursuitScoutVisitId; + data?.visitId === thirdCampExplorationVisitId + ? thirdCampExplorationVisitId + : data?.visitId === secondBattleReliefVisitId + ? secondBattleReliefVisitId + : firstPursuitScoutVisitId; } preload() { @@ -338,7 +373,10 @@ export class CampVisitExplorationScene extends Phaser.Scene { this.ownedPresentationTextureKeys.add(backgroundKey); this.load.image(backgroundKey, this.currentBackgroundUrl()); } - explorationPortraitEntries(this.currentPortraitContext()).forEach(({ textureKey, url }) => { + explorationPortraitEntries( + this.currentPortraitContext(), + this.currentPortraitKeys() + ).forEach(({ textureKey, url }) => { if (!this.textures.exists(textureKey)) { this.ownedPresentationTextureKeys.add(textureKey); this.load.image(textureKey, url); @@ -348,6 +386,7 @@ export class CampVisitExplorationScene extends Phaser.Scene { create() { this.resetRuntimeState(); + this.visualMotionReduced = isVisualMotionReduced(); this.events.once(Phaser.Scenes.Events.SHUTDOWN, () => { this.ready = false; this.navigationPending = false; @@ -373,6 +412,21 @@ export class CampVisitExplorationScene extends Phaser.Scene { }); return; } + if (this.isThirdCampVisit()) { + const entry = enterThirdCampExploration(); + if (!entry.ok) { + this.navigationPending = true; + void startGameScene(this, 'CampScene').catch((error) => { + console.error('Failed to leave an unavailable third camp visit.', error); + this.navigationPending = false; + if (this.sys.isActive()) { + this.scene.start('TitleScene'); + } + }); + return; + } + this.thirdCampFirstEntry = entry.changed; + } this.drawCamp(); this.drawHud(); @@ -404,13 +458,28 @@ export class CampVisitExplorationScene extends Phaser.Scene { ambienceVolume: 0.12 } ); - this.showCompletionToast( - this.isSecondReliefVisit() - ? this.reliefGuideMessage() - : '정찰대 막사의 간옹에게 직접 다가가세요.', - 'guide', - 1850 - ); + if (this.isThirdCampVisit() && this.thirdCampFirstEntry) { + const definition = this.thirdCampDefinition(); + this.startDialogue( + definition ? [...definition.introLines] : [], + () => + this.showCompletionToast( + '세 준비는 선택 활동입니다. 필요한 곳만 살피고 언제든 출진할 수 있습니다.', + 'guide', + 2100 + ) + ); + } else { + this.showCompletionToast( + this.isThirdCampVisit() + ? this.thirdCampGuideMessage() + : this.isSecondReliefVisit() + ? this.reliefGuideMessage() + : '정찰대 막사의 간옹에게 직접 다가가세요.', + 'guide', + 1850 + ); + } } update(time: number, delta: number) { @@ -445,9 +514,24 @@ export class CampVisitExplorationScene extends Phaser.Scene { : null; const target = this.nearestInteractionTarget(promptRadius); const completed = this.visitComplete(campaign); - const choiceId = campaign.campVisitChoiceIds[this.visitId] ?? null; + const thirdProgress = this.isThirdCampVisit() + ? thirdCampExplorationProgress(campaign) + : undefined; + const thirdDefinition = this.isThirdCampVisit() + ? resolveThirdCampExplorationDefinition(campaign) + : undefined; + const selectedThirdPriority = thirdProgress?.selectedPriorityId + ? getThirdCampPreparationPriority( + thirdProgress.selectedPriorityId + ) + : undefined; + const choiceId = this.isThirdCampVisit() + ? thirdProgress?.selectedPriorityId ?? null + : campaign.campVisitChoiceIds[this.visitId] ?? null; const chosen: VisitChoice | undefined = choiceId - ? this.isSecondReliefVisit() + ? this.isThirdCampVisit() + ? undefined + : this.isSecondReliefVisit() ? getSecondBattleReliefChoice(choiceId) : getFirstPursuitScoutVisitChoice(choiceId) : undefined; @@ -513,7 +597,8 @@ export class CampVisitExplorationScene extends Phaser.Scene { interact: ['E', 'Space', 'Enter'], choices: ['1', '2', 'pointer'], pointerMove: true, - carryoverGuardMs: inputCarryoverGuardMs + carryoverGuardMs: inputCarryoverGuardMs, + reducedMotion: this.visualMotionReduced }, interaction: { radius: interactionRadius, @@ -544,15 +629,23 @@ export class CampVisitExplorationScene extends Phaser.Scene { textureKey: sprite.texture.key, animationKey: sprite.anims.currentAnim?.key ?? null, objectiveId: definition.objectiveId ?? null, + activityId: definition.activityId ?? null, completed: - definition.kind === 'objective' && - (definition.objectiveId - ? reliefProgress?.completedObjectiveIds.includes( - definition.objectiveId + definition.activityId + ? thirdProgress?.completedActivityIds.includes( + definition.activityId ) ?? false - : completed), + : definition.kind === 'objective' && + (definition.objectiveId + ? reliefProgress?.completedObjectiveIds.includes( + definition.objectiveId + ) ?? false + : completed), current: - definition.objectiveId === reliefProgress?.nextObjectiveId, + definition.activityId + ? definition.activityId === + thirdProgress?.selectedPriorityId + : definition.objectiveId === reliefProgress?.nextObjectiveId, distance: playerPosition ? Phaser.Math.Distance.Between( playerPosition.x, @@ -607,6 +700,8 @@ export class CampVisitExplorationScene extends Phaser.Scene { }, choice: { open: Boolean(this.choicePanel), + mode: this.choicePanelMode, + sourceNpcId: this.choiceSourceNpcId ?? null, ready: Boolean( this.choicePanel && this.time.now >= this.choiceReadyAt ), @@ -624,20 +719,62 @@ export class CampVisitExplorationScene extends Phaser.Scene { }, visit: { id: this.visitId, - mode: this.isSecondReliefVisit() - ? 'second-battle-relief' - : 'first-pursuit-scout', + mode: this.isThirdCampVisit() + ? 'third-guangzong-sortie-camp' + : this.isSecondReliefVisit() + ? 'second-battle-relief' + : 'first-pursuit-scout', completed, choiceId, - choiceLabel: chosen?.label ?? null, + choiceLabel: + selectedThirdPriority?.label ?? chosen?.label ?? null, itemRewards: chosen ? [...chosen.itemRewards] : [], bondExp: chosen?.bondExp ?? 0, completedObjectiveIds: - reliefProgress?.completedObjectiveIds ?? [], + thirdProgress?.completedActivityIds ?? + reliefProgress?.completedObjectiveIds ?? + [], + completedActivityIds: + thirdProgress?.completedActivityIds ?? [], + completedActivityCount: + thirdProgress?.completedActivityCount ?? 0, + activities: + thirdProgress?.activities.map((activity) => ({ + id: activity.id, + label: activity.label, + completed: activity.completed, + selected: activity.selected, + targetActorIds: [...activity.targetActorIds], + worldCue: activity.worldCue + })) ?? [], + selectedPriorityId: + thirdProgress?.selectedPriorityId ?? null, + selectedPriorityLabel: + selectedThirdPriority?.label ?? null, + hudActivityTitle: + this.thirdActivityTitleText?.text ?? null, + hudPriorityLocation: + this.thirdPriorityLocationText?.text ?? null, nextObjectiveId: reliefProgress?.nextObjectiveId ?? null, - choiceReady: reliefProgress?.choiceReady ?? !completed + choiceReady: + thirdProgress?.ready ?? + reliefProgress?.choiceReady ?? + !completed }, - storyContext: reliefContext + storyContext: thirdDefinition + ? { + sourceBattleId: thirdDefinition.sourceBattleId, + targetBattleId: thirdDefinition.targetBattleId, + resultVariant: + thirdDefinition.resultDialogue.variantId, + resultSummary: + thirdDefinition.resultDialogue.summary, + companionDialogueId: + thirdDefinition.companionDialogue.id, + companionBondId: + thirdDefinition.companionDialogue.bondId + } + : reliefContext ? { sourceBattleId: reliefContext.sourceBattleId, sourceBattleTurn: reliefContext.sourceBattleTurn, @@ -648,10 +785,29 @@ export class CampVisitExplorationScene extends Phaser.Scene { scoutReview: { ...reliefContext.scoutReview } } : null, + worldFeedback: this.isThirdCampVisit() + ? thirdDefinition?.activities.map((activity) => { + const view = this.thirdWorldFeedback.get(activity.id); + return { + activityId: activity.id, + cue: activity.worldCue, + visible: view?.visible ?? false, + alpha: view?.alpha ?? 0, + bounds: + view && view.visible + ? this.boundsSnapshot(view.getBounds()) + : null + }; + }) ?? [] + : [], campaign: { latestBattleId: campaign.latestBattleId ?? null, completedCampVisits: [...campaign.completedCampVisits], campVisitChoiceIds: { ...campaign.campVisitChoiceIds }, + thirdCampPreparationSelection: + campaign.thirdCampPreparationSelection + ? { ...campaign.thirdCampPreparationSelection } + : null, inventory: { ...campaign.inventory } }, blockers: this.blockers.map((blocker) => @@ -695,10 +851,19 @@ export class CampVisitExplorationScene extends Phaser.Scene { return true; } + debugAdvanceDialogue() { + if (!this.dialogueState || this.navigationPending) { + return false; + } + this.advanceDialogue(); + return true; + } + debugChooseScout(choiceId: string) { const choice = getFirstPursuitScoutVisitChoice(choiceId); if ( this.isSecondReliefVisit() || + this.isThirdCampVisit() || !choice || this.visitComplete() ) { @@ -727,6 +892,22 @@ export class CampVisitExplorationScene extends Phaser.Scene { } debugChooseVisitChoice(choiceId: string) { + if (this.isThirdCampVisit()) { + const choice = resolveThirdCampCompanionDialogue( + getCampaignState() + )?.choices.find((candidate) => candidate.id === choiceId); + if (!choice) { + return false; + } + if (!this.choicePanel) { + this.openChoicePanel('third-companion'); + this.choiceReadyAt = 0; + } + this.chooseThirdCampCompanion(choice); + return thirdCampExplorationProgress().completedActivityIds.includes( + 'companion' + ); + } if (!this.isSecondReliefVisit()) { return this.debugChooseScout(choiceId); } @@ -742,11 +923,49 @@ export class CampVisitExplorationScene extends Phaser.Scene { return this.visitComplete(); } + debugRecordThirdCampActivity(activityId: string) { + if ( + !this.isThirdCampVisit() || + !['information', 'equipment', 'companion'].includes(activityId) + ) { + return false; + } + this.completeThirdCampActivity( + activityId as ThirdCampExplorationActivityId + ); + return thirdCampExplorationProgress().selectedPriorityId === + activityId; + } + private isSecondReliefVisit() { return this.visitId === secondBattleReliefVisitId; } + private isThirdCampVisit() { + return this.visitId === thirdCampExplorationVisitId; + } + + private thirdCampDefinition() { + return this.isThirdCampVisit() + ? resolveThirdCampExplorationDefinition(getCampaignState()) + : undefined; + } + private currentActorDefinitions() { + if (this.isThirdCampVisit()) { + return (this.thirdCampDefinition()?.actors ?? []).map( + (actor): ExplorationActorDefinition => ({ + ...actor, + dialogue: actor.dialogue.map((line) => ({ ...line })), + repeatDialogue: actor.repeatDialogue.map((line) => ({ + ...line + })), + completedDialogue: actor.completedDialogue.map((line) => ({ + ...line + })) + }) + ); + } return this.isSecondReliefVisit() ? secondReliefActorDefinitions : firstPursuitActorDefinitions; @@ -760,24 +979,58 @@ export class CampVisitExplorationScene extends Phaser.Scene { } private currentPortraitContext() { - return this.isSecondReliefVisit() - ? secondReliefPortraitContext - : firstPursuitPortraitContext; + return this.isThirdCampVisit() + ? thirdCampPortraitContext + : this.isSecondReliefVisit() + ? secondReliefPortraitContext + : firstPursuitPortraitContext; + } + + private currentPortraitKeys() { + if (!this.isThirdCampVisit()) { + return portraitKeys; + } + const definition = this.thirdCampDefinition(); + return [ + 'liuBei', + ...(definition?.introLines.map((line) => line.portraitKey) ?? []), + ...(definition?.actors.flatMap((actor) => [ + actor.portraitKey, + ...actor.dialogue.map((line) => line.portraitKey), + ...actor.repeatDialogue.map((line) => line.portraitKey), + ...actor.completedDialogue.map((line) => line.portraitKey) + ]) ?? []) + ].filter((key): key is string => Boolean(key)); } private currentBackgroundKey() { - return this.isSecondReliefVisit() - ? secondReliefBackgroundKey - : campBackgroundKey; + return this.isThirdCampVisit() + ? thirdCampBackgroundKey + : this.isSecondReliefVisit() + ? secondReliefBackgroundKey + : campBackgroundKey; } private currentBackgroundUrl() { - return this.isSecondReliefVisit() - ? secondReliefBackgroundUrl - : campBackgroundUrl; + return this.isThirdCampVisit() + ? thirdCampBackgroundUrl + : this.isSecondReliefVisit() + ? secondReliefBackgroundUrl + : campBackgroundUrl; } private currentMovementBounds() { + if (this.isThirdCampVisit()) { + const bounds = this.thirdCampDefinition()?.movementBounds; + return bounds + ? new Phaser.Geom.Rectangle( + bounds.x, + bounds.y, + bounds.width, + bounds.height + ) + : movementBounds; + } if (!this.isSecondReliefVisit()) { return movementBounds; } @@ -787,15 +1040,29 @@ export class CampVisitExplorationScene extends Phaser.Scene { } private currentCampExit() { - return this.isSecondReliefVisit() - ? secondBattleReliefExplorationDefinition.exit - : firstPursuitCampExit; + return this.isThirdCampVisit() + ? this.thirdCampDefinition()?.exit ?? firstPursuitCampExit + : this.isSecondReliefVisit() + ? secondBattleReliefExplorationDefinition.exit + : firstPursuitCampExit; } - private currentChoices(): readonly VisitChoice[] { - return this.isSecondReliefVisit() - ? secondBattleReliefExplorationDefinition.choices - : firstPursuitScoutVisitDefinition.choices; + private currentChoices(): readonly ChoiceOption[] { + return this.isThirdCampVisit() + ? resolveThirdCampCompanionDialogue(getCampaignState())?.choices ?? [] + : this.isSecondReliefVisit() + ? secondBattleReliefExplorationDefinition.choices + : firstPursuitScoutVisitDefinition.choices; + } + + private thirdCampGuideMessage() { + const progress = thirdCampExplorationProgress(); + const selected = progress.selectedPriorityId + ? getThirdCampPreparationPriority(progress.selectedPriorityId) + : undefined; + return progress.completedActivityCount > 0 + ? `선택 활동 ${progress.completedActivityCount} / 3 · 현재 우선 ${selected?.label ?? '미정'} · 언제든 출진 가능` + : '준비 활동 0 / 3 · 원하는 곳만 살피고 남쪽 출구에서 언제든 출진할 수 있습니다.'; } private reliefGuideMessage() { @@ -830,7 +1097,13 @@ export class CampVisitExplorationScene extends Phaser.Scene { this.choicePanel = undefined; this.choicePanelBounds = undefined; this.choiceViews = []; + this.choicePanelMode = 'visit'; + this.choiceSourceNpcId = undefined; this.choiceReadyAt = Number.POSITIVE_INFINITY; + this.thirdWorldFeedback.clear(); + this.thirdCampFirstEntry = false; + this.thirdActivityTitleText = undefined; + this.thirdPriorityLocationText = undefined; this.moveTarget = undefined; this.moveWaypoints = []; this.moveTargetId = undefined; @@ -848,6 +1121,21 @@ export class CampVisitExplorationScene extends Phaser.Scene { private visitAvailable() { const campaign = getCampaignState(); + if (this.isThirdCampVisit()) { + const definition = resolveThirdCampExplorationDefinition(campaign); + const history = definition + ? campaign.battleHistory[definition.sourceBattleId] + : undefined; + return Boolean( + definition && + campaign.step === 'third-camp' && + campaign.latestBattleId === definition.sourceBattleId && + (history?.outcome === 'victory' || + (campaign.firstBattleReport?.battleId === + definition.sourceBattleId && + campaign.firstBattleReport.outcome === 'victory')) + ); + } if (this.isSecondReliefVisit()) { return ( campaign.step === 'second-camp' && @@ -883,6 +1171,9 @@ export class CampVisitExplorationScene extends Phaser.Scene { this.registerCampCollisions(); this.drawCampWayfinding(); this.drawCampFireGlow(); + if (this.isThirdCampVisit()) { + this.drawThirdCampWorldFeedback(); + } } else { this.backgroundFallback = true; this.add @@ -925,7 +1216,17 @@ export class CampVisitExplorationScene extends Phaser.Scene { } private registerCampCollisions() { - const collisionRects = this.isSecondReliefVisit() + const collisionRects = this.isThirdCampVisit() + ? [ + [42, 108, 1404, 124], + [72, 228, 386, 176], + [548, 222, 282, 174], + [948, 226, 350, 194], + [84, 600, 224, 178], + [1035, 680, 270, 166], + [600, 468, 136, 106] + ] + : this.isSecondReliefVisit() ? [ [42, 108, 230, 340], [42, 570, 300, 245], @@ -955,6 +1256,40 @@ export class CampVisitExplorationScene extends Phaser.Scene { } private drawCampWayfinding() { + if (this.isThirdCampVisit()) { + [ + [360, 318, '동림 선봉 작전판'], + [267, 660, '선봉 보급 수레'], + [1115, 432, '먼저 귀환한 동료'], + [790, 870, '남쪽 · 군영 장부 복귀'] + ].forEach(([x, y, label]) => { + this.add + .text(Number(x), Number(y), String(label), { + fontFamily: '"Malgun Gothic", "Noto Sans KR", sans-serif', + fontSize: '18px', + color: '#f4e3b5', + fontStyle: 'bold', + backgroundColor: '#15120ed4', + padding: { left: 10, right: 10, top: 4, bottom: 4 } + }) + .setOrigin(0.5) + .setDepth(45); + }); + const routeGlow = this.add + .ellipse(776, 655, 610, 390, 0xd8b15f, 0.035) + .setDepth(34); + if (!this.visualMotionReduced) { + this.tweens.add({ + targets: routeGlow, + alpha: { from: 0.02, to: 0.075 }, + duration: 1250, + yoyo: true, + repeat: -1, + ease: 'Sine.easeInOut' + }); + } + return; + } if (this.isSecondReliefVisit()) { [ [1090, 312, '북쪽 마을'], @@ -978,14 +1313,16 @@ export class CampVisitExplorationScene extends Phaser.Scene { const routeGlow = this.add .ellipse(742, 636, 610, 330, 0xe0bd6e, 0.035) .setDepth(34); - this.tweens.add({ - targets: routeGlow, - alpha: { from: 0.02, to: 0.08 }, - duration: 1100, - yoyo: true, - repeat: -1, - ease: 'Sine.easeInOut' - }); + if (!this.visualMotionReduced) { + this.tweens.add({ + targets: routeGlow, + alpha: { from: 0.02, to: 0.08 }, + duration: 1100, + yoyo: true, + repeat: -1, + ease: 'Sine.easeInOut' + }); + } return; } [ @@ -1022,16 +1359,18 @@ export class CampVisitExplorationScene extends Phaser.Scene { const objectiveGlow = this.add .ellipse(510, 492, 150, 86, 0xe0bd6e, 0.08) .setDepth(44); - this.tweens.add({ - targets: objectiveGlow, - alpha: { from: 0.04, to: 0.17 }, - scaleX: { from: 0.9, to: 1.08 }, - scaleY: { from: 0.9, to: 1.08 }, - duration: 820, - yoyo: true, - repeat: -1, - ease: 'Sine.easeInOut' - }); + if (!this.visualMotionReduced) { + this.tweens.add({ + targets: objectiveGlow, + alpha: { from: 0.04, to: 0.17 }, + scaleX: { from: 0.9, to: 1.08 }, + scaleY: { from: 0.9, to: 1.08 }, + duration: 820, + yoyo: true, + repeat: -1, + ease: 'Sine.easeInOut' + }); + } } private drawCampFireGlow() { @@ -1039,21 +1378,146 @@ export class CampVisitExplorationScene extends Phaser.Scene { return; } const glow = this.add - .ellipse(780, 540, 230, 150, 0xf2a241, 0.08) + .ellipse( + this.isThirdCampVisit() ? 665 : 780, + this.isThirdCampVisit() ? 530 : 540, + 230, + 150, + 0xf2a241, + 0.08 + ) .setDepth(35); - this.tweens.add({ - targets: glow, - alpha: { from: 0.05, to: 0.14 }, - scaleX: { from: 0.95, to: 1.05 }, - scaleY: { from: 0.95, to: 1.05 }, - duration: 880, - yoyo: true, - repeat: -1, - ease: 'Sine.easeInOut' + if (!this.visualMotionReduced) { + this.tweens.add({ + targets: glow, + alpha: { from: 0.05, to: 0.14 }, + scaleX: { from: 0.95, to: 1.05 }, + scaleY: { from: 0.95, to: 1.05 }, + duration: 880, + yoyo: true, + repeat: -1, + ease: 'Sine.easeInOut' + }); + } + } + + private drawThirdCampWorldFeedback() { + const definition = this.thirdCampDefinition(); + if (!definition) { + return; + } + + const routeInk = this.add.graphics(); + routeInk.lineStyle(5, 0xe2bc69, 0.94); + routeInk.beginPath(); + routeInk.moveTo(-78, 20); + routeInk.lineTo(-26, -20); + routeInk.lineTo(24, 6); + routeInk.lineTo(78, -35); + routeInk.strokePath(); + [-78, -26, 24, 78].forEach((x, index) => { + routeInk.fillStyle(index === 3 ? 0xc95742 : 0xf0d995, 0.96); + routeInk.fillCircle(x, index % 2 === 0 ? 20 : -20, 8); + }); + const routeLabel = this.add + .text(0, 55, '적 선봉 · 동림 퇴로 표시', { + fontFamily: '"Malgun Gothic", "Noto Sans KR", sans-serif', + fontSize: '15px', + color: '#fff0bd', + fontStyle: 'bold', + backgroundColor: '#271d13e8', + padding: { left: 8, right: 8, top: 4, bottom: 4 } + }) + .setOrigin(0.5); + this.thirdWorldFeedback.set( + 'information', + this.add + .container(330, 390, [routeInk, routeLabel]) + .setDepth(48) + ); + + const cartSeal = this.add + .rectangle(0, 0, 188, 78, 0x3a2718, 0.9) + .setStrokeStyle(3, 0xd4b06a, 0.94); + const cartGuard = this.add + .text(0, -13, '盾 布 盾', { + fontFamily: '"Malgun Gothic", "Noto Sans KR", sans-serif', + fontSize: '23px', + color: '#f4ddb0', + fontStyle: 'bold' + }) + .setOrigin(0.5); + const cartLabel = this.add + .text(0, 24, '선봉 방호구 적재 완료', { + fontFamily: '"Malgun Gothic", "Noto Sans KR", sans-serif', + fontSize: '14px', + color: '#dfeccf', + fontStyle: 'bold' + }) + .setOrigin(0.5); + this.thirdWorldFeedback.set( + 'equipment', + this.add + .container(230, 672, [cartSeal, cartGuard, cartLabel]) + .setDepth(49) + ); + + const companionActor = definition.actors.find( + (actor) => actor.activityId === 'companion' + ); + const rallyRing = this.add + .ellipse(0, 24, 154, 66, 0xe0bd6e, 0.08) + .setStrokeStyle(3, 0xe4c778, 0.88); + const rallyMark = this.add + .text(0, -54, '결', { + fontFamily: '"Malgun Gothic", "Noto Sans KR", sans-serif', + fontSize: '24px', + color: '#fff1bc', + fontStyle: 'bold', + backgroundColor: '#713b2be8', + padding: { left: 10, right: 10, top: 4, bottom: 4 } + }) + .setOrigin(0.5); + const rallyLabel = this.add + .text(0, 72, '협공 신호 공유', { + fontFamily: '"Malgun Gothic", "Noto Sans KR", sans-serif', + fontSize: '15px', + color: '#f4ddb0', + fontStyle: 'bold', + backgroundColor: '#241915df', + padding: { left: 8, right: 8, top: 3, bottom: 3 } + }) + .setOrigin(0.5); + this.thirdWorldFeedback.set( + 'companion', + this.add + .container( + companionActor?.x ?? 1110, + companionActor?.y ?? 520, + [rallyRing, rallyMark, rallyLabel] + ) + .setDepth(95) + ); + this.refreshThirdWorldFeedback(); + } + + private refreshThirdWorldFeedback() { + if (!this.isThirdCampVisit()) { + return; + } + const progress = thirdCampExplorationProgress(); + this.thirdWorldFeedback.forEach((container, activityId) => { + const completed = + progress.completedActivityIds.includes(activityId); + container.setVisible(completed).setAlpha(completed ? 1 : 0); }); } private drawHud() { + if (this.isThirdCampVisit()) { + this.drawThirdCampHud(); + return; + } if (this.isSecondReliefVisit()) { this.drawSecondReliefHud(); return; @@ -1102,7 +1566,7 @@ export class CampVisitExplorationScene extends Phaser.Scene { '필수 준비', '간옹 · 정찰 작전판', '두 추격로 중 먼저 확인할 길을 선택합니다.' - ); + ).background; this.objectiveStatus = this.add .text(1550, 207, '', { fontFamily: '"Malgun Gothic", "Noto Sans KR", sans-serif', @@ -1208,6 +1672,157 @@ export class CampVisitExplorationScene extends Phaser.Scene { .setVisible(false); } + private drawThirdCampHud() { + const definition = this.thirdCampDefinition(); + if (!definition) { + return; + } + this.add + .text(48, 27, definition.title, { + fontFamily: '"Malgun Gothic", "Noto Sans KR", sans-serif', + fontSize: '34px', + color: '#f4e3b5', + fontStyle: 'bold' + }) + .setDepth(1500); + this.add + .text(650, 35, definition.location, { + fontFamily: '"Malgun Gothic", "Noto Sans KR", sans-serif', + fontSize: '19px', + color: '#b4c0cb' + }) + .setDepth(1500); + + this.add + .text(1536, 35, definition.heading, { + fontFamily: '"Malgun Gothic", "Noto Sans KR", sans-serif', + fontSize: '27px', + color: '#f4e3b5', + fontStyle: 'bold', + wordWrap: { width: 340, useAdvancedWrap: true } + }) + .setDepth(1500); + this.add + .text( + 1538, + 82, + '모두 선택 활동 · 원하는 순서 · 언제든 군영 장부로 복귀', + { + fontFamily: '"Malgun Gothic", "Noto Sans KR", sans-serif', + fontSize: '16px', + color: '#a8d58e', + fontStyle: 'bold', + wordWrap: { width: 330, useAdvancedWrap: true } + } + ) + .setDepth(1500); + + const activityCard = this.drawObjectiveCard( + 150, + '자유 준비 0 / 3', + '작전판 · 보급 수레 · 먼저 귀환한 동료', + '한 곳만 확인해도 방침이 정해지며, 마지막 활동이 현재 우선 기준이 됩니다.' + ); + this.objectiveCard = activityCard.background; + this.thirdActivityTitleText = activityCard.titleText; + this.objectiveStatus = this.add + .text(1550, 166, '◆ 모두 선택', { + fontFamily: '"Malgun Gothic", "Noto Sans KR", sans-serif', + fontSize: '16px', + color: '#e1bc69', + fontStyle: 'bold' + }) + .setDepth(1502); + + const priorityCard = this.drawObjectiveCard( + 342, + '현재 출진 우선', + '아직 정하지 않음', + '완료한 활동을 다시 확인하면 보상 중복 없이 우선 기준만 바뀝니다.' + ); + this.thirdPriorityLocationText = priorityCard.locationText; + + this.drawObjectiveCard( + 534, + '군영 장부로 복귀', + '남쪽 출구 · 항상 가능', + '부분 진행과 선택은 바로 저장됩니다. 준비를 남겨 두고도 돌아갈 수 있습니다.' + ); + this.add + .text(1550, 550, '↩ 언제든 가능', { + fontFamily: '"Malgun Gothic", "Noto Sans KR", sans-serif', + fontSize: '16px', + color: '#a8d58e', + fontStyle: 'bold' + }) + .setDepth(1502); + + this.progressText = this.add + .text(1538, 716, '', { + fontFamily: '"Malgun Gothic", "Noto Sans KR", sans-serif', + fontSize: '16px', + color: '#cbd3dc', + lineSpacing: 7, + wordWrap: { width: 330, useAdvancedWrap: true } + }) + .setDepth(1502); + + this.add + .text(46, 980, '이동', { + fontFamily: '"Malgun Gothic", "Noto Sans KR", sans-serif', + fontSize: '17px', + color: '#d8b15f', + fontStyle: 'bold' + }) + .setDepth(1502); + this.add + .text(46, 1012, 'WASD / 방향키 · 바닥이나 인물 클릭', { + fontFamily: '"Malgun Gothic", "Noto Sans KR", sans-serif', + fontSize: '19px', + color: '#e3e7eb' + }) + .setDepth(1502); + this.add + .text(485, 980, '상호작용', { + fontFamily: '"Malgun Gothic", "Noto Sans KR", sans-serif', + fontSize: '17px', + color: '#d8b15f', + fontStyle: 'bold' + }) + .setDepth(1502); + this.add + .text(485, 1012, '가까이에서 E / Space / Enter', { + fontFamily: '"Malgun Gothic", "Noto Sans KR", sans-serif', + fontSize: '19px', + color: '#e3e7eb' + }) + .setDepth(1502); + this.add + .text(1420, 1012, 'ESC · 대화/선택 닫기', { + fontFamily: '"Malgun Gothic", "Noto Sans KR", sans-serif', + fontSize: '17px', + color: '#9fabb8' + }) + .setOrigin(1, 0) + .setDepth(1502); + + this.promptBackground = this.add + .rectangle(940, 1018, 610, 58, 0x2a2119, 0.98) + .setStrokeStyle(2, 0xd8b15f, 0.92) + .setDepth(1510) + .setVisible(false); + this.promptText = this.add + .text(940, 1018, '', { + fontFamily: '"Malgun Gothic", "Noto Sans KR", sans-serif', + fontSize: '21px', + color: '#f6e3af', + fontStyle: 'bold' + }) + .setOrigin(0.5) + .setDepth(1511) + .setVisible(false); + } + private drawSecondReliefHud() { const definition = secondBattleReliefExplorationDefinition; this.add @@ -1249,7 +1864,7 @@ export class CampVisitExplorationScene extends Phaser.Scene { '순서대로 확인', '관우 → 사공 → 장비 → 간옹', '현장의 증언과 흔적을 하나씩 확인합니다.' - ); + ).background; this.objectiveStatus = this.add .text(1550, 207, '', { fontFamily: '"Malgun Gothic", "Noto Sans KR", sans-serif', @@ -1366,7 +1981,7 @@ export class CampVisitExplorationScene extends Phaser.Scene { .setOrigin(0) .setStrokeStyle(2, 0x3d4858, 1) .setDepth(1500); - this.add + const titleText = this.add .text(1550, y + 48, title, { fontFamily: '"Malgun Gothic", "Noto Sans KR", sans-serif', fontSize: '22px', @@ -1374,14 +1989,14 @@ export class CampVisitExplorationScene extends Phaser.Scene { fontStyle: 'bold' }) .setDepth(1501); - this.add + const locationText = this.add .text(1550, y + 82, location, { fontFamily: '"Malgun Gothic", "Noto Sans KR", sans-serif', fontSize: '15px', color: '#a4afba' }) .setDepth(1501); - this.add + const helpText = this.add .text(1550, y + 109, help, { fontFamily: '"Malgun Gothic", "Noto Sans KR", sans-serif', fontSize: '13px', @@ -1389,16 +2004,26 @@ export class CampVisitExplorationScene extends Phaser.Scene { wordWrap: { width: 318, useAdvancedWrap: true } }) .setDepth(1501); - return background; + return { + background, + titleText, + locationText, + helpText + }; } private createActors() { - const start = this.isSecondReliefVisit() - ? secondBattleReliefExplorationDefinition.player - : { x: 780, y: 720 }; - const startingDirection = this.isSecondReliefVisit() - ? secondBattleReliefExplorationDefinition.player.direction - : 'north'; + const thirdDefinition = this.thirdCampDefinition(); + const start = this.isThirdCampVisit() && thirdDefinition + ? thirdDefinition.player + : this.isSecondReliefVisit() + ? secondBattleReliefExplorationDefinition.player + : { x: 780, y: 720 }; + const startingDirection = this.isThirdCampVisit() && thirdDefinition + ? thirdDefinition.player.direction + : this.isSecondReliefVisit() + ? secondBattleReliefExplorationDefinition.player.direction + : 'north'; this.playerDirection = startingDirection; this.playerShadow = this.add .ellipse(start.x, start.y + 20, 66, 25, 0x07100a, 0.45) @@ -1438,7 +2063,9 @@ export class CampVisitExplorationScene extends Phaser.Scene { definition.x, definition.y, definition.id === 'jian-yong' || - definition.id === 'jian-yong-records' + definition.id === 'jian-yong-records' || + definition.id === 'zou-jing-operations' || + definition.id === 'quartermaster-equipment' ? characterDisplaySize + 4 : characterDisplaySize, definition.direction @@ -1458,27 +2085,38 @@ export class CampVisitExplorationScene extends Phaser.Scene { .text( definition.x, definition.y - 77, - definition.kind === 'objective' ? '!' : '…', + definition.kind === 'companion' && !this.isThirdCampVisit() + ? '…' + : '!', { fontFamily: '"Malgun Gothic", "Noto Sans KR", sans-serif', - fontSize: definition.kind === 'objective' ? '32px' : '23px', + fontSize: + definition.kind === 'companion' && + !this.isThirdCampVisit() + ? '23px' + : '32px', color: '#2a2013', fontStyle: 'bold', backgroundColor: - definition.kind === 'objective' ? '#e5bd68' : '#aeb8c4', + definition.kind === 'companion' && + !this.isThirdCampVisit() + ? '#aeb8c4' + : '#e5bd68', padding: { left: 10, right: 10, top: 3, bottom: 3 } } ) .setOrigin(0.5) .setDepth(1201); - this.tweens.add({ - targets: marker, - y: marker.y - 8, - duration: definition.kind === 'objective' ? 680 : 900, - yoyo: true, - repeat: -1, - ease: 'Sine.easeInOut' - }); + if (!this.visualMotionReduced) { + this.tweens.add({ + targets: marker, + y: marker.y - 8, + duration: definition.kind === 'objective' ? 680 : 900, + yoyo: true, + repeat: -1, + ease: 'Sine.easeInOut' + }); + } this.actorViews.set(definition.id, { definition, sprite, @@ -1517,13 +2155,15 @@ export class CampVisitExplorationScene extends Phaser.Scene { ) .setOrigin(0.5) .setDepth(1200); - this.tweens.add({ - targets: exitMarker, - alpha: { from: 0.68, to: 1 }, - duration: 880, - yoyo: true, - repeat: -1 - }); + if (!this.visualMotionReduced) { + this.tweens.add({ + targets: exitMarker, + alpha: { from: 0.68, to: 1 }, + duration: 880, + yoyo: true, + repeat: -1 + }); + } } private createCharacterSprite( @@ -1669,9 +2309,11 @@ export class CampVisitExplorationScene extends Phaser.Scene { return; } this.showPromptMessage( - this.isSecondReliefVisit() - ? '군영으로 돌아가려면 남쪽 귀환 표식까지 직접 이동하세요.' - : '군영 장부로 돌아가려면 남쪽 출구까지 직접 이동하세요.' + this.isThirdCampVisit() + ? '군영 장부로 돌아가려면 남쪽 출구까지 직접 이동하세요. 준비 활동은 모두 선택입니다.' + : this.isSecondReliefVisit() + ? '군영으로 돌아가려면 남쪽 귀환 표식까지 직접 이동하세요.' + : '군영 장부로 돌아가려면 남쪽 출구까지 직접 이동하세요.' ); } @@ -2187,6 +2829,10 @@ export class CampVisitExplorationScene extends Phaser.Scene { return; } this.faceCharactersForConversation(view); + if (this.isThirdCampVisit()) { + this.interactWithThirdCampActor(view); + return; + } if (this.isSecondReliefVisit()) { this.interactWithReliefActor(view); return; @@ -2205,6 +2851,87 @@ export class CampVisitExplorationScene extends Phaser.Scene { ); } + private interactWithThirdCampActor(view: ExplorationActorView) { + const activityId = view.definition.activityId; + if (!activityId) { + this.startDialogue( + [...view.definition.dialogue], + () => this.restoreActorDirection(view), + view.definition.id + ); + return; + } + const progress = thirdCampExplorationProgress(); + const completed = + progress.completedActivityIds.includes(activityId); + + if (activityId === 'companion' && !completed) { + this.startDialogue( + [...view.definition.dialogue], + () => { + this.restoreActorDirection(view); + this.openChoicePanel('third-companion', view.definition.id); + }, + view.definition.id + ); + return; + } + + const lines = completed + ? view.definition.completedDialogue?.length + ? view.definition.completedDialogue + : view.definition.repeatDialogue ?? view.definition.dialogue + : view.definition.dialogue; + this.startDialogue( + [...lines], + () => { + this.restoreActorDirection(view); + this.completeThirdCampActivity(activityId); + }, + view.definition.id + ); + } + + private completeThirdCampActivity( + activityId: ThirdCampExplorationActivityId + ) { + const before = thirdCampExplorationProgress(); + const result = recordThirdCampExplorationActivity(activityId); + if (!result.ok) { + const message = + result.reason === 'choice-required' + ? '동료와 대화를 마치고 응답을 정해야 합니다.' + : result.reason === 'invalid-activity' + ? '이 준비 활동은 기록할 수 없습니다.' + : result.reason === 'invalid-campaign' + ? '현재 군영에서는 이 준비를 진행할 수 없습니다.' + : '준비 기록을 저장하지 못했습니다.'; + this.showCompletionToast(message, 'error'); + return; + } + + const newlyCompleted = + !before.completedActivityIds.includes(activityId); + this.inputReadyAt = this.time.now + inputCarryoverGuardMs; + this.lastNotice = `${result.activity.shortLabel} · 현재 출진 우선`; + if (newlyCompleted) { + soundDirector.playObjectiveAchieved(); + } else { + soundDirector.playSelect(); + } + this.refreshObjectiveHud(); + this.refreshActorMarkers(); + this.refreshThirdWorldFeedback(); + this.refreshInteractionPrompt(); + this.showCompletionToast( + newlyCompleted + ? result.activity.completionLine + : `${result.priority.label}을 현재 출진 우선으로 다시 선택했습니다. 보상은 중복되지 않습니다.`, + 'success', + newlyCompleted ? 2100 : 1750 + ); + } + private interactWithReliefActor(view: ExplorationActorView) { const objective = view.definition.objectiveId ? getSecondBattleReliefObjective(view.definition.objectiveId) @@ -2522,11 +3249,18 @@ export class CampVisitExplorationScene extends Phaser.Scene { this.refreshInteractionPrompt(); } - private openChoicePanel() { + private openChoicePanel( + mode: ChoicePanelMode = 'visit', + sourceNpcId?: ExplorationActorId + ) { if ( this.choicePanel || this.navigationPending || - this.visitComplete() + (mode === 'visit' && this.visitComplete()) || + (mode === 'third-companion' && + thirdCampExplorationProgress().completedActivityIds.includes( + 'companion' + )) ) { return; } @@ -2552,7 +3286,10 @@ export class CampVisitExplorationScene extends Phaser.Scene { const title = this.add.text( panelBounds.x + 40, panelBounds.y + 38, - this.isSecondReliefVisit() + mode === 'third-companion' + ? resolveThirdCampCompanionDialogue(getCampaignState())?.title ?? + '동료와 다음 호흡 정하기' + : this.isSecondReliefVisit() ? secondBattleReliefExplorationDefinition.title : firstPursuitScoutVisitDefinition.title, { @@ -2565,7 +3302,9 @@ export class CampVisitExplorationScene extends Phaser.Scene { const hint = this.add.text( panelBounds.x + 40, panelBounds.y + 84, - this.isSecondReliefVisit() + mode === 'third-companion' + ? '지난 전투를 함께 되짚고 다음 본영전의 짧은 협공 신호를 정하세요. 숫자 1·2 또는 마우스로 선택할 수 있습니다.' + : this.isSecondReliefVisit() ? '광종 구원로에서 먼저 세울 기준을 선택하세요. 결정과 보상은 저장되며 세 번째 전투의 출진 준비로 이어집니다.' : '먼저 확인할 길을 선택하세요. 결정과 보상은 저장되며 두 번째 전투의 배치 정보로 이어집니다.', { @@ -2653,6 +3392,8 @@ export class CampVisitExplorationScene extends Phaser.Scene { .container(0, 0, objects) .setDepth(3200); this.choicePanelBounds = panelBounds; + this.choicePanelMode = mode; + this.choiceSourceNpcId = sourceNpcId; this.choiceReadyAt = this.time.now + inputCarryoverGuardMs; } @@ -2670,7 +3411,13 @@ export class CampVisitExplorationScene extends Phaser.Scene { } } - private chooseVisitChoice(choice: VisitChoice) { + private chooseVisitChoice(choice: ChoiceOption) { + if (this.isThirdCampVisit()) { + if ('rewardExp' in choice) { + this.chooseThirdCampCompanion(choice); + } + return; + } if (this.isSecondReliefVisit()) { const reliefChoice = getSecondBattleReliefChoice(choice.id); if (reliefChoice) { @@ -2788,20 +3535,103 @@ export class CampVisitExplorationScene extends Phaser.Scene { ); } + private chooseThirdCampCompanion( + choice: ThirdCampCompanionDialogueChoice + ) { + if ( + this.navigationPending || + this.choicePanelMode !== 'third-companion' || + (this.choicePanel && this.time.now < this.choiceReadyAt) + ) { + return; + } + const dialogue = resolveThirdCampCompanionDialogue( + getCampaignState() + ); + const alreadyCompleted = Boolean( + dialogue && + getCampaignState().completedCampDialogues.includes(dialogue.id) + ); + const sourceNpcId = this.choiceSourceNpcId; + const result = completeThirdCampCompanionActivity(choice.id); + if (!result.ok) { + this.closeChoicePanel(); + const message = + result.reason === 'invalid-choice' + ? '선택할 수 없는 응답입니다.' + : result.reason === 'bond-unavailable' + ? '현재 동료 공명 기록을 갱신할 수 없습니다.' + : result.reason === 'invalid-campaign' + ? '현재 군영에서는 이 대화를 진행할 수 없습니다.' + : '동료 대화 기록을 저장하지 못했습니다.'; + this.showCompletionToast(message, 'error'); + this.refreshObjectiveHud(); + this.refreshActorMarkers(); + return; + } + + this.inputReadyAt = this.time.now + inputCarryoverGuardMs; + this.closeChoicePanel(); + this.lastNotice = '동료 공명 · 현재 출진 우선'; + if (alreadyCompleted) { + soundDirector.playSelect(); + } else { + soundDirector.playEffect('bond-resonance', { + volume: 0.3, + stopAfterMs: 1150 + }); + } + this.refreshObjectiveHud(); + this.refreshActorMarkers(); + this.refreshThirdWorldFeedback(); + this.startDialogue( + [ + { + speaker: '출진 약속', + text: result.choice.response + }, + { + speaker: '공명 기록', + text: alreadyCompleted + ? `${result.memory.label}을 현재 출진 우선으로 다시 선택했습니다. 공명 보상은 중복되지 않습니다.` + : `${result.choice.label} · 공명 +${result.rewardExp} · 다음 본영전 초반 협공 신호에 반영` + } + ], + () => + this.showCompletionToast( + result.activity.completionLine, + 'success', + 2100 + ), + sourceNpcId + ); + } + private closeChoicePanel() { this.choicePanel?.destroy(); this.choicePanel = undefined; this.choicePanelBounds = undefined; this.choiceViews = []; + this.choicePanelMode = 'visit'; + this.choiceSourceNpcId = undefined; this.choiceReadyAt = Number.POSITIVE_INFINITY; this.refreshInteractionPrompt(); } - private choiceRewardText(choice: VisitChoice) { + private choiceRewardText(choice: ChoiceOption) { + if ('rewardExp' in choice) { + const dialogue = resolveThirdCampCompanionDialogue( + getCampaignState() + ); + return `공명 +${(dialogue?.rewardExp ?? 0) + choice.rewardExp} · 보상은 최초 1회`; + } return `공명 +${choice.bondExp} · ${choice.itemRewards.join(' · ')}`; } - private choiceEffectText(choice: VisitChoice) { + private choiceEffectText(choice: ChoiceOption) { + if ('rewardExp' in choice) { + return choice.response; + } if (this.isSecondReliefVisit()) { const reliefChoice = getSecondBattleReliefChoice(choice.id); if (reliefChoice?.thirdBattleEffect.kind === 'village-supply-line') { @@ -2818,6 +3648,28 @@ export class CampVisitExplorationScene extends Phaser.Scene { private interactWithExit() { if (!this.visitComplete()) { + if (this.isThirdCampVisit()) { + const progress = thirdCampExplorationProgress(); + this.startDialogue( + [ + { + speaker: '유비', + portraitKey: 'liuBei', + text: + progress.completedActivityCount > 0 + ? '살핀 준비와 현재 우선 기준은 장부에 남았다. 나머지는 선택이니 군영으로 돌아가 출진 여부를 정하자.' + : '아직 별도 준비를 확인하지 않았지만, 세 활동은 모두 선택이다. 군영 장부로 돌아가 바로 출진해도 된다.' + }, + { + speaker: '광종 출진 기록', + text: `선택 활동 ${progress.completedActivityCount} / 3 · 부분 진행 저장 · 언제든 다시 방문 가능` + } + ], + () => this.returnToCamp(), + 'camp-exit' + ); + return; + } if (this.isSecondReliefVisit()) { const progress = secondBattleReliefProgress(); this.startDialogue( @@ -2895,9 +3747,11 @@ export class CampVisitExplorationScene extends Phaser.Scene { .text( sceneWidth / 2, sceneHeight / 2 - 32, - this.isSecondReliefVisit() - ? '북쪽 마을·나루 수습 기록' - : '탁현 의용군 막사 기록', + this.isThirdCampVisit() + ? '광종 동림 출진 준비 기록' + : this.isSecondReliefVisit() + ? '북쪽 마을·나루 수습 기록' + : '탁현 의용군 막사 기록', { fontFamily: '"Malgun Gothic", "Noto Sans KR", sans-serif', fontSize: '44px', @@ -2910,13 +3764,17 @@ export class CampVisitExplorationScene extends Phaser.Scene { .text( sceneWidth / 2, sceneHeight / 2 + 44, - this.visitComplete() - ? this.isSecondReliefVisit() - ? '현장 수습과 광종 진군 방침을 출진 장부에 올립니다.' - : '간옹의 정찰 기록을 출진 장부에 올립니다.' - : this.isSecondReliefVisit() - ? '확인한 현장 기록을 저장하고 군영으로 돌아갑니다.' - : '정찰 활동을 남겨 두고 군영 장부로 돌아갑니다.', + this.isThirdCampVisit() + ? this.visitComplete() + ? '선택한 출진 우선과 완료한 활동을 장부에 반영합니다.' + : '선택 활동을 남겨 두고 군영 장부로 돌아갑니다.' + : this.visitComplete() + ? this.isSecondReliefVisit() + ? '현장 수습과 광종 진군 방침을 출진 장부에 올립니다.' + : '간옹의 정찰 기록을 출진 장부에 올립니다.' + : this.isSecondReliefVisit() + ? '확인한 현장 기록을 저장하고 군영으로 돌아갑니다.' + : '정찰 활동을 남겨 두고 군영 장부로 돌아갑니다.', { fontFamily: '"Malgun Gothic", "Noto Sans KR", sans-serif', fontSize: '24px', @@ -2928,17 +3786,65 @@ export class CampVisitExplorationScene extends Phaser.Scene { .container(0, 0, [shade, title, subtitle]) .setDepth(5000) .setAlpha(0); - this.tweens.add({ - targets: this.transitionOverlay, - alpha: 1, - duration: transitionFadeDurationMs, - ease: 'Sine.easeOut' - }); + if (this.visualMotionReduced) { + this.transitionOverlay.setAlpha(1); + } else { + this.tweens.add({ + targets: this.transitionOverlay, + alpha: 1, + duration: transitionFadeDurationMs, + ease: 'Sine.easeOut' + }); + } } private refreshObjectiveHud() { const campaign = getCampaignState(); const completed = this.visitComplete(campaign); + if (this.isThirdCampVisit()) { + const progress = thirdCampExplorationProgress(campaign); + const selected = progress.selectedPriorityId + ? getThirdCampPreparationPriority( + progress.selectedPriorityId + ) + : undefined; + this.objectiveStatus + ?.setText( + `◆ 선택 활동 ${progress.completedActivityCount} / 3 · 언제든 복귀` + ) + .setColor( + progress.completedActivityCount === 3 + ? '#a8d58e' + : '#e1bc69' + ); + this.objectiveCard?.setStrokeStyle( + 2, + progress.completedActivityCount > 0 ? 0x628653 : 0xd8b15f, + 0.86 + ); + this.thirdActivityTitleText?.setText( + `자유 준비 ${progress.completedActivityCount} / 3` + ); + this.thirdPriorityLocationText?.setText( + selected?.label ?? '아직 정하지 않음' + ); + const activityLines = progress.activities + .map( + (activity) => + `${activity.completed ? '✓' : '!'} ${activity.shortLabel}${ + activity.selected ? ' · 현재 우선' : '' + }` + ) + .join('\n'); + this.progressText?.setText( + `선택 활동 ${progress.completedActivityCount} / 3 · 모두 선택\n` + + `현재 우선 · ${selected?.label ?? '아직 정하지 않음'}\n\n` + + `${activityLines}\n\n` + + '완료한 곳을 다시 확인하면 보상 중복 없이 우선 기준만 바뀝니다.' + ); + this.refreshThirdWorldFeedback(); + return; + } if (this.isSecondReliefVisit()) { const progress = secondBattleReliefProgress(campaign); const choiceId = @@ -3006,10 +3912,33 @@ export class CampVisitExplorationScene extends Phaser.Scene { private refreshActorMarkers() { const completed = this.visitComplete(); + const thirdProgress = this.isThirdCampVisit() + ? thirdCampExplorationProgress() + : undefined; const reliefProgress = this.isSecondReliefVisit() ? secondBattleReliefProgress() : undefined; this.actorViews.forEach(({ definition, marker }) => { + if (this.isThirdCampVisit() && definition.activityId) { + const activityComplete = + thirdProgress?.completedActivityIds.includes( + definition.activityId + ) ?? false; + const selected = + definition.activityId === + thirdProgress?.selectedPriorityId; + marker + .setText(activityComplete ? '✓' : '!') + .setColor(activityComplete ? '#e5f2d5' : '#2a2013') + .setBackgroundColor( + selected + ? '#8a6332' + : activityComplete + ? '#4e7549' + : '#e5bd68' + ); + return; + } if (definition.kind !== 'objective') { marker.setText('…'); return; @@ -3124,17 +4053,24 @@ export class CampVisitExplorationScene extends Phaser.Scene { this.completionToast = this.add .container(0, 0, [background, text]) .setDepth(3300); - this.tweens.add({ - targets: this.completionToast, - alpha: 0, - y: -18, - delay: duration, - duration: 380, - onComplete: () => { + if (this.visualMotionReduced) { + this.time.delayedCall(duration, () => { this.completionToast?.destroy(); this.completionToast = undefined; - } - }); + }); + } else { + this.tweens.add({ + targets: this.completionToast, + alpha: 0, + y: -18, + delay: duration, + duration: 380, + onComplete: () => { + this.completionToast?.destroy(); + this.completionToast = undefined; + } + }); + } } private nearestInteractionTarget(radius: number) { @@ -3161,13 +4097,26 @@ export class CampVisitExplorationScene extends Phaser.Scene { const reliefProgress = this.isSecondReliefVisit() ? secondBattleReliefProgress() : undefined; + const thirdProgress = this.isThirdCampVisit() + ? thirdCampExplorationProgress() + : undefined; return [ ...Array.from(this.actorViews.values()).map( ({ definition, sprite }) => ({ kind: 'actor' as const, id: definition.id, name: - this.isSecondReliefVisit() + this.isThirdCampVisit() + ? definition.activityId + ? `${ + thirdProgress?.completedActivityIds.includes( + definition.activityId + ) + ? '다시 확인 · ' + : '' + }${definition.name} · ${definition.role}` + : `${definition.name}와 대화` + : this.isSecondReliefVisit() ? definition.objectiveId === reliefProgress?.nextObjectiveId ? `${definition.name} · 다음 현장 확인` : `${definition.name}와 대화` @@ -3192,6 +4141,9 @@ export class CampVisitExplorationScene extends Phaser.Scene { } private visitComplete(campaign = getCampaignState()) { + if (this.isThirdCampVisit()) { + return thirdCampExplorationProgress(campaign).ready; + } return campaign.completedCampVisits.includes( this.visitId ); diff --git a/src/game/state/thirdCampExplorationActions.ts b/src/game/state/thirdCampExplorationActions.ts new file mode 100644 index 0000000..feff060 --- /dev/null +++ b/src/game/state/thirdCampExplorationActions.ts @@ -0,0 +1,463 @@ +import { + completedThirdCampExplorationActivityIds, + isThirdCampExplorationActivityId, + resolveThirdCampCompanionDialogue, + resolveThirdCampExplorationDefinition, + thirdCampExplorationActivityProgressId, + thirdCampExplorationSourceBattleId, + thirdCampExplorationVisitId, + type ThirdCampCompanionDialogueChoice, + type ThirdCampCompanionDialogueDefinition, + type ThirdCampExplorationActivityDefinition, + type ThirdCampExplorationActivityId +} from '../data/thirdCampExploration'; +import { + getThirdCampPreparationPriority, + hasThirdCampPreparationSourceVictory, + resolveThirdCampPreparationMemory, + resolveThirdCampPreparationSelection, + thirdCampPreparationSourceBattleId, + thirdCampPreparationTargetBattleId, + type ThirdCampPreparationMemory, + type ThirdCampPreparationPriorityDefinition +} from '../data/thirdCampPreparation'; +import { + applyCampBondExp, + getCampaignState, + setCampaignState, + type CampaignState +} from './campaignState'; + +export type ThirdCampExplorationFailure = + | 'invalid-campaign' + | 'invalid-activity' + | 'choice-required' + | 'invalid-choice' + | 'bond-unavailable' + | 'save-unavailable'; + +export type ThirdCampExplorationEntryResult = + | { + ok: true; + campaign: CampaignState; + changed: boolean; + } + | { + ok: false; + reason: Extract< + ThirdCampExplorationFailure, + 'invalid-campaign' | 'save-unavailable' + >; + }; + +export type ThirdCampExplorationActivityResult = + | { + ok: true; + activity: ThirdCampExplorationActivityDefinition; + priority: ThirdCampPreparationPriorityDefinition; + memory: ThirdCampPreparationMemory; + campaign: CampaignState; + changed: boolean; + } + | { + ok: false; + reason: Extract< + ThirdCampExplorationFailure, + | 'invalid-campaign' + | 'invalid-activity' + | 'choice-required' + | 'save-unavailable' + >; + }; + +export type ThirdCampCompanionActivityResult = + | { + ok: true; + activity: ThirdCampExplorationActivityDefinition; + dialogue: ThirdCampCompanionDialogueDefinition; + choice: ThirdCampCompanionDialogueChoice; + rewardExp: number; + memory: ThirdCampPreparationMemory; + campaign: CampaignState; + changed: boolean; + } + | { + ok: false; + reason: Extract< + ThirdCampExplorationFailure, + | 'invalid-campaign' + | 'invalid-choice' + | 'bond-unavailable' + | 'save-unavailable' + >; + }; + +export function thirdCampExplorationProgress( + campaign: CampaignState = getCampaignState() +) { + const definition = + resolveThirdCampExplorationDefinition(campaign); + const completedActivityIds = + completedThirdCampExplorationActivityIds( + campaign.completedCampVisits + ); + const completed = new Set(completedActivityIds); + const selection = resolveThirdCampPreparationSelection(campaign); + + return { + visitId: thirdCampExplorationVisitId, + entered: campaign.completedCampVisits.includes( + thirdCampExplorationVisitId + ), + completedActivityIds, + completedActivityCount: completedActivityIds.length, + activities: + definition?.activities.map((activity) => ({ + ...activity, + targetActorIds: [...activity.targetActorIds], + completed: completed.has(activity.id), + selected: selection?.priorityId === activity.id + })) ?? [], + selectedPriorityId: selection?.priorityId ?? null, + ready: selection?.selectable === true + }; +} + +export function enterThirdCampExploration(): + ThirdCampExplorationEntryResult { + const snapshot = readCampaignSnapshot(); + if (!snapshot) { + return { ok: false, reason: 'save-unavailable' }; + } + if (!campaignSupportsThirdCampExploration(snapshot)) { + return { ok: false, reason: 'invalid-campaign' }; + } + + const markerIds = [thirdCampExplorationVisitId]; + const companionDialogue = + resolveThirdCampCompanionDialogue(snapshot); + if ( + companionDialogue && + snapshot.completedCampDialogues.includes(companionDialogue.id) + ) { + markerIds.push( + thirdCampExplorationActivityProgressId('companion') + ); + } + const updated = withVisitMarkers(snapshot, markerIds); + if ( + updated.completedCampVisits.length === + snapshot.completedCampVisits.length + ) { + return { ok: true, campaign: snapshot, changed: false }; + } + + const persisted = persistCampaign(updated, snapshot); + return persisted + ? { ok: true, campaign: persisted, changed: true } + : { ok: false, reason: 'save-unavailable' }; +} + +export function recordThirdCampExplorationActivity( + priorityId: string +): ThirdCampExplorationActivityResult { + const snapshot = readCampaignSnapshot(); + if (!snapshot) { + return { ok: false, reason: 'save-unavailable' }; + } + if (!campaignSupportsThirdCampExploration(snapshot)) { + return { ok: false, reason: 'invalid-campaign' }; + } + if (!isThirdCampExplorationActivityId(priorityId)) { + return { ok: false, reason: 'invalid-activity' }; + } + + const definition = + resolveThirdCampExplorationDefinition(snapshot); + const activity = definition?.activities.find( + (candidate) => candidate.id === priorityId + ); + const priority = getThirdCampPreparationPriority(priorityId); + if (!activity || !priority) { + return { ok: false, reason: 'invalid-activity' }; + } + if ( + priorityId === 'companion' && + !hasCompletedCompanionActivity(snapshot) + ) { + return { ok: false, reason: 'choice-required' }; + } + + const persisted = persistActivitySelection( + snapshot, + priorityId + ); + if (!persisted) { + return { ok: false, reason: 'save-unavailable' }; + } + const memory = selectedMemory(persisted, priorityId); + if (!memory) { + restoreCampaignSnapshot(snapshot); + return { ok: false, reason: 'save-unavailable' }; + } + + return { + ok: true, + activity, + priority, + memory, + campaign: persisted, + changed: + !snapshot.completedCampVisits.includes( + thirdCampExplorationActivityProgressId(priorityId) + ) || + snapshot.thirdCampPreparationSelection?.priorityId !== priorityId + }; +} + +export function completeThirdCampCompanionActivity( + choiceId: string +): ThirdCampCompanionActivityResult { + const snapshot = readCampaignSnapshot(); + if (!snapshot) { + return { ok: false, reason: 'save-unavailable' }; + } + if (!campaignSupportsThirdCampExploration(snapshot)) { + return { ok: false, reason: 'invalid-campaign' }; + } + + const definition = + resolveThirdCampExplorationDefinition(snapshot); + const activity = definition?.activities.find( + (candidate) => candidate.id === 'companion' + ); + const dialogue = resolveThirdCampCompanionDialogue(snapshot); + const choice = dialogue?.choices.find( + (candidate) => candidate.id === choiceId + ); + if (!activity || !dialogue || !choice) { + return { ok: false, reason: 'invalid-choice' }; + } + + const dialogueAlreadyCompleted = + snapshot.completedCampDialogues.includes(dialogue.id); + if (!dialogueAlreadyCompleted) { + const report = applyCompanionBondReward( + snapshot, + dialogue, + choice + ); + if (!report) { + return { ok: false, reason: 'bond-unavailable' }; + } + } + + const rewardExp = dialogue.rewardExp + choice.rewardExp; + const afterDialogue = readCampaignSnapshot(); + if (!afterDialogue) { + restoreCampaignSnapshot(snapshot); + return { ok: false, reason: 'save-unavailable' }; + } + const persisted = persistActivitySelection( + afterDialogue, + 'companion', + snapshot + ); + if (!persisted) { + return { ok: false, reason: 'save-unavailable' }; + } + const memory = selectedMemory(persisted, 'companion'); + if (!memory) { + restoreCampaignSnapshot(snapshot); + return { ok: false, reason: 'save-unavailable' }; + } + + return { + ok: true, + activity, + dialogue, + choice, + rewardExp, + memory, + campaign: persisted, + changed: + !dialogueAlreadyCompleted || + !snapshot.completedCampVisits.includes( + thirdCampExplorationActivityProgressId('companion') + ) || + snapshot.thirdCampPreparationSelection?.priorityId !== + 'companion' + }; +} + +function campaignSupportsThirdCampExploration( + campaign: CampaignState +) { + const settlement = + campaign.battleHistory[thirdCampExplorationSourceBattleId]; + const report = campaign.firstBattleReport; + return ( + campaign.step === 'third-camp' && + campaign.latestBattleId === + thirdCampExplorationSourceBattleId && + settlement?.battleId === + thirdCampExplorationSourceBattleId && + settlement.outcome === 'victory' && + report?.battleId === thirdCampExplorationSourceBattleId && + report.outcome === 'victory' && + hasThirdCampPreparationSourceVictory(campaign) && + Boolean(resolveThirdCampExplorationDefinition(campaign)) + ); +} + +function hasCompletedCompanionActivity(campaign: CampaignState) { + if ( + campaign.completedCampVisits.includes( + thirdCampExplorationActivityProgressId('companion') + ) + ) { + return true; + } + const dialogue = resolveThirdCampCompanionDialogue(campaign); + return Boolean( + dialogue && + campaign.completedCampDialogues.includes(dialogue.id) + ); +} + +function persistActivitySelection( + current: CampaignState, + activityId: ThirdCampExplorationActivityId, + rollbackSnapshot: CampaignState = current +) { + const activityMarker = + thirdCampExplorationActivityProgressId(activityId); + let updated = withVisitMarkers(current, [ + thirdCampExplorationVisitId, + activityMarker + ]); + updated = { + ...updated, + acknowledgedVictoryRewardCategories: + acknowledgedRewardCategoryForActivity(updated, activityId), + thirdCampPreparationSelection: { + sourceBattleId: thirdCampPreparationSourceBattleId, + targetBattleId: thirdCampPreparationTargetBattleId, + priorityId: activityId + } + }; + return persistCampaign(updated, rollbackSnapshot); +} + +function acknowledgedRewardCategoryForActivity( + campaign: CampaignState, + activityId: ThirdCampExplorationActivityId +) { + const category: 'unlocks' | 'equipment' | undefined = + activityId === 'information' + ? 'unlocks' + : activityId === 'equipment' + ? 'equipment' + : undefined; + if (!category) { + return campaign.acknowledgedVictoryRewardCategories; + } + const previous = + campaign.acknowledgedVictoryRewardCategories[ + thirdCampExplorationSourceBattleId + ] ?? []; + return { + ...campaign.acknowledgedVictoryRewardCategories, + [thirdCampExplorationSourceBattleId]: Array.from( + new Set([...previous, category]) + ) + }; +} + +function withVisitMarkers( + campaign: CampaignState, + markerIds: readonly string[] +): CampaignState { + const completedCampVisits = Array.from( + new Set([...campaign.completedCampVisits, ...markerIds]) + ); + return { + ...campaign, + completedCampVisits, + ...(campaign.firstBattleReport + ? { + firstBattleReport: { + ...campaign.firstBattleReport, + completedCampVisits: Array.from( + new Set([ + ...campaign.firstBattleReport.completedCampVisits, + ...markerIds + ]) + ) + } + } + : {}) + }; +} + +function selectedMemory( + campaign: CampaignState, + activityId: ThirdCampExplorationActivityId +) { + const memory = resolveThirdCampPreparationMemory({ + campaign, + battleId: thirdCampPreparationTargetBattleId + }); + return memory?.priorityId === activityId ? memory : undefined; +} + +function applyCompanionBondReward( + snapshot: CampaignState, + dialogue: ThirdCampCompanionDialogueDefinition, + choice: ThirdCampCompanionDialogueChoice +) { + try { + const rewardExp = dialogue.rewardExp + choice.rewardExp; + const report = applyCampBondExp( + dialogue.id, + dialogue.bondId, + rewardExp, + choice.id + ); + if (!report) { + restoreCampaignSnapshot(snapshot); + } + return report; + } catch { + restoreCampaignSnapshot(snapshot); + return undefined; + } +} + +function readCampaignSnapshot() { + try { + return getCampaignState(); + } catch { + return undefined; + } +} + +function persistCampaign( + updated: CampaignState, + rollbackSnapshot: CampaignState +) { + try { + return setCampaignState(updated); + } catch { + restoreCampaignSnapshot(rollbackSnapshot); + return undefined; + } +} + +function restoreCampaignSnapshot(snapshot: CampaignState) { + try { + setCampaignState(snapshot); + } catch { + // setCampaignState restores the in-memory snapshot before persistence. + } +}