-$NHDT-Branch: NetHack-3.7 $:$NHDT-Revision: 1.80 $ $NHDT-Date: 1580254093 2020/01/28 23:28:13 $
+$NHDT-Branch: NetHack-3.7 $:$NHDT-Revision: 1.81 $ $NHDT-Date: 1580322890 2020/01/29 18:34:50 $
General Fixes and Modified Features
-----------------------------------
revamp achievement tracking for exploring Mine's End and Sokoban (by acquiring
luckstone and bag of holding or amulet of reflection, respectively)
throttle long worm growth rate and HP accumulation
+poly'd hero was able to zap wands without any hands
Fixes to 3.7.0-x Problems that Were Exposed Via git Repository
more grades of self-appearance than beautiful or handsome vs ugly
when 'color' if Off and 'use_inverse' is On, draw ice on the map in inverse
video if it uses the same character as room floor or as dark floor
+new 'mention_decor' option; when On, describe dungeon features being stepped
+ on or floated/flown over even when they're not covered by objects
Platform- and/or Interface-Specific New Features
-/* NetHack 3.6 zap.c $NHDT-Date: 1573688696 2019/11/13 23:44:56 $ $NHDT-Branch: NetHack-3.6 $:$NHDT-Revision: 1.316 $ */
+/* NetHack 3.6 zap.c $NHDT-Date: 1580322890 2020/01/29 18:34:50 $ $NHDT-Branch: NetHack-3.7 $:$NHDT-Revision: 1.330 $ */
/* Copyright (c) Stichting Mathematisch Centrum, Amsterdam, 1985. */
/*-Copyright (c) Robert Patrick Rankin, 2013. */
/* NetHack may be freely redistributed. See license for details. */
pline("%s suddenly explodes!", The(xname(otmp)));
dmg = d(otmp->spe + 2, 6);
losehp(Maybe_Half_Phys(dmg), "exploding wand", KILLED_BY_AN);
- useup(otmp);
+ useupall(otmp);
}
static NEARDATA const char zap_syms[] = { WAND_CLASS, 0 };
int
dozap()
{
- register struct obj *obj;
- int damage;
+ struct obj *obj;
+ int damage, need_dir;
+ if (nohands(g.youmonst.data)) {
+ You("aren't able to zap anything in your current form.");
+ return 0;
+ }
if (check_capacity((char *) 0))
return 0;
obj = getobj(zap_syms, "zap");
check_unpaid(obj);
- /* zappable addition done by GAN 11/03/86 */
- if (!zappable(obj))
+ need_dir = objects[obj->otyp].oc_dir != NODIR;
+ if (!zappable(obj)) {
pline1(nothing_happens);
- else if (obj->cursed && !rn2(WAND_BACKFIRE_CHANCE)) {
+ } else if (obj->cursed && !rn2(WAND_BACKFIRE_CHANCE)) {
backfire(obj); /* the wand blows up in your face! */
exercise(A_STR, FALSE);
+ /* 'obj' is gone; skip update_inventory() because
+ backfire() -> useupall() -> freeinv() did it */
return 1;
- } else if (!(objects[obj->otyp].oc_dir == NODIR) && !getdir((char *) 0)) {
+ } else if (need_dir && !getdir((char *) 0)) {
if (!Blind)
pline("%s glows and fades.", The(xname(obj)));
/* make him pay for knowing !NODIR */
- } else if (!u.dx && !u.dy && !u.dz
- && !(objects[obj->otyp].oc_dir == NODIR)) {
+ } else if (need_dir && !u.dx && !u.dy && !u.dz) {
if ((damage = zapyourself(obj, TRUE)) != 0) {
char buf[BUFSZ];
}
if (obj && obj->spe < 0) {
pline("%s to dust.", Tobjnam(obj, "turn"));
- useup(obj);
- }
- update_inventory(); /* maybe used a charge */
+ useupall(obj); /* calls freeinv() -> update_inventory() */
+ } else
+ update_inventory(); /* maybe used a charge */
return 1;
}