From 948f3c08321929a75a64596332a1dbebb508883e Mon Sep 17 00:00:00 2001 From: Wickedness Date: Mon, 6 Jul 2026 10:41:40 +0900 Subject: [PATCH] Stabilize early battle QA pacing --- scripts/qa-repeat.mjs | 5 ++- src/game/data/battles.ts | 16 ++++---- src/game/data/scenario.ts | 78 +++++++++++++++++++-------------------- 3 files changed, 50 insertions(+), 49 deletions(-) diff --git a/scripts/qa-repeat.mjs b/scripts/qa-repeat.mjs index 9f68bfe..c67aee4 100644 --- a/scripts/qa-repeat.mjs +++ b/scripts/qa-repeat.mjs @@ -67,11 +67,12 @@ function buildAggregateReport(reports) { for (const { run, report } of reports) { for (const result of report.results ?? []) { - const outcomeKey = `${result.no}:${result.id}:${result.outcome}`; + const outcome = result.outcome ?? 'unknown'; + const outcomeKey = `${result.no}:${result.id}:${outcome}`; battleOutcomes.set(outcomeKey, { battleNo: result.no, battleId: result.id, - outcome: result.outcome, + outcome, count: (battleOutcomes.get(outcomeKey)?.count ?? 0) + 1 }); diff --git a/src/game/data/battles.ts b/src/game/data/battles.ts index 8864f82..249d103 100644 --- a/src/game/data/battles.ts +++ b/src/game/data/battles.ts @@ -760,7 +760,7 @@ export const fourthBattleScenario: BattleScenarioDefinition = { openingObjectiveLines: [ '황건 본영의 중심에는 장각이 있습니다. 장각을 격파하면 광종의 황건 세력은 무너집니다.', '요새와 숲의 궁병이 진입로를 막고 있습니다. 측면의 기병과 중앙 수비병을 나누어 상대하십시오.', - '16턴 이내에 승리하면 황건적 토벌의 공적이 크게 오릅니다.' + '18턴 이내에 승리하면 황건적 토벌의 공적이 크게 오릅니다.' ], tacticalGuide: { summary: '광종 본영 깊숙한 곳에서 장각을 직접 격파해 황건 토벌을 마무리하는 전투입니다.', @@ -813,7 +813,7 @@ export const fourthBattleScenario: BattleScenarioDefinition = { bonds: fourthBattleBonds, mapTextureKey: 'battle-map-fourth', leaderUnitId: 'guangzong-main-leader-zhang-jue', - quickVictoryTurnLimit: 16, + quickVictoryTurnLimit: 18, baseVictoryGold: 700, objectives: [ { @@ -842,9 +842,9 @@ export const fourthBattleScenario: BattleScenarioDefinition = { { id: 'quick', kind: 'quick-victory', - label: '16턴 이내 승리', + label: '18턴 이내 승리', rewardGold: 220, - maxTurn: 16 + maxTurn: 18 } ], defeatConditions: [{ kind: 'unit-defeated', unitId: 'liu-bei' }], @@ -1087,7 +1087,7 @@ export const seventhBattleScenario: BattleScenarioDefinition = { openingObjectiveLines: [ '조조군 선봉 하후돈이 서주 피난로와 마을을 압박하고 있습니다. 하후돈을 격파하면 서주 성문까지 길을 열 수 있습니다.', '강가 궁병은 자리를 지키고, 기병은 길을 따라 빠르게 추격합니다. 마을을 확보하며 선봉을 단계적으로 끊어 내십시오.', - '35턴 이내에 승리하면 도겸과 서주 백성의 신뢰가 크게 오릅니다.' + '42턴 이내에 승리하면 도겸과 서주 백성의 신뢰가 크게 오릅니다.' ], sortie: { sortieLimit: 3, @@ -1140,7 +1140,7 @@ export const seventhBattleScenario: BattleScenarioDefinition = { bonds: seventhBattleBonds, mapTextureKey: 'battle-map-seventh', leaderUnitId: 'xuzhou-leader-xiahou-dun', - quickVictoryTurnLimit: 35, + quickVictoryTurnLimit: 42, baseVictoryGold: 960, objectives: [ { @@ -1169,9 +1169,9 @@ export const seventhBattleScenario: BattleScenarioDefinition = { { id: 'quick', kind: 'quick-victory', - label: '35턴 이내 승리', + label: '42턴 이내 승리', rewardGold: 270, - maxTurn: 35 + maxTurn: 42 } ], defeatConditions: [{ kind: 'unit-defeated', unitId: 'liu-bei' }], diff --git a/src/game/data/scenario.ts b/src/game/data/scenario.ts index 87b7c12..6139cc8 100644 --- a/src/game/data/scenario.ts +++ b/src/game/data/scenario.ts @@ -6654,9 +6654,9 @@ export const seventhBattleUnits: UnitData[] = [ classKey: 'bandit', level: 7, exp: 42, - hp: 34, - maxHp: 34, - attack: 12, + hp: 30, + maxHp: 30, + attack: 10, move: 4, stats: { might: 74, intelligence: 48, leadership: 54, agility: 70, luck: 52 }, equipment: { @@ -6675,9 +6675,9 @@ export const seventhBattleUnits: UnitData[] = [ classKey: 'yellowTurban', level: 7, exp: 42, - hp: 39, - maxHp: 39, - attack: 12, + hp: 34, + maxHp: 34, + attack: 10, move: 3, stats: { might: 77, intelligence: 48, leadership: 64, agility: 58, luck: 52 }, equipment: { @@ -6696,9 +6696,9 @@ export const seventhBattleUnits: UnitData[] = [ classKey: 'archer', level: 7, exp: 44, - hp: 31, - maxHp: 31, - attack: 11, + hp: 26, + maxHp: 26, + attack: 9, move: 3, stats: { might: 69, intelligence: 58, leadership: 58, agility: 68, luck: 52 }, equipment: { @@ -6717,9 +6717,9 @@ export const seventhBattleUnits: UnitData[] = [ classKey: 'cavalry', level: 8, exp: 46, - hp: 39, - maxHp: 39, - attack: 12, + hp: 34, + maxHp: 34, + attack: 10, move: 4, stats: { might: 79, intelligence: 46, leadership: 63, agility: 79, luck: 54 }, equipment: { @@ -6738,9 +6738,9 @@ export const seventhBattleUnits: UnitData[] = [ classKey: 'bandit', level: 7, exp: 44, - hp: 35, - maxHp: 35, - attack: 13, + hp: 30, + maxHp: 30, + attack: 10, move: 4, stats: { might: 76, intelligence: 49, leadership: 55, agility: 71, luck: 53 }, equipment: { @@ -6759,9 +6759,9 @@ export const seventhBattleUnits: UnitData[] = [ classKey: 'archer', level: 8, exp: 46, - hp: 29, - maxHp: 29, - attack: 10, + hp: 23, + maxHp: 23, + attack: 8, move: 3, stats: { might: 68, intelligence: 60, leadership: 58, agility: 68, luck: 53 }, equipment: { @@ -6780,9 +6780,9 @@ export const seventhBattleUnits: UnitData[] = [ classKey: 'cavalry', level: 8, exp: 48, - hp: 39, - maxHp: 39, - attack: 12, + hp: 33, + maxHp: 33, + attack: 10, move: 4, stats: { might: 79, intelligence: 47, leadership: 64, agility: 79, luck: 54 }, equipment: { @@ -6801,9 +6801,9 @@ export const seventhBattleUnits: UnitData[] = [ classKey: 'yellowTurban', level: 8, exp: 48, - hp: 39, - maxHp: 39, - attack: 11, + hp: 32, + maxHp: 32, + attack: 9, move: 3, stats: { might: 80, intelligence: 50, leadership: 67, agility: 60, luck: 53 }, equipment: { @@ -6822,9 +6822,9 @@ export const seventhBattleUnits: UnitData[] = [ classKey: 'cavalry', level: 8, exp: 50, - hp: 40, - maxHp: 40, - attack: 11, + hp: 32, + maxHp: 32, + attack: 9, move: 4, stats: { might: 80, intelligence: 47, leadership: 65, agility: 80, luck: 55 }, equipment: { @@ -6843,9 +6843,9 @@ export const seventhBattleUnits: UnitData[] = [ classKey: 'yellowTurban', level: 8, exp: 50, - hp: 39, - maxHp: 39, - attack: 11, + hp: 32, + maxHp: 32, + attack: 9, move: 3, stats: { might: 81, intelligence: 50, leadership: 68, agility: 60, luck: 54 }, equipment: { @@ -6854,7 +6854,7 @@ export const seventhBattleUnits: UnitData[] = [ accessory: { itemId: 'yellow-scarf-charm', level: 1, exp: 0 } }, x: 17, - y: 3 + y: 4 }, { id: 'xuzhou-archer-c', @@ -6864,9 +6864,9 @@ export const seventhBattleUnits: UnitData[] = [ classKey: 'archer', level: 8, exp: 50, - hp: 30, - maxHp: 30, - attack: 10, + hp: 22, + maxHp: 22, + attack: 8, move: 3, stats: { might: 69, intelligence: 61, leadership: 59, agility: 69, luck: 54 }, equipment: { @@ -6875,7 +6875,7 @@ export const seventhBattleUnits: UnitData[] = [ accessory: { itemId: 'wind-quiver', level: 1, exp: 0 } }, x: 15, - y: 1 + y: 3 }, { id: 'xuzhou-leader-xiahou-dun', @@ -6885,9 +6885,9 @@ export const seventhBattleUnits: UnitData[] = [ classKey: 'rebelLeader', level: 9, exp: 54, - hp: 54, - maxHp: 54, - attack: 14, + hp: 48, + maxHp: 48, + attack: 12, move: 4, stats: { might: 88, intelligence: 66, leadership: 82, agility: 66, luck: 58 }, equipment: { @@ -6896,7 +6896,7 @@ export const seventhBattleUnits: UnitData[] = [ accessory: { itemId: 'war-manual', level: 1, exp: 0 } }, x: 16, - y: 1 + y: 2 } ];