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.
14 #include "cmd-activate.h"
15 #include "object-curse.h"
17 static bool has_extreme_damage_rate(object_type *o_ptr);
18 static bool weakening_artifact(object_type *o_ptr);
22 * @brief 対象のオブジェクトにランダムな上位耐性を一つ付加する。/ Choose one random high resistance
23 * @details 重複の抑止はない。候補は毒、閃光、暗黒、破片、盲目、混乱、地獄、因果混乱、カオス、劣化、恐怖のいずれか。
24 * @param o_ptr 対象のオブジェクト構造体ポインタ
27 void one_high_resistance(object_type *o_ptr)
31 case 0: add_flag(o_ptr->art_flags, TR_RES_POIS); break;
32 case 1: add_flag(o_ptr->art_flags, TR_RES_LITE); break;
33 case 2: add_flag(o_ptr->art_flags, TR_RES_DARK); break;
34 case 3: add_flag(o_ptr->art_flags, TR_RES_SHARDS); break;
35 case 4: add_flag(o_ptr->art_flags, TR_RES_BLIND); break;
36 case 5: add_flag(o_ptr->art_flags, TR_RES_CONF); break;
37 case 6: add_flag(o_ptr->art_flags, TR_RES_SOUND); break;
38 case 7: add_flag(o_ptr->art_flags, TR_RES_NETHER); break;
39 case 8: add_flag(o_ptr->art_flags, TR_RES_NEXUS); break;
40 case 9: add_flag(o_ptr->art_flags, TR_RES_CHAOS); break;
41 case 10: add_flag(o_ptr->art_flags, TR_RES_DISEN); break;
42 case 11: add_flag(o_ptr->art_flags, TR_RES_FEAR); break;
47 * @brief 対象のオブジェクトに王者の指輪向けの上位耐性を一つ付加する。/ Choose one random high resistance
48 * @details 候補は閃光、暗黒、破片、盲目、混乱、地獄、因果混乱、カオス、恐怖であり
49 * 王者の指輪にあらかじめついている耐性をone_high_resistance()から除外したものである。
50 * ランダム付加そのものに重複の抑止はない。
51 * @param o_ptr 対象のオブジェクト構造体ポインタ
54 void one_lordly_high_resistance(object_type *o_ptr)
58 case 0: add_flag(o_ptr->art_flags, TR_RES_LITE); break;
59 case 1: add_flag(o_ptr->art_flags, TR_RES_DARK); break;
60 case 2: add_flag(o_ptr->art_flags, TR_RES_SHARDS); break;
61 case 3: add_flag(o_ptr->art_flags, TR_RES_BLIND); break;
62 case 4: add_flag(o_ptr->art_flags, TR_RES_CONF); break;
63 case 5: add_flag(o_ptr->art_flags, TR_RES_SOUND); break;
64 case 6: add_flag(o_ptr->art_flags, TR_RES_NETHER); break;
65 case 7: add_flag(o_ptr->art_flags, TR_RES_NEXUS); break;
66 case 8: add_flag(o_ptr->art_flags, TR_RES_CHAOS); break;
67 case 9: add_flag(o_ptr->art_flags, TR_RES_FEAR); break;
72 * @brief 対象のオブジェクトに元素耐性を一つ付加する。/ Choose one random element resistance
73 * @details 候補は火炎、冷気、電撃、酸のいずれかであり、重複の抑止はない。
74 * @param o_ptr 対象のオブジェクト構造体ポインタ
77 void one_ele_resistance(object_type *o_ptr)
81 case 0: add_flag(o_ptr->art_flags, TR_RES_ACID); break;
82 case 1: add_flag(o_ptr->art_flags, TR_RES_ELEC); break;
83 case 2: add_flag(o_ptr->art_flags, TR_RES_COLD); break;
84 case 3: add_flag(o_ptr->art_flags, TR_RES_FIRE); break;
89 * @brief 対象のオブジェクトにドラゴン装備向け元素耐性を一つ付加する。/ Choose one random element or poison resistance
90 * @details 候補は1/7の確率で毒、6/7の確率で火炎、冷気、電撃、酸のいずれか(one_ele_resistance()のコール)であり、重複の抑止はない。
91 * @param o_ptr 対象のオブジェクト構造体ポインタ
94 void one_dragon_ele_resistance(object_type *o_ptr)
98 add_flag(o_ptr->art_flags, TR_RES_POIS);
102 one_ele_resistance(o_ptr);
107 * @brief 対象のオブジェクトに弱いESPを一つ付加する。/ Choose one lower rank esp
108 * @details 候補は動物、アンデッド、悪魔、オーク、トロル、巨人、
109 * ドラゴン、人間、善良、ユニークESPのいずれかであり、重複の抑止はない。
110 * @param o_ptr 対象のオブジェクト構造体ポインタ
113 void one_low_esp(object_type *o_ptr)
115 switch (randint1(10))
117 case 1: add_flag(o_ptr->art_flags, TR_ESP_ANIMAL); break;
118 case 2: add_flag(o_ptr->art_flags, TR_ESP_UNDEAD); break;
119 case 3: add_flag(o_ptr->art_flags, TR_ESP_DEMON); break;
120 case 4: add_flag(o_ptr->art_flags, TR_ESP_ORC); break;
121 case 5: add_flag(o_ptr->art_flags, TR_ESP_TROLL); break;
122 case 6: add_flag(o_ptr->art_flags, TR_ESP_GIANT); break;
123 case 7: add_flag(o_ptr->art_flags, TR_ESP_DRAGON); break;
124 case 8: add_flag(o_ptr->art_flags, TR_ESP_HUMAN); break;
125 case 9: add_flag(o_ptr->art_flags, TR_ESP_GOOD); break;
126 case 10: add_flag(o_ptr->art_flags, TR_ESP_UNIQUE); break;
132 * @brief 対象のオブジェクトに耐性を一つ付加する。/ Choose one random resistance
133 * @details 1/3で元素耐性(one_ele_resistance())、2/3で上位耐性(one_high_resistance)
135 * @param o_ptr 対象のオブジェクト構造体ポインタ
138 void one_resistance(object_type *o_ptr)
142 one_ele_resistance(o_ptr);
146 one_high_resistance(o_ptr);
152 * @brief 対象のオブジェクトに能力を一つ付加する。/ Choose one random ability
153 * @details 候補は浮遊、永久光源+1、透明視、警告、遅消化、急回復、麻痺知らず、経験値維持のいずれか。
155 * @param o_ptr 対象のオブジェクト構造体ポインタ
158 void one_ability(object_type *o_ptr)
160 switch (randint0(10))
162 case 0: add_flag(o_ptr->art_flags, TR_LEVITATION); break;
163 case 1: add_flag(o_ptr->art_flags, TR_LITE_1); break;
164 case 2: add_flag(o_ptr->art_flags, TR_SEE_INVIS); break;
165 case 3: add_flag(o_ptr->art_flags, TR_WARNING); break;
166 case 4: add_flag(o_ptr->art_flags, TR_SLOW_DIGEST); break;
167 case 5: add_flag(o_ptr->art_flags, TR_REGEN); break;
168 case 6: add_flag(o_ptr->art_flags, TR_FREE_ACT); break;
169 case 7: add_flag(o_ptr->art_flags, TR_HOLD_EXP); break;
178 * @brief 対象のオブジェクトに発動を一つ付加する。/ Choose one random activation
179 * @details 候補多数。ランダムアーティファクトのバイアスには一切依存せず、
180 * whileループによる構造で能力的に強力なものほど確率を落としている。
181 * @param o_ptr 対象のオブジェクト構造体ポインタ
184 void one_activation(object_type *o_ptr)
189 while (randint1(100) >= chance)
191 type = randint1(255);
206 case ACT_CURE_POISON:
217 case ACT_HYPODYNAMIA_1:
232 case ACT_HYPODYNAMIA_2:
244 case ACT_CHARM_ANIMAL:
247 case ACT_SUMMON_ANIMAL:
253 case ACT_BANISH_EVIL:
256 case ACT_CHARM_UNDEAD:
257 case ACT_CHARM_OTHER:
258 case ACT_SUMMON_PHANTOM:
265 case ACT_CHARM_ANIMALS:
266 case ACT_CHARM_OTHERS:
267 case ACT_SUMMON_ELEMENTAL:
276 case ACT_DETECT_XTRA:
280 case ACT_SUMMON_UNDEAD:
281 case ACT_SUMMON_DEMON:
292 /* A type was chosen... */
293 o_ptr->xtra2 = (byte_hack)type;
294 add_flag(o_ptr->art_flags, TR_ACTIVATE);
299 * @brief ランダムアーティファクト生成中、対象のオブジェクトを呪いのアーティファクトにする経過処理。/ generation process of cursed artifact.
300 * @details pval、AC、命中、ダメージが正の場合、符号反転の上1d4だけ悪化させ、重い呪い、呪いフラグを必ず付加。
301 * 祝福を無効。確率に応じて、永遠の呪い、太古の怨念、経験値吸収、弱い呪いの継続的付加、強い呪いの継続的付加、HP吸収の呪い、
302 * MP吸収の呪い、乱テレポート、反テレポート、反魔法をつける。
303 * @attention プレイヤーの職業依存処理あり。
304 * @param o_ptr 対象のオブジェクト構造体ポインタ
307 static void curse_artifact(object_type * o_ptr)
309 if (o_ptr->pval > 0) o_ptr->pval = 0 - (o_ptr->pval + randint1(4));
310 if (o_ptr->to_a > 0) o_ptr->to_a = 0 - (o_ptr->to_a + randint1(4));
311 if (o_ptr->to_h > 0) o_ptr->to_h = 0 - (o_ptr->to_h + randint1(4));
312 if (o_ptr->to_d > 0) o_ptr->to_d = 0 - (o_ptr->to_d + randint1(4));
314 o_ptr->curse_flags |= (TRC_HEAVY_CURSE | TRC_CURSED);
315 remove_flag(o_ptr->art_flags, TR_BLESSED);
317 if (one_in_(4)) o_ptr->curse_flags |= TRC_PERMA_CURSE;
318 if (one_in_(3)) add_flag(o_ptr->art_flags, TR_TY_CURSE);
319 if (one_in_(2)) add_flag(o_ptr->art_flags, TR_AGGRAVATE);
320 if (one_in_(3)) add_flag(o_ptr->art_flags, TR_DRAIN_EXP);
321 if (one_in_(6)) add_flag(o_ptr->art_flags, TR_ADD_L_CURSE);
322 if (one_in_(9)) add_flag(o_ptr->art_flags, TR_ADD_H_CURSE);
323 if (one_in_(9)) add_flag(o_ptr->art_flags, TR_DRAIN_HP);
324 if (one_in_(9)) add_flag(o_ptr->art_flags, TR_DRAIN_MANA);
325 if (one_in_(2)) add_flag(o_ptr->art_flags, TR_TELEPORT);
326 else if (one_in_(3)) add_flag(o_ptr->art_flags, TR_NO_TELE);
328 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))
329 add_flag(o_ptr->art_flags, TR_NO_MAGIC);
333 * @brief ランダムアーティファクト生成中、対象のオブジェクトにpval能力を付加する。/ Add one pval on generation of randam artifact.
334 * @details 優先的に付加されるpvalがランダムアーティファクトバイアスに依存して存在する。
335 * 原則的候補は腕力、知力、賢さ、器用さ、耐久、魅力、探索、隠密、赤外線視力、加速。武器のみ採掘、追加攻撃も候補に入る。
336 * @attention オブジェクトのtval、svalに依存したハードコーディング処理がある。
337 * @param o_ptr 対象のオブジェクト構造体ポインタ
340 static void random_plus(object_type * o_ptr)
342 int this_type = (object_is_weapon_ammo(o_ptr) ? 23 : 19);
344 switch (o_ptr->artifact_bias)
347 if (!(have_flag(o_ptr->art_flags, TR_STR)))
349 add_flag(o_ptr->art_flags, TR_STR);
350 if (one_in_(2)) return;
353 if (!(have_flag(o_ptr->art_flags, TR_CON)))
355 add_flag(o_ptr->art_flags, TR_CON);
356 if (one_in_(2)) return;
359 if (!(have_flag(o_ptr->art_flags, TR_DEX)))
361 add_flag(o_ptr->art_flags, TR_DEX);
362 if (one_in_(2)) return;
367 if (!(have_flag(o_ptr->art_flags, TR_INT)))
369 add_flag(o_ptr->art_flags, TR_INT);
370 if (one_in_(2)) return;
372 if ((o_ptr->tval == TV_GLOVES) && !(have_flag(o_ptr->art_flags, TR_MAGIC_MASTERY)))
374 add_flag(o_ptr->art_flags, TR_MAGIC_MASTERY);
375 if (one_in_(2)) return;
380 if (!(have_flag(o_ptr->art_flags, TR_WIS)))
382 add_flag(o_ptr->art_flags, TR_WIS);
383 if (one_in_(2)) return;
388 if (!(have_flag(o_ptr->art_flags, TR_DEX)))
390 add_flag(o_ptr->art_flags, TR_DEX);
391 if (one_in_(2)) return;
394 if (!(have_flag(o_ptr->art_flags, TR_CON)))
396 add_flag(o_ptr->art_flags, TR_CON);
397 if (one_in_(2)) return;
400 if (!(have_flag(o_ptr->art_flags, TR_STR)))
402 add_flag(o_ptr->art_flags, TR_STR);
403 if (one_in_(2)) return;
408 if (!(have_flag(o_ptr->art_flags, TR_STEALTH)))
410 add_flag(o_ptr->art_flags, TR_STEALTH);
411 if (one_in_(2)) return;
413 if (!(have_flag(o_ptr->art_flags, TR_SEARCH)))
415 add_flag(o_ptr->art_flags, TR_SEARCH);
416 if (one_in_(2)) return;
421 if (!(have_flag(o_ptr->art_flags, TR_STR)))
423 add_flag(o_ptr->art_flags, TR_STR);
424 if (one_in_(2)) return;
429 if (!(have_flag(o_ptr->art_flags, TR_WIS)))
431 add_flag(o_ptr->art_flags, TR_WIS);
432 if (one_in_(2)) return;
437 if (!(have_flag(o_ptr->art_flags, TR_INT)))
439 add_flag(o_ptr->art_flags, TR_INT);
440 if (one_in_(2)) return;
445 if (!(have_flag(o_ptr->art_flags, TR_DEX)))
447 add_flag(o_ptr->art_flags, TR_DEX);
448 if (one_in_(2)) return;
453 if (!(have_flag(o_ptr->art_flags, TR_CON)))
455 add_flag(o_ptr->art_flags, TR_CON);
456 if (one_in_(2)) return;
461 if (!(have_flag(o_ptr->art_flags, TR_CHR)))
463 add_flag(o_ptr->art_flags, TR_CHR);
464 if (one_in_(2)) return;
469 if ((o_ptr->artifact_bias == BIAS_MAGE || o_ptr->artifact_bias == BIAS_PRIESTLY) && (o_ptr->tval == TV_SOFT_ARMOR) && (o_ptr->sval == SV_ROBE))
471 if (!(have_flag(o_ptr->art_flags, TR_DEC_MANA)) && one_in_(3))
473 add_flag(o_ptr->art_flags, TR_DEC_MANA);
474 if (one_in_(2)) return;
478 switch (randint1(this_type))
481 add_flag(o_ptr->art_flags, TR_STR);
482 if (!o_ptr->artifact_bias && !one_in_(13))
483 o_ptr->artifact_bias = BIAS_STR;
484 else if (!o_ptr->artifact_bias && one_in_(7))
485 o_ptr->artifact_bias = BIAS_WARRIOR;
488 add_flag(o_ptr->art_flags, TR_INT);
489 if (!o_ptr->artifact_bias && !one_in_(13))
490 o_ptr->artifact_bias = BIAS_INT;
491 else if (!o_ptr->artifact_bias && one_in_(7))
492 o_ptr->artifact_bias = BIAS_MAGE;
495 add_flag(o_ptr->art_flags, TR_WIS);
496 if (!o_ptr->artifact_bias && !one_in_(13))
497 o_ptr->artifact_bias = BIAS_WIS;
498 else if (!o_ptr->artifact_bias && one_in_(7))
499 o_ptr->artifact_bias = BIAS_PRIESTLY;
502 add_flag(o_ptr->art_flags, TR_DEX);
503 if (!o_ptr->artifact_bias && !one_in_(13))
504 o_ptr->artifact_bias = BIAS_DEX;
505 else if (!o_ptr->artifact_bias && one_in_(7))
506 o_ptr->artifact_bias = BIAS_ROGUE;
509 add_flag(o_ptr->art_flags, TR_CON);
510 if (!o_ptr->artifact_bias && !one_in_(13))
511 o_ptr->artifact_bias = BIAS_CON;
512 else if (!o_ptr->artifact_bias && one_in_(9))
513 o_ptr->artifact_bias = BIAS_RANGER;
516 add_flag(o_ptr->art_flags, TR_CHR);
517 if (!o_ptr->artifact_bias && !one_in_(13))
518 o_ptr->artifact_bias = BIAS_CHR;
521 add_flag(o_ptr->art_flags, TR_STEALTH);
522 if (!o_ptr->artifact_bias && one_in_(3))
523 o_ptr->artifact_bias = BIAS_ROGUE;
526 add_flag(o_ptr->art_flags, TR_SEARCH);
527 if (!o_ptr->artifact_bias && one_in_(9))
528 o_ptr->artifact_bias = BIAS_RANGER;
531 add_flag(o_ptr->art_flags, TR_INFRA);
534 add_flag(o_ptr->art_flags, TR_SPEED);
535 if (!o_ptr->artifact_bias && one_in_(11))
536 o_ptr->artifact_bias = BIAS_ROGUE;
539 add_flag(o_ptr->art_flags, TR_TUNNEL);
542 if (o_ptr->tval == TV_BOW) random_plus(o_ptr);
545 add_flag(o_ptr->art_flags, TR_BLOWS);
546 if (!o_ptr->artifact_bias && one_in_(11))
547 o_ptr->artifact_bias = BIAS_WARRIOR;
554 * @brief ランダムアーティファクト生成中、対象のオブジェクトに耐性を付加する。/ Add one resistance on generation of randam artifact.
555 * @details 優先的に付加される耐性がランダムアーティファクトバイアスに依存して存在する。
556 * 原則的候補は火炎、冷気、電撃、酸(以上免疫の可能性もあり)、
557 * 毒、閃光、暗黒、破片、轟音、盲目、混乱、地獄、カオス、劣化、恐怖、火オーラ、冷気オーラ、電撃オーラ、反射。
559 * @attention オブジェクトのtval、svalに依存したハードコーディング処理がある。
560 * @param o_ptr 対象のオブジェクト構造体ポインタ
563 static void random_resistance(object_type * o_ptr)
565 switch (o_ptr->artifact_bias)
568 if (!(have_flag(o_ptr->art_flags, TR_RES_ACID)))
570 add_flag(o_ptr->art_flags, TR_RES_ACID);
571 if (one_in_(2)) return;
573 if (one_in_(BIAS_LUCK) && !(have_flag(o_ptr->art_flags, TR_IM_ACID)))
575 add_flag(o_ptr->art_flags, TR_IM_ACID);
576 if (!one_in_(IM_LUCK))
578 remove_flag(o_ptr->art_flags, TR_IM_ELEC);
579 remove_flag(o_ptr->art_flags, TR_IM_COLD);
580 remove_flag(o_ptr->art_flags, TR_IM_FIRE);
582 if (one_in_(2)) return;
587 if (!(have_flag(o_ptr->art_flags, TR_RES_ELEC)))
589 add_flag(o_ptr->art_flags, TR_RES_ELEC);
590 if (one_in_(2)) return;
592 if ((o_ptr->tval >= TV_CLOAK) && (o_ptr->tval <= TV_HARD_ARMOR) &&
593 !(have_flag(o_ptr->art_flags, TR_SH_ELEC)))
595 add_flag(o_ptr->art_flags, TR_SH_ELEC);
596 if (one_in_(2)) return;
598 if (one_in_(BIAS_LUCK) && !(have_flag(o_ptr->art_flags, TR_IM_ELEC)))
600 add_flag(o_ptr->art_flags, TR_IM_ELEC);
601 if (!one_in_(IM_LUCK))
603 remove_flag(o_ptr->art_flags, TR_IM_ACID);
604 remove_flag(o_ptr->art_flags, TR_IM_COLD);
605 remove_flag(o_ptr->art_flags, TR_IM_FIRE);
608 if (one_in_(2)) return;
613 if (!(have_flag(o_ptr->art_flags, TR_RES_FIRE)))
615 add_flag(o_ptr->art_flags, TR_RES_FIRE);
616 if (one_in_(2)) return;
618 if ((o_ptr->tval >= TV_CLOAK) &&
619 (o_ptr->tval <= TV_HARD_ARMOR) &&
620 !(have_flag(o_ptr->art_flags, TR_SH_FIRE)))
622 add_flag(o_ptr->art_flags, TR_SH_FIRE);
623 if (one_in_(2)) return;
625 if (one_in_(BIAS_LUCK) &&
626 !(have_flag(o_ptr->art_flags, TR_IM_FIRE)))
628 add_flag(o_ptr->art_flags, TR_IM_FIRE);
629 if (!one_in_(IM_LUCK))
631 remove_flag(o_ptr->art_flags, TR_IM_ELEC);
632 remove_flag(o_ptr->art_flags, TR_IM_COLD);
633 remove_flag(o_ptr->art_flags, TR_IM_ACID);
635 if (one_in_(2)) return;
640 if (!(have_flag(o_ptr->art_flags, TR_RES_COLD)))
642 add_flag(o_ptr->art_flags, TR_RES_COLD);
643 if (one_in_(2)) return;
645 if ((o_ptr->tval >= TV_CLOAK) &&
646 (o_ptr->tval <= TV_HARD_ARMOR) &&
647 !(have_flag(o_ptr->art_flags, TR_SH_COLD)))
649 add_flag(o_ptr->art_flags, TR_SH_COLD);
650 if (one_in_(2)) return;
652 if (one_in_(BIAS_LUCK) && !(have_flag(o_ptr->art_flags, TR_IM_COLD)))
654 add_flag(o_ptr->art_flags, TR_IM_COLD);
655 if (!one_in_(IM_LUCK))
657 remove_flag(o_ptr->art_flags, TR_IM_ELEC);
658 remove_flag(o_ptr->art_flags, TR_IM_ACID);
659 remove_flag(o_ptr->art_flags, TR_IM_FIRE);
661 if (one_in_(2)) return;
666 if (!(have_flag(o_ptr->art_flags, TR_RES_POIS)))
668 add_flag(o_ptr->art_flags, TR_RES_POIS);
669 if (one_in_(2)) return;
674 if (!one_in_(3) && (!(have_flag(o_ptr->art_flags, TR_RES_FEAR))))
676 add_flag(o_ptr->art_flags, TR_RES_FEAR);
677 if (one_in_(2)) return;
679 if (one_in_(3) && (!(have_flag(o_ptr->art_flags, TR_NO_MAGIC))))
681 add_flag(o_ptr->art_flags, TR_NO_MAGIC);
682 if (one_in_(2)) return;
686 case BIAS_NECROMANTIC:
687 if (!(have_flag(o_ptr->art_flags, TR_RES_NETHER)))
689 add_flag(o_ptr->art_flags, TR_RES_NETHER);
690 if (one_in_(2)) return;
692 if (!(have_flag(o_ptr->art_flags, TR_RES_POIS)))
694 add_flag(o_ptr->art_flags, TR_RES_POIS);
695 if (one_in_(2)) return;
697 if (!(have_flag(o_ptr->art_flags, TR_RES_DARK)))
699 add_flag(o_ptr->art_flags, TR_RES_DARK);
700 if (one_in_(2)) return;
705 if (!(have_flag(o_ptr->art_flags, TR_RES_CHAOS)))
707 add_flag(o_ptr->art_flags, TR_RES_CHAOS);
708 if (one_in_(2)) return;
710 if (!(have_flag(o_ptr->art_flags, TR_RES_CONF)))
712 add_flag(o_ptr->art_flags, TR_RES_CONF);
713 if (one_in_(2)) return;
715 if (!(have_flag(o_ptr->art_flags, TR_RES_DISEN)))
717 add_flag(o_ptr->art_flags, TR_RES_DISEN);
718 if (one_in_(2)) return;
723 switch (randint1(42))
726 if (!one_in_(WEIRD_LUCK))
727 random_resistance(o_ptr);
730 add_flag(o_ptr->art_flags, TR_IM_ACID);
731 if (!o_ptr->artifact_bias)
732 o_ptr->artifact_bias = BIAS_ACID;
736 if (!one_in_(WEIRD_LUCK))
737 random_resistance(o_ptr);
740 add_flag(o_ptr->art_flags, TR_IM_ELEC);
741 if (!o_ptr->artifact_bias)
742 o_ptr->artifact_bias = BIAS_ELEC;
746 if (!one_in_(WEIRD_LUCK))
747 random_resistance(o_ptr);
750 add_flag(o_ptr->art_flags, TR_IM_COLD);
751 if (!o_ptr->artifact_bias)
752 o_ptr->artifact_bias = BIAS_COLD;
756 if (!one_in_(WEIRD_LUCK))
757 random_resistance(o_ptr);
760 add_flag(o_ptr->art_flags, TR_IM_FIRE);
761 if (!o_ptr->artifact_bias)
762 o_ptr->artifact_bias = BIAS_FIRE;
768 add_flag(o_ptr->art_flags, TR_RES_ACID);
769 if (!o_ptr->artifact_bias)
770 o_ptr->artifact_bias = BIAS_ACID;
775 add_flag(o_ptr->art_flags, TR_RES_ELEC);
776 if (!o_ptr->artifact_bias)
777 o_ptr->artifact_bias = BIAS_ELEC;
782 add_flag(o_ptr->art_flags, TR_RES_FIRE);
783 if (!o_ptr->artifact_bias)
784 o_ptr->artifact_bias = BIAS_FIRE;
789 add_flag(o_ptr->art_flags, TR_RES_COLD);
790 if (!o_ptr->artifact_bias)
791 o_ptr->artifact_bias = BIAS_COLD;
795 add_flag(o_ptr->art_flags, TR_RES_POIS);
796 if (!o_ptr->artifact_bias && !one_in_(4))
797 o_ptr->artifact_bias = BIAS_POIS;
798 else if (!o_ptr->artifact_bias && one_in_(2))
799 o_ptr->artifact_bias = BIAS_NECROMANTIC;
800 else if (!o_ptr->artifact_bias && one_in_(2))
801 o_ptr->artifact_bias = BIAS_ROGUE;
805 add_flag(o_ptr->art_flags, TR_RES_FEAR);
806 if (!o_ptr->artifact_bias && one_in_(3))
807 o_ptr->artifact_bias = BIAS_WARRIOR;
810 add_flag(o_ptr->art_flags, TR_RES_LITE);
813 add_flag(o_ptr->art_flags, TR_RES_DARK);
817 add_flag(o_ptr->art_flags, TR_RES_BLIND);
821 add_flag(o_ptr->art_flags, TR_RES_CONF);
822 if (!o_ptr->artifact_bias && one_in_(6))
823 o_ptr->artifact_bias = BIAS_CHAOS;
827 add_flag(o_ptr->art_flags, TR_RES_SOUND);
831 add_flag(o_ptr->art_flags, TR_RES_SHARDS);
835 add_flag(o_ptr->art_flags, TR_RES_NETHER);
836 if (!o_ptr->artifact_bias && one_in_(3))
837 o_ptr->artifact_bias = BIAS_NECROMANTIC;
841 add_flag(o_ptr->art_flags, TR_RES_NEXUS);
845 add_flag(o_ptr->art_flags, TR_RES_CHAOS);
846 if (!o_ptr->artifact_bias && one_in_(2))
847 o_ptr->artifact_bias = BIAS_CHAOS;
851 add_flag(o_ptr->art_flags, TR_RES_DISEN);
854 if (o_ptr->tval >= TV_CLOAK && o_ptr->tval <= TV_HARD_ARMOR)
855 add_flag(o_ptr->art_flags, TR_SH_ELEC);
857 random_resistance(o_ptr);
858 if (!o_ptr->artifact_bias)
859 o_ptr->artifact_bias = BIAS_ELEC;
862 if (o_ptr->tval >= TV_CLOAK && o_ptr->tval <= TV_HARD_ARMOR)
863 add_flag(o_ptr->art_flags, TR_SH_FIRE);
865 random_resistance(o_ptr);
866 if (!o_ptr->artifact_bias)
867 o_ptr->artifact_bias = BIAS_FIRE;
870 if (o_ptr->tval == TV_SHIELD || o_ptr->tval == TV_CLOAK ||
871 o_ptr->tval == TV_HELM || o_ptr->tval == TV_HARD_ARMOR)
872 add_flag(o_ptr->art_flags, TR_REFLECT);
874 random_resistance(o_ptr);
877 if (o_ptr->tval >= TV_CLOAK && o_ptr->tval <= TV_HARD_ARMOR)
878 add_flag(o_ptr->art_flags, TR_SH_COLD);
880 random_resistance(o_ptr);
881 if (!o_ptr->artifact_bias)
882 o_ptr->artifact_bias = BIAS_COLD;
889 * @brief ランダムアーティファクト生成中、対象のオブジェクトにその他特性を付加する。/ Add one misc flag on generation of randam artifact.
890 * @details 優先的に付加される耐性がランダムアーティファクトバイアスに依存して存在する。
891 * 原則的候補は各種能力維持、永久光源+1、麻痺知らず、経験値維持、浮遊、透明視、急回復、遅消化、
892 * 乱テレポート、反魔法、反テレポート、警告、テレパシー、各種ESP、一部装備に殺戮修正。
893 * @attention オブジェクトのtval、svalに依存したハードコーディング処理がある。
894 * @param o_ptr 対象のオブジェクト構造体ポインタ
897 static void random_misc(object_type * o_ptr)
899 switch (o_ptr->artifact_bias)
902 if (!(have_flag(o_ptr->art_flags, TR_SUST_CON)))
904 add_flag(o_ptr->art_flags, TR_SUST_CON);
905 if (one_in_(2)) return;
910 if (!(have_flag(o_ptr->art_flags, TR_SUST_STR)))
912 add_flag(o_ptr->art_flags, TR_SUST_STR);
913 if (one_in_(2)) return;
918 if (!(have_flag(o_ptr->art_flags, TR_SUST_WIS)))
920 add_flag(o_ptr->art_flags, TR_SUST_WIS);
921 if (one_in_(2)) return;
926 if (!(have_flag(o_ptr->art_flags, TR_SUST_INT)))
928 add_flag(o_ptr->art_flags, TR_SUST_INT);
929 if (one_in_(2)) return;
934 if (!(have_flag(o_ptr->art_flags, TR_SUST_DEX)))
936 add_flag(o_ptr->art_flags, TR_SUST_DEX);
937 if (one_in_(2)) return;
942 if (!(have_flag(o_ptr->art_flags, TR_SUST_CON)))
944 add_flag(o_ptr->art_flags, TR_SUST_CON);
945 if (one_in_(2)) return;
950 if (!(have_flag(o_ptr->art_flags, TR_SUST_CHR)))
952 add_flag(o_ptr->art_flags, TR_SUST_CHR);
953 if (one_in_(2)) return;
958 if (!(have_flag(o_ptr->art_flags, TR_TELEPORT)))
960 add_flag(o_ptr->art_flags, TR_TELEPORT);
961 if (one_in_(2)) return;
966 if (!(have_flag(o_ptr->art_flags, TR_LITE_1)))
968 add_flag(o_ptr->art_flags, TR_LITE_1); /* Freebie */
973 switch (randint1(33))
976 add_flag(o_ptr->art_flags, TR_SUST_STR);
977 if (!o_ptr->artifact_bias)
978 o_ptr->artifact_bias = BIAS_STR;
981 add_flag(o_ptr->art_flags, TR_SUST_INT);
982 if (!o_ptr->artifact_bias)
983 o_ptr->artifact_bias = BIAS_INT;
986 add_flag(o_ptr->art_flags, TR_SUST_WIS);
987 if (!o_ptr->artifact_bias)
988 o_ptr->artifact_bias = BIAS_WIS;
991 add_flag(o_ptr->art_flags, TR_SUST_DEX);
992 if (!o_ptr->artifact_bias)
993 o_ptr->artifact_bias = BIAS_DEX;
996 add_flag(o_ptr->art_flags, TR_SUST_CON);
997 if (!o_ptr->artifact_bias)
998 o_ptr->artifact_bias = BIAS_CON;
1001 add_flag(o_ptr->art_flags, TR_SUST_CHR);
1002 if (!o_ptr->artifact_bias)
1003 o_ptr->artifact_bias = BIAS_CHR;
1008 add_flag(o_ptr->art_flags, TR_FREE_ACT);
1011 add_flag(o_ptr->art_flags, TR_HOLD_EXP);
1012 if (!o_ptr->artifact_bias && one_in_(5))
1013 o_ptr->artifact_bias = BIAS_PRIESTLY;
1014 else if (!o_ptr->artifact_bias && one_in_(6))
1015 o_ptr->artifact_bias = BIAS_NECROMANTIC;
1019 add_flag(o_ptr->art_flags, TR_LITE_1);
1023 add_flag(o_ptr->art_flags, TR_LEVITATION);
1028 add_flag(o_ptr->art_flags, TR_SEE_INVIS);
1032 add_flag(o_ptr->art_flags, TR_SLOW_DIGEST);
1036 add_flag(o_ptr->art_flags, TR_REGEN);
1039 add_flag(o_ptr->art_flags, TR_TELEPORT);
1044 if (object_is_armour(o_ptr))
1048 o_ptr->to_a = 4 + randint1(11);
1057 add_flag(o_ptr->art_flags, TR_SHOW_MODS);
1058 bonus_h = 4 + (HIT_PROB)(randint1(11));
1059 bonus_d = 4 + (HIT_POINT)(randint1(11));
1060 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))
1065 o_ptr->to_h += bonus_h;
1066 o_ptr->to_d += bonus_d;
1070 add_flag(o_ptr->art_flags, TR_NO_MAGIC);
1073 add_flag(o_ptr->art_flags, TR_NO_TELE);
1076 add_flag(o_ptr->art_flags, TR_WARNING);
1080 switch (randint1(3))
1083 add_flag(o_ptr->art_flags, TR_ESP_EVIL);
1084 if (!o_ptr->artifact_bias && one_in_(3))
1085 o_ptr->artifact_bias = BIAS_LAW;
1088 add_flag(o_ptr->art_flags, TR_ESP_NONLIVING);
1089 if (!o_ptr->artifact_bias && one_in_(3))
1090 o_ptr->artifact_bias = BIAS_MAGE;
1093 add_flag(o_ptr->art_flags, TR_TELEPATHY);
1094 if (!o_ptr->artifact_bias && one_in_(9))
1095 o_ptr->artifact_bias = BIAS_MAGE;
1103 int n = randint1(3);
1105 idx[0] = randint1(10);
1107 idx[1] = randint1(9);
1108 if (idx[1] >= idx[0]) idx[1]++;
1110 idx[2] = randint1(8);
1111 if (idx[2] >= idx[0]) idx[2]++;
1112 if (idx[2] >= idx[1]) idx[2]++;
1114 while (n--) switch (idx[n])
1117 add_flag(o_ptr->art_flags, TR_ESP_ANIMAL);
1118 if (!o_ptr->artifact_bias && one_in_(4))
1119 o_ptr->artifact_bias = BIAS_RANGER;
1122 add_flag(o_ptr->art_flags, TR_ESP_UNDEAD);
1123 if (!o_ptr->artifact_bias && one_in_(3))
1124 o_ptr->artifact_bias = BIAS_PRIESTLY;
1125 else if (!o_ptr->artifact_bias && one_in_(6))
1126 o_ptr->artifact_bias = BIAS_NECROMANTIC;
1129 add_flag(o_ptr->art_flags, TR_ESP_DEMON);
1132 add_flag(o_ptr->art_flags, TR_ESP_ORC);
1135 add_flag(o_ptr->art_flags, TR_ESP_TROLL);
1138 add_flag(o_ptr->art_flags, TR_ESP_GIANT);
1141 add_flag(o_ptr->art_flags, TR_ESP_DRAGON);
1144 add_flag(o_ptr->art_flags, TR_ESP_HUMAN);
1145 if (!o_ptr->artifact_bias && one_in_(6))
1146 o_ptr->artifact_bias = BIAS_ROGUE;
1149 add_flag(o_ptr->art_flags, TR_ESP_GOOD);
1150 if (!o_ptr->artifact_bias && one_in_(3))
1151 o_ptr->artifact_bias = BIAS_LAW;
1154 add_flag(o_ptr->art_flags, TR_ESP_UNIQUE);
1155 if (!o_ptr->artifact_bias && one_in_(3))
1156 o_ptr->artifact_bias = BIAS_LAW;
1165 * @brief ランダムアーティファクト生成中、対象のオブジェクトにスレイ効果を付加する。/ Add one slaying on generation of randam artifact.
1166 * @details 優先的に付加される耐性がランダムアーティファクトバイアスに依存して存在する。
1167 * 原則的候補は強力射、高速射、混沌効果、吸血効果、祝福、投擲しやすい、焼棄、凍結、電撃、溶解、毒殺、
1168 * 動物スレイ、邪悪スレイ、悪魔スレイ、不死スレイ、オークスレイ、トロルスレイ、巨人スレイ、ドラゴンスレイ、
1169 * *ドラゴンスレイ*、人間スレイ、切れ味、地震、理力。
1170 * @attention オブジェクトのtval、svalに依存したハードコーディング処理がある。
1171 * @param o_ptr 対象のオブジェクト構造体ポインタ
1174 static void random_slay(object_type *o_ptr)
1176 if (o_ptr->tval == TV_BOW)
1178 switch (randint1(6))
1183 add_flag(o_ptr->art_flags, TR_XTRA_MIGHT);
1184 if (!one_in_(7)) remove_flag(o_ptr->art_flags, TR_XTRA_SHOTS);
1185 if (!o_ptr->artifact_bias && one_in_(9))
1186 o_ptr->artifact_bias = BIAS_RANGER;
1189 add_flag(o_ptr->art_flags, TR_XTRA_SHOTS);
1190 if (!one_in_(7)) remove_flag(o_ptr->art_flags, TR_XTRA_MIGHT);
1191 if (!o_ptr->artifact_bias && one_in_(9))
1192 o_ptr->artifact_bias = BIAS_RANGER;
1199 switch (o_ptr->artifact_bias)
1202 if (!(have_flag(o_ptr->art_flags, TR_CHAOTIC)))
1204 add_flag(o_ptr->art_flags, TR_CHAOTIC);
1205 if (one_in_(2)) return;
1210 if((o_ptr->tval == TV_SWORD || o_ptr->tval == TV_POLEARM) &&
1211 !(have_flag(o_ptr->art_flags, TR_BLESSED)))
1213 /* A free power for "priestly" random artifacts */
1214 add_flag(o_ptr->art_flags, TR_BLESSED);
1218 case BIAS_NECROMANTIC:
1219 if (!(have_flag(o_ptr->art_flags, TR_VAMPIRIC)))
1221 add_flag(o_ptr->art_flags, TR_VAMPIRIC);
1222 if (one_in_(2)) return;
1224 if (!(have_flag(o_ptr->art_flags, TR_BRAND_POIS)) && one_in_(2))
1226 add_flag(o_ptr->art_flags, TR_BRAND_POIS);
1227 if (one_in_(2)) return;
1232 if (!(have_flag(o_ptr->art_flags, TR_SLAY_ANIMAL)))
1234 add_flag(o_ptr->art_flags, TR_SLAY_ANIMAL);
1235 if (one_in_(2)) return;
1240 if ((((o_ptr->tval == TV_SWORD) && (o_ptr->sval == SV_DAGGER)) ||
1241 ((o_ptr->tval == TV_POLEARM) && (o_ptr->sval == SV_SPEAR))) &&
1242 !(have_flag(o_ptr->art_flags, TR_THROW)))
1244 /* Free power for rogues... */
1245 add_flag(o_ptr->art_flags, TR_THROW);
1247 if (!(have_flag(o_ptr->art_flags, TR_BRAND_POIS)))
1249 add_flag(o_ptr->art_flags, TR_BRAND_POIS);
1250 if (one_in_(2)) return;
1255 if (!(have_flag(o_ptr->art_flags, TR_BRAND_POIS)))
1257 add_flag(o_ptr->art_flags, TR_BRAND_POIS);
1258 if (one_in_(2)) return;
1263 if (!(have_flag(o_ptr->art_flags, TR_BRAND_FIRE)))
1265 add_flag(o_ptr->art_flags, TR_BRAND_FIRE);
1266 if (one_in_(2)) return;
1271 if (!(have_flag(o_ptr->art_flags, TR_BRAND_COLD)))
1273 add_flag(o_ptr->art_flags, TR_BRAND_COLD);
1274 if (one_in_(2)) return;
1279 if (!(have_flag(o_ptr->art_flags, TR_BRAND_ELEC)))
1281 add_flag(o_ptr->art_flags, TR_BRAND_ELEC);
1282 if (one_in_(2)) return;
1287 if (!(have_flag(o_ptr->art_flags, TR_BRAND_ACID)))
1289 add_flag(o_ptr->art_flags, TR_BRAND_ACID);
1290 if (one_in_(2)) return;
1295 if (!(have_flag(o_ptr->art_flags, TR_SLAY_EVIL)))
1297 add_flag(o_ptr->art_flags, TR_SLAY_EVIL);
1298 if (one_in_(2)) return;
1300 if (!(have_flag(o_ptr->art_flags, TR_SLAY_UNDEAD)))
1302 add_flag(o_ptr->art_flags, TR_SLAY_UNDEAD);
1303 if (one_in_(2)) return;
1305 if (!(have_flag(o_ptr->art_flags, TR_SLAY_DEMON)))
1307 add_flag(o_ptr->art_flags, TR_SLAY_DEMON);
1308 if (one_in_(2)) return;
1313 switch (randint1(36))
1319 add_flag(o_ptr->art_flags, TR_KILL_ANIMAL);
1323 add_flag(o_ptr->art_flags, TR_SLAY_ANIMAL);
1330 add_flag(o_ptr->art_flags, TR_KILL_EVIL);
1334 add_flag(o_ptr->art_flags, TR_SLAY_EVIL);
1336 if (!o_ptr->artifact_bias && one_in_(2))
1337 o_ptr->artifact_bias = BIAS_LAW;
1338 else if (!o_ptr->artifact_bias && one_in_(9))
1339 o_ptr->artifact_bias = BIAS_PRIESTLY;
1345 add_flag(o_ptr->art_flags, TR_KILL_UNDEAD);
1349 add_flag(o_ptr->art_flags, TR_SLAY_UNDEAD);
1351 if (!o_ptr->artifact_bias && one_in_(9))
1352 o_ptr->artifact_bias = BIAS_PRIESTLY;
1358 add_flag(o_ptr->art_flags, TR_KILL_DEMON);
1362 add_flag(o_ptr->art_flags, TR_SLAY_DEMON);
1364 if (!o_ptr->artifact_bias && one_in_(9))
1365 o_ptr->artifact_bias = BIAS_PRIESTLY;
1371 add_flag(o_ptr->art_flags, TR_KILL_ORC);
1375 add_flag(o_ptr->art_flags, TR_SLAY_ORC);
1382 add_flag(o_ptr->art_flags, TR_KILL_TROLL);
1386 add_flag(o_ptr->art_flags, TR_SLAY_TROLL);
1393 add_flag(o_ptr->art_flags, TR_KILL_GIANT);
1397 add_flag(o_ptr->art_flags, TR_SLAY_GIANT);
1402 add_flag(o_ptr->art_flags, TR_SLAY_DRAGON);
1405 add_flag(o_ptr->art_flags, TR_KILL_DRAGON);
1409 if (o_ptr->tval == TV_SWORD)
1411 add_flag(o_ptr->art_flags, TR_VORPAL);
1412 if (!o_ptr->artifact_bias && one_in_(9))
1413 o_ptr->artifact_bias = BIAS_WARRIOR;
1419 add_flag(o_ptr->art_flags, TR_IMPACT);
1423 add_flag(o_ptr->art_flags, TR_BRAND_FIRE);
1424 if (!o_ptr->artifact_bias)
1425 o_ptr->artifact_bias = BIAS_FIRE;
1429 add_flag(o_ptr->art_flags, TR_BRAND_COLD);
1430 if (!o_ptr->artifact_bias)
1431 o_ptr->artifact_bias = BIAS_COLD;
1435 add_flag(o_ptr->art_flags, TR_BRAND_ELEC);
1436 if (!o_ptr->artifact_bias)
1437 o_ptr->artifact_bias = BIAS_ELEC;
1441 add_flag(o_ptr->art_flags, TR_BRAND_ACID);
1442 if (!o_ptr->artifact_bias)
1443 o_ptr->artifact_bias = BIAS_ACID;
1447 add_flag(o_ptr->art_flags, TR_BRAND_POIS);
1448 if (!o_ptr->artifact_bias && !one_in_(3))
1449 o_ptr->artifact_bias = BIAS_POIS;
1450 else if (!o_ptr->artifact_bias && one_in_(6))
1451 o_ptr->artifact_bias = BIAS_NECROMANTIC;
1452 else if (!o_ptr->artifact_bias)
1453 o_ptr->artifact_bias = BIAS_ROGUE;
1456 add_flag(o_ptr->art_flags, TR_VAMPIRIC);
1457 if (!o_ptr->artifact_bias)
1458 o_ptr->artifact_bias = BIAS_NECROMANTIC;
1461 add_flag(o_ptr->art_flags, TR_FORCE_WEAPON);
1462 if (!o_ptr->artifact_bias)
1463 o_ptr->artifact_bias = (one_in_(2) ? BIAS_MAGE : BIAS_PRIESTLY);
1469 add_flag(o_ptr->art_flags, TR_KILL_HUMAN);
1473 add_flag(o_ptr->art_flags, TR_SLAY_HUMAN);
1477 add_flag(o_ptr->art_flags, TR_CHAOTIC);
1478 if (!o_ptr->artifact_bias)
1479 o_ptr->artifact_bias = BIAS_CHAOS;
1485 * @brief ランダムアーティファクト生成中、対象のオブジェクトにバイアスに依存した発動を与える。/ Add one activaton of randam artifact depend on bias.
1486 * @details バイアスが無い場合、一部のバイアスの確率によっては one_ability() に処理が移行する。
1487 * @param o_ptr 対象のオブジェクト構造体ポインタ
1490 static void give_activation_power(object_type *o_ptr)
1492 int type = 0, chance = 0;
1494 switch (o_ptr->artifact_bias)
1499 type = ACT_BO_ELEC_1;
1501 else if (!one_in_(5))
1503 type = ACT_BA_ELEC_2;
1507 type = ACT_BA_ELEC_3;
1513 type = ACT_BA_POIS_1;
1520 type = ACT_BO_FIRE_1;
1522 else if (!one_in_(5))
1524 type = ACT_BA_FIRE_1;
1528 type = ACT_BA_FIRE_2;
1536 type = ACT_BO_COLD_1;
1537 else if (!one_in_(3))
1538 type = ACT_BA_COLD_1;
1539 else if (!one_in_(3))
1540 type = ACT_BA_COLD_2;
1542 type = ACT_BA_COLD_3;
1548 type = ACT_SUMMON_DEMON;
1550 type = ACT_CALL_CHAOS;
1557 type = ACT_CHARM_UNDEAD;
1558 else if (one_in_(12))
1559 type = ACT_BANISH_EVIL;
1560 else if (one_in_(11))
1561 type = ACT_DISP_EVIL;
1562 else if (one_in_(10))
1563 type = ACT_PROT_EVIL;
1564 else if (one_in_(9))
1565 type = ACT_CURE_1000;
1566 else if (one_in_(8))
1567 type = ACT_CURE_700;
1568 else if (one_in_(7))
1569 type = ACT_REST_ALL;
1570 else if (one_in_(6))
1571 type = ACT_REST_EXP;
1576 case BIAS_NECROMANTIC:
1580 else if (one_in_(13))
1581 type = ACT_DISP_GOOD;
1582 else if (one_in_(9))
1583 type = ACT_MASS_GENO;
1584 else if (one_in_(8))
1585 type = ACT_GENOCIDE;
1586 else if (one_in_(13))
1587 type = ACT_SUMMON_UNDEAD;
1588 else if (one_in_(9))
1590 else if (one_in_(6))
1591 type = ACT_CHARM_UNDEAD;
1599 type = ACT_BANISH_EVIL;
1600 else if (one_in_(4))
1601 type = ACT_DISP_EVIL;
1603 type = ACT_PROT_EVIL;
1610 else if (one_in_(4))
1612 else if (one_in_(3))
1613 type = ACT_DETECT_ALL;
1614 else if (one_in_(8))
1617 type = ACT_ID_PLAIN;
1623 type = ACT_SUMMON_ELEMENTAL;
1624 else if (one_in_(10))
1625 type = ACT_SUMMON_PHANTOM;
1626 else if (one_in_(5))
1627 type = ACT_RUNE_EXPLO;
1643 type = ACT_CHARM_ANIMALS;
1644 else if (one_in_(7))
1645 type = ACT_SUMMON_ANIMAL;
1646 else if (one_in_(6))
1647 type = ACT_CHARM_ANIMAL;
1648 else if (one_in_(4))
1649 type = ACT_RESIST_ALL;
1650 else if (one_in_(3))
1653 type = ACT_CURE_POISON;
1657 if (!type || (randint1(100) >= chance))
1659 one_activation(o_ptr);
1663 /* A type was chosen... */
1664 o_ptr->xtra2 = (byte_hack)type;
1665 add_flag(o_ptr->art_flags, TR_ACTIVATE);
1670 * @brief ランダムアーティファクト生成中、対象のオブジェクトに名前を与える。/ Set name of randomartifact.
1671 * @details 確率によって、シンダリン銘、漢字銘、固定名のいずれか一つが与えられる。
1672 * @param o_ptr 処理中のアイテム参照ポインタ
1673 * @param return_name 名前を返すための文字列参照ポインタ
1674 * @param armour 対象のオブジェクトが防具が否か
1675 * @param power 銘の基準となるオブジェクトの価値レベル(0=呪い、1=低位、2=中位、3以上=高位)
1678 static void get_random_name(object_type *o_ptr, char *return_name, bool armour, int power)
1680 PERCENTAGE prob = randint1(100);
1682 if (prob <= SINDARIN_NAME)
1684 get_table_sindarin(return_name);
1686 else if (prob <= TABLE_NAME)
1688 get_table_name(return_name);
1700 filename = _("a_cursed_j.txt", "a_cursed.txt");
1703 filename = _("a_low_j.txt", "a_low.txt");
1706 filename = _("a_med_j.txt", "a_med.txt");
1709 filename = _("a_high_j.txt", "a_high.txt");
1716 filename = _("w_cursed_j.txt", "w_cursed.txt");
1719 filename = _("w_low_j.txt", "w_low.txt");
1722 filename = _("w_med_j.txt", "w_med.txt");
1725 filename = _("w_high_j.txt", "w_high.txt");
1729 (void)get_rnd_line(filename, o_ptr->artifact_bias, return_name);
1731 if (return_name[0] == 0) get_table_name(return_name);
1737 * @brief ランダムアーティファクト生成のメインルーチン
1738 * @details 既に生成が済んでいるオブジェクトの構造体を、アーティファクトとして強化する。
1739 * @param o_ptr 対象のオブジェクト構造体ポインタ
1740 * @param a_scroll アーティファクト生成の巻物上の処理。呪いのアーティファクトが生成対象外となる。
1741 * @return 常にTRUE(1)を返す
1743 bool create_artifact(object_type *o_ptr, bool a_scroll)
1745 GAME_TEXT new_name[1024];
1746 PARAMETER_VALUE has_pval = 0;
1747 int powers = randint1(5) + 1;
1749 int max_type = (object_is_weapon_ammo(o_ptr) ? 7 : 5);
1752 bool a_cursed = FALSE;
1753 int warrior_artifact_bias = 0;
1756 /* Reset artifact bias */
1757 o_ptr->artifact_bias = 0;
1759 /* Nuke enchantments */
1763 for (i = 0; i < TR_FLAG_SIZE; i++)
1764 o_ptr->art_flags[i] |= k_info[o_ptr->k_idx].flags[i];
1766 if (o_ptr->pval) has_pval = TRUE;
1768 if (a_scroll && one_in_(4))
1770 switch (p_ptr->pclass)
1773 case CLASS_BERSERKER:
1778 o_ptr->artifact_bias = BIAS_WARRIOR;
1781 case CLASS_HIGH_MAGE:
1782 case CLASS_SORCERER:
1783 case CLASS_MAGIC_EATER:
1784 case CLASS_BLUE_MAGE:
1785 o_ptr->artifact_bias = BIAS_MAGE;
1788 o_ptr->artifact_bias = BIAS_PRIESTLY;
1792 o_ptr->artifact_bias = BIAS_ROGUE;
1793 warrior_artifact_bias = 25;
1797 o_ptr->artifact_bias = BIAS_RANGER;
1798 warrior_artifact_bias = 30;
1801 o_ptr->artifact_bias = BIAS_PRIESTLY;
1802 warrior_artifact_bias = 40;
1804 case CLASS_WARRIOR_MAGE:
1805 case CLASS_RED_MAGE:
1806 o_ptr->artifact_bias = BIAS_MAGE;
1807 warrior_artifact_bias = 40;
1809 case CLASS_CHAOS_WARRIOR:
1810 o_ptr->artifact_bias = BIAS_CHAOS;
1811 warrior_artifact_bias = 40;
1814 case CLASS_FORCETRAINER:
1815 o_ptr->artifact_bias = BIAS_PRIESTLY;
1817 case CLASS_MINDCRAFTER:
1819 if (randint1(5) > 2) o_ptr->artifact_bias = BIAS_PRIESTLY;
1822 if (randint1(5) > 2) o_ptr->artifact_bias = BIAS_WARRIOR;
1824 case CLASS_IMITATOR:
1825 if (randint1(2) > 1) o_ptr->artifact_bias = BIAS_RANGER;
1827 case CLASS_BEASTMASTER:
1828 o_ptr->artifact_bias = BIAS_CHR;
1829 warrior_artifact_bias = 50;
1831 case CLASS_MIRROR_MASTER:
1832 if (randint1(4) > 1)
1834 o_ptr->artifact_bias = BIAS_MAGE;
1838 o_ptr->artifact_bias = BIAS_ROGUE;
1844 if (a_scroll && (randint1(100) <= warrior_artifact_bias))
1845 o_ptr->artifact_bias = BIAS_WARRIOR;
1847 strcpy(new_name, "");
1849 if (!a_scroll && one_in_(A_CURSED))
1851 if (((o_ptr->tval == TV_AMULET) || (o_ptr->tval == TV_RING)) && object_is_cursed(o_ptr))
1854 while (one_in_(powers) || one_in_(7) || one_in_(10))
1857 if (!a_cursed && one_in_(WEIRD_LUCK))
1860 if (a_cursed) powers /= 2;
1862 max_powers = powers;
1866 switch (randint1(max_type))
1873 if (one_in_(2) && object_is_weapon_ammo(o_ptr) && (o_ptr->tval != TV_BOW))
1875 if (a_cursed && !one_in_(13)) break;
1878 if (one_in_(o_ptr->ds+4)) o_ptr->ds++;
1882 if (one_in_(o_ptr->dd+1)) o_ptr->dd++;
1886 random_resistance(o_ptr);
1895 if (p_ptr->wizard) msg_print("Switch error in create_artifact!");
1902 if (have_flag(o_ptr->art_flags, TR_BLOWS))
1904 o_ptr->pval = randint1(2);
1905 if ((o_ptr->tval == TV_SWORD) && (o_ptr->sval == SV_HAYABUSA))
1914 while (o_ptr->pval < randint1(5) || one_in_(o_ptr->pval));
1917 if ((o_ptr->pval > 4) && !one_in_(WEIRD_LUCK))
1922 /* give it some plusses... */
1923 if (object_is_armour(o_ptr))
1924 o_ptr->to_a += randint1(o_ptr->to_a > 19 ? 1 : 20 - o_ptr->to_a);
1925 else if (object_is_weapon_ammo(o_ptr))
1927 o_ptr->to_h += randint1(o_ptr->to_h > 19 ? 1 : 20 - o_ptr->to_h);
1928 o_ptr->to_d += randint1(o_ptr->to_d > 19 ? 1 : 20 - o_ptr->to_d);
1929 if ((have_flag(o_ptr->art_flags, TR_WIS)) && (o_ptr->pval > 0)) add_flag(o_ptr->art_flags, TR_BLESSED);
1932 /* Just to be sure */
1933 add_flag(o_ptr->art_flags, TR_IGNORE_ACID);
1934 add_flag(o_ptr->art_flags, TR_IGNORE_ELEC);
1935 add_flag(o_ptr->art_flags, TR_IGNORE_FIRE);
1936 add_flag(o_ptr->art_flags, TR_IGNORE_COLD);
1938 total_flags = flag_cost(o_ptr, o_ptr->pval);
1940 if (a_cursed) curse_artifact(o_ptr);
1943 one_in_(object_is_armour(o_ptr) ? ACTIVATION_CHANCE * 2 : ACTIVATION_CHANCE))
1946 give_activation_power(o_ptr);
1949 if (object_is_armour(o_ptr))
1951 while ((o_ptr->to_d+o_ptr->to_h) > 20)
1953 if (one_in_(o_ptr->to_d) && one_in_(o_ptr->to_h)) break;
1954 o_ptr->to_d -= (HIT_POINT)randint0(3);
1955 o_ptr->to_h -= (HIT_PROB)randint0(3);
1957 while ((o_ptr->to_d+o_ptr->to_h) > 10)
1959 if (one_in_(o_ptr->to_d) || one_in_(o_ptr->to_h)) break;
1960 o_ptr->to_d -= (HIT_POINT)randint0(3);
1961 o_ptr->to_h -= (HIT_PROB)randint0(3);
1965 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);
1967 if ((o_ptr->tval == TV_SWORD) && (o_ptr->sval == SV_DOKUBARI))
1971 remove_flag(o_ptr->art_flags, TR_BLOWS);
1972 remove_flag(o_ptr->art_flags, TR_FORCE_WEAPON);
1973 remove_flag(o_ptr->art_flags, TR_SLAY_ANIMAL);
1974 remove_flag(o_ptr->art_flags, TR_SLAY_EVIL);
1975 remove_flag(o_ptr->art_flags, TR_SLAY_UNDEAD);
1976 remove_flag(o_ptr->art_flags, TR_SLAY_DEMON);
1977 remove_flag(o_ptr->art_flags, TR_SLAY_ORC);
1978 remove_flag(o_ptr->art_flags, TR_SLAY_TROLL);
1979 remove_flag(o_ptr->art_flags, TR_SLAY_GIANT);
1980 remove_flag(o_ptr->art_flags, TR_SLAY_DRAGON);
1981 remove_flag(o_ptr->art_flags, TR_KILL_DRAGON);
1982 remove_flag(o_ptr->art_flags, TR_SLAY_HUMAN);
1983 remove_flag(o_ptr->art_flags, TR_VORPAL);
1984 remove_flag(o_ptr->art_flags, TR_BRAND_POIS);
1985 remove_flag(o_ptr->art_flags, TR_BRAND_ACID);
1986 remove_flag(o_ptr->art_flags, TR_BRAND_ELEC);
1987 remove_flag(o_ptr->art_flags, TR_BRAND_FIRE);
1988 remove_flag(o_ptr->art_flags, TR_BRAND_COLD);
1991 if (!object_is_weapon_ammo(o_ptr))
1994 if (a_cursed) power_level = 0;
1995 else if (total_flags < 15000) power_level = 1;
1996 else if (total_flags < 35000) power_level = 2;
1997 else power_level = 3;
2003 if (a_cursed) power_level = 0;
2004 else if (total_flags < 20000) power_level = 1;
2005 else if (total_flags < 45000) power_level = 2;
2006 else power_level = 3;
2010 while (has_extreme_damage_rate(o_ptr) && !one_in_(SWORDFISH_LUCK))
2012 weakening_artifact(o_ptr);
2017 GAME_TEXT dummy_name[MAX_NLEN] = "";
2018 cptr ask_msg = _("このアーティファクトを何と名付けますか?", "What do you want to call the artifact? ");
2020 /* Identify it fully */
2021 object_aware(o_ptr);
2022 object_known(o_ptr);
2024 /* Mark the item as fully known */
2025 o_ptr->ident |= (IDENT_MENTAL);
2027 /* For being treated as random artifact in screen_object() */
2028 o_ptr->art_name = quark_add("");
2030 (void)screen_object(o_ptr, 0L);
2032 if (!get_string(ask_msg, dummy_name, sizeof dummy_name)
2038 get_table_sindarin_aux(dummy_name);
2042 get_table_name_aux(dummy_name);
2045 sprintf(new_name, _("《%s》", "'%s'"), dummy_name);
2046 chg_virtue(V_INDIVIDUALISM, 2);
2047 chg_virtue(V_ENCHANT, 5);
2051 get_random_name(o_ptr, new_name, object_is_armour(o_ptr), power_level);
2054 /* Save the inscription */
2055 o_ptr->art_name = quark_add(new_name);
2057 msg_format_wizard(CHEAT_OBJECT, _("パワー %d で 価値%ld のランダムアーティファクト生成 バイアスは「%s」",
2058 "Random artifact generated - Power:%d Value:%d Bias:%s."), max_powers, total_flags, artifact_bias_name[o_ptr->artifact_bias]);
2060 p_ptr->window |= (PW_INVEN | PW_EQUIP);
2066 * @brief オブジェクトから能力発動IDを取得する。
2067 * @details いくつかのケースで定義されている発動効果から、
2068 * 鍛冶師による付与>固定アーティファクト>エゴ>ランダムアーティファクト>ベースアイテムの優先順位で走査していく。
2069 * @param o_ptr 対象のオブジェクト構造体ポインタ
2070 * @return 発動効果のIDを返す
2072 int activation_index(object_type *o_ptr)
2074 /* Give priority to weaponsmith's essential activations */
2075 if (object_is_smith(o_ptr))
2077 switch (o_ptr->xtra3 - 1)
2079 case ESSENCE_TMP_RES_ACID: return ACT_RESIST_ACID;
2080 case ESSENCE_TMP_RES_ELEC: return ACT_RESIST_ELEC;
2081 case ESSENCE_TMP_RES_FIRE: return ACT_RESIST_FIRE;
2082 case ESSENCE_TMP_RES_COLD: return ACT_RESIST_COLD;
2083 case TR_IMPACT: return ACT_QUAKE;
2087 if (object_is_fixed_artifact(o_ptr))
2089 if (have_flag(a_info[o_ptr->name1].flags, TR_ACTIVATE))
2091 return a_info[o_ptr->name1].act_idx;
2094 if (object_is_ego(o_ptr))
2096 if (have_flag(e_info[o_ptr->name2].flags, TR_ACTIVATE))
2098 return e_info[o_ptr->name2].act_idx;
2101 if (!object_is_random_artifact(o_ptr))
2103 if (have_flag(k_info[o_ptr->k_idx].flags, TR_ACTIVATE))
2105 return k_info[o_ptr->k_idx].act_idx;
2109 return o_ptr->xtra2;
2113 * @brief オブジェクトから発動効果構造体のポインタを取得する。
2114 * @details activation_index() 関数の結果から参照する。
2115 * @param o_ptr 対象のオブジェクト構造体ポインタ
2116 * @return 発動効果構造体のポインタを返す
2118 const activation_type* find_activation_info(object_type *o_ptr)
2120 const int index = activation_index(o_ptr);
2121 const activation_type* p;
2123 for (p = activation_info; p->flag != NULL; ++ p) {
2124 if (p->index == index)
2134 * @brief 固定アーティファクト生成時の特別なハードコーディング処理を行う。.
2135 * @details random_artifact_resistance()とあるが実際は固定アーティファクトである。
2136 * 対象は恐怖の仮面、村正、ロビントンのハープ、龍争虎鬪、ブラッディムーン、羽衣、天女の羽衣、ミリム、
2138 * @attention プレイヤーの各種ステータスに依存した処理がある。
2139 * @todo 折を見て関数名を変更すること。
2140 * @param o_ptr 対象のオブジェクト構造体ポインタ
2141 * @param a_ptr 生成する固定アーティファクト構造体ポインタ
2144 void random_artifact_resistance(object_type * o_ptr, artifact_type *a_ptr)
2146 bool give_resistance = FALSE, give_power = FALSE;
2148 if (o_ptr->name1 == ART_TERROR) /* Terror Mask is for warriors... */
2150 if (p_ptr->pclass == CLASS_WARRIOR || p_ptr->pclass == CLASS_ARCHER || p_ptr->pclass == CLASS_CAVALRY || p_ptr->pclass == CLASS_BERSERKER)
2153 give_resistance = TRUE;
2157 add_flag(o_ptr->art_flags, TR_AGGRAVATE);
2158 add_flag(o_ptr->art_flags, TR_TY_CURSE);
2159 o_ptr->curse_flags |=
2160 (TRC_CURSED | TRC_HEAVY_CURSE);
2161 o_ptr->curse_flags |= get_curse(2, o_ptr);
2166 if (o_ptr->name1 == ART_MURAMASA)
2168 if (p_ptr->pclass != CLASS_SAMURAI)
2170 add_flag(o_ptr->art_flags, TR_NO_MAGIC);
2171 o_ptr->curse_flags |= (TRC_HEAVY_CURSE);
2175 if (o_ptr->name1 == ART_ROBINTON)
2177 if (p_ptr->pclass == CLASS_BARD)
2179 add_flag(o_ptr->art_flags, TR_DEC_MANA);
2183 if (o_ptr->name1 == ART_XIAOLONG)
2185 if (p_ptr->pclass == CLASS_MONK)
2186 add_flag(o_ptr->art_flags, TR_BLOWS);
2189 if (o_ptr->name1 == ART_BLOOD)
2191 get_bloody_moon_flags(o_ptr);
2194 if (o_ptr->name1 == ART_HEAVENLY_MAIDEN)
2196 if (p_ptr->psex != SEX_FEMALE)
2198 add_flag(o_ptr->art_flags, TR_AGGRAVATE);
2202 if (o_ptr->name1 == ART_MILIM)
2204 if (p_ptr->pseikaku == SEIKAKU_SEXY)
2207 add_flag(o_ptr->art_flags, TR_STR);
2208 add_flag(o_ptr->art_flags, TR_INT);
2209 add_flag(o_ptr->art_flags, TR_WIS);
2210 add_flag(o_ptr->art_flags, TR_DEX);
2211 add_flag(o_ptr->art_flags, TR_CON);
2212 add_flag(o_ptr->art_flags, TR_CHR);
2216 if (a_ptr->gen_flags & (TRG_XTRA_POWER)) give_power = TRUE;
2217 if (a_ptr->gen_flags & (TRG_XTRA_H_RES)) give_resistance = TRUE;
2218 if (a_ptr->gen_flags & (TRG_XTRA_RES_OR_POWER))
2220 /* Give a resistance OR a power */
2221 if (one_in_(2)) give_resistance = TRUE;
2222 else give_power = TRUE;
2230 if (give_resistance)
2232 one_high_resistance(o_ptr);
2238 * @brief フロアの指定された位置に固定アーティファクトを生成する。 / Create the artifact of the specified number
2239 * @details 固定アーティファクト構造体から基本ステータスをコピーした後、所定の座標でdrop_item()で落とす。
2240 * @param a_idx 生成する固定アーティファクト構造体のID
2241 * @param y アイテムを落とす地点のy座標
2242 * @param x アイテムを落とす地点のx座標
2243 * @return 生成が成功したか否か、失敗はIDの不全、ベースアイテムの不全、drop_item()の失敗時に起こる。
2244 * @attention この処理はdrop_near()内で普通の固定アーティファクトが重ならない性質に依存する.
2245 * 仮に2個以上存在可能かつ装備品以外の固定アーティファクトが作成されれば
2246 * drop_near()関数の返り値は信用できなくなる.
2248 bool create_named_art(ARTIFACT_IDX a_idx, POSITION y, POSITION x)
2254 artifact_type *a_ptr = &a_info[a_idx];
2257 /* Ignore "empty" artifacts */
2258 if (!a_ptr->name) return FALSE;
2260 /* Acquire the "kind" index */
2261 i = lookup_kind(a_ptr->tval, a_ptr->sval);
2263 if (!i) return FALSE;
2265 /* Create the artifact */
2266 object_prep(q_ptr, i);
2269 q_ptr->name1 = a_idx;
2271 /* Extract the fields */
2272 q_ptr->pval = a_ptr->pval;
2273 q_ptr->ac = a_ptr->ac;
2274 q_ptr->dd = a_ptr->dd;
2275 q_ptr->ds = a_ptr->ds;
2276 q_ptr->to_a = a_ptr->to_a;
2277 q_ptr->to_h = a_ptr->to_h;
2278 q_ptr->to_d = a_ptr->to_d;
2279 q_ptr->weight = a_ptr->weight;
2281 /* Hack -- extract the "cursed" flag */
2282 if (a_ptr->gen_flags & TRG_CURSED) q_ptr->curse_flags |= (TRC_CURSED);
2283 if (a_ptr->gen_flags & TRG_HEAVY_CURSE) q_ptr->curse_flags |= (TRC_HEAVY_CURSE);
2284 if (a_ptr->gen_flags & TRG_PERMA_CURSE) q_ptr->curse_flags |= (TRC_PERMA_CURSE);
2285 if (a_ptr->gen_flags & (TRG_RANDOM_CURSE0)) q_ptr->curse_flags |= get_curse(0, q_ptr);
2286 if (a_ptr->gen_flags & (TRG_RANDOM_CURSE1)) q_ptr->curse_flags |= get_curse(1, q_ptr);
2287 if (a_ptr->gen_flags & (TRG_RANDOM_CURSE2)) q_ptr->curse_flags |= get_curse(2, q_ptr);
2289 random_artifact_resistance(q_ptr, a_ptr);
2291 /* Drop the artifact from heaven */
2292 return drop_near(q_ptr, -1, y, x) ? TRUE : FALSE;
2296 HIT_POINT calc_arm_avgdamage(object_type *o_ptr)
2298 BIT_FLAGS flgs[TR_FLAG_SIZE];
2299 object_flags(o_ptr, flgs);
2301 HIT_POINT dam, base, s_evil, forced, vorpal;
2302 s_evil = forced = vorpal = 0;
2303 dam = base = (o_ptr->dd * o_ptr->ds + o_ptr->dd) / 2;
2305 if(have_flag(flgs, TR_KILL_EVIL))
2307 dam = s_evil = dam * 7 / 2;
2309 else if(!have_flag(flgs, TR_KILL_EVIL) && have_flag(flgs, TR_SLAY_EVIL))
2311 dam = s_evil = dam * 2;
2315 if (have_flag(flgs, TR_FORCE_WEAPON))
2317 dam = forced = dam * 3 / 2 + (o_ptr->dd * o_ptr->ds + o_ptr->dd);
2321 if(have_flag(flgs, TR_VORPAL))
2323 dam = vorpal = dam * 11 / 9;
2327 dam = dam + o_ptr->to_d;
2329 msg_format_wizard(CHEAT_OBJECT,"素:%d> 対邪:%d> 理力:%d> 切:%d> 最終:%d", base, s_evil, forced, vorpal, dam);
2334 static bool has_extreme_damage_rate(object_type *o_ptr)
2336 BIT_FLAGS flgs[TR_FLAG_SIZE];
2337 object_flags(o_ptr, flgs);
2339 if (have_flag(flgs, TR_VAMPIRIC))
2341 if(have_flag(flgs, TR_BLOWS) && (o_ptr->pval == 1) && (calc_arm_avgdamage(o_ptr) > 52))
2345 else if(have_flag(flgs, TR_BLOWS) && (o_ptr->pval == 2) && (calc_arm_avgdamage(o_ptr) > 43))
2349 else if( have_flag(flgs, TR_BLOWS) && (o_ptr->pval == 3) && (calc_arm_avgdamage(o_ptr) > 33))
2353 else if (calc_arm_avgdamage(o_ptr) > 63)
2360 if (have_flag(flgs, TR_BLOWS) && (o_ptr->pval == 1) && (calc_arm_avgdamage(o_ptr) > 65))
2364 else if (have_flag(flgs, TR_BLOWS) && (o_ptr->pval == 2) && (calc_arm_avgdamage(o_ptr) > 52))
2368 else if (have_flag(flgs, TR_BLOWS) && (o_ptr->pval == 3) && (calc_arm_avgdamage(o_ptr) > 40))
2372 else if (calc_arm_avgdamage(o_ptr) > 75)
2380 static bool weakening_artifact(object_type *o_ptr)
2382 KIND_OBJECT_IDX k_idx = lookup_kind(o_ptr->tval, o_ptr->sval);
2383 object_kind *k_ptr = &k_info[k_idx];
2384 BIT_FLAGS flgs[TR_FLAG_SIZE];
2385 object_flags(o_ptr, flgs);
2387 if (have_flag(flgs, TR_KILL_EVIL))
2389 remove_flag(o_ptr->art_flags, TR_KILL_EVIL);
2390 add_flag(o_ptr->art_flags, TR_SLAY_EVIL);
2393 else if (k_ptr->dd < o_ptr->dd)
2398 else if (k_ptr->ds < o_ptr->ds)
2403 else if (o_ptr->to_d > 10)
2405 o_ptr->to_d = o_ptr->to_d - damroll(1, 6);
2406 if (o_ptr->to_d < 10)