2 * @brief 武器/防具/アクセサリアイテムにおける、耐性やスレイ等の表記
7 #include "flavor/flavor-describer.h"
8 #include "cmd-item/cmd-smith.h"
9 #include "combat/shoot.h"
10 #include "flavor/flag-inscriptions-table.h"
11 #include "flavor/flavor-util.h"
12 #include "flavor/named-item-describer.h"
13 #include "flavor/object-flavor-types.h"
14 #include "game-option/text-display-options.h"
15 #include "grid/trap.h"
16 #include "inventory/inventory-slot-types.h"
17 #include "mind/mind-sniper.h"
18 #include "mind/mind-weaponsmith.h"
19 #include "object-enchant/object-ego.h"
20 #include "object-enchant/special-object-flags.h"
21 #include "object-enchant/tr-types.h"
22 #include "object-enchant/trg-types.h"
23 #include "object-hook/hook-checker.h"
24 #include "object-hook/hook-enchant.h"
25 #include "object-hook/hook-quest.h"
26 #include "object/object-flags.h"
27 #include "object/object-kind.h"
28 #include "perception/object-perception.h"
29 #include "player/player-status-table.h"
30 #include "player/player-status.h"
31 #include "specific-object/bow.h"
32 #include "sv-definition/sv-lite-types.h"
33 #include "sv-definition/sv-weapon-types.h"
34 #include "system/floor-type-definition.h"
35 #include "system/object-type-definition.h"
36 #include "system/player-type-definition.h"
37 #include "util/bit-flags-calculator.h"
38 #include "util/string-processor.h"
39 #include "window/display-sub-window-items.h"
41 static void describe_chest_trap(flavor_type *flavor_ptr)
43 switch (chest_traps[flavor_ptr->o_ptr->pval]) {
45 flavor_ptr->t = object_desc_str(flavor_ptr->t, _("(施錠)", " (Locked)"));
48 flavor_ptr->t = object_desc_str(flavor_ptr->t, _("(毒針)", " (Poison Needle)"));
51 flavor_ptr->t = object_desc_str(flavor_ptr->t, _("(毒針)", " (Poison Needle)"));
54 flavor_ptr->t = object_desc_str(flavor_ptr->t, _("(ガス・トラップ)", " (Gas Trap)"));
57 flavor_ptr->t = object_desc_str(flavor_ptr->t, _("(ガス・トラップ)", " (Gas Trap)"));
60 flavor_ptr->t = object_desc_str(flavor_ptr->t, _("(爆発装置)", " (Explosion Device)"));
63 case CHEST_BIRD_STORM:
66 flavor_ptr->t = object_desc_str(flavor_ptr->t, _("(召喚のルーン)", " (Summoning Runes)"));
68 case CHEST_RUNES_OF_EVIL:
69 flavor_ptr->t = object_desc_str(flavor_ptr->t, _("(邪悪なルーン)", " (Gleaming Black Runes)"));
72 flavor_ptr->t = object_desc_str(flavor_ptr->t, _("(警報装置)", " (Alarm)"));
75 flavor_ptr->t = object_desc_str(flavor_ptr->t, _("(マルチ・トラップ)", " (Multiple Traps)"));
80 static void describe_chest(flavor_type *flavor_ptr)
82 if (flavor_ptr->o_ptr->tval != TV_CHEST)
85 if (!flavor_ptr->known)
88 if (!flavor_ptr->o_ptr->pval) {
89 flavor_ptr->t = object_desc_str(flavor_ptr->t, _("(空)", " (empty)"));
93 if (flavor_ptr->o_ptr->pval < 0) {
94 if (chest_traps[0 - flavor_ptr->o_ptr->pval])
95 flavor_ptr->t = object_desc_str(flavor_ptr->t, _("(解除済)", " (disarmed)"));
97 flavor_ptr->t = object_desc_str(flavor_ptr->t, _("(非施錠)", " (unlocked)"));
102 describe_chest_trap(flavor_ptr);
105 static void decide_tval_show(player_type *player_ptr, flavor_type *flavor_ptr)
107 if (has_flag(flavor_ptr->tr_flags, TR_SHOW_MODS))
108 flavor_ptr->show_weapon = true;
110 if (object_is_smith(flavor_ptr->o_ptr) && (flavor_ptr->o_ptr->xtra3 == 1 + ESSENCE_SLAY_GLOVE))
111 flavor_ptr->show_weapon = true;
113 if (flavor_ptr->o_ptr->to_h && flavor_ptr->o_ptr->to_d)
114 flavor_ptr->show_weapon = true;
116 if (flavor_ptr->o_ptr->ac)
117 flavor_ptr->show_armour = true;
120 static void describe_weapon_dice(player_type *player_ptr, flavor_type *flavor_ptr)
122 if (!flavor_ptr->known && object_is_quest_target(player_ptr->current_floor_ptr->inside_quest, flavor_ptr->o_ptr))
125 flavor_ptr->t = object_desc_chr(flavor_ptr->t, ' ');
126 flavor_ptr->t = object_desc_chr(flavor_ptr->t, flavor_ptr->p1);
127 if (player_ptr->riding && (flavor_ptr->o_ptr->tval == TV_POLEARM) && ((flavor_ptr->o_ptr->sval == SV_LANCE) || (flavor_ptr->o_ptr->sval == SV_HEAVY_LANCE))) {
128 flavor_ptr->t = object_desc_num(flavor_ptr->t, flavor_ptr->o_ptr->dd + 2);
130 flavor_ptr->t = object_desc_num(flavor_ptr->t, flavor_ptr->o_ptr->dd);
132 flavor_ptr->t = object_desc_chr(flavor_ptr->t, 'd');
133 flavor_ptr->t = object_desc_num(flavor_ptr->t, flavor_ptr->o_ptr->ds);
134 flavor_ptr->t = object_desc_chr(flavor_ptr->t, flavor_ptr->p2);
137 static void describe_bow(player_type *player_ptr, flavor_type *flavor_ptr)
139 flavor_ptr->power = bow_tmul(flavor_ptr->o_ptr->sval);
140 if (has_flag(flavor_ptr->tr_flags, TR_XTRA_MIGHT))
143 flavor_ptr->t = object_desc_chr(flavor_ptr->t, ' ');
144 flavor_ptr->t = object_desc_chr(flavor_ptr->t, flavor_ptr->p1);
145 flavor_ptr->t = object_desc_chr(flavor_ptr->t, 'x');
146 flavor_ptr->t = object_desc_num(flavor_ptr->t, flavor_ptr->power);
147 flavor_ptr->t = object_desc_chr(flavor_ptr->t, flavor_ptr->p2);
150 if (!(flavor_ptr->mode & OD_DEBUG)) {
151 num_fire = calc_num_fire(player_ptr, flavor_ptr->o_ptr);
154 object_flags(player_ptr, flavor_ptr->o_ptr, flgs);
155 if (has_flag(flgs, TR_XTRA_SHOTS))
158 if ((num_fire == 0) || (flavor_ptr->power <= 0) || !flavor_ptr->known)
161 flavor_ptr->fire_rate = bow_energy(flavor_ptr->o_ptr->sval) / num_fire;
162 flavor_ptr->t = object_desc_chr(flavor_ptr->t, ' ');
163 flavor_ptr->t = object_desc_chr(flavor_ptr->t, flavor_ptr->p1);
164 flavor_ptr->t = object_desc_num(flavor_ptr->t, flavor_ptr->fire_rate / 100);
165 flavor_ptr->t = object_desc_chr(flavor_ptr->t, '.');
166 flavor_ptr->t = object_desc_num(flavor_ptr->t, flavor_ptr->fire_rate % 100);
167 flavor_ptr->t = object_desc_str(flavor_ptr->t, "turn");
168 flavor_ptr->t = object_desc_chr(flavor_ptr->t, flavor_ptr->p2);
171 static void describe_tval(player_type *player_ptr, flavor_type *flavor_ptr)
173 switch (flavor_ptr->o_ptr->tval) {
181 describe_weapon_dice(player_ptr, flavor_ptr);
184 describe_bow(player_ptr, flavor_ptr);
192 static void describe_named_item_tval(flavor_type *flavor_ptr)
194 if (!flavor_ptr->known)
197 if (flavor_ptr->show_weapon) {
198 flavor_ptr->t = object_desc_chr(flavor_ptr->t, ' ');
199 flavor_ptr->t = object_desc_chr(flavor_ptr->t, flavor_ptr->p1);
200 flavor_ptr->t = object_desc_int(flavor_ptr->t, flavor_ptr->o_ptr->to_h);
201 flavor_ptr->t = object_desc_chr(flavor_ptr->t, ',');
202 flavor_ptr->t = object_desc_int(flavor_ptr->t, flavor_ptr->o_ptr->to_d);
203 flavor_ptr->t = object_desc_chr(flavor_ptr->t, flavor_ptr->p2);
207 if (flavor_ptr->o_ptr->to_h != 0) {
208 flavor_ptr->t = object_desc_chr(flavor_ptr->t, ' ');
209 flavor_ptr->t = object_desc_chr(flavor_ptr->t, flavor_ptr->p1);
210 flavor_ptr->t = object_desc_int(flavor_ptr->t, flavor_ptr->o_ptr->to_h);
211 flavor_ptr->t = object_desc_chr(flavor_ptr->t, flavor_ptr->p2);
215 if (flavor_ptr->o_ptr->to_d != 0) {
216 flavor_ptr->t = object_desc_chr(flavor_ptr->t, ' ');
217 flavor_ptr->t = object_desc_chr(flavor_ptr->t, flavor_ptr->p1);
218 flavor_ptr->t = object_desc_int(flavor_ptr->t, flavor_ptr->o_ptr->to_d);
219 flavor_ptr->t = object_desc_chr(flavor_ptr->t, flavor_ptr->p2);
223 static void describe_fire_energy(player_type *player_ptr, flavor_type *flavor_ptr)
225 ENERGY energy_fire = bow_energy(flavor_ptr->bow_ptr->sval);
226 if (player_ptr->num_fire == 0) {
227 flavor_ptr->t = object_desc_chr(flavor_ptr->t, '0');
231 flavor_ptr->avgdam *= (player_ptr->num_fire * 100);
232 flavor_ptr->avgdam /= energy_fire;
233 flavor_ptr->t = object_desc_num(flavor_ptr->t, flavor_ptr->avgdam);
234 flavor_ptr->t = object_desc_str(flavor_ptr->t, show_ammo_detail ? "/turn" : "");
235 if (!show_ammo_crit_ratio)
238 int percent = calc_crit_ratio_shot(player_ptr, flavor_ptr->known ? flavor_ptr->o_ptr->to_h : 0, flavor_ptr->known ? flavor_ptr->bow_ptr->to_h : 0);
239 flavor_ptr->t = object_desc_chr(flavor_ptr->t, '/');
240 flavor_ptr->t = object_desc_num(flavor_ptr->t, percent / 100);
241 flavor_ptr->t = object_desc_chr(flavor_ptr->t, '.');
242 if (percent % 100 < 10)
243 flavor_ptr->t = object_desc_chr(flavor_ptr->t, '0');
245 flavor_ptr->t = object_desc_num(flavor_ptr->t, percent % 100);
246 flavor_ptr->t = object_desc_str(flavor_ptr->t, show_ammo_detail ? "% crit" : "%");
249 static void describe_bow_power(player_type *player_ptr, flavor_type *flavor_ptr)
251 flavor_ptr->avgdam = flavor_ptr->o_ptr->dd * (flavor_ptr->o_ptr->ds + 1) * 10 / 2;
252 int tmul = bow_tmul(flavor_ptr->bow_ptr->sval);
253 if (object_is_known(flavor_ptr->bow_ptr))
254 flavor_ptr->avgdam += (flavor_ptr->bow_ptr->to_d * 10);
256 if (flavor_ptr->known)
257 flavor_ptr->avgdam += (flavor_ptr->o_ptr->to_d * 10);
259 if (player_ptr->xtra_might)
262 tmul = tmul * (100 + (int)(adj_str_td[player_ptr->stat_index[A_STR]]) - 128);
263 flavor_ptr->avgdam *= tmul;
264 flavor_ptr->avgdam /= (100 * 10);
265 if (player_ptr->concent)
266 flavor_ptr->avgdam = boost_concentration_damage(player_ptr, flavor_ptr->avgdam);
268 if (flavor_ptr->avgdam < 0)
269 flavor_ptr->avgdam = 0;
271 flavor_ptr->t = object_desc_chr(flavor_ptr->t, ' ');
272 flavor_ptr->t = object_desc_chr(flavor_ptr->t, flavor_ptr->p1);
273 if (show_ammo_no_crit) {
274 flavor_ptr->t = object_desc_num(flavor_ptr->t, flavor_ptr->avgdam);
275 flavor_ptr->t = object_desc_str(flavor_ptr->t, show_ammo_detail ? "/shot " : "/");
278 flavor_ptr->avgdam = calc_expect_crit_shot(player_ptr, flavor_ptr->o_ptr->weight, flavor_ptr->o_ptr->to_h, flavor_ptr->bow_ptr->to_h, flavor_ptr->avgdam);
279 flavor_ptr->t = object_desc_num(flavor_ptr->t, flavor_ptr->avgdam);
280 flavor_ptr->t = show_ammo_no_crit ? object_desc_str(flavor_ptr->t, show_ammo_detail ? "/crit " : "/")
281 : object_desc_str(flavor_ptr->t, show_ammo_detail ? "/shot " : "/");
282 describe_fire_energy(player_ptr, flavor_ptr);
283 flavor_ptr->t = object_desc_chr(flavor_ptr->t, flavor_ptr->p2);
286 static void describe_spike_power(player_type *player_ptr, flavor_type *flavor_ptr)
288 int avgdam = player_ptr->mighty_throw ? (1 + 3) : 1;
289 int16_t energy_fire = 100 - player_ptr->lev;
290 avgdam += ((player_ptr->lev + 30) * (player_ptr->lev + 30) - 900) / 55;
291 flavor_ptr->t = object_desc_chr(flavor_ptr->t, ' ');
292 flavor_ptr->t = object_desc_chr(flavor_ptr->t, flavor_ptr->p1);
293 flavor_ptr->t = object_desc_num(flavor_ptr->t, avgdam);
294 flavor_ptr->t = object_desc_chr(flavor_ptr->t, '/');
295 avgdam = 100 * avgdam / energy_fire;
296 flavor_ptr->t = object_desc_num(flavor_ptr->t, avgdam);
297 flavor_ptr->t = object_desc_chr(flavor_ptr->t, flavor_ptr->p2);
300 static void describe_known_item_ac(flavor_type *flavor_ptr)
302 if (flavor_ptr->show_armour) {
303 flavor_ptr->t = object_desc_chr(flavor_ptr->t, ' ');
304 flavor_ptr->t = object_desc_chr(flavor_ptr->t, flavor_ptr->b1);
305 flavor_ptr->t = object_desc_num(flavor_ptr->t, flavor_ptr->o_ptr->ac);
306 flavor_ptr->t = object_desc_chr(flavor_ptr->t, ',');
307 flavor_ptr->t = object_desc_int(flavor_ptr->t, flavor_ptr->o_ptr->to_a);
308 flavor_ptr->t = object_desc_chr(flavor_ptr->t, flavor_ptr->b2);
312 if (flavor_ptr->o_ptr->to_a == 0)
315 flavor_ptr->t = object_desc_chr(flavor_ptr->t, ' ');
316 flavor_ptr->t = object_desc_chr(flavor_ptr->t, flavor_ptr->b1);
317 flavor_ptr->t = object_desc_int(flavor_ptr->t, flavor_ptr->o_ptr->to_a);
318 flavor_ptr->t = object_desc_chr(flavor_ptr->t, flavor_ptr->b2);
321 static void describe_ac(flavor_type *flavor_ptr)
323 if (flavor_ptr->known) {
324 describe_known_item_ac(flavor_ptr);
328 if (!flavor_ptr->show_armour)
331 flavor_ptr->t = object_desc_chr(flavor_ptr->t, ' ');
332 flavor_ptr->t = object_desc_chr(flavor_ptr->t, flavor_ptr->b1);
333 flavor_ptr->t = object_desc_num(flavor_ptr->t, flavor_ptr->o_ptr->ac);
334 flavor_ptr->t = object_desc_chr(flavor_ptr->t, flavor_ptr->b2);
337 static void describe_charges_staff_wand(flavor_type *flavor_ptr)
339 flavor_ptr->t = object_desc_chr(flavor_ptr->t, ' ');
340 flavor_ptr->t = object_desc_chr(flavor_ptr->t, flavor_ptr->p1);
341 if ((flavor_ptr->o_ptr->tval == TV_STAFF) && (flavor_ptr->o_ptr->number > 1)) {
342 flavor_ptr->t = object_desc_num(flavor_ptr->t, flavor_ptr->o_ptr->number);
343 flavor_ptr->t = object_desc_str(flavor_ptr->t, "x ");
346 flavor_ptr->t = object_desc_num(flavor_ptr->t, flavor_ptr->o_ptr->pval);
347 flavor_ptr->t = object_desc_str(flavor_ptr->t, _("回分", " charge"));
350 if (flavor_ptr->o_ptr->pval != 1)
351 flavor_ptr->t = object_desc_chr(flavor_ptr->t, 's');
354 flavor_ptr->t = object_desc_chr(flavor_ptr->t, flavor_ptr->p2);
357 static void describe_charges_rod(flavor_type *flavor_ptr)
359 if (flavor_ptr->o_ptr->timeout == 0)
362 if (flavor_ptr->o_ptr->number <= 1) {
363 flavor_ptr->t = object_desc_str(flavor_ptr->t, _("(充填中)", " (charging)"));
367 if (flavor_ptr->k_ptr->pval == 0)
368 flavor_ptr->k_ptr->pval = 1;
370 flavor_ptr->power = (flavor_ptr->o_ptr->timeout + (flavor_ptr->k_ptr->pval - 1)) / flavor_ptr->k_ptr->pval;
371 if (flavor_ptr->power > flavor_ptr->o_ptr->number)
372 flavor_ptr->power = flavor_ptr->o_ptr->number;
374 flavor_ptr->t = object_desc_str(flavor_ptr->t, " (");
375 flavor_ptr->t = object_desc_num(flavor_ptr->t, flavor_ptr->power);
376 flavor_ptr->t = object_desc_str(flavor_ptr->t, _("本 充填中)", " charging)"));
379 static void describe_specific_pval(flavor_type *flavor_ptr)
381 if (has_flag(flavor_ptr->tr_flags, TR_SPEED)) {
382 flavor_ptr->t = object_desc_str(flavor_ptr->t, _("加速", " to speed"));
386 if (has_flag(flavor_ptr->tr_flags, TR_BLOWS)) {
387 flavor_ptr->t = object_desc_str(flavor_ptr->t, _("攻撃", " attack"));
390 if (ABS(flavor_ptr->o_ptr->pval) != 1)
391 flavor_ptr->t = object_desc_chr(flavor_ptr->t, 's');
397 if (has_flag(flavor_ptr->tr_flags, TR_STEALTH)) {
398 flavor_ptr->t = object_desc_str(flavor_ptr->t, _("隠密", " to stealth"));
402 if (has_flag(flavor_ptr->tr_flags, TR_SEARCH)) {
403 flavor_ptr->t = object_desc_str(flavor_ptr->t, _("探索", " to searching"));
407 if (has_flag(flavor_ptr->tr_flags, TR_INFRA))
408 flavor_ptr->t = object_desc_str(flavor_ptr->t, _("赤外線視力", " to infravision"));
411 static void describe_pval(flavor_type *flavor_ptr)
413 if (!has_pval_flags(flavor_ptr->tr_flags))
416 flavor_ptr->t = object_desc_chr(flavor_ptr->t, ' ');
417 flavor_ptr->t = object_desc_chr(flavor_ptr->t, flavor_ptr->p1);
418 flavor_ptr->t = object_desc_int(flavor_ptr->t, flavor_ptr->o_ptr->pval);
419 if (has_flag(flavor_ptr->tr_flags, TR_HIDE_TYPE)) {
420 flavor_ptr->t = object_desc_chr(flavor_ptr->t, flavor_ptr->p2);
424 describe_specific_pval(flavor_ptr);
425 flavor_ptr->t = object_desc_chr(flavor_ptr->t, flavor_ptr->p2);
428 static void describe_lamp_life(flavor_type *flavor_ptr)
430 if ((flavor_ptr->o_ptr->tval != TV_LITE) || (object_is_fixed_artifact(flavor_ptr->o_ptr) || (flavor_ptr->o_ptr->sval == SV_LITE_FEANOR)))
433 flavor_ptr->t = object_desc_str(flavor_ptr->t, _("(", " (with "));
434 if (flavor_ptr->o_ptr->name2 == EGO_LITE_LONG)
435 flavor_ptr->t = object_desc_num(flavor_ptr->t, flavor_ptr->o_ptr->xtra4 * 2);
437 flavor_ptr->t = object_desc_num(flavor_ptr->t, flavor_ptr->o_ptr->xtra4);
439 flavor_ptr->t = object_desc_str(flavor_ptr->t, _("ターンの寿命)", " turns of light)"));
443 * @brief 杖や光源等、寿命のあるアイテムの残り回数やターン表記
444 * @param アイテム表記への参照ポインタ
446 static void describe_remaining(flavor_type *flavor_ptr)
448 if (!flavor_ptr->known)
451 if (((flavor_ptr->o_ptr->tval == TV_STAFF) || (flavor_ptr->o_ptr->tval == TV_WAND)))
452 describe_charges_staff_wand(flavor_ptr);
453 else if (flavor_ptr->o_ptr->tval == TV_ROD)
454 describe_charges_rod(flavor_ptr);
456 describe_pval(flavor_ptr);
457 describe_lamp_life(flavor_ptr);
458 if (flavor_ptr->o_ptr->timeout && (flavor_ptr->o_ptr->tval != TV_ROD))
459 flavor_ptr->t = object_desc_str(flavor_ptr->t, _("(充填中)", " (charging)"));
462 static void decide_item_feeling(flavor_type *flavor_ptr)
464 flavor_ptr->fake_insc_buf[0] = '\0';
465 if (flavor_ptr->o_ptr->feeling) {
466 strcpy(flavor_ptr->fake_insc_buf, game_inscriptions[flavor_ptr->o_ptr->feeling]);
470 if (object_is_cursed(flavor_ptr->o_ptr) && (flavor_ptr->known || (flavor_ptr->o_ptr->ident & IDENT_SENSE))) {
471 strcpy(flavor_ptr->fake_insc_buf, _("呪われている", "cursed"));
475 if (((flavor_ptr->o_ptr->tval == TV_RING) || (flavor_ptr->o_ptr->tval == TV_AMULET) || (flavor_ptr->o_ptr->tval == TV_LITE)
476 || (flavor_ptr->o_ptr->tval == TV_FIGURINE))
477 && flavor_ptr->aware && !flavor_ptr->known && !(flavor_ptr->o_ptr->ident & IDENT_SENSE)) {
478 strcpy(flavor_ptr->fake_insc_buf, _("未鑑定", "unidentified"));
482 if (!flavor_ptr->known && (flavor_ptr->o_ptr->ident & IDENT_EMPTY)) {
483 strcpy(flavor_ptr->fake_insc_buf, _("空", "empty"));
487 if (!flavor_ptr->aware && object_is_tried(flavor_ptr->o_ptr))
488 strcpy(flavor_ptr->fake_insc_buf, _("未判明", "tried"));
492 * @brief オブジェクトの各表記を返すメイン関数 / Creates a description of the item "o_ptr", and stores it in "out_val".
493 * @param player_ptr プレーヤーへの参照ポインタ
494 * @param buf 表記を返すための文字列参照ポインタ
495 * @param o_ptr 特性短縮表記を得たいオブジェクト構造体の参照ポインタ
496 * @param mode 表記に関するオプション指定
497 * @return 現在クエスト達成目的のアイテムならばTRUEを返す
499 void describe_flavor(player_type *player_ptr, char *buf, object_type *o_ptr, BIT_FLAGS mode)
501 flavor_type tmp_flavor;
502 flavor_type *flavor_ptr = initialize_flavor_type(&tmp_flavor, buf, o_ptr, mode);
503 describe_named_item(player_ptr, flavor_ptr);
504 if (flavor_ptr->mode & OD_NAME_ONLY || o_ptr->k_idx == 0) {
505 angband_strcpy(flavor_ptr->buf, flavor_ptr->tmp_val, MAX_NLEN);
509 describe_chest(flavor_ptr);
510 decide_tval_show(player_ptr, flavor_ptr);
511 describe_tval(player_ptr, flavor_ptr);
512 describe_named_item_tval(flavor_ptr);
513 if (!(mode & OD_DEBUG)) {
514 flavor_ptr->bow_ptr = &player_ptr->inventory_list[INVEN_BOW];
515 if ((flavor_ptr->bow_ptr->k_idx != 0) && (flavor_ptr->o_ptr->tval == bow_tval_ammo(flavor_ptr->bow_ptr)))
516 describe_bow_power(player_ptr, flavor_ptr);
517 else if ((player_ptr->pclass == CLASS_NINJA) && (flavor_ptr->o_ptr->tval == TV_SPIKE))
518 describe_spike_power(player_ptr, flavor_ptr);
521 describe_ac(flavor_ptr);
522 if (flavor_ptr->mode & OD_NAME_AND_ENCHANT) {
523 angband_strcpy(flavor_ptr->buf, flavor_ptr->tmp_val, MAX_NLEN);
527 describe_remaining(flavor_ptr);
528 if (flavor_ptr->mode & OD_OMIT_INSCRIPTION) {
529 angband_strcpy(flavor_ptr->buf, flavor_ptr->tmp_val, MAX_NLEN);
533 display_short_flavors(player_ptr, flavor_ptr);
534 decide_item_feeling(flavor_ptr);
535 display_item_discount(flavor_ptr);
536 display_item_fake_inscription(flavor_ptr);
537 angband_strcpy(flavor_ptr->buf, flavor_ptr->tmp_val, MAX_NLEN);