fix #H4597 - sitting on level teleport trap

During #sit:  "You sit down.  You step on a level teleporter."
Switch to alternate phrasing for #sit.

Webs and polymorph traps had similar issues.
This commit is contained in:
PatR
2016-12-08 17:22:59 -08:00
parent 9b725218bb
commit 2655910a0f
6 changed files with 33 additions and 20 deletions

View File

@@ -362,6 +362,8 @@ movement speeds are made less predictable by using random rounding, rather
than via adding a random offset than via adding a random offset
some death by the-poison-was-deadly situations left stale non-zero HP shown some death by the-poison-was-deadly situations left stale non-zero HP shown
on the status line during final disclosure on the status line during final disclosure
when sitting at a trap spot: You sit down. You step on a level teleporter.
(likewise for polymorph trap, and similar issue for web)
Fixes to Post-3.6.0 Problems that Were Exposed Via git Repository Fixes to Post-3.6.0 Problems that Were Exposed Via git Repository

View File

@@ -2282,8 +2282,8 @@ E boolean FDECL(stucksteed, (BOOLEAN_P));
E boolean FDECL(goodpos, (int, int, struct monst *, unsigned)); E boolean FDECL(goodpos, (int, int, struct monst *, unsigned));
E boolean FDECL(enexto, (coord *, XCHAR_P, XCHAR_P, struct permonst *)); E boolean FDECL(enexto, (coord *, XCHAR_P, XCHAR_P, struct permonst *));
E boolean E boolean FDECL(enexto_core, (coord *, XCHAR_P, XCHAR_P,
FDECL(enexto_core, (coord *, XCHAR_P, XCHAR_P, struct permonst *, unsigned)); struct permonst *, unsigned));
E void FDECL(teleds, (int, int, BOOLEAN_P)); E void FDECL(teleds, (int, int, BOOLEAN_P));
E boolean FDECL(safe_teleds, (BOOLEAN_P)); E boolean FDECL(safe_teleds, (BOOLEAN_P));
E boolean FDECL(teleport_pet, (struct monst *, BOOLEAN_P)); E boolean FDECL(teleport_pet, (struct monst *, BOOLEAN_P));
@@ -2293,13 +2293,13 @@ E int NDECL(dotele);
E void NDECL(level_tele); E void NDECL(level_tele);
E void FDECL(domagicportal, (struct trap *)); E void FDECL(domagicportal, (struct trap *));
E void FDECL(tele_trap, (struct trap *)); E void FDECL(tele_trap, (struct trap *));
E void FDECL(level_tele_trap, (struct trap *)); E void FDECL(level_tele_trap, (struct trap *, unsigned));
E void FDECL(rloc_to, (struct monst *, int, int)); E void FDECL(rloc_to, (struct monst *, int, int));
E boolean FDECL(rloc, (struct monst *, BOOLEAN_P)); E boolean FDECL(rloc, (struct monst *, BOOLEAN_P));
E boolean FDECL(tele_restrict, (struct monst *)); E boolean FDECL(tele_restrict, (struct monst *));
E void FDECL(mtele_trap, (struct monst *, struct trap *, int)); E void FDECL(mtele_trap, (struct monst *, struct trap *, int));
E int FDECL(mlevel_tele_trap, E int FDECL(mlevel_tele_trap, (struct monst *, struct trap *,
(struct monst *, struct trap *, BOOLEAN_P, int)); BOOLEAN_P, int));
E boolean FDECL(rloco, (struct obj *)); E boolean FDECL(rloco, (struct obj *));
E int NDECL(random_teleport_level); E int NDECL(random_teleport_level);
E boolean FDECL(u_teleport_mon, (struct monst *, BOOLEAN_P)); E boolean FDECL(u_teleport_mon, (struct monst *, BOOLEAN_P));

View File

