simshadows

MHWI Status Damage Model

This document is still a work-in-progress.

Introduction

The mathematical description of how status effects such as blast is well-described in How Status Works: Definitive Status Guide MHW/Iceborne (link). However, I will attempt to summarize it here, in addition to clarifying some features of this game mechanic not mentioned in the video.

This document will focus on modelling the damage done by the following status effects:

Status Application

Status effects can be applied to monsters in a variety of ways, such as attacking while using a weapon with a poison/paralysis/sleep/blast value.

When a status is applied to a monster, that status is “built-up”. Only when this internal status application counter reaches certain thresholds does the status effect trigger (or proc).

All monsters have unique tables regarding status effect application. Buildup usually involves four particular values:

To illustrate how these values work, let’s consider Dodogama’s sleep values:

Additionally, let’s specifically consider the following quest values:

Thus, our effective sleep values for that particular quest are:

Our first threshold is 188188, so we must apply 188188 sleep in order to get the first sleep proc.

After the first sleep proc, our new threshold is 188+190=378188+190=378, so we must apply 378378 sleep for the second proc.

After the second sleep proc, our new threshold is 378+190=568378+190=568, so we must apply 568568 sleep for the third proc.

This follows an arithmetic progression up until the cap, where it is clipped:

1883785687589481138  104510451045 188 \longrightarrow 378 \longrightarrow 568 \longrightarrow 758 \longrightarrow 948 \longrightarrow \cancel{1138} \; 1045 \longrightarrow 1045 \longrightarrow 1045 \longrightarrow \cdots

IMPORTANT: This is a draft. I actually don’t know how the rounding works, or other variables that status decay depends on, but my blast model is a continuous model, and blast doesn’t decay, so it doesn’t affect the remainder of this document.

Poison

(This section will be written later!)

Blast

Blast is a status effect that does not decay (i.e. decay is 00 blast per second).

A blast proc deals fixed damage, regardless of monster (100100 in Low Rank, 120120 in High Rank, and 300300 in Master Rank). The damage is dealt instantly, and the status can immediately continue being built-up.

Model Design Goals

Raw damage and elemental damage have been shown to be easily and effectively compared by determining a representative raw and elemental damage per hit. Such methods are totally independent of time and player skill as each and every hit has the same average raw and elemental damage.

The goal of each damage model is to find similar numbers for status damage, estimating the effective average damage done by a status effect, per weapon hit.

Unfortunately, status effects are not as easy to model in the same way since the rate of status procs decreases as more status is applied on the monster. Status damage can also depend on player competence due to status buildup being disabled while a monster is suffering from a status effect.

The Simplified Poison Damage Model

The model is described and discussed in How Poison Works: Poison Guide & Math MHW Iceborne. This section will effectively be a repeat of that video.

Input Variables

We require three input variables:

While QQ and HH are very easy to finding depending on the quest, nn must be found through experimentation.

This model is used due to the relatively low number of procs per hunt that can usually be determined.

Do note that this model assumes that poison status applied is already factored into nn by the player, therefore all poison weapons will behave the same under this model.

Model Derivation

Let RR be the total raw damage done during the quest. QnQ n is the total poison damage, so:

R=HQn R = H - Q n

Let kk be the total number of hits required to kill the monster. Then:

k=Rρ=HQnρ k = \frac{R}{\rho} = \frac{H - Q n}{\rho}

Let ψ\psi be the effective poison damage per hit. This can be easily found:

ψ=Qnk=ρQnHQn \psi = \frac{Q n}{k} = \frac{\rho Q n}{H - Q n}

Thus, we have found our damage model.

The Continuous Blast Damage Model

Input Variables

Our model is based on the idea that a single specified attack always deals a predictable amount of average damage and blast application each time the attack is performed.

For example, if a greatsword draw attack dealt 100100 raw damage and 55 status buildup on average, we can expect that using the attack nn-times would deal n×100n \times 100 raw damage and n×5n \times 5 status buildup on average.

These variables shall be:

Conceptually, we can try counting how many of the specified attack (such as the greatsword draw attack) we have to deal before we slay the monster, so we consider monster health to be another variable:

