3 * @brief アーティファクトの生成と管理 / Artifact code
6 * Copyright (c) 1989 James E. Wilson, Robert A. Koeneke\n
7 * This software may be copied and distributed for educational, research, and\n
8 * not for profit purposes provided that this copyright and statement are\n
9 * included in all such copies.\n
10 * 2013 Deskull rearranged comment for Doxygen.
16 #include "cmd-activate.h"
17 #include "object-curse.h"
20 static bool has_extreme_damage_rate(object_type *o_ptr);
21 static bool weakening_artifact(object_type *o_ptr);
25 * @brief 対象のオブジェクトにランダムな上位耐性を一つ付加する。/ Choose one random high resistance
26 * @details 重複の抑止はない。候補は毒、閃光、暗黒、破片、盲目、混乱、地獄、因果混乱、カオス、劣化、恐怖のいずれか。
27 * @param o_ptr 対象のオブジェクト構造体ポインタ
30 void one_high_resistance(object_type *o_ptr)
34 case 0: add_flag(o_ptr->art_flags, TR_RES_POIS); break;
35 case 1: add_flag(o_ptr->art_flags, TR_RES_LITE); break;
36 case 2: add_flag(o_ptr->art_flags, TR_RES_DARK); break;
37 case 3: add_flag(o_ptr->art_flags, TR_RES_SHARDS); break;
38 case 4: add_flag(o_ptr->art_flags, TR_RES_BLIND); break;
39 case 5: add_flag(o_ptr->art_flags, TR_RES_CONF); break;
40 case 6: add_flag(o_ptr->art_flags, TR_RES_SOUND); break;
41 case 7: add_flag(o_ptr->art_flags, TR_RES_NETHER); break;
42 case 8: add_flag(o_ptr->art_flags, TR_RES_NEXUS); break;
43 case 9: add_flag(o_ptr->art_flags, TR_RES_CHAOS); break;
44 case 10: add_flag(o_ptr->art_flags, TR_RES_DISEN); break;
45 case 11: add_flag(o_ptr->art_flags, TR_RES_FEAR); break;
50 * @brief 対象のオブジェクトに王者の指輪向けの上位耐性を一つ付加する。/ Choose one random high resistance
51 * @details 候補は閃光、暗黒、破片、盲目、混乱、地獄、因果混乱、カオス、恐怖であり
52 * 王者の指輪にあらかじめついている耐性をone_high_resistance()から除外したものである。
53 * ランダム付加そのものに重複の抑止はない。
54 * @param o_ptr 対象のオブジェクト構造体ポインタ
57 void one_lordly_high_resistance(object_type *o_ptr)
61 case 0: add_flag(o_ptr->art_flags, TR_RES_LITE); break;
62 case 1: add_flag(o_ptr->art_flags, TR_RES_DARK); break;
63 case 2: add_flag(o_ptr->art_flags, TR_RES_SHARDS); break;
64 case 3: add_flag(o_ptr->art_flags, TR_RES_BLIND); break;
65 case 4: add_flag(o_ptr->art_flags, TR_RES_CONF); break;
66 case 5: add_flag(o_ptr->art_flags, TR_RES_SOUND); break;
67 case 6: add_flag(o_ptr->art_flags, TR_RES_NETHER); break;
68 case 7: add_flag(o_ptr->art_flags, TR_RES_NEXUS); break;
69 case 8: add_flag(o_ptr->art_flags, TR_RES_CHAOS); break;
70 case 9: add_flag(o_ptr->art_flags, TR_RES_FEAR); break;
75 * @brief 対象のオブジェクトに元素耐性を一つ付加する。/ Choose one random element resistance
76 * @details 候補は火炎、冷気、電撃、酸のいずれかであり、重複の抑止はない。
77 * @param o_ptr 対象のオブジェクト構造体ポインタ
80 void one_ele_resistance(object_type *o_ptr)
84 case 0: add_flag(o_ptr->art_flags, TR_RES_ACID); break;
85 case 1: add_flag(o_ptr->art_flags, TR_RES_ELEC); break;
86 case 2: add_flag(o_ptr->art_flags, TR_RES_COLD); break;
87 case 3: add_flag(o_ptr->art_flags, TR_RES_FIRE); break;
92 * @brief 対象のオブジェクトにドラゴン装備向け元素耐性を一つ付加する。/ Choose one random element or poison resistance
93 * @details 候補は1/7の確率で毒、6/7の確率で火炎、冷気、電撃、酸のいずれか(one_ele_resistance()のコール)であり、重複の抑止はない。
94 * @param o_ptr 対象のオブジェクト構造体ポインタ
97 void one_dragon_ele_resistance(object_type *o_ptr)
101 add_flag(o_ptr->art_flags, TR_RES_POIS);
105 one_ele_resistance(o_ptr);
110 * @brief 対象のオブジェクトに弱いESPを一つ付加する。/ Choose one lower rank esp
111 * @details 候補は動物、アンデッド、悪魔、オーク、トロル、巨人、
112 * ドラゴン、人間、善良、ユニークESPのいずれかであり、重複の抑止はない。
113 * @param o_ptr 対象のオブジェクト構造体ポインタ
116 void one_low_esp(object_type *o_ptr)
118 switch (randint1(10))
120 case 1: add_flag(o_ptr->art_flags, TR_ESP_ANIMAL); break;
121 case 2: add_flag(o_ptr->art_flags, TR_ESP_UNDEAD); break;
122 case 3: add_flag(o_ptr->art_flags, TR_ESP_DEMON); break;
123 case 4: add_flag(o_ptr->art_flags, TR_ESP_ORC); break;
124 case 5: add_flag(o_ptr->art_flags, TR_ESP_TROLL); break;
125 case 6: add_flag(o_ptr->art_flags, TR_ESP_GIANT); break;
126 case 7: add_flag(o_ptr->art_flags, TR_ESP_DRAGON); break;
127 case 8: add_flag(o_ptr->art_flags, TR_ESP_HUMAN); break;
128 case 9: add_flag(o_ptr->art_flags, TR_ESP_GOOD); break;
129 case 10: add_flag(o_ptr->art_flags, TR_ESP_UNIQUE); break;
135 * @brief 対象のオブジェクトに耐性を一つ付加する。/ Choose one random resistance
136 * @details 1/3で元素耐性(one_ele_resistance())、2/3で上位耐性(one_high_resistance)
138 * @param o_ptr 対象のオブジェクト構造体ポインタ
141 void one_resistance(object_type *o_ptr)
145 one_ele_resistance(o_ptr);
149 one_high_resistance(o_ptr);
155 * @brief 対象のオブジェクトに能力を一つ付加する。/ Choose one random ability
156 * @details 候補は浮遊、永久光源+1、透明視、警告、遅消化、急回復、麻痺知らず、経験値維持のいずれか。
158 * @param o_ptr 対象のオブジェクト構造体ポインタ
161 void one_ability(object_type *o_ptr)
163 switch (randint0(10))
165 case 0: add_flag(o_ptr->art_flags, TR_LEVITATION); break;
166 case 1: add_flag(o_ptr->art_flags, TR_LITE_1); break;
167 case 2: add_flag(o_ptr->art_flags, TR_SEE_INVIS); break;
168 case 3: add_flag(o_ptr->art_flags, TR_WARNING); break;
169 case 4: add_flag(o_ptr->art_flags, TR_SLOW_DIGEST); break;
170 case 5: add_flag(o_ptr->art_flags, TR_REGEN); break;
171 case 6: add_flag(o_ptr->art_flags, TR_FREE_ACT); break;
172 case 7: add_flag(o_ptr->art_flags, TR_HOLD_EXP); break;
181 * @brief 対象のオブジェクトに発動を一つ付加する。/ Choose one random activation
182 * @details 候補多数。ランダムアーティファクトのバイアスには一切依存せず、
183 * whileループによる構造で能力的に強力なものほど確率を落としている。
184 * @param o_ptr 対象のオブジェクト構造体ポインタ
187 void one_activation(object_type *o_ptr)
192 while (randint1(100) >= chance)
194 type = randint1(255);
209 case ACT_CURE_POISON:
220 case ACT_HYPODYNAMIA_1:
235 case ACT_HYPODYNAMIA_2:
247 case ACT_CHARM_ANIMAL:
250 case ACT_SUMMON_ANIMAL:
256 case ACT_BANISH_EVIL:
259 case ACT_CHARM_UNDEAD:
260 case ACT_CHARM_OTHER:
261 case ACT_SUMMON_PHANTOM:
268 case ACT_CHARM_ANIMALS:
269 case ACT_CHARM_OTHERS:
270 case ACT_SUMMON_ELEMENTAL:
279 case ACT_DETECT_XTRA:
283 case ACT_SUMMON_UNDEAD:
284 case ACT_SUMMON_DEMON:
295 /* A type was chosen... */
296 o_ptr->xtra2 = (byte_hack)type;
297 add_flag(o_ptr->art_flags, TR_ACTIVATE);
302 * @brief ランダムアーティファクト生成中、対象のオブジェクトを呪いのアーティファクトにする経過処理。/ generation process of cursed artifact.
303 * @details pval、AC、命中、ダメージが正の場合、符号反転の上1d4だけ悪化させ、重い呪い、呪いフラグを必ず付加。
304 * 祝福を無効。確率に応じて、永遠の呪い、太古の怨念、経験値吸収、弱い呪いの継続的付加、強い呪いの継続的付加、HP吸収の呪い、
305 * MP吸収の呪い、乱テレポート、反テレポート、反魔法をつける。
306 * @attention プレイヤーの職業依存処理あり。
307 * @param o_ptr 対象のオブジェクト構造体ポインタ
310 static void curse_artifact(object_type * o_ptr)
312 if (o_ptr->pval > 0) o_ptr->pval = 0 - (o_ptr->pval + randint1(4));
313 if (o_ptr->to_a > 0) o_ptr->to_a = 0 - (o_ptr->to_a + randint1(4));
314 if (o_ptr->to_h > 0) o_ptr->to_h = 0 - (o_ptr->to_h + randint1(4));
315 if (o_ptr->to_d > 0) o_ptr->to_d = 0 - (o_ptr->to_d + randint1(4));
317 o_ptr->curse_flags |= (TRC_HEAVY_CURSE | TRC_CURSED);
318 remove_flag(o_ptr->art_flags, TR_BLESSED);
320 if (one_in_(4)) o_ptr->curse_flags |= TRC_PERMA_CURSE;
321 if (one_in_(3)) add_flag(o_ptr->art_flags, TR_TY_CURSE);
322 if (one_in_(2)) add_flag(o_ptr->art_flags, TR_AGGRAVATE);
323 if (one_in_(3)) add_flag(o_ptr->art_flags, TR_DRAIN_EXP);
324 if (one_in_(6)) add_flag(o_ptr->art_flags, TR_ADD_L_CURSE);
325 if (one_in_(9)) add_flag(o_ptr->art_flags, TR_ADD_H_CURSE);
326 if (one_in_(9)) add_flag(o_ptr->art_flags, TR_DRAIN_HP);
327 if (one_in_(9)) add_flag(o_ptr->art_flags, TR_DRAIN_MANA);
328 if (one_in_(2)) add_flag(o_ptr->art_flags, TR_TELEPORT);
329 else if (one_in_(3)) add_flag(o_ptr->art_flags, TR_NO_TELE);
331 if ((p_ptr->pclass != CLASS_WARRIOR) && (p_ptr->pclass != CLASS_ARCHER) && (p_ptr->pclass != CLASS_CAVALRY) && (p_ptr->pclass != CLASS_BERSERKER) && (p_ptr->pclass != CLASS_SMITH) && one_in_(3))
332 add_flag(o_ptr->art_flags, TR_NO_MAGIC);
336 * @brief ランダムアーティファクト生成中、対象のオブジェクトにpval能力を付加する。/ Add one pval on generation of randam artifact.
337 * @details 優先的に付加されるpvalがランダムアーティファクトバイアスに依存して存在する。
338 * 原則的候補は腕力、知力、賢さ、器用さ、耐久、魅力、探索、隠密、赤外線視力、加速。武器のみ採掘、追加攻撃も候補に入る。
339 * @attention オブジェクトのtval、svalに依存したハードコーディング処理がある。
340 * @param o_ptr 対象のオブジェクト構造体ポインタ
343 static void random_plus(object_type * o_ptr)
345 int this_type = (object_is_weapon_ammo(o_ptr) ? 23 : 19);
347 switch (o_ptr->artifact_bias)
350 if (!(have_flag(o_ptr->art_flags, TR_STR)))
352 add_flag(o_ptr->art_flags, TR_STR);
353 if (one_in_(2)) return;
356 if (!(have_flag(o_ptr->art_flags, TR_CON)))
358 add_flag(o_ptr->art_flags, TR_CON);
359 if (one_in_(2)) return;
362 if (!(have_flag(o_ptr->art_flags, TR_DEX)))
364 add_flag(o_ptr->art_flags, TR_DEX);
365 if (one_in_(2)) return;
370 if (!(have_flag(o_ptr->art_flags, TR_INT)))
372 add_flag(o_ptr->art_flags, TR_INT);
373 if (one_in_(2)) return;
375 if ((o_ptr->tval == TV_GLOVES) && !(have_flag(o_ptr->art_flags, TR_MAGIC_MASTERY)))
377 add_flag(o_ptr->art_flags, TR_MAGIC_MASTERY);
378 if (one_in_(2)) return;
383 if (!(have_flag(o_ptr->art_flags, TR_WIS)))
385 add_flag(o_ptr->art_flags, TR_WIS);
386 if (one_in_(2)) return;
391 if (!(have_flag(o_ptr->art_flags, TR_DEX)))
393 add_flag(o_ptr->art_flags, TR_DEX);
394 if (one_in_(2)) return;
397 if (!(have_flag(o_ptr->art_flags, TR_CON)))
399 add_flag(o_ptr->art_flags, TR_CON);
400 if (one_in_(2)) return;
403 if (!(have_flag(o_ptr->art_flags, TR_STR)))
405 add_flag(o_ptr->art_flags, TR_STR);
406 if (one_in_(2)) return;
411 if (!(have_flag(o_ptr->art_flags, TR_STEALTH)))
413 add_flag(o_ptr->art_flags, TR_STEALTH);
414 if (one_in_(2)) return;
416 if (!(have_flag(o_ptr->art_flags, TR_SEARCH)))
418 add_flag(o_ptr->art_flags, TR_SEARCH);
419 if (one_in_(2)) return;
424 if (!(have_flag(o_ptr->art_flags, TR_STR)))
426 add_flag(o_ptr->art_flags, TR_STR);
427 if (one_in_(2)) return;
432 if (!(have_flag(o_ptr->art_flags, TR_WIS)))
434 add_flag(o_ptr->art_flags, TR_WIS);
435 if (one_in_(2)) return;
440 if (!(have_flag(o_ptr->art_flags, TR_INT)))
442 add_flag(o_ptr->art_flags, TR_INT);
443 if (one_in_(2)) return;
448 if (!(have_flag(o_ptr->art_flags, TR_DEX)))
450 add_flag(o_ptr->art_flags, TR_DEX);
451 if (one_in_(2)) return;
456 if (!(have_flag(o_ptr->art_flags, TR_CON)))
458 add_flag(o_ptr->art_flags, TR_CON);
459 if (one_in_(2)) return;
464 if (!(have_flag(o_ptr->art_flags, TR_CHR)))
466 add_flag(o_ptr->art_flags, TR_CHR);
467 if (one_in_(2)) return;
472 if ((o_ptr->artifact_bias == BIAS_MAGE || o_ptr->artifact_bias == BIAS_PRIESTLY) && (o_ptr->tval == TV_SOFT_ARMOR) && (o_ptr->sval == SV_ROBE))
474 if (!(have_flag(o_ptr->art_flags, TR_DEC_MANA)) && one_in_(3))
476 add_flag(o_ptr->art_flags, TR_DEC_MANA);
477 if (one_in_(2)) return;
481 switch (randint1(this_type))
484 add_flag(o_ptr->art_flags, TR_STR);
485 if (!o_ptr->artifact_bias && !one_in_(13))
486 o_ptr->artifact_bias = BIAS_STR;
487 else if (!o_ptr->artifact_bias && one_in_(7))
488 o_ptr->artifact_bias = BIAS_WARRIOR;
491 add_flag(o_ptr->art_flags, TR_INT);
492 if (!o_ptr->artifact_bias && !one_in_(13))
493 o_ptr->artifact_bias = BIAS_INT;
494 else if (!o_ptr->artifact_bias && one_in_(7))
495 o_ptr->artifact_bias = BIAS_MAGE;
498 add_flag(o_ptr->art_flags, TR_WIS);
499 if (!o_ptr->artifact_bias && !one_in_(13))
500 o_ptr->artifact_bias = BIAS_WIS;
501 else if (!o_ptr->artifact_bias && one_in_(7))
502 o_ptr->artifact_bias = BIAS_PRIESTLY;
505 add_flag(o_ptr->art_flags, TR_DEX);
506 if (!o_ptr->artifact_bias && !one_in_(13))
507 o_ptr->artifact_bias = BIAS_DEX;
508 else if (!o_ptr->artifact_bias && one_in_(7))
509 o_ptr->artifact_bias = BIAS_ROGUE;
512 add_flag(o_ptr->art_flags, TR_CON);
513 if (!o_ptr->artifact_bias && !one_in_(13))
514 o_ptr->artifact_bias = BIAS_CON;
515 else if (!o_ptr->artifact_bias && one_in_(9))
516 o_ptr->artifact_bias = BIAS_RANGER;
519 add_flag(o_ptr->art_flags, TR_CHR);
520 if (!o_ptr->artifact_bias && !one_in_(13))
521 o_ptr->artifact_bias = BIAS_CHR;
524 add_flag(o_ptr->art_flags, TR_STEALTH);
525 if (!o_ptr->artifact_bias && one_in_(3))
526 o_ptr->artifact_bias = BIAS_ROGUE;
529 add_flag(o_ptr->art_flags, TR_SEARCH);
530 if (!o_ptr->artifact_bias && one_in_(9))
531 o_ptr->artifact_bias = BIAS_RANGER;
534 add_flag(o_ptr->art_flags, TR_INFRA);
537 add_flag(o_ptr->art_flags, TR_SPEED);
538 if (!o_ptr->artifact_bias && one_in_(11))
539 o_ptr->artifact_bias = BIAS_ROGUE;
542 add_flag(o_ptr->art_flags, TR_TUNNEL);
545 if (o_ptr->tval == TV_BOW) random_plus(o_ptr);
548 add_flag(o_ptr->art_flags, TR_BLOWS);
549 if (!o_ptr->artifact_bias && one_in_(11))
550 o_ptr->artifact_bias = BIAS_WARRIOR;
557 * @brief ランダムアーティファクト生成中、対象のオブジェクトに耐性を付加する。/ Add one resistance on generation of randam artifact.
558 * @details 優先的に付加される耐性がランダムアーティファクトバイアスに依存して存在する。
559 * 原則的候補は火炎、冷気、電撃、酸(以上免疫の可能性もあり)、
560 * 毒、閃光、暗黒、破片、轟音、盲目、混乱、地獄、カオス、劣化、恐怖、火オーラ、冷気オーラ、電撃オーラ、反射。
562 * @attention オブジェクトのtval、svalに依存したハードコーディング処理がある。
563 * @param o_ptr 対象のオブジェクト構造体ポインタ
566 static void random_resistance(object_type * o_ptr)
568 switch (o_ptr->artifact_bias)
571 if (!(have_flag(o_ptr->art_flags, TR_RES_ACID)))
573 add_flag(o_ptr->art_flags, TR_RES_ACID);
574 if (one_in_(2)) return;
576 if (one_in_(BIAS_LUCK) && !(have_flag(o_ptr->art_flags, TR_IM_ACID)))
578 add_flag(o_ptr->art_flags, TR_IM_ACID);
579 if (!one_in_(IM_LUCK))
581 remove_flag(o_ptr->art_flags, TR_IM_ELEC);
582 remove_flag(o_ptr->art_flags, TR_IM_COLD);
583 remove_flag(o_ptr->art_flags, TR_IM_FIRE);
585 if (one_in_(2)) return;
590 if (!(have_flag(o_ptr->art_flags, TR_RES_ELEC)))
592 add_flag(o_ptr->art_flags, TR_RES_ELEC);
593 if (one_in_(2)) return;
595 if ((o_ptr->tval >= TV_CLOAK) && (o_ptr->tval <= TV_HARD_ARMOR) &&
596 !(have_flag(o_ptr->art_flags, TR_SH_ELEC)))
598 add_flag(o_ptr->art_flags, TR_SH_ELEC);
599 if (one_in_(2)) return;
601 if (one_in_(BIAS_LUCK) && !(have_flag(o_ptr->art_flags, TR_IM_ELEC)))
603 add_flag(o_ptr->art_flags, TR_IM_ELEC);
604 if (!one_in_(IM_LUCK))
606 remove_flag(o_ptr->art_flags, TR_IM_ACID);
607 remove_flag(o_ptr->art_flags, TR_IM_COLD);
608 remove_flag(o_ptr->art_flags, TR_IM_FIRE);
611 if (one_in_(2)) return;
616 if (!(have_flag(o_ptr->art_flags, TR_RES_FIRE)))
618 add_flag(o_ptr->art_flags, TR_RES_FIRE);
619 if (one_in_(2)) return;
621 if ((o_ptr->tval >= TV_CLOAK) &&
622 (o_ptr->tval <= TV_HARD_ARMOR) &&
623 !(have_flag(o_ptr->art_flags, TR_SH_FIRE)))
625 add_flag(o_ptr->art_flags, TR_SH_FIRE);
626 if (one_in_(2)) return;
628 if (one_in_(BIAS_LUCK) &&
629 !(have_flag(o_ptr->art_flags, TR_IM_FIRE)))
631 add_flag(o_ptr->art_flags, TR_IM_FIRE);
632 if (!one_in_(IM_LUCK))
634 remove_flag(o_ptr->art_flags, TR_IM_ELEC);
635 remove_flag(o_ptr->art_flags, TR_IM_COLD);
636 remove_flag(o_ptr->art_flags, TR_IM_ACID);
638 if (one_in_(2)) return;
643 if (!(have_flag(o_ptr->art_flags, TR_RES_COLD)))
645 add_flag(o_ptr->art_flags, TR_RES_COLD);
646 if (one_in_(2)) return;
648 if ((o_ptr->tval >= TV_CLOAK) &&
649 (o_ptr->tval <= TV_HARD_ARMOR) &&
650 !(have_flag(o_ptr->art_flags, TR_SH_COLD)))
652 add_flag(o_ptr->art_flags, TR_SH_COLD);
653 if (one_in_(2)) return;
655 if (one_in_(BIAS_LUCK) && !(have_flag(o_ptr->art_flags, TR_IM_COLD)))
657 add_flag(o_ptr->art_flags, TR_IM_COLD);
658 if (!one_in_(IM_LUCK))
660 remove_flag(o_ptr->art_flags, TR_IM_ELEC);
661 remove_flag(o_ptr->art_flags, TR_IM_ACID);
662 remove_flag(o_ptr->art_flags, TR_IM_FIRE);
664 if (one_in_(2)) return;
669 if (!(have_flag(o_ptr->art_flags, TR_RES_POIS)))
671 add_flag(o_ptr->art_flags, TR_RES_POIS);
672 if (one_in_(2)) return;
677 if (!one_in_(3) && (!(have_flag(o_ptr->art_flags, TR_RES_FEAR))))
679 add_flag(o_ptr->art_flags, TR_RES_FEAR);
680 if (one_in_(2)) return;
682 if (one_in_(3) && (!(have_flag(o_ptr->art_flags, TR_NO_MAGIC))))
684 add_flag(o_ptr->art_flags, TR_NO_MAGIC);
685 if (one_in_(2)) return;
689 case BIAS_NECROMANTIC:
690 if (!(have_flag(o_ptr->art_flags, TR_RES_NETHER)))
692 add_flag(o_ptr->art_flags, TR_RES_NETHER);
693 if (one_in_(2)) return;
695 if (!(have_flag(o_ptr->art_flags, TR_RES_POIS)))
697 add_flag(o_ptr->art_flags, TR_RES_POIS);
698 if (one_in_(2)) return;
700 if (!(have_flag(o_ptr->art_flags, TR_RES_DARK)))
702 add_flag(o_ptr->art_flags, TR_RES_DARK);
703 if (one_in_(2)) return;
708 if (!(have_flag(o_ptr->art_flags, TR_RES_CHAOS)))
710 add_flag(o_ptr->art_flags, TR_RES_CHAOS);
711 if (one_in_(2)) return;
713 if (!(have_flag(o_ptr->art_flags, TR_RES_CONF)))
715 add_flag(o_ptr->art_flags, TR_RES_CONF);
716 if (one_in_(2)) return;
718 if (!(have_flag(o_ptr->art_flags, TR_RES_DISEN)))
720 add_flag(o_ptr->art_flags, TR_RES_DISEN);
721 if (one_in_(2)) return;
726 switch (randint1(42))
729 if (!one_in_(WEIRD_LUCK))
730 random_resistance(o_ptr);
733 add_flag(o_ptr->art_flags, TR_IM_ACID);
734 if (!o_ptr->artifact_bias)
735 o_ptr->artifact_bias = BIAS_ACID;
739 if (!one_in_(WEIRD_LUCK))
740 random_resistance(o_ptr);
743 add_flag(o_ptr->art_flags, TR_IM_ELEC);
744 if (!o_ptr->artifact_bias)
745 o_ptr->artifact_bias = BIAS_ELEC;
749 if (!one_in_(WEIRD_LUCK))
750 random_resistance(o_ptr);
753 add_flag(o_ptr->art_flags, TR_IM_COLD);
754 if (!o_ptr->artifact_bias)
755 o_ptr->artifact_bias = BIAS_COLD;
759 if (!one_in_(WEIRD_LUCK))
760 random_resistance(o_ptr);
763 add_flag(o_ptr->art_flags, TR_IM_FIRE);
764 if (!o_ptr->artifact_bias)
765 o_ptr->artifact_bias = BIAS_FIRE;
771 add_flag(o_ptr->art_flags, TR_RES_ACID);
772 if (!o_ptr->artifact_bias)
773 o_ptr->artifact_bias = BIAS_ACID;
778 add_flag(o_ptr->art_flags, TR_RES_ELEC);
779 if (!o_ptr->artifact_bias)
780 o_ptr->artifact_bias = BIAS_ELEC;
785 add_flag(o_ptr->art_flags, TR_RES_FIRE);
786 if (!o_ptr->artifact_bias)
787 o_ptr->artifact_bias = BIAS_FIRE;
792 add_flag(o_ptr->art_flags, TR_RES_COLD);
793 if (!o_ptr->artifact_bias)
794 o_ptr->artifact_bias = BIAS_COLD;
798 add_flag(o_ptr->art_flags, TR_RES_POIS);
799 if (!o_ptr->artifact_bias && !one_in_(4))
800 o_ptr->artifact_bias = BIAS_POIS;
801 else if (!o_ptr->artifact_bias && one_in_(2))
802 o_ptr->artifact_bias = BIAS_NECROMANTIC;
803 else if (!o_ptr->artifact_bias && one_in_(2))
804 o_ptr->artifact_bias = BIAS_ROGUE;
808 add_flag(o_ptr->art_flags, TR_RES_FEAR);
809 if (!o_ptr->artifact_bias && one_in_(3))
810 o_ptr->artifact_bias = BIAS_WARRIOR;
813 add_flag(o_ptr->art_flags, TR_RES_LITE);
816 add_flag(o_ptr->art_flags, TR_RES_DARK);
820 add_flag(o_ptr->art_flags, TR_RES_BLIND);
824 add_flag(o_ptr->art_flags, TR_RES_CONF);
825 if (!o_ptr->artifact_bias && one_in_(6))
826 o_ptr->artifact_bias = BIAS_CHAOS;
830 add_flag(o_ptr->art_flags, TR_RES_SOUND);
834 add_flag(o_ptr->art_flags, TR_RES_SHARDS);
838 add_flag(o_ptr->art_flags, TR_RES_NETHER);
839 if (!o_ptr->artifact_bias && one_in_(3))
840 o_ptr->artifact_bias = BIAS_NECROMANTIC;
844 add_flag(o_ptr->art_flags, TR_RES_NEXUS);
848 add_flag(o_ptr->art_flags, TR_RES_CHAOS);
849 if (!o_ptr->artifact_bias && one_in_(2))
850 o_ptr->artifact_bias = BIAS_CHAOS;
854 add_flag(o_ptr->art_flags, TR_RES_DISEN);
857 if (o_ptr->tval >= TV_CLOAK && o_ptr->tval <= TV_HARD_ARMOR)
858 add_flag(o_ptr->art_flags, TR_SH_ELEC);
860 random_resistance(o_ptr);
861 if (!o_ptr->artifact_bias)
862 o_ptr->artifact_bias = BIAS_ELEC;
865 if (o_ptr->tval >= TV_CLOAK && o_ptr->tval <= TV_HARD_ARMOR)
866 add_flag(o_ptr->art_flags, TR_SH_FIRE);
868 random_resistance(o_ptr);
869 if (!o_ptr->artifact_bias)
870 o_ptr->artifact_bias = BIAS_FIRE;
873 if (o_ptr->tval == TV_SHIELD || o_ptr->tval == TV_CLOAK ||
874 o_ptr->tval == TV_HELM || o_ptr->tval == TV_HARD_ARMOR)
875 add_flag(o_ptr->art_flags, TR_REFLECT);
877 random_resistance(o_ptr);
880 if (o_ptr->tval >= TV_CLOAK && o_ptr->tval <= TV_HARD_ARMOR)
881 add_flag(o_ptr->art_flags, TR_SH_COLD);
883 random_resistance(o_ptr);
884 if (!o_ptr->artifact_bias)
885 o_ptr->artifact_bias = BIAS_COLD;
892 * @brief ランダムアーティファクト生成中、対象のオブジェクトにその他特性を付加する。/ Add one misc flag on generation of randam artifact.
893 * @details 優先的に付加される耐性がランダムアーティファクトバイアスに依存して存在する。
894 * 原則的候補は各種能力維持、永久光源+1、麻痺知らず、経験値維持、浮遊、透明視、急回復、遅消化、
895 * 乱テレポート、反魔法、反テレポート、警告、テレパシー、各種ESP、一部装備に殺戮修正。
896 * @attention オブジェクトのtval、svalに依存したハードコーディング処理がある。
897 * @param o_ptr 対象のオブジェクト構造体ポインタ
900 static void random_misc(object_type * o_ptr)
902 switch (o_ptr->artifact_bias)
905 if (!(have_flag(o_ptr->art_flags, TR_SUST_CON)))
907 add_flag(o_ptr->art_flags, TR_SUST_CON);
908 if (one_in_(2)) return;
913 if (!(have_flag(o_ptr->art_flags, TR_SUST_STR)))
915 add_flag(o_ptr->art_flags, TR_SUST_STR);
916 if (one_in_(2)) return;
921 if (!(have_flag(o_ptr->art_flags, TR_SUST_WIS)))
923 add_flag(o_ptr->art_flags, TR_SUST_WIS);
924 if (one_in_(2)) return;
929 if (!(have_flag(o_ptr->art_flags, TR_SUST_INT)))
931 add_flag(o_ptr->art_flags, TR_SUST_INT);
932 if (one_in_(2)) return;
937 if (!(have_flag(o_ptr->art_flags, TR_SUST_DEX)))
939 add_flag(o_ptr->art_flags, TR_SUST_DEX);
940 if (one_in_(2)) return;
945 if (!(have_flag(o_ptr->art_flags, TR_SUST_CON)))
947 add_flag(o_ptr->art_flags, TR_SUST_CON);
948 if (one_in_(2)) return;
953 if (!(have_flag(o_ptr->art_flags, TR_SUST_CHR)))
955 add_flag(o_ptr->art_flags, TR_SUST_CHR);
956 if (one_in_(2)) return;
961 if (!(have_flag(o_ptr->art_flags, TR_TELEPORT)))
963 add_flag(o_ptr->art_flags, TR_TELEPORT);
964 if (one_in_(2)) return;
969 if (!(have_flag(o_ptr->art_flags, TR_LITE_1)))
971 add_flag(o_ptr->art_flags, TR_LITE_1); /* Freebie */
976 switch (randint1(33))
979 add_flag(o_ptr->art_flags, TR_SUST_STR);
980 if (!o_ptr->artifact_bias)
981 o_ptr->artifact_bias = BIAS_STR;
984 add_flag(o_ptr->art_flags, TR_SUST_INT);
985 if (!o_ptr->artifact_bias)
986 o_ptr->artifact_bias = BIAS_INT;
989 add_flag(o_ptr->art_flags, TR_SUST_WIS);
990 if (!o_ptr->artifact_bias)
991 o_ptr->artifact_bias = BIAS_WIS;
994 add_flag(o_ptr->art_flags, TR_SUST_DEX);
995 if (!o_ptr->artifact_bias)
996 o_ptr->artifact_bias = BIAS_DEX;
999 add_flag(o_ptr->art_flags, TR_SUST_CON);
1000 if (!o_ptr->artifact_bias)
1001 o_ptr->artifact_bias = BIAS_CON;
1004 add_flag(o_ptr->art_flags, TR_SUST_CHR);
1005 if (!o_ptr->artifact_bias)
1006 o_ptr->artifact_bias = BIAS_CHR;
1011 add_flag(o_ptr->art_flags, TR_FREE_ACT);
1014 add_flag(o_ptr->art_flags, TR_HOLD_EXP);
1015 if (!o_ptr->artifact_bias && one_in_(5))
1016 o_ptr->artifact_bias = BIAS_PRIESTLY;
1017 else if (!o_ptr->artifact_bias && one_in_(6))
1018 o_ptr->artifact_bias = BIAS_NECROMANTIC;
1022 add_flag(o_ptr->art_flags, TR_LITE_1);
1026 add_flag(o_ptr->art_flags, TR_LEVITATION);
1031 add_flag(o_ptr->art_flags, TR_SEE_INVIS);
1035 add_flag(o_ptr->art_flags, TR_SLOW_DIGEST);
1039 add_flag(o_ptr->art_flags, TR_REGEN);
1042 add_flag(o_ptr->art_flags, TR_TELEPORT);
1047 if (object_is_armour(o_ptr))
1051 o_ptr->to_a = 4 + randint1(11);
1060 add_flag(o_ptr->art_flags, TR_SHOW_MODS);
1061 bonus_h = 4 + (HIT_PROB)(randint1(11));
1062 bonus_d = 4 + (HIT_POINT)(randint1(11));
1063 if ((o_ptr->tval != TV_SWORD) && (o_ptr->tval != TV_POLEARM) && (o_ptr->tval != TV_HAFTED) && (o_ptr->tval != TV_DIGGING) && (o_ptr->tval != TV_GLOVES) && (o_ptr->tval != TV_RING))
1068 o_ptr->to_h += bonus_h;
1069 o_ptr->to_d += bonus_d;
1073 add_flag(o_ptr->art_flags, TR_NO_MAGIC);
1076 add_flag(o_ptr->art_flags, TR_NO_TELE);
1079 add_flag(o_ptr->art_flags, TR_WARNING);
1083 switch (randint1(3))
1086 add_flag(o_ptr->art_flags, TR_ESP_EVIL);
1087 if (!o_ptr->artifact_bias && one_in_(3))
1088 o_ptr->artifact_bias = BIAS_LAW;
1091 add_flag(o_ptr->art_flags, TR_ESP_NONLIVING);
1092 if (!o_ptr->artifact_bias && one_in_(3))
1093 o_ptr->artifact_bias = BIAS_MAGE;
1096 add_flag(o_ptr->art_flags, TR_TELEPATHY);
1097 if (!o_ptr->artifact_bias && one_in_(9))
1098 o_ptr->artifact_bias = BIAS_MAGE;
1106 int n = randint1(3);
1108 idx[0] = randint1(10);
1110 idx[1] = randint1(9);
1111 if (idx[1] >= idx[0]) idx[1]++;
1113 idx[2] = randint1(8);
1114 if (idx[2] >= idx[0]) idx[2]++;
1115 if (idx[2] >= idx[1]) idx[2]++;
1117 while (n--) switch (idx[n])
1120 add_flag(o_ptr->art_flags, TR_ESP_ANIMAL);
1121 if (!o_ptr->artifact_bias && one_in_(4))
1122 o_ptr->artifact_bias = BIAS_RANGER;
1125 add_flag(o_ptr->art_flags, TR_ESP_UNDEAD);
1126 if (!o_ptr->artifact_bias && one_in_(3))
1127 o_ptr->artifact_bias = BIAS_PRIESTLY;
1128 else if (!o_ptr->artifact_bias && one_in_(6))
1129 o_ptr->artifact_bias = BIAS_NECROMANTIC;
1132 add_flag(o_ptr->art_flags, TR_ESP_DEMON);
1135 add_flag(o_ptr->art_flags, TR_ESP_ORC);
1138 add_flag(o_ptr->art_flags, TR_ESP_TROLL);
1141 add_flag(o_ptr->art_flags, TR_ESP_GIANT);
1144 add_flag(o_ptr->art_flags, TR_ESP_DRAGON);
1147 add_flag(o_ptr->art_flags, TR_ESP_HUMAN);
1148 if (!o_ptr->artifact_bias && one_in_(6))
1149 o_ptr->artifact_bias = BIAS_ROGUE;
1152 add_flag(o_ptr->art_flags, TR_ESP_GOOD);
1153 if (!o_ptr->artifact_bias && one_in_(3))
1154 o_ptr->artifact_bias = BIAS_LAW;
1157 add_flag(o_ptr->art_flags, TR_ESP_UNIQUE);
1158 if (!o_ptr->artifact_bias && one_in_(3))
1159 o_ptr->artifact_bias = BIAS_LAW;
1168 * @brief ランダムアーティファクト生成中、対象のオブジェクトにスレイ効果を付加する。/ Add one slaying on generation of randam artifact.
1169 * @details 優先的に付加される耐性がランダムアーティファクトバイアスに依存して存在する。
1170 * 原則的候補は強力射、高速射、混沌効果、吸血効果、祝福、投擲しやすい、焼棄、凍結、電撃、溶解、毒殺、
1171 * 動物スレイ、邪悪スレイ、悪魔スレイ、不死スレイ、オークスレイ、トロルスレイ、巨人スレイ、ドラゴンスレイ、
1172 * *ドラゴンスレイ*、人間スレイ、切れ味、地震、理力。
1173 * @attention オブジェクトのtval、svalに依存したハードコーディング処理がある。
1174 * @param o_ptr 対象のオブジェクト構造体ポインタ
1177 static void random_slay(object_type *o_ptr)
1179 if (o_ptr->tval == TV_BOW)
1181 switch (randint1(6))
1186 add_flag(o_ptr->art_flags, TR_XTRA_MIGHT);
1187 if (!one_in_(7)) remove_flag(o_ptr->art_flags, TR_XTRA_SHOTS);
1188 if (!o_ptr->artifact_bias && one_in_(9))
1189 o_ptr->artifact_bias = BIAS_RANGER;
1192 add_flag(o_ptr->art_flags, TR_XTRA_SHOTS);
1193 if (!one_in_(7)) remove_flag(o_ptr->art_flags, TR_XTRA_MIGHT);
1194 if (!o_ptr->artifact_bias && one_in_(9))
1195 o_ptr->artifact_bias = BIAS_RANGER;
1202 switch (o_ptr->artifact_bias)
1205 if (!(have_flag(o_ptr->art_flags, TR_CHAOTIC)))
1207 add_flag(o_ptr->art_flags, TR_CHAOTIC);
1208 if (one_in_(2)) return;
1213 if((o_ptr->tval == TV_SWORD || o_ptr->tval == TV_POLEARM) &&
1214 !(have_flag(o_ptr->art_flags, TR_BLESSED)))
1216 /* A free power for "priestly" random artifacts */
1217 add_flag(o_ptr->art_flags, TR_BLESSED);
1221 case BIAS_NECROMANTIC:
1222 if (!(have_flag(o_ptr->art_flags, TR_VAMPIRIC)))
1224 add_flag(o_ptr->art_flags, TR_VAMPIRIC);
1225 if (one_in_(2)) return;
1227 if (!(have_flag(o_ptr->art_flags, TR_BRAND_POIS)) && one_in_(2))
1229 add_flag(o_ptr->art_flags, TR_BRAND_POIS);
1230 if (one_in_(2)) return;
1235 if (!(have_flag(o_ptr->art_flags, TR_SLAY_ANIMAL)))
1237 add_flag(o_ptr->art_flags, TR_SLAY_ANIMAL);
1238 if (one_in_(2)) return;
1243 if ((((o_ptr->tval == TV_SWORD) && (o_ptr->sval == SV_DAGGER)) ||
1244 ((o_ptr->tval == TV_POLEARM) && (o_ptr->sval == SV_SPEAR))) &&
1245 !(have_flag(o_ptr->art_flags, TR_THROW)))
1247 /* Free power for rogues... */
1248 add_flag(o_ptr->art_flags, TR_THROW);
1250 if (!(have_flag(o_ptr->art_flags, TR_BRAND_POIS)))
1252 add_flag(o_ptr->art_flags, TR_BRAND_POIS);
1253 if (one_in_(2)) return;
1258 if (!(have_flag(o_ptr->art_flags, TR_BRAND_POIS)))
1260 add_flag(o_ptr->art_flags, TR_BRAND_POIS);
1261 if (one_in_(2)) return;
1266 if (!(have_flag(o_ptr->art_flags, TR_BRAND_FIRE)))
1268 add_flag(o_ptr->art_flags, TR_BRAND_FIRE);
1269 if (one_in_(2)) return;
1274 if (!(have_flag(o_ptr->art_flags, TR_BRAND_COLD)))
1276 add_flag(o_ptr->art_flags, TR_BRAND_COLD);
1277 if (one_in_(2)) return;
1282 if (!(have_flag(o_ptr->art_flags, TR_BRAND_ELEC)))
1284 add_flag(o_ptr->art_flags, TR_BRAND_ELEC);
1285 if (one_in_(2)) return;
1290 if (!(have_flag(o_ptr->art_flags, TR_BRAND_ACID)))
1292 add_flag(o_ptr->art_flags, TR_BRAND_ACID);
1293 if (one_in_(2)) return;
1298 if (!(have_flag(o_ptr->art_flags, TR_SLAY_EVIL)))
1300 add_flag(o_ptr->art_flags, TR_SLAY_EVIL);
1301 if (one_in_(2)) return;
1303 if (!(have_flag(o_ptr->art_flags, TR_SLAY_UNDEAD)))
1305 add_flag(o_ptr->art_flags, TR_SLAY_UNDEAD);
1306 if (one_in_(2)) return;
1308 if (!(have_flag(o_ptr->art_flags, TR_SLAY_DEMON)))
1310 add_flag(o_ptr->art_flags, TR_SLAY_DEMON);
1311 if (one_in_(2)) return;
1316 switch (randint1(36))
1322 add_flag(o_ptr->art_flags, TR_KILL_ANIMAL);
1326 add_flag(o_ptr->art_flags, TR_SLAY_ANIMAL);
1333 add_flag(o_ptr->art_flags, TR_KILL_EVIL);
1337 add_flag(o_ptr->art_flags, TR_SLAY_EVIL);
1339 if (!o_ptr->artifact_bias && one_in_(2))
1340 o_ptr->artifact_bias = BIAS_LAW;
1341 else if (!o_ptr->artifact_bias && one_in_(9))
1342 o_ptr->artifact_bias = BIAS_PRIESTLY;
1348 add_flag(o_ptr->art_flags, TR_KILL_UNDEAD);
1352 add_flag(o_ptr->art_flags, TR_SLAY_UNDEAD);
1354 if (!o_ptr->artifact_bias && one_in_(9))
1355 o_ptr->artifact_bias = BIAS_PRIESTLY;
1361 add_flag(o_ptr->art_flags, TR_KILL_DEMON);
1365 add_flag(o_ptr->art_flags, TR_SLAY_DEMON);
1367 if (!o_ptr->artifact_bias && one_in_(9))
1368 o_ptr->artifact_bias = BIAS_PRIESTLY;
1374 add_flag(o_ptr->art_flags, TR_KILL_ORC);
1378 add_flag(o_ptr->art_flags, TR_SLAY_ORC);
1385 add_flag(o_ptr->art_flags, TR_KILL_TROLL);
1389 add_flag(o_ptr->art_flags, TR_SLAY_TROLL);
1396 add_flag(o_ptr->art_flags, TR_KILL_GIANT);
1400 add_flag(o_ptr->art_flags, TR_SLAY_GIANT);
1405 add_flag(o_ptr->art_flags, TR_SLAY_DRAGON);
1408 add_flag(o_ptr->art_flags, TR_KILL_DRAGON);
1412 if (o_ptr->tval == TV_SWORD)
1414 add_flag(o_ptr->art_flags, TR_VORPAL);
1415 if (!o_ptr->artifact_bias && one_in_(9))
1416 o_ptr->artifact_bias = BIAS_WARRIOR;
1422 add_flag(o_ptr->art_flags, TR_IMPACT);
1426 add_flag(o_ptr->art_flags, TR_BRAND_FIRE);
1427 if (!o_ptr->artifact_bias)
1428 o_ptr->artifact_bias = BIAS_FIRE;
1432 add_flag(o_ptr->art_flags, TR_BRAND_COLD);
1433 if (!o_ptr->artifact_bias)
1434 o_ptr->artifact_bias = BIAS_COLD;
1438 add_flag(o_ptr->art_flags, TR_BRAND_ELEC);
1439 if (!o_ptr->artifact_bias)
1440 o_ptr->artifact_bias = BIAS_ELEC;
1444 add_flag(o_ptr->art_flags, TR_BRAND_ACID);
1445 if (!o_ptr->artifact_bias)
1446 o_ptr->artifact_bias = BIAS_ACID;
1450 add_flag(o_ptr->art_flags, TR_BRAND_POIS);
1451 if (!o_ptr->artifact_bias && !one_in_(3))
1452 o_ptr->artifact_bias = BIAS_POIS;
1453 else if (!o_ptr->artifact_bias && one_in_(6))
1454 o_ptr->artifact_bias = BIAS_NECROMANTIC;
1455 else if (!o_ptr->artifact_bias)
1456 o_ptr->artifact_bias = BIAS_ROGUE;
1459 add_flag(o_ptr->art_flags, TR_VAMPIRIC);
1460 if (!o_ptr->artifact_bias)
1461 o_ptr->artifact_bias = BIAS_NECROMANTIC;
1464 add_flag(o_ptr->art_flags, TR_FORCE_WEAPON);
1465 if (!o_ptr->artifact_bias)
1466 o_ptr->artifact_bias = (one_in_(2) ? BIAS_MAGE : BIAS_PRIESTLY);
1472 add_flag(o_ptr->art_flags, TR_KILL_HUMAN);
1476 add_flag(o_ptr->art_flags, TR_SLAY_HUMAN);
1480 add_flag(o_ptr->art_flags, TR_CHAOTIC);
1481 if (!o_ptr->artifact_bias)
1482 o_ptr->artifact_bias = BIAS_CHAOS;
1488 * @brief ランダムアーティファクト生成中、対象のオブジェクトにバイアスに依存した発動を与える。/ Add one activaton of randam artifact depend on bias.
1489 * @details バイアスが無い場合、一部のバイアスの確率によっては one_ability() に処理が移行する。
1490 * @param o_ptr 対象のオブジェクト構造体ポインタ
1493 static void give_activation_power(object_type *o_ptr)
1495 int type = 0, chance = 0;
1497 switch (o_ptr->artifact_bias)
1502 type = ACT_BO_ELEC_1;
1504 else if (!one_in_(5))
1506 type = ACT_BA_ELEC_2;
1510 type = ACT_BA_ELEC_3;
1516 type = ACT_BA_POIS_1;
1523 type = ACT_BO_FIRE_1;
1525 else if (!one_in_(5))
1527 type = ACT_BA_FIRE_1;
1531 type = ACT_BA_FIRE_2;
1539 type = ACT_BO_COLD_1;
1540 else if (!one_in_(3))
1541 type = ACT_BA_COLD_1;
1542 else if (!one_in_(3))
1543 type = ACT_BA_COLD_2;
1545 type = ACT_BA_COLD_3;
1551 type = ACT_SUMMON_DEMON;
1553 type = ACT_CALL_CHAOS;
1560 type = ACT_CHARM_UNDEAD;
1561 else if (one_in_(12))
1562 type = ACT_BANISH_EVIL;
1563 else if (one_in_(11))
1564 type = ACT_DISP_EVIL;
1565 else if (one_in_(10))
1566 type = ACT_PROT_EVIL;
1567 else if (one_in_(9))
1568 type = ACT_CURE_1000;
1569 else if (one_in_(8))
1570 type = ACT_CURE_700;
1571 else if (one_in_(7))
1572 type = ACT_REST_ALL;
1573 else if (one_in_(6))
1574 type = ACT_REST_EXP;
1579 case BIAS_NECROMANTIC:
1583 else if (one_in_(13))
1584 type = ACT_DISP_GOOD;
1585 else if (one_in_(9))
1586 type = ACT_MASS_GENO;
1587 else if (one_in_(8))
1588 type = ACT_GENOCIDE;
1589 else if (one_in_(13))
1590 type = ACT_SUMMON_UNDEAD;
1591 else if (one_in_(9))
1593 else if (one_in_(6))
1594 type = ACT_CHARM_UNDEAD;
1602 type = ACT_BANISH_EVIL;
1603 else if (one_in_(4))
1604 type = ACT_DISP_EVIL;
1606 type = ACT_PROT_EVIL;
1613 else if (one_in_(4))
1615 else if (one_in_(3))
1616 type = ACT_DETECT_ALL;
1617 else if (one_in_(8))
1620 type = ACT_ID_PLAIN;
1626 type = ACT_SUMMON_ELEMENTAL;
1627 else if (one_in_(10))
1628 type = ACT_SUMMON_PHANTOM;
1629 else if (one_in_(5))
1630 type = ACT_RUNE_EXPLO;
1646 type = ACT_CHARM_ANIMALS;
1647 else if (one_in_(7))
1648 type = ACT_SUMMON_ANIMAL;
1649 else if (one_in_(6))
1650 type = ACT_CHARM_ANIMAL;
1651 else if (one_in_(4))
1652 type = ACT_RESIST_ALL;
1653 else if (one_in_(3))
1656 type = ACT_CURE_POISON;
1660 if (!type || (randint1(100) >= chance))
1662 one_activation(o_ptr);
1666 /* A type was chosen... */
1667 o_ptr->xtra2 = (byte_hack)type;
1668 add_flag(o_ptr->art_flags, TR_ACTIVATE);
1673 * @brief ランダムアーティファクト生成中、対象のオブジェクトに名前を与える。/ Set name of randomartifact.
1674 * @details 確率によって、シンダリン銘、漢字銘、固定名のいずれか一つが与えられる。
1675 * @param o_ptr 処理中のアイテム参照ポインタ
1676 * @param return_name 名前を返すための文字列参照ポインタ
1677 * @param armour 対象のオブジェクトが防具が否か
1678 * @param power 銘の基準となるオブジェクトの価値レベル(0=呪い、1=低位、2=中位、3以上=高位)
1681 static void get_random_name(object_type *o_ptr, char *return_name, bool armour, int power)
1683 PERCENTAGE prob = randint1(100);
1685 if (prob <= SINDARIN_NAME)
1687 get_table_sindarin(return_name);
1689 else if (prob <= TABLE_NAME)
1691 get_table_name(return_name);
1703 filename = _("a_cursed_j.txt", "a_cursed.txt");
1706 filename = _("a_low_j.txt", "a_low.txt");
1709 filename = _("a_med_j.txt", "a_med.txt");
1712 filename = _("a_high_j.txt", "a_high.txt");
1719 filename = _("w_cursed_j.txt", "w_cursed.txt");
1722 filename = _("w_low_j.txt", "w_low.txt");
1725 filename = _("w_med_j.txt", "w_med.txt");
1728 filename = _("w_high_j.txt", "w_high.txt");
1732 (void)get_rnd_line(filename, o_ptr->artifact_bias, return_name);
1734 if (return_name[0] == 0) get_table_name(return_name);
1740 * @brief ランダムアーティファクト生成のメインルーチン
1741 * @details 既に生成が済んでいるオブジェクトの構造体を、アーティファクトとして強化する。
1742 * @param o_ptr 対象のオブジェクト構造体ポインタ
1743 * @param a_scroll アーティファクト生成の巻物上の処理。呪いのアーティファクトが生成対象外となる。
1744 * @return 常にTRUE(1)を返す
1746 bool create_artifact(object_type *o_ptr, bool a_scroll)
1748 GAME_TEXT new_name[1024];
1749 PARAMETER_VALUE has_pval = 0;
1750 int powers = randint1(5) + 1;
1752 int max_type = (object_is_weapon_ammo(o_ptr) ? 7 : 5);
1755 bool a_cursed = FALSE;
1756 int warrior_artifact_bias = 0;
1759 /* Reset artifact bias */
1760 o_ptr->artifact_bias = 0;
1762 /* Nuke enchantments */
1766 for (i = 0; i < TR_FLAG_SIZE; i++)
1767 o_ptr->art_flags[i] |= k_info[o_ptr->k_idx].flags[i];
1769 if (o_ptr->pval) has_pval = TRUE;
1771 if (a_scroll && one_in_(4))
1773 switch (p_ptr->pclass)
1776 case CLASS_BERSERKER:
1781 o_ptr->artifact_bias = BIAS_WARRIOR;
1784 case CLASS_HIGH_MAGE:
1785 case CLASS_SORCERER:
1786 case CLASS_MAGIC_EATER:
1787 case CLASS_BLUE_MAGE:
1788 o_ptr->artifact_bias = BIAS_MAGE;
1791 o_ptr->artifact_bias = BIAS_PRIESTLY;
1795 o_ptr->artifact_bias = BIAS_ROGUE;
1796 warrior_artifact_bias = 25;
1800 o_ptr->artifact_bias = BIAS_RANGER;
1801 warrior_artifact_bias = 30;
1804 o_ptr->artifact_bias = BIAS_PRIESTLY;
1805 warrior_artifact_bias = 40;
1807 case CLASS_WARRIOR_MAGE:
1808 case CLASS_RED_MAGE:
1809 o_ptr->artifact_bias = BIAS_MAGE;
1810 warrior_artifact_bias = 40;
1812 case CLASS_CHAOS_WARRIOR:
1813 o_ptr->artifact_bias = BIAS_CHAOS;
1814 warrior_artifact_bias = 40;
1817 case CLASS_FORCETRAINER:
1818 o_ptr->artifact_bias = BIAS_PRIESTLY;
1820 case CLASS_MINDCRAFTER:
1822 if (randint1(5) > 2) o_ptr->artifact_bias = BIAS_PRIESTLY;
1825 if (randint1(5) > 2) o_ptr->artifact_bias = BIAS_WARRIOR;
1827 case CLASS_IMITATOR:
1828 if (randint1(2) > 1) o_ptr->artifact_bias = BIAS_RANGER;
1830 case CLASS_BEASTMASTER:
1831 o_ptr->artifact_bias = BIAS_CHR;
1832 warrior_artifact_bias = 50;
1834 case CLASS_MIRROR_MASTER:
1835 if (randint1(4) > 1)
1837 o_ptr->artifact_bias = BIAS_MAGE;
1841 o_ptr->artifact_bias = BIAS_ROGUE;
1847 if (a_scroll && (randint1(100) <= warrior_artifact_bias))
1848 o_ptr->artifact_bias = BIAS_WARRIOR;
1850 strcpy(new_name, "");
1852 if (!a_scroll && one_in_(A_CURSED))
1854 if (((o_ptr->tval == TV_AMULET) || (o_ptr->tval == TV_RING)) && object_is_cursed(o_ptr))
1857 while (one_in_(powers) || one_in_(7) || one_in_(10))
1860 if (!a_cursed && one_in_(WEIRD_LUCK))
1863 if (a_cursed) powers /= 2;
1865 max_powers = powers;
1869 switch (randint1(max_type))
1876 if (one_in_(2) && object_is_weapon_ammo(o_ptr) && (o_ptr->tval != TV_BOW))
1878 if (a_cursed && !one_in_(13)) break;
1881 if (one_in_(o_ptr->ds+4)) o_ptr->ds++;
1885 if (one_in_(o_ptr->dd+1)) o_ptr->dd++;
1889 random_resistance(o_ptr);
1898 if (p_ptr->wizard) msg_print("Switch error in create_artifact!");
1905 if (have_flag(o_ptr->art_flags, TR_BLOWS))
1907 o_ptr->pval = randint1(2);
1908 if ((o_ptr->tval == TV_SWORD) && (o_ptr->sval == SV_HAYABUSA))
1917 while (o_ptr->pval < randint1(5) || one_in_(o_ptr->pval));
1920 if ((o_ptr->pval > 4) && !one_in_(WEIRD_LUCK))
1925 /* give it some plusses... */
1926 if (object_is_armour(o_ptr))
1927 o_ptr->to_a += randint1(o_ptr->to_a > 19 ? 1 : 20 - o_ptr->to_a);
1928 else if (object_is_weapon_ammo(o_ptr))
1930 o_ptr->to_h += randint1(o_ptr->to_h > 19 ? 1 : 20 - o_ptr->to_h);
1931 o_ptr->to_d += randint1(o_ptr->to_d > 19 ? 1 : 20 - o_ptr->to_d);
1932 if ((have_flag(o_ptr->art_flags, TR_WIS)) && (o_ptr->pval > 0)) add_flag(o_ptr->art_flags, TR_BLESSED);
1935 /* Just to be sure */
1936 add_flag(o_ptr->art_flags, TR_IGNORE_ACID);
1937 add_flag(o_ptr->art_flags, TR_IGNORE_ELEC);
1938 add_flag(o_ptr->art_flags, TR_IGNORE_FIRE);
1939 add_flag(o_ptr->art_flags, TR_IGNORE_COLD);
1941 total_flags = flag_cost(o_ptr, o_ptr->pval);
1943 if (a_cursed) curse_artifact(o_ptr);
1946 one_in_(object_is_armour(o_ptr) ? ACTIVATION_CHANCE * 2 : ACTIVATION_CHANCE))
1949 give_activation_power(o_ptr);
1952 if (object_is_armour(o_ptr))
1954 while ((o_ptr->to_d+o_ptr->to_h) > 20)
1956 if (one_in_(o_ptr->to_d) && one_in_(o_ptr->to_h)) break;
1957 o_ptr->to_d -= (HIT_POINT)randint0(3);
1958 o_ptr->to_h -= (HIT_PROB)randint0(3);
1960 while ((o_ptr->to_d+o_ptr->to_h) > 10)
1962 if (one_in_(o_ptr->to_d) || one_in_(o_ptr->to_h)) break;
1963 o_ptr->to_d -= (HIT_POINT)randint0(3);
1964 o_ptr->to_h -= (HIT_PROB)randint0(3);
1968 if (((o_ptr->artifact_bias == BIAS_MAGE) || (o_ptr->artifact_bias == BIAS_INT)) && (o_ptr->tval == TV_GLOVES)) add_flag(o_ptr->art_flags, TR_FREE_ACT);
1970 if ((o_ptr->tval == TV_SWORD) && (o_ptr->sval == SV_DOKUBARI))
1974 remove_flag(o_ptr->art_flags, TR_BLOWS);
1975 remove_flag(o_ptr->art_flags, TR_FORCE_WEAPON);
1976 remove_flag(o_ptr->art_flags, TR_SLAY_ANIMAL);
1977 remove_flag(o_ptr->art_flags, TR_SLAY_EVIL);
1978 remove_flag(o_ptr->art_flags, TR_SLAY_UNDEAD);
1979 remove_flag(o_ptr->art_flags, TR_SLAY_DEMON);
1980 remove_flag(o_ptr->art_flags, TR_SLAY_ORC);
1981 remove_flag(o_ptr->art_flags, TR_SLAY_TROLL);
1982 remove_flag(o_ptr->art_flags, TR_SLAY_GIANT);
1983 remove_flag(o_ptr->art_flags, TR_SLAY_DRAGON);
1984 remove_flag(o_ptr->art_flags, TR_KILL_DRAGON);
1985 remove_flag(o_ptr->art_flags, TR_SLAY_HUMAN);
1986 remove_flag(o_ptr->art_flags, TR_VORPAL);
1987 remove_flag(o_ptr->art_flags, TR_BRAND_POIS);
1988 remove_flag(o_ptr->art_flags, TR_BRAND_ACID);
1989 remove_flag(o_ptr->art_flags, TR_BRAND_ELEC);
1990 remove_flag(o_ptr->art_flags, TR_BRAND_FIRE);
1991 remove_flag(o_ptr->art_flags, TR_BRAND_COLD);
1994 if (!object_is_weapon_ammo(o_ptr))
1997 if (a_cursed) power_level = 0;
1998 else if (total_flags < 15000) power_level = 1;
1999 else if (total_flags < 35000) power_level = 2;
2000 else power_level = 3;
2006 if (a_cursed) power_level = 0;
2007 else if (total_flags < 20000) power_level = 1;
2008 else if (total_flags < 45000) power_level = 2;
2009 else power_level = 3;
2013 while (has_extreme_damage_rate(o_ptr) && !one_in_(SWORDFISH_LUCK))
2015 weakening_artifact(o_ptr);
2020 GAME_TEXT dummy_name[MAX_NLEN] = "";
2021 concptr ask_msg = _("このアーティファクトを何と名付けますか?", "What do you want to call the artifact? ");
2023 object_aware(o_ptr);
2024 object_known(o_ptr);
2026 /* Mark the item as fully known */
2027 o_ptr->ident |= (IDENT_MENTAL);
2029 /* For being treated as random artifact in screen_object() */
2030 o_ptr->art_name = quark_add("");
2032 (void)screen_object(o_ptr, 0L);
2034 if (!get_string(ask_msg, dummy_name, sizeof dummy_name)
2040 get_table_sindarin_aux(dummy_name);
2044 get_table_name_aux(dummy_name);
2047 sprintf(new_name, _("《%s》", "'%s'"), dummy_name);
2048 chg_virtue(V_INDIVIDUALISM, 2);
2049 chg_virtue(V_ENCHANT, 5);
2053 get_random_name(o_ptr, new_name, object_is_armour(o_ptr), power_level);
2056 /* Save the inscription */
2057 o_ptr->art_name = quark_add(new_name);
2059 msg_format_wizard(CHEAT_OBJECT, _("パワー %d で 価値%ld のランダムアーティファクト生成 バイアスは「%s」",
2060 "Random artifact generated - Power:%d Value:%d Bias:%s."), max_powers, total_flags, artifact_bias_name[o_ptr->artifact_bias]);
2062 p_ptr->window |= (PW_INVEN | PW_EQUIP);
2068 * @brief オブジェクトから能力発動IDを取得する。
2069 * @details いくつかのケースで定義されている発動効果から、
2070 * 鍛冶師による付与>固定アーティファクト>エゴ>ランダムアーティファクト>ベースアイテムの優先順位で走査していく。
2071 * @param o_ptr 対象のオブジェクト構造体ポインタ
2072 * @return 発動効果のIDを返す
2074 int activation_index(object_type *o_ptr)
2076 /* Give priority to weaponsmith's essential activations */
2077 if (object_is_smith(o_ptr))
2079 switch (o_ptr->xtra3 - 1)
2081 case ESSENCE_TMP_RES_ACID: return ACT_RESIST_ACID;
2082 case ESSENCE_TMP_RES_ELEC: return ACT_RESIST_ELEC;
2083 case ESSENCE_TMP_RES_FIRE: return ACT_RESIST_FIRE;
2084 case ESSENCE_TMP_RES_COLD: return ACT_RESIST_COLD;
2085 case TR_IMPACT: return ACT_QUAKE;
2089 if (object_is_fixed_artifact(o_ptr))
2091 if (have_flag(a_info[o_ptr->name1].flags, TR_ACTIVATE))
2093 return a_info[o_ptr->name1].act_idx;
2096 if (object_is_ego(o_ptr))
2098 if (have_flag(e_info[o_ptr->name2].flags, TR_ACTIVATE))
2100 return e_info[o_ptr->name2].act_idx;
2103 if (!object_is_random_artifact(o_ptr))
2105 if (have_flag(k_info[o_ptr->k_idx].flags, TR_ACTIVATE))
2107 return k_info[o_ptr->k_idx].act_idx;
2111 return o_ptr->xtra2;
2115 * @brief オブジェクトから発動効果構造体のポインタを取得する。
2116 * @details activation_index() 関数の結果から参照する。
2117 * @param o_ptr 対象のオブジェクト構造体ポインタ
2118 * @return 発動効果構造体のポインタを返す
2120 const activation_type* find_activation_info(object_type *o_ptr)
2122 const int index = activation_index(o_ptr);
2123 const activation_type* p;
2125 for (p = activation_info; p->flag != NULL; ++ p) {
2126 if (p->index == index)
2136 * @brief 固定アーティファクト生成時の特別なハードコーディング処理を行う。.
2137 * @details random_artifact_resistance()とあるが実際は固定アーティファクトである。
2138 * 対象は恐怖の仮面、村正、ロビントンのハープ、龍争虎鬪、ブラッディムーン、羽衣、天女の羽衣、ミリム、
2140 * @attention プレイヤーの各種ステータスに依存した処理がある。
2141 * @todo 折を見て関数名を変更すること。
2142 * @param o_ptr 対象のオブジェクト構造体ポインタ
2143 * @param a_ptr 生成する固定アーティファクト構造体ポインタ
2146 void random_artifact_resistance(object_type * o_ptr, artifact_type *a_ptr)
2148 bool give_resistance = FALSE, give_power = FALSE;
2150 if (o_ptr->name1 == ART_TERROR) /* Terror Mask is for warriors... */
2152 if (p_ptr->pclass == CLASS_WARRIOR || p_ptr->pclass == CLASS_ARCHER || p_ptr->pclass == CLASS_CAVALRY || p_ptr->pclass == CLASS_BERSERKER)
2155 give_resistance = TRUE;
2159 add_flag(o_ptr->art_flags, TR_AGGRAVATE);
2160 add_flag(o_ptr->art_flags, TR_TY_CURSE);
2161 o_ptr->curse_flags |=
2162 (TRC_CURSED | TRC_HEAVY_CURSE);
2163 o_ptr->curse_flags |= get_curse(2, o_ptr);
2168 if (o_ptr->name1 == ART_MURAMASA)
2170 if (p_ptr->pclass != CLASS_SAMURAI)
2172 add_flag(o_ptr->art_flags, TR_NO_MAGIC);
2173 o_ptr->curse_flags |= (TRC_HEAVY_CURSE);
2177 if (o_ptr->name1 == ART_ROBINTON)
2179 if (p_ptr->pclass == CLASS_BARD)
2181 add_flag(o_ptr->art_flags, TR_DEC_MANA);
2185 if (o_ptr->name1 == ART_XIAOLONG)
2187 if (p_ptr->pclass == CLASS_MONK)
2188 add_flag(o_ptr->art_flags, TR_BLOWS);
2191 if (o_ptr->name1 == ART_BLOOD)
2193 get_bloody_moon_flags(o_ptr);
2196 if (o_ptr->name1 == ART_HEAVENLY_MAIDEN)
2198 if (p_ptr->psex != SEX_FEMALE)
2200 add_flag(o_ptr->art_flags, TR_AGGRAVATE);
2204 if (o_ptr->name1 == ART_MILIM)
2206 if (p_ptr->pseikaku == SEIKAKU_SEXY)
2209 add_flag(o_ptr->art_flags, TR_STR);
2210 add_flag(o_ptr->art_flags, TR_INT);
2211 add_flag(o_ptr->art_flags, TR_WIS);
2212 add_flag(o_ptr->art_flags, TR_DEX);
2213 add_flag(o_ptr->art_flags, TR_CON);
2214 add_flag(o_ptr->art_flags, TR_CHR);
2218 if (a_ptr->gen_flags & (TRG_XTRA_POWER)) give_power = TRUE;
2219 if (a_ptr->gen_flags & (TRG_XTRA_H_RES)) give_resistance = TRUE;
2220 if (a_ptr->gen_flags & (TRG_XTRA_RES_OR_POWER))
2222 /* Give a resistance OR a power */
2223 if (one_in_(2)) give_resistance = TRUE;
2224 else give_power = TRUE;
2232 if (give_resistance)
2234 one_high_resistance(o_ptr);
2240 * @brief フロアの指定された位置に固定アーティファクトを生成する。 / Create the artifact of the specified number
2241 * @details 固定アーティファクト構造体から基本ステータスをコピーした後、所定の座標でdrop_item()で落とす。
2242 * @param a_idx 生成する固定アーティファクト構造体のID
2243 * @param y アイテムを落とす地点のy座標
2244 * @param x アイテムを落とす地点のx座標
2245 * @return 生成が成功したか否か、失敗はIDの不全、ベースアイテムの不全、drop_item()の失敗時に起こる。
2246 * @attention この処理はdrop_near()内で普通の固定アーティファクトが重ならない性質に依存する.
2247 * 仮に2個以上存在可能かつ装備品以外の固定アーティファクトが作成されれば
2248 * drop_near()関数の返り値は信用できなくなる.
2250 bool create_named_art(ARTIFACT_IDX a_idx, POSITION y, POSITION x)
2256 artifact_type *a_ptr = &a_info[a_idx];
2259 /* Ignore "empty" artifacts */
2260 if (!a_ptr->name) return FALSE;
2262 /* Acquire the "kind" index */
2263 i = lookup_kind(a_ptr->tval, a_ptr->sval);
2265 if (!i) return FALSE;
2267 /* Create the artifact */
2268 object_prep(q_ptr, i);
2271 q_ptr->name1 = a_idx;
2273 /* Extract the fields */
2274 q_ptr->pval = a_ptr->pval;
2275 q_ptr->ac = a_ptr->ac;
2276 q_ptr->dd = a_ptr->dd;
2277 q_ptr->ds = a_ptr->ds;
2278 q_ptr->to_a = a_ptr->to_a;
2279 q_ptr->to_h = a_ptr->to_h;
2280 q_ptr->to_d = a_ptr->to_d;
2281 q_ptr->weight = a_ptr->weight;
2283 /* Hack -- extract the "cursed" flag */
2284 if (a_ptr->gen_flags & TRG_CURSED) q_ptr->curse_flags |= (TRC_CURSED);
2285 if (a_ptr->gen_flags & TRG_HEAVY_CURSE) q_ptr->curse_flags |= (TRC_HEAVY_CURSE);
2286 if (a_ptr->gen_flags & TRG_PERMA_CURSE) q_ptr->curse_flags |= (TRC_PERMA_CURSE);
2287 if (a_ptr->gen_flags & (TRG_RANDOM_CURSE0)) q_ptr->curse_flags |= get_curse(0, q_ptr);
2288 if (a_ptr->gen_flags & (TRG_RANDOM_CURSE1)) q_ptr->curse_flags |= get_curse(1, q_ptr);
2289 if (a_ptr->gen_flags & (TRG_RANDOM_CURSE2)) q_ptr->curse_flags |= get_curse(2, q_ptr);
2291 random_artifact_resistance(q_ptr, a_ptr);
2293 /* Drop the artifact from heaven */
2294 return drop_near(q_ptr, -1, y, x) ? TRUE : FALSE;
2298 HIT_POINT calc_arm_avgdamage(object_type *o_ptr)
2300 BIT_FLAGS flgs[TR_FLAG_SIZE];
2301 object_flags(o_ptr, flgs);
2303 HIT_POINT dam, base, s_evil, forced, vorpal;
2304 s_evil = forced = vorpal = 0;
2305 dam = base = (o_ptr->dd * o_ptr->ds + o_ptr->dd) / 2;
2307 if(have_flag(flgs, TR_KILL_EVIL))
2309 dam = s_evil = dam * 7 / 2;
2311 else if(!have_flag(flgs, TR_KILL_EVIL) && have_flag(flgs, TR_SLAY_EVIL))
2313 dam = s_evil = dam * 2;
2317 if (have_flag(flgs, TR_FORCE_WEAPON))
2319 dam = forced = dam * 3 / 2 + (o_ptr->dd * o_ptr->ds + o_ptr->dd);
2323 if(have_flag(flgs, TR_VORPAL))
2325 dam = vorpal = dam * 11 / 9;
2329 dam = dam + o_ptr->to_d;
2331 msg_format_wizard(CHEAT_OBJECT,"素:%d> 対邪:%d> 理力:%d> 切:%d> 最終:%d", base, s_evil, forced, vorpal, dam);
2336 static bool has_extreme_damage_rate(object_type *o_ptr)
2338 BIT_FLAGS flgs[TR_FLAG_SIZE];
2339 object_flags(o_ptr, flgs);
2341 if (have_flag(flgs, TR_VAMPIRIC))
2343 if(have_flag(flgs, TR_BLOWS) && (o_ptr->pval == 1) && (calc_arm_avgdamage(o_ptr) > 52))
2347 else if(have_flag(flgs, TR_BLOWS) && (o_ptr->pval == 2) && (calc_arm_avgdamage(o_ptr) > 43))
2351 else if( have_flag(flgs, TR_BLOWS) && (o_ptr->pval == 3) && (calc_arm_avgdamage(o_ptr) > 33))
2355 else if (calc_arm_avgdamage(o_ptr) > 63)
2362 if (have_flag(flgs, TR_BLOWS) && (o_ptr->pval == 1) && (calc_arm_avgdamage(o_ptr) > 65))
2366 else if (have_flag(flgs, TR_BLOWS) && (o_ptr->pval == 2) && (calc_arm_avgdamage(o_ptr) > 52))
2370 else if (have_flag(flgs, TR_BLOWS) && (o_ptr->pval == 3) && (calc_arm_avgdamage(o_ptr) > 40))
2374 else if (calc_arm_avgdamage(o_ptr) > 75)
2382 static bool weakening_artifact(object_type *o_ptr)
2384 KIND_OBJECT_IDX k_idx = lookup_kind(o_ptr->tval, o_ptr->sval);
2385 object_kind *k_ptr = &k_info[k_idx];
2386 BIT_FLAGS flgs[TR_FLAG_SIZE];
2387 object_flags(o_ptr, flgs);
2389 if (have_flag(flgs, TR_KILL_EVIL))
2391 remove_flag(o_ptr->art_flags, TR_KILL_EVIL);
2392 add_flag(o_ptr->art_flags, TR_SLAY_EVIL);
2395 else if (k_ptr->dd < o_ptr->dd)
2400 else if (k_ptr->ds < o_ptr->ds)
2405 else if (o_ptr->to_d > 10)
2407 o_ptr->to_d = o_ptr->to_d - damroll(1, 6);
2408 if (o_ptr->to_d < 10)