After several complaints on my mud about not getting the damage multiplier when using bash or some other skill that sets the mob to a position other than fighting. I logged the crap out of it to find that we are using an integer based formula that really requires a floating one.
In fight.c line 881
Code:
/* Include a damage multiplier if victim isn't ready to fight:
* Position sitting 1.33 x normal
* Position resting 1.66 x normal
* Position sleeping 2.00 x normal
* Position stunned 2.33 x normal
* Position incap 2.66 x normal
* Position mortally 3.00 x normal
* Note, this is a hack because it depends on the particular
* values of the POSITION_XXX constants. */
if (GET_POS(victim) < POS_FIGHTING)
dam *= 1 + (POS_FIGHTING - GET_POS(victim)) / 3;
dam is an integer which is getting rounded down. In this case if GET_POS is Sitting, we have POS-FIGHT - POS-SIT = 1
Now we have 1+ (1/3) - but since this is an integer it gets rounded down. Now we have dam *= 1.
an Excerpt from my logging:
DAMAGE: name = the Statue of Obi-wan Kenobi, Multiplier pre: 53, pos - Resting
Jan 31 21:42:50 2018 :: DAMAGE = 53
Jan 31 21:42:50 2018 :: DAMAGE = 53
Jan 31 21:42:50 2018 :: DAMAGE: name = the Statue of Obi-wan Kenobi, Mutiplier post: 53 pos - Resting
I have changed the formula to
Code:
if (GET_POS(victim) < POS_FIGHTING)
dam = (float)dam * (1.0f+((float)(POS_FIGHTING - GET_POS(victim)))/3.0f);
and now you get:
DAMAGE: name = the Statue of Obi-wan Kenobi, Multiplier pre: 53, pos - Resting
DAMAGE = 53
DAMAGE = 88
DAMAGE: name = the Statue of Obi-wan Kenobi, Mutiplier post: 88 pos - Resting