#Minigun Build Graphs

106 messages · Page 1 of 1 (latest)

dawn light
#

Assumptions

  • Max player speed upgrades; no Speedy Gunzales, Glass Cannon, or other speed/damage jokers unless specifically listed
  • All shots are either weakpoint or bodyshot hits; no misses
  • Full damage and rate-of-fire upgrades on the minigun
  • Fully spun-up minigun
  • Fire and/or electric damage over time (dot) are included if, and only if, a joker that can apply them is equipped on the minigun.

Calculation methods

  • Average, single-target DPS is shown with damage over time (dot) effects active and chance-based effects averaged out
  • Destroyer bonus is active
  • Damage upgrades stack multiplicatively
  • Rate of fire upgrades stack additively
  • Player speed upgrades stack additively
  • Chance upgrades stack additively
  • Speedster applies a damage and rate of fire bonus equal to half the total player movement speed bonus, up to a limit of 55% bonus at +110% movement speed
  • Weakpoints give x1.5 bullet damage; no effect on explosions or dot
  • Elemental reactions occur when an Acid elemental or explosive bullet hits
    • Assumes you never take Acid explosion by itself; you would take Fire explosion instead
    • Assumes elemental reactions are not added by Electric or Fire bullets/explosions
    • Therefore, the total rate of elemental reactions is the sum of:
      • 10% of rate of fire, if Elemental Spin is present
      • 5% of rate of fire x number of Acid explosion jokers
  • Elemental reactions and explosive bullets both do 15 flat damage (each instance)
  • Acid and electric dot deal 5 dps; Fire dot deals 10 dps.
  • Acid dot only applies if there is neither Fire nor Electric dot
  • Explosive bullets deal regular damage in addition to explosive damage, and also elemental reaction damage if the explosion is Acid.
  • Elemental Minigun elemental bullets are evenly split between Fire, Acid, and Electric
#

Notes

  • Elemental effects scale with rate of fire only. Speedster, Destroyer, and Lucky Strike scale with both damage and rate of fire.
    • Therefore, elemental effects are most useful when rate of fire is upgraded, damage is not upgraded, and fewer shots hit weakpoints.
    • Therefore, Lucky Strike and Destroyer become more powerful at higher levels of Speedster. Elemental effects become relatively less powerful (in DPS impact) and less ammo-efficient (they still improve ammo efficiency, but not as much as non-elementals).
    • I have not checked whether Glass Cannon applies a damage bonus to elemental effects.
  • Disgrace applies the same Speedster synergy as Run and Gun x1. Note that Disgrace uses 3 player Joker slots instead of 2 weapon Joker slots. Choose depending on which slots you find more valuable, and whether you would prefer to have a speed buff while not shooting, and how much you like your horse.
  • Speedster reaches its cap with 2 Run & Gun + Disgrace, or 3 Run & Gun without Disgrace. In both cases, at least 20% player movespeed upgrade is also needed, but you probably have that.
  • Elemental effects are slightly more efficient than they appear, since they linger after you swap to another target. In theory this means you could save some time and ammo by swapping early.
  • Elemental effects have some additional utility that is not shown here, such as area effects on crowds, puddle creation, movement speed debuff of acid, and interactions with spells.

Please submit corrections or comments to help improve this guide.

silk snow
#

I don't have anything to add, but I adore this

#

Where would Elemental Spin+Speedster+Explosive (Acid)+Explosive (Fire) rank? I want to set off a lightshow of elemental effects

raven summit
#

@silk snow Destroyer being active all the time skewes the chart a lot, ain't it?

raven summit
# silk snow It really does, yeah

Maybe you can set upon a specific stat point investment, and include the destroyer dmg only in the (totAmmo-225)/TotAmmo part of the mag
I mean, very much like you specify the chart is made with Disgrace on

dry cargo
#

I don't think you took into consideration that multiple Ele Projs can proc on the same bullet, unless I'm reading this wrong. From our DPS testing, Ele Projs x3 should be outdpsing Ele Spin

raven summit
dry cargo
#

And ig point 1 if running Acid Projs+Ele Spin

raven summit
dry cargo
#

I don't understand what you mean, an Ele Spin+Acid Projs build can proc both an acid bullet and an acid proj in the same bullet

#

That'd trigger two reactions if the target was previously afflicted with fire

raven summit
stuck forge
#

Hella good work man

#

Nice

