1 #include "angband.h"
\r
4 * @brief アイテムに付加される可能性のある呪いを指定する。
\r
6 * @param o_ptr 呪いをかけられる装備オブジェクトの構造体参照ポインタ
\r
9 BIT_FLAGS get_curse(int power, object_type *o_ptr)
\r
11 BIT_FLAGS new_curse;
\r
15 new_curse = (1 << (randint0(MAX_CURSE)+4));
\r
18 if (!(new_curse & TRC_HEAVY_MASK)) continue;
\r
20 else if (power == 1)
\r
22 if (new_curse & TRC_SPECIAL_MASK) continue;
\r
24 else if (power == 0)
\r
26 if (new_curse & TRC_HEAVY_MASK) continue;
\r
28 if (new_curse == TRC_LOW_MELEE && !object_is_weapon(o_ptr)) continue;
\r
29 if (new_curse == TRC_LOW_AC && !object_is_armour(o_ptr)) continue;
\r
36 * @brief 装備への呪い付加判定と付加処理
\r
37 * @param chance 呪いの基本確率
\r
38 * @param heavy_chance さらに重い呪いとなる確率
\r
41 void curse_equipment(PERCENTAGE chance, PERCENTAGE heavy_chance)
\r
43 bool changed = FALSE;
\r
44 int curse_power = 0;
\r
45 BIT_FLAGS new_curse;
\r
46 BIT_FLAGS oflgs[TR_FLAG_SIZE];
\r
47 object_type *o_ptr = &inventory[INVEN_RARM + randint0(12)];
\r
48 char o_name[MAX_NLEN];
\r
50 if (randint1(100) > chance) return;
\r
52 if (!o_ptr->k_idx) return;
\r
54 object_flags(o_ptr, oflgs);
\r
56 object_desc(o_name, o_ptr, (OD_OMIT_PREFIX | OD_NAME_ONLY));
\r
58 /* Extra, biased saving throw for blessed items */
\r
59 if (have_flag(oflgs, TR_BLESSED))
\r
62 msg_format("祝福された%sは呪いを跳ね返した!", o_name,
\r
64 msg_format("Your blessed %s resist%s cursing!", o_name,
\r
67 ((o_ptr->number > 1) ? "" : "s"));
\r
68 /* Hmmm -- can we wear multiple items? If not, this is unnecessary */
\r
72 if ((randint1(100) <= heavy_chance) &&
\r
73 (object_is_artifact(o_ptr) || object_is_ego(o_ptr)))
\r
75 if (!(o_ptr->curse_flags & TRC_HEAVY_CURSE))
\r
77 o_ptr->curse_flags |= TRC_HEAVY_CURSE;
\r
78 o_ptr->curse_flags |= TRC_CURSED;
\r
83 if (!object_is_cursed(o_ptr))
\r
85 o_ptr->curse_flags |= TRC_CURSED;
\r
87 if (heavy_chance >= 50) curse_power++;
\r
89 new_curse = get_curse(curse_power, o_ptr);
\r
90 if (!(o_ptr->curse_flags & new_curse))
\r
93 o_ptr->curse_flags |= new_curse;
\r
98 msg_format(_("悪意に満ちた黒いオーラが%sをとりまいた...", "There is a malignant black aura surrounding %s..."), o_name);
\r
99 o_ptr->feeling = FEEL_NONE;
\r
101 p_ptr->update |= (PU_BONUS);
\r