OSDN Git Service

[Refactor] #37353 型の置換(C_MAKE)。 / Type replacement(C_MAKE).
[hengband/hengband.git] / src / bldg.c
index 21d4d1a..a23c678 100644 (file)
 
 #include "angband.h"
 #include "object-hook.h"
+#include "monsterrace-hook.h"
 #include "melee.h"
 #include "world.h"
+#include "sort.h"
 
 /*!
  * ループ中で / hack as in leave_store in store.c
@@ -215,7 +217,7 @@ static void show_building(building_type* bldg)
 static void arena_comm(int cmd)
 {
        monster_race    *r_ptr;
-       cptr            name;
+       concptr            name;
 
 
        switch (cmd)
@@ -728,8 +730,8 @@ static void display_cards(void)
        int i, j;
        char suitcolor[4] = {TERM_YELLOW, TERM_L_RED, TERM_L_BLUE, TERM_L_GREEN};
 #ifdef JP
-       cptr suit[4] = {"★", "●", "¶", "†"};
-       cptr card_grph[13][7] = {{"A   %s     ",
+       concptr suit[4] = {"★", "●", "¶", "†"};
+       concptr card_grph[13][7] = {{"A   %s     ",
                                  "     変     ",
                                  "     愚     ",
                                  "     蛮     ",
@@ -820,7 +822,7 @@ static void display_cards(void)
                                  "   υ    ∂ ",
                                  "    σ ノ %s",
                                  "          K"}};
-       cptr joker_grph[7] = {    "            ",
+       concptr joker_grph[7] = {    "            ",
                                  "     J     ",
                                  "     O     ",
                                  "     K     ",
@@ -830,8 +832,8 @@ static void display_cards(void)
 
 #else
 
-       cptr suit[4] = {"[]", "qp", "<>", "db"};
-       cptr card_grph[13][7] = {{"A    %s     ",
+       concptr suit[4] = {"[]", "qp", "<>", "db"};
+       concptr card_grph[13][7] = {{"A    %s     ",
                                  "     He     ",
                                  "     ng     ",
                                  "     ba     ",
@@ -922,7 +924,7 @@ static void display_cards(void)
                                  "   c    &   ",
                                  "    v__/  %s",
                                  "           K"}};
-       cptr joker_grph[7] = {    "            ",
+       concptr joker_grph[7] = {    "            ",
                                  "     J      ",
                                  "     O      ",
                                  "     K      ",
@@ -1044,7 +1046,7 @@ static bool gamble_comm(int cmd)
        s32b oldgold;
 
        char out_val[160], tmp_str[80], again;
-       cptr p;
+       concptr p;
 
        screen_save();
 
@@ -1341,43 +1343,6 @@ static bool gamble_comm(int cmd)
 }
 
 /*!
- * @brief モンスター闘技場に参加できるモンスターの判定
- * @param r_idx モンスターID
- * @details 基準はNEVER_MOVE MULTIPLY QUANTUM RF7_AQUATIC RF7_CHAMELEONのいずれも持たず、
- * 自爆以外のなんらかのHP攻撃手段を持っていること。
- * @return 参加できるか否か
- */
-static bool vault_aux_battle(MONRACE_IDX r_idx)
-{
-       int i;
-       HIT_POINT dam = 0;
-
-       monster_race *r_ptr = &r_info[r_idx];
-
-       /* Decline town monsters */
-/*     if (!mon_hook_dungeon(r_idx)) return FALSE; */
-
-       /* Decline unique monsters */
-/*     if (r_ptr->flags1 & (RF1_UNIQUE)) return (FALSE); */
-/*     if (r_ptr->flags7 & (RF7_NAZGUL)) return (FALSE); */
-
-       if (r_ptr->flags1 & (RF1_NEVER_MOVE)) return (FALSE);
-       if (r_ptr->flags2 & (RF2_MULTIPLY)) return (FALSE);
-       if (r_ptr->flags2 & (RF2_QUANTUM)) return (FALSE);
-       if (r_ptr->flags7 & (RF7_AQUATIC)) return (FALSE);
-       if (r_ptr->flags7 & (RF7_CHAMELEON)) return (FALSE);
-
-       for (i = 0; i < 4; i++)
-       {
-               if (r_ptr->blow[i].method == RBM_EXPLODE) return (FALSE);
-               if (r_ptr->blow[i].effect != RBE_DR_MANA) dam += r_ptr->blow[i].d_dice;
-       }
-       if (!dam && !(r_ptr->flags4 & (RF4_BOLT_MASK | RF4_BEAM_MASK | RF4_BALL_MASK | RF4_BREATH_MASK)) && !(r_ptr->a_ability_flags1 & (RF5_BOLT_MASK | RF5_BEAM_MASK | RF5_BALL_MASK | RF5_BREATH_MASK)) && !(r_ptr->a_ability_flags2 & (RF6_BOLT_MASK | RF6_BEAM_MASK | RF6_BALL_MASK | RF6_BREATH_MASK))) return (FALSE);
-
-       return (TRUE);
-}
-
-/*!
  * @brief モンスター闘技場に参加するモンスターをリセットする。
  * @return なし
  */
