X-Git-Url: http://git.osdn.net/view?a=blobdiff_plain;f=src%2Fxtra1.c;h=c66ee7aad338f06a631d09d27c3de4b019733c8e;hb=7de4d6dfb51f88bb16a02b538ab727fc1a6b9858;hp=097aabac7b02dd9b9d9e23c99ce24be4090134ba;hpb=bf3562737ea5c7bb69f6b1393d903d3aea8272cd;p=hengband%2Fhengband.git diff --git a/src/xtra1.c b/src/xtra1.c index 097aabac7..c66ee7aad 100644 --- a/src/xtra1.c +++ b/src/xtra1.c @@ -1,7 +1,7 @@ /*! * @file xtra1.c - * @brief 雑多なその他の処理1 / misc code - * @date 2014/08/17 + * @brief プレイヤーのステータス処理 / status + * @date 2018/09/25 * @author * Copyright (c) 1989 James E. Wilson, Robert A. Koeneke\n * This software may be copied and distributed for educational, research, and\n @@ -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 @@ -96,7 +97,7 @@ s16b modify_stat_value(int value, int amount) } /* Return new value */ - return (value); + return (s16b)(value); } @@ -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); @@ -674,10 +633,10 @@ static void prt_status(void) hex_spelling(HEX_CURE_SERIOUS) || hex_spelling(HEX_CURE_CRITICAL)) ADD_FLG(BAR_CURE); - if (p_ptr->magic_num2[2]) + if (HEX_REVENGE_TURN(p_ptr)) { - if (p_ptr->magic_num2[1] == 1) ADD_FLG(BAR_PATIENCE); - if (p_ptr->magic_num2[1] == 2) ADD_FLG(BAR_REVENGE); + if (HEX_REVENGE_TYPE(p_ptr) == 1) ADD_FLG(BAR_PATIENCE); + if (HEX_REVENGE_TYPE(p_ptr) == 2) ADD_FLG(BAR_REVENGE); } } @@ -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,41 +700,22 @@ static void prt_status(void) */ static void prt_title(void) { - cptr p = ""; - char str[14]; + concptr p = ""; + GAME_TEXT str[14]; - /* Wizard */ if (p_ptr->wizard) { -#ifdef JP - /* 英日切り替え機能 称号 */ - p = "[ウィザード]"; -#else - p = "[=-WIZARD-=]"; -#endif - + p = _("[ウィザード]", "[=-WIZARD-=]"); } - - /* Winner */ else if (p_ptr->total_winner || (p_ptr->lev > PY_MAX_LEVEL)) { if (p_ptr->arena_number > MAX_ARENA_MONS + 2) { -#ifdef JP - /* 英日切り替え機能 称号 */ - p = "*真・勝利者*"; -#else - p = "*TRUEWINNER*"; -#endif + p = _("*真・勝利者*", "*TRUEWINNER*"); } else { -#ifdef JP - /* 英日切り替え機能 称号 */ - p = "***勝利者***"; -#else - p = "***WINNER***"; -#endif + p = _("***勝利者***", "***WINNER***"); } } @@ -802,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 - } } @@ -835,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 { @@ -845,37 +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 { -#ifdef JP - put_str("x経験", ROW_EXP, 0); - c_put_str(TERM_YELLOW, out_val, ROW_EXP, COL_EXP + 5); -#else - put_str("Exp ", ROW_EXP, 0); + put_str(_("x経験", "Exp "), ROW_EXP, 0); c_put_str(TERM_YELLOW, out_val, ROW_EXP, COL_EXP + 4); -#endif - } } @@ -920,14 +831,12 @@ static void prt_ac(void) */ static void prt_hp(void) { -/* ヒットポイントの表示方法を変更 */ + /* ヒットポイントの表示方法を変更 */ char tmp[32]; - byte color; + TERM_COLOR color; /* タイトル */ -/* put_str(" HP・MP", ROW_HPMP, COL_HPMP); */ - put_str("HP", ROW_CURHP, COL_CURHP); /* 現在のヒットポイント */ @@ -974,7 +883,6 @@ static void prt_sp(void) if (!mp_ptr->spell_book) return; /* タイトル */ -/* put_str(" MP / 最大", ROW_MAXSP, COL_MAXSP); */ put_str(_("MP", "SP"), ROW_CURSP, COL_CURSP); /* 現在のマジックポイント */ @@ -1013,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; @@ -1030,8 +938,8 @@ static void prt_depth(void) } else { - if (depth_in_feet) (void)sprintf(depths, _("%d ft", "%d ft"), dun_level * 50); - else (void)sprintf(depths, _("%d 階", "Lev %d"), dun_level); + if (depth_in_feet) (void)sprintf(depths, _("%d ft", "%d ft"), (int)dun_level * 50); + else (void)sprintf(depths, _("%d 階", "Lev %d"), (int)dun_level); /* Get color of level based on feeling -JSV- */ switch (p_ptr->feeling) @@ -1111,9 +1019,8 @@ static void prt_hunger(void) */ static void prt_state(void) { - byte attr = TERM_WHITE; - - char text[5]; + TERM_COLOR attr = TERM_WHITE; + GAME_TEXT text[16]; /* Repeating */ if (command_rep) @@ -1181,13 +1088,13 @@ static void prt_state(void) } /* Rest until healed */ - else if (resting == -1) + else if (resting == COMMAND_ARG_REST_FULL_HEALING) { text[0] = text[1] = text[2] = text[3] = '*'; } /* Rest until done */ - else if (resting == -2) + else if (resting == COMMAND_ARG_REST_UNTIL_DONE) { text[0] = text[1] = text[2] = text[3] = '&'; } @@ -1264,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; @@ -1332,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; @@ -1355,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; @@ -1365,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); @@ -1562,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; @@ -1632,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(); @@ -1707,8 +1614,6 @@ static void fix_inven(void) /* Display inventory */ display_inven(); - - /* Fresh */ Term_fresh(); /* Restore */ @@ -1733,10 +1638,10 @@ static void fix_inven(void) * @return なし * */ -static void print_monster_line(int x, int y, monster_type* m_ptr, int n_same){ +static void print_monster_line(TERM_LEN x, TERM_LEN y, monster_type* m_ptr, int n_same){ char buf[256]; int i; - int r_idx = m_ptr->ap_r_idx; + MONRACE_IDX r_idx = m_ptr->ap_r_idx; monster_race* r_ptr = &r_info[r_idx]; Term_gotoxy(x, y); @@ -1762,7 +1667,7 @@ static void print_monster_line(int x, int y, monster_type* m_ptr, int n_same){ Term_add_bigch(r_ptr->x_attr, r_ptr->x_char); //LV if (r_ptr->r_tkills && !(m_ptr->mflag2 & MFLAG2_KAGE)){ - sprintf(buf, " %2d", r_ptr->level); + sprintf(buf, " %2d", (int)r_ptr->level); }else{ strcpy(buf, " ??"); } @@ -1780,8 +1685,8 @@ static void print_monster_line(int x, int y, monster_type* m_ptr, int n_same){ * @param y 表示行 * @param max_lines 最大何行描画するか */ -void print_monster_list(int x, int y, int max_lines){ - int line = y; +void print_monster_list(TERM_LEN x, TERM_LEN y, TERM_LEN max_lines){ + TERM_LEN line = y; monster_type* last_mons = NULL; monster_type* m_ptr = NULL; int n_same = 0; @@ -1795,10 +1700,10 @@ void print_monster_list(int x, int y, int max_lines){ if(!m_ptr->r_idx)continue;//dead? { /* - int r_idx = m_ptr->ap_r_idx; + 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; @@ -1866,8 +1771,6 @@ static void fix_monster_list(void) target_set_prepare_look();//モンスター一覧を生成,ソート print_monster_list(0, 0, h); - - /* Fresh */ Term_fresh(); /* Restore */ @@ -1902,8 +1805,6 @@ static void fix_equip(void) /* Display equipment */ display_equip(); - - /* Fresh */ Term_fresh(); /* Restore */ @@ -1937,8 +1838,6 @@ static void fix_spell(void) /* Display spell list */ display_spell_list(); - - /* Fresh */ Term_fresh(); /* Restore */ @@ -1971,11 +1870,7 @@ static void fix_player(void) Term_activate(angband_term[j]); update_playtime(); - - /* Display player */ display_player(0); - - /* Fresh */ Term_fresh(); /* Restore */ @@ -1986,14 +1881,14 @@ static void fix_player(void) /*! * @brief ゲームメッセージ履歴をサブウィンドウに表示する / * Hack -- display recent messages in sub-windows - * XXX XXX XXX Adjust for width and split messages + * Adjust for width and split messages * @return なし */ static void fix_message(void) { int j, i; - int w, h; - int x, y; + TERM_LEN w, h; + TERM_LEN x, y; /* Scan windows */ for (j = 0; j < 8; j++) @@ -2009,7 +1904,6 @@ static void fix_message(void) /* Activate */ Term_activate(angband_term[j]); - /* Get size */ Term_get_size(&w, &h); /* Dump messages */ @@ -2024,8 +1918,6 @@ static void fix_message(void) /* Clear to end of line */ Term_erase(x, y, 255); } - - /* Fresh */ Term_fresh(); /* Restore */ @@ -2037,7 +1929,7 @@ static void fix_message(void) /*! * @brief 簡易マップをサブウィンドウに表示する / * Hack -- display overhead view in sub-windows - * XXX XXX XXX Adjust for width and split messages + * Adjust for width and split messages * @return なし * @details * Note that the "player" symbol does NOT appear on the map. @@ -2045,14 +1937,13 @@ static void fix_message(void) static void fix_overhead(void) { int j; - int cy, cx; /* Scan windows */ for (j = 0; j < 8; j++) { term *old = Term; - int wid, hgt; + TERM_LEN wid, hgt; /* No window */ if (!angband_term[j]) continue; @@ -2067,10 +1958,8 @@ static void fix_overhead(void) Term_get_size(&wid, &hgt); if (wid > COL_MAP + 2 && hgt > ROW_MAP + 2) { - /* Redraw map */ - display_map(&cy, &cx); - /* Fresh */ + display_map(&cy, &cx); Term_fresh(); } @@ -2105,8 +1994,6 @@ static void fix_dungeon(void) /* Redraw dungeon view */ display_dungeon(); - - /* Fresh */ Term_fresh(); /* Restore */ @@ -2140,8 +2027,6 @@ static void fix_monster(void) /* Display monster race info */ if (p_ptr->monster_race_idx) display_roff(p_ptr->monster_race_idx); - - /* Fresh */ Term_fresh(); /* Restore */ @@ -2175,8 +2060,6 @@ static void fix_object(void) /* Display monster race info */ if (p_ptr->object_kind_idx) display_koff(p_ptr->object_kind_idx); - - /* Fresh */ Term_fresh(); /* Restore */ @@ -2197,16 +2080,16 @@ static void fix_object(void) */ static void calc_spells(void) { - int i, j, k, levels; - int num_allowed; - int num_boukyaku = 0; + int i, j, k, levels; + int num_allowed; + int num_boukyaku = 0; const magic_type *s_ptr; - int which; + REALM_IDX which; int bonus = 0; - cptr p; + concptr p; /* Hack -- must be literate */ if (!mp_ptr->spell_book) return; @@ -2329,13 +2212,10 @@ static void calc_spells(void) which = p_ptr->realm2; } - /* Message */ #ifdef JP - msg_format("%sの%sを忘れてしまった。", - do_spell(which, j%32, SPELL_NAME), p ); + msg_format("%sの%sを忘れてしまった。", do_spell(which, j%32, SPELL_NAME), p ); #else - msg_format("You have forgotten the %s of %s.", p, - do_spell(which, j%32, SPELL_NAME)); + msg_format("You have forgotten the %s of %s.", p, do_spell(which, j%32, SPELL_NAME)); #endif @@ -2389,7 +2269,6 @@ static void calc_spells(void) which = p_ptr->realm2; } - /* Message */ #ifdef JP msg_format("%sの%sを忘れてしまった。", do_spell(which, j%32, SPELL_NAME), p ); @@ -2465,13 +2344,10 @@ static void calc_spells(void) which = p_ptr->realm2; } - /* Message */ #ifdef JP - msg_format("%sの%sを思い出した。", - do_spell(which, j%32, SPELL_NAME), p ); + msg_format("%sの%sを思い出した。", do_spell(which, j%32, SPELL_NAME), p ); #else - msg_format("You have remembered the %s of %s.", - p, do_spell(which, j%32, SPELL_NAME)); + msg_format("You have remembered the %s of %s.", p, do_spell(which, j%32, SPELL_NAME)); #endif @@ -2503,7 +2379,11 @@ static void calc_spells(void) k++; } if (k > 32) k = 32; - if ((p_ptr->new_spells > k) && ((mp_ptr->spell_book == TV_LIFE_BOOK) || (mp_ptr->spell_book == TV_HISSATSU_BOOK))) p_ptr->new_spells = k; + if ((p_ptr->new_spells > k) && + ((mp_ptr->spell_book == TV_LIFE_BOOK) || (mp_ptr->spell_book == TV_HISSATSU_BOOK))) + { + p_ptr->new_spells = (s16b)k; + } } if (p_ptr->new_spells < 0) p_ptr->new_spells = 0; @@ -2514,7 +2394,6 @@ static void calc_spells(void) /* Message if needed */ if (p_ptr->new_spells) { - /* Message */ #ifdef JP if( p_ptr->new_spells < 10 ){ msg_format("あと %d つの%sを学べる。", p_ptr->new_spells, p); @@ -2550,7 +2429,7 @@ static void calc_spells(void) */ static void calc_mana(void) { - int msp, levels, cur_wgt, max_wgt; + int msp, levels, cur_wgt, max_wgt; object_type *o_ptr; @@ -2606,7 +2485,7 @@ static void calc_mana(void) /* Only mages are affected */ if (mp_ptr->spell_xtra & MAGIC_GLOVE_REDUCE_MANA) { - u32b flgs[TR_FLAG_SIZE]; + BIT_FLAGS flgs[TR_FLAG_SIZE]; /* Assume player is not encumbered by gloves */ p_ptr->cumber_glove = FALSE; @@ -2803,8 +2682,7 @@ static void calc_mana(void) /* レベルアップの時は上昇量を表示する */ if ((level_up == 1) && (msp > p_ptr->msp)) { - msg_format("最大マジック・ポイントが %d 増加した!", - (msp - p_ptr->msp)); + msg_format("最大マジック・ポイントが %d 増加した!", (msp - p_ptr->msp)); } #endif /* Save new mana */ @@ -2813,7 +2691,6 @@ static void calc_mana(void) /* Display mana later */ p_ptr->redraw |= (PR_MANA); - /* Window stuff */ p_ptr->window |= (PW_PLAYER); p_ptr->window |= (PW_SPELL); } @@ -2825,7 +2702,6 @@ static void calc_mana(void) /* Take note when "glove state" changes */ if (p_ptr->old_cumber_glove != p_ptr->cumber_glove) { - /* Message */ if (p_ptr->cumber_glove) { msg_print(_("手が覆われて呪文が唱えにくい感じがする。", "Your covered hands feel unsuitable for spellcasting.")); @@ -2843,7 +2719,6 @@ static void calc_mana(void) /* Take note when "armor state" changes */ if (p_ptr->old_cumber_armor != p_ptr->cumber_armor) { - /* Message */ if (p_ptr->cumber_armor) { msg_print(_("装備の重さで動きが鈍くなってしまっている。", "The weight of your equipment encumbers your movement.")); @@ -2929,8 +2804,7 @@ static void calc_hitpoints(void) /* レベルアップの時は上昇量を表示する */ if ((level_up == 1) && (mhp > p_ptr->mhp)) { - msg_format("最大ヒット・ポイントが %d 増加した!", - (mhp - p_ptr->mhp) ); + msg_format("最大ヒット・ポイントが %d 増加した!", (mhp - p_ptr->mhp) ); } #endif /* Save the new max-hitpoints */ @@ -2939,7 +2813,6 @@ static void calc_hitpoints(void) /* Display hitpoints (later) */ p_ptr->redraw |= (PR_HP); - /* Window stuff */ p_ptr->window |= (PW_PLAYER); } } @@ -2954,7 +2827,7 @@ static void calc_torch(void) { int i, rad; object_type *o_ptr; - u32b flgs[TR_FLAG_SIZE]; + BIT_FLAGS flgs[TR_FLAG_SIZE]; /* Assume no light */ p_ptr->cur_lite = 0; @@ -2977,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 */ @@ -2990,7 +2861,7 @@ static void calc_torch(void) if (have_flag(flgs, TR_LITE_M1)) rad -= 1; if (have_flag(flgs, TR_LITE_M2)) rad -= 2; if (have_flag(flgs, TR_LITE_M3)) rad -= 3; - p_ptr->cur_lite += rad; + p_ptr->cur_lite += (s16b)rad; } /* max radius is 14 (was 5) without rewriting other code -- */ @@ -3012,7 +2883,6 @@ static void calc_torch(void) /* Notice changes in the "lite radius" */ if (p_ptr->old_lite != p_ptr->cur_lite) { - /* Update stuff */ /* Hack -- PU_MON_LITE for monsters' darkness */ p_ptr->update |= (PU_LITE | PU_MON_LITE | PU_MONSTERS); @@ -3030,12 +2900,12 @@ static void calc_torch(void) * Computes current weight limit. * @return 制限重量(ポンド) */ -u32b weight_limit(void) +WEIGHT weight_limit(void) { - u32b i; + WEIGHT i; /* Weight limit based only on strength */ - i = (u32b)adj_str_wgt[p_ptr->stat_ind[A_STR]] * 50; /* Constant was 100 */ + i = (WEIGHT)adj_str_wgt[p_ptr->stat_ind[A_STR]] * 50; /* Constant was 100 */ if (p_ptr->pclass == CLASS_BERSERKER) i = i * 3 / 2; /* Return the result */ @@ -3112,9 +2982,9 @@ s16b calc_num_fire(object_type *o_ptr) int extra_shots = 0; int i; int num = 0; - int tval_ammo = bow_tval_ammo(o_ptr); + OBJECT_TYPE_VALUE tval_ammo = bow_tval_ammo(o_ptr); object_type *q_ptr; - u32b flgs[TR_FLAG_SIZE]; + BIT_FLAGS flgs[TR_FLAG_SIZE]; /* Scan the usable inventory */ for (i = INVEN_RARM; i < INVEN_TOTAL; i++) @@ -3180,7 +3050,7 @@ s16b calc_num_fire(object_type *o_ptr) num += (p_ptr->lev * 4); } } - return num; + return (s16b)num; } /*! @@ -3215,7 +3085,7 @@ void calc_bonuses(void) int empty_hands_status = empty_hands(TRUE); int extra_blows[2]; object_type *o_ptr; - u32b flgs[TR_FLAG_SIZE]; + BIT_FLAGS flgs[TR_FLAG_SIZE]; bool omoi = FALSE; bool yoiyami = FALSE; bool down_saving = FALSE; @@ -3225,7 +3095,7 @@ void calc_bonuses(void) bool have_sw = FALSE, have_kabe = FALSE; bool easy_2weapon = FALSE; bool riding_levitation = FALSE; - s16b this_o_idx, next_o_idx = 0; + OBJECT_IDX this_o_idx, next_o_idx = 0; const player_race *tmp_rp_ptr; /* Save the old vision stuff */ @@ -3246,15 +3116,15 @@ void calc_bonuses(void) bool old_mighty_throw = p_ptr->mighty_throw; /* Save the old armor class */ - bool old_dis_ac = p_ptr->dis_ac; - bool old_dis_to_a = p_ptr->dis_to_a; + s16b old_dis_ac = p_ptr->dis_ac; + s16b 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 */ @@ -3919,7 +3789,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]); @@ -4205,7 +4075,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, '.')) { @@ -4358,25 +4228,25 @@ void calc_bonuses(void) /* To Bow and Natural attack */ /* Apply the bonuses to hit/damage */ - p_ptr->to_h_b += bonus_to_h; - p_ptr->to_h_m += bonus_to_h; - p_ptr->to_d_m += bonus_to_d; + p_ptr->to_h_b += (s16b)bonus_to_h; + p_ptr->to_h_m += (s16b)bonus_to_h; + p_ptr->to_d_m += (s16b)bonus_to_d; /* Apply the mental bonuses tp hit/damage, if known */ - if (object_is_known(o_ptr)) p_ptr->dis_to_h_b += bonus_to_h; + if (object_is_known(o_ptr)) p_ptr->dis_to_h_b += (s16b)bonus_to_h; /* To Melee */ if ((i == INVEN_LEFT || i == INVEN_RIGHT) && !p_ptr->ryoute) { /* Apply the bonuses to hit/damage */ - p_ptr->to_h[i-INVEN_RIGHT] += bonus_to_h; - p_ptr->to_d[i-INVEN_RIGHT] += bonus_to_d; + p_ptr->to_h[i-INVEN_RIGHT] += (s16b)bonus_to_h; + p_ptr->to_d[i-INVEN_RIGHT] += (s16b)bonus_to_d; /* Apply the mental bonuses tp hit/damage, if known */ if (object_is_known(o_ptr)) { - p_ptr->dis_to_h[i-INVEN_RIGHT] += bonus_to_h; - p_ptr->dis_to_d[i-INVEN_RIGHT] += bonus_to_d; + p_ptr->dis_to_h[i-INVEN_RIGHT] += (s16b)bonus_to_h; + p_ptr->dis_to_d[i-INVEN_RIGHT] += (s16b)bonus_to_d; } } else if (p_ptr->migite && p_ptr->hidarite) @@ -4399,14 +4269,14 @@ void calc_bonuses(void) else { /* Apply the bonuses to hit/damage */ - p_ptr->to_h[default_hand] += bonus_to_h; - p_ptr->to_d[default_hand] += bonus_to_d; + p_ptr->to_h[default_hand] += (s16b)bonus_to_h; + p_ptr->to_d[default_hand] += (s16b)bonus_to_d; /* Apply the mental bonuses to hit/damage, if known */ if (object_is_known(o_ptr)) { - p_ptr->dis_to_h[default_hand] += bonus_to_h; - p_ptr->dis_to_d[default_hand] += bonus_to_d; + p_ptr->dis_to_h[default_hand] += (s16b)bonus_to_h; + p_ptr->dis_to_d[default_hand] += (s16b)bonus_to_d; } } } @@ -4480,7 +4350,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; @@ -4499,7 +4369,7 @@ void calc_bonuses(void) /* Hex bonuses */ if (p_ptr->realm1 == REALM_HEX) { - if (hex_spelling_any()) p_ptr->skill_stl -= (1 + p_ptr->magic_num2[0]); + if (hex_spelling_any()) p_ptr->skill_stl -= (1 + CASTING_HEX_NUM(p_ptr)); if (hex_spelling(HEX_DETECT_EVIL)) p_ptr->esp_evil = TRUE; if (hex_spelling(HEX_XTRA_MIGHT)) p_ptr->stat_add[A_STR] += 4; if (hex_spelling(HEX_BUILDING)) @@ -4526,7 +4396,7 @@ void calc_bonuses(void) } for (i = INVEN_RARM; i <= INVEN_FEET; i++) { - int ac = 0; + ARMOUR_CLASS ac = 0; o_ptr = &inventory[i]; if (!o_ptr->k_idx) continue; if (!object_is_armour(o_ptr)) continue; @@ -4534,13 +4404,13 @@ void calc_bonuses(void) ac += 5; if (o_ptr->curse_flags & TRC_HEAVY_CURSE) ac += 7; if (o_ptr->curse_flags & TRC_PERMA_CURSE) ac += 13; - p_ptr->to_a += ac; - p_ptr->dis_to_a += ac; + p_ptr->to_a += (s16b)ac; + p_ptr->dis_to_a += (s16b)ac; } } /* Calculate stats */ - for (i = 0; i < 6; i++) + for (i = 0; i < A_MAX; i++) { int top, use, ind; @@ -4551,12 +4421,11 @@ void calc_bonuses(void) if (p_ptr->stat_top[i] != top) { /* Save the new value */ - p_ptr->stat_top[i] = top; + p_ptr->stat_top[i] = (s16b)top; /* Redisplay the stats later */ p_ptr->redraw |= (PR_STATS); - /* Window stuff */ p_ptr->window |= (PW_PLAYER); } @@ -4577,12 +4446,11 @@ void calc_bonuses(void) if (p_ptr->stat_use[i] != use) { /* Save the new value */ - p_ptr->stat_use[i] = use; + p_ptr->stat_use[i] = (s16b)use; /* Redisplay the stats later */ p_ptr->redraw |= (PR_STATS); - /* Window stuff */ p_ptr->window |= (PW_PLAYER); } @@ -4600,7 +4468,7 @@ void calc_bonuses(void) if (p_ptr->stat_ind[i] != ind) { /* Save the new index */ - p_ptr->stat_ind[i] = ind; + p_ptr->stat_ind[i] = (s16b)ind; /* Change in CON affects Hitpoints */ if (i == A_CON) @@ -4635,7 +4503,6 @@ void calc_bonuses(void) } } - /* Window stuff */ p_ptr->window |= (PW_PLAYER); } } @@ -4892,10 +4759,10 @@ void calc_bonuses(void) } if (inventory[INVEN_RARM].tval == TV_POLEARM) penalty1 += 10; if (inventory[INVEN_LARM].tval == TV_POLEARM) penalty2 += 10; - p_ptr->to_h[0] -= penalty1; - p_ptr->to_h[1] -= penalty2; - p_ptr->dis_to_h[0] -= penalty1; - p_ptr->dis_to_h[1] -= penalty2; + p_ptr->to_h[0] -= (s16b)penalty1; + p_ptr->to_h[1] -= (s16b)penalty2; + p_ptr->dis_to_h[0] -= (s16b)penalty1; + p_ptr->dis_to_h[1] -= (s16b)penalty2; } /* Extract the current weight (in tenth pounds) */ @@ -4910,7 +4777,7 @@ void calc_bonuses(void) { monster_type *riding_m_ptr = &m_list[p_ptr->riding]; monster_race *riding_r_ptr = &r_info[riding_m_ptr->r_idx]; - int speed = riding_m_ptr->mspeed; + SPEED speed = riding_m_ptr->mspeed; if (riding_m_ptr->mspeed > 110) { @@ -4936,7 +4803,7 @@ void calc_bonuses(void) i = 1500 + riding_r_ptr->level * 25; } - /* XXX XXX XXX Apply "encumbrance" from weight */ + /* Apply "encumbrance" from weight */ if (j > i) new_speed -= ((j - i) / (i / 5)); /* Searching slows the player down */ @@ -4987,7 +4854,7 @@ void calc_bonuses(void) /* Compute "extra shots" if needed */ if (o_ptr->k_idx) { - p_ptr->tval_ammo = bow_tval_ammo(o_ptr); + p_ptr->tval_ammo = (byte_hack)bow_tval_ammo(o_ptr); /* Apply special flags */ if (o_ptr->k_idx && !p_ptr->heavy_shoot) @@ -5005,8 +4872,7 @@ void calc_bonuses(void) } } - if (p_ptr->ryoute) - hold *= 2; + if (p_ptr->ryoute) hold *= 2; for(i = 0 ; i < 2 ; i++) { @@ -5020,7 +4886,11 @@ void calc_bonuses(void) p_ptr->icky_wield[i] = FALSE; p_ptr->riding_wield[i] = FALSE; - if (!buki_motteruka(INVEN_RARM+i)) {p_ptr->num_blow[i]=1;continue;} + if (!buki_motteruka(INVEN_RARM+i)) + { + p_ptr->num_blow[i] = 1; + continue; + } /* It is hard to hold a heavy weapon */ if (hold < o_ptr->weight / 10) { @@ -5165,10 +5035,10 @@ void calc_bonuses(void) p_ptr->num_blow[i] = blows_table[str_index][dex_index]; /* Maximal value */ - if (p_ptr->num_blow[i] > num) p_ptr->num_blow[i] = num; + if (p_ptr->num_blow[i] > num) p_ptr->num_blow[i] = (s16b)num; /* Add in the "bonus blows" */ - p_ptr->num_blow[i] += extra_blows[i]; + p_ptr->num_blow[i] += (s16b)extra_blows[i]; if (p_ptr->pclass == CLASS_WARRIOR) p_ptr->num_blow[i] += (p_ptr->lev / 40); @@ -5284,8 +5154,8 @@ void calc_bonuses(void) penalty += 30; if (penalty < 30) penalty = 30; } - p_ptr->to_h[i] -= penalty; - p_ptr->dis_to_h[i] -= penalty; + p_ptr->to_h[i] -= (s16b)penalty; + p_ptr->dis_to_h[i] -= (s16b)penalty; /* Riding weapon */ p_ptr->riding_wield[i] = TRUE; @@ -5324,8 +5194,8 @@ void calc_bonuses(void) if (penalty < 30) penalty = 30; } if (p_ptr->tval_ammo == TV_BOLT) penalty *= 2; - p_ptr->to_h_b -= penalty; - p_ptr->dis_to_h_b -= penalty; + p_ptr->to_h_b -= (s16b)penalty; + p_ptr->dis_to_h_b -= (s16b)penalty; } /* Different calculation for monks with empty hands */ @@ -5341,10 +5211,10 @@ void calc_bonuses(void) if (blow_base > 31) p_ptr->num_blow[0]++; if (blow_base > 44) p_ptr->num_blow[0]++; if (blow_base > 58) p_ptr->num_blow[0]++; - if (p_ptr->magic_num1[0]) + if (P_PTR_KI) { - p_ptr->to_d[0] += (p_ptr->magic_num1[0]/5); - p_ptr->dis_to_d[0] += (p_ptr->magic_num1[0]/5); + p_ptr->to_d[0] += P_PTR_KI / 5; + p_ptr->dis_to_d[0] += P_PTR_KI / 5; } } else @@ -5425,8 +5295,8 @@ void calc_bonuses(void) { if (buki_motteruka(INVEN_RARM+i)) { - int tval = inventory[INVEN_RARM+i].tval - TV_WEAPON_BEGIN; - int sval = inventory[INVEN_RARM+i].sval; + OBJECT_TYPE_VALUE tval = inventory[INVEN_RARM+i].tval - TV_WEAPON_BEGIN; + OBJECT_SUBTYPE_VALUE sval = inventory[INVEN_RARM+i].sval; p_ptr->to_h[i] += (p_ptr->weapon_exp[tval][sval] - WEAPON_EXP_BEGINNER) / 200; p_ptr->dis_to_h[i] += (p_ptr->weapon_exp[tval][sval] - WEAPON_EXP_BEGINNER) / 200; @@ -5483,14 +5353,10 @@ void calc_bonuses(void) /* Redraw armor (if needed) */ if ((p_ptr->dis_ac != old_dis_ac) || (p_ptr->dis_to_a != old_dis_to_a)) { - /* Redraw */ p_ptr->redraw |= (PR_ARMOR); - - /* Window stuff */ p_ptr->window |= (PW_PLAYER); } - if (p_ptr->ryoute && !omoi) { int bonus_to_h=0, bonus_to_d=0; @@ -5622,7 +5488,6 @@ void calc_bonuses(void) /* Take note when "heavy bow" changes */ if (p_ptr->old_heavy_shoot != p_ptr->heavy_shoot) { - /* Message */ if (p_ptr->heavy_shoot) { msg_print(_("こんな重い弓を装備しているのは大変だ。", "You have trouble wielding such a heavy bow.")); @@ -5645,7 +5510,6 @@ void calc_bonuses(void) /* Take note when "heavy weapon" changes */ if (p_ptr->old_heavy_wield[i] != p_ptr->heavy_wield[i]) { - /* Message */ if (p_ptr->heavy_wield[i]) { msg_print(_("こんな重い武器を装備しているのは大変だ。", "You have trouble wielding such a heavy weapon.")); @@ -5670,7 +5534,6 @@ void calc_bonuses(void) /* Take note when "heavy weapon" changes */ if (p_ptr->old_riding_wield[i] != p_ptr->riding_wield[i]) { - /* Message */ if (p_ptr->riding_wield[i]) { msg_print(_("この武器は乗馬中に使うにはむかないようだ。", "This weapon is not suitable for use while riding.")); @@ -5690,11 +5553,10 @@ void calc_bonuses(void) /* Take note when "illegal weapon" changes */ if (p_ptr->old_icky_wield[i] != p_ptr->icky_wield[i]) { - /* Message */ if (p_ptr->icky_wield[i]) { msg_print(_("今の装備はどうも自分にふさわしくない気がする。", "You do not feel comfortable with your weapon.")); - if (hack_mind) + if (is_loading_now) { chg_virtue(V_FAITH, -1); } @@ -5715,7 +5577,6 @@ void calc_bonuses(void) if (p_ptr->riding && (p_ptr->old_riding_ryoute != p_ptr->riding_ryoute)) { - /* Message */ if (p_ptr->riding_ryoute) { #ifdef JP @@ -5741,7 +5602,7 @@ void calc_bonuses(void) if (heavy_armor()) { msg_print(_("装備が重くてバランスを取れない。", "The weight of your armor disrupts your balance.")); - if (hack_mind) + if (is_loading_now) { chg_virtue(V_HARMONY, -1); } @@ -5763,11 +5624,9 @@ void calc_bonuses(void) if ((inventory[i].tval == TV_NATURE_BOOK) && (inventory[i].sval == 2)) have_sw = TRUE; if ((inventory[i].tval == TV_CRAFT_BOOK) && (inventory[i].sval == 2)) have_kabe = TRUE; } + for (this_o_idx = cave[p_ptr->y][p_ptr->x].o_idx; this_o_idx; this_o_idx = next_o_idx) { - object_type *o_ptr; - - /* Acquire object */ o_ptr = &o_list[this_o_idx]; /* Acquire next object */ @@ -5809,176 +5668,21 @@ void calc_bonuses(void) } - -/*! - * @brief p_ptr->notice のフラグに応じた更新をまとめて行う / Handle "p_ptr->notice" - * @return なし - * @details 更新処理の対象はアイテムの自動破壊/アイテムの結合/アイテムの並び替え。 - */ -void notice_stuff(void) -{ - /* Notice stuff */ - 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/魔法の学習状態、他多数の外界の状態判定。 - */ -void update_stuff(void) -{ - /* Update stuff */ - 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 なし * @details 更新処理の対象はゲーム中の全描画処理 */ -void redraw_stuff(void) +static void redraw_stuff(void) { - /* Redraw stuff */ if (!p_ptr->redraw) return; - /* Character is not ready yet, no screen updates */ if (!character_generated) return; - /* Character is in "icky" mode, no screen updates */ if (character_icky) return; - - /* Hack -- clear the screen */ if (p_ptr->redraw & (PR_WIPE)) { @@ -5987,14 +5691,12 @@ void redraw_stuff(void) Term_clear(); } - if (p_ptr->redraw & (PR_MAP)) { p_ptr->redraw &= ~(PR_MAP); prt_map(); } - if (p_ptr->redraw & (PR_BASIC)) { p_ptr->redraw &= ~(PR_BASIC); @@ -6018,7 +5720,6 @@ void redraw_stuff(void) p_ptr->redraw &= ~(PR_MISC); prt_field(rp_ptr->title, ROW_RACE, COL_RACE); /* prt_field(cp_ptr->title, ROW_CLASS, COL_CLASS); */ - } if (p_ptr->redraw & (PR_TITLE)) @@ -6098,7 +5799,6 @@ void redraw_stuff(void) health_redraw(TRUE); } - if (p_ptr->redraw & (PR_EXTRA)) { p_ptr->redraw &= ~(PR_EXTRA); @@ -6153,18 +5853,15 @@ void redraw_stuff(void) } } - /*! * @brief p_ptr->window のフラグに応じた更新をまとめて行う / Handle "p_ptr->window" * @return なし * @details 更新処理の対象はサブウィンドウ全般 */ -void window_stuff(void) +static void window_stuff(void) { int j; - - u32b mask = 0L; - + BIT_FLAGS mask = 0L; /* Nothing to do */ if (!p_ptr->window) return; @@ -6182,7 +5879,6 @@ void window_stuff(void) /* Nothing to do */ if (!p_ptr->window) return; - /* Display inventory */ if (p_ptr->window & (PW_INVEN)) { @@ -6262,24 +5958,155 @@ void window_stuff(void) */ void handle_stuff(void) { - /* Update stuff */ - if (p_ptr->update) update_stuff(); - - /* Redraw stuff */ + if (p_ptr->update) update_creature(p_ptr); if (p_ptr->redraw) redraw_stuff(); + if (p_ptr->window) window_stuff(); +} - /* 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 開いている手のビットフラグ */ -s16b empty_hands(bool riding_control) +BIT_FLAGS16 empty_hands(bool riding_control) { - s16b status = EMPTY_HAND_NONE; + BIT_FLAGS16 status = EMPTY_HAND_NONE; if (!inventory[INVEN_RARM].k_idx) status |= EMPTY_HAND_RARM; if (!inventory[INVEN_LARM].k_idx) status |= EMPTY_HAND_LARM; @@ -6300,7 +6127,7 @@ s16b empty_hands(bool riding_control) */ bool heavy_armor(void) { - u16b monk_arm_wgt = 0; + WEIGHT monk_arm_wgt = 0; if ((p_ptr->pclass != CLASS_MONK) && (p_ptr->pclass != CLASS_FORCETRAINER) && (p_ptr->pclass != CLASS_NINJA)) return FALSE; @@ -6324,7 +6151,7 @@ void update_playtime(void) /* Check if the game has started */ if (start_time != 0) { - u32b tmp = time(NULL); + u32b tmp = (u32b)time(NULL); playtime += (tmp - start_time); start_time = tmp; }