Android build v1.1.33

This commit is contained in:
Warren H
2026-07-07 16:41:45 -04:00
parent ff64c6ddcc
commit 679900e7f5
7 changed files with 56 additions and 12 deletions
Binary file not shown.
Binary file not shown.
Binary file not shown.
+2 -2
View File
@@ -7,8 +7,8 @@ android {
applicationId "com.warren.iwanttoheal" applicationId "com.warren.iwanttoheal"
minSdkVersion rootProject.ext.minSdkVersion minSdkVersion rootProject.ext.minSdkVersion
targetSdkVersion rootProject.ext.targetSdkVersion targetSdkVersion rootProject.ext.targetSdkVersion
versionCode 113 versionCode 114
versionName "1.1.32" versionName "1.1.33"
testInstrumentationRunner "androidx.test.runner.AndroidJUnitRunner" testInstrumentationRunner "androidx.test.runner.AndroidJUnitRunner"
aaptOptions { aaptOptions {
// Files and dirs to omit from the packaged assets dir, modified to accommodate modern web apps. // Files and dirs to omit from the packaged assets dir, modified to accommodate modern web apps.
@@ -0,0 +1,34 @@
import { IWT2_PARTY_ORDER } from './classes'
import {
IWT2_GEAR_SLOTS,
type Iwt2GearLevel,
type Iwt2GearProgress,
} from './gear'
export type Iwt2PvpGearNormalizationConfig = {
enabled: boolean
gearLevel: Iwt2GearLevel
}
export const IWT2_PVP_GEAR_NORMALIZATION: Iwt2PvpGearNormalizationConfig = {
enabled: true,
gearLevel: 5,
}
export function createIwt2PvpNormalizedGearProgress(
config = IWT2_PVP_GEAR_NORMALIZATION,
): Iwt2GearProgress | undefined {
if (!config.enabled) return undefined
return Object.fromEntries(
IWT2_PARTY_ORDER.map((classId) => [
classId,
{
slots: Object.fromEntries(
IWT2_GEAR_SLOTS.map((slotId) => [slotId, { level: config.gearLevel }]),
),
infusionAbilityId: null,
},
]),
) as Iwt2GearProgress
}
+20 -10
View File
@@ -45,6 +45,7 @@ import {
IWT2_BARKSKIN_HOT_BONUS_BUFF_ID, IWT2_BARKSKIN_HOT_BONUS_BUFF_ID,
IWT2_SUN_WARD_DAMAGE_REDUCTION_BUFF_ID, IWT2_SUN_WARD_DAMAGE_REDUCTION_BUFF_ID,
} from '../content/roguelike' } from '../content/roguelike'
import { createIwt2PvpNormalizedGearProgress } from '../content/pvpGearNormalization'
type ArenaStatus = 'playing' | 'paused' | 'victory' | 'defeat' type ArenaStatus = 'playing' | 'paused' | 'victory' | 'defeat'
type OverlayAction = 'primary' | 'requeue' | 'menu' type OverlayAction = 'primary' | 'requeue' | 'menu'
@@ -92,7 +93,12 @@ type BossArenaScreenProps = {
export function BossArenaScreen({ bossId, bossIds, difficulty, modeLabel, save, onBack, onMainMenu, onPvpRequeue, onSaveUpdated, roguelikeRun }: BossArenaScreenProps) { export function BossArenaScreen({ bossId, bossIds, difficulty, modeLabel, save, onBack, onMainMenu, onPvpRequeue, onSaveUpdated, roguelikeRun }: BossArenaScreenProps) {
const bossMetadata = IWT2_BOSS_METADATA[bossId] const bossMetadata = IWT2_BOSS_METADATA[bossId]
const pvpRoguelike = roguelikeRun?.variant === 'pvp' const pvpRoguelike = roguelikeRun?.variant === 'pvp'
const pveGearActive = roguelikeRun?.variant !== 'pvp' const pvpNormalizedGearProgress = useMemo(() => createIwt2PvpNormalizedGearProgress(), [])
const activeGearProgress = pvpRoguelike
? pvpNormalizedGearProgress
: roguelikeRun?.variant !== 'pvp'
? save.gearProgress
: undefined
const bossHealthScale = roguelikeRun ? roguelikeBossHealthScale(roguelikeRun.stage) : 1 const bossHealthScale = roguelikeRun ? roguelikeBossHealthScale(roguelikeRun.stage) : 1
const difficultyHealthScale = difficulty?.healthMultiplier ?? 1 const difficultyHealthScale = difficulty?.healthMultiplier ?? 1
const difficultyDamageScale = difficulty?.damageMultiplier ?? 1 const difficultyDamageScale = difficulty?.damageMultiplier ?? 1
@@ -115,17 +121,19 @@ export function BossArenaScreen({ bossId, bossIds, difficulty, modeLabel, save,
combinedDamageScale, combinedDamageScale,
roguelikeBuffs, roguelikeBuffs,
createPressureState(roguelikeStage, roguelikeContentType), createPressureState(roguelikeStage, roguelikeContentType),
pveGearActive ? save.gearProgress : undefined, activeGearProgress,
arenaBounds, arenaBounds,
)) ))
const [opponentArenaState, setOpponentArenaState] = useState<Iwt2ArenaState | null>(() => ( const [opponentArenaState, setOpponentArenaState] = useState<Iwt2ArenaState | null>(() => (
pvpRoguelike pvpRoguelike
? createInitialIwt2ArenaState( ? createArenaState(
bossId, bossId,
bossIds, bossIds,
combinedBossHealthScale, combinedBossHealthScale,
combinedDamageScale, combinedDamageScale,
EMPTY_ROGUELIKE_BUFFS,
createPressureState(roguelikeStage, roguelikeContentType), createPressureState(roguelikeStage, roguelikeContentType),
activeGearProgress,
arenaBounds, arenaBounds,
) )
: null : null
@@ -189,16 +197,18 @@ export function BossArenaScreen({ bossId, bossIds, difficulty, modeLabel, save,
combinedDamageScale, combinedDamageScale,
roguelikeBuffs, roguelikeBuffs,
pressureState, pressureState,
pveGearActive ? save.gearProgress : undefined, activeGearProgress,
arenaBounds, arenaBounds,
) )
const nextOpponentState = pvpRoguelike const nextOpponentState = pvpRoguelike
? createInitialIwt2ArenaState( ? createArenaState(
bossId, bossId,
bossIds, bossIds,
combinedBossHealthScale, combinedBossHealthScale,
combinedDamageScale, combinedDamageScale,
EMPTY_ROGUELIKE_BUFFS,
pressureState, pressureState,
activeGearProgress,
arenaBounds, arenaBounds,
) )
: null : null
@@ -214,7 +224,7 @@ export function BossArenaScreen({ bossId, bossIds, difficulty, modeLabel, save,
setPetAwards([]) setPetAwards([])
setSelectedOverlayAction('primary') setSelectedOverlayAction('primary')
setStatus('playing') setStatus('playing')
}, [arenaBounds, bossId, bossIds, combinedBossHealthScale, combinedDamageScale, pveGearActive, pvpRoguelike, roguelikeBuffs, roguelikeContentType, roguelikeStage, save.gearProgress]) }, [activeGearProgress, arenaBounds, bossId, bossIds, combinedBossHealthScale, combinedDamageScale, pvpRoguelike, roguelikeBuffs, roguelikeContentType, roguelikeStage])
const showOverlay = useCallback((nextStatus: Exclude<ArenaStatus, 'playing'>) => { const showOverlay = useCallback((nextStatus: Exclude<ArenaStatus, 'playing'>) => {
setSelectedOverlayAction('primary') setSelectedOverlayAction('primary')
@@ -231,10 +241,10 @@ export function BossArenaScreen({ bossId, bossIds, difficulty, modeLabel, save,
() => { () => {
const baseAbilities = abilitiesForHealer( const baseAbilities = abilitiesForHealer(
save.character.healerStyle, save.character.healerStyle,
pveGearActive ? save.gearProgress.healer.infusionAbilityId : null, activeGearProgress?.healer.infusionAbilityId ?? null,
) )
const gearAbilities = pveGearActive const gearAbilities = activeGearProgress
? applyIwt2PveGearToHealerAbilities(baseAbilities, save.gearProgress) ? applyIwt2PveGearToHealerAbilities(baseAbilities, activeGearProgress)
: baseAbilities : baseAbilities
return applyRoguelikeModifiers( return applyRoguelikeModifiers(
gearAbilities, gearAbilities,
@@ -242,7 +252,7 @@ export function BossArenaScreen({ bossId, bossIds, difficulty, modeLabel, save,
roguelikeRun?.debuffs ?? [], roguelikeRun?.debuffs ?? [],
) )
}, },
[pveGearActive, roguelikeRun?.buffs, roguelikeRun?.debuffs, save.character.healerStyle, save.gearProgress], [activeGearProgress, roguelikeRun?.buffs, roguelikeRun?.debuffs, save.character.healerStyle],
) )
const castAbility = useCallback((ability: Iwt2HealerAbility) => { const castAbility = useCallback((ability: Iwt2HealerAbility) => {