Dungeon Dilettante
Posts: 2
Joined: Monday, 19th December 2016, 05:06
problem in stat_modify_dammage
first, this is fight simulation in 0.18.1,
human, all skill = 27, unarmed attack, no armour, dex = 30, vs ogre
str 8 vs str 12
there is only little dammage difference, huh?
and that difference is just because I forgot about off hand punch.
in 0.18.1, there is no damage bonus between str8 and str12 (execept aux and ER)
[attack.cc file in dcss 0.18.1]
int attack::player_stat_modify_damage(int damage)
{
int dammod = 39;
if (you.strength() > 11)
dammod += (random2(you.strength() - 11) * 2);
else if (you.strength() < 9)
dammod -= (random2(9 - you.strength()) * 3);
damage *= dammod;
damage /= 39;
return damage;
}
as you know, random2(max) equals to 1d(max) -1
let's calculate, you will gain this result
~ str7, dammod = 42 - (1d( 9 - str )) *3
str8~12 , dammod =39
str13~, dammod = 37 + (1d( str - 11 )) *2
1. I can't understand why str 9/11 is not assigned
2. when your str is 8/12, dammod is still 39. because 1d(1) - 1 = 0
3. this code is sucks
this part was changed in 7 may
https://github.com/crawl/crawl/commit/6c060d3771dd4915b9da9e6cd1bb37106e1dba0d
Tightened the 0 bonus/penalty range for STR.
STR = 9,10,11 would not pass either if statement, providing no appreciable benefit to damage scaling for going from 9 to 11 strength. This was a classic inclusive/exclusive range if statement bug.
but there is still problem
[attack.cc in recent version]
int attack::player_stat_modify_damage(int damage)
{
int dammod = 39;
if (you.strength() > 10)
dammod += (random2(you.strength() - 10) * 2);
else if (you.strength() < 10)
dammod -= (random2(10 - you.strength()) * 3);
damage *= dammod;
damage /= 39;
return damage;
}
when calculated,
str = 14, dammod = 39 + (1d(3) - 1)*2 = 37 + (1d4)*2 avg 42
str = 13, dammod = 39 + (1d(3) - 1)*2 = 37 + (1d3)*2 avg 41
str = 12, dammod = 39 + (1d(2) - 1)*2 = 37 + (1d2)*2 avg 40
str = 11, dammod = 39 + (1d(1) - 1)*2 = 39
str = 10, dammod = 39
str = 9, dammod = 39 - (1d(1) - 1)*3 = 39
str = 8, dammod = 39 - (1d(2) - 1)*3 = 42 - (1d2)*3 avg 37.5
str = 7, dammod = 39 - (1d(2) - 1)*3 = 42 - (1d3)*3 avg 36
ok, now 8 and 12 is fine, but it seems he dosen't have accomplished purpose enough
the thing confusing me more is
[melee_attack.cc in 0.18.1]
int melee_attack::player_aux_stat_modify_damage(int damage)
{
int dammod = 20;
if (you.strength() > 10)
dammod += random2(you.strength() - 9);
else if (you.strength() < 10)
dammod -= random2(11 - you.strength());
damage *= dammod;
damage /= 20;
return damage;
}
this is stat modifier for auxiliary attack, and it totally works!
so, main dammage calculation is broken while additional dammage calculation is correct.
???????????????????
- For this message the author Roleplayer has received thanks: 2
- Brannock, neil