OSDN Git Service

"strchr" -> "my_strchr".
[hengband/hengband.git] / src / monster1.c
index 7f25709..430f803 100644 (file)
@@ -141,7 +141,8 @@ static void roff_aux(int r_idx, int mode)
 #endif
        int             msex = 0;
 
-       int speed = (ironman_nightmare) ? r_ptr->speed + 5 : r_ptr->speed;
+       bool nightmare = ironman_nightmare && !(mode & 0x02);
+       int speed = nightmare ? r_ptr->speed + 5 : r_ptr->speed;
 
        bool            breath = FALSE;
        bool            magic = FALSE;
@@ -741,7 +742,7 @@ if (flags3 & RF3_ORC)      hook_c_roff(TERM_UMBER, "
 #ifdef JP
 if (flags2 & RF2_HUMAN) hook_c_roff(TERM_L_WHITE, "¿Í´Ö");
 #else
-               if (flags2 & RF2_HUMAN) hook_c_roff(TERM_L_WHITE, " Human");
+               if (flags2 & RF2_HUMAN) hook_c_roff(TERM_L_WHITE, " human");
 #endif
 
 #ifdef JP
@@ -813,71 +814,64 @@ else                            hooked_roff("
        if ((flags2 & RF2_AURA_FIRE) && (flags2 & RF2_AURA_ELEC) && (flags3 & RF3_AURA_COLD))
        {
 #ifdef JP
-hook_c_roff(TERM_VIOLET, format("%^s¤Ï±ê¤Èɹ¤È¥¹¥Ñ¡¼¥¯¤ËÊñ¤Þ¤ì¤Æ¤¤¤ë¡£", wd_he[msex]));
+               hook_c_roff(TERM_VIOLET, format("%^s¤Ï±ê¤Èɹ¤È¥¹¥Ñ¡¼¥¯¤ËÊñ¤Þ¤ì¤Æ¤¤¤ë¡£", wd_he[msex]));
 #else
-               hook_c_roff(TERM_VIOLET, format("%^s is surrounded by flames and electricity.  ", wd_he[msex]));
+               hook_c_roff(TERM_VIOLET, format("%^s is surrounded by flames, ice and electricity.  ", wd_he[msex]));
 #endif
-
        }
        else if ((flags2 & RF2_AURA_FIRE) && (flags2 & RF2_AURA_ELEC))
        {
 #ifdef JP
-hook_c_roff(TERM_L_RED, format("%^s¤Ï±ê¤È¥¹¥Ñ¡¼¥¯¤ËÊñ¤Þ¤ì¤Æ¤¤¤ë¡£", wd_he[msex]));
+               hook_c_roff(TERM_L_RED, format("%^s¤Ï±ê¤È¥¹¥Ñ¡¼¥¯¤ËÊñ¤Þ¤ì¤Æ¤¤¤ë¡£", wd_he[msex]));
 #else
                hook_c_roff(TERM_L_RED, format("%^s is surrounded by flames and electricity.  ", wd_he[msex]));
 #endif
-
        }
        else if ((flags2 & RF2_AURA_FIRE) && (flags3 & RF3_AURA_COLD))
        {
 #ifdef JP
-hook_c_roff(TERM_BLUE, format("%^s¤Ï±ê¤Èɹ¤ËÊñ¤Þ¤ì¤Æ¤¤¤ë¡£", wd_he[msex]));
+               hook_c_roff(TERM_BLUE, format("%^s¤Ï±ê¤Èɹ¤ËÊñ¤Þ¤ì¤Æ¤¤¤ë¡£", wd_he[msex]));
 #else
-               hook_c_roff(TERM_BLUE, format("%^s is surrounded by flames and electricity.  ", wd_he[msex]));
+               hook_c_roff(TERM_BLUE, format("%^s is surrounded by flames and ice.  ", wd_he[msex]));
 #endif
-
        }
        else if ((flags3 & RF3_AURA_COLD) && (flags2 & RF2_AURA_ELEC))
        {
 #ifdef JP
-hook_c_roff(TERM_L_GREEN, format("%^s¤Ïɹ¤È¥¹¥Ñ¡¼¥¯¤ËÊñ¤Þ¤ì¤Æ¤¤¤ë¡£", wd_he[msex]));
+               hook_c_roff(TERM_L_GREEN, format("%^s¤Ïɹ¤È¥¹¥Ñ¡¼¥¯¤ËÊñ¤Þ¤ì¤Æ¤¤¤ë¡£", wd_he[msex]));
 #else
                hook_c_roff(TERM_L_GREEN, format("%^s is surrounded by ice and electricity.  ", wd_he[msex]));
 #endif
-
        }
        else if (flags2 & RF2_AURA_FIRE)
        {
 #ifdef JP
-hook_c_roff(TERM_RED, format("%^s¤Ï±ê¤ËÊñ¤Þ¤ì¤Æ¤¤¤ë¡£", wd_he[msex]));
+               hook_c_roff(TERM_RED, format("%^s¤Ï±ê¤ËÊñ¤Þ¤ì¤Æ¤¤¤ë¡£", wd_he[msex]));
 #else
                hook_c_roff(TERM_RED, format("%^s is surrounded by flames.  ", wd_he[msex]));
 #endif
-
        }
        else if (flags3 & RF3_AURA_COLD)
        {
 #ifdef JP
-hook_c_roff(TERM_BLUE, format("%^s¤Ïɹ¤ËÊñ¤Þ¤ì¤Æ¤¤¤ë¡£", wd_he[msex]));
+               hook_c_roff(TERM_BLUE, format("%^s¤Ïɹ¤ËÊñ¤Þ¤ì¤Æ¤¤¤ë¡£", wd_he[msex]));
 #else
                hook_c_roff(TERM_BLUE, format("%^s is surrounded by ice.  ", wd_he[msex]));
 #endif
-
        }
        else if (flags2 & RF2_AURA_ELEC)
        {
 #ifdef JP
-hook_c_roff(TERM_L_BLUE, format("%^s¤Ï¥¹¥Ñ¡¼¥¯¤ËÊñ¤Þ¤ì¤Æ¤¤¤ë¡£", wd_he[msex]));
+               hook_c_roff(TERM_L_BLUE, format("%^s¤Ï¥¹¥Ñ¡¼¥¯¤ËÊñ¤Þ¤ì¤Æ¤¤¤ë¡£", wd_he[msex]));
 #else
                hook_c_roff(TERM_L_BLUE, format("%^s is surrounded by electricity.  ", wd_he[msex]));
 #endif
-
        }
 
        if (flags2 & RF2_REFLECTING)
        {
 #ifdef JP
-hooked_roff(format("%^s¤ÏÌð¤Î¼öʸ¤òÄ·¤ÍÊÖ¤¹¡£", wd_he[msex]));
+               hooked_roff(format("%^s¤ÏÌð¤Î¼öʸ¤òÄ·¤ÍÊÖ¤¹¡£", wd_he[msex]));
 #else
                hooked_roff(format("%^s reflects bolt spells.  ", wd_he[msex]));
 #endif
@@ -1681,15 +1675,15 @@ if (flags6 & (RF6_S_UNIQUE))        {vp[vn] = "
                            wd_he[msex], r_ptr->ac));
 
                /* Maximized hitpoints */
-               if (flags1 & RF1_FORCE_MAXHP)
+               if ((flags1 & RF1_FORCE_MAXHP) || (r_ptr->hside == 1))
                {
+                       u32b hp = r_ptr->hdice * (nightmare ? 2 : 1) * r_ptr->hside;
 #ifdef JP
                        hooked_roff(format(" %d ¤ÎÂÎÎϤ¬¤¢¤ë¡£",
 #else
                        hooked_roff(format(" and a life rating of %d.  ",
 #endif
-
-                                   r_ptr->hdice * r_ptr->hside));
+                                   (s16b)MIN(30000, hp)));
                }
 
                /* Variable hitpoints */
@@ -1700,8 +1694,7 @@ if (flags6 & (RF6_S_UNIQUE))        {vp[vn] = "
 #else
                        hooked_roff(format(" and a life rating of %dd%d.  ",
 #endif
-
-                                   r_ptr->hdice, r_ptr->hside));
+                                   r_ptr->hdice * (nightmare ? 2 : 1), r_ptr->hside));
                }
        }
 
