than in pre-3.4.1 releases
provide feedback when going invisible after eating a stalker
killer on tombstone had no prefix for starvation/exhaustion case
+ensure proper message ordering for boulder trap messages
Platform- and/or Interface-Specific Fixes
/* Macros for launching objects */
#define ROLL 0x01 /* the object is rolling */
#define FLING 0x02 /* the object is flying thru the air */
+#define LAUNCH_UNSEEN 0x40 /* hero neither caused nor saw it */
#define LAUNCH_KNOWN 0x80 /* the hero caused this by explicit action */
/* Macros for explosion types */
dx = sgn(x2 - x1);
dy = sgn(y2 - y1);
switch (style) {
+ case ROLL|LAUNCH_UNSEEN:
+ if (otyp == BOULDER) {
+ You_hear(Hallucination ?
+ "someone bowling." :
+ "rumbling in the distance.");
+ }
+ goto roll;
case ROLL|LAUNCH_KNOWN:
/* use otrapped as a flag to ohitmon */
singleobj->otrapped = 1;
style &= ~LAUNCH_KNOWN;
/* fall through */
+ roll:
case ROLL:
delaycnt = 2;
/* fall through */
case ROLLING_BOULDER_TRAP:
if (!is_flyer(mptr)) {
+ int style = ROLL | (in_sight ? 0 : LAUNCH_UNSEEN);
+
newsym(mtmp->mx,mtmp->my);
if (in_sight)
- pline("Click! %s triggers %s.", Monnam(mtmp),
+ pline("Click! %s triggers %s.", Monnam(mtmp),
trap->tseen ?
"a rolling boulder trap" :
something);
if (launch_obj(BOULDER, trap->launch.x, trap->launch.y,
- trap->launch2.x, trap->launch2.y, ROLL)) {
- if (in_sight) trap->tseen = TRUE;
- else You_hear(Hallucination ?
- "someone bowling." :
- "rumbling in the distance.");
- if (mtmp->mhp <= 0) trapkilled = TRUE;
+ trap->launch2.x, trap->launch2.y, style)) {
+ if (in_sight) trap->tseen = TRUE;
+ if (mtmp->mhp <= 0) trapkilled = TRUE;
} else {
- deltrap(trap);
- newsym(mtmp->mx,mtmp->my);
+ deltrap(trap);
+ newsym(mtmp->mx,mtmp->my);
}
- }
+ }
break;
default: