Tables of damage reduction from ac and ev


Ask fellow adventurers how to stay alive in the deep, dark, dangerous dungeon below, or share your own accumulated wisdom.

Tartarus Sorceror

Posts: 1774

Joined: Tuesday, 23rd December 2014, 23:39

Post Friday, 9th January 2015, 05:21

Tables of damage reduction from ac and ev

I've written some code to test how much ac and ev reduce incoming damage. For instance, in the second table below, the entry for 9 ev and 19 ac for a player in fire dragon armor is 3.29. That means that incoming damage will on average be reduced by a factor of 3.29. So instead of dealing an average of 30/2 = 15 damage per turn, a death yak will deal 15 / 3.29 = 4.56 dmg per turn against such a character, in the long run average. This can help you plan builds and it shows the relative value of AC and EV.

From my limited testing in fsim, my numbers seem pretty close. They aren't spot on so I probably have an off by one error somewhere, but they seem close enough to be useful.

Caveats: use only with enemies who don't wield weapons, and who attack at normal speed.

To test my numbers for yourself if you don't believe them, what you do is first set up a character with AC and EV the same as in the table entry. Then, run fsim against the enemy and note the AvDam. Sum up the monster's attack damages (for a death yak, the sum is 30), then divide by 2, and then divide by my table entry, and the result should be within 0.5 of AvDam. If it's not let me know! Or also let me know if you see a bug in my code.

Against a death yak with GDR 0:
  Code:
>>> crawl.ev_ac_table(1,35,2,1,40,2,0,crawl.deathyak)
ac\ev 1     3     5     7     9     11    13    15    17    19    21    23    25    27    29    31    33    35    37    39   
1     1.07  1.12  1.18  1.25  1.33  1.41  1.51  1.62  1.75  1.91  2.09  2.31  2.56  2.84  3.15  3.49  3.86  4.26  4.69  5.14 
3     1.14  1.20  1.26  1.34  1.42  1.51  1.61  1.74  1.88  2.04  2.24  2.47  2.73  3.03  3.37  3.73  4.13  4.56  5.01  5.49 
5     1.22  1.28  1.35  1.43  1.52  1.62  1.73  1.86  2.01  2.18  2.39  2.64  2.93  3.25  3.60  3.99  4.42  4.88  5.37  5.88 
7     1.31  1.37  1.45  1.53  1.63  1.73  1.85  1.99  2.15  2.34  2.56  2.83  3.14  3.48  3.86  4.28  4.74  5.23  5.75  6.30 
9     1.40  1.48  1.56  1.64  1.75  1.86  1.99  2.14  2.31  2.51  2.75  3.04  3.37  3.73  4.14  4.59  5.08  5.61  6.17  6.76 
11    1.51  1.59  1.67  1.77  1.87  2.00  2.14  2.29  2.48  2.70  2.96  3.26  3.62  4.01  4.45  4.93  5.46  6.03  6.63  7.27 
13    1.62  1.70  1.80  1.90  2.02  2.15  2.30  2.47  2.67  2.90  3.18  3.51  3.89  4.31  4.79  5.31  5.87  6.48  7.13  7.81 
15    1.74  1.83  1.93  2.05  2.17  2.31  2.47  2.66  2.87  3.12  3.42  3.78  4.18  4.64  5.15  5.71  6.32  6.98  7.68  8.41 
17    1.88  1.98  2.08  2.20  2.34  2.49  2.66  2.86  3.09  3.36  3.69  4.07  4.51  5.00  5.55  6.15  6.81  7.51  8.27  9.06 
19    2.02  2.13  2.24  2.37  2.52  2.68  2.87  3.08  3.33  3.62  3.97  4.38  4.86  5.39  5.98  6.63  7.33  8.09  8.91  9.76 
21    2.18  2.29  2.42  2.56  2.71  2.89  3.09  3.32  3.59  3.90  4.28  4.72  5.23  5.80  6.44  7.14  7.90  8.72  9.59  10.51
23    2.35  2.47  2.60  2.75  2.92  3.11  3.33  3.57  3.86  4.20  4.61  5.08  5.63  6.25  6.93  7.69  8.51  9.39  10.33 11.32
25    2.53  2.66  2.80  2.96  3.14  3.35  3.58  3.84  4.15  4.52  4.95  5.47  6.06  6.72  7.46  8.27  9.15  10.10 11.11 12.17
27    2.71  2.85  3.01  3.18  3.37  3.59  3.84  4.13  4.46  4.85  5.32  5.87  6.50  7.21  8.00  8.87  9.82  10.84 11.92 13.07
29    2.90  3.05  3.22  3.40  3.61  3.84  4.11  4.42  4.77  5.19  5.69  6.28  6.96  7.72  8.57  9.50  10.51 11.60 12.77 13.99
31    3.10  3.26  3.43  3.63  3.85  4.10  4.39  4.71  5.09  5.54  6.07  6.70  7.42  8.24  9.14  10.13 11.21 12.38 13.62 14.92
33    3.29  3.46  3.65  3.86  4.09  4.36  4.66  5.01  5.41  5.89  6.45  7.12  7.89  8.75  9.71  10.77 11.91 13.15 14.47 15.86
35    3.48  3.66  3.86  4.08  4.33  4.61  4.93  5.30  5.73  6.23  6.83  7.54  8.35  9.27  10.28 11.40 12.62 13.92 15.32 16.79


