stealing heaven
Fix the reported problem of getting impossible warnings for unpaid inventory items during final disclosure if you level teleport out of the dungeon while holding shop goods. The fix makes you trigger a shop robbery first; that required a minor end of game change to prevent the shopkeeper from seeming to tag along (shk would take your possessions as if you'd died on the shop level).
This commit is contained in:
@@ -1,4 +1,4 @@
|
||||
/* SCCS Id: @(#)end.c 3.4 2002/10/04 */
|
||||
/* SCCS Id: @(#)end.c 3.4 2002/11/20 */
|
||||
/* Copyright (c) Stichting Mathematisch Centrum, Amsterdam, 1985. */
|
||||
/* NetHack may be freely redistributed. See license for details. */
|
||||
|
||||
@@ -690,7 +690,7 @@ die:
|
||||
|
||||
if (how != PANICKED) {
|
||||
/* these affect score and/or bones, but avoid them during panic */
|
||||
taken = paybill(how != QUIT);
|
||||
taken = paybill((how == ESCAPED) ? -1 : (how != QUIT));
|
||||
paygd();
|
||||
clearpriests();
|
||||
} else taken = FALSE; /* lint; assert( !bones_ok ); */
|
||||
|
||||
@@ -1,4 +1,4 @@
|
||||
/* SCCS Id: @(#)shk.c 3.4 2002/09/28 */
|
||||
/* SCCS Id: @(#)shk.c 3.4 2002/11/20 */
|
||||
/* Copyright (c) Stichting Mathematisch Centrum, Amsterdam, 1985. */
|
||||
/* NetHack may be freely redistributed. See license for details. */
|
||||
|
||||
@@ -51,7 +51,7 @@ STATIC_DCL long FDECL(getprice, (struct obj *,BOOLEAN_P));
|
||||
STATIC_DCL void FDECL(shk_names_obj,
|
||||
(struct monst *,struct obj *,const char *,long,const char *));
|
||||
STATIC_DCL struct obj *FDECL(bp_to_obj, (struct bill_x *));
|
||||
STATIC_DCL boolean FDECL(inherits, (struct monst *, int, BOOLEAN_P));
|
||||
STATIC_DCL boolean FDECL(inherits, (struct monst *,int,int));
|
||||
STATIC_DCL void FDECL(set_repo_loc, (struct eshk *));
|
||||
STATIC_DCL boolean NDECL(angry_shk_exists);
|
||||
STATIC_DCL void FDECL(rile_shk, (struct monst *));
|
||||
@@ -1572,6 +1572,9 @@ boolean croaked;
|
||||
register boolean taken = FALSE;
|
||||
register int numsk = 0;
|
||||
|
||||
/* if we escaped from the dungeon, shopkeepers can't reach us */
|
||||
if (croaked < 0) return FALSE;
|
||||
|
||||
/* this is where inventory will end up if any shk takes it */
|
||||
repo_location.x = repo_location.y = 0;
|
||||
|
||||
@@ -1602,7 +1605,7 @@ STATIC_OVL boolean
|
||||
inherits(shkp, numsk, croaked)
|
||||
struct monst *shkp;
|
||||
int numsk;
|
||||
boolean croaked;
|
||||
int croaked;
|
||||
{
|
||||
long loss = 0L;
|
||||
#ifdef GOLDOBJ
|
||||
|
||||
@@ -1,4 +1,4 @@
|
||||
/* SCCS Id: @(#)teleport.c 3.4 2002/05/31 */
|
||||
/* SCCS Id: @(#)teleport.c 3.4 2002/11/20 */
|
||||
/* Copyright (c) Stichting Mathematisch Centrum, Amsterdam, 1985. */
|
||||
/* NetHack may be freely redistributed. See license for details. */
|
||||
|
||||
@@ -648,6 +648,14 @@ level_tele()
|
||||
killer = 0; /* still alive, so far... */
|
||||
|
||||
if (newlev < 0) {
|
||||
if (*u.ushops0) {
|
||||
/* take unpaid inventory items off of shop bills */
|
||||
in_mklev = TRUE; /* suppress map update */
|
||||
u_left_shop(u.ushops0, TRUE);
|
||||
/* you're now effectively out of the shop */
|
||||
*u.ushops0 = *u.ushops = '\0';
|
||||
in_mklev = FALSE;
|
||||
}
|
||||
if (newlev <= -10) {
|
||||
You("arrive in heaven.");
|
||||
verbalize("Thou art early, but we'll admit thee.");
|
||||
@@ -670,8 +678,8 @@ level_tele()
|
||||
pline("Unfortunately, you don't know how to fly.");
|
||||
You("plummet a few thousand feet to your death.");
|
||||
Sprintf(buf,
|
||||
"teleported out of the dungeon and fell to %s death",
|
||||
uhis());
|
||||
"teleported out of the dungeon and fell to %s death",
|
||||
uhis());
|
||||
killer = buf;
|
||||
killer_format = NO_KILLER_PREFIX;
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user