--- deliantra/server/common/living.C 2010/03/28 02:53:45 1.109 +++ deliantra/server/common/living.C 2010/03/28 18:44:21 1.114 @@ -822,11 +822,11 @@ for (int i = 0; i < NROFATTACKS; i++) { if (resist[i] > 0) - prot[i] = resist[i], vuln[i] = 0; + prot[i] = resist[i], vuln[i] = 0; else - vuln[i] = -(resist[i]), prot[i] = 0; + vuln[i] = -resist[i], prot[i] = 0; - potion_resist[i] = 0; + potion_resist[i] = -1000; } wc = arch->stats.wc; @@ -930,39 +930,27 @@ } /* Update slots used for items */ - if (QUERY_FLAG (tmp, FLAG_APPLIED)) + if (tmp->flag [FLAG_APPLIED]) for (int i = 0; i < NUM_BODY_LOCATIONS; i++) slot[i].used += tmp->slot[i].info; if (tmp->type == SYMPTOM) - speed_reduce_from_disease = - min (speed_reduce_from_disease, tmp->last_sp ? tmp->last_sp / 100.f : 1.f); + min_it (speed_reduce_from_disease, tmp->last_sp ? tmp->last_sp / 100.f : 1.f); /* Pos. and neg. protections are counted separate (-> pro/vuln). * (Negative protections are calculated exactly like positive.) * Resistance from potions are treated special as well. If there's * more than one potion-effect, the bigger prot.-value is taken. */ - if (tmp->type != POTION) - { - for (int i = 0; i < NROFATTACKS; i++) - { - /* Potential for cursed potions, in which case we just can use - * a straight MAX, as potion_resist is initialised to zero. - */ - if (tmp->type == POTION_EFFECT) - { - if (potion_resist[i]) - potion_resist[i] = max (potion_resist[i], tmp->resist[i]); - else - potion_resist[i] = tmp->resist[i]; - } - else if (tmp->resist[i] > 0) - prot[i] += ((100 - prot[i]) * tmp->resist[i]) / 100; - else if (tmp->resist[i] < 0) - vuln[i] += ((100 - vuln[i]) * -tmp->resist[i]) / 100; - } - } + if (tmp->type == POTION_EFFECT) + for (int i = 0; i < NROFATTACKS; i++) + max_it (potion_resist[i], tmp->resist[i]); + else if (tmp->type != POTION) + for (int i = 0; i < NROFATTACKS; i++) + if (tmp->resist[i] > 0) + prot[i] += ((100 - prot[i]) * tmp->resist[i]) / 100; + else if (tmp->resist[i] < 0) + vuln[i] += ((100 - vuln[i]) * -tmp->resist[i]) / 100; /* There may be other things that should not adjust the attacktype */ if (tmp->type != SYMPTOM) @@ -1043,14 +1031,15 @@ ac -= tmp->stats.ac + tmp->magic; if (settings.spell_encumbrance == TRUE && type == PLAYER) - contr->encumbrance += (int) 3 *tmp->weight / 1000; + contr->encumbrance += 3 * tmp->weight / 1000; } break; case SHIELD: if (settings.spell_encumbrance == TRUE && type == PLAYER) - contr->encumbrance += (int) tmp->weight / 2000; + contr->encumbrance += tmp->weight / 2000; + //FALLTHROUGH case RING: case AMULET: case GIRDLE: @@ -1154,7 +1143,7 @@ if (type != PLAYER) this->chosen_skill = chosen_skill; - glow_radius = min (glow_radius, MAX_LIGHT_RADIUS); + min_it (glow_radius, MAX_LIGHT_RADIUS); /* We've gone through all the objects the player has equipped. For many things, we * have generated intermediate values which we now need to assign. @@ -1170,7 +1159,8 @@ { resist[i] = prot[i] - vuln[i]; - if (potion_resist[i] && ((potion_resist[i] > resist[i]) || (potion_resist[i] < 0))) + if (potion_resist[i] != -1000 + && (potion_resist[i] < 0 || potion_resist[i] > resist[i])) resist[i] = potion_resist[i]; }