OSDN Git Service

#37287 #37353 (2.2.0.89) PET_COMMAND_IDX, FF_FLAGS_IDX型を定義し、型の置換を継続中。 / Define PET_CO...
[hengband/hengband.git] / src / xtra2.c
index 48a9f77..1f54bd4 100644 (file)
@@ -27,7 +27,7 @@ void check_experience(void)
        bool level_mutation = FALSE;
        bool level_inc_stat = FALSE;
        bool android = (p_ptr->prace == RACE_ANDROID ? TRUE : FALSE);
-       int  old_lev = p_ptr->lev;
+       PLAYER_LEVEL old_lev = p_ptr->lev;
 
        /* Hack -- lower limit */
        if (p_ptr->exp < 0) p_ptr->exp = 0;
@@ -230,17 +230,17 @@ msg_format("レベル %d にようこそ。", p_ptr->lev);
  * Used to allocate proper treasure when "Creeping coins" die
  * XXX XXX XXX Note the use of actual "monster names"
  */
-static int get_coin_type(int r_idx)
+static int get_coin_type(MONRACE_IDX r_idx)
 {
        /* Analyze monsters */
        switch (r_idx)
        {
-       case MON_COPPER_COINS: return 2;
-       case MON_SILVER_COINS: return 5;
-       case MON_GOLD_COINS: return 10;
-       case MON_MITHRIL_COINS:
-       case MON_MITHRIL_GOLEM: return 16;
-       case MON_ADAMANT_COINS: return 17;
+               case MON_COPPER_COINS: return 2;
+               case MON_SILVER_COINS: return 5;
+               case MON_GOLD_COINS: return 10;
+               case MON_MITHRIL_COINS:
+               case MON_MITHRIL_GOLEM: return 16;
+               case MON_ADAMANT_COINS: return 17;
        }
 
        /* Assume nothing */
@@ -254,7 +254,7 @@ static int get_coin_type(int r_idx)
  * @param k_idx 判定したいオブジェクトのベースアイテムID
  * @return オブジェクトがクロークならばTRUEを返す
  */
-static bool kind_is_cloak(int k_idx)
+static bool kind_is_cloak(KIND_OBJECT_IDX k_idx)
 {
        object_kind *k_ptr = &k_info[k_idx];
 
@@ -275,7 +275,7 @@ static bool kind_is_cloak(int k_idx)
  * @param k_idx 判定したいオブジェクトのベースアイテムID
  * @return オブジェクトが竿状武器ならばTRUEを返す
  */
-static bool kind_is_polearm(int k_idx)
+static bool kind_is_polearm(KIND_OBJECT_IDX k_idx)
 {
        object_kind *k_ptr = &k_info[k_idx];
 
@@ -296,7 +296,7 @@ static bool kind_is_polearm(int k_idx)
  * @param k_idx 判定したいオブジェクトのベースアイテムID
  * @return オブジェクトが剣ならばTRUEを返す
  */
-static bool kind_is_sword(int k_idx)
+static bool kind_is_sword(KIND_OBJECT_IDX k_idx)
 {
        object_kind *k_ptr = &k_info[k_idx];
 
@@ -317,7 +317,7 @@ static bool kind_is_sword(int k_idx)
  * @param k_idx 判定したいオブジェクトのベースアイテムID
  * @return オブジェクトが魔法書ならばTRUEを返す
  */
-static bool kind_is_book(int k_idx)
+static bool kind_is_book(KIND_OBJECT_IDX k_idx)
 {
        object_kind *k_ptr = &k_info[k_idx];
 
@@ -338,7 +338,7 @@ static bool kind_is_book(int k_idx)
  * @param k_idx 判定したいオブジェクトのベースアイテムID
  * @return オブジェクトがベースアイテム時点でGOODなアイテムならばTRUEを返す
  */
-static bool kind_is_good_book(int k_idx)
+static bool kind_is_good_book(KIND_OBJECT_IDX k_idx)
 {
        object_kind *k_ptr = &k_info[k_idx];
 
@@ -359,7 +359,7 @@ static bool kind_is_good_book(int k_idx)
  * @param k_idx 判定したいオブジェクトのベースアイテムID
  * @return オブジェクトが鎧ならばTRUEを返す
  */
-static bool kind_is_armor(int k_idx)
+static bool kind_is_armor(KIND_OBJECT_IDX k_idx)
 {
        object_kind *k_ptr = &k_info[k_idx];
 
@@ -380,7 +380,7 @@ static bool kind_is_armor(int k_idx)
  * @param k_idx 判定したいオブジェクトのベースアイテムID
  * @return オブジェクトが打撃武器ならばTRUEを返す
  */
-static bool kind_is_hafted(int k_idx)
+static bool kind_is_hafted(KIND_OBJECT_IDX k_idx)
 {
        object_kind *k_ptr = &k_info[k_idx];
 
@@ -420,6 +420,7 @@ void complete_quest(int quest_num)
 
        if (!(q_ptr->flags & QUEST_FLAG_SILENT))
        {
+               play_music(TERM_XTRA_MUSIC_BASIC, MUSIC_BASIC_QUEST_CLEAR);
                msg_print(_("クエストを達成した!", "You just completed your quest!"));
                msg_print(NULL);
        }
@@ -438,7 +439,7 @@ static int count_all_hostile_monsters(void)
        {
                for (y = 0; y < cur_hgt; ++ y)
                {
-                       int m_idx = cave[y][x].m_idx;
+                       MONSTER_IDX m_idx = cave[y][x].m_idx;
 
                        if (m_idx > 0 && is_hostile(&m_list[m_idx]))
                        {
@@ -458,7 +459,7 @@ static int count_all_hostile_monsters(void)
  */
 void check_quest_completion(monster_type *m_ptr)
 {
-       int y, x;
+       POSITION y, x;
 
        int quest_num;
 
@@ -466,7 +467,7 @@ void check_quest_completion(monster_type *m_ptr)
        bool reward = FALSE;
 
        object_type forge;
-       object_type *q_ptr;
+       object_type *o_ptr;
 
        /* Get the location */
        y = m_ptr->fy;
@@ -623,7 +624,7 @@ void check_quest_completion(monster_type *m_ptr)
        /* Create a magical staircase */
        if (create_stairs)
        {
-               int ny, nx;
+               POSITION ny, nx;
 
                /* Stagger around */
                while (cave_perma_bold(y, x) || cave[y][x].o_idx || (cave[y][x].info & CAVE_OBJECT) )
@@ -655,16 +656,16 @@ void check_quest_completion(monster_type *m_ptr)
                for (i = 0; i < (dun_level / 15)+1; i++)
                {
                        /* Get local object */
-                       q_ptr = &forge;
+                       o_ptr = &forge;
 
                        /* Wipe the object */
-                       object_wipe(q_ptr);
+                       object_wipe(o_ptr);
 
                        /* Make a great object */
-                       make_object(q_ptr, AM_GOOD | AM_GREAT);
+                       make_object(o_ptr, AM_GOOD | AM_GREAT);
 
                        /* Drop it in the dungeon */
-                       (void)drop_near(q_ptr, -1, y, x);
+                       (void)drop_near(o_ptr, -1, y, x);
                }
        }
 }
@@ -736,7 +737,7 @@ cptr extract_note_dies(monster_race *r_ptr)
  * it drops all of its objects, which may disappear in crowded rooms.
  * </pre>
  */
-void monster_death(int m_idx, bool drop_item)
+void monster_death(MONSTER_IDX m_idx, bool drop_item)
 {
        int i, j, y, x;
 
@@ -791,11 +792,11 @@ void monster_death(int m_idx, bool drop_item)
        {
                if (r_ptr->blow[i].method == RBM_EXPLODE)
                {
-                       int flg = PROJECT_GRID | PROJECT_ITEM | PROJECT_KILL;
+                       BIT_FLAGS flg = PROJECT_GRID | PROJECT_ITEM | PROJECT_KILL;
                        int typ = mbe_info[r_ptr->blow[i].effect].explode_type;
-                       int d_dice = r_ptr->blow[i].d_dice;
-                       int d_side = r_ptr->blow[i].d_side;
-                       int damage = damroll(d_dice, d_side);
+                       DICE_NUMBER d_dice = r_ptr->blow[i].d_dice;
+                       DICE_SID d_side = r_ptr->blow[i].d_side;
+                       HIT_POINT damage = damroll(d_dice, d_side);
 
                        project(m_idx, 3, y, x, damage, typ, flg, -1);
                        break;
@@ -923,7 +924,7 @@ void monster_death(int m_idx, bool drop_item)
                        {
                                int wy = y, wx = x;
                                bool pet = is_pet(m_ptr);
-                               u32b mode = 0L;
+                               BIT_FLAGS mode = 0L;
 
                                if (pet) mode |= PM_FORCE_PET;
 
@@ -988,7 +989,7 @@ void monster_death(int m_idx, bool drop_item)
                {
                        if (!one_in_(7))
                        {
-                               int wy = y, wx = x;
+                               POSITION wy = y, wx = x;
                                int attempts = 100;
                                bool pet = is_pet(m_ptr);
 
@@ -1000,7 +1001,7 @@ void monster_death(int m_idx, bool drop_item)
 
                                if (attempts > 0)
                                {
-                                       u32b mode = 0L;
+                                       BIT_FLAGS mode = 0L;
                                        if (pet) mode |= PM_FORCE_PET;
 
                                        if (summon_specific((pet ? -1 : m_idx), wy, wx, 100, SUMMON_DAWN, mode))
@@ -1016,7 +1017,7 @@ void monster_death(int m_idx, bool drop_item)
        case MON_UNMAKER:
                /* One more ultra-hack: An Unmaker goes out with a big bang! */
                {
-                       int flg = PROJECT_GRID | PROJECT_ITEM | PROJECT_KILL;
+                       BIT_FLAGS flg = PROJECT_GRID | PROJECT_ITEM | PROJECT_KILL;
                        (void)project(m_idx, 6, y, x, 100, GF_CHAOS, flg, -1);
                }
                break;
@@ -1131,7 +1132,7 @@ void monster_death(int m_idx, bool drop_item)
 
        case MON_ROLENTO:
                {
-                       int flg = PROJECT_GRID | PROJECT_ITEM | PROJECT_KILL;
+                       BIT_FLAGS flg = PROJECT_GRID | PROJECT_ITEM | PROJECT_KILL;
                        (void)project(m_idx, 3, y, x, damroll(20, 10), GF_FIRE, flg, -1);
                }
                break;
@@ -1250,193 +1251,11 @@ void monster_death(int m_idx, bool drop_item)
                int a_idx = 0;
                int chance = 0;
 
-               switch (m_ptr->r_idx)
+               for(i = 0; i < 4; i++)
                {
-               case MON_OBERON:
-                       if (one_in_(3))
-                       {
-                               a_idx = ART_JUDGE;
-                               chance = 33;
-                       }
-                       else
-                       {
-                               a_idx = ART_AMBER;
-                               chance = 50;
-                       }
-                       break;
-
-               case MON_GHB:
-                       a_idx = ART_GHB;
-                       chance = 100;
-                       break;
-
-               case MON_STORMBRINGER:
-                       a_idx = ART_STORMBRINGER;
-                       chance = 100;
-                       break;
-
-               case MON_ECHIZEN:
-                       a_idx = ART_CRIMSON;
-                       chance = 50;
-                       break;
-
-               case MON_GANDALF:
-                       a_idx = ART_ICANUS;
-                       chance = 20;
-                       break;
-
-               case MON_OROCHI:
-                       a_idx = ART_KUSANAGI;
-                       chance = 25;
-                       break;
-
-               case MON_DWORKIN:
-                       a_idx = ART_JUDGE;
-                       chance = 20;
-                       break;
-
-               case MON_SAURON:
-                       if (one_in_(10))
-                       {
-                               a_idx = ART_POWER;
-                               chance = 100;
-                       }
-                       else
-                       {
-                               a_idx = ART_AHO;
-                               chance = 100;
-                       }
-                       break;
-
-               case MON_BRAND:
-                       if (!one_in_(3))
-                       {
-                               a_idx = ART_BRAND;
-                               chance = 25;
-                       }
-                       else
-                       {
-                               a_idx = ART_WEREWINDLE;
-                               chance = 33;
-                       }
-                       break;
-
-               case MON_CORWIN:
-                       if (!one_in_(3))
-                       {
-                               a_idx = ART_GRAYSWANDIR;
-                               chance = 33;
-                       }
-                       else
-                       {
-                               a_idx = ART_CORWIN;
-                               chance = 33;
-                       }
-                       break;
-
-               case MON_SURTUR:
-                       if (!one_in_(3))
-                       {
-                               a_idx = ART_TWILIGHT;
-                               chance = 100;
-                       }
-                       else
-                       {
-                               a_idx = ART_ORB_OF_FATE;
-                               chance = 100;
-                       }
-                       break;
-
-               case MON_SARUMAN:
-                       a_idx = ART_ELENDIL;
-                       chance = 33;
-                       break;
-
-               case MON_FIONA:
-                       a_idx = ART_FIONA;
-                       chance = 50;
-                       break;
-
-               case MON_JULIAN:
-                       a_idx = ART_JULIAN;
-                       chance = 45;
-                       break;
-
-               case MON_KLING:
-                       a_idx = ART_DESTINY;
-                       chance = 40;
-                       break;
-
-               case MON_GOEMON:
-                       a_idx = ART_ZANTETSU;
-                       chance = 100;
-                       break;
-
-               case MON_HAGEN:
-                       a_idx = ART_HAGEN;
-                       chance = 66;
-                       break;
-
-               case MON_CAINE:
-                       a_idx = ART_CAINE;
-                       chance = 50;
-                       break;
-
-               case MON_BULLGATES:
-                       a_idx = ART_WINBLOWS;
-                       chance = 66;
-                       break;
-
-               case MON_LUNGORTHIN:
-                       a_idx = ART_CALRIS;
-                       chance = 50;
-                       break;
-
-               case MON_JACK_SHADOWS:
-                       a_idx = ART_JACK;
-                       chance = 15;
-                       break;
-
-               case MON_DIO:
-                       a_idx = ART_STONEMASK;
-                       chance = 20;
-                       break;
-
-               case MON_BELD:
-                       a_idx = ART_SOULCRUSH;
-                       chance = 10;
-                       break;
-
-               case MON_PIP:
-                       a_idx = ART_EXCALIBUR_J;
-                       chance = 50;
-                       break;
-
-               case MON_SHUTEN:
-                       a_idx = ART_SHUTEN_DOJI;
-                       chance = 33;
-                       break;
-
-               case MON_GOTHMOG:
-                       a_idx = ART_GOTHMOG;
-                       chance = 33;
-                       break;
-
-               case MON_FUNDIN:
-                       a_idx = ART_FUNDIN;
-                       chance = 5;
-                       break;
-
-               case MON_ROBIN_HOOD:
-                       a_idx = ART_ROBIN_HOOD;
-                       chance = 5;
-                       break;
-
-               case MON_KOGAN:
-                       a_idx = ART_NANACHO;
-                       chance = 80;
-                       break;
-
+                       if(!r_ptr->artifact_id[i]) break;
+                       a_idx = r_ptr->artifact_id[i];
+                       chance = r_ptr->artifact_percent[i];
                }
 
                if ((a_idx > 0) && ((randint0(100) < chance) || p_ptr->wizard))
@@ -1459,12 +1278,12 @@ void monster_death(int m_idx, bool drop_item)
 
                if ((r_ptr->flags7 & RF7_GUARDIAN) && (d_info[dungeon_type].final_guardian == m_ptr->r_idx))
                {
-                       int k_idx = d_info[dungeon_type].final_object ? d_info[dungeon_type].final_object
+                       IDX k_idx = d_info[dungeon_type].final_object ? d_info[dungeon_type].final_object
                                : lookup_kind(TV_SCROLL, SV_SCROLL_ACQUIREMENT);
 
                        if (d_info[dungeon_type].final_artifact)
                        {
-                               int a_idx = d_info[dungeon_type].final_artifact;
+                               a_idx = d_info[dungeon_type].final_artifact;
                                artifact_type *a_ptr = &a_info[a_idx];
 
                                if (!a_ptr->cur_num)
@@ -1585,6 +1404,8 @@ void monster_death(int m_idx, bool drop_item)
                /* Redraw the "title" */
                p_ptr->redraw |= (PR_TITLE);
 
+               play_music(TERM_XTRA_MUSIC_BASIC, MUSIC_BASIC_FINAL_QUEST_CLEAR);
+
                do_cmd_write_nikki(NIKKI_BUNSHOU, 0, _("見事に変愚蛮怒の勝利者となった!", "become *WINNER* of Hengband finely!"));
 
                if ((p_ptr->pclass == CLASS_CHAOS_WARRIOR) || (p_ptr->muta2 & MUT2_CHAOS_GIFT))
@@ -1615,7 +1436,7 @@ void monster_death(int m_idx, bool drop_item)
  * "type" is not yet used and should be 0.
  * </pre>
  */
-int mon_damage_mod(monster_type *m_ptr, int dam, bool is_psy_spear)
+HIT_POINT mon_damage_mod(monster_type *m_ptr, HIT_POINT dam, bool is_psy_spear)
 {
        monster_race    *r_ptr = &r_info[m_ptr->r_idx];
 
@@ -1657,7 +1478,7 @@ int mon_damage_mod(monster_type *m_ptr, int dam, bool is_psy_spear)
  * experience point of a monster later.
  * </pre>
  */
-static void get_exp_from_mon(int dam, monster_type *m_ptr)
+static void get_exp_from_mon(HIT_POINT dam, monster_type *m_ptr)
 {
        monster_race *r_ptr = &r_info[m_ptr->r_idx];
 
@@ -1756,7 +1577,7 @@ static void get_exp_from_mon(int dam, monster_type *m_ptr)
  * to induce changes in the monster recall code.
  * </pre>
  */
-bool mon_take_hit(int m_idx, int dam, bool *fear, cptr note)
+bool mon_take_hit(MONSTER_IDX m_idx, HIT_POINT dam, bool *fear, cptr note)
 {
        monster_type    *m_ptr = &m_list[m_idx];
        monster_race    *r_ptr = &r_info[m_ptr->r_idx];
@@ -2020,7 +1841,7 @@ bool mon_take_hit(int m_idx, int dam, bool *fear, cptr note)
                        chg_virtue (V_JUSTICE, -1);
                }
 
-               if ((r_ptr->flags3 & RF3_ANIMAL) && !(r_ptr->flags3 & RF3_EVIL) && !(r_ptr->flags4 & ~(RF4_NOMAGIC_MASK))  && !(r_ptr->flags5 & ~(RF5_NOMAGIC_MASK)) && !(r_ptr->flags6 & ~(RF6_NOMAGIC_MASK)))
+               if ((r_ptr->flags3 & RF3_ANIMAL) && !(r_ptr->flags3 & RF3_EVIL) && !(r_ptr->flags4 & ~(RF4_NOMAGIC_MASK))  && !(r_ptr->a_ability_flags1 & ~(RF5_NOMAGIC_MASK)) && !(r_ptr->a_ability_flags2 & ~(RF6_NOMAGIC_MASK)))
                {
                        if (one_in_(4)) chg_virtue(V_NATURE, -1);
                }
@@ -2052,7 +1873,7 @@ bool mon_take_hit(int m_idx, int dam, bool *fear, cptr note)
                        if ((p_ptr->pseikaku == SEIKAKU_COMBAT) || (inventory[INVEN_BOW].name1 == ART_CRIMSON))
                                msg_format("せっかくだから%sを殺した。", m_name);
                        else
-msg_format("%sを殺した。", m_name);
+                               msg_format("%sを殺した。", m_name);
 #else
                                msg_format("You have killed %s.", m_name);
 #endif
@@ -2062,7 +1883,6 @@ msg_format("%sを殺した。", m_name);
                /* Death by Physical attack -- non-living monster */
                else if (!monster_living(r_ptr))
                {
-                       int i;
                        bool explode = FALSE;
 
                        for (i = 0; i < 4; i++)
@@ -2120,7 +1940,7 @@ msg_format("%sを葬り去った。", m_name);
                {
                        int dummy_y = m_ptr->fy;
                        int dummy_x = m_ptr->fx;
-                       u32b mode = 0L;
+                       BIT_FLAGS mode = 0L;
 
                        if (is_pet(m_ptr)) mode |= PM_FORCE_PET;
 
@@ -2287,7 +2107,7 @@ void resize_map(void)
         * Waiting command;
         * Place the cursor on the player
         */
-       if (can_save) move_cursor_relative(py, px);
+       if (can_save) move_cursor_relative(p_ptr->y, p_ptr->x);
 
        /* Refresh */
        Term_fresh();
@@ -2413,8 +2233,8 @@ bool change_panel_xy(int y, int x)
  */
 void verify_panel(void)
 {
-       int y = py;
-       int x = px;
+       int y = p_ptr->y;
+       int x = p_ptr->x;
        int wid, hgt;
 
        int prow_min;
@@ -2518,7 +2338,7 @@ void verify_panel(void)
 /*
  * Monster health description
  */
-cptr look_mon_desc(monster_type *m_ptr, u32b mode)
+cptr look_mon_desc(monster_type *m_ptr, BIT_FLAGS mode)
 {
        monster_race *ap_r_ptr = &r_info[m_ptr->ap_r_idx];
        bool         living;
@@ -2710,7 +2530,7 @@ void ang_sort(vptr u, vptr v, int n)
  * Future versions may restrict the ability to target "trappers"
  * and "mimics", but the semantics is a little bit weird.
  */
-bool target_able(int m_idx)
+bool target_able(MONSTER_IDX m_idx)
 {
        monster_type *m_ptr = &m_list[m_idx];
 
@@ -2726,7 +2546,7 @@ bool target_able(int m_idx)
        if (p_ptr->riding && (p_ptr->riding == m_idx)) return (TRUE);
 
        /* Monster must be projectable */
-       if (!projectable(py, px, m_ptr->fy, m_ptr->fx)) return (FALSE);
+       if (!projectable(p_ptr->y, p_ptr->x, m_ptr->fy, m_ptr->fx)) return (FALSE);
 
        /* XXX XXX XXX Hack -- Never target trappers */
        /* if (CLEAR_ATTR && (CLEAR_CHAR)) return (FALSE); */
@@ -2778,21 +2598,21 @@ bool target_okay(void)
  */
 static bool ang_sort_comp_distance(vptr u, vptr v, int a, int b)
 {
-       byte *x = (byte*)(u);
-       byte *y = (byte*)(v);
+       POSITION *x = (POSITION*)(u);
+       POSITION *y = (POSITION*)(v);
 
-       int da, db, kx, ky;
+       POSITION da, db, kx, ky;
 
        /* Absolute distance components */
-       kx = x[a]; kx -= px; kx = ABS(kx);
-       ky = y[a]; ky -= py; ky = ABS(ky);
+       kx = x[a]; kx -= p_ptr->x; kx = ABS(kx);
+       ky = y[a]; ky -= p_ptr->y; ky = ABS(ky);
 
        /* Approximate Double Distance to the first point */
        da = ((kx > ky) ? (kx + kx + ky) : (ky + ky + kx));
 
        /* Absolute distance components */
-       kx = x[b]; kx -= px; kx = ABS(kx);
-       ky = y[b]; ky -= py; ky = ABS(ky);
+       kx = x[b]; kx -= p_ptr->x; kx = ABS(kx);
+       ky = y[b]; ky -= p_ptr->y; ky = ABS(ky);
 
        /* Approximate Double Distance to the first point */
        db = ((kx > ky) ? (kx + kx + ky) : (ky + ky + kx));
@@ -2810,8 +2630,8 @@ static bool ang_sort_comp_distance(vptr u, vptr v, int a, int b)
  */
 static bool ang_sort_comp_importance(vptr u, vptr v, int a, int b)
 {
-       byte *x = (byte*)(u);
-       byte *y = (byte*)(v);
+       POSITION *x = (POSITION*)(u);
+       POSITION *y = (POSITION*)(v);
        cave_type *ca_ptr = &cave[y[a]][x[a]];
        cave_type *cb_ptr = &cave[y[b]][x[b]];
        monster_type *ma_ptr = &m_list[ca_ptr->m_idx];
@@ -2819,8 +2639,8 @@ static bool ang_sort_comp_importance(vptr u, vptr v, int a, int b)
        monster_race *ap_ra_ptr, *ap_rb_ptr;
 
        /* The player grid */
-       if (y[a] == py && x[a] == px) return TRUE;
-       if (y[b] == py && x[b] == px) return FALSE;
+       if (y[a] == p_ptr->y && x[a] == p_ptr->x) return TRUE;
+       if (y[b] == p_ptr->y && x[b] == p_ptr->x) return FALSE;
 
        /* Extract monster race */
        if (ca_ptr->m_idx && ma_ptr->ml) ap_ra_ptr = &r_info[ma_ptr->ap_r_idx];
@@ -2879,10 +2699,10 @@ static bool ang_sort_comp_importance(vptr u, vptr v, int a, int b)
  */
 static void ang_sort_swap_distance(vptr u, vptr v, int a, int b)
 {
-       byte *x = (byte*)(u);
-       byte *y = (byte*)(v);
+       POSITION *x = (POSITION*)(u);
+       POSITION *y = (POSITION*)(v);
 
-       byte temp;
+       POSITION temp;
 
        /* Swap "x" */
        temp = x[a];
@@ -2900,13 +2720,11 @@ static void ang_sort_swap_distance(vptr u, vptr v, int a, int b)
 /*
  * Hack -- help "select" a location (see below)
  */
-static s16b target_pick(int y1, int x1, int dy, int dx)
+static POSITION_IDX target_pick(POSITION y1, POSITION x1, POSITION dy, POSITION dx)
 {
-       int i, v;
-
-       int x2, y2, x3, y3, x4, y4;
-
-       int b_i = -1, b_v = 9999;
+       POSITION_IDX i, v;
+       POSITION x2, y2, x3, y3, x4, y4;
+       POSITION_IDX b_i = -1, b_v = 9999;
 
 
        /* Scan the locations */
@@ -3016,7 +2834,7 @@ static bool target_set_accept(int y, int x)
  *
  * Return the number of target_able monsters in the set.
  */
-static void target_set_prepare(int mode)
+static void target_set_prepare(BIT_FLAGS mode)
 {
        int y, x;
        int min_hgt, max_hgt, min_wid, max_wid;
@@ -3024,10 +2842,10 @@ static void target_set_prepare(int mode)
        if (mode & TARGET_KILL)
        {
                /* Inner range */
-               min_hgt = MAX((py - MAX_RANGE), 0);
-               max_hgt = MIN((py + MAX_RANGE), cur_hgt - 1);
-               min_wid = MAX((px - MAX_RANGE), 0);
-               max_wid = MIN((px + MAX_RANGE), cur_wid - 1);
+               min_hgt = MAX((p_ptr->y - MAX_RANGE), 0);
+               max_hgt = MIN((p_ptr->y + MAX_RANGE), cur_hgt - 1);
+               min_wid = MAX((p_ptr->x - MAX_RANGE), 0);
+               max_wid = MIN((p_ptr->x + MAX_RANGE), cur_wid - 1);
        }
        else /* not targetting */
        {
@@ -3084,7 +2902,7 @@ static void target_set_prepare(int mode)
 
        if (p_ptr->riding && target_pet && (temp_n > 1) && (mode & (TARGET_KILL)))
        {
-               byte tmp;
+               POSITION tmp;
 
                tmp = temp_y[0];
                temp_y[0] = temp_y[1];
@@ -3094,7 +2912,8 @@ static void target_set_prepare(int mode)
                temp_x[1] = tmp;
        }
 }
-void target_set_prepare_look(){
+
+void target_set_prepare_look(void){
        target_set_prepare(TARGET_LOOK);
 }
 
@@ -3177,7 +2996,7 @@ bool show_gold_on_floor = FALSE;
  *
  * This function must handle blindness/hallucination.
  */
-static int target_set_aux(int y, int x, int mode, cptr info)
+static char target_set_aux(POSITION y, POSITION x, BIT_FLAGS mode, cptr info)
 {
        cave_type *c_ptr = &cave[y][x];
        s16b this_o_idx, next_o_idx = 0;
@@ -3185,11 +3004,12 @@ static int target_set_aux(int y, int x, int mode, cptr info)
        bool boring = TRUE;
        s16b feat;
        feature_type *f_ptr;
-       int query = '\001';
+       char query = '\001';
        char out_val[MAX_NLEN+80];
 
 #ifdef ALLOW_EASY_FLOOR
-       int floor_list[23], floor_num = 0;
+       OBJECT_IDX floor_list[23];
+       ITEM_NUMBER floor_num = 0;
 
        /* Scan all objects in the grid */
        if (easy_floor)
@@ -3443,10 +3263,10 @@ static int target_set_aux(int y, int x, int mode, cptr info)
                                /* Display rough information about items */
 #ifdef JP
                                sprintf(out_val, "%s %d個のアイテム%s%s ['x'で一覧, %s]",
-                                       s1, floor_num, s2, s3, info);
+                                       s1, (int)floor_num, s2, s3, info);
 #else
                                sprintf(out_val, "%s%s%sa pile of %d items [x,%s]",
-                                       s1, s2, s3, floor_num, info);
+                                       s1, s2, s3, (int)floor_num, info);
 #endif
 
                                prt(out_val, 0, 0);
@@ -3465,7 +3285,8 @@ static int target_set_aux(int y, int x, int mode, cptr info)
                        /* Continue scrolling list if requested */
                        while (1)
                        {
-                               int i, o_idx;
+                               int i;
+                               IDX o_idx;
 
                                /* Save screen */
                                screen_save();
@@ -3478,10 +3299,10 @@ static int target_set_aux(int y, int x, int mode, cptr info)
                                /* Prompt */
 #ifdef JP
                                sprintf(out_val, "%s %d個のアイテム%s%s [Enterで次へ, %s]",
-                                       s1, floor_num, s2, s3, info);
+                                       s1, (int)floor_num, s2, s3, info);
 #else
                                sprintf(out_val, "%s%s%sa pile of %d items [Enter,%s]",
-                                       s1, s2, s3, floor_num, info);
+                                       s1, s2, s3, (int)floor_num, info);
 #endif
                                prt(out_val, 0, 0);
 
@@ -3602,7 +3423,7 @@ static int target_set_aux(int y, int x, int mode, cptr info)
                if (have_flag(f_ptr->flags, FF_QUEST_ENTER))
                {
                        /* Set the quest number temporary */
-                       int old_quest = p_ptr->inside_quest;
+                       IDX old_quest = p_ptr->inside_quest;
                        int j;
 
                        /* Clear the text */
@@ -3758,19 +3579,17 @@ static int target_set_aux(int y, int x, int mode, cptr info)
  * This command will cancel any old target, even if used from
  * inside the "look" command.
  */
-bool target_set(int mode)
+bool target_set(BIT_FLAGS mode)
 {
        int             i, d, m, t, bd;
-       int             y = py;
-       int             x = px;
+       POSITION y = p_ptr->y;
+       POSITION x = p_ptr->x;
 
        bool    done = FALSE;
-
        bool    flag = TRUE;
-
        char    query;
-
        char    info[80];
+       char    same_key;
 
        cave_type               *c_ptr;
 
@@ -3786,6 +3605,14 @@ bool target_set(int mode)
        /* Cancel tracking */
        /* health_track(0); */
 
+       if (rogue_like_commands)
+       {
+               same_key = 'x';
+       }
+       else
+       {
+               same_key = 'l';
+       }
 
        /* Prepare the "temp" array */
        target_set_prepare(mode);
@@ -3911,8 +3738,8 @@ bool target_set(int mode)
                                        /* Recalculate interesting grids */
                                        target_set_prepare(mode);
 
-                                       y = py;
-                                       x = px;
+                                       y = p_ptr->y;
+                                       x = p_ptr->x;
                                }
 
                                case 'o':
@@ -3928,14 +3755,24 @@ bool target_set(int mode)
 
                                default:
                                {
-                                       /* Extract the action (if any) */
-                                       d = get_keymap_dir(query);
+                                       if(query == same_key)
+                                       {
+                                               if (++m == temp_n)
+                                               {
+                                                       m = 0;
+                                                       if (!expand_list) done = TRUE;
+                                               }
+                                       }
+                                       else
+                                       {
+                                               /* Extract the action (if any) */
+                                               d = get_keymap_dir(query);
 
-                                       if (!d) bell();
-                                       break;
+                                               if (!d) bell();
+                                               break;
+                                       }
                                }
                        }
-
                        /* Hack -- move around */
                        if (d)
                        {
@@ -4051,7 +3888,7 @@ bool target_set(int mode)
                        strcpy(info, _("q止 t決 p自 m近 +次 -前", "q,t,p,m,+,-,<dir>"));
 
                        /* Describe and Prompt (enable "TARGET_LOOK") */
-                       while (!(query = target_set_aux(y, x, mode | TARGET_LOOK, info)));
+                       while ((query = target_set_aux(y, x, mode | TARGET_LOOK, info)) == 0);
 
                        /* Cancel tracking */
                        /* health_track(0); */
@@ -4106,8 +3943,8 @@ bool target_set(int mode)
                                        /* Recalculate interesting grids */
                                        target_set_prepare(mode);
 
-                                       y = py;
-                                       x = px;
+                                       y = p_ptr->y;
+                                       x = p_ptr->x;
                                }
 
                                case 'o':
@@ -4249,12 +4086,10 @@ bool target_set(int mode)
  *
  * Note that confusion over-rides any (explicit?) user choice.
  */
-bool get_aim_dir(int *dp)
+bool get_aim_dir(DIRECTION *dp)
 {
-       int             dir;
-
+       DIRECTION dir;
        char    command;
-
        cptr    p;
 
        /* Initialize */
@@ -4399,9 +4234,9 @@ bool get_aim_dir(int *dp)
  * This function tracks and uses the "global direction", and uses
  * that as the "desired direction", to which "confusion" is applied.
  */
-bool get_rep_dir(int *dp, bool under)
+bool get_rep_dir(DIRECTION *dp, bool under)
 {
-       int dir;
+       DIRECTION dir;
        cptr prompt;
 
        /* Initialize */
@@ -4537,9 +4372,9 @@ bool get_rep_dir(int *dp, bool under)
 }
 
 
-bool get_rep_dir2(int *dp)
+bool get_rep_dir2(DIRECTION *dp)
 {
-       int dir;
+       DIRECTION dir;
 
        /* Initialize */
        (*dp) = 0;
@@ -4619,7 +4454,8 @@ void gain_level_reward(int chosen_reward)
        object_type forge;
        char        wrath_reason[32] = "";
        int         nasty_chance = 6;
-       int         dummy = 0, dummy2 = 0;
+       OBJECT_TYPE_VALUE dummy = 0;
+       OBJECT_SUBTYPE_VALUE dummy2 = 0;
        int         type, effect;
        cptr        reward = NULL;
        char o_name[MAX_NLEN];
@@ -4746,7 +4582,7 @@ msg_format("%sの声がささやいた:",
 
                        msg_print(_("「我が与えし物を賢明に使うべし。」", "'Use my gift wisely.'"));
 
-                       acquirement(py, px, 1, FALSE, FALSE, FALSE);
+                       acquirement(p_ptr->y, p_ptr->x, 1, FALSE, FALSE, FALSE);
                        reward = _("上質なアイテムを手に入れた。", "a good item");
                        break;
                case REW_GREA_OBJ:
@@ -4760,7 +4596,7 @@ msg_format("%sの声が響き渡った:",
 
                        msg_print(_("「我が与えし物を賢明に使うべし。」", "'Use my gift wisely.'"));
 
-                       acquirement(py, px, 1, TRUE, FALSE, FALSE);
+                       acquirement(p_ptr->y, p_ptr->x, 1, TRUE, FALSE, FALSE);
                        reward = _("高級品のアイテムを手に入れた。", "an excellent item");
                        break;
                case REW_CHAOS_WP:
@@ -4871,7 +4707,7 @@ msg_format("%sの声が響き渡った:",
                        q_ptr->name2 = EGO_CHAOTIC;
 
                        /* Drop it in the dungeon */
-                       (void)drop_near(q_ptr, -1, py, px);
+                       (void)drop_near(q_ptr, -1, p_ptr->y, p_ptr->x);
                        reward = _("(混沌)の武器を手に入れた。", "chaos weapon");
                        break;
                case REW_GOOD_OBS:
@@ -4885,7 +4721,7 @@ msg_format("%sの声が響き渡った:",
 
                        msg_print(_("「汝の行いは貴き報いに値せり。」", "'Thy deed hath earned thee a worthy reward.'"));
 
-                       acquirement(py, px, randint1(2) + 1, FALSE, FALSE, FALSE);
+                       acquirement(p_ptr->y, p_ptr->x, randint1(2) + 1, FALSE, FALSE, FALSE);
                        reward = _("上質なアイテムを手に入れた。", "good items");
                        break;
                case REW_GREA_OBS:
@@ -4899,7 +4735,7 @@ msg_format("%sの声が響き渡った:",
 
                        msg_print(_("「下僕よ、汝の献身への我が惜しみ無き報いを見るがよい。」", "'Behold, mortal, how generously I reward thy loyalty.'"));
 
-                       acquirement(py, px, randint1(2) + 1, TRUE, FALSE, FALSE);
+                       acquirement(p_ptr->y, p_ptr->x, randint1(2) + 1, TRUE, FALSE, FALSE);
                        reward = _("高級品のアイテムを手に入れた。", "excellent items");
                        break;
                case REW_TY_CURSE:
@@ -4929,7 +4765,7 @@ msg_format("%sの声が響き渡った:",
 
                        for (dummy = 0; dummy < randint1(5) + 1; dummy++)
                        {
-                               (void)summon_specific(0, py, px, dun_level, 0, (PM_ALLOW_GROUP | PM_ALLOW_UNIQUE | PM_NO_PET));
+                               (void)summon_specific(0, p_ptr->y, p_ptr->x, dun_level, 0, (PM_ALLOW_GROUP | PM_ALLOW_UNIQUE | PM_NO_PET));
                        }
                        reward = _("モンスターを召喚された。", "summoning hostile monsters");
                        break;
@@ -4944,7 +4780,7 @@ msg_format("%sの声が響き渡った:",
 
                        msg_print(_("「汝、より強き敵を必要とせり!」", "'Thou needst worthier opponents!'"));
 
-                       activate_hi_summon(py, px, FALSE);
+                       activate_hi_summon(p_ptr->y, p_ptr->x, FALSE);
                        reward = _("モンスターを召喚された。", "summoning many hostile monsters");
                        break;
                case REW_DO_HAVOC:
@@ -5133,7 +4969,7 @@ msg_format("%sの声がささやいた:",
                                        reward = _("禍々しい呪いをかけられた。", "cursing");
                                        break;
                                case 2:
-                                       activate_hi_summon(py, px, FALSE);
+                                       activate_hi_summon(p_ptr->y, p_ptr->x, FALSE);
                                        reward = _("モンスターを召喚された。", "summoning hostile monsters");
                                        break;
                                case 3:
@@ -5178,7 +5014,7 @@ msg_format("%sの声がささやいた:",
                        {
                                (void)dec_stat(dummy, 10 + randint1(15), FALSE);
                        }
-                       activate_hi_summon(py, px, FALSE);
+                       activate_hi_summon(p_ptr->y, p_ptr->x, FALSE);
                        (void)activate_ty_curse(FALSE, &count);
                        if (one_in_(2))
                        {
@@ -5206,7 +5042,7 @@ msg_format("%sの声が響き渡った:",
 
                        msg_print(_("「死と破壊こそ我が喜びなり!」", "'Death and destruction! This pleaseth me!'"));
 
-                       (void)destroy_area(py, px, 25, FALSE);
+                       (void)destroy_area(p_ptr->y, p_ptr->x, 25, FALSE);
                        reward = _("ダンジョンが*破壊*された。", "*destruct*ing dungeon");
                        break;
                case REW_GENOCIDE:
@@ -5261,7 +5097,7 @@ msg_format("%sはあなたを無視した。",
                case REW_SER_DEMO:
                        msg_format(_("%sは褒美として悪魔の使いをよこした!", "%s rewards you with a demonic servant!"),chaos_patrons[p_ptr->chaos_patron]);
 
-                       if (!summon_specific(-1, py, px, dun_level, SUMMON_DEMON, PM_FORCE_PET))
+                       if (!summon_specific(-1, p_ptr->y, p_ptr->x, dun_level, SUMMON_DEMON, PM_FORCE_PET))
                                msg_print(_("何も現れなかった...", "Nobody ever turns up..."));
                        else
                                reward = _("悪魔がペットになった。", "a demonic servant");
@@ -5270,7 +5106,7 @@ msg_format("%sはあなたを無視した。",
                case REW_SER_MONS:
                        msg_format(_("%sは褒美として使いをよこした!", "%s rewards you with a servant!"),chaos_patrons[p_ptr->chaos_patron]);
 
-                       if (!summon_specific(-1, py, px, dun_level, 0, PM_FORCE_PET))
+                       if (!summon_specific(-1, p_ptr->y, p_ptr->x, dun_level, 0, PM_FORCE_PET))
                                msg_print(_("何も現れなかった...", "Nobody ever turns up..."));
                        else
                                reward = _("モンスターがペットになった。", "a servant");
@@ -5279,7 +5115,7 @@ msg_format("%sはあなたを無視した。",
                case REW_SER_UNDE:
                        msg_format(_("%sは褒美としてアンデッドの使いをよこした。", "%s rewards you with an undead servant!"),chaos_patrons[p_ptr->chaos_patron]);
 
-                       if (!summon_specific(-1, py, px, dun_level, SUMMON_UNDEAD, PM_FORCE_PET))
+                       if (!summon_specific(-1, p_ptr->y, p_ptr->x, dun_level, SUMMON_UNDEAD, PM_FORCE_PET))
                                msg_print(_("何も現れなかった...", "Nobody ever turns up..."));
                        else
                                reward = _("アンデッドがペットになった。", "an undead servant");
@@ -5304,7 +5140,7 @@ msg_format("%sはあなたを無視した。",
  * XAngband: determine if a given location is "interesting"
  * based on target_set_accept function.
  */
-static bool tgt_pt_accept(int y, int x)
+static bool tgt_pt_accept(POSITION y, POSITION x)
 {
        cave_type *c_ptr;
 
@@ -5312,7 +5148,7 @@ static bool tgt_pt_accept(int y, int x)
        if (!(in_bounds(y, x))) return (FALSE);
 
        /* Player grid is always interesting */
-       if ((y == py) && (x == px)) return (TRUE);
+       if ((y == p_ptr->y) && (x == p_ptr->x)) return (TRUE);
 
        /* Handle hallucination */
        if (p_ptr->image) return (FALSE);
@@ -5343,7 +5179,7 @@ static bool tgt_pt_accept(int y, int x)
  */
 static void tgt_pt_prepare(void)
 {
-       int y, x;
+       POSITION y, x;
 
        /* Reset "temp" array */
        temp_n = 0;
@@ -5376,10 +5212,11 @@ static void tgt_pt_prepare(void)
 /*
  * old -- from PsiAngband.
  */
-bool tgt_pt(int *x_ptr, int *y_ptr)
+bool tgt_pt(POSITION *x_ptr, POSITION *y_ptr)
 {
        char ch = 0;
-       int d, x, y, n;
+       int d, n = 0;
+       POSITION x, y;
        bool success = FALSE;
 
        int wid, hgt;
@@ -5387,13 +5224,12 @@ bool tgt_pt(int *x_ptr, int *y_ptr)
        /* Get size */
        get_screen_size(&wid, &hgt);
 
-       x = px;
-       y = py;
+       x = p_ptr->x;
+       y = p_ptr->y;
 
        if (expand_list) 
        {
                tgt_pt_prepare();
-               n = 0;
        }
 
        msg_print(_("場所を選んでスペースキーを押して下さい。", "Select a point and press space."));
@@ -5449,8 +5285,8 @@ bool tgt_pt(int *x_ptr, int *y_ptr)
                                if (n == temp_n)        /* Loop out taget list */
                                {
                                        n = 0;
-                                       y = py;
-                                       x = px;
+                                       y = p_ptr->y;
+                                       x = p_ptr->x;
                                        verify_panel(); /* Move cursor to player */
 
                                        /* Update stuff */
@@ -5562,13 +5398,12 @@ bool tgt_pt(int *x_ptr, int *y_ptr)
 }
 
 
-bool get_hack_dir(int *dp)
+bool get_hack_dir(DIRECTION *dp)
 {
-       int             dir;
+       DIRECTION dir;
        cptr    p;
        char    command;
 
-
        /* Initialize */
        (*dp) = 0;
 
@@ -5689,12 +5524,14 @@ s16b gain_energy(void)
 }
 
 
-/*
- * Return bow energy 
+/*!
+ * @brief 射撃武器の攻撃に必要な基本消費エネルギーを返す/Return bow energy
+ * @param sval 射撃武器のアイテム副分類ID 
+ * @return 消費する基本エネルギー
  */
-s16b bow_energy(int sval)
+ENERGY bow_energy(OBJECT_SUBTYPE_VALUE sval)
 {
-       int energy = 100;
+       ENERGY energy = 10000;
 
        /* Analyze the launcher */
        switch (sval)
@@ -5749,7 +5586,7 @@ s16b bow_energy(int sval)
 /*
  * Return bow tmul
  */
-int bow_tmul(int sval)
+int bow_tmul(OBJECT_SUBTYPE_VALUE sval)
 {
        int tmul = 0;
 
@@ -5870,10 +5707,10 @@ int spell_exp_level(int spell_exp)
  * Display a rumor and apply its effects
  */
 
-int rumor_num(char *zz, int max_idx)
+IDX rumor_num(char *zz, IDX max_idx)
 {
        if (strcmp(zz, "*") == 0) return randint1(max_idx - 1);
-       return atoi(zz);
+       return (IDX)atoi(zz);
 }
 
 cptr rumor_bind_name(char *base, cptr fullname)
@@ -5896,7 +5733,7 @@ cptr rumor_bind_name(char *base, cptr fullname)
 
 void display_rumor(bool ex)
 {
-       bool err;
+       errr err;
        int section = 0;
        char Rumor[1024];
 
@@ -5922,7 +5759,7 @@ void display_rumor(bool ex)
                {
                        if (strcmp(zz[0], "ARTIFACT") == 0)
                        {
-                               int a_idx, k_idx;
+                               IDX a_idx, k_idx;
                                object_type forge;
                                object_type *q_ptr = &forge;
                                artifact_type *a_ptr;
@@ -5943,7 +5780,7 @@ void display_rumor(bool ex)
                        }
                        else if  (strcmp(zz[0], "MONSTER") == 0)
                        {
-                               int r_idx;
+                               MONRACE_IDX r_idx;
                                monster_race *r_ptr;
 
                                while(1)
@@ -5983,7 +5820,7 @@ void display_rumor(bool ex)
                        }
                        else if  (strcmp(zz[0], "TOWN") == 0)
                        {
-                               int t_idx;
+                               IDX t_idx;
                                s32b visit;
 
                                while(1)