1 /* Purpose: Artifact code */
4 * Copyright (c) 1989 James E. Wilson, Robert A. Koeneke
6 * This software may be copied and distributed for educational, research, and
7 * not for profit purposes provided that this copyright and statement are
8 * included in all such copies.
14 /* Chance of using syllables to form the name instead of the "template" files */
15 #define SINDARIN_NAME 10
23 * Bias luck needs to be higher than weird luck,
24 * since it is usually tested several times...
26 #define ACTIVATION_CHANCE 3
30 * Use for biased artifact creation
32 static int artifact_bias;
36 * Choose one random sustain
38 void one_sustain(object_type *o_ptr)
42 case 0: add_flag(o_ptr->art_flags, TR_SUST_STR); break;
43 case 1: add_flag(o_ptr->art_flags, TR_SUST_INT); break;
44 case 2: add_flag(o_ptr->art_flags, TR_SUST_WIS); break;
45 case 3: add_flag(o_ptr->art_flags, TR_SUST_DEX); break;
46 case 4: add_flag(o_ptr->art_flags, TR_SUST_CON); break;
47 case 5: add_flag(o_ptr->art_flags, TR_SUST_CHR); break;
53 * Choose one random high resistance
55 void one_high_resistance(object_type *o_ptr)
59 case 0: add_flag(o_ptr->art_flags, TR_RES_POIS); break;
60 case 1: add_flag(o_ptr->art_flags, TR_RES_LITE); break;
61 case 2: add_flag(o_ptr->art_flags, TR_RES_DARK); break;
62 case 3: add_flag(o_ptr->art_flags, TR_RES_SHARDS); break;
63 case 4: add_flag(o_ptr->art_flags, TR_RES_BLIND); break;
64 case 5: add_flag(o_ptr->art_flags, TR_RES_CONF); break;
65 case 6: add_flag(o_ptr->art_flags, TR_RES_SOUND); break;
66 case 7: add_flag(o_ptr->art_flags, TR_RES_NETHER); break;
67 case 8: add_flag(o_ptr->art_flags, TR_RES_NEXUS); break;
68 case 9: add_flag(o_ptr->art_flags, TR_RES_CHAOS); break;
69 case 10: add_flag(o_ptr->art_flags, TR_RES_DISEN); break;
70 case 11: add_flag(o_ptr->art_flags, TR_RES_FEAR); break;
76 * Choose one random high resistance ( except poison and disenchantment )
78 void one_lordly_high_resistance(object_type *o_ptr)
82 case 0: add_flag(o_ptr->art_flags, TR_RES_LITE); break;
83 case 1: add_flag(o_ptr->art_flags, TR_RES_DARK); break;
84 case 2: add_flag(o_ptr->art_flags, TR_RES_SHARDS); break;
85 case 3: add_flag(o_ptr->art_flags, TR_RES_BLIND); break;
86 case 4: add_flag(o_ptr->art_flags, TR_RES_CONF); break;
87 case 5: add_flag(o_ptr->art_flags, TR_RES_SOUND); break;
88 case 6: add_flag(o_ptr->art_flags, TR_RES_NETHER); break;
89 case 7: add_flag(o_ptr->art_flags, TR_RES_NEXUS); break;
90 case 8: add_flag(o_ptr->art_flags, TR_RES_CHAOS); break;
91 case 9: add_flag(o_ptr->art_flags, TR_RES_FEAR); break;
97 * Choose one random element resistance
99 void one_ele_resistance(object_type *o_ptr)
103 case 0: add_flag(o_ptr->art_flags, TR_RES_ACID); break;
104 case 1: add_flag(o_ptr->art_flags, TR_RES_ELEC); break;
105 case 2: add_flag(o_ptr->art_flags, TR_RES_COLD); break;
106 case 3: add_flag(o_ptr->art_flags, TR_RES_FIRE); break;
112 * Choose one random element or poison resistance
114 void one_dragon_ele_resistance(object_type *o_ptr)
118 add_flag(o_ptr->art_flags, TR_RES_POIS);
122 one_ele_resistance(o_ptr);
128 * Choose one lower rank esp
130 void one_low_esp(object_type *o_ptr)
134 case 1: add_flag(o_ptr->art_flags, TR_ESP_ANIMAL); break;
135 case 2: add_flag(o_ptr->art_flags, TR_ESP_UNDEAD); break;
136 case 3: add_flag(o_ptr->art_flags, TR_ESP_DEMON); break;
137 case 4: add_flag(o_ptr->art_flags, TR_ESP_ORC); break;
138 case 5: add_flag(o_ptr->art_flags, TR_ESP_TROLL); break;
139 case 6: add_flag(o_ptr->art_flags, TR_ESP_GIANT); break;
140 case 7: add_flag(o_ptr->art_flags, TR_ESP_DRAGON); break;
141 case 8: add_flag(o_ptr->art_flags, TR_ESP_HUMAN); break;
142 case 9: add_flag(o_ptr->art_flags, TR_ESP_GOOD); break;
149 * Choose one random resistance
151 void one_resistance(object_type *o_ptr)
155 one_ele_resistance(o_ptr);
159 one_high_resistance(o_ptr);
165 * Choose one random ability
167 void one_ability(object_type *o_ptr)
169 switch (randint0(10))
171 case 0: add_flag(o_ptr->art_flags, TR_LEVITATION); break;
172 case 1: add_flag(o_ptr->art_flags, TR_LITE); break;
173 case 2: add_flag(o_ptr->art_flags, TR_SEE_INVIS); break;
174 case 3: add_flag(o_ptr->art_flags, TR_WARNING); break;
175 case 4: add_flag(o_ptr->art_flags, TR_SLOW_DIGEST); break;
176 case 5: add_flag(o_ptr->art_flags, TR_REGEN); break;
177 case 6: add_flag(o_ptr->art_flags, TR_FREE_ACT); break;
178 case 7: add_flag(o_ptr->art_flags, TR_HOLD_LIFE); break;
187 static void curse_artifact(object_type * o_ptr)
189 if (o_ptr->pval > 0) o_ptr->pval = 0 - (o_ptr->pval + randint1(4));
190 if (o_ptr->to_a > 0) o_ptr->to_a = 0 - (o_ptr->to_a + randint1(4));
191 if (o_ptr->to_h > 0) o_ptr->to_h = 0 - (o_ptr->to_h + randint1(4));
192 if (o_ptr->to_d > 0) o_ptr->to_d = 0 - (o_ptr->to_d + randint1(4));
194 o_ptr->curse_flags |= (TRC_HEAVY_CURSE | TRC_CURSED);
195 remove_flag(o_ptr->art_flags, TR_BLESSED);
197 if (one_in_(4)) o_ptr->curse_flags |= TRC_PERMA_CURSE;
198 if (one_in_(3)) add_flag(o_ptr->art_flags, TR_TY_CURSE);
199 if (one_in_(2)) add_flag(o_ptr->art_flags, TR_AGGRAVATE);
200 if (one_in_(3)) add_flag(o_ptr->art_flags, TR_DRAIN_EXP);
201 if (one_in_(2)) add_flag(o_ptr->art_flags, TR_TELEPORT);
202 else if (one_in_(3)) add_flag(o_ptr->art_flags, TR_NO_TELE);
204 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))
205 add_flag(o_ptr->art_flags, TR_NO_MAGIC);
209 static void random_plus(object_type * o_ptr)
211 int this_type = (object_is_weapon_ammo(o_ptr) ? 23 : 19);
213 switch (artifact_bias)
216 if (!(have_flag(o_ptr->art_flags, TR_STR)))
218 add_flag(o_ptr->art_flags, TR_STR);
219 if (one_in_(2)) return;
222 if (!(have_flag(o_ptr->art_flags, TR_CON)))
224 add_flag(o_ptr->art_flags, TR_CON);
225 if (one_in_(2)) return;
228 if (!(have_flag(o_ptr->art_flags, TR_DEX)))
230 add_flag(o_ptr->art_flags, TR_DEX);
231 if (one_in_(2)) return;
236 if (!(have_flag(o_ptr->art_flags, TR_INT)))
238 add_flag(o_ptr->art_flags, TR_INT);
239 if (one_in_(2)) return;
241 if ((o_ptr->tval == TV_GLOVES) && !(have_flag(o_ptr->art_flags, TR_MAGIC_MASTERY)))
243 add_flag(o_ptr->art_flags, TR_MAGIC_MASTERY);
244 if (one_in_(2)) return;
249 if (!(have_flag(o_ptr->art_flags, TR_WIS)))
251 add_flag(o_ptr->art_flags, TR_WIS);
252 if (one_in_(2)) return;
257 if (!(have_flag(o_ptr->art_flags, TR_DEX)))
259 add_flag(o_ptr->art_flags, TR_DEX);
260 if (one_in_(2)) return;
263 if (!(have_flag(o_ptr->art_flags, TR_CON)))
265 add_flag(o_ptr->art_flags, TR_CON);
266 if (one_in_(2)) return;
269 if (!(have_flag(o_ptr->art_flags, TR_STR)))
271 add_flag(o_ptr->art_flags, TR_STR);
272 if (one_in_(2)) return;
277 if (!(have_flag(o_ptr->art_flags, TR_STEALTH)))
279 add_flag(o_ptr->art_flags, TR_STEALTH);
280 if (one_in_(2)) return;
282 if (!(have_flag(o_ptr->art_flags, TR_SEARCH)))
284 add_flag(o_ptr->art_flags, TR_SEARCH);
285 if (one_in_(2)) return;
290 if (!(have_flag(o_ptr->art_flags, TR_STR)))
292 add_flag(o_ptr->art_flags, TR_STR);
293 if (one_in_(2)) return;
298 if (!(have_flag(o_ptr->art_flags, TR_WIS)))
300 add_flag(o_ptr->art_flags, TR_WIS);
301 if (one_in_(2)) return;
306 if (!(have_flag(o_ptr->art_flags, TR_INT)))
308 add_flag(o_ptr->art_flags, TR_INT);
309 if (one_in_(2)) return;
314 if (!(have_flag(o_ptr->art_flags, TR_DEX)))
316 add_flag(o_ptr->art_flags, TR_DEX);
317 if (one_in_(2)) return;
322 if (!(have_flag(o_ptr->art_flags, TR_CON)))
324 add_flag(o_ptr->art_flags, TR_CON);
325 if (one_in_(2)) return;
330 if (!(have_flag(o_ptr->art_flags, TR_CHR)))
332 add_flag(o_ptr->art_flags, TR_CHR);
333 if (one_in_(2)) return;
338 if ((artifact_bias == BIAS_MAGE || artifact_bias == BIAS_PRIESTLY) && (o_ptr->tval == TV_SOFT_ARMOR) && (o_ptr->sval == SV_ROBE))
340 if (!(have_flag(o_ptr->art_flags, TR_DEC_MANA)) && one_in_(3))
342 add_flag(o_ptr->art_flags, TR_DEC_MANA);
343 if (one_in_(2)) return;
347 switch (randint1(this_type))
350 add_flag(o_ptr->art_flags, TR_STR);
351 if (!artifact_bias && !one_in_(13))
352 artifact_bias = BIAS_STR;
353 else if (!artifact_bias && one_in_(7))
354 artifact_bias = BIAS_WARRIOR;
357 add_flag(o_ptr->art_flags, TR_INT);
358 if (!artifact_bias && !one_in_(13))
359 artifact_bias = BIAS_INT;
360 else if (!artifact_bias && one_in_(7))
361 artifact_bias = BIAS_MAGE;
364 add_flag(o_ptr->art_flags, TR_WIS);
365 if (!artifact_bias && !one_in_(13))
366 artifact_bias = BIAS_WIS;
367 else if (!artifact_bias && one_in_(7))
368 artifact_bias = BIAS_PRIESTLY;
371 add_flag(o_ptr->art_flags, TR_DEX);
372 if (!artifact_bias && !one_in_(13))
373 artifact_bias = BIAS_DEX;
374 else if (!artifact_bias && one_in_(7))
375 artifact_bias = BIAS_ROGUE;
378 add_flag(o_ptr->art_flags, TR_CON);
379 if (!artifact_bias && !one_in_(13))
380 artifact_bias = BIAS_CON;
381 else if (!artifact_bias && one_in_(9))
382 artifact_bias = BIAS_RANGER;
385 add_flag(o_ptr->art_flags, TR_CHR);
386 if (!artifact_bias && !one_in_(13))
387 artifact_bias = BIAS_CHR;
390 add_flag(o_ptr->art_flags, TR_STEALTH);
391 if (!artifact_bias && one_in_(3))
392 artifact_bias = BIAS_ROGUE;
395 add_flag(o_ptr->art_flags, TR_SEARCH);
396 if (!artifact_bias && one_in_(9))
397 artifact_bias = BIAS_RANGER;
400 add_flag(o_ptr->art_flags, TR_INFRA);
403 add_flag(o_ptr->art_flags, TR_SPEED);
404 if (!artifact_bias && one_in_(11))
405 artifact_bias = BIAS_ROGUE;
408 add_flag(o_ptr->art_flags, TR_TUNNEL);
411 if (o_ptr->tval == TV_BOW) random_plus(o_ptr);
414 add_flag(o_ptr->art_flags, TR_BLOWS);
415 if (!artifact_bias && one_in_(11))
416 artifact_bias = BIAS_WARRIOR;
423 static void random_resistance(object_type * o_ptr)
425 switch (artifact_bias)
428 if (!(have_flag(o_ptr->art_flags, TR_RES_ACID)))
430 add_flag(o_ptr->art_flags, TR_RES_ACID);
431 if (one_in_(2)) return;
433 if (one_in_(BIAS_LUCK) && !(have_flag(o_ptr->art_flags, TR_IM_ACID)))
435 add_flag(o_ptr->art_flags, TR_IM_ACID);
436 if (!one_in_(IM_LUCK))
438 remove_flag(o_ptr->art_flags, TR_IM_ELEC);
439 remove_flag(o_ptr->art_flags, TR_IM_COLD);
440 remove_flag(o_ptr->art_flags, TR_IM_FIRE);
442 if (one_in_(2)) return;
447 if (!(have_flag(o_ptr->art_flags, TR_RES_ELEC)))
449 add_flag(o_ptr->art_flags, TR_RES_ELEC);
450 if (one_in_(2)) return;
452 if ((o_ptr->tval >= TV_CLOAK) && (o_ptr->tval <= TV_HARD_ARMOR) &&
453 !(have_flag(o_ptr->art_flags, TR_SH_ELEC)))
455 add_flag(o_ptr->art_flags, TR_SH_ELEC);
456 if (one_in_(2)) return;
458 if (one_in_(BIAS_LUCK) && !(have_flag(o_ptr->art_flags, TR_IM_ELEC)))
460 add_flag(o_ptr->art_flags, TR_IM_ELEC);
461 if (!one_in_(IM_LUCK))
463 remove_flag(o_ptr->art_flags, TR_IM_ACID);
464 remove_flag(o_ptr->art_flags, TR_IM_COLD);
465 remove_flag(o_ptr->art_flags, TR_IM_FIRE);
468 if (one_in_(2)) return;
473 if (!(have_flag(o_ptr->art_flags, TR_RES_FIRE)))
475 add_flag(o_ptr->art_flags, TR_RES_FIRE);
476 if (one_in_(2)) return;
478 if ((o_ptr->tval >= TV_CLOAK) &&
479 (o_ptr->tval <= TV_HARD_ARMOR) &&
480 !(have_flag(o_ptr->art_flags, TR_SH_FIRE)))
482 add_flag(o_ptr->art_flags, TR_SH_FIRE);
483 if (one_in_(2)) return;
485 if (one_in_(BIAS_LUCK) &&
486 !(have_flag(o_ptr->art_flags, TR_IM_FIRE)))
488 add_flag(o_ptr->art_flags, TR_IM_FIRE);
489 if (!one_in_(IM_LUCK))
491 remove_flag(o_ptr->art_flags, TR_IM_ELEC);
492 remove_flag(o_ptr->art_flags, TR_IM_COLD);
493 remove_flag(o_ptr->art_flags, TR_IM_ACID);
495 if (one_in_(2)) return;
500 if (!(have_flag(o_ptr->art_flags, TR_RES_COLD)))
502 add_flag(o_ptr->art_flags, TR_RES_COLD);
503 if (one_in_(2)) return;
505 if ((o_ptr->tval >= TV_CLOAK) &&
506 (o_ptr->tval <= TV_HARD_ARMOR) &&
507 !(have_flag(o_ptr->art_flags, TR_SH_COLD)))
509 add_flag(o_ptr->art_flags, TR_SH_COLD);
510 if (one_in_(2)) return;
512 if (one_in_(BIAS_LUCK) && !(have_flag(o_ptr->art_flags, TR_IM_COLD)))
514 add_flag(o_ptr->art_flags, TR_IM_COLD);
515 if (!one_in_(IM_LUCK))
517 remove_flag(o_ptr->art_flags, TR_IM_ELEC);
518 remove_flag(o_ptr->art_flags, TR_IM_ACID);
519 remove_flag(o_ptr->art_flags, TR_IM_FIRE);
521 if (one_in_(2)) return;
526 if (!(have_flag(o_ptr->art_flags, TR_RES_POIS)))
528 add_flag(o_ptr->art_flags, TR_RES_POIS);
529 if (one_in_(2)) return;
534 if (!one_in_(3) && (!(have_flag(o_ptr->art_flags, TR_RES_FEAR))))
536 add_flag(o_ptr->art_flags, TR_RES_FEAR);
537 if (one_in_(2)) return;
539 if (one_in_(3) && (!(have_flag(o_ptr->art_flags, TR_NO_MAGIC))))
541 add_flag(o_ptr->art_flags, TR_NO_MAGIC);
542 if (one_in_(2)) return;
546 case BIAS_NECROMANTIC:
547 if (!(have_flag(o_ptr->art_flags, TR_RES_NETHER)))
549 add_flag(o_ptr->art_flags, TR_RES_NETHER);
550 if (one_in_(2)) return;
552 if (!(have_flag(o_ptr->art_flags, TR_RES_POIS)))
554 add_flag(o_ptr->art_flags, TR_RES_POIS);
555 if (one_in_(2)) return;
557 if (!(have_flag(o_ptr->art_flags, TR_RES_DARK)))
559 add_flag(o_ptr->art_flags, TR_RES_DARK);
560 if (one_in_(2)) return;
565 if (!(have_flag(o_ptr->art_flags, TR_RES_CHAOS)))
567 add_flag(o_ptr->art_flags, TR_RES_CHAOS);
568 if (one_in_(2)) return;
570 if (!(have_flag(o_ptr->art_flags, TR_RES_CONF)))
572 add_flag(o_ptr->art_flags, TR_RES_CONF);
573 if (one_in_(2)) return;
575 if (!(have_flag(o_ptr->art_flags, TR_RES_DISEN)))
577 add_flag(o_ptr->art_flags, TR_RES_DISEN);
578 if (one_in_(2)) return;
583 switch (randint1(42))
586 if (!one_in_(WEIRD_LUCK))
587 random_resistance(o_ptr);
590 add_flag(o_ptr->art_flags, TR_IM_ACID);
592 artifact_bias = BIAS_ACID;
596 if (!one_in_(WEIRD_LUCK))
597 random_resistance(o_ptr);
600 add_flag(o_ptr->art_flags, TR_IM_ELEC);
602 artifact_bias = BIAS_ELEC;
606 if (!one_in_(WEIRD_LUCK))
607 random_resistance(o_ptr);
610 add_flag(o_ptr->art_flags, TR_IM_COLD);
612 artifact_bias = BIAS_COLD;
616 if (!one_in_(WEIRD_LUCK))
617 random_resistance(o_ptr);
620 add_flag(o_ptr->art_flags, TR_IM_FIRE);
622 artifact_bias = BIAS_FIRE;
628 add_flag(o_ptr->art_flags, TR_RES_ACID);
630 artifact_bias = BIAS_ACID;
635 add_flag(o_ptr->art_flags, TR_RES_ELEC);
637 artifact_bias = BIAS_ELEC;
642 add_flag(o_ptr->art_flags, TR_RES_FIRE);
644 artifact_bias = BIAS_FIRE;
649 add_flag(o_ptr->art_flags, TR_RES_COLD);
651 artifact_bias = BIAS_COLD;
655 add_flag(o_ptr->art_flags, TR_RES_POIS);
656 if (!artifact_bias && !one_in_(4))
657 artifact_bias = BIAS_POIS;
658 else if (!artifact_bias && one_in_(2))
659 artifact_bias = BIAS_NECROMANTIC;
660 else if (!artifact_bias && one_in_(2))
661 artifact_bias = BIAS_ROGUE;
665 add_flag(o_ptr->art_flags, TR_RES_FEAR);
666 if (!artifact_bias && one_in_(3))
667 artifact_bias = BIAS_WARRIOR;
670 add_flag(o_ptr->art_flags, TR_RES_LITE);
673 add_flag(o_ptr->art_flags, TR_RES_DARK);
677 add_flag(o_ptr->art_flags, TR_RES_BLIND);
681 add_flag(o_ptr->art_flags, TR_RES_CONF);
682 if (!artifact_bias && one_in_(6))
683 artifact_bias = BIAS_CHAOS;
687 add_flag(o_ptr->art_flags, TR_RES_SOUND);
691 add_flag(o_ptr->art_flags, TR_RES_SHARDS);
695 add_flag(o_ptr->art_flags, TR_RES_NETHER);
696 if (!artifact_bias && one_in_(3))
697 artifact_bias = BIAS_NECROMANTIC;
701 add_flag(o_ptr->art_flags, TR_RES_NEXUS);
705 add_flag(o_ptr->art_flags, TR_RES_CHAOS);
706 if (!artifact_bias && one_in_(2))
707 artifact_bias = BIAS_CHAOS;
711 add_flag(o_ptr->art_flags, TR_RES_DISEN);
714 if (o_ptr->tval >= TV_CLOAK && o_ptr->tval <= TV_HARD_ARMOR)
715 add_flag(o_ptr->art_flags, TR_SH_ELEC);
717 random_resistance(o_ptr);
719 artifact_bias = BIAS_ELEC;
722 if (o_ptr->tval >= TV_CLOAK && o_ptr->tval <= TV_HARD_ARMOR)
723 add_flag(o_ptr->art_flags, TR_SH_FIRE);
725 random_resistance(o_ptr);
727 artifact_bias = BIAS_FIRE;
730 if (o_ptr->tval == TV_SHIELD || o_ptr->tval == TV_CLOAK ||
731 o_ptr->tval == TV_HELM || o_ptr->tval == TV_HARD_ARMOR)
732 add_flag(o_ptr->art_flags, TR_REFLECT);
734 random_resistance(o_ptr);
737 if (o_ptr->tval >= TV_CLOAK && o_ptr->tval <= TV_HARD_ARMOR)
738 add_flag(o_ptr->art_flags, TR_SH_COLD);
740 random_resistance(o_ptr);
742 artifact_bias = BIAS_COLD;
749 static void random_misc(object_type * o_ptr)
751 switch (artifact_bias)
754 if (!(have_flag(o_ptr->art_flags, TR_SUST_CON)))
756 add_flag(o_ptr->art_flags, TR_SUST_CON);
757 if (one_in_(2)) return;
762 if (!(have_flag(o_ptr->art_flags, TR_SUST_STR)))
764 add_flag(o_ptr->art_flags, TR_SUST_STR);
765 if (one_in_(2)) return;
770 if (!(have_flag(o_ptr->art_flags, TR_SUST_WIS)))
772 add_flag(o_ptr->art_flags, TR_SUST_WIS);
773 if (one_in_(2)) return;
778 if (!(have_flag(o_ptr->art_flags, TR_SUST_INT)))
780 add_flag(o_ptr->art_flags, TR_SUST_INT);
781 if (one_in_(2)) return;
786 if (!(have_flag(o_ptr->art_flags, TR_SUST_DEX)))
788 add_flag(o_ptr->art_flags, TR_SUST_DEX);
789 if (one_in_(2)) return;
794 if (!(have_flag(o_ptr->art_flags, TR_SUST_CON)))
796 add_flag(o_ptr->art_flags, TR_SUST_CON);
797 if (one_in_(2)) return;
802 if (!(have_flag(o_ptr->art_flags, TR_SUST_CHR)))
804 add_flag(o_ptr->art_flags, TR_SUST_CHR);
805 if (one_in_(2)) return;
810 if (!(have_flag(o_ptr->art_flags, TR_TELEPORT)))
812 add_flag(o_ptr->art_flags, TR_TELEPORT);
813 if (one_in_(2)) return;
818 if (!(have_flag(o_ptr->art_flags, TR_LITE)))
820 add_flag(o_ptr->art_flags, TR_LITE); /* Freebie */
825 switch (randint1(33))
828 add_flag(o_ptr->art_flags, TR_SUST_STR);
830 artifact_bias = BIAS_STR;
833 add_flag(o_ptr->art_flags, TR_SUST_INT);
835 artifact_bias = BIAS_INT;
838 add_flag(o_ptr->art_flags, TR_SUST_WIS);
840 artifact_bias = BIAS_WIS;
843 add_flag(o_ptr->art_flags, TR_SUST_DEX);
845 artifact_bias = BIAS_DEX;
848 add_flag(o_ptr->art_flags, TR_SUST_CON);
850 artifact_bias = BIAS_CON;
853 add_flag(o_ptr->art_flags, TR_SUST_CHR);
855 artifact_bias = BIAS_CHR;
860 add_flag(o_ptr->art_flags, TR_FREE_ACT);
863 add_flag(o_ptr->art_flags, TR_HOLD_LIFE);
864 if (!artifact_bias && one_in_(5))
865 artifact_bias = BIAS_PRIESTLY;
866 else if (!artifact_bias && one_in_(6))
867 artifact_bias = BIAS_NECROMANTIC;
871 add_flag(o_ptr->art_flags, TR_LITE);
875 add_flag(o_ptr->art_flags, TR_LEVITATION);
880 add_flag(o_ptr->art_flags, TR_SEE_INVIS);
884 add_flag(o_ptr->art_flags, TR_SLOW_DIGEST);
888 add_flag(o_ptr->art_flags, TR_REGEN);
891 add_flag(o_ptr->art_flags, TR_TELEPORT);
896 if (object_is_armour(o_ptr))
900 o_ptr->to_a = 4 + randint1(11);
907 int bonus_h, bonus_d;
908 add_flag(o_ptr->art_flags, TR_SHOW_MODS);
909 bonus_h = 4 + (randint1(11));
910 bonus_d = 4 + (randint1(11));
911 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))
916 o_ptr->to_h += bonus_h;
917 o_ptr->to_d += bonus_d;
921 add_flag(o_ptr->art_flags, TR_NO_MAGIC);
924 add_flag(o_ptr->art_flags, TR_NO_TELE);
927 add_flag(o_ptr->art_flags, TR_WARNING);
934 add_flag(o_ptr->art_flags, TR_ESP_EVIL);
935 if (!artifact_bias && one_in_(3))
936 artifact_bias = BIAS_LAW;
939 add_flag(o_ptr->art_flags, TR_ESP_NONLIVING);
940 if (!artifact_bias && one_in_(3))
941 artifact_bias = BIAS_MAGE;
944 add_flag(o_ptr->art_flags, TR_TELEPATHY);
945 if (!artifact_bias && one_in_(9))
946 artifact_bias = BIAS_MAGE;
956 idx[0] = randint1(8);
958 idx[1] = randint1(7);
959 if (idx[1] >= idx[0]) idx[1]++;
961 idx[2] = randint1(6);
962 if (idx[2] >= idx[0]) idx[2]++;
963 if (idx[2] >= idx[1]) idx[2]++;
965 while (n--) switch (idx[n])
968 add_flag(o_ptr->art_flags, TR_ESP_ANIMAL);
969 if (!artifact_bias && one_in_(4))
970 artifact_bias = BIAS_RANGER;
973 add_flag(o_ptr->art_flags, TR_ESP_UNDEAD);
974 if (!artifact_bias && one_in_(3))
975 artifact_bias = BIAS_PRIESTLY;
976 else if (!artifact_bias && one_in_(6))
977 artifact_bias = BIAS_NECROMANTIC;
980 add_flag(o_ptr->art_flags, TR_ESP_DEMON);
983 add_flag(o_ptr->art_flags, TR_ESP_ORC);
986 add_flag(o_ptr->art_flags, TR_ESP_TROLL);
989 add_flag(o_ptr->art_flags, TR_ESP_GIANT);
992 add_flag(o_ptr->art_flags, TR_ESP_HUMAN);
993 if (!artifact_bias && one_in_(6))
994 artifact_bias = BIAS_ROGUE;
997 add_flag(o_ptr->art_flags, TR_ESP_GOOD);
998 if (!artifact_bias && one_in_(3))
999 artifact_bias = BIAS_LAW;
1008 static void random_slay(object_type *o_ptr)
1010 if (o_ptr->tval == TV_BOW)
1012 switch (randint1(6))
1017 add_flag(o_ptr->art_flags, TR_XTRA_MIGHT);
1018 if (!one_in_(7)) remove_flag(o_ptr->art_flags, TR_XTRA_SHOTS);
1019 if (!artifact_bias && one_in_(9))
1020 artifact_bias = BIAS_RANGER;
1023 add_flag(o_ptr->art_flags, TR_XTRA_SHOTS);
1024 if (!one_in_(7)) remove_flag(o_ptr->art_flags, TR_XTRA_MIGHT);
1025 if (!artifact_bias && one_in_(9))
1026 artifact_bias = BIAS_RANGER;
1033 switch (artifact_bias)
1036 if (!(have_flag(o_ptr->art_flags, TR_CHAOTIC)))
1038 add_flag(o_ptr->art_flags, TR_CHAOTIC);
1039 if (one_in_(2)) return;
1044 if((o_ptr->tval == TV_SWORD || o_ptr->tval == TV_POLEARM) &&
1045 !(have_flag(o_ptr->art_flags, TR_BLESSED)))
1047 /* A free power for "priestly" random artifacts */
1048 add_flag(o_ptr->art_flags, TR_BLESSED);
1052 case BIAS_NECROMANTIC:
1053 if (!(have_flag(o_ptr->art_flags, TR_VAMPIRIC)))
1055 add_flag(o_ptr->art_flags, TR_VAMPIRIC);
1056 if (one_in_(2)) return;
1058 if (!(have_flag(o_ptr->art_flags, TR_BRAND_POIS)) && one_in_(2))
1060 add_flag(o_ptr->art_flags, TR_BRAND_POIS);
1061 if (one_in_(2)) return;
1066 if (!(have_flag(o_ptr->art_flags, TR_SLAY_ANIMAL)))
1068 add_flag(o_ptr->art_flags, TR_SLAY_ANIMAL);
1069 if (one_in_(2)) return;
1074 if ((((o_ptr->tval == TV_SWORD) && (o_ptr->sval == SV_DAGGER)) ||
1075 ((o_ptr->tval == TV_POLEARM) && (o_ptr->sval == SV_SPEAR))) &&
1076 !(have_flag(o_ptr->art_flags, TR_THROW)))
1078 /* Free power for rogues... */
1079 add_flag(o_ptr->art_flags, TR_THROW);
1081 if (!(have_flag(o_ptr->art_flags, TR_BRAND_POIS)))
1083 add_flag(o_ptr->art_flags, TR_BRAND_POIS);
1084 if (one_in_(2)) return;
1089 if (!(have_flag(o_ptr->art_flags, TR_BRAND_POIS)))
1091 add_flag(o_ptr->art_flags, TR_BRAND_POIS);
1092 if (one_in_(2)) return;
1097 if (!(have_flag(o_ptr->art_flags, TR_BRAND_FIRE)))
1099 add_flag(o_ptr->art_flags, TR_BRAND_FIRE);
1100 if (one_in_(2)) return;
1105 if (!(have_flag(o_ptr->art_flags, TR_BRAND_COLD)))
1107 add_flag(o_ptr->art_flags, TR_BRAND_COLD);
1108 if (one_in_(2)) return;
1113 if (!(have_flag(o_ptr->art_flags, TR_BRAND_ELEC)))
1115 add_flag(o_ptr->art_flags, TR_BRAND_ELEC);
1116 if (one_in_(2)) return;
1121 if (!(have_flag(o_ptr->art_flags, TR_BRAND_ACID)))
1123 add_flag(o_ptr->art_flags, TR_BRAND_ACID);
1124 if (one_in_(2)) return;
1129 if (!(have_flag(o_ptr->art_flags, TR_SLAY_EVIL)))
1131 add_flag(o_ptr->art_flags, TR_SLAY_EVIL);
1132 if (one_in_(2)) return;
1134 if (!(have_flag(o_ptr->art_flags, TR_SLAY_UNDEAD)))
1136 add_flag(o_ptr->art_flags, TR_SLAY_UNDEAD);
1137 if (one_in_(2)) return;
1139 if (!(have_flag(o_ptr->art_flags, TR_SLAY_DEMON)))
1141 add_flag(o_ptr->art_flags, TR_SLAY_DEMON);
1142 if (one_in_(2)) return;
1147 switch (randint1(36))
1151 add_flag(o_ptr->art_flags, TR_SLAY_ANIMAL);
1155 add_flag(o_ptr->art_flags, TR_SLAY_EVIL);
1156 if (!artifact_bias && one_in_(2))
1157 artifact_bias = BIAS_LAW;
1158 else if (!artifact_bias && one_in_(9))
1159 artifact_bias = BIAS_PRIESTLY;
1163 add_flag(o_ptr->art_flags, TR_SLAY_UNDEAD);
1164 if (!artifact_bias && one_in_(9))
1165 artifact_bias = BIAS_PRIESTLY;
1169 add_flag(o_ptr->art_flags, TR_SLAY_DEMON);
1170 if (!artifact_bias && one_in_(9))
1171 artifact_bias = BIAS_PRIESTLY;
1175 add_flag(o_ptr->art_flags, TR_SLAY_ORC);
1179 add_flag(o_ptr->art_flags, TR_SLAY_TROLL);
1183 add_flag(o_ptr->art_flags, TR_SLAY_GIANT);
1187 add_flag(o_ptr->art_flags, TR_SLAY_DRAGON);
1190 add_flag(o_ptr->art_flags, TR_KILL_DRAGON);
1194 if (o_ptr->tval == TV_SWORD)
1196 add_flag(o_ptr->art_flags, TR_VORPAL);
1197 if (!artifact_bias && one_in_(9))
1198 artifact_bias = BIAS_WARRIOR;
1204 add_flag(o_ptr->art_flags, TR_IMPACT);
1208 add_flag(o_ptr->art_flags, TR_BRAND_FIRE);
1210 artifact_bias = BIAS_FIRE;
1214 add_flag(o_ptr->art_flags, TR_BRAND_COLD);
1216 artifact_bias = BIAS_COLD;
1220 add_flag(o_ptr->art_flags, TR_BRAND_ELEC);
1222 artifact_bias = BIAS_ELEC;
1226 add_flag(o_ptr->art_flags, TR_BRAND_ACID);
1228 artifact_bias = BIAS_ACID;
1232 add_flag(o_ptr->art_flags, TR_BRAND_POIS);
1233 if (!artifact_bias && !one_in_(3))
1234 artifact_bias = BIAS_POIS;
1235 else if (!artifact_bias && one_in_(6))
1236 artifact_bias = BIAS_NECROMANTIC;
1237 else if (!artifact_bias)
1238 artifact_bias = BIAS_ROGUE;
1241 add_flag(o_ptr->art_flags, TR_VAMPIRIC);
1243 artifact_bias = BIAS_NECROMANTIC;
1246 add_flag(o_ptr->art_flags, TR_FORCE_WEAPON);
1248 artifact_bias = (one_in_(2) ? BIAS_MAGE : BIAS_PRIESTLY);
1252 add_flag(o_ptr->art_flags, TR_SLAY_HUMAN);
1255 add_flag(o_ptr->art_flags, TR_CHAOTIC);
1257 artifact_bias = BIAS_CHAOS;
1263 static void give_activation_power(object_type *o_ptr)
1265 int type = 0, chance = 0;
1267 switch (artifact_bias)
1272 type = ACT_BO_ELEC_1;
1274 else if (!one_in_(5))
1276 type = ACT_BA_ELEC_2;
1280 type = ACT_BA_ELEC_3;
1286 type = ACT_BA_POIS_1;
1293 type = ACT_BO_FIRE_1;
1295 else if (!one_in_(5))
1297 type = ACT_BA_FIRE_1;
1301 type = ACT_BA_FIRE_2;
1309 type = ACT_BO_COLD_1;
1310 else if (!one_in_(3))
1311 type = ACT_BA_COLD_1;
1312 else if (!one_in_(3))
1313 type = ACT_BA_COLD_2;
1315 type = ACT_BA_COLD_3;
1321 type = ACT_SUMMON_DEMON;
1323 type = ACT_CALL_CHAOS;
1330 type = ACT_CHARM_UNDEAD;
1331 else if (one_in_(12))
1332 type = ACT_BANISH_EVIL;
1333 else if (one_in_(11))
1334 type = ACT_DISP_EVIL;
1335 else if (one_in_(10))
1336 type = ACT_PROT_EVIL;
1337 else if (one_in_(9))
1338 type = ACT_CURE_1000;
1339 else if (one_in_(8))
1340 type = ACT_CURE_700;
1341 else if (one_in_(7))
1342 type = ACT_REST_ALL;
1343 else if (one_in_(6))
1344 type = ACT_REST_LIFE;
1349 case BIAS_NECROMANTIC:
1353 else if (one_in_(13))
1354 type = ACT_DISP_GOOD;
1355 else if (one_in_(9))
1356 type = ACT_MASS_GENO;
1357 else if (one_in_(8))
1358 type = ACT_GENOCIDE;
1359 else if (one_in_(13))
1360 type = ACT_SUMMON_UNDEAD;
1361 else if (one_in_(9))
1362 type = ACT_VAMPIRE_2;
1363 else if (one_in_(6))
1364 type = ACT_CHARM_UNDEAD;
1366 type = ACT_VAMPIRE_1;
1372 type = ACT_BANISH_EVIL;
1373 else if (one_in_(4))
1374 type = ACT_DISP_EVIL;
1376 type = ACT_PROT_EVIL;
1383 else if (one_in_(4))
1385 else if (one_in_(3))
1386 type = ACT_DETECT_ALL;
1387 else if (one_in_(8))
1390 type = ACT_ID_PLAIN;
1396 type = ACT_SUMMON_ELEMENTAL;
1397 else if (one_in_(10))
1398 type = ACT_SUMMON_PHANTOM;
1399 else if (one_in_(5))
1400 type = ACT_RUNE_EXPLO;
1416 type = ACT_CHARM_ANIMALS;
1417 else if (one_in_(7))
1418 type = ACT_SUMMON_ANIMAL;
1419 else if (one_in_(6))
1420 type = ACT_CHARM_ANIMAL;
1421 else if (one_in_(4))
1422 type = ACT_RESIST_ALL;
1423 else if (one_in_(3))
1426 type = ACT_CURE_POISON;
1430 while (!type || (randint1(100) >= chance))
1432 type = randint1(255);
1447 case ACT_CURE_POISON:
1461 case ACT_RESIST_ALL:
1462 case ACT_DETECT_ALL:
1484 case ACT_CHARM_ANIMAL:
1487 case ACT_SUMMON_ANIMAL:
1493 case ACT_BANISH_EVIL:
1496 case ACT_CHARM_UNDEAD:
1497 case ACT_CHARM_OTHER:
1498 case ACT_SUMMON_PHANTOM:
1500 case ACT_RUNE_EXPLO:
1503 case ACT_CALL_CHAOS:
1505 case ACT_CHARM_ANIMALS:
1506 case ACT_CHARM_OTHERS:
1507 case ACT_SUMMON_ELEMENTAL:
1515 case ACT_XTRA_SPEED:
1516 case ACT_DETECT_XTRA:
1520 case ACT_SUMMON_UNDEAD:
1521 case ACT_SUMMON_DEMON:
1532 /* A type was chosen... */
1533 o_ptr->xtra2 = type;
1534 add_flag(o_ptr->art_flags, TR_ACTIVATE);
1539 static void get_random_name(char *return_name, bool armour, int power)
1541 int prob = randint1(100);
1543 if (prob <= SINDARIN_NAME)
1545 get_table_sindarin(return_name);
1547 else if (prob <= TABLE_NAME)
1549 get_table_name(return_name);
1562 filename = "a_cursed_j.txt";
1564 filename = "a_cursed.txt";
1569 filename = "a_low_j.txt";
1571 filename = "a_low.txt";
1576 filename = "a_med_j.txt";
1578 filename = "a_med.txt";
1583 filename = "a_high_j.txt";
1585 filename = "a_high.txt";
1594 filename = "w_cursed_j.txt";
1596 filename = "w_cursed.txt";
1601 filename = "w_low_j.txt";
1603 filename = "w_low.txt";
1608 filename = "w_med_j.txt";
1610 filename = "w_med.txt";
1615 filename = "w_high_j.txt";
1617 filename = "w_high.txt";
1622 (void)get_rnd_line(filename, artifact_bias, return_name);
1624 if (return_name[0] == 0) get_table_name(return_name);
1630 bool create_artifact(object_type *o_ptr, bool a_scroll)
1632 char new_name[1024];
1634 int powers = randint1(5) + 1;
1635 int max_type = (object_is_weapon_ammo(o_ptr) ? 7 : 5);
1638 bool a_cursed = FALSE;
1639 int warrior_artifact_bias = 0;
1642 /* Reset artifact bias */
1645 /* Nuke enchantments */
1649 for (i = 0; i < TR_FLAG_SIZE; i++)
1650 o_ptr->art_flags[i] |= k_info[o_ptr->k_idx].flags[i];
1652 if (o_ptr->pval) has_pval = TRUE;
1654 if (a_scroll && one_in_(4))
1656 switch (p_ptr->pclass)
1659 case CLASS_BERSERKER:
1664 artifact_bias = BIAS_WARRIOR;
1667 case CLASS_HIGH_MAGE:
1668 case CLASS_SORCERER:
1669 case CLASS_MAGIC_EATER:
1670 case CLASS_BLUE_MAGE:
1671 artifact_bias = BIAS_MAGE;
1674 artifact_bias = BIAS_PRIESTLY;
1678 artifact_bias = BIAS_ROGUE;
1679 warrior_artifact_bias = 25;
1683 artifact_bias = BIAS_RANGER;
1684 warrior_artifact_bias = 30;
1687 artifact_bias = BIAS_PRIESTLY;
1688 warrior_artifact_bias = 40;
1690 case CLASS_WARRIOR_MAGE:
1691 case CLASS_RED_MAGE:
1692 artifact_bias = BIAS_MAGE;
1693 warrior_artifact_bias = 40;
1695 case CLASS_CHAOS_WARRIOR:
1696 artifact_bias = BIAS_CHAOS;
1697 warrior_artifact_bias = 40;
1700 case CLASS_FORCETRAINER:
1701 artifact_bias = BIAS_PRIESTLY;
1703 case CLASS_MINDCRAFTER:
1705 if (randint1(5) > 2) artifact_bias = BIAS_PRIESTLY;
1708 if (randint1(5) > 2) artifact_bias = BIAS_WARRIOR;
1710 case CLASS_IMITATOR:
1711 if (randint1(2) > 1) artifact_bias = BIAS_RANGER;
1713 case CLASS_BEASTMASTER:
1714 artifact_bias = BIAS_CHR;
1715 warrior_artifact_bias = 50;
1717 case CLASS_MIRROR_MASTER:
1718 if (randint1(4) > 1)
1720 artifact_bias = BIAS_MAGE;
1724 artifact_bias = BIAS_ROGUE;
1730 if (a_scroll && (randint1(100) <= warrior_artifact_bias))
1731 artifact_bias = BIAS_WARRIOR;
1733 strcpy(new_name, "");
1735 if (!a_scroll && one_in_(A_CURSED))
1737 if (((o_ptr->tval == TV_AMULET) || (o_ptr->tval == TV_RING)) && object_is_cursed(o_ptr))
1740 while (one_in_(powers) || one_in_(7) || one_in_(10))
1743 if (!a_cursed && one_in_(WEIRD_LUCK))
1746 if (a_cursed) powers /= 2;
1751 switch (randint1(max_type))
1758 if (one_in_(2) && object_is_weapon_ammo(o_ptr) && (o_ptr->tval != TV_BOW))
1760 if (a_cursed && !one_in_(13)) break;
1763 if (one_in_(o_ptr->ds+4)) o_ptr->ds++;
1767 if (one_in_(o_ptr->dd+1)) o_ptr->dd++;
1771 random_resistance(o_ptr);
1780 if (p_ptr->wizard) msg_print("Switch error in create_artifact!");
1788 add_flag(o_ptr->art_flags, TR_SHOW_MODS);
1790 /* This one commented out by gw's request... */
1792 add_flag(o_ptr->art_flags, TR_HIDE_TYPE);
1795 if (have_flag(o_ptr->art_flags, TR_BLOWS))
1797 o_ptr->pval = randint1(2);
1798 if ((o_ptr->tval == TV_SWORD) && (o_ptr->sval == SV_HAYABUSA))
1807 while (o_ptr->pval < randint1(5) || one_in_(o_ptr->pval));
1810 if ((o_ptr->pval > 4) && !one_in_(WEIRD_LUCK))
1814 /* give it some plusses... */
1815 if (object_is_armour(o_ptr))
1816 o_ptr->to_a += randint1(o_ptr->to_a > 19 ? 1 : 20 - o_ptr->to_a);
1817 else if (object_is_weapon_ammo(o_ptr))
1819 o_ptr->to_h += randint1(o_ptr->to_h > 19 ? 1 : 20 - o_ptr->to_h);
1820 o_ptr->to_d += randint1(o_ptr->to_d > 19 ? 1 : 20 - o_ptr->to_d);
1821 if ((have_flag(o_ptr->art_flags, TR_WIS)) && (o_ptr->pval > 0)) add_flag(o_ptr->art_flags, TR_BLESSED);
1824 /* Just to be sure */
1825 add_flag(o_ptr->art_flags, TR_IGNORE_ACID);
1826 add_flag(o_ptr->art_flags, TR_IGNORE_ELEC);
1827 add_flag(o_ptr->art_flags, TR_IGNORE_FIRE);
1828 add_flag(o_ptr->art_flags, TR_IGNORE_COLD);
1830 total_flags = flag_cost(o_ptr, o_ptr->pval);
1831 if (cheat_peek) msg_format("%ld", total_flags);
1833 if (a_cursed) curse_artifact(o_ptr);
1836 one_in_(object_is_armour(o_ptr) ? ACTIVATION_CHANCE * 2 : ACTIVATION_CHANCE))
1839 give_activation_power(o_ptr);
1842 if (object_is_armour(o_ptr))
1844 while ((o_ptr->to_d+o_ptr->to_h) > 20)
1846 if (one_in_(o_ptr->to_d) && one_in_(o_ptr->to_h)) break;
1847 o_ptr->to_d -= (s16b)randint0(3);
1848 o_ptr->to_h -= (s16b)randint0(3);
1850 while ((o_ptr->to_d+o_ptr->to_h) > 10)
1852 if (one_in_(o_ptr->to_d) || one_in_(o_ptr->to_h)) break;
1853 o_ptr->to_d -= (s16b)randint0(3);
1854 o_ptr->to_h -= (s16b)randint0(3);
1858 if (((artifact_bias == BIAS_MAGE) || (artifact_bias == BIAS_INT)) && (o_ptr->tval == TV_GLOVES)) add_flag(o_ptr->art_flags, TR_FREE_ACT);
1860 if ((o_ptr->tval == TV_SWORD) && (o_ptr->sval == SV_DOKUBARI))
1864 remove_flag(o_ptr->art_flags, TR_BLOWS);
1865 remove_flag(o_ptr->art_flags, TR_FORCE_WEAPON);
1866 remove_flag(o_ptr->art_flags, TR_SLAY_ANIMAL);
1867 remove_flag(o_ptr->art_flags, TR_SLAY_EVIL);
1868 remove_flag(o_ptr->art_flags, TR_SLAY_UNDEAD);
1869 remove_flag(o_ptr->art_flags, TR_SLAY_DEMON);
1870 remove_flag(o_ptr->art_flags, TR_SLAY_ORC);
1871 remove_flag(o_ptr->art_flags, TR_SLAY_TROLL);
1872 remove_flag(o_ptr->art_flags, TR_SLAY_GIANT);
1873 remove_flag(o_ptr->art_flags, TR_SLAY_DRAGON);
1874 remove_flag(o_ptr->art_flags, TR_KILL_DRAGON);
1875 remove_flag(o_ptr->art_flags, TR_SLAY_HUMAN);
1876 remove_flag(o_ptr->art_flags, TR_VORPAL);
1877 remove_flag(o_ptr->art_flags, TR_BRAND_POIS);
1878 remove_flag(o_ptr->art_flags, TR_BRAND_ACID);
1879 remove_flag(o_ptr->art_flags, TR_BRAND_ELEC);
1880 remove_flag(o_ptr->art_flags, TR_BRAND_FIRE);
1881 remove_flag(o_ptr->art_flags, TR_BRAND_COLD);
1884 if (!object_is_weapon_ammo(o_ptr))
1887 if (a_cursed) power_level = 0;
1888 else if (total_flags < 15000) power_level = 1;
1889 else if (total_flags < 35000) power_level = 2;
1890 else power_level = 3;
1896 if (a_cursed) power_level = 0;
1897 else if (total_flags < 20000) power_level = 1;
1898 else if (total_flags < 45000) power_level = 2;
1899 else power_level = 3;
1904 char dummy_name[80] = "";
1906 cptr ask_msg = "¤³¤Î¥¢¡¼¥Æ¥£¥Õ¥¡¥¯¥È¤ò²¿¤È̾ÉÕ¤±¤Þ¤¹¤«¡©";
1908 cptr ask_msg = "What do you want to call the artifact? ";
1911 /* Identify it fully */
1912 object_aware(o_ptr);
1913 object_known(o_ptr);
1915 /* Mark the item as fully known */
1916 o_ptr->ident |= (IDENT_MENTAL);
1918 (void)screen_object(o_ptr, 0L);
1920 if (!get_string(ask_msg, dummy_name, sizeof dummy_name)
1926 get_table_sindarin_aux(dummy_name);
1930 get_table_name_aux(dummy_name);
1935 sprintf(new_name, "¡Ô%s¡Õ", dummy_name);
1937 sprintf(new_name, "'%s'", dummy_name);
1940 chg_virtue(V_INDIVIDUALISM, 2);
1941 chg_virtue(V_ENCHANT, 5);
1945 get_random_name(new_name, object_is_armour(o_ptr), power_level);
1951 if (artifact_bias) msg_format("±¿¤ÎÊФä¿¥¢¡¼¥Æ¥£¥Õ¥¡¥¯¥È: %d¡£", artifact_bias);
1952 else msg_print("¥¢¡¼¥Æ¥£¥Õ¥¡¥¯¥È¤Ë±¿¤ÎÊФê¤Ê¤·¡£");
1954 if (artifact_bias) msg_format("Biased artifact: %d.", artifact_bias);
1955 else msg_print("No bias in artifact.");
1959 /* Save the inscription */
1960 o_ptr->art_name = quark_add(new_name);
1963 p_ptr->window |= (PW_INVEN | PW_EQUIP);
1969 bool activate_random_artifact(object_type * o_ptr)
1971 int plev = p_ptr->lev;
1972 int k, dir, dummy = 0;
1974 if (!o_ptr->art_name) return FALSE; /* oops? */
1976 /* Activate for attack */
1977 switch (o_ptr->xtra2)
1981 if (!get_aim_dir(&dir)) return FALSE;
1983 msg_print("ÂÀÍÛ¸÷Àþ¤¬Êü¤¿¤ì¤¿¡£");
1985 msg_print("A line of sunlight appears.");
1988 (void)lite_line(dir);
1989 o_ptr->timeout = 10;
1996 msg_print("¤½¤ì¤ÏâÁ¤·¤¤¤¯¤é¤¤¤ËÌÀ¤ë¤¯µ±¤¤¤Æ¤¤¤ë...");
1998 msg_print("It glows extremely brightly...");
2001 if (!get_aim_dir(&dir)) return FALSE;
2002 fire_bolt(GF_MISSILE, dir, damroll(2, 6));
2010 msg_print("¤½¤ì¤ÏÇ»Î理Ë̮ư¤·¤Æ¤¤¤ë...");
2012 msg_print("It throbs deep green...");
2015 if (!get_aim_dir(&dir)) return FALSE;
2016 fire_ball(GF_POIS, dir, 12, 3);
2017 o_ptr->timeout = randint0(4) + 4;
2024 msg_print("¤½¤ì¤Ï²Ð²Ö¤Ëʤ¤ï¤ì¤¿...");
2026 msg_print("It is covered in sparks...");
2029 if (!get_aim_dir(&dir)) return FALSE;
2030 fire_bolt(GF_ELEC, dir, damroll(4, 8));
2031 o_ptr->timeout = randint0(5) + 5;
2038 msg_print("¤½¤ì¤Ï»À¤Ëʤ¤ï¤ì¤¿...");
2040 msg_print("It is covered in acid...");
2043 if (!get_aim_dir(&dir)) return FALSE;
2044 fire_bolt(GF_ACID, dir, damroll(5, 8));
2045 o_ptr->timeout = randint0(6) + 6;
2052 msg_print("¤½¤ì¤ÏÁú¤Ëʤ¤ï¤ì¤¿...");
2054 msg_print("It is covered in frost...");
2057 if (!get_aim_dir(&dir)) return FALSE;
2058 fire_bolt(GF_COLD, dir, damroll(6, 8));
2059 o_ptr->timeout = randint0(7) + 7;
2066 msg_print("¤½¤ì¤Ï±ê¤Ëʤ¤ï¤ì¤¿...");
2068 msg_print("It is covered in fire...");
2071 if (!get_aim_dir(&dir)) return FALSE;
2072 fire_bolt(GF_FIRE, dir, damroll(9, 8));
2073 o_ptr->timeout = randint0(8) + 8;
2080 msg_print("¤½¤ì¤ÏÁú¤Ëʤ¤ï¤ì¤¿...");
2082 msg_print("It is covered in frost...");
2085 if (!get_aim_dir(&dir)) return FALSE;
2086 fire_ball(GF_COLD, dir, 48, 2);
2087 o_ptr->timeout = 400;
2094 msg_print("¤½¤ì¤ÏÀÖ¤¯·ã¤·¤¯µ±¤¤¤¿...");
2096 msg_print("It glows an intense red...");
2099 if (!get_aim_dir(&dir)) return FALSE;
2100 fire_ball(GF_FIRE, dir, 72, 2);
2101 o_ptr->timeout = 400;
2108 msg_print("¤½¤ì¤Ï¹õ¤¯µ±¤¤¤¿...");
2110 msg_print("It glows black...");
2113 if (!get_aim_dir(&dir)) return FALSE;
2114 if (drain_life(dir, 100))
2115 o_ptr->timeout = randint0(100) + 100;
2122 msg_print("¤½¤ì¤ÏÀĤ¯·ã¤·¤¯µ±¤¤¤¿...");
2124 msg_print("It glows an intense blue...");
2127 if (!get_aim_dir(&dir)) return FALSE;
2128 fire_ball(GF_COLD, dir, 100, 2);
2129 o_ptr->timeout = 300;
2136 msg_print("Åŵ¤¤¬¥Ñ¥Á¥Ñ¥Á²»¤òΩ¤Æ¤¿...");
2138 msg_print("It crackles with electricity...");
2141 if (!get_aim_dir(&dir)) return FALSE;
2142 fire_ball(GF_ELEC, dir, 100, 3);
2143 o_ptr->timeout = 500;
2150 msg_print("¹õ¤¯µ±¤¤¤Æ¤¤¤ë...");
2152 msg_print("It glows black...");
2155 if (!get_aim_dir(&dir)) return FALSE;
2156 drain_life(dir, 120);
2157 o_ptr->timeout = 400;
2163 if (!get_aim_dir(&dir)) return FALSE;
2164 for (dummy = 0; dummy < 3; dummy++)
2166 if (drain_life(dir, 50))
2169 o_ptr->timeout = 400;
2176 msg_print("ËâË¡¤Î¥È¥²¤¬¸½¤ì¤¿...");
2178 msg_print("It grows magical spikes...");
2181 if (!get_aim_dir(&dir)) return FALSE;
2182 fire_bolt(GF_ARROW, dir, 150);
2183 o_ptr->timeout = randint0(90) + 90;
2190 msg_print("¿¼ÀÖ¿§¤Ëµ±¤¤¤Æ¤¤¤ë...");
2192 msg_print("It glows deep red...");
2195 if (!get_aim_dir(&dir)) return FALSE;
2196 fire_ball(GF_FIRE, dir, 120, 3);
2197 o_ptr->timeout = randint0(225) + 225;
2204 msg_print("ÌÀ¤ë¤¯Çò¿§¤Ëµ±¤¤¤Æ¤¤¤ë...");
2206 msg_print("It glows bright white...");
2209 if (!get_aim_dir(&dir)) return FALSE;
2210 fire_ball(GF_COLD, dir, 200, 3);
2211 o_ptr->timeout = randint0(325) + 325;
2218 msg_print("¿¼ÀÄ¿§¤Ëµ±¤¤¤Æ¤¤¤ë...");
2220 msg_print("It glows deep blue...");
2223 if (!get_aim_dir(&dir)) return FALSE;
2224 fire_ball(GF_ELEC, dir, 250, 3);
2225 o_ptr->timeout = randint0(425) + 425;
2234 monster_type *m_ptr;
2236 for (dir = 0; dir <= 9; dir++)
2240 c_ptr = &cave[y][x];
2242 /* Get the monster */
2243 m_ptr = &m_list[c_ptr->m_idx];
2245 /* Hack -- attack monsters */
2246 if (c_ptr->m_idx && (m_ptr->ml || cave_have_flag_bold(y, x, FF_PROJECT)))
2250 o_ptr->timeout = 250;
2256 if (!get_aim_dir(&dir)) return FALSE;
2257 for (dummy = 0; dummy < 3; dummy++)
2259 if (drain_life(dir, 100))
2263 o_ptr->timeout = 400;
2268 case ACT_CALL_CHAOS:
2271 msg_print("ÍÍ¡¹¤Ê¿§¤Î²Ð²Ö¤òȯ¤·¤Æ¤¤¤ë...");
2273 msg_print("It glows in scintillating colours...");
2277 o_ptr->timeout = 350;
2283 if (!get_aim_dir(&dir)) return FALSE;
2285 msg_print("¥í¥±¥Ã¥È¤òȯ¼Í¤·¤¿¡ª");
2287 msg_print("You launch a rocket!");
2290 fire_ball(GF_ROCKET, dir, 250 + plev*3, 2);
2291 o_ptr->timeout = 400;
2298 msg_print("¿ÀÀ»¤ÊÊ·°Ïµ¤¤¬½¼Ëþ¤·¤¿...");
2300 msg_print("It floods the area with goodness...");
2303 dispel_evil(p_ptr->lev * 5);
2304 o_ptr->timeout = randint0(300) + 300;
2311 msg_print("¼Ù°¤ÊÊ·°Ïµ¤¤¬½¼Ëþ¤·¤¿...");
2313 msg_print("It floods the area with evil...");
2316 dispel_good(p_ptr->lev * 5);
2317 o_ptr->timeout = randint0(300) + 300;
2323 if (!get_aim_dir(&dir)) return FALSE;
2325 msg_print("¤¢¤Ê¤¿¤Ï¥¨¥ì¥á¥ó¥È¤Î¥Ö¥ì¥¹¤òÅǤ¤¤¿¡£");
2327 msg_print("You breathe the elements.");
2330 fire_ball(GF_MISSILE, dir, 300, 4);
2331 o_ptr->timeout = 500;
2335 /* Activate for other offensive action */
2340 msg_print("ÍÍ¡¹¤Ê¿§¤Î²Ð²Ö¤òȯ¤·¤Æ¤¤¤ë...");
2342 msg_print("It glows in scintillating colours...");
2345 if (!get_aim_dir(&dir)) return FALSE;
2346 confuse_monster(dir, 20);
2347 o_ptr->timeout = 15;
2354 msg_print("¿¼ÀÄ¿§¤Ëµ±¤¤¤Æ¤¤¤ë...");
2356 msg_print("It glows deep blue...");
2359 sleep_monsters_touch();
2360 o_ptr->timeout = 55;
2366 earthquake(py, px, 10);
2367 o_ptr->timeout = 50;
2373 turn_monsters(40 + p_ptr->lev);
2374 o_ptr->timeout = 3 * (p_ptr->lev + 10);
2380 if (!get_aim_dir(&dir)) return FALSE;
2381 (void)fire_beam(GF_AWAY_ALL, dir, plev);
2382 o_ptr->timeout = 200;
2386 case ACT_BANISH_EVIL:
2388 if (banish_evil(100))
2391 msg_print("¥¢¡¼¥Æ¥£¥Õ¥¡¥¯¥È¤ÎÎϤ¬¼Ù°¤òÂǤÁʧ¤Ã¤¿¡ª");
2393 msg_print("The power of the artifact banishes evil!");
2397 o_ptr->timeout = 250 + randint1(250);
2404 msg_print("¿¼ÀÄ¿§¤Ëµ±¤¤¤Æ¤¤¤ë...");
2406 msg_print("It glows deep blue...");
2409 (void)symbol_genocide(200, TRUE);
2410 o_ptr->timeout = 500;
2417 msg_print("¤Ò¤É¤¯±Ô¤¤²»¤¬Î®¤ì½Ð¤¿...");
2419 msg_print("It lets out a long, shrill note...");
2422 (void)mass_genocide(200, TRUE);
2423 o_ptr->timeout = 1000;
2427 /* Activate for summoning / charming */
2429 case ACT_CHARM_ANIMAL:
2431 if (!get_aim_dir(&dir)) return FALSE;
2432 (void)charm_animal(dir, plev);
2433 o_ptr->timeout = 300;
2437 case ACT_CHARM_UNDEAD:
2439 if (!get_aim_dir(&dir)) return FALSE;
2440 (void)control_one_undead(dir, plev);
2441 o_ptr->timeout = 333;
2445 case ACT_CHARM_OTHER:
2447 if (!get_aim_dir(&dir)) return FALSE;
2448 (void)charm_monster(dir, plev);
2449 o_ptr->timeout = 400;
2453 case ACT_CHARM_ANIMALS:
2455 (void)charm_animals(plev * 2);
2456 o_ptr->timeout = 500;
2460 case ACT_CHARM_OTHERS:
2462 charm_monsters(plev * 2);
2463 o_ptr->timeout = 750;
2467 case ACT_SUMMON_ANIMAL:
2469 (void)summon_specific(-1, py, px, plev, SUMMON_ANIMAL_RANGER, (PM_ALLOW_GROUP | PM_FORCE_PET));
2470 o_ptr->timeout = 200 + randint1(300);
2474 case ACT_SUMMON_PHANTOM:
2477 msg_print("¸¸Îî¤ò¾¤´¤·¤¿¡£");
2479 msg_print("You summon a phantasmal servant.");
2482 (void)summon_specific(-1, py, px, dun_level, SUMMON_PHANTOM, (PM_ALLOW_GROUP | PM_FORCE_PET));
2483 o_ptr->timeout = 200 + randint1(200);
2487 case ACT_SUMMON_ELEMENTAL:
2489 bool pet = one_in_(3);
2492 if (!(pet && (plev < 50))) mode |= PM_ALLOW_GROUP;
2493 if (pet) mode |= PM_FORCE_PET;
2494 else mode |= PM_NO_PET;
2496 if (summon_specific((pet ? -1 : 0), py, px, ((plev * 3) / 2), SUMMON_ELEMENTAL, mode))
2499 msg_print("¥¨¥ì¥á¥ó¥¿¥ë¤¬¸½¤ì¤¿...");
2501 msg_print("An elemental materializes...");
2507 msg_print("¤¢¤Ê¤¿¤ËÉþ½¾¤·¤Æ¤¤¤ë¤è¤¦¤À¡£");
2509 msg_print("It seems obedient to you.");
2514 msg_print("¤½¤ì¤ò¥³¥ó¥È¥í¡¼¥ë¤Ç¤¤Ê¤«¤Ã¤¿¡ª");
2516 msg_print("You fail to control it!");
2521 o_ptr->timeout = 750;
2525 case ACT_SUMMON_DEMON:
2527 bool pet = one_in_(3);
2530 if (!(pet && (plev < 50))) mode |= PM_ALLOW_GROUP;
2531 if (pet) mode |= PM_FORCE_PET;
2532 else mode |= PM_NO_PET;
2534 if (summon_specific((pet ? -1 : 0), py, px, ((plev * 3) / 2), SUMMON_DEMON, mode))
2537 msg_print("ⲫ¤Î°½¤¬½¼Ëþ¤·¤¿¡£");
2539 msg_print("The area fills with a stench of sulphur and brimstone.");
2544 msg_print("¡Ö¤´ÍѤǤ´¤¶¤¤¤Þ¤¹¤«¡¢¤´¼ç¿ÍÍÍ¡×");
2546 msg_print("'What is thy bidding... Master?'");
2551 msg_print("¡ÖNON SERVIAM! Wretch! ¤ªÁ°¤Îº²¤òĺ¤¯¤¾¡ª¡×");
2553 msg_print("'NON SERVIAM! Wretch! I shall feast on thy mortal soul!'");
2558 o_ptr->timeout = 666 + randint1(333);
2562 case ACT_SUMMON_UNDEAD:
2564 bool pet = one_in_(3);
2568 type = (plev > 47 ? SUMMON_HI_UNDEAD : SUMMON_UNDEAD);
2570 if (!pet || ((plev > 24) && one_in_(3))) mode |= PM_ALLOW_GROUP;
2571 if (pet) mode |= PM_FORCE_PET;
2572 else mode |= (PM_ALLOW_UNIQUE | PM_NO_PET);
2574 if (summon_specific((pet ? -1 : 0), py, px, ((plev * 3) / 2), type, mode))
2577 msg_print("Î䤿¤¤É÷¤¬¤¢¤Ê¤¿¤Î¼þ¤ê¤Ë¿á¤»Ï¤á¤¿¡£¤½¤ì¤ÏÉåÇÔ½¤ò±¿¤ó¤Ç¤¤¤ë...");
2579 msg_print("Cold winds begin to blow around you, carrying with them the stench of decay...");
2584 msg_print("¸Å¤¨¤Î»à¤»¤ë¼Ô¶¦¤¬¤¢¤Ê¤¿¤Ë»Å¤¨¤ë¤¿¤áÅÚ¤«¤éᴤä¿¡ª");
2586 msg_print("Ancient, long-dead forms arise from the ground to serve you!");
2591 msg_print("»à¼Ô¤¬á´¤Ã¤¿¡£Ì²¤ê¤ò˸¤²¤ë¤¢¤Ê¤¿¤òȳ¤¹¤ë¤¿¤á¤Ë¡ª");
2593 msg_print("'The dead arise... to punish you for disturbing them!'");
2598 o_ptr->timeout = 666 + randint1(333);
2602 /* Activate for healing */
2606 (void)set_afraid(0);
2607 (void)hp_player(30);
2608 o_ptr->timeout = 10;
2615 msg_print("¿¼»ç¿§¤Î¸÷¤òȯ¤·¤Æ¤¤¤ë...");
2617 msg_print("It radiates deep purple...");
2620 hp_player(damroll(4, 8));
2621 (void)set_cut((p_ptr->cut / 2) - 50);
2622 o_ptr->timeout = randint0(3) + 3;
2626 case ACT_CURE_POISON:
2629 msg_print("¿¼ÀÄ¿§¤Ëµ±¤¤¤Æ¤¤¤ë...");
2631 msg_print("It glows deep blue...");
2634 (void)set_afraid(0);
2635 (void)set_poisoned(0);
2643 msg_print("¿¼¹È¤Ëµ±¤¤¤Æ¤¤¤ë...");
2645 msg_print("It glows a deep red...");
2649 o_ptr->timeout = 450;
2656 msg_print("Ç»Îп§¤Ëµ±¤¤¤Æ¤¤¤ë...");
2658 msg_print("It glows a deep green...");
2661 (void)do_res_stat(A_STR);
2662 (void)do_res_stat(A_INT);
2663 (void)do_res_stat(A_WIS);
2664 (void)do_res_stat(A_DEX);
2665 (void)do_res_stat(A_CON);
2666 (void)do_res_stat(A_CHR);
2667 (void)restore_level();
2668 o_ptr->timeout = 750;
2675 msg_print("¿¼ÀÄ¿§¤Ëµ±¤¤¤Æ¤¤¤ë...");
2677 msg_print("It glows deep blue...");
2681 msg_print("ÂÎÆâ¤ËÃȤ«¤¤¸ÝÆ°¤¬´¶¤¸¤é¤ì¤ë...");
2683 msg_print("You feel a warm tingling inside...");
2686 (void)hp_player(700);
2688 o_ptr->timeout = 250;
2695 msg_print("Çò¤¯ÌÀ¤ë¤¯µ±¤¤¤Æ¤¤¤ë...");
2697 msg_print("It glows a bright white...");
2701 msg_print("¤Ò¤¸¤ç¤¦¤Ëµ¤Ê¬¤¬¤è¤¤...");
2703 msg_print("You feel much better...");
2706 (void)hp_player(1000);
2708 o_ptr->timeout = 888;
2712 /* Activate for timed effect */
2716 (void)set_tim_esp(randint1(30) + 25, FALSE);
2717 o_ptr->timeout = 200;
2723 (void)set_afraid(0);
2724 (void)set_hero(randint1(50) + 50, FALSE);
2725 (void)set_blessed(randint1(50) + 50, FALSE);
2726 o_ptr->timeout = 100 + randint1(100);
2733 msg_print("±Ô¤¤²»¤¬Î®¤ì½Ð¤¿...");
2735 msg_print("It lets out a shrill wail...");
2739 (void)set_protevil(randint1(25) + k, FALSE);
2740 o_ptr->timeout = randint0(225) + 225;
2744 case ACT_RESIST_ALL:
2747 msg_print("ÍÍ¡¹¤Ê¿§¤Ëµ±¤¤¤Æ¤¤¤ë...");
2749 msg_print("It glows many colours...");
2752 (void)set_oppose_acid(randint1(40) + 40, FALSE);
2753 (void)set_oppose_elec(randint1(40) + 40, FALSE);
2754 (void)set_oppose_fire(randint1(40) + 40, FALSE);
2755 (void)set_oppose_cold(randint1(40) + 40, FALSE);
2756 (void)set_oppose_pois(randint1(40) + 40, FALSE);
2757 o_ptr->timeout = 200;
2764 msg_print("ÌÀ¤ë¤¯Îп§¤Ëµ±¤¤¤Æ¤¤¤ë...");
2766 msg_print("It glows bright green...");
2769 (void)set_fast(randint1(20) + 20, FALSE);
2770 o_ptr->timeout = 250;
2774 case ACT_XTRA_SPEED:
2777 msg_print("ÌÀ¤ë¤¯µ±¤¤¤Æ¤¤¤ë...");
2779 msg_print("It glows brightly...");
2782 (void)set_fast(randint1(75) + 75, FALSE);
2783 o_ptr->timeout = randint0(200) + 200;
2789 set_wraith_form(randint1(plev / 2) + (plev / 2), FALSE);
2790 o_ptr->timeout = 1000;
2796 (void)set_invuln(randint1(8) + 8, FALSE);
2797 o_ptr->timeout = 1000;
2801 /* Activate for general purpose effect (detection etc.) */
2806 msg_print("À¡¤ó¤À¸÷¤¬¤¢¤Õ¤ì½Ð¤¿...");
2808 msg_print("It wells with clear light...");
2811 lite_area(damroll(2, 15), 3);
2812 o_ptr->timeout = randint0(10) + 10;
2819 msg_print("âÁ¤·¤¯µ±¤¤¤¿...");
2821 msg_print("It shines brightly...");
2824 map_area(DETECT_RAD_MAP);
2825 lite_area(damroll(2, 15), 3);
2826 o_ptr->timeout = randint0(50) + 50;
2830 case ACT_DETECT_ALL:
2833 msg_print("Çò¤¯ÌÀ¤ë¤¯µ±¤¤¤Æ¤¤¤ë...");
2835 msg_print("It glows bright white...");
2839 msg_print("¿´¤Ë¥¤¥á¡¼¥¸¤¬É⤫¤ó¤Ç¤¤¿...");
2841 msg_print("An image forms in your mind...");
2844 detect_all(DETECT_RAD_DEFAULT);
2845 o_ptr->timeout = randint0(55) + 55;
2849 case ACT_DETECT_XTRA:
2852 msg_print("ÌÀ¤ë¤¯µ±¤¤¤Æ¤¤¤ë...");
2854 msg_print("It glows brightly...");
2857 detect_all(DETECT_RAD_DEFAULT);
2859 identify_fully(FALSE);
2860 o_ptr->timeout = 1000;
2867 msg_print("²«¿§¤¯µ±¤¤¤Æ¤¤¤ë...");
2869 msg_print("It glows yellow...");
2872 identify_fully(FALSE);
2873 o_ptr->timeout = 750;
2879 if (!ident_spell(FALSE)) return FALSE;
2880 o_ptr->timeout = 10;
2884 case ACT_RUNE_EXPLO:
2887 msg_print("ÌÀ¤ë¤¤ÀÖ¿§¤Ëµ±¤¤¤Æ¤¤¤ë...");
2889 msg_print("It glows bright red...");
2893 o_ptr->timeout = 200;
2900 msg_print("¥Ö¥ë¡¼¤ËÌÀ¤ë¤¯µ±¤¤¤Æ¤¤¤ë...");
2902 msg_print("It glows light blue...");
2906 o_ptr->timeout = 400;
2912 (void)set_food(PY_FOOD_MAX - 1);
2913 o_ptr->timeout = 200;
2920 msg_print("ÌÀ¤ë¤¤ÀÖ¿§¤Ëµ±¤¤¤Æ¤¤¤ë...");
2922 msg_print("It glows bright red...");
2925 destroy_doors_touch();
2926 o_ptr->timeout = 10;
2933 msg_print("¸ÝÆ°¤·¤Æ¤¤¤ë...");
2935 msg_print("It pulsates...");
2938 if (!get_aim_dir(&dir)) return FALSE;
2947 o_ptr->timeout = 70;
2954 msg_print("ÌÀ¤ë¤¤²«¿§¤Ëµ±¤¤¤Æ¤¤¤ë...");
2956 msg_print("It glows bright yellow...");
2960 o_ptr->timeout = 500;
2967 msg_print("¼¡¸µ¤ÎÈ⤬³«¤¤¤¿¡£ÌÜŪÃϤòÁª¤ó¤Ç²¼¤µ¤¤¡£");
2969 msg_print("You open a dimensional gate. Choose a destination.");
2972 if (!dimension_door()) return FALSE;
2973 o_ptr->timeout = 100;
2981 msg_print("¼þ¤ê¤Î¶õ´Ö¤¬ÏĤó¤Ç¤¤¤ë...");
2983 msg_print("It twists space around you...");
2986 teleport_player(100, 0L);
2987 o_ptr->timeout = 45;
2994 msg_print("¤ä¤ï¤é¤«¤ÊÇò¿§¤Ëµ±¤¤¤Æ¤¤¤ë...");
2996 msg_print("It glows soft white...");
2998 if (!word_of_recall()) return FALSE;
2999 o_ptr->timeout = 200;
3006 msg_format("Unknown activation effect: %d.", o_ptr->xtra2);
3008 msg_format("Unknown activation effect: %d.", o_ptr->xtra2);
3019 void get_bloody_moon_flags(object_type *o_ptr)
3023 for (i = 0; i < TR_FLAG_SIZE; i++)
3024 o_ptr->art_flags[i] = a_info[ART_BLOOD].flags[i];
3026 dummy = randint1(2) + randint1(2);
3027 for (i = 0; i < dummy; i++)
3029 int flag = randint0(26);
3030 if (flag >= 20) add_flag(o_ptr->art_flags, TR_KILL_UNDEAD + flag - 20);
3031 else if (flag == 19) add_flag(o_ptr->art_flags, TR_KILL_ANIMAL);
3032 else if (flag == 18) add_flag(o_ptr->art_flags, TR_SLAY_HUMAN);
3033 else add_flag(o_ptr->art_flags, TR_CHAOTIC + flag);
3036 dummy = randint1(2);
3037 for (i = 0; i < dummy; i++) one_resistance(o_ptr);
3039 for (i = 0; i < 2; i++)
3041 int tmp = randint0(11);
3042 if (tmp < 6) add_flag(o_ptr->art_flags, TR_STR + tmp);
3043 else add_flag(o_ptr->art_flags, TR_STEALTH + tmp - 6);
3048 void random_artifact_resistance(object_type * o_ptr, artifact_type *a_ptr)
3050 bool give_resistance = FALSE, give_power = FALSE;
3052 if (o_ptr->name1 == ART_TERROR) /* Terror Mask is for warriors... */
3054 if (p_ptr->pclass == CLASS_WARRIOR || p_ptr->pclass == CLASS_ARCHER || p_ptr->pclass == CLASS_CAVALRY || p_ptr->pclass == CLASS_BERSERKER)
3057 give_resistance = TRUE;
3061 add_flag(o_ptr->art_flags, TR_AGGRAVATE);
3062 add_flag(o_ptr->art_flags, TR_TY_CURSE);
3063 o_ptr->curse_flags |=
3064 (TRC_CURSED | TRC_HEAVY_CURSE);
3065 o_ptr->curse_flags |= get_curse(2, o_ptr);
3070 if (o_ptr->name1 == ART_MURAMASA)
3072 if (p_ptr->pclass != CLASS_SAMURAI)
3074 add_flag(o_ptr->art_flags, TR_NO_MAGIC);
3075 o_ptr->curse_flags |= (TRC_HEAVY_CURSE);
3079 if (o_ptr->name1 == ART_XIAOLONG)
3081 if (p_ptr->pclass == CLASS_MONK)
3082 add_flag(o_ptr->art_flags, TR_BLOWS);
3085 if (o_ptr->name1 == ART_BLOOD)
3087 get_bloody_moon_flags(o_ptr);
3090 if (o_ptr->name1 == ART_HEAVENLY_MAIDEN)
3092 if (p_ptr->psex != SEX_FEMALE)
3094 add_flag(o_ptr->art_flags, TR_AGGRAVATE);
3098 if (a_ptr->gen_flags & (TRG_XTRA_POWER)) give_power = TRUE;
3099 if (a_ptr->gen_flags & (TRG_XTRA_H_RES)) give_resistance = TRUE;
3100 if (a_ptr->gen_flags & (TRG_XTRA_RES_OR_POWER))
3102 /* Give a resistance OR a power */
3103 if (one_in_(2)) give_resistance = TRUE;
3104 else give_power = TRUE;
3112 if (give_resistance)
3114 one_high_resistance(o_ptr);
3120 * Create the artifact of the specified number
3122 bool create_named_art(int a_idx, int y, int x)
3128 artifact_type *a_ptr = &a_info[a_idx];
3130 /* Get local object */
3133 /* Ignore "empty" artifacts */
3134 if (!a_ptr->name) return FALSE;
3136 /* Acquire the "kind" index */
3137 i = lookup_kind(a_ptr->tval, a_ptr->sval);
3140 if (!i) return FALSE;
3142 /* Create the artifact */
3143 object_prep(q_ptr, i);
3146 q_ptr->name1 = a_idx;
3148 /* Extract the fields */
3149 q_ptr->pval = a_ptr->pval;
3150 q_ptr->ac = a_ptr->ac;
3151 q_ptr->dd = a_ptr->dd;
3152 q_ptr->ds = a_ptr->ds;
3153 q_ptr->to_a = a_ptr->to_a;
3154 q_ptr->to_h = a_ptr->to_h;
3155 q_ptr->to_d = a_ptr->to_d;
3156 q_ptr->weight = a_ptr->weight;
3158 /* Hack -- extract the "cursed" flag */
3159 if (a_ptr->gen_flags & TRG_CURSED) q_ptr->curse_flags |= (TRC_CURSED);
3160 if (a_ptr->gen_flags & TRG_HEAVY_CURSE) q_ptr->curse_flags |= (TRC_HEAVY_CURSE);
3161 if (a_ptr->gen_flags & TRG_PERMA_CURSE) q_ptr->curse_flags |= (TRC_PERMA_CURSE);
3162 if (a_ptr->gen_flags & (TRG_RANDOM_CURSE0)) q_ptr->curse_flags |= get_curse(0, q_ptr);
3163 if (a_ptr->gen_flags & (TRG_RANDOM_CURSE1)) q_ptr->curse_flags |= get_curse(1, q_ptr);
3164 if (a_ptr->gen_flags & (TRG_RANDOM_CURSE2)) q_ptr->curse_flags |= get_curse(2, q_ptr);
3166 random_artifact_resistance(q_ptr, a_ptr);
3169 * drop_near()Æâ¤ÇÉáÄ̤θÇÄꥢ¡¼¥Æ¥£¥Õ¥¡¥¯¥È¤¬½Å¤Ê¤é¤Ê¤¤À¼Á¤Ë°Í¸¤¹¤ë.
3170 * ²¾¤Ë2¸Ä°Ê¾å¸ºß²Äǽ¤«¤ÄÁõÈ÷Éʰʳ°¤Î¸ÇÄꥢ¡¼¥Æ¥£¥Õ¥¡¥¯¥È¤¬ºîÀ®¤µ¤ì¤ì¤Ð
3171 * ¤³¤Î´Ø¿ô¤ÎÊÖ¤êÃͤϿ®ÍѤǤ¤Ê¤¯¤Ê¤ë.
3174 /* Drop the artifact from heaven */
3175 return drop_near(q_ptr, -1, y, x) ? TRUE : FALSE;