Against a death yak with GDR 0.34 (chain mail or fire dragon armor):
  Code:
>>> crawl.ev_ac_table(1,35,2,1,40,2,0.34,crawl.deathyak)
ac\ev 1     3     5     7     9     11    13    15    17    19    21    23    25    27    29    31    33    35    37    39   
1     1.07  1.12  1.18  1.25  1.33  1.41  1.51  1.62  1.75  1.91  2.09  2.31  2.56  2.84  3.15  3.49  3.86  4.26  4.69  5.14 
3     1.16  1.22  1.29  1.36  1.44  1.54  1.64  1.77  1.91  2.08  2.28  2.51  2.78  3.09  3.43  3.80  4.20  4.64  5.10  5.59 
5     1.27  1.33  1.40  1.49  1.58  1.68  1.80  1.93  2.08  2.27  2.49  2.74  3.04  3.37  3.74  4.15  4.59  5.07  5.57  6.11 
7     1.39  1.46  1.54  1.63  1.73  1.84  1.97  2.11  2.28  2.49  2.72  3.01  3.33  3.70  4.10  4.55  5.03  5.55  6.11  6.69 
9     1.53  1.61  1.69  1.79  1.90  2.02  2.16  2.33  2.51  2.73  3.00  3.31  3.67  4.07  4.51  5.00  5.54  6.11  6.72  7.37 
11    1.69  1.78  1.87  1.98  2.10  2.24  2.39  2.57  2.78  3.02  3.31  3.66  4.05  4.49  4.99  5.53  6.12  6.75  7.43  8.14 
13    1.87  1.97  2.08  2.20  2.33  2.48  2.66  2.85  3.08  3.35  3.68  4.06  4.50  4.99  5.53  6.14  6.79  7.49  8.24  9.04 
15    2.09  2.20  2.32  2.45  2.60  2.77  2.96  3.18  3.44  3.74  4.10  4.53  5.01  5.56  6.17  6.84  7.57  8.36  9.20  10.08
17    2.34  2.47  2.60  2.75  2.92  3.11  3.32  3.57  3.86  4.20  4.60  5.08  5.62  6.24  6.92  7.67  8.49  9.37  10.31 11.30
19    2.64  2.78  2.93  3.10  3.29  3.50  3.75  4.02  4.35  4.73  5.19  5.72  6.34  7.04  7.81  8.65  9.58  10.57 11.63 12.74
21    3.00  3.15  3.32  3.52  3.73  3.97  4.25  4.57  4.93  5.37  5.88  6.49  7.19  7.98  8.86  9.82  10.86 11.99 13.19 14.46
23    3.21  3.38  3.56  3.77  4.00  4.26  4.55  4.89  5.29  5.75  6.30  6.96  7.71  8.55  9.49  10.52 11.64 12.85 14.13 15.49
25    3.45  3.62  3.82  4.04  4.29  4.57  4.88  5.25  5.67  6.17  6.76  7.46  8.27  9.17  10.18 11.28 12.48 13.78 15.16 16.61
27    3.70  3.89  4.10  4.33  4.60  4.89  5.23  5.63  6.08  6.61  7.25  8.00  8.86  9.83  10.91 12.10 13.38 14.77 16.25 17.81
29    3.95  4.16  4.38  4.64  4.92  5.24  5.60  6.02  6.51  7.08  7.76  8.56  9.49  10.52 11.68 12.95 14.32 15.81 17.40 19.06
31    4.22  4.44  4.68  4.95  5.25  5.59  5.98  6.42  6.94  7.55  8.27  9.13  10.12 11.23 12.46 13.81 15.28 16.87 18.56 20.33
33    4.48  4.71  4.97  5.25  5.58  5.94  6.35  6.82  7.37  8.02  8.79  9.70  10.75 11.93 13.23 14.67 16.23 17.92 19.72 21.61
35    4.75  4.99  5.26  5.56  5.90  6.29  6.72  7.22  7.81  8.49  9.31  10.27 11.38 12.63 14.01 15.53 17.19 18.97 20.87 22.88


