than via adding a random offset
some death by the-poison-was-deadly situations left stale non-zero HP shown
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
E boolean FDECL(goodpos, (int, int, struct monst *, unsigned));
E boolean FDECL(enexto, (coord *, XCHAR_P, XCHAR_P, struct permonst *));
-E boolean
-FDECL(enexto_core, (coord *, XCHAR_P, XCHAR_P, struct permonst *, unsigned));
+E boolean FDECL(enexto_core, (coord *, XCHAR_P, XCHAR_P,
+ struct permonst *, unsigned));
E void FDECL(teleds, (int, int, BOOLEAN_P));
E boolean FDECL(safe_teleds, (BOOLEAN_P));
E boolean FDECL(teleport_pet, (struct monst *, BOOLEAN_P));
E void NDECL(level_tele);
E void FDECL(domagicportal, (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 boolean FDECL(rloc, (struct monst *, BOOLEAN_P));
E boolean FDECL(tele_restrict, (struct monst *));
E void FDECL(mtele_trap, (struct monst *, struct trap *, int));
-E int FDECL(mlevel_tele_trap,
- (struct monst *, struct trap *, BOOLEAN_P, int));
+E int FDECL(mlevel_tele_trap, (struct monst *, struct trap *,
+ BOOLEAN_P, int));
E boolean FDECL(rloco, (struct obj *));
E int NDECL(random_teleport_level);
E boolean FDECL(u_teleport_mon, (struct monst *, BOOLEAN_P));
#define FORCETRAP 0x01 /* triggering not left to chance */
#define NOWEBMSG 0x02 /* suppress stumble into web message */
#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 VIASITTING 0x20 /* #sit while at trap location (affects message) */
/* Flags to control test_move in hack.c */
#define DO_MOVE 0 /* really doing the move */
}
} else {
You("sit down.");
- dotrap(trap, 0);
+ dotrap(trap, VIASITTING);
}
} else if (Underwater || Is_waterlevel(&u.uz)) {
if (Is_waterlevel(&u.uz))
}
void
-level_tele_trap(trap)
+level_tele_trap(trap, trflags)
struct trap *trap;
+unsigned trflags;
{
- You("%s onto a level teleport trap!",
- Levitation ? (const char *) "float"
- : locomotion(youmonst.data, "step"));
+ char verbbuf[BUFSZ];
+
+ 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) {
shieldeff(u.ux, u.uy);
}
webmsgok = (trflags & NOWEBMSG) == 0,
forcebungle = (trflags & FORCEBUNGLE) != 0,
plunged = (trflags & TOOKPLUNGE) != 0,
+ viasitting = (trflags & VIASITTING) != 0,
adj_pit = conjoined_pits(trap, t_at(u.ux0, u.uy0), TRUE);
int oldumort;
int steed_article = ARTICLE_THE;
case LEVEL_TELEP:
seetrap(trap);
- level_tele_trap(trap);
+ level_tele_trap(trap, trflags);
break;
case WEB: /* Our luckless player has stumbled into a web. */
if (webmsgok) {
char verbbuf[BUFSZ];
- if (forcetrap) {
+ if (forcetrap || viasitting) {
Strcpy(verbbuf, "are caught by");
} else if (u.usteed) {
Sprintf(verbbuf, "lead %s into",
char verbbuf[BUFSZ];
seetrap(trap);
- if (u.usteed)
- Sprintf(verbbuf, "lead %s",
+ if (viasitting)
+ Strcpy(verbbuf, "trigger"); /* follows "You sit down." */
+ else if (u.usteed)
+ Sprintf(verbbuf, "lead %s onto",
x_monnam(u.usteed, steed_article, (char *) 0,
SUPPRESS_SADDLE, FALSE));
else
- Sprintf(verbbuf, "%s", Levitation
- ? (const char *) "float"
- : locomotion(youmonst.data, "step"));
- You("%s onto a polymorph trap!", verbbuf);
+ Sprintf(verbbuf, "%s onto",
+ Levitation ? (const char *) "float"
+ : locomotion(youmonst.data, "step"));
+ You("%s a polymorph trap!", verbbuf);
if (Antimagic || Unchanging) {
shieldeff(u.ux, u.uy);
You_feel("momentarily different.");