dry cargo
#

Well my general point is that the chart doesn't correlate with the testing we did, so it was something I'm curious about

raven summit
dry cargo
#

I think someone said they did yesterday, tryin gto remember their name

raven summit
#

Let's help the OP and find that info as precisely as we can 😄

dry cargo
#

@sharp anvil What were your results on testing ele projs and proccing multiple times in a single shot? Possible or no?

raven summit
#

I think the cases to test are these

ElemSpin x Proj | Same element : yes~~/no~~
ElemSpin x Proj | Non-matching element : yes~~/no~~
ProjX x ProjY : yes/no
ProjP x ProjA x ProjE : yes/no

edit: first 2 cases do happen, thank @dry cargo

dry cargo
#

Well the first two should definitely be possible per bullet

#

The last two is what we need to figure out

raven summit
dry cargo
#

Okay, well I know for a fact that the first two points are possible scenarios

#

I guess I have nothing better to do, I'll hop on FFW and confirm all 4

dry cargo
dawn light
#

For example elespin + 1 acid, it should be 10% of all shots are elemental acid, 5% are explosive acid. The question is whether they can overlap or not:

If they can overlap, then:

  • 0.5% of bullets are elemental acid + explosive acid
  • 0.5% of bullets are elemental fire + explosive acid
  • 0.5% of bullets are elemental elec + explosive acid
  • 9.5% of bullets are elemental acid only
  • 9.5% of bullets are elemental fire only
  • 9.5% of bullets are elemental elec only
  • 3.5% of bullets are explosive acid only

If they can't overlap, then:

  • 10% of bullets are elemental acid only
  • 10% of bullets are elemental fire only
  • 10% of bullets are elemental elec only
  • 5% of bullets are explosive acid only.

If they can overlap, and if an acid elemental bullet with acid explosion produces two explosions, then the average DPS is the same as non-overlap. But the second one is easier to calculate and is how my code works.

dry cargo
#

Proof that Ele Spin and Ele Projs can overlap

dawn light
#

If an acid elemental bullet with acid explosion produces only one explosion, then elespin + acid explosion dps will be overall 0.5% lower than my code thinks. I guess that would technically matter then, but not by much

#

Only one reactive explosion*

raven summit
dawn light
#

Yes, that is considered

dry cargo
#

Proof that different Ele Projs can proc on the same bullet

dawn light
dry cargo
dawn light
#

That does more dps than elespin on the graph. So it seems to match your testing. The graph predicts that even 1 acid 1 fire does more than elespin.

dry cargo
#

It's these two points that I'm not certain of

dawn light
#

different number of rng

raven summit
dawn light
#

Whether it's on the same bullet or not, ultimately as long as it's 5% of each, the average dps calculation should be the same i think. So it seems correct

raven summit
#

I'm complicating things, I know 🤣

dry cargo
#

To me, it seems the takeaway is Speedster+RnG is the way to go for any build

dawn light
#

Though if i tried to simulate the amount of consistency, then it would make a difference. But im not a fan of statistics so i dont really want to do that lol

raven summit
#

You mean the total difference should be so low that's negligible. 🤷‍♂️ ok

dawn light
#

No, I mean the average dps is the same but the consistency is different

#

Like the difference between lucky shot and just +10% damage on every shot

raven summit
#

Wait, if you have counted each %proj as mutually exclusive there would be a difference in DPS

dawn light
#

If it's possible for projectiles to overlap then the percentage of regular bullets should end up slightly larger, so it averages out

raven summit
#

K%pA x Y%pF -> there is a little chance that both explosion procs together, therefore having 2projBoom(A&F)+1guaranteedReactBoom(A+F) instead of only 1projBoom(A||F)+1maybeReactBoom(depends if there already is an ongoing elemental effect or elemSpin proc)

dawn light
#

Unless the overlapping projectile doesnt do an overlapping amount of damage

#

Hopefully this shows what i mean

raven summit
dry cargo
#

Why would that extend the No Boom bar?

dawn light
#

red box is 10%, blue box is 5%. If the no boom box didnt extend, then things wouldnt add up to 100% anymore

dry cargo
raven summit
#

Since 10% and 5% are run together and not exclusively, the chance of them both being triggered is ADDED to each one

sharp anvil
raven summit
dry cargo
dawn light
#

your picture is prettier than mine

raven summit
#

If they were mutually exclusive, you would've been totally right

