OSDN Git Service

[Refactor] #37353 technic_info を spells.h 系列に移動。
[hengband/hengband.git] / src / cmd4.c
index aac03f1..a3f05cd 100644 (file)
  */
 
 #include "angband.h"
+#include "util.h"
+
+#include "birth.h"
 #include "cmd-pet.h"
+#include "cmd-spell.h"
+#include "dungeon.h"
 #include "world.h"
+#include "player-effects.h"
 #include "player-status.h"
+#include "player-skill.h"
 #include "sort.h"
 #include "mutation.h"
 #include "quest.h"
 #include "store.h"
 #include "artifact.h"
 #include "avatar.h"
+#include "object-flavor.h"
 #include "object-hook.h"
-
+#include "monster.h"
+#include "monster-status.h"
+#include "floor.h"
+#include "view-mainwindow.h"
+#include "dungeon-file.h"
+#include "files.h"
+#include "player-class.h"
+#include "player-move.h"
+#include "spells.h"
 
 /*
  */
@@ -845,7 +861,7 @@ static void do_cmd_bunshou(void)
 static void do_cmd_last_get(void)
 {
        char buf[256];
-       s32b turn_tmp;
+       GAME_TURN turn_tmp;
 
        if (record_o_name[0] == '\0') return;
 
@@ -874,8 +890,6 @@ static void do_cmd_erase_nikki(void)
 
        /* Build the filename */
        path_build(buf, sizeof(buf), ANGBAND_DIR_USER, file_name);
-
-       /* Remove the file */
        fd_kill(buf);
 
        fff = my_fopen(buf, "w");
@@ -3890,7 +3904,7 @@ void do_cmd_feeling(void)
        if (p_ptr->muta3 & MUT3_GOOD_LUCK)
                msg_print(do_cmd_feeling_text_lucky[p_ptr->feeling]);
        else if (p_ptr->pseikaku == SEIKAKU_COMBAT ||
-                inventory[INVEN_BOW].name1 == ART_CRIMSON)
+                p_ptr->inventory_list[INVEN_BOW].name1 == ART_CRIMSON)
                msg_print(do_cmd_feeling_text_combat[p_ptr->feeling]);
        else
                msg_print(do_cmd_feeling_text[p_ptr->feeling]);
@@ -4101,30 +4115,6 @@ static concptr monster_group_char[] =
 
 
 /*
- * hook function to sort monsters by level
- */
-static bool ang_sort_comp_monster_level(vptr u, vptr v, int a, int b)
-{
-       u16b *who = (u16b*)(u);
-
-       int w1 = who[a];
-       int w2 = who[b];
-
-       monster_race *r_ptr1 = &r_info[w1];
-       monster_race *r_ptr2 = &r_info[w2];
-
-       /* Unused */
-       (void)v;
-
-       if (r_ptr2->level > r_ptr1->level) return TRUE;
-       if (r_ptr1->level > r_ptr2->level) return FALSE;
-
-       if ((r_ptr2->flags1 & RF1_UNIQUE) && !(r_ptr1->flags1 & RF1_UNIQUE)) return TRUE;
-       if ((r_ptr1->flags1 & RF1_UNIQUE) && !(r_ptr2->flags1 & RF1_UNIQUE)) return FALSE;
-       return w1 <= w2;
-}
-
-/*
  * Build a list of monster indexes in the given group. Return the number
  * of monsters in the group.
  *
@@ -4212,12 +4202,7 @@ static IDX collect_monsters(IDX grp_cur, IDX mon_idx[], BIT_FLAGS8 mode)
        /* Terminate the list */
        mon_idx[mon_cnt] = -1;
 
-       /* Select the sort method */
-       ang_sort_comp = ang_sort_comp_monster_level;
-       ang_sort_swap = ang_sort_swap_hook;
-
-       /* Sort by monster level */
-       ang_sort(mon_idx, &dummy_why, mon_cnt);
+       ang_sort(mon_idx, &dummy_why, mon_cnt, ang_sort_comp_monster_level, ang_sort_swap_hook);
 
        /* Return the number of races */
        return mon_cnt;
