eel hiding behavior (trunk only)
From a bug report: an exposed eel in an isolated
pool--swamp rooms sometimes produce those--would never re-hide no matter
how long you left its vicinity. Re-hiding is part of post-move handling
and an eel with no adjacent water to move into would never reach that bit
of code since it didn't move anywhere. The code used to re-hide monsters
when you return to a previous level was ignoring eels altogether. Give
unhidden eels a chance to hide earlier during monster movement and also
when the hero returns to their level.
Also a really minor bit to slow down hit point loss of eels out of
water. I don't think anybody reverse genocides krakens to get experience
any more since they don't provide a big bonus when they're out of water,
so this change won't have much of an affect.
This commit is contained in:
@@ -281,6 +281,7 @@ changing alignment type resets alignment record to 0 (nomimally aligned)
|
|||||||
while polymorphed, suppress attribute gain/lose earned by pre-poly exercise
|
while polymorphed, suppress attribute gain/lose earned by pre-poly exercise
|
||||||
wizard mode #monpolycontrol prompting asked about "it" when monster was unseen
|
wizard mode #monpolycontrol prompting asked about "it" when monster was unseen
|
||||||
reprompt if player fails to make a menu choice during inventory identification
|
reprompt if player fails to make a menu choice during inventory identification
|
||||||
|
seen eels who were stuck in isolated pools would never re-hide
|
||||||
|
|
||||||
|
|
||||||
Platform- and/or Interface-Specific Fixes
|
Platform- and/or Interface-Specific Fixes
|
||||||
|
|||||||
@@ -423,7 +423,8 @@ register struct monst *mtmp;
|
|||||||
} else {
|
} else {
|
||||||
/* but eels have a difficult time outside */
|
/* but eels have a difficult time outside */
|
||||||
if (mtmp->data->mlet == S_EEL && !Is_waterlevel(&u.uz)) {
|
if (mtmp->data->mlet == S_EEL && !Is_waterlevel(&u.uz)) {
|
||||||
if(mtmp->mhp > 1) mtmp->mhp--;
|
/* as mhp gets lower, the rate of further loss slows down */
|
||||||
|
if (mtmp->mhp > 1 && rn2(mtmp->mhp) > rn2(8)) mtmp->mhp--;
|
||||||
monflee(mtmp, 2, FALSE, FALSE);
|
monflee(mtmp, 2, FALSE, FALSE);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
@@ -554,6 +555,13 @@ movemon()
|
|||||||
mtmp->m_ap_type == M_AP_OBJECT)
|
mtmp->m_ap_type == M_AP_OBJECT)
|
||||||
continue;
|
continue;
|
||||||
if(mtmp->mundetected) continue;
|
if(mtmp->mundetected) continue;
|
||||||
|
} else if (mtmp->data->mlet == S_EEL && !mtmp->mundetected &&
|
||||||
|
(mtmp->mflee || distu(mtmp->mx, mtmp->my) > 2) &&
|
||||||
|
!canseemon(mtmp) && !rn2(4)) {
|
||||||
|
/* some eels end up stuck in isolated pools, where they
|
||||||
|
can't--or at least won't--move, so they never reach
|
||||||
|
their post-move chance to re-hide */
|
||||||
|
if (hideunder(mtmp)) continue;
|
||||||
}
|
}
|
||||||
|
|
||||||
/* continue if the monster died fighting */
|
/* continue if the monster died fighting */
|
||||||
@@ -2438,7 +2446,9 @@ void
|
|||||||
hide_monst(mon)
|
hide_monst(mon)
|
||||||
struct monst *mon;
|
struct monst *mon;
|
||||||
{
|
{
|
||||||
if ((is_hider(mon->data) || hides_under(mon->data)) &&
|
boolean hider_under = hides_under(mon->data) || mon->data->mlet == S_EEL;
|
||||||
|
|
||||||
|
if ((is_hider(mon->data) || hider_under) &&
|
||||||
!(mon->mundetected || mon->m_ap_type)) {
|
!(mon->mundetected || mon->m_ap_type)) {
|
||||||
xchar x = mon->mx, y = mon->my;
|
xchar x = mon->mx, y = mon->my;
|
||||||
char save_viz = viz_array[y][x];
|
char save_viz = viz_array[y][x];
|
||||||
@@ -2448,7 +2458,7 @@ struct monst *mon;
|
|||||||
if (is_hider(mon->data)) (void)restrap(mon);
|
if (is_hider(mon->data)) (void)restrap(mon);
|
||||||
/* try again if mimic missed its 1/3 chance to hide */
|
/* try again if mimic missed its 1/3 chance to hide */
|
||||||
if (mon->data->mlet == S_MIMIC && !mon->m_ap_type) (void)restrap(mon);
|
if (mon->data->mlet == S_MIMIC && !mon->m_ap_type) (void)restrap(mon);
|
||||||
if (hides_under(mon->data)) (void)hideunder(mon);
|
if (hider_under) (void)hideunder(mon);
|
||||||
viz_array[y][x] = save_viz;
|
viz_array[y][x] = save_viz;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
Reference in New Issue
Block a user