OSDN Git Service

[Refactor] #38993 object_level を floor_type に取り込む。 / Move object_level to floor_type...
[hengband/hengband.git] / src / bldg.c
index ac6870e..8673295 100644 (file)
 #include "world.h"
 #include "sort.h"
 
+#include "avatar.h"
+#include "mutation.h"
+#include "quest.h"
+#include "artifact.h"
+#include "cmd-spell.h"
+#include "rumor.h"
+#include "player-status.h"
+#include "spells-status.h"
+
 /*!
  * ループ中で / hack as in leave_store in store.c
  */
@@ -1861,9 +1870,8 @@ static bool kankin(void)
 
                                /* Prepare to make a prize */
                                object_prep(&forge, lookup_kind(prize_list[num-1].tval, prize_list[num-1].sval));
-                               apply_magic(&forge, object_level, AM_NO_FIXED_ART);
+                               apply_magic(&forge, current_floor_ptr->object_level, AM_NO_FIXED_ART);
 
-                               /* Identify it fully */
                                object_aware(&forge);
                                object_known(&forge);
 
@@ -2019,7 +2027,7 @@ static bool inn_comm(int cmd)
 static void get_questinfo(IDX questnum, bool do_init)
 {
        int i;
-       IDX old_quest;
+       QUEST_IDX old_quest;
        GAME_TEXT tmp_str[80];
 
        /* Clear the text */
@@ -2062,16 +2070,16 @@ static void get_questinfo(IDX questnum, bool do_init)
  */
 static void castle_quest(void)
 {
-       IDX q_index = 0;
-       monster_race    *r_ptr;
-       quest_type      *q_ptr;
-       concptr            name;
+       QUEST_IDX q_index = 0;
+       monster_race *r_ptr;
+       quest_type *q_ptr;
+       concptr name;
 
 
        clear_bldg(4, 18);
 
        /* Current quest of the building */
-       q_index = cave[p_ptr->y][p_ptr->x].special;
+       q_index = current_floor_ptr->grid_array[p_ptr->y][p_ptr->x].special;
 
        /* Is there a quest available at the building? */
        if (!q_index)
@@ -2818,23 +2826,13 @@ static bool eval_ac(ARMOUR_CLASS iAC)
        screen_save();
        clear_bldg(0, 22);
 
-#ifdef JP
-       put_str(format("あなたの現在のAC: %3d", iAC), row++, 0);
-       put_str(format("ダメージ軽減率  : %3d%%", protection), row++, 0);
+       put_str(format(_("あなたの現在のAC: %3d", "Your current AC : %3d"), iAC), row++, 0);
+       put_str(format(_("ダメージ軽減率  : %3d%%", "Protection rate : %3d%%"), protection), row++, 0);
        row++;
 
-       put_str("敵のレベル      :", row + 0, 0);
-       put_str("回避率          :", row + 1, 0);
-       put_str("ダメージ期待値  :", row + 2, 0);
-#else
-       put_str(format("Your current AC : %3d", iAC), row++, 0);
-       put_str(format("Protection rate : %3d%%", protection), row++, 0);
-       row++;
-
-       put_str("Level of Monster:", row + 0, 0);
-       put_str("Dodge Rate      :", row + 1, 0);
-       put_str("Average Damage  :", row + 2, 0);
-#endif
+       put_str(_("敵のレベル      :", "Level of Monster:"), row + 0, 0);
+       put_str(_("回避率          :", "Dodge Rate      :"), row + 1, 0);
+       put_str(_("ダメージ期待値  :", "Average Damage  :"), row + 2, 0);
     
        for (col = 17 + 1, lvl = 0; lvl <= 100; lvl += 10, col += 5)
        {
@@ -3489,8 +3487,6 @@ static void building_recharge(void)
 #else
        msg_format("%^s %s recharged for %d gold.", tmp_str, ((o_ptr->number > 1) ? "were" : "was"), price);
 #endif
-
-       /* Combine / Reorder the pack (later) */
        p_ptr->update |= (PU_COMBINE | PU_REORDER);
 
        p_ptr->window |= (PW_INVEN);
@@ -3633,8 +3629,6 @@ static void building_recharge_all(void)
        /* Give feedback */
        msg_format(_("$%d で再充填しました。", "You pay %d gold."), total_cost);
        msg_print(NULL);
-
-       /* Combine / Reorder the pack (later) */
        p_ptr->update |= (PU_COMBINE | PU_REORDER);
 
        p_ptr->window |= (PW_INVEN);
@@ -3656,7 +3650,7 @@ bool tele_town(void)
        POSITION x, y;
        int num = 0;
 
-       if (dun_level)
+       if (current_floor_ptr->dun_level)
        {
                msg_print(_("この魔法は地上でしか使えない!", "This spell can only be used on the surface!"));
                return FALSE;
@@ -3677,7 +3671,7 @@ bool tele_town(void)
 
                if ((i == NO_TOWN) || (i == SECRET_TOWN) || (i == p_ptr->town_num) || !(p_ptr->visit & (1L << (i - 1)))) continue;
 
-               sprintf(buf, "%c) %-20s", I2A(i - 1), town[i].name);
+               sprintf(buf, "%c) %-20s", I2A(i - 1), town_info[i].name);
                prt(buf, 5 + i, 5);
                num++;
        }
@@ -3742,9 +3736,9 @@ static bool research_mon(void)
        MONSTER_IDX *who;
 
        /* XTRA HACK WHATSEARCH */
-       bool    all = FALSE;
-       bool    uniq = FALSE;
-       bool    norm = FALSE;
+       bool all = FALSE;
+       bool uniq = FALSE;
+       bool norm = FALSE;
        char temp[80] = "";
 
        /* XTRA HACK REMEMBER_IDX */
@@ -3758,7 +3752,6 @@ static bool research_mon(void)
                                   "Enter character to be identified(^A:All,^U:Uniqs,^N:Non uniqs,^M:Name): "), &sym, FALSE)) 
 
        {
-               /* Restore */
                screen_load();
 
                return (FALSE);
@@ -3792,8 +3785,6 @@ static bool research_mon(void)
                if (!get_string(_("名前(英語の場合小文字で可)", "Enter name:"),temp, 70))
                {
                        temp[0]=0;
-
-                       /* Restore */
                        screen_load();
 
                        return FALSE;
@@ -3812,7 +3803,6 @@ static bool research_mon(void)
        /* Display the result */
        prt(buf, 16, 10);
 
-
        /* Allocate the "who" array */
        C_MAKE(who, max_r_idx, MONRACE_IDX);
 
@@ -3872,8 +3862,6 @@ static bool research_mon(void)
        {
                /* Free the "who" array */
                C_KILL(who, max_r_idx, MONRACE_IDX);
-
-               /* Restore */
                screen_load();
 
                return (FALSE);
@@ -3978,8 +3966,6 @@ static bool research_mon(void)
 
        /* Free the "who" array */
        C_KILL(who, max_r_idx, MONRACE_IDX);
-
-       /* Restore */
        screen_load();
 
        return (!notpicked);
@@ -4206,7 +4192,7 @@ void do_cmd_quest(void)
 {
        if(p_ptr->wild_mode) return;
 
-       p_ptr->energy_use = 100;
+       take_turn(p_ptr, 100);
 
        if (!cave_have_flag_bold(p_ptr->y, p_ptr->x, FF_QUEST_ENTER))
        {
@@ -4227,8 +4213,8 @@ void do_cmd_quest(void)
 
                leave_quest_check();
 
-               if (quest[p_ptr->inside_quest].type != QUEST_TYPE_RANDOM) dun_level = 1;
-               p_ptr->inside_quest = cave[p_ptr->y][p_ptr->x].special;
+               if (quest[p_ptr->inside_quest].type != QUEST_TYPE_RANDOM) current_floor_ptr->dun_level = 1;
+               p_ptr->inside_quest = current_floor_ptr->grid_array[p_ptr->y][p_ptr->x].special;
 
                p_ptr->leaving = TRUE;
        }
@@ -4248,7 +4234,7 @@ void do_cmd_bldg(void)
 
        if(p_ptr->wild_mode) return;
 
-       p_ptr->energy_use = 100;
+       take_turn(p_ptr, 100);
 
        if (!cave_have_flag_bold(p_ptr->y, p_ptr->x, FF_BLDG))
        {
@@ -4256,7 +4242,7 @@ void do_cmd_bldg(void)
                return;
        }
 
-       which = f_info[cave[p_ptr->y][p_ptr->x].feat].subtype;
+       which = f_info[current_floor_ptr->grid_array[p_ptr->y][p_ptr->x].feat].subtype;
 
        bldg = &building[which];
 
@@ -4286,7 +4272,7 @@ void do_cmd_bldg(void)
                        command_new = SPECIAL_KEY_BUILDING;
 
                        /* No energy needed to re-enter the arena */
-                       p_ptr->energy_use = 0;
+                       free_turn(p_ptr);
                }
 
                return;
@@ -4303,7 +4289,7 @@ void do_cmd_bldg(void)
                command_new = SPECIAL_KEY_BUILDING;
 
                /* No energy needed to re-enter the arena */
-               p_ptr->energy_use = 0;
+               free_turn(p_ptr);
 
                return;
        }
@@ -4382,121 +4368,3 @@ void do_cmd_bldg(void)
        p_ptr->redraw |= (PR_BASIC | PR_EXTRA | PR_EQUIPPY | PR_MAP);
        p_ptr->window |= (PW_OVERHEAD | PW_DUNGEON);
 }
-
-
-/*!
- * @brief クエスト突入時のメッセージテーブル / Array of places to find an inscription
- */
-static concptr find_quest[] =
-{
-       _("床にメッセージが刻まれている:", "You find the following inscription in the floor"),
-       _("壁にメッセージが刻まれている:", "You see a message inscribed in the wall"),
-       _("メッセージを見つけた:", "There is a sign saying"),
-       _("何かが階段の上に書いてある:", "Something is written on the staircase"),
-       _("巻物を見つけた。メッセージが書いてある:", "You find a scroll with the following message"),
-};
-
-
-/*!
- * @brief クエストの導入メッセージを表示する / Discover quest
- * @param q_idx 開始されたクエストのID
- */
-void quest_discovery(QUEST_IDX q_idx)
-{
-       quest_type *q_ptr = &quest[q_idx];
-       monster_race *r_ptr = &r_info[q_ptr->r_idx];
-       MONSTER_NUMBER q_num = q_ptr->max_num;
-       GAME_TEXT name[MAX_NLEN];
-
-       /* No quest index */
-       if (!q_idx) return;
-
-       strcpy(name, (r_name + r_ptr->name));
-
-       msg_print(find_quest[rand_range(0, 4)]);
-       msg_print(NULL);
-
-       if (q_num == 1)
-       {
-               /* Unique */
-
-               /* Hack -- "unique" monsters must be "unique" */
-               if ((r_ptr->flags1 & RF1_UNIQUE) && (0 == r_ptr->max_num))
-               {
-                       msg_print(_("この階は以前は誰かによって守られていたようだ…。", "It seems that this level was protected by someone before..."));
-                       /* The unique is already dead */
-                       quest[q_idx].status = QUEST_STATUS_FINISHED;
-                       q_ptr->complev = 0;
-                       update_playtime();
-                       q_ptr->comptime = playtime;
-               }
-               else
-               {
-                       msg_format(_("注意せよ!この階は%sによって守られている!", "Beware, this level is protected by %s!"), name);
-               }
-       }
-       else
-       {
-               /* Normal monsters */
-#ifndef JP
-               plural_aux(name);
-#endif
-               msg_format(_("注意しろ!この階は%d体の%sによって守られている!", "Be warned, this level is guarded by %d %s!"), q_num, name);
-
-       }
-}
-
-
-/*!
- * @brief 新しく入ったダンジョンの階層に固定されている一般のクエストを探し出しIDを返す。
- * / Hack -- Check if a level is a "quest" level
- * @param level 検索対象になる階
- * @return クエストIDを返す。該当がない場合0を返す。
- */
-QUEST_IDX quest_number(DEPTH level)
-{
-       QUEST_IDX i;
-
-       /* Check quests */
-       if (p_ptr->inside_quest)
-               return (p_ptr->inside_quest);
-
-       for (i = 0; i < max_q_idx; i++)
-       {
-               if (quest[i].status != QUEST_STATUS_TAKEN) continue;
-
-               if ((quest[i].type == QUEST_TYPE_KILL_LEVEL) &&
-                       !(quest[i].flags & QUEST_FLAG_PRESET) &&
-                   (quest[i].level == level) &&
-                   (quest[i].dungeon == dungeon_type))
-                       return (i);
-       }
-
-       /* Check for random quest */
-       return (random_quest_number(level));
-}
-
-/*!
- * @brief 新しく入ったダンジョンの階層に固定されているランダムクエストを探し出しIDを返す。
- * @param level 検索対象になる階
- * @return クエストIDを返す。該当がない場合0を返す。
- */
-QUEST_IDX random_quest_number(DEPTH level)
-{
-       QUEST_IDX i;
-
-       if (dungeon_type != DUNGEON_ANGBAND) return 0;
-
-       for (i = MIN_RANDOM_QUEST; i < MAX_RANDOM_QUEST + 1; i++)
-       {
-               if ((quest[i].type == QUEST_TYPE_RANDOM) &&
-                       (quest[i].status == QUEST_STATUS_TAKEN) &&
-                       (quest[i].level == level) &&
-                       (quest[i].dungeon == DUNGEON_ANGBAND))
-               {
-                       return i;
-               }
-       }
-
-       return 0;
-}