If we ignore blast damage and assume all our damage comes from raw, it is trivial to see that we’d require Hρ\frac{H}{\rho} uses of the specified attack in order to kill the monster. However, it gets tricky when we factor in blast.

The variables related to blast are:

Blast does not decay and blast procs do not cause status-application downtime (like how you cannot apply poison status if a monster is actively suffering from poison). This means that blast damage prediction can be completely independent of time, and dependent only on parameters relating to the sequence of attacks performed on the monster.

Our model will attempt to find the average blast damage per attack.

Pre-Cap Model Derivation

The following two equations are given for arithmetic progressions:

an=a1+(n1)dSn=n2(a1+an)\begin{gather*} a_n = a_1 + \parens{n - 1} d \tag{1} \\ S_n = \frac{n}{2} \parens{a_1 + a_n} \tag{2} \end{gather*}

where a1a_1 is the first element of the sequence, ana_n is the nth\Nth{n}{th} element, d=ai+1aid = a_{i+1} - a_{i}, and SnS_n is the sum of the first nn elements.

Equivalently, ana_n is the threshold for the nth\Nth{n}{th} blast proc, and SnS_n is the total blast that must be applied to reach the nth\Nth{n}{th} blast proc.

Eliminating ana_n:

Sn=n2(a1+a1+(n1)d)=n2(2a1+(n1)d)\begin{align*} S_n &= \frac{n}{2} \parens{a_1 + a_1 + \parens{n - 1} d} \\ &= \frac{n}{2} \parens{2 a_1 + \parens{n - 1} d} \end{align*}

Solving for number of procs nn:

2Sn=n(2a1+(n1)d)=2na1+n2dnd\begin{align*} 2 S_n &= n \parens{2 a_1 + \parens{n - 1} d} \\ &= 2 n a_1 + n^2 d - n d \end{align*}

0=2na1+n2dnd2Sn=n2d+n(2a1d)2Sn\begin{align*} 0 &= 2 n a_1 + n^2 d - n d - 2 S_n \\ &= n^2 d + n \parens{2 a_1 - d} - 2 S_n \end{align*}

Since n0n \ge 0:

n=(2a1d)+(2a1d)24d×(2Sn)2d=d2a1+(2a1d)2+8dSn2d\begin{align*} n &= \frac{ - \parens{2 a_1 - d} + \sqrt{\parens{2 a_1 - d}^2 - 4 d \times \parens{- 2 S_n}} }{2 d} \\ &= \frac{d - 2 a_1 + \sqrt{\parens{2 a_1 - d}^2 + 8 d S_n}}{2 d} \tag{3} \end{align*}

Let RnR_n and BnB_n denote the total raw and blast damage (respectively), given nn blast procs.

Since PP is blast damage per proc, total blast damage is simply:

Bn=Pn B_n = Pn

Thus, we can calculate BB as:

Bn=Pd2a1+(2a1d)2+8dSn2d B_n = P \frac{d - 2 a_1 + \sqrt{\parens{2 a_1 - d}^2 + 8 d S_n}}{2 d}

Since we know that we apply σ\sigma status for every ρ\rho raw damage, it is trivial to calculate RnR_n using:

ρσ=RnSn(4) \frac{\rho}{\sigma} = \frac{R_n}{S_n} \tag{4}

Thus, we can introduce RnR_n into our equation. Additionally, we no longer care about counting blast procs, so we can simplify the notation of total raw and blast damage to RR and BB:

B=Pd2a1+(2a1d)2+8Rdσρ2d B = P \frac{d - 2 a_1 + \sqrt{\parens{2 a_1 - d}^2 + 8 R d \frac{\sigma}{\rho} }}{2 d}

In order to slay the monster, total raw and blast damage must add to equal the total health pool HH:

H=R+B(5) H = R + B \tag{5}

Substituting into RR:

