STATIC_DCL void NDECL(cast_protection);
STATIC_DCL void FDECL(spell_backfire, (int));
STATIC_DCL const char *FDECL(spelltypemnemonic, (int));
+STATIC_DCL boolean FDECL(spell_hurtle_step, (genericptr_t, int, int));
/* The roles[] table lists the role-specific values for tuning
* percent_success().
return 1;
}
+STATIC_OVL boolean
+spell_hurtle_step(arg, x, y)
+genericptr_t arg;
+int x, y;
+{
+ if (!isok(x,y)) return FALSE;
+ if (!ZAP_POS(levl[x][y].typ)
+ && !(IS_DOOR(levl[x][y].typ) && (levl[x][y].doormask & D_ISOPEN)))
+ return FALSE;
+ return TRUE;
+}
+
/* Choose location where spell takes effect. */
STATIC_OVL int
throwspell()
{
- coord cc;
+ coord cc, uc;
struct monst *mtmp;
if (u.uinwater) {
return 0;
}
+ uc.x = u.ux;
+ uc.y = u.uy;
+
+ walk_path(&uc, &cc, spell_hurtle_step, NULL);
+
u.dx = cc.x;
u.dy = cc.y;
return 1;