Grenade Mechanics Modeling (aka "How Grenades Work")

The rebalance patch overhauled the way that Assault Rifle grenade mechanics work, and for most players the new mechanics are a bit of a mystery. The goal of this thread is to put forth a model of those mechanics so players have a better understanding of the system and can make informed decisions.

Everything in this thread is based on data I collected during the patch’s beta period, along with some discussions with the developers. I meant to post this all last fall, but then got swamped at work and never found the time. I haven’t had time to reproduce any of this testing on live, so this model is based on the assumption that the mechanics didn’t change significantly (apart from a bug fix that will be discussed in the data) since then.

First, I’ll go over the model, since that’s what will be most relevant to the largest portion of the population. After that I’ll provide details about each of the tests I performed and the conclusions drawn from them, which informed the design of the model.

The Grenade Points Model

During combat, players accumulate Grenade Points (GP) in two ways:

  • Spending energy on power abilities
    – Burst Fire grants approximately 21 GP
    – (assumed) Full Auto grants approximately 12.6 GP
    – Grenade Points are earned even if a grenade is already cooking
  • By being in combat
    – You earn approximately 6.67 GP for every second spent in combat (about 4 grenades per minute)

Players spend Grenade Points to proc a grenade:

  • If you have over 100 GP when casting a power ability, you have a high probability to proc a grenade and lose 100 GP
  • Proccing a grenade seems to temporarily reduce the probability of getting a grenade on the next power ability

Grenade Points do not have a known cap - it is possible to accumulate 200+ GP and proc back-to-back grenades.

Grenade Points are reset when leaving combat

When entering combat with Burst Fire, you have a 30% chance to proc a grenade (independent of Grenade Point system)

Auxiliary Loader adds 3 Grenades per Minute to the time-based component

  • This increases the GP/s by (300 GP)/(60 s) = 5 GP/s, for a total of 11.25 GP/s

Most other passives that state they give grenades per minute also use this system

  • Overclocked Loader adds 2 GP/s to the time-based component
  • Auto-Loader gives a flat 40 GP when launching High Explosive Grenade
  • Heavy Payload is the one exception: it just gives a simple 40% dice roll to get a grenade

I should also add a disclaimer at this point: the model explains the stochastic (steady-state) behavior of grenades, which is generally what matters for longer encounters. It’s a little hand-wavy on the details of how things work on short time scales. I’ll address the shortcomings of the model below in the appropriate testing section.

6 Likes

Assumptions

There are a few assumptions built into the model that I haven't tested explicitly. I want to put them up front in case I've implicitly used them in any of the analysis. All of these are things that came up during discussions with developers during testlive and have been publicly mentioned multiple times by a number of testers. So I don't think any of them are secret:
  • Casting a power ability grants grenade points even if a grenade is cooking
  • Overclocked Loader and Auto-Loader were updated to work with the new system
  • Heavy Payload (the passive for Lock and Load) is still a 40% dice roll
  • The grenade system is reset upon leaving combat
  • There was a bug with the grenade system during the time I performed my tests, which I will address in the appropriate sections as needed.
5 Likes

Testing Documentation

Here are the tests I've performed and their results.

Test 1: 2-Minute Parse with KSR

Methodology:

Take 2-minute parses with a KSR-43, using varying amounts of Burst Fires (from 1 to 63) in that time interval. I tried to space out the Burst Fires equally (for example, in the trial with 4 burst fires, I used one approximately every 30 seconds). A plot of grenades per minute (GPM) vs. Burst Fires per minute (BFPM) should reveal the amount of Grenade Points a Burst Fire grants.

Data:

Google Sheets - “2m GPM Tests (KSR)” tab

Analysis:

This is the plot of the Data:


