OSDN Git Service

変わり身状態の忍者が幻覚などの状態異常を持っていると変わり身が無効に
authornothere <nothere@0568b783-4c39-0410-ac80-bf13821ea2a2>
Thu, 29 Jul 2004 09:18:13 +0000 (09:18 +0000)
committernothere <nothere@0568b783-4c39-0410-ac80-bf13821ea2a2>
Thu, 29 Jul 2004 09:18:13 +0000 (09:18 +0000)
なるが, その処理で変わり身成功か失敗かを見ておらず, ダメージを全く受
けない場合があるバグを修正.

src/externs.h
src/melee1.c
src/spells1.c
src/spells2.c

index 59cb1e7..5122a92 100644 (file)
@@ -1185,7 +1185,7 @@ extern bool project_hook(int typ, int dir, int dam, int flg);
 extern bool project_hack(int typ, int dam);
 extern bool eat_magic(int power);
 extern void discharge_minion(void);
-extern void kawarimi(bool success);
+extern bool kawarimi(bool success);
 extern bool rush_attack(bool *mdeath);
 extern void remove_all_mirrors(bool explode);
 
index e6150d1..87f0eb1 100644 (file)
@@ -200,8 +200,7 @@ bool make_attack_normal(int m_idx)
 
        if ((p_ptr->special_defense & NINJA_KAWARIMI) && (randint0(55) < (p_ptr->lev*3/5+20)))
        {
-               kawarimi(TRUE);
-               return TRUE;
+               if (kawarimi(TRUE)) return TRUE;
        }
 
        /* Assume no blink */
@@ -2137,10 +2136,10 @@ msg_format("%^s
 #endif
                        }
                }
+
                if (p_ptr->special_defense & NINJA_KAWARIMI)
                {
-                       kawarimi(FALSE);
-                       return TRUE;
+                       if (kawarimi(FALSE)) return TRUE;
                }
        }
 
index 2b5ddbf..e37cfe4 100644 (file)
@@ -6366,8 +6366,7 @@ static bool project_p(int who, cptr who_name, int r, int y, int x, int dam, int
 
        if ((p_ptr->special_defense & NINJA_KAWARIMI) && dam && (randint0(55) < (p_ptr->lev*3/5+20)) && who && (who != p_ptr->riding))
        {
-               kawarimi(TRUE);
-               return FALSE;
+               if (kawarimi(TRUE)) return FALSE;
        }
 
        /* Player cannot hurt himself */
@@ -7734,8 +7733,7 @@ static bool project_p(int who, cptr who_name, int r, int y, int x, int dam, int
 
        if ((p_ptr->special_defense & NINJA_KAWARIMI) && dam && who && (who != p_ptr->riding))
        {
-               kawarimi(FALSE);
-               return obvious;
+               (void)kawarimi(FALSE);
        }
 
        /* Return "Anything seen?" */
index 6236502..8846584 100644 (file)
@@ -7379,14 +7379,15 @@ bool charm_living(int dir, int plev)
 }
 
 
-void kawarimi(bool success)
+bool kawarimi(bool success)
 {
        object_type forge;
        object_type *q_ptr = &forge;
        int y, x;
 
-       if (p_ptr->confused || p_ptr->blind || p_ptr->paralyzed || p_ptr->image) return;
-       if (randint0(200) < p_ptr->stun) return;
+       if (p_ptr->is_dead) return FALSE;
+       if (p_ptr->confused || p_ptr->blind || p_ptr->paralyzed || p_ptr->image) return FALSE;
+       if (randint0(200) < p_ptr->stun) return FALSE;
 
        if (!success && one_in_(3))
        {
@@ -7397,7 +7398,7 @@ void kawarimi(bool success)
 #endif
                p_ptr->special_defense &= ~(NINJA_KAWARIMI);
                p_ptr->redraw |= (PR_STATUS);
-               return;
+               return FALSE;
        }
 
        y = py;
@@ -7424,6 +7425,9 @@ void kawarimi(bool success)
 
        p_ptr->special_defense &= ~(NINJA_KAWARIMI);
        p_ptr->redraw |= (PR_STATUS);
+
+       /* Teleported */
+       return TRUE;
 }