From: cohrs Date: Fri, 24 Oct 2003 01:59:48 +0000 (+0000) Subject: another conflict abuse X-Git-Tag: MOVE2GIT~1646 X-Git-Url: https://granicus.if.org/sourcecode?a=commitdiff_plain;h=a9c80974e8cd199b594e147a1de3f5fe8edc8cec;p=nethack another conflict abuse Reported a really long time ago (June 2001) by : - stand on the upstairs and engrave Elbereth with a /oFire - create Demogorgon and e.g. a tame dragon - cause conflict - Dragon will kill Demogorgon and Demogorgon will never ever attack Dragon. All monsters could still attack Demogorgon without response via fightm(). Modified fightm() to include a bit of code in m_move and dog_move, allowing response to an attack. Testing this in action, Demogorgon still usually did things detrimental to the player, mostly summoning nasty monsters. --- diff --git a/doc/fixes34.3 b/doc/fixes34.3 index 8d8eaf76f..70adbbf9e 100644 --- a/doc/fixes34.3 +++ b/doc/fixes34.3 @@ -78,6 +78,8 @@ when polymorphed into a quantum mechanic, it was possible to jump into the water on a no teleport level and instinctively teleport when polymorphed into a quantum mechanic on a no teleport level and swallowed, no feedback was given when you teleported the swallower away +allow Conflict-resistant monsters to respond to conflict attacks rather than + sitting there and taking the attacks until they die Platform- and/or Interface-Specific Fixes diff --git a/src/mhitm.c b/src/mhitm.c index 3e2a3592a..d3d941b66 100644 --- a/src/mhitm.c +++ b/src/mhitm.c @@ -151,6 +151,16 @@ fightm(mtmp) /* have monsters fight each other */ */ if (has_u_swallowed) return 0; + /* Allow attacked monsters a chance to hit back. Primarily + * to allow monsters that resist conflict to respond. + */ + if ((result & MM_HIT) && !(result & MM_DEF_DIED) && + rn2(4) && mon->movement >= NORMAL_SPEED) { + mon->movement -= NORMAL_SPEED; + notonhead = 0; + (void) mattackm(mon, mtmp); /* return attack */ + } + return ((result & MM_HIT) ? 1 : 0); } }