1 #include "perception/identification.h"
2 #include "artifact/fixed-art-types.h"
3 #include "flavor/flavor-describer.h"
4 #include "flavor/object-flavor-types.h"
5 #include "game-option/special-options.h"
6 #include "io/input-key-acceptor.h"
7 #include "monster-race/monster-race.h"
8 #include "monster-race/race-flags2.h"
9 #include "monster-race/race-indice-types.h"
10 #include "object-enchant/object-ego.h"
11 #include "object-enchant/tr-types.h"
12 #include "object-enchant/trc-types.h"
13 #include "object-hook/hook-weapon.h"
14 #include "object/object-flags.h"
15 #include "object/object-info.h"
16 #include "object/object-kind.h"
17 #include "sv-definition/sv-amulet-types.h"
18 #include "sv-definition/sv-other-types.h"
19 #include "sv-definition/sv-ring-types.h"
20 #include "sv-definition/sv-weapon-types.h"
21 #include "system/artifact-type-definition.h"
22 #include "system/monster-race-definition.h"
23 #include "term/screen-processor.h"
24 #include "util/bit-flags-calculator.h"
25 #include "util/buffer-shaper.h"
26 #include "util/enum-converter.h"
29 * @brief オブジェクトの*鑑定*内容を詳述して表示する /
30 * Describe a "fully identified" item
31 * @param player_ptr プレイヤーへの参照ポインタ
32 * @param o_ptr *鑑定*情報を取得する元のオブジェクト構造体参照ポインタ
34 * @return 特筆すべき情報が一つでもあった場合TRUE、一つもなく表示がキャンセルされた場合FALSEを返す。
36 bool screen_object(PlayerType *player_ptr, ObjectType *o_ptr, BIT_FLAGS mode)
40 GAME_TEXT o_name[MAX_NLEN];
44 auto flgs = object_flags(o_ptr);
46 shape_buffer(o_ptr->fixed_artifact_idx ? a_info[o_ptr->fixed_artifact_idx].text.c_str() : k_info[o_ptr->k_idx].text.c_str(), 77 - 15, temp, sizeof(temp));
49 for (int j = 0; temp[j]; j += 1 + strlen(&temp[j])) {
54 if (o_ptr->is_equipment()) {
58 if (flgs.has(TR_ACTIVATE)) {
59 info[i++] = _("始動したときの効果...", "It can be activated for...");
60 info[i++] = activation_explanation(o_ptr);
61 info[i++] = _("...ただし装備していなければならない。", "...if it is being worn.");
64 if (o_ptr->tval == ItemKindType::FIGURINE) {
65 info[i++] = _("それは投げた時ペットに変化する。", "It will transform into a pet when thrown.");
68 if (o_ptr->fixed_artifact_idx == ART_STONEMASK) {
69 info[i++] = _("それを装備した者は吸血鬼になる。", "It makes you turn into a vampire permanently.");
72 if ((o_ptr->tval == ItemKindType::SWORD) && (o_ptr->sval == SV_POISON_NEEDLE)) {
73 info[i++] = _("それは相手を一撃で倒すことがある。", "It will attempt to instantly kill a monster.");
76 if ((o_ptr->tval == ItemKindType::POLEARM) && (o_ptr->sval == SV_DEATH_SCYTHE)) {
77 info[i++] = _("それは自分自身に攻撃が返ってくることがある。", "It causes you to strike yourself sometimes.");
78 info[i++] = _("それは無敵のバリアを切り裂く。", "It always penetrates invulnerability barriers.");
81 if (flgs.has(TR_EASY2_WEAPON)) {
82 info[i++] = _("それは二刀流での命中率を向上させる。", "It affects your ability to hit when you are wielding two weapons.");
85 if (flgs.has(TR_INVULN_ARROW)) {
86 info[i++] = _("それは視界がある限り物理的な飛び道具の一切をはねのける。", "It repels all physical missiles as long as there is visibility.");
89 if (flgs.has(TR_NO_AC)) {
90 info[i++] = _("それは物理的防護の一切を奪う。", "It robs you of any physical protection.");
93 if (flgs.has(TR_EASY_SPELL)) {
94 info[i++] = _("それは魔法の難易度を下げる。", "It affects your ability to cast spells.");
97 if (flgs.has(TR_HEAVY_SPELL)) {
98 info[i++] = _("それは魔法の難易度を上げる。", "It interferes with casting spells.");
101 if (flgs.has(TR_MIGHTY_THROW)) {
102 info[i++] = _("それは物を強く投げることを可能にする。", "It provides great strength when you throw an item.");
105 if (o_ptr->tval == ItemKindType::STATUE) {
106 auto statue_r_idx = i2enum<MonsterRaceId>(o_ptr->pval);
107 auto *r_ptr = &r_info[statue_r_idx];
108 if (statue_r_idx == MonsterRaceId::BULLGATES) {
109 info[i++] = _("それは部屋に飾ると恥ずかしい。", "It is shameful.");
110 } else if (r_ptr->flags2 & (RF2_ELDRITCH_HORROR)) {
111 info[i++] = _("それは部屋に飾ると恐い。", "It is fearful.");
113 info[i++] = _("それは部屋に飾ると楽しい。", "It is cheerful.");
117 if (flgs.has(TR_DARK_SOURCE)) {
118 info[i++] = _("それは全く光らない。", "It provides no light.");
122 if (flgs.has(TR_LITE_1) && flgs.has_not(TR_DARK_SOURCE)) {
125 if (flgs.has(TR_LITE_2) && flgs.has_not(TR_DARK_SOURCE)) {
128 if (flgs.has(TR_LITE_3) && flgs.has_not(TR_DARK_SOURCE)) {
131 if (flgs.has(TR_LITE_M1)) {
134 if (flgs.has(TR_LITE_M2)) {
137 if (flgs.has(TR_LITE_M3)) {
141 if (o_ptr->ego_idx == EgoType::LITE_SHINE) {
145 if (flgs.has(TR_LITE_FUEL) && flgs.has_not(TR_DARK_SOURCE)) {
147 sprintf(desc, _("それは燃料補給によって明かり(半径 %d)を授ける。", "It provides light (radius %d) when fueled."), (int)rad);
151 sprintf(desc, _("それは永遠なる明かり(半径 %d)を授ける。", "It provides light (radius %d) forever."), (int)rad);
154 sprintf(desc, _("それは明かりの半径を狭める(半径に-%d)。", "It decreases the radius of your light by %d."), (int)-rad);
162 if (o_ptr->ego_idx == EgoType::LITE_LONG) {
163 info[i++] = _("それは長いターン明かりを授ける。", "It provides light for much longer time.");
166 if (flgs.has(TR_RIDING)) {
167 if (o_ptr->is_lance()) {
168 info[i++] = _("それは乗馬中は非常に使いやすい。", "It is made for use while riding.");
170 info[i++] = _("それは乗馬中でも使いやすい。", "It is suitable for use while riding.");
175 if (flgs.has(TR_SUPPORTIVE)) {
176 info[i++] = _("それは武器の補助として扱いやすい。", "It is easy to treat it as assistance to weapon.");
179 if (flgs.has(TR_STR)) {
180 info[i++] = _("それは腕力に影響を及ぼす。", "It affects your strength.");
183 if (flgs.has(TR_INT)) {
184 info[i++] = _("それは知能に影響を及ぼす。", "It affects your intelligence.");
187 if (flgs.has(TR_WIS)) {
188 info[i++] = _("それは賢さに影響を及ぼす。", "It affects your wisdom.");
191 if (flgs.has(TR_DEX)) {
192 info[i++] = _("それは器用さに影響を及ぼす。", "It affects your dexterity.");
195 if (flgs.has(TR_CON)) {
196 info[i++] = _("それは耐久力に影響を及ぼす。", "It affects your constitution.");
199 if (flgs.has(TR_CHR)) {
200 info[i++] = _("それは魅力に影響を及ぼす。", "It affects your charisma.");
203 if (flgs.has(TR_MAGIC_MASTERY)) {
204 info[i++] = _("それは魔法道具使用能力に影響を及ぼす。", "It affects your ability to use magic devices.");
207 if (flgs.has(TR_STEALTH)) {
208 info[i++] = _("それは隠密行動能力に影響を及ぼす。", "It affects your stealth.");
211 if (flgs.has(TR_SEARCH)) {
212 info[i++] = _("それは探索能力に影響を及ぼす。", "It affects your searching.");
215 if (flgs.has(TR_INFRA)) {
216 info[i++] = _("それは赤外線視力に影響を及ぼす。", "It affects your infravision.");
219 if (flgs.has(TR_TUNNEL)) {
220 info[i++] = _("それは採掘能力に影響を及ぼす。", "It affects your ability to tunnel.");
223 if (flgs.has(TR_SPEED)) {
224 info[i++] = _("それはスピードに影響を及ぼす。", "It affects your speed.");
227 if (flgs.has(TR_BLOWS)) {
228 info[i++] = _("それは打撃回数に影響を及ぼす。", "It affects your attack speed.");
231 if (flgs.has(TR_BRAND_ACID)) {
232 info[i++] = _("それは酸によって大きなダメージを与える。", "It does extra damage from acid.");
235 if (flgs.has(TR_BRAND_ELEC)) {
236 info[i++] = _("それは電撃によって大きなダメージを与える。", "It does extra damage from electricity.");
239 if (flgs.has(TR_BRAND_FIRE)) {
240 info[i++] = _("それは火炎によって大きなダメージを与える。", "It does extra damage from fire.");
243 if (flgs.has(TR_BRAND_COLD)) {
244 info[i++] = _("それは冷気によって大きなダメージを与える。", "It does extra damage from frost.");
247 if (flgs.has(TR_BRAND_POIS)) {
248 info[i++] = _("それは敵を毒する。", "It poisons your foes.");
251 if (flgs.has(TR_CHAOTIC)) {
252 info[i++] = _("それはカオス的な効果を及ぼす。", "It produces chaotic effects.");
255 if (flgs.has(TR_BRAND_MAGIC)) {
256 info[i++] = _("それは魔術的な効果を及ぼす。", "It produces magical effects.");
259 if (flgs.has(TR_VAMPIRIC)) {
260 info[i++] = _("それは敵から生命力を吸収する。", "It drains life from your foes.");
263 if (flgs.has(TR_EARTHQUAKE)) {
264 info[i++] = _("それは地震を起こすことができる。", "It can cause earthquakes.");
267 if (flgs.has(TR_VORPAL)) {
268 info[i++] = _("それは非常に切れ味が鋭く敵を切断することができる。", "It is very sharp and can cut your foes.");
271 if (flgs.has(TR_IMPACT)) {
272 info[i++] = _("それは非常に強く敵を攻撃することができる。", "It can hit your foes strongly.");
275 if (flgs.has(TR_KILL_DRAGON)) {
276 info[i++] = _("それはドラゴンにとっての天敵である。", "It is a great bane of dragons.");
277 } else if (flgs.has(TR_SLAY_DRAGON)) {
278 info[i++] = _("それはドラゴンに対して特に恐るべき力を発揮する。", "It is especially deadly against dragons.");
281 if (flgs.has(TR_KILL_ORC)) {
282 info[i++] = _("それはオークにとっての天敵である。", "It is a great bane of orcs.");
285 if (flgs.has(TR_SLAY_ORC)) {
286 info[i++] = _("それはオークに対して特に恐るべき力を発揮する。", "It is especially deadly against orcs.");
289 if (flgs.has(TR_KILL_TROLL)) {
290 info[i++] = _("それはトロルにとっての天敵である。", "It is a great bane of trolls.");
293 if (flgs.has(TR_SLAY_TROLL)) {
294 info[i++] = _("それはトロルに対して特に恐るべき力を発揮する。", "It is especially deadly against trolls.");
297 if (flgs.has(TR_KILL_GIANT)) {
298 info[i++] = _("それは巨人にとっての天敵である。", "It is a great bane of giants.");
299 } else if (flgs.has(TR_SLAY_GIANT)) {
300 info[i++] = _("それは巨人に対して特に恐るべき力を発揮する。", "It is especially deadly against giants.");
303 if (flgs.has(TR_KILL_DEMON)) {
304 info[i++] = _("それはデーモンにとっての天敵である。", "It is a great bane of demons.");
307 if (flgs.has(TR_SLAY_DEMON)) {
308 info[i++] = _("それはデーモンに対して聖なる力を発揮する。", "It strikes at demons with holy wrath.");
311 if (flgs.has(TR_KILL_UNDEAD)) {
312 info[i++] = _("それはアンデッドにとっての天敵である。", "It is a great bane of undead.");
315 if (flgs.has(TR_SLAY_UNDEAD)) {
316 info[i++] = _("それはアンデッドに対して聖なる力を発揮する。", "It strikes at undead with holy wrath.");
319 if (flgs.has(TR_KILL_EVIL)) {
320 info[i++] = _("それは邪悪なる存在にとっての天敵である。", "It is a great bane of evil monsters.");
323 if (flgs.has(TR_SLAY_EVIL)) {
324 info[i++] = _("それは邪悪なる存在に対して聖なる力で攻撃する。", "It fights against evil with holy fury.");
327 if (flgs.has(TR_KILL_GOOD)) {
328 info[i++] = _("それは善良なる存在にとっての天敵である。", "It is a great bane of good monsters.");
331 if (flgs.has(TR_SLAY_GOOD)) {
332 info[i++] = _("それは善良なる存在に対して邪悪なる力で攻撃する。", "It fights against good with evil fury.");
335 if (flgs.has(TR_KILL_ANIMAL)) {
336 info[i++] = _("それは自然界の動物にとっての天敵である。", "It is a great bane of natural creatures.");
339 if (flgs.has(TR_SLAY_ANIMAL)) {
340 info[i++] = _("それは自然界の動物に対して特に恐るべき力を発揮する。", "It is especially deadly against natural creatures.");
343 if (flgs.has(TR_KILL_HUMAN)) {
344 info[i++] = _("それは人間にとっての天敵である。", "It is a great bane of humans.");
347 if (flgs.has(TR_SLAY_HUMAN)) {
348 info[i++] = _("それは人間に対して特に恐るべき力を発揮する。", "It is especially deadly against humans.");
351 if (flgs.has(TR_FORCE_WEAPON)) {
352 info[i++] = _("それは使用者の魔力を使って攻撃する。", "It powerfully strikes at a monster using your mana.");
355 if (flgs.has(TR_DEC_MANA)) {
356 info[i++] = _("それは魔力の消費を押さえる。", "It decreases your mana consumption.");
359 if (flgs.has(TR_SUST_STR)) {
360 info[i++] = _("それはあなたの腕力を維持する。", "It sustains your strength.");
363 if (flgs.has(TR_SUST_INT)) {
364 info[i++] = _("それはあなたの知能を維持する。", "It sustains your intelligence.");
367 if (flgs.has(TR_SUST_WIS)) {
368 info[i++] = _("それはあなたの賢さを維持する。", "It sustains your wisdom.");
371 if (flgs.has(TR_SUST_DEX)) {
372 info[i++] = _("それはあなたの器用さを維持する。", "It sustains your dexterity.");
375 if (flgs.has(TR_SUST_CON)) {
376 info[i++] = _("それはあなたの耐久力を維持する。", "It sustains your constitution.");
379 if (flgs.has(TR_SUST_CHR)) {
380 info[i++] = _("それはあなたの魅力を維持する。", "It sustains your charisma.");
383 if (flgs.has(TR_IM_ACID)) {
384 info[i++] = _("それは酸に対する完全な免疫を授ける。", "It provides immunity to acid.");
385 } else if (flgs.has(TR_VUL_ACID)) {
386 info[i++] = _("それは酸に対する弱点を授ける。", "It provides vulnerability to acid.");
389 if (flgs.has(TR_IM_ELEC)) {
390 info[i++] = _("それは電撃に対する完全な免疫を授ける。", "It provides immunity to electricity.");
391 } else if (flgs.has(TR_VUL_ELEC)) {
392 info[i++] = _("それは電撃に対する弱点を授ける。", "It provides vulnerability to electricity.");
395 if (flgs.has(TR_IM_FIRE)) {
396 info[i++] = _("それは火に対する完全な免疫を授ける。", "It provides immunity to fire.");
397 } else if (flgs.has(TR_VUL_FIRE)) {
398 info[i++] = _("それは火に対する弱点を授ける。", "It provides vulnerability to fire.");
401 if (flgs.has(TR_IM_COLD)) {
402 info[i++] = _("それは寒さに対する完全な免疫を授ける。", "It provides immunity to cold.");
403 } else if (flgs.has(TR_VUL_COLD)) {
404 info[i++] = _("それは寒さに対する弱点を授ける。", "It provides vulnerability to cold.");
407 if (flgs.has(TR_IM_DARK)) {
408 info[i++] = _("それは暗黒に対する完全な免疫を授ける。", "It provides immunity to dark.");
411 if (flgs.has(TR_VUL_LITE)) {
412 info[i++] = _("それは閃光に対する弱点を授ける。", "It provides vulnerability to cold.");
415 if (flgs.has(TR_THROW)) {
416 info[i++] = _("それは敵に投げて大きなダメージを与えることができる。", "It is perfectly balanced for throwing.");
419 if (flgs.has(TR_FREE_ACT)) {
420 info[i++] = _("それは麻痺に対する完全な免疫を授ける。", "It provides immunity to paralysis.");
423 if (flgs.has(TR_HOLD_EXP)) {
424 info[i++] = _("それは経験値吸収に対する耐性を授ける。", "It provides resistance to experience draining.");
427 if (flgs.has(TR_RES_FEAR)) {
428 info[i++] = _("それは恐怖への完全な耐性を授ける。", "It makes you completely fearless.");
431 if (flgs.has(TR_RES_ACID)) {
432 info[i++] = _("それは酸への耐性を授ける。", "It provides resistance to acid.");
435 if (flgs.has(TR_RES_ELEC)) {
436 info[i++] = _("それは電撃への耐性を授ける。", "It provides resistance to electricity.");
439 if (flgs.has(TR_RES_FIRE)) {
440 info[i++] = _("それは火への耐性を授ける。", "It provides resistance to fire.");
443 if (flgs.has(TR_RES_COLD)) {
444 info[i++] = _("それは寒さへの耐性を授ける。", "It provides resistance to cold.");
447 if (flgs.has(TR_RES_POIS)) {
448 info[i++] = _("それは毒への耐性を授ける。", "It provides resistance to poison.");
451 if (flgs.has(TR_RES_LITE)) {
452 info[i++] = _("それは閃光への耐性を授ける。", "It provides resistance to light.");
455 if (flgs.has(TR_RES_DARK)) {
456 info[i++] = _("それは暗黒への耐性を授ける。", "It provides resistance to dark.");
459 if (flgs.has(TR_RES_BLIND)) {
460 info[i++] = _("それは盲目への耐性を授ける。", "It provides resistance to blindness.");
463 if (flgs.has(TR_RES_CONF)) {
464 info[i++] = _("それは混乱への耐性を授ける。", "It provides resistance to confusion.");
467 if (flgs.has(TR_RES_SOUND)) {
468 info[i++] = _("それは轟音への耐性を授ける。", "It provides resistance to sound.");
471 if (flgs.has(TR_RES_SHARDS)) {
472 info[i++] = _("それは破片への耐性を授ける。", "It provides resistance to shards.");
475 if (flgs.has(TR_RES_NETHER)) {
476 info[i++] = _("それは地獄への耐性を授ける。", "It provides resistance to nether.");
479 if (flgs.has(TR_RES_NEXUS)) {
480 info[i++] = _("それは因果混乱への耐性を授ける。", "It provides resistance to nexus.");
483 if (flgs.has(TR_RES_CHAOS)) {
484 info[i++] = _("それはカオスへの耐性を授ける。", "It provides resistance to chaos.");
487 if (flgs.has(TR_RES_TIME)) {
488 info[i++] = _("それは時間逆転への耐性を授ける。", "It provides resistance to time stream.");
491 if (flgs.has(TR_RES_WATER)) {
492 info[i++] = _("それは水流への耐性を授ける。", "It provides resistance to water stream.");
495 if (flgs.has(TR_RES_DISEN)) {
496 info[i++] = _("それは劣化への耐性を授ける。", "It provides resistance to disenchantment.");
499 if (flgs.has(TR_LEVITATION)) {
500 info[i++] = _("それは宙に浮くことを可能にする。", "It allows you to levitate.");
503 if (flgs.has(TR_SEE_INVIS)) {
504 info[i++] = _("それは透明なモンスターを見ることを可能にする。", "It allows you to see invisible monsters.");
507 if (flgs.has(TR_TELEPATHY)) {
508 info[i++] = _("それはテレパシー能力を授ける。", "It gives telepathic powers.");
511 if (flgs.has(TR_ESP_ANIMAL)) {
512 info[i++] = _("それは自然界の生物を感知する。", "It senses natural creatures.");
515 if (flgs.has(TR_ESP_UNDEAD)) {
516 info[i++] = _("それはアンデッドを感知する。", "It senses undead.");
519 if (flgs.has(TR_ESP_DEMON)) {
520 info[i++] = _("それは悪魔を感知する。", "It senses demons.");
523 if (flgs.has(TR_ESP_ORC)) {
524 info[i++] = _("それはオークを感知する。", "It senses orcs.");
527 if (flgs.has(TR_ESP_TROLL)) {
528 info[i++] = _("それはトロルを感知する。", "It senses trolls.");
531 if (flgs.has(TR_ESP_GIANT)) {
532 info[i++] = _("それは巨人を感知する。", "It senses giants.");
535 if (flgs.has(TR_ESP_DRAGON)) {
536 info[i++] = _("それはドラゴンを感知する。", "It senses dragons.");
539 if (flgs.has(TR_ESP_HUMAN)) {
540 info[i++] = _("それは人間を感知する。", "It senses humans.");
543 if (flgs.has(TR_ESP_EVIL)) {
544 info[i++] = _("それは邪悪な存在を感知する。", "It senses evil creatures.");
547 if (flgs.has(TR_ESP_GOOD)) {
548 info[i++] = _("それは善良な存在を感知する。", "It senses good creatures.");
551 if (flgs.has(TR_ESP_NONLIVING)) {
552 info[i++] = _("それは活動する無生物体を感知する。", "It senses non-living creatures.");
555 if (flgs.has(TR_ESP_UNIQUE)) {
556 info[i++] = _("それは特別な強敵を感知する。", "It senses unique monsters.");
559 if (flgs.has(TR_SLOW_DIGEST)) {
560 info[i++] = _("それはあなたの新陳代謝を遅くする。", "It slows your metabolism.");
563 if (flgs.has(TR_REGEN)) {
564 info[i++] = _("それは体力回復力を強化する。", "It speeds your regenerative powers.");
567 if (flgs.has(TR_WARNING)) {
568 info[i++] = _("それは危険に対して警告を発する。", "It warns you of danger");
571 if (flgs.has(TR_REFLECT)) {
572 info[i++] = _("それは矢の呪文を反射する。", "It reflects bolt spells.");
575 if (flgs.has(TR_RES_CURSE)) {
576 info[i++] = _("それは呪いへの抵抗力を高める。", "It increases your resistance to curses.");
579 if (flgs.has(TR_SH_FIRE)) {
580 info[i++] = _("それは炎のバリアを張る。", "It produces a fiery sheath.");
583 if (flgs.has(TR_SH_ELEC)) {
584 info[i++] = _("それは電気のバリアを張る。", "It produces an electric sheath.");
587 if (flgs.has(TR_SH_COLD)) {
588 info[i++] = _("それは冷気のバリアを張る。", "It produces a sheath of coldness.");
591 if (flgs.has(TR_SELF_FIRE)) {
592 info[i++] = _("それはあなたを燃やす。", "It burns you.");
595 if (flgs.has(TR_SELF_ELEC)) {
596 info[i++] = _("それはあなたを電撃で包む。", "It electrocutes you.");
599 if (flgs.has(TR_SELF_COLD)) {
600 info[i++] = _("それはあなたを凍らせる。", "It freezes you.");
603 if (flgs.has(TR_NO_MAGIC)) {
604 info[i++] = _("それは反魔法バリアを張る。", "It produces an anti-magic shell.");
607 if (flgs.has(TR_NO_TELE)) {
608 info[i++] = _("それはテレポートを邪魔する。", "It prevents teleportation.");
611 if (flgs.has(TR_XTRA_MIGHT)) {
612 info[i++] = _("それは矢/ボルト/弾をより強力に発射することができる。", "It fires missiles with extra might.");
615 if (flgs.has(TR_XTRA_SHOTS)) {
616 info[i++] = _("それは矢/ボルト/弾を非常に早く発射することができる。", "It fires missiles excessively fast.");
619 if (flgs.has(TR_BLESSED)) {
620 info[i++] = _("それは神に祝福されている。", "It has been blessed by the gods.");
623 if (o_ptr->is_cursed()) {
624 if (o_ptr->curse_flags.has(CurseTraitType::PERMA_CURSE)) {
625 info[i++] = _("それは永遠の呪いがかけられている。", "It is permanently cursed.");
626 } else if (o_ptr->curse_flags.has(CurseTraitType::HEAVY_CURSE)) {
627 info[i++] = _("それは強力な呪いがかけられている。", "It is heavily cursed.");
629 info[i++] = _("それは呪われている。", "It is cursed.");
632 * It's a trivial infomation since there is
633 * fake inscription {cursed}
639 if ((flgs.has(TR_TY_CURSE)) || o_ptr->curse_flags.has(CurseTraitType::TY_CURSE)) {
640 info[i++] = _("それは太古の禍々しい怨念が宿っている。", "It carries an ancient foul curse.");
643 if ((flgs.has(TR_AGGRAVATE)) || o_ptr->curse_flags.has(CurseTraitType::AGGRAVATE)) {
644 info[i++] = _("それは付近のモンスターを怒らせる。", "It aggravates nearby creatures.");
647 if ((flgs.has(TR_DRAIN_EXP)) || o_ptr->curse_flags.has(CurseTraitType::DRAIN_EXP)) {
648 info[i++] = _("それは経験値を吸い取る。", "It drains experience.");
651 if (o_ptr->curse_flags.has(CurseTraitType::SLOW_REGEN)) {
652 info[i++] = _("それは回復力を弱める。", "It slows your regenerative powers.");
655 if (o_ptr->curse_flags.has(CurseTraitType::ADD_L_CURSE) || flgs.has(TR_ADD_L_CURSE)) {
656 info[i++] = _("それは弱い呪いを増やす。", "It adds weak curses.");
659 if (o_ptr->curse_flags.has(CurseTraitType::ADD_H_CURSE) || flgs.has(TR_ADD_H_CURSE)) {
660 info[i++] = _("それは強力な呪いを増やす。", "It adds heavy curses.");
663 if (o_ptr->curse_flags.has(CurseTraitType::PERSISTENT_CURSE) || flgs.has(TR_PERSISTENT_CURSE)) {
664 info[i++] = _("それは頻繁に呪いをかけなおす。", "It curses itself persistently.");
667 if ((flgs.has(TR_CALL_ANIMAL)) || o_ptr->curse_flags.has(CurseTraitType::CALL_ANIMAL)) {
668 info[i++] = _("それは動物を呼び寄せる。", "It attracts animals.");
671 if ((flgs.has(TR_CALL_DEMON)) || o_ptr->curse_flags.has(CurseTraitType::CALL_DEMON)) {
672 info[i++] = _("それは悪魔を呼び寄せる。", "It attracts demons.");
675 if ((flgs.has(TR_CALL_DRAGON)) || o_ptr->curse_flags.has(CurseTraitType::CALL_DRAGON)) {
676 info[i++] = _("それはドラゴンを呼び寄せる。", "It attracts dragons.");
679 if ((flgs.has(TR_CALL_UNDEAD)) || o_ptr->curse_flags.has(CurseTraitType::CALL_UNDEAD)) {
680 info[i++] = _("それは死霊を呼び寄せる。", "It attracts undead.");
683 if ((flgs.has(TR_COWARDICE)) || o_ptr->curse_flags.has(CurseTraitType::COWARDICE)) {
684 info[i++] = _("それは恐怖感を引き起こす。", "It makes you subject to cowardice.");
687 if (flgs.has(TR_BERS_RAGE) || o_ptr->curse_flags.has(CurseTraitType::BERS_RAGE)) {
688 info[i++] = _("それは狂戦士化の発作を引き起こす。", "It makes you subject to berserker fits.");
691 if ((flgs.has(TR_TELEPORT)) || o_ptr->curse_flags.has(CurseTraitType::TELEPORT)) {
692 info[i++] = _("それはランダムなテレポートを引き起こす。", "It induces random teleportation.");
695 if ((flgs.has(TR_LOW_MELEE)) || o_ptr->curse_flags.has(CurseTraitType::LOW_MELEE)) {
696 info[i++] = _("それは攻撃を外しやすい。", "It causes you to miss blows.");
699 if ((flgs.has(TR_LOW_AC)) || o_ptr->curse_flags.has(CurseTraitType::LOW_AC)) {
700 info[i++] = _("それは攻撃を受けやすい。", "It helps your enemies' blows.");
703 if (o_ptr->curse_flags.has(CurseTraitType::VUL_CURSE) || flgs.has(TR_VUL_CURSE)) {
704 info[i++] = _("それは呪いへの抵抗力を下げる。", "It decreases your resistance to curses.");
707 if (flgs.has(TR_DOWN_SAVING)) {
708 info[i++] = _("それは魔法抵抗力を半減させる。", "It halves your magic resistance.");
711 if ((flgs.has(TR_HARD_SPELL)) || o_ptr->curse_flags.has(CurseTraitType::HARD_SPELL)) {
712 info[i++] = _("それは魔法を唱えにくくする。", "It encumbers you while spellcasting.");
715 if ((flgs.has(TR_FAST_DIGEST)) || o_ptr->curse_flags.has(CurseTraitType::FAST_DIGEST)) {
716 info[i++] = _("それはあなたの新陳代謝を速くする。", "It speeds your metabolism.");
719 if ((flgs.has(TR_DRAIN_HP)) || o_ptr->curse_flags.has(CurseTraitType::DRAIN_HP)) {
720 info[i++] = _("それはあなたの体力を吸い取る。", "It drains you.");
723 if ((flgs.has(TR_DRAIN_MANA)) || o_ptr->curse_flags.has(CurseTraitType::DRAIN_MANA)) {
724 info[i++] = _("それはあなたの魔力を吸い取る。", "It drains your mana.");
727 if (mode & SCROBJ_FAKE_OBJECT) {
728 switch (o_ptr->tval) {
729 case ItemKindType::RING:
730 switch (o_ptr->sval) {
732 info[i++] = _("それは幾つかのランダムな耐性を授ける。", "It provides some random resistances.");
734 case SV_RING_WARNING:
735 info[i++] = _("それはひとつの低級なESPを授ける事がある。", "It may provide a low rank ESP.");
741 case ItemKindType::AMULET:
742 switch (o_ptr->sval) {
743 case SV_AMULET_RESISTANCE:
744 info[i++] = _("それは毒への耐性を授ける事がある。", "It may provides resistance to poison.");
745 info[i++] = _("それはランダムな耐性を授ける事がある。", "It may provide a random resistances.");
747 case SV_AMULET_THE_MAGI:
748 info[i++] = _("それは最大で3つまでの低級なESPを授ける。", "It provides up to three low rank ESPs.");
759 if (flgs.has(TR_IGNORE_ACID) && flgs.has(TR_IGNORE_ELEC) && flgs.has(TR_IGNORE_FIRE) && flgs.has(TR_IGNORE_COLD)) {
760 info[i++] = _("それは酸・電撃・火炎・冷気では傷つかない。", "It cannot be harmed by the elements.");
762 if (flgs.has(TR_IGNORE_ACID)) {
763 info[i++] = _("それは酸では傷つかない。", "It cannot be harmed by acid.");
766 if (flgs.has(TR_IGNORE_ELEC)) {
767 info[i++] = _("それは電撃では傷つかない。", "It cannot be harmed by electricity.");
770 if (flgs.has(TR_IGNORE_FIRE)) {
771 info[i++] = _("それは火炎では傷つかない。", "It cannot be harmed by fire.");
774 if (flgs.has(TR_IGNORE_COLD)) {
775 info[i++] = _("それは冷気では傷つかない。", "It cannot be harmed by cold.");
779 if (mode & SCROBJ_FORCE_DETAIL) {
783 if (i <= trivial_info) {
789 term_get_size(&wid, &hgt);
791 if (!(mode & SCROBJ_FAKE_OBJECT)) {
792 describe_flavor(player_ptr, o_name, o_ptr, 0);
794 describe_flavor(player_ptr, o_name, o_ptr, (OD_NAME_ONLY | OD_STORE));
798 for (int k = 1; k < hgt; k++) {
802 if ((o_ptr->tval == ItemKindType::STATUE) && (o_ptr->sval == SV_PHOTO)) {
803 auto statue_r_idx = i2enum<MonsterRaceId>(o_ptr->pval);
804 auto *r_ptr = &r_info[statue_r_idx];
805 int namelen = strlen(r_ptr->name.c_str());
806 prt(format("%s: '", r_ptr->name.c_str()), 1, 15);
807 term_queue_bigchar(18 + namelen, 1, r_ptr->x_attr, r_ptr->x_char, 0, 0);
808 prt("'", 1, (use_bigtile ? 20 : 19) + namelen);
810 prt(_(" アイテムの能力:", " Item Attributes:"), 1, 15);
814 for (int j = 0; j < i; j++) {
815 prt(info[j], k++, 15);
816 if ((k == hgt - 2) && (j + 1 < i)) {
817 prt(_("-- 続く --", "-- more --"), k, 15);
825 prt(_("[何かキーを押すとゲームに戻ります]", "[Press any key to continue]"), k, 15);