OSDN Git Service

Merge remote-tracking branch 'remotes/origin/SHIELD_SKILL'
[hengband/hengband.git] / src / xtra1.c
index 3a84445..a1c0306 100644 (file)
@@ -11,6 +11,7 @@
  */
 
 #include "angband.h"
+#include "world.h"
 
 /*!
  * @brief 現在の修正後能力値を3~17及び18/xxx形式に変換する / Converts stat num into a six-char (right justified) string
@@ -109,7 +110,7 @@ s16b modify_stat_value(int value, int amount)
  * @param col 描画行
  * @return なし
  */
-static void prt_field(cptr info, int row, int col)
+static void prt_field(concptr info, TERM_LEN row, TERM_LEN col)
 {
        /* Dump 13 spaces to clear */
        c_put_str(TERM_WHITE, "             ", row, col);
@@ -118,49 +119,6 @@ static void prt_field(cptr info, int row, int col)
        c_put_str(TERM_L_BLUE, info, row, col);
 }
 
-
-/*!
- * @brief ゲーム時間が日中かどうかを返す /
- * Whether daytime or not
- * @return 日中ならばTRUE、夜ならばFALSE
- */
-bool is_daytime(void)
-{
-       s32b len = TURNS_PER_TICK * TOWN_DAWN;
-       if ((turn % len) < (len / 2))
-               return TRUE;
-       else
-               return FALSE;
-}
-
-/*!
- * @brief 現在の日数、時刻を返す /
- * Extract day, hour, min
- * @param day 日数を返すための参照ポインタ
- * @param hour 時数を返すための参照ポインタ
- * @param min 分数を返すための参照ポインタ
- */
-void extract_day_hour_min(int *day, int *hour, int *min)
-{
-       const s32b A_DAY = TURNS_PER_TICK * TOWN_DAWN;
-       s32b turn_in_today = (turn + A_DAY / 4) % A_DAY;
-
-       switch (p_ptr->start_race)
-       {
-       case RACE_VAMPIRE:
-       case RACE_SKELETON:
-       case RACE_ZOMBIE:
-       case RACE_SPECTRE:
-               *day = (turn - A_DAY * 3 / 4) / A_DAY + 1;
-               break;
-       default:
-               *day = (turn + A_DAY / 4) / A_DAY + 1;
-               break;
-       }
-       *hour = (24 * turn_in_today / A_DAY) % 24;
-       *min = (1440 * turn_in_today / A_DAY) % 60;
-}
-
 /*!
  * @brief ゲーム時刻を表示する /
  * Print time
@@ -186,7 +144,7 @@ void prt_time(void)
  * @brief 現在のマップ名を返す /
  * @return マップ名の文字列参照ポインタ
  */