@@ -4472,7 +4457,6 @@ static FEAT_IDX collect_features(int grp_cur, FEAT_IDX *feat_idx, BIT_FLAGS8 mod
        /* Check every feature */
        for (i = 0; i < max_f_idx; i++)
        {
-               /* Access the index */
                feature_type *f_ptr = &f_info[i];
 
                /* Skip empty index */
@@ -4629,8 +4613,6 @@ void do_cmd_load_screen(void)
                        Term_draw(x, y, a, c);
                }
        }
-
-       /* Close it */
        my_fclose(fff);
 
        prt(_("ファイルに書き出された画面(記念撮影)をロードしました。", "Screen dump loaded."), 0, 0);
@@ -4793,12 +4775,12 @@ static void do_cmd_knowledge_inven(void)
                strcpy(where, _("装", "E "));
                for (i = INVEN_RARM; i < INVEN_TOTAL; i++)
                {
-                       do_cmd_knowledge_inven_aux(fff, &inventory[i], &j, tval, where);
+                       do_cmd_knowledge_inven_aux(fff, &p_ptr->inventory_list[i], &j, tval, where);
                }
                strcpy(where, _("持", "I "));
                for (i = 0; i < INVEN_PACK; i++)
                {
-                       do_cmd_knowledge_inven_aux(fff, &inventory[i], &j, tval, where);
+                       do_cmd_knowledge_inven_aux(fff, &p_ptr->inventory_list[i], &j, tval, where);
                }
 
                st_ptr = &town_info[1].store[STORE_HOME];
@@ -4812,8 +4794,6 @@ static void do_cmd_knowledge_inven(void)
 
        /* Display the file contents */
        show_file(TRUE, file_name, _("*鑑定*済み武器/防具の耐性リスト", "Resistances of *identified* equipment"), 0, 0);
-
-       /* Remove the file */
        fd_kill(file_name);
 }
 
@@ -4956,8 +4936,6 @@ void do_cmd_save_screen_html_aux(char *filename, int message)
 
        /* Skip a line */
        fprintf(fff, "\n");
-
-       /* Close it */
        my_fclose(fff);
 
        if (message) {
@@ -5116,8 +5094,6 @@ void do_cmd_save_screen(void)
 
                /* Skip a line */
                fprintf(fff, "\n");
-
-               /* Close it */
                my_fclose(fff);
 
                msg_print(_("画面(記念撮影)をファイルに書き出しました。", "Screen dump saved."));
@@ -5134,90 +5110,6 @@ void do_cmd_save_screen(void)
        }
 }
 
-
-/*
- * Sorting hook -- Comp function -- see below
- *
- * We use "u" to point to array of monster indexes,
- * and "v" to select the type of sorting to perform on "u".
- */
-static bool ang_sort_art_comp(vptr u, vptr v, int a, int b)
-{
-       u16b *who = (u16b*)(u);
-
-       u16b *why = (u16b*)(v);
-
-       int w1 = who[a];
-       int w2 = who[b];
-
-       int z1, z2;
-
-       /* Sort by total kills */
-       if (*why >= 3)
-       {
-               /* Extract total kills */
-               z1 = a_info[w1].tval;
-               z2 = a_info[w2].tval;
-
-               /* Compare total kills */
-               if (z1 < z2) return (TRUE);
-               if (z1 > z2) return (FALSE);
-       }
-
-
-       /* Sort by monster level */
-       if (*why >= 2)
-       {
-               /* Extract levels */
-               z1 = a_info[w1].sval;
-               z2 = a_info[w2].sval;
-
-               /* Compare levels */
-               if (z1 < z2) return (TRUE);
-               if (z1 > z2) return (FALSE);
-       }
-
-
-       /* Sort by monster experience */
-       if (*why >= 1)
-       {
-               /* Extract experience */
-               z1 = a_info[w1].level;
-               z2 = a_info[w2].level;
-
-               /* Compare experience */
-               if (z1 < z2) return (TRUE);
-               if (z1 > z2) return (FALSE);
-       }
-
-
-       /* Compare indexes */
-       return (w1 <= w2);
-}
-
-
-/*
- * Sorting hook -- Swap function -- see below
- *
- * We use "u" to point to array of monster indexes,
- * and "v" to select the type of sorting to perform.
- */
-static void ang_sort_art_swap(vptr u, vptr v, int a, int b)
-{
-       u16b *who = (u16b*)(u);
-
-       u16b holder;
-
-       /* Unused */
-       (void)v;
-
-       /* Swap */
-       holder = who[a];
-       who[a] = who[b];
-       who[b] = holder;
-}
-
-
 /*
  * Check the status of "artifacts"
  */
