*/
#include "angband.h"
+#include "core.h"
+#include "util.h"
+
#include "artifact.h"
+#include "floor.h"
#include "cmd-activate.h"
+#include "objectkind.h"
+#include "object-ego.h"
+#include "object-flavor.h"
#include "object-hook.h"
#include "player-move.h"
+#include "monster.h"
+#include "files.h"
+#include "term.h"
+#include "cmd-smith.h"
+#include "snipe.h"
+#include "view-mainwindow.h"
#if defined(MACINTOSH) || defined(MACH_O_CARBON)
#ifdef verify
process_pref_file("graf.prf");
/* Access the "character" pref file */
- sprintf(buf, "graf-%s.prf", player_base);
+ sprintf(buf, "graf-%s.prf", p_ptr->base_name);
/* Process "graf-<playername>.prf" */
process_pref_file(buf);
process_pref_file("font.prf");
/* Access the "character" pref file */
- sprintf(buf, "font-%s.prf", player_base);
+ sprintf(buf, "font-%s.prf", p_ptr->base_name);
/* Process "font-<playername>.prf" */
process_pref_file(buf);
/*!
* @brief オブジェクト選択時の選択アルファベットラベルを返す /
- * Convert an inventory index into a one character label
+ * Convert an p_ptr->inventory_list index into a one character label
* @param i プレイヤーの所持/装備オブジェクトID
* @return 対応するアルファベット
* @details Note that the label does NOT distinguish inven/equip.
if ((i < 0) || (i > INVEN_PACK)) return (-1);
/* Empty slots can never be chosen */
- if (!inventory[i].k_idx) return (-1);
+ if (!p_ptr->inventory_list[i].k_idx) return (-1);
/* Return the index */
return (i);
if (select_ring_slot) return is_ring_slot(i) ? i : -1;
/* Empty slots can never be chosen */
- if (!inventory[i].k_idx) return (-1);
+ if (!p_ptr->inventory_list[i].k_idx) return (-1);
/* Return the index */
return (i);
case TV_POLEARM:
case TV_SWORD:
{
- if (!inventory[INVEN_RARM].k_idx) return (INVEN_RARM);
- if (inventory[INVEN_LARM].k_idx) return (INVEN_RARM);
+ if (!p_ptr->inventory_list[INVEN_RARM].k_idx) return (INVEN_RARM);
+ if (p_ptr->inventory_list[INVEN_LARM].k_idx) return (INVEN_RARM);
return (INVEN_LARM);
}
case TV_CARD:
case TV_SHIELD:
{
- if (!inventory[INVEN_LARM].k_idx) return (INVEN_LARM);
- if (inventory[INVEN_RARM].k_idx) return (INVEN_LARM);
+ if (!p_ptr->inventory_list[INVEN_LARM].k_idx) return (INVEN_LARM);
+ if (p_ptr->inventory_list[INVEN_RARM].k_idx) return (INVEN_LARM);
return (INVEN_RARM);
}
case TV_RING:
{
/* Use the right hand first */
- if (!inventory[INVEN_RIGHT].k_idx) return (INVEN_RIGHT);
+ if (!p_ptr->inventory_list[INVEN_RIGHT].k_idx) return (INVEN_RIGHT);
/* Use the left hand for swapping (by default) */
return (INVEN_LEFT);
case INVEN_LARM: p = p_ptr->heavy_wield[1] ? "Just lifting" : (p_ptr->hidarite ? "Wielding" : "On arm"); break;
#endif
- case INVEN_BOW: p = (adj_str_hold[p_ptr->stat_ind[A_STR]] < inventory[i].weight / 10) ? _("運搬中", "Just holding") : _("射撃用", "Shooting"); break;
+ case INVEN_BOW: p = (adj_str_hold[p_ptr->stat_ind[A_STR]] < p_ptr->inventory_list[i].weight / 10) ? _("運搬中", "Just holding") : _("射撃用", "Shooting"); break;
case INVEN_RIGHT: p = (left_hander ? _("左手指", "On left hand") : _("右手指", "On right hand")); break;
case INVEN_LEFT: p = (left_hander ? _("右手指", "On right hand") : _("左手指", "On left hand")); break;
case INVEN_NECK: p = _(" 首", "Around neck"); break;
* @param i 状態表現を求めるプレイヤーの所持/装備オブジェクトID
* @return 状態表現内容の文字列ポインタ
* @details
- * Currently, only used for items in the equipment, not inventory.
+ * Currently, only used for items in the equipment, not p_ptr->inventory_list.
*/
concptr describe_use(int i)
{
case INVEN_LARM: p = p_ptr->heavy_wield[1] ? "just lifting" : (p_ptr->hidarite ? "attacking monsters with" : "wearing on your arm"); break;
#endif
- case INVEN_BOW: p = (adj_str_hold[p_ptr->stat_ind[A_STR]] < inventory[i].weight / 10) ? _("持つだけで精一杯の", "just holding") : _("射撃用に装備している", "shooting missiles with"); break;
+ case INVEN_BOW: p = (adj_str_hold[p_ptr->stat_ind[A_STR]] < p_ptr->inventory_list[i].weight / 10) ? _("持つだけで精一杯の", "just holding") : _("射撃用に装備している", "shooting missiles with"); break;
case INVEN_RIGHT: p = (left_hander ? _("左手の指にはめている", "wearing on your left hand") : _("右手の指にはめている", "wearing on your right hand")); break;
case INVEN_LEFT: p = (left_hander ? _("右手の指にはめている", "wearing on your right hand") : _("左手の指にはめている", "wearing on your left hand")); break;
case INVEN_NECK: p = _("首にかけている", "wearing around your neck"); break;
return (REALM1_BOOK == book_tval || REALM2_BOOK == book_tval);
}
+/*
+ * Here is a "hook" used during calls to "get_item()" and
+ * "show_inven()" and "show_equip()", and the choice window routines.
+ */
+bool(*item_tester_hook)(object_type*);
+
+/*
+ * Here is a "pseudo-hook" used during calls to "get_item()" and
+ * "show_inven()" and "show_equip()", and the choice window routines.
+ */
+OBJECT_TYPE_VALUE item_tester_tval;
+
/*!
* @brief アイテムがitem_tester_hookグローバル関数ポインタの条件を満たしているかを返す汎用関数
* Check an item against the item tester info
Term_get_size(&wid, &hgt);
- /* Find the "final" slot */
for (i = 0; i < INVEN_PACK; i++)
{
- o_ptr = &inventory[i];
-
- /* Skip non-objects */
+ o_ptr = &p_ptr->inventory_list[i];
if (!o_ptr->k_idx) continue;
-
- /* Track */
z = i + 1;
}
- /* Display the pack */
for (i = 0; i < z; i++)
{
- /* Examine the item */
- o_ptr = &inventory[i];
-
- /* Start with an empty "index" */
+ o_ptr = &p_ptr->inventory_list[i];
tmp_val[0] = tmp_val[1] = tmp_val[2] = ' ';
-
- /* Is this item "acceptable"? */
if (item_tester_okay(o_ptr))
{
- /* Prepare an "index" */
tmp_val[0] = index_to_label(i);
-
- /* Bracket the "index" --(-- */
tmp_val[1] = ')';
}
- /* Display the index (or blank space) */
Term_putstr(0, i, 3, TERM_WHITE, tmp_val);
-
- /* Obtain an item description */
object_desc(o_name, o_ptr, 0);
-
- /* Obtain the length of the description */
n = strlen(o_name);
-
- /* Get a color */
attr = tval_to_attr[o_ptr->tval % 128];
-
- /* Grey out charging items */
if (o_ptr->timeout)
{
attr = TERM_L_DARK;
}
- /* Display the entry itself */
Term_putstr(3, i, n, attr, o_name);
-
- /* Erase the rest of the line */
Term_erase(3+n, i, 255);
- /* Display the weight if needed */
if (show_weights)
{
int wgt = o_ptr->weight * o_ptr->number;
#else
sprintf(tmp_val, "%3d.%1d lb", wgt / 10, wgt % 10);
#endif
-
prt(tmp_val, i, wid - 9);
}
}
- /* Erase the rest of the window */
for (i = z; i < hgt; i++)
{
- /* Erase the line */
Term_erase(0, i, 255);
}
}
for (i = INVEN_RARM; i < INVEN_TOTAL; i++)
{
- /* Examine the item */
- o_ptr = &inventory[i];
-
- /* Start with an empty "index" */
+ o_ptr = &p_ptr->inventory_list[i];
tmp_val[0] = tmp_val[1] = tmp_val[2] = ' ';
-
- /* Is this item "acceptable"? */
if (select_ring_slot ? is_ring_slot(i) : item_tester_okay(o_ptr))
{
- /* Prepare an "index" */
tmp_val[0] = index_to_label(i);
-
- /* Bracket the "index" --(-- */
tmp_val[1] = ')';
}
- /* Display the index (or blank space) */
Term_putstr(0, i - INVEN_RARM, 3, TERM_WHITE, tmp_val);
-
- /* Obtain an item description */
if ((((i == INVEN_RARM) && p_ptr->hidarite) || ((i == INVEN_LARM) && p_ptr->migite)) && p_ptr->ryoute)
{
strcpy(o_name, _("(武器を両手持ち)", "(wielding with two-hands)"));
attr = tval_to_attr[o_ptr->tval % 128];
}
- /* Obtain the length of the description */
n = strlen(o_name);
-
- /* Grey out charging items */
if (o_ptr->timeout)
{
attr = TERM_L_DARK;
}
-
- /* Display the entry itself */
Term_putstr(3, i - INVEN_RARM, n, attr, o_name);
- /* Erase the rest of the line */
- Term_erase(3+n, i - INVEN_RARM, 255);
+ Term_erase(3 + n, i - INVEN_RARM, 255);
- /* Display the weight (if needed) */
if (show_weights)
{
int wgt = o_ptr->weight * o_ptr->number;
prt(tmp_val, i - INVEN_RARM, wid - (show_labels ? 28 : 9));
}
- /* Display the slot description (if needed) */
if (show_labels)
{
Term_putstr(wid - 20, i - INVEN_RARM, -1, TERM_WHITE, " <-- ");
}
}
- /* Erase the rest of the window */
for (i = INVEN_TOTAL - INVEN_RARM; i < hgt; i++)
{
- /* Clear that line */
Term_erase(0, i, 255);
}
}
/*!
* @brief 所持/装備オブジェクトに選択タグを与える/タグに該当するオブジェクトがあるかを返す /
- * Find the "first" inventory object with the given "tag".
+ * Find the "first" p_ptr->inventory_list object with the given "tag".
* @param cp 対応するタグIDを与える参照ポインタ
* @param tag 該当するオブジェクトがあるかを調べたいタグ
* @param mode 所持、装備の切り替え
/**** Find a tag in the form of {@x#} (allow alphabet tag) ***/
- /* Check every inventory object */
+ /* Check every p_ptr->inventory_list object */
for (i = start; i <= end; i++)
{
- object_type *o_ptr = &inventory[i];
-
- /* Skip non-objects */
+ object_type *o_ptr = &p_ptr->inventory_list[i];
if (!o_ptr->k_idx) continue;
/* Skip empty inscriptions */
/* Check the special tags */
if ((s[1] == command_cmd) && (s[2] == tag))
{
- /* Save the actual inventory ID */
+ /* Save the actual p_ptr->inventory_list ID */
*cp = i;
/* Success */
/* Check every object */
for (i = start; i <= end; i++)
{
- object_type *o_ptr = &inventory[i];
-
- /* Skip non-objects */
+ object_type *o_ptr = &p_ptr->inventory_list[i];
if (!o_ptr->k_idx) continue;
/* Skip empty inscriptions */
/* Check the normal tags */
if (s[1] == tag)
{
- /* Save the actual inventory ID */
+ /* Save the actual p_ptr->inventory_list ID */
*cp = i;
/* Success */
/*!
* @brief 床オブジェクトに選択タグを与える/タグに該当するオブジェクトがあるかを返す /
- * Find the "first" inventory object with the given "tag".
+ * Find the "first" p_ptr->inventory_list object with the given "tag".
* @param cp 対応するタグIDを与える参照ポインタ
* @param tag 該当するオブジェクトがあるかを調べたいタグ
* @param floor_list 床上アイテムの配列
/*!
* @brief 所持アイテムの表示を行う /
- * Display the inventory.
+ * Display the p_ptr->inventory_list.
* @param target_item アイテムの選択処理を行うか否か。
* @return 選択したアイテムのタグ
* @details
/* Find the "final" slot */
for (i = 0; i < INVEN_PACK; i++)
{
- o_ptr = &inventory[i];
-
- /* Skip non-objects */
+ o_ptr = &p_ptr->inventory_list[i];
if (!o_ptr->k_idx) continue;
/* Track */
prepare_label_string(inven_label, USE_INVEN);
- /* Display the inventory */
+ /* Display the p_ptr->inventory_list */
for (k = 0, i = 0; i < z; i++)
{
- o_ptr = &inventory[i];
+ o_ptr = &p_ptr->inventory_list[i];
/* Is this item acceptable? */
if (!item_tester_okay(o_ptr) && !(mode & USE_FULL)) continue;
for (j = 0; j < k; j++)
{
i = out_index[j];
- o_ptr = &inventory[i];
+ o_ptr = &p_ptr->inventory_list[i];
/* Clear the line */
prt("", j + 1, col ? col - 2 : col);
/* Scan the equipment list */
for (k = 0, i = INVEN_RARM; i < INVEN_TOTAL; i++)
{
- o_ptr = &inventory[i];
+ o_ptr = &p_ptr->inventory_list[i];
/* Is this item acceptable? */
if (!(select_ring_slot ? is_ring_slot(i) : item_tester_okay(o_ptr) || (mode & USE_FULL)) &&
for (j = 0; j < k; j++)
{
i = out_index[j];
- o_ptr = &inventory[i];
+ o_ptr = &p_ptr->inventory_list[i];
/* Clear the line */
prt("", j + 1, col ? col - 2 : col);
/* Inventory */
if (item >= 0)
{
- o_ptr = &inventory[item];
+ o_ptr = &p_ptr->inventory_list[item];
}
/* Floor */
/* Inventory */
if (item >= 0)
{
- o_ptr = &inventory[item];
+ o_ptr = &p_ptr->inventory_list[item];
}
/* Floor */
if (select_ring_slot) return is_ring_slot(i);
/* Verify the item */
- if (!item_tester_okay(&inventory[i])) return (FALSE);
+ if (!item_tester_okay(&p_ptr->inventory_list[i])) return (FALSE);
/* Assume okay */
return (TRUE);
ITEM_NUMBER floor_num = 0;
for (j = 0; j < INVEN_TOTAL; j++)
- if (item_tester_okay(&inventory[j]))
+ if (item_tester_okay(&p_ptr->inventory_list[j]))
return TRUE;
floor_num = scan_floor(floor_list, p_ptr->y, p_ptr->x, 0x03);
* All "item_tester" restrictions are cleared before this function returns.\n
*\n
* The user is allowed to choose acceptable items from the equipment,\n
- * inventory, or floor, respectively, if the proper flag was given,\n
+ * p_ptr->inventory_list, or floor, respectively, if the proper flag was given,\n
* and there are any acceptable items in that location.\n
*\n
- * The equipment or inventory are displayed (even if no acceptable\n
+ * The equipment or p_ptr->inventory_list are displayed (even if no acceptable\n
* items are in that location) if the proper flag was given.\n
*\n
* If there are no acceptable items available anywhere, and "str" is\n
*\n
* Note that the user must press "-" to specify the item on the floor,\n
* and there is no way to "examine" the item on the floor, while the\n
- * use of "capital" letters will "examine" an inventory/equipment item,\n
+ * use of "capital" letters will "examine" an p_ptr->inventory_list/equipment item,\n
* and prompt for its use.\n
*\n
- * If a legal item is selected from the inventory, we save it in "cp"\n
+ * If a legal item is selected from the p_ptr->inventory_list, we save it in "cp"\n
* directly (0 to 35), and return TRUE.\n
*\n
* If a legal item is selected from the floor, we save it in "cp" as\n
*\n
* If no item is selected, we do nothing to "cp", and return FALSE.\n
*\n
- * Global "p_ptr->command_new" is used when viewing the inventory or equipment\n
+ * Global "p_ptr->command_new" is used when viewing the p_ptr->inventory_list or equipment\n
* to allow the user to enter a command while viewing those screens, and\n
* also to induce "auto-enter" of stores, and other such stuff.\n
*\n
* out in "browse" mode. It is cleared before this function returns.\n
*\n
* Global "p_ptr->command_wrk" is used to choose between equip/inven listings.\n
- * If it is TRUE then we are viewing inventory, else equipment.\n
+ * If it is TRUE then we are viewing p_ptr->inventory_list, else equipment.\n
*\n
* We always erase the prompt when we are done, leaving a blank line,\n
* or a warning message, if appropriate, if no items are available.\n
item = FALSE;
- /* Full inventory */
+ /* Full p_ptr->inventory_list */
i1 = 0;
i2 = INVEN_PACK - 1;
- /* Forbid inventory */
+ /* Forbid p_ptr->inventory_list */
if (!inven) i2 = -1;
else if (use_menu)
{
for (j = 0; j < INVEN_PACK; j++)
- if (item_tester_okay(&inventory[j]) || (mode & USE_FULL)) max_inven++;
+ if (item_tester_okay(&p_ptr->inventory_list[j]) || (mode & USE_FULL)) max_inven++;
}
- /* Restrict inventory indexes */
+ /* Restrict p_ptr->inventory_list indexes */
while ((i1 <= i2) && (!get_item_okay(i1))) i1++;
while ((i1 <= i2) && (!get_item_okay(i2))) i2--;
else if (use_menu)
{
for (j = INVEN_RARM; j < INVEN_TOTAL; j++)
- if (select_ring_slot ? is_ring_slot(j) : item_tester_okay(&inventory[j]) || (mode & USE_FULL)) max_equip++;
+ if (select_ring_slot ? is_ring_slot(j) : item_tester_okay(&p_ptr->inventory_list[j]) || (mode & USE_FULL)) max_equip++;
if (p_ptr->ryoute && !(mode & IGNORE_BOTHHAND_SLOT)) max_equip++;
}
command_wrk = TRUE;
}
- /* Use inventory if allowed */
+ /* Use p_ptr->inventory_list if allowed */
else if (inven)
{
command_wrk = FALSE;
command_wrk = TRUE;
}
- /* Use inventory for floor */
+ /* Use p_ptr->inventory_list for floor */
else
{
command_wrk = FALSE;
if (command_see) get_item_label = show_equip(menu_line, mode);
}
- /* Viewing inventory */
+ /* Viewing p_ptr->inventory_list */
if (!command_wrk)
{
/* Begin the prompt */
case '\n':
case '\r':
{
- /* Choose "default" inventory item */
+ /* Choose "default" p_ptr->inventory_list item */
if (!command_wrk)
{
k = ((i1 == i2) ? i1 : -1);
ver = isupper(which);
which = (char)tolower(which);
- /* Convert letter to inventory index */
+ /* Convert letter to p_ptr->inventory_list index */
if (!command_wrk)
{
if (which == '(') k = i1;
if (item == INVEN_FORCE) return NULL;
/* Get the item (in the pack) */
- else if (item >= 0) return &inventory[item];
+ else if (item >= 0) return &p_ptr->inventory_list[item];
/* Get the item (on the floor) */
else return ¤t_floor_ptr->o_list[0 - item];
/* Save the index */
out_index[k] = i;
- /* Acquire inventory color */
+ /* Acquire p_ptr->inventory_list color */
out_color[k] = tval_to_attr[o_ptr->tval & 0x7F];
/* Save the object description */
item = FALSE;
- /* Full inventory */
+ /* Full p_ptr->inventory_list */
i1 = 0;
i2 = INVEN_PACK - 1;
- /* Forbid inventory */
+ /* Forbid p_ptr->inventory_list */
if (!inven) i2 = -1;
else if (use_menu)
{
for (j = 0; j < INVEN_PACK; j++)
- if (item_tester_okay(&inventory[j]) || (mode & USE_FULL)) max_inven++;
+ if (item_tester_okay(&p_ptr->inventory_list[j]) || (mode & USE_FULL)) max_inven++;
}
- /* Restrict inventory indexes */
+ /* Restrict p_ptr->inventory_list indexes */
while ((i1 <= i2) && (!get_item_okay(i1))) i1++;
while ((i1 <= i2) && (!get_item_okay(i2))) i2--;
else if (use_menu)
{
for (j = INVEN_RARM; j < INVEN_TOTAL; j++)
- if (select_ring_slot ? is_ring_slot(j) : item_tester_okay(&inventory[j]) || (mode & USE_FULL)) max_equip++;
+ if (select_ring_slot ? is_ring_slot(j) : item_tester_okay(&p_ptr->inventory_list[j]) || (mode & USE_FULL)) max_equip++;
if (p_ptr->ryoute && !(mode & IGNORE_BOTHHAND_SLOT)) max_equip++;
}
floor_num = scan_floor(floor_list, p_ptr->y, p_ptr->x, 0x03);
}
- /* Accept inventory */
+ /* Accept p_ptr->inventory_list */
if (i1 <= i2) allow_inven = TRUE;
/* Accept equipment */
command_wrk = (USE_EQUIP);
}
- /* Use inventory if allowed */
+ /* Use p_ptr->inventory_list if allowed */
else if (allow_inven)
{
command_wrk = (USE_INVEN);
if (command_see) get_item_label = show_floor(menu_line, p_ptr->y, p_ptr->x, &min_width);
}
- /* Viewing inventory */
+ /* Viewing p_ptr->inventory_list */
if (command_wrk == (USE_INVEN))
{
/* Begin the prompt */
case '\n':
case '\r':
{
- /* Choose "default" inventory item */
+ /* Choose "default" p_ptr->inventory_list item */
if (command_wrk == (USE_INVEN))
{
k = ((i1 == i2) ? i1 : -1);
ver = isupper(which);
which = (char)tolower(which);
- /* Convert letter to inventory index */
+ /* Convert letter to p_ptr->inventory_list index */
if (command_wrk == (USE_INVEN))
{
if (which == '(') k = i1;