And here's my Python source code
  Code:
# calculates the average factor by which incoming dmg is reduced by AC
def ACReduction(ac, dam, gdr = 0):
     totreduction = 0
     gdr_amt = int(gdr * dam)
     if gdr_amt > ac / 2:
          gdr_amt = ac / 2
     totdam = 0
     for roll1 in xrange(dam + 1): # damage roll
          for roll2 in xrange(ac + 1): # ac roll
               if roll2 < gdr_amt:
                    roll2 = gdr_amt
               if roll2 > roll1:
                    roll2 = roll1
               totreduction += roll2
               totdam += roll1
     if totreduction == totdam:
          return float("inf")  # 100% damage reduction, infinite reduction factor
     return float(totdam) / (totdam - totreduction)

# calculates the average factor by which incoming dmg is reduced by EV
# provide _either_ hitdice and fighter, _or_ tohit, but not both
def EVReduction(ev, hitdice = 0, fighter = False, tohit = None):
     if tohit == None:
          tohit = 18
          if fighter:
               tohit += int(25 * hitdice / 10)
          else:
               tohit += int(15 * hitdice / 10)
     totreduction = 0
     totdam = 0
     for roll1 in xrange(tohit + 1):
          for roll2 in xrange(2 * ev):
               for roll3 in xrange(2 * ev):
                    if roll1 < (roll2 + roll3) / 2:
                         totreduction += 1 # 1 damage dodged
                    totdam += 1
     # normalize to 1.0 totdam and acct for the fact the preceding calculation only applied to 95% of cases
     totreduction = 0.95 * (float(totreduction) / totdam)
     # now account for 2.5% automatic hits and 2.5% automatic misses
     return 1.00 / (1.00 - (totreduction + 0.025))

# monsters
# dam, hitdice, fighter
hydra = [18, 13, False]
deeptroll = [[27, 20, 20], 10, False]
direelephant = [[40, 15], 15, False]
deathyak = [30, 14, False]