@@ -1820,7 +1813,7 @@ if (flags6 & (RF6_S_UNIQUE))        {vp[vn] = "
 #ifdef JP
                hooked_roff(format("%^s¤Ï¸÷¤Ã¤Æ¤¤¤ë¡£", wd_he[msex]));
 #else
-               hooked_roff(format("%^s illuminate the dungeon.  ", wd_he[msex]));
+               hooked_roff(format("%^s is shining.  ", wd_he[msex]));
 #endif
 
        }
@@ -3368,6 +3361,8 @@ void set_friendly(monster_type *m_ptr)
 
 void set_pet(monster_type *m_ptr)
 {
+       if (!is_pet(m_ptr)) check_pets_num_and_align(m_ptr, TRUE);
+
        /* Check for quest completion */
        check_quest_completion(m_ptr);
 
@@ -3382,6 +3377,9 @@ void set_pet(monster_type *m_ptr)
 void set_hostile(monster_type *m_ptr)
 {
        if (p_ptr->inside_battle) return;
+
+       if (is_pet(m_ptr)) check_pets_num_and_align(m_ptr, FALSE);
+
        m_ptr->smart &= ~SM_PET;
        m_ptr->smart &= ~SM_FRIENDLY;
 }
@@ -3442,20 +3440,10 @@ bool monster_can_cross_terrain(s16b feat, monster_race *r_ptr, u16b mode)
                if ((r_ptr->flags2 & RF2_PASS_WALL) && (!(mode & CEM_RIDING) || p_ptr->pass_wall)) return TRUE;
        }
 
-       if (!have_flag(f_ptr->flags, FF_MOVE))
-       {
-               /* Can fly over mountain on the surface */
-               if (have_flag(f_ptr->flags, FF_MOUNTAIN) && !dun_level)
-               {
-                       if ((r_ptr->flags7 & RF7_CAN_FLY) || (r_ptr->flags8 & RF8_WILD_MOUNTAIN))
-                               return TRUE;
-               }
-
-               /* Cannot enter */
-               return FALSE;
-       }
+       if (!have_flag(f_ptr->flags, FF_MOVE)) return FALSE;
 
-       if (have_flag(f_ptr->flags, FF_MUST_FLY) && !(r_ptr->flags7 & RF7_CAN_FLY)) return FALSE;
+       /* Some monsters can walk on mountains */
+       if (have_flag(f_ptr->flags, FF_MOUNTAIN) && (r_ptr->flags8 & RF8_WILD_MOUNTAIN)) return TRUE;
 
        /* Water */
        if (have_flag(f_ptr->flags, FF_WATER))