dawn light
#

But then doesnt this mean there are more than 5% explosive bullets for one blue joker?

raven summit
#

Here them both shown together
The second is the addictive %proc one

dry cargo
#

See, this is why I didn't want to do the math calcs bruhgalia

dry cargo
raven summit
raven summit
#

By the way, the single 0-100% bar is no way the best way to show it

dawn light
#

I mean we can plug in this other method and see how much the graph changes
Uh but you might have to help explain how the math works with something like elespin + 2 acid, or 3x proj

raven summit
#

You have to run separately

  1. 30% Spin proc, of which 33.3333% is each element
  2. 0-5-10% Acid Proj Proc
  3. 0-5-10% Fire Proj Proc
  4. 0-5-10% Electric Proc

In which 2,3,4 depends on the joker counts

#

edited

#

edited

#

... damn, I am writing like an imbecile because I'm fast translating from my native language
Sorry if it's not clear 🙁

#

Each proc is evaluated independently. This means the system is not a single RNG table like:

30% Spin
5% Acid
5% Fire
60% Nothing

Instead, the rolls can overlap, creating combined outcomes such as Spin + Acid, Spin + Fire, Acid + Fire, or even all effects together. Because of this, the effective “nothing happens” chance is different, while the probability space becomes significantly more complex due to the additional cross-proc combinations.

Thanks GPT 🤣

#

From gpt itself

dawn light
#

The current code to calculate average dps contribution of explosions is like this:

  # Acid/fire reactive explosions
  reacting_proportion = 0.1 * elemental_spin_jokers + 0.05 * explode_acid_jokers
  dps_reaction = rof * reacting_proportion * 15

  # Explosive rounds
  exploding_proportion = 0.05 * (explode_fire_jokers + explode_acid_jokers)
  dps_explosion = rof * exploding_proportion * 15

What should it be changed to?

raven summit
#

.. do you consider that for each shot there could be an underlaying DoT on the enemy?

or each shot is stateless?

#

If each shot is stateless you're missing A LOT of react procs

dawn light
#

I assume there is always a dot of elec and fire (if elespin is selected) or of fire (if fire proj is selected)

#

But that's a separate part of the code

raven summit
#

I am trying to debug what the LLM provided on my prompt.

It seems ok but I'm still reading...


`enemy_has_acid = False
enemy_has_fire = False
enemy_has_electric = False

spin_proc_proportion = 0.30 * elemental_spin_jokers

spin_acid_proportion = spin_proc_proportion / 3
spin_fire_proportion = spin_proc_proportion / 3
spin_electric_proportion = spin_proc_proportion / 3

acid_proj_proportion = 0.05 * explode_acid_jokers
fire_proj_proportion = 0.05 * explode_fire_jokers

acid_any_proportion = (
spin_acid_proportion
+ acid_proj_proportion
- spin_acid_proportion * acid_proj_proportion
)

fire_any_proportion = (
spin_fire_proportion
+ fire_proj_proportion
- spin_fire_proportion * fire_proj_proportion
)

electric_any_proportion = spin_electric_proportion

react_boom_proportion = 0.0

acid_fire_reaction = acid_any_proportion * fire_any_proportion
acid_electric_reaction = acid_any_proportion * electric_any_proportion

react_boom_proportion = (
acid_fire_reaction
+ acid_electric_reaction
- acid_fire_reaction * acid_electric_reaction
)`

#

`if enemy_has_acid:
react_from_existing = (
fire_any_proportion
+ electric_any_proportion
- fire_any_proportion * electric_any_proportion
)

react_boom_proportion = (
    react_boom_proportion
    + react_from_existing
    - react_boom_proportion * react_from_existing
)

if enemy_has_fire:
react_from_existing = acid_any_proportion

react_boom_proportion = (
    react_boom_proportion
    + react_from_existing
    - react_boom_proportion * react_from_existing
)

if enemy_has_electric:
react_from_existing = acid_any_proportion

react_boom_proportion = (
    react_boom_proportion
    + react_from_existing
    - react_boom_proportion * react_from_existing
)

proj_boom_any_proportion = (
acid_proj_proportion
+ fire_proj_proportion
- acid_proj_proportion * fire_proj_proportion
)

proj_boom_proportion = max(
0.0,
proj_boom_any_proportion - react_boom_proportion
)

dps_reaction = rof * react_boom_proportion * 15
dps_explosion = rof * proj_boom_proportion * 15`

