diff --git a/src/game/data/battles.ts b/src/game/data/battles.ts index 169b666..4195425 100644 --- a/src/game/data/battles.ts +++ b/src/game/data/battles.ts @@ -389,7 +389,7 @@ export const firstBattleScenario: BattleScenarioDefinition = { bonds: firstBattleBonds, mapTextureKey: 'battle-map-first', leaderUnitId: 'rebel-leader', - quickVictoryTurnLimit: 8, + quickVictoryTurnLimit: 14, baseVictoryGold: 300, objectives: [ { @@ -416,9 +416,9 @@ export const firstBattleScenario: BattleScenarioDefinition = { { id: 'quick', kind: 'quick-victory', - label: '8턴 안에 승리', + label: '14턴 이내 승리', rewardGold: 120, - maxTurn: 8 + maxTurn: 14 } ], defeatConditions: [{ kind: 'unit-defeated', unitId: 'liu-bei' }], @@ -488,14 +488,14 @@ export const thirdBattleScenario: BattleScenarioDefinition = { openingObjectiveLines: [ '황건 전령 마원이 광종 본대로 향하고 있습니다. 마원을 격파하면 적의 연락망이 끊어집니다.', '강가 길목과 요새 주변의 궁병을 방치하면 전선이 오래 묶입니다. 지형 보정을 살펴 진군하십시오.', - '14턴 이내에 승리하면 광종 구원로 확보 명성이 오릅니다.' + '18턴 이내에 승리하면 광종 구원로 확보 명성이 오릅니다.' ], map: thirdBattleMap, units: thirdBattleUnits, bonds: thirdBattleBonds, mapTextureKey: 'battle-map-third', leaderUnitId: 'guangzong-leader-ma-yuan', - quickVictoryTurnLimit: 14, + quickVictoryTurnLimit: 18, baseVictoryGold: 520, objectives: [ { @@ -522,9 +522,9 @@ export const thirdBattleScenario: BattleScenarioDefinition = { { id: 'quick', kind: 'quick-victory', - label: '14턴 이내 승리', + label: '18턴 이내 승리', rewardGold: 180, - maxTurn: 14 + maxTurn: 18 } ], defeatConditions: [{ kind: 'unit-defeated', unitId: 'liu-bei' }], diff --git a/src/game/scenes/BattleScene.ts b/src/game/scenes/BattleScene.ts index d0da6e8..e50595c 100644 --- a/src/game/scenes/BattleScene.ts +++ b/src/game/scenes/BattleScene.ts @@ -3192,11 +3192,6 @@ export class BattleScene extends Phaser.Scene { color: '#9aa3ad', wordWrap: { width: panelWidth - 48, useAdvancedWrap: true } }); - this.add.text(panelX + 24, panelY + panelHeight - 172, '가장자리 커서 / 미니맵 클릭으로 시야 이동', { - fontFamily: '"Malgun Gothic", "Noto Sans KR", sans-serif', - fontSize: '14px', - color: '#9aa3ad' - }); this.updateObjectiveTracker(); this.drawMiniMap(); } @@ -3511,20 +3506,20 @@ export class BattleScene extends Phaser.Scene { this.layout.tileSize, this.layout.tileSize, palette.blue, - 0.24 + 0.34 ); marker.setData('tileX', x); marker.setData('tileY', y); marker.setOrigin(0); - marker.setStrokeStyle(1, palette.blue, 0.68); + marker.setStrokeStyle(2, palette.blue, 0.84); marker.setDepth(4); if (this.mapMask) { marker.setMask(this.mapMask); } marker.setVisible(this.isTileVisible(x, y)); marker.setInteractive({ useHandCursor: true }); - marker.on('pointerover', () => marker.setFillStyle(palette.blue, 0.36)); - marker.on('pointerout', () => marker.setFillStyle(palette.blue, 0.24)); + marker.on('pointerover', () => marker.setFillStyle(palette.blue, 0.48)); + marker.on('pointerout', () => marker.setFillStyle(palette.blue, 0.34)); marker.on('pointerdown', (pointer: Phaser.Input.Pointer) => { if (pointer.leftButtonDown()) { this.moveSelectedUnit(x, y, pointer); @@ -9421,6 +9416,10 @@ export class BattleScene extends Phaser.Scene { return this.layout.panelY + 152; } + private sideContentBottom(padding = 16) { + return (this.miniMapLayout?.y ?? this.layout.panelY + this.layout.panelHeight - 140) - padding; + } + private renderBondPanel(message?: string) { this.clearSidePanelContent(); const { panelX, panelWidth } = this.layout; @@ -9905,6 +9904,11 @@ export class BattleScene extends Phaser.Scene { this.renderStatRow(stat.label, unit.stats[stat.key], left, statTop + index * 28, width); }); + if (message) { + this.renderPanelMessage(message, left, top + 306, width, 66); + return; + } + const positionText = `위치 ${unit.x + 1}, ${unit.y + 1} / ${terrainRule.label} ${terrainRating}%${acted ? ' / 행동완료' : ''}`; this.trackSideObject(this.add.text(left, top + 306, positionText, { fontFamily: '"Malgun Gothic", "Noto Sans KR", sans-serif', @@ -9913,10 +9917,6 @@ export class BattleScene extends Phaser.Scene { })); this.renderEquipmentSummary(unit, left, top + 330, width); - - if (message) { - this.renderPanelMessage(message, left, top + 440, width, 50); - } } private renderEquipmentSummary(unit: UnitData, x: number, y: number, width: number) { @@ -10072,16 +10072,19 @@ export class BattleScene extends Phaser.Scene { } private renderPanelMessage(text: string, x: number, y: number, width: number, height = 74) { - const bg = this.trackSideObject(this.add.rectangle(x, y, width, height, 0x101820, 0.72)); + const safeY = Math.max(this.sideContentTop(), Math.min(y, this.sideContentBottom() - height)); + const bg = this.trackSideObject(this.add.rectangle(x, safeY, width, height, 0x101820, 0.82)); bg.setOrigin(0); bg.setStrokeStyle(1, 0x53606c, 0.42); - this.trackSideObject(this.add.text(x + 12, y + 10, text, { + const messageText = this.trackSideObject(this.add.text(x + 12, safeY + 10, text, { fontFamily: '"Malgun Gothic", "Noto Sans KR", sans-serif', fontSize: height < 60 ? '13px' : '15px', color: '#d4dce6', wordWrap: { width: width - 24, useAdvancedWrap: true }, lineSpacing: height < 60 ? 2 : 4 })); + bg.setDepth(32); + messageText.setDepth(33); } private returnToRosterPanel(tab: RosterTab) {