diablo2-web/src/game/skills/paladin-defensive-auras.ts

118 lines
3.6 KiB
TypeScript

/**
* Diablo II: Lord of Destruction v1.13c — Paladin Defensive Auras Module
*
* Dedicated pure calculation, pulse cadence, and synergy formulas for the 10 Paladin Defensive Auras:
* - Skill 99: Prayer (ReqLevel 1)
* - Skill 100: Resist Fire (ReqLevel 1)
* - Skill 104: Defiance (ReqLevel 6)
* - Skill 105: Resist Cold (ReqLevel 6)
* - Skill 109: Cleansing (ReqLevel 12)
* - Skill 110: Resist Lightning (ReqLevel 12)
* - Skill 115: Vigor (ReqLevel 18)
* - Skill 120: Meditation (ReqLevel 24)
* - Skill 124: Redemption (ReqLevel 30)
* - Skill 125: Salvation (ReqLevel 30)
*
* 1.13c Ground Truth:
* - Skills.txt, Missiles.txt (Patch_D2.mpq)
* - D2Game/src/SKILLS/SkillPalAura.cpp
* - 50-frame pulse cadence (2.0s), 2-3s lingering duration
* - Prayer periodic heal pulse with continuous mana drain (16/256), auto-deactivates at 0 mana
* - Resist Fire/Cold/Lightning passive +1% max res per 2 hard points (blvl), active even when aura is off, capped at 95%
* - Cleansing & Meditation free Prayer heal pulse synergy at 0 mana cost
* - Redemption 50-tick cadence, 16 subtiles radius, dm34 chance, consumes valid monster corpses for caster-only life/mana restore
* - Salvation active party All Res (Fire/Cold/Lightning), strictly zero effect on Poison or Magic
*/
export interface PrayerStats {
readonly healAmount: number
readonly healAmount256: number
readonly manaCostPerFrame256: number
readonly radiusSubtiles: number
readonly radiusYards: number
}
export interface ResistFireStats {
readonly fireResistPct: number
readonly maxFireResistBonusPct: number
readonly passiveMaxFireResistPct: number
readonly radiusSubtiles: number
readonly radiusYards: number
}
export interface DefianceStats {
readonly defensePercent: number
readonly radiusSubtiles: number
readonly radiusYards: number
}
export interface ResistColdStats {
readonly coldResistPct: number
readonly maxColdResistBonusPct: number
readonly passiveMaxColdResistPct: number
readonly radiusSubtiles: number
readonly radiusYards: number
}
export interface CleansingStats {
readonly curseReductionPct: number
readonly poisonLengthReductionPct: number
readonly prayerHealAmount: number
readonly prayerHealAmount256: number
readonly radiusSubtiles: number
readonly radiusYards: number
}
export interface ResistLightningStats {
readonly lightningResistPct: number
readonly maxLightningResistBonusPct: number
readonly passiveMaxLightningResistPct: number
readonly radiusSubtiles: number
readonly radiusYards: number
}
export interface VigorStats {
readonly velocityPercent: number
readonly staminaRecoveryBonusPct: number
readonly maxStaminaPercent: number
readonly radiusSubtiles: number
readonly radiusYards: number
}
export interface MeditationStats {
readonly manaRecoveryBonusPct: number
readonly prayerHealAmount: number
readonly prayerHealAmount256: number
readonly radiusSubtiles: number
readonly radiusYards: number
}
export interface RedemptionStats {
readonly redemptionChancePct: number
readonly lifeRecoverPts: number
readonly manaRecoverPts: number
readonly radiusSubtiles: number
readonly radiusYards: number
}
export interface SalvationStats {
readonly fireResistPct: number
readonly coldResistPct: number
readonly lightningResistPct: number
readonly radiusSubtiles: number
readonly radiusYards: number
}
export {
calculatePrayerStats,
calculateResistFireStats,
calculateDefianceStats,
calculateResistColdStats,
calculateCleansingStats,
calculateResistLightningStats,
calculateVigorStats,
calculateMeditationStats,
calculateRedemptionStats,
calculateSalvationStats,
} from '../skills.ts'