*/
#include "angband.h"
+#include "world.h"
+#include "quest.h"
+#include "artifact.h"
+#include "avatar.h"
/*!
* @brief 現在の修正後能力値を3~17及び18/xxx形式に変換する / Converts stat num into a six-char (right justified) string
* @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);
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
* @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))
*/
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);
#define BAR_ESP_EVIL 66 /*!< 下部ステータス表示: 邪悪感知 */
static struct {
- byte attr;
- cptr sstr;
- cptr lstr;
+ TERM_COLOR attr;
+ concptr sstr;
+ concptr lstr;
} bar[]
#ifdef JP
= {
*/
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);
{
if (IS_FLG(i))
{
- cptr str;
+ concptr str;
if (space == 2) str = bar[i].lstr;
else str = bar[i].sstr;
*/
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***");
}
}
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
-
}
}
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
{
}
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
-
}
}
*/
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);
/* 現在のヒットポイント */
if (!mp_ptr->spell_book) return;
/* タイトル */
-/* put_str(" MP / 最大", ROW_MAXSP, COL_MAXSP); */
put_str(_("MP", "SP"), ROW_CURSP, COL_CURSP);
/* 現在のマジックポイント */
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;
*/
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)
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;
*/
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;
*/
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;
{
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);
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;
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();
/* Display inventory */
display_inven();
-
- /* Fresh */
Term_fresh();
/* Restore */
* @return なし
* </pre>
*/
-static void print_monster_line(TERM_POSITION x, TERM_POSITION 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;
MONRACE_IDX r_idx = m_ptr->ap_r_idx;
* @param y 表示行
* @param max_lines 最大何行描画するか
*/
-void print_monster_list(TERM_POSITION x, TERM_POSITION y, TERM_POSITION max_lines){
- TERM_POSITION 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;
/*
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;
target_set_prepare_look();//モンスター一覧を生成,ソート
print_monster_list(0, 0, h);
-
- /* Fresh */
Term_fresh();
/* Restore */
/* Display equipment */
display_equip();
-
- /* Fresh */
Term_fresh();
/* Restore */
/* Display spell list */
display_spell_list();
-
- /* Fresh */
Term_fresh();
/* Restore */
Term_activate(angband_term[j]);
update_playtime();
-
- /* Display player */
display_player(0);
-
- /* Fresh */
Term_fresh();
/* Restore */
/*!
* @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;
- TERM_POSITION w, h;
- TERM_POSITION x, y;
+ TERM_LEN w, h;
+ TERM_LEN x, y;
/* Scan windows */
for (j = 0; j < 8; j++)
/* Activate */
Term_activate(angband_term[j]);
- /* Get size */
Term_get_size(&w, &h);
/* Dump messages */
/* Clear to end of line */
Term_erase(x, y, 255);
}
-
- /* Fresh */
Term_fresh();
/* Restore */
/*!
* @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.
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;
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();
}
/* Redraw dungeon view */
display_dungeon();
-
- /* Fresh */
Term_fresh();
/* Restore */
/* Display monster race info */
if (p_ptr->monster_race_idx) display_roff(p_ptr->monster_race_idx);
-
- /* Fresh */
Term_fresh();
/* Restore */
/* Display monster race info */
if (p_ptr->object_kind_idx) display_koff(p_ptr->object_kind_idx);
-
- /* Fresh */
Term_fresh();
/* Restore */
int bonus = 0;
- cptr p;
+ concptr p;
/* Hack -- must be literate */
if (!mp_ptr->spell_book) return;
which = p_ptr->realm2;
}
- /* Message */
#ifdef JP
msg_format("%sの%sを忘れてしまった。", do_spell(which, j%32, SPELL_NAME), p );
#else
which = p_ptr->realm2;
}
- /* Message */
#ifdef JP
msg_format("%sの%sを忘れてしまった。",
do_spell(which, j%32, SPELL_NAME), p );
which = p_ptr->realm2;
}
- /* Message */
#ifdef JP
msg_format("%sの%sを思い出した。", do_spell(which, j%32, SPELL_NAME), p );
#else
/* 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);
/* 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;
/* Display mana later */
p_ptr->redraw |= (PR_MANA);
- /* Window stuff */
p_ptr->window |= (PW_PLAYER);
p_ptr->window |= (PW_SPELL);
}
/* 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."));
/* 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."));
/* Display hitpoints (later) */
p_ptr->redraw |= (PR_HP);
- /* Window stuff */
p_ptr->window |= (PW_PLAYER);
}
}
{
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;
if((o_ptr->sval == SV_LITE_LANTERN) && !(o_ptr->xtra4 > 0)) continue;
}
}
-
- /* Extract the flags */
object_flags(o_ptr, flgs);
/* calc the lite_radius */
/* 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);
int num = 0;
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++)
*/
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;
- u32b flgs[TR_FLAG_SIZE];
- bool omoi = FALSE;
- bool yoiyami = FALSE;
- bool down_saving = FALSE;
+ 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;
#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;
- s16b this_o_idx, next_o_idx = 0;
+ 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;
/* Save the old vision stuff */
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 */
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;
p_ptr->resist_pois = TRUE;
p_ptr->hold_exp = TRUE;
break;
+ case RACE_MERFOLK:
+ p_ptr->resist_water = TRUE;
+ break;
default:
/* Do nothing */
;
/* 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;
/* 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]);
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, '.'))
{
}
}
+ /* Shield skill bonus */
+ if (object_is_armour(&inventory[INVEN_RARM]) || object_is_armour(&inventory[INVEN_LARM]))
+ {
+ p_ptr->ac += p_ptr->skill_exp[GINOU_SHIELD] * (1 + p_ptr->lev / 22) / 2000;
+ p_ptr->dis_ac += p_ptr->skill_exp[GINOU_SHIELD] * (1 + p_ptr->lev / 22) / 2000;
+ }
+
if (old_mighty_throw != p_ptr->mighty_throw)
{
/* Redraw average damege display of Shuriken */
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;
}
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;
}
/* Calculate stats */
- for (i = 0; i < 6; i++)
+ for (i = 0; i < A_MAX; i++)
{
int top, use, ind;
/* Redisplay the stats later */
p_ptr->redraw |= (PR_STATS);
- /* Window stuff */
p_ptr->window |= (PW_PLAYER);
}
/* Redisplay the stats later */
p_ptr->redraw |= (PR_STATS);
- /* Window stuff */
p_ptr->window |= (PW_PLAYER);
}
}
}
- /* Window stuff */
p_ptr->window |= (PW_PLAYER);
}
}
{
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)
{
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 */
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);
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)
{
/* 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;
/* 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."));
/* 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."));
/* 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."));
/* 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 (p_ptr->riding && (p_ptr->old_riding_ryoute != p_ptr->riding_ryoute))
{
- /* Message */
if (p_ptr->riding_ryoute)
{
#ifdef JP
for (this_o_idx = cave[p_ptr->y][p_ptr->x].o_idx; this_o_idx; this_o_idx = next_o_idx)
{
- /* Acquire object */
o_ptr = &o_list[this_o_idx];
/* Acquire next object */
}
-
-/*!
- * @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))
{
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);
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))
health_redraw(TRUE);
}
-
if (p_ptr->redraw & (PR_EXTRA))
{
p_ptr->redraw &= ~(PR_EXTRA);
}
}
-
/*!
* @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;
/* Nothing to do */
if (!p_ptr->window) return;
-
/* Display inventory */
if (p_ptr->window & (PW_INVEN))
{
*/
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;