@@ -296,9 +296,9 @@ enum hmon_atkmode_types {
#define FORCETRAP 0x01 /* triggering not left to chance */ #define FORCETRAP 0x01 /* triggering not left to chance */
#define NOWEBMSG 0x02 /* suppress stumble into web message */ #define NOWEBMSG 0x02 /* suppress stumble into web message */
#define FORCEBUNGLE 0x04 /* adjustments appropriate for bungling */ #define FORCEBUNGLE 0x04 /* adjustments appropriate for bungling */
#define RECURSIVETRAP 0x08 /* trap changed into another type this same turn \ #define RECURSIVETRAP 0x08 /* trap changed into another type this same turn */
*/
#define TOOKPLUNGE 0x10 /* used '>' to enter pit below you */ #define TOOKPLUNGE 0x10 /* used '>' to enter pit below you */
#define VIASITTING 0x20 /* #sit while at trap location (affects message) */
/* Flags to control test_move in hack.c */ /* Flags to control test_move in hack.c */
#define DO_MOVE 0 /* really doing the move */ #define DO_MOVE 0 /* really doing the move */

View File

@@ -113,7 +113,7 @@ dosit()
} }
} else { } else {
You("sit down."); You("sit down.");
dotrap(trap, 0); dotrap(trap, VIASITTING);
} }
} else if (Underwater || Is_waterlevel(&u.uz)) { } else if (Underwater || Is_waterlevel(&u.uz)) {
if (Is_waterlevel(&u.uz)) if (Is_waterlevel(&u.uz))

View File

@@ -872,12 +872,20 @@ struct trap *trap;
} }
void void
level_tele_trap(trap) level_tele_trap(trap, trflags)
struct trap *trap; struct trap *trap;
unsigned trflags;
{ {
You("%s onto a level teleport trap!", char verbbuf[BUFSZ];
Levitation ? (const char *) "float"
: locomotion(youmonst.data, "step")); if ((trflags & VIASITTING) != 0)
Strcpy(verbbuf, "trigger"); /* follows "You sit down." */
else
Sprintf(verbbuf, "%s onto",
Levitation ? (const char *) "float"
: locomotion(youmonst.data, "step"));
You("%s a level teleport trap!", verbbuf);
if (Antimagic) { if (Antimagic) {
shieldeff(u.ux, u.uy); shieldeff(u.ux, u.uy);
} }

View File

@@ -850,6 +850,7 @@ unsigned trflags;
webmsgok = (trflags & NOWEBMSG) == 0, webmsgok = (trflags & NOWEBMSG) == 0,
forcebungle = (trflags & FORCEBUNGLE) != 0, forcebungle = (trflags & FORCEBUNGLE) != 0,
plunged = (trflags & TOOKPLUNGE) != 0, plunged = (trflags & TOOKPLUNGE) != 0,
viasitting = (trflags & VIASITTING) != 0,
adj_pit = conjoined_pits(trap, t_at(u.ux0, u.uy0), TRUE); adj_pit = conjoined_pits(trap, t_at(u.ux0, u.uy0), TRUE);
int oldumort; int oldumort;
int steed_article = ARTICLE_THE; int steed_article = ARTICLE_THE;
@@ -1237,7 +1238,7 @@ unsigned trflags;
case LEVEL_TELEP: case LEVEL_TELEP:
seetrap(trap); seetrap(trap);
level_tele_trap(trap); level_tele_trap(trap, trflags);
break; break;
case WEB: /* Our luckless player has stumbled into a web. */ case WEB: /* Our luckless player has stumbled into a web. */
@@ -1253,7 +1254,7 @@ unsigned trflags;
if (webmsgok) { if (webmsgok) {
char verbbuf[BUFSZ]; char verbbuf[BUFSZ];
if (forcetrap) { if (forcetrap || viasitting) {
Strcpy(verbbuf, "are caught by"); Strcpy(verbbuf, "are caught by");
} else if (u.usteed) { } else if (u.usteed) {
Sprintf(verbbuf, "lead %s into", Sprintf(verbbuf, "lead %s into",
@@ -1382,15 +1383,17 @@ unsigned trflags;
char verbbuf[BUFSZ]; char verbbuf[BUFSZ];
seetrap(trap); seetrap(trap);
if (u.usteed) if (viasitting)
Sprintf(verbbuf, "lead %s", Strcpy(verbbuf, "trigger"); /* follows "You sit down." */
else if (u.usteed)
Sprintf(verbbuf, "lead %s onto",
x_monnam(u.usteed, steed_article, (char *) 0, x_monnam(u.usteed, steed_article, (char *) 0,
SUPPRESS_SADDLE, FALSE)); SUPPRESS_SADDLE, FALSE));
else else
Sprintf(verbbuf, "%s", Levitation Sprintf(verbbuf, "%s onto",
? (const char *) "float" Levitation ? (const char *) "float"
: locomotion(youmonst.data, "step")); : locomotion(youmonst.data, "step"));
You("%s onto a polymorph trap!", verbbuf); You("%s a polymorph trap!", verbbuf);
if (Antimagic || Unchanging) { if (Antimagic || Unchanging) {
shieldeff(u.ux, u.uy); shieldeff(u.ux, u.uy);
You_feel("momentarily different."); You_feel("momentarily different.");