OSDN Git Service

[Refactor] #40534 Unified vowel-checker.c/h into english.c/h
[hengbandforosx/hengbandosx.git] / src / flavor / flavor-describer.c
1 /*!
2  * @brief 武器/防具/アクセサリアイテムにおける、耐性やスレイ等の表記
3  * @date 2020/07/06
4  * @author Hourier
5  */
6
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/object-flavor-types.h"
13 #include "game-option/text-display-options.h"
14 #include "grid/trap.h"
15 #include "inventory/inventory-slot-types.h"
16 #include "mind/mind-sniper.h"
17 #include "mind/mind-weaponsmith.h"
18 #include "monster-race/monster-race.h"
19 #include "object-enchant/artifact.h"
20 #include "object-enchant/object-ego.h"
21 #include "object-enchant/special-object-flags.h"
22 #include "object-enchant/tr-types.h"
23 #include "object-enchant/trg-types.h"
24 #include "object-hook/hook-checker.h"
25 #include "object-hook/hook-enchant.h"
26 #include "object-hook/hook-quest.h"
27 #include "object/object-flags.h"
28 #include "object/object-kind.h"
29 #include "perception/object-perception.h"
30 #include "sv-definition/sv-lite-types.h"
31 #include "util/bit-flags-calculator.h"
32 #include "util/quarks.h"
33 #include "util/string-processor.h"
34 #ifdef JP
35 #else
36 #include "locale/english.h"
37 #include "monster-race/race-flags1.h"
38 #include "player/player-class.h"
39 #endif
40
41 /*!
42  * @brief オブジェクトの各表記を返すメイン関数 / Creates a description of the item "o_ptr", and stores it in "out_val".
43  * @param player_ptr プレーヤーへの参照ポインタ
44  * @param buf 表記を返すための文字列参照ポインタ
45  * @param o_ptr 特性短縮表記を得たいオブジェクト構造体の参照ポインタ
46  * @param mode 表記に関するオプション指定
47  * @return 現在クエスト達成目的のアイテムならばTRUEを返す
48  */
49 void describe_flavor(player_type *player_ptr, char *buf, object_type *o_ptr, BIT_FLAGS mode)
50 {
51     flavor_type tmp_flavor;
52     flavor_type *flavor_ptr = initialize_flavor_type(&tmp_flavor, buf, o_ptr, mode);
53     object_flags(player_ptr, flavor_ptr->o_ptr, flavor_ptr->flags);
54     if (object_is_aware(flavor_ptr->o_ptr))
55         flavor_ptr->aware = TRUE;
56
57     if (object_is_known(flavor_ptr->o_ptr))
58         flavor_ptr->known = TRUE;
59
60     if (flavor_ptr->aware && ((flavor_ptr->mode & OD_NO_FLAVOR) || plain_descriptions))
61         flavor_ptr->flavor = FALSE;
62
63     if ((flavor_ptr->mode & OD_STORE) || (flavor_ptr->o_ptr->ident & IDENT_STORE)) {
64         flavor_ptr->flavor = FALSE;
65         flavor_ptr->aware = TRUE;
66         flavor_ptr->known = TRUE;
67     }
68
69     if (flavor_ptr->mode & OD_FORCE_FLAVOR) {
70         flavor_ptr->aware = FALSE;
71         flavor_ptr->flavor = TRUE;
72         flavor_ptr->known = FALSE;
73         flavor_ptr->flavor_k_ptr = flavor_ptr->k_ptr;
74     }
75
76     switch (flavor_ptr->o_ptr->tval) {
77     case TV_SKELETON:
78     case TV_BOTTLE:
79     case TV_JUNK:
80     case TV_SPIKE:
81     case TV_FLASK:
82     case TV_CHEST:
83     case TV_WHISTLE:
84         break;
85     case TV_CAPTURE: {
86         monster_race *r_ptr = &r_info[flavor_ptr->o_ptr->pval];
87         if (flavor_ptr->known) {
88             if (!flavor_ptr->o_ptr->pval) {
89                 flavor_ptr->modstr = _(" (空)", " (empty)");
90             } else {
91 #ifdef JP
92                 sprintf(flavor_ptr->tmp_val2, " (%s)", r_name + r_ptr->name);
93                 flavor_ptr->modstr = flavor_ptr->tmp_val2;
94 #else
95                 flavor_ptr->t = r_name + r_ptr->name;
96
97                 if (!(r_ptr->flags1 & RF1_UNIQUE)) {
98                     sprintf(flavor_ptr->tmp_val2, " (%s%s)", (is_a_vowel(*flavor_ptr->t) ? "an " : "a "), flavor_ptr->t);
99
100                     flavor_ptr->modstr = flavor_ptr->tmp_val2;
101                 } else {
102                     sprintf(flavor_ptr->tmp_val2, "(%s)", flavor_ptr->t);
103
104                     flavor_ptr->modstr = flavor_ptr->t;
105                 }
106 #endif
107             }
108         }
109
110         break;
111     }
112     case TV_FIGURINE:
113     case TV_STATUE: {
114         monster_race *r_ptr = &r_info[flavor_ptr->o_ptr->pval];
115 #ifdef JP
116         flavor_ptr->modstr = r_name + r_ptr->name;
117 #else
118         flavor_ptr->t = r_name + r_ptr->name;
119
120         if (!(r_ptr->flags1 & RF1_UNIQUE)) {
121             sprintf(flavor_ptr->tmp_val2, "%s%s", (is_a_vowel(*flavor_ptr->t) ? "an " : "a "), flavor_ptr->t);
122             flavor_ptr->modstr = flavor_ptr->tmp_val2;
123         } else
124             flavor_ptr->modstr = flavor_ptr->t;
125 #endif
126
127         break;
128     }
129     case TV_CORPSE: {
130         monster_race *r_ptr = &r_info[flavor_ptr->o_ptr->pval];
131         flavor_ptr->modstr = r_name + r_ptr->name;
132 #ifdef JP
133         flavor_ptr->basenm = "#%";
134 #else
135         if (r_ptr->flags1 & RF1_UNIQUE)
136             flavor_ptr->basenm = "& % of #";
137         else
138             flavor_ptr->basenm = "& # %";
139 #endif
140
141         break;
142     }
143     case TV_SHOT:
144     case TV_BOLT:
145     case TV_ARROW:
146     case TV_BOW:
147     case TV_HAFTED:
148     case TV_POLEARM:
149     case TV_SWORD:
150     case TV_DIGGING: {
151         flavor_ptr->show_weapon = TRUE;
152         break;
153     }
154     case TV_BOOTS:
155     case TV_GLOVES:
156     case TV_CLOAK:
157     case TV_CROWN:
158     case TV_HELM:
159     case TV_SHIELD:
160     case TV_SOFT_ARMOR:
161     case TV_HARD_ARMOR:
162     case TV_DRAG_ARMOR: {
163         flavor_ptr->show_armour = TRUE;
164         break;
165     }
166     case TV_LITE:
167         break;
168     case TV_AMULET: {
169         if (flavor_ptr->aware) {
170             if (object_is_fixed_artifact(flavor_ptr->o_ptr))
171                 break;
172             if (flavor_ptr->k_ptr->gen_flags & TRG_INSTA_ART)
173                 break;
174         }
175
176         flavor_ptr->modstr = k_name + flavor_ptr->flavor_k_ptr->flavor_name;
177         if (!flavor_ptr->flavor)
178             flavor_ptr->basenm = _("%のアミュレット", "& Amulet~ of %");
179         else if (flavor_ptr->aware)
180             flavor_ptr->basenm = _("%の#アミュレット", "& # Amulet~ of %");
181         else
182             flavor_ptr->basenm = _("#アミュレット", "& # Amulet~");
183
184         break;
185     }
186     case TV_RING: {
187         if (flavor_ptr->aware) {
188             if (object_is_fixed_artifact(flavor_ptr->o_ptr))
189                 break;
190             if (flavor_ptr->k_ptr->gen_flags & TRG_INSTA_ART)
191                 break;
192         }
193
194         flavor_ptr->modstr = k_name + flavor_ptr->flavor_k_ptr->flavor_name;
195         if (!flavor_ptr->flavor)
196             flavor_ptr->basenm = _("%の指輪", "& Ring~ of %");
197         else if (flavor_ptr->aware)
198             flavor_ptr->basenm = _("%の#指輪", "& # Ring~ of %");
199         else
200             flavor_ptr->basenm = _("#指輪", "& # Ring~");
201
202         if (!flavor_ptr->k_ptr->to_h && !flavor_ptr->k_ptr->to_d && (flavor_ptr->o_ptr->to_h || flavor_ptr->o_ptr->to_d))
203             flavor_ptr->show_weapon = TRUE;
204
205         break;
206     }
207     case TV_CARD:
208         break;
209     case TV_STAFF: {
210         flavor_ptr->modstr = k_name + flavor_ptr->flavor_k_ptr->flavor_name;
211         if (!flavor_ptr->flavor)
212             flavor_ptr->basenm = _("%の杖", "& Staff~ of %");
213         else if (flavor_ptr->aware)
214             flavor_ptr->basenm = _("%の#杖", "& # Staff~ of %");
215         else
216             flavor_ptr->basenm = _("#杖", "& # Staff~");
217
218         break;
219     }
220     case TV_WAND: {
221         flavor_ptr->modstr = k_name + flavor_ptr->flavor_k_ptr->flavor_name;
222         if (!flavor_ptr->flavor)
223             flavor_ptr->basenm = _("%の魔法棒", "& Wand~ of %");
224         else if (flavor_ptr->aware)
225             flavor_ptr->basenm = _("%の#魔法棒", "& # Wand~ of %");
226         else
227             flavor_ptr->basenm = _("#魔法棒", "& # Wand~");
228
229         break;
230     }
231     case TV_ROD: {
232         flavor_ptr->modstr = k_name + flavor_ptr->flavor_k_ptr->flavor_name;
233         if (!flavor_ptr->flavor)
234             flavor_ptr->basenm = _("%のロッド", "& Rod~ of %");
235         else if (flavor_ptr->aware)
236             flavor_ptr->basenm = _("%の#ロッド", "& # Rod~ of %");
237         else
238             flavor_ptr->basenm = _("#ロッド", "& # Rod~");
239
240         break;
241     }
242     case TV_SCROLL: {
243         flavor_ptr->modstr = k_name + flavor_ptr->flavor_k_ptr->flavor_name;
244         if (!flavor_ptr->flavor)
245             flavor_ptr->basenm = _("%の巻物", "& Scroll~ of %");
246         else if (flavor_ptr->aware)
247             flavor_ptr->basenm = _("「#」と書かれた%の巻物", "& Scroll~ titled \"#\" of %");
248         else
249             flavor_ptr->basenm = _("「#」と書かれた巻物", "& Scroll~ titled \"#\"");
250
251         break;
252     }
253     case TV_POTION: {
254         flavor_ptr->modstr = k_name + flavor_ptr->flavor_k_ptr->flavor_name;
255         if (!flavor_ptr->flavor)
256             flavor_ptr->basenm = _("%の薬", "& Potion~ of %");
257         else if (flavor_ptr->aware)
258             flavor_ptr->basenm = _("%の#薬", "& # Potion~ of %");
259         else
260             flavor_ptr->basenm = _("#薬", "& # Potion~");
261
262         break;
263     }
264     case TV_FOOD: {
265         if (!flavor_ptr->k_ptr->flavor_name)
266             break;
267
268         flavor_ptr->modstr = k_name + flavor_ptr->flavor_k_ptr->flavor_name;
269         if (!flavor_ptr->flavor)
270             flavor_ptr->basenm = _("%のキノコ", "& Mushroom~ of %");
271         else if (flavor_ptr->aware)
272             flavor_ptr->basenm = _("%の#キノコ", "& # Mushroom~ of %");
273         else
274             flavor_ptr->basenm = _("#キノコ", "& # Mushroom~");
275
276         break;
277     }
278     case TV_PARCHMENT: {
279         flavor_ptr->basenm = _("羊皮紙 - %", "& Parchment~ - %");
280         break;
281     }
282     case TV_LIFE_BOOK: {
283 #ifdef JP
284         flavor_ptr->basenm = "生命の魔法書%";
285 #else
286         if (mp_ptr->spell_book == TV_LIFE_BOOK)
287             flavor_ptr->basenm = "& Book~ of Life Magic %";
288         else
289             flavor_ptr->basenm = "& Life Spellbook~ %";
290 #endif
291
292         break;
293     }
294     case TV_SORCERY_BOOK: {
295 #ifdef JP
296         flavor_ptr->basenm = "仙術の魔法書%";
297 #else
298         if (mp_ptr->spell_book == TV_LIFE_BOOK)
299             flavor_ptr->basenm = "& Book~ of Sorcery %";
300         else
301             flavor_ptr->basenm = "& Sorcery Spellbook~ %";
302 #endif
303
304         break;
305     }
306     case TV_NATURE_BOOK: {
307 #ifdef JP
308         flavor_ptr->basenm = "自然の魔法書%";
309 #else
310         if (mp_ptr->spell_book == TV_LIFE_BOOK)
311             flavor_ptr->basenm = "& Book~ of Nature Magic %";
312         else
313             flavor_ptr->basenm = "& Nature Spellbook~ %";
314 #endif
315
316         break;
317     }
318     case TV_CHAOS_BOOK: {
319 #ifdef JP
320         flavor_ptr->basenm = "カオスの魔法書%";
321 #else
322         if (mp_ptr->spell_book == TV_LIFE_BOOK)
323             flavor_ptr->basenm = "& Book~ of Chaos Magic %";
324         else
325             flavor_ptr->basenm = "& Chaos Spellbook~ %";
326 #endif
327
328         break;
329     }
330     case TV_DEATH_BOOK: {
331 #ifdef JP
332         flavor_ptr->basenm = "暗黒の魔法書%";
333 #else
334         if (mp_ptr->spell_book == TV_LIFE_BOOK)
335             flavor_ptr->basenm = "& Book~ of Death Magic %";
336         else
337             flavor_ptr->basenm = "& Death Spellbook~ %";
338 #endif
339
340         break;
341     }
342     case TV_TRUMP_BOOK: {
343 #ifdef JP
344         flavor_ptr->basenm = "トランプの魔法書%";
345 #else
346         if (mp_ptr->spell_book == TV_LIFE_BOOK)
347             flavor_ptr->basenm = "& Book~ of Trump Magic %";
348         else
349             flavor_ptr->basenm = "& Trump Spellbook~ %";
350 #endif
351
352         break;
353     }
354     case TV_ARCANE_BOOK: {
355 #ifdef JP
356         flavor_ptr->basenm = "秘術の魔法書%";
357 #else
358         if (mp_ptr->spell_book == TV_LIFE_BOOK)
359             flavor_ptr->basenm = "& Book~ of Arcane Magic %";
360         else
361             flavor_ptr->basenm = "& Arcane Spellbook~ %";
362 #endif
363
364         break;
365     }
366     case TV_CRAFT_BOOK: {
367 #ifdef JP
368         flavor_ptr->basenm = "匠の魔法書%";
369 #else
370         if (mp_ptr->spell_book == TV_LIFE_BOOK)
371             flavor_ptr->basenm = "& Book~ of Craft Magic %";
372         else
373             flavor_ptr->basenm = "& Craft Spellbook~ %";
374 #endif
375
376         break;
377     }
378     case TV_DAEMON_BOOK: {
379 #ifdef JP
380         flavor_ptr->basenm = "悪魔の魔法書%";
381 #else
382         if (mp_ptr->spell_book == TV_LIFE_BOOK)
383             flavor_ptr->basenm = "& Book~ of Daemon Magic %";
384         else
385             flavor_ptr->basenm = "& Daemon Spellbook~ %";
386 #endif
387
388         break;
389     }
390     case TV_CRUSADE_BOOK: {
391 #ifdef JP
392         flavor_ptr->basenm = "破邪の魔法書%";
393 #else
394         if (mp_ptr->spell_book == TV_LIFE_BOOK)
395             flavor_ptr->basenm = "& Book~ of Crusade Magic %";
396         else
397             flavor_ptr->basenm = "& Crusade Spellbook~ %";
398 #endif
399
400         break;
401     }
402     case TV_MUSIC_BOOK: {
403         flavor_ptr->basenm = _("歌集%", "& Song Book~ %");
404         break;
405     }
406     case TV_HISSATSU_BOOK: {
407         flavor_ptr->basenm = _("& 武芸の書%", "Book~ of Kendo %");
408         break;
409     }
410     case TV_HEX_BOOK: {
411 #ifdef JP
412         flavor_ptr->basenm = "呪術の魔法書%";
413 #else
414         if (mp_ptr->spell_book == TV_LIFE_BOOK)
415             flavor_ptr->basenm = "& Book~ of Hex Magic %";
416         else
417             flavor_ptr->basenm = "& Hex Spellbook~ %";
418 #endif
419
420         break;
421     }
422     case TV_GOLD: {
423         strcpy(flavor_ptr->buf, flavor_ptr->basenm);
424         return;
425     }
426     default: {
427         strcpy(flavor_ptr->buf, _("(なし)", "(nothing)"));
428         return;
429     }
430     }
431
432     if (flavor_ptr->aware && have_flag(flavor_ptr->flags, TR_FULL_NAME)) {
433         if (flavor_ptr->known && flavor_ptr->o_ptr->name1)
434             flavor_ptr->basenm = a_name + a_info[flavor_ptr->o_ptr->name1].name;
435         else
436             flavor_ptr->basenm = flavor_ptr->kindname;
437     }
438
439     flavor_ptr->t = flavor_ptr->tmp_val;
440 #ifdef JP
441     if (flavor_ptr->basenm[0] == '&')
442         flavor_ptr->s = flavor_ptr->basenm + 2;
443     else
444         flavor_ptr->s = flavor_ptr->basenm;
445
446     /* No prefix */
447     if (flavor_ptr->mode & OD_OMIT_PREFIX) {
448         /* Nothing */
449     } else if (flavor_ptr->o_ptr->number > 1) {
450         flavor_ptr->t = object_desc_count_japanese(flavor_ptr->t, flavor_ptr->o_ptr);
451         flavor_ptr->t = object_desc_str(flavor_ptr->t, "の ");
452     }
453
454     // 英語の場合アーティファクトは The が付くので分かるが、日本語では分からないのでマークをつける.
455     if (flavor_ptr->known) {
456         if (object_is_fixed_artifact(flavor_ptr->o_ptr))
457             flavor_ptr->t = object_desc_str(flavor_ptr->t, "★");
458         else if (flavor_ptr->o_ptr->art_name)
459             flavor_ptr->t = object_desc_str(flavor_ptr->t, "☆");
460     }
461 #else
462
463     if (flavor_ptr->basenm[0] == '&') {
464         flavor_ptr->s = flavor_ptr->basenm + 2;
465         if (flavor_ptr->mode & OD_OMIT_PREFIX) {
466             /* Nothing */
467         } else if (flavor_ptr->o_ptr->number <= 0)
468             flavor_ptr->t = object_desc_str(flavor_ptr->t, "no more ");
469         else if (flavor_ptr->o_ptr->number > 1) {
470             flavor_ptr->t = object_desc_num(flavor_ptr->t, flavor_ptr->o_ptr->number);
471             flavor_ptr->t = object_desc_chr(flavor_ptr->t, ' ');
472         } else if ((flavor_ptr->known && object_is_artifact(flavor_ptr->o_ptr)) || ((flavor_ptr->o_ptr->tval == TV_CORPSE) && (r_info[flavor_ptr->o_ptr->pval].flags1 & RF1_UNIQUE)))
473             flavor_ptr->t = object_desc_str(flavor_ptr->t, "The ");
474         else {
475             bool vowel;
476             switch (*flavor_ptr->s) {
477             case '#':
478                 vowel = is_a_vowel(flavor_ptr->modstr[0]);
479                 break;
480             case '%':
481                 vowel = is_a_vowel(*flavor_ptr->kindname);
482                 break;
483             default:
484                 vowel = is_a_vowel(*flavor_ptr->s);
485                 break;
486             }
487
488             if (vowel)
489                 flavor_ptr->t = object_desc_str(flavor_ptr->t, "an ");
490             else
491                 flavor_ptr->t = object_desc_str(flavor_ptr->t, "a ");
492         }
493     } else {
494         flavor_ptr->s = flavor_ptr->basenm;
495         if (flavor_ptr->mode & OD_OMIT_PREFIX) {
496             /* Nothing */
497         } else if (flavor_ptr->o_ptr->number <= 0)
498             flavor_ptr->t = object_desc_str(flavor_ptr->t, "no more ");
499         else if (flavor_ptr->o_ptr->number > 1) {
500             flavor_ptr->t = object_desc_num(flavor_ptr->t, flavor_ptr->o_ptr->number);
501             flavor_ptr->t = object_desc_chr(flavor_ptr->t, ' ');
502         } else if (flavor_ptr->known && object_is_artifact(flavor_ptr->o_ptr))
503             flavor_ptr->t = object_desc_str(flavor_ptr->t, "The ");
504     }
505 #endif
506
507 #ifdef JP
508     if (object_is_smith(player_ptr, flavor_ptr->o_ptr))
509         flavor_ptr->t = object_desc_str(flavor_ptr->t, format("鍛冶師%flavor_ptr->sの", player_ptr->name));
510
511     /* 伝説のアイテム、名のあるアイテムの名前を付加する */
512     if (flavor_ptr->known) {
513         /* ランダム・アーティファクト */
514         if (flavor_ptr->o_ptr->art_name) {
515             concptr temp = quark_str(flavor_ptr->o_ptr->art_name);
516
517             /* '『' から始まらない伝説のアイテムの名前は最初に付加する */
518             /* 英語版のセーブファイルから来た 'of XXX' は,「XXXの」と表示する */
519             if (strncmp(temp, "of ", 3) == 0) {
520                 flavor_ptr->t = object_desc_str(flavor_ptr->t, &temp[3]);
521                 flavor_ptr->t = object_desc_str(flavor_ptr->t, "の");
522             } else if ((strncmp(temp, "『", 2) != 0) && (strncmp(temp, "《", 2) != 0) && (temp[0] != '\''))
523                 flavor_ptr->t = object_desc_str(flavor_ptr->t, temp);
524         }
525         /* 伝説のアイテム */
526         else if (flavor_ptr->o_ptr->name1 && !have_flag(flavor_ptr->flags, TR_FULL_NAME)) {
527             artifact_type *a_ptr = &a_info[flavor_ptr->o_ptr->name1];
528             /* '『' から始まらない伝説のアイテムの名前は最初に付加する */
529             if (strncmp(a_name + a_ptr->name, "『", 2) != 0) {
530                 flavor_ptr->t = object_desc_str(flavor_ptr->t, a_name + a_ptr->name);
531             }
532         }
533         /* 名のあるアイテム */
534         else if (object_is_ego(flavor_ptr->o_ptr)) {
535             ego_item_type *e_ptr = &e_info[flavor_ptr->o_ptr->name2];
536             flavor_ptr->t = object_desc_str(flavor_ptr->t, e_name + e_ptr->name);
537         }
538     }
539 #endif
540
541     for (flavor_ptr->s0 = NULL; *flavor_ptr->s || flavor_ptr->s0;) {
542         if (!*flavor_ptr->s) {
543             flavor_ptr->s = flavor_ptr->s0 + 1;
544             flavor_ptr->s0 = NULL;
545         } else if ((*flavor_ptr->s == '#') && !flavor_ptr->s0) {
546             flavor_ptr->s0 = flavor_ptr->s;
547             flavor_ptr->s = flavor_ptr->modstr;
548             flavor_ptr->modstr = "";
549         } else if ((*flavor_ptr->s == '%') && !flavor_ptr->s0) {
550             flavor_ptr->s0 = flavor_ptr->s;
551             flavor_ptr->s = flavor_ptr->kindname;
552             flavor_ptr->kindname = "";
553         }
554
555 #ifdef JP
556 #else
557         else if (*flavor_ptr->s == '~') {
558             if (!(flavor_ptr->mode & OD_NO_PLURAL) && (flavor_ptr->o_ptr->number != 1)) {
559                 char k = flavor_ptr->t[-1];
560                 if ((k == 's') || (k == 'h'))
561                     *flavor_ptr->t++ = 'e';
562
563                 *flavor_ptr->t++ = 's';
564             }
565
566             flavor_ptr->s++;
567         }
568 #endif
569         else
570             *flavor_ptr->t++ = *flavor_ptr->s++;
571     }
572
573     *flavor_ptr->t = '\0';
574
575 #ifdef JP
576     /* '『'から始まる伝説のアイテムの名前は最後に付加する */
577     if (flavor_ptr->known) {
578         // ランダムアーティファクトの名前はセーブファイルに記録されるので、英語版の名前もそれらしく変換する.
579         if (flavor_ptr->o_ptr->art_name) {
580             char temp[256];
581             int itemp;
582             strcpy(temp, quark_str(flavor_ptr->o_ptr->art_name));
583             if (strncmp(temp, "『", 2) == 0 || strncmp(temp, "《", 2) == 0)
584                 flavor_ptr->t = object_desc_str(flavor_ptr->t, temp);
585             else if (temp[0] == '\'') {
586                 itemp = strlen(temp);
587                 temp[itemp - 1] = 0;
588                 flavor_ptr->t = object_desc_str(flavor_ptr->t, "『");
589                 flavor_ptr->t = object_desc_str(flavor_ptr->t, &temp[1]);
590                 flavor_ptr->t = object_desc_str(flavor_ptr->t, "』");
591             }
592         } else if (object_is_fixed_artifact(flavor_ptr->o_ptr)) {
593             artifact_type *a_ptr = &a_info[flavor_ptr->o_ptr->name1];
594             if (strncmp(a_name + a_ptr->name, "『", 2) == 0)
595                 flavor_ptr->t = object_desc_str(flavor_ptr->t, a_name + a_ptr->name);
596         } else if (flavor_ptr->o_ptr->inscription) {
597             concptr str = quark_str(flavor_ptr->o_ptr->inscription);
598             while (*str) {
599                 if (iskanji(*str)) {
600                     str += 2;
601                     continue;
602                 }
603
604                 if (*str == '#')
605                     break;
606
607                 str++;
608             }
609
610             if (*str) {
611                 concptr str_aux = angband_strchr(quark_str(flavor_ptr->o_ptr->inscription), '#');
612                 flavor_ptr->t = object_desc_str(flavor_ptr->t, "『");
613                 flavor_ptr->t = object_desc_str(flavor_ptr->t, &str_aux[1]);
614                 flavor_ptr->t = object_desc_str(flavor_ptr->t, "』");
615             }
616         }
617     }
618 #else
619     if (object_is_smith(player_ptr, flavor_ptr->o_ptr))
620         flavor_ptr->t = object_desc_str(flavor_ptr->t, format(" of %s the Smith", player_ptr->name));
621
622     if (flavor_ptr->known && !have_flag(flavor_ptr->flags, TR_FULL_NAME)) {
623         if (flavor_ptr->o_ptr->art_name) {
624             flavor_ptr->t = object_desc_chr(flavor_ptr->t, ' ');
625             flavor_ptr->t = object_desc_str(flavor_ptr->t, quark_str(flavor_ptr->o_ptr->art_name));
626         } else if (object_is_fixed_artifact(flavor_ptr->o_ptr)) {
627             artifact_type *a_ptr = &a_info[flavor_ptr->o_ptr->name1];
628
629             flavor_ptr->t = object_desc_chr(flavor_ptr->t, ' ');
630             flavor_ptr->t = object_desc_str(flavor_ptr->t, a_name + a_ptr->name);
631         } else {
632             if (object_is_ego(flavor_ptr->o_ptr)) {
633                 ego_item_type *e_ptr = &e_info[flavor_ptr->o_ptr->name2];
634                 flavor_ptr->t = object_desc_chr(flavor_ptr->t, ' ');
635                 flavor_ptr->t = object_desc_str(flavor_ptr->t, e_name + e_ptr->name);
636             }
637
638             if (flavor_ptr->o_ptr->inscription && angband_strchr(quark_str(flavor_ptr->o_ptr->inscription), '#')) {
639                 concptr str = angband_strchr(quark_str(flavor_ptr->o_ptr->inscription), '#');
640                 flavor_ptr->t = object_desc_chr(flavor_ptr->t, ' ');
641                 flavor_ptr->t = object_desc_str(flavor_ptr->t, &str[1]);
642             }
643         }
644     }
645 #endif
646
647     if (flavor_ptr->mode & OD_NAME_ONLY) {
648         angband_strcpy(flavor_ptr->buf, flavor_ptr->tmp_val, MAX_NLEN);
649         return;
650     }
651
652     if (flavor_ptr->o_ptr->tval == TV_CHEST) {
653         if (!flavor_ptr->known) {
654             /* Nothing */
655         } else if (!flavor_ptr->o_ptr->pval)
656             flavor_ptr->t = object_desc_str(flavor_ptr->t, _("(空)", " (empty)"));
657         else if (flavor_ptr->o_ptr->pval < 0)
658             if (chest_traps[0 - flavor_ptr->o_ptr->pval])
659                 flavor_ptr->t = object_desc_str(flavor_ptr->t, _("(解除済)", " (disarmed)"));
660             else
661                 flavor_ptr->t = object_desc_str(flavor_ptr->t, _("(非施錠)", " (unlocked)"));
662         else {
663             switch (chest_traps[flavor_ptr->o_ptr->pval]) {
664             case 0: {
665                 flavor_ptr->t = object_desc_str(flavor_ptr->t, _("(施錠)", " (Locked)"));
666                 break;
667             }
668             case CHEST_LOSE_STR: {
669                 flavor_ptr->t = object_desc_str(flavor_ptr->t, _("(毒針)", " (Poison Needle)"));
670                 break;
671             }
672             case CHEST_LOSE_CON: {
673                 flavor_ptr->t = object_desc_str(flavor_ptr->t, _("(毒針)", " (Poison Needle)"));
674                 break;
675             }
676             case CHEST_POISON: {
677                 flavor_ptr->t = object_desc_str(flavor_ptr->t, _("(ガス・トラップ)", " (Gas Trap)"));
678                 break;
679             }
680             case CHEST_PARALYZE: {
681                 flavor_ptr->t = object_desc_str(flavor_ptr->t, _("(ガス・トラップ)", " (Gas Trap)"));
682                 break;
683             }
684             case CHEST_EXPLODE: {
685                 flavor_ptr->t = object_desc_str(flavor_ptr->t, _("(爆発装置)", " (Explosion Device)"));
686                 break;
687             }
688             case CHEST_SUMMON:
689             case CHEST_BIRD_STORM:
690             case CHEST_E_SUMMON:
691             case CHEST_H_SUMMON: {
692                 flavor_ptr->t = object_desc_str(flavor_ptr->t, _("(召喚のルーン)", " (Summoning Runes)"));
693                 break;
694             }
695             case CHEST_RUNES_OF_EVIL: {
696                 flavor_ptr->t = object_desc_str(flavor_ptr->t, _("(邪悪なルーン)", " (Gleaming Black Runes)"));
697                 break;
698             }
699             case CHEST_ALARM: {
700                 flavor_ptr->t = object_desc_str(flavor_ptr->t, _("(警報装置)", " (Alarm)"));
701                 break;
702             }
703             default: {
704                 flavor_ptr->t = object_desc_str(flavor_ptr->t, _("(マルチ・トラップ)", " (Multiple Traps)"));
705                 break;
706             }
707             }
708         }
709     }
710
711     if (have_flag(flavor_ptr->flags, TR_SHOW_MODS))
712         flavor_ptr->show_weapon = TRUE;
713
714     if (object_is_smith(player_ptr, flavor_ptr->o_ptr) && (flavor_ptr->o_ptr->xtra3 == 1 + ESSENCE_SLAY_GLOVE))
715         flavor_ptr->show_weapon = TRUE;
716
717     if (flavor_ptr->o_ptr->to_h && flavor_ptr->o_ptr->to_d)
718         flavor_ptr->show_weapon = TRUE;
719
720     if (flavor_ptr->o_ptr->ac)
721         flavor_ptr->show_armour = TRUE;
722
723     switch (flavor_ptr->o_ptr->tval) {
724     case TV_SHOT:
725     case TV_BOLT:
726     case TV_ARROW:
727     case TV_HAFTED:
728     case TV_POLEARM:
729     case TV_SWORD:
730     case TV_DIGGING: {
731         if (object_is_quest_target(player_ptr, flavor_ptr->o_ptr) && !flavor_ptr->known)
732             break;
733
734         flavor_ptr->t = object_desc_chr(flavor_ptr->t, ' ');
735         flavor_ptr->t = object_desc_chr(flavor_ptr->t, flavor_ptr->p1);
736         flavor_ptr->t = object_desc_num(flavor_ptr->t, flavor_ptr->o_ptr->dd);
737         flavor_ptr->t = object_desc_chr(flavor_ptr->t, 'd');
738         flavor_ptr->t = object_desc_num(flavor_ptr->t, flavor_ptr->o_ptr->ds);
739         flavor_ptr->t = object_desc_chr(flavor_ptr->t, flavor_ptr->p2);
740         break;
741     }
742     case TV_BOW: {
743         flavor_ptr->power = bow_tmul(flavor_ptr->o_ptr->sval);
744         if (have_flag(flavor_ptr->flags, TR_XTRA_MIGHT))
745             flavor_ptr->power++;
746
747         flavor_ptr->t = object_desc_chr(flavor_ptr->t, ' ');
748         flavor_ptr->t = object_desc_chr(flavor_ptr->t, flavor_ptr->p1);
749         flavor_ptr->t = object_desc_chr(flavor_ptr->t, 'x');
750         flavor_ptr->t = object_desc_num(flavor_ptr->t, flavor_ptr->power);
751         flavor_ptr->t = object_desc_chr(flavor_ptr->t, flavor_ptr->p2);
752         flavor_ptr->fire_rate = calc_num_fire(player_ptr, flavor_ptr->o_ptr);
753         if (flavor_ptr->fire_rate != 0 && flavor_ptr->power > 0 && flavor_ptr->known) {
754             flavor_ptr->fire_rate = bow_energy(flavor_ptr->o_ptr->sval) / flavor_ptr->fire_rate;
755             flavor_ptr->t = object_desc_chr(flavor_ptr->t, ' ');
756             flavor_ptr->t = object_desc_chr(flavor_ptr->t, flavor_ptr->p1);
757             flavor_ptr->t = object_desc_num(flavor_ptr->t, flavor_ptr->fire_rate / 100);
758             flavor_ptr->t = object_desc_chr(flavor_ptr->t, '.');
759             flavor_ptr->t = object_desc_num(flavor_ptr->t, flavor_ptr->fire_rate % 100);
760             flavor_ptr->t = object_desc_str(flavor_ptr->t, "turn");
761             flavor_ptr->t = object_desc_chr(flavor_ptr->t, flavor_ptr->p2);
762         }
763
764         break;
765     }
766     }
767
768     if (flavor_ptr->known) {
769         if (flavor_ptr->show_weapon) {
770             flavor_ptr->t = object_desc_chr(flavor_ptr->t, ' ');
771             flavor_ptr->t = object_desc_chr(flavor_ptr->t, flavor_ptr->p1);
772             flavor_ptr->t = object_desc_int(flavor_ptr->t, flavor_ptr->o_ptr->to_h);
773             flavor_ptr->t = object_desc_chr(flavor_ptr->t, ',');
774             flavor_ptr->t = object_desc_int(flavor_ptr->t, flavor_ptr->o_ptr->to_d);
775             flavor_ptr->t = object_desc_chr(flavor_ptr->t, flavor_ptr->p2);
776         } else if (flavor_ptr->o_ptr->to_h) {
777             flavor_ptr->t = object_desc_chr(flavor_ptr->t, ' ');
778             flavor_ptr->t = object_desc_chr(flavor_ptr->t, flavor_ptr->p1);
779             flavor_ptr->t = object_desc_int(flavor_ptr->t, flavor_ptr->o_ptr->to_h);
780             flavor_ptr->t = object_desc_chr(flavor_ptr->t, flavor_ptr->p2);
781         } else if (flavor_ptr->o_ptr->to_d) {
782             flavor_ptr->t = object_desc_chr(flavor_ptr->t, ' ');
783             flavor_ptr->t = object_desc_chr(flavor_ptr->t, flavor_ptr->p1);
784             flavor_ptr->t = object_desc_int(flavor_ptr->t, flavor_ptr->o_ptr->to_d);
785             flavor_ptr->t = object_desc_chr(flavor_ptr->t, flavor_ptr->p2);
786         }
787     }
788
789     flavor_ptr->bow_ptr = &player_ptr->inventory_list[INVEN_BOW];
790     if (flavor_ptr->bow_ptr->k_idx && (flavor_ptr->o_ptr->tval == player_ptr->tval_ammo)) {
791         int avgdam = flavor_ptr->o_ptr->dd * (flavor_ptr->o_ptr->ds + 1) * 10 / 2;
792         int tmul = bow_tmul(flavor_ptr->bow_ptr->sval);
793         ENERGY energy_fire = bow_energy(flavor_ptr->bow_ptr->sval);
794         if (object_is_known(flavor_ptr->bow_ptr))
795             avgdam += (flavor_ptr->bow_ptr->to_d * 10);
796
797         if (flavor_ptr->known)
798             avgdam += (flavor_ptr->o_ptr->to_d * 10);
799
800         if (player_ptr->xtra_might)
801             tmul++;
802
803         tmul = tmul * (100 + (int)(adj_str_td[player_ptr->stat_ind[A_STR]]) - 128);
804         avgdam *= tmul;
805         avgdam /= (100 * 10);
806         if (player_ptr->concent)
807             avgdam = boost_concentration_damage(player_ptr, avgdam);
808
809         if (avgdam < 0)
810             avgdam = 0;
811
812         flavor_ptr->t = object_desc_chr(flavor_ptr->t, ' ');
813         flavor_ptr->t = object_desc_chr(flavor_ptr->t, flavor_ptr->p1);
814         if (show_ammo_no_crit) {
815             flavor_ptr->t = object_desc_num(flavor_ptr->t, avgdam);
816             flavor_ptr->t = object_desc_str(flavor_ptr->t, show_ammo_detail ? "/shot " : "/");
817         }
818
819         avgdam = calc_expect_crit_shot(player_ptr, flavor_ptr->o_ptr->weight, flavor_ptr->o_ptr->to_h, flavor_ptr->bow_ptr->to_h, avgdam);
820         flavor_ptr->t = object_desc_num(flavor_ptr->t, avgdam);
821         flavor_ptr->t = show_ammo_no_crit ? object_desc_str(flavor_ptr->t, show_ammo_detail ? "/crit " : "/") : object_desc_str(flavor_ptr->t, show_ammo_detail ? "/shot " : "/");
822         if (player_ptr->num_fire == 0)
823             flavor_ptr->t = object_desc_chr(flavor_ptr->t, '0');
824         else {
825             avgdam *= (player_ptr->num_fire * 100);
826             avgdam /= energy_fire;
827             flavor_ptr->t = object_desc_num(flavor_ptr->t, avgdam);
828             flavor_ptr->t = object_desc_str(flavor_ptr->t, show_ammo_detail ? "/turn" : "");
829             if (show_ammo_crit_ratio) {
830                 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);
831                 flavor_ptr->t = object_desc_chr(flavor_ptr->t, '/');
832                 flavor_ptr->t = object_desc_num(flavor_ptr->t, percent / 100);
833                 flavor_ptr->t = object_desc_chr(flavor_ptr->t, '.');
834                 if (percent % 100 < 10)
835                     flavor_ptr->t = object_desc_chr(flavor_ptr->t, '0');
836
837                 flavor_ptr->t = object_desc_num(flavor_ptr->t, percent % 100);
838                 flavor_ptr->t = object_desc_str(flavor_ptr->t, show_ammo_detail ? "% crit" : "%");
839             }
840         }
841
842         flavor_ptr->t = object_desc_chr(flavor_ptr->t, flavor_ptr->p2);
843     } else if ((player_ptr->pclass == CLASS_NINJA) && (flavor_ptr->o_ptr->tval == TV_SPIKE)) {
844         int avgdam = player_ptr->mighty_throw ? (1 + 3) : 1;
845         s16b energy_fire = 100 - player_ptr->lev;
846         avgdam += ((player_ptr->lev + 30) * (player_ptr->lev + 30) - 900) / 55;
847         flavor_ptr->t = object_desc_chr(flavor_ptr->t, ' ');
848         flavor_ptr->t = object_desc_chr(flavor_ptr->t, flavor_ptr->p1);
849         flavor_ptr->t = object_desc_num(flavor_ptr->t, avgdam);
850         flavor_ptr->t = object_desc_chr(flavor_ptr->t, '/');
851         avgdam = 100 * avgdam / energy_fire;
852         flavor_ptr->t = object_desc_num(flavor_ptr->t, avgdam);
853         flavor_ptr->t = object_desc_chr(flavor_ptr->t, flavor_ptr->p2);
854     }
855
856     if (flavor_ptr->known) {
857         if (flavor_ptr->show_armour) {
858             flavor_ptr->t = object_desc_chr(flavor_ptr->t, ' ');
859             flavor_ptr->t = object_desc_chr(flavor_ptr->t, flavor_ptr->b1);
860             flavor_ptr->t = object_desc_num(flavor_ptr->t, flavor_ptr->o_ptr->ac);
861             flavor_ptr->t = object_desc_chr(flavor_ptr->t, ',');
862             flavor_ptr->t = object_desc_int(flavor_ptr->t, flavor_ptr->o_ptr->to_a);
863             flavor_ptr->t = object_desc_chr(flavor_ptr->t, flavor_ptr->b2);
864         } else if (flavor_ptr->o_ptr->to_a) {
865             flavor_ptr->t = object_desc_chr(flavor_ptr->t, ' ');
866             flavor_ptr->t = object_desc_chr(flavor_ptr->t, flavor_ptr->b1);
867             flavor_ptr->t = object_desc_int(flavor_ptr->t, flavor_ptr->o_ptr->to_a);
868             flavor_ptr->t = object_desc_chr(flavor_ptr->t, flavor_ptr->b2);
869         }
870     } else if (flavor_ptr->show_armour) {
871         flavor_ptr->t = object_desc_chr(flavor_ptr->t, ' ');
872         flavor_ptr->t = object_desc_chr(flavor_ptr->t, flavor_ptr->b1);
873         flavor_ptr->t = object_desc_num(flavor_ptr->t, flavor_ptr->o_ptr->ac);
874         flavor_ptr->t = object_desc_chr(flavor_ptr->t, flavor_ptr->b2);
875     }
876
877     if (flavor_ptr->mode & OD_NAME_AND_ENCHANT) {
878         angband_strcpy(flavor_ptr->buf, flavor_ptr->tmp_val, MAX_NLEN);
879         return;
880     }
881
882     if (flavor_ptr->known) {
883         if (((flavor_ptr->o_ptr->tval == TV_STAFF) || (flavor_ptr->o_ptr->tval == TV_WAND))) {
884             flavor_ptr->t = object_desc_chr(flavor_ptr->t, ' ');
885             flavor_ptr->t = object_desc_chr(flavor_ptr->t, flavor_ptr->p1);
886             if ((flavor_ptr->o_ptr->tval == TV_STAFF) && (flavor_ptr->o_ptr->number > 1)) {
887                 flavor_ptr->t = object_desc_num(flavor_ptr->t, flavor_ptr->o_ptr->number);
888                 flavor_ptr->t = object_desc_str(flavor_ptr->t, "x ");
889             }
890
891             flavor_ptr->t = object_desc_num(flavor_ptr->t, flavor_ptr->o_ptr->pval);
892             flavor_ptr->t = object_desc_str(flavor_ptr->t, _("回分", " charge"));
893 #ifdef JP
894 #else
895             if (flavor_ptr->o_ptr->pval != 1)
896                 flavor_ptr->t = object_desc_chr(flavor_ptr->t, 's');
897 #endif
898
899             flavor_ptr->t = object_desc_chr(flavor_ptr->t, flavor_ptr->p2);
900         } else if (flavor_ptr->o_ptr->tval == TV_ROD) {
901             if (flavor_ptr->o_ptr->timeout) {
902                 if (flavor_ptr->o_ptr->number > 1) {
903                     if (flavor_ptr->k_ptr->pval == 0)
904                         flavor_ptr->k_ptr->pval = 1;
905
906                     flavor_ptr->power = (flavor_ptr->o_ptr->timeout + (flavor_ptr->k_ptr->pval - 1)) / flavor_ptr->k_ptr->pval;
907                     if (flavor_ptr->power > flavor_ptr->o_ptr->number)
908                         flavor_ptr->power = flavor_ptr->o_ptr->number;
909
910                     flavor_ptr->t = object_desc_str(flavor_ptr->t, " (");
911                     flavor_ptr->t = object_desc_num(flavor_ptr->t, flavor_ptr->power);
912                     flavor_ptr->t = object_desc_str(flavor_ptr->t, _("本 充填中)", " charging)"));
913                 } else
914                     flavor_ptr->t = object_desc_str(flavor_ptr->t, _("(充填中)", " (charging)"));
915             }
916         }
917
918         if (have_pval_flags(flavor_ptr->flags)) {
919             flavor_ptr->t = object_desc_chr(flavor_ptr->t, ' ');
920             flavor_ptr->t = object_desc_chr(flavor_ptr->t, flavor_ptr->p1);
921             flavor_ptr->t = object_desc_int(flavor_ptr->t, flavor_ptr->o_ptr->pval);
922             if (have_flag(flavor_ptr->flags, TR_HIDE_TYPE)) {
923                 /* Nothing */
924             } else if (have_flag(flavor_ptr->flags, TR_SPEED))
925                 flavor_ptr->t = object_desc_str(flavor_ptr->t, _("加速", " to speed"));
926             else if (have_flag(flavor_ptr->flags, TR_BLOWS)) {
927                 flavor_ptr->t = object_desc_str(flavor_ptr->t, _("攻撃", " attack"));
928 #ifdef JP
929 #else
930                 if (ABS(flavor_ptr->o_ptr->pval) != 1)
931                     flavor_ptr->t = object_desc_chr(flavor_ptr->t, 's');
932 #endif
933             } else if (have_flag(flavor_ptr->flags, TR_STEALTH))
934                 flavor_ptr->t = object_desc_str(flavor_ptr->t, _("隠密", " to stealth"));
935             else if (have_flag(flavor_ptr->flags, TR_SEARCH))
936                 flavor_ptr->t = object_desc_str(flavor_ptr->t, _("探索", " to searching"));
937             else if (have_flag(flavor_ptr->flags, TR_INFRA))
938                 flavor_ptr->t = object_desc_str(flavor_ptr->t, _("赤外線視力", " to infravision"));
939
940             flavor_ptr->t = object_desc_chr(flavor_ptr->t, flavor_ptr->p2);
941         }
942
943         if ((flavor_ptr->o_ptr->tval == TV_LITE) && (!(object_is_fixed_artifact(flavor_ptr->o_ptr) || (flavor_ptr->o_ptr->sval == SV_LITE_FEANOR)))) {
944             flavor_ptr->t = object_desc_str(flavor_ptr->t, _("(", " (with "));
945             if (flavor_ptr->o_ptr->name2 == EGO_LITE_LONG)
946                 flavor_ptr->t = object_desc_num(flavor_ptr->t, flavor_ptr->o_ptr->xtra4 * 2);
947             else
948                 flavor_ptr->t = object_desc_num(flavor_ptr->t, flavor_ptr->o_ptr->xtra4);
949
950             flavor_ptr->t = object_desc_str(flavor_ptr->t, _("ターンの寿命)", " turns of light)"));
951         }
952
953         if (flavor_ptr->o_ptr->timeout && (flavor_ptr->o_ptr->tval != TV_ROD))
954             flavor_ptr->t = object_desc_str(flavor_ptr->t, _("(充填中)", " (charging)"));
955     }
956
957     if (flavor_ptr->mode & OD_OMIT_INSCRIPTION) {
958         angband_strcpy(flavor_ptr->buf, flavor_ptr->tmp_val, MAX_NLEN);
959         return;
960     }
961
962     flavor_ptr->tmp_val2[0] = '\0';
963     if ((abbrev_extra || abbrev_all) && object_is_fully_known(flavor_ptr->o_ptr)) {
964         if (!flavor_ptr->o_ptr->inscription || !angband_strchr(quark_str(flavor_ptr->o_ptr->inscription), '%')) {
965             bool kanji, all;
966             kanji = _(TRUE, FALSE);
967             all = abbrev_all;
968             get_ability_abbreviation(player_ptr, flavor_ptr->tmp_val2, flavor_ptr->o_ptr, kanji, all);
969         }
970     }
971
972     if (flavor_ptr->o_ptr->inscription) {
973         char buff[1024];
974         if (flavor_ptr->tmp_val2[0])
975             strcat(flavor_ptr->tmp_val2, ", ");
976
977         get_inscription(player_ptr, buff, flavor_ptr->o_ptr);
978         angband_strcat(flavor_ptr->tmp_val2, buff, sizeof(flavor_ptr->tmp_val2));
979     }
980
981     flavor_ptr->fake_insc_buf[0] = '\0';
982     if (flavor_ptr->o_ptr->feeling)
983         strcpy(flavor_ptr->fake_insc_buf, game_inscriptions[flavor_ptr->o_ptr->feeling]);
984     else if (object_is_cursed(flavor_ptr->o_ptr) && (flavor_ptr->known || (flavor_ptr->o_ptr->ident & IDENT_SENSE)))
985         strcpy(flavor_ptr->fake_insc_buf, _("呪われている", "cursed"));
986     else if (((flavor_ptr->o_ptr->tval == TV_RING) || (flavor_ptr->o_ptr->tval == TV_AMULET) || (flavor_ptr->o_ptr->tval == TV_LITE) || (flavor_ptr->o_ptr->tval == TV_FIGURINE)) && flavor_ptr->aware && !flavor_ptr->known
987         && !(flavor_ptr->o_ptr->ident & IDENT_SENSE))
988         strcpy(flavor_ptr->fake_insc_buf, _("未鑑定", "unidentified"));
989     else if (!flavor_ptr->known && (flavor_ptr->o_ptr->ident & IDENT_EMPTY))
990         strcpy(flavor_ptr->fake_insc_buf, _("空", "empty"));
991     else if (!flavor_ptr->aware && object_is_tried(flavor_ptr->o_ptr))
992         strcpy(flavor_ptr->fake_insc_buf, _("未判明", "tried"));
993
994     if (flavor_ptr->o_ptr->discount) {
995         if (!flavor_ptr->tmp_val2[0] || (flavor_ptr->o_ptr->ident & IDENT_STORE)) {
996             char discount_num_buf[4];
997             if (flavor_ptr->fake_insc_buf[0])
998                 strcat(flavor_ptr->fake_insc_buf, ", ");
999
1000             (void)object_desc_num(discount_num_buf, flavor_ptr->o_ptr->discount);
1001             strcat(flavor_ptr->fake_insc_buf, discount_num_buf);
1002             strcat(flavor_ptr->fake_insc_buf, _("%引き", "% off"));
1003         }
1004     }
1005
1006     if (flavor_ptr->fake_insc_buf[0] || flavor_ptr->tmp_val2[0]) {
1007         flavor_ptr->t = object_desc_chr(flavor_ptr->t, ' ');
1008         flavor_ptr->t = object_desc_chr(flavor_ptr->t, flavor_ptr->c1);
1009         if (flavor_ptr->fake_insc_buf[0])
1010             flavor_ptr->t = object_desc_str(flavor_ptr->t, flavor_ptr->fake_insc_buf);
1011
1012         if (flavor_ptr->fake_insc_buf[0] && flavor_ptr->tmp_val2[0]) {
1013             flavor_ptr->t = object_desc_chr(flavor_ptr->t, ',');
1014             flavor_ptr->t = object_desc_chr(flavor_ptr->t, ' ');
1015         }
1016
1017         if (flavor_ptr->tmp_val2[0])
1018             flavor_ptr->t = object_desc_str(flavor_ptr->t, flavor_ptr->tmp_val2);
1019
1020         flavor_ptr->t = object_desc_chr(flavor_ptr->t, flavor_ptr->c2);
1021     }
1022
1023     angband_strcpy(flavor_ptr->buf, flavor_ptr->tmp_val, MAX_NLEN);
1024 }