montraits usage (trunk only)

Move a couple of recently added corpse revival/statue animation
fixups into montraits() so that its callers don't have to worry about
them anymore.
This commit is contained in:
nethack.rankin
2003-12-10 06:33:25 +00:00
parent f935974e02
commit 0dc3c43a8d
2 changed files with 13 additions and 27 deletions
+2 -12
View File
@@ -419,15 +419,8 @@ int *fail_reason;
/* restore a petrified monster */ /* restore a petrified monster */
cc.x = x, cc.y = y; cc.x = x, cc.y = y;
mon = montraits(statue, &cc); mon = montraits(statue, &cc);
if (mon) { if (mon && mon->mtame && !mon->isminion)
if (mon->mtame && !mon->isminion) wary_dog(mon, TRUE);
wary_dog(mon, TRUE);
/* might be bringing quest leader back to life */
if (quest_status.leader_is_dead &&
/* leader_is_dead implies that leader_m_id is valid */
mon->m_id == quest_status.leader_m_id)
quest_status.leader_is_dead = FALSE;
}
} else { } else {
/* statues of unique monsters from bones or wishing end /* statues of unique monsters from bones or wishing end
up here (cant_revive() sets mnum to be doppelganger; up here (cant_revive() sets mnum to be doppelganger;
@@ -477,9 +470,6 @@ int *fail_reason;
/* mimic statue becomes seen mimic; other hiders won't be hidden */ /* mimic statue becomes seen mimic; other hiders won't be hidden */
if (mon->m_ap_type) seemimic(mon); if (mon->m_ap_type) seemimic(mon);
else mon->mundetected = FALSE; else mon->mundetected = FALSE;
/* when reanimating a stoned monster, protection from shape changers
might be different now than it was when the monster was petrified */
if (use_saved_traits) restore_cham(mon);
if ((x == u.ux && y == u.uy) || cause == ANIMATE_SPELL) { if ((x == u.ux && y == u.uy) || cause == ANIMATE_SPELL) {
const char *comes_to_life = nonliving(mon->data) ? const char *comes_to_life = nonliving(mon->data) ?
+11 -15
View File
@@ -472,6 +472,11 @@ coord *cc;
(we cleared it when loading bones) */ (we cleared it when loading bones) */
if (!mtmp2->m_id) if (!mtmp2->m_id)
mtmp2->m_id = mtmp->m_id; mtmp2->m_id = mtmp->m_id;
/* might be bringing quest leader back to life */
else if (quest_status.leader_is_dead &&
/* leader_is_dead implies that leader_m_id is valid */
mtmp2->m_id == quest_status.leader_m_id)
quest_status.leader_is_dead = FALSE;
mtmp2->mx = mtmp->mx; mtmp2->mx = mtmp->mx;
mtmp2->my = mtmp->my; mtmp2->my = mtmp->my;
mtmp2->mux = mtmp->mux; mtmp2->mux = mtmp->mux;
@@ -507,6 +512,10 @@ coord *cc;
mtmp2->mstun = 0; mtmp2->mstun = 0;
mtmp2->mconf = 0; mtmp2->mconf = 0;
replmon(mtmp,mtmp2); replmon(mtmp,mtmp2);
/* in case Protection_from_shape_changers is different
now than it was when the traits were stored */
restore_cham(mtmp2);
} }
return mtmp2; return mtmp2;
} }
@@ -633,15 +642,8 @@ register struct obj *obj;
xy.x = x; xy.y = y; xy.x = x; xy.y = y;
mtmp = montraits(obj, &xy); mtmp = montraits(obj, &xy);
if (mtmp) { if (mtmp && mtmp->mtame && !mtmp->isminion)
if (mtmp->mtame && !mtmp->isminion) wary_dog(mtmp, TRUE);
wary_dog(mtmp, TRUE);
/* might be reviving quest leader */
if (quest_status.leader_is_dead &&
/* _is_dead implies that _m_id is valid */
mtmp->m_id == quest_status.leader_m_id)
quest_status.leader_is_dead = FALSE;
}
} else } else
mtmp = makemon(&mons[montype], x, y, mtmp = makemon(&mons[montype], x, y,
NO_MINVENT|MM_NOWAIT|MM_NOCOUNTBIRTH); NO_MINVENT|MM_NOWAIT|MM_NOCOUNTBIRTH);
@@ -677,12 +679,6 @@ register struct obj *obj;
mtmp->mhp = eaten_stat(mtmp->mhp, obj); mtmp->mhp = eaten_stat(mtmp->mhp, obj);
/* track that this monster was revived at least once */ /* track that this monster was revived at least once */
mtmp->mrevived = 1; mtmp->mrevived = 1;
/* in case this was a shapechanger corpse and
Protection_from_shape_changers happens to be
different now than it was when the monster
was killed (probably a no-op here since
KEEPTRAITS() doesn't include shapechangers) */
restore_cham(mtmp);
if (recorporealization) { if (recorporealization) {
/* If mtmp is revivification of former tame ghost*/ /* If mtmp is revivification of former tame ghost*/