-cptr map_name(void)
+concptr map_name(void)
 {
        if (p_ptr->inside_quest && is_fixed_quest_idx(p_ptr->inside_quest)
            && (quest[p_ptr->inside_quest].flags & QUEST_FLAG_PRESET))
@@ -209,8 +167,8 @@ cptr map_name(void)
  */
 static void prt_dungeon(void)
 {
-       cptr dungeon_name;
-       int col;
+       concptr dungeon_name;
+       TERM_LEN col;
 
        /* Dump 13 spaces to clear */
        c_put_str(TERM_WHITE, "             ", ROW_DUNGEON, COL_DUNGEON);
@@ -337,9 +295,9 @@ static void prt_stat(int stat)
 #define BAR_ESP_EVIL 66     /*!< 下部ステータス表示: 邪悪感知 */
 
 static struct {
-       byte attr;
-       cptr sstr;
-       cptr lstr;
+       TERM_COLOR attr;
+       concptr sstr;
+       concptr lstr;
 } bar[]
 #ifdef JP
 = {
@@ -508,9 +466,10 @@ static struct {
  */
 static void prt_status(void)
 {
-       u32b bar_flags[3];
-       int wid, hgt, row_statbar, max_col_statbar;
-       int i, col = 0, num = 0;
+       BIT_FLAGS bar_flags[3];
+       TERM_LEN wid, hgt, row_statbar, max_col_statbar;
+       int i;
+       TERM_LEN col = 0, num = 0;
        int space = 2;
 
        Term_get_size(&wid, &hgt);
@@ -722,7 +681,7 @@ static void prt_status(void)
        {
                if (IS_FLG(i))
                {
-                       cptr str;
+                       concptr str;
                        if (space == 2) str = bar[i].lstr;
                        else str = bar[i].sstr;
 
@@ -741,8 +700,8 @@ static void prt_status(void)
  */
 static void prt_title(void)
 {
-       cptr p = "";
-       char str[14];
+       concptr p = "";
+       GAME_TEXT str[14];
 
        if (p_ptr->wizard)
        {
@@ -783,25 +742,13 @@ static void prt_level(void)
 
        if (p_ptr->lev >= p_ptr->max_plv)
        {
-#ifdef JP
-               put_str("レベル ", ROW_LEVEL, 0);
+               put_str(_("レベル ", "LEVEL "), ROW_LEVEL, 0);
                c_put_str(TERM_L_GREEN, tmp, ROW_LEVEL, COL_LEVEL + 7);
-#else
-               put_str("LEVEL ", ROW_LEVEL, 0);
-               c_put_str(TERM_L_GREEN, tmp, ROW_LEVEL, COL_LEVEL + 6);
-#endif
-
        }
        else
        {
-#ifdef JP
-               put_str("xレベル", ROW_LEVEL, 0);
+               put_str(_("xレベル", "Level "), ROW_LEVEL, 0);
                c_put_str(TERM_YELLOW, tmp, ROW_LEVEL, COL_LEVEL + 7);
-#else
-               put_str("Level ", ROW_LEVEL, 0);
-               c_put_str(TERM_YELLOW, tmp, ROW_LEVEL, COL_LEVEL + 6);
-#endif
-
        }
 }
 
@@ -816,7 +763,7 @@ static void prt_exp(void)
 
        if ((!exp_need)||(p_ptr->prace == RACE_ANDROID))
        {
-               (void)sprintf(out_val, _("%7ld", "%8ld"), (long)p_ptr->exp);
+               (void)sprintf(out_val, "%8ld", (long)p_ptr->exp);
        }
        else
        {
@@ -826,36 +773,20 @@ static void prt_exp(void)
                }
                else
                {
-#ifdef JP
-                       (void)sprintf(out_val, "%7ld", (long)(player_exp [p_ptr->lev - 1] * p_ptr->expfact / 100L) - p_ptr->exp);
-#else      
                        (void)sprintf(out_val, "%8ld", (long)(player_exp [p_ptr->lev - 1] * p_ptr->expfact / 100L) - p_ptr->exp);
-#endif
                }
        }
 
        if (p_ptr->exp >= p_ptr->max_exp)
        {
-#ifdef JP
-               if (p_ptr->prace == RACE_ANDROID) put_str("強化 ", ROW_EXP, 0);
-               else put_str("経験 ", ROW_EXP, 0);
-               c_put_str(TERM_L_GREEN, out_val, ROW_EXP, COL_EXP + 5);
-#else
-               if (p_ptr->prace == RACE_ANDROID) put_str("Cst ", ROW_EXP, 0);
-               else put_str("EXP ", ROW_EXP, 0);
+               if (p_ptr->prace == RACE_ANDROID) put_str(_("強化 ", "Cst "), ROW_EXP, 0);
+               else put_str(_("経験 ", "EXP "), ROW_EXP, 0);
                c_put_str(TERM_L_GREEN, out_val, ROW_EXP, COL_EXP + 4);
-#endif
-
        }
        else
        {
                put_str(_("x経験", "Exp "), ROW_EXP, 0);
-#ifdef JP
-               c_put_str(TERM_YELLOW, out_val, ROW_EXP, COL_EXP + 5);
-#else
                c_put_str(TERM_YELLOW, out_val, ROW_EXP, COL_EXP + 4);
-#endif
-
        }
 }
 
@@ -900,7 +831,7 @@ static void prt_ac(void)
  */
 static void prt_hp(void)
 {
-/* ヒットポイントの表示方法を変更 */
+       /* ヒットポイントの表示方法を変更 */
        char tmp[32];
   
        TERM_COLOR color;
@@ -990,8 +921,8 @@ static void prt_sp(void)
 static void prt_depth(void)
 {
        char depths[32];
-       int wid, hgt, row_depth, col_depth;
-       byte attr = TERM_WHITE;
+       TERM_LEN wid, hgt, row_depth, col_depth;
+       TERM_COLOR attr = TERM_WHITE;
 
        Term_get_size(&wid, &hgt);
        col_depth = wid + COL_DEPTH;
@@ -1088,9 +1019,8 @@ static void prt_hunger(void)
  */
 static void prt_state(void)
 {
-       byte attr = TERM_WHITE;
-
-       char text[16];
+       TERM_COLOR attr = TERM_WHITE;
+       GAME_TEXT text[16];
 
        /* Repeating */
        if (command_rep)
@@ -1241,9 +1171,9 @@ static void prt_speed(void)
        int i = p_ptr->pspeed;
        bool is_fast = IS_FAST();
 
-       byte attr = TERM_WHITE;
+       TERM_COLOR attr = TERM_WHITE;
        char buf[32] = "";
-       int wid, hgt, row_speed, col_speed;
+       TERM_LEN wid, hgt, row_speed, col_speed;
 
        Term_get_size(&wid, &hgt);
        col_speed = wid + COL_SPEED;
@@ -1309,7 +1239,7 @@ static void prt_speed(void)
  */
 static void prt_study(void)
 {
-       int wid, hgt, row_study, col_study;
+       TERM_LEN wid, hgt, row_study, col_study;
 
        Term_get_size(&wid, &hgt);
        col_study = wid + COL_STUDY;
@@ -1332,7 +1262,7 @@ static void prt_study(void)
  */
 static void prt_imitation(void)
 {
-       int wid, hgt, row_study, col_study;
+       TERM_LEN wid, hgt, row_study, col_study;
 
        Term_get_size(&wid, &hgt);
        col_study = wid + COL_STUDY;
@@ -1342,7 +1272,7 @@ static void prt_imitation(void)
        {
                if (p_ptr->mane_num)
                {
-                       byte attr;
+                       TERM_COLOR attr;
                        if (new_mane) attr = TERM_L_RED;
                        else attr = TERM_WHITE;
                        c_put_str(attr, _("まね", "Imit"), row_study, col_study);
@@ -1539,14 +1469,14 @@ static void health_redraw(bool riding)
                else
                {
                        /* Extract the "percent" of health */
-                       int pct = 100L * m_ptr->hp / m_ptr->maxhp;
-                       int pct2 = 100L * m_ptr->hp / m_ptr->max_maxhp;
+                       int pct = m_ptr->maxhp > 0 ? 100L * m_ptr->hp / m_ptr->maxhp : 0;
+                       int pct2 = m_ptr->maxhp > 0 ? 100L * m_ptr->hp / m_ptr->max_maxhp: 0;
 
                        /* Convert percent into "health" */
                        int len = (pct2 < 10) ? 1 : (pct2 < 90) ? (pct2 / 10 + 1) : 10;
 
                        /* Default to almost dead */
-                       byte attr = TERM_RED;
+                       TERM_COLOR attr = TERM_RED;
 
                        /* Invulnerable */
                        if (MON_INVULNER(m_ptr)) attr = TERM_WHITE;
@@ -1609,7 +1539,7 @@ static void prt_frame_basic(void)
        prt_exp();
 
        /* All Stats */
-       for (i = 0; i < 6; i++) prt_stat(i);
+       for (i = 0; i < A_MAX; i++) prt_stat(i);
 
        /* Armor */
        prt_ac();
@@ -1772,8 +1702,8 @@ void print_monster_list(TERM_LEN x, TERM_LEN y, TERM_LEN max_lines){
                        /*
                        MONRACE_IDX r_idx = m_ptr->ap_r_idx;
                        monster_race* r_ptr = &r_info[r_idx];
-                       cptr name = (r_name + r_ptr->name);
-                       cptr ename = (r_name + r_ptr->name);
+                       concptr name = (r_name + r_ptr->name);
+                       concptr ename = (r_name + r_ptr->name);
                        //ミミック類や「それ」等は、一覧に出てはいけない
                        if(r_ptr->flags1&RF1_CHAR_CLEAR)continue;
                        if((r_ptr->flags1&RF1_NEVER_MOVE)&&(r_ptr->flags2&RF2_CHAR_MULTI))continue;
@@ -1940,8 +1870,6 @@ static void fix_player(void)
                Term_activate(angband_term[j]);
 
                update_playtime();
-
-               /* Display player */
                display_player(0);
                Term_fresh();
 
@@ -2015,7 +1943,7 @@ static void fix_overhead(void)
        for (j = 0; j < 8; j++)
        {
                term *old = Term;
-               int wid, hgt;
+               TERM_LEN wid, hgt;
 
                /* No window */
                if (!angband_term[j]) continue;
@@ -2161,7 +2089,7 @@ static void calc_spells(void)
        int bonus = 0;
 
 
-       cptr p;
+       concptr p;
 
        /* Hack -- must be literate */
        if (!mp_ptr->spell_book) return;
@@ -2922,8 +2850,6 @@ static void calc_torch(void)
                                if((o_ptr->sval == SV_LITE_LANTERN) && !(o_ptr->xtra4 > 0)) continue;
                        }
                }
-
-               /* Extract the flags */
                object_flags(o_ptr, flgs);
 
                /* calc the lite_radius */
@@ -3153,22 +3079,22 @@ s16b calc_num_fire(object_type *o_ptr)
  */
 void calc_bonuses(void)
 {
-       int             i, j, hold, neutral[2];
-       int             new_speed;
-       int             default_hand = 0;
-       int             empty_hands_status = empty_hands(TRUE);
-       int             extra_blows[2];
-       object_type     *o_ptr;
+       int i, j, hold, neutral[2];
+       int new_speed;
+       int default_hand = 0;
+       int empty_hands_status = empty_hands(TRUE);
+       int extra_blows[2];
+       object_type *o_ptr;
        BIT_FLAGS flgs[TR_FLAG_SIZE];
-       bool            omoi = FALSE;
-       bool            yoiyami = FALSE;
-       bool            down_saving = FALSE;
+       bool omoi = FALSE;
+       bool yoiyami = FALSE;
+       bool down_saving = FALSE;
 #if 0
-       bool            have_dd_s = FALSE, have_dd_t = FALSE;
+       bool have_dd_s = FALSE, have_dd_t = FALSE;
 #endif
-       bool            have_sw = FALSE, have_kabe = FALSE;
-       bool            easy_2weapon = FALSE;
-       bool            riding_levitation = FALSE;
+       bool have_sw = FALSE, have_kabe = FALSE;
+       bool easy_2weapon = FALSE;
+       bool riding_levitation = FALSE;
        OBJECT_IDX this_o_idx, next_o_idx = 0;
        const player_race *tmp_rp_ptr;
 
@@ -3189,16 +3115,19 @@ void calc_bonuses(void)
        bool old_see_inv = p_ptr->see_inv;
        bool old_mighty_throw = p_ptr->mighty_throw;
 
+       /* Current feature under player. */
+       feature_type *f_ptr = &f_info[cave[p_ptr->y][p_ptr->x].feat];
+
        /* Save the old armor class */
-       s16b old_dis_ac = p_ptr->dis_ac;
-       s16b old_dis_to_a = p_ptr->dis_to_a;
+       ARMOUR_CLASS old_dis_ac = p_ptr->dis_ac;
+       ARMOUR_CLASS old_dis_to_a = p_ptr->dis_to_a;
 
 
        /* Clear extra blows/shots */
        extra_blows[0] = extra_blows[1] = 0;
 
        /* Clear the stat modifiers */
-       for (i = 0; i < 6; i++) p_ptr->stat_add[i] = 0;
+       for (i = 0; i < A_MAX; i++) p_ptr->stat_add[i] = 0;
 
 
        /* Clear the Displayed/Real armor class */
@@ -3290,6 +3219,7 @@ void calc_bonuses(void)
        p_ptr->resist_blind = FALSE;
        p_ptr->resist_neth = FALSE;
        p_ptr->resist_time = FALSE;
+       p_ptr->resist_water = FALSE;
        p_ptr->resist_fear = FALSE;
        p_ptr->reflect = FALSE;
        p_ptr->sh_fire = FALSE;
@@ -3770,6 +3700,9 @@ void calc_bonuses(void)
                        p_ptr->resist_pois = TRUE;
                        p_ptr->hold_exp = TRUE;
                        break;
+               case RACE_MERFOLK:
+                       p_ptr->resist_water = TRUE;
+                       break;
                default:
                        /* Do nothing */
                        ;
@@ -3837,10 +3770,17 @@ void calc_bonuses(void)
 
        /* Sexy Gal */
        if (p_ptr->pseikaku == SEIKAKU_SEXY) p_ptr->cursed |= (TRC_AGGRAVATE);
+
        if (p_ptr->pseikaku == SEIKAKU_NAMAKE) p_ptr->to_m_chance += 10;
        if (p_ptr->pseikaku == SEIKAKU_KIREMONO) p_ptr->to_m_chance -= 3;
        if ((p_ptr->pseikaku == SEIKAKU_GAMAN) || (p_ptr->pseikaku == SEIKAKU_CHIKARA)) p_ptr->to_m_chance++;
 
+       if (p_ptr->pseikaku == SEIKAKU_CHARGEMAN)
+       {
+               p_ptr->to_m_chance += 5;
+               p_ptr->resist_conf = TRUE;
+       }
+
        /* Lucky man */
        if (p_ptr->pseikaku == SEIKAKU_LUCKY) p_ptr->muta3 |= MUT3_GOOD_LUCK;
 
@@ -3863,7 +3803,7 @@ void calc_bonuses(void)
 
        /* Hack -- apply racial/class stat maxes */
        /* Apply the racial modifiers */
-       for (i = 0; i < 6; i++)
+       for (i = 0; i < A_MAX; i++)
        {
                /* Modify the stats for "race" */
                p_ptr->stat_add[i] += (tmp_rp_ptr->r_adj[i] + cp_ptr->c_adj[i] + ap_ptr->a_adj[i]);
@@ -4149,7 +4089,7 @@ void calc_bonuses(void)
                        if (object_is_cursed(o_ptr)) p_ptr->cursed |= TRC_TELEPORT;
                        else
                        {
-                               cptr insc = quark_str(o_ptr->inscription);
+                               concptr insc = quark_str(o_ptr->inscription);
 
                                if (o_ptr->inscription && my_strchr(insc, '.'))
                                {
@@ -4431,7 +4371,7 @@ void calc_bonuses(void)
 
        if (p_ptr->special_defense & KATA_KOUKIJIN)
        {
-               for (i = 0; i < 6; i++)
+               for (i = 0; i < A_MAX; i++)
                        p_ptr->stat_add[i] += 5;
                p_ptr->to_a -= 50;
                p_ptr->dis_to_a -= 50;
@@ -4491,7 +4431,7 @@ void calc_bonuses(void)
        }
 
        /* Calculate stats */
-       for (i = 0; i < 6; i++)
+       for (i = 0; i < A_MAX; i++)
        {
                int top, use, ind;
 
@@ -4890,6 +4830,20 @@ void calc_bonuses(void)
        /* Searching slows the player down */
        if (p_ptr->action == ACTION_SEARCH) new_speed -= 10;
 
+       /* Feature bonus */
+       if(p_ptr->prace == RACE_MERFOLK)
+       {
+               if (have_flag(f_ptr->flags, FF_WATER))
+               {
+                       new_speed += (2 + p_ptr->lev / 10);
+               }
+               else if (!p_ptr->levitation)
+               {
+                       new_speed -= 2;
+               }
+       }
+
+
        /* Actual Modifier Bonuses (Un-inflate stat bonuses) */
        p_ptr->to_a += ((int)(adj_dex_ta[p_ptr->stat_ind[A_DEX]]) - 128);
        p_ptr->to_d[0] += ((int)(adj_str_td[p_ptr->stat_ind[A_STR]]) - 128);
@@ -5749,149 +5703,6 @@ void calc_bonuses(void)
 }
 
 
-
-/*! 
- * @brief p_ptr->notice のフラグに応じた更新をまとめて行う / Handle "p_ptr->notice"
- * @return なし
- * @details 更新処理の対象はアイテムの自動破壊/アイテムの結合/アイテムの並び替え。
- */
-static void notice_stuff(void)
-{
-       if(!p_ptr->notice) return;
-
-       /* Actually do auto-destroy */
-       if(p_ptr->notice & (PN_AUTODESTROY))
-       {
-               p_ptr->notice &= ~(PN_AUTODESTROY);
-               autopick_delayed_alter();
-       }
-
-       /* Combine the pack */
-       if (p_ptr->notice & (PN_COMBINE))
-       {
-               p_ptr->notice &= ~(PN_COMBINE);
-               combine_pack();
-       }
-
-       /* Reorder the pack */
-       if (p_ptr->notice & (PN_REORDER))
-       {
-               p_ptr->notice &= ~(PN_REORDER);
-               reorder_pack();
-       }
-}
-
-
-/*! 
- * @brief p_ptr->update のフラグに応じた更新をまとめて行う / Handle "p_ptr->update"
- * @return なし
- * @details 更新処理の対象はプレイヤーの能力修正/光源寿命/HP/MP/魔法の学習状態、他多数の外界の状態判定。
- */
-static void update_stuff(void)
-{
-       if (!p_ptr->update) return;
-
-       if (p_ptr->update & (PU_BONUS))
-       {
-               p_ptr->update &= ~(PU_BONUS);
-               calc_bonuses();
-       }
-
-       if (p_ptr->update & (PU_TORCH))
-       {
-               p_ptr->update &= ~(PU_TORCH);
-               calc_torch();
-       }
-
-       if (p_ptr->update & (PU_HP))
-       {
-               p_ptr->update &= ~(PU_HP);
-               calc_hitpoints();
-       }
-
-       if (p_ptr->update & (PU_MANA))
-       {
-               p_ptr->update &= ~(PU_MANA);
-               calc_mana();
-       }
-
-       if (p_ptr->update & (PU_SPELLS))
-       {
-               p_ptr->update &= ~(PU_SPELLS);
-               calc_spells();
-       }
-
-       /* Character is not ready yet, no screen updates */
-       if (!character_generated) return;
-
-       /* Character is in "icky" mode, no screen updates */
-       if (character_icky) return;
-
-       if (p_ptr->update & (PU_UN_LITE))
-       {
-               p_ptr->update &= ~(PU_UN_LITE);
-               forget_lite();
-       }
-
-       if (p_ptr->update & (PU_UN_VIEW))
-       {
-               p_ptr->update &= ~(PU_UN_VIEW);
-               forget_view();
-       }
-
-       if (p_ptr->update & (PU_VIEW))
-       {
-               p_ptr->update &= ~(PU_VIEW);
-               update_view();
-       }
-
-       if (p_ptr->update & (PU_LITE))
-       {
-               p_ptr->update &= ~(PU_LITE);
-               update_lite();
-       }
-
-
-       if (p_ptr->update & (PU_FLOW))
-       {
-               p_ptr->update &= ~(PU_FLOW);
-               update_flow();
-       }
-
-       if (p_ptr->update & (PU_DISTANCE))
-       {
-               p_ptr->update &= ~(PU_DISTANCE);
-
-               /* Still need to call update_monsters(FALSE) after update_mon_lite() */ 
-               /* p_ptr->update &= ~(PU_MONSTERS); */
-
-               update_monsters(TRUE);
-       }
-
-       if (p_ptr->update & (PU_MON_LITE))
-       {
-               p_ptr->update &= ~(PU_MON_LITE);
-               update_mon_lite();
-       }
-
-       /*
-        * Mega-Hack -- Delayed visual update
-        * Only used if update_view(), update_lite() or update_mon_lite() was called
-        */
-       if (p_ptr->update & (PU_DELAY_VIS))
-       {
-               p_ptr->update &= ~(PU_DELAY_VIS);
-               delayed_visual_update();
-       }
-
-       if (p_ptr->update & (PU_MONSTERS))
-       {
-               p_ptr->update &= ~(PU_MONSTERS);
-               update_monsters(FALSE);
-       }
-}
-
-
 /*! 
  * @brief p_ptr->redraw のフラグに応じた更新をまとめて行う / Handle "p_ptr->redraw"
  * @return なし
@@ -6182,13 +5993,148 @@ static void window_stuff(void)
  */
 void handle_stuff(void)
 {
-       if (p_ptr->notice) notice_stuff();
-       if (p_ptr->update) update_stuff();
+       if (p_ptr->update) update_creature(p_ptr);
+       if (p_ptr->redraw) redraw_stuff();
+       if (p_ptr->window) window_stuff();
+}
+
+void update_output(void)
+{
        if (p_ptr->redraw) redraw_stuff();
        if (p_ptr->window) window_stuff();
 }
 
 /*!
+ * @brief p_ptr->update のフラグに応じた更新をまとめて行う / Handle "p_ptr->update"
+ * @return なし
+ * @details 更新処理の対象はプレイヤーの能力修正/光源寿命/HP/MP/魔法の学習状態、他多数の外界の状態判定。
+ */
+void update_creature(player_type *creature_ptr)
+{
+       if (!creature_ptr->update) return;
+
+       /* Actually do auto-destroy */
+       if (creature_ptr->update & (PU_AUTODESTROY))
+       {
+               creature_ptr->update &= ~(PU_AUTODESTROY);
+               autopick_delayed_alter();
+       }
+
+       /* Combine the pack */
+       if (creature_ptr->update & (PU_COMBINE))
+       {
+               creature_ptr->update &= ~(PU_COMBINE);
+               combine_pack();
+       }
+
+       /* Reorder the pack */
+       if (creature_ptr->update & (PU_REORDER))
+       {
+               creature_ptr->update &= ~(PU_REORDER);
+               reorder_pack();
+       }
+
+       if (creature_ptr->update & (PU_BONUS))
+       {
+               creature_ptr->update &= ~(PU_BONUS);
+               calc_bonuses();
+       }
+
+       if (creature_ptr->update & (PU_TORCH))
+       {
+               creature_ptr->update &= ~(PU_TORCH);
+               calc_torch();
+       }
+
+       if (creature_ptr->update & (PU_HP))
+       {
+               creature_ptr->update &= ~(PU_HP);
+               calc_hitpoints();
+       }
+
+       if (creature_ptr->update & (PU_MANA))
+       {
+               creature_ptr->update &= ~(PU_MANA);
+               calc_mana();
+       }
+
+       if (creature_ptr->update & (PU_SPELLS))
+       {
+               creature_ptr->update &= ~(PU_SPELLS);
+               calc_spells();
+       }
+
+       /* Character is not ready yet, no screen updates */
+       if (!character_generated) return;
+
+       /* Character is in "icky" mode, no screen updates */
+       if (character_icky) return;
+
+       if (creature_ptr->update & (PU_UN_LITE))
+       {
+               creature_ptr->update &= ~(PU_UN_LITE);
+               forget_lite();
+       }
+
+       if (creature_ptr->update & (PU_UN_VIEW))
+       {
+               creature_ptr->update &= ~(PU_UN_VIEW);
+               forget_view();
+       }
+
+       if (creature_ptr->update & (PU_VIEW))
+       {
+               creature_ptr->update &= ~(PU_VIEW);
+               update_view();
+       }
+
+       if (creature_ptr->update & (PU_LITE))
+       {
+               creature_ptr->update &= ~(PU_LITE);
+               update_lite();
+       }
+
+
+       if (creature_ptr->update & (PU_FLOW))
+       {
+               creature_ptr->update &= ~(PU_FLOW);
+               update_flow();
+       }
+
+       if (creature_ptr->update & (PU_DISTANCE))
+       {
+               creature_ptr->update &= ~(PU_DISTANCE);
+
+               /* Still need to call update_monsters(FALSE) after update_mon_lite() */
+               /* creature_ptr->update &= ~(PU_MONSTERS); */
+
+               update_monsters(TRUE);
+       }
+
+       if (creature_ptr->update & (PU_MON_LITE))
+       {
+               creature_ptr->update &= ~(PU_MON_LITE);
+               update_mon_lite();
+       }
+
+       /*
+        * Mega-Hack -- Delayed visual update
+        * Only used if update_view(), update_lite() or update_mon_lite() was called
+        */
+       if (creature_ptr->update & (PU_DELAY_VIS))
+       {
+               creature_ptr->update &= ~(PU_DELAY_VIS);
+               delayed_visual_update();
+       }
+
+       if (creature_ptr->update & (PU_MONSTERS))
+       {
+               creature_ptr->update &= ~(PU_MONSTERS);
+               update_monsters(FALSE);
+       }
+}
+
+/*!
  * @brief プレイヤーの現在開いている手の状態を返す
  * @param riding_control 乗馬中により片手を必要としている状態ならばTRUEを返す。
  * @return 開いている手のビットフラグ