There are a few things going on here that I want to briefly describe.

  • Below 5 BFPM you’re essentially guaranteed a grenade with every Burst Fire (BF) thanks to the time component. The curve fit to those data points (shown in red) is a line with a slope of 1.
  • Above 5 BFPM the curve fit (in yellow) has a slope is something around 0.211 (or 21.1 GP per BF) and a y-intercept of 3.67 (i.e. 3.67 GPM baseline from time).
  • The dip in grenades observed between 5-10 BFPM is a known bug with the mechanic that was identified by the developers and (hopefully) fixed. It’s most noticeable in that region, but it is also causing extra variance in the data above 10 BFPM.

Based on the knowledge of this bug and the assumption that the curves should intersect at 5 BFPM (in other words, the function should be continuous), we can deduce that the y-intercept is higher than the 3.67 given by the curve fit. To try and account for that, I’ve added my own fit, in orange.

In that fit, I’ve kept the slope at 21 but set the baseline GPM (intercept) to 4. That causes the two curves to intersect at the desired place to make the function continuous. From that 4 GPM we can calculate the GP per second:

4 Grenades / min * (1 min / 60 s) * (100 GP / 1 Grenade) = 6.67 GP / s

Conclusions:

  • Burst Fire grants 21 GP per cast
  • We gain 6.67 GP/s from the baseline 4 GPM of the time component
  • We assume that Full Auto works the same way, but scaled by energy (thus generating 3/5 of the GP, so around 12.6).
5 Likes

Test 2: 2-Minute Parse with Auxiliary Loader

Methodology:

Take 2-minute parses with an Auxiliary Loader, using varying amounts of Burst Fires (from 11 to 52) in that time interval. I didn’t use as wide a range here since I was mostly trying to nail down Aux Loader’s mechanic. As before, I tried to space out the Burst Fires equally

A plot of grenades per minute (GPM) vs. Burst Fires per minute (BFPM) should reveal whether Aux Loader boosts the energy component or the time component of the GP system.

Data:

Google Sheets “2m GPM Tests (Aux)” tab

Analysis:

This is the plot of the Data:


There are a several notable things about this graph.

First of all, the curve fit to the raw data suggests the same 4.0 GPM baseline and a larger slope. Unfortunately, this is entirely wrong. There are a few things in the graph that make this obvious:

  • We’re getting “guaranteed” grenades all the way up to 7 BFPM, above the threshold of 5 BFPM one would expect with the 4 GPM baseline we had in the previous test
  • The two curve fits (red below 8 BFPM and yellow above 8 BFPM) aren’t continuous - this would suggest that you suddenly proc fewer grenades by firing more BFs, which makes no sense.
  • The data seems to level off between 8 BFPM and 12 BFPM, or at least have a huge variance. For example, at 11 BFPM we’re getting fewer grenades than 10 BFPM.

The same bug present in the KSR data is present here, and it affects the Aux Loader much more significantly. Again, a discussion with the developers confirmed this fact.

Going back to the data, we’ll use the same assumption that the curves should intersect at some point to make the function continuous. Extrapolating from the high-BFPM data, we can sort of estimate that the slope is the same - in other words, the energy component isn’t changed. If we do that and tweak the intercept, we get the orange fit. Again, this is phenomenological, but an intercept of 7 GPM makes a lot of sense.

  • If Aux Loader adds 3 GPM to the time component only, we would expect an intercept of 4+3=7
  • This also accurately predicts the crossover point at around 9 BFPM. The crossover happens when the BFPM is equal to baseline GP generated in a minute divided by 79 GP (the other 21 GP come from the BF itself):
    ( 700 GP ) / (79 GP) = 8.86
  • There are no other logical combinations of slope and intercept that match the “3 GPM” value given on the tooltip. Every other fit has some feature that doesn’t make sense.

Thus, Aux Loader adds 3 GPM to the time component, or

3 Grenades / min * (1 min / 60 s) * (100 GP / 1 Grenade) = 5 GP / s

Giving a total of 11.67 GP/s when added to the baseline.

