if (p_ptr->riding)
{
monster_type *riding_ptr = &m_list[p_ptr->riding];
+ bool need_mproc_remove = FALSE;
+
if (riding_ptr->invulner)
{
riding_ptr->invulner = 0;
+ need_mproc_remove = TRUE;
riding_ptr->energy_need += ENERGY_NEED();
}
- riding_ptr->fast = 0;
- riding_ptr->slow = 0;
+ if (riding_ptr->fast)
+ {
+ riding_ptr->fast = 0;
+ need_mproc_remove = TRUE;
+ }
+ if (riding_ptr->slow)
+ {
+ riding_ptr->slow = 0;
+ need_mproc_remove = TRUE;
+ }
p_ptr->update |= PU_BONUS;
if (p_ptr->health_who == p_ptr->riding) p_ptr->redraw |= PR_HEALTH;
p_ptr->redraw |= (PR_UHEALTH);
+ if (need_mproc_remove && !need_mproc(riding_ptr)) mproc_remove(riding_ptr->mproc_idx);
}
#ifdef JP
#else
msg_format("%^s starts moving faster.", m_name);
#endif
+ if (!m_ptr->mproc_idx) mproc_add(m_idx);
}
m_ptr->fast = MIN(200, m_ptr->fast + 100);
if (p_ptr->riding == m_idx) p_ptr->update |= PU_BONUS;
{
/* Cancel fear */
m_ptr->monfear = 0;
+ if (!need_mproc(m_ptr)) mproc_remove(m_ptr->mproc_idx);
/* Message */
#ifdef JP
}
- if (!(m_ptr->invulner))
+ if (!m_ptr->invulner)
+ {
+ if (!m_ptr->mproc_idx) mproc_add(m_idx);
m_ptr->invulner = randint1(4) + 4;
+ }
if (p_ptr->health_who == m_idx) p_ptr->redraw |= (PR_HEALTH);
if (p_ptr->riding == m_idx) p_ptr->redraw |= (PR_UHEALTH);