import sys
def ev_ac_table(fromAC, toAC, stepAC, fromEV, toEV, stepEV, gdr, monster, ofile = None):
     dam, hitdice, fighter = monster
     colwidth = 6
     sys.stdout.write("ac\ev".ljust(colwidth))
     for ev in xrange(fromEV, toEV+1, stepEV):
          sys.stdout.write(str(ev).ljust(colwidth))
     sys.stdout.write("\n")
     for ac in xrange(fromAC, toAC+1, stepAC):
          sys.stdout.write(str(ac).ljust(colwidth))
          for ev in xrange(fromEV, toEV+1, stepEV):
               acreduc = 0
               if ac == 0:
                    pass
               elif type(dam) == list:
                    treduc = 0
                    for d in dam:
                         treduc += d - (float(d) / ACReduction(ac, d, gdr))
                    acreduc = sum(dam) / (sum(dam) - treduc)
               else:
                    acreduc = ACReduction(ac, dam, gdr)
               # in case of multiple damages
               sys.stdout.write(("%.2f" % (acreduc * EVReduction(ev, hitdice, fighter))).ljust(colwidth))
          sys.stdout.write("\n")
     sys.stdout.write("\n")


I'll take a few requests if you want to see some specific GDR and enemy, or some specific AC/EV range.
Last edited by Berder on Friday, 9th January 2015, 22:02, edited 4 times in total.
streaks: 5 fifteen rune octopodes. 15 diverse chars. 13 random chars. 24 NaWn^gozag.
251 total wins Berder hyperborean + misc
83/108 recent wins (76%)
guides: safe tactics value of ac/ev/sh forum toxicity

For this message the author Berder has received thanks:
rockygargoyle

Vaults Vanquisher

Posts: 430

Joined: Saturday, 1st June 2013, 21:09

Location: Russia

Post Friday, 9th January 2015, 05:41

Re: Tables of damage reduction from sh and ev

Well, basically I didn't understand it at all, also any code stuff for me looks like Chinese. )
I will be grateful if someone translate results in common language. )
English is NOT my native language.

Snake Sneak

Posts: 128

Joined: Friday, 26th April 2013, 05:09

Post Friday, 9th January 2015, 11:35

Re: Tables of damage reduction from ac and ev

It seems to roughly back up the maximise AC+EV rule of thumb, the bottomleft to topright diagonals (trading AC for EV or vice versa) seem fairly constant. Obviously this is just testing vs a death yak, and whether AC or EV is better will really depend on whether you are taking large numbers of small hits (AC better) or few large hits (EV better).

For this message the author Kramin42 has received thanks:
GlassGo

Shoals Surfer

Posts: 329

Joined: Tuesday, 7th May 2013, 17:09

Post Friday, 9th January 2015, 15:17

Re: Tables of damage reduction from ac and ev

The bug isn't in the code, it's in the idea. AC is subtractive, and EV's effectiveness depends on the monster's accuracy. So you can't characterize these by one multiplicative factor that you divide out, because that factor depends on what you're fighting. To see this intuitively, imagine a hypothetical HD 100 monster that did 200 damage. I think it is pretty clear that 19/11 defenses are not going to divide your incoming damage by 3.3.

Once you've reached the point where you have that monster dependence anyway, why not just use fsim?

For this message the author ackack has received thanks:
duvessa

Tartarus Sorceror

Posts: 1774

Joined: Tuesday, 23rd December 2014, 23:39

Post Friday, 9th January 2015, 19:33

Re: Tables of damage reduction from ac and ev

ackack wrote:The bug isn't in the code, it's in the idea. AC is subtractive, and EV's effectiveness depends on the monster's accuracy. So you can't characterize these by one multiplicative factor that you divide out, because that factor depends on what you're fighting. To see this intuitively, imagine a hypothetical HD 100 monster that did 200 damage. I think it is pretty clear that 19/11 defenses are not going to divide your incoming damage by 3.3.
Once you've reached the point where you have that monster dependence anyway, why not just use fsim?

