don't split pudding that got jousted into a hole
This commit is contained in:
@@ -2128,6 +2128,7 @@ successfully disarming a chest trap was clearing the chest's 'tknown' bit
|
|||||||
when game ended with 'force_invmenu' On, final disclosure of inventory would
|
when game ended with 'force_invmenu' On, final disclosure of inventory would
|
||||||
contain spurious menu entry "? - (list likely candidates)"
|
contain spurious menu entry "? - (list likely candidates)"
|
||||||
avoid reporting "a gold pieces appears next to you" for mimic
|
avoid reporting "a gold pieces appears next to you" for mimic
|
||||||
|
don't try to split a pudding that got jousted into a hole and is off the map
|
||||||
|
|
||||||
|
|
||||||
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
|
||||||
|
|||||||
@@ -534,6 +534,7 @@ struct _hitmon_data {
|
|||||||
boolean needpoismsg;
|
boolean needpoismsg;
|
||||||
boolean poiskilled;
|
boolean poiskilled;
|
||||||
boolean already_killed;
|
boolean already_killed;
|
||||||
|
boolean offmap;
|
||||||
boolean destroyed;
|
boolean destroyed;
|
||||||
boolean dryit;
|
boolean dryit;
|
||||||
boolean doreturn;
|
boolean doreturn;
|
||||||
|
|||||||
+15
-17
@@ -1558,7 +1558,7 @@ hmon_hitmon_pet(
|
|||||||
struct obj *obj UNUSED)
|
struct obj *obj UNUSED)
|
||||||
{
|
{
|
||||||
if (mon->mtame && hmd->dmg > 0) {
|
if (mon->mtame && hmd->dmg > 0) {
|
||||||
/* do this even if the pet is being killed (affects revival) */
|
/* do this even if the pet is being killed or migrating (affects revival) */
|
||||||
abuse_dog(mon); /* reduces tameness */
|
abuse_dog(mon); /* reduces tameness */
|
||||||
/* flee if still alive and still tame; if already suffering from
|
/* flee if still alive and still tame; if already suffering from
|
||||||
untimed fleeing, no effect, otherwise increases timed fleeing */
|
untimed fleeing, no effect, otherwise increases timed fleeing */
|
||||||
@@ -1576,7 +1576,7 @@ hmon_hitmon_splitmon(
|
|||||||
if ((hmd->mdat == &mons[PM_BLACK_PUDDING]
|
if ((hmd->mdat == &mons[PM_BLACK_PUDDING]
|
||||||
|| hmd->mdat == &mons[PM_BROWN_PUDDING])
|
|| hmd->mdat == &mons[PM_BROWN_PUDDING])
|
||||||
/* pudding is alive and healthy enough to split */
|
/* pudding is alive and healthy enough to split */
|
||||||
&& mon->mhp > 1 && !mon->mcan
|
&& mon->mhp > 1 && !mon->mcan && !hmd->offmap
|
||||||
/* iron weapon using melee or polearm hit [3.6.1: metal weapon too;
|
/* iron weapon using melee or polearm hit [3.6.1: metal weapon too;
|
||||||
also allow either or both weapons to cause split when twoweap] */
|
also allow either or both weapons to cause split when twoweap] */
|
||||||
&& obj && (obj == uwep || (u.twoweap && obj == uswapwep))
|
&& obj && (obj == uwep || (u.twoweap && obj == uswapwep))
|
||||||
@@ -1790,20 +1790,6 @@ hmon_hitmon(
|
|||||||
|
|
||||||
if (hmd.jousting) {
|
if (hmd.jousting) {
|
||||||
hmon_hitmon_jousting(&hmd, mon, obj);
|
hmon_hitmon_jousting(&hmd, mon, obj);
|
||||||
/*
|
|
||||||
* FIXME:
|
|
||||||
* If jousting occurred above, it can lead to:
|
|
||||||
* mhurtle_to_doom()
|
|
||||||
* mhurtle()
|
|
||||||
* mintrap()
|
|
||||||
* trapeffect_hole()
|
|
||||||
* trapeffect_level_telep()
|
|
||||||
* migrate_to_level()
|
|
||||||
* which results in mon->mx being set to 0, and that
|
|
||||||
* can lead to an impossible() in clone_mon() trying
|
|
||||||
* to create a monster at <0,0> when the monster is
|
|
||||||
* a black pudding and hmon_hitmon_splitmon() gets called
|
|
||||||
* below */
|
|
||||||
} else if (hmd.unarmed && hmd.dmg > 1 && !thrown && !obj && !Upolyd) {
|
} else if (hmd.unarmed && hmd.dmg > 1 && !thrown && !obj && !Upolyd) {
|
||||||
hmon_hitmon_stagger(&hmd, mon, obj);
|
hmon_hitmon_stagger(&hmd, mon, obj);
|
||||||
} else if (!hmd.unarmed && hmd.dmg > 1 && !thrown && !Upolyd
|
} else if (!hmd.unarmed && hmd.dmg > 1 && !thrown && !Upolyd
|
||||||
@@ -1828,6 +1814,18 @@ hmon_hitmon(
|
|||||||
a level draining artifact has already done to max HP */
|
a level draining artifact has already done to max HP */
|
||||||
if (mon->mhp > mon->mhpmax)
|
if (mon->mhp > mon->mhpmax)
|
||||||
mon->mhp = mon->mhpmax;
|
mon->mhp = mon->mhpmax;
|
||||||
|
if (mon->mx == 0) {
|
||||||
|
/*
|
||||||
|
* jousting can lead to:
|
||||||
|
* mhurtle_to_doom()
|
||||||
|
* mhurtle()
|
||||||
|
* mintrap()
|
||||||
|
* trapeffect_hole()
|
||||||
|
* trapeffect_level_telep()
|
||||||
|
* migrate_to_level()
|
||||||
|
* Set offmap in that situation so code to follow can test for it.*/
|
||||||
|
hmd.offmap = TRUE;
|
||||||
|
}
|
||||||
if (DEADMONSTER(mon))
|
if (DEADMONSTER(mon))
|
||||||
hmd.destroyed = TRUE;
|
hmd.destroyed = TRUE;
|
||||||
|
|
||||||
@@ -1888,7 +1886,7 @@ hmon_hitmon(
|
|||||||
Your("%s %s no longer poisoned.", hmd.saved_oname,
|
Your("%s %s no longer poisoned.", hmd.saved_oname,
|
||||||
vtense(hmd.saved_oname, "are"));
|
vtense(hmd.saved_oname, "are"));
|
||||||
|
|
||||||
if (!hmd.destroyed) {
|
if (!hmd.destroyed && !hmd.offmap) {
|
||||||
int hitflags = M_ATTK_HIT;
|
int hitflags = M_ATTK_HIT;
|
||||||
|
|
||||||
wakeup(mon, TRUE);
|
wakeup(mon, TRUE);
|
||||||
|
|||||||
Reference in New Issue
Block a user