B=Pd2a1+(2a1d)2+8(HB)dσρ2d2BdP=d2a1+(2a1d)2+8(HB)dσρ2BdP+2a1d=(2a1d)2+8(HB)dσρ(2BdP+2a1d)2=(2a1d)2+8(HB)dσρB24d2P2+22BdP(2a1d)+(2a1d)2=(2a1d)2+8Hdσρ8BdσρB24d2P2+B4dP(2a1d)=8Hdσρ8BdσρB24d2P2+B(4dP(2a1d)+8dσρ)=8HdσρB24d2P2+B4d(2a1dP+2σρ)=8HσdρB2+BP2d(2a1dP+2σρ)=2HP2σρdB2+2BP22d(2a1dP+2σρ)=2HP2σρdB2+2BP22d(2a1dP+2σρ)+(P22d(2a1dP+2σρ))2=2HP2σρd+(P22d(2a1dP+2σρ))2(B+P22d(2a1dP+2σρ))2=2HP2σρd+(P22d(2a1dP+2σρ))2B+P22d(2a1dP+2σρ)=P2Hσρd+(12d(2a1dP+2σρ))2B=P2Hσρd+(12d(2a1dP+2σρ))2P22d(2a1dP+2σρ)\begin{gather*} B = P \frac{d - 2 a_1 + \sqrt{\parens{2 a_1 - d}^2 + 8 \parens{H - B} d \frac{\sigma}{\rho} }}{2 d} \\ \frac{2Bd}{P} = d - 2 a_1 + \sqrt{\parens{2 a_1 - d}^2 + 8 \parens{H - B} d \frac{\sigma}{\rho} } \\ \frac{2Bd}{P} + 2 a_1 - d = \sqrt{\parens{2 a_1 - d}^2 + 8 \parens{H - B} d \frac{\sigma}{\rho} } \\ \parens{\frac{2Bd}{P} + 2 a_1 - d}^2 = \parens{2 a_1 - d}^2 + 8 \parens{H - B} d \frac{\sigma}{\rho} \\ B^2 \frac{4 d^2}{P^2} + 2 \frac{2Bd}{P} \parens{2 a_1 - d} + \cancel{\parens{2 a_1 - d}^2} = \cancel{\parens{2 a_1 - d}^2} + 8 H d \frac{\sigma}{\rho} - 8 B d \frac{\sigma}{\rho} \\ B^2 \frac{4 d^2}{P^2} + B \frac{4 d}{P} \parens{2 a_1 - d} = 8 H d \frac{\sigma}{\rho} - 8 B d \frac{\sigma}{\rho} \\ B^2 \frac{4 d^2}{P^2} + B \parens{\frac{4 d}{P} \parens{2 a_1 - d} + 8 d \frac{\sigma}{\rho}} = 8 H d \frac{\sigma}{\rho} \\ B^2 \frac{4 d^2}{P^2} + B 4 d \parens{\frac{2 a_1 - d}{P} + \frac{2 \sigma}{\rho}} = \frac{8 H \sigma d}{\rho} \\ B^2 + B \frac{P^2}{d} \parens{\frac{2 a_1 - d}{P} + \frac{2 \sigma}{\rho}} = \frac{2 H P^2 \sigma}{\rho d} \\ B^2 + 2 B \frac{P^2}{2d} \parens{\frac{2 a_1 - d}{P} + \frac{2 \sigma}{\rho}} = \frac{2 H P^2 \sigma}{\rho d} \\ B^2 + 2 B \frac{P^2}{2d} \parens{\frac{2 a_1 - d}{P} + \frac{2 \sigma}{\rho}} + \parens{\frac{P^2}{2d} \parens{\frac{2 a_1 - d}{P} + \frac{2 \sigma}{\rho}}}^2 = \frac{2 H P^2 \sigma}{\rho d} + \parens{\frac{P^2}{2d} \parens{\frac{2 a_1 - d}{P} + \frac{2 \sigma}{\rho}}}^2 \\ \parens{B + \frac{P^2}{2d} \parens{\frac{2 a_1 - d}{P} + \frac{2 \sigma}{\rho}}}^2 = \frac{2 H P^2 \sigma}{\rho d} + \parens{\frac{P^2}{2d} \parens{\frac{2 a_1 - d}{P} + \frac{2 \sigma}{\rho}}}^2 \\ B + \frac{P^2}{2d} \parens{\frac{2 a_1 - d}{P} + \frac{2 \sigma}{\rho}} = P \sqrt{ \frac{2 H \sigma}{\rho d} + \parens{\frac{1}{2d} \parens{\frac{2 a_1 - d}{P} + \frac{2 \sigma}{\rho}}}^2 } \\ B = P \sqrt{ \frac{2 H \sigma}{\rho d} + \parens{\frac{1}{2d} \parens{\frac{2 a_1 - d}{P} + \frac{2 \sigma}{\rho}}}^2 } - \frac{P^2}{2d} \parens{\frac{2 a_1 - d}{P} + \frac{2 \sigma}{\rho}} \tag{6} \end{gather*}

