<ClInclude Include="..\..\src\autopick\autopick.h" />\r
<ClInclude Include="..\..\src\object\death-scythe.h" />\r
<ClInclude Include="..\..\src\object\tr-types.h" />\r
+ <ClInclude Include="..\..\src\object\tval-types.h" />\r
<ClInclude Include="..\..\src\player\avatar.h" />\r
<ClInclude Include="..\..\src\birth\character-builder.h" />\r
<ClInclude Include="..\..\src\birth\birth-explanations-table.h" />\r
<ClInclude Include="..\..\src\object\tr-types.h">
<Filter>object</Filter>
</ClInclude>
+ <ClInclude Include="..\..\src\object\tval-types.h">
+ <Filter>monster</Filter>
+ </ClInclude>
</ItemGroup>
<ItemGroup>
<None Include="..\..\src\wall.bmp" />
object/object-ego.c object/object-ego.h \
object/warning.c object/warning.h \
object/death-scythe.c object/death-scythe.h \
- object/tr-types.h \
+ object/tr-types.h object/tval-type.h \
\
inventory/simple-appraiser.c inventory/simple-appraiser.h \
inventory/inventory-curse.c inventory/inventory-curse.h \
q_ptr->pval = (PARAMETER_VALUE)rand_range(25, 30);
add_outfit(creature_ptr, q_ptr);
} else if (creature_ptr->pclass == CLASS_SORCERER) {
- OBJECT_TYPE_VALUE book_tval;
+ tval_type book_tval;
for (book_tval = TV_LIFE_BOOK; book_tval <= TV_LIFE_BOOK + MAX_MAGIC - 1; book_tval++) {
object_prep(q_ptr, lookup_kind(book_tval, 0));
q_ptr->number = 1;
}
for (int i = 0; i < 3; i++) {
- OBJECT_TYPE_VALUE tv = player_init[creature_ptr->pclass][i][0];
+ tval_type tv = player_init[creature_ptr->pclass][i][0];
OBJECT_SUBTYPE_VALUE sv = player_init[creature_ptr->pclass][i][1];
if ((creature_ptr->prace == RACE_ANDROID) && ((tv == TV_SOFT_ARMOR) || (tv == TV_HARD_ARMOR)))
continue;
typedef struct
{
MONRACE_IDX r_idx; /*!< 闘技場のモンスター種族ID(0ならば表彰式) / Monster (0 means victory prizing) */
- OBJECT_TYPE_VALUE tval; /*!< モンスター打倒後に得られるアイテムの大カテゴリID / tval of prize (0 means no prize) */
+ tval_type tval; /*!< モンスター打倒後に得られるアイテムの大カテゴリID / tval of prize (0 means no prize) */
OBJECT_SUBTYPE_VALUE sval; /*!< モンスター打倒後に得られるアイテムの小カテゴリID / sval of prize */
} arena_type;
OBJECT_SUBTYPE_VALUE ext = 0;
char choice;
bool flag, request_list;
- OBJECT_TYPE_VALUE tval = 0;
+ tval_type tval = 0;
int ask = TRUE;
OBJECT_SUBTYPE_VALUE i = 0;
char out_val[160];
PERCENTAGE chance;
DEPTH level;
KIND_OBJECT_IDX k_idx;
- OBJECT_TYPE_VALUE tval;
+ tval_type tval;
OBJECT_SUBTYPE_VALUE sval;
bool use_charge = TRUE;
int use_essence;
essence_type *es_ptr;
bool able[22] = { 0 };
- OBJECT_TYPE_VALUE tval = 0;
+ tval_type tval = 0;
int menu_line = (use_menu ? 1 : 0);
for (i = 0; essence_info[i].add_name; i++)
object_type *o_ptr;
concptr q, s;
- OBJECT_TYPE_VALUE tval = 0;
+ tval_type tval = 0;
/* Warriors are illiterate */
if (!(caster_ptr->realm1 || caster_ptr->realm2) && (caster_ptr->pclass != CLASS_SORCERER) && (caster_ptr->pclass != CLASS_RED_MAGE))
concptr p = spell_category_name(mp_ptr->spell_book);
object_type *o_ptr;
concptr q, s;
- OBJECT_TYPE_VALUE tval = 0;
+ tval_type tval = 0;
if (!caster_ptr->realm1)
*/
static void get_weapon_exp(player_type *attacker_ptr, player_attack_type *pa_ptr)
{
- OBJECT_TYPE_VALUE tval = attacker_ptr->inventory_list[INVEN_RARM + pa_ptr->hand].tval - TV_WEAPON_BEGIN;
+ tval_type tval = attacker_ptr->inventory_list[INVEN_RARM + pa_ptr->hand].tval - TV_WEAPON_BEGIN;
OBJECT_SUBTYPE_VALUE sval = attacker_ptr->inventory_list[INVEN_RARM + pa_ptr->hand].sval;
int now_exp = attacker_ptr->weapon_exp[tval][sval];
if (now_exp >= s_info[attacker_ptr->pclass].w_max[tval][sval])
if (3 != sscanf(buf + 2, "%d:%d:%d",
&tval, &sval, &pval)) return 1;
- k_ptr->tval = (OBJECT_TYPE_VALUE)tval;
+ k_ptr->tval = (tval_type)tval;
k_ptr->sval = (OBJECT_SUBTYPE_VALUE)sval;
k_ptr->pval = (PARAMETER_VALUE)pval;
}
if (3 != sscanf(buf + 2, "%d:%d:%d",
&tval, &sval, &pval)) return 1;
- a_ptr->tval = (OBJECT_TYPE_VALUE)tval;
+ a_ptr->tval = (tval_type)tval;
a_ptr->sval = (OBJECT_SUBTYPE_VALUE)sval;
a_ptr->pval = (PARAMETER_VALUE)pval;
}
bool select_ring_slot;
-void prepare_label_string(player_type *creature_ptr, char *label, BIT_FLAGS mode, OBJECT_TYPE_VALUE tval);
+void prepare_label_string(player_type *creature_ptr, char *label, BIT_FLAGS mode, tval_type tval);
/*!
* @brief プレイヤーの所持/装備オブジェクトIDが指輪枠かを返す /
* Choice window "shadow" of the "show_equip()" function
* @return なし
*/
-void display_equipment(player_type *owner_ptr, OBJECT_TYPE_VALUE tval)
+void display_equipment(player_type *owner_ptr, tval_type tval)
{
if (!owner_ptr || !owner_ptr->inventory_list) return;
* @param i 選択アイテムID
* @return 正規のIDならばTRUEを返す。
*/
-bool get_item_okay(player_type *owner_ptr, OBJECT_IDX i, OBJECT_TYPE_VALUE item_tester_tval)
+bool get_item_okay(player_type *owner_ptr, OBJECT_IDX i, tval_type item_tester_tval)
{
/* Illegal items */
if ((i < 0) || (i >= INVEN_TOTAL)) return FALSE;
* @return アイテムを拾えるならばTRUEを返す。
* @details assuming mode = (USE_EQUIP | USE_INVEN | USE_FLOOR).
*/
-bool can_get_item(player_type *owner_ptr, OBJECT_TYPE_VALUE tval)
+bool can_get_item(player_type *owner_ptr, tval_type tval)
{
for (int j = 0; j < INVEN_TOTAL; j++)
if (item_tester_okay(owner_ptr, &owner_ptr->inventory_list[j], tval))
* Also, the tag "@xn" will work as well, where "n" is a any tag-char,\n
* and "x" is the "current" command_cmd code.\n
*/
-static bool get_tag(player_type *owner_ptr, COMMAND_CODE *cp, char tag, BIT_FLAGS mode, OBJECT_TYPE_VALUE tval)
+static bool get_tag(player_type *owner_ptr, COMMAND_CODE *cp, char tag, BIT_FLAGS mode, tval_type tval)
{
/* Extract index from mode */
COMMAND_CODE start, end;
* @param mode 所持品リストか装備品リストかの切り替え
* @return なし
*/
-void prepare_label_string(player_type *owner_ptr, char *label, BIT_FLAGS mode, OBJECT_TYPE_VALUE tval)
+void prepare_label_string(player_type *owner_ptr, char *label, BIT_FLAGS mode, tval_type tval)
{
concptr alphabet_chars = "abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ";
int offset = (mode == USE_EQUIP) ? INVEN_RARM : 0;
* @details
* Hack -- do not display "trailing" empty slots
*/
-COMMAND_CODE show_inventory(player_type *owner_ptr, int target_item, BIT_FLAGS mode, OBJECT_TYPE_VALUE tval)
+COMMAND_CODE show_inventory(player_type *owner_ptr, int target_item, BIT_FLAGS mode, tval_type tval)
{
COMMAND_CODE i;
int k, l, z = 0;
* 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
*/
-bool get_item(player_type *owner_ptr, OBJECT_IDX *cp, concptr pmt, concptr str, BIT_FLAGS mode, OBJECT_TYPE_VALUE tval)
+bool get_item(player_type *owner_ptr, OBJECT_IDX *cp, concptr pmt, concptr str, BIT_FLAGS mode, tval_type tval)
{
OBJECT_IDX this_o_idx, next_o_idx = 0;
/*
* Choose an item and get auto-picker entry from it.
*/
-object_type *choose_object(player_type *owner_ptr, OBJECT_IDX *idx, concptr q, concptr s, BIT_FLAGS option, OBJECT_TYPE_VALUE tval)
+object_type *choose_object(player_type *owner_ptr, OBJECT_IDX *idx, concptr q, concptr s, BIT_FLAGS option, tval_type tval)
{
OBJECT_IDX item;
if (!get_item(owner_ptr, &item, q, s, option, tval)) return NULL;
* mode & 0x02 -- Marked items only
* mode & 0x04 -- Stop after first
*/
-ITEM_NUMBER scan_floor(player_type *owner_ptr, OBJECT_IDX *items, POSITION y, POSITION x, BIT_FLAGS mode, OBJECT_TYPE_VALUE item_tester_tval)
+ITEM_NUMBER scan_floor(player_type *owner_ptr, OBJECT_IDX *items, POSITION y, POSITION x, BIT_FLAGS mode, tval_type item_tester_tval)
{
/* Sanity */
floor_type *floor_ptr = owner_ptr->current_floor_ptr;
* @return 選択したアイテムの添え字
* @details
*/
-COMMAND_CODE show_floor(player_type *owner_ptr, int target_item, POSITION y, POSITION x, TERM_LEN *min_width, OBJECT_TYPE_VALUE item_tester_tval)
+COMMAND_CODE show_floor(player_type *owner_ptr, int target_item, POSITION y, POSITION x, TERM_LEN *min_width, tval_type item_tester_tval)
{
COMMAND_CODE i, m;
int j, k, l;
* @param mode オプションフラグ
* @return プレイヤーによりアイテムが選択されたならTRUEを返す。/
*/
-bool get_item_floor(player_type *owner_ptr, COMMAND_CODE *cp, concptr pmt, concptr str, BIT_FLAGS mode, OBJECT_TYPE_VALUE tval)
+bool get_item_floor(player_type *owner_ptr, COMMAND_CODE *cp, concptr pmt, concptr str, BIT_FLAGS mode, tval_type tval)
{
char n1 = ' ', n2 = ' ', which = ' ';
* Choice window "shadow" of the "show_inven()" function
* @return なし
*/
-void display_inventory(player_type *owner_ptr, OBJECT_TYPE_VALUE tval)
+void display_inventory(player_type *owner_ptr, tval_type tval)
{
register int i, n, z = 0;
object_type *o_ptr;
* @param target_item アイテムの選択処理を行うか否か。
* @return 選択したアイテムのタグ
*/
-COMMAND_CODE show_equipment(player_type *owner_ptr, int target_item, BIT_FLAGS mode, OBJECT_TYPE_VALUE tval)
+COMMAND_CODE show_equipment(player_type *owner_ptr, int target_item, BIT_FLAGS mode, tval_type tval)
{
COMMAND_CODE i;
int j, k, l;
extern bool is_ring_slot(int i);
extern concptr describe_use(player_type *owner_ptr, int i);
-extern void display_inventory(player_type *creature_ptr, OBJECT_TYPE_VALUE tval);
-extern void display_equipment(player_type *creature_ptr, OBJECT_TYPE_VALUE tval);
-extern COMMAND_CODE show_inventory(player_type *owner_ptr, int target_item, BIT_FLAGS mode, OBJECT_TYPE_VALUE tval);
-extern COMMAND_CODE show_equipment(player_type *owner_ptr, int target_item, BIT_FLAGS mode, OBJECT_TYPE_VALUE tval);
+extern void display_inventory(player_type *creature_ptr, tval_type tval);
+extern void display_equipment(player_type *creature_ptr, tval_type tval);
+extern COMMAND_CODE show_inventory(player_type *owner_ptr, int target_item, BIT_FLAGS mode, tval_type tval);
+extern COMMAND_CODE show_equipment(player_type *owner_ptr, int target_item, BIT_FLAGS mode, tval_type tval);
extern void toggle_inventory_equipment(player_type *owner_ptr);
-extern object_type *choose_object(player_type *owner_ptr, OBJECT_IDX *idx, concptr q, concptr s, BIT_FLAGS option, OBJECT_TYPE_VALUE tval);
-extern bool can_get_item(player_type *owner_ptr, OBJECT_TYPE_VALUE tval);
-extern bool get_item(player_type *owner_ptr, OBJECT_IDX *cp, concptr pmt, concptr str, BIT_FLAGS mode, OBJECT_TYPE_VALUE tval);
-extern ITEM_NUMBER scan_floor(player_type *owner_ptr, OBJECT_IDX *items, POSITION y, POSITION x, BIT_FLAGS mode, OBJECT_TYPE_VALUE item_tester_tval);
-extern COMMAND_CODE show_floor(player_type *owner_ptr, int target_item, POSITION y, POSITION x, TERM_LEN *min_width, OBJECT_TYPE_VALUE item_tester_tval);
-extern bool get_item_floor(player_type *creature_ptr, COMMAND_CODE *cp, concptr pmt, concptr str, BIT_FLAGS mode, OBJECT_TYPE_VALUE tval);
+extern object_type *choose_object(player_type *owner_ptr, OBJECT_IDX *idx, concptr q, concptr s, BIT_FLAGS option, tval_type tval);
+extern bool can_get_item(player_type *owner_ptr, tval_type tval);
+extern bool get_item(player_type *owner_ptr, OBJECT_IDX *cp, concptr pmt, concptr str, BIT_FLAGS mode, tval_type tval);
+extern ITEM_NUMBER scan_floor(player_type *owner_ptr, OBJECT_IDX *items, POSITION y, POSITION x, BIT_FLAGS mode, tval_type item_tester_tval);
+extern COMMAND_CODE show_floor(player_type *owner_ptr, int target_item, POSITION y, POSITION x, TERM_LEN *min_width, tval_type item_tester_tval);
+extern bool get_item_floor(player_type *creature_ptr, COMMAND_CODE *cp, concptr pmt, concptr str, BIT_FLAGS mode, tval_type tval);
extern void py_pickup_floor(player_type *creature_ptr, bool pickup);
for (int ext = 0; ext < 3; ext++)
{
- OBJECT_TYPE_VALUE tval = 0;
+ tval_type tval = 0;
switch (ext)
{
case 0:
* @param tval アイテム主分類番号
* @return 特殊なアイテムならTRUE
*/
-static bool determine_spcial_item_type(object_type *o_ptr, OBJECT_TYPE_VALUE tval)
+static bool determine_spcial_item_type(object_type *o_ptr, tval_type tval)
{
bool is_special_item_type = (object_is_wearable(o_ptr) && object_is_ego(o_ptr))
|| ((tval == TV_AMULET) && (o_ptr->sval == SV_AMULET_RESISTANCE))
* @param tval アイテム主分類番号
* @return 必要があるならTRUE
*/
-static bool check_item_knowledge(object_type *o_ptr, OBJECT_TYPE_VALUE tval)
+static bool check_item_knowledge(object_type *o_ptr, tval_type tval)
{
if (o_ptr->k_idx == 0) return FALSE;
if (o_ptr->tval != tval) return FALSE;
* @param fff ファイルへの参照ポインタ
* @return なし
*/
-static void show_wearing_equipment_resistances(player_type *creature_ptr, OBJECT_TYPE_VALUE tval, int *label_number, FILE *fff)
+static void show_wearing_equipment_resistances(player_type *creature_ptr, tval_type tval, int *label_number, FILE *fff)
{
char where[32];
strcpy(where, _("装", "E "));
* @param fff ファイルへの参照ポインタ
* @return なし
*/
-static void show_holding_equipment_resistances(player_type *creature_ptr, OBJECT_TYPE_VALUE tval, int *label_number, FILE *fff)
+static void show_holding_equipment_resistances(player_type *creature_ptr, tval_type tval, int *label_number, FILE *fff)
{
char where[32];
strcpy(where, _("持", "I "));
* @param fff ファイルへの参照ポインタ
* @return なし
*/
-static void show_home_equipment_resistances(player_type *creature_ptr, OBJECT_TYPE_VALUE tval, int *label_number, FILE *fff)
+static void show_home_equipment_resistances(player_type *creature_ptr, tval_type tval, int *label_number, FILE *fff)
{
store_type *store_ptr;
store_ptr = &town_info[1].store[STORE_HOME];
fprintf(fff, "%s\n", inven_res_label);
int label_number = 0;
- for (OBJECT_TYPE_VALUE tval = TV_WEARABLE_BEGIN; tval <= TV_WEARABLE_END; tval++)
+ for (tval_type tval = TV_WEARABLE_BEGIN; tval <= TV_WEARABLE_END; tval++)
{
reset_label_number(&label_number, fff);
show_wearing_equipment_resistances(creature_ptr, tval, &label_number, fff);
* 賞金首の報酬テーブル / List of prize object
*/
typedef struct bounty_prize_type {
- OBJECT_TYPE_VALUE tval; /*!< ベースアイテムのメイン種別ID */
+ tval_type tval; /*!< ベースアイテムのメイン種別ID */
OBJECT_SUBTYPE_VALUE sval; /*!< ベースアイテムのサブ種別ID */
} bounty_prize_type;
}
}
} else {
- OBJECT_TYPE_VALUE tval = (one_in_(5) ? mo_ptr->tval : TV_SWORD);
+ tval_type tval = (one_in_(5) ? mo_ptr->tval : TV_SWORD);
while (TRUE) {
object_kind *ck_ptr;
k_idx = lookup_kind(tval, SV_ANY);
* @param to_ac ACをアップさせる量
* @return 実際に行ったらTRUE
*/
-bool enchant_item(player_type *player_ptr, PRICE cost, HIT_PROB to_hit, HIT_POINT to_dam, ARMOUR_CLASS to_ac, OBJECT_TYPE_VALUE item_tester_tval)
+bool enchant_item(player_type *player_ptr, PRICE cost, HIT_PROB to_hit, HIT_POINT to_dam, ARMOUR_CLASS to_ac, tval_type item_tester_tval)
{
clear_bldg(4, 18);
int maxenchant = (player_ptr->lev / 5);
#pragma once
-bool enchant_item(player_type *player_ptr, PRICE cost, HIT_PROB to_hit, HIT_POINT to_dam, ARMOUR_CLASS to_ac, OBJECT_TYPE_VALUE item_tester_tval);
+bool enchant_item(player_type *player_ptr, PRICE cost, HIT_PROB to_hit, HIT_POINT to_dam, ARMOUR_CLASS to_ac, tval_type item_tester_tval);
STR_OFFSET name; /*!< アーティファクト名(headerオフセット参照) / Name (offset) */
STR_OFFSET text; /*!< アーティファクト解説(headerオフセット参照) / Text (offset) */
- OBJECT_TYPE_VALUE tval; /*!< ベースアイテム大項目ID / Artifact type */
+ tval_type tval; /*!< ベースアイテム大項目ID / Artifact type */
OBJECT_SUBTYPE_VALUE sval; /*!< ベースアイテム小項目ID / Artifact sub type */
PARAMETER_VALUE pval; /*!< pval修正値 / Artifact extra info */
* @return なし
* @details 巻物、各種魔道具などに利用される。
*/
-static void shuffle_flavors(OBJECT_TYPE_VALUE tval)
+static void shuffle_flavors(tval_type tval)
{
KIND_OBJECT_IDX *k_idx_list;
KIND_OBJECT_IDX k_idx_list_num = 0;
* @param o_ptr 判定を行いたいオブジェクト構造体参照ポインタ
* @return item_tester_hookの参照先、その他いくつかの例外に応じてTRUE/FALSEを返す。
*/
-bool item_tester_okay(player_type *player_ptr, object_type *o_ptr, OBJECT_TYPE_VALUE tval)
+bool item_tester_okay(player_type *player_ptr, object_type *o_ptr, tval_type tval)
{
/* Hack -- allow listing empty slots */
// if (item_tester_full) return TRUE; // TODO:DELETE
*/
#define object_is_cursed(T) ((T)->curse_flags)
-extern bool item_tester_okay(player_type *player_ptr, object_type *o_ptr, OBJECT_TYPE_VALUE tval);
+extern bool item_tester_okay(player_type *player_ptr, object_type *o_ptr, tval_type tval);
STR_OFFSET text; /*!< 解説テキスト参照のためのネームバッファオフセット値 / Text (offset) */
STR_OFFSET flavor_name; /*!< 未確定名参照のためのネームバッファオフセット値 / Flavor name (offset) */
- OBJECT_TYPE_VALUE tval; /*!< ベースアイテム種別の大項目値 Object type */
+ tval_type tval; /*!< ベースアイテム種別の大項目値 Object type */
OBJECT_SUBTYPE_VALUE sval; /*!< ベースアイテム種別の小項目値 Object sub type */
PARAMETER_VALUE pval; /*!< ベースアイテムのpval(能力修正共通値) Object extra info */
#define OBJ_GOLD_LIST 480 /* First "gold" entry */
#define MAX_GOLD 18 /* Number of "gold" entries */
+#include "object/tval-types.h"
+
typedef struct object_type object_type;
struct object_type
POSITION iy; /* Y-position on map, or zero */
POSITION ix; /* X-position on map, or zero */
- /*
- * The values for the "tval" field of various objects.
- *
- * This value is the primary means by which items are sorted in the
- * player inventory_list, followed by "sval" and "cost".
- *
- * Note that a "BOW" with tval = 19 and sval S = 10*N+P takes a missile
- * weapon with tval = 16+N, and does (xP) damage when so combined. This
- * fact is not actually used in the source, but it kind of interesting.
- *
- * Note that as of 2.7.8, the "item flags" apply to all items, though
- * only armor and weapons and a few other items use any of these flags.
- */
-
-#define TV_SKELETON 1 /* Skeletons ('s'), not specified */
-#define TV_BOTTLE 2 /* Empty bottles ('!') */
-#define TV_JUNK 3 /* Sticks, Pottery, etc ('~') */
-#define TV_WHISTLE 4 /* Whistle ('~') */
-#define TV_SPIKE 5 /* Spikes ('~') */
-#define TV_CHEST 7 /* Chests ('&') */
-#define TV_FIGURINE 8 /* Magical figurines */
-#define TV_STATUE 9 /* Statue, what a silly object... */
-#define TV_CORPSE 10 /* Corpses and Skeletons, specific */
-#define TV_CAPTURE 11 /* Monster ball */
-#define TV_NO_AMMO 15 /* Ammo for crimson */
-#define TV_SHOT 16 /* Ammo for slings */
-#define TV_ARROW 17 /* Ammo for bows */
-#define TV_BOLT 18 /* Ammo for x-bows */
-#define TV_BOW 19 /* Slings/Bows/Xbows */
-#define TV_DIGGING 20 /* Shovels/Picks */
-#define TV_HAFTED 21 /* Priest Weapons */
-#define TV_POLEARM 22 /* Axes and Pikes */
-#define TV_SWORD 23 /* Edged Weapons */
-#define TV_BOOTS 30 /* Boots */
-#define TV_GLOVES 31 /* Gloves */
-#define TV_HELM 32 /* Helms */
-#define TV_CROWN 33 /* Crowns */
-#define TV_SHIELD 34 /* Shields */
-#define TV_CLOAK 35 /* Cloaks */
-#define TV_SOFT_ARMOR 36 /* Soft Armor */
-#define TV_HARD_ARMOR 37 /* Hard Armor */
-#define TV_DRAG_ARMOR 38 /* Dragon Scale Mail */
-#define TV_LITE 39 /* Lites (including Specials) */
-#define TV_AMULET 40 /* Amulets (including Specials) */
-#define TV_RING 45 /* Rings (including Specials) */
-#define TV_CARD 50
-#define TV_STAFF 55
-#define TV_WAND 65
-#define TV_ROD 66
-#define TV_PARCHMENT 69
-#define TV_SCROLL 70
-#define TV_POTION 75
-#define TV_FLASK 77
-#define TV_FOOD 80
-#define TV_LIFE_BOOK 90
-#define TV_SORCERY_BOOK 91
-#define TV_NATURE_BOOK 92
-#define TV_CHAOS_BOOK 93
-#define TV_DEATH_BOOK 94
-#define TV_TRUMP_BOOK 95
-#define TV_ARCANE_BOOK 96
-#define TV_CRAFT_BOOK 97
-#define TV_DAEMON_BOOK 98
-#define TV_CRUSADE_BOOK 99
-#define TV_MUSIC_BOOK 105
-#define TV_HISSATSU_BOOK 106
-#define TV_HEX_BOOK 107
-#define TV_GOLD 127 /* Gold can only be picked up by players */
-
-#define TV_EQUIP_BEGIN TV_SHOT
-#define TV_EQUIP_END TV_CARD
-#define TV_MISSILE_BEGIN TV_SHOT
-#define TV_MISSILE_END TV_BOLT
-#define TV_WEARABLE_BEGIN TV_BOW
-#define TV_WEARABLE_END TV_CARD
-#define TV_WEAPON_BEGIN TV_BOW
-#define TV_WEAPON_END TV_SWORD
-#define TV_ARMOR_BEGIN TV_BOOTS
-#define TV_ARMOR_END TV_DRAG_ARMOR
- OBJECT_TYPE_VALUE tval; /* Item type (from kind) */
+ tval_type tval; /* Item type (from kind) */
OBJECT_SUBTYPE_VALUE sval; /* Item sub-type (from kind) */
extern char index_to_label(int i);
extern s16b wield_slot(player_type *owner_ptr, object_type *o_ptr);
-extern bool check_book_realm(player_type *owner_ptr, const OBJECT_TYPE_VALUE book_tval, const OBJECT_SUBTYPE_VALUE book_sval);
+extern bool check_book_realm(player_type *owner_ptr, const tval_type book_tval, const OBJECT_SUBTYPE_VALUE book_sval);
/*
* get_item()関数でアイテムの選択を行うフラグ / Bit flags for the "get_item" function
extern int object_similar_part(object_type *o_ptr, object_type *j_ptr);
extern bool object_similar(object_type *o_ptr, object_type *j_ptr);
extern void object_absorb(object_type *o_ptr, object_type *j_ptr);
-extern IDX lookup_kind(OBJECT_TYPE_VALUE tval, OBJECT_SUBTYPE_VALUE sval);
+extern IDX lookup_kind(tval_type tval, OBJECT_SUBTYPE_VALUE sval);
extern void object_wipe(object_type *o_ptr);
extern void object_prep(object_type *o_ptr, KIND_OBJECT_IDX k_idx);
extern void object_copy(object_type *o_ptr, object_type *j_ptr);
* @param book_sval ベースアイテムのsval
* @return 使用可能な魔法書ならばTRUEを返す。
*/
-bool check_book_realm(player_type *owner_ptr, const OBJECT_TYPE_VALUE book_tval, const OBJECT_SUBTYPE_VALUE book_sval)
+bool check_book_realm(player_type *owner_ptr, const tval_type book_tval, const OBJECT_SUBTYPE_VALUE book_sval)
{
if (book_tval < TV_LIFE_BOOK) return FALSE;
if (owner_ptr->pclass == CLASS_SORCERER)
* @param sval 検索したいベースアイテムのsval
* @return なし
*/
-KIND_OBJECT_IDX lookup_kind(OBJECT_TYPE_VALUE tval, OBJECT_SUBTYPE_VALUE sval)
+KIND_OBJECT_IDX lookup_kind(tval_type tval, OBJECT_SUBTYPE_VALUE sval)
{
int num = 0;
KIND_OBJECT_IDX bk = 0;
--- /dev/null
+/*
+ * The values for the "tval" field of various objects.
+ *
+ * This value is the primary means by which items are sorted in the
+ * player inventory_list, followed by "sval" and "cost".
+ *
+ * Note that a "BOW" with tval = 19 and sval S = 10*N+P takes a missile
+ * weapon with tval = 16+N, and does (xP) damage when so combined. This
+ * fact is not actually used in the source, but it kind of interesting.
+ *
+ * Note that as of 2.7.8, the "item flags" apply to all items, though
+ * only armor and weapons and a few other items use any of these flags.
+ */
+
+#pragma once
+
+typedef enum tval_type {
+ TV_SKELETON = 1, /* Skeletons ('s'), not specified */
+ TV_BOTTLE = 2, /* Empty bottles ('!') */
+ TV_JUNK = 3, /* Sticks, Pottery, etc ('~') */
+ TV_WHISTLE = 4, /* Whistle ('~') */
+ TV_SPIKE = 5, /* Spikes ('~') */
+ TV_CHEST = 7, /* Chests ('&') */
+ TV_FIGURINE = 8, /* Magical figurines */
+ TV_STATUE = 9, /* Statue, what a silly object... */
+ TV_CORPSE = 10, /* Corpses and Skeletons, specific */
+ TV_CAPTURE = 11, /* Monster ball */
+ TV_NO_AMMO = 15, /* Ammo for crimson */
+ TV_SHOT = 16, /* Ammo for slings */
+ TV_ARROW = 17, /* Ammo for bows */
+ TV_BOLT = 18, /* Ammo for x-bows */
+ TV_BOW = 19, /* Slings/Bows/Xbows */
+ TV_DIGGING = 20, /* Shovels/Picks */
+ TV_HAFTED = 21, /* Priest Weapons */
+ TV_POLEARM = 22, /* Axes and Pikes */
+ TV_SWORD = 23, /* Edged Weapons */
+ TV_BOOTS = 30, /* Boots */
+ TV_GLOVES = 31, /* Gloves */
+ TV_HELM = 32, /* Helms */
+ TV_CROWN = 33, /* Crowns */
+ TV_SHIELD = 34, /* Shields */
+ TV_CLOAK = 35, /* Cloaks */
+ TV_SOFT_ARMOR = 36, /* Soft Armor */
+ TV_HARD_ARMOR = 37, /* Hard Armor */
+ TV_DRAG_ARMOR = 38, /* Dragon Scale Mail */
+ TV_LITE = 39, /* Lites (including Specials) */
+ TV_AMULET = 40, /* Amulets (including Specials) */
+ TV_RING = 45, /* Rings (including Specials) */
+ TV_CARD = 50,
+ TV_STAFF = 55,
+ TV_WAND = 65,
+ TV_ROD = 66,
+ TV_PARCHMENT = 69,
+ TV_SCROLL = 70,
+ TV_POTION = 75,
+ TV_FLASK = 77,
+ TV_FOOD = 80,
+ TV_LIFE_BOOK = 90,
+ TV_SORCERY_BOOK = 91,
+ TV_NATURE_BOOK = 92,
+ TV_CHAOS_BOOK = 93,
+ TV_DEATH_BOOK = 94,
+ TV_TRUMP_BOOK = 95,
+ TV_ARCANE_BOOK = 96,
+ TV_CRAFT_BOOK = 97,
+ TV_DAEMON_BOOK = 98,
+ TV_CRUSADE_BOOK = 99,
+ TV_MUSIC_BOOK = 105,
+ TV_HISSATSU_BOOK = 106,
+ TV_HEX_BOOK = 107,
+ TV_GOLD = 127, /* Gold can only be picked up by players */
+} tval_type;
+
+#define TV_EQUIP_BEGIN TV_SHOT
+#define TV_EQUIP_END TV_CARD
+#define TV_MISSILE_BEGIN TV_SHOT
+#define TV_MISSILE_END TV_BOLT
+#define TV_WEARABLE_BEGIN TV_BOW
+#define TV_WEARABLE_END TV_CARD
+#define TV_WEAPON_BEGIN TV_BOW
+#define TV_WEAPON_END TV_SWORD
+#define TV_ARMOR_BEGIN TV_BOOTS
+#define TV_ARMOR_END TV_DRAG_ARMOR
{
char wrath_reason[32] = "";
int nasty_chance = 6;
- OBJECT_TYPE_VALUE dummy = 0;
+ tval_type dummy = 0;
int type, effect;
concptr reward = NULL;
GAME_TEXT o_name[MAX_NLEN];
struct player_magic
{
- OBJECT_TYPE_VALUE spell_book; /* Tval of spell books (if any) */
+ tval_type spell_book; /* Tval of spell books (if any) */
int spell_xtra; /* Something for later */
int spell_stat; /* Stat for spells (if any) */
{
if (!has_melee_weapon(creature_ptr, INVEN_RARM + i)) continue;
- OBJECT_TYPE_VALUE tval = creature_ptr->inventory_list[INVEN_RARM + i].tval - TV_WEAPON_BEGIN;
+ tval_type tval = creature_ptr->inventory_list[INVEN_RARM + i].tval - TV_WEAPON_BEGIN;
OBJECT_SUBTYPE_VALUE sval = creature_ptr->inventory_list[INVEN_RARM + i].sval;
creature_ptr->to_h[i] += (creature_ptr->weapon_exp[tval][sval] - WEAPON_EXP_BEGINNER) / 200;
num = 100;
num += (extra_shots * 100);
- OBJECT_TYPE_VALUE tval_ammo = bow_tval_ammo(o_ptr);
+ tval_type tval_ammo = bow_tval_ammo(o_ptr);
if ((creature_ptr->pclass == CLASS_RANGER) &&
(tval_ammo == TV_ARROW))
{
if (d_info[caster_ptr->dungeon_idx].flags1 & DF1_DARKNESS)
range /= 3;
- OBJECT_TYPE_VALUE tv;
+ tval_type tv;
bool detect = FALSE;
for (OBJECT_IDX i = 1; i < caster_ptr->current_floor_ptr->o_max; i++) {
object_type* o_ptr = &caster_ptr->current_floor_ptr->o_list[i];
typedef struct
{
- OBJECT_TYPE_VALUE tval;
+ tval_type tval;
OBJECT_SUBTYPE_VALUE sval;
PERCENTAGE prob;
byte flag;
{
object_type forge;
object_type *q_ptr = &forge;
- OBJECT_TYPE_VALUE dummy = TV_SWORD;
+ tval_type dummy = TV_SWORD;
OBJECT_SUBTYPE_VALUE dummy2;
switch (randint1(creature_ptr->lev))
{
* @param tval 魔法書のtval
* @return 領域魔法の技能名称を保管した文字列ポインタ
*/
-concptr spell_category_name(OBJECT_TYPE_VALUE tval)
+concptr spell_category_name(tval_type tval)
{
switch (tval)
{
POSITION dist_to_line(POSITION y, POSITION x, POSITION y1, POSITION x1, POSITION y2, POSITION x2);
bool binding_field(player_type *caster_ptr, HIT_POINT dam);
void seal_of_mirror(player_type *caster_ptr, HIT_POINT dam);
-concptr spell_category_name(OBJECT_TYPE_VALUE tval);
+concptr spell_category_name(tval_type tval);
* This routine does *not* automatically combine objects.
* Returns TRUE if something was identified, else FALSE.
*/
-bool ident_spell(player_type *caster_ptr, bool only_equip, OBJECT_TYPE_VALUE item_tester_tval)
+bool ident_spell(player_type *caster_ptr, bool only_equip, tval_type item_tester_tval)
{
if (only_equip)
item_tester_hook = item_tester_hook_identify_weapon_armour;
* Fully "identify" an object in the inventory -BEN-
* This routine returns TRUE if an item was identified.
*/
-bool identify_fully(player_type *caster_ptr, bool only_equip, OBJECT_TYPE_VALUE item_tester_tval)
+bool identify_fully(player_type *caster_ptr, bool only_equip, tval_type item_tester_tval)
{
if (only_equip)
item_tester_hook = item_tester_hook_identify_fully_weapon_armour;
bool alchemy(player_type* caster_ptr);
bool artifact_scroll(player_type* caster_ptr);
-bool ident_spell(player_type* caster_ptr, bool only_equip, OBJECT_TYPE_VALUE item_tester_tval);
+bool ident_spell(player_type* caster_ptr, bool only_equip, tval_type item_tester_tval);
bool mundane_spell(player_type* ownner_ptr, bool only_equip);
bool identify_item(player_type* owner_ptr, object_type* o_ptr);
-bool identify_fully(player_type* caster_ptr, bool only_equip, OBJECT_TYPE_VALUE item_tester_tval);
+bool identify_fully(player_type* caster_ptr, bool only_equip, tval_type item_tester_tval);
bool recharge(player_type* caster_ptr, int power);
void display_spell_list(player_type* caster_ptr);
EXP experience_of_spell(player_type* caster_ptr, SPELL_IDX spell, REALM_IDX use_realm);
typedef s32b EXP; /*!< ゲーム中の主経験値の型定義 */
typedef s16b SUB_EXP; /*!< ゲーム中の副経験値の型定義 */
-typedef s32b OBJECT_TYPE_VALUE; /*!< ゲーム中のアイテム主分類の型定義 */
typedef s32b OBJECT_SUBTYPE_VALUE; /*!< ゲーム中のアイテム副分類の型定義 */
typedef s16b PARAMETER_VALUE; /*!< ゲーム中のアイテム能力値の型定義 */
typedef s32b WEIGHT; /*!< ゲーム中の重量の型定義(ポンド) */
* @param player_ptr プレーヤーへの参照ポインタ
* @return なし
*/
-static void fix_inventory(player_type *player_ptr, OBJECT_TYPE_VALUE item_tester_tval)
+static void fix_inventory(player_type *player_ptr, tval_type item_tester_tval)
{
/* Scan windows */
for (int j = 0; j < 8; j++)
* @param player_ptr プレーヤーへの参照ポインタ
* @return なし
*/
-static void fix_equip(player_type *player_ptr, OBJECT_TYPE_VALUE item_tester_tval)
+static void fix_equip(player_type *player_ptr, tval_type item_tester_tval)
{
/* Scan windows */
for (int j = 0; j < 8; j++)
* @param col 表示行
* @return なし
*/
-static void prt_alloc(OBJECT_TYPE_VALUE tval, OBJECT_SUBTYPE_VALUE sval, TERM_LEN row, TERM_LEN col)
+static void prt_alloc(tval_type tval, OBJECT_SUBTYPE_VALUE sval, TERM_LEN row, TERM_LEN col)
{
u32b rarity[K_MAX_DEPTH];
(void)C_WIPE(rarity, K_MAX_DEPTH, u32b);
KIND_OBJECT_IDX i;
int num, max_num;
TERM_LEN col, row;
- OBJECT_TYPE_VALUE tval;
+ tval_type tval;
concptr tval_desc;
char ch;
*/
typedef struct
{
- OBJECT_TYPE_VALUE tval;
+ tval_type tval;
concptr name;
} grouper;