Conclusions:

  • Auxiliary Loader adds 3 GPM (or 5 GP/s) to the time component.
  • We assume that Overclocked Loader works the same way (120 GP / 60 s = 2 GP/s)
5 Likes

Test 3: Initial Grenade Chance with KSR

Methodology:

Enter combat with Burst Fire. Record whether it procs a grenade or not. Wait approximately a minute. Repeat.

Data:

Google Sheets - “Initial Grenade Chance (KSR)” Tab

Grenade No Grenade Total Initial % 95% CI
76 174 250 30.40% 5.70%

Analysis:

A somewhat limited set of data here, but it seems that the chance of getting a grenade on your first Burst Fire (assuming that's what you use to enter combat) is about 30%. The 95% confidence interval is a little under 6%, but I'm not sure it's worth spending several hours to increase the precision on that.

Conclusions:

  • You have a 30% chance to proc a grenade with the first Burst Fire upon entering combat
5 Likes

Test 4: Grenade Recharge After Initial Proc (KSR)

Methodology:

Enter combat with Burst Fire (BF0). It does proc a grenade. Fire grenade. Then Spam Burst Fires. Record which subsequent Burst Fire procs a grenade (BF1 thorugh BF6).

Data:

Google Sheets - “Short Mechanics Tests (KSR)” Tab

BF# Grenade Procs %
1 0 0.00%
2 0 0.00%
3 0 0.00%
4 59 56.19%
5 46 43.81%
6 0 0.00%

Analysis:

Originally this test was to help me nail down two things: * Do we proc a grenade at 100 GP, or is it possible to proc one with fewer GP? * Do we start combat with any GP?

For example, if we have 70 GP, maybe that means we have a 70% chance to proc a grenade? Likewise, maybe we could explain the previous test’s results by having an initial “balance” of GP that’s set upon entering combat.

First of all, this test proves that Grenade Points do not equate to Grenade Percent. If we assume that we start with 0 GP, by BF3 we’d have around a 76 GP. If that was a 76% chance of proccing a grenade, we’d have seen at least one trial where that happened. The fact that we see nothing in BF1 through BF3 proves that it’s not a linear percentage.

However, this test proves that there’s something random still in the system. Assuming you start with 0 GP, BF0 through BF3 should give you 84 GP, and at least 20 GP from the time component. This means BF4 should always proc the grenade. The fact that we don’t always proc a grenade on BF4 means there has to be some sort of random element.

It can’t be the starting amount of GP, since as mentioned, even starting with the minimum of 79 (+21 from BF to proc on BF0), we’d be consistently proccing again on BF4 and not BF5.

It can’t be the GP per Burst Fire. Adding a range of +/-5 GP/BF does allow for a “minimum” situation where you don’t have 100 GP by BF4, but it would be a very small probability, and wouldn’t give us the 56/44 split we see in the data. We need to increase the range to well over +/-10 GP/BF to match the probability distribution, but that would allow for lucky streaks where we could proc on BF3.

It’s not likely to be the time-based component, just because that would be annoying to code. But we can’t rule it out completely.

It could also be a host of other things. For example, there could be an enforced lockout of one or two seconds (though I went on to disprove that hypothesis in a later test). And while we’ve ruled out a linear relationship between GP and proc chance, we haven’t ruled out a nonlinear one. The probability could depend in some more complicated mathematical way on the GP balance.

Unfortunately, that would be very difficult to determine without a ridiculous amount of data. And I’m not sure there’s much value in trying to work out those details if we’re mostly interested in having a steady-state model for theorycrafting.

As an additional note, I repeated this test with the Aux Loader and got similar results. The main difference is that you now proc on BF3/BF4 instead of BF4/BF5 because of the increased time component. You can find that data on the “Short Mechanics Tests (Aux)” Tab

Conclusions:

  • The system contains some random component
  • The random component is not just the GP granted per BF or the initial GP upon entering combat
5 Likes

Test 5: Grenade Recharge w/o Initial Proc (KSR)

Methodology:

Enter combat with Burst Fire (BF0). It does not proc a grenade. Cast N Placed Shots (PS), followed by a 2nd Burst Fire. Record whether this Burst Fire procs a grenade.

Data:

Google Sheets - “Short Mechanics Tests (KSR)” Tab

BF1 Result
N (# PS) Grenade No Grenade
0 6 8
1 9 8
2 5 3
3 4 5
4 24 3
5 9 3
6 19 2
7 100 0

Analysis:

This was the complement to the previous test, to try and help determine whether Burst Fire's GP contribution had any randomness and whether we start with any initial GP.

There are a few major points to note here:

  • The N=0 data shows that it is possible to proc a grenade on the first BF cast while in combat if the initial BF does not proc a grenade. Again, this causes some problems in the model - the only way this works is if we do start with some GP in the bank.
  • The N=7 data is odd. After a sequence of BF-PS-PS-PS-PS-PS-PS-PS-BF, we’ve built up between 88.7 and 95.4 GP (depending on whether the time-based component “ticks” before or after we cast the second BF. That’s not quite a full 100 GP. If we can start with 0 GP, then the model would predict we’d have at least a small chance to see a “no-grenade” BF after 7 Placed Shots.

This also suggests the GP per BF isn’t a random range, since if it could grant less than 21, we’d almost certainly see a “no-grenade” BF after 7 Placed Shots. So this agrees with the previous test about the fact that the GP / BF is unlikely to be random.

But it confirms again that whatever is going on behind-the-scenes in the grenade system is more complex than a simple accumulator that gives a grenade if you’re above 100 GP.

Conclusions:

  • The GP / BF is probably not random
4 Likes

Test 6: Back-to-Back Grenade Test (KSR)

Methodology:

Enter combat and cast 40 Placed Shots (PS). Then spam Burst Fire. Record whether each Burst Fire procs a grenade, looking for back-to-back procs.

Data:

Google Sheets - “Short Mechanics Tests (KSR)” Tab

Each column below is a separate trial, recording the 41st-50th cast of the sequence.
Key:
“BF” is a Burst Fire that does not proc a grenade
“BF-G” is a Burst Fire that does proc a grenade
“G” is a grenade cast

1 2 3
BF-G BF-G BF-G
G G G
BF BF BF
BF-G BF-G BF-G
G G G
BF BF BF-G
BF-G BF-G G
G G BF
BF BF BF
BF BF BF-G
- BF-G G
- - BF

Analysis:

This test was designed to check whether there was a relevant "cap" on GP. By casting 40 Placed Shots, you accumulate about 267 GP. At the time I performed the test, I thought it was only 5 GP/s, which would put us at exactly 200, but subsequent testing revealed the time component was higher.

Because we saw back-to-back grenades in test 3, we’re fairly certain that any cap on GP would have to be over 300. Since it’s rare that a player would accrue that many GP, it’s likely there isn’t a cap at all.

Another thing to note, however, is that this test also shows that the model is flawed. If we were guaranteed to get a grenade above 100 GP, all three of these tests should have looked like this:

1
BF-G
G
BF-G

The fact that we didn’t see that reinforces our earlier deduction: there must be a random element to this system for that to happen.

But more importantly, this proves that random element is not simply a GP accounting trick (i.e. a random amount granted per BF or a random initial amount of GP upon entering combat). It must be related to the proc process itself, meaning that being above 100 GP does not guarantee a proc, even if it does on average grant a proc.

From what we’ve seen there’s a very high probability of getting a grenade if you’re over 100 GP (notice how the initial BF in the 41st cast slot always does), but there’s clearly something else involved.

The fact that all three trials had an intervening “no-grenade” BF before the next “grenade” BF is also suggestive, because it means that even though we have around 195 GP at that moment, we had a fairly low probability of getting a proc. This, along with the data from test 4, suggests there’s some sort of time-based component to the grenade proc process itself.

Conclusions:

  • The random element in the system is related to the process of proccing a grenade.
  • Having over 100 GP does not guarantee a grenade, though it seems to give a very high probability
  • Proccing a grenade seems to lower the chance of getting a proc for a short time thereafter
4 Likes

Heya, thanks for the insane thread Theck !

I’m gonna hijack your thread and post my various rifle sim results (based on your data), as soon as they’re ready and formatted. Figured people might be interested in having this as well.

Edit: all right, so, based on my simulator (https://docs.google.com/spreadsheets/d/11Zb5lGrf1yeM9QkXpvFhluVbhIrMOvobyjCx_Ok2XMw/edit#gid=1918950868), i’ve updated already a while ago the CP/s values for various rifles in the SWL spreadsheet (https://docs.google.com/spreadsheets/d/1HVgBeFTbXH0eZ5dJVtzXXm6HyITMHLUyM8avntoPOSI/edit#gid=1352797216). Here are the condensed results in “Combat Power per second, scaled by signets, but not by crits”:

  • Auxiliary Loader: 0.49 CP/s. This is the best rifle when it comes to flexibility and utility - the rifle that pumps out the most grenades, hence, the best for consistent DPS and for purging. It can be played with an offhand’s elite like Blizzard for the best results.
  • High-Yield Launcher: 0.49 CP/s. Similar results to the Auxiliary, however, this rifle is best played with High Explosive Grenade due to it buffing it multiplicatively by around 20%. Also buffs the Incendiary Grenades’ damage multiplicatively by 20%. It can still be played with Blizzard (or whatever offhand’s elite you prefer) however without any significant losses.
  • AEL-550: 0.5 CP/s. This rifle must absolutely be played with High Explosive Grenade, otherwise it doesn’t bring any additional effect. This rifle is a rare case where having Efficiency mk3 is actually viable (not saying it’s always the best option, just saying it competes with the other DPS affixes).
  • Infernal Loader: 0.19 CP/s. Not much to say besides the fact this rifle is just not as good as the rest. The damage bonus is additive.
  • Rifle of the Sworn Revenge: 0.57 CP/s. Same statement as AEL-550, this rifle only truly shines if it is played with High Explosive Grenade due to cooldown resets on it. Due to its rarity on the market, and the difference in DPS between Energy, Havoc and Destruction affixes, any non Destruction Sworn Revenge rifle (ie Havoc or Energy) would provide mostly the same DPS as a Destruction High-Yield / Auxiliary / AEL-550 rifle (because of how significantly stronger Destruction is compared to the others).
  • KSR-43: brings no additional DPS since the rebalance.
  • Hellfire Assault Launcher: is actually a DPS loss over a random rifle without any effects, since it consumes grenades to transform them into a less strong damage proc. This is a weapon designed for offhand.
  • MIRV Launcher: unfortunately, it is bugged since the rebalance. According to my tests, it procs 1 to 3 clusters at most, even on huge targets, which makes it not worth using anymore (before the balance patch, it used to always drop 5 clusters that could all potentially hit the same target, making it the best big boss killer).

As an added bonus: the Military Strap’s newly calculated CP/s is equal to around 0.18 CP/s.

PS: i’ve used Theck’s data that i’ve plugged in my simulator in order to calculate these numbers.

3 Likes

Definitely some interesting artifacts here. I don’t see if you ever said the nature of the bug affecting low BF rates?

Have you tried a model like hammer, where BFs that load a grenade are -100 GP and BFs that don’t load a grenade are +50 GP or whatever balances out the math? Suggesting this cause it makes the scenario where you always load a grenade on 1 of 2 casts more plausible: if the first fails you always have enough GP on the second cause it only takes 2 casts to go from 0% to 100% probability (you have 0% on 3rd cast, 50% on 4th, 100% on 5th).

I’m wondering if the randomness comes from an offset chance + initial GP also; say you enter combat at 100 GP, and the chance to load a grenade is GP-70, meaning you have 30% chance at 100 GP, 100% chance at 170 GP. Simplest version of this would say ‘also GP can be negative’ but if very lucky grenade rolls cost you less GP that could also tweak the outcome slightly (eg. shifting from 20 to 25 per BF).

2 Likes

I did not. That was intentional.

I have, it doesn’t work. That’s one of the things I investigated with Tests 4 and 5. There was no combination that fit the data from those tests and was consistent with the stochastic results (i.e. slope/intercept) from Tests 1 and 2.

Nope. Same deal - this was one of the things I investigated in Tests 4 and 5. I wasn’t able to reconcile that data with any combination of initial balance + grenade cost. I used the “negative GP” version, but as you noted it’s equivalent to having a higher threshold for grenades. The data rules out any possible linear probability scaling with GP and any “random initial GP” model.

3 Likes

Hmm, most interesting test I can think of would be N placed shots, then the chance of a successful grenade load. With 0 you have 30%. Mostly just to see the shape of the outcome (does it jump from 30% to 100% at 100 GP, or is it a steady increase, or what)

iirc the rifle energy-scaling is intended to be done by having BF increase GP (since more energy is more BFs) is that accurate or does it have a separate crit/energy based GP increase?

I might run some N-placed shot tests on my alt with a KSR, it’s just kinda tedious waiting to get out of combat.

2 Likes

Test 5 is similar to what you’re suggesting, except that I start with a BF in that test instead of PS. And as you can see, it does become 100% in that test after 7 PS have been cast, but before that it definitely isn’t. But there isn’t enough data there to suss out the probabilities below that, because I was stopping the test as soon as I saw a couple of “no grenade” cases to move on to the next N.

Test 6 is exactly what you’re suggesting, but with only one N represented (40). That shows that it becomes 100% at some point for sure.

1 Like

Addressing this specifically: it doesn’t seem that there’s any crit dependence. The first set of data I took used a variety of crit % and other stats, and it didn’t make any difference - I still got the linear relationship between GPM and BF. So it doesn’t appear that critical chance factors into it at all.

2 Likes

Looking back at test 5, simplest explanation I see is that after N seconds in combat without a grenade, you have 30+10*N% chance of loading a grenade without having the 100 GP. so your 8th attack has to load a grenade. The actual observed odds were 30.5%, 42.8%, 52.9%, 62.5%, 44.4%, 88.9%, 75%, 90.5%, 100% but those are n<10 samples.

The tests capping 100% grenades at 5 bf/m instead of 7-8 indicates that it doesn’t reset to 30% when you do fire a grenade though. So it’s either a one time deal entering combat or it drops to 0 and you need 10 no-grenade shots in a row to trigger it (so 5 bf/min yes, 6bf/min with 9 no-grenades in between, only 90%)

The other test which went 55% 4th 45% 5th BF is kinda puzzling though in this model, there shouldn’t be a 55% jump in probability after 1 second unless it has a negative penalty for the first few seconds after a grenade. So maybe that also indicates it’s only applicable for the first grenade.

I was pondering if the constant GP vs. the BF GP global timers could lead to randomness but I don’t see how. If they do run separately, you have a 1 second cast window from entering combat with about 0.5 seconds worth where the 6.67 is generated before the 21 and 0.5 seconds after, but having 5 BFs + 5 constants vs. 5 BFs + 4 constants is only a 6.67 gp difference, so if it has actually been set to -70 GP by the first attack going off, the 5th BF shouldn’t be a guaranteed grenade.

Although maybe it’s actually awarded as 10 GP every 1.5 seconds or some nonsense… then 63 + 30 vs. 63 + 40 is the difference between an attack having enough GP or not, and 84 + 30 vs. 84 + 40 is always gonna happen.

1 Like