eating gold in front of the vault guard (trunk only)

<email deleted> wrote:
> Eating gold in a vault (or polymorphing a pile of gold into 1 gold piece)
> doesn't anger the guard.

This addresses the eating part of that report, but the hero
has to get caught doing it.
This commit is contained in:
nethack.allison
2006-03-26 05:23:46 +00:00
parent 62b430601f
commit ecb98e019c
5 changed files with 26 additions and 1 deletions

View File

@@ -130,6 +130,7 @@ doors break instead of absorbing the blast of a broken wand of striking
avoid "Something's in the way" message with unidentified wand of locking
better handling for Fort Ludios and endgame in wizard mode's `^V ?' menu
no free lunch for gelatinous cubes eating scrolls of mail
eating gold in front of the vault guard will make the guard angry
Platform- and/or Interface-Specific Fixes

View File

@@ -2236,6 +2236,7 @@ E int FDECL(gd_move, (struct monst *));
E void NDECL(paygd);
E long NDECL(hidden_gold);
E boolean NDECL(gd_sound);
E void FDECL(vault_gd_watching, (unsigned int));
/* ### version.c ### */

View File

@@ -62,6 +62,8 @@
** formerly vault.h -- vault guard extension
*/
#define FCSIZ (ROWNO+COLNO)
#define GD_EATGOLD 0x01
#define GD_DESTROYGOLD 0x02
struct fakecorridor {
xchar fx, fy, ftyp;
@@ -75,7 +77,8 @@ struct egd {
d_level gdlevel; /* level (& dungeon) guard was created in */
xchar warncnt; /* number of warnings to follow */
Bitfield(gddone,1); /* true iff guard has released player */
Bitfield(unused,7);
Bitfield(witness,2); /* the guard saw you do something */
Bitfield(unused,5);
struct fakecorridor fakecorr[FCSIZ];
};

View File

@@ -1900,6 +1900,7 @@ eatspecial() /* called after eating non-food */
#endif
else
useupf(otmp, otmp->quan);
vault_gd_watching(GD_EATGOLD);
return;
}
#ifdef MAIL

View File

@@ -510,6 +510,14 @@ register struct monst *grd;
if(abs(egrd->ogx - grd->mx) > 1 ||
abs(egrd->ogy - grd->my) > 1)
return(-1); /* teleported guard - treat as monster */
if(egrd->witness) {
verbalize("How dare you %s that gold, scoundrel!",
(egrd->witness & GD_EATGOLD) ? "consume" : "destroy");
egrd->witness = 0;
grd->mpeaceful = 0;
return(-1);
}
if(egrd->fcend == 1) {
if(u_in_vault &&
(u_carry_gold || um_dist(grd->mx, grd->my, 1))) {
@@ -864,4 +872,15 @@ gd_sound() /* prevent "You hear footsteps.." when inappropriate */
else return((boolean)(grd == (struct monst *)0));
}
void
vault_gd_watching(activity)
unsigned int activity;
{
struct monst *guard = findgd();
if (guard && guard->mcansee && m_canseeu(guard)) {
if (activity == GD_EATGOLD ||
activity == GD_DESTROYGOLD)
EGD(guard)->witness = activity;
}
}
/*vault.c*/