Android build v1.1.16
This commit is contained in:
@@ -1,12 +1,18 @@
|
||||
import type { Spell } from '../../../game'
|
||||
import type { Ability } from '../../../profile'
|
||||
import { toCombatSpell } from '../../../combat/rules'
|
||||
|
||||
export type Iwt2AbilityTarget = 'party-member' | 'self' | 'ground'
|
||||
export type Iwt2HealerId = 'dawnweaver' | 'lifebinder' | 'runesage'
|
||||
|
||||
export type Iwt2HealerMetadata = {
|
||||
id: Iwt2HealerId
|
||||
name: string
|
||||
icon: string
|
||||
description: string
|
||||
}
|
||||
|
||||
export type Iwt2HealerAbility = {
|
||||
id: string
|
||||
healerId: string
|
||||
healerId: Iwt2HealerId
|
||||
slot: number
|
||||
name: string
|
||||
icon: string
|
||||
@@ -16,110 +22,95 @@ export type Iwt2HealerAbility = {
|
||||
manaCost: number
|
||||
cooldownSeconds: number
|
||||
target: Iwt2AbilityTarget
|
||||
extraTargets?: number
|
||||
}
|
||||
|
||||
const IWT1_DAWNWEAVER_ABILITIES: Ability[] = [
|
||||
{
|
||||
id: 1,
|
||||
classId: 1,
|
||||
slug: 'mend',
|
||||
name: 'Mend',
|
||||
spellType: 'direct_heal',
|
||||
cost: 5,
|
||||
cooldown: 0.5,
|
||||
power: 30,
|
||||
unlockLevel: 1,
|
||||
glyph: '+',
|
||||
description: 'A fast, efficient single-target heal.',
|
||||
export const IWT2_HEALER_METADATA: Record<Iwt2HealerId, Iwt2HealerMetadata> = {
|
||||
dawnweaver: {
|
||||
id: 'dawnweaver',
|
||||
name: 'Dawnweaver',
|
||||
icon: '+',
|
||||
description: 'Direct heals, radiant group recovery, shields, and cleanse.',
|
||||
},
|
||||
{
|
||||
id: 2,
|
||||
classId: 1,
|
||||
slug: 'renew',
|
||||
name: 'Renew',
|
||||
spellType: 'heal_over_time',
|
||||
cost: 7,
|
||||
cooldown: 0.5,
|
||||
power: 12,
|
||||
unlockLevel: 1,
|
||||
glyph: '~',
|
||||
description: 'Heals now and continues healing over time.',
|
||||
lifebinder: {
|
||||
id: 'lifebinder',
|
||||
name: 'Lifebinder',
|
||||
icon: '~',
|
||||
description: 'Verdant healing over time, barkskin shielding, and steady group recovery.',
|
||||
},
|
||||
{
|
||||
id: 3,
|
||||
classId: 1,
|
||||
slug: 'radiance',
|
||||
name: 'Radiance',
|
||||
spellType: 'party_heal',
|
||||
cost: 12,
|
||||
cooldown: 8,
|
||||
power: 18,
|
||||
unlockLevel: 1,
|
||||
glyph: '*',
|
||||
description: 'Restores health to up to 4 injured party members.',
|
||||
runesage: {
|
||||
id: 'runesage',
|
||||
name: 'Runesage',
|
||||
icon: 'R',
|
||||
description: 'Rune-scripted mends, concordance healing, aegis shielding, and unraveling cleanse.',
|
||||
},
|
||||
{
|
||||
id: 4,
|
||||
classId: 1,
|
||||
slug: 'sun-ward',
|
||||
name: 'Sun Ward',
|
||||
spellType: 'absorb',
|
||||
cost: 8,
|
||||
cooldown: 7,
|
||||
power: 36,
|
||||
unlockLevel: 1,
|
||||
glyph: 'O',
|
||||
description: 'Places a damage-absorbing shield on your target.',
|
||||
},
|
||||
{
|
||||
id: 5,
|
||||
classId: 1,
|
||||
slug: 'purify',
|
||||
name: 'Purify',
|
||||
spellType: 'cleanse',
|
||||
cost: 5,
|
||||
cooldown: 5,
|
||||
power: 10,
|
||||
unlockLevel: 1,
|
||||
glyph: 'x',
|
||||
description: 'Removes a harmful effect and restores health.',
|
||||
},
|
||||
{
|
||||
id: 6,
|
||||
classId: 1,
|
||||
slug: 'dawn-burst',
|
||||
name: 'Dawn Burst',
|
||||
spellType: 'party_heal',
|
||||
cost: 16,
|
||||
cooldown: 12,
|
||||
power: 28,
|
||||
unlockLevel: 5,
|
||||
glyph: 'D',
|
||||
description: 'A brilliant wave of healing for up to 4 injured allies.',
|
||||
},
|
||||
]
|
||||
}
|
||||
|
||||
function toIwt2Ability(ability: Ability, index: number): Iwt2HealerAbility {
|
||||
const spell = toCombatSpell(ability, String(index + 1))
|
||||
export const IWT2_HEALER_ORDER: Iwt2HealerId[] = ['dawnweaver', 'lifebinder', 'runesage']
|
||||
|
||||
export const IWT2_HEALER_ABILITIES: Record<Iwt2HealerId, Iwt2HealerAbility[]> = {
|
||||
dawnweaver: [
|
||||
createAbility('dawnweaver', 1, 'mend', 'Mend', '+', 'direct', 30, 5, 0.5),
|
||||
createAbility('dawnweaver', 2, 'renew', 'Renew', '~', 'hot', 12, 7, 0.5, 'heal_over_time'),
|
||||
createAbility('dawnweaver', 3, 'radiance', 'Radiance', '*', 'group', 18, 12, 8),
|
||||
createAbility('dawnweaver', 4, 'sun-ward', 'Sun Ward', 'O', 'shield', 36, 8, 7, 'shield'),
|
||||
createAbility('dawnweaver', 5, 'purify', 'Purify', 'x', 'cleanse', 10, 5, 5, 'cleanse'),
|
||||
createAbility('dawnweaver', 6, 'dawn-burst', 'Dawn Burst', 'D', 'group', 28, 16, 12),
|
||||
],
|
||||
lifebinder: [
|
||||
createAbility('lifebinder', 1, 'verdant-touch', 'Verdant Touch', '+', 'direct', 24, 4, 0.55),
|
||||
createAbility('lifebinder', 2, 'seed-of-life', 'Seed of Life', '~', 'hot', 16, 9, 1, 'heal_over_time'),
|
||||
createAbility('lifebinder', 3, 'wild-growth', 'Wild Growth', '*', 'group', 15, 11, 7.5),
|
||||
createAbility('lifebinder', 4, 'barkskin', 'Barkskin', 'O', 'shield', 46, 10, 5.5, 'shield'),
|
||||
createAbility('lifebinder', 5, 'purging-sap', 'Purging Sap', 'x', 'cleanse', 12, 6, 4.5, 'cleanse'),
|
||||
createAbility('lifebinder', 6, 'ancient-grove', 'Ancient Grove', 'G', 'shield', 72, 18, 12, 'shield'),
|
||||
],
|
||||
runesage: [
|
||||
createAbility('runesage', 1, 'etched-mend', 'Etched Mend', '+', 'direct', 22, 3, 0.35),
|
||||
createAbility('runesage', 2, 'mending-rune', 'Mending Rune', '~', 'hot', 10, 5, 0.45, 'heal_over_time'),
|
||||
createAbility('runesage', 3, 'concordance', 'Concordance', '*', 'group', 16, 9, 5.5),
|
||||
createAbility('runesage', 4, 'aegis-script', 'Aegis Script', 'O', 'shield', 28, 6, 4.5, 'shield'),
|
||||
createAbility('runesage', 5, 'unravel', 'Unravel', 'x', 'cleanse', 8, 4, 3.5, 'cleanse'),
|
||||
createAbility('runesage', 6, 'grand-design', 'Grand Design', 'R', 'group', 22, 13, 8.5),
|
||||
],
|
||||
}
|
||||
|
||||
export function abilitiesForHealer(healerId: Iwt2HealerId | string) {
|
||||
return IWT2_HEALER_ABILITIES[asIwt2HealerId(healerId)]
|
||||
}
|
||||
|
||||
export function asIwt2HealerId(value: unknown): Iwt2HealerId {
|
||||
if (value === 'field_medic') return 'dawnweaver'
|
||||
if (value === 'ward_sage') return 'lifebinder'
|
||||
if (value === 'storm_chanter') return 'runesage'
|
||||
return IWT2_HEALER_ORDER.includes(value as Iwt2HealerId)
|
||||
? value as Iwt2HealerId
|
||||
: 'dawnweaver'
|
||||
}
|
||||
|
||||
function createAbility(
|
||||
healerId: Iwt2HealerId,
|
||||
slot: number,
|
||||
slug: string,
|
||||
name: string,
|
||||
icon: string,
|
||||
kind: Spell['kind'],
|
||||
power: number,
|
||||
manaCost: number,
|
||||
cooldownSeconds: number,
|
||||
effectType?: string,
|
||||
): Iwt2HealerAbility {
|
||||
return {
|
||||
id: spell.id,
|
||||
healerId: 'field_medic',
|
||||
slot: index + 1,
|
||||
name: spell.name,
|
||||
icon: spell.glyph,
|
||||
kind: spell.kind,
|
||||
power: spell.power,
|
||||
effectType: spell.effectType,
|
||||
manaCost: spell.cost,
|
||||
cooldownSeconds: spell.cooldown,
|
||||
id: `${healerId}-${slug}`,
|
||||
healerId,
|
||||
slot,
|
||||
name,
|
||||
icon,
|
||||
kind,
|
||||
power,
|
||||
effectType,
|
||||
manaCost,
|
||||
cooldownSeconds,
|
||||
target: 'party-member',
|
||||
}
|
||||
}
|
||||
|
||||
export const IWT2_HEALER_ABILITIES: Record<string, Iwt2HealerAbility[]> = {
|
||||
field_medic: IWT1_DAWNWEAVER_ABILITIES.map(toIwt2Ability),
|
||||
}
|
||||
|
||||
export function abilitiesForHealer(healerId: string) {
|
||||
return IWT2_HEALER_ABILITIES[healerId] ?? IWT2_HEALER_ABILITIES.field_medic
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user