Death yaks actually do hit as hard as many enemies through the endgame, and have comparable HD, so I would consider them a representative monster; how well you can defend against death yaks is indicative of how well you can defend against many other monsters throughout the rest of the game. Death yaks deal 30 damage. For comparison, bone dragons deal 30, 20, 20 damage, and deep trolls deal 27, 20, 20. Shadow dragons deal 20, 15, 15. Death yak HD is somewhat higher than deep trolls, somewhat lower than bone dragons.

Here's the table with fire dragon armor (GDR 0.34) vs a bone dragon. You can see it's fairly similar to the death yak table for GDR 0.34. EV matters a little less, AC matters a little more, along the diagonal it's about the same.
  Code:
>>> crawl.ev_ac_table(1,35,2,1,40,2,0.34,crawl.bonedragon)
ac\ev 1     3     5     7     9     11    13    15    17    19    21    23    25    27    29    31    33    35    37    39   
1     1.07  1.12  1.17  1.22  1.28  1.34  1.41  1.49  1.58  1.68  1.79  1.92  2.07  2.24  2.43  2.64  2.88  3.13  3.41  3.71 
3     1.20  1.25  1.30  1.36  1.43  1.50  1.58  1.66  1.76  1.87  2.00  2.14  2.30  2.49  2.71  2.95  3.21  3.49  3.80  4.13 
5     1.34  1.40  1.46  1.53  1.60  1.68  1.77  1.87  1.98  2.10  2.24  2.40  2.58  2.79  3.04  3.30  3.60  3.92  4.26  4.63 
7     1.52  1.58  1.65  1.72  1.80  1.89  1.99  2.10  2.23  2.37  2.52  2.70  2.91  3.15  3.42  3.72  4.06  4.42  4.81  5.23 
9     1.72  1.79  1.87  1.95  2.05  2.15  2.26  2.39  2.53  2.68  2.86  3.07  3.30  3.58  3.88  4.23  4.60  5.01  5.45  5.93 
11    1.96  2.05  2.13  2.23  2.34  2.45  2.58  2.73  2.89  3.07  3.27  3.50  3.77  4.08  4.44  4.83  5.26  5.72  6.23  6.77 
13    2.26  2.35  2.45  2.57  2.69  2.82  2.97  3.14  3.32  3.53  3.76  4.03  4.34  4.70  5.10  5.55  6.05  6.58  7.17  7.79 
15    2.51  2.62  2.73  2.85  2.99  3.14  3.30  3.49  3.69  3.92  4.18  4.48  4.83  5.22  5.67  6.17  6.72  7.32  7.97  8.66 
17    2.80  2.92  3.04  3.18  3.33  3.50  3.69  3.89  4.12  4.38  4.67  5.00  5.38  5.83  6.33  6.89  7.50  8.17  8.89  9.66 
19    3.13  3.26  3.40  3.56  3.73  3.91  4.12  4.35  4.60  4.89  5.22  5.59  6.02  6.51  7.07  7.70  8.38  9.13  9.93  10.80
21    3.50  3.64  3.80  3.97  4.16  4.37  4.60  4.86  5.14  5.46  5.83  6.24  6.72  7.28  7.90  8.60  9.36  10.20 11.10 12.07
23    3.78  3.94  4.11  4.30  4.50  4.73  4.97  5.25  5.56  5.91  6.30  6.75  7.27  7.87  8.54  9.30  10.12 11.02 12.00 13.04
25    4.08  4.25  4.43  4.63  4.85  5.09  5.36  5.66  5.99  6.37  6.79  7.27  7.83  8.48  9.21  10.02 10.91 11.88 12.93 14.06
27    4.38  4.56  4.76  4.98  5.21  5.47  5.76  6.08  6.44  6.84  7.30  7.82  8.42  9.11  9.90  10.77 11.72 12.77 13.89 15.11
29    4.69  4.89  5.10  5.33  5.58  5.86  6.17  6.51  6.89  7.33  7.81  8.37  9.01  9.76  10.60 11.53 12.55 13.67 14.88 16.18
31    5.00  5.21  5.44  5.68  5.96  6.25  6.58  6.95  7.35  7.81  8.33  8.93  9.61  10.41 11.30 12.30 13.39 14.58 15.87 17.26
33    5.32  5.54  5.78  6.04  6.33  6.64  6.99  7.38  7.81  8.30  8.85  9.49  10.22 11.06 12.01 13.07 14.23 15.49 16.86 18.33
35    5.63  5.86  6.12  6.40  6.70  7.03  7.40  7.81  8.27  8.79  9.38  10.04 10.82 11.71 12.72 13.83 15.06 16.40 17.85 19.41


