}
}
-/* return 0 if still on level, 3 if not */
+/* return Trap_Effect_Finished if still on level, Trap_Moved_Mon if not */
int
mlevel_tele_trap(
struct monst *mtmp,
int tt = (trap ? trap->ttyp : NO_TRAP);
if (mtmp == u.ustuck) /* probably a vortex */
- return 0; /* temporary? kludge */
+ return Trap_Effect_Finished; /* temporary? kludge */
if (teleport_pet(mtmp, force_it)) {
d_level tolevel;
int migrate_typ = MIGR_RANDOM;
if (in_sight && trap->tseen)
pline("%s avoids the %s.", Monnam(mtmp),
(tt == HOLE) ? "hole" : "trap");
- return 0;
+ return Trap_Effect_Finished;
} else {
get_level(&tolevel, depth(&u.uz) + 1);
}
pline("%s seems to shimmer for a moment.", Monnam(mtmp));
seetrap(trap);
}
- return 0;
+ return Trap_Effect_Finished;
} else {
assign_level(&tolevel, &trap->dst);
migrate_typ = MIGR_PORTAL;
if (in_sight)
pline("%s seems very disoriented for a moment.",
Monnam(mtmp));
- return 0;
+ return Trap_Effect_Finished;
}
if (tt == NO_TRAP) {
/* creature is being forced off the level to make room;
if (nlev == depth(&u.uz)) {
if (in_sight)
pline("%s shudders for a moment.", Monnam(mtmp));
- return 0;
+ return Trap_Effect_Finished;
}
get_level(&tolevel, nlev);
}
} else {
impossible("mlevel_tele_trap: unexpected trap type (%d)", tt);
- return 0;
+ return Trap_Effect_Finished;
}
if (in_sight) {
seetrap(trap);
}
migrate_to_level(mtmp, ledger_no(&tolevel), migrate_typ, (coord *) 0);
- return 3; /* no longer on this level */
+ return Trap_Moved_Mon; /* no longer on this level */
}
- return 0;
+ return Trap_Effect_Finished;
}
/* place object randomly, returns False if it's gone (eg broken) */
if (thitm(8, mtmp, otmp, 0, FALSE))
trapkilled = TRUE;
- return trapkilled ? Trap_Killed_Mon : mtmp->mtrapped;
+ return trapkilled ? Trap_Killed_Mon : mtmp->mtrapped
+ ? Trap_Caught_Mon : Trap_Effect_Finished;
}
return Trap_Effect_Finished;
}
if (thitm(7, mtmp, otmp, 0, FALSE))
trapkilled = TRUE;
- return trapkilled ? Trap_Killed_Mon : mtmp->mtrapped;
+ return trapkilled ? Trap_Killed_Mon : mtmp->mtrapped
+ ? Trap_Caught_Mon : Trap_Effect_Finished;
}
return Trap_Effect_Finished;
}
if (thitm(0, mtmp, otmp, d(2, 6), FALSE))
trapkilled = TRUE;
- return trapkilled ? Trap_Killed_Mon : mtmp->mtrapped;
+ return trapkilled ? Trap_Killed_Mon : mtmp->mtrapped
+ ? Trap_Caught_Mon : Trap_Effect_Finished;
}
return Trap_Effect_Finished;
}
if (mtmp->mtrapped)
trapkilled = thitm(0, mtmp, (struct obj *) 0, d(2, 4), FALSE);
- return trapkilled ? Trap_Killed_Mon : mtmp->mtrapped;
+ return trapkilled ? Trap_Killed_Mon : mtmp->mtrapped
+ ? Trap_Caught_Mon : Trap_Effect_Finished;
}
return Trap_Effect_Finished;
}
(void) split_mon(mtmp, (struct monst *) 0);
}
- return trapkilled ? Trap_Killed_Mon : mtmp->mtrapped;
+ return trapkilled ? Trap_Killed_Mon : mtmp->mtrapped
+ ? Trap_Caught_Mon : Trap_Effect_Finished;
}
return Trap_Effect_Finished;
}
if (see_it && t_at(mtmp->mx, mtmp->my))
seetrap(trap);
- return trapkilled ? Trap_Killed_Mon : mtmp->mtrapped;
+ return trapkilled ? Trap_Killed_Mon : mtmp->mtrapped
+ ? Trap_Caught_Mon : Trap_Effect_Finished;
}
return Trap_Effect_Finished;
}
rnd((tt == PIT) ? 6 : 10), FALSE))
trapkilled = TRUE;
- return trapkilled ? Trap_Killed_Mon : mtmp->mtrapped;
+ return trapkilled ? Trap_Killed_Mon : mtmp->mtrapped
+ ? Trap_Caught_Mon : Trap_Effect_Finished;
}
return Trap_Effect_Finished;
}
boolean in_sight = canseemon(mtmp) || (mtmp == u.usteed);
mtele_trap(mtmp, trap, in_sight);
+ return Trap_Moved_Mon;
}
return Trap_Effect_Finished;
}
seetrap(trap);
level_tele_trap(trap, trflags);
} else {
- int mlev_res;
int tt = trap->ttyp;
boolean in_sight = canseemon(mtmp) || (mtmp == u.usteed);
boolean inescapable = (g.force_mintrap
|| ((tt == HOLE || tt == PIT)
&& Sokoban && !trap->madeby_u));
- mlev_res = mlevel_tele_trap(mtmp, trap, inescapable, in_sight);
- if (mlev_res)
- return mlev_res;
+ return mlevel_tele_trap(mtmp, trap, inescapable, in_sight);
}
return Trap_Effect_Finished;
}
seetrap(trap);
}
}
- return mtmp->mtrapped;
+ return mtmp->mtrapped ? Trap_Caught_Mon : Trap_Effect_Finished;
}
return Trap_Effect_Finished;
}
if (see_it)
newsym(trap->tx, trap->ty);
}
- return trapkilled ? Trap_Killed_Mon : mtmp->mtrapped;
+ return trapkilled ? Trap_Killed_Mon : mtmp->mtrapped
+ ? Trap_Caught_Mon : Trap_Effect_Finished;
}
return Trap_Effect_Finished;
}
g.multi = -1;
g.nomovemsg = "The explosion awakens you!";
}
- return trapkilled ? Trap_Killed_Mon : mtmp->mtrapped;
+ return trapkilled ? Trap_Killed_Mon : mtmp->mtrapped
+ ? Trap_Caught_Mon : Trap_Effect_Finished;
}
return Trap_Effect_Finished;
}
deltrap(trap);
newsym(mtmp->mx, mtmp->my);
}
- return trapkilled ? Trap_Killed_Mon : mtmp->mtrapped;
+ return trapkilled ? Trap_Killed_Mon : mtmp->mtrapped
+ ? Trap_Caught_Mon : Trap_Effect_Finished;
}
}
return Trap_Effect_Finished;
{
register struct trap *trap = t_at(mtmp->mx, mtmp->my);
struct permonst *mptr = mtmp->data;
- int trap_result = 0;
+ int trap_result = Trap_Effect_Finished;
if (!trap) {
mtmp->mtrapped = 0; /* perhaps teleported? */
mtmp->meating = 5;
}
}
+ trap_result = mtmp->mtrapped ? Trap_Caught_Mon : Trap_Effect_Finished;
} else {
register int tt = trap->ttyp;
boolean inescapable = (g.force_mintrap
trap_result = trapeffect_selector(mtmp, trap, 0);
}
- return (trap_result == Trap_Killed_Mon) ? trap_result
- : mtmp->mtrapped ? Trap_Caught_Mon : Trap_Effect_Finished;
+ return trap_result;
}
/* Combine cockatrice checks into single functions to avoid repeating code. */
or if you sense the monster who becomes trapped */
*noticed = cansee(t->tx, t->ty) || canspotmon(mon);
++g.force_mintrap;
- result = (mintrap(mon) != 0);
+ result = (mintrap(mon) != Trap_Effect_Finished);
--g.force_mintrap;
}
return result;