Thus, we now have an expression for total blast damage, given the monster’s total health pool.

Now, we want to find out the average amount of blast damage dealt per attack, given the attack’s raw damage.

Let βp\beta_p denote the average blast damage per attack, before hitting the blast cap.

It is trivial to use the ratio between RR and BB:

βpρ=BR=BHB \frac{\beta_p}{\rho} = \frac{B}{R} = \frac{B}{H - B}

Thus, we get an expression for βp\beta_p in terms of BB, HH, and ρ\rho:

βp=ρBHB \beta_p = \rho \frac{B}{H - B}

Since we can use (6) to calculate BB in terms of model input values, we now have an expression for calculating average blast damage per attack, given only our model input values.

For this model, it is useful to think of average blast damage per attack as a function of HH, so we shall rewrite βp\beta_p as a function [0,)R[0, \infty) \to \Reals such that:

βp(H)=ρB(H)HB(H) \beta_p (H) = \rho \frac{B(H)}{H - B(H)}

βp(H)\beta_p (H) is only valid up until HH reaches the blast cap.

Blast Cap Derivation

The blast cap can be expressed as:

anc(7) a_n \le c \tag{7}

So to find where the pre-cap portion of the model stops, we must find the range of HH in which (7) is true.

We start by substituting (1) into (2) via. nn:

ana1=(n1)dn=ana1d+1Sn=(ana1d+1)12(a1+an)\begin{gather*} a_n - a_1 = \parens{n - 1} d \\ n = \frac{a_n - a_1}{d} + 1 \\ S_n = \parens{\frac{a_n - a_1}{d} + 1} \frac{1}{2} \parens{a_1 + a_n} \tag{8} \end{gather*}

Substituting (4) into (8) via. SnS_n:

Rnσρ=(ana1d+1)12(a1+an)2Rnσρ=(ana1d+1)(a1+an)2Rnσρ=an2a12d+a1+an0=an2da12d+a1+an2Rnσρ0=an2+and+(a1da122Rnσρd)\begin{gather*} R_n \frac{\sigma}{\rho} = \parens{\frac{a_n - a_1}{d} + 1} \frac{1}{2} \parens{a_1 + a_n} \\ 2 R_n \frac{\sigma}{\rho} = \parens{\frac{a_n - a_1}{d} + 1} \parens{a_1 + a_n} \\ 2 R_n \frac{\sigma}{\rho} = \frac{a_n^2 - a_1^2}{d} + a_1 + a_n \\ 0 = \frac{a_n^2}{d} - \frac{a_1^2}{d} + a_1 + a_n - 2 R_n \frac{\sigma}{\rho} \\ 0 = a_n^2 + a_n d + \parens{a_1 d - a_1^2 - 2 R_n \frac{\sigma}{\rho} d} \end{gather*}

Since an0a_n \ge 0:

an=d+d24(a1da122Rnσρd)2an=d+d2+4(a12a1d+2Rnσρd)2\begin{gather*} a_n = \frac{-d + \sqrt{d^2 - 4 \parens{a_1 d - a_1^2 - 2 R_n \frac{\sigma}{\rho} d}}}{2} \\ a_n = \frac{-d + \sqrt{d^2 + 4 \parens{a_1^2 - a_1 d + 2 R_n \frac{\sigma}{\rho} d}}}{2} \end{gather*}

We can now introduce BB and HH using (5), and substitute it into the blast cap condition (7):