@@ -5297,10 +5189,10 @@ static void do_cmd_knowledge_artifacts(void)
                }
        }
 
-       /* Check the inventory and equipment */
+       /* Check the p_ptr->inventory_list and equipment */
        for (i = 0; i < INVEN_TOTAL; i++)
        {
-               object_type *o_ptr = &inventory[i];
+               object_type *o_ptr = &p_ptr->inventory_list[i];
 
                /* Ignore non-objects */
                if (!o_ptr->k_idx) continue;
@@ -5320,19 +5212,12 @@ static void do_cmd_knowledge_artifacts(void)
                if (okay[k]) who[n++] = k;
        }
 
-       /* Select the sort method */
-       ang_sort_comp = ang_sort_art_comp;
-       ang_sort_swap = ang_sort_art_swap;
-
-       /* Sort the array by dungeon depth of monsters */
-       ang_sort(who, &why, n);
+       ang_sort(who, &why, n, ang_sort_art_comp, ang_sort_art_swap);
 
        /* Scan the artifacts */
        for (k = 0; k < n; k++)
        {
                artifact_type *a_ptr = &a_info[who[k]];
-
-               /* Paranoia */
                strcpy(base_name, _("未知の伝説のアイテム", "Unknown Artifact"));
 
                /* Obtain the base object type */
@@ -5371,8 +5256,6 @@ static void do_cmd_knowledge_artifacts(void)
 
        /* Display the file contents */
        show_file(TRUE, file_name, _("既知の伝説のアイテム", "Artifacts Seen"), 0, 0);
-
-       /* Remove the file */
        fd_kill(file_name);
 }
 
@@ -5449,12 +5332,8 @@ static void do_cmd_knowledge_uniques(void)
                who[n++] = i;
        }
 
-       /* Select the sort method */
-       ang_sort_comp = ang_sort_comp_hook;
-       ang_sort_swap = ang_sort_swap_hook;
-
        /* Sort the array by dungeon depth of monsters */
-       ang_sort(who, &why, n);
+       ang_sort(who, &why, n, ang_sort_comp_hook, ang_sort_swap_hook);
 
        if (n_alive_surface)
        {
@@ -5496,8 +5375,6 @@ static void do_cmd_knowledge_uniques(void)
 
        /* Display the file contents */
        show_file(TRUE, file_name, _("まだ生きているユニーク・モンスター", "Alive Uniques"), 0, 0);
-
-       /* Remove the file */
        fd_kill(file_name);
 }
 
@@ -5553,8 +5430,6 @@ static void do_cmd_knowledge_weapon_exp(void)
 
        /* Display the file contents */
        show_file(TRUE, file_name, _("武器の経験値", "Weapon Proficiency"), 0, 0);
-
-       /* Remove the file */
        fd_kill(file_name);
 }
 
