struct context_info {
unsigned ident; /* social security number for each monster */
unsigned no_of_wizards; /* 0, 1 or 2 (wizard and his shadow) */
- unsigned run; /* 0: h (etc), 1: H (etc), 2: fh (etc) */
- /* 3: FH, 4: ff+, 5: ff-, 6: FF+, 7: FF- */
- /* 8: travel */
+ unsigned run; /* 0: h (etc), 1: H (etc), 2: fh (etc),
+ * 3: FH, 4: ff+, 5: ff-, 6: FF+, 7: FF-,
+ * 8: travel */
unsigned startingpet_mid; /* monster id number for initial pet */
int current_fruit; /* fruit->fid corresponding to gp.pl_fruit[] */
int mysteryforce; /* adjusts how often "mysterious force" kicks in */
UNDEFINED_PTR, /* branches */
/* files.c */
BONESINIT, /* bones */
+ /* hack.c */
+ 0U, /* bldrpush_oid - last boulder pushed */
+ 0L, /* bldrpushtime - turn message was given about pushing that boulder */
/* mkmaze.c */
{ {COLNO, ROWNO, 0, 0}, {COLNO, ROWNO, 0, 0},
FALSE, FALSE, 0, 0, { 0 } }, /* bughack */
}
{
- /* note: reset to zero after save/restore cycle */
- static NEARDATA long lastmovetime;
+ boolean givemesg, easypush;
dopush:
- what = the(xname(otmp));
+ /* give boulder pushing feedback if this is a different
+ boulder than the last one pushed or if it's been at
+ least 2 turns since we last pushed this boulder;
+ unlike with Norep(), intervening messages don't cause
+ it to repeat, only doing something else in the meantime */
+ if (otmp->o_id != gb.bldrpush_oid) {
+ gb.bldrpushtime = gm.moves + 1L;
+ gb.bldrpush_oid = otmp->o_id;
+ }
+ givemesg = (gm.moves > gb.bldrpushtime + 2L
+ || gm.moves < gb.bldrpushtime);
+ what = givemesg ? the(xname(otmp)) : 0;
if (!u.usteed) {
- /* FIXME: also remember boulder->o_id and override
- lastmovetime if this is a different boulder */
- if (gm.moves > lastmovetime + 2 || gm.moves < lastmovetime)
+ easypush = throws_rocks(gy.youmonst.data);
+ if (givemesg)
pline("With %s effort you move %s.",
- throws_rocks(gy.youmonst.data) ? "little"
- : "great",
- what);
- exercise(A_STR, TRUE);
- } else
- pline("%s moves %s.", upstart(y_monnam(u.usteed)), what);
- lastmovetime = gm.moves;
+ easypush ? "little" : "great", what);
+ if (!easypush)
+ exercise(A_STR, TRUE);
+ } else {
+ if (givemesg)
+ pline("%s moves %s.",
+ upstart(y_monnam(u.usteed)), what);
+ }
+ gb.bldrpushtime = gm.moves;
}
/* Move the boulder *after* the message. */