cd+d2+4(a12a1d+2(HB)σρd)22c+dd2+4(a12a1d+2(HB)σρd)(2c+d)2d2+4(a12a1d+2(HB)σρd)(2c+d)2d24a12a1d+2(HB)σρd(2c+d)2d24a12+a1d2(HB)σρdρ2σd((2c+d)2d24a12+a1d)HBρ2σd(4c2+4cd4a12+a1d)HBρ2σd(c2+cd+a1da12)HB\begin{gather*} c \ge \frac{ -d + \sqrt{d^2 + 4 \parens{a_1^2 - a_1 d + 2 \parens{H - B} \frac{\sigma}{\rho} d}} }{2} \\ 2 c + d \ge \sqrt{d^2 + 4 \parens{a_1^2 - a_1 d + 2 \parens{H - B} \frac{\sigma}{\rho} d}} \\ \parens{2 c + d}^2 \ge d^2 + 4 \parens{a_1^2 - a_1 d + 2 \parens{H - B} \frac{\sigma}{\rho} d} \\ \frac{\parens{2 c + d}^2 - d^2}{4} \ge a_1^2 - a_1 d + 2 \parens{H - B} \frac{\sigma}{\rho} d \\ \frac{\parens{2 c + d}^2 - d^2}{4} - a_1^2 + a_1 d \ge 2 \parens{H - B} \frac{\sigma}{\rho} d \\ \frac{\rho}{2 \sigma d} \parens{\frac{\parens{2 c + d}^2 - d^2}{4} - a_1^2 + a_1 d} \ge H - B \\ \frac{\rho}{2 \sigma d} \parens{\frac{4 c^2 + 4 c d}{4} - a_1^2 + a_1 d} \ge H - B \\ \frac{\rho}{2 \sigma d} \parens{c^2 + c d + a_1 d - a_1^2} \ge H - B \tag{9} \end{gather*}

Substituting (6) into (9) via. BB:

ρ2σd(c2+cd+a1da12)H(P2Hσρd+(12d(2a1dP+2σρ))2P22d(2a1dP+2σρ))ρ2σd(c2+cd+a1da12)P22d(2a1dP+2σρ)HP2Hσρd+(12d(2a1dP+2σρ))2\begin{gather*} \frac{\rho}{2 \sigma d} \parens{c^2 + c d + a_1 d - a_1^2} \ge H - \parens{ P \sqrt{ \frac{2 H \sigma}{\rho d} + \parens{\frac{1}{2d} \parens{\frac{2 a_1 - d}{P} + \frac{2 \sigma}{\rho}}}^2 } - \frac{P^2}{2d} \parens{\frac{2 a_1 - d}{P} + \frac{2 \sigma}{\rho}} } \\ \frac{\rho}{2 \sigma d} \parens{c^2 + c d + a_1 d - a_1^2} - \frac{P^2}{2d} \parens{\frac{2 a_1 - d}{P} + \frac{2 \sigma}{\rho}} \ge H - P \sqrt{ \frac{2 H \sigma}{\rho d} + \parens{\frac{1}{2d} \parens{\frac{2 a_1 - d}{P} + \frac{2 \sigma}{\rho}}}^2 } \tag{10} \end{gather*}

TODO: The equations above are too long.

Let XX be the left side of (10):

Xρ2σd(c2+cd+a1da12)P22d(2a1dP+2σρ) X \coloneqq \frac{\rho}{2 \sigma d} \parens{c^2 + c d + a_1 d - a_1^2} - \frac{P^2}{2d} \parens{\frac{2 a_1 - d}{P} + \frac{2 \sigma}{\rho}}

Isolating HH in (10):

