This fixes beta bug 8003 (half physical damage from gas spores) as well as a

minor bit of cleanup in mon.c.
This commit is contained in:
arromdee
2002-03-02 01:07:11 +00:00
parent e15c0d801f
commit d6d445d514
2 changed files with 13 additions and 10 deletions

View File

@@ -447,6 +447,7 @@ if you see a monster jump into a trap in a secret corridor, it's not secret
fixed a few places where unblock_point wasn't called but should have been fixed a few places where unblock_point wasn't called but should have been
cloned monsters should have the same name and tameness as the original cloned monsters should have the same name and tameness as the original
you should stop eating (etc.) if a monster attacks you and misses you should stop eating (etc.) if a monster attacks you and misses
half physical damage should apply to gas spores
Platform- and/or Interface-Specific Fixes Platform- and/or Interface-Specific Fixes

View File

@@ -20,6 +20,15 @@ STATIC_DCL int FDECL(select_newcham_form, (struct monst *));
STATIC_DCL void FDECL(kill_eggs, (struct obj *)); STATIC_DCL void FDECL(kill_eggs, (struct obj *));
#endif #endif
#ifdef REINCARNATION
#define LEVEL_SPECIFIC_NOCORPSE(mdat) \
(Is_rogue_level(&u.uz) || \
(level.flags.graveyard && is_undead(mdat) && rn2(3)))
#else
#define LEVEL_SPECIFIC_NOCORPSE(mdat) \
(level.flags.graveyard && is_undead(mdat) && rn2(3))
#endif
#if 0 #if 0
/* part of the original warning code which was replaced in 3.3.1 */ /* part of the original warning code which was replaced in 3.3.1 */
@@ -1409,6 +1418,7 @@ boolean swallowed; /* digestion */
else if(mdat->mattk[i].damd) else if(mdat->mattk[i].damd)
tmp = d((int)mdat->mlevel+1, (int)mdat->mattk[i].damd); tmp = d((int)mdat->mlevel+1, (int)mdat->mattk[i].damd);
else tmp = 0; else tmp = 0;
if (Half_physical_damage) tmp = (tmp+1) / 2;
if (swallowed && magr) { if (swallowed && magr) {
if (magr == &youmonst) { if (magr == &youmonst) {
There("is an explosion in your %s!", There("is an explosion in your %s!",
@@ -1442,11 +1452,7 @@ boolean swallowed; /* digestion */
/* must duplicate this below check in xkilled() since it results in /* must duplicate this below check in xkilled() since it results in
* creating no objects as well as no corpse * creating no objects as well as no corpse
*/ */
if ( if (LEVEL_SPECIFIC_NOCORPSE(mdat))
#ifdef REINCARNATION
Is_rogue_level(&u.uz) ||
#endif
(level.flags.graveyard && is_undead(mdat) && rn2(3)))
return FALSE; return FALSE;
if (bigmonst(mdat) || mdat == &mons[PM_LIZARD] if (bigmonst(mdat) || mdat == &mons[PM_LIZARD]
@@ -1691,11 +1697,7 @@ xkilled(mtmp, dest)
goto cleanup; goto cleanup;
} }
if((dest & 2) if((dest & 2) || LEVEL_SPECIFIC_NOCORPSE(mdat))
#ifdef REINCARNATION
|| Is_rogue_level(&u.uz)
#endif
|| (level.flags.graveyard && is_undead(mdat) && rn2(3)))
goto cleanup; goto cleanup;
#ifdef MAIL #ifdef MAIL