pub fn ability_profile_from_info(
damage: Option<f64>,
dot: Option<f64>,
hot: Option<f64>,
vampiric: Option<f64>,
projectiles: Option<i64>,
cooldown_sec: f64,
) -> AbilityCombatProfileExpand description
Pure split of an crate::mechanics::content::AbilityInfo budget into the
(dps_add, heal_add) axes. Separated from the config lookup so the arithmetic
is unit-testable without prod ability UUIDs.
damage/dot/hot in AbilityInfo are per-cast budgets (the closures
split ability_damage_from_rarity = eff·k·cd), so dividing by cd yields
per-second throughput eff·k·share. vampiric heals a fraction of damage
dealt. crit_chance_bonus/effect_duration buff components are dropped
(conservative): their budget share was already subtracted from damage by
the content closures, so ignoring them under-counts slightly rather than
double-counting.