… | |
… | |
144 | is_susceptible_to_disease (object *victim, object *disease) |
144 | is_susceptible_to_disease (object *victim, object *disease) |
145 | { |
145 | { |
146 | if (!QUERY_FLAG (victim, FLAG_ALIVE)) |
146 | if (!QUERY_FLAG (victim, FLAG_ALIVE)) |
147 | return 0; |
147 | return 0; |
148 | |
148 | |
|
|
149 | if (victim->flag [FLAG_WIZ]) |
|
|
150 | return 0; |
|
|
151 | |
149 | if (strstr (disease->race, "*") && !QUERY_FLAG (victim, FLAG_UNDEAD)) |
152 | if (strstr (disease->race, "*") && !QUERY_FLAG (victim, FLAG_UNDEAD)) |
150 | return 1; |
153 | return 1; |
151 | |
154 | |
152 | if ((disease->race == shstr_undead) && QUERY_FLAG (victim, FLAG_UNDEAD)) |
155 | if ((disease->race == shstr_undead) && QUERY_FLAG (victim, FLAG_UNDEAD)) |
153 | return 1; |
156 | return 1; |
… | |
… | |
243 | |
246 | |
244 | /* searches around for more victims to infect */ |
247 | /* searches around for more victims to infect */ |
245 | int |
248 | int |
246 | check_infection (object *disease) |
249 | check_infection (object *disease) |
247 | { |
250 | { |
248 | int x, y, range, mflags; |
251 | int x, y; |
249 | maptile *map, *map2; |
252 | maptile *map, *map2; |
250 | object *tmp; |
253 | object *tmp; |
251 | |
254 | |
252 | range = abs (disease->magic); |
255 | int range = abs (disease->magic); |
253 | |
256 | |
254 | if (disease->env) |
257 | if (disease->env) |
255 | { |
258 | { |
256 | x = disease->env->x; |
259 | x = disease->env->x; |
257 | y = disease->env->y; |
260 | y = disease->env->y; |
… | |
… | |
269 | |
272 | |
270 | for (int i = x - range; i <= x + range; i++) |
273 | for (int i = x - range; i <= x + range; i++) |
271 | for (int j = y - range; j <= y + range; j++) |
274 | for (int j = y - range; j <= y + range; j++) |
272 | { |
275 | { |
273 | sint16 i2, j2; |
276 | sint16 i2, j2; |
274 | mflags = get_map_flags (map, &map2, i, j, &i2, &j2); |
277 | int mflags = get_map_flags (map, &map2, i, j, &i2, &j2); |
275 | |
278 | |
276 | if (!(mflags & P_OUT_OF_MAP) && (mflags & P_IS_ALIVE)) |
279 | if (!(mflags & P_OUT_OF_MAP) && (mflags & P_IS_ALIVE)) |
277 | for (tmp = GET_MAP_OB (map2, i2, j2); tmp; tmp = tmp->above) |
280 | for (tmp = GET_MAP_OB (map2, i2, j2); tmp; tmp = tmp->above) |
278 | infect_object (tmp, disease, 0); |
281 | infect_object (tmp, disease, 0); |
279 | } |
282 | } |
… | |
… | |
593 | return 0; |
596 | return 0; |
594 | } |
597 | } |
595 | |
598 | |
596 | /* do the cure disease stuff, from the spell "cure disease" */ |
599 | /* do the cure disease stuff, from the spell "cure disease" */ |
597 | int |
600 | int |
598 | cure_disease (object *sufferer, object *caster) |
601 | cure_disease (object *sufferer, object *caster, object *spell) |
599 | { |
602 | { |
600 | object *disease, *next; |
603 | object *disease, *next; |
601 | int casting_level; |
|
|
602 | int cure = 0; |
604 | int cure = 0; |
603 | |
605 | |
604 | if (caster) |
|
|
605 | casting_level = caster->level; |
|
|
606 | else |
|
|
607 | casting_level = 1000; /* if null caster, CURE all. */ |
606 | int casting_level = caster ? caster->level : 1000; /* if null caster, CURE all. */ |
608 | |
607 | |
609 | for (disease = sufferer->inv; disease; disease = next) |
608 | for (disease = sufferer->inv; disease; disease = next) |
610 | { |
609 | { |
611 | next = disease->below; |
610 | next = disease->below; |
612 | |
611 | |
… | |
… | |
620 | if ((casting_level >= disease->level) || (!(random_roll (0, (disease->level - casting_level - 1), caster, PREFER_LOW)))) |
619 | if ((casting_level >= disease->level) || (!(random_roll (0, (disease->level - casting_level - 1), caster, PREFER_LOW)))) |
621 | { |
620 | { |
622 | remove_symptoms (disease); |
621 | remove_symptoms (disease); |
623 | cure = 1; |
622 | cure = 1; |
624 | |
623 | |
625 | if (caster) |
624 | if (caster && spell) |
626 | change_exp (caster, disease->stats.exp, caster->chosen_skill ? caster->chosen_skill->skill : (const char *) 0, 0); |
625 | change_exp (caster, disease->stats.exp, spell->skill, SK_EXP_SKILL_ONLY); |
627 | |
626 | |
628 | disease->destroy (); |
627 | disease->destroy (); |
629 | } |
628 | } |
630 | } |
629 | } |
631 | } |
630 | } |