XHP2Hσρd+(12d(2a1dP+2σρ))2HXP2Hσρd+(12d(2a1dP+2σρ))2(HX)2P22Hσρd+(12d(2a1dP+2σρ))2H2X2H2P2σρd+(P2d(2a1dP+2σρ))2H2H2P2σρd(P2d(2a1dP+2σρ))2+X2H2H2P2σρd+(P2σρd)2(P2d(2a1dP+2σρ))2+X2+(P2σρd)2(HP2σρd)2(P2d(2a1dP+2σρ))2+X2+(P2σρd)2HP2σρd+(P2d(2a1dP+2σρ))2+X2+(P2σρd)2\begin{gather*} X \ge H - P \sqrt{ \frac{2 H \sigma}{\rho d} + \parens{\frac{1}{2d} \parens{\frac{2 a_1 - d}{P} + \frac{2 \sigma}{\rho}}}^2 } \\ \frac{H - X}{P} \le \sqrt{ \frac{2 H \sigma}{\rho d} + \parens{\frac{1}{2d} \parens{\frac{2 a_1 - d}{P} + \frac{2 \sigma}{\rho}}}^2 } \\ \frac{\parens{H - X}^2}{P^2} \le \frac{2 H \sigma}{\rho d} + \parens{\frac{1}{2d} \parens{\frac{2 a_1 - d}{P} + \frac{2 \sigma}{\rho}}}^2 \\ H^2 - X^2 \le H \frac{2 P^2 \sigma}{\rho d} + \parens{\frac{P}{2d} \parens{\frac{2 a_1 - d}{P} + \frac{2 \sigma}{\rho}}}^2 \\ H^2 - H \frac{2 P^2 \sigma}{\rho d} \le \parens{\frac{P}{2d} \parens{\frac{2 a_1 - d}{P} + \frac{2 \sigma}{\rho}}}^2 + X^2 \\ H^2 - H \frac{2 P^2 \sigma}{\rho d} + \parens{\frac{P^2 \sigma}{\rho d}}^2 \le \parens{\frac{P}{2d} \parens{\frac{2 a_1 - d}{P} + \frac{2 \sigma}{\rho}}}^2 + X^2 + \parens{\frac{P^2 \sigma}{\rho d}}^2 \\ \parens{H - \frac{P^2 \sigma}{\rho d}}^2 \le \parens{\frac{P}{2d} \parens{\frac{2 a_1 - d}{P} + \frac{2 \sigma}{\rho}}}^2 + X^2 + \parens{\frac{P^2 \sigma}{\rho d}}^2 \\ H \le \frac{P^2 \sigma}{\rho d} + \sqrt{ \parens{\frac{P}{2d} \parens{\frac{2 a_1 - d}{P} + \frac{2 \sigma}{\rho}}}^2 + X^2 + \parens{\frac{P^2 \sigma}{\rho d}}^2 } \end{gather*}

Thus, we have our range for HH in which the pre-cap part of the model (derived in Pre-Cap Model Derivation) is valid.

We shall define CC to be the exact value of HH where we hit the blast cap:

CP2σρd+(P2d(2a1dP+2σρ))2+X2+(P2σρd)2(11) C \coloneqq \frac{P^2 \sigma}{\rho d} + \sqrt{ \parens{\frac{P}{2d} \parens{\frac{2 a_1 - d}{P} + \frac{2 \sigma}{\rho}}}^2 + X^2 + \parens{\frac{P^2 \sigma}{\rho d}}^2 } \tag{11}

Post-Cap Model Derivation

At this point, the status buildup threshold remains constant at cc.

Since we have a constant threshold, then if we ignore pre-cap damage, any status buildup dealt will be linearly proportional to the damage it deals.

We will start by forming a relation between some number of hits kk, average status per hit σ\sigma, and a blast threshold cc:

kcσ k \coloneqq \frac{c}{\sigma}

Thus, kk hits is required to cause a blast proc.

Let βc\beta'_c be the effective average blast damage dealt per hit, but only valid to damage dealt after CC damage has been dealt to the monster:

βcPk=σPc \beta'_c \coloneqq \frac{P}{k} = \frac{\sigma P}{c}

Note that βc\beta'_c does not depend on monster health.

We know that each hit after reaching blast cap deals an average of ρ+βc\rho + \beta'_c damage, and we must distribute this damage in the remaining HCH - C health of the monster.

This allows us to construct an expression involving the actual effective average blast damage dealt per hit βc\beta_c, which includes damage dealt before CC damage was dealt to the monster. This expression is simply a weighted average:

