OSDN Git Service

鍛冶師もう一度書き直し。どうも配列のindex == フラグ番号というのがプロ
[hengband/hengband.git] / src / xtra2.c
index bc6e548..3a94eaa 100644 (file)
@@ -58,7 +58,6 @@ void check_experience(void)
        {
                /* Lose a level */
                p_ptr->lev--;
-               lite_spot(py, px);
 
                /* Update some stuff */
                p_ptr->update |= (PU_BONUS | PU_HP | PU_MANA | PU_SPELLS);
@@ -80,7 +79,6 @@ void check_experience(void)
        {
                /* Gain a level */
                p_ptr->lev++;
-               lite_spot(py, px);
 
                /* Save the highest level */
                if (p_ptr->lev > p_ptr->max_plv)
@@ -120,20 +118,13 @@ msg_format("
                /* Window stuff */
                p_ptr->window |= (PW_PLAYER | PW_SPELL);
 
-#ifdef JP
+               /* HP¤ÈMP¤Î¾å¾ºÎ̤òɽ¼¨ */
                 level_up = 1;
-#endif
+
                /* Handle stuff */
                handle_stuff();
 
-#ifdef JP
                 level_up = 0;
-#endif
-               if (level_reward)
-               {
-                       gain_level_reward(0);
-                       level_reward = FALSE;
-               }
 
                if (level_inc_stat)
                {
@@ -210,6 +201,16 @@ msg_print("
                        level_mutation = FALSE;
                }
 
+               /*
+                * Ê󽷤ǥì¥Ù¥ë¤¬¾å¤ë¤ÈºÆµ¢Åª¤Ë check_experience() ¤¬
+                * ¸Æ¤Ð¤ì¤ë¤Î¤Ç½çÈÖ¤òºÇ¸å¤Ë¤¹¤ë¡£
+                */
+               if (level_reward)
+               {
+                       gain_level_reward(0);
+                       level_reward = FALSE;
+               }
+
                /* Update some stuff */
                p_ptr->update |= (PU_BONUS | PU_HP | PU_MANA | PU_SPELLS);
 
@@ -316,7 +317,7 @@ static bool kind_is_book(int k_idx)
        object_kind *k_ptr = &k_info[k_idx];
 
        /* Analyze the item type */
-       if ((k_ptr->tval >= TV_LIFE_BOOK) && (k_ptr->tval <= TV_HAJA_BOOK))
+       if ((k_ptr->tval >= TV_LIFE_BOOK) && (k_ptr->tval <= TV_CRUSADE_BOOK))
        {
                return (TRUE);
        }
@@ -334,7 +335,7 @@ static bool kind_is_good_book(int k_idx)
        object_kind *k_ptr = &k_info[k_idx];
 
        /* Analyze the item type */
-       if ((k_ptr->tval >= TV_LIFE_BOOK) && (k_ptr->tval <= TV_HAJA_BOOK) && (k_ptr->tval != TV_ARCANE_BOOK) && (k_ptr->sval > 1))
+       if ((k_ptr->tval >= TV_LIFE_BOOK) && (k_ptr->tval <= TV_CRUSADE_BOOK) && (k_ptr->tval != TV_ARCANE_BOOK) && (k_ptr->sval > 1))
        {
                return (TRUE);
        }
@@ -515,7 +516,7 @@ msg_print("
                                                p_ptr->inside_quest = 0;
                                        }
 
-                                       if (!quest[i].flags & QUEST_FLAG_SILENT)
+                                       if (!(quest[i].flags & QUEST_FLAG_SILENT))
                                        {
 #ifdef JP
 msg_print("¥¯¥¨¥¹¥È¤òãÀ®¤·¤¿¡ª");
@@ -550,7 +551,7 @@ msg_print("
                                        quest[i].status = QUEST_STATUS_COMPLETED;
                                        quest[i].complev = (byte)p_ptr->lev;
 
-                                       if (!quest[i].flags & QUEST_FLAG_SILENT)
+                                       if (!(quest[i].flags & QUEST_FLAG_SILENT))
                                        {
 #ifdef JP
 msg_print("¥¯¥¨¥¹¥È¤òãÀ®¤·¤¿¡ª");
@@ -571,7 +572,7 @@ msg_print("
        if (create_stairs)
        {
                /* Stagger around */
-               while (cave_perma_bold(y, x) || cave[y][x].o_idx)
+               while (cave_perma_bold(y, x) || cave[y][x].o_idx || (cave[y][x].info & CAVE_IN_MIRROR) )
                {
                        /* Pick a location */
                        scatter(&ny, &nx, y, x, 1, 0);
@@ -1329,7 +1330,7 @@ msg_print("
                                break;
                        }
 
-                       if ((a_idx > 0) && ((randint0(100) < chance) || (wizard)))
+                       if ((a_idx > 0) && ((randint0(100) < chance) || (p_ptr->wizard)))
                        {
                                if (a_info[a_idx].cur_num == 0)
                                {
@@ -1457,7 +1458,7 @@ msg_print("
        if (m_ptr->r_idx == MON_SERPENT)
        {
                /* Total winner */
-               total_winner = TRUE;
+               p_ptr->total_winner = TRUE;
 
                /* Redraw the "title" */
                p_ptr->redraw |= (PR_TITLE);
@@ -2103,7 +2104,7 @@ msg_format("%s
                 * Run (sometimes) if at 10% or less of max hit points,
                 * or (usually) when hit for half its current hit points
                 */
-               if (((percentage <= 10) && (randint0(10) < percentage)) ||
+                if ((randint1(10) >= percentage) ||
                    ((dam >= m_ptr->hp) && (randint0(100) < 80)))
                {
                        /* Hack -- note fear */
@@ -2426,67 +2427,85 @@ void verify_panel(void)
 cptr look_mon_desc(int m_idx)
 {
        monster_type *m_ptr = &m_list[m_idx];
-       monster_race *r_ptr = &r_info[m_ptr->r_idx];
+       monster_race *ap_r_ptr = &r_info[m_ptr->ap_r_idx];
        bool         living;
        int          perc;
-
+       cptr desc = NULL;
 
        /* Determine if the monster is "living" */
-       living = monster_living(r_ptr);
+       living = monster_living(ap_r_ptr);
 
+       /* Calculate a health "percentage" */
+       perc = 100L * m_ptr->hp / m_ptr->maxhp;
 
        /* Healthy monsters */
        if (m_ptr->hp >= m_ptr->maxhp)
        {
                /* No damage */
 #ifdef JP
-return (living ? "̵½ý" : "̵¥À¥á¡¼¥¸");
+               desc = living ? "̵½ý" : "̵¥À¥á¡¼¥¸";
 #else
-               return (living ? "unhurt" : "undamaged");
+               desc = living ? "unhurt" : "undamaged";
 #endif
 
        }
 
-
-       /* Calculate a health "percentage" */
-       perc = 100L * m_ptr->hp / m_ptr->maxhp;
-
-       if (perc >= 60)
+       else if (perc >= 60)
        {
 #ifdef JP
-return (living ? "·Ú½ý" : "¾®¥À¥á¡¼¥¸");
+               desc = living ? "·Ú½ý" : "¾®¥À¥á¡¼¥¸";
 #else
-               return (living ? "somewhat wounded" : "somewhat damaged");
+               desc = living ? "somewhat wounded" : "somewhat damaged";
 #endif
 
        }
 
-       if (perc >= 25)
+       else if (perc >= 25)
        {
 #ifdef JP
-return (living ? "Éé½ý" : "Ãæ¥À¥á¡¼¥¸");
+               desc = living ? "Éé½ý" : "Ãæ¥À¥á¡¼¥¸";
 #else
-               return (living ? "wounded" : "damaged");
+               desc = living ? "wounded" : "damaged";
 #endif
 
        }
 
-       if (perc >= 10)
+       else if (perc >= 10)
        {
 #ifdef JP
-return (living ? "½Å½ý" : "Âç¥À¥á¡¼¥¸");
+               desc = living ? "½Å½ý" : "Âç¥À¥á¡¼¥¸";
 #else
-               return (living ? "badly wounded" : "badly damaged");
+               desc = living ? "badly wounded" : "badly damaged";
 #endif
 
        }
 
+       else 
+       {
 #ifdef JP
-return (living ? "Ⱦ»àȾÀ¸" : "Åݤ줫¤±");
+               desc = living ? "Ⱦ»àȾÀ¸" : "Åݤ줫¤±";
 #else
-       return (living ? "almost dead" : "almost destroyed");
+               desc = living ? "almost dead" : "almost destroyed";
 #endif
+       }
 
+       /* Display monster's level --- idea borrowed from ToME */
+       if (ap_r_ptr->r_tkills && !(m_ptr->mflag2 & MFLAG_KAGE))
+       {
+#ifdef JP
+               return format("¥ì¥Ù¥ë%d, %s", ap_r_ptr->level, desc);
+#else
+               return format("Level %d, %s", ap_r_ptr->level, desc);
+#endif
+       }
+       else 
+       {
+#ifdef JP
+               return format("¥ì¥Ù¥ë???, %s", desc);
+#else
+               return format("Level ???, %s", desc);
+#endif
+       }
 }
 
 
@@ -2797,7 +2816,7 @@ static bool target_set_accept(int y, int x)
                /* Notice glyphs */
                if (c_ptr->feat == FEAT_GLYPH) return (TRUE);
                if (c_ptr->feat == FEAT_MINOR_GLYPH) return (TRUE);
-               if (c_ptr->feat == FEAT_MIRROR) return (TRUE);
+               if ((c_ptr->info & CAVE_IN_MIRROR)) return (TRUE);
 
                /* Notice the Pattern */
                if ((c_ptr->feat <= FEAT_PATTERN_XTRA2) &&
@@ -3029,7 +3048,7 @@ cptr name = "
                if (c_ptr->m_idx)
                {
                        monster_type *m_ptr = &m_list[c_ptr->m_idx];
-                       monster_race *r_ptr = &r_info[m_ptr->r_idx];
+                       monster_race *ap_r_ptr = &r_info[m_ptr->ap_r_idx];
 
                        /* Visible */
                        if (m_ptr->ml)
@@ -3132,7 +3151,7 @@ attitude = " ";
        char acount[10];
        u32b tmp_h,tmp_l;
        int bit,result;
-       u32b exp_mon= (r_ptr->mexp)*(r_ptr->level);
+       u32b exp_mon= (ap_r_ptr->mexp)*(ap_r_ptr->level);
        u32b exp_mon_h= exp_mon / (p_ptr->max_plv+2);
        u32b exp_mon_l= ((exp_mon % (p_ptr->max_plv+2))*0x10000/(p_ptr->max_plv+2))&0xFFFF;
        
@@ -3142,7 +3161,7 @@ attitude = " ";
        M_INT_SUB(exp_adv_h, exp_adv_l, p_ptr->exp, p_ptr->exp_frac);
        if ((p_ptr->lev>=PY_MAX_LEVEL) || (p_ptr->prace == RACE_ANDROID))
                sprintf(acount,"[**]");
-       else if (!r_ptr->r_tkills || (m_ptr->mflag2 & MFLAG_KAGE))
+       else if (!ap_r_ptr->r_tkills || (m_ptr->mflag2 & MFLAG_KAGE))
                sprintf(acount,"[??]");
        else if (M_INT_GREATER(exp_mon_h, exp_mon_l, exp_adv_h, exp_adv_l))
                sprintf(acount,"[001]");
@@ -3218,15 +3237,15 @@ s1 = "
 
                                /* Hack -- take account of gender */
 #ifdef JP
-if (r_ptr->flags1 & (RF1_FEMALE)) s1 = "Èà½÷¤Ï";
+if (ap_r_ptr->flags1 & (RF1_FEMALE)) s1 = "Èà½÷¤Ï";
 #else
-                               if (r_ptr->flags1 & (RF1_FEMALE)) s1 = "She is ";
+                               if (ap_r_ptr->flags1 & (RF1_FEMALE)) s1 = "She is ";
 #endif
 
 #ifdef JP
-else if (r_ptr->flags1 & (RF1_MALE)) s1 = "Èà¤Ï";
+else if (ap_r_ptr->flags1 & (RF1_MALE)) s1 = "Èà¤Ï";
 #else
-                               else if (r_ptr->flags1 & (RF1_MALE)) s1 = "He is ";
+                               else if (ap_r_ptr->flags1 & (RF1_MALE)) s1 = "He is ";
 #endif
 
 
@@ -3503,7 +3522,7 @@ if (o_ptr->number != 1) s1 = "
                }
 
                /* Terrain feature if needed */
-               if (boring || (feat > FEAT_INVIS))
+               if (boring || (feat > FEAT_INVIS) || (c_ptr->info & CAVE_IN_MIRROR))
                {
                        cptr name;
 
@@ -3532,17 +3551,18 @@ if (o_ptr->number != 1) s1 = "
                                name = "road";
 #endif
                        }
-                       else
+                       else if ( (c_ptr->info & CAVE_IN_MIRROR) )
                        {
-                               name = f_name + f_info[feat].name;
-                       }
-
-                       /* Hack -- handle unknown grids */
 #ifdef JP
-if (feat == FEAT_NONE) name = "̤ÃΤÎÃÏ·Á";
+                               name = "¶À";
 #else
-                       if (feat == FEAT_NONE) name = "unknown grid";
+                               name = "a mirror";
 #endif
+                       }
+                       else
+                       {
+                               name = f_name + f_info[feat].name;
+                       }
 
 
                        /* Pick a prefix */
@@ -3589,7 +3609,7 @@ s2 = "
 #endif
 
                        }
-                       else if ((feat == FEAT_TOWN) || (feat == FEAT_FLOOR) || (feat == FEAT_DIRT) || (feat == FEAT_FLOWER))
+                       else if ((feat == FEAT_TOWN) || (feat == FEAT_FLOOR) || (feat == FEAT_DIRT) || (feat == FEAT_FLOWER) || (c_ptr->info & CAVE_IN_MIRROR))
                        {
 #ifndef JP
                                s3 ="";
@@ -3604,7 +3624,7 @@ s2 = "
                        }
 
                        /* Display a message */
-                       if (wizard)
+                       if (p_ptr->wizard)
 #ifdef JP
                        sprintf(out_val, "%s%s%s%s[%s] %x %d %d %d %d (%d,%d)", s1, name, s2, s3, info, c_ptr->info, c_ptr->feat, c_ptr->dist, c_ptr->cost, c_ptr->when, x, y);
 #else
@@ -4388,7 +4408,7 @@ if (!get_com("
        else if (p_ptr->riding)
        {
                monster_type *m_ptr = &m_list[p_ptr->riding];
-               monster_race *r_ptr = &r_info[m_ptr->ap_r_idx];
+               monster_race *r_ptr = &r_info[m_ptr->r_idx];
 
                if (m_ptr->confused)
                {