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;
1682 artifact_bias = BIAS_RANGER;
1683 warrior_artifact_bias = 30;
1686 artifact_bias = BIAS_PRIESTLY;
1687 warrior_artifact_bias = 40;
1689 case CLASS_WARRIOR_MAGE:
1690 case CLASS_RED_MAGE:
1691 artifact_bias = BIAS_MAGE;
1692 warrior_artifact_bias = 40;
1694 case CLASS_CHAOS_WARRIOR:
1695 artifact_bias = BIAS_CHAOS;
1696 warrior_artifact_bias = 40;
1699 case CLASS_FORCETRAINER:
1700 artifact_bias = BIAS_PRIESTLY;
1702 case CLASS_MINDCRAFTER:
1704 if (randint1(5) > 2) artifact_bias = BIAS_PRIESTLY;
1707 if (randint1(5) > 2) artifact_bias = BIAS_WARRIOR;
1709 case CLASS_IMITATOR:
1710 if (randint1(2) > 1) artifact_bias = BIAS_RANGER;
1712 case CLASS_BEASTMASTER:
1713 artifact_bias = BIAS_CHR;
1714 warrior_artifact_bias = 50;
1716 case CLASS_MIRROR_MASTER:
1717 if (randint1(4) > 1)
1719 artifact_bias = BIAS_MAGE;
1723 artifact_bias = BIAS_ROGUE;
1729 if (a_scroll && (randint1(100) <= warrior_artifact_bias))
1730 artifact_bias = BIAS_WARRIOR;
1732 strcpy(new_name, "");
1734 if (!a_scroll && one_in_(A_CURSED))
1736 if (((o_ptr->tval == TV_AMULET) || (o_ptr->tval == TV_RING)) && object_is_cursed(o_ptr))
1739 while (one_in_(powers) || one_in_(7) || one_in_(10))
1742 if (!a_cursed && one_in_(WEIRD_LUCK))
1745 if (a_cursed) powers /= 2;
1750 switch (randint1(max_type))
1757 if (one_in_(2) && object_is_weapon_ammo(o_ptr) && (o_ptr->tval != TV_BOW))
1759 if (a_cursed && !one_in_(13)) break;
1762 if (one_in_(o_ptr->ds+4)) o_ptr->ds++;
1766 if (one_in_(o_ptr->dd+1)) o_ptr->dd++;
1770 random_resistance(o_ptr);
1779 if (p_ptr->wizard) msg_print("Switch error in create_artifact!");
1787 add_flag(o_ptr->art_flags, TR_SHOW_MODS);
1789 /* This one commented out by gw's request... */
1791 add_flag(o_ptr->art_flags, TR_HIDE_TYPE);
1794 if (have_flag(o_ptr->art_flags, TR_BLOWS))
1796 o_ptr->pval = randint1(2);
1797 if ((o_ptr->tval == TV_SWORD) && (o_ptr->sval == SV_HAYABUSA))
1806 while (o_ptr->pval < randint1(5) || one_in_(o_ptr->pval));
1809 if ((o_ptr->pval > 4) && !one_in_(WEIRD_LUCK))
1813 /* give it some plusses... */
1814 if (object_is_armour(o_ptr))
1815 o_ptr->to_a += randint1(o_ptr->to_a > 19 ? 1 : 20 - o_ptr->to_a);
1816 else if (object_is_weapon_ammo(o_ptr))
1818 o_ptr->to_h += randint1(o_ptr->to_h > 19 ? 1 : 20 - o_ptr->to_h);
1819 o_ptr->to_d += randint1(o_ptr->to_d > 19 ? 1 : 20 - o_ptr->to_d);
1820 if ((have_flag(o_ptr->art_flags, TR_WIS)) && (o_ptr->pval > 0)) add_flag(o_ptr->art_flags, TR_BLESSED);
1823 /* Just to be sure */
1824 add_flag(o_ptr->art_flags, TR_IGNORE_ACID);
1825 add_flag(o_ptr->art_flags, TR_IGNORE_ELEC);
1826 add_flag(o_ptr->art_flags, TR_IGNORE_FIRE);
1827 add_flag(o_ptr->art_flags, TR_IGNORE_COLD);
1829 total_flags = flag_cost(o_ptr, o_ptr->pval);
1830 if (cheat_peek) msg_format("%ld", total_flags);
1832 if (a_cursed) curse_artifact(o_ptr);
1835 one_in_(object_is_armour(o_ptr) ? ACTIVATION_CHANCE * 2 : ACTIVATION_CHANCE))
1838 give_activation_power(o_ptr);
1841 if (object_is_armour(o_ptr))
1843 while ((o_ptr->to_d+o_ptr->to_h) > 20)
1845 if (one_in_(o_ptr->to_d) && one_in_(o_ptr->to_h)) break;
1846 o_ptr->to_d -= (s16b)randint0(3);
1847 o_ptr->to_h -= (s16b)randint0(3);
1849 while ((o_ptr->to_d+o_ptr->to_h) > 10)
1851 if (one_in_(o_ptr->to_d) || one_in_(o_ptr->to_h)) break;
1852 o_ptr->to_d -= (s16b)randint0(3);
1853 o_ptr->to_h -= (s16b)randint0(3);
1857 if (((artifact_bias == BIAS_MAGE) || (artifact_bias == BIAS_INT)) && (o_ptr->tval == TV_GLOVES)) add_flag(o_ptr->art_flags, TR_FREE_ACT);
1859 if ((o_ptr->tval == TV_SWORD) && (o_ptr->sval == SV_DOKUBARI))
1863 remove_flag(o_ptr->art_flags, TR_BLOWS);
1864 remove_flag(o_ptr->art_flags, TR_FORCE_WEAPON);
1865 remove_flag(o_ptr->art_flags, TR_SLAY_ANIMAL);
1866 remove_flag(o_ptr->art_flags, TR_SLAY_EVIL);
1867 remove_flag(o_ptr->art_flags, TR_SLAY_UNDEAD);
1868 remove_flag(o_ptr->art_flags, TR_SLAY_DEMON);
1869 remove_flag(o_ptr->art_flags, TR_SLAY_ORC);
1870 remove_flag(o_ptr->art_flags, TR_SLAY_TROLL);
1871 remove_flag(o_ptr->art_flags, TR_SLAY_GIANT);
1872 remove_flag(o_ptr->art_flags, TR_SLAY_DRAGON);
1873 remove_flag(o_ptr->art_flags, TR_KILL_DRAGON);
1874 remove_flag(o_ptr->art_flags, TR_SLAY_HUMAN);
1875 remove_flag(o_ptr->art_flags, TR_VORPAL);
1876 remove_flag(o_ptr->art_flags, TR_BRAND_POIS);
1877 remove_flag(o_ptr->art_flags, TR_BRAND_ACID);
1878 remove_flag(o_ptr->art_flags, TR_BRAND_ELEC);
1879 remove_flag(o_ptr->art_flags, TR_BRAND_FIRE);
1880 remove_flag(o_ptr->art_flags, TR_BRAND_COLD);
1883 if (!object_is_weapon_ammo(o_ptr))
1886 if (a_cursed) power_level = 0;
1887 else if (total_flags < 15000) power_level = 1;
1888 else if (total_flags < 35000) power_level = 2;
1889 else power_level = 3;
1895 if (a_cursed) power_level = 0;
1896 else if (total_flags < 20000) power_level = 1;
1897 else if (total_flags < 45000) power_level = 2;
1898 else power_level = 3;
1903 char dummy_name[80] = "";
1905 cptr ask_msg = "¤³¤Î¥¢¡¼¥Æ¥£¥Õ¥¡¥¯¥È¤ò²¿¤È̾ÉÕ¤±¤Þ¤¹¤«¡©";
1907 cptr ask_msg = "What do you want to call the artifact? ";
1910 /* Identify it fully */
1911 object_aware(o_ptr);
1912 object_known(o_ptr);
1914 /* Mark the item as fully known */
1915 o_ptr->ident |= (IDENT_MENTAL);
1917 (void)screen_object(o_ptr, 0L);
1919 if (!get_string(ask_msg, dummy_name, sizeof dummy_name)
1925 get_table_sindarin_aux(dummy_name);
1929 get_table_name_aux(dummy_name);
1934 sprintf(new_name, "¡Ô%s¡Õ", dummy_name);
1936 sprintf(new_name, "'%s'", dummy_name);
1939 chg_virtue(V_INDIVIDUALISM, 2);
1940 chg_virtue(V_ENCHANT, 5);
1944 get_random_name(new_name, object_is_armour(o_ptr), power_level);
1950 if (artifact_bias) msg_format("±¿¤ÎÊФä¿¥¢¡¼¥Æ¥£¥Õ¥¡¥¯¥È: %d¡£", artifact_bias);
1951 else msg_print("¥¢¡¼¥Æ¥£¥Õ¥¡¥¯¥È¤Ë±¿¤ÎÊФê¤Ê¤·¡£");
1953 if (artifact_bias) msg_format("Biased artifact: %d.", artifact_bias);
1954 else msg_print("No bias in artifact.");
1958 /* Save the inscription */
1959 o_ptr->art_name = quark_add(new_name);
1962 p_ptr->window |= (PW_INVEN | PW_EQUIP);
1968 bool activate_random_artifact(object_type * o_ptr)
1970 int plev = p_ptr->lev;
1971 int k, dir, dummy = 0;
1973 if (!o_ptr->art_name) return FALSE; /* oops? */
1975 /* Activate for attack */
1976 switch (o_ptr->xtra2)
1980 if (!get_aim_dir(&dir)) return FALSE;
1982 msg_print("ÂÀÍÛ¸÷Àþ¤¬Êü¤¿¤ì¤¿¡£");
1984 msg_print("A line of sunlight appears.");
1987 (void)lite_line(dir);
1988 o_ptr->timeout = 10;
1995 msg_print("¤½¤ì¤ÏâÁ¤·¤¤¤¯¤é¤¤¤ËÌÀ¤ë¤¯µ±¤¤¤Æ¤¤¤ë...");
1997 msg_print("It glows extremely brightly...");
2000 if (!get_aim_dir(&dir)) return FALSE;
2001 fire_bolt(GF_MISSILE, dir, damroll(2, 6));
2009 msg_print("¤½¤ì¤ÏÇ»Î理Ë̮ư¤·¤Æ¤¤¤ë...");
2011 msg_print("It throbs deep green...");
2014 if (!get_aim_dir(&dir)) return FALSE;
2015 fire_ball(GF_POIS, dir, 12, 3);
2016 o_ptr->timeout = randint0(4) + 4;
2023 msg_print("¤½¤ì¤Ï²Ð²Ö¤Ëʤ¤ï¤ì¤¿...");
2025 msg_print("It is covered in sparks...");
2028 if (!get_aim_dir(&dir)) return FALSE;
2029 fire_bolt(GF_ELEC, dir, damroll(4, 8));
2030 o_ptr->timeout = randint0(5) + 5;
2037 msg_print("¤½¤ì¤Ï»À¤Ëʤ¤ï¤ì¤¿...");
2039 msg_print("It is covered in acid...");
2042 if (!get_aim_dir(&dir)) return FALSE;
2043 fire_bolt(GF_ACID, dir, damroll(5, 8));
2044 o_ptr->timeout = randint0(6) + 6;
2051 msg_print("¤½¤ì¤ÏÁú¤Ëʤ¤ï¤ì¤¿...");
2053 msg_print("It is covered in frost...");
2056 if (!get_aim_dir(&dir)) return FALSE;
2057 fire_bolt(GF_COLD, dir, damroll(6, 8));
2058 o_ptr->timeout = randint0(7) + 7;
2065 msg_print("¤½¤ì¤Ï±ê¤Ëʤ¤ï¤ì¤¿...");
2067 msg_print("It is covered in fire...");
2070 if (!get_aim_dir(&dir)) return FALSE;
2071 fire_bolt(GF_FIRE, dir, damroll(9, 8));
2072 o_ptr->timeout = randint0(8) + 8;
2079 msg_print("¤½¤ì¤ÏÁú¤Ëʤ¤ï¤ì¤¿...");
2081 msg_print("It is covered in frost...");
2084 if (!get_aim_dir(&dir)) return FALSE;
2085 fire_ball(GF_COLD, dir, 48, 2);
2086 o_ptr->timeout = 400;
2093 msg_print("¤½¤ì¤ÏÀÖ¤¯·ã¤·¤¯µ±¤¤¤¿...");
2095 msg_print("It glows an intense red...");
2098 if (!get_aim_dir(&dir)) return FALSE;
2099 fire_ball(GF_FIRE, dir, 72, 2);
2100 o_ptr->timeout = 400;
2107 msg_print("¤½¤ì¤Ï¹õ¤¯µ±¤¤¤¿...");
2109 msg_print("It glows black...");
2112 if (!get_aim_dir(&dir)) return FALSE;
2113 if (drain_life(dir, 100))
2114 o_ptr->timeout = randint0(100) + 100;
2121 msg_print("¤½¤ì¤ÏÀĤ¯·ã¤·¤¯µ±¤¤¤¿...");
2123 msg_print("It glows an intense blue...");
2126 if (!get_aim_dir(&dir)) return FALSE;
2127 fire_ball(GF_COLD, dir, 100, 2);
2128 o_ptr->timeout = 300;
2135 msg_print("Åŵ¤¤¬¥Ñ¥Á¥Ñ¥Á²»¤òΩ¤Æ¤¿...");
2137 msg_print("It crackles with electricity...");
2140 if (!get_aim_dir(&dir)) return FALSE;
2141 fire_ball(GF_ELEC, dir, 100, 3);
2142 o_ptr->timeout = 500;
2149 msg_print("¹õ¤¯µ±¤¤¤Æ¤¤¤ë...");
2151 msg_print("It glows black...");
2154 if (!get_aim_dir(&dir)) return FALSE;
2155 drain_life(dir, 120);
2156 o_ptr->timeout = 400;
2162 if (!get_aim_dir(&dir)) return FALSE;
2163 for (dummy = 0; dummy < 3; dummy++)
2165 if (drain_life(dir, 50))
2168 o_ptr->timeout = 400;
2175 msg_print("ËâË¡¤Î¥È¥²¤¬¸½¤ì¤¿...");
2177 msg_print("It grows magical spikes...");
2180 if (!get_aim_dir(&dir)) return FALSE;
2181 fire_bolt(GF_ARROW, dir, 150);
2182 o_ptr->timeout = randint0(90) + 90;
2189 msg_print("¿¼ÀÖ¿§¤Ëµ±¤¤¤Æ¤¤¤ë...");
2191 msg_print("It glows deep red...");
2194 if (!get_aim_dir(&dir)) return FALSE;
2195 fire_ball(GF_FIRE, dir, 120, 3);
2196 o_ptr->timeout = randint0(225) + 225;
2203 msg_print("ÌÀ¤ë¤¯Çò¿§¤Ëµ±¤¤¤Æ¤¤¤ë...");
2205 msg_print("It glows bright white...");
2208 if (!get_aim_dir(&dir)) return FALSE;
2209 fire_ball(GF_COLD, dir, 200, 3);
2210 o_ptr->timeout = randint0(325) + 325;
2217 msg_print("¿¼ÀÄ¿§¤Ëµ±¤¤¤Æ¤¤¤ë...");
2219 msg_print("It glows deep blue...");
2222 if (!get_aim_dir(&dir)) return FALSE;
2223 fire_ball(GF_ELEC, dir, 250, 3);
2224 o_ptr->timeout = randint0(425) + 425;
2233 monster_type *m_ptr;
2235 for (dir = 0; dir <= 9; dir++)
2239 c_ptr = &cave[y][x];
2241 /* Get the monster */
2242 m_ptr = &m_list[c_ptr->m_idx];
2244 /* Hack -- attack monsters */
2245 if (c_ptr->m_idx && (m_ptr->ml || cave_have_flag_bold(y, x, FF_PROJECT)))
2249 o_ptr->timeout = 250;
2255 if (!get_aim_dir(&dir)) return FALSE;
2256 for (dummy = 0; dummy < 3; dummy++)
2258 if (drain_life(dir, 100))
2262 o_ptr->timeout = 400;
2267 case ACT_CALL_CHAOS:
2270 msg_print("ÍÍ¡¹¤Ê¿§¤Î²Ð²Ö¤òȯ¤·¤Æ¤¤¤ë...");
2272 msg_print("It glows in scintillating colours...");
2276 o_ptr->timeout = 350;
2282 if (!get_aim_dir(&dir)) return FALSE;
2284 msg_print("¥í¥±¥Ã¥È¤òȯ¼Í¤·¤¿¡ª");
2286 msg_print("You launch a rocket!");
2289 fire_ball(GF_ROCKET, dir, 250 + plev*3, 2);
2290 o_ptr->timeout = 400;
2297 msg_print("¿ÀÀ»¤ÊÊ·°Ïµ¤¤¬½¼Ëþ¤·¤¿...");
2299 msg_print("It floods the area with goodness...");
2302 dispel_evil(p_ptr->lev * 5);
2303 o_ptr->timeout = randint0(300) + 300;
2310 msg_print("¼Ù°¤ÊÊ·°Ïµ¤¤¬½¼Ëþ¤·¤¿...");
2312 msg_print("It floods the area with evil...");
2315 dispel_good(p_ptr->lev * 5);
2316 o_ptr->timeout = randint0(300) + 300;
2322 if (!get_aim_dir(&dir)) return FALSE;
2324 msg_print("¤¢¤Ê¤¿¤Ï¥¨¥ì¥á¥ó¥È¤Î¥Ö¥ì¥¹¤òÅǤ¤¤¿¡£");
2326 msg_print("You breathe the elements.");
2329 fire_ball(GF_MISSILE, dir, 300, 4);
2330 o_ptr->timeout = 500;
2334 /* Activate for other offensive action */
2339 msg_print("ÍÍ¡¹¤Ê¿§¤Î²Ð²Ö¤òȯ¤·¤Æ¤¤¤ë...");
2341 msg_print("It glows in scintillating colours...");
2344 if (!get_aim_dir(&dir)) return FALSE;
2345 confuse_monster(dir, 20);
2346 o_ptr->timeout = 15;
2353 msg_print("¿¼ÀÄ¿§¤Ëµ±¤¤¤Æ¤¤¤ë...");
2355 msg_print("It glows deep blue...");
2358 sleep_monsters_touch();
2359 o_ptr->timeout = 55;
2365 earthquake(py, px, 10);
2366 o_ptr->timeout = 50;
2372 turn_monsters(40 + p_ptr->lev);
2373 o_ptr->timeout = 3 * (p_ptr->lev + 10);
2379 if (!get_aim_dir(&dir)) return FALSE;
2380 (void)fire_beam(GF_AWAY_ALL, dir, plev);
2381 o_ptr->timeout = 200;
2385 case ACT_BANISH_EVIL:
2387 if (banish_evil(100))
2390 msg_print("¥¢¡¼¥Æ¥£¥Õ¥¡¥¯¥È¤ÎÎϤ¬¼Ù°¤òÂǤÁʧ¤Ã¤¿¡ª");
2392 msg_print("The power of the artifact banishes evil!");
2396 o_ptr->timeout = 250 + randint1(250);
2403 msg_print("¿¼ÀÄ¿§¤Ëµ±¤¤¤Æ¤¤¤ë...");
2405 msg_print("It glows deep blue...");
2408 (void)symbol_genocide(200, TRUE);
2409 o_ptr->timeout = 500;
2416 msg_print("¤Ò¤É¤¯±Ô¤¤²»¤¬Î®¤ì½Ð¤¿...");
2418 msg_print("It lets out a long, shrill note...");
2421 (void)mass_genocide(200, TRUE);
2422 o_ptr->timeout = 1000;
2426 /* Activate for summoning / charming */
2428 case ACT_CHARM_ANIMAL:
2430 if (!get_aim_dir(&dir)) return FALSE;
2431 (void)charm_animal(dir, plev);
2432 o_ptr->timeout = 300;
2436 case ACT_CHARM_UNDEAD:
2438 if (!get_aim_dir(&dir)) return FALSE;
2439 (void)control_one_undead(dir, plev);
2440 o_ptr->timeout = 333;
2444 case ACT_CHARM_OTHER:
2446 if (!get_aim_dir(&dir)) return FALSE;
2447 (void)charm_monster(dir, plev);
2448 o_ptr->timeout = 400;
2452 case ACT_CHARM_ANIMALS:
2454 (void)charm_animals(plev * 2);
2455 o_ptr->timeout = 500;
2459 case ACT_CHARM_OTHERS:
2461 charm_monsters(plev * 2);
2462 o_ptr->timeout = 750;
2466 case ACT_SUMMON_ANIMAL:
2468 (void)summon_specific(-1, py, px, plev, SUMMON_ANIMAL_RANGER, (PM_ALLOW_GROUP | PM_FORCE_PET));
2469 o_ptr->timeout = 200 + randint1(300);
2473 case ACT_SUMMON_PHANTOM:
2476 msg_print("¸¸Îî¤ò¾¤´¤·¤¿¡£");
2478 msg_print("You summon a phantasmal servant.");
2481 (void)summon_specific(-1, py, px, dun_level, SUMMON_PHANTOM, (PM_ALLOW_GROUP | PM_FORCE_PET));
2482 o_ptr->timeout = 200 + randint1(200);
2486 case ACT_SUMMON_ELEMENTAL:
2488 bool pet = one_in_(3);
2491 if (!(pet && (plev < 50))) mode |= PM_ALLOW_GROUP;
2492 if (pet) mode |= PM_FORCE_PET;
2493 else mode |= PM_NO_PET;
2495 if (summon_specific((pet ? -1 : 0), py, px, ((plev * 3) / 2), SUMMON_ELEMENTAL, mode))
2498 msg_print("¥¨¥ì¥á¥ó¥¿¥ë¤¬¸½¤ì¤¿...");
2500 msg_print("An elemental materializes...");
2506 msg_print("¤¢¤Ê¤¿¤ËÉþ½¾¤·¤Æ¤¤¤ë¤è¤¦¤À¡£");
2508 msg_print("It seems obedient to you.");
2513 msg_print("¤½¤ì¤ò¥³¥ó¥È¥í¡¼¥ë¤Ç¤¤Ê¤«¤Ã¤¿¡ª");
2515 msg_print("You fail to control it!");
2520 o_ptr->timeout = 750;
2524 case ACT_SUMMON_DEMON:
2526 bool pet = one_in_(3);
2529 if (!(pet && (plev < 50))) mode |= PM_ALLOW_GROUP;
2530 if (pet) mode |= PM_FORCE_PET;
2531 else mode |= PM_NO_PET;
2533 if (summon_specific((pet ? -1 : 0), py, px, ((plev * 3) / 2), SUMMON_DEMON, mode))
2536 msg_print("ⲫ¤Î°½¤¬½¼Ëþ¤·¤¿¡£");
2538 msg_print("The area fills with a stench of sulphur and brimstone.");
2543 msg_print("¡Ö¤´ÍѤǤ´¤¶¤¤¤Þ¤¹¤«¡¢¤´¼ç¿ÍÍÍ¡×");
2545 msg_print("'What is thy bidding... Master?'");
2550 msg_print("¡ÖNON SERVIAM! Wretch! ¤ªÁ°¤Îº²¤òĺ¤¯¤¾¡ª¡×");
2552 msg_print("'NON SERVIAM! Wretch! I shall feast on thy mortal soul!'");
2557 o_ptr->timeout = 666 + randint1(333);
2561 case ACT_SUMMON_UNDEAD:
2563 bool pet = one_in_(3);
2567 type = (plev > 47 ? SUMMON_HI_UNDEAD : SUMMON_UNDEAD);
2569 if (!pet || ((plev > 24) && one_in_(3))) mode |= PM_ALLOW_GROUP;
2570 if (pet) mode |= PM_FORCE_PET;
2571 else mode |= (PM_ALLOW_UNIQUE | PM_NO_PET);
2573 if (summon_specific((pet ? -1 : 0), py, px, ((plev * 3) / 2), type, mode))
2576 msg_print("Î䤿¤¤É÷¤¬¤¢¤Ê¤¿¤Î¼þ¤ê¤Ë¿á¤»Ï¤á¤¿¡£¤½¤ì¤ÏÉåÇÔ½¤ò±¿¤ó¤Ç¤¤¤ë...");
2578 msg_print("Cold winds begin to blow around you, carrying with them the stench of decay...");
2583 msg_print("¸Å¤¨¤Î»à¤»¤ë¼Ô¶¦¤¬¤¢¤Ê¤¿¤Ë»Å¤¨¤ë¤¿¤áÅÚ¤«¤éᴤä¿¡ª");
2585 msg_print("Ancient, long-dead forms arise from the ground to serve you!");
2590 msg_print("»à¼Ô¤¬á´¤Ã¤¿¡£Ì²¤ê¤ò˸¤²¤ë¤¢¤Ê¤¿¤òȳ¤¹¤ë¤¿¤á¤Ë¡ª");
2592 msg_print("'The dead arise... to punish you for disturbing them!'");
2597 o_ptr->timeout = 666 + randint1(333);
2601 /* Activate for healing */
2605 (void)set_afraid(0);
2606 (void)hp_player(30);
2607 o_ptr->timeout = 10;
2614 msg_print("¿¼»ç¿§¤Î¸÷¤òȯ¤·¤Æ¤¤¤ë...");
2616 msg_print("It radiates deep purple...");
2619 hp_player(damroll(4, 8));
2620 (void)set_cut((p_ptr->cut / 2) - 50);
2621 o_ptr->timeout = randint0(3) + 3;
2625 case ACT_CURE_POISON:
2628 msg_print("¿¼ÀÄ¿§¤Ëµ±¤¤¤Æ¤¤¤ë...");
2630 msg_print("It glows deep blue...");
2633 (void)set_afraid(0);
2634 (void)set_poisoned(0);
2642 msg_print("¿¼¹È¤Ëµ±¤¤¤Æ¤¤¤ë...");
2644 msg_print("It glows a deep red...");
2648 o_ptr->timeout = 450;
2655 msg_print("Ç»Îп§¤Ëµ±¤¤¤Æ¤¤¤ë...");
2657 msg_print("It glows a deep green...");
2660 (void)do_res_stat(A_STR);
2661 (void)do_res_stat(A_INT);
2662 (void)do_res_stat(A_WIS);
2663 (void)do_res_stat(A_DEX);
2664 (void)do_res_stat(A_CON);
2665 (void)do_res_stat(A_CHR);
2666 (void)restore_level();
2667 o_ptr->timeout = 750;
2674 msg_print("¿¼ÀÄ¿§¤Ëµ±¤¤¤Æ¤¤¤ë...");
2676 msg_print("It glows deep blue...");
2680 msg_print("ÂÎÆâ¤ËÃȤ«¤¤¸ÝÆ°¤¬´¶¤¸¤é¤ì¤ë...");
2682 msg_print("You feel a warm tingling inside...");
2685 (void)hp_player(700);
2687 o_ptr->timeout = 250;
2694 msg_print("Çò¤¯ÌÀ¤ë¤¯µ±¤¤¤Æ¤¤¤ë...");
2696 msg_print("It glows a bright white...");
2700 msg_print("¤Ò¤¸¤ç¤¦¤Ëµ¤Ê¬¤¬¤è¤¤...");
2702 msg_print("You feel much better...");
2705 (void)hp_player(1000);
2707 o_ptr->timeout = 888;
2711 /* Activate for timed effect */
2715 (void)set_tim_esp(randint1(30) + 25, FALSE);
2716 o_ptr->timeout = 200;
2722 (void)set_afraid(0);
2723 (void)set_hero(randint1(50) + 50, FALSE);
2724 (void)set_blessed(randint1(50) + 50, FALSE);
2725 o_ptr->timeout = 100 + randint1(100);
2732 msg_print("±Ô¤¤²»¤¬Î®¤ì½Ð¤¿...");
2734 msg_print("It lets out a shrill wail...");
2738 (void)set_protevil(randint1(25) + k, FALSE);
2739 o_ptr->timeout = randint0(225) + 225;
2743 case ACT_RESIST_ALL:
2746 msg_print("ÍÍ¡¹¤Ê¿§¤Ëµ±¤¤¤Æ¤¤¤ë...");
2748 msg_print("It glows many colours...");
2751 (void)set_oppose_acid(randint1(40) + 40, FALSE);
2752 (void)set_oppose_elec(randint1(40) + 40, FALSE);
2753 (void)set_oppose_fire(randint1(40) + 40, FALSE);
2754 (void)set_oppose_cold(randint1(40) + 40, FALSE);
2755 (void)set_oppose_pois(randint1(40) + 40, FALSE);
2756 o_ptr->timeout = 200;
2763 msg_print("ÌÀ¤ë¤¯Îп§¤Ëµ±¤¤¤Æ¤¤¤ë...");
2765 msg_print("It glows bright green...");
2768 (void)set_fast(randint1(20) + 20, FALSE);
2769 o_ptr->timeout = 250;
2773 case ACT_XTRA_SPEED:
2776 msg_print("ÌÀ¤ë¤¯µ±¤¤¤Æ¤¤¤ë...");
2778 msg_print("It glows brightly...");
2781 (void)set_fast(randint1(75) + 75, FALSE);
2782 o_ptr->timeout = randint0(200) + 200;
2788 set_wraith_form(randint1(plev / 2) + (plev / 2), FALSE);
2789 o_ptr->timeout = 1000;
2795 (void)set_invuln(randint1(8) + 8, FALSE);
2796 o_ptr->timeout = 1000;
2800 /* Activate for general purpose effect (detection etc.) */
2805 msg_print("À¡¤ó¤À¸÷¤¬¤¢¤Õ¤ì½Ð¤¿...");
2807 msg_print("It wells with clear light...");
2810 lite_area(damroll(2, 15), 3);
2811 o_ptr->timeout = randint0(10) + 10;
2818 msg_print("âÁ¤·¤¯µ±¤¤¤¿...");
2820 msg_print("It shines brightly...");
2823 map_area(DETECT_RAD_MAP);
2824 lite_area(damroll(2, 15), 3);
2825 o_ptr->timeout = randint0(50) + 50;
2829 case ACT_DETECT_ALL:
2832 msg_print("Çò¤¯ÌÀ¤ë¤¯µ±¤¤¤Æ¤¤¤ë...");
2834 msg_print("It glows bright white...");
2838 msg_print("¿´¤Ë¥¤¥á¡¼¥¸¤¬É⤫¤ó¤Ç¤¤¿...");
2840 msg_print("An image forms in your mind...");
2843 detect_all(DETECT_RAD_DEFAULT);
2844 o_ptr->timeout = randint0(55) + 55;
2848 case ACT_DETECT_XTRA:
2851 msg_print("ÌÀ¤ë¤¯µ±¤¤¤Æ¤¤¤ë...");
2853 msg_print("It glows brightly...");
2856 detect_all(DETECT_RAD_DEFAULT);
2858 identify_fully(FALSE);
2859 o_ptr->timeout = 1000;
2866 msg_print("²«¿§¤¯µ±¤¤¤Æ¤¤¤ë...");
2868 msg_print("It glows yellow...");
2871 identify_fully(FALSE);
2872 o_ptr->timeout = 750;
2878 if (!ident_spell(FALSE)) return FALSE;
2879 o_ptr->timeout = 10;
2883 case ACT_RUNE_EXPLO:
2886 msg_print("ÌÀ¤ë¤¤ÀÖ¿§¤Ëµ±¤¤¤Æ¤¤¤ë...");
2888 msg_print("It glows bright red...");
2892 o_ptr->timeout = 200;
2899 msg_print("¥Ö¥ë¡¼¤ËÌÀ¤ë¤¯µ±¤¤¤Æ¤¤¤ë...");
2901 msg_print("It glows light blue...");
2905 o_ptr->timeout = 400;
2911 (void)set_food(PY_FOOD_MAX - 1);
2912 o_ptr->timeout = 200;
2919 msg_print("ÌÀ¤ë¤¤ÀÖ¿§¤Ëµ±¤¤¤Æ¤¤¤ë...");
2921 msg_print("It glows bright red...");
2924 destroy_doors_touch();
2925 o_ptr->timeout = 10;
2932 msg_print("¸ÝÆ°¤·¤Æ¤¤¤ë...");
2934 msg_print("It pulsates...");
2937 if (!get_aim_dir(&dir)) return FALSE;
2946 o_ptr->timeout = 70;
2953 msg_print("ÌÀ¤ë¤¤²«¿§¤Ëµ±¤¤¤Æ¤¤¤ë...");
2955 msg_print("It glows bright yellow...");
2959 o_ptr->timeout = 500;
2966 msg_print("¼¡¸µ¤ÎÈ⤬³«¤¤¤¿¡£ÌÜŪÃϤòÁª¤ó¤Ç²¼¤µ¤¤¡£");
2968 msg_print("You open a dimensional gate. Choose a destination.");
2971 if (!dimension_door()) return FALSE;
2972 o_ptr->timeout = 100;
2980 msg_print("¼þ¤ê¤Î¶õ´Ö¤¬ÏĤó¤Ç¤¤¤ë...");
2982 msg_print("It twists space around you...");
2985 teleport_player(100, 0L);
2986 o_ptr->timeout = 45;
2993 msg_print("¤ä¤ï¤é¤«¤ÊÇò¿§¤Ëµ±¤¤¤Æ¤¤¤ë...");
2995 msg_print("It glows soft white...");
2997 if (!word_of_recall()) return FALSE;
2998 o_ptr->timeout = 200;
3005 msg_format("Unknown activation effect: %d.", o_ptr->xtra2);
3007 msg_format("Unknown activation effect: %d.", o_ptr->xtra2);
3018 void get_bloody_moon_flags(object_type *o_ptr)
3022 for (i = 0; i < TR_FLAG_SIZE; i++)
3023 o_ptr->art_flags[i] = a_info[ART_BLOOD].flags[i];
3025 dummy = randint1(2) + randint1(2);
3026 for (i = 0; i < dummy; i++)
3028 int flag = randint0(26);
3029 if (flag >= 20) add_flag(o_ptr->art_flags, TR_KILL_UNDEAD + flag - 20);
3030 else if (flag == 19) add_flag(o_ptr->art_flags, TR_KILL_ANIMAL);
3031 else if (flag == 18) add_flag(o_ptr->art_flags, TR_SLAY_HUMAN);
3032 else add_flag(o_ptr->art_flags, TR_CHAOTIC + flag);
3035 dummy = randint1(2);
3036 for (i = 0; i < dummy; i++) one_resistance(o_ptr);
3038 for (i = 0; i < 2; i++)
3040 int tmp = randint0(11);
3041 if (tmp < 6) add_flag(o_ptr->art_flags, TR_STR + tmp);
3042 else add_flag(o_ptr->art_flags, TR_STEALTH + tmp - 6);
3047 void random_artifact_resistance(object_type * o_ptr, artifact_type *a_ptr)
3049 bool give_resistance = FALSE, give_power = FALSE;
3051 if (o_ptr->name1 == ART_TERROR) /* Terror Mask is for warriors... */
3053 if (p_ptr->pclass == CLASS_WARRIOR || p_ptr->pclass == CLASS_ARCHER || p_ptr->pclass == CLASS_CAVALRY || p_ptr->pclass == CLASS_BERSERKER)
3056 give_resistance = TRUE;
3060 add_flag(o_ptr->art_flags, TR_AGGRAVATE);
3061 add_flag(o_ptr->art_flags, TR_TY_CURSE);
3062 o_ptr->curse_flags |=
3063 (TRC_CURSED | TRC_HEAVY_CURSE);
3064 o_ptr->curse_flags |= get_curse(2, o_ptr);
3069 if (o_ptr->name1 == ART_MURAMASA)
3071 if (p_ptr->pclass != CLASS_SAMURAI)
3073 add_flag(o_ptr->art_flags, TR_NO_MAGIC);
3074 o_ptr->curse_flags |= (TRC_HEAVY_CURSE);
3078 if (o_ptr->name1 == ART_XIAOLONG)
3080 if (p_ptr->pclass == CLASS_MONK)
3081 add_flag(o_ptr->art_flags, TR_BLOWS);
3084 if (o_ptr->name1 == ART_BLOOD)
3086 get_bloody_moon_flags(o_ptr);
3089 if (a_ptr->gen_flags & (TRG_XTRA_POWER)) give_power = TRUE;
3090 if (a_ptr->gen_flags & (TRG_XTRA_H_RES)) give_resistance = TRUE;
3091 if (a_ptr->gen_flags & (TRG_XTRA_RES_OR_POWER))
3093 /* Give a resistance OR a power */
3094 if (one_in_(2)) give_resistance = TRUE;
3095 else give_power = TRUE;
3103 if (give_resistance)
3105 one_high_resistance(o_ptr);
3111 * Create the artifact of the specified number
3113 bool create_named_art(int a_idx, int y, int x)
3119 artifact_type *a_ptr = &a_info[a_idx];
3121 /* Get local object */
3124 /* Ignore "empty" artifacts */
3125 if (!a_ptr->name) return FALSE;
3127 /* Acquire the "kind" index */
3128 i = lookup_kind(a_ptr->tval, a_ptr->sval);
3131 if (!i) return FALSE;
3133 /* Create the artifact */
3134 object_prep(q_ptr, i);
3137 q_ptr->name1 = a_idx;
3139 /* Extract the fields */
3140 q_ptr->pval = a_ptr->pval;
3141 q_ptr->ac = a_ptr->ac;
3142 q_ptr->dd = a_ptr->dd;
3143 q_ptr->ds = a_ptr->ds;
3144 q_ptr->to_a = a_ptr->to_a;
3145 q_ptr->to_h = a_ptr->to_h;
3146 q_ptr->to_d = a_ptr->to_d;
3147 q_ptr->weight = a_ptr->weight;
3149 /* Hack -- extract the "cursed" flag */
3150 if (a_ptr->gen_flags & TRG_CURSED) q_ptr->curse_flags |= (TRC_CURSED);
3151 if (a_ptr->gen_flags & TRG_HEAVY_CURSE) q_ptr->curse_flags |= (TRC_HEAVY_CURSE);
3152 if (a_ptr->gen_flags & TRG_PERMA_CURSE) q_ptr->curse_flags |= (TRC_PERMA_CURSE);
3153 if (a_ptr->gen_flags & (TRG_RANDOM_CURSE0)) q_ptr->curse_flags |= get_curse(0, q_ptr);
3154 if (a_ptr->gen_flags & (TRG_RANDOM_CURSE1)) q_ptr->curse_flags |= get_curse(1, q_ptr);
3155 if (a_ptr->gen_flags & (TRG_RANDOM_CURSE2)) q_ptr->curse_flags |= get_curse(2, q_ptr);
3157 random_artifact_resistance(q_ptr, a_ptr);
3160 * drop_near()Æâ¤ÇÉáÄ̤θÇÄꥢ¡¼¥Æ¥£¥Õ¥¡¥¯¥È¤¬½Å¤Ê¤é¤Ê¤¤À¼Á¤Ë°Í¸¤¹¤ë.
3161 * ²¾¤Ë2¸Ä°Ê¾å¸ºß²Äǽ¤«¤ÄÁõÈ÷Éʰʳ°¤Î¸ÇÄꥢ¡¼¥Æ¥£¥Õ¥¡¥¯¥È¤¬ºîÀ®¤µ¤ì¤ì¤Ð
3162 * ¤³¤Î´Ø¿ô¤ÎÊÖ¤êÃͤϿ®ÍѤǤ¤Ê¤¯¤Ê¤ë.
3165 /* Drop the artifact from heaven */
3166 return drop_near(q_ptr, -1, y, x) ? TRUE : FALSE;