ρ+βc=C(ρ+βp(C))+(HC)(ρ+βc)Hβc=CH(ρ+βp(C))+HCH(ρ+σPc)ρ\begin{gather*} \rho + \beta_c = \frac{ C \parens{\rho + \beta_p(C)} + \parens{H - C} \parens{\rho + \beta'_c} }{H} \\ \beta_c = \frac{C}{H} \parens{\rho + \beta_p(C)} + \frac{H - C}{H} \parens{\rho + \frac{\sigma P}{c}} - \rho \end{gather*}

Rewriting βc\beta_c as a function [C,)R[C, \infty) \to \Reals such that:

βc(H)=CH(ρ+βp(C))+HCH(ρ+σPc)ρ \beta_c (H) = \frac{C}{H} \parens{\rho + \beta_p(C)} + \frac{H - C}{H} \parens{\rho + \frac{\sigma P}{c}} - \rho

Summary

Our model takes the following input variables:

The effective average blast damage per hit can be calculated as a function of monster health β:[0,)R\beta : [0, \infty) \to \Reals such that:

β(H)={βp(H)if HCβc(H)if H>C \beta (H) = \begin{cases} \beta_p (H) & \text{if } H \le C \\ \beta_c (H) & \text{if } H > C \end{cases}

Functions βp:[0,)R\beta_p : [0, \infty) \to \Reals and βc:[C,)R\beta_c : [C, \infty) \to \Reals are defined as:

βp(H)=ρB(H)HB(H)βc(H)=CH(ρ+βp(C))+HCH(ρ+σPc)ρ\begin{gather*} \beta_p (H) = \rho \frac{B(H)}{H - B(H)} \\ \beta_c (H) = \frac{C}{H} \parens{\rho + \beta_p(C)} + \frac{H - C}{H} \parens{\rho + \frac{\sigma P}{c}} - \rho \end{gather*}

CC is the maximum amount of health before reaching the blast cap:

C=Z+Y2+X2+Z2 C = Z + \sqrt{Y^2 + X^2 + Z^2}

B(H)B \parens{H} is the total blast damage dealt when we’ve dealt a total of HH damage to the monster:

B(H)=2HZ+Y2PY B \parens{H} = \sqrt{2 H Z + Y^2} - PY

Anonymous helper variables:

X=ρ2σd(c2+cd+a1da12)PYY=P2d(2a1dP+2σρ)Z=P2σρd\begin{gather*} X = \frac{\rho}{2 \sigma d} \parens{c^2 + c d + a_1 d - a_1^2} - PY \\ Y = \frac{P}{2 d} \parens{ \frac{2 a_1 - d}{P} + \frac{2 \sigma}{\rho} } \qquad\qquad Z = \frac{P^2 \sigma}{\rho d} \end{gather*}

Do we ever hit blast cap?

TODO: This section will be written later!

The Discrete-Procs Blast Damage Model

TODO: Do we actually care to do a discrete-procs model? The continuous model is probably good enough for most purposes.

Motivation

In reality, blast damage is done on the monster only every now and then (though in a predictable manner).

For example, the continuous model might calculate the total number of blast procs as the non-integer number of 25.725.7, leading to a total blast damage calculation of 25.7×300=771025.7 \times 300 = 7710.

If one wishes to model the DPS fluctuations that are associated with this effect, then this total number of blast procs must be floored. In this case, the continuous model calculation of 25.725.7 must be floored down to 2525, leading to a total blast calculation of 25×300=750025 \times 300 = 7500.

TODO

TODO: Start figuring out the math?

Model Extensions

I left out certain interpretations of the models in order to keep discussion as simple as possible. Now that the model has been introduced, we shall expand on these additional interpretations.

Combos

It turns out that if you can predict the average amount of raw damage and status application of a single attack, you can also do it for a given sequence of attacks.

Thus, ρ\rho and σ\sigma can instead be interpreted as values for a given sequence attacks rather than just a single attack.

Target Health

HH doesn’t actually have to be the monster’s total health pool if we don’t intend on slaying it. For example, we can instead make HH the damage required in order to capture the monster.

Multiplayer might also be considered here since multiple players share the full health pool of the monster. For example, if we assume four perfectly equal players, then we might want to divide the full 4-player health pool by 44.