OSDN Git Service

b6c5795169e3b0e67bad74b2f5866a061f0f4af2
[hengband/hengband.git] / src / object.h
1 #pragma once
2 #include "defines.h"
3
4 /*
5  * Object information, for a specific object.
6  *
7  * Note that a "discount" on an item is permanent and never goes away.
8  *
9  * Note that inscriptions are now handled via the "quark_str()" function
10  * applied to the "note" field, which will return NULL if "note" is zero.
11  *
12  * Note that "object" records are "copied" on a fairly regular basis,
13  * and care must be taken when handling such objects.
14  *
15  * Note that "object flags" must now be derived from the object kind,
16  * the artifact and ego-item indexes, and the two "xtra" fields.
17  *
18  * Each grid points to one (or zero) objects via the "o_idx"
19  * field (above).  Each object then points to one (or zero) objects
20  * via the "next_o_idx" field, forming a singly linked list, which
21  * in game terms, represents a "stack" of objects in the same grid.
22  *
23  * Each monster points to one (or zero) objects via the "hold_o_idx"
24  * field (below).  Each object then points to one (or zero) objects
25  * via the "next_o_idx" field, forming a singly linked list, which
26  * in game terms, represents a pile of objects held by the monster.
27  *
28  * The "held_m_idx" field is used to indicate which monster, if any,
29  * is holding the object.  Objects being held have "ix=0" and "iy=0".
30  */
31
32 #define TR_STR                 0      /* STR += "pval" */
33 #define TR_INT                 1      /* INT += "pval" */
34 #define TR_WIS                 2      /* WIS += "pval" */
35 #define TR_DEX                 3      /* DEX += "pval" */
36 #define TR_CON                 4      /* CON += "pval" */
37 #define TR_CHR                 5      /* CHR += "pval" */
38 #define TR_MAGIC_MASTERY       6      /* Later */
39 #define TR_FORCE_WEAPON        7      /* Later */
40 #define TR_STEALTH             8      /* Stealth += "pval" */
41 #define TR_SEARCH              9      /* Search += "pval" */
42 #define TR_INFRA               10     /* Infra += "pval" */
43 #define TR_TUNNEL              11     /* Tunnel += "pval" */
44 #define TR_SPEED               12     /* Speed += "pval" */
45 #define TR_BLOWS               13     /* Blows += "pval" */
46 #define TR_CHAOTIC             14
47 #define TR_VAMPIRIC            15
48 #define TR_SLAY_ANIMAL         16
49 #define TR_SLAY_EVIL           17
50 #define TR_SLAY_UNDEAD         18
51 #define TR_SLAY_DEMON          19
52 #define TR_SLAY_ORC            20
53 #define TR_SLAY_TROLL          21
54 #define TR_SLAY_GIANT          22
55 #define TR_SLAY_DRAGON         23
56 #define TR_KILL_DRAGON         24     /* Execute Dragon */
57 #define TR_VORPAL              25     /* Later */
58 #define TR_IMPACT              26     /* Cause Earthquakes */
59 #define TR_BRAND_POIS          27
60 #define TR_BRAND_ACID          28
61 #define TR_BRAND_ELEC          29
62 #define TR_BRAND_FIRE          30
63 #define TR_BRAND_COLD          31
64
65 #define TR_SUST_STR            32
66 #define TR_SUST_INT            33
67 #define TR_SUST_WIS            34
68 #define TR_SUST_DEX            35
69 #define TR_SUST_CON            36
70 #define TR_SUST_CHR            37
71 #define TR_RIDING              38
72 #define TR_EASY_SPELL          39
73 #define TR_IM_ACID             40
74 #define TR_IM_ELEC             41
75 #define TR_IM_FIRE             42
76 #define TR_IM_COLD             43
77 #define TR_THROW               44     /* Later */
78 #define TR_REFLECT             45     /* Reflect 'bolts' */
79 #define TR_FREE_ACT            46     /* Free Action */
80 #define TR_HOLD_EXP            47     /* Hold EXP */
81 #define TR_RES_ACID            48
82 #define TR_RES_ELEC            49
83 #define TR_RES_FIRE            50
84 #define TR_RES_COLD            51
85 #define TR_RES_POIS            52
86 #define TR_RES_FEAR            53     /* Added for Zangband */
87 #define TR_RES_LITE            54
88 #define TR_RES_DARK            55
89 #define TR_RES_BLIND           56
90 #define TR_RES_CONF            57
91 #define TR_RES_SOUND           58
92 #define TR_RES_SHARDS          59
93 #define TR_RES_NETHER          60
94 #define TR_RES_NEXUS           61
95 #define TR_RES_CHAOS           62
96 #define TR_RES_DISEN           63
97
98 #define TR_SH_FIRE             64     /* Immolation (Fire) */
99 #define TR_SH_ELEC             65     /* Electric Sheath */
100 #define TR_SLAY_HUMAN          66     /* Slay human */
101 #define TR_SH_COLD             67     /* cold aura */
102 #define TR_NO_TELE             68     /* Anti-teleportation */
103 #define TR_NO_MAGIC            69     /* Anti-magic */
104 #define TR_DEC_MANA            70     /* ??? */
105 #define TR_TY_CURSE            71     /* The Ancient Curse */
106 #define TR_WARNING             72     /* Warning */
107 #define TR_HIDE_TYPE           73     /* Hide "pval" description */
108 #define TR_SHOW_MODS           74     /* Always show Tohit/Todam */
109 #define TR_SLAY_GOOD           75
110 #define TR_LEVITATION          76     /* Feather Falling */
111 #define TR_LITE_1              77     /* Light Radius 1*/
112 #define TR_SEE_INVIS           78     /* See Invisible */
113 #define TR_TELEPATHY           79     /* Telepathy */
114 #define TR_SLOW_DIGEST         80     /* Item slows down digestion */
115 #define TR_REGEN               81     /* Item induces regeneration */
116 #define TR_XTRA_MIGHT          82     /* Bows get extra multiplier */
117 #define TR_XTRA_SHOTS          83     /* Bows get extra shots */
118 #define TR_IGNORE_ACID         84     /* Item ignores Acid Damage */
119 #define TR_IGNORE_ELEC         85     /* Item ignores Elec Damage */
120 #define TR_IGNORE_FIRE         86     /* Item ignores Fire Damage */
121 #define TR_IGNORE_COLD         87     /* Item ignores Cold Damage */
122 #define TR_ACTIVATE            88     /* Item can be activated */
123 #define TR_DRAIN_EXP           89     /* Item drains Experience */
124 #define TR_TELEPORT            90     /* Item teleports player */
125 #define TR_AGGRAVATE           91     /* Item aggravates monsters */
126 #define TR_BLESSED             92     /* Item is Blessed */
127 #define TR_ES_ATTACK           93     /* Fake flag for Smith */
128 #define TR_ES_AC               94     /* Fake flag for Smith */
129 #define TR_KILL_GOOD           95
130
131 #define TR_KILL_ANIMAL         96
132 #define TR_KILL_EVIL           97
133 #define TR_KILL_UNDEAD         98
134 #define TR_KILL_DEMON          99
135 #define TR_KILL_ORC            100
136 #define TR_KILL_TROLL          101
137 #define TR_KILL_GIANT          102
138 #define TR_KILL_HUMAN          103
139 #define TR_ESP_ANIMAL          104
140 #define TR_ESP_UNDEAD          105
141 #define TR_ESP_DEMON           106
142 #define TR_ESP_ORC             107
143 #define TR_ESP_TROLL           108
144 #define TR_ESP_GIANT           109
145 #define TR_ESP_DRAGON          110
146 #define TR_ESP_HUMAN           111
147 #define TR_ESP_EVIL            112
148 #define TR_ESP_GOOD            113
149 #define TR_ESP_NONLIVING       114
150 #define TR_ESP_UNIQUE          115
151 #define TR_FULL_NAME           116
152 #define TR_FIXED_FLAVOR        117
153 #define TR_ADD_L_CURSE         118
154 #define TR_ADD_H_CURSE         119
155 #define TR_DRAIN_HP            120
156 #define TR_DRAIN_MANA          121
157 #define TR_LITE_2                          122
158 #define TR_LITE_3                          123
159 #define TR_LITE_M1                         124    /* Permanent decrease Light Area (-1) */
160 #define TR_LITE_M2                         125    /* Permanent decrease Light Area (-1) */
161 #define TR_LITE_M3                         126    /* Permanent decrease Light Area (-1) */
162 #define TR_LITE_FUEL               127    /* Lights need Fuels */
163
164 #define TR_CALL_ANIMAL         128
165 #define TR_CALL_DEMON          129
166 #define TR_CALL_DRAGON         130
167 #define TR_CALL_UNDEAD         131
168 #define TR_COWARDICE           132
169 #define TR_LOW_MELEE           133
170 #define TR_LOW_AC              134
171 #define TR_LOW_MAGIC           135
172 #define TR_FAST_DIGEST         136
173 #define TR_SLOW_REGEN          137
174
175 #define TR_FLAG_MAX            138
176 #define TR_FLAG_SIZE           5
177
178
179 typedef struct object_type object_type;
180
181 struct object_type
182 {
183         KIND_OBJECT_IDX k_idx;                  /* Kind index (zero if "dead") */
184
185         POSITION iy;                    /* Y-position on map, or zero */
186         POSITION ix;                    /* X-position on map, or zero */
187
188         /*
189          * The values for the "tval" field of various objects.
190          *
191          * This value is the primary means by which items are sorted in the
192          * player inventory_list, followed by "sval" and "cost".
193          *
194          * Note that a "BOW" with tval = 19 and sval S = 10*N+P takes a missile
195          * weapon with tval = 16+N, and does (xP) damage when so combined.  This
196          * fact is not actually used in the source, but it kind of interesting.
197          *
198          * Note that as of 2.7.8, the "item flags" apply to all items, though
199          * only armor and weapons and a few other items use any of these flags.
200          */
201
202         #define TV_SKELETON      1      /* Skeletons ('s'), not specified */
203         #define TV_BOTTLE        2      /* Empty bottles ('!') */
204         #define TV_JUNK          3      /* Sticks, Pottery, etc ('~') */
205         #define TV_WHISTLE       4      /* Whistle ('~') */
206         #define TV_SPIKE         5      /* Spikes ('~') */
207         #define TV_CHEST         7      /* Chests ('&') */
208         #define TV_FIGURINE      8      /* Magical figurines */
209         #define TV_STATUE        9      /* Statue, what a silly object... */
210         #define TV_CORPSE       10      /* Corpses and Skeletons, specific */
211         #define TV_CAPTURE      11      /* Monster ball */
212         #define TV_NO_AMMO      15      /* Ammo for crimson */
213         #define TV_SHOT         16      /* Ammo for slings */
214         #define TV_ARROW        17      /* Ammo for bows */
215         #define TV_BOLT         18      /* Ammo for x-bows */
216         #define TV_BOW          19      /* Slings/Bows/Xbows */
217         #define TV_DIGGING      20      /* Shovels/Picks */
218         #define TV_HAFTED       21      /* Priest Weapons */
219         #define TV_POLEARM      22      /* Axes and Pikes */
220         #define TV_SWORD        23      /* Edged Weapons */
221         #define TV_BOOTS        30      /* Boots */
222         #define TV_GLOVES       31      /* Gloves */
223         #define TV_HELM         32      /* Helms */
224         #define TV_CROWN        33      /* Crowns */
225         #define TV_SHIELD       34      /* Shields */
226         #define TV_CLOAK        35      /* Cloaks */
227         #define TV_SOFT_ARMOR   36      /* Soft Armor */
228         #define TV_HARD_ARMOR   37      /* Hard Armor */
229         #define TV_DRAG_ARMOR   38      /* Dragon Scale Mail */
230         #define TV_LITE         39      /* Lites (including Specials) */
231         #define TV_AMULET       40      /* Amulets (including Specials) */
232         #define TV_RING         45      /* Rings (including Specials) */
233         #define TV_CARD         50
234         #define TV_STAFF        55
235         #define TV_WAND         65
236         #define TV_ROD          66
237         #define TV_PARCHMENT    69
238         #define TV_SCROLL       70
239         #define TV_POTION       75
240         #define TV_FLASK        77
241         #define TV_FOOD         80
242         #define TV_LIFE_BOOK    90
243         #define TV_SORCERY_BOOK 91
244         #define TV_NATURE_BOOK  92
245         #define TV_CHAOS_BOOK   93
246         #define TV_DEATH_BOOK   94
247         #define TV_TRUMP_BOOK   95
248         #define TV_ARCANE_BOOK  96
249         #define TV_CRAFT_BOOK 97
250         #define TV_DAEMON_BOOK  98
251         #define TV_CRUSADE_BOOK 99
252         #define TV_MUSIC_BOOK   105
253         #define TV_HISSATSU_BOOK 106
254         #define TV_HEX_BOOK     107
255         #define TV_GOLD         127     /* Gold can only be picked up by players */
256
257         #define TV_EQUIP_BEGIN    TV_SHOT
258         #define TV_EQUIP_END      TV_CARD
259         #define TV_MISSILE_BEGIN  TV_SHOT
260         #define TV_MISSILE_END    TV_BOLT
261         #define TV_WEARABLE_BEGIN TV_BOW
262         #define TV_WEARABLE_END   TV_CARD
263         #define TV_WEAPON_BEGIN   TV_BOW
264         #define TV_WEAPON_END     TV_SWORD
265         #define TV_ARMOR_BEGIN    TV_BOOTS
266         #define TV_ARMOR_END      TV_DRAG_ARMOR
267         OBJECT_TYPE_VALUE tval;                 /* Item type (from kind) */
268
269
270         OBJECT_SUBTYPE_VALUE sval;                      /* Item sub-type (from kind) */
271
272         PARAMETER_VALUE pval;                   /* Item extra-parameter */
273
274         DISCOUNT_RATE discount;         /* Discount (if any) */
275
276         ITEM_NUMBER number;     /* Number of items */
277
278         WEIGHT weight;          /* Item weight */
279
280         ARTIFACT_IDX name1;             /* Artifact type, if any */
281         EGO_IDX name2;                  /* Ego-Item type, if any */
282
283
284         /*
285          * \95Ï\8bðver1.5.0\88È\91O\82É\8eg\82í\82ê\82Ä\82¢\82½\83A\83C\83e\83\80\82Ì\92Ç\89Á\93Á\90«\83t\83\89\83O / Hack -- special "xtra" object powers
286          */
287         #define EGO_XTRA_SUSTAIN        1 /*!< \8b\8c\94Å\83A\83C\83e\83\80\83t\83\89\83O(\94ñ\90\84\8f§): \92Ç\89Á\88Û\8e\9d\94\\97Í / Sustain one stat */
288         #define EGO_XTRA_POWER          2 /*!< \8b\8c\94Å\83A\83C\83e\83\80\83t\83\89\83O(\94ñ\90\84\8f§): \92Ç\89Á\8fã\8b\89\91Ï\90« / High resist */
289         #define EGO_XTRA_ABILITY        3 /*!< \8b\8c\94Å\83A\83C\83e\83\80\83t\83\89\83O(\94ñ\90\84\8f§): \92Ç\89Á\94\\97Í / Special ability */
290         XTRA8 xtra1;                    /* Extra info type (now unused) */
291
292         XTRA8 xtra2;                    /* Extra info activation index */
293         XTRA8 xtra3;                    /* Extra info for weaponsmith */
294         XTRA16 xtra4;                   /*!< \8cõ\8c¹\82Ì\8ec\82è\8eõ\96½\81A\82 \82é\82¢\82Í\95ß\82ç\82¦\82½\83\82\83\93\83X\83^\81[\82Ì\8c»HP / Extra info fuel or captured monster's current HP */
295         XTRA16 xtra5;                   /*!< \95ß\82ç\82¦\82½\83\82\83\93\83X\83^\81[\82Ì\8dÅ\91åHP / Extra info captured monster's max HP */
296
297         HIT_PROB to_h;                  /* Plusses to hit */
298         HIT_POINT to_d;                 /* Plusses to damage */
299         ARMOUR_CLASS to_a;                      /* Plusses to AC */
300
301         ARMOUR_CLASS ac;                        /* Normal AC */
302
303         DICE_NUMBER dd;
304         DICE_SID ds;            /* Damage dice/sides */
305
306         TIME_EFFECT timeout;    /* Timeout Counter */
307
308         /*
309          * Special Object Flags
310          */
311         #define IDENT_SENSE     0x01    /* Item has been "sensed" */
312         #define IDENT_FIXED     0x02    /* Item has been "haggled" */
313         #define IDENT_EMPTY     0x04    /* Item charges are known */
314         #define IDENT_KNOWN     0x08    /* Item abilities are known */
315         #define IDENT_STORE     0x10    /* Item is storebought !!!! */
316         #define IDENT_MENTAL    0x20    /* Item information is known */
317         #if 0
318         #define IDENT_CURSED    0x40    /* Item is temporarily cursed */
319         #endif
320         #define IDENT_BROKEN    0x80    /* Item is permanently worthless */
321         byte ident;                     /* Special flags  */
322
323         /*
324          * How object is marked (flags in object_type.mark)
325          * OM_FOUND --- original boolean flag
326          * OM_NOMSG --- temporary flag to suppress messages which were
327          *              already printed in autopick_pickup_items().
328          */
329         #define OM_FOUND        0x01    /*!< \83A\83C\83e\83\80\82ð\88ê\93x\82Å\82à\8e\8b\8aE\82É\8eû\82ß\82½\82±\82Æ\82ª\82 \82é\82© */
330         #define OM_NOMSG        0x02    /* temporary flag to suppress messages */
331         #define OM_NO_QUERY     0x04    /* Query for auto-pick was already answered as 'No' */
332         #define OM_AUTODESTROY  0x08    /* Destroy later to avoid illegal inventry shift */
333         #define OM_TOUCHED      0x10    /* Object was touched by player */
334         byte marked;            /* Object is marked */
335
336         u16b inscription;       /* Inscription index */
337         u16b art_name;      /* Artifact name (random artifacts) */
338
339         byte feeling;          /* Game generated inscription number (eg, pseudo-id) */
340
341         BIT_FLAGS art_flags[TR_FLAG_SIZE];        /* Extra Flags for ego and artifacts */
342         BIT_FLAGS curse_flags;        /* Flags for curse */
343
344         OBJECT_IDX next_o_idx;  /* Next object in stack (if any) */
345         MONSTER_IDX held_m_idx; /* Monster holding us (if any) */
346
347         ARTIFACT_BIAS_IDX artifact_bias; /*!< \83\89\83\93\83_\83\80\83A\81[\83e\83B\83t\83@\83N\83g\90\90¬\8e\9e\82Ì\83o\83C\83A\83XID */
348 };
349
350 extern bool(*item_tester_hook)(object_type *o_ptr);
351 extern OBJECT_TYPE_VALUE item_tester_tval;
352 extern bool(*get_obj_num_hook)(KIND_OBJECT_IDX k_idx);
353
354 /* object1.c */
355 extern ITEM_NUMBER scan_floor(OBJECT_IDX *items, POSITION y, POSITION x, BIT_FLAGS mode);
356 extern COMMAND_CODE show_floor(int target_item, POSITION y, POSITION x, TERM_LEN *min_width);
357 extern void reset_visuals(void);
358 extern void object_flags(object_type *o_ptr, BIT_FLAGS flgs[TR_FLAG_SIZE]);
359 extern void object_flags_known(object_type *o_ptr, BIT_FLAGS flgs[TR_FLAG_SIZE]);
360 extern concptr item_activation(object_type *o_ptr);
361 extern bool screen_object(object_type *o_ptr, BIT_FLAGS mode);
362 extern char index_to_label(int i);
363 extern INVENTORY_IDX label_to_inven(int c);
364 extern INVENTORY_IDX label_to_equip(int c);
365 extern s16b wield_slot(object_type *o_ptr);
366 extern concptr mention_use(int i);
367 extern concptr describe_use(int i);
368 extern bool check_book_realm(const OBJECT_TYPE_VALUE book_tval, const OBJECT_SUBTYPE_VALUE book_sval);
369 extern bool item_tester_okay(object_type *o_ptr);
370 extern void display_inven(void);
371 extern void display_equip(void);
372 extern COMMAND_CODE show_inven(int target_item, BIT_FLAGS mode);
373 extern COMMAND_CODE show_equip(int target_item, BIT_FLAGS mode);
374 extern void toggle_inven_equip(void);
375
376 /*
377  * get_item()\8aÖ\90\94\82Å\83A\83C\83e\83\80\82Ì\91I\91ð\82ð\8ds\82¤\83t\83\89\83O / Bit flags for the "get_item" function
378  */
379 #define USE_EQUIP 0x01 /*!< \83A\83C\83e\83\80\95\\8e¦/\91I\91ð\94Í\88Í: \91\95\94õ\95i\82©\82ç\82Ì\91I\91ð\82ð\8b\96\89Â\82·\82é / Allow equip items */
380 #define USE_INVEN 0x02 /*!< \83A\83C\83e\83\80\95\\8e¦/\91I\91ð\94Í\88Í: \8f\8a\8e\9d\95i\82©\82ç\82Ì\91I\91ð\82ð\8b\96\89Â\82·\82é /  Allow inven items */
381 #define USE_FLOOR 0x04 /*!< \83A\83C\83e\83\80\95\\8e¦/\91I\91ð\94Í\88Í: \8f°\89º\82Ì\83A\83C\83e\83\80\82©\82ç\82Ì\91I\91ð\82ð\8b\96\89Â\82·\82é /  Allow floor items */
382 #define USE_FORCE 0x08 /*!< \93Á\8eê: w\83L\81[\82Å\98B\8bC\8fp\82Ö\82Ì\90Ø\82è\91Ö\82¦\82ð\8b\96\89Â\82·\82é */
383 #define IGNORE_BOTHHAND_SLOT 0x10 /*!< \83A\83C\83e\83\80\95\\8e¦/\91I\91ð\94Í\88Í: \97¼\8eè\8e\9d\82¿\83X\83\8d\83b\83g\82ð\91I\91ð\82É\8aÜ\82ß\82È\82¢ */
384 #define USE_FULL  0x20 /*!< \83A\83C\83e\83\80\95\\8e¦/\91I\91ð\94Í\88Í: \8bó\97\93\82Ü\82Å\82·\82×\82Ä\95\\8e¦\82·\82é*/
385 extern bool can_get_item(void);
386 extern bool get_item(OBJECT_IDX *cp, concptr pmt, concptr str, BIT_FLAGS mode);
387 extern object_type *choose_object(OBJECT_IDX *idx, concptr q, concptr s, BIT_FLAGS option);
388 PERCENTAGE breakage_chance(object_type *o_ptr, SPELL_IDX snipe_type);
389
390 extern int bow_tval_ammo(object_type *o_ptr);
391
392 /* object2.c */
393 extern void excise_object_idx(OBJECT_IDX o_idx);
394 extern void delete_object_idx(OBJECT_IDX o_idx);
395 extern void delete_object(POSITION y, POSITION x);
396 extern void compact_objects(int size);
397 extern void wipe_o_list(void);
398 extern OBJECT_IDX o_pop(void);
399 extern OBJECT_IDX get_obj_num(DEPTH level, BIT_FLAGS mode);
400 extern void object_known(object_type *o_ptr);
401 extern void object_aware(object_type *o_ptr);
402 extern void object_tried(object_type *o_ptr);
403
404 /*
405  * \83A\83C\83e\83\80\82Ì\8aÈ\88Õ\8aÓ\92è\92è\8b` / Game generated inscription indices. These are stored in the object,
406  * and are used to index the string array from tables.c.
407  */
408 #define FEEL_NONE              0 /*!< \8aÈ\88Õ\8aÓ\92è: \96¢\8aÓ\92è */
409 #define FEEL_BROKEN            1 /*!< \8aÈ\88Õ\8aÓ\92è: \89ó\82ê\82Ä\82¢\82é */
410 #define FEEL_TERRIBLE          2 /*!< \8aÈ\88Õ\8aÓ\92è: \8b°\82ë\82µ\82¢ */
411 #define FEEL_WORTHLESS         3 /*!< \8aÈ\88Õ\8aÓ\92è: \96³\89¿\92l */
412 #define FEEL_CURSED            4 /*!< \8aÈ\88Õ\8aÓ\92è: \8eô\82í\82ê\82Ä\82¢\82é */
413 #define FEEL_UNCURSED          5 /*!< \8aÈ\88Õ\8aÓ\92è: \8eô\82í\82ê\82Ä\82¢\82È\82¢ */
414 #define FEEL_AVERAGE           6 /*!< \8aÈ\88Õ\8aÓ\92è: \95À */
415 #define FEEL_GOOD              7 /*!< \8aÈ\88Õ\8aÓ\92è: \8fã\8e¿ */
416 #define FEEL_EXCELLENT         8 /*!< \8aÈ\88Õ\8aÓ\92è: \8d\82\8b\89 */
417 #define FEEL_SPECIAL           9 /*!< \8aÈ\88Õ\8aÓ\92è: \93Á\95Ê */
418 #define FEEL_MAX               9 /*!< \8aÈ\88Õ\8aÓ\92è\82Ì\8eí\95Ê\90\94 */
419 extern byte value_check_aux1(object_type *o_ptr);
420 extern byte value_check_aux2(object_type *o_ptr);
421
422 extern PRICE object_value(object_type *o_ptr);
423 extern PRICE object_value_real(object_type *o_ptr);
424 extern void distribute_charges(object_type *o_ptr, object_type *q_ptr, int amt);
425 extern void reduce_charges(object_type *o_ptr, int amt);
426 extern int object_similar_part(object_type *o_ptr, object_type *j_ptr);
427 extern bool object_similar(object_type *o_ptr, object_type *j_ptr);
428 extern void object_absorb(object_type *o_ptr, object_type *j_ptr);
429 extern IDX lookup_kind(OBJECT_TYPE_VALUE tval, OBJECT_SUBTYPE_VALUE sval);
430 extern void object_wipe(object_type *o_ptr);
431 extern void object_prep(object_type *o_ptr, KIND_OBJECT_IDX k_idx);
432 extern void object_copy(object_type *o_ptr, object_type *j_ptr);
433
434 /*
435  * Bit flags for apply_magic() (etc)
436  */
437 #define AM_NO_FIXED_ART 0x00000001 /*!< Don't allow roll for fixed artifacts */
438 #define AM_GOOD         0x00000002 /*!< Generate good items */
439 #define AM_GREAT        0x00000004 /*!< Generate great items */
440 #define AM_SPECIAL      0x00000008 /*!< Generate artifacts (for debug mode only) */
441 #define AM_CURSED       0x00000010 /*!< Generate cursed/worthless items */
442 #define AM_FORBID_CHEST 0x00000020 /*!< \94 \82©\82ç\82³\82ç\82É\94 \82ª\8fo\8c»\82·\82é\82±\82Æ\82ð\97}\8e~\82·\82é */
443 extern void apply_magic(object_type *o_ptr, DEPTH lev, BIT_FLAGS mode);
444
445 extern OBJECT_SUBTYPE_VALUE coin_type;
446
447 extern bool make_object(object_type *j_ptr, BIT_FLAGS mode);
448 extern void place_object(POSITION y, POSITION x, BIT_FLAGS mode);
449 extern bool make_gold(object_type *j_ptr);
450 extern void place_gold(POSITION y, POSITION x);
451 extern OBJECT_IDX drop_near(object_type *o_ptr, PERCENTAGE chance, POSITION y, POSITION x);
452 extern void inven_item_charges(INVENTORY_IDX item);
453 extern void inven_item_describe(INVENTORY_IDX item);
454 extern void inven_item_increase(INVENTORY_IDX item, ITEM_NUMBER num);
455 extern void inven_item_optimize(INVENTORY_IDX item);
456 extern void floor_item_charges(INVENTORY_IDX item);
457 extern void floor_item_describe(INVENTORY_IDX item);
458 extern void floor_item_increase(INVENTORY_IDX item, ITEM_NUMBER num);
459 extern void floor_item_optimize(INVENTORY_IDX item);
460 extern bool inven_carry_okay(object_type *o_ptr);
461 extern bool object_sort_comp(object_type *o_ptr, s32b o_value, object_type *j_ptr);
462 extern s16b inven_carry(object_type *o_ptr);
463 extern INVENTORY_IDX inven_takeoff(INVENTORY_IDX item, ITEM_NUMBER amt);
464 extern void inven_drop(INVENTORY_IDX item, ITEM_NUMBER amt);
465 extern void combine_pack(void);
466 extern void reorder_pack(void);
467 extern void display_koff(KIND_OBJECT_IDX k_idx);
468 extern void torch_flags(object_type *o_ptr, BIT_FLAGS *flgs);
469 extern void torch_dice(object_type *o_ptr, DICE_NUMBER *dd, DICE_SID *ds);
470 extern void torch_lost_fuel(object_type *o_ptr);
471 extern concptr essence_name[];
472
473 extern s32b flag_cost(object_type *o_ptr, int plusses);
474
475 extern bool get_item_floor(COMMAND_CODE *cp, concptr pmt, concptr str, BIT_FLAGS mode);
476 extern void py_pickup_floor(bool pickup);
477
478 /*
479  * Return the "attr" for a given item.
480  * Use "flavor" if available.
481  * Default to user definitions.
482  */
483 #define object_attr(T) \
484         ((k_info[(T)->k_idx].flavor) ? \
485          (k_info[k_info[(T)->k_idx].flavor].x_attr) : \
486          ((!(T)->k_idx || ((T)->tval != TV_CORPSE) || ((T)->sval != SV_CORPSE) || \
487            (k_info[(T)->k_idx].x_attr != TERM_DARK)) ? \
488           (k_info[(T)->k_idx].x_attr) : (r_info[(T)->pval].x_attr)))
489