OSDN Git Service

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