What plain melee attacker that you commonly find hits harder than this? Well, how about an orb guardian. 45 dam, 15 HD, fighter flag. Proportionally greater to-hit than a death yak, 50% more damage. Orb guardians are fast but that doesn't matter to my tables, only to fsim. Here's the orb guardian table with GDR 0.34. Compared to death yaks, both EV and AC are somewhat less useful. AC is more useful relative to EV. But it's pretty similar.
  Code:
>>> crawl.ev_ac_table(1,35,2,1,40,2,0.34,crawl.orbguardian)
ac\ev 1     3     5     7     9     11    13    15    17    19    21    23    25    27    29    31    33    35    37    39   
1     1.05  1.09  1.13  1.18  1.22  1.28  1.33  1.39  1.46  1.54  1.62  1.71  1.81  1.93  2.06  2.21  2.38  2.56  2.76  2.97 
3     1.11  1.15  1.20  1.24  1.29  1.35  1.41  1.47  1.55  1.62  1.71  1.81  1.92  2.04  2.18  2.34  2.51  2.71  2.92  3.14 
5     1.18  1.22  1.27  1.32  1.37  1.43  1.49  1.56  1.64  1.72  1.81  1.92  2.03  2.16  2.31  2.48  2.66  2.87  3.09  3.33 
7     1.25  1.30  1.35  1.40  1.46  1.52  1.58  1.66  1.74  1.83  1.92  2.03  2.16  2.29  2.45  2.63  2.83  3.04  3.28  3.53 
9     1.33  1.38  1.43  1.49  1.55  1.61  1.68  1.76  1.85  1.94  2.04  2.16  2.29  2.44  2.60  2.79  3.00  3.23  3.48  3.75 
11    1.42  1.47  1.52  1.58  1.65  1.72  1.79  1.87  1.97  2.07  2.18  2.30  2.44  2.60  2.77  2.97  3.20  3.44  3.71  4.00 
13    1.51  1.56  1.62  1.69  1.76  1.83  1.91  2.00  2.10  2.20  2.32  2.45  2.60  2.77  2.96  3.17  3.41  3.67  3.96  4.26 
15    1.61  1.67  1.73  1.80  1.88  1.96  2.04  2.14  2.24  2.35  2.48  2.62  2.78  2.96  3.16  3.39  3.64  3.92  4.23  4.55 
17    1.73  1.79  1.86  1.93  2.01  2.09  2.19  2.29  2.40  2.52  2.66  2.81  2.98  3.17  3.38  3.63  3.90  4.20  4.52  4.88 
19    1.85  1.92  1.99  2.07  2.15  2.25  2.35  2.45  2.57  2.70  2.85  3.01  3.19  3.40  3.63  3.89  4.18  4.51  4.85  5.23 
21    1.99  2.07  2.14  2.23  2.32  2.41  2.52  2.64  2.77  2.91  3.06  3.24  3.43  3.65  3.90  4.19  4.50  4.84  5.22  5.62 
23    2.15  2.23  2.31  2.40  2.50  2.60  2.72  2.84  2.98  3.13  3.30  3.49  3.70  3.94  4.21  4.51  4.85  5.22  5.63  6.06 
25    2.32  2.40  2.49  2.59  2.70  2.81  2.94  3.07  3.22  3.39  3.57  3.77  4.00  4.25  4.54  4.87  5.24  5.64  6.08  6.55 
27    2.51  2.60  2.70  2.81  2.92  3.05  3.18  3.33  3.49  3.67  3.86  4.08  4.33  4.61  4.92  5.28  5.67  6.11  6.58  7.09 
29    2.73  2.83  2.93  3.05  3.17  3.31  3.45  3.61  3.79  3.98  4.20  4.43  4.70  5.00  5.34  5.73  6.16  6.63  7.15  7.70 
31    2.97  3.08  3.20  3.32  3.45  3.60  3.76  3.93  4.13  4.34  4.57  4.83  5.12  5.45  5.82  6.24  6.71  7.22  7.78  8.39 
33    3.11  3.22  3.35  3.48  3.62  3.77  3.94  4.12  4.32  4.54  4.78  5.06  5.36  5.70  6.09  6.54  7.03  7.56  8.15  8.78 
35    3.26  3.38  3.51  3.64  3.79  3.95  4.13  4.32  4.53  4.76  5.01  5.30  5.62  5.98  6.39  6.85  7.36  7.93  8.54  9.20 


