… | |
… | |
425 | /* earth to dust spell. Basically destroys earthwalls in the area. |
425 | /* earth to dust spell. Basically destroys earthwalls in the area. |
426 | */ |
426 | */ |
427 | int |
427 | int |
428 | cast_earth_to_dust (object *op, object *caster, object *spell_ob) |
428 | cast_earth_to_dust (object *op, object *caster, object *spell_ob) |
429 | { |
429 | { |
430 | object *tmp, *next; |
|
|
431 | int range, i, j, mflags; |
430 | int range, i, j, mflags; |
432 | sint16 sx, sy; |
431 | sint16 sx, sy; |
433 | maptile *m; |
432 | maptile *m; |
434 | |
|
|
435 | if (op->type != PLAYER) |
|
|
436 | return 0; |
|
|
437 | |
433 | |
438 | range = spell_ob->range + SP_level_range_adjust (caster, spell_ob); |
434 | range = spell_ob->range + SP_level_range_adjust (caster, spell_ob); |
439 | |
435 | |
440 | for (i = -range; i <= range; i++) |
436 | for (i = -range; i <= range; i++) |
441 | for (j = -range; j <= range; j++) |
437 | for (j = -range; j <= range; j++) |
… | |
… | |
446 | mflags = get_map_flags (m, &m, sx, sy, &sx, &sy); |
442 | mflags = get_map_flags (m, &m, sx, sy, &sx, &sy); |
447 | |
443 | |
448 | if (mflags & P_OUT_OF_MAP) |
444 | if (mflags & P_OUT_OF_MAP) |
449 | continue; |
445 | continue; |
450 | |
446 | |
451 | // earth to dust tears down everything that can be teared down |
447 | // earth to dust tears down everything that can be torn down |
452 | for (tmp = GET_MAP_OB (m, sx, sy); tmp != NULL; tmp = next) |
448 | for (object *next, *tmp = m->at (sx, sy).bot; tmp; tmp = next) |
453 | { |
449 | { |
454 | next = tmp->above; |
450 | next = tmp->above; |
|
|
451 | |
455 | if (QUERY_FLAG (tmp, FLAG_TEAR_DOWN)) |
452 | if (QUERY_FLAG (tmp, FLAG_TEAR_DOWN)) |
456 | hit_player (tmp, 9998, op, AT_PHYSICAL, 0); |
453 | hit_player (tmp, 9998, op, AT_PHYSICAL, 0); |
457 | } |
454 | } |
458 | } |
455 | } |
459 | |
456 | |