OSDN Git Service

[Refactor] #40399 Separated identification.c/h from object1.c/h
[hengband/hengband.git] / src / perception / identification.c
1 #include "perception/identification.h"
2 #include "object-enchant/artifact.h"
3 #include "object-enchant/object-ego.h"
4 #include "object-enchant/tr-types.h"
5 #include "object-enchant/trc-types.h"
6 #include "object/object-flavor.h"
7 #include "object/object-hook.h"
8 #include "object/object-kind.h"
9 #include "object/object1.h"
10 #include "sv-definition/sv-amulet-types.h"
11 #include "sv-definition/sv-other-types.h"
12 #include "sv-definition/sv-ring-types.h"
13 #include "sv-definition/sv-weapon-types.h"
14
15 /*!
16  * @brief オブジェクトの*鑑定*内容を詳述して表示する /
17  * Describe a "fully identified" item
18  * @param player_ptr プレーヤーへの参照ポインタ
19  * @param o_ptr *鑑定*情報を取得する元のオブジェクト構造体参照ポインタ
20  * @param mode 表示オプション
21  * @return 特筆すべき情報が一つでもあった場合TRUE、一つもなく表示がキャンセルされた場合FALSEを返す。
22  */
23 bool screen_object(player_type *player_ptr, object_type *o_ptr, BIT_FLAGS mode)
24 {
25     BIT_FLAGS flgs[TR_FLAG_SIZE];
26     char temp[70 * 20];
27     concptr info[128];
28     GAME_TEXT o_name[MAX_NLEN];
29     char desc[256];
30
31     int trivial_info = 0;
32     object_flags(o_ptr, flgs);
33
34     roff_to_buf(o_ptr->name1 ? (a_text + a_info[o_ptr->name1].text) : (k_text + k_info[o_ptr->k_idx].text), 77 - 15, temp, sizeof(temp));
35
36     int i = 0;
37     for (int j = 0; temp[j]; j += 1 + strlen(&temp[j])) {
38         info[i] = &temp[j];
39         i++;
40     }
41
42     if (object_is_equipment(o_ptr)) {
43         trivial_info = i;
44     }
45
46     if (have_flag(flgs, TR_ACTIVATE)) {
47         info[i++] = _("始動したときの効果...", "It can be activated for...");
48         info[i++] = item_activation(o_ptr);
49         info[i++] = _("...ただし装備していなければならない。", "...if it is being worn.");
50     }
51
52     if (o_ptr->tval == TV_FIGURINE) {
53         info[i++] = _("それは投げた時ペットに変化する。", "It will transform into a pet when thrown.");
54     }
55
56     if (o_ptr->name1 == ART_STONEMASK) {
57         info[i++] = _("それを装備した者は吸血鬼になる。", "It makes you turn into a vampire permanently.");
58     }
59
60     if ((o_ptr->tval == TV_SWORD) && (o_ptr->sval == SV_POISON_NEEDLE)) {
61         info[i++] = _("それは相手を一撃で倒すことがある。", "It will attempt to kill a monster instantly.");
62     }
63
64     if ((o_ptr->tval == TV_POLEARM) && (o_ptr->sval == SV_DEATH_SCYTHE)) {
65         info[i++] = _("それは自分自身に攻撃が返ってくることがある。", "It causes you to strike yourself sometimes.");
66         info[i++] = _("それは無敵のバリアを切り裂く。", "It always penetrates invulnerability barriers.");
67     }
68
69     if (o_ptr->name2 == EGO_2WEAPON) {
70         info[i++] = _("それは二刀流での命中率を向上させる。", "It affects your ability to hit when you are wielding two weapons.");
71     }
72
73     if (have_flag(flgs, TR_EASY_SPELL)) {
74         info[i++] = _("それは魔法の難易度を下げる。", "It affects your ability to cast spells.");
75     }
76
77     if (o_ptr->name2 == EGO_AMU_FOOL) {
78         info[i++] = _("それは魔法の難易度を上げる。", "It interferes with casting spells.");
79     }
80
81     if (o_ptr->name2 == EGO_RING_THROW) {
82         info[i++] = _("それは物を強く投げることを可能にする。", "It provides great strength when you throw an item.");
83     }
84
85     if (o_ptr->name2 == EGO_AMU_NAIVETY) {
86         info[i++] = _("それは魔法抵抗力を下げる。", "It decreases your magic resistance.");
87     }
88
89     if (o_ptr->tval == TV_STATUE) {
90         monster_race *r_ptr = &r_info[o_ptr->pval];
91         if (o_ptr->pval == MON_BULLGATES)
92             info[i++] = _("それは部屋に飾ると恥ずかしい。", "It is shameful.");
93         else if (r_ptr->flags2 & (RF2_ELDRITCH_HORROR))
94             info[i++] = _("それは部屋に飾ると恐い。", "It is fearful.");
95         else
96             info[i++] = _("それは部屋に飾ると楽しい。", "It is cheerful.");
97     }
98
99     if (o_ptr->name2 == EGO_LITE_DARKNESS)
100         info[i++] = _("それは全く光らない。", "It provides no light.");
101
102     POSITION rad = 0;
103     if (have_flag(flgs, TR_LITE_1) && o_ptr->name2 != EGO_LITE_DARKNESS)
104         rad += 1;
105     if (have_flag(flgs, TR_LITE_2) && o_ptr->name2 != EGO_LITE_DARKNESS)
106         rad += 2;
107     if (have_flag(flgs, TR_LITE_3) && o_ptr->name2 != EGO_LITE_DARKNESS)
108         rad += 3;
109     if (have_flag(flgs, TR_LITE_M1))
110         rad -= 1;
111     if (have_flag(flgs, TR_LITE_M2))
112         rad -= 2;
113     if (have_flag(flgs, TR_LITE_M3))
114         rad -= 3;
115
116     if (o_ptr->name2 == EGO_LITE_SHINE)
117         rad++;
118
119     if (have_flag(flgs, TR_LITE_FUEL) && o_ptr->name2 != EGO_LITE_DARKNESS) {
120         if (rad > 0)
121             sprintf(desc, _("それは燃料補給によって明かり(半径 %d)を授ける。", "It provides light (radius %d) when fueled."), (int)rad);
122     } else {
123         if (rad > 0)
124             sprintf(desc, _("それは永遠なる明かり(半径 %d)を授ける。", "It provides light (radius %d) forever."), (int)rad);
125         if (rad < 0)
126             sprintf(desc, _("それは明かりの半径を狭める(半径に-%d)。", "It decreases radius of light source by %d."), (int)-rad);
127     }
128
129     if (rad != 0)
130         info[i++] = desc;
131
132     if (o_ptr->name2 == EGO_LITE_LONG) {
133         info[i++] = _("それは長いターン明かりを授ける。", "It provides light for much longer time.");
134     }
135
136     if (have_flag(flgs, TR_RIDING)) {
137         if ((o_ptr->tval == TV_POLEARM) && ((o_ptr->sval == SV_LANCE) || (o_ptr->sval == SV_HEAVY_LANCE)))
138             info[i++] = _("それは乗馬中は非常に使いやすい。", "It is made for use while riding.");
139         else {
140             info[i++] = _("それは乗馬中でも使いやすい。", "It is suitable for use while riding.");
141             trivial_info++;
142         }
143     }
144
145     if (have_flag(flgs, TR_STR)) {
146         info[i++] = _("それは腕力に影響を及ぼす。", "It affects your strength.");
147     }
148
149     if (have_flag(flgs, TR_INT)) {
150         info[i++] = _("それは知能に影響を及ぼす。", "It affects your intelligence.");
151     }
152
153     if (have_flag(flgs, TR_WIS)) {
154         info[i++] = _("それは賢さに影響を及ぼす。", "It affects your wisdom.");
155     }
156
157     if (have_flag(flgs, TR_DEX)) {
158         info[i++] = _("それは器用さに影響を及ぼす。", "It affects your dexterity.");
159     }
160
161     if (have_flag(flgs, TR_CON)) {
162         info[i++] = _("それは耐久力に影響を及ぼす。", "It affects your constitution.");
163     }
164
165     if (have_flag(flgs, TR_CHR)) {
166         info[i++] = _("それは魅力に影響を及ぼす。", "It affects your charisma.");
167     }
168
169     if (have_flag(flgs, TR_MAGIC_MASTERY)) {
170         info[i++] = _("それは魔法道具使用能力に影響を及ぼす。", "It affects your ability to use magic devices.");
171     }
172
173     if (have_flag(flgs, TR_STEALTH)) {
174         info[i++] = _("それは隠密行動能力に影響を及ぼす。", "It affects your stealth.");
175     }
176
177     if (have_flag(flgs, TR_SEARCH)) {
178         info[i++] = _("それは探索能力に影響を及ぼす。", "It affects your searching.");
179     }
180
181     if (have_flag(flgs, TR_INFRA)) {
182         info[i++] = _("それは赤外線視力に影響を及ぼす。", "It affects your infravision.");
183     }
184
185     if (have_flag(flgs, TR_TUNNEL)) {
186         info[i++] = _("それは採掘能力に影響を及ぼす。", "It affects your ability to tunnel.");
187     }
188
189     if (have_flag(flgs, TR_SPEED)) {
190         info[i++] = _("それはスピードに影響を及ぼす。", "It affects your speed.");
191     }
192
193     if (have_flag(flgs, TR_BLOWS)) {
194         info[i++] = _("それは打撃回数に影響を及ぼす。", "It affects your attack speed.");
195     }
196
197     if (have_flag(flgs, TR_BRAND_ACID)) {
198         info[i++] = _("それは酸によって大きなダメージを与える。", "It does extra damage from acid.");
199     }
200
201     if (have_flag(flgs, TR_BRAND_ELEC)) {
202         info[i++] = _("それは電撃によって大きなダメージを与える。", "It does extra damage from electricity.");
203     }
204
205     if (have_flag(flgs, TR_BRAND_FIRE)) {
206         info[i++] = _("それは火炎によって大きなダメージを与える。", "It does extra damage from fire.");
207     }
208
209     if (have_flag(flgs, TR_BRAND_COLD)) {
210         info[i++] = _("それは冷気によって大きなダメージを与える。", "It does extra damage from frost.");
211     }
212
213     if (have_flag(flgs, TR_BRAND_POIS)) {
214         info[i++] = _("それは敵を毒する。", "It poisons your foes.");
215     }
216
217     if (have_flag(flgs, TR_CHAOTIC)) {
218         info[i++] = _("それはカオス的な効果を及ぼす。", "It produces chaotic effects.");
219     }
220
221     if (have_flag(flgs, TR_VAMPIRIC)) {
222         info[i++] = _("それは敵から生命力を吸収する。", "It drains life from your foes.");
223     }
224
225     if (have_flag(flgs, TR_IMPACT)) {
226         info[i++] = _("それは地震を起こすことができる。", "It can cause earthquakes.");
227     }
228
229     if (have_flag(flgs, TR_VORPAL)) {
230         info[i++] = _("それは非常に切れ味が鋭く敵を切断することができる。", "It is very sharp and can cut your foes.");
231     }
232
233     if (have_flag(flgs, TR_KILL_DRAGON)) {
234         info[i++] = _("それはドラゴンにとっての天敵である。", "It is a great bane of dragons.");
235     } else if (have_flag(flgs, TR_SLAY_DRAGON)) {
236         info[i++] = _("それはドラゴンに対して特に恐るべき力を発揮する。", "It is especially deadly against dragons.");
237     }
238
239     if (have_flag(flgs, TR_KILL_ORC)) {
240         info[i++] = _("それはオークにとっての天敵である。", "It is a great bane of orcs.");
241     }
242
243     if (have_flag(flgs, TR_SLAY_ORC)) {
244         info[i++] = _("それはオークに対して特に恐るべき力を発揮する。", "It is especially deadly against orcs.");
245     }
246
247     if (have_flag(flgs, TR_KILL_TROLL)) {
248         info[i++] = _("それはトロルにとっての天敵である。", "It is a great bane of trolls.");
249     }
250
251     if (have_flag(flgs, TR_SLAY_TROLL)) {
252         info[i++] = _("それはトロルに対して特に恐るべき力を発揮する。", "It is especially deadly against trolls.");
253     }
254
255     if (have_flag(flgs, TR_KILL_GIANT)) {
256         info[i++] = _("それは巨人にとっての天敵である。", "It is a great bane of giants.");
257     } else if (have_flag(flgs, TR_SLAY_GIANT)) {
258         info[i++] = _("それは巨人に対して特に恐るべき力を発揮する。", "It is especially deadly against giants.");
259     }
260
261     if (have_flag(flgs, TR_KILL_DEMON)) {
262         info[i++] = _("それはデーモンにとっての天敵である。", "It is a great bane of demons.");
263     }
264
265     if (have_flag(flgs, TR_SLAY_DEMON)) {
266         info[i++] = _("それはデーモンに対して聖なる力を発揮する。", "It strikes at demons with holy wrath.");
267     }
268
269     if (have_flag(flgs, TR_KILL_UNDEAD)) {
270         info[i++] = _("それはアンデッドにとっての天敵である。", "It is a great bane of undead.");
271     }
272
273     if (have_flag(flgs, TR_SLAY_UNDEAD)) {
274         info[i++] = _("それはアンデッドに対して聖なる力を発揮する。", "It strikes at undead with holy wrath.");
275     }
276
277     if (have_flag(flgs, TR_KILL_EVIL)) {
278         info[i++] = _("それは邪悪なる存在にとっての天敵である。", "It is a great bane of evil monsters.");
279     }
280
281     if (have_flag(flgs, TR_SLAY_EVIL)) {
282         info[i++] = _("それは邪悪なる存在に対して聖なる力で攻撃する。", "It fights against evil with holy fury.");
283     }
284
285     if (have_flag(flgs, TR_KILL_ANIMAL)) {
286         info[i++] = _("それは自然界の動物にとっての天敵である。", "It is a great bane of natural creatures.");
287     }
288
289     if (have_flag(flgs, TR_SLAY_ANIMAL)) {
290         info[i++] = _("それは自然界の動物に対して特に恐るべき力を発揮する。", "It is especially deadly against natural creatures.");
291     }
292
293     if (have_flag(flgs, TR_KILL_HUMAN)) {
294         info[i++] = _("それは人間にとっての天敵である。", "It is a great bane of humans.");
295     }
296
297     if (have_flag(flgs, TR_SLAY_HUMAN)) {
298         info[i++] = _("それは人間に対して特に恐るべき力を発揮する。", "It is especially deadly against humans.");
299     }
300
301     if (have_flag(flgs, TR_FORCE_WEAPON)) {
302         info[i++] = _("それは使用者の魔力を使って攻撃する。", "It powerfully strikes at a monster using your mana.");
303     }
304
305     if (have_flag(flgs, TR_DEC_MANA)) {
306         info[i++] = _("それは魔力の消費を押さえる。", "It decreases your mana consumption.");
307     }
308
309     if (have_flag(flgs, TR_SUST_STR)) {
310         info[i++] = _("それはあなたの腕力を維持する。", "It sustains your strength.");
311     }
312
313     if (have_flag(flgs, TR_SUST_INT)) {
314         info[i++] = _("それはあなたの知能を維持する。", "It sustains your intelligence.");
315     }
316
317     if (have_flag(flgs, TR_SUST_WIS)) {
318         info[i++] = _("それはあなたの賢さを維持する。", "It sustains your wisdom.");
319     }
320
321     if (have_flag(flgs, TR_SUST_DEX)) {
322         info[i++] = _("それはあなたの器用さを維持する。", "It sustains your dexterity.");
323     }
324
325     if (have_flag(flgs, TR_SUST_CON)) {
326         info[i++] = _("それはあなたの耐久力を維持する。", "It sustains your constitution.");
327     }
328
329     if (have_flag(flgs, TR_SUST_CHR)) {
330         info[i++] = _("それはあなたの魅力を維持する。", "It sustains your charisma.");
331     }
332
333     if (have_flag(flgs, TR_IM_ACID)) {
334         info[i++] = _("それは酸に対する完全な免疫を授ける。", "It provides immunity to acid.");
335     }
336
337     if (have_flag(flgs, TR_IM_ELEC)) {
338         info[i++] = _("それは電撃に対する完全な免疫を授ける。", "It provides immunity to electricity.");
339     }
340
341     if (have_flag(flgs, TR_IM_FIRE)) {
342         info[i++] = _("それは火に対する完全な免疫を授ける。", "It provides immunity to fire.");
343     }
344
345     if (have_flag(flgs, TR_IM_COLD)) {
346         info[i++] = _("それは寒さに対する完全な免疫を授ける。", "It provides immunity to cold.");
347     }
348
349     if (have_flag(flgs, TR_THROW)) {
350         info[i++] = _("それは敵に投げて大きなダメージを与えることができる。", "It is perfectly balanced for throwing.");
351     }
352
353     if (have_flag(flgs, TR_FREE_ACT)) {
354         info[i++] = _("それは麻痺に対する完全な免疫を授ける。", "It provides immunity to paralysis.");
355     }
356
357     if (have_flag(flgs, TR_HOLD_EXP)) {
358         info[i++] = _("それは経験値吸収に対する耐性を授ける。", "It provides resistance to experience draining.");
359     }
360
361     if (have_flag(flgs, TR_RES_FEAR)) {
362         info[i++] = _("それは恐怖への完全な耐性を授ける。", "It makes you completely fearless.");
363     }
364
365     if (have_flag(flgs, TR_RES_ACID)) {
366         info[i++] = _("それは酸への耐性を授ける。", "It provides resistance to acid.");
367     }
368
369     if (have_flag(flgs, TR_RES_ELEC)) {
370         info[i++] = _("それは電撃への耐性を授ける。", "It provides resistance to electricity.");
371     }
372
373     if (have_flag(flgs, TR_RES_FIRE)) {
374         info[i++] = _("それは火への耐性を授ける。", "It provides resistance to fire.");
375     }
376
377     if (have_flag(flgs, TR_RES_COLD)) {
378         info[i++] = _("それは寒さへの耐性を授ける。", "It provides resistance to cold.");
379     }
380
381     if (have_flag(flgs, TR_RES_POIS)) {
382         info[i++] = _("それは毒への耐性を授ける。", "It provides resistance to poison.");
383     }
384
385     if (have_flag(flgs, TR_RES_LITE)) {
386         info[i++] = _("それは閃光への耐性を授ける。", "It provides resistance to light.");
387     }
388
389     if (have_flag(flgs, TR_RES_DARK)) {
390         info[i++] = _("それは暗黒への耐性を授ける。", "It provides resistance to dark.");
391     }
392
393     if (have_flag(flgs, TR_RES_BLIND)) {
394         info[i++] = _("それは盲目への耐性を授ける。", "It provides resistance to blindness.");
395     }
396
397     if (have_flag(flgs, TR_RES_CONF)) {
398         info[i++] = _("それは混乱への耐性を授ける。", "It provides resistance to confusion.");
399     }
400
401     if (have_flag(flgs, TR_RES_SOUND)) {
402         info[i++] = _("それは轟音への耐性を授ける。", "It provides resistance to sound.");
403     }
404
405     if (have_flag(flgs, TR_RES_SHARDS)) {
406         info[i++] = _("それは破片への耐性を授ける。", "It provides resistance to shards.");
407     }
408
409     if (have_flag(flgs, TR_RES_NETHER)) {
410         info[i++] = _("それは地獄への耐性を授ける。", "It provides resistance to nether.");
411     }
412
413     if (have_flag(flgs, TR_RES_NEXUS)) {
414         info[i++] = _("それは因果混乱への耐性を授ける。", "It provides resistance to nexus.");
415     }
416
417     if (have_flag(flgs, TR_RES_CHAOS)) {
418         info[i++] = _("それはカオスへの耐性を授ける。", "It provides resistance to chaos.");
419     }
420
421     if (have_flag(flgs, TR_RES_DISEN)) {
422         info[i++] = _("それは劣化への耐性を授ける。", "It provides resistance to disenchantment.");
423     }
424
425     if (have_flag(flgs, TR_LEVITATION)) {
426         info[i++] = _("それは宙に浮くことを可能にする。", "It allows you to levitate.");
427     }
428
429     if (have_flag(flgs, TR_SEE_INVIS)) {
430         info[i++] = _("それは透明なモンスターを見ることを可能にする。", "It allows you to see invisible monsters.");
431     }
432
433     if (have_flag(flgs, TR_TELEPATHY)) {
434         info[i++] = _("それはテレパシー能力を授ける。", "It gives telepathic powers.");
435     }
436
437     if (have_flag(flgs, TR_ESP_ANIMAL)) {
438         info[i++] = _("それは自然界の生物を感知する。", "It senses natural creatures.");
439     }
440
441     if (have_flag(flgs, TR_ESP_UNDEAD)) {
442         info[i++] = _("それはアンデッドを感知する。", "It senses undead.");
443     }
444
445     if (have_flag(flgs, TR_ESP_DEMON)) {
446         info[i++] = _("それは悪魔を感知する。", "It senses demons.");
447     }
448
449     if (have_flag(flgs, TR_ESP_ORC)) {
450         info[i++] = _("それはオークを感知する。", "It senses orcs.");
451     }
452
453     if (have_flag(flgs, TR_ESP_TROLL)) {
454         info[i++] = _("それはトロルを感知する。", "It senses trolls.");
455     }
456
457     if (have_flag(flgs, TR_ESP_GIANT)) {
458         info[i++] = _("それは巨人を感知する。", "It senses giants.");
459     }
460
461     if (have_flag(flgs, TR_ESP_DRAGON)) {
462         info[i++] = _("それはドラゴンを感知する。", "It senses dragons.");
463     }
464
465     if (have_flag(flgs, TR_ESP_HUMAN)) {
466         info[i++] = _("それは人間を感知する。", "It senses humans.");
467     }
468
469     if (have_flag(flgs, TR_ESP_EVIL)) {
470         info[i++] = _("それは邪悪な存在を感知する。", "It senses evil creatures.");
471     }
472
473     if (have_flag(flgs, TR_ESP_GOOD)) {
474         info[i++] = _("それは善良な存在を感知する。", "It senses good creatures.");
475     }
476
477     if (have_flag(flgs, TR_ESP_NONLIVING)) {
478         info[i++] = _("それは活動する無生物体を感知する。", "It senses non-living creatures.");
479     }
480
481     if (have_flag(flgs, TR_ESP_UNIQUE)) {
482         info[i++] = _("それは特別な強敵を感知する。", "It senses unique monsters.");
483     }
484
485     if (have_flag(flgs, TR_SLOW_DIGEST)) {
486         info[i++] = _("それはあなたの新陳代謝を遅くする。", "It slows your metabolism.");
487     }
488
489     if (have_flag(flgs, TR_REGEN)) {
490         info[i++] = _("それは体力回復力を強化する。", "It speeds your regenerative powers.");
491     }
492
493     if (have_flag(flgs, TR_WARNING)) {
494         info[i++] = _("それは危険に対して警告を発する。", "It warns you of danger");
495     }
496
497     if (have_flag(flgs, TR_REFLECT)) {
498         info[i++] = _("それは矢の呪文を反射する。", "It reflects bolt spells.");
499     }
500
501     if (have_flag(flgs, TR_SH_FIRE)) {
502         info[i++] = _("それは炎のバリアを張る。", "It produces a fiery sheath.");
503     }
504
505     if (have_flag(flgs, TR_SH_ELEC)) {
506         info[i++] = _("それは電気のバリアを張る。", "It produces an electric sheath.");
507     }
508
509     if (have_flag(flgs, TR_SH_COLD)) {
510         info[i++] = _("それは冷気のバリアを張る。", "It produces a sheath of coldness.");
511     }
512
513     if (have_flag(flgs, TR_NO_MAGIC)) {
514         info[i++] = _("それは反魔法バリアを張る。", "It produces an anti-magic shell.");
515     }
516
517     if (have_flag(flgs, TR_NO_TELE)) {
518         info[i++] = _("それはテレポートを邪魔する。", "It prevents teleportation.");
519     }
520
521     if (have_flag(flgs, TR_XTRA_MIGHT)) {
522         info[i++] = _("それは矢/ボルト/弾をより強力に発射することができる。", "It fires missiles with extra might.");
523     }
524
525     if (have_flag(flgs, TR_XTRA_SHOTS)) {
526         info[i++] = _("それは矢/ボルト/弾を非常に早く発射することができる。", "It fires missiles excessively fast.");
527     }
528
529     if (have_flag(flgs, TR_BLESSED)) {
530         info[i++] = _("それは神に祝福されている。", "It has been blessed by the gods.");
531     }
532
533     if (object_is_cursed(o_ptr)) {
534         if (o_ptr->curse_flags & TRC_PERMA_CURSE) {
535             info[i++] = _("それは永遠の呪いがかけられている。", "It is permanently cursed.");
536         } else if (o_ptr->curse_flags & TRC_HEAVY_CURSE) {
537             info[i++] = _("それは強力な呪いがかけられている。", "It is heavily cursed.");
538         } else {
539             info[i++] = _("それは呪われている。", "It is cursed.");
540
541             /*
542              * It's a trivial infomation since there is
543              * fake inscription {cursed}
544              */
545             trivial_info++;
546         }
547     }
548
549     if ((have_flag(flgs, TR_TY_CURSE)) || (o_ptr->curse_flags & TRC_TY_CURSE)) {
550         info[i++] = _("それは太古の禍々しい怨念が宿っている。", "It carries an ancient foul curse.");
551     }
552
553     if ((have_flag(flgs, TR_AGGRAVATE)) || (o_ptr->curse_flags & TRC_AGGRAVATE)) {
554         info[i++] = _("それは付近のモンスターを怒らせる。", "It aggravates nearby creatures.");
555     }
556
557     if ((have_flag(flgs, TR_DRAIN_EXP)) || (o_ptr->curse_flags & TRC_DRAIN_EXP)) {
558         info[i++] = _("それは経験値を吸い取る。", "It drains experience.");
559     }
560
561     if (o_ptr->curse_flags & TRC_SLOW_REGEN) {
562         info[i++] = _("それは回復力を弱める。", "It slows your regenerative powers.");
563     }
564
565     if ((o_ptr->curse_flags & TRC_ADD_L_CURSE) || have_flag(flgs, TR_ADD_L_CURSE)) {
566         info[i++] = _("それは弱い呪いを増やす。", "It adds weak curses.");
567     }
568
569     if ((o_ptr->curse_flags & TRC_ADD_H_CURSE) || have_flag(flgs, TR_ADD_H_CURSE)) {
570         info[i++] = _("それは強力な呪いを増やす。", "It adds heavy curses.");
571     }
572
573     if ((have_flag(flgs, TR_CALL_ANIMAL)) || (o_ptr->curse_flags & TRC_CALL_ANIMAL)) {
574         info[i++] = _("それは動物を呼び寄せる。", "It attracts animals.");
575     }
576
577     if ((have_flag(flgs, TR_CALL_DEMON)) || (o_ptr->curse_flags & TRC_CALL_DEMON)) {
578         info[i++] = _("それは悪魔を呼び寄せる。", "It attracts demons.");
579     }
580
581     if ((have_flag(flgs, TR_CALL_DRAGON)) || (o_ptr->curse_flags & TRC_CALL_DRAGON)) {
582         info[i++] = _("それはドラゴンを呼び寄せる。", "It attracts dragons.");
583     }
584
585     if ((have_flag(flgs, TR_CALL_UNDEAD)) || (o_ptr->curse_flags & TRC_CALL_UNDEAD)) {
586         info[i++] = _("それは死霊を呼び寄せる。", "It attracts undeads.");
587     }
588
589     if ((have_flag(flgs, TR_COWARDICE)) || (o_ptr->curse_flags & TRC_COWARDICE)) {
590         info[i++] = _("それは恐怖感を引き起こす。", "It makes you subject to cowardice.");
591     }
592
593     if ((have_flag(flgs, TR_TELEPORT)) || (o_ptr->curse_flags & TRC_TELEPORT)) {
594         info[i++] = _("それはランダムなテレポートを引き起こす。", "It induces random teleportation.");
595     }
596
597     if ((have_flag(flgs, TR_LOW_MELEE)) || o_ptr->curse_flags & TRC_LOW_MELEE) {
598         info[i++] = _("それは攻撃を外しやすい。", "It causes you to miss blows.");
599     }
600
601     if ((have_flag(flgs, TR_LOW_AC)) || (o_ptr->curse_flags & TRC_LOW_AC)) {
602         info[i++] = _("それは攻撃を受けやすい。", "It helps your enemies' blows.");
603     }
604
605     if ((have_flag(flgs, TR_LOW_MAGIC)) || (o_ptr->curse_flags & TRC_LOW_MAGIC)) {
606         info[i++] = _("それは魔法を唱えにくくする。", "It encumbers you while spellcasting.");
607     }
608
609     if ((have_flag(flgs, TR_FAST_DIGEST)) || (o_ptr->curse_flags & TRC_FAST_DIGEST)) {
610         info[i++] = _("それはあなたの新陳代謝を速くする。", "It speeds your metabolism.");
611     }
612
613     if ((have_flag(flgs, TR_DRAIN_HP)) || (o_ptr->curse_flags & TRC_DRAIN_HP)) {
614         info[i++] = _("それはあなたの体力を吸い取る。", "It drains you.");
615     }
616
617     if ((have_flag(flgs, TR_DRAIN_MANA)) || (o_ptr->curse_flags & TRC_DRAIN_MANA)) {
618         info[i++] = _("それはあなたの魔力を吸い取る。", "It drains your mana.");
619     }
620
621     if (mode & SCROBJ_FAKE_OBJECT) {
622         switch (o_ptr->tval) {
623         case TV_RING:
624             switch (o_ptr->sval) {
625             case SV_RING_LORDLY:
626                 info[i++] = _("それは幾つかのランダムな耐性を授ける。", "It provides some random resistances.");
627                 break;
628             case SV_RING_WARNING:
629                 info[i++] = _("それはひとつの低級なESPを授ける事がある。", "It may provide a low rank ESP.");
630                 break;
631             }
632
633             break;
634
635         case TV_AMULET:
636             switch (o_ptr->sval) {
637             case SV_AMULET_RESISTANCE:
638                 info[i++] = _("それは毒への耐性を授ける事がある。", "It may provides resistance to poison.");
639                 info[i++] = _("それはランダムな耐性を授ける事がある。", "It may provide a random resistances.");
640                 break;
641             case SV_AMULET_THE_MAGI:
642                 info[i++] = _("それは最大で3つまでの低級なESPを授ける。", "It provides up to three low rank ESPs.");
643                 break;
644             }
645
646             break;
647         }
648     }
649
650     if (have_flag(flgs, TR_IGNORE_ACID) && have_flag(flgs, TR_IGNORE_ELEC) && have_flag(flgs, TR_IGNORE_FIRE) && have_flag(flgs, TR_IGNORE_COLD)) {
651         info[i++] = _("それは酸・電撃・火炎・冷気では傷つかない。", "It cannot be harmed by the elements.");
652     } else {
653         if (have_flag(flgs, TR_IGNORE_ACID)) {
654             info[i++] = _("それは酸では傷つかない。", "It cannot be harmed by acid.");
655         }
656
657         if (have_flag(flgs, TR_IGNORE_ELEC)) {
658             info[i++] = _("それは電撃では傷つかない。", "It cannot be harmed by electricity.");
659         }
660
661         if (have_flag(flgs, TR_IGNORE_FIRE)) {
662             info[i++] = _("それは火炎では傷つかない。", "It cannot be harmed by fire.");
663         }
664
665         if (have_flag(flgs, TR_IGNORE_COLD)) {
666             info[i++] = _("それは冷気では傷つかない。", "It cannot be harmed by cold.");
667         }
668     }
669
670     if (mode & SCROBJ_FORCE_DETAIL)
671         trivial_info = 0;
672
673     if (i <= trivial_info)
674         return FALSE;
675
676     screen_save();
677     int wid, hgt;
678     Term_get_size(&wid, &hgt);
679
680     if (!(mode & SCROBJ_FAKE_OBJECT))
681         object_desc(player_ptr, o_name, o_ptr, 0);
682     else
683         object_desc(player_ptr, o_name, o_ptr, (OD_NAME_ONLY | OD_STORE));
684
685     prt(o_name, 0, 0);
686     for (int k = 1; k < hgt; k++) {
687         prt("", k, 13);
688     }
689
690     if ((o_ptr->tval == TV_STATUE) && (o_ptr->sval == SV_PHOTO)) {
691         monster_race *r_ptr = &r_info[o_ptr->pval];
692         int namelen = strlen(r_name + r_ptr->name);
693         prt(format("%s: '", r_name + r_ptr->name), 1, 15);
694         Term_queue_bigchar(18 + namelen, 1, r_ptr->x_attr, r_ptr->x_char, 0, 0);
695         prt("'", 1, (use_bigtile ? 20 : 19) + namelen);
696     } else {
697         prt(_("     アイテムの能力:", "     Item Attributes:"), 1, 15);
698     }
699
700     int k = 2;
701     for (int j = 0; j < i; j++) {
702         prt(info[j], k++, 15);
703         if ((k == hgt - 2) && (j + 1 < i)) {
704             prt(_("-- 続く --", "-- more --"), k, 15);
705             inkey();
706             for (; k > 2; k--)
707                 prt("", k, 15);
708         }
709     }
710
711     prt(_("[何かキーを押すとゲームに戻ります]", "[Press any key to continue]"), k, 15);
712     inkey();
713     screen_load();
714     return TRUE;
715 }