The other advantage of these tables is they are much faster to generate than fsim and allow you to see trends at a glance instead of having to change equipment and run fsim again to get each new data point.

You might be about to bring up double-scale fsim, &^F. To that I would say, it's very slow to run, and since it's based on skills instead of ac/ev it's specific to only the exact character that you run it for.
streaks: 5 fifteen rune octopodes. 15 diverse chars. 13 random chars. 24 NaWn^gozag.
251 total wins Berder hyperborean + misc
83/108 recent wins (76%)
guides: safe tactics value of ac/ev/sh forum toxicity

Ziggurat Zagger

Posts: 5382

Joined: Friday, 25th November 2011, 07:36

Post Friday, 9th January 2015, 21:35

Re: Tables of damage reduction from ac and ev

Very small error: you quoted 11 ev and 19 ac as 3.29 in the .34 GDR table as an example - you read the wrong cell, that cell is actually 3.50. Or you could change the 11 ev to 9 ev, which is the 3.29 cell you read.

Also, while the size of the tables might get a bit cumbersome, many end game characters can go over 35ac or 39 ev, so maybe make them go up to around 50ish? My last character had 54 ac by the time I was in zot:5, with mid 40's ev (counting buff spells, no consumables). I do tend to build defensively somewhat more than most, but getting at least one defense over 40 isn't terribly rare. Maybe consider making the step size 3 instead of 2?

For this message the author tasonir has received thanks:
Berder

Abyss Ambulator

Posts: 1182

Joined: Tuesday, 13th September 2011, 20:34

Post Saturday, 10th January 2015, 15:48

Re: Tables of damage reduction from ac and ev

Got to say Im skeptical for the same reasons.

Best thing you could do here, is to run FSIM for three monsters (like your main examples death yak, oof, and fire dragon) vs a player with the range of AC/EV and get the real data points, then compare to your results and see if your approximation actually holds.

Tho actually, I would pick a spread, so a monster that attacks mainly vs AC, one that attacks mainly vs EV, and one that hits in the middle... if this is possible.

Ziggurat Zagger

Posts: 6454

Joined: Tuesday, 30th October 2012, 19:06

Post Saturday, 10th January 2015, 19:10

Re: Tables of damage reduction from ac and ev

daggaz wrote:Got to say Im skeptical for the same reasons.

Best thing you could do here, is to run FSIM for three monsters (like your main examples death yak, oof, and fire dragon) vs a player with the range of AC/EV and get the real data points, then compare to your results and see if your approximation actually holds.

Tho actually, I would pick a spread, so a monster that attacks mainly vs AC, one that attacks mainly vs EV, and one that hits in the middle... if this is possible.


All monsters need to get past both AC and EV.

