OSDN Git Service

[Refactor] #37353 avatar.h 追加。 / Add avatar.h.
[hengband/hengband.git] / src / xtra1.c
index c41e0ef..8258695 100644 (file)
@@ -12,6 +12,9 @@
 
 #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
@@ -110,7 +113,7 @@ s16b modify_stat_value(int value, int amount)
  * @param col 描画行
  * @return なし
  */
-static void prt_field(cptr info, TERM_LEN row, TERM_LEN 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);
@@ -144,7 +147,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))
@@ -167,7 +170,7 @@ cptr map_name(void)
  */
 static void prt_dungeon(void)
 {
-       cptr dungeon_name;
+       concptr dungeon_name;
        TERM_LEN col;
 
        /* Dump 13 spaces to clear */
@@ -296,8 +299,8 @@ static void prt_stat(int stat)
 
 static struct {
        TERM_COLOR attr;
-       cptr sstr;
-       cptr lstr;
+       concptr sstr;
+       concptr lstr;
 } bar[]
 #ifdef JP
 = {
@@ -681,7 +684,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;
 
@@ -700,7 +703,7 @@ static void prt_status(void)
  */
 static void prt_title(void)
 {
-       cptr p = "";
+       concptr p = "";
        GAME_TEXT str[14];
 
        if (p_ptr->wizard)
@@ -1702,8 +1705,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;
@@ -2089,7 +2092,7 @@ static void calc_spells(void)
        int bonus = 0;
 
 
-       cptr p;
+       concptr p;
 
        /* Hack -- must be literate */
        if (!mp_ptr->spell_book) return;
@@ -3079,22 +3082,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;
 
@@ -3115,9 +3118,12 @@ 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 */
@@ -3216,6 +3222,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;
@@ -3696,6 +3703,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 */
                        ;
@@ -3763,10 +3773,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;
 
@@ -4075,7 +4092,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, '.'))
                                {
@@ -4281,6 +4298,13 @@ void calc_bonuses(void)
                }
        }
 
+       /* 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 */
@@ -4809,6 +4833,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);