@@ -1415,7 +1380,7 @@ void battle_monsters(void)
                        int j;
                        while (1)
                        {
-                               get_mon_num_prep(vault_aux_battle, NULL);
+                               get_mon_num_prep(monster_can_entry_arena, NULL);
                                p_ptr->inside_battle = TRUE;
                                r_idx = get_mon_num(mon_level);
                                p_ptr->inside_battle = old_inside_battle;
@@ -1489,7 +1454,7 @@ static bool kakutoujou(void)
        s32b maxbet;
        s32b wager;
        char out_val[160], tmp_str[80];
-       cptr p;
+       concptr p;
 
        if ((turn - old_battle) > TURNS_PER_TICK*250)
        {
@@ -1661,7 +1626,7 @@ static void shoukinkubi(void)
        for (i = 0; i < MAX_KUBI; i++)
        {
                byte color;
-               cptr done_mark;
+               concptr done_mark;
                monster_race *r_ptr = &r_info[(kubi_r_idx[i] > 10000 ? kubi_r_idx[i] - 10000 : kubi_r_idx[i])];
 
                if (kubi_r_idx[i] > 10000)
@@ -1930,25 +1895,6 @@ static bool kankin(void)
 }
 
 /*!
- * @brief 悪夢の元凶となるモンスターかどうかを返す。
- * @param r_idx 判定対象となるモンスターのID
- * @return 悪夢の元凶となり得るか否か。
- */
-bool get_nightmare(MONRACE_IDX r_idx)
-{
-       monster_race *r_ptr = &r_info[r_idx];
-
-       /* Require eldritch horrors */
-       if (!(r_ptr->flags2 & (RF2_ELDRITCH_HORROR))) return (FALSE);
-
-       /* Require high level */
-       if (r_ptr->level <= p_ptr->lev) return (FALSE);
-
-       /* Accept this monster */
-       return (TRUE);
-}
-
-/*!
  * @brief 宿屋の利用サブルーチン
  * @details inn commands\n
  * Note that resting for the night was a perfect way to avoid player\n
@@ -2071,9 +2017,9 @@ static bool inn_comm(int cmd)
  */
 static void get_questinfo(IDX questnum, bool do_init)
 {
-       int     i;
-       IDX     old_quest;
-       char    tmp_str[80];
+       int i;
+       IDX old_quest;
+       GAME_TEXT tmp_str[80];
 
        /* Clear the text */
        for (i = 0; i < 10; i++)
@@ -2118,7 +2064,7 @@ static void castle_quest(void)
        IDX q_index = 0;
        monster_race    *r_ptr;
        quest_type      *q_ptr;
-       cptr            name;
+       concptr            name;
 
 
        clear_bldg(4, 18);
@@ -2408,9 +2354,9 @@ static u32b calc_expect_dice(u32b dam, int mult, int div, bool force, WEIGHT wei
  * the current +dam of the player.\n
  * @return なし
  */
-static void show_weapon_dmg(int r, int c, int mindice, int maxdice, int blows, int dam_bonus, cptr attr, byte color)
+static void show_weapon_dmg(int r, int c, int mindice, int maxdice, int blows, int dam_bonus, concptr attr, byte color)
 {
-       char tmp_str[80];
+       GAME_TEXT tmp_str[80];
        int mindam, maxdam;
        
        mindam = blows * (mindice + dam_bonus);
@@ -2656,7 +2602,7 @@ static void compare_weapon_aux(object_type *o_ptr, int col, int r)
 static void list_weapon(object_type *o_ptr, TERM_LEN row, TERM_LEN col)
 {
        GAME_TEXT o_name[MAX_NLEN];
-       char tmp_str[80];
+       GAME_TEXT tmp_str[80];
 
        DICE_NUMBER eff_dd = o_ptr->dd + p_ptr->to_dd[0];
        DICE_SID eff_ds = o_ptr->ds + p_ptr->to_ds[0];
@@ -2713,7 +2659,7 @@ static PRICE compare_weapons(PRICE bcost)
        object_type *o_ptr[2];
        object_type orig_weapon;
        object_type *i_ptr;
-       cptr q, s;
+       concptr q, s;
        TERM_LEN row = 2;
        TERM_LEN wid = 38, mgn = 2;
        bool old_character_xtra = character_xtra;
@@ -2735,7 +2681,7 @@ static PRICE compare_weapons(PRICE bcost)
        s = _("比べるものがありません。", "You have nothing to compare.");
 
        o_ptr[0] = choose_object(&item, q, s, (USE_EQUIP | USE_INVEN | IGNORE_BOTHHAND_SLOT));
-       if (!o_ptr)
+       if (!o_ptr[0])
        {
                screen_load();
                return (0);
@@ -2806,7 +2752,7 @@ static PRICE compare_weapons(PRICE bcost)
 
                        /* Get the second weapon */
                        o_ptr[1] = choose_object(&item2, q, s, (USE_EQUIP | USE_INVEN | IGNORE_BOTHHAND_SLOT));
-                       if (!o_ptr) continue;
+                       if (!o_ptr[1]) continue;
 
                        total += cost;
                        cost = bcost / 2;
@@ -2992,7 +2938,7 @@ static PRICE repair_broken_weapon_aux(PRICE bcost)
        int i, dd_bonus, ds_bonus;
        KIND_OBJECT_IDX k_idx;
        char basenm[MAX_NLEN];
-       cptr q, s;
+       concptr q, s;
        int row = 7;
        clear_bldg(0, 22);
 
@@ -3257,7 +3203,7 @@ static bool enchant_item(PRICE cost, HIT_PROB to_hit, HIT_POINT to_dam, ARMOUR_C
        OBJECT_IDX item;
        bool okay = FALSE;
        object_type *o_ptr;
-       cptr q, s;
+       concptr q, s;
        int maxenchant = (p_ptr->lev / 5);
        char tmp_str[MAX_NLEN];
 
@@ -3362,7 +3308,7 @@ static void building_recharge(void)
        DEPTH       lev;
        object_type *o_ptr;
        object_kind *k_ptr;
-       cptr        q, s;
+       concptr        q, s;
        PRICE       price;
        PARAMETER_VALUE charges;
        int         max_charges;
@@ -3400,13 +3346,8 @@ static void building_recharge(void)
                        get_check(_("$50で鑑定しますか? ", "Identify for 50 gold? ")))
 
                {
-                       /* Pay the price */
                        p_ptr->au -= 50;
-
-                       /* Identify it */
                        identify_item(o_ptr);
-
-                       /* Description */
                        object_desc(tmp_str, o_ptr, 0);
                        msg_format(_("%s です。", "You have: %s."), tmp_str);
 
@@ -3501,8 +3442,7 @@ static void building_recharge(void)
        if (o_ptr->tval == TV_ROD)
        {
 #ifdef JP
-if (get_check(format("そのロッドを$%d で再充填しますか?",
- price)))
+               if (get_check(format("そのロッドを$%d で再充填しますか?", price)))
 #else
                if (get_check(format("Recharge the %s for %d gold? ",
                        ((o_ptr->number > 1) ? "rods" : "rod"), price)))
@@ -3550,7 +3490,7 @@ if (get_check(format("そのロッドを$%d で再充填しますか?",
 #endif
 
        /* Combine / Reorder the pack (later) */
-       p_ptr->notice |= (PN_COMBINE | PN_REORDER);
+       p_ptr->update |= (PU_COMBINE | PU_REORDER);
 
        p_ptr->window |= (PW_INVEN);
 
@@ -3661,7 +3601,6 @@ static void building_recharge_all(void)
                /* skip non magic device */
                if (o_ptr->tval < TV_STAFF || o_ptr->tval > TV_ROD) continue;
 
-               /* Identify it */
                if (!object_is_known(o_ptr))
                {
                        identify_item(o_ptr);
@@ -3695,7 +3634,7 @@ static void building_recharge_all(void)
        msg_print(NULL);
 
        /* Combine / Reorder the pack (later) */
-       p_ptr->notice |= (PN_COMBINE | PN_REORDER);
+       p_ptr->update |= (PU_COMBINE | PU_REORDER);
 
        p_ptr->window |= (PW_INVEN);
 
@@ -3712,7 +3651,8 @@ static void building_recharge_all(void)
  */
 bool tele_town(void)
 {
-       int i, x, y;
+       int i;
+       POSITION x, y;
        int num = 0;
 
        if (dun_level)
@@ -3873,7 +3813,7 @@ static bool research_mon(void)
 
 
        /* Allocate the "who" array */
-       C_MAKE(who, max_r_idx, IDX);
+       C_MAKE(who, max_r_idx, MONRACE_IDX);
 
        /* Collect matching monsters */
        for (n = 0, i = 1; i < max_r_idx; i++)
@@ -3930,7 +3870,7 @@ static bool research_mon(void)
        if (!n)
        {
                /* Free the "who" array */
-               C_KILL(who, max_r_idx, IDX);
+               C_KILL(who, max_r_idx, MONRACE_IDX);
 
                /* Restore */
                screen_load();
@@ -4036,7 +3976,7 @@ static bool research_mon(void)
        /* prt(buf, 5, 5);*/
 
        /* Free the "who" array */
-       C_KILL(who, max_r_idx, IDX);
+       C_KILL(who, max_r_idx, MONRACE_IDX);
 
        /* Restore */
        screen_load();
@@ -4056,7 +3996,6 @@ static void bldg_process_command(building_type *bldg, int i)
        BACT_IDX bact = bldg->actions[i];
        PRICE bcost;
        bool paid = FALSE;
-       int amt;
 
        msg_flag = FALSE;
        msg_erase();
@@ -4170,50 +4109,19 @@ static void bldg_process_command(building_type *bldg, int i)
                item_tester_tval = TV_BOW;
                enchant_item(bcost, 1, 1, 0);
                break;
+
        case BACT_RECALL:
-               if (recall_player(1)) paid = TRUE;
+               if (recall_player(p_ptr, 1)) paid = TRUE;
                break;
-       case BACT_TELEPORT_LEVEL:
-       {
-               IDX select_dungeon;
-               DEPTH max_depth;
 
+       case BACT_TELEPORT_LEVEL:
                clear_bldg(4, 20);
-               select_dungeon = choose_dungeon(_("にテレポート", "teleport"), 4, 0);
-               show_building(bldg);
-               if (!select_dungeon) return;
-
-               max_depth = d_info[select_dungeon].maxdepth;
-
-               /* Limit depth in Angband */
-               if (select_dungeon == DUNGEON_ANGBAND)
-               {
-                       if (quest[QUEST_OBERON].status != QUEST_STATUS_FINISHED) max_depth = 98;
-                       else if(quest[QUEST_SERPENT].status != QUEST_STATUS_FINISHED) max_depth = 99;
-               }
-               amt = get_quantity(format(_("%sの何階にテレポートしますか?", "Teleport to which level of %s? "), 
-                                                       d_name + d_info[select_dungeon].name), (QUANTITY)max_depth);
-
-               if (amt > 0)
-               {
-                       p_ptr->word_recall = 1;
-                       p_ptr->recall_dungeon = select_dungeon;
-                       max_dlv[p_ptr->recall_dungeon] = ((amt > d_info[select_dungeon].maxdepth) ? d_info[select_dungeon].maxdepth : ((amt < d_info[select_dungeon].mindepth) ? d_info[select_dungeon].mindepth : amt));
-                       if (record_maxdepth)
-                               do_cmd_write_nikki(NIKKI_TRUMP, select_dungeon, _("トランプタワーで", "at Trump Tower"));
-                               
-                       msg_print(_("回りの大気が張りつめてきた...", "The air about you becomes charged..."));
-
-                       paid = TRUE;
-                       p_ptr->redraw |= (PR_STATUS);
-               }
+               paid = free_level_recall(p_ptr);
                break;
-       }
+
        case BACT_LOSE_MUTATION:
-               if (p_ptr->muta1 || p_ptr->muta2 ||
-                   (p_ptr->muta3 & ~MUT3_GOOD_LUCK) ||
-                   (p_ptr->pseikaku != SEIKAKU_LUCKY &&
-                    (p_ptr->muta3 & MUT3_GOOD_LUCK)))
+               if (p_ptr->muta1 || p_ptr->muta2 || (p_ptr->muta3 & ~MUT3_GOOD_LUCK) ||
+                       (p_ptr->pseikaku != SEIKAKU_LUCKY && (p_ptr->muta3 & MUT3_GOOD_LUCK)))
                {
                        while(!lose_mutation(0));
                        paid = TRUE;
@@ -4224,21 +4132,27 @@ static void bldg_process_command(building_type *bldg, int i)
                        msg_print(NULL);
                }
                break;
+
        case BACT_BATTLE:
                kakutoujou();
                break;
+
        case BACT_TSUCHINOKO:
                tsuchinoko();
                break;
+
        case BACT_KUBI:
                shoukinkubi();
                break;
+
        case BACT_TARGET:
                today_target();
                break;
+
        case BACT_KANKIN:
                kankin();
                break;
+
        case BACT_HEIKOUKA:
                msg_print(_("平衡化の儀式を行なった。", "You received an equalization ritual."));
                set_virtue(V_COMPASSION, 0);
@@ -4262,12 +4176,15 @@ static void bldg_process_command(building_type *bldg, int i)
                get_virtues();
                paid = TRUE;
                break;
+
        case BACT_TELE_TOWN:
                paid = tele_town();
                break;
+
        case BACT_EVAL_AC:
                paid = eval_ac(p_ptr->dis_ac + p_ptr->dis_to_a);
                break;
+
        case BACT_BROKEN_WEAPON:
                paid = TRUE;
                bcost = repair_broken_weapon(bcost);
@@ -4286,6 +4203,8 @@ static void bldg_process_command(building_type *bldg, int i)
  */
 void do_cmd_quest(void)
 {
+       if(p_ptr->wild_mode) return;
+
        p_ptr->energy_use = 100;
 
        if (!cave_have_flag_bold(p_ptr->y, p_ptr->x, FF_QUEST_ENTER))
@@ -4325,6 +4244,7 @@ void do_cmd_bldg(void)
        bool            validcmd;
        building_type   *bldg;
 
+       if(p_ptr->wild_mode) return;
 
        p_ptr->energy_use = 100;
 
@@ -4465,7 +4385,7 @@ void do_cmd_bldg(void)
 /*!
  * @brief クエスト突入時のメッセージテーブル / Array of places to find an inscription
  */
-static cptr find_quest[] =
+static concptr find_quest[] =
 {
        _("床にメッセージが刻まれている:", "You find the following inscription in the floor"),
        _("壁にメッセージが刻まれている:", "You see a message inscribed in the wall"),