EV is (mostly) compared to the monster's HD, AC is compared (more obviously) to the amount of damage done.

Generally monsters who do more damage have higher HD, although there are some exceptions, things that attack more often tend to have lower damage per attack compared to others with the same HD, and slower monsters tend to have higher damage per attack at the same HD

From what I can see from reading his code, this approximation is pretty close to accurate to the way crawl does it's rolls.

Yes, a monster who was HD100 and did 200 damage wouldn't have their damage reduced by a third, but each of the tables generated is per-monster.

The advantage here is not that this code is any less per-monster than the fsim, it's that it's less per-player, it's easier to get an abstract of how defenses will display against a given monster.

A clarification this is average damage *per attack* not *per turn* (That's why it doesn't matter how fast the monster is) which is a reasonable expression of the effectiveness of AC and EV.

A suggestion: Most people find it easier to read a chart like this as "percentage that the damage is reduced by" rather than "The ratio of original to damage reduced" this I think would make it more readable for a layman (I even found myself trying to do the math in my head "now 1/16th is 6.25% so the reduction is 83.75%" when reading the chart)
Spoiler: show
This high quality signature has been hidden for your protection. To unlock it's secret, send 3 easy payments of $9.99 to me, by way of your nearest theta band or ley line. Complete your transmission by midnight tonight for a special free gift!

Snake Sneak

Posts: 108

Joined: Thursday, 21st February 2013, 22:00

Post Sunday, 11th January 2015, 21:56

Re: Tables of damage reduction from ac and ev

If those tables are to be believed in general (that is, if they generalize well to actual combat with varying opponents), a question which I'll leave to people who know the game better than me, it looks like EV starts to outpace AC in terms of average damage reduction after AC+EV gets high enough.

Of course, that doesn't account for the list of things that AC works against but EV doesn't.

Ziggurat Zagger

Posts: 3037

Joined: Sunday, 2nd January 2011, 02:06

Post Sunday, 11th January 2015, 23:01

Re: Tables of damage reduction from ac and ev

Thalfon wrote:If those tables are to be believed in general (that is, if they generalize well to actual combat with varying opponents), a question which I'll leave to people who know the game better than me, it looks like EV starts to outpace AC in terms of average damage reduction after AC+EV gets high enough.

Of course, that doesn't account for the list of things that AC works against but EV doesn't.


There isn't much actual reason to track AC and EV after the point where they start to break down. It isn't actually directly important what percentage monster damage is reduced by. The important statistic is player survival time, which is related to monster damage but not linearly. Once you've got your AC and EV to a suitably healthy level, further improvement isn't especially important because the fights in question are already trivial fights. An arbitrary number of vanilla orcs or river rats marching through a choke point is not going to threaten a late-Lair player character regardless of whether they're stacking AC, stacking EV, or balancing both. Survival depends, as usual, on recognizing which fights are not yet trivial and handling them appropriately; a lopsided build additionally needs to keep in mind the handful of situations that are specifically lopsided against them.

Tartarus Sorceror

Posts: 1774

Joined: Tuesday, 23rd December 2014, 23:39

Post Monday, 12th January 2015, 00:02

Re: Tables of damage reduction from ac and ev

The use of the table is for decisions like:
- do I want this +5 ring of evasion, or this +3 ring of AC?
- Is it worth upgrading to a heavier armor?
- How much is stoneskin doing for me?

You can also use it just for fun to compare different characters.
streaks: 5 fifteen rune octopodes. 15 diverse chars. 13 random chars. 24 NaWn^gozag.
251 total wins Berder hyperborean + misc
83/108 recent wins (76%)
guides: safe tactics value of ac/ev/sh forum toxicity

Return to Dungeon Crawling Advice

Who is online

Users browsing this forum: No registered users and 51 guests

cron
Powered by phpBB © 2000, 2002, 2005, 2007 phpBB Group.
Designed by ST Software for PTF.