Android build v1.1.20

This commit is contained in:
Warren H
2026-07-04 21:15:04 -04:00
parent bdae0007a1
commit 81d65bc381
7 changed files with 72 additions and 55 deletions
+11 -7
View File
@@ -65,9 +65,10 @@ type BossArenaScreenProps = {
export function BossArenaScreen({ bossId, bossIds, modeLabel, save, onBack, onSaveUpdated, roguelikeRun }: BossArenaScreenProps) {
const bossMetadata = IWT2_BOSS_METADATA[bossId]
const pvpRoguelike = roguelikeRun?.variant === 'pvp'
const [arenaState, setArenaState] = useState<Iwt2ArenaState>(() => createInitialIwt2ArenaState(bossId, bossIds))
const bossHealthScale = roguelikeRun ? roguelikeBossHealthScale(roguelikeRun.stage) : 1
const [arenaState, setArenaState] = useState<Iwt2ArenaState>(() => createInitialIwt2ArenaState(bossId, bossIds, bossHealthScale))
const [opponentArenaState, setOpponentArenaState] = useState<Iwt2ArenaState | null>(() => (
pvpRoguelike ? createInitialIwt2ArenaState(bossId, bossIds) : null
pvpRoguelike ? createInitialIwt2ArenaState(bossId, bossIds, bossHealthScale) : null
))
const [abilityCooldowns, setAbilityCooldowns] = useState<Record<string, number>>({})
const [status, setStatus] = useState<ArenaStatus>('playing')
@@ -118,8 +119,8 @@ export function BossArenaScreen({ bossId, bossIds, modeLabel, save, onBack, onSa
}, [save])
const resetArena = useCallback(() => {
const next = createInitialIwt2ArenaState(bossId, bossIds)
const nextOpponentState = pvpRoguelike ? createInitialIwt2ArenaState(bossId, bossIds) : null
const next = createInitialIwt2ArenaState(bossId, bossIds, bossHealthScale)
const nextOpponentState = pvpRoguelike ? createInitialIwt2ArenaState(bossId, bossIds, bossHealthScale) : null
recordedKillIdsRef.current = new Set()
abilityCooldownsRef.current = {}
lastHudSignatureRef.current = arenaHudSignature(next)
@@ -130,7 +131,7 @@ export function BossArenaScreen({ bossId, bossIds, modeLabel, save, onBack, onSa
setAbilityCooldowns({})
setSelectedOverlayAction('primary')
setStatus('playing')
}, [bossId, bossIds, pvpRoguelike])
}, [bossHealthScale, bossId, bossIds, pvpRoguelike])
const showOverlay = useCallback((nextStatus: Exclude<ArenaStatus, 'playing'>) => {
setSelectedOverlayAction('primary')
@@ -206,7 +207,6 @@ export function BossArenaScreen({ bossId, bossIds, modeLabel, save, onBack, onSa
}
if (action === 'back') {
if (statusRef.current === 'paused') setStatus('playing')
else onBack()
return
}
}
@@ -481,7 +481,7 @@ export function BossArenaScreen({ bossId, bossIds, modeLabel, save, onBack, onSa
</button>
</div>
{lastDevice === 'controller' && (
<small className="iwt2-result-hint">D-pad selects, A confirms, B exits</small>
<small className="iwt2-result-hint">D-pad selects, A confirms</small>
)}
</div>
</div>
@@ -506,6 +506,10 @@ function formatArenaTime(seconds: number): string {
return `${minutes}:${remainder.toString().padStart(2, '0')}`
}
function roguelikeBossHealthScale(stage: number): number {
return 0.5 + Math.max(0, stage - 1) * 0.1
}
function arenaHudSignature(state: Iwt2ArenaState): string {
return [
...state.bosses.map((boss) => [