The Binding of Isaac: Rebirth

The Binding of Isaac: Rebirth

[AB+] Eevee!
This topic has been locked
Niflthaena 28 Jul, 2019 @ 8:05am
Stat calculation problems
(This is a thread to give code feedback to the dev. If this is not you, you will probably be disinterested.)

Eevee has a problem - the way their stats are calculated leads to a much slower power curve than other characters.

They start with damage of 7.5 and tear delay of 20. This gives them a starting DPS on par with other characters, and is almost identical to a basic Isaac starting with Eve's Mascara. Therefore, they're not underpowered at the start of a run.

Practically any character, given two of "The Sad Onion", will halve their tears stat (regardless of where it starts). Therefore, two tears items should roughly double DPS.
Most characters start with base damage of 3.5 and a fixed damage multiplier, and most damage up items give about 1 damage. Therefore, three damage items should roughly double DPS.

Eevee has the same tears multiplier as most characters, but then there's a fixed +10 that's added afterward. For Eevee, two tears items brings fire delay from 20 to 15 - a gain of only one third. Additional tears items have no effect, as the game won't take tear delay below 5 in normal circumstances - and there's still the flat +10.
Eevee's high base damage is also due to flat addition. Their base damage of 7.5, plus three damage items, will generally come to around 10.5 - a gain of ~50%.

Taking both these issues together, a mid-game run with 2 tears up and 3 damage up items comes to about (1.5 * 1.33) = 2x power. Every vanilla character would see a gain of (2 * 2) = 4x power at this same point.
Therefore, a mid-game Eevee has only roughly half power, and gets worse as more items are added.

Fixing this is not difficult, however. Vanilla characters have multipliers to their FireDelay and Damage stats, rather than using flat changes; this lets them maintain the standard power curve.
Rather than using
player.MaxFireDelay = player.MaxFireDelay + Eevee.FIREDELAY
you can write something like
player.MaxFireDelay = math.floor((player.MaxFireDelay * Eevee.FIREDELAYMULTI) + 0.5)
which takes the existing stat, multiplies it by a constant, and rounds it. (add 0.5, then floor.)

Note that you could even load different constants depending on which Eeveelution is active. Hypothetical example: Eevee gets the slow-but-strong Shadow Ball (2x damage, 2x delay), Flareon gets the rapid but low damage Flamethrower (0.5x damage, 0.5x delay), etc. This would be a neat way of differentiating evolutions, giving sudden and dramatic changes to how the character plays.
Last edited by Niflthaena; 28 Jul, 2019 @ 8:14am
< >
Showing 1-2 of 2 comments
Benny  [developer] 28 Jul, 2019 @ 1:08pm 
This is what I get for touching base stats and for copy pasting what I saw in a Lytrbringr video as I just wanted to get something working. I’ve noticed this problem in testing while I was working on the Eeveelutions. I’m actually surprised that the couple people I gave my main.lua to help me didn’t catch onto this, nor the did the 2k+ people that subscribed to this address it (until now pf course). As of right now I’ve finished the coded effects for the first 3 Eeveelutions, but messing with the stats have been the least favorited thing on my mind to touch on. I’ll feel free to add what you suggested for Eevee’s multiplier, but I’ll want to think about the stats for the Eeveelutions, as they were created around Shadow Ball as it was.
Niflthaena 28 Jul, 2019 @ 6:39pm 
Originally posted by Sanio:
This is what I get for touching base stats and for copy pasting what I saw in a Lytrbringr video
It happens! There's no canonical best practice to work from. It's no big deal, and you have a strong foundation.

The Eeveelution stat ideas were meant purely as a hypothetical. They don't need to be the same number, and they can even mix the two methods.

The biggest point I'd like to mention is that any base stats that use multipliers will have the same power curve, even if you change the numbers - 2x damage and 0.5x delay has the same curve as 1x/1x, even though the end DPS is quadrupled at every point.
Any base stat changes that use addition will either change or move the curve. Adding flat damage is powerful, but dilutes all other damage effects. Subtracting flat tear delay, by contrast, both improves DPS and accentuates other Tears Up effects.
< >
Showing 1-2 of 2 comments
Per page: 1530 50