From 462858bd31d125a23bf3fa5a04de326bbdc54d81 Mon Sep 17 00:00:00 2001 From: cohrs Date: Sun, 18 May 2003 21:04:49 +0000 Subject: [PATCH] B02005 - Boulder and vision add another bit to the flags passed to launch_obj so it can print the initial "rumbling" message at the appropriate time rather than having the caller print the message, possibly out of order. --- doc/fixes34.2 | 1 + include/hack.h | 1 + src/trap.c | 27 +++++++++++++++++---------- 3 files changed, 19 insertions(+), 10 deletions(-) diff --git a/doc/fixes34.2 b/doc/fixes34.2 index b46790a3d..f80ba3b72 100644 --- a/doc/fixes34.2 +++ b/doc/fixes34.2 @@ -67,6 +67,7 @@ poison missiles were unintentionally more likely to inflict "deadly poison" 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 diff --git a/include/hack.h b/include/hack.h index a2b79e857..a9e0dc67a 100644 --- a/include/hack.h +++ b/include/hack.h @@ -203,6 +203,7 @@ NEARDATA extern coord bhitpos; /* place where throw or zap hits or stops */ /* 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 */ diff --git a/src/trap.c b/src/trap.c index 7c66c6a9e..cb9999d24 100644 --- a/src/trap.c +++ b/src/trap.c @@ -1274,11 +1274,19 @@ int style; 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 */ @@ -2035,24 +2043,23 @@ glovecheck: target = which_armor(mtmp, W_ARMG); 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: -- 2.40.0