Android build v1.1.33
This commit is contained in:
@@ -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
|
||||
}
|
||||
@@ -45,6 +45,7 @@ import {
|
||||
IWT2_BARKSKIN_HOT_BONUS_BUFF_ID,
|
||||
IWT2_SUN_WARD_DAMAGE_REDUCTION_BUFF_ID,
|
||||
} from '../content/roguelike'
|
||||
import { createIwt2PvpNormalizedGearProgress } from '../content/pvpGearNormalization'
|
||||
|
||||
type ArenaStatus = 'playing' | 'paused' | 'victory' | 'defeat'
|
||||
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) {
|
||||
const bossMetadata = IWT2_BOSS_METADATA[bossId]
|
||||
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 difficultyHealthScale = difficulty?.healthMultiplier ?? 1
|
||||
const difficultyDamageScale = difficulty?.damageMultiplier ?? 1
|
||||
@@ -115,17 +121,19 @@ export function BossArenaScreen({ bossId, bossIds, difficulty, modeLabel, save,
|
||||
combinedDamageScale,
|
||||
roguelikeBuffs,
|
||||
createPressureState(roguelikeStage, roguelikeContentType),
|
||||
pveGearActive ? save.gearProgress : undefined,
|
||||
activeGearProgress,
|
||||
arenaBounds,
|
||||
))
|
||||
const [opponentArenaState, setOpponentArenaState] = useState<Iwt2ArenaState | null>(() => (
|
||||
pvpRoguelike
|
||||
? createInitialIwt2ArenaState(
|
||||
? createArenaState(
|
||||
bossId,
|
||||
bossIds,
|
||||
combinedBossHealthScale,
|
||||
combinedDamageScale,
|
||||
EMPTY_ROGUELIKE_BUFFS,
|
||||
createPressureState(roguelikeStage, roguelikeContentType),
|
||||
activeGearProgress,
|
||||
arenaBounds,
|
||||
)
|
||||
: null
|
||||
@@ -189,16 +197,18 @@ export function BossArenaScreen({ bossId, bossIds, difficulty, modeLabel, save,
|
||||
combinedDamageScale,
|
||||
roguelikeBuffs,
|
||||
pressureState,
|
||||
pveGearActive ? save.gearProgress : undefined,
|
||||
activeGearProgress,
|
||||
arenaBounds,
|
||||
)
|
||||
const nextOpponentState = pvpRoguelike
|
||||
? createInitialIwt2ArenaState(
|
||||
? createArenaState(
|
||||
bossId,
|
||||
bossIds,
|
||||
combinedBossHealthScale,
|
||||
combinedDamageScale,
|
||||
EMPTY_ROGUELIKE_BUFFS,
|
||||
pressureState,
|
||||
activeGearProgress,
|
||||
arenaBounds,
|
||||
)
|
||||
: null
|
||||
@@ -214,7 +224,7 @@ export function BossArenaScreen({ bossId, bossIds, difficulty, modeLabel, save,
|
||||
setPetAwards([])
|
||||
setSelectedOverlayAction('primary')
|
||||
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'>) => {
|
||||
setSelectedOverlayAction('primary')
|
||||
@@ -231,10 +241,10 @@ export function BossArenaScreen({ bossId, bossIds, difficulty, modeLabel, save,
|
||||
() => {
|
||||
const baseAbilities = abilitiesForHealer(
|
||||
save.character.healerStyle,
|
||||
pveGearActive ? save.gearProgress.healer.infusionAbilityId : null,
|
||||
activeGearProgress?.healer.infusionAbilityId ?? null,
|
||||
)
|
||||
const gearAbilities = pveGearActive
|
||||
? applyIwt2PveGearToHealerAbilities(baseAbilities, save.gearProgress)
|
||||
const gearAbilities = activeGearProgress
|
||||
? applyIwt2PveGearToHealerAbilities(baseAbilities, activeGearProgress)
|
||||
: baseAbilities
|
||||
return applyRoguelikeModifiers(
|
||||
gearAbilities,
|
||||
@@ -242,7 +252,7 @@ export function BossArenaScreen({ bossId, bossIds, difficulty, modeLabel, save,
|
||||
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) => {
|
||||
|
||||
Reference in New Issue
Block a user