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:
@@ -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
|
||||||
|
|||||||
@@ -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));
|
||||||
|
|||||||
@@ -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 */
|
||||||
|
|||||||
@@ -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))
|
||||||
|
|||||||
@@ -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);
|
||||||
}
|
}
|
||||||
|
|||||||
19
src/trap.c
19
src/trap.c
@@ -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.");
|
||||||
|
|||||||
Reference in New Issue
Block a user