stinking nemesis

Noticed when testing erodeproof Mitre of Holiness:  the cloud of
stinking gas released by Nalzok when he died ending up killing my pet
and my hero got blamed for that.  Don't blame--or credit--the hero for
monsters affected by the gas cloud when a dying nemesis produces such.
This commit is contained in:
PatR
2023-06-17 14:15:49 -07:00
parent 8fd8d1defa
commit 8b9a93f797
5 changed files with 27 additions and 15 deletions
+2 -1
View File
@@ -1,4 +1,4 @@
HDT-Branch: NetHack-3.7 $:$NHDT-Revision: 1.1196 $ $NHDT-Date: 1686386794 2023/06/10 08:46:34 $ HDT-Branch: NetHack-3.7 $:$NHDT-Revision: 1.1201 $ $NHDT-Date: 1687036542 2023/06/17 21:15:42 $
General Fixes and Modified Features General Fixes and Modified Features
----------------------------------- -----------------------------------
@@ -1621,6 +1621,7 @@ entering the tutorial stashed hero's equipment for eventual return to normal
entering the tutorial and then returning to play made the tutorial branch be entering the tutorial and then returning to play made the tutorial branch be
eligible for a portal destination via wizard's Eye of the Aethiopica eligible for a portal destination via wizard's Eye of the Aethiopica
'hard helmet' was based on being metallic so overlooked crystal helmet 'hard helmet' was based on being metallic so overlooked crystal helmet
don't blame/credit hero for stinking cloud if dying quest nemesis releases one
Fixes to 3.7.0-x Platform and/or Interface Problems Exposed Via git Repository Fixes to 3.7.0-x Platform and/or Interface Problems Exposed Via git Repository
+2 -1
View File
@@ -1,4 +1,4 @@
/* NetHack 3.7 extern.h $NHDT-Date: 1684138080 2023/05/15 08:08:00 $ $NHDT-Branch: NetHack-3.7 $:$NHDT-Revision: 1.1263 $ */ /* NetHack 3.7 extern.h $NHDT-Date: 1687036542 2023/06/17 21:15:42 $ $NHDT-Branch: NetHack-3.7 $:$NHDT-Revision: 1.1275 $ */
/* Copyright (c) Steve Creps, 1988. */ /* Copyright (c) Steve Creps, 1988. */
/* NetHack may be freely redistributed. See license for details. */ /* NetHack may be freely redistributed. See license for details. */
@@ -2311,6 +2311,7 @@ extern void artitouch(struct obj *);
extern boolean ok_to_quest(void); extern boolean ok_to_quest(void);
extern void leader_speaks(struct monst *); extern void leader_speaks(struct monst *);
extern void nemesis_speaks(void); extern void nemesis_speaks(void);
extern void nemesis_stinks(coordxy, coordxy);
extern void quest_chat(struct monst *); extern void quest_chat(struct monst *);
extern void quest_talk(struct monst *); extern void quest_talk(struct monst *);
extern void quest_stat_check(struct monst *); extern void quest_stat_check(struct monst *);
+3 -9
View File
@@ -1,4 +1,4 @@
/* NetHack 3.7 mon.c $NHDT-Date: 1683831104 2023/05/11 18:51:44 $ $NHDT-Branch: NetHack-3.7 $:$NHDT-Revision: 1.501 $ */ /* NetHack 3.7 mon.c $NHDT-Date: 1687036544 2023/06/17 21:15:44 $ $NHDT-Branch: NetHack-3.7 $:$NHDT-Revision: 1.509 $ */
/* Copyright (c) Stichting Mathematisch Centrum, Amsterdam, 1985. */ /* Copyright (c) Stichting Mathematisch Centrum, Amsterdam, 1985. */
/*-Copyright (c) Derek S. Ray, 2015. */ /*-Copyright (c) Derek S. Ray, 2015. */
/* NetHack may be freely redistributed. See license for details. */ /* NetHack may be freely redistributed. See license for details. */
@@ -2478,7 +2478,7 @@ m_detach(
if (mtmp->mleashed) if (mtmp->mleashed)
m_unleash(mtmp, FALSE); m_unleash(mtmp, FALSE);
if (mtmp->mx > 0 && emits_light(mptr)) if (mx > 0 && emits_light(mptr))
del_light_source(LS_MONSTER, monst_to_any(mtmp)); del_light_source(LS_MONSTER, monst_to_any(mtmp));
/* /*
@@ -2505,7 +2505,7 @@ m_detach(
/* The Archeologist, Caveman, and Priest quest texts describe /* The Archeologist, Caveman, and Priest quest texts describe
the nemesis's body creating noxious fumes/gas when killed. */ the nemesis's body creating noxious fumes/gas when killed. */
if (stinky_nemesis(mtmp)) if (stinky_nemesis(mtmp))
create_gas_cloud(mx, my, 5, 8); nemesis_stinks(mx, my);
} }
if (mtmp->data->msound == MS_LEADER) if (mtmp->data->msound == MS_LEADER)
leaddead(); leaddead();
@@ -2759,12 +2759,6 @@ mondead(struct monst *mtmp)
break; break;
} }
} }
#if 0 /* moved to m_detach() to kick in if mongone() happens */
if (mtmp->iswiz)
wizdead();
if (mtmp->data->msound == MS_NEMESIS)
nemdead();
#endif
if (mndx == PM_MEDUSA && gm.mvitals[mndx].died == 1) { if (mndx == PM_MEDUSA && gm.mvitals[mndx].died == 1) {
record_achievement(ACH_MEDU); /* also generates a livelog event */ record_achievement(ACH_MEDU); /* also generates a livelog event */
+17 -1
View File
@@ -1,4 +1,4 @@
/* NetHack 3.7 quest.c $NHDT-Date: 1596498200 2020/08/03 23:43:20 $ $NHDT-Branch: NetHack-3.7 $:$NHDT-Revision: 1.29 $ */ /* NetHack 3.7 quest.c $NHDT-Date: 1687036547 2023/06/17 21:15:47 $ $NHDT-Branch: NetHack-3.7 $:$NHDT-Revision: 1.38 $ */
/* Copyright 1991, M. Stephenson */ /* Copyright 1991, M. Stephenson */
/* NetHack may be freely redistributed. See license for details. */ /* NetHack may be freely redistributed. See license for details. */
@@ -378,6 +378,22 @@ nemesis_speaks(void)
qt_pager("discourage"); qt_pager("discourage");
} }
/* create cloud of stinking gas around dying nemesis */
void
nemesis_stinks(coordxy mx, coordxy my)
{
boolean save_mon_moving = gc.context.mon_moving;
/*
* Some nemeses (determined by caller) release a cloud of noxious
* gas when they die. Don't make the hero be responsible for such
* a cloud even if hero has just killed nemesis.
*/
gc.context.mon_moving = TRUE;
create_gas_cloud(mx, my, 5, 8);
gc.context.mon_moving = save_mon_moving;
}
static void static void
chat_with_guardian(void) chat_with_guardian(void)
{ {
+3 -3
View File
@@ -1,4 +1,4 @@
/* NetHack 3.7 questpgr.c $NHDT-Date: 1655065145 2022/06/12 20:19:05 $ $NHDT-Branch: NetHack-3.7 $:$NHDT-Revision: 1.79 $ */ /* NetHack 3.7 questpgr.c $NHDT-Date: 1687036548 2023/06/17 21:15:48 $ $NHDT-Branch: NetHack-3.7 $:$NHDT-Revision: 1.82 $ */
/* Copyright 1991, M. Stephenson */ /* Copyright 1991, M. Stephenson */
/* NetHack may be freely redistributed. See license for details. */ /* NetHack may be freely redistributed. See license for details. */
@@ -171,8 +171,8 @@ stinky_nemesis(struct monst *mon)
(void) com_pager_core(gu.urole.filecode, "killed_nemesis", FALSE, &mesg); (void) com_pager_core(gu.urole.filecode, "killed_nemesis", FALSE, &mesg);
#endif #endif
/* this is somewhat fragile; it assumes that when both (noxious or /* this is somewhat fragile; it assumes that when both {noxious or
poisonous or toxic) and (gas or fumes) are present, the latter poisonous or toxic} and {gas or fumes} are present, the latter
refers to the former rather than to something unrelated; it does refers to the former rather than to something unrelated; it does
make sure that fumes occurs after noxious rather than before */ make sure that fumes occurs after noxious rather than before */
if (mesg) { if (mesg) {