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-kind.h"
27 #include "perception/object-perception.h"
28 #include "sv-definition/sv-lite-types.h"
29 #include "util/bit-flags-calculator.h"
30 #include "util/quarks.h"
31 #include "util/string-processor.h"
33 static void describe_chest_trap(flavor_type *flavor_ptr)
35 switch (chest_traps[flavor_ptr->o_ptr->pval]) {
37 flavor_ptr->t = object_desc_str(flavor_ptr->t, _("(施錠)", " (Locked)"));
40 flavor_ptr->t = object_desc_str(flavor_ptr->t, _("(毒針)", " (Poison Needle)"));
43 flavor_ptr->t = object_desc_str(flavor_ptr->t, _("(毒針)", " (Poison Needle)"));
46 flavor_ptr->t = object_desc_str(flavor_ptr->t, _("(ガス・トラップ)", " (Gas Trap)"));
49 flavor_ptr->t = object_desc_str(flavor_ptr->t, _("(ガス・トラップ)", " (Gas Trap)"));
52 flavor_ptr->t = object_desc_str(flavor_ptr->t, _("(爆発装置)", " (Explosion Device)"));
55 case CHEST_BIRD_STORM:
58 flavor_ptr->t = object_desc_str(flavor_ptr->t, _("(召喚のルーン)", " (Summoning Runes)"));
60 case CHEST_RUNES_OF_EVIL:
61 flavor_ptr->t = object_desc_str(flavor_ptr->t, _("(邪悪なルーン)", " (Gleaming Black Runes)"));
64 flavor_ptr->t = object_desc_str(flavor_ptr->t, _("(警報装置)", " (Alarm)"));
67 flavor_ptr->t = object_desc_str(flavor_ptr->t, _("(マルチ・トラップ)", " (Multiple Traps)"));
72 static void describe_chest(flavor_type *flavor_ptr)
74 if (flavor_ptr->o_ptr->tval != TV_CHEST)
77 if (!flavor_ptr->known)
80 if (!flavor_ptr->o_ptr->pval) {
81 flavor_ptr->t = object_desc_str(flavor_ptr->t, _("(空)", " (empty)"));
85 if (flavor_ptr->o_ptr->pval < 0) {
86 if (chest_traps[0 - flavor_ptr->o_ptr->pval])
87 flavor_ptr->t = object_desc_str(flavor_ptr->t, _("(解除済)", " (disarmed)"));
89 flavor_ptr->t = object_desc_str(flavor_ptr->t, _("(非施錠)", " (unlocked)"));
94 describe_chest_trap(flavor_ptr);
97 static void decide_tval_show(player_type *player_ptr, flavor_type *flavor_ptr)
99 if (have_flag(flavor_ptr->tr_flags, TR_SHOW_MODS))
100 flavor_ptr->show_weapon = TRUE;
102 if (object_is_smith(player_ptr, flavor_ptr->o_ptr) && (flavor_ptr->o_ptr->xtra3 == 1 + ESSENCE_SLAY_GLOVE))
103 flavor_ptr->show_weapon = TRUE;
105 if (flavor_ptr->o_ptr->to_h && flavor_ptr->o_ptr->to_d)
106 flavor_ptr->show_weapon = TRUE;
108 if (flavor_ptr->o_ptr->ac)
109 flavor_ptr->show_armour = TRUE;
112 static void describe_digging(player_type *player_ptr, flavor_type *flavor_ptr)
114 if (object_is_quest_target(player_ptr, flavor_ptr->o_ptr) && !flavor_ptr->known)
117 flavor_ptr->t = object_desc_chr(flavor_ptr->t, ' ');
118 flavor_ptr->t = object_desc_chr(flavor_ptr->t, flavor_ptr->p1);
119 flavor_ptr->t = object_desc_num(flavor_ptr->t, flavor_ptr->o_ptr->dd);
120 flavor_ptr->t = object_desc_chr(flavor_ptr->t, 'd');
121 flavor_ptr->t = object_desc_num(flavor_ptr->t, flavor_ptr->o_ptr->ds);
122 flavor_ptr->t = object_desc_chr(flavor_ptr->t, flavor_ptr->p2);
125 static void describe_bow(player_type *player_ptr, flavor_type *flavor_ptr)
127 flavor_ptr->power = bow_tmul(flavor_ptr->o_ptr->sval);
128 if (have_flag(flavor_ptr->tr_flags, TR_XTRA_MIGHT))
131 flavor_ptr->t = object_desc_chr(flavor_ptr->t, ' ');
132 flavor_ptr->t = object_desc_chr(flavor_ptr->t, flavor_ptr->p1);
133 flavor_ptr->t = object_desc_chr(flavor_ptr->t, 'x');
134 flavor_ptr->t = object_desc_num(flavor_ptr->t, flavor_ptr->power);
135 flavor_ptr->t = object_desc_chr(flavor_ptr->t, flavor_ptr->p2);
136 flavor_ptr->fire_rate = calc_num_fire(player_ptr, flavor_ptr->o_ptr);
137 if ((flavor_ptr->fire_rate == 0) || (flavor_ptr->power <= 0) || !flavor_ptr->known)
140 flavor_ptr->fire_rate = bow_energy(flavor_ptr->o_ptr->sval) / flavor_ptr->fire_rate;
141 flavor_ptr->t = object_desc_chr(flavor_ptr->t, ' ');
142 flavor_ptr->t = object_desc_chr(flavor_ptr->t, flavor_ptr->p1);
143 flavor_ptr->t = object_desc_num(flavor_ptr->t, flavor_ptr->fire_rate / 100);
144 flavor_ptr->t = object_desc_chr(flavor_ptr->t, '.');
145 flavor_ptr->t = object_desc_num(flavor_ptr->t, flavor_ptr->fire_rate % 100);
146 flavor_ptr->t = object_desc_str(flavor_ptr->t, "turn");
147 flavor_ptr->t = object_desc_chr(flavor_ptr->t, flavor_ptr->p2);
150 static void describe_tval(player_type *player_ptr, flavor_type *flavor_ptr)
152 switch (flavor_ptr->o_ptr->tval) {
160 describe_digging(player_ptr, flavor_ptr);
163 describe_bow(player_ptr, flavor_ptr);
168 static void describe_named_item_tval(flavor_type *flavor_ptr)
170 if (!flavor_ptr->known)
173 if (flavor_ptr->show_weapon) {
174 flavor_ptr->t = object_desc_chr(flavor_ptr->t, ' ');
175 flavor_ptr->t = object_desc_chr(flavor_ptr->t, flavor_ptr->p1);
176 flavor_ptr->t = object_desc_int(flavor_ptr->t, flavor_ptr->o_ptr->to_h);
177 flavor_ptr->t = object_desc_chr(flavor_ptr->t, ',');
178 flavor_ptr->t = object_desc_int(flavor_ptr->t, flavor_ptr->o_ptr->to_d);
179 flavor_ptr->t = object_desc_chr(flavor_ptr->t, flavor_ptr->p2);
183 if (flavor_ptr->o_ptr->to_h != 0) {
184 flavor_ptr->t = object_desc_chr(flavor_ptr->t, ' ');
185 flavor_ptr->t = object_desc_chr(flavor_ptr->t, flavor_ptr->p1);
186 flavor_ptr->t = object_desc_int(flavor_ptr->t, flavor_ptr->o_ptr->to_h);
187 flavor_ptr->t = object_desc_chr(flavor_ptr->t, flavor_ptr->p2);
191 if (flavor_ptr->o_ptr->to_d != 0) {
192 flavor_ptr->t = object_desc_chr(flavor_ptr->t, ' ');
193 flavor_ptr->t = object_desc_chr(flavor_ptr->t, flavor_ptr->p1);
194 flavor_ptr->t = object_desc_int(flavor_ptr->t, flavor_ptr->o_ptr->to_d);
195 flavor_ptr->t = object_desc_chr(flavor_ptr->t, flavor_ptr->p2);
199 static void describe_fire_energy(player_type *player_ptr, flavor_type *flavor_ptr)
201 ENERGY energy_fire = bow_energy(flavor_ptr->bow_ptr->sval);
202 if (player_ptr->num_fire == 0) {
203 flavor_ptr->t = object_desc_chr(flavor_ptr->t, '0');
207 flavor_ptr->avgdam *= (player_ptr->num_fire * 100);
208 flavor_ptr->avgdam /= energy_fire;
209 flavor_ptr->t = object_desc_num(flavor_ptr->t, flavor_ptr->avgdam);
210 flavor_ptr->t = object_desc_str(flavor_ptr->t, show_ammo_detail ? "/turn" : "");
211 if (!show_ammo_crit_ratio)
214 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);
215 flavor_ptr->t = object_desc_chr(flavor_ptr->t, '/');
216 flavor_ptr->t = object_desc_num(flavor_ptr->t, percent / 100);
217 flavor_ptr->t = object_desc_chr(flavor_ptr->t, '.');
218 if (percent % 100 < 10)
219 flavor_ptr->t = object_desc_chr(flavor_ptr->t, '0');
221 flavor_ptr->t = object_desc_num(flavor_ptr->t, percent % 100);
222 flavor_ptr->t = object_desc_str(flavor_ptr->t, show_ammo_detail ? "% crit" : "%");
225 static void describe_bow_power(player_type *player_ptr, flavor_type *flavor_ptr)
227 flavor_ptr->avgdam = flavor_ptr->o_ptr->dd * (flavor_ptr->o_ptr->ds + 1) * 10 / 2;
228 int tmul = bow_tmul(flavor_ptr->bow_ptr->sval);
229 if (object_is_known(flavor_ptr->bow_ptr))
230 flavor_ptr->avgdam += (flavor_ptr->bow_ptr->to_d * 10);
232 if (flavor_ptr->known)
233 flavor_ptr->avgdam += (flavor_ptr->o_ptr->to_d * 10);
235 if (player_ptr->xtra_might)
238 tmul = tmul * (100 + (int)(adj_str_td[player_ptr->stat_ind[A_STR]]) - 128);
239 flavor_ptr->avgdam *= tmul;
240 flavor_ptr->avgdam /= (100 * 10);
241 if (player_ptr->concent)
242 flavor_ptr->avgdam = boost_concentration_damage(player_ptr, flavor_ptr->avgdam);
244 if (flavor_ptr->avgdam < 0)
245 flavor_ptr->avgdam = 0;
247 flavor_ptr->t = object_desc_chr(flavor_ptr->t, ' ');
248 flavor_ptr->t = object_desc_chr(flavor_ptr->t, flavor_ptr->p1);
249 if (show_ammo_no_crit) {
250 flavor_ptr->t = object_desc_num(flavor_ptr->t, flavor_ptr->avgdam);
251 flavor_ptr->t = object_desc_str(flavor_ptr->t, show_ammo_detail ? "/shot " : "/");
254 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);
255 flavor_ptr->t = object_desc_num(flavor_ptr->t, flavor_ptr->avgdam);
256 flavor_ptr->t = show_ammo_no_crit ? object_desc_str(flavor_ptr->t, show_ammo_detail ? "/crit " : "/")
257 : object_desc_str(flavor_ptr->t, show_ammo_detail ? "/shot " : "/");
258 describe_fire_energy(player_ptr, flavor_ptr);
259 flavor_ptr->t = object_desc_chr(flavor_ptr->t, flavor_ptr->p2);
262 static void describe_spike_power(player_type *player_ptr, flavor_type *flavor_ptr)
264 int avgdam = player_ptr->mighty_throw ? (1 + 3) : 1;
265 s16b energy_fire = 100 - player_ptr->lev;
266 avgdam += ((player_ptr->lev + 30) * (player_ptr->lev + 30) - 900) / 55;
267 flavor_ptr->t = object_desc_chr(flavor_ptr->t, ' ');
268 flavor_ptr->t = object_desc_chr(flavor_ptr->t, flavor_ptr->p1);
269 flavor_ptr->t = object_desc_num(flavor_ptr->t, avgdam);
270 flavor_ptr->t = object_desc_chr(flavor_ptr->t, '/');
271 avgdam = 100 * avgdam / energy_fire;
272 flavor_ptr->t = object_desc_num(flavor_ptr->t, avgdam);
273 flavor_ptr->t = object_desc_chr(flavor_ptr->t, flavor_ptr->p2);
276 static void describe_known_item_ac(flavor_type *flavor_ptr)
278 if (flavor_ptr->show_armour) {
279 flavor_ptr->t = object_desc_chr(flavor_ptr->t, ' ');
280 flavor_ptr->t = object_desc_chr(flavor_ptr->t, flavor_ptr->b1);
281 flavor_ptr->t = object_desc_num(flavor_ptr->t, flavor_ptr->o_ptr->ac);
282 flavor_ptr->t = object_desc_chr(flavor_ptr->t, ',');
283 flavor_ptr->t = object_desc_int(flavor_ptr->t, flavor_ptr->o_ptr->to_a);
284 flavor_ptr->t = object_desc_chr(flavor_ptr->t, flavor_ptr->b2);
288 if (flavor_ptr->o_ptr->to_a == 0)
291 flavor_ptr->t = object_desc_chr(flavor_ptr->t, ' ');
292 flavor_ptr->t = object_desc_chr(flavor_ptr->t, flavor_ptr->b1);
293 flavor_ptr->t = object_desc_int(flavor_ptr->t, flavor_ptr->o_ptr->to_a);
294 flavor_ptr->t = object_desc_chr(flavor_ptr->t, flavor_ptr->b2);
297 static void describe_ac(flavor_type *flavor_ptr)
299 if (flavor_ptr->known) {
300 describe_known_item_ac(flavor_ptr);
304 if (!flavor_ptr->show_armour)
307 flavor_ptr->t = object_desc_chr(flavor_ptr->t, ' ');
308 flavor_ptr->t = object_desc_chr(flavor_ptr->t, flavor_ptr->b1);
309 flavor_ptr->t = object_desc_num(flavor_ptr->t, flavor_ptr->o_ptr->ac);
310 flavor_ptr->t = object_desc_chr(flavor_ptr->t, flavor_ptr->b2);
313 static void describe_charges_staff_wand(flavor_type *flavor_ptr)
315 flavor_ptr->t = object_desc_chr(flavor_ptr->t, ' ');
316 flavor_ptr->t = object_desc_chr(flavor_ptr->t, flavor_ptr->p1);
317 if ((flavor_ptr->o_ptr->tval == TV_STAFF) && (flavor_ptr->o_ptr->number > 1)) {
318 flavor_ptr->t = object_desc_num(flavor_ptr->t, flavor_ptr->o_ptr->number);
319 flavor_ptr->t = object_desc_str(flavor_ptr->t, "x ");
322 flavor_ptr->t = object_desc_num(flavor_ptr->t, flavor_ptr->o_ptr->pval);
323 flavor_ptr->t = object_desc_str(flavor_ptr->t, _("回分", " charge"));
326 if (flavor_ptr->o_ptr->pval != 1)
327 flavor_ptr->t = object_desc_chr(flavor_ptr->t, 's');
330 flavor_ptr->t = object_desc_chr(flavor_ptr->t, flavor_ptr->p2);
333 static void describe_charges_rod(flavor_type *flavor_ptr)
335 if (flavor_ptr->o_ptr->timeout == 0)
338 if (flavor_ptr->o_ptr->number <= 1) {
339 flavor_ptr->t = object_desc_str(flavor_ptr->t, _("(充填中)", " (charging)"));
343 if (flavor_ptr->k_ptr->pval == 0)
344 flavor_ptr->k_ptr->pval = 1;
346 flavor_ptr->power = (flavor_ptr->o_ptr->timeout + (flavor_ptr->k_ptr->pval - 1)) / flavor_ptr->k_ptr->pval;
347 if (flavor_ptr->power > flavor_ptr->o_ptr->number)
348 flavor_ptr->power = flavor_ptr->o_ptr->number;
350 flavor_ptr->t = object_desc_str(flavor_ptr->t, " (");
351 flavor_ptr->t = object_desc_num(flavor_ptr->t, flavor_ptr->power);
352 flavor_ptr->t = object_desc_str(flavor_ptr->t, _("本 充填中)", " charging)"));
355 static void describe_specific_pval(flavor_type *flavor_ptr)
357 if (have_flag(flavor_ptr->tr_flags, TR_SPEED)) {
358 flavor_ptr->t = object_desc_str(flavor_ptr->t, _("加速", " to speed"));
362 if (have_flag(flavor_ptr->tr_flags, TR_BLOWS)) {
363 flavor_ptr->t = object_desc_str(flavor_ptr->t, _("攻撃", " attack"));
366 if (ABS(flavor_ptr->o_ptr->pval) != 1)
367 flavor_ptr->t = object_desc_chr(flavor_ptr->t, 's');
371 if (have_flag(flavor_ptr->tr_flags, TR_STEALTH)) {
372 flavor_ptr->t = object_desc_str(flavor_ptr->t, _("隠密", " to stealth"));
376 if (have_flag(flavor_ptr->tr_flags, TR_SEARCH)) {
377 flavor_ptr->t = object_desc_str(flavor_ptr->t, _("探索", " to searching"));
381 if (have_flag(flavor_ptr->tr_flags, TR_INFRA))
382 flavor_ptr->t = object_desc_str(flavor_ptr->t, _("赤外線視力", " to infravision"));
385 static void describe_pval(flavor_type *flavor_ptr)
387 if (!have_pval_flags(flavor_ptr->tr_flags))
390 flavor_ptr->t = object_desc_chr(flavor_ptr->t, ' ');
391 flavor_ptr->t = object_desc_chr(flavor_ptr->t, flavor_ptr->p1);
392 flavor_ptr->t = object_desc_int(flavor_ptr->t, flavor_ptr->o_ptr->pval);
393 if (have_flag(flavor_ptr->tr_flags, TR_HIDE_TYPE)) {
394 flavor_ptr->t = object_desc_chr(flavor_ptr->t, flavor_ptr->p2);
398 describe_specific_pval(flavor_ptr);
399 flavor_ptr->t = object_desc_chr(flavor_ptr->t, flavor_ptr->p2);
402 static void describe_lamp_life(flavor_type *flavor_ptr)
404 if ((flavor_ptr->o_ptr->tval != TV_LITE) || ((object_is_fixed_artifact(flavor_ptr->o_ptr) && (flavor_ptr->o_ptr->sval != SV_LITE_FEANOR))))
407 flavor_ptr->t = object_desc_str(flavor_ptr->t, _("(", " (with "));
408 if (flavor_ptr->o_ptr->name2 == EGO_LITE_LONG)
409 flavor_ptr->t = object_desc_num(flavor_ptr->t, flavor_ptr->o_ptr->xtra4 * 2);
411 flavor_ptr->t = object_desc_num(flavor_ptr->t, flavor_ptr->o_ptr->xtra4);
413 flavor_ptr->t = object_desc_str(flavor_ptr->t, _("ターンの寿命)", " turns of light)"));
417 * @brief 杖や光源等、寿命のあるアイテムの残り回数やターン表記
418 * @param アイテム表記への参照ポインタ
421 static void describe_remaining(flavor_type *flavor_ptr)
423 if (!flavor_ptr->known)
426 if (((flavor_ptr->o_ptr->tval == TV_STAFF) || (flavor_ptr->o_ptr->tval == TV_WAND)))
427 describe_charges_staff_wand(flavor_ptr);
428 else if (flavor_ptr->o_ptr->tval == TV_ROD)
429 describe_charges_rod(flavor_ptr);
431 describe_pval(flavor_ptr);
432 describe_lamp_life(flavor_ptr);
433 if (flavor_ptr->o_ptr->timeout && (flavor_ptr->o_ptr->tval != TV_ROD))
434 flavor_ptr->t = object_desc_str(flavor_ptr->t, _("(充填中)", " (charging)"));
437 void display_short_flavors(player_type *player_ptr, flavor_type *flavor_ptr)
439 flavor_ptr->tmp_val2[0] = '\0';
440 if ((abbrev_extra || abbrev_all) && object_is_fully_known(flavor_ptr->o_ptr)) {
441 if (!flavor_ptr->o_ptr->inscription || !angband_strchr(quark_str(flavor_ptr->o_ptr->inscription), '%')) {
442 bool kanji = _(TRUE, FALSE);
443 get_ability_abbreviation(player_ptr, flavor_ptr->tmp_val2, flavor_ptr->o_ptr, kanji, abbrev_all);
447 if (flavor_ptr->o_ptr->inscription == 0)
451 if (flavor_ptr->tmp_val2[0])
452 strcat(flavor_ptr->tmp_val2, ", ");
454 get_inscription(player_ptr, buff, flavor_ptr->o_ptr);
455 angband_strcat(flavor_ptr->tmp_val2, buff, sizeof(flavor_ptr->tmp_val2));
458 static void decide_item_feeling(flavor_type *flavor_ptr)
460 flavor_ptr->fake_insc_buf[0] = '\0';
461 if (flavor_ptr->o_ptr->feeling) {
462 strcpy(flavor_ptr->fake_insc_buf, game_inscriptions[flavor_ptr->o_ptr->feeling]);
466 if (object_is_cursed(flavor_ptr->o_ptr) && (flavor_ptr->known || (flavor_ptr->o_ptr->ident & IDENT_SENSE))) {
467 strcpy(flavor_ptr->fake_insc_buf, _("呪われている", "cursed"));
471 if (((flavor_ptr->o_ptr->tval == TV_RING) || (flavor_ptr->o_ptr->tval == TV_AMULET) || (flavor_ptr->o_ptr->tval == TV_LITE)
472 || (flavor_ptr->o_ptr->tval == TV_FIGURINE))
473 && flavor_ptr->aware && !flavor_ptr->known && !(flavor_ptr->o_ptr->ident & IDENT_SENSE)) {
474 strcpy(flavor_ptr->fake_insc_buf, _("未鑑定", "unidentified"));
478 if (!flavor_ptr->known && (flavor_ptr->o_ptr->ident & IDENT_EMPTY)) {
479 strcpy(flavor_ptr->fake_insc_buf, _("空", "empty"));
483 if (!flavor_ptr->aware && object_is_tried(flavor_ptr->o_ptr))
484 strcpy(flavor_ptr->fake_insc_buf, _("未判明", "tried"));
488 * @brief オブジェクトの各表記を返すメイン関数 / Creates a description of the item "o_ptr", and stores it in "out_val".
489 * @param player_ptr プレーヤーへの参照ポインタ
490 * @param buf 表記を返すための文字列参照ポインタ
491 * @param o_ptr 特性短縮表記を得たいオブジェクト構造体の参照ポインタ
492 * @param mode 表記に関するオプション指定
493 * @return 現在クエスト達成目的のアイテムならばTRUEを返す
495 void describe_flavor(player_type *player_ptr, char *buf, object_type *o_ptr, BIT_FLAGS mode)
497 flavor_type tmp_flavor;
498 flavor_type *flavor_ptr = initialize_flavor_type(&tmp_flavor, buf, o_ptr, mode);
499 describe_named_item(player_ptr, flavor_ptr);
500 if (flavor_ptr->mode & OD_NAME_ONLY) {
501 angband_strcpy(flavor_ptr->buf, flavor_ptr->tmp_val, MAX_NLEN);
505 describe_chest(flavor_ptr);
506 decide_tval_show(player_ptr, flavor_ptr);
507 describe_tval(player_ptr, flavor_ptr);
508 describe_named_item_tval(flavor_ptr);
509 flavor_ptr->bow_ptr = &player_ptr->inventory_list[INVEN_BOW];
510 if ((flavor_ptr->bow_ptr->k_idx != 0) && (flavor_ptr->o_ptr->tval == player_ptr->tval_ammo))
511 describe_bow_power(player_ptr, flavor_ptr);
512 else if ((player_ptr->pclass == CLASS_NINJA) && (flavor_ptr->o_ptr->tval == TV_SPIKE))
513 describe_spike_power(player_ptr, flavor_ptr);
515 describe_ac(flavor_ptr);
516 if (flavor_ptr->mode & OD_NAME_AND_ENCHANT) {
517 angband_strcpy(flavor_ptr->buf, flavor_ptr->tmp_val, MAX_NLEN);
521 describe_remaining(flavor_ptr);
522 if (flavor_ptr->mode & OD_OMIT_INSCRIPTION) {
523 angband_strcpy(flavor_ptr->buf, flavor_ptr->tmp_val, MAX_NLEN);
527 display_short_flavors(player_ptr, flavor_ptr);
528 decide_item_feeling(flavor_ptr);
529 if (flavor_ptr->o_ptr->discount) {
530 if (!flavor_ptr->tmp_val2[0] || (flavor_ptr->o_ptr->ident & IDENT_STORE)) {
531 char discount_num_buf[4];
532 if (flavor_ptr->fake_insc_buf[0])
533 strcat(flavor_ptr->fake_insc_buf, ", ");
535 (void)object_desc_num(discount_num_buf, flavor_ptr->o_ptr->discount);
536 strcat(flavor_ptr->fake_insc_buf, discount_num_buf);
537 strcat(flavor_ptr->fake_insc_buf, _("%引き", "% off"));
541 if (flavor_ptr->fake_insc_buf[0] || flavor_ptr->tmp_val2[0]) {
542 flavor_ptr->t = object_desc_chr(flavor_ptr->t, ' ');
543 flavor_ptr->t = object_desc_chr(flavor_ptr->t, flavor_ptr->c1);
544 if (flavor_ptr->fake_insc_buf[0])
545 flavor_ptr->t = object_desc_str(flavor_ptr->t, flavor_ptr->fake_insc_buf);
547 if (flavor_ptr->fake_insc_buf[0] && flavor_ptr->tmp_val2[0]) {
548 flavor_ptr->t = object_desc_chr(flavor_ptr->t, ',');
549 flavor_ptr->t = object_desc_chr(flavor_ptr->t, ' ');
552 if (flavor_ptr->tmp_val2[0])
553 flavor_ptr->t = object_desc_str(flavor_ptr->t, flavor_ptr->tmp_val2);
555 flavor_ptr->t = object_desc_chr(flavor_ptr->t, flavor_ptr->c2);
558 angband_strcpy(flavor_ptr->buf, flavor_ptr->tmp_val, MAX_NLEN);