OSDN Git Service

モンスターの状態変化処理を標準ターンで行う際に, 処理の必要のある状態
[hengbandforosx/hengbandosx.git] / src / mspells1.c
index 545571e..e6baea0 100644 (file)
@@ -1753,16 +1753,28 @@ msg_format("%^s
                        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
@@ -3256,6 +3268,7 @@ msg_format("%^s
 #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;
@@ -3365,6 +3378,7 @@ msg_format("%^s
                        {
                                /* Cancel fear */
                                m_ptr->monfear = 0;
+                               if (!need_mproc(m_ptr)) mproc_remove(m_ptr->mproc_idx);
 
                                /* Message */
 #ifdef JP
@@ -3402,8 +3416,11 @@ msg_format("%s
 
                        }
 
-                       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);