B04008 Minetown fountain warnings prevent fountain gem/gold discovery

<Someone> writes:
I can accept that losing gold into a fountain recharges it to make it
possible to find a gem in it in future (however weird that is). What
_does_ seem wrong is that receiving a warning about a Minetown
fountain prevents finding gems and gold there.
This commit is contained in:
nethack.allison
2002-07-14 17:19:40 +00:00
parent 24cb5a7e3e
commit 19225335bf
4 changed files with 18 additions and 11 deletions
+1
View File
@@ -164,6 +164,7 @@ avoid crash when drinking a potion causes the hero to float up over a fire
in some situations, if hero stood still, a hostile dwarf would switch back in some situations, if hero stood still, a hostile dwarf would switch back
and forth between weapon and pick-axe and never move and forth between weapon and pick-axe and never move
uncontrolled teleports did not handle leashed pets uncontrolled teleports did not handle leashed pets
minetown fountain warnings shouldn't prevent finding gems/coins in fountain
Platform- and/or Interface-Specific Fixes Platform- and/or Interface-Specific Fixes
+6
View File
@@ -267,6 +267,12 @@ extern const struct symdef def_warnsyms[WARNCOUNT];
*/ */
#define F_LOOTED 1 #define F_LOOTED 1
#define F_WARNED 2 #define F_WARNED 2
#define FOUNTAIN_IS_WARNED(x,y) (levl[x][y].looted & F_WARNED)
#define FOUNTAIN_IS_LOOTED(x,y) (levl[x][y].looted & F_LOOTED)
#define SET_FOUNTAIN_WARNED(x,y) levl[x][y].looted |= F_WARNED;
#define SET_FOUNTAIN_LOOTED(x,y) levl[x][y].looted |= F_LOOTED;
#define CLEAR_FOUNTAIN_WARNED(x,y) levl[x][y].looted &= ~F_WARNED;
#define CLEAR_FOUNTAIN_LOOTED(x,y) levl[x][y].looted &= ~F_LOOTED;
/* /*
* Doors are even worse :-) The special warning has a side effect * Doors are even worse :-) The special warning has a side effect
+1 -1
View File
@@ -495,7 +495,7 @@ int ttyp;
breaking bypasses that routine and calls us directly */ breaking bypasses that routine and calls us directly */
if (IS_FOUNTAIN(lev->typ)) { if (IS_FOUNTAIN(lev->typ)) {
dogushforth(FALSE); dogushforth(FALSE);
lev->looted |= F_WARNED; /* force dryup */ SET_FOUNTAIN_WARNED(x,y); /* force dryup */
dryup(x, y, madeby_u); dryup(x, y, madeby_u);
return; return;
#ifdef SINKS #ifdef SINKS
+10 -10
View File
@@ -140,7 +140,7 @@ dofindgem() /* Find a gem in the sparkling waters. */
else You_feel("a gem here!"); else You_feel("a gem here!");
(void) mksobj_at(rnd_class(DILITHIUM_CRYSTAL, LUCKSTONE-1), (void) mksobj_at(rnd_class(DILITHIUM_CRYSTAL, LUCKSTONE-1),
u.ux, u.uy, FALSE, FALSE); u.ux, u.uy, FALSE, FALSE);
levl[u.ux][u.uy].looted |= F_LOOTED; SET_FOUNTAIN_LOOTED(u.ux,u.uy);
newsym(u.ux, u.uy); newsym(u.ux, u.uy);
exercise(A_WIS, TRUE); /* a discovery! */ exercise(A_WIS, TRUE); /* a discovery! */
} }
@@ -151,12 +151,12 @@ xchar x, y;
boolean isyou; boolean isyou;
{ {
if (IS_FOUNTAIN(levl[x][y].typ) && if (IS_FOUNTAIN(levl[x][y].typ) &&
(!rn2(3) || (levl[x][y].looted & F_WARNED))) { (!rn2(3) || FOUNTAIN_IS_WARNED(x,y))) {
s_level *slev = Is_special(&u.uz); s_level *slev = Is_special(&u.uz);
if(isyou && slev && slev->flags.town && if(isyou && slev && slev->flags.town &&
!(levl[x][y].looted & F_WARNED)) { !FOUNTAIN_IS_WARNED(x,y)) {
struct monst *mtmp; struct monst *mtmp;
levl[x][y].looted |= F_WARNED; SET_FOUNTAIN_WARNED(x,y);
/* Warn about future fountain use. */ /* Warn about future fountain use. */
for(mtmp = fmon; mtmp; mtmp = mtmp->nmon) { for(mtmp = fmon; mtmp; mtmp = mtmp->nmon) {
if (DEADMONSTER(mtmp)) continue; if (DEADMONSTER(mtmp)) continue;
@@ -313,7 +313,7 @@ drinkfountain()
case 27: /* Find a gem in the sparkling waters. */ case 27: /* Find a gem in the sparkling waters. */
if (!levl[u.ux][u.uy].looted) { if (!FOUNTAIN_IS_LOOTED(u.ux,u.uy)) {
dofindgem(); dofindgem();
break; break;
} }
@@ -426,7 +426,7 @@ register struct obj *obj;
dowatersnakes(); dowatersnakes();
break; break;
case 24: /* Find a gem */ case 24: /* Find a gem */
if (!levl[u.ux][u.uy].looted) { if (!FOUNTAIN_IS_LOOTED(u.ux,u.uy)) {
dofindgem(); dofindgem();
break; break;
} }
@@ -446,7 +446,7 @@ register struct obj *obj;
if (u.ugold > 10) { if (u.ugold > 10) {
u.ugold -= somegold() / 10; u.ugold -= somegold() / 10;
You("lost some of your gold in the fountain!"); You("lost some of your gold in the fountain!");
levl[u.ux][u.uy].looted &= ~F_LOOTED; CLEAR_FOUNTAIN_LOOTED(u.ux,u.uy);
exercise(A_WIS, FALSE); exercise(A_WIS, FALSE);
} }
#else #else
@@ -465,7 +465,7 @@ register struct obj *obj;
if (!otmp->quan) delobj(otmp); if (!otmp->quan) delobj(otmp);
} }
You("lost some of your money in the fountain!"); You("lost some of your money in the fountain!");
levl[u.ux][u.uy].looted &= ~F_LOOTED; CLEAR_FOUNTAIN_LOOTED(u.ux,u.uy);
exercise(A_WIS, FALSE); exercise(A_WIS, FALSE);
} }
} }
@@ -477,8 +477,8 @@ register struct obj *obj;
* surface. After all, there will have been more people going * surface. After all, there will have been more people going
* by. Just like a shopping mall! Chris Woodbury */ * by. Just like a shopping mall! Chris Woodbury */
if (levl[u.ux][u.uy].looted) break; if (FOUNTAIN_IS_LOOTED(u.ux,u.uy)) break;
levl[u.ux][u.uy].looted |= F_LOOTED; SET_FOUNTAIN_LOOTED(u.ux,u.uy);
(void) mkgold((long) (void) mkgold((long)
(rnd((dunlevs_in_dungeon(&u.uz)-dunlev(&u.uz)+1)*2)+5), (rnd((dunlevs_in_dungeon(&u.uz)-dunlev(&u.uz)+1)*2)+5),
u.ux, u.uy); u.ux, u.uy);