@@ -5642,8 +5517,6 @@ static void do_cmd_knowledge_spell_exp(void)
 
        /* Display the file contents */
        show_file(TRUE, file_name, _("魔法の経験値", "Spell Proficiency"), 0, 0);
-
-       /* Remove the file */
        fd_kill(file_name);
 }
 
@@ -5690,8 +5563,6 @@ static void do_cmd_knowledge_skill_exp(void)
 
        /* Display the file contents */
        show_file(TRUE, file_name, _("技能の経験値", "Miscellaneous Proficiency"), 0, 0);
-
-       /* Remove the file */
        fd_kill(file_name);
 }
 
@@ -5846,13 +5717,13 @@ static void do_cmd_knowledge_pets(void)
        }
 
        /* Process the monsters (backwards) */
-       for (i = m_max - 1; i >= 1; i--)
+       for (i = current_floor_ptr->m_max - 1; i >= 1; i--)
        {
                /* Access the monster */
                m_ptr = &current_floor_ptr->m_list[i];
 
                /* Ignore "dead" monsters */
-               if (!m_ptr->r_idx) continue;
+               if (!monster_is_valid(m_ptr)) continue;
 
                /* Calculate "upkeep" for pets */
                if (is_pet(m_ptr))
@@ -5878,8 +5749,6 @@ static void do_cmd_knowledge_pets(void)
 
        /* Display the file contents */
        show_file(TRUE, file_name, _("現在のペット", "Current Pets"), 0, 0);
-
-       /* Remove the file */
        fd_kill(file_name);
 }
 
@@ -5963,12 +5832,8 @@ static void do_cmd_knowledge_kill_count(void)
                if (r_ptr->name) who[n++] = i;
        }
 
-       /* Select the sort method */
-       ang_sort_comp = ang_sort_comp_hook;
-       ang_sort_swap = ang_sort_swap_hook;
-
        /* Sort the array by dungeon depth of monsters */
-       ang_sort(who, &why, n);
+       ang_sort(who, &why, n, ang_sort_comp_hook, ang_sort_swap_hook);
 
        /* Scan the monster races */
        for (k = 0; k < n; k++)
@@ -6038,8 +5903,6 @@ static void do_cmd_knowledge_kill_count(void)
 
        /* Display the file contents */
        show_file(TRUE, file_name, _("倒した敵の数", "Kill Count"), 0, 0);
-
-       /* Remove the file */
        fd_kill(file_name);
 }
 
@@ -6794,8 +6657,6 @@ static void desc_obj_fake(KIND_OBJECT_IDX k_idx)
        object_type object_type_body;
        o_ptr = &object_type_body;
        object_wipe(o_ptr);
-
-       /* Create the artifact */
        object_prep(o_ptr, k_idx);
 
        /* It's fully know */
@@ -7124,13 +6985,8 @@ static void display_feature_list(int col, int row, int per_page, FEAT_IDX *feat_
        for (i = 0; i < per_page && (feat_idx[feat_top + i] >= 0); i++)
        {
                TERM_COLOR attr;
-
-               /* Get the index */
                FEAT_IDX f_idx = feat_idx[feat_top + i];
-
-               /* Access the index */
                feature_type *f_ptr = &f_info[f_idx];
-
                int row_i = row + i;
 
                /* Choose a color */
@@ -7550,8 +7406,6 @@ static void do_cmd_knowledge_kubi(void)
        
        /* Display the file contents */
        show_file(TRUE, file_name, _("賞金首の一覧", "Wanted monsters"), 0, 0);
-       
-       /* Remove the file */
        fd_kill(file_name);
 }
 
@@ -7580,8 +7434,6 @@ static void do_cmd_knowledge_virtues(void)
        
        /* Display the file contents */
        show_file(TRUE, file_name, _("八つの徳", "Virtues"), 0, 0);
-       
-       /* Remove the file */
        fd_kill(file_name);
 }
 
