Expand safe_wait to deadly status afflictions
Searching or waiting with safe_wait on will now consider sliming, stoning, or deadly illness to be hazardous and prevent the command.
This commit is contained in:
@@ -174,6 +174,8 @@ revival via undead turning of corpse carried by hero said "your <mon> corpse
|
||||
comes alive" even when revived monster was undead
|
||||
prevent searching or waiting next to a hostile monster if boolean option
|
||||
safe_wait is on - override with 'm'
|
||||
prevent searching or waiting if hero is slimed, stoning, or deadly ill
|
||||
if safe_wait is on - override with 'm'
|
||||
allow random mimics to show up mimicing more furniture than just stairs
|
||||
scatter exploding bag of holding contents instead of outright deleting them
|
||||
male hero poly'd into nymph chooses charm vs seduce message based on being
|
||||
|
||||
@@ -479,7 +479,8 @@ extern void deferred_goto(void);
|
||||
extern boolean revive_corpse(struct obj *);
|
||||
extern void revive_mon(union any *, long);
|
||||
extern void zombify_mon(union any *, long);
|
||||
extern boolean cmd_safety_prevention(const char *, const char *, int *);
|
||||
extern boolean cmd_safety_prevention(const char *, const char *,
|
||||
const char *, int *);
|
||||
extern int donull(void);
|
||||
extern int dowipe(void);
|
||||
extern void legs_in_no_shape(const char *, boolean);
|
||||
|
||||
@@ -1948,7 +1948,7 @@ dosearch0(int aflag) /* intrinsic autosearch vs explicit searching */
|
||||
int
|
||||
dosearch(void)
|
||||
{
|
||||
if (cmd_safety_prevention("another search",
|
||||
if (cmd_safety_prevention("Searching", "another search",
|
||||
"You already found a monster.",
|
||||
&ga.already_found_flag))
|
||||
return ECMD_OK;
|
||||
|
||||
30
src/do.c
30
src/do.c
@@ -13,6 +13,7 @@ static void dosinkring(struct obj *);
|
||||
static int drop(struct obj *);
|
||||
static int menudrop_split(struct obj *, long);
|
||||
static boolean engulfer_digests_food(struct obj *);
|
||||
static boolean danger_uprops(void);
|
||||
static int wipeoff(void);
|
||||
static int menu_drop(int);
|
||||
static NHFILE *currentlevel_rewrite(void);
|
||||
@@ -2132,19 +2133,34 @@ zombify_mon(anything *arg, long timeout)
|
||||
}
|
||||
}
|
||||
|
||||
boolean
|
||||
cmd_safety_prevention(const char *cmddesc, const char *act, int *flagcounter)
|
||||
/* return TRUE if hero properties are dangerous to hero */
|
||||
static boolean
|
||||
danger_uprops(void)
|
||||
{
|
||||
if (flags.safe_wait && !iflags.menu_requested
|
||||
&& !gm.multi && monster_nearby()) {
|
||||
return (((Stoned && !Stone_resistance)
|
||||
|| Slimed
|
||||
|| ((Sick & SICK_NONVOMITABLE) && !Sick_resistance)));
|
||||
}
|
||||
|
||||
boolean
|
||||
cmd_safety_prevention(const char *ucverb, const char *cmddesc,
|
||||
const char *act, int *flagcounter)
|
||||
{
|
||||
if (flags.safe_wait && !iflags.menu_requested && !gm.multi) {
|
||||
char buf[QBUFSZ];
|
||||
|
||||
buf[0] = '\0';
|
||||
if (iflags.cmdassist || !(*flagcounter)++)
|
||||
Sprintf(buf, " Use '%s' prefix to force %s.",
|
||||
visctrl(cmd_from_func(do_reqmenu)), cmddesc);
|
||||
Norep("%s%s", act, buf);
|
||||
return TRUE;
|
||||
|
||||
if (monster_nearby()) {
|
||||
Norep("%s%s", act, buf);
|
||||
return TRUE;
|
||||
} else if (danger_uprops()) {
|
||||
Norep("%s doesn't feel like a good idea right now.", ucverb);
|
||||
return TRUE;
|
||||
}
|
||||
}
|
||||
*flagcounter = 0;
|
||||
return FALSE;
|
||||
@@ -2155,7 +2171,7 @@ cmd_safety_prevention(const char *cmddesc, const char *act, int *flagcounter)
|
||||
int
|
||||
donull(void)
|
||||
{
|
||||
if (cmd_safety_prevention("a no-op (to rest)",
|
||||
if (cmd_safety_prevention("Waiting", "a no-op (to rest)",
|
||||
"Are you waiting to get hit?",
|
||||
&gd.did_nothing_flag))
|
||||
return ECMD_OK;
|
||||
|
||||
Reference in New Issue
Block a user