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

Comparing deliantra/server/server/spell_attack.C (file contents):
Revision 1.65 by root, Mon Sep 29 10:20:49 2008 UTC vs.
Revision 1.71 by root, Mon Dec 22 21:51:11 2008 UTC

165 sint16 x, y; 165 sint16 x, y;
166 maptile *m; 166 maptile *m;
167 167
168 if (--op->duration < 0) 168 if (--op->duration < 0)
169 { 169 {
170 op->destroy_inv (true); // be explicit about dropping
171 op->destroy (true); 170 op->drop_and_destroy ();
172 return; 171 return;
173 } 172 }
174 173
175 hit_map (op, 0, op->attacktype, 1); 174 hit_map (op, 0, op->attacktype, 1);
176 175
308 307
309 maptile *newmap; 308 maptile *newmap;
310 mflags = get_map_flags (tmp->map, &newmap, tmp->x, tmp->y, &tmp->x, &tmp->y); 309 mflags = get_map_flags (tmp->map, &newmap, tmp->x, tmp->y, &tmp->x, &tmp->y);
311 if (mflags & P_OUT_OF_MAP) 310 if (mflags & P_OUT_OF_MAP)
312 { 311 {
313 tmp->destroy_inv (true); // be explicit about dropping
314 tmp->destroy (true); 312 tmp->drop_and_destroy ();
315 return 0; 313 return 0;
316 } 314 }
317 315
318 tmp->map = newmap; 316 tmp->map = newmap;
319 317
320 if (OB_TYPE_MOVE_BLOCK (tmp, GET_MAP_MOVE_BLOCK (tmp->map, tmp->x, tmp->y))) 318 if (OB_TYPE_MOVE_BLOCK (tmp, GET_MAP_MOVE_BLOCK (tmp->map, tmp->x, tmp->y)))
321 { 319 {
322 if (!QUERY_FLAG (tmp, FLAG_REFLECTING)) 320 if (!QUERY_FLAG (tmp, FLAG_REFLECTING))
323 { 321 {
324 tmp->destroy_inv (true); // be explicit about dropping
325 tmp->destroy (true); 322 tmp->drop_and_destroy ();
326 return 0; 323 return 0;
327 } 324 }
328 325
329 tmp->x = op->x; 326 tmp->x = op->x;
330 tmp->y = op->y; 327 tmp->y = op->y;
354 maptile *m = op->map; 351 maptile *m = op->map;
355 int i; 352 int i;
356 353
357 if (--op->duration < 0) 354 if (--op->duration < 0)
358 { 355 {
359 op->destroy (true); 356 op->destroy ();
360 return; 357 return;
361 } 358 }
362 359
363 hit_map (op, 0, op->attacktype, 0); 360 hit_map (op, 0, op->attacktype, 0);
364 361
399 object *tmp, *owner; 396 object *tmp, *owner;
400 397
401 if (!op->other_arch) 398 if (!op->other_arch)
402 { 399 {
403 LOG (llevError, "BUG: explode_bullet(): op without other_arch\n"); 400 LOG (llevError, "BUG: explode_bullet(): op without other_arch\n");
404 op->destroy (true); 401 op->destroy ();
405 return; 402 return;
406 } 403 }
407 404
408 if (op->env) 405 if (op->env)
409 { 406 {
410 object *env = op->outer_env (); 407 object *env = op->outer_env ();
411 408
412 if (!env->map || out_of_map (env->map, env->x, env->y)) 409 if (!env->map || out_of_map (env->map, env->x, env->y))
413 { 410 {
414 LOG (llevError, "BUG: explode_bullet(): env out of map\n"); 411 LOG (llevError, "BUG: explode_bullet(): env out of map\n");
415 op->destroy (true); 412 op->destroy ();
416 return; 413 return;
417 } 414 }
418 415
419 op->insert_at (env, op, INS_NO_MERGE | INS_NO_WALK_ON); 416 op->insert_at (env, op, INS_NO_MERGE | INS_NO_WALK_ON);
420 } 417 }
421 else if (out_of_map (op->map, op->x, op->y)) 418 else if (out_of_map (op->map, op->x, op->y))
422 { 419 {
423 LOG (llevError, "BUG: explode_bullet(): op out of map\n"); 420 LOG (llevError, "BUG: explode_bullet(): op out of map\n");
424 op->destroy (true); 421 op->destroy ();
425 return; 422 return;
426 } 423 }
427 424
428 // elmex Tue Aug 15 17:46:51 CEST 2006: Prevent explosions of any kind on safe maps 425 // elmex Tue Aug 15 17:46:51 CEST 2006: Prevent explosions of any kind on safe maps
429 // NOTE: If this breaks something important: remove this. I can't think of anything 426 // NOTE: If this breaks something important: remove this. I can't think of anything
430 // bad at the moment that might happen from this. 427 // bad at the moment that might happen from this.
431 if (get_map_flags (op->map, NULL, op->x, op->y, NULL, NULL) & P_SAFE) 428 if (get_map_flags (op->map, NULL, op->x, op->y, NULL, NULL) & P_SAFE)
432 { 429 {
433 op->destroy (true); 430 op->destroy ();
434 return; 431 return;
435 } 432 }
436 433
437 if (op->attacktype) 434 if (op->attacktype)
438 { 435 {
453 if ((tmp->attacktype & AT_HOLYWORD 450 if ((tmp->attacktype & AT_HOLYWORD
454 || tmp->attacktype & AT_GODPOWER) 451 || tmp->attacktype & AT_GODPOWER)
455 && owner 452 && owner
456 && !tailor_god_spell (tmp, owner)) 453 && !tailor_god_spell (tmp, owner))
457 { 454 {
458 op->destroy (true); 455 op->destroy ();
459 return; 456 return;
460 } 457 }
461 458
462 /* special for bombs - it actually has sane values for these */ 459 /* special for bombs - it actually has sane values for these */
463 if (op->type == SPELL_EFFECT && op->subtype == SP_BOMB) 460 if (op->type == SPELL_EFFECT && op->subtype == SP_BOMB)
491 488
492 tmp->insert_at (op, op); 489 tmp->insert_at (op, op);
493 tmp->play_sound (tmp->sound); 490 tmp->play_sound (tmp->sound);
494 491
495 /* remove the firebullet */ 492 /* remove the firebullet */
496 op->destroy (true); 493 op->destroy ();
497} 494}
498 495
499/* checks to see what op should do, given the space it is on 496/* checks to see what op should do, given the space it is on
500 * (eg, explode, damage player, etc) 497 * (eg, explode, damage player, etc)
501 */ 498 */
532 // TODO: can't understand the following if's 529 // TODO: can't understand the following if's
533 if (op->destroyed () || !tmp->destroyed () || (op->stats.dam -= dam) < 0) 530 if (op->destroyed () || !tmp->destroyed () || (op->stats.dam -= dam) < 0)
534 { 531 {
535 if (!QUERY_FLAG (op, FLAG_REMOVED)) 532 if (!QUERY_FLAG (op, FLAG_REMOVED))
536 { 533 {
537 op->destroy (true); 534 op->destroy ();
538 return; 535 return;
539 } 536 }
540 } 537 }
541 } 538 }
542 } 539 }
571 if (--op->range <= 0) 568 if (--op->range <= 0)
572 { 569 {
573 if (op->other_arch) 570 if (op->other_arch)
574 explode_bullet (op); 571 explode_bullet (op);
575 else 572 else
576 op->destroy (true); 573 op->destroy ();
577 574
578 return; 575 return;
579 } 576 }
580 577
581 new_x = op->x + DIRX (op); 578 new_x = op->x + DIRX (op);
583 m = op->map; 580 m = op->map;
584 mflags = get_map_flags (m, &m, new_x, new_y, &new_x, &new_y); 581 mflags = get_map_flags (m, &m, new_x, new_y, &new_x, &new_y);
585 582
586 if (mflags & P_OUT_OF_MAP) 583 if (mflags & P_OUT_OF_MAP)
587 { 584 {
588 op->destroy (true); 585 op->destroy ();
589 return; 586 return;
590 } 587 }
591 588
592 if (!op->direction || OB_TYPE_MOVE_BLOCK (op, GET_MAP_MOVE_BLOCK (m, new_x, new_y))) 589 if (!op->direction || OB_TYPE_MOVE_BLOCK (op, GET_MAP_MOVE_BLOCK (m, new_x, new_y)))
593 { 590 {
594 if (op->other_arch) 591 if (op->other_arch)
595 explode_bullet (op); 592 explode_bullet (op);
596 else 593 else
597 op->destroy (true); 594 op->destroy ();
598 595
599 return; 596 return;
600 } 597 }
601 598
602 if (!(op = m->insert (op, new_x, new_y, op))) 599 if (!(op = m->insert (op, new_x, new_y, op)))
658 655
659 maptile *newmap; 656 maptile *newmap;
660 mflags = get_map_flags (tmp->map, &newmap, tmp->x, tmp->y, &tmp->x, &tmp->y); 657 mflags = get_map_flags (tmp->map, &newmap, tmp->x, tmp->y, &tmp->x, &tmp->y);
661 if (mflags & P_OUT_OF_MAP) 658 if (mflags & P_OUT_OF_MAP)
662 { 659 {
663 tmp->destroy (true); 660 tmp->destroy ();
664 return 0; 661 return 0;
665 } 662 }
666 663
667 tmp->map = newmap; 664 tmp->map = newmap;
668 665
669 if (OB_TYPE_MOVE_BLOCK (tmp, GET_MAP_MOVE_BLOCK (tmp->map, tmp->x, tmp->y))) 666 if (OB_TYPE_MOVE_BLOCK (tmp, GET_MAP_MOVE_BLOCK (tmp->map, tmp->x, tmp->y)))
670 { 667 {
671 if (!QUERY_FLAG (tmp, FLAG_REFLECTING)) 668 if (!QUERY_FLAG (tmp, FLAG_REFLECTING))
672 { 669 {
673 tmp->destroy (true); 670 tmp->destroy ();
674 return 0; 671 return 0;
675 } 672 }
676 673
677 tmp->x = op->x; 674 tmp->x = op->x;
678 tmp->y = op->y; 675 tmp->y = op->y;
733 * when their cone dies when they die. 730 * when their cone dies when they die.
734 */ 731 */
735 /* If no owner left, the spell dies out. */ 732 /* If no owner left, the spell dies out. */
736 if (op->owner == NULL) 733 if (op->owner == NULL)
737 { 734 {
738 op->destroy (true); 735 op->destroy ();
739 return; 736 return;
740 } 737 }
741#endif 738#endif
742 739
743 hit_map (op, 0, op->attacktype, 0); 740 hit_map (op, 0, op->attacktype, 0);
741
742 if (!op->is_on_map ())
743 return;
744 744
745 /* Check to see if we should push anything. 745 /* Check to see if we should push anything.
746 * Spell objects with weight push whatever they encounter to some 746 * Spell objects with weight push whatever they encounter to some
747 * degree. 747 * degree.
748 */ 748 */
749 if (op->weight) 749 if (op->weight)
750 {
750 check_spell_knockback (op); 751 check_spell_knockback (op);
751 752
752 if (op->destroyed ()) 753 if (!op->is_on_map ())
753 return; 754 return;
755 }
754 756
755 if (op->duration-- < 0) 757 if (op->duration-- < 0)
756 { 758 {
757 op->destroy (true); 759 op->destroy ();
758 return; 760 return;
759 } 761 }
760 /* Object has hit maximum range, so don't have it move 762 /* Object has hit maximum range, so don't have it move
761 * any further. When the duration above expires, 763 * any further. When the duration above expires,
762 * then the object will get removed. 764 * then the object will get removed.
961 // elmex Tue Aug 15 17:46:51 CEST 2006: Prevent bomb from exploding 963 // elmex Tue Aug 15 17:46:51 CEST 2006: Prevent bomb from exploding
962 // on a safe map. I don't like this special casing, but it seems to be neccessary 964 // on a safe map. I don't like this special casing, but it seems to be neccessary
963 // as bombs can be carried. 965 // as bombs can be carried.
964 if (get_map_flags (op->map, NULL, op->x, op->y, NULL, NULL) & P_SAFE) 966 if (get_map_flags (op->map, NULL, op->x, op->y, NULL, NULL) & P_SAFE)
965 { 967 {
966 op->destroy (true); 968 op->destroy ();
967 return; 969 return;
968 } 970 }
969 971
970 /* This copies a lot of the code from the fire bullet, 972 /* This copies a lot of the code from the fire bullet,
971 * but using the cast_bullet isn't really feasible, 973 * but using the cast_bullet isn't really feasible,
1006 int mflags; 1008 int mflags;
1007 sint16 dx = op->x + freearr_x[dir], dy = op->y + freearr_y[dir]; 1009 sint16 dx = op->x + freearr_x[dir], dy = op->y + freearr_y[dir];
1008 maptile *m; 1010 maptile *m;
1009 1011
1010 mflags = get_map_flags (op->map, &m, dx, dy, &dx, &dy); 1012 mflags = get_map_flags (op->map, &m, dx, dy, &dx, &dy);
1013
1014 // when creating a bomb below ourself it should always work, even
1015 // when movement is blocked (somehow we got here, somehow we are here,
1016 // so we should also be able to make a bomb here). (originally added
1017 // to fix create bomb traps in doors, which cast with dir=0).
1018 if (dir)
1019 {
1011 if ((mflags & P_OUT_OF_MAP) || (GET_MAP_MOVE_BLOCK (m, dx, dy) & MOVE_WALK)) 1020 if ((mflags & P_OUT_OF_MAP) || (GET_MAP_MOVE_BLOCK (m, dx, dy) & MOVE_WALK))
1012 { 1021 {
1013 new_draw_info (NDI_UNIQUE, 0, op, "There is something in the way."); 1022 new_draw_info (NDI_UNIQUE, 0, op, "There is something in the way.");
1014 return 0; 1023 return 0;
1024 }
1015 } 1025 }
1016 1026
1017 tmp = arch_to_object (spell->other_arch); 1027 tmp = arch_to_object (spell->other_arch);
1018 1028
1019 /* level dependencies for bomb */ 1029 /* level dependencies for bomb */
1153 } 1163 }
1154 else 1164 else
1155 { 1165 {
1156 new_draw_info_format (NDI_UNIQUE, 0, op, "The %s looks stronger!", query_name (target)); 1166 new_draw_info_format (NDI_UNIQUE, 0, op, "The %s looks stronger!", query_name (target));
1157 target->stats.hp = target->stats.maxhp * 2; 1167 target->stats.hp = target->stats.maxhp * 2;
1158 effect->destroy (true); 1168 effect->destroy ();
1159 return 0; 1169 return 0;
1160 } 1170 }
1161 } 1171 }
1162 } 1172 }
1163 else 1173 else
1186void 1196void
1187move_missile (object *op) 1197move_missile (object *op)
1188{ 1198{
1189 if (op->range-- <= 0) 1199 if (op->range-- <= 0)
1190 { 1200 {
1191 op->destroy_inv (true); // be explicit about dropping
1192 op->destroy (true); 1201 op->drop_and_destroy ();
1193 return; 1202 return;
1194 } 1203 }
1195 1204
1196 mapxy pos (op); 1205 mapxy pos (op);
1197 pos.move (op->direction); 1206 pos.move (op->direction);
1198 1207
1199 if (!pos.normalise ()) 1208 if (!pos.normalise ())
1200 { 1209 {
1201 op->destroy (true); 1210 op->destroy ();
1202 return; 1211 return;
1203 } 1212 }
1204 1213
1205 mapspace &ms = pos.ms (); 1214 mapspace &ms = pos.ms ();
1206 1215
1208 { 1217 {
1209 hit_map (op, op->direction, AT_MAGIC, 1); 1218 hit_map (op, op->direction, AT_MAGIC, 1);
1210 /* Basically, missile only hits one thing then goes away. 1219 /* Basically, missile only hits one thing then goes away.
1211 * we need to remove it if someone hasn't already done so. 1220 * we need to remove it if someone hasn't already done so.
1212 */ 1221 */
1213 op->destroy (true); 1222 op->destroy ();
1214 return; 1223 return;
1215 } 1224 }
1216 1225
1217 if (!op->direction) 1226 if (!op->direction)
1218 { 1227 {
1219 op->destroy (true); 1228 op->destroy ();
1220 return; 1229 return;
1221 } 1230 }
1222 1231
1223 int i = spell_find_dir (pos.m, pos.x, pos.y, op->owner); 1232 int i = spell_find_dir (pos.m, pos.x, pos.y, op->owner);
1224 if (i > 0 && i != op->direction) 1233 if (i > 0 && i != op->direction)
1249 1258
1250 object *tmp = get_archetype (FORCE_NAME); 1259 object *tmp = get_archetype (FORCE_NAME);
1251 tmp->speed = 0.01; 1260 tmp->speed = 0.01;
1252 tmp->stats.food = time; 1261 tmp->stats.food = time;
1253 SET_FLAG (tmp, FLAG_IS_USED_UP); 1262 SET_FLAG (tmp, FLAG_IS_USED_UP);
1254 tmp->glow_radius = radius;
1255 if (tmp->glow_radius > MAX_LIGHT_RADII)
1256 tmp->glow_radius = MAX_LIGHT_RADII; 1263 tmp->glow_radius = min (MAX_LIGHT_RADIUS, radius);
1257
1258 tmp = insert_ob_in_ob (tmp, op); 1264 tmp = insert_ob_in_ob (tmp, op);
1259 1265
1260 if (tmp->glow_radius > op->glow_radius) 1266 if (tmp->glow_radius > op->glow_radius)
1261 op->glow_radius = tmp->glow_radius; 1267 op->glow_radius = tmp->glow_radius;
1262 1268
1612 } /* for y */ 1618 } /* for y */
1613 1619
1614 return 1; 1620 return 1;
1615} 1621}
1616 1622
1617
1618/* Move_ball_spell: This handles ball type spells that just sort of wander 1623/* Move_ball_spell: This handles ball type spells that just sort of wander
1619 * about. was called move_ball_lightning, but since more than the ball 1624 * about. was called move_ball_lightning, but since more than the ball
1620 * lightning spell used it, that seemed misnamed. 1625 * lightning spell used it, that seemed misnamed.
1621 * op is the spell effect. 1626 * op is the spell effect.
1622 * note that duration is handled by process_object() in time.c 1627 * note that duration is handled by process_object() in time.c
1647 for (i = 1; i < 9; i++) 1652 for (i = 1; i < 9; i++)
1648 { 1653 {
1649 /* i bit 0: alters sign of offset 1654 /* i bit 0: alters sign of offset
1650 * other bits (i / 2): absolute value of offset 1655 * other bits (i / 2): absolute value of offset
1651 */ 1656 */
1652
1653 int offset = ((i ^ j) & 1) ? (i / 2) : -(i / 2); 1657 int offset = ((i ^ j) & 1) ? (i / 2) : -(i / 2);
1654 int tmpdir = absdir (op->direction + offset); 1658 int tmpdir = absdir (op->direction + offset);
1655 1659
1656 nx = op->x + freearr_x[tmpdir]; 1660 nx = op->x + freearr_x[tmpdir];
1657 ny = op->y + freearr_y[tmpdir]; 1661 ny = op->y + freearr_y[tmpdir];
1659 { 1663 {
1660 dir = tmpdir; 1664 dir = tmpdir;
1661 break; 1665 break;
1662 } 1666 }
1663 } 1667 }
1668
1664 if (dir == 0) 1669 if (dir == 0)
1665 { 1670 {
1666 nx = op->x; 1671 nx = op->x;
1667 ny = op->y; 1672 ny = op->y;
1668 m = op->map; 1673 m = op->map;
1741 object *owner = op->env; 1746 object *owner = op->env;
1742 1747
1743 if (!owner) // MUST not happen, remove when true TODO 1748 if (!owner) // MUST not happen, remove when true TODO
1744 { 1749 {
1745 LOG (llevError, "swarm spell found outside inventory: %s\n", op->debug_desc ()); 1750 LOG (llevError, "swarm spell found outside inventory: %s\n", op->debug_desc ());
1746 op->destroy (true); 1751 op->destroy ();
1747 return; 1752 return;
1748 } 1753 }
1749 1754
1750 if (!op->duration || !owner->is_on_map ()) 1755 if (!op->duration || !owner->is_on_map ())
1751 { 1756 {
1752 op->destroy_inv (true); // be explicit about dropping
1753 op->destroy (true); 1757 op->drop_and_destroy ();
1754 return; 1758 return;
1755 } 1759 }
1756 1760
1757 op->duration--; 1761 op->duration--;
1758 1762
1890 int dam, mflags; 1894 int dam, mflags;
1891 maptile *m; 1895 maptile *m;
1892 1896
1893 dam = spell->stats.dam + SP_level_dam_adjust (caster, spell); 1897 dam = spell->stats.dam + SP_level_dam_adjust (caster, spell);
1894 1898
1895 if (!dir) 1899 if (dir)
1896 {
1897 new_draw_info (NDI_UNIQUE, 0, op, "In what direction?");
1898 return 0;
1899 } 1900 {
1900
1901 x = op->x + freearr_x[dir]; 1901 x = op->x + freearr_x[dir];
1902 y = op->y + freearr_y[dir]; 1902 y = op->y + freearr_y[dir];
1903 m = op->map; 1903 m = op->map;
1904 1904
1905 mflags = get_map_flags (m, &m, x, y, &x, &y); 1905 mflags = get_map_flags (m, &m, x, y, &x, &y);
1906 1906
1907 if (mflags & P_OUT_OF_MAP) 1907 if (mflags & P_OUT_OF_MAP)
1908 { 1908 {
1909 new_draw_info (NDI_UNIQUE, 0, op, "Nothing is there."); 1909 new_draw_info (NDI_UNIQUE, 0, op, "Nothing is there.");
1910 return 0; 1910 return 0;
1911 } 1911 }
1912 1912
1913 if (mflags & P_IS_ALIVE && spell->attacktype) 1913 if (mflags & P_IS_ALIVE && spell->attacktype)
1914 { 1914 {
1915 for (target = GET_MAP_OB (m, x, y); target; target = target->above) 1915 for (target = GET_MAP_OB (m, x, y); target; target = target->above)
1916 if (QUERY_FLAG (target, FLAG_MONSTER)) 1916 if (QUERY_FLAG (target, FLAG_MONSTER))
1917 { 1917 {
1918 /* oky doky. got a target monster. Lets make a blinding attack */ 1918 /* oky doky. got a target monster. Lets make a blinding attack */
1919 if (target->head) 1919 if (target->head)
1920 target = target->head; 1920 target = target->head;
1921 1921
1922 hit_player (target, dam, op, spell->attacktype, 1); 1922 hit_player (target, dam, op, spell->attacktype, 1);
1923 return 1; /* one success only! */ 1923 return 1; /* one success only! */
1924 }
1924 } 1925 }
1925 }
1926 1926
1927 /* no live target, perhaps a wall is in the way? */ 1927 /* no live target, perhaps a wall is in the way? */
1928 if (OB_TYPE_MOVE_BLOCK (op, GET_MAP_MOVE_BLOCK (m, x, y))) 1928 if (OB_TYPE_MOVE_BLOCK (op, GET_MAP_MOVE_BLOCK (m, x, y)))
1929 { 1929 {
1930 new_draw_info (NDI_UNIQUE, 0, op, "Something is in the way."); 1930 new_draw_info (NDI_UNIQUE, 0, op, "Something is in the way.");
1931 return 0; 1931 return 0;
1932 }
1932 } 1933 }
1933 1934
1934 /* ok, looks groovy to just insert a new light on the map */ 1935 /* ok, looks groovy to just insert a new light on the map */
1935 tmp = arch_to_object (spell->other_arch); 1936 tmp = arch_to_object (spell->other_arch);
1936 if (!tmp) 1937 if (!tmp)
1937 { 1938 {
1938 LOG (llevError, "Error: spell arch for cast_light() missing.\n"); 1939 LOG (llevError, "Error: spell arch for cast_light() missing.\n");
1939 return 0; 1940 return 0;
1940 } 1941 }
1942
1941 tmp->stats.food = spell->duration + SP_level_duration_adjust (caster, spell); 1943 tmp->stats.food = spell->duration + SP_level_duration_adjust (caster, spell);
1944
1942 if (tmp->glow_radius) 1945 if (tmp->glow_radius)
1943 {
1944 tmp->glow_radius = spell->range + SP_level_range_adjust (caster, spell); 1946 tmp->glow_radius = min (MAX_LIGHT_RADIUS, spell->range + SP_level_range_adjust (caster, spell));
1945 if (tmp->glow_radius > MAX_LIGHT_RADII)
1946 tmp->glow_radius = MAX_LIGHT_RADII;
1947 }
1948 1947
1948 if (dir)
1949 m->insert (tmp, x, y, op); 1949 m->insert (tmp, x, y, op);
1950 else
1951 caster->outer_env ()->insert (tmp);
1952
1950 return 1; 1953 return 1;
1951} 1954}
1952 1955
1953/* cast_cause_disease: this spell looks along <dir> from the 1956/* cast_cause_disease: this spell looks along <dir> from the
1954 * player and infects someone. 1957 * player and infects someone.
2061 2064
2062 if (infect_object (walk, disease, 1)) 2065 if (infect_object (walk, disease, 1))
2063 { 2066 {
2064 new_draw_info_format (NDI_UNIQUE, 0, op, "You inflict %s on %s!", &disease->name, &walk->name); 2067 new_draw_info_format (NDI_UNIQUE, 0, op, "You inflict %s on %s!", &disease->name, &walk->name);
2065 2068
2066 disease->destroy (true); /* don't need this one anymore */ 2069 disease->destroy (); /* don't need this one anymore */
2067 walk->map->insert (get_archetype ("detect_magic"), x, y, op); 2070 walk->map->insert (get_archetype ("detect_magic"), x, y, op);
2068 return 1; 2071 return 1;
2069 } 2072 }
2070 2073
2071 disease->destroy (true); 2074 disease->destroy ();
2072 } 2075 }
2073 } /* if living creature */ 2076 } /* if living creature */
2074 } /* for range of spaces */ 2077 } /* for range of spaces */
2075 2078
2076 new_draw_info (NDI_UNIQUE, 0, op, "No one caught anything!"); 2079 new_draw_info (NDI_UNIQUE, 0, op, "No one caught anything!");

Diff Legend

Removed lines
+ Added lines
< Changed lines
> Changed lines