@@ -7624,8 +7476,6 @@ static void do_cmd_knowledge_dungeon(void)
        
        /* Display the file contents */
        show_file(TRUE, file_name, _("今までに入ったダンジョン", "Dungeon"), 0, 0);
-       
-       /* Remove the file */
        fd_kill(file_name);
 }
 
@@ -7671,8 +7521,6 @@ static void do_cmd_knowledge_stat(void)
        
        /* Display the file contents */
        show_file(TRUE, file_name, _("自分に関する情報", "HP-rate & Max stat"), 0, 0);
-       
-       /* Remove the file */
        fd_kill(file_name);
 }
 
@@ -7986,35 +7834,6 @@ static void do_cmd_knowledge_quests_wiz_random(FILE *fff)
        if (!total) fprintf(fff, _("  なし\n", "  Nothing.\n"));
 }
 
-
-bool ang_sort_comp_quest_num(vptr u, vptr v, int a, int b)
-{
-       QUEST_IDX *q_num = (QUEST_IDX *)u;
-       quest_type *qa = &quest[q_num[a]];
-       quest_type *qb = &quest[q_num[b]];
-
-       /* Unused */
-       (void)v;
-
-       return (qa->comptime != qb->comptime) ?
-               (qa->comptime < qb->comptime) :
-               (qa->level <= qb->level);
-}
-
-void ang_sort_swap_quest_num(vptr u, vptr v, int a, int b)
-{
-       QUEST_IDX *q_num = (QUEST_IDX *)u;
-       QUEST_IDX tmp;
-
-       /* Unused */
-       (void)v;
-
-       tmp = q_num[a];
-       q_num[a] = q_num[b];
-       q_num[b] = tmp;
-}
-
-
 /*
  * Print quest status of all active quests
  */
@@ -8040,9 +7859,7 @@ static void do_cmd_knowledge_quests(void)
 
        /* Sort by compete level */
        for (i = 1; i < max_q_idx; i++) quest_num[i] = i;
-       ang_sort_comp = ang_sort_comp_quest_num;
-       ang_sort_swap = ang_sort_swap_quest_num;
-       ang_sort(quest_num, &dummy, max_q_idx);
+       ang_sort(quest_num, &dummy, max_q_idx, ang_sort_comp_quest_num, ang_sort_swap_quest_num);
 
        /* Dump Quest Information */
        do_cmd_knowledge_quests_current(fff);
@@ -8059,8 +7876,6 @@ static void do_cmd_knowledge_quests(void)
 
        /* Display the file contents */
        show_file(TRUE, file_name, _("クエスト達成状況", "Quest status"), 0, 0);
-
-       /* Remove the file */
        fd_kill(file_name);
 
        /* Free Memory */
@@ -8141,8 +7956,6 @@ static void do_cmd_knowledge_home(void)
 
        /* Display the file contents */
        show_file(TRUE, file_name, _("我が家のアイテム", "Home Inventory"), 0, 0);
-
-       /* Remove the file */
        fd_kill(file_name);
 }
 
@@ -8210,8 +8023,6 @@ static void do_cmd_knowledge_autopick(void)
        my_fclose(fff);
        /* Display the file contents */
        show_file(TRUE, file_name, _("自動拾い/破壊 設定リスト", "Auto-picker/Destroyer"), 0, 0);
-
-       /* Remove the file */
        fd_kill(file_name);
 }
 
@@ -8274,7 +8085,7 @@ void do_cmd_knowledge(void)
                        prt("(5) Display kill count", 10, 5);
                        if (!vanilla_town) prt("(6) Display wanted monsters", 11, 5);
                        prt("(7) Display current pets", 12, 5);
-                       prt("(8) Display home inventory", 13, 5);
+                       prt("(8) Display home p_ptr->inventory_list", 13, 5);
                        prt("(9) Display *identified* equip.", 14, 5);
                        prt("(0) Display terrain symbols.", 15, 5);
                }