export const WOW335_SHAMAN_TIDAL_WAVES_AURA_TAG = "wow335-shaman-tidal-waves"; // The generated rank rows reference child 53390 but do not include its aura duration. // WotLKDB's 3.3.5a child row supplies the missing 15-second lifetime. export const WOW335_SHAMAN_TIDAL_WAVES_DURATION_MS = 15_000; export const WOW335_SHAMAN_TIDAL_WAVES_MAX_CHARGES = 3; const TIDAL_WAVES_PROC_CHANCE_BY_RANK = [0, 0.33, 0.66, 1] as const; const TIDAL_WAVES_BONUS_HEALING_PERCENT_BY_RANK = [0, 0.04, 0.08, 0.12] as const; function normalizedTidalWavesRank(rank: number): number { return Number.isFinite(rank) ? Math.max(0, Math.min(3, Math.trunc(rank))) : 0; } function normalizedTidalWavesCharges(charges: number): number { return Number.isFinite(charges) ? Math.max(0, Math.min(WOW335_SHAMAN_TIDAL_WAVES_MAX_CHARGES, Math.trunc(charges))) : 0; } export function wow335ShamanTidalWavesProcChance(rank: number): number { return TIDAL_WAVES_PROC_CHANCE_BY_RANK[normalizedTidalWavesRank(rank)] ?? 0; } export function wow335ShamanTidalWavesChargesForTrigger(abilityName: string): number { if (abilityName === "Chain Heal") return 3; if (abilityName === "Riptide") return 2; return 0; } export function wow335ShamanTidalWavesCastTimeMultiplier(charges: number): number { return 1 - normalizedTidalWavesCharges(charges) * 0.1; } export function wow335ShamanTidalWavesCriticalChanceBonusPercent( abilityName: string, charges: number, ): number { return abilityName === "Lesser Healing Wave" ? normalizedTidalWavesCharges(charges) * 10 : 0; } export function wow335ShamanTidalWavesBonusHealingPercent(rank: number): number { return TIDAL_WAVES_BONUS_HEALING_PERCENT_BY_RANK[normalizedTidalWavesRank(rank)] ?? 0; }