*/
#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"
/*
*/
return (-1);
}
- q_idx = quest_number(dun_level);
+ q_idx = quest_number(current_floor_ptr->dun_level);
if (write_level)
{
if (p_ptr->inside_arena)
note_level = _("アリーナ:", "Arane:");
- else if (!dun_level)
+ else if (!current_floor_ptr->dun_level)
note_level = _("地上:", "Surface:");
else if (q_idx && (is_fixed_quest_idx(q_idx)
&& !((q_idx == QUEST_OBERON) || (q_idx == QUEST_SERPENT))))
else
{
#ifdef JP
- sprintf(note_level_buf, "%d階(%s):", (int)dun_level, d_name+d_info[p_ptr->dungeon_idx].name);
+ sprintf(note_level_buf, "%d階(%s):", (int)current_floor_ptr->dun_level, d_name+d_info[p_ptr->dungeon_idx].name);
#else
- sprintf(note_level_buf, "%s L%d:", d_name+d_info[p_ptr->dungeon_idx].name, (int)dun_level);
+ sprintf(note_level_buf, "%s L%d:", d_name+d_info[p_ptr->dungeon_idx].name, (int)current_floor_ptr->dun_level);
#endif
note_level = note_level_buf;
}
}
else
{
- if (!(dun_level+num)) to = _("地上", "the surface");
- else to = format(_("%d階", "level %d"), dun_level+num);
+ if (!(current_floor_ptr->dun_level+num)) to = _("地上", "the surface");
+ else to = format(_("%d階", "level %d"), current_floor_ptr->dun_level+num);
}
fprintf(fff, _(" %2d:%02d %20s %sへ%s。\n", " %2d:%02d %20s %s %s.\n"), hour, min, note_level, _(to, note), _(note, to));
break;
case NIKKI_WIZ_TELE:
{
concptr to;
- if (!dun_level)
+ if (!current_floor_ptr->dun_level)
to = _("地上", "the surface");
else
- to = format(_("%d階(%s)", "level %d of %s"), dun_level, d_name+d_info[p_ptr->dungeon_idx].name);
+ to = format(_("%d階(%s)", "level %d of %s"), current_floor_ptr->dun_level, d_name+d_info[p_ptr->dungeon_idx].name);
fprintf(fff, _(" %2d:%02d %20s %sへとウィザード・テレポートで移動した。\n",
" %2d:%02d %20s wizard-teleport to %s.\n"), hour, min, note_level, to);
case NIKKI_PAT_TELE:
{
concptr to;
- if (!dun_level)
+ if (!current_floor_ptr->dun_level)
to = _("地上", "the surface");
else
- to = format(_("%d階(%s)", "level %d of %s"), dun_level, d_name+d_info[p_ptr->dungeon_idx].name);
+ to = format(_("%d階(%s)", "level %d of %s"), current_floor_ptr->dun_level, d_name+d_info[p_ptr->dungeon_idx].name);
fprintf(fff, _(" %2d:%02d %20s %sへとパターンの力で移動した。\n",
" %2d:%02d %20s used Pattern to teleport to %s.\n"), hour, min, note_level, to);
static void do_cmd_last_get(void)
{
char buf[256];
- s32b turn_tmp;
+ GAME_TURN turn_tmp;
if (record_o_name[0] == '\0') return;
sprintf(buf,_("%sの入手を記録します。", "Do you really want to record getting %s? "),record_o_name);
if (!get_check(buf)) return;
- turn_tmp = turn;
- turn = record_turn;
+ turn_tmp = current_world_ptr->game_turn;
+ current_world_ptr->game_turn = record_turn;
sprintf(buf,_("%sを手に入れた。", "descover %s."), record_o_name);
do_cmd_write_nikki(NIKKI_BUNSHOU, 0, buf);
- turn = turn_tmp;
+ current_world_ptr->game_turn = turn_tmp;
}
/*!
/* Build the filename */
path_build(buf, sizeof(buf), ANGBAND_DIR_USER, file_name);
-
- /* Remove the file */
fd_kill(buf);
fff = my_fopen(buf, "w");
if (p_ptr->wild_mode) return;
/* No useful feeling in quests */
- if (p_ptr->inside_quest && !random_quest_number(dun_level))
+ if (p_ptr->inside_quest && !random_quest_number(current_floor_ptr->dun_level))
{
msg_print(_("典型的なクエストのダンジョンのようだ。", "Looks like a typical quest level."));
return;
}
/* No useful feeling in town */
- else if (p_ptr->town_num && !dun_level)
+ else if (p_ptr->town_num && !current_floor_ptr->dun_level)
{
- if (!strcmp(town[p_ptr->town_num].name, _("荒野", "wilderness")))
+ if (!strcmp(town_info[p_ptr->town_num].name, _("荒野", "wilderness")))
{
msg_print(_("何かありそうな荒野のようだ。", "Looks like a strange wilderness."));
return;
}
/* No useful feeling in the wilderness */
- else if (!dun_level)
+ else if (!current_floor_ptr->dun_level)
{
msg_print(_("典型的な荒野のようだ。", "Looks like a typical wilderness."));
return;
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]);
/*
- * 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.
*
int j;
for (j = 0; j < MAX_KUBI; j++)
{
- if (kubi_r_idx[j] == i || kubi_r_idx[j] - 10000 == i ||
+ if (current_world_ptr->bounty_r_idx[j] == i || current_world_ptr->bounty_r_idx[j] - 10000 == i ||
(p_ptr->today_mon && p_ptr->today_mon == i))
{
wanted = TRUE;
/* 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;
/* Check every feature */
for (i = 0; i < max_f_idx; i++)
{
- /* Access the index */
feature_type *f_ptr = &f_info[i];
/* Skip empty index */
Term_draw(x, y, a, c);
}
}
-
- /* Close it */
my_fclose(fff);
prt(_("ファイルに書き出された画面(記念撮影)をロードしました。", "Screen dump loaded."), 0, 0);
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[1].store[STORE_HOME];
+ st_ptr = &town_info[1].store[STORE_HOME];
strcpy(where, _("家", "H "));
for (i = 0; i < st_ptr->stock_num; i++)
{
/* Display the file contents */
show_file(TRUE, file_name, _("*鑑定*済み武器/防具の耐性リスト", "Resistances of *identified* equipment"), 0, 0);
-
- /* Remove the file */
fd_kill(file_name);
}
/* Skip a line */
fprintf(fff, "\n");
-
- /* Close it */
my_fclose(fff);
if (message) {
/* Skip a line */
fprintf(fff, "\n");
-
- /* Close it */
my_fclose(fff);
msg_print(_("画面(記念撮影)をファイルに書き出しました。", "Screen dump saved."));
}
}
-
-/*
- * 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"
*/
}
/* Check the dungeon */
- for (y = 0; y < cur_hgt; y++)
+ for (y = 0; y < current_floor_ptr->height; y++)
{
- for (x = 0; x < cur_wid; x++)
+ for (x = 0; x < current_floor_ptr->width; x++)
{
- cave_type *c_ptr = &cave[y][x];
+ grid_type *g_ptr = ¤t_floor_ptr->grid_array[y][x];
OBJECT_IDX this_o_idx, next_o_idx = 0;
/* Scan all objects in the grid */
- for (this_o_idx = c_ptr->o_idx; this_o_idx; this_o_idx = next_o_idx)
+ for (this_o_idx = g_ptr->o_idx; this_o_idx; this_o_idx = next_o_idx)
{
object_type *o_ptr;
- o_ptr = &o_list[this_o_idx];
-
- /* Acquire next object */
+ o_ptr = ¤t_floor_ptr->o_list[this_o_idx];
next_o_idx = o_ptr->next_o_idx;
/* Ignore non-artifacts */
}
}
- /* 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;
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 */
/* Display the file contents */
show_file(TRUE, file_name, _("既知の伝説のアイテム", "Artifacts Seen"), 0, 0);
-
- /* Remove the file */
fd_kill(file_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);
if (n_alive_surface)
{
/* Display the file contents */
show_file(TRUE, file_name, _("まだ生きているユニーク・モンスター", "Alive Uniques"), 0, 0);
-
- /* Remove the file */
fd_kill(file_name);
}
/* Display the file contents */
show_file(TRUE, file_name, _("武器の経験値", "Weapon Proficiency"), 0, 0);
-
- /* Remove the file */
fd_kill(file_name);
}
/* Display the file contents */
show_file(TRUE, file_name, _("魔法の経験値", "Spell Proficiency"), 0, 0);
-
- /* Remove the file */
fd_kill(file_name);
}
/* Display the file contents */
show_file(TRUE, file_name, _("技能の経験値", "Miscellaneous Proficiency"), 0, 0);
-
- /* Remove the file */
fd_kill(file_name);
}
}
/* 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 = &m_list[i];
+ m_ptr = ¤t_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))
/* Display the file contents */
show_file(TRUE, file_name, _("現在のペット", "Current Pets"), 0, 0);
-
- /* Remove the file */
fd_kill(file_name);
}
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++)
/* Display the file contents */
show_file(TRUE, file_name, _("倒した敵の数", "Kill Count"), 0, 0);
-
- /* Remove the file */
fd_kill(file_name);
}
int old_grp = grp;
/* Move up or down */
- grp += ddy[d];
+ grp += (IDX)ddy[d];
/* Verify */
if (grp >= grp_cnt) grp = grp_cnt - 1;
else
{
/* Move up or down */
- list += ddy[d];
+ list += (IDX)ddy[d];
/* Verify */
if (list >= list_cnt) list = list_cnt - 1;
if ((a == 0x7f) && (ddy[d] > 0)) d = 0;
if ((c == 0xff) && (ddx[d] > 0)) d = 0;
- a += ddy[d];
- c += ddx[d];
+ a += (TERM_COLOR)ddy[d];
+ c += (SYMBOL_CODE)ddx[d];
/* Force correct code for both ASCII character and tile */
if (c & 0x80) a |= 0x80;
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 */
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 */
for (i = 0; i < MAX_KUBI; i++)
{
- if (kubi_r_idx[i] <= 10000)
+ if (current_world_ptr->bounty_r_idx[i] <= 10000)
{
- fprintf(fff,"%s\n", r_name + r_info[kubi_r_idx[i]].name);
+ fprintf(fff,"%s\n", r_name + r_info[current_world_ptr->bounty_r_idx[i]].name);
listed = TRUE;
}
/* Display the file contents */
show_file(TRUE, file_name, _("賞金首の一覧", "Wanted monsters"), 0, 0);
-
- /* Remove the file */
fd_kill(file_name);
}
/* Display the file contents */
show_file(TRUE, file_name, _("八つの徳", "Virtues"), 0, 0);
-
- /* Remove the file */
fd_kill(file_name);
}
/* Display the file contents */
show_file(TRUE, file_name, _("今までに入ったダンジョン", "Dungeon"), 0, 0);
-
- /* Remove the file */
fd_kill(file_name);
}
/* Display the file contents */
show_file(TRUE, file_name, _("自分に関する情報", "HP-rate & Max stat"), 0, 0);
-
- /* Remove the file */
fd_kill(file_name);
}
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
*/
/* 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);
/* Display the file contents */
show_file(TRUE, file_name, _("クエスト達成状況", "Quest status"), 0, 0);
-
- /* Remove the file */
fd_kill(file_name);
/* Free Memory */
GAME_TEXT o_name[MAX_NLEN];
concptr paren = ")";
- process_dungeon_file("w_info.txt", 0, 0, max_wild_y, max_wild_x);
+ process_dungeon_file("w_info.txt", 0, 0, current_world_ptr->max_wild_y, current_world_ptr->max_wild_x);
/* Open a new file */
fff = my_fopen_temp(file_name, 1024);
if (fff)
{
/* Print all homes in the different towns */
- st_ptr = &town[1].store[STORE_HOME];
+ st_ptr = &town_info[1].store[STORE_HOME];
/* Home -- if anything there */
if (st_ptr->stock_num)
/* Display the file contents */
show_file(TRUE, file_name, _("我が家のアイテム", "Home Inventory"), 0, 0);
-
- /* Remove the file */
fd_kill(file_name);
}
my_fclose(fff);
/* Display the file contents */
show_file(TRUE, file_name, _("自動拾い/破壊 設定リスト", "Auto-picker/Destroyer"), 0, 0);
-
- /* Remove the file */
fd_kill(file_name);
}
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);
}