Android build v1.1.23
This commit is contained in:
@@ -0,0 +1,121 @@
|
||||
import type { Iwt2BossId } from './bosses'
|
||||
import type { Iwt2PlayerClassId } from './classes'
|
||||
|
||||
export type Iwt2InfusionAbilityId =
|
||||
| 'healer-sanctuary'
|
||||
| 'healer-guardian-pulse'
|
||||
| 'healer-emergency-miracle'
|
||||
| 'paladin-unbreakable'
|
||||
| 'paladin-bulwark-field'
|
||||
| 'paladin-intercept'
|
||||
| 'ranger-decoy-companion'
|
||||
| 'ranger-pinning-volley'
|
||||
| 'ranger-hunters-mark'
|
||||
| 'mage-panic-blink'
|
||||
| 'mage-arcane-barrier'
|
||||
| 'mage-overcharge'
|
||||
| 'rogue-shadow-step'
|
||||
| 'rogue-vanish'
|
||||
| 'rogue-expose-weakness'
|
||||
| 'warrior-bladestorm'
|
||||
| 'warrior-iron-rush'
|
||||
| 'warrior-blood-rally'
|
||||
|
||||
export type Iwt2InfusionAbilityTrigger =
|
||||
| 'active'
|
||||
| 'danger'
|
||||
| 'passive'
|
||||
| 'postMechanic'
|
||||
| 'survival'
|
||||
|
||||
export type Iwt2InfusionAbilityEffectKey =
|
||||
| 'arcaneBarrier'
|
||||
| 'bladestorm'
|
||||
| 'bloodRally'
|
||||
| 'bulwarkField'
|
||||
| 'decoyCompanion'
|
||||
| 'emergencyMiracle'
|
||||
| 'exposeWeakness'
|
||||
| 'guardianPulse'
|
||||
| 'huntersMark'
|
||||
| 'intercept'
|
||||
| 'ironRush'
|
||||
| 'overcharge'
|
||||
| 'panicBlink'
|
||||
| 'pinningVolley'
|
||||
| 'sanctuary'
|
||||
| 'shadowStep'
|
||||
| 'unbreakable'
|
||||
| 'vanish'
|
||||
|
||||
export type Iwt2InfusionAbility = {
|
||||
id: Iwt2InfusionAbilityId
|
||||
classId: Iwt2PlayerClassId
|
||||
name: string
|
||||
icon: string
|
||||
linkedBossId: Iwt2BossId
|
||||
cooldownSeconds: number | null
|
||||
description: string
|
||||
trigger: Iwt2InfusionAbilityTrigger
|
||||
effectKey: Iwt2InfusionAbilityEffectKey
|
||||
slot: 6
|
||||
reuseTags: string[]
|
||||
}
|
||||
|
||||
export const IWT2_INFUSION_ABILITIES: Record<Iwt2InfusionAbilityId, Iwt2InfusionAbility> = {
|
||||
'healer-sanctuary': infusion('healer-sanctuary', 'healer', 'Sanctuary', 'S', 'rimebastion', 45, 'Place a safe zone that reduces hazard damage for party members inside it.', 'active', 'sanctuary', ['healer', 'hazard-counter', 'zone']),
|
||||
'healer-guardian-pulse': infusion('healer-guardian-pulse', 'healer', 'Guardian Pulse', 'G', 'khezu', 40, 'Shield the party after a major boss telegraph resolves.', 'postMechanic', 'guardianPulse', ['healer', 'shield', 'telegraph-counter']),
|
||||
'healer-emergency-miracle': infusion('healer-emergency-miracle', 'healer', 'Emergency Miracle', 'M', 'hollowcrown-revenant', 75, 'Auto-cast a large heal on the lowest-health ally at danger threshold.', 'survival', 'emergencyMiracle', ['healer', 'survival', 'auto-save']),
|
||||
'paladin-unbreakable': infusion('paladin-unbreakable', 'paladin', 'Unbreakable', 'U', 'bulldrome', null, 'Become immune to stuns and knockdowns.', 'passive', 'unbreakable', ['tank', 'control-immunity']),
|
||||
'paladin-bulwark-field': infusion('paladin-bulwark-field', 'paladin', 'Bulwark Field', 'B', 'barroth', 35, 'Nearby party members take reduced damage.', 'active', 'bulwarkField', ['tank', 'aura', 'damage-reduction']),
|
||||
'paladin-intercept': infusion('paladin-intercept', 'paladin', 'Intercept', 'I', 'obsidian-ram-golem', 30, 'Dash to an endangered party member and absorb the next hit.', 'danger', 'intercept', ['tank', 'dash', 'protection']),
|
||||
'ranger-decoy-companion': infusion('ranger-decoy-companion', 'ranger', 'Decoy Companion', 'D', 'great-jaggi', 60, 'Summon a pet that holds boss attention for 8 seconds.', 'active', 'decoyCompanion', ['ranged', 'summon', 'aggro-decoy']),
|
||||
'ranger-pinning-volley': infusion('ranger-pinning-volley', 'ranger', 'Pinning Volley', 'P', 'crystal-bat-matriarch', 35, 'Fire a periodic shot that briefly slows the boss.', 'active', 'pinningVolley', ['ranged', 'slow', 'projectile']),
|
||||
'ranger-hunters-mark': infusion('ranger-hunters-mark', 'ranger', "Hunter's Mark", 'H', 'cinderback-ricochet', 45, 'Mark a boss so ranged hits deal increased damage briefly.', 'active', 'huntersMark', ['ranged', 'debuff', 'damage-window']),
|
||||
'mage-panic-blink': infusion('mage-panic-blink', 'mage', 'Panic Blink', 'B', 'tobi-kadachi', 45, 'Teleport across the arena when danger scoring says the mage is trapped.', 'danger', 'panicBlink', ['caster', 'teleport', 'escape']),
|
||||
'mage-arcane-barrier': infusion('mage-arcane-barrier', 'mage', 'Arcane Barrier', 'A', 'rimebastion', 60, 'Gain a shield before a lethal hit.', 'survival', 'arcaneBarrier', ['caster', 'shield', 'survival']),
|
||||
'mage-overcharge': infusion('mage-overcharge', 'mage', 'Overcharge', 'O', 'stormcoil-wyrm', 40, 'Gain faster casts after avoiding a major mechanic.', 'postMechanic', 'overcharge', ['caster', 'haste', 'telegraph-reward']),
|
||||
'rogue-shadow-step': infusion('rogue-shadow-step', 'rogue', 'Shadow Step', 'S', 'ember-mantis-duelist', 30, 'Teleport to any party member, then gain 30% damage for 8 seconds.', 'active', 'shadowStep', ['melee', 'teleport', 'burst']),
|
||||
'rogue-vanish': infusion('rogue-vanish', 'rogue', 'Vanish', 'V', 'hollowcrown-revenant', 45, 'Drop boss focus and evade the next hit.', 'survival', 'vanish', ['melee', 'evade', 'survival']),
|
||||
'rogue-expose-weakness': infusion('rogue-expose-weakness', 'rogue', 'Expose Weakness', 'E', 'rathian', 35, 'Flanking attacks increase party damage briefly.', 'active', 'exposeWeakness', ['melee', 'debuff', 'flank']),
|
||||
'warrior-bladestorm': infusion('warrior-bladestorm', 'warrior', 'Bladestorm', 'B', 'bulldrome', 30, 'Spin for 5 seconds, damaging nearby enemies and taking 50% less damage.', 'active', 'bladestorm', ['melee', 'aoe', 'damage-reduction']),
|
||||
'warrior-iron-rush': infusion('warrior-iron-rush', 'warrior', 'Iron Rush', 'I', 'obsidian-ram-golem', 35, 'Charge through the boss with brief damage reduction.', 'active', 'ironRush', ['melee', 'charge', 'damage-reduction']),
|
||||
'warrior-blood-rally': infusion('warrior-blood-rally', 'warrior', 'Blood Rally', 'R', 'venom-orchid-hydra', 50, 'Gain damage when party health is low.', 'survival', 'bloodRally', ['melee', 'survival', 'damage-window']),
|
||||
}
|
||||
|
||||
export function iwt2InfusionAbilitiesForClass(classId: Iwt2PlayerClassId): Iwt2InfusionAbility[] {
|
||||
return Object.values(IWT2_INFUSION_ABILITIES).filter((ability) => ability.classId === classId)
|
||||
}
|
||||
|
||||
export function asIwt2InfusionAbilityId(value: unknown): Iwt2InfusionAbilityId | null {
|
||||
return typeof value === 'string' && value in IWT2_INFUSION_ABILITIES
|
||||
? value as Iwt2InfusionAbilityId
|
||||
: null
|
||||
}
|
||||
|
||||
function infusion(
|
||||
id: Iwt2InfusionAbilityId,
|
||||
classId: Iwt2PlayerClassId,
|
||||
name: string,
|
||||
icon: string,
|
||||
linkedBossId: Iwt2BossId,
|
||||
cooldownSeconds: number | null,
|
||||
description: string,
|
||||
trigger: Iwt2InfusionAbilityTrigger,
|
||||
effectKey: Iwt2InfusionAbilityEffectKey,
|
||||
reuseTags: string[],
|
||||
): Iwt2InfusionAbility {
|
||||
return {
|
||||
classId,
|
||||
cooldownSeconds,
|
||||
description,
|
||||
effectKey,
|
||||
icon,
|
||||
id,
|
||||
linkedBossId,
|
||||
name,
|
||||
reuseTags,
|
||||
slot: 6,
|
||||
trigger,
|
||||
}
|
||||
}
|
||||
Reference in New Issue
Block a user