slightly better shop repair feedback
During shop repair, give a message about the shopkeeper using a spell (if hero is close enough) before "Suddenly, <various repairs occur>." And when shop repair is for a single untrap of landmine or bear trap adjacent to shk (and the hero can see it happen), say "<Shk> untraps <trap>" rather than just "Suddenly, a trap is removed from the floor!"
This commit is contained in:
+2
-1
@@ -1,4 +1,4 @@
|
|||||||
$NHDT-Branch: NetHack-3.6.2-beta01 $:$NHDT-Revision: 1.302 $ $NHDT-Date: 1555196229 2019/04/13 22:57:09 $
|
$NHDT-Branch: NetHack-3.6.2-beta01 $:$NHDT-Revision: 1.303 $ $NHDT-Date: 1555201701 2019/04/14 00:28:21 $
|
||||||
|
|
||||||
This fixes36.2 file is here to capture information about updates in the 3.6.x
|
This fixes36.2 file is here to capture information about updates in the 3.6.x
|
||||||
lineage following the release of 3.6.1 in April 2018. Please note, however,
|
lineage following the release of 3.6.1 in April 2018. Please note, however,
|
||||||
@@ -685,6 +685,7 @@ include isaac64 for pseudo random number generation
|
|||||||
core prng and display prng use different contexts
|
core prng and display prng use different contexts
|
||||||
when healing magic other than unicorn horn cures blindness, cure deafness too
|
when healing magic other than unicorn horn cures blindness, cure deafness too
|
||||||
do less status updating when the 'time' option is on
|
do less status updating when the 'time' option is on
|
||||||
|
slightly more thorough feedback when shop damage is repaired in hero's presence
|
||||||
curses: status display substantially revamped for both horizontal (via
|
curses: status display substantially revamped for both horizontal (via
|
||||||
'align_status:bottom' or 'top') and vertical (via 'align_status:left'
|
'align_status:bottom' or 'top') and vertical (via 'align_status:left'
|
||||||
or 'right'); 3-line horizontal layout (via 'statuslines:3') added
|
or 'right'); 3-line horizontal layout (via 'statuslines:3') added
|
||||||
|
|||||||
+3
-2
@@ -1,4 +1,4 @@
|
|||||||
/* NetHack 3.6 extern.h $NHDT-Date: 1555022327 2019/04/11 22:38:47 $ $NHDT-Branch: NetHack-3.6.2-beta01 $:$NHDT-Revision: 1.701 $ */
|
/* NetHack 3.6 extern.h $NHDT-Date: 1555201698 2019/04/14 00:28:18 $ $NHDT-Branch: NetHack-3.6.2-beta01 $:$NHDT-Revision: 1.702 $ */
|
||||||
/* Copyright (c) Steve Creps, 1988. */
|
/* Copyright (c) Steve Creps, 1988. */
|
||||||
/* NetHack may be freely redistributed. See license for details. */
|
/* NetHack may be freely redistributed. See license for details. */
|
||||||
|
|
||||||
@@ -2247,7 +2247,8 @@ E void FDECL(sellobj, (struct obj *, XCHAR_P, XCHAR_P));
|
|||||||
E int FDECL(doinvbill, (int));
|
E int FDECL(doinvbill, (int));
|
||||||
E struct monst *FDECL(shkcatch, (struct obj *, XCHAR_P, XCHAR_P));
|
E struct monst *FDECL(shkcatch, (struct obj *, XCHAR_P, XCHAR_P));
|
||||||
E void FDECL(add_damage, (XCHAR_P, XCHAR_P, long));
|
E void FDECL(add_damage, (XCHAR_P, XCHAR_P, long));
|
||||||
E int FDECL(repair_damage, (struct monst *, struct damage *, BOOLEAN_P));
|
E int FDECL(repair_damage, (struct monst *, struct damage *, int *,
|
||||||
|
BOOLEAN_P));
|
||||||
E int FDECL(shk_move, (struct monst *));
|
E int FDECL(shk_move, (struct monst *));
|
||||||
E void FDECL(after_shk_move, (struct monst *));
|
E void FDECL(after_shk_move, (struct monst *));
|
||||||
E boolean FDECL(is_fshk, (struct monst *));
|
E boolean FDECL(is_fshk, (struct monst *));
|
||||||
|
|||||||
+2
-2
@@ -1,4 +1,4 @@
|
|||||||
/* NetHack 3.6 restore.c $NHDT-Date: 1543972193 2018/12/05 01:09:53 $ $NHDT-Branch: NetHack-3.6.2-beta01 $:$NHDT-Revision: 1.128 $ */
|
/* NetHack 3.6 restore.c $NHDT-Date: 1555201698 2019/04/14 00:28:18 $ $NHDT-Branch: NetHack-3.6.2-beta01 $:$NHDT-Revision: 1.129 $ */
|
||||||
/* Copyright (c) Stichting Mathematisch Centrum, Amsterdam, 1985. */
|
/* Copyright (c) Stichting Mathematisch Centrum, Amsterdam, 1985. */
|
||||||
/*-Copyright (c) Michael Allison, 2009. */
|
/*-Copyright (c) Michael Allison, 2009. */
|
||||||
/* NetHack may be freely redistributed. See license for details. */
|
/* NetHack may be freely redistributed. See license for details. */
|
||||||
@@ -192,7 +192,7 @@ boolean ghostly;
|
|||||||
struct monst *shkp = shop_keeper(*shp);
|
struct monst *shkp = shop_keeper(*shp);
|
||||||
|
|
||||||
if (shkp && inhishop(shkp)
|
if (shkp && inhishop(shkp)
|
||||||
&& repair_damage(shkp, tmp_dam, TRUE))
|
&& repair_damage(shkp, tmp_dam, (int *) 0, TRUE))
|
||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -1,4 +1,4 @@
|
|||||||
/* NetHack 3.6 shk.c $NHDT-Date: 1555058014 2019/04/12 08:33:34 $ $NHDT-Branch: NetHack-3.6.2-beta01 $:$NHDT-Revision: 1.158 $ */
|
/* NetHack 3.6 shk.c $NHDT-Date: 1555201699 2019/04/14 00:28:19 $ $NHDT-Branch: NetHack-3.6.2-beta01 $:$NHDT-Revision: 1.159 $ */
|
||||||
/* Copyright (c) Stichting Mathematisch Centrum, Amsterdam, 1985. */
|
/* Copyright (c) Stichting Mathematisch Centrum, Amsterdam, 1985. */
|
||||||
/*-Copyright (c) Robert Patrick Rankin, 2012. */
|
/*-Copyright (c) Robert Patrick Rankin, 2012. */
|
||||||
/* NetHack may be freely redistributed. See license for details. */
|
/* NetHack may be freely redistributed. See license for details. */
|
||||||
@@ -3469,11 +3469,13 @@ struct monst *shkp;
|
|||||||
boolean croaked;
|
boolean croaked;
|
||||||
{
|
{
|
||||||
struct damage *tmp_dam, *tmp2_dam;
|
struct damage *tmp_dam, *tmp2_dam;
|
||||||
|
struct obj *shk_inv = shkp->minvent;
|
||||||
boolean did_repair = FALSE, saw_door = FALSE, saw_floor = FALSE,
|
boolean did_repair = FALSE, saw_door = FALSE, saw_floor = FALSE,
|
||||||
stop_picking = FALSE, doorway_trap = FALSE;
|
stop_picking = FALSE, doorway_trap = FALSE, skip_msg = FALSE;
|
||||||
int saw_walls = 0, saw_untrap = 0;
|
int saw_walls = 0, saw_untrap = 0, feedback;
|
||||||
char trapmsg[BUFSZ];
|
char trapmsg[BUFSZ];
|
||||||
|
|
||||||
|
feedback = !croaked; /* 1 => give feedback, 0 => don't or already did */
|
||||||
tmp_dam = level.damagelist;
|
tmp_dam = level.damagelist;
|
||||||
tmp2_dam = 0;
|
tmp2_dam = 0;
|
||||||
while (tmp_dam) {
|
while (tmp_dam) {
|
||||||
@@ -3491,12 +3493,12 @@ boolean croaked;
|
|||||||
if (croaked) {
|
if (croaked) {
|
||||||
disposition = (shops[1]) ? 0 : 1;
|
disposition = (shops[1]) ? 0 : 1;
|
||||||
} else if (stop_picking) {
|
} else if (stop_picking) {
|
||||||
disposition = repair_damage(shkp, tmp_dam, FALSE);
|
disposition = repair_damage(shkp, tmp_dam, &feedback, FALSE);
|
||||||
} else {
|
} else {
|
||||||
/* Defer the stop_occupation() until after repair msgs */
|
/* Defer the stop_occupation() until after repair msgs */
|
||||||
if (closed_door(x, y))
|
if (closed_door(x, y))
|
||||||
stop_picking = picking_at(x, y);
|
stop_picking = picking_at(x, y);
|
||||||
disposition = repair_damage(shkp, tmp_dam, FALSE);
|
disposition = repair_damage(shkp, tmp_dam, &feedback, FALSE);
|
||||||
if (!disposition)
|
if (!disposition)
|
||||||
stop_picking = FALSE;
|
stop_picking = FALSE;
|
||||||
}
|
}
|
||||||
@@ -3539,7 +3541,16 @@ boolean croaked;
|
|||||||
if (!did_repair)
|
if (!did_repair)
|
||||||
return;
|
return;
|
||||||
|
|
||||||
if (saw_untrap) {
|
trapmsg[0] = '\0'; /* not just lint suppression... */
|
||||||
|
shk_inv = (shkp->minvent != shk_inv) ? shkp->minvent : 0;
|
||||||
|
if (saw_untrap == 1 && shk_inv
|
||||||
|
&& (shk_inv->otyp == BEARTRAP || shk_inv->otyp == LAND_MINE)
|
||||||
|
&& canseemon(shkp)) {
|
||||||
|
pline("%s untraps %s.", Shknam(shkp), ansimpleoname(shk_inv));
|
||||||
|
/* we've already reported this trap (and know it's the only one) */
|
||||||
|
saw_untrap = 0;
|
||||||
|
skip_msg = !(saw_walls || saw_door || saw_floor);
|
||||||
|
} else if (saw_untrap) {
|
||||||
Sprintf(trapmsg, "%s trap%s",
|
Sprintf(trapmsg, "%s trap%s",
|
||||||
(saw_untrap > 3) ? "several" : (saw_untrap > 1) ? "some"
|
(saw_untrap > 3) ? "several" : (saw_untrap > 1) ? "some"
|
||||||
: "a",
|
: "a",
|
||||||
@@ -3547,10 +3558,11 @@ boolean croaked;
|
|||||||
Sprintf(eos(trapmsg), " %s", vtense(trapmsg, "are"));
|
Sprintf(eos(trapmsg), " %s", vtense(trapmsg, "are"));
|
||||||
Sprintf(eos(trapmsg), " removed from the %s",
|
Sprintf(eos(trapmsg), " removed from the %s",
|
||||||
(doorway_trap && saw_untrap == 1) ? "doorway" : "floor");
|
(doorway_trap && saw_untrap == 1) ? "doorway" : "floor");
|
||||||
} else
|
}
|
||||||
trapmsg[0] = '\0'; /* not just lint suppression... */
|
|
||||||
|
|
||||||
if (saw_walls) {
|
if (skip_msg) {
|
||||||
|
; /* already gave an untrap message which covered the only repair */
|
||||||
|
} else if (saw_walls) {
|
||||||
char wallbuf[BUFSZ];
|
char wallbuf[BUFSZ];
|
||||||
|
|
||||||
Sprintf(wallbuf, "section%s", plur(saw_walls));
|
Sprintf(wallbuf, "section%s", plur(saw_walls));
|
||||||
@@ -3572,6 +3584,10 @@ boolean croaked;
|
|||||||
saw_floor ? "the floor damage is gone" : "",
|
saw_floor ? "the floor damage is gone" : "",
|
||||||
((saw_door || saw_floor) && *trapmsg) ? " and " : "",
|
((saw_door || saw_floor) && *trapmsg) ? " and " : "",
|
||||||
trapmsg);
|
trapmsg);
|
||||||
|
/* FIXME:
|
||||||
|
* these messages aren't right if the unseen repairs were only
|
||||||
|
* for trap removal (except for hole and possibly trap door).
|
||||||
|
*/
|
||||||
else if (inside_shop(u.ux, u.uy) == ESHK(shkp)->shoproom)
|
else if (inside_shop(u.ux, u.uy) == ESHK(shkp)->shoproom)
|
||||||
You_feel("more claustrophobic than before.");
|
You_feel("more claustrophobic than before.");
|
||||||
else if (!Deaf && !rn2(10))
|
else if (!Deaf && !rn2(10))
|
||||||
@@ -3586,9 +3602,10 @@ boolean croaked;
|
|||||||
* 3: untrap
|
* 3: untrap
|
||||||
*/
|
*/
|
||||||
int
|
int
|
||||||
repair_damage(shkp, tmp_dam, catchup)
|
repair_damage(shkp, tmp_dam, once, catchup)
|
||||||
struct monst *shkp;
|
struct monst *shkp;
|
||||||
struct damage *tmp_dam;
|
struct damage *tmp_dam;
|
||||||
|
int *once;
|
||||||
boolean catchup; /* restoring a level */
|
boolean catchup; /* restoring a level */
|
||||||
{
|
{
|
||||||
xchar x, y;
|
xchar x, y;
|
||||||
@@ -3607,13 +3624,30 @@ boolean catchup; /* restoring a level */
|
|||||||
if (!IS_ROOM(tmp_dam->typ)) {
|
if (!IS_ROOM(tmp_dam->typ)) {
|
||||||
if ((x == u.ux && y == u.uy && !Passes_walls)
|
if ((x == u.ux && y == u.uy && !Passes_walls)
|
||||||
|| (x == shkp->mx && y == shkp->my)
|
|| (x == shkp->mx && y == shkp->my)
|
||||||
|| ((mtmp = m_at(x, y)) && !passes_walls(mtmp->data)))
|
|| ((mtmp = m_at(x, y)) != 0 && !passes_walls(mtmp->data)))
|
||||||
return 0;
|
return 0;
|
||||||
}
|
}
|
||||||
if ((ttmp = t_at(x, y)) != 0) {
|
ttmp = t_at(x, y);
|
||||||
if (x == u.ux && y == u.uy && !Passes_walls)
|
if (ttmp && x == u.ux && y == u.uy && !Passes_walls)
|
||||||
return 0;
|
return 0;
|
||||||
if (ttmp->ttyp == LANDMINE || ttmp->ttyp == BEAR_TRAP) {
|
|
||||||
|
if (once && *once) {
|
||||||
|
boolean shk_closeby = (distu(shkp->mx, shkp->my)
|
||||||
|
<= (BOLT_LIM / 2) * (BOLT_LIM / 2));
|
||||||
|
|
||||||
|
/* this is suboptimal if we eventually give a "shk untraps"
|
||||||
|
message for the only repair, but perhaps the shop repair
|
||||||
|
incantation means that shk's untrap attempt will never fail */
|
||||||
|
if (canseemon(shkp))
|
||||||
|
pline("%s whispers %s.", Shknam(shkp),
|
||||||
|
shk_closeby ? "an incantation" : "something");
|
||||||
|
else if (!Deaf && shk_closeby)
|
||||||
|
You_hear("someone muttering an incantation.");
|
||||||
|
*once = 0;
|
||||||
|
}
|
||||||
|
if (ttmp) {
|
||||||
|
if ((ttmp->ttyp == LANDMINE || ttmp->ttyp == BEAR_TRAP)
|
||||||
|
&& dist2(x, y, shkp->mx, shkp->my) <= 2) {
|
||||||
/* convert to an object */
|
/* convert to an object */
|
||||||
otmp = mksobj((ttmp->ttyp == LANDMINE) ? LAND_MINE : BEARTRAP,
|
otmp = mksobj((ttmp->ttyp == LANDMINE) ? LAND_MINE : BEARTRAP,
|
||||||
TRUE, FALSE);
|
TRUE, FALSE);
|
||||||
|
|||||||
Reference in New Issue
Block a user