ViewVC Help
View File | Revision Log | Show Annotations | Download File
/cvs/deliantra/server/common/living.C
(Generate patch)

Comparing deliantra/server/common/living.C (file contents):
Revision 1.110 by root, Sun Mar 28 16:17:27 2010 UTC vs.
Revision 1.114 by root, Sun Mar 28 18:44:21 2010 UTC

820 memcpy (&resist, &arch->resist, sizeof (resist)); 820 memcpy (&resist, &arch->resist, sizeof (resist));
821 821
822 for (int i = 0; i < NROFATTACKS; i++) 822 for (int i = 0; i < NROFATTACKS; i++)
823 { 823 {
824 if (resist[i] > 0) 824 if (resist[i] > 0)
825 prot[i] = resist[i], vuln[i] = 0; 825 prot[i] = resist[i], vuln[i] = 0;
826 else 826 else
827 vuln[i] = -(resist[i]), prot[i] = 0; 827 vuln[i] = -resist[i], prot[i] = 0;
828 828
829 potion_resist[i] = 0; 829 potion_resist[i] = -1000;
830 } 830 }
831 831
832 wc = arch->stats.wc; 832 wc = arch->stats.wc;
833 stats.dam = arch->stats.dam; 833 stats.dam = arch->stats.dam;
834 834
928 if (tmp->type == WEAPON) 928 if (tmp->type == WEAPON)
929 current_weapon = tmp; 929 current_weapon = tmp;
930 } 930 }
931 931
932 /* Update slots used for items */ 932 /* Update slots used for items */
933 if (QUERY_FLAG (tmp, FLAG_APPLIED)) 933 if (tmp->flag [FLAG_APPLIED])
934 for (int i = 0; i < NUM_BODY_LOCATIONS; i++) 934 for (int i = 0; i < NUM_BODY_LOCATIONS; i++)
935 slot[i].used += tmp->slot[i].info; 935 slot[i].used += tmp->slot[i].info;
936 936
937 if (tmp->type == SYMPTOM) 937 if (tmp->type == SYMPTOM)
938 min_it (speed_reduce_from_disease, tmp->last_sp ? tmp->last_sp / 100.f : 1.f); 938 min_it (speed_reduce_from_disease, tmp->last_sp ? tmp->last_sp / 100.f : 1.f);
940 /* Pos. and neg. protections are counted separate (-> pro/vuln). 940 /* Pos. and neg. protections are counted separate (-> pro/vuln).
941 * (Negative protections are calculated exactly like positive.) 941 * (Negative protections are calculated exactly like positive.)
942 * Resistance from potions are treated special as well. If there's 942 * Resistance from potions are treated special as well. If there's
943 * more than one potion-effect, the bigger prot.-value is taken. 943 * more than one potion-effect, the bigger prot.-value is taken.
944 */ 944 */
945 if (tmp->type != POTION) 945 if (tmp->type == POTION_EFFECT)
946 {
947 for (int i = 0; i < NROFATTACKS; i++) 946 for (int i = 0; i < NROFATTACKS; i++)
948 {
949 /* Potential for cursed potions, in which case we just can use
950 * a straight MAX, as potion_resist is initialised to zero.
951 */
952 if (tmp->type == POTION_EFFECT)
953 {
954 if (potion_resist[i])
955 potion_resist[i] = max (potion_resist[i], tmp->resist[i]);
956 else
957 potion_resist[i] = tmp->resist[i]; 947 max_it (potion_resist[i], tmp->resist[i]);
958 } 948 else if (tmp->type != POTION)
949 for (int i = 0; i < NROFATTACKS; i++)
959 else if (tmp->resist[i] > 0) 950 if (tmp->resist[i] > 0)
960 prot[i] += ((100 - prot[i]) * tmp->resist[i]) / 100; 951 prot[i] += ((100 - prot[i]) * tmp->resist[i]) / 100;
961 else if (tmp->resist[i] < 0) 952 else if (tmp->resist[i] < 0)
962 vuln[i] += ((100 - vuln[i]) * -tmp->resist[i]) / 100; 953 vuln[i] += ((100 - vuln[i]) * -tmp->resist[i]) / 100;
963 }
964 }
965 954
966 /* There may be other things that should not adjust the attacktype */ 955 /* There may be other things that should not adjust the attacktype */
967 if (tmp->type != SYMPTOM) 956 if (tmp->type != SYMPTOM)
968 { 957 {
969 attacktype |= tmp->attacktype; 958 attacktype |= tmp->attacktype;
1152 } /* for loop of items */ 1141 } /* for loop of items */
1153 1142
1154 if (type != PLAYER) 1143 if (type != PLAYER)
1155 this->chosen_skill = chosen_skill; 1144 this->chosen_skill = chosen_skill;
1156 1145
1157 glow_radius = min (glow_radius, MAX_LIGHT_RADIUS); 1146 min_it (glow_radius, MAX_LIGHT_RADIUS);
1158 1147
1159 /* We've gone through all the objects the player has equipped. For many things, we 1148 /* We've gone through all the objects the player has equipped. For many things, we
1160 * have generated intermediate values which we now need to assign. 1149 * have generated intermediate values which we now need to assign.
1161 */ 1150 */
1162 1151
1168 */ 1157 */
1169 for (int i = 0; i < NROFATTACKS; i++) 1158 for (int i = 0; i < NROFATTACKS; i++)
1170 { 1159 {
1171 resist[i] = prot[i] - vuln[i]; 1160 resist[i] = prot[i] - vuln[i];
1172 1161
1173 if (potion_resist[i] && ((potion_resist[i] > resist[i]) || (potion_resist[i] < 0))) 1162 if (potion_resist[i] != -1000
1163 && (potion_resist[i] < 0 || potion_resist[i] > resist[i]))
1174 resist[i] = potion_resist[i]; 1164 resist[i] = potion_resist[i];
1175 } 1165 }
1176 1166
1177 if (type == PLAYER) 1167 if (type == PLAYER)
1178 { 1168 {

Diff Legend

Removed lines
+ Added lines
< Changed lines
> Changed lines