#

Something is off. Probably the LLM forgot a couple constraints

dawn light
#

Hm. A couple issues i have with this LLM output:

  • I think enemy_has acid should always be False since acid effect is immediately removed whenever a fire or elec is applied.
  • If a bullet is both elemental acid and exploding acid, in this code there will only be one reaction explosion instead of 2. I think with the game behavior there should be 2?
#

enemy_has_acid*

#

I have a question. With pure elespin and nothing else, what percentage of bullets should have a reaction explosion? In my code currently it's 10% because I assume

  • Every acid bullet explodes (due to fire/elec already being on target)
  • Fire/elec bullets do not explode (due to target never having acid status)
    Is that correct?
raven summit
#

You're starting from a false start, because the enemy could acually have any of the 3 statuses :/

#

However in case of enemy never having Acid DoT, you're correct

dawn light
#

So it would require that the minigun is the only source of status, and if minigun shot an acid bullet first, you keep shooting long enough to replace it with fire/elec?

raven summit
#

🤔 maybe I am wrong, now that I think of it.
I should recheck which element overrides which other

#

Your starting assumption should be acceptable.

plain comet
#

ayy, happy to see Tanamr graphs here too

raven summit
#

I can't check "real" bugs right atm, but logic seems fine now...

#

enemy_elements = {"fire", "electric"} spin_proc = 0.30 * elemental_spin_jokers spin_outcomes = [ (None, 1.0 - spin_proc), ("acid", spin_proc / 3), ("fire", spin_proc / 3), ("electric", spin_proc / 3), ] acid_proj_chance = 0.05 * explode_acid_jokers fire_proj_chance = 0.05 * explode_fire_jokers reactive_pairs = { frozenset(("acid", "fire")), frozenset(("acid", "electric")), } react_boom_any_proportion = 0.0 proj_boom_any_proportion = 0.0 proj_boom_expected_count = 0.0

#

`for spin_element, spin_probability in spin_outcomes:
for acid_proj_happened in (False, True):
acid_proj_probability = (
acid_proj_chance if acid_proj_happened else 1.0 - acid_proj_chance
)

    for fire_proj_happened in (False, True):
        fire_proj_probability = (
            fire_proj_chance if fire_proj_happened else 1.0 - fire_proj_chance
        )

        probability = (
            spin_probability
            * acid_proj_probability
            * fire_proj_probability
        )

        elements = set(enemy_elements)

        if spin_element is not None:
            elements.add(spin_element)

        if acid_proj_happened:
            elements.add("acid")

        if fire_proj_happened:
            elements.add("fire")

        has_projectile = (
            acid_proj_happened
            or fire_proj_happened
        )

        has_reaction = any(
            pair.issubset(elements)
            for pair in reactive_pairs
        )

        proj_boom_count = (
            int(acid_proj_happened)
            + int(fire_proj_happened)
        )

        if has_projectile:
            proj_boom_any_proportion += probability

        proj_boom_expected_count += (
            probability * proj_boom_count
        )

        if has_reaction:
            react_boom_any_proportion += probability

dps_reaction = rof * react_boom_any_proportion * 15
dps_explosion = rof * proj_boom_expected_count * 15`

dawn light
#

Wow ok. This code is more complicated. Seems like this one is going through different element combinations to calculate how often they happen on the same shot.
An issue is that according to this guide #1500259029400948847 message, an acid bullet can only trigger an explosion of the first element that the enemy had applied. And the explosion damage is the same in both Acid/Fire and Acid/Elec. So there should not be a need to check different combinations? I think
I will have to come back to this later. Thanks for the discussion so far

raven summit
#

Using my code (assuming that's correct!!!)
I cannot really check on RnG presence, but it's good enough for comparing a few choices

sharp anvil
#

Btw, I got the DPS meter thingie to show total damage over the most recent 40s. Didn't have time to test many different builds, so I focus on only 2 (max firerate, 8 ammo) and Hero loadout with Disgrace + Glass Cannon with 3 Ammo Bags (I would use the same for both anyway), for 465 rounds in total. For elem with Speedster, 2x Acid, 1x Pyro, 1 RnG, I got a fair mix between 10.6k - 11.3k. For dmg with Speedster, Destroyer, Lucky, 2x RnG, I got 11.5k quite consistently, and rarely 11.7k-11.8k. No weak spots for either.