OSDN Git Service

dd01974349b4336cb670c36b642aba322f54baa9
[hengband/hengband.git] / src / artifact.c
1 /* Purpose: Artifact code */
2
3 /*
4  * Copyright (c) 1989 James E. Wilson, Robert A. Koeneke
5  *
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.
9  */
10
11 #include "angband.h"
12
13
14 /* Chance of using syllables to form the name instead of the "template" files */
15 #define SINDARIN_NAME   10
16 #define TABLE_NAME      20
17 #define A_CURSED        13
18 #define WEIRD_LUCK      12
19 #define BIAS_LUCK       20
20 #define IM_LUCK         7
21
22 /*
23  * Bias luck needs to be higher than weird luck,
24  * since it is usually tested several times...
25  */
26 #define ACTIVATION_CHANCE 3
27
28
29 /*
30  * Use for biased artifact creation
31  */
32 static int artifact_bias;
33
34
35 /*
36  * Choose one random sustain
37  */
38 void one_sustain(object_type *o_ptr)
39 {
40         switch (randint0(6))
41         {
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;
48         }
49 }
50
51
52 /*
53  * Choose one random high resistance
54  */
55 void one_high_resistance(object_type *o_ptr)
56 {
57         switch (randint0(12))
58         {
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;
71         }
72 }
73
74
75 /*
76  * Choose one random high resistance ( except poison and disenchantment )
77  */
78 void one_lordly_high_resistance(object_type *o_ptr)
79 {
80         switch (randint0(10))
81         {
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;
92         }
93 }
94
95
96 /*
97  * Choose one random element resistance
98  */
99 void one_ele_resistance(object_type *o_ptr)
100 {
101         switch (randint0(4))
102         {
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;
107         }
108 }
109
110
111 /*
112  * Choose one random element or poison resistance
113  */
114 void one_dragon_ele_resistance(object_type *o_ptr)
115 {
116         if (one_in_(7))
117         {
118                 add_flag(o_ptr->art_flags, TR_RES_POIS);
119         }
120         else
121         {
122                 one_ele_resistance(o_ptr);
123         }
124 }
125
126
127 /*
128  * Choose one lower rank esp
129  */
130 void one_low_esp(object_type *o_ptr)
131 {
132         switch (randint1(10))
133         {
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;
143         case 10: add_flag(o_ptr->art_flags, TR_ESP_UNIQUE);   break;
144         }
145 }
146
147
148
149 /*
150  * Choose one random resistance
151  */
152 void one_resistance(object_type *o_ptr)
153 {
154         if (one_in_(3))
155         {
156                 one_ele_resistance(o_ptr);
157         }
158         else
159         {
160                 one_high_resistance(o_ptr);
161         }
162 }
163
164
165 /*
166  * Choose one random ability
167  */
168 void one_ability(object_type *o_ptr)
169 {
170         switch (randint0(10))
171         {
172         case 0: add_flag(o_ptr->art_flags, TR_LEVITATION);     break;
173         case 1: add_flag(o_ptr->art_flags, TR_LITE);        break;
174         case 2: add_flag(o_ptr->art_flags, TR_SEE_INVIS);   break;
175         case 3: add_flag(o_ptr->art_flags, TR_WARNING);     break;
176         case 4: add_flag(o_ptr->art_flags, TR_SLOW_DIGEST); break;
177         case 5: add_flag(o_ptr->art_flags, TR_REGEN);       break;
178         case 6: add_flag(o_ptr->art_flags, TR_FREE_ACT);    break;
179         case 7: add_flag(o_ptr->art_flags, TR_HOLD_LIFE);   break;
180         case 8:
181         case 9:
182                 one_low_esp(o_ptr);
183                 break;
184         }
185 }
186
187 /*
188  * Choose one random activation
189  */
190 void one_activation(object_type *o_ptr)
191 {
192         int type = 0;
193         int chance = 0;
194
195         while (randint1(100) >= chance)
196         {
197                 type = randint1(255);
198                 switch (type)
199                 {
200                         case ACT_SUNLIGHT:
201                         case ACT_BO_MISS_1:
202                         case ACT_BA_POIS_1:
203                         case ACT_BO_ELEC_1:
204                         case ACT_BO_ACID_1:
205                         case ACT_BO_COLD_1:
206                         case ACT_BO_FIRE_1:
207                         case ACT_CONFUSE:
208                         case ACT_SLEEP:
209                         case ACT_QUAKE:
210                         case ACT_CURE_LW:
211                         case ACT_CURE_MW:
212                         case ACT_CURE_POISON:
213                         case ACT_BERSERK:
214                         case ACT_LIGHT:
215                         case ACT_MAP_LIGHT:
216                         case ACT_DEST_DOOR:
217                         case ACT_STONE_MUD:
218                         case ACT_TELEPORT:
219                                 chance = 101;
220                                 break;
221                         case ACT_BA_COLD_1:
222                         case ACT_BA_FIRE_1:
223                         case ACT_DRAIN_1:
224                         case ACT_TELE_AWAY:
225                         case ACT_ESP:
226                         case ACT_RESIST_ALL:
227                         case ACT_DETECT_ALL:
228                         case ACT_RECALL:
229                         case ACT_SATIATE:
230                         case ACT_RECHARGE:
231                                 chance = 85;
232                                 break;
233                         case ACT_TERROR:
234                         case ACT_PROT_EVIL:
235                         case ACT_ID_PLAIN:
236                                 chance = 75;
237                                 break;
238                         case ACT_DRAIN_2:
239                         case ACT_VAMPIRE_1:
240                         case ACT_BO_MISS_2:
241                         case ACT_BA_FIRE_2:
242                         case ACT_REST_LIFE:
243                                 chance = 66;
244                                 break;
245                         case ACT_BA_FIRE_3:
246                         case ACT_BA_COLD_3:
247                         case ACT_BA_ELEC_3:
248                         case ACT_WHIRLWIND:
249                         case ACT_VAMPIRE_2:
250                         case ACT_CHARM_ANIMAL:
251                                 chance = 50;
252                                 break;
253                         case ACT_SUMMON_ANIMAL:
254                                 chance = 40;
255                                 break;
256                         case ACT_DISP_EVIL:
257                         case ACT_BA_MISS_3:
258                         case ACT_DISP_GOOD:
259                         case ACT_BANISH_EVIL:
260                         case ACT_GENOCIDE:
261                         case ACT_MASS_GENO:
262                         case ACT_CHARM_UNDEAD:
263                         case ACT_CHARM_OTHER:
264                         case ACT_SUMMON_PHANTOM:
265                         case ACT_REST_ALL:
266                         case ACT_RUNE_EXPLO:
267                                 chance = 33;
268                                 break;
269                         case ACT_CALL_CHAOS:
270                         case ACT_ROCKET:
271                         case ACT_CHARM_ANIMALS:
272                         case ACT_CHARM_OTHERS:
273                         case ACT_SUMMON_ELEMENTAL:
274                         case ACT_CURE_700:
275                         case ACT_SPEED:
276                         case ACT_ID_FULL:
277                         case ACT_RUNE_PROT:
278                                 chance = 25;
279                                 break;
280                         case ACT_CURE_1000:
281                         case ACT_XTRA_SPEED:
282                         case ACT_DETECT_XTRA:
283                         case ACT_DIM_DOOR:
284                                 chance = 10;
285                                 break;
286                         case ACT_SUMMON_UNDEAD:
287                         case ACT_SUMMON_DEMON:
288                         case ACT_WRAITH:
289                         case ACT_INVULN:
290                         case ACT_ALCHEMY:
291                                 chance = 5;
292                                 break;
293                         default:
294                                 chance = 0;
295                 }
296         }
297
298         /* A type was chosen... */
299         o_ptr->xtra2 = type;
300         add_flag(o_ptr->art_flags, TR_ACTIVATE);
301         o_ptr->timeout = 0;
302 }
303
304 static void curse_artifact(object_type * o_ptr)
305 {
306         if (o_ptr->pval > 0) o_ptr->pval = 0 - (o_ptr->pval + randint1(4));
307         if (o_ptr->to_a > 0) o_ptr->to_a = 0 - (o_ptr->to_a + randint1(4));
308         if (o_ptr->to_h > 0) o_ptr->to_h = 0 - (o_ptr->to_h + randint1(4));
309         if (o_ptr->to_d > 0) o_ptr->to_d = 0 - (o_ptr->to_d + randint1(4));
310
311         o_ptr->curse_flags |= (TRC_HEAVY_CURSE | TRC_CURSED);
312         remove_flag(o_ptr->art_flags, TR_BLESSED);
313
314         if (one_in_(4)) o_ptr->curse_flags |= TRC_PERMA_CURSE;
315         if (one_in_(3)) add_flag(o_ptr->art_flags, TR_TY_CURSE);
316         if (one_in_(2)) add_flag(o_ptr->art_flags, TR_AGGRAVATE);
317         if (one_in_(3)) add_flag(o_ptr->art_flags, TR_DRAIN_EXP);
318         if (one_in_(6)) add_flag(o_ptr->art_flags, TR_ADD_L_CURSE);
319         if (one_in_(9)) add_flag(o_ptr->art_flags, TR_ADD_H_CURSE);
320         if (one_in_(9)) add_flag(o_ptr->art_flags, TR_DRAIN_HP);
321         if (one_in_(9)) add_flag(o_ptr->art_flags, TR_DRAIN_MANA);
322         if (one_in_(2)) add_flag(o_ptr->art_flags, TR_TELEPORT);
323         else if (one_in_(3)) add_flag(o_ptr->art_flags, TR_NO_TELE);
324
325         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))
326                 add_flag(o_ptr->art_flags, TR_NO_MAGIC);
327 }
328
329
330 static void random_plus(object_type * o_ptr)
331 {
332         int this_type = (object_is_weapon_ammo(o_ptr) ? 23 : 19);
333
334         switch (artifact_bias)
335         {
336         case BIAS_WARRIOR:
337                 if (!(have_flag(o_ptr->art_flags, TR_STR)))
338                 {
339                         add_flag(o_ptr->art_flags, TR_STR);
340                         if (one_in_(2)) return;
341                 }
342
343                 if (!(have_flag(o_ptr->art_flags, TR_CON)))
344                 {
345                         add_flag(o_ptr->art_flags, TR_CON);
346                         if (one_in_(2)) return;
347                 }
348
349                 if (!(have_flag(o_ptr->art_flags, TR_DEX)))
350                 {
351                         add_flag(o_ptr->art_flags, TR_DEX);
352                         if (one_in_(2)) return;
353                 }
354                 break;
355
356         case BIAS_MAGE:
357                 if (!(have_flag(o_ptr->art_flags, TR_INT)))
358                 {
359                         add_flag(o_ptr->art_flags, TR_INT);
360                         if (one_in_(2)) return;
361                 }
362                 if ((o_ptr->tval == TV_GLOVES) && !(have_flag(o_ptr->art_flags, TR_MAGIC_MASTERY)))
363                 {
364                         add_flag(o_ptr->art_flags, TR_MAGIC_MASTERY);
365                         if (one_in_(2)) return;
366                 }
367                 break;
368
369         case BIAS_PRIESTLY:
370                 if (!(have_flag(o_ptr->art_flags, TR_WIS)))
371                 {
372                         add_flag(o_ptr->art_flags, TR_WIS);
373                         if (one_in_(2)) return;
374                 }
375                 break;
376
377         case BIAS_RANGER:
378                 if (!(have_flag(o_ptr->art_flags, TR_DEX)))
379                 {
380                         add_flag(o_ptr->art_flags, TR_DEX);
381                         if (one_in_(2)) return;
382                 }
383
384                 if (!(have_flag(o_ptr->art_flags, TR_CON)))
385                 {
386                         add_flag(o_ptr->art_flags, TR_CON);
387                         if (one_in_(2)) return;
388                 }
389
390                 if (!(have_flag(o_ptr->art_flags, TR_STR)))
391                 {
392                         add_flag(o_ptr->art_flags, TR_STR);
393                         if (one_in_(2)) return;
394                 }
395                 break;
396
397         case BIAS_ROGUE:
398                 if (!(have_flag(o_ptr->art_flags, TR_STEALTH)))
399                 {
400                         add_flag(o_ptr->art_flags, TR_STEALTH);
401                         if (one_in_(2)) return;
402                 }
403                 if (!(have_flag(o_ptr->art_flags, TR_SEARCH)))
404                 {
405                         add_flag(o_ptr->art_flags, TR_SEARCH);
406                         if (one_in_(2)) return;
407                 }
408                 break;
409
410         case BIAS_STR:
411                 if (!(have_flag(o_ptr->art_flags, TR_STR)))
412                 {
413                         add_flag(o_ptr->art_flags, TR_STR);
414                         if (one_in_(2)) return;
415                 }
416                 break;
417
418         case BIAS_WIS:
419                 if (!(have_flag(o_ptr->art_flags, TR_WIS)))
420                 {
421                         add_flag(o_ptr->art_flags, TR_WIS);
422                         if (one_in_(2)) return;
423                 }
424                 break;
425
426         case BIAS_INT:
427                 if (!(have_flag(o_ptr->art_flags, TR_INT)))
428                 {
429                         add_flag(o_ptr->art_flags, TR_INT);
430                         if (one_in_(2)) return;
431                 }
432                 break;
433
434         case BIAS_DEX:
435                 if (!(have_flag(o_ptr->art_flags, TR_DEX)))
436                 {
437                         add_flag(o_ptr->art_flags, TR_DEX);
438                         if (one_in_(2)) return;
439                 }
440                 break;
441
442         case BIAS_CON:
443                 if (!(have_flag(o_ptr->art_flags, TR_CON)))
444                 {
445                         add_flag(o_ptr->art_flags, TR_CON);
446                         if (one_in_(2)) return;
447                 }
448                 break;
449
450         case BIAS_CHR:
451                 if (!(have_flag(o_ptr->art_flags, TR_CHR)))
452                 {
453                         add_flag(o_ptr->art_flags, TR_CHR);
454                         if (one_in_(2)) return;
455                 }
456                 break;
457         }
458
459         if ((artifact_bias == BIAS_MAGE || artifact_bias == BIAS_PRIESTLY) && (o_ptr->tval == TV_SOFT_ARMOR) && (o_ptr->sval == SV_ROBE))
460         {
461                 if (!(have_flag(o_ptr->art_flags, TR_DEC_MANA)) && one_in_(3))
462                 {
463                         add_flag(o_ptr->art_flags, TR_DEC_MANA);
464                         if (one_in_(2)) return;
465                 }
466         }
467
468         switch (randint1(this_type))
469         {
470         case 1: case 2:
471                 add_flag(o_ptr->art_flags, TR_STR);
472                 if (!artifact_bias && !one_in_(13))
473                         artifact_bias = BIAS_STR;
474                 else if (!artifact_bias && one_in_(7))
475                         artifact_bias = BIAS_WARRIOR;
476                 break;
477         case 3: case 4:
478                 add_flag(o_ptr->art_flags, TR_INT);
479                 if (!artifact_bias && !one_in_(13))
480                         artifact_bias = BIAS_INT;
481                 else if (!artifact_bias && one_in_(7))
482                         artifact_bias = BIAS_MAGE;
483                 break;
484         case 5: case 6:
485                 add_flag(o_ptr->art_flags, TR_WIS);
486                 if (!artifact_bias && !one_in_(13))
487                         artifact_bias = BIAS_WIS;
488                 else if (!artifact_bias && one_in_(7))
489                         artifact_bias = BIAS_PRIESTLY;
490                 break;
491         case 7: case 8:
492                 add_flag(o_ptr->art_flags, TR_DEX);
493                 if (!artifact_bias && !one_in_(13))
494                         artifact_bias = BIAS_DEX;
495                 else if (!artifact_bias && one_in_(7))
496                         artifact_bias = BIAS_ROGUE;
497                 break;
498         case 9: case 10:
499                 add_flag(o_ptr->art_flags, TR_CON);
500                 if (!artifact_bias && !one_in_(13))
501                         artifact_bias = BIAS_CON;
502                 else if (!artifact_bias && one_in_(9))
503                         artifact_bias = BIAS_RANGER;
504                 break;
505         case 11: case 12:
506                 add_flag(o_ptr->art_flags, TR_CHR);
507                 if (!artifact_bias && !one_in_(13))
508                         artifact_bias = BIAS_CHR;
509                 break;
510         case 13: case 14:
511                 add_flag(o_ptr->art_flags, TR_STEALTH);
512                 if (!artifact_bias && one_in_(3))
513                         artifact_bias = BIAS_ROGUE;
514                 break;
515         case 15: case 16:
516                 add_flag(o_ptr->art_flags, TR_SEARCH);
517                 if (!artifact_bias && one_in_(9))
518                         artifact_bias = BIAS_RANGER;
519                 break;
520         case 17: case 18:
521                 add_flag(o_ptr->art_flags, TR_INFRA);
522                 break;
523         case 19:
524                 add_flag(o_ptr->art_flags, TR_SPEED);
525                 if (!artifact_bias && one_in_(11))
526                         artifact_bias = BIAS_ROGUE;
527                 break;
528         case 20: case 21:
529                 add_flag(o_ptr->art_flags, TR_TUNNEL);
530                 break;
531         case 22: case 23:
532                 if (o_ptr->tval == TV_BOW) random_plus(o_ptr);
533                 else
534                 {
535                         add_flag(o_ptr->art_flags, TR_BLOWS);
536                         if (!artifact_bias && one_in_(11))
537                                 artifact_bias = BIAS_WARRIOR;
538                 }
539                 break;
540         }
541 }
542
543
544 static void random_resistance(object_type * o_ptr)
545 {
546         switch (artifact_bias)
547         {
548         case BIAS_ACID:
549                 if (!(have_flag(o_ptr->art_flags, TR_RES_ACID)))
550                 {
551                         add_flag(o_ptr->art_flags, TR_RES_ACID);
552                         if (one_in_(2)) return;
553                 }
554                 if (one_in_(BIAS_LUCK) && !(have_flag(o_ptr->art_flags, TR_IM_ACID)))
555                 {
556                         add_flag(o_ptr->art_flags, TR_IM_ACID);
557                         if (!one_in_(IM_LUCK))
558                         {
559                                 remove_flag(o_ptr->art_flags, TR_IM_ELEC);
560                                 remove_flag(o_ptr->art_flags, TR_IM_COLD);
561                                 remove_flag(o_ptr->art_flags, TR_IM_FIRE);
562                         }
563                         if (one_in_(2)) return;
564                 }
565                 break;
566
567         case BIAS_ELEC:
568                 if (!(have_flag(o_ptr->art_flags, TR_RES_ELEC)))
569                 {
570                         add_flag(o_ptr->art_flags, TR_RES_ELEC);
571                         if (one_in_(2)) return;
572                 }
573                 if ((o_ptr->tval >= TV_CLOAK) && (o_ptr->tval <= TV_HARD_ARMOR) &&
574                     !(have_flag(o_ptr->art_flags, TR_SH_ELEC)))
575                 {
576                         add_flag(o_ptr->art_flags, TR_SH_ELEC);
577                         if (one_in_(2)) return;
578                 }
579                 if (one_in_(BIAS_LUCK) && !(have_flag(o_ptr->art_flags, TR_IM_ELEC)))
580                 {
581                         add_flag(o_ptr->art_flags, TR_IM_ELEC);
582                         if (!one_in_(IM_LUCK))
583                         {
584                                 remove_flag(o_ptr->art_flags, TR_IM_ACID);
585                                 remove_flag(o_ptr->art_flags, TR_IM_COLD);
586                                 remove_flag(o_ptr->art_flags, TR_IM_FIRE);
587                         }
588
589                         if (one_in_(2)) return;
590                 }
591                 break;
592
593         case BIAS_FIRE:
594                 if (!(have_flag(o_ptr->art_flags, TR_RES_FIRE)))
595                 {
596                         add_flag(o_ptr->art_flags, TR_RES_FIRE);
597                         if (one_in_(2)) return;
598                 }
599                 if ((o_ptr->tval >= TV_CLOAK) &&
600                     (o_ptr->tval <= TV_HARD_ARMOR) &&
601                     !(have_flag(o_ptr->art_flags, TR_SH_FIRE)))
602                 {
603                         add_flag(o_ptr->art_flags, TR_SH_FIRE);
604                         if (one_in_(2)) return;
605                 }
606                 if (one_in_(BIAS_LUCK) &&
607                     !(have_flag(o_ptr->art_flags, TR_IM_FIRE)))
608                 {
609                         add_flag(o_ptr->art_flags, TR_IM_FIRE);
610                         if (!one_in_(IM_LUCK))
611                         {
612                                 remove_flag(o_ptr->art_flags, TR_IM_ELEC);
613                                 remove_flag(o_ptr->art_flags, TR_IM_COLD);
614                                 remove_flag(o_ptr->art_flags, TR_IM_ACID);
615                         }
616                         if (one_in_(2)) return;
617                 }
618                 break;
619
620         case BIAS_COLD:
621                 if (!(have_flag(o_ptr->art_flags, TR_RES_COLD)))
622                 {
623                         add_flag(o_ptr->art_flags, TR_RES_COLD);
624                         if (one_in_(2)) return;
625                 }
626                 if ((o_ptr->tval >= TV_CLOAK) &&
627                     (o_ptr->tval <= TV_HARD_ARMOR) &&
628                     !(have_flag(o_ptr->art_flags, TR_SH_COLD)))
629                 {
630                         add_flag(o_ptr->art_flags, TR_SH_COLD);
631                         if (one_in_(2)) return;
632                 }
633                 if (one_in_(BIAS_LUCK) && !(have_flag(o_ptr->art_flags, TR_IM_COLD)))
634                 {
635                         add_flag(o_ptr->art_flags, TR_IM_COLD);
636                         if (!one_in_(IM_LUCK))
637                         {
638                                 remove_flag(o_ptr->art_flags, TR_IM_ELEC);
639                                 remove_flag(o_ptr->art_flags, TR_IM_ACID);
640                                 remove_flag(o_ptr->art_flags, TR_IM_FIRE);
641                         }
642                         if (one_in_(2)) return;
643                 }
644                 break;
645
646         case BIAS_POIS:
647                 if (!(have_flag(o_ptr->art_flags, TR_RES_POIS)))
648                 {
649                         add_flag(o_ptr->art_flags, TR_RES_POIS);
650                         if (one_in_(2)) return;
651                 }
652                 break;
653
654         case BIAS_WARRIOR:
655                 if (!one_in_(3) && (!(have_flag(o_ptr->art_flags, TR_RES_FEAR))))
656                 {
657                         add_flag(o_ptr->art_flags, TR_RES_FEAR);
658                         if (one_in_(2)) return;
659                 }
660                 if (one_in_(3) && (!(have_flag(o_ptr->art_flags, TR_NO_MAGIC))))
661                 {
662                         add_flag(o_ptr->art_flags, TR_NO_MAGIC);
663                         if (one_in_(2)) return;
664                 }
665                 break;
666
667         case BIAS_NECROMANTIC:
668                 if (!(have_flag(o_ptr->art_flags, TR_RES_NETHER)))
669                 {
670                         add_flag(o_ptr->art_flags, TR_RES_NETHER);
671                         if (one_in_(2)) return;
672                 }
673                 if (!(have_flag(o_ptr->art_flags, TR_RES_POIS)))
674                 {
675                         add_flag(o_ptr->art_flags, TR_RES_POIS);
676                         if (one_in_(2)) return;
677                 }
678                 if (!(have_flag(o_ptr->art_flags, TR_RES_DARK)))
679                 {
680                         add_flag(o_ptr->art_flags, TR_RES_DARK);
681                         if (one_in_(2)) return;
682                 }
683                 break;
684
685         case BIAS_CHAOS:
686                 if (!(have_flag(o_ptr->art_flags, TR_RES_CHAOS)))
687                 {
688                         add_flag(o_ptr->art_flags, TR_RES_CHAOS);
689                         if (one_in_(2)) return;
690                 }
691                 if (!(have_flag(o_ptr->art_flags, TR_RES_CONF)))
692                 {
693                         add_flag(o_ptr->art_flags, TR_RES_CONF);
694                         if (one_in_(2)) return;
695                 }
696                 if (!(have_flag(o_ptr->art_flags, TR_RES_DISEN)))
697                 {
698                         add_flag(o_ptr->art_flags, TR_RES_DISEN);
699                         if (one_in_(2)) return;
700                 }
701                 break;
702         }
703
704         switch (randint1(42))
705         {
706                 case 1:
707                         if (!one_in_(WEIRD_LUCK))
708                                 random_resistance(o_ptr);
709                         else
710                         {
711                                 add_flag(o_ptr->art_flags, TR_IM_ACID);
712                                 if (!artifact_bias)
713                                         artifact_bias = BIAS_ACID;
714                         }
715                         break;
716                 case 2:
717                         if (!one_in_(WEIRD_LUCK))
718                                 random_resistance(o_ptr);
719                         else
720                         {
721                                 add_flag(o_ptr->art_flags, TR_IM_ELEC);
722                                 if (!artifact_bias)
723                                         artifact_bias = BIAS_ELEC;
724                         }
725                         break;
726                 case 3:
727                         if (!one_in_(WEIRD_LUCK))
728                                 random_resistance(o_ptr);
729                         else
730                         {
731                                 add_flag(o_ptr->art_flags, TR_IM_COLD);
732                                 if (!artifact_bias)
733                                         artifact_bias = BIAS_COLD;
734                         }
735                         break;
736                 case 4:
737                         if (!one_in_(WEIRD_LUCK))
738                                 random_resistance(o_ptr);
739                         else
740                         {
741                                 add_flag(o_ptr->art_flags, TR_IM_FIRE);
742                                 if (!artifact_bias)
743                                         artifact_bias = BIAS_FIRE;
744                         }
745                         break;
746                 case 5:
747                 case 6:
748                 case 13:
749                         add_flag(o_ptr->art_flags, TR_RES_ACID);
750                         if (!artifact_bias)
751                                 artifact_bias = BIAS_ACID;
752                         break;
753                 case 7:
754                 case 8:
755                 case 14:
756                         add_flag(o_ptr->art_flags, TR_RES_ELEC);
757                         if (!artifact_bias)
758                                 artifact_bias = BIAS_ELEC;
759                         break;
760                 case 9:
761                 case 10:
762                 case 15:
763                         add_flag(o_ptr->art_flags, TR_RES_FIRE);
764                         if (!artifact_bias)
765                                 artifact_bias = BIAS_FIRE;
766                         break;
767                 case 11:
768                 case 12:
769                 case 16:
770                         add_flag(o_ptr->art_flags, TR_RES_COLD);
771                         if (!artifact_bias)
772                                 artifact_bias = BIAS_COLD;
773                         break;
774                 case 17:
775                 case 18:
776                         add_flag(o_ptr->art_flags, TR_RES_POIS);
777                         if (!artifact_bias && !one_in_(4))
778                                 artifact_bias = BIAS_POIS;
779                         else if (!artifact_bias && one_in_(2))
780                                 artifact_bias = BIAS_NECROMANTIC;
781                         else if (!artifact_bias && one_in_(2))
782                                 artifact_bias = BIAS_ROGUE;
783                         break;
784                 case 19:
785                 case 20:
786                         add_flag(o_ptr->art_flags, TR_RES_FEAR);
787                         if (!artifact_bias && one_in_(3))
788                                 artifact_bias = BIAS_WARRIOR;
789                         break;
790                 case 21:
791                         add_flag(o_ptr->art_flags, TR_RES_LITE);
792                         break;
793                 case 22:
794                         add_flag(o_ptr->art_flags, TR_RES_DARK);
795                         break;
796                 case 23:
797                 case 24:
798                         add_flag(o_ptr->art_flags, TR_RES_BLIND);
799                         break;
800                 case 25:
801                 case 26:
802                         add_flag(o_ptr->art_flags, TR_RES_CONF);
803                         if (!artifact_bias && one_in_(6))
804                                 artifact_bias = BIAS_CHAOS;
805                         break;
806                 case 27:
807                 case 28:
808                         add_flag(o_ptr->art_flags, TR_RES_SOUND);
809                         break;
810                 case 29:
811                 case 30:
812                         add_flag(o_ptr->art_flags, TR_RES_SHARDS);
813                         break;
814                 case 31:
815                 case 32:
816                         add_flag(o_ptr->art_flags, TR_RES_NETHER);
817                         if (!artifact_bias && one_in_(3))
818                                 artifact_bias = BIAS_NECROMANTIC;
819                         break;
820                 case 33:
821                 case 34:
822                         add_flag(o_ptr->art_flags, TR_RES_NEXUS);
823                         break;
824                 case 35:
825                 case 36:
826                         add_flag(o_ptr->art_flags, TR_RES_CHAOS);
827                         if (!artifact_bias && one_in_(2))
828                                 artifact_bias = BIAS_CHAOS;
829                         break;
830                 case 37:
831                 case 38:
832                         add_flag(o_ptr->art_flags, TR_RES_DISEN);
833                         break;
834                 case 39:
835                         if (o_ptr->tval >= TV_CLOAK && o_ptr->tval <= TV_HARD_ARMOR)
836                                 add_flag(o_ptr->art_flags, TR_SH_ELEC);
837                         else
838                                 random_resistance(o_ptr);
839                         if (!artifact_bias)
840                                 artifact_bias = BIAS_ELEC;
841                         break;
842                 case 40:
843                         if (o_ptr->tval >= TV_CLOAK && o_ptr->tval <= TV_HARD_ARMOR)
844                                 add_flag(o_ptr->art_flags, TR_SH_FIRE);
845                         else
846                                 random_resistance(o_ptr);
847                         if (!artifact_bias)
848                                 artifact_bias = BIAS_FIRE;
849                         break;
850                 case 41:
851                         if (o_ptr->tval == TV_SHIELD || o_ptr->tval == TV_CLOAK ||
852                             o_ptr->tval == TV_HELM || o_ptr->tval == TV_HARD_ARMOR)
853                                 add_flag(o_ptr->art_flags, TR_REFLECT);
854                         else
855                                 random_resistance(o_ptr);
856                         break;
857                 case 42:
858                         if (o_ptr->tval >= TV_CLOAK && o_ptr->tval <= TV_HARD_ARMOR)
859                                 add_flag(o_ptr->art_flags, TR_SH_COLD);
860                         else
861                                 random_resistance(o_ptr);
862                         if (!artifact_bias)
863                                 artifact_bias = BIAS_COLD;
864                         break;
865         }
866 }
867
868
869
870 static void random_misc(object_type * o_ptr)
871 {
872         switch (artifact_bias)
873         {
874         case BIAS_RANGER:
875                 if (!(have_flag(o_ptr->art_flags, TR_SUST_CON)))
876                 {
877                         add_flag(o_ptr->art_flags, TR_SUST_CON);
878                         if (one_in_(2)) return;
879                 }
880                 break;
881
882         case BIAS_STR:
883                 if (!(have_flag(o_ptr->art_flags, TR_SUST_STR)))
884                 {
885                         add_flag(o_ptr->art_flags, TR_SUST_STR);
886                         if (one_in_(2)) return;
887                 }
888                 break;
889
890         case BIAS_WIS:
891                 if (!(have_flag(o_ptr->art_flags, TR_SUST_WIS)))
892                 {
893                         add_flag(o_ptr->art_flags, TR_SUST_WIS);
894                         if (one_in_(2)) return;
895                 }
896                 break;
897
898         case BIAS_INT:
899                 if (!(have_flag(o_ptr->art_flags, TR_SUST_INT)))
900                 {
901                         add_flag(o_ptr->art_flags, TR_SUST_INT);
902                         if (one_in_(2)) return;
903                 }
904                 break;
905
906         case BIAS_DEX:
907                 if (!(have_flag(o_ptr->art_flags, TR_SUST_DEX)))
908                 {
909                         add_flag(o_ptr->art_flags, TR_SUST_DEX);
910                         if (one_in_(2)) return;
911                 }
912                 break;
913
914         case BIAS_CON:
915                 if (!(have_flag(o_ptr->art_flags, TR_SUST_CON)))
916                 {
917                         add_flag(o_ptr->art_flags, TR_SUST_CON);
918                         if (one_in_(2)) return;
919                 }
920                 break;
921
922         case BIAS_CHR:
923                 if (!(have_flag(o_ptr->art_flags, TR_SUST_CHR)))
924                 {
925                         add_flag(o_ptr->art_flags, TR_SUST_CHR);
926                         if (one_in_(2)) return;
927                 }
928                 break;
929
930         case BIAS_CHAOS:
931                 if (!(have_flag(o_ptr->art_flags, TR_TELEPORT)))
932                 {
933                         add_flag(o_ptr->art_flags, TR_TELEPORT);
934                         if (one_in_(2)) return;
935                 }
936                 break;
937
938         case BIAS_FIRE:
939                 if (!(have_flag(o_ptr->art_flags, TR_LITE)))
940                 {
941                         add_flag(o_ptr->art_flags, TR_LITE); /* Freebie */
942                 }
943                 break;
944         }
945
946         switch (randint1(33))
947         {
948                 case 1:
949                         add_flag(o_ptr->art_flags, TR_SUST_STR);
950                         if (!artifact_bias)
951                                 artifact_bias = BIAS_STR;
952                         break;
953                 case 2:
954                         add_flag(o_ptr->art_flags, TR_SUST_INT);
955                         if (!artifact_bias)
956                                 artifact_bias = BIAS_INT;
957                         break;
958                 case 3:
959                         add_flag(o_ptr->art_flags, TR_SUST_WIS);
960                         if (!artifact_bias)
961                                 artifact_bias = BIAS_WIS;
962                         break;
963                 case 4:
964                         add_flag(o_ptr->art_flags, TR_SUST_DEX);
965                         if (!artifact_bias)
966                                 artifact_bias = BIAS_DEX;
967                         break;
968                 case 5:
969                         add_flag(o_ptr->art_flags, TR_SUST_CON);
970                         if (!artifact_bias)
971                                 artifact_bias = BIAS_CON;
972                         break;
973                 case 6:
974                         add_flag(o_ptr->art_flags, TR_SUST_CHR);
975                         if (!artifact_bias)
976                                 artifact_bias = BIAS_CHR;
977                         break;
978                 case 7:
979                 case 8:
980                 case 14:
981                         add_flag(o_ptr->art_flags, TR_FREE_ACT);
982                         break;
983                 case 9:
984                         add_flag(o_ptr->art_flags, TR_HOLD_LIFE);
985                         if (!artifact_bias && one_in_(5))
986                                 artifact_bias = BIAS_PRIESTLY;
987                         else if (!artifact_bias && one_in_(6))
988                                 artifact_bias = BIAS_NECROMANTIC;
989                         break;
990                 case 10:
991                 case 11:
992                         add_flag(o_ptr->art_flags, TR_LITE);
993                         break;
994                 case 12:
995                 case 13:
996                         add_flag(o_ptr->art_flags, TR_LEVITATION);
997                         break;
998                 case 15:
999                 case 16:
1000                 case 17:
1001                         add_flag(o_ptr->art_flags, TR_SEE_INVIS);
1002                         break;
1003                 case 19:
1004                 case 20:
1005                         add_flag(o_ptr->art_flags, TR_SLOW_DIGEST);
1006                         break;
1007                 case 21:
1008                 case 22:
1009                         add_flag(o_ptr->art_flags, TR_REGEN);
1010                         break;
1011                 case 23:
1012                         add_flag(o_ptr->art_flags, TR_TELEPORT);
1013                         break;
1014                 case 24:
1015                 case 25:
1016                 case 26:
1017                         if (object_is_armour(o_ptr))
1018                                 random_misc(o_ptr);
1019                         else
1020                         {
1021                                 o_ptr->to_a = 4 + randint1(11);
1022                         }
1023                         break;
1024                 case 27:
1025                 case 28:
1026                 case 29:
1027                 {
1028                         int bonus_h, bonus_d;
1029                         add_flag(o_ptr->art_flags, TR_SHOW_MODS);
1030                         bonus_h = 4 + (randint1(11));
1031                         bonus_d = 4 + (randint1(11));
1032                         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))
1033                         {
1034                                 bonus_h /= 2;
1035                                 bonus_d /= 2;
1036                         }
1037                         o_ptr->to_h += bonus_h;
1038                         o_ptr->to_d += bonus_d;
1039                         break;
1040                 }
1041                 case 30:
1042                         add_flag(o_ptr->art_flags, TR_NO_MAGIC);
1043                         break;
1044                 case 31:
1045                         add_flag(o_ptr->art_flags, TR_NO_TELE);
1046                         break;
1047                 case 32:
1048                         add_flag(o_ptr->art_flags, TR_WARNING);
1049                         break;
1050
1051                 case 18:
1052                         switch (randint1(3))
1053                         {
1054                         case 1:
1055                                 add_flag(o_ptr->art_flags, TR_ESP_EVIL);
1056                                 if (!artifact_bias && one_in_(3))
1057                                         artifact_bias = BIAS_LAW;
1058                                 break;
1059                         case 2:
1060                                 add_flag(o_ptr->art_flags, TR_ESP_NONLIVING);
1061                                 if (!artifact_bias && one_in_(3))
1062                                         artifact_bias = BIAS_MAGE;
1063                                 break;
1064                         case 3:
1065                                 add_flag(o_ptr->art_flags, TR_TELEPATHY);
1066                                 if (!artifact_bias && one_in_(9))
1067                                         artifact_bias = BIAS_MAGE;
1068                                 break;
1069                         }
1070                         break;
1071
1072                 case 33:
1073                 {
1074                         int idx[3];
1075                         int n = randint1(3);
1076
1077                         idx[0] = randint1(8);
1078
1079                         idx[1] = randint1(7);
1080                         if (idx[1] >= idx[0]) idx[1]++;
1081
1082                         idx[2] = randint1(6);
1083                         if (idx[2] >= idx[0]) idx[2]++;
1084                         if (idx[2] >= idx[1]) idx[2]++;
1085
1086                         while (n--) switch (idx[n])
1087                         {
1088                         case 1:
1089                                 add_flag(o_ptr->art_flags, TR_ESP_ANIMAL);
1090                                 if (!artifact_bias && one_in_(4))
1091                                         artifact_bias = BIAS_RANGER;
1092                                 break;
1093                         case 2:
1094                                 add_flag(o_ptr->art_flags, TR_ESP_UNDEAD);
1095                                 if (!artifact_bias && one_in_(3))
1096                                         artifact_bias = BIAS_PRIESTLY;
1097                                 else if (!artifact_bias && one_in_(6))
1098                                         artifact_bias = BIAS_NECROMANTIC;
1099                                 break;
1100                         case 3:
1101                                 add_flag(o_ptr->art_flags, TR_ESP_DEMON);
1102                                 break;
1103                         case 4:
1104                                 add_flag(o_ptr->art_flags, TR_ESP_ORC);
1105                                 break;
1106                         case 5:
1107                                 add_flag(o_ptr->art_flags, TR_ESP_TROLL);
1108                                 break;
1109                         case 6:
1110                                 add_flag(o_ptr->art_flags, TR_ESP_GIANT);
1111                                 break;
1112                         case 7:
1113                                 add_flag(o_ptr->art_flags, TR_ESP_HUMAN);
1114                                 if (!artifact_bias && one_in_(6))
1115                                         artifact_bias = BIAS_ROGUE;
1116                                 break;
1117                         case 8:
1118                                 add_flag(o_ptr->art_flags, TR_ESP_GOOD);
1119                                 if (!artifact_bias && one_in_(3))
1120                                         artifact_bias = BIAS_LAW;
1121                                 break;
1122                         case 9:
1123                                 add_flag(o_ptr->art_flags, TR_ESP_UNIQUE);
1124                                 if (!artifact_bias && one_in_(3))
1125                                         artifact_bias = BIAS_LAW;
1126                                 break;
1127                         }
1128                         break;
1129                 }
1130         }
1131 }
1132
1133
1134 static void random_slay(object_type *o_ptr)
1135 {
1136         if (o_ptr->tval == TV_BOW)
1137         {
1138                 switch (randint1(6))
1139                 {
1140                         case 1:
1141                         case 2:
1142                         case 3:
1143                                 add_flag(o_ptr->art_flags, TR_XTRA_MIGHT);
1144                                 if (!one_in_(7)) remove_flag(o_ptr->art_flags, TR_XTRA_SHOTS);
1145                                 if (!artifact_bias && one_in_(9))
1146                                         artifact_bias = BIAS_RANGER;
1147                                 break;
1148                         default:
1149                                 add_flag(o_ptr->art_flags, TR_XTRA_SHOTS);
1150                                 if (!one_in_(7)) remove_flag(o_ptr->art_flags, TR_XTRA_MIGHT);
1151                                 if (!artifact_bias && one_in_(9))
1152                                         artifact_bias = BIAS_RANGER;
1153                         break;
1154                 }
1155
1156                 return;
1157         }
1158
1159         switch (artifact_bias)
1160         {
1161         case BIAS_CHAOS:
1162                 if (!(have_flag(o_ptr->art_flags, TR_CHAOTIC)))
1163                 {
1164                         add_flag(o_ptr->art_flags, TR_CHAOTIC);
1165                         if (one_in_(2)) return;
1166                 }
1167                 break;
1168
1169         case BIAS_PRIESTLY:
1170                 if((o_ptr->tval == TV_SWORD || o_ptr->tval == TV_POLEARM) &&
1171                    !(have_flag(o_ptr->art_flags, TR_BLESSED)))
1172                 {
1173                         /* A free power for "priestly" random artifacts */
1174                         add_flag(o_ptr->art_flags, TR_BLESSED);
1175                 }
1176                 break;
1177
1178         case BIAS_NECROMANTIC:
1179                 if (!(have_flag(o_ptr->art_flags, TR_VAMPIRIC)))
1180                 {
1181                         add_flag(o_ptr->art_flags, TR_VAMPIRIC);
1182                         if (one_in_(2)) return;
1183                 }
1184                 if (!(have_flag(o_ptr->art_flags, TR_BRAND_POIS)) && one_in_(2))
1185                 {
1186                         add_flag(o_ptr->art_flags, TR_BRAND_POIS);
1187                         if (one_in_(2)) return;
1188                 }
1189                 break;
1190
1191         case BIAS_RANGER:
1192                 if (!(have_flag(o_ptr->art_flags, TR_SLAY_ANIMAL)))
1193                 {
1194                         add_flag(o_ptr->art_flags, TR_SLAY_ANIMAL);
1195                         if (one_in_(2)) return;
1196                 }
1197                 break;
1198
1199         case BIAS_ROGUE:
1200                 if ((((o_ptr->tval == TV_SWORD) && (o_ptr->sval == SV_DAGGER)) ||
1201                      ((o_ptr->tval == TV_POLEARM) && (o_ptr->sval == SV_SPEAR))) &&
1202                          !(have_flag(o_ptr->art_flags, TR_THROW)))
1203                 {
1204                         /* Free power for rogues... */
1205                         add_flag(o_ptr->art_flags, TR_THROW);
1206                 }
1207                 if (!(have_flag(o_ptr->art_flags, TR_BRAND_POIS)))
1208                 {
1209                         add_flag(o_ptr->art_flags, TR_BRAND_POIS);
1210                         if (one_in_(2)) return;
1211                 }
1212                 break;
1213
1214         case BIAS_POIS:
1215                 if (!(have_flag(o_ptr->art_flags, TR_BRAND_POIS)))
1216                 {
1217                         add_flag(o_ptr->art_flags, TR_BRAND_POIS);
1218                         if (one_in_(2)) return;
1219                 }
1220                 break;
1221
1222         case BIAS_FIRE:
1223                 if (!(have_flag(o_ptr->art_flags, TR_BRAND_FIRE)))
1224                 {
1225                         add_flag(o_ptr->art_flags, TR_BRAND_FIRE);
1226                         if (one_in_(2)) return;
1227                 }
1228                 break;
1229
1230         case BIAS_COLD:
1231                 if (!(have_flag(o_ptr->art_flags, TR_BRAND_COLD)))
1232                 {
1233                         add_flag(o_ptr->art_flags, TR_BRAND_COLD);
1234                         if (one_in_(2)) return;
1235                 }
1236                 break;
1237
1238         case BIAS_ELEC:
1239                 if (!(have_flag(o_ptr->art_flags, TR_BRAND_ELEC)))
1240                 {
1241                         add_flag(o_ptr->art_flags, TR_BRAND_ELEC);
1242                         if (one_in_(2)) return;
1243                 }
1244                 break;
1245
1246         case BIAS_ACID:
1247                 if (!(have_flag(o_ptr->art_flags, TR_BRAND_ACID)))
1248                 {
1249                         add_flag(o_ptr->art_flags, TR_BRAND_ACID);
1250                         if (one_in_(2)) return;
1251                 }
1252                 break;
1253
1254         case BIAS_LAW:
1255                 if (!(have_flag(o_ptr->art_flags, TR_SLAY_EVIL)))
1256                 {
1257                         add_flag(o_ptr->art_flags, TR_SLAY_EVIL);
1258                         if (one_in_(2)) return;
1259                 }
1260                 if (!(have_flag(o_ptr->art_flags, TR_SLAY_UNDEAD)))
1261                 {
1262                         add_flag(o_ptr->art_flags, TR_SLAY_UNDEAD);
1263                         if (one_in_(2)) return;
1264                 }
1265                 if (!(have_flag(o_ptr->art_flags, TR_SLAY_DEMON)))
1266                 {
1267                         add_flag(o_ptr->art_flags, TR_SLAY_DEMON);
1268                         if (one_in_(2)) return;
1269                 }
1270                 break;
1271         }
1272
1273         switch (randint1(36))
1274         {
1275                 case 1:
1276                 case 2:
1277                         add_flag(o_ptr->art_flags, TR_SLAY_ANIMAL);
1278                         break;
1279                 case 3:
1280                 case 4:
1281                         add_flag(o_ptr->art_flags, TR_SLAY_EVIL);
1282                         if (!artifact_bias && one_in_(2))
1283                                 artifact_bias = BIAS_LAW;
1284                         else if (!artifact_bias && one_in_(9))
1285                                 artifact_bias = BIAS_PRIESTLY;
1286                         break;
1287                 case 5:
1288                 case 6:
1289                         add_flag(o_ptr->art_flags, TR_SLAY_UNDEAD);
1290                         if (!artifact_bias && one_in_(9))
1291                                 artifact_bias = BIAS_PRIESTLY;
1292                         break;
1293                 case 7:
1294                 case 8:
1295                         add_flag(o_ptr->art_flags, TR_SLAY_DEMON);
1296                         if (!artifact_bias && one_in_(9))
1297                                 artifact_bias = BIAS_PRIESTLY;
1298                         break;
1299                 case 9:
1300                 case 10:
1301                         add_flag(o_ptr->art_flags, TR_SLAY_ORC);
1302                         break;
1303                 case 11:
1304                 case 12:
1305                         add_flag(o_ptr->art_flags, TR_SLAY_TROLL);
1306                         break;
1307                 case 13:
1308                 case 14:
1309                         add_flag(o_ptr->art_flags, TR_SLAY_GIANT);
1310                         break;
1311                 case 15:
1312                 case 16:
1313                         add_flag(o_ptr->art_flags, TR_SLAY_DRAGON);
1314                         break;
1315                 case 17:
1316                         add_flag(o_ptr->art_flags, TR_KILL_DRAGON);
1317                         break;
1318                 case 18:
1319                 case 19:
1320                         if (o_ptr->tval == TV_SWORD)
1321                         {
1322                                 add_flag(o_ptr->art_flags, TR_VORPAL);
1323                                 if (!artifact_bias && one_in_(9))
1324                                         artifact_bias = BIAS_WARRIOR;
1325                         }
1326                         else
1327                                 random_slay(o_ptr);
1328                         break;
1329                 case 20:
1330                         add_flag(o_ptr->art_flags, TR_IMPACT);
1331                         break;
1332                 case 21:
1333                 case 22:
1334                         add_flag(o_ptr->art_flags, TR_BRAND_FIRE);
1335                         if (!artifact_bias)
1336                                 artifact_bias = BIAS_FIRE;
1337                         break;
1338                 case 23:
1339                 case 24:
1340                         add_flag(o_ptr->art_flags, TR_BRAND_COLD);
1341                         if (!artifact_bias)
1342                                 artifact_bias = BIAS_COLD;
1343                         break;
1344                 case 25:
1345                 case 26:
1346                         add_flag(o_ptr->art_flags, TR_BRAND_ELEC);
1347                         if (!artifact_bias)
1348                                 artifact_bias = BIAS_ELEC;
1349                         break;
1350                 case 27:
1351                 case 28:
1352                         add_flag(o_ptr->art_flags, TR_BRAND_ACID);
1353                         if (!artifact_bias)
1354                                 artifact_bias = BIAS_ACID;
1355                         break;
1356                 case 29:
1357                 case 30:
1358                         add_flag(o_ptr->art_flags, TR_BRAND_POIS);
1359                         if (!artifact_bias && !one_in_(3))
1360                                 artifact_bias = BIAS_POIS;
1361                         else if (!artifact_bias && one_in_(6))
1362                                 artifact_bias = BIAS_NECROMANTIC;
1363                         else if (!artifact_bias)
1364                                 artifact_bias = BIAS_ROGUE;
1365                         break;
1366                 case 31:
1367                         add_flag(o_ptr->art_flags, TR_VAMPIRIC);
1368                         if (!artifact_bias)
1369                                 artifact_bias = BIAS_NECROMANTIC;
1370                         break;
1371                 case 32:
1372                         add_flag(o_ptr->art_flags, TR_FORCE_WEAPON);
1373                         if (!artifact_bias)
1374                                 artifact_bias = (one_in_(2) ? BIAS_MAGE : BIAS_PRIESTLY);
1375                         break;
1376                 case 33:
1377                 case 34:
1378                         add_flag(o_ptr->art_flags, TR_SLAY_HUMAN);
1379                         break;
1380                 default:
1381                         add_flag(o_ptr->art_flags, TR_CHAOTIC);
1382                         if (!artifact_bias)
1383                                 artifact_bias = BIAS_CHAOS;
1384                         break;
1385         }
1386 }
1387
1388
1389 static void give_activation_power(object_type *o_ptr)
1390 {
1391         int type = 0, chance = 0;
1392
1393         switch (artifact_bias)
1394         {
1395                 case BIAS_ELEC:
1396                         if (!one_in_(3))
1397                         {
1398                                 type = ACT_BO_ELEC_1;
1399                         }
1400                         else if (!one_in_(5))
1401                         {
1402                                 type = ACT_BA_ELEC_2;
1403                         }
1404                         else
1405                         {
1406                                 type = ACT_BA_ELEC_3;
1407                         }
1408                         chance = 101;
1409                         break;
1410
1411                 case BIAS_POIS:
1412                         type = ACT_BA_POIS_1;
1413                         chance = 101;
1414                         break;
1415
1416                 case BIAS_FIRE:
1417                         if (!one_in_(3))
1418                         {
1419                                 type = ACT_BO_FIRE_1;
1420                         }
1421                         else if (!one_in_(5))
1422                         {
1423                                 type = ACT_BA_FIRE_1;
1424                         }
1425                         else
1426                         {
1427                                 type = ACT_BA_FIRE_2;
1428                         }
1429                         chance = 101;
1430                         break;
1431
1432                 case BIAS_COLD:
1433                         chance = 101;
1434                         if (!one_in_(3))
1435                                 type = ACT_BO_COLD_1;
1436                         else if (!one_in_(3))
1437                                 type = ACT_BA_COLD_1;
1438                         else if (!one_in_(3))
1439                                 type = ACT_BA_COLD_2;
1440                         else
1441                                 type = ACT_BA_COLD_3;
1442                         break;
1443
1444                 case BIAS_CHAOS:
1445                         chance = 50;
1446                         if (one_in_(6))
1447                                 type = ACT_SUMMON_DEMON;
1448                         else
1449                                 type = ACT_CALL_CHAOS;
1450                         break;
1451
1452                 case BIAS_PRIESTLY:
1453                         chance = 101;
1454
1455                         if (one_in_(13))
1456                                 type = ACT_CHARM_UNDEAD;
1457                         else if (one_in_(12))
1458                                 type = ACT_BANISH_EVIL;
1459                         else if (one_in_(11))
1460                                 type = ACT_DISP_EVIL;
1461                         else if (one_in_(10))
1462                                 type = ACT_PROT_EVIL;
1463                         else if (one_in_(9))
1464                                 type = ACT_CURE_1000;
1465                         else if (one_in_(8))
1466                                 type = ACT_CURE_700;
1467                         else if (one_in_(7))
1468                                 type = ACT_REST_ALL;
1469                         else if (one_in_(6))
1470                                 type = ACT_REST_LIFE;
1471                         else
1472                                 type = ACT_CURE_MW;
1473                         break;
1474
1475                 case BIAS_NECROMANTIC:
1476                         chance = 101;
1477                         if (one_in_(66))
1478                                 type = ACT_WRAITH;
1479                         else if (one_in_(13))
1480                                 type = ACT_DISP_GOOD;
1481                         else if (one_in_(9))
1482                                 type = ACT_MASS_GENO;
1483                         else if (one_in_(8))
1484                                 type = ACT_GENOCIDE;
1485                         else if (one_in_(13))
1486                                 type = ACT_SUMMON_UNDEAD;
1487                         else if (one_in_(9))
1488                                 type = ACT_VAMPIRE_2;
1489                         else if (one_in_(6))
1490                                 type = ACT_CHARM_UNDEAD;
1491                         else
1492                                 type = ACT_VAMPIRE_1;
1493                         break;
1494
1495                 case BIAS_LAW:
1496                         chance = 101;
1497                         if (one_in_(8))
1498                                 type = ACT_BANISH_EVIL;
1499                         else if (one_in_(4))
1500                                 type = ACT_DISP_EVIL;
1501                         else
1502                                 type = ACT_PROT_EVIL;
1503                         break;
1504
1505                 case BIAS_ROGUE:
1506                         chance = 101;
1507                         if (one_in_(50))
1508                                 type = ACT_SPEED;
1509                         else if (one_in_(4))
1510                                 type = ACT_SLEEP;
1511                         else if (one_in_(3))
1512                                 type = ACT_DETECT_ALL;
1513                         else if (one_in_(8))
1514                                 type = ACT_ID_FULL;
1515                         else
1516                                 type = ACT_ID_PLAIN;
1517                         break;
1518
1519                 case BIAS_MAGE:
1520                         chance = 66;
1521                         if (one_in_(20))
1522                                 type = ACT_SUMMON_ELEMENTAL;
1523                         else if (one_in_(10))
1524                                 type = ACT_SUMMON_PHANTOM;
1525                         else if (one_in_(5))
1526                                 type = ACT_RUNE_EXPLO;
1527                         else
1528                                 type = ACT_ESP;
1529                         break;
1530
1531                 case BIAS_WARRIOR:
1532                         chance = 80;
1533                         if (one_in_(100))
1534                                 type = ACT_INVULN;
1535                         else
1536                                 type = ACT_BERSERK;
1537                         break;
1538
1539                 case BIAS_RANGER:
1540                         chance = 101;
1541                         if (one_in_(20))
1542                                 type = ACT_CHARM_ANIMALS;
1543                         else if (one_in_(7))
1544                                 type = ACT_SUMMON_ANIMAL;
1545                         else if (one_in_(6))
1546                                 type = ACT_CHARM_ANIMAL;
1547                         else if (one_in_(4))
1548                                 type = ACT_RESIST_ALL;
1549                         else if (one_in_(3))
1550                                 type = ACT_SATIATE;
1551                         else
1552                                 type = ACT_CURE_POISON;
1553                         break;
1554         }
1555
1556         if (!type || (randint1(100) >= chance))
1557         {
1558                 one_activation(o_ptr);
1559                 return;
1560         }
1561
1562         /* A type was chosen... */
1563         o_ptr->xtra2 = type;
1564         add_flag(o_ptr->art_flags, TR_ACTIVATE);
1565         o_ptr->timeout = 0;
1566 }
1567
1568
1569 static void get_random_name(char *return_name, bool armour, int power)
1570 {
1571         int prob = randint1(100);
1572
1573         if (prob <= SINDARIN_NAME)
1574         {
1575                 get_table_sindarin(return_name);
1576         }
1577         else if (prob <= TABLE_NAME)
1578         {
1579                 get_table_name(return_name);
1580         }
1581         else
1582         {
1583                 cptr filename;
1584
1585                 switch (armour)
1586                 {
1587                         case 1:
1588                                 switch (power)
1589                                 {
1590                                         case 0:
1591 #ifdef JP
1592                                                 filename = "a_cursed_j.txt";
1593 #else
1594                                                 filename = "a_cursed.txt";
1595 #endif
1596                                                 break;
1597                                         case 1:
1598 #ifdef JP
1599                                                 filename = "a_low_j.txt";
1600 #else
1601                                                 filename = "a_low.txt";
1602 #endif
1603                                                 break;
1604                                         case 2:
1605 #ifdef JP
1606                                                 filename = "a_med_j.txt";
1607 #else
1608                                                 filename = "a_med.txt";
1609 #endif
1610                                                 break;
1611                                         default:
1612 #ifdef JP
1613                                                 filename = "a_high_j.txt";
1614 #else
1615                                                 filename = "a_high.txt";
1616 #endif
1617                                 }
1618                                 break;
1619                         default:
1620                                 switch (power)
1621                                 {
1622                                         case 0:
1623 #ifdef JP
1624                                                 filename = "w_cursed_j.txt";
1625 #else
1626                                                 filename = "w_cursed.txt";
1627 #endif
1628                                                 break;
1629                                         case 1:
1630 #ifdef JP
1631                                                 filename = "w_low_j.txt";
1632 #else
1633                                                 filename = "w_low.txt";
1634 #endif
1635                                                 break;
1636                                         case 2:
1637 #ifdef JP
1638                                                 filename = "w_med_j.txt";
1639 #else
1640                                                 filename = "w_med.txt";
1641 #endif
1642                                                 break;
1643                                         default:
1644 #ifdef JP
1645                                                 filename = "w_high_j.txt";
1646 #else
1647                                                 filename = "w_high.txt";
1648 #endif
1649                                 }
1650                 }
1651
1652                 (void)get_rnd_line(filename, artifact_bias, return_name);
1653 #ifdef JP
1654                  if (return_name[0] == 0) get_table_name(return_name);
1655 #endif
1656         }
1657 }
1658
1659
1660 bool create_artifact(object_type *o_ptr, bool a_scroll)
1661 {
1662         char    new_name[1024];
1663         int     has_pval = 0;
1664         int     powers = randint1(5) + 1;
1665         int     max_type = (object_is_weapon_ammo(o_ptr) ? 7 : 5);
1666         int     power_level;
1667         s32b    total_flags;
1668         bool    a_cursed = FALSE;
1669         int     warrior_artifact_bias = 0;
1670         int i;
1671
1672         /* Reset artifact bias */
1673         artifact_bias = 0;
1674
1675         /* Nuke enchantments */
1676         o_ptr->name1 = 0;
1677         o_ptr->name2 = 0;
1678
1679         for (i = 0; i < TR_FLAG_SIZE; i++)
1680                 o_ptr->art_flags[i] |= k_info[o_ptr->k_idx].flags[i];
1681
1682         if (o_ptr->pval) has_pval = TRUE;
1683
1684         if (a_scroll && one_in_(4))
1685         {
1686                 switch (p_ptr->pclass)
1687                 {
1688                         case CLASS_WARRIOR:
1689                         case CLASS_BERSERKER:
1690                         case CLASS_ARCHER:
1691                         case CLASS_SAMURAI:
1692                         case CLASS_CAVALRY:
1693                         case CLASS_SMITH:
1694                                 artifact_bias = BIAS_WARRIOR;
1695                                 break;
1696                         case CLASS_MAGE:
1697                         case CLASS_HIGH_MAGE:
1698                         case CLASS_SORCERER:
1699                         case CLASS_MAGIC_EATER:
1700                         case CLASS_BLUE_MAGE:
1701                                 artifact_bias = BIAS_MAGE;
1702                                 break;
1703                         case CLASS_PRIEST:
1704                                 artifact_bias = BIAS_PRIESTLY;
1705                                 break;
1706                         case CLASS_ROGUE:
1707                         case CLASS_NINJA:
1708                                 artifact_bias = BIAS_ROGUE;
1709                                 warrior_artifact_bias = 25;
1710                                 break;
1711                         case CLASS_RANGER:
1712                         case CLASS_SNIPER:
1713                                 artifact_bias = BIAS_RANGER;
1714                                 warrior_artifact_bias = 30;
1715                                 break;
1716                         case CLASS_PALADIN:
1717                                 artifact_bias = BIAS_PRIESTLY;
1718                                 warrior_artifact_bias = 40;
1719                                 break;
1720                         case CLASS_WARRIOR_MAGE:
1721                         case CLASS_RED_MAGE:
1722                                 artifact_bias = BIAS_MAGE;
1723                                 warrior_artifact_bias = 40;
1724                                 break;
1725                         case CLASS_CHAOS_WARRIOR:
1726                                 artifact_bias = BIAS_CHAOS;
1727                                 warrior_artifact_bias = 40;
1728                                 break;
1729                         case CLASS_MONK:
1730                         case CLASS_FORCETRAINER:
1731                                 artifact_bias = BIAS_PRIESTLY;
1732                                 break;
1733                         case CLASS_MINDCRAFTER:
1734                         case CLASS_BARD:
1735                                 if (randint1(5) > 2) artifact_bias = BIAS_PRIESTLY;
1736                                 break;
1737                         case CLASS_TOURIST:
1738                                 if (randint1(5) > 2) artifact_bias = BIAS_WARRIOR;
1739                                 break;
1740                         case CLASS_IMITATOR:
1741                                 if (randint1(2) > 1) artifact_bias = BIAS_RANGER;
1742                                 break;
1743                         case CLASS_BEASTMASTER:
1744                                 artifact_bias = BIAS_CHR;
1745                                 warrior_artifact_bias = 50;
1746                                 break;
1747                         case CLASS_MIRROR_MASTER:
1748                                 if (randint1(4) > 1) 
1749                                 {
1750                                     artifact_bias = BIAS_MAGE;
1751                                 }
1752                                 else
1753                                 {
1754                                     artifact_bias = BIAS_ROGUE;
1755                                 }
1756                                 break;
1757                 }
1758         }
1759
1760         if (a_scroll && (randint1(100) <= warrior_artifact_bias))
1761                 artifact_bias = BIAS_WARRIOR;
1762
1763         strcpy(new_name, "");
1764
1765         if (!a_scroll && one_in_(A_CURSED))
1766                 a_cursed = TRUE;
1767         if (((o_ptr->tval == TV_AMULET) || (o_ptr->tval == TV_RING)) && object_is_cursed(o_ptr))
1768                 a_cursed = TRUE;
1769
1770         while (one_in_(powers) || one_in_(7) || one_in_(10))
1771                 powers++;
1772
1773         if (!a_cursed && one_in_(WEIRD_LUCK))
1774                 powers *= 2;
1775
1776         if (a_cursed) powers /= 2;
1777
1778         /* Main loop */
1779         while (powers--)
1780         {
1781                 switch (randint1(max_type))
1782                 {
1783                         case 1: case 2:
1784                                 random_plus(o_ptr);
1785                                 has_pval = TRUE;
1786                                 break;
1787                         case 3: case 4:
1788                                 if (one_in_(2) && object_is_weapon_ammo(o_ptr) && (o_ptr->tval != TV_BOW))
1789                                 {
1790                                         if (a_cursed && !one_in_(13)) break;
1791                                         if (one_in_(13))
1792                                         {
1793                                                 if (one_in_(o_ptr->ds+4)) o_ptr->ds++;
1794                                         }
1795                                         else
1796                                         {
1797                                                 if (one_in_(o_ptr->dd+1)) o_ptr->dd++;
1798                                         }
1799                                 }
1800                                 else
1801                                         random_resistance(o_ptr);
1802                                 break;
1803                         case 5:
1804                                 random_misc(o_ptr);
1805                                 break;
1806                         case 6: case 7:
1807                                 random_slay(o_ptr);
1808                                 break;
1809                         default:
1810                                 if (p_ptr->wizard) msg_print("Switch error in create_artifact!");
1811                                 powers++;
1812                 }
1813         };
1814
1815         if (has_pval)
1816         {
1817 #if 0
1818                 add_flag(o_ptr->art_flags, TR_SHOW_MODS);
1819
1820                 /* This one commented out by gw's request... */
1821                 if (!a_scroll)
1822                         add_flag(o_ptr->art_flags, TR_HIDE_TYPE);
1823 #endif
1824
1825                 if (have_flag(o_ptr->art_flags, TR_BLOWS))
1826                 {
1827                         o_ptr->pval = randint1(2);
1828                         if ((o_ptr->tval == TV_SWORD) && (o_ptr->sval == SV_HAYABUSA))
1829                                 o_ptr->pval++;
1830                 }
1831                 else
1832                 {
1833                         do
1834                         {
1835                                 o_ptr->pval++;
1836                         }
1837                         while (o_ptr->pval < randint1(5) || one_in_(o_ptr->pval));
1838                 }
1839
1840                 if ((o_ptr->pval > 4) && !one_in_(WEIRD_LUCK))
1841                         o_ptr->pval = 4;
1842         }
1843
1844         /* give it some plusses... */
1845         if (object_is_armour(o_ptr))
1846                 o_ptr->to_a += randint1(o_ptr->to_a > 19 ? 1 : 20 - o_ptr->to_a);
1847         else if (object_is_weapon_ammo(o_ptr))
1848         {
1849                 o_ptr->to_h += randint1(o_ptr->to_h > 19 ? 1 : 20 - o_ptr->to_h);
1850                 o_ptr->to_d += randint1(o_ptr->to_d > 19 ? 1 : 20 - o_ptr->to_d);
1851                 if ((have_flag(o_ptr->art_flags, TR_WIS)) && (o_ptr->pval > 0)) add_flag(o_ptr->art_flags, TR_BLESSED);
1852         }
1853
1854         /* Just to be sure */
1855         add_flag(o_ptr->art_flags, TR_IGNORE_ACID);
1856         add_flag(o_ptr->art_flags, TR_IGNORE_ELEC);
1857         add_flag(o_ptr->art_flags, TR_IGNORE_FIRE);
1858         add_flag(o_ptr->art_flags, TR_IGNORE_COLD);
1859
1860         total_flags = flag_cost(o_ptr, o_ptr->pval);
1861         if (cheat_peek) msg_format("%ld", total_flags);
1862
1863         if (a_cursed) curse_artifact(o_ptr);
1864
1865         if (!a_cursed &&
1866             one_in_(object_is_armour(o_ptr) ? ACTIVATION_CHANCE * 2 : ACTIVATION_CHANCE))
1867         {
1868                 o_ptr->xtra2 = 0;
1869                 give_activation_power(o_ptr);
1870         }
1871
1872         if (object_is_armour(o_ptr))
1873         {
1874                 while ((o_ptr->to_d+o_ptr->to_h) > 20)
1875                 {
1876                         if (one_in_(o_ptr->to_d) && one_in_(o_ptr->to_h)) break;
1877                         o_ptr->to_d -= (s16b)randint0(3);
1878                         o_ptr->to_h -= (s16b)randint0(3);
1879                 }
1880                 while ((o_ptr->to_d+o_ptr->to_h) > 10)
1881                 {
1882                         if (one_in_(o_ptr->to_d) || one_in_(o_ptr->to_h)) break;
1883                         o_ptr->to_d -= (s16b)randint0(3);
1884                         o_ptr->to_h -= (s16b)randint0(3);
1885                 }
1886         }
1887
1888         if (((artifact_bias == BIAS_MAGE) || (artifact_bias == BIAS_INT)) && (o_ptr->tval == TV_GLOVES)) add_flag(o_ptr->art_flags, TR_FREE_ACT);
1889
1890         if ((o_ptr->tval == TV_SWORD) && (o_ptr->sval == SV_DOKUBARI))
1891         {
1892                 o_ptr->to_h = 0;
1893                 o_ptr->to_d = 0;
1894                 remove_flag(o_ptr->art_flags, TR_BLOWS);
1895                 remove_flag(o_ptr->art_flags, TR_FORCE_WEAPON);
1896                 remove_flag(o_ptr->art_flags, TR_SLAY_ANIMAL);
1897                 remove_flag(o_ptr->art_flags, TR_SLAY_EVIL);
1898                 remove_flag(o_ptr->art_flags, TR_SLAY_UNDEAD);
1899                 remove_flag(o_ptr->art_flags, TR_SLAY_DEMON);
1900                 remove_flag(o_ptr->art_flags, TR_SLAY_ORC);
1901                 remove_flag(o_ptr->art_flags, TR_SLAY_TROLL);
1902                 remove_flag(o_ptr->art_flags, TR_SLAY_GIANT);
1903                 remove_flag(o_ptr->art_flags, TR_SLAY_DRAGON);
1904                 remove_flag(o_ptr->art_flags, TR_KILL_DRAGON);
1905                 remove_flag(o_ptr->art_flags, TR_SLAY_HUMAN);
1906                 remove_flag(o_ptr->art_flags, TR_VORPAL);
1907                 remove_flag(o_ptr->art_flags, TR_BRAND_POIS);
1908                 remove_flag(o_ptr->art_flags, TR_BRAND_ACID);
1909                 remove_flag(o_ptr->art_flags, TR_BRAND_ELEC);
1910                 remove_flag(o_ptr->art_flags, TR_BRAND_FIRE);
1911                 remove_flag(o_ptr->art_flags, TR_BRAND_COLD);
1912         }
1913
1914         if (!object_is_weapon_ammo(o_ptr))
1915         {
1916                 /* For armors */
1917                 if (a_cursed) power_level = 0;
1918                 else if (total_flags < 15000) power_level = 1;
1919                 else if (total_flags < 35000) power_level = 2;
1920                 else power_level = 3;
1921         }
1922
1923         else
1924         {
1925                 /* For weapons */
1926                 if (a_cursed) power_level = 0;
1927                 else if (total_flags < 20000) power_level = 1;
1928                 else if (total_flags < 45000) power_level = 2;
1929                 else power_level = 3;
1930         }
1931
1932         if (a_scroll)
1933         {
1934                 char dummy_name[80] = "";
1935 #ifdef JP
1936                 cptr ask_msg = "¤³¤Î¥¢¡¼¥Æ¥£¥Õ¥¡¥¯¥È¤ò²¿¤È̾ÉÕ¤±¤Þ¤¹¤«¡©";
1937 #else
1938                 cptr ask_msg = "What do you want to call the artifact? ";
1939 #endif
1940
1941                 /* Identify it fully */
1942                 object_aware(o_ptr);
1943                 object_known(o_ptr);
1944
1945                 /* Mark the item as fully known */
1946                 o_ptr->ident |= (IDENT_MENTAL);
1947
1948                 /* For being treated as random artifact in screen_object() */
1949                 o_ptr->art_name = quark_add("");
1950
1951                 (void)screen_object(o_ptr, 0L);
1952
1953                 if (!get_string(ask_msg, dummy_name, sizeof dummy_name)
1954                     || !dummy_name[0])
1955                 {
1956                         /* Cancelled */
1957                         if (one_in_(2))
1958                         {
1959                                 get_table_sindarin_aux(dummy_name);
1960                         }
1961                         else
1962                         {
1963                                 get_table_name_aux(dummy_name);
1964                         }
1965                 }
1966
1967 #ifdef JP
1968                 sprintf(new_name, "¡Ô%s¡Õ", dummy_name);
1969 #else
1970                 sprintf(new_name, "'%s'", dummy_name);
1971 #endif
1972
1973                 chg_virtue(V_INDIVIDUALISM, 2);
1974                 chg_virtue(V_ENCHANT, 5);
1975         }
1976         else
1977         {
1978                 get_random_name(new_name, object_is_armour(o_ptr), power_level);
1979         }
1980
1981         if (cheat_xtra)
1982         {
1983 #ifdef JP
1984                 if (artifact_bias) msg_format("±¿¤ÎÊФä¿¥¢¡¼¥Æ¥£¥Õ¥¡¥¯¥È: %d¡£", artifact_bias);
1985                 else msg_print("¥¢¡¼¥Æ¥£¥Õ¥¡¥¯¥È¤Ë±¿¤ÎÊФê¤Ê¤·¡£");
1986 #else
1987                 if (artifact_bias) msg_format("Biased artifact: %d.", artifact_bias);
1988                 else msg_print("No bias in artifact.");
1989 #endif
1990         }
1991
1992         /* Save the inscription */
1993         o_ptr->art_name = quark_add(new_name);
1994
1995         /* Window stuff */
1996         p_ptr->window |= (PW_INVEN | PW_EQUIP);
1997
1998         return TRUE;
1999 }
2000
2001
2002 int activation_index(object_type *o_ptr)
2003 {
2004         /* Give priority to weaponsmith's essential activations */
2005         if (object_is_smith(o_ptr))
2006         {
2007                 switch (o_ptr->xtra3-1)
2008                 {
2009                 case ESSENCE_TMP_RES_ACID: return ACT_RESIST_ACID;
2010                 case ESSENCE_TMP_RES_ELEC: return ACT_RESIST_ELEC;
2011                 case ESSENCE_TMP_RES_FIRE: return ACT_RESIST_FIRE;
2012                 case ESSENCE_TMP_RES_COLD: return ACT_RESIST_COLD;
2013                 case TR_IMPACT: return ACT_QUAKE;
2014                 }
2015         }
2016
2017         if (object_is_fixed_artifact(o_ptr))
2018         {
2019                 if (have_flag(a_info[o_ptr->name1].flags, TR_ACTIVATE))
2020                 {
2021                         return a_info[o_ptr->name1].act_idx;
2022                 }
2023         }
2024         if (object_is_ego(o_ptr))
2025         {
2026                 if (have_flag(e_info[o_ptr->name2].flags, TR_ACTIVATE))
2027                 {
2028                         return e_info[o_ptr->name2].act_idx;
2029                 }
2030         }
2031         if (!object_is_random_artifact(o_ptr))
2032         {
2033                 if (have_flag(k_info[o_ptr->k_idx].flags, TR_ACTIVATE))
2034                 {
2035                         return k_info[o_ptr->k_idx].act_idx;
2036                 }
2037         }
2038
2039         return o_ptr->xtra2;
2040 }
2041
2042 const activation_type* find_activation_info(object_type *o_ptr)
2043 {
2044         const int index = activation_index(o_ptr);
2045         const activation_type* p;
2046
2047         for (p = activation_info; p->flag != NULL; ++ p) {
2048                 if (p->index == index)
2049                 {
2050                         return p;
2051                 }
2052         }
2053
2054         return NULL;
2055 }
2056
2057
2058 /* Dragon breath activation */
2059 static bool activate_dragon_breath(object_type *o_ptr)
2060 {
2061         u32b flgs[4]; /* for resistance flags */
2062         int type[20];
2063         cptr name[20];
2064         int i, dir, t, n = 0;
2065
2066         if (!get_aim_dir(&dir)) return FALSE;
2067
2068         object_flags(o_ptr, flgs);
2069
2070         for (i = 0; dragonbreath_info[i].flag != 0; i++)
2071         {
2072                 if (have_flag(flgs, dragonbreath_info[i].flag))
2073                 {
2074                         type[n] = dragonbreath_info[i].type;
2075                         name[n] = dragonbreath_info[i].name;
2076                         n++;
2077                 }
2078         }
2079
2080         /* Paranoia */
2081         if (n == 0) return FALSE;
2082
2083         /* Stop speaking */
2084         if (music_singing_any()) stop_singing();
2085         if (hex_spelling_any()) stop_hex_spell_all();
2086
2087         t = randint0(n);
2088         msg_format(_("¤¢¤Ê¤¿¤Ï%s¤Î¥Ö¥ì¥¹¤òÅǤ¤¤¿¡£", "You breathe %s."), name[t]);
2089         fire_ball(type[t], dir, 250, -4);
2090
2091         return TRUE;
2092 }
2093
2094
2095 bool activate_random_artifact(object_type *o_ptr)
2096 {
2097         int plev = p_ptr->lev;
2098         int k, dir, dummy = 0;
2099         cptr name = k_name + k_info[o_ptr->k_idx].name;
2100         const activation_type* const act_ptr = find_activation_info(o_ptr);
2101
2102         /* Paranoia */
2103         if (!act_ptr) {
2104                 /* Maybe forgot adding information to activation_info table ? */
2105                 msg_print("Activation information is not found.");
2106                 return FALSE;
2107         }
2108
2109         /* Activate for attack */
2110         switch (act_ptr->index)
2111         {
2112                 case ACT_SUNLIGHT:
2113                 {
2114                         if (!get_aim_dir(&dir)) return FALSE;
2115 #ifdef JP
2116                         msg_print("ÂÀÍÛ¸÷Àþ¤¬Êü¤¿¤ì¤¿¡£");
2117 #else
2118                         msg_print("A line of sunlight appears.");
2119 #endif
2120                         (void)lite_line(dir, damroll(6, 8));
2121                         break;
2122                 }
2123
2124                 case ACT_BO_MISS_1:
2125                 {
2126 #ifdef JP
2127                         msg_print("¤½¤ì¤ÏâÁ¤·¤¤¤¯¤é¤¤¤ËÌÀ¤ë¤¯µ±¤¤¤Æ¤¤¤ë...");
2128 #else
2129                         msg_print("It glows extremely brightly...");
2130 #endif
2131                         if (!get_aim_dir(&dir)) return FALSE;
2132                         fire_bolt(GF_MISSILE, dir, damroll(2, 6));
2133                         break;
2134                 }
2135
2136                 case ACT_BA_POIS_1:
2137                 {
2138 #ifdef JP
2139                         msg_print("¤½¤ì¤ÏÇ»Î理Ë̮ư¤·¤Æ¤¤¤ë...");
2140 #else
2141                         msg_print("It throbs deep green...");
2142 #endif
2143                         if (!get_aim_dir(&dir)) return FALSE;
2144                         fire_ball(GF_POIS, dir, 12, 3);
2145                         break;
2146                 }
2147
2148                 case ACT_BO_ELEC_1:
2149                 {
2150 #ifdef JP
2151                         msg_print("¤½¤ì¤Ï²Ð²Ö¤Ëʤ¤ï¤ì¤¿...");
2152 #else
2153                         msg_print("It is covered in sparks...");
2154 #endif
2155                         if (!get_aim_dir(&dir)) return FALSE;
2156                         fire_bolt(GF_ELEC, dir, damroll(4, 8));
2157                         break;
2158                 }
2159
2160                 case ACT_BO_ACID_1:
2161                 {
2162 #ifdef JP
2163                         msg_print("¤½¤ì¤Ï»À¤Ëʤ¤ï¤ì¤¿...");
2164 #else
2165                         msg_print("It is covered in acid...");
2166 #endif
2167                         if (!get_aim_dir(&dir)) return FALSE;
2168                         fire_bolt(GF_ACID, dir, damroll(5, 8));
2169                         break;
2170                 }
2171
2172                 case ACT_BO_COLD_1:
2173                 {
2174 #ifdef JP
2175                         msg_print("¤½¤ì¤ÏÁú¤Ëʤ¤ï¤ì¤¿...");
2176 #else
2177                         msg_print("It is covered in frost...");
2178 #endif
2179                         if (!get_aim_dir(&dir)) return FALSE;
2180                         fire_bolt(GF_COLD, dir, damroll(6, 8));
2181                         break;
2182                 }
2183
2184                 case ACT_BO_FIRE_1:
2185                 {
2186 #ifdef JP
2187                         msg_print("¤½¤ì¤Ï±ê¤Ëʤ¤ï¤ì¤¿...");
2188 #else
2189                         msg_print("It is covered in fire...");
2190 #endif
2191                         if (!get_aim_dir(&dir)) return FALSE;
2192                         fire_bolt(GF_FIRE, dir, damroll(9, 8));
2193                         break;
2194                 }
2195
2196                 case ACT_BA_COLD_1:
2197                 {
2198 #ifdef JP
2199                         msg_print("¤½¤ì¤ÏÁú¤Ëʤ¤ï¤ì¤¿...");
2200 #else
2201                         msg_print("It is covered in frost...");
2202 #endif
2203                         if (!get_aim_dir(&dir)) return FALSE;
2204                         fire_ball(GF_COLD, dir, 48, 2);
2205                         break;
2206                 }
2207
2208                 case ACT_BA_FIRE_1:
2209                 {
2210 #ifdef JP
2211                         msg_print("¤½¤ì¤ÏÀÖ¤¯·ã¤·¤¯µ±¤¤¤¿...");
2212 #else
2213                         msg_print("It glows an intense red...");
2214 #endif
2215                         if (!get_aim_dir(&dir)) return FALSE;
2216                         fire_ball(GF_FIRE, dir, 72, 2);
2217                         break;
2218                 }
2219
2220                 case ACT_DRAIN_1:
2221                 {
2222 #ifdef JP
2223                         msg_format("¤¢¤Ê¤¿¤Ï%s¤ËŨ¤òÄù¤á»¦¤¹¤è¤¦Ì¿¤¸¤¿¡£", name);
2224 #else
2225                         msg_format("You order the %s to strangle your opponent.", name);
2226 #endif
2227                         if (!get_aim_dir(&dir)) return FALSE;
2228                         if (drain_life(dir, 100))
2229                         break;
2230                 }
2231
2232                 case ACT_BA_COLD_2:
2233                 {
2234 #ifdef JP
2235                         msg_print("¤½¤ì¤ÏÀĤ¯·ã¤·¤¯µ±¤¤¤¿...");
2236 #else
2237                         msg_print("It glows an intense blue...");
2238 #endif
2239                         if (!get_aim_dir(&dir)) return FALSE;
2240                         fire_ball(GF_COLD, dir, 100, 2);
2241                         break;
2242                 }
2243
2244                 case ACT_BA_ELEC_2:
2245                 {
2246 #ifdef JP
2247                         msg_print("Åŵ¤¤¬¥Ñ¥Á¥Ñ¥Á²»¤òΩ¤Æ¤¿...");
2248 #else
2249                         msg_print("It crackles with electricity...");
2250 #endif
2251                         if (!get_aim_dir(&dir)) return FALSE;
2252                         fire_ball(GF_ELEC, dir, 100, 3);
2253                         break;
2254                 }
2255
2256                 case ACT_BA_FIRE_2:
2257                 {
2258 #ifdef JP
2259                         msg_format("%s¤«¤é±ê¤¬¿á¤­½Ð¤·¤¿...", name);
2260 #else
2261                         msg_format("The %s rages in fire...", name);
2262 #endif
2263                         if (!get_aim_dir(&dir)) return FALSE;
2264                         fire_ball(GF_FIRE, dir, 120, 3);
2265                         break;
2266                 }
2267
2268                 case ACT_DRAIN_2:
2269                 {
2270 #ifdef JP
2271                         msg_print("¹õ¤¯µ±¤¤¤Æ¤¤¤ë...");
2272 #else
2273                         msg_print("It glows black...");
2274 #endif
2275                         if (!get_aim_dir(&dir)) return FALSE;
2276                         drain_life(dir, 120);
2277                         break;
2278                 }
2279
2280                 case ACT_VAMPIRE_1:
2281                 {
2282                         if (!get_aim_dir(&dir)) return FALSE;
2283                         for (dummy = 0; dummy < 3; dummy++)
2284                         {
2285                                 if (drain_life(dir, 50))
2286                                 hp_player(50);
2287                         }
2288                         break;
2289                 }
2290
2291                 case ACT_BO_MISS_2:
2292                 {
2293 #ifdef JP
2294                         msg_print("ËâË¡¤Î¥È¥²¤¬¸½¤ì¤¿...");
2295 #else
2296                         msg_print("It grows magical spikes...");
2297 #endif
2298                         if (!get_aim_dir(&dir)) return FALSE;
2299                         fire_bolt(GF_ARROW, dir, 150);
2300                         break;
2301                 }
2302
2303                 case ACT_BA_FIRE_3:
2304                 {
2305 #ifdef JP
2306                         msg_print("¿¼ÀÖ¿§¤Ëµ±¤¤¤Æ¤¤¤ë...");
2307 #else
2308                         msg_print("It glows deep red...");
2309 #endif
2310                         if (!get_aim_dir(&dir)) return FALSE;
2311                         fire_ball(GF_FIRE, dir, 300, 3);
2312                         break;
2313                 }
2314
2315                 case ACT_BA_COLD_3:
2316                 {
2317 #ifdef JP
2318                         msg_print("ÌÀ¤ë¤¯Çò¿§¤Ëµ±¤¤¤Æ¤¤¤ë...");
2319 #else
2320                         msg_print("It glows bright white...");
2321 #endif
2322                         if (!get_aim_dir(&dir)) return FALSE;
2323                         fire_ball(GF_COLD, dir, 400, 3);
2324                         break;
2325                 }
2326
2327                 case ACT_BA_ELEC_3:
2328                 {
2329 #ifdef JP
2330                         msg_print("¿¼ÀÄ¿§¤Ëµ±¤¤¤Æ¤¤¤ë...");
2331 #else
2332                         msg_print("It glows deep blue...");
2333 #endif
2334                         if (!get_aim_dir(&dir)) return FALSE;
2335                         fire_ball(GF_ELEC, dir, 500, 3);
2336                         break;
2337                 }
2338
2339                 case ACT_WHIRLWIND:
2340                 {
2341                         {
2342                                 int y = 0, x = 0;
2343                                 cave_type       *c_ptr;
2344                                 monster_type    *m_ptr;
2345
2346                                 for (dir = 0; dir <= 9; dir++)
2347                                 {
2348                                         y = py + ddy[dir];
2349                                         x = px + ddx[dir];
2350                                         c_ptr = &cave[y][x];
2351
2352                                         /* Get the monster */
2353                                         m_ptr = &m_list[c_ptr->m_idx];
2354
2355                                         /* Hack -- attack monsters */
2356                                         if (c_ptr->m_idx && (m_ptr->ml || cave_have_flag_bold(y, x, FF_PROJECT)))
2357                                                 py_attack(y, x, 0);
2358                                 }
2359                         }
2360                         break;
2361                 }
2362
2363                 case ACT_VAMPIRE_2:
2364                 {
2365                         if (!get_aim_dir(&dir)) return FALSE;
2366                         for (dummy = 0; dummy < 3; dummy++)
2367                         {
2368                                 if (drain_life(dir, 100))
2369                                 hp_player(100);
2370                         }
2371                         break;
2372                 }
2373
2374
2375                 case ACT_CALL_CHAOS:
2376                 {
2377 #ifdef JP
2378                         msg_print("ÍÍ¡¹¤Ê¿§¤Î²Ð²Ö¤òȯ¤·¤Æ¤¤¤ë...");
2379 #else
2380                         msg_print("It glows in scintillating colours...");
2381 #endif
2382                         call_chaos();
2383                         break;
2384                 }
2385
2386                 case ACT_ROCKET:
2387                 {
2388                         if (!get_aim_dir(&dir)) return FALSE;
2389 #ifdef JP
2390                         msg_print("¥í¥±¥Ã¥È¤òȯ¼Í¤·¤¿¡ª");
2391 #else
2392                         msg_print("You launch a rocket!");
2393 #endif
2394                         fire_ball(GF_ROCKET, dir, 250 + plev*3, 2);
2395                         break;
2396                 }
2397
2398                 case ACT_DISP_EVIL:
2399                 {
2400 #ifdef JP
2401                         msg_print("¿ÀÀ»¤ÊÊ·°Ïµ¤¤¬½¼Ëþ¤·¤¿...");
2402 #else
2403                         msg_print("It floods the area with goodness...");
2404 #endif
2405                         dispel_evil(p_ptr->lev * 5);
2406                         break;
2407                 }
2408
2409                 case ACT_BA_MISS_3:
2410                 {
2411                         if (!get_aim_dir(&dir)) return FALSE;
2412 #ifdef JP
2413                         msg_print("¤¢¤Ê¤¿¤Ï¥¨¥ì¥á¥ó¥È¤Î¥Ö¥ì¥¹¤òÅǤ¤¤¿¡£");
2414 #else
2415                         msg_print("You breathe the elements.");
2416 #endif
2417                         fire_ball(GF_MISSILE, dir, 300, -4);
2418                         break;
2419                 }
2420
2421                 case ACT_DISP_GOOD:
2422                 {
2423 #ifdef JP
2424                         msg_print("¼Ù°­¤ÊÊ·°Ïµ¤¤¬½¼Ëþ¤·¤¿...");
2425 #else
2426                         msg_print("It floods the area with evil...");
2427 #endif
2428                         dispel_good(p_ptr->lev * 5);
2429                         break;
2430                 }
2431
2432                 case ACT_BO_MANA:
2433                 {
2434 #ifdef JP
2435                         msg_format("%s¤ËËâË¡¤Î¥È¥²¤¬¸½¤ì¤¿...", name);
2436 #else
2437                         msg_format("The %s grows magical spikes...", name);
2438 #endif
2439                         if (!get_aim_dir(&dir)) return FALSE;
2440                         fire_bolt(GF_ARROW, dir, 150);
2441                         break;
2442                 }
2443
2444                 case ACT_BA_WATER:
2445                 {
2446 #ifdef JP
2447                         msg_format("%s¤¬¿¼¤¤ÀÄ¿§¤Ë¸ÝÆ°¤·¤Æ¤¤¤ë...", name);
2448 #else
2449                         msg_format("The %s throbs deep blue...", name);
2450 #endif
2451                         if (!get_aim_dir(&dir)) return FALSE;
2452                         fire_ball(GF_WATER, dir, 200, 3);
2453                         break;
2454                 }
2455
2456                 case ACT_BA_DARK:
2457                 {
2458 #ifdef JP
2459                         msg_format("%s¤¬¿¼¤¤°Ç¤Ëʤ¤ï¤ì¤¿...", name);
2460 #else
2461                         msg_format("The %s is coverd in pitch-darkness...", name);
2462 #endif
2463                         if (!get_aim_dir(&dir)) return FALSE;
2464                         fire_ball(GF_DARK, dir, 250, 4);
2465                         break;
2466                 }
2467
2468                 case ACT_BA_MANA:
2469                 {
2470 #ifdef JP
2471                         msg_format("%s¤¬ÀÄÇò¤¯¸÷¤Ã¤¿¡¥¡¥¡¥", name);
2472 #else
2473                         msg_format("The %s glows pale...", name);
2474 #endif
2475                         if (!get_aim_dir(&dir)) return FALSE;
2476                         fire_ball(GF_MANA, dir, 250, 4);
2477                         break;
2478                 }
2479
2480                 case ACT_PESTICIDE:
2481                 {
2482 #ifdef JP
2483                         msg_print("¤¢¤Ê¤¿¤Ï³²Ãî¤ò°ìÁݤ·¤¿¡£");
2484 #else
2485                         msg_print("You exterminate small life.");
2486 #endif
2487                         (void)dispel_monsters(4);
2488                         break;
2489                 }
2490
2491                 case ACT_BLINDING_LIGHT:
2492                 {
2493 #ifdef JP
2494                         msg_format("%s¤¬âÁ¤·¤¤¸÷¤Çµ±¤¤¤¿...", name);
2495 #else
2496                         msg_format("The %s gleams with blinding light...", name);
2497 #endif
2498                         fire_ball(GF_LITE, 0, 300, 6);
2499                         confuse_monsters(3 * p_ptr->lev / 2);
2500                         break;
2501                 }
2502
2503                 case ACT_BIZARRE:
2504                 {
2505 #ifdef JP
2506                         msg_format("%s¤Ï¼¿¹õ¤Ëµ±¤¤¤¿...", name);
2507 #else
2508                         msg_format("The %s glows intensely black...", name);
2509 #endif
2510                         if (!get_aim_dir(&dir)) return FALSE;
2511                         ring_of_power(dir);
2512                         break;
2513                 }
2514
2515                 case ACT_CAST_BA_STAR:
2516                 {
2517                         int num = damroll(5, 3);
2518                         int y, x;
2519                         int attempts;
2520 #ifdef JP
2521                         msg_format("%s¤¬°ðºÊ¤Çʤ¤ï¤ì¤¿...", name);
2522 #else
2523                         msg_format("The %s is surrounded by lightning...", name);
2524 #endif
2525                         for (k = 0; k < num; k++)
2526                         {
2527                                 attempts = 1000;
2528
2529                                 while (attempts--)
2530                                 {
2531                                         scatter(&y, &x, py, px, 4, 0);
2532
2533                                         if (!cave_have_flag_bold(y, x, FF_PROJECT)) continue;
2534
2535                                         if (!player_bold(y, x)) break;
2536                                 }
2537
2538                                 project(0, 3, y, x, 150, GF_ELEC,
2539                                                         (PROJECT_THRU | PROJECT_STOP | PROJECT_GRID | PROJECT_ITEM | PROJECT_KILL), -1);
2540                         }
2541
2542                         break;
2543                 }
2544
2545                 case ACT_BLADETURNER:
2546                 {
2547                         if (!get_aim_dir(&dir)) return FALSE;
2548 #ifdef JP
2549                         msg_print("¤¢¤Ê¤¿¤Ï¥¨¥ì¥á¥ó¥È¤Î¥Ö¥ì¥¹¤òÅǤ¤¤¿¡£");
2550 #else
2551                         msg_print("You breathe the elements.");
2552 #endif
2553                         fire_ball(GF_MISSILE, dir, 300, -4);
2554 #ifdef JP
2555                         msg_print("³»¤¬ÍÍ¡¹¤Ê¿§¤Ëµ±¤¤¤¿...");
2556 #else
2557                         msg_print("Your armor glows many colours...");
2558 #endif
2559                         (void)set_afraid(0);
2560                         (void)set_hero(randint1(50) + 50, FALSE);
2561                         (void)hp_player(10);
2562                         (void)set_blessed(randint1(50) + 50, FALSE);
2563                         (void)set_oppose_acid(randint1(50) + 50, FALSE);
2564                         (void)set_oppose_elec(randint1(50) + 50, FALSE);
2565                         (void)set_oppose_fire(randint1(50) + 50, FALSE);
2566                         (void)set_oppose_cold(randint1(50) + 50, FALSE);
2567                         (void)set_oppose_pois(randint1(50) + 50, FALSE);
2568                         break;
2569                 }
2570                 case ACT_BA_ACID_1:
2571                 {
2572                         if (!get_aim_dir(&dir)) return FALSE;
2573                         fire_ball(GF_ACID, dir, 100, 2);
2574                         break;
2575                 }
2576
2577                 case ACT_BR_FIRE:
2578                 {
2579                         if (!get_aim_dir(&dir)) return FALSE;
2580                         fire_ball(GF_FIRE, dir, 200, -2);
2581                         if ((o_ptr->tval == TV_RING) && (o_ptr->sval == SV_RING_FLAMES))
2582                         {
2583                                 (void)set_oppose_fire(randint1(20) + 20, FALSE);
2584                         }
2585                         break;
2586                 }
2587                 case ACT_BR_COLD:
2588                 {
2589                         if (!get_aim_dir(&dir)) return FALSE;
2590                         fire_ball(GF_COLD, dir, 200, -2);
2591                         if ((o_ptr->tval == TV_RING) && (o_ptr->sval == SV_RING_ICE))
2592                         {
2593                                 (void)set_oppose_cold(randint1(20) + 20, FALSE);
2594                         }
2595                         break;
2596                 }
2597                 case ACT_BR_DRAGON:
2598                 {
2599                         if (!activate_dragon_breath(o_ptr)) return FALSE;
2600                         break;
2601                 }
2602
2603                 /* Activate for other offensive action */
2604
2605                 case ACT_CONFUSE:
2606                 {
2607 #ifdef JP
2608                         msg_print("ÍÍ¡¹¤Ê¿§¤Î²Ð²Ö¤òȯ¤·¤Æ¤¤¤ë...");
2609 #else
2610                         msg_print("It glows in scintillating colours...");
2611 #endif
2612                         if (!get_aim_dir(&dir)) return FALSE;
2613                         confuse_monster(dir, 20);
2614                         break;
2615                 }
2616
2617                 case ACT_SLEEP:
2618                 {
2619 #ifdef JP
2620                         msg_print("¿¼ÀÄ¿§¤Ëµ±¤¤¤Æ¤¤¤ë...");
2621 #else
2622                         msg_print("It glows deep blue...");
2623 #endif
2624                         sleep_monsters_touch();
2625                         break;
2626                 }
2627
2628                 case ACT_QUAKE:
2629                 {
2630                         earthquake(py, px, 5);
2631                         break;
2632                 }
2633
2634                 case ACT_TERROR:
2635                 {
2636                         turn_monsters(40 + p_ptr->lev);
2637                         break;
2638                 }
2639
2640                 case ACT_TELE_AWAY:
2641                 {
2642                         if (!get_aim_dir(&dir)) return FALSE;
2643                         (void)fire_beam(GF_AWAY_ALL, dir, plev);
2644                         break;
2645                 }
2646
2647                 case ACT_BANISH_EVIL:
2648                 {
2649                         if (banish_evil(100))
2650                         {
2651 #ifdef JP
2652                                 msg_print("¥¢¡¼¥Æ¥£¥Õ¥¡¥¯¥È¤ÎÎϤ¬¼Ù°­¤òÂǤÁʧ¤Ã¤¿¡ª");
2653 #else
2654                                 msg_print("The power of the artifact banishes evil!");
2655 #endif
2656                         }
2657                         break;
2658                 }
2659
2660                 case ACT_GENOCIDE:
2661                 {
2662 #ifdef JP
2663                         msg_print("¿¼ÀÄ¿§¤Ëµ±¤¤¤Æ¤¤¤ë...");
2664 #else
2665                         msg_print("It glows deep blue...");
2666 #endif
2667                         (void)symbol_genocide(200, TRUE);
2668                         break;
2669                 }
2670
2671                 case ACT_MASS_GENO:
2672                 {
2673 #ifdef JP
2674                         msg_print("¤Ò¤É¤¯±Ô¤¤²»¤¬Î®¤ì½Ð¤¿...");
2675 #else
2676                         msg_print("It lets out a long, shrill note...");
2677 #endif
2678                         (void)mass_genocide(200, TRUE);
2679                         break;
2680                 }
2681
2682                 case ACT_SCARE_AREA:
2683                 {
2684                         if (music_singing_any()) stop_singing();
2685                         if (hex_spelling_any()) stop_hex_spell_all();
2686 #ifdef JP
2687                         msg_print("¤¢¤Ê¤¿¤ÏÎ϶¯¤¤ÆÍÉ÷¤ò¿á¤­ÌĤ餷¤¿¡£¼þ°Ï¤ÎŨ¤¬¿Ì¤¨¾å¤Ã¤Æ¤¤¤ë!");
2688 #else
2689                         msg_print("You wind a mighty blast; your enemies tremble!");
2690 #endif
2691                         (void)turn_monsters((3 * p_ptr->lev / 2) + 10);
2692                         break;
2693                 }
2694
2695                 case ACT_AGGRAVATE:
2696                 {
2697                         if (o_ptr->name1 == ART_HYOUSIGI)
2698                         {
2699 #ifdef JP
2700                                 msg_print("Çï»ÒÌÚ¤òÂǤä¿¡£");
2701 #else
2702                                 msg_print("You beat Your wooden clappers.");
2703 #endif
2704                         }
2705                         else
2706                         {
2707 #ifdef JP
2708                                 msg_format("%s¤ÏÉÔ²÷¤Êʪ²»¤òΩ¤Æ¤¿¡£", name);
2709 #else
2710                                 msg_format("The %s sounds an unpleasant noise.", name);
2711 #endif
2712                         }
2713                         aggravate_monsters(0);
2714                         break;
2715                 }
2716
2717                 /* Activate for summoning / charming */
2718
2719                 case ACT_CHARM_ANIMAL:
2720                 {
2721                         if (!get_aim_dir(&dir)) return FALSE;
2722                         (void)charm_animal(dir, plev * 2);
2723                         break;
2724                 }
2725
2726                 case ACT_CHARM_UNDEAD:
2727                 {
2728                         if (!get_aim_dir(&dir)) return FALSE;
2729                         (void)control_one_undead(dir, plev * 2);
2730                         break;
2731                 }
2732
2733                 case ACT_CHARM_OTHER:
2734                 {
2735                         if (!get_aim_dir(&dir)) return FALSE;
2736                         (void)charm_monster(dir, plev * 2);
2737                         break;
2738                 }
2739
2740                 case ACT_CHARM_ANIMALS:
2741                 {
2742                         (void)charm_animals(plev * 2);
2743                         break;
2744                 }
2745
2746                 case ACT_CHARM_OTHERS:
2747                 {
2748                         charm_monsters(plev * 2);
2749                         break;
2750                 }
2751
2752                 case ACT_SUMMON_ANIMAL:
2753                 {
2754                         (void)summon_specific(-1, py, px, plev, SUMMON_ANIMAL_RANGER, (PM_ALLOW_GROUP | PM_FORCE_PET));
2755                         break;
2756                 }
2757
2758                 case ACT_SUMMON_PHANTOM:
2759                 {
2760 #ifdef JP
2761                         msg_print("¸¸Îî¤ò¾¤´­¤·¤¿¡£");
2762 #else
2763                         msg_print("You summon a phantasmal servant.");
2764 #endif
2765                         (void)summon_specific(-1, py, px, dun_level, SUMMON_PHANTOM, (PM_ALLOW_GROUP | PM_FORCE_PET));
2766                         break;
2767                 }
2768
2769                 case ACT_SUMMON_ELEMENTAL:
2770                 {
2771                         bool pet = one_in_(3);
2772                         u32b mode = 0L;
2773
2774                         if (!(pet && (plev < 50))) mode |= PM_ALLOW_GROUP;
2775                         if (pet) mode |= PM_FORCE_PET;
2776                         else mode |= PM_NO_PET;
2777
2778                         if (summon_specific((pet ? -1 : 0), py, px, ((plev * 3) / 2), SUMMON_ELEMENTAL, mode))
2779                         {
2780 #ifdef JP
2781                                 msg_print("¥¨¥ì¥á¥ó¥¿¥ë¤¬¸½¤ì¤¿...");
2782 #else
2783                                 msg_print("An elemental materializes...");
2784 #endif
2785                                 if (pet)
2786 #ifdef JP
2787                                         msg_print("¤¢¤Ê¤¿¤ËÉþ½¾¤·¤Æ¤¤¤ë¤è¤¦¤À¡£");
2788 #else
2789                                         msg_print("It seems obedient to you.");
2790 #endif
2791                                 else
2792 #ifdef JP
2793                                         msg_print("¤½¤ì¤ò¥³¥ó¥È¥í¡¼¥ë¤Ç¤­¤Ê¤«¤Ã¤¿¡ª");
2794 #else
2795                                         msg_print("You fail to control it!");
2796 #endif
2797                         }
2798
2799                         break;
2800                 }
2801
2802                 case ACT_SUMMON_DEMON:
2803                 {
2804                         bool pet = one_in_(3);
2805                         u32b mode = 0L;
2806
2807                         if (!(pet && (plev < 50))) mode |= PM_ALLOW_GROUP;
2808                         if (pet) mode |= PM_FORCE_PET;
2809                         else mode |= PM_NO_PET;
2810
2811                         if (summon_specific((pet ? -1 : 0), py, px, ((plev * 3) / 2), SUMMON_DEMON, mode))
2812                         {
2813 #ifdef JP
2814                                 msg_print("ⲫ¤Î°­½­¤¬½¼Ëþ¤·¤¿¡£");
2815 #else
2816                                 msg_print("The area fills with a stench of sulphur and brimstone.");
2817 #endif
2818                                 if (pet)
2819 #ifdef JP
2820                                         msg_print("¡Ö¤´ÍѤǤ´¤¶¤¤¤Þ¤¹¤«¡¢¤´¼ç¿ÍÍÍ¡×");
2821 #else
2822                                         msg_print("'What is thy bidding... Master?'");
2823 #endif
2824                                 else
2825 #ifdef JP
2826                                         msg_print("¡ÖNON SERVIAM! Wretch! ¤ªÁ°¤Îº²¤òĺ¤¯¤¾¡ª¡×");
2827 #else
2828                                         msg_print("'NON SERVIAM! Wretch! I shall feast on thy mortal soul!'");
2829 #endif
2830                         }
2831
2832                         break;
2833                 }
2834
2835                 case ACT_SUMMON_UNDEAD:
2836                 {
2837                         bool pet = one_in_(3);
2838                         int type;
2839                         u32b mode = 0L;
2840
2841                         type = (plev > 47 ? SUMMON_HI_UNDEAD : SUMMON_UNDEAD);
2842
2843                         if (!pet || ((plev > 24) && one_in_(3))) mode |= PM_ALLOW_GROUP;
2844                         if (pet) mode |= PM_FORCE_PET;
2845                         else mode |= (PM_ALLOW_UNIQUE | PM_NO_PET);
2846
2847                         if (summon_specific((pet ? -1 : 0), py, px, ((plev * 3) / 2), type, mode))
2848                         {
2849 #ifdef JP
2850                                 msg_print("Î䤿¤¤É÷¤¬¤¢¤Ê¤¿¤Î¼þ¤ê¤Ë¿á¤­»Ï¤á¤¿¡£¤½¤ì¤ÏÉåÇÔ½­¤ò±¿¤ó¤Ç¤¤¤ë...");
2851 #else
2852                                 msg_print("Cold winds begin to blow around you, carrying with them the stench of decay...");
2853 #endif
2854                                 if (pet)
2855 #ifdef JP
2856                                         msg_print("¸Å¤¨¤Î»à¤»¤ë¼Ô¶¦¤¬¤¢¤Ê¤¿¤Ë»Å¤¨¤ë¤¿¤áÅÚ¤«¤éᴤä¿¡ª");
2857 #else
2858                                         msg_print("Ancient, long-dead forms arise from the ground to serve you!");
2859 #endif
2860                                 else
2861 #ifdef JP
2862                                         msg_print("»à¼Ô¤¬á´¤Ã¤¿¡£Ì²¤ê¤ò˸¤²¤ë¤¢¤Ê¤¿¤òȳ¤¹¤ë¤¿¤á¤Ë¡ª");
2863 #else
2864                                         msg_print("'The dead arise... to punish you for disturbing them!'");
2865 #endif
2866                         }
2867
2868                         break;
2869                 }
2870
2871                 case ACT_SUMMON_HOUND:
2872                 {
2873                         u32b mode = PM_ALLOW_GROUP;
2874                         bool pet = !one_in_(5);
2875                         if (pet) mode |= PM_FORCE_PET;
2876                         else mode |= PM_NO_PET;
2877
2878                         if (summon_specific((pet ? -1 : 0), py, px, ((p_ptr->lev * 3) / 2), SUMMON_HOUND, mode))
2879                         {
2880
2881                                 if (pet)
2882 #ifdef JP
2883                                         msg_print("¥Ï¥¦¥ó¥É¤¬¤¢¤Ê¤¿¤Î²¼ËͤȤ·¤Æ½Ð¸½¤·¤¿¡£");
2884 #else
2885                                 msg_print("A group of hounds appear as your servant.");
2886 #endif
2887
2888                                 else
2889 #ifdef JP
2890                                         msg_print("¥Ï¥¦¥ó¥É¤Ï¤¢¤Ê¤¿¤Ë²ç¤ò¸þ¤±¤Æ¤¤¤ë¡ª");
2891 #else
2892                                         msg_print("A group of hounds appear as your enemy!");
2893 #endif
2894
2895                         }
2896
2897                         break;
2898                 }
2899
2900                 case ACT_SUMMON_DAWN:
2901                 {
2902 #ifdef JP
2903                         msg_print("¶Ç¤Î»ÕÃĤò¾¤´­¤·¤¿¡£");
2904 #else
2905                         msg_print("You summon the Legion of the Dawn.");
2906 #endif
2907                         (void)summon_specific(-1, py, px, dun_level, SUMMON_DAWN, (PM_ALLOW_GROUP | PM_FORCE_PET));
2908                         break;
2909                 }
2910
2911                 case ACT_SUMMON_OCTOPUS:
2912                 {
2913                         u32b mode = PM_ALLOW_GROUP;
2914                         bool pet = !one_in_(5);
2915                         if (pet) mode |= PM_FORCE_PET;
2916
2917                         if (summon_named_creature(0, py, px, MON_JIZOTAKO, mode))
2918                         {
2919                                 if (pet)
2920 #ifdef JP
2921                                         msg_print("Âý¤¬¤¢¤Ê¤¿¤Î²¼ËͤȤ·¤Æ½Ð¸½¤·¤¿¡£");
2922 #else
2923                                         msg_print("A group of octopuses appear as your servant.");
2924 #endif
2925                                 else
2926 #ifdef JP
2927                                         msg_print("Âý¤Ï¤¢¤Ê¤¿¤òâˤó¤Ç¤¤¤ë¡ª");
2928 #else
2929                                         msg_print("A group of octopuses appear as your enemy!");
2930 #endif
2931                         }
2932
2933                         break;
2934                 }
2935
2936                 /* Activate for healing */
2937
2938                 case ACT_CHOIR_SINGS:
2939                 {
2940 #ifdef JP
2941                         msg_print("Å·¹ñ¤Î²Î¤¬Ê¹¤³¤¨¤ë...");
2942 #else
2943                         msg_print("A heavenly choir sings...");
2944 #endif
2945                         (void)set_poisoned(0);
2946                         (void)set_cut(0);
2947                         (void)set_stun(0);
2948                         (void)set_confused(0);
2949                         (void)set_blind(0);
2950                         (void)set_afraid(0);
2951                         (void)set_hero(randint1(25) + 25, FALSE);
2952                         (void)hp_player(777);
2953                         break;
2954                 }
2955
2956                 case ACT_CURE_LW:
2957                 {
2958                         (void)set_afraid(0);
2959                         (void)hp_player(30);
2960                         break;
2961                 }
2962
2963                 case ACT_CURE_MW:
2964                 {
2965 #ifdef JP
2966                         msg_print("¿¼»ç¿§¤Î¸÷¤òȯ¤·¤Æ¤¤¤ë...");
2967 #else
2968                         msg_print("It radiates deep purple...");
2969 #endif
2970                         hp_player(damroll(4, 8));
2971                         (void)set_cut((p_ptr->cut / 2) - 50);
2972                         break;
2973                 }
2974
2975                 case ACT_CURE_POISON:
2976                 {
2977 #ifdef JP
2978                         msg_print("¿¼ÀÄ¿§¤Ëµ±¤¤¤Æ¤¤¤ë...");
2979 #else
2980                         msg_print("It glows deep blue...");
2981 #endif
2982                         (void)set_afraid(0);
2983                         (void)set_poisoned(0);
2984                         break;
2985                 }
2986
2987                 case ACT_REST_LIFE:
2988                 {
2989 #ifdef JP
2990                         msg_print("¿¼¹È¤Ëµ±¤¤¤Æ¤¤¤ë...");
2991 #else
2992                         msg_print("It glows a deep red...");
2993 #endif
2994                         restore_level();
2995                         break;
2996                 }
2997
2998                 case ACT_REST_ALL:
2999                 {
3000 #ifdef JP
3001                         msg_print("Ç»Îп§¤Ëµ±¤¤¤Æ¤¤¤ë...");
3002 #else
3003                         msg_print("It glows a deep green...");
3004 #endif
3005                         (void)do_res_stat(A_STR);
3006                         (void)do_res_stat(A_INT);
3007                         (void)do_res_stat(A_WIS);
3008                         (void)do_res_stat(A_DEX);
3009                         (void)do_res_stat(A_CON);
3010                         (void)do_res_stat(A_CHR);
3011                         (void)restore_level();
3012                         break;
3013                 }
3014
3015                 case ACT_CURE_700:
3016                 {
3017 #ifdef JP
3018                         msg_print("¿¼ÀÄ¿§¤Ëµ±¤¤¤Æ¤¤¤ë...");
3019                         msg_print("ÂÎÆâ¤ËÃȤ«¤¤¸ÝÆ°¤¬´¶¤¸¤é¤ì¤ë...");
3020 #else
3021                         msg_print("It glows deep blue...");
3022                         msg_print("You feel a warm tingling inside...");
3023 #endif
3024                         (void)hp_player(700);
3025                         (void)set_cut(0);
3026                         break;
3027                 }
3028
3029                 case ACT_CURE_1000:
3030                 {
3031 #ifdef JP
3032                         msg_print("Çò¤¯ÌÀ¤ë¤¯µ±¤¤¤Æ¤¤¤ë...");
3033                         msg_print("¤Ò¤¸¤ç¤¦¤Ëµ¤Ê¬¤¬¤è¤¤...");
3034 #else
3035                         msg_print("It glows a bright white...");
3036                         msg_print("You feel much better...");
3037 #endif
3038                         (void)hp_player(1000);
3039                         (void)set_cut(0);
3040                         break;
3041                 }
3042
3043                 case ACT_CURING:
3044                 {
3045 #ifdef JP
3046                         msg_format("%s¤ÎÍ¥¤·¤µ¤ËÌþ¤µ¤ì¤ë...", name);
3047 #else
3048                         msg_format("the %s cures you affectionately ...", name);
3049 #endif
3050                         (void)set_poisoned(0);
3051                         (void)set_confused(0);
3052                         (void)set_blind(0);
3053                         (void)set_stun(0);
3054                         (void)set_cut(0);
3055                         (void)set_image(0);
3056
3057                         break;
3058                 }
3059
3060                 case ACT_CURE_MANA_FULL:
3061                 {
3062 #ifdef JP
3063                         msg_format("%s¤¬ÀÄÇò¤¯¸÷¤Ã¤¿¡¥¡¥¡¥", name);
3064 #else
3065                         msg_format("The %s glows pale...", name);
3066 #endif
3067                         if (p_ptr->pclass == CLASS_MAGIC_EATER)
3068                         {
3069                                 int i;
3070                                 for (i = 0; i < EATER_EXT*2; i++)
3071                                 {
3072                                         p_ptr->magic_num1[i] += (p_ptr->magic_num2[i] < 10) ? EATER_CHARGE * 3 : p_ptr->magic_num2[i]*EATER_CHARGE/3;
3073                                         if (p_ptr->magic_num1[i] > p_ptr->magic_num2[i]*EATER_CHARGE) p_ptr->magic_num1[i] = p_ptr->magic_num2[i]*EATER_CHARGE;
3074                                 }
3075                                 for (; i < EATER_EXT*3; i++)
3076                                 {
3077                                         int k_idx = lookup_kind(TV_ROD, i-EATER_EXT*2);
3078                                         p_ptr->magic_num1[i] -= ((p_ptr->magic_num2[i] < 10) ? EATER_ROD_CHARGE*3 : p_ptr->magic_num2[i]*EATER_ROD_CHARGE/3)*k_info[k_idx].pval;
3079                                         if (p_ptr->magic_num1[i] < 0) p_ptr->magic_num1[i] = 0;
3080                                 }
3081 #ifdef JP
3082                                 msg_print("Ƭ¤¬¥Ï¥Ã¥­¥ê¤È¤·¤¿¡£");
3083 #else
3084                                 msg_print("You feel your head clear.");
3085 #endif
3086                                 p_ptr->window |= (PW_PLAYER);
3087                         }
3088                         else if (p_ptr->csp < p_ptr->msp)
3089                         {
3090                                 p_ptr->csp = p_ptr->msp;
3091                                 p_ptr->csp_frac = 0;
3092 #ifdef JP
3093                                 msg_print("Ƭ¤¬¥Ï¥Ã¥­¥ê¤È¤·¤¿¡£");
3094 #else
3095                                 msg_print("You feel your head clear.");
3096 #endif
3097                                 p_ptr->redraw |= (PR_MANA);
3098                                 p_ptr->window |= (PW_PLAYER);
3099                                 p_ptr->window |= (PW_SPELL);
3100                         }
3101                         break;
3102                 }
3103
3104                 /* Activate for timed effect */
3105
3106                 case ACT_ESP:
3107                 {
3108                         (void)set_tim_esp(randint1(30) + 25, FALSE);
3109                         break;
3110                 }
3111
3112                 case ACT_BERSERK:
3113                 {
3114                         (void)set_afraid(0);
3115                         (void)set_shero(randint1(25) + 25, FALSE);
3116                         /* (void)set_afraid(0);
3117                         (void)set_hero(randint1(50) + 50, FALSE);
3118                         (void)set_blessed(randint1(50) + 50, FALSE);
3119                         o_ptr->timeout = 100 + randint1(100); */
3120                         break;
3121                 }
3122
3123                 case ACT_PROT_EVIL:
3124                 {
3125 #ifdef JP
3126                         msg_format("%s¤«¤é±Ô¤¤²»¤¬Î®¤ì½Ð¤¿...", name);
3127 #else
3128                         msg_format("The %s lets out a shrill wail...", name);
3129 #endif
3130                         k = 3 * p_ptr->lev;
3131                         (void)set_protevil(randint1(25) + k, FALSE);
3132                         break;
3133                 }
3134
3135                 case ACT_RESIST_ALL:
3136                 {
3137 #ifdef JP
3138                         msg_print("ÍÍ¡¹¤Ê¿§¤Ëµ±¤¤¤Æ¤¤¤ë...");
3139 #else
3140                         msg_print("It glows many colours...");
3141 #endif
3142                         (void)set_oppose_acid(randint1(40) + 40, FALSE);
3143                         (void)set_oppose_elec(randint1(40) + 40, FALSE);
3144                         (void)set_oppose_fire(randint1(40) + 40, FALSE);
3145                         (void)set_oppose_cold(randint1(40) + 40, FALSE);
3146                         (void)set_oppose_pois(randint1(40) + 40, FALSE);
3147                         break;
3148                 }
3149
3150                 case ACT_SPEED:
3151                 {
3152 #ifdef JP
3153                         msg_print("ÌÀ¤ë¤¯Îп§¤Ëµ±¤¤¤Æ¤¤¤ë...");
3154 #else
3155                         msg_print("It glows bright green...");
3156 #endif
3157                         (void)set_fast(randint1(20) + 20, FALSE);
3158                         break;
3159                 }
3160
3161                 case ACT_XTRA_SPEED:
3162                 {
3163 #ifdef JP
3164                         msg_print("ÌÀ¤ë¤¯µ±¤¤¤Æ¤¤¤ë...");
3165 #else
3166                         msg_print("It glows brightly...");
3167 #endif
3168                         (void)set_fast(randint1(75) + 75, FALSE);
3169                         break;
3170                 }
3171
3172                 case ACT_WRAITH:
3173                 {
3174                         set_wraith_form(randint1(plev / 2) + (plev / 2), FALSE);
3175                         break;
3176                 }
3177
3178                 case ACT_INVULN:
3179                 {
3180                         (void)set_invuln(randint1(8) + 8, FALSE);
3181                         break;
3182                 }
3183
3184                 case ACT_HELO:
3185                 {
3186                         (void)set_afraid(0);
3187                         set_hero(randint1(25)+25, FALSE);
3188                         hp_player(10);
3189                         break;
3190                 }
3191
3192                 case ACT_HELO_SPEED:
3193                 {
3194                         (void)set_fast(randint1(50) + 50, FALSE);
3195                         hp_player(10);
3196                         set_afraid(0);
3197                         set_hero(randint1(50) + 50, FALSE);
3198                         break;
3199                 }
3200
3201                 case ACT_RESIST_ACID:
3202                 {
3203                         msg_format(_("%s¤¬¹õ¤¯µ±¤¤¤¿...", "The %s grows black."), name);
3204                         if (((o_ptr->tval == TV_RING) && (o_ptr->sval == SV_RING_ACID)) || (o_ptr->name2 == EGO_BRAND_ACID))
3205                         {
3206                                 if (!get_aim_dir(&dir)) return FALSE;
3207                                 fire_ball(GF_ACID, dir, 100, 2);
3208                         }
3209                         (void)set_oppose_acid(randint1(20) + 20, FALSE);
3210                         break;
3211                 }
3212
3213                 case ACT_RESIST_FIRE:
3214                 {
3215                         msg_format(_("%s¤¬ÀÖ¤¯µ±¤¤¤¿...","The %s grows red."), name);
3216                         if (((o_ptr->tval == TV_RING) && (o_ptr->sval == SV_RING_FLAMES)) || (o_ptr->name2 == EGO_BRAND_FIRE))
3217                         {
3218                                 if (!get_aim_dir(&dir)) return FALSE;
3219                                 fire_ball(GF_FIRE, dir, 100, 2);
3220                         }
3221                         (void)set_oppose_fire(randint1(20) + 20, FALSE);
3222                         break;
3223                 }
3224
3225                 case ACT_RESIST_COLD:
3226                 {
3227                         msg_format(_("%s¤¬Çò¤¯µ±¤¤¤¿...","The %s grows white.") , name);
3228                         if (((o_ptr->tval == TV_RING) && (o_ptr->sval == SV_RING_ICE)) || (o_ptr->name2 == EGO_BRAND_COLD))
3229                         {
3230                                 if (!get_aim_dir(&dir)) return FALSE;
3231                                 fire_ball(GF_COLD, dir, 100, 2);
3232                         }
3233                         (void)set_oppose_cold(randint1(20) + 20, FALSE);
3234                         break;
3235                 }
3236
3237                 case ACT_RESIST_ELEC:
3238                 {
3239                         msg_format(_("%s¤¬ÀĤ¯µ±¤¤¤¿...", "The %s grows blue."), name);
3240                         if (((o_ptr->tval == TV_RING) && (o_ptr->sval == SV_RING_ELEC)) || (o_ptr->name2 == EGO_BRAND_ELEC))
3241                         {
3242                                 if (!get_aim_dir(&dir)) return FALSE;
3243                                 fire_ball(GF_ELEC, dir, 100, 2);
3244                         }
3245                         (void)set_oppose_elec(randint1(20) + 20, FALSE);
3246                         break;
3247                 }
3248
3249                 case ACT_RESIST_POIS:
3250                 {
3251                         msg_format(_("%s¤¬ÎФ˵±¤¤¤¿...", "The %s grows green."), name);
3252                         if (o_ptr->name2 == EGO_BRAND_POIS)
3253                         {
3254                                 if (!get_aim_dir(&dir)) return FALSE;
3255                                 fire_ball(GF_POIS, dir, 100, 2);
3256                         }
3257                         
3258                         (void)set_oppose_pois(randint1(20) + 20, FALSE);
3259                         break;
3260                 }
3261
3262                 /* Activate for general purpose effect (detection etc.) */
3263
3264                 case ACT_LIGHT:
3265                 {
3266 #ifdef JP
3267                         msg_format("%s¤«¤éÀ¡¤ó¤À¸÷¤¬¤¢¤Õ¤ì½Ð¤¿...", name);
3268 #else
3269                         msg_format("The %s wells with clear light...", name);
3270 #endif
3271                         lite_area(damroll(2, 15), 3);
3272                         break;
3273                 }
3274
3275                 case ACT_MAP_LIGHT:
3276                 {
3277 #ifdef JP
3278                         msg_print("âÁ¤·¤¯µ±¤¤¤¿...");
3279 #else
3280                         msg_print("It shines brightly...");
3281 #endif
3282                         map_area(DETECT_RAD_MAP);
3283                         lite_area(damroll(2, 15), 3);
3284                         break;
3285                 }
3286
3287                 case ACT_DETECT_ALL:
3288                 {
3289 #ifdef JP
3290                         msg_print("Çò¤¯ÌÀ¤ë¤¯µ±¤¤¤Æ¤¤¤ë...");
3291                         msg_print("¿´¤Ë¥¤¥á¡¼¥¸¤¬É⤫¤ó¤Ç¤­¤¿...");
3292 #else
3293                         msg_print("It glows bright white...");
3294                         msg_print("An image forms in your mind...");
3295 #endif
3296                         detect_all(DETECT_RAD_DEFAULT);
3297                         break;
3298                 }
3299
3300                 case ACT_DETECT_XTRA:
3301                 {
3302 #ifdef JP
3303                         msg_print("ÌÀ¤ë¤¯µ±¤¤¤Æ¤¤¤ë...");
3304 #else
3305                         msg_print("It glows brightly...");
3306 #endif
3307                         detect_all(DETECT_RAD_DEFAULT);
3308                         probing();
3309                         identify_fully(FALSE);
3310                         break;
3311                 }
3312
3313                 case ACT_ID_FULL:
3314                 {
3315 #ifdef JP
3316                         msg_print("²«¿§¤¯µ±¤¤¤Æ¤¤¤ë...");
3317 #else
3318                         msg_print("It glows yellow...");
3319 #endif
3320                         identify_fully(FALSE);
3321                         break;
3322                 }
3323
3324                 case ACT_ID_PLAIN:
3325                 {
3326                         if (!ident_spell(FALSE)) return FALSE;
3327                         break;
3328                 }
3329
3330                 case ACT_RUNE_EXPLO:
3331                 {
3332 #ifdef JP
3333                         msg_print("ÌÀ¤ë¤¤ÀÖ¿§¤Ëµ±¤¤¤Æ¤¤¤ë...");
3334 #else
3335                         msg_print("It glows bright red...");
3336 #endif
3337                         explosive_rune();
3338                         break;
3339                 }
3340
3341                 case ACT_RUNE_PROT:
3342                 {
3343 #ifdef JP
3344                         msg_print("¥Ö¥ë¡¼¤ËÌÀ¤ë¤¯µ±¤¤¤Æ¤¤¤ë...");
3345 #else
3346                         msg_print("It glows light blue...");
3347 #endif
3348                         warding_glyph();
3349                         break;
3350                 }
3351
3352                 case ACT_SATIATE:
3353                 {
3354                         (void)set_food(PY_FOOD_MAX - 1);
3355                         break;
3356                 }
3357
3358                 case ACT_DEST_DOOR:
3359                 {
3360 #ifdef JP
3361                         msg_print("ÌÀ¤ë¤¤ÀÖ¿§¤Ëµ±¤¤¤Æ¤¤¤ë...");
3362 #else
3363                         msg_print("It glows bright red...");
3364 #endif
3365                         destroy_doors_touch();
3366                         break;
3367                 }
3368
3369                 case ACT_STONE_MUD:
3370                 {
3371 #ifdef JP
3372                         msg_print("¸ÝÆ°¤·¤Æ¤¤¤ë...");
3373 #else
3374                         msg_print("It pulsates...");
3375 #endif
3376                         if (!get_aim_dir(&dir)) return FALSE;
3377                         wall_to_mud(dir, 20 + randint1(30));
3378                         break;
3379                 }
3380
3381                 case ACT_RECHARGE:
3382                 {
3383                         recharge(130);
3384                         break;
3385                 }
3386
3387                 case ACT_ALCHEMY:
3388                 {
3389 #ifdef JP
3390                         msg_print("ÌÀ¤ë¤¤²«¿§¤Ëµ±¤¤¤Æ¤¤¤ë...");
3391 #else
3392                         msg_print("It glows bright yellow...");
3393 #endif
3394                         (void)alchemy();
3395                         break;
3396                 }
3397
3398                 case ACT_DIM_DOOR:
3399                 {
3400 #ifdef JP
3401                         msg_print("¼¡¸µ¤ÎÈ⤬³«¤¤¤¿¡£ÌÜŪÃϤòÁª¤ó¤Ç²¼¤µ¤¤¡£");
3402 #else
3403                         msg_print("You open a dimensional gate. Choose a destination.");
3404 #endif
3405                         if (!dimension_door()) return FALSE;
3406                         break;
3407                 }
3408
3409
3410                 case ACT_TELEPORT:
3411                 {
3412 #ifdef JP
3413                         msg_print("¼þ¤ê¤Î¶õ´Ö¤¬ÏĤó¤Ç¤¤¤ë...");
3414 #else
3415                         msg_print("It twists space around you...");
3416 #endif
3417                         teleport_player(100, 0L);
3418                         break;
3419                 }
3420
3421                 case ACT_RECALL:
3422                 {
3423 #ifdef JP
3424                         msg_print("¤ä¤ï¤é¤«¤ÊÇò¿§¤Ëµ±¤¤¤Æ¤¤¤ë...");
3425 #else
3426                         msg_print("It glows soft white...");
3427 #endif
3428                         if (!word_of_recall()) return FALSE;
3429                         break;
3430                 }
3431
3432                 case ACT_JUDGE:
3433                 {
3434 #ifdef JP
3435                         msg_format("%s¤ÏÀÖ¤¯ÌÀ¤ë¤¯¸÷¤Ã¤¿¡ª", name);
3436 #else
3437                         msg_format("The %s flashes bright red!", name);
3438 #endif
3439                         chg_virtue(V_KNOWLEDGE, 1);
3440                         chg_virtue(V_ENLIGHTEN, 1);
3441                         wiz_lite(FALSE);
3442 #ifdef JP
3443                         msg_format("%s¤Ï¤¢¤Ê¤¿¤ÎÂÎÎϤòÃ¥¤Ã¤¿...", name);
3444                         take_hit(DAMAGE_LOSELIFE, damroll(3,8), "¿³È½¤ÎÊõÀÐ", -1);
3445 #else
3446                         msg_format("The %s drains your vitality...", name);
3447                         take_hit(DAMAGE_LOSELIFE, damroll(3, 8), "the Jewel of Judgement", -1);
3448 #endif
3449                         (void)detect_traps(DETECT_RAD_DEFAULT, TRUE);
3450                         (void)detect_doors(DETECT_RAD_DEFAULT);
3451                         (void)detect_stairs(DETECT_RAD_DEFAULT);
3452 #ifdef JP
3453                         if (get_check("µ¢´Ô¤ÎÎϤò»È¤¤¤Þ¤¹¤«¡©"))
3454 #else
3455                         if (get_check("Activate recall? "))
3456 #endif
3457                         {
3458                                 (void)word_of_recall();
3459                         }
3460
3461                         break;
3462                 }
3463
3464                 case ACT_TELEKINESIS:
3465                 {
3466                         if (!get_aim_dir(&dir)) return FALSE;
3467 #ifdef JP
3468                         msg_format("%s¤ò¿­¤Ð¤·¤¿¡£", name);
3469 #else
3470                         msg_format("You stretched your %s.", name);
3471 #endif
3472                         fetch(dir, 500, TRUE);
3473                         break;
3474                 }
3475
3476                 case ACT_DETECT_UNIQUE:
3477                 {
3478                         int i;
3479                         monster_type *m_ptr;
3480                         monster_race *r_ptr;
3481 #ifdef JP
3482                         msg_print("´ñ̯¤Ê¾ì½ê¤¬Æ¬¤ÎÃæ¤ËÉ⤫¤ó¤À¡¥¡¥¡¥");
3483 #else
3484                         msg_print("Some strange places show up in your mind. And you see ...");
3485 #endif
3486                         /* Process the monsters (backwards) */
3487                         for (i = m_max - 1; i >= 1; i--)
3488                         {
3489                                 /* Access the monster */
3490                                 m_ptr = &m_list[i];
3491
3492                                 /* Ignore "dead" monsters */
3493                                 if (!m_ptr->r_idx) continue;
3494
3495                                 r_ptr = &r_info[m_ptr->r_idx];
3496
3497                                 if(r_ptr->flags1 & RF1_UNIQUE)
3498                                 {
3499 #ifdef JP
3500                                         msg_format("%s¡¥ ",r_name + r_ptr->name);
3501 #else
3502                                         msg_format("%s. ",r_name + r_ptr->name);
3503 #endif
3504                                 }
3505                         }
3506                         break;
3507                 }
3508
3509                 case ACT_ESCAPE:
3510                 {
3511                         switch (randint1(13))
3512                         {
3513                         case 1: case 2: case 3: case 4: case 5:
3514                                 teleport_player(10, 0L);
3515                                 break;
3516                         case 6: case 7: case 8: case 9: case 10:
3517                                 teleport_player(222, 0L);
3518                                 break;
3519                         case 11: case 12:
3520                                 (void)stair_creation();
3521                                 break;
3522                         default:
3523 #ifdef JP
3524                                 if (get_check("¤³¤Î³¬¤òµî¤ê¤Þ¤¹¤«¡©"))
3525 #else
3526                                 if (get_check("Leave this level? "))
3527 #endif
3528                                 {
3529                                         if (autosave_l) do_cmd_save_game(TRUE);
3530
3531                                         /* Leaving */
3532                                         p_ptr->leaving = TRUE;
3533                                 }
3534                         }
3535                         break;
3536                 }
3537
3538                 case ACT_DISP_CURSE_XTRA:
3539                 {
3540 #ifdef JP
3541                         msg_format("%s¤¬¿¿¼Â¤ò¾È¤é¤·½Ð¤¹...", name);
3542 #else
3543                         msg_format("The %s exhibits the truth...", name);
3544 #endif
3545                         if (remove_all_curse())
3546                         {
3547 #ifdef JP
3548                                 msg_print("狼¤Ë¸«¼é¤é¤ì¤Æ¤¤¤ë¤è¤¦¤Êµ¤¤¬¤¹¤ë¡£");
3549 #else
3550                                 msg_print("You feel as if someone is watching over you.");
3551 #endif
3552                         }
3553                         (void)probing();
3554                         break;
3555                 }
3556
3557                 case ACT_BRAND_FIRE_BOLTS:
3558                 {
3559 #ifdef JP
3560                         msg_format("%s¤¬¿¼¹È¤Ëµ±¤¤¤¿...", name);
3561 #else
3562                         msg_format("Your %s glows deep red...", name);
3563 #endif
3564                         (void)brand_bolts();
3565                         break;
3566                 }
3567
3568                 case ACT_RECHARGE_XTRA:
3569                 {
3570 #ifdef JP
3571                         msg_format("%s¤¬Çò¤¯µ±¤¤¤¿¡¥¡¥¡¥", name);
3572 #else
3573                         msg_format("The %s gleams with blinding light...", name);
3574 #endif
3575                         if (!recharge(1000)) return FALSE;
3576                         break;
3577                 }
3578
3579                 case ACT_LORE:
3580                 {
3581 #ifdef JP
3582                         msg_print("ÀФ¬±£¤µ¤ì¤¿ÈëÌ©¤ò¼Ì¤·½Ð¤·¤¿¡¥¡¥¡¥");
3583 #else
3584                         msg_print("The stone reveals hidden mysteries...");
3585 #endif
3586                         if (!ident_spell(FALSE)) return FALSE;
3587
3588                         if (mp_ptr->spell_book)
3589                         {
3590                                 /* Sufficient mana */
3591                                 if (20 <= p_ptr->csp)
3592                                 {
3593                                         /* Use some mana */
3594                                         p_ptr->csp -= 20;
3595                                 }
3596
3597                                 /* Over-exert the player */
3598                                 else
3599                                 {
3600                                         int oops = 20 - p_ptr->csp;
3601
3602                                         /* No mana left */
3603                                         p_ptr->csp = 0;
3604                                         p_ptr->csp_frac = 0;
3605
3606                                         /* Message */
3607 #ifdef JP
3608                                         msg_print("ÀФòÀ©¸æ¤Ç¤­¤Ê¤¤¡ª");
3609 #else
3610                                         msg_print("You are too weak to control the stone!");
3611 #endif
3612                                         /* Hack -- Bypass free action */
3613                                         (void)set_paralyzed(p_ptr->paralyzed +
3614                                                 randint1(5 * oops + 1));
3615
3616                                         /* Confusing. */
3617                                         (void)set_confused(p_ptr->confused +
3618                                                 randint1(5 * oops + 1));
3619                                 }
3620
3621                                 /* Redraw mana */
3622                                 p_ptr->redraw |= (PR_MANA);
3623                         }
3624 #ifdef JP
3625                         take_hit(DAMAGE_LOSELIFE, damroll(1, 12), "´í¸±¤ÊÈëÌ©", -1);
3626 #else
3627                         take_hit(DAMAGE_LOSELIFE, damroll(1, 12), "perilous secrets", -1);
3628 #endif
3629                         /* Confusing. */
3630                         if (one_in_(5)) (void)set_confused(p_ptr->confused +
3631                                 randint1(10));
3632
3633                         /* Exercise a little care... */
3634                         if (one_in_(20))
3635 #ifdef JP
3636                                 take_hit(DAMAGE_LOSELIFE, damroll(4, 10), "´í¸±¤ÊÈëÌ©", -1);
3637 #else
3638                                 take_hit(DAMAGE_LOSELIFE, damroll(4, 10), "perilous secrets", -1);
3639 #endif
3640                         break;
3641                 }
3642
3643                 case ACT_SHIKOFUMI:
3644                 {
3645 #ifdef JP
3646                         msg_print("Î϶¯¤¯»Í¸Ô¤òƧ¤ó¤À¡£");
3647 #else
3648                         msg_print("You stamp. (as if you are in a ring.)");
3649 #endif
3650                         (void)set_afraid(0);
3651                         (void)set_hero(randint1(20) + 20, FALSE);
3652                         dispel_evil(p_ptr->lev * 3);
3653                         break;
3654                 }
3655
3656                 case ACT_PHASE_DOOR:
3657                 {
3658                         teleport_player(10, 0L);
3659                         break;
3660                 }
3661
3662                 case ACT_DETECT_ALL_MONS:
3663                 {
3664                         (void)detect_monsters_invis(255);
3665                         (void)detect_monsters_normal(255);
3666                         break;
3667                 }
3668
3669                 case ACT_ULTIMATE_RESIST:
3670                 {
3671                         int v = randint1(25)+25;
3672                         (void)set_afraid(0);
3673                         (void)set_hero(v, FALSE);
3674                         (void)hp_player(10);
3675                         (void)set_blessed(v, FALSE);
3676                         (void)set_oppose_acid(v, FALSE);
3677                         (void)set_oppose_elec(v, FALSE);
3678                         (void)set_oppose_fire(v, FALSE);
3679                         (void)set_oppose_cold(v, FALSE);
3680                         (void)set_oppose_pois(v, FALSE);
3681                         (void)set_ultimate_res(v, FALSE);
3682                         break;
3683                 }
3684
3685
3686                 /* Unique activation */
3687                 case ACT_CAST_OFF:
3688                 {
3689                         int inv, o_idx, t;
3690                         char o_name[MAX_NLEN];
3691                         object_type forge;
3692
3693                         /* Cast off activated item */
3694                         for (inv = INVEN_RARM; inv <= INVEN_FEET; inv++)
3695                         {
3696                                 if (o_ptr == &inventory[inv]) break;
3697                         }
3698
3699                         /* Paranoia */
3700                         if (inv > INVEN_FEET) return FALSE;
3701
3702                         object_copy(&forge, o_ptr);
3703                         inven_item_increase(inv, (0 - o_ptr->number));
3704                         inven_item_optimize(inv);
3705                         o_idx = drop_near(&forge, 0, py, px);
3706                         o_ptr = &o_list[o_idx];
3707
3708                         object_desc(o_name, o_ptr, OD_NAME_ONLY);
3709                         msg_format(_("%s¤ò椮¼Î¤Æ¤¿¡£", "You cast off %s."), o_name);
3710
3711                         /* Get effects */
3712                         msg_print(_("¡Ödz¤¨¾å¤¬¤ì²¶¤Î¾®±§Ã衪¡×", "You say, 'Burn up my cosmo!"));
3713                         t = 20 + randint1(20);
3714                         (void)set_blind(p_ptr->blind + t);
3715                         (void)set_afraid(0);
3716                         (void)set_tim_esp(p_ptr->tim_esp + t, FALSE);
3717                         (void)set_tim_regen(p_ptr->tim_regen + t, FALSE);
3718                         (void)set_hero(p_ptr->hero + t, FALSE);
3719                         (void)set_blessed(p_ptr->blessed + t, FALSE);
3720                         (void)set_fast(p_ptr->fast + t, FALSE);
3721                         (void)set_shero(p_ptr->shero + t, FALSE);
3722                         if (p_ptr->pclass == CLASS_FORCETRAINER)
3723                         {
3724                                 p_ptr->magic_num1[0] = plev * 5 + 190;
3725                                 msg_print(_("µ¤¤¬ÇúȯÀ£Á°¤Ë¤Ê¤Ã¤¿¡£", "Your force are immediatly before explosion."));
3726                         }
3727
3728                         break;
3729                 }
3730
3731                 case ACT_GRAND_CROSS:
3732                 {
3733                         msg_print(_("¡Ö°Ç¤Ë´Ô¤ì¡ª¡×", "You say, 'Return to darkness!'"));
3734                         project(0, 8, py, px, (randint1(100) + 200) * 2, GF_HOLY_FIRE, PROJECT_KILL | PROJECT_ITEM | PROJECT_GRID, -1);
3735                         break;
3736                 }
3737
3738                 case ACT_TELEPORT_LEVEL:
3739                 {
3740 #ifdef JP
3741                         if (!get_check("ËÜÅö¤Ë¾¤Î³¬¤Ë¥Æ¥ì¥Ý¡¼¥È¤·¤Þ¤¹¤«¡©")) return FALSE;
3742 #else
3743                         if (!get_check("Are you sure? (Teleport Level)")) return FALSE;
3744 #endif
3745                         teleport_level(0);
3746                         break;
3747                 }
3748
3749                 case ACT_STRAIN_HASTE:
3750                 {
3751                         int t;
3752 #ifdef JP
3753                         msg_format("%s¤Ï¤¢¤Ê¤¿¤ÎÂÎÎϤòÃ¥¤Ã¤¿...", name);
3754                         take_hit(DAMAGE_LOSELIFE, damroll(3, 8), "²Ã®¤·¤¿ÈèÏ«", -1);
3755 #else
3756                         msg_format("The %s drains your vitality...", name);
3757                         take_hit(DAMAGE_LOSELIFE, damroll(3, 8), "the strain of haste", -1);
3758 #endif
3759                         t = 25 + randint1(25);
3760                         (void)set_fast(p_ptr->fast + t, FALSE);
3761                         break;
3762                 }
3763
3764                 case ACT_FISHING:
3765                 {
3766                         int x, y;
3767
3768                         if (!get_rep_dir2(&dir)) return FALSE;
3769                         y = py+ddy[dir];
3770                         x = px+ddx[dir];
3771                         tsuri_dir = dir;
3772                         if (!cave_have_flag_bold(y, x, FF_WATER))
3773                         {
3774 #ifdef JP
3775                                 msg_print("¤½¤³¤Ï¿åÊդǤϤʤ¤¡£");
3776 #else
3777                                 msg_print("There is no fishing place.");
3778 #endif
3779                                 return FALSE;
3780                         }
3781                         else if (cave[y][x].m_idx)
3782                         {
3783                                 char m_name[80];
3784                                 monster_desc(m_name, &m_list[cave[y][x].m_idx], 0);
3785 #ifdef JP
3786                                 msg_format("%s¤¬¼ÙËâ¤À¡ª", m_name);
3787 #else
3788                                 msg_format("%^s is stand in your way.", m_name);
3789 #endif
3790                                 energy_use = 0;
3791                                 return FALSE;
3792                         }
3793                         set_action(ACTION_FISH);
3794                         p_ptr->redraw |= (PR_STATE);
3795                         break;
3796                 }
3797
3798                 case ACT_INROU:
3799                 {
3800                         int count = 0, i;
3801                         monster_type *m_ptr;
3802 #ifndef JP
3803                         cptr kakusan = "";
3804 #endif
3805                         if (summon_named_creature(0, py, px, MON_SUKE, PM_FORCE_PET))
3806                         {
3807 #ifdef JP
3808                                 msg_print("¡Ø½õ¤µ¤ó¡Ù¤¬¸½¤ì¤¿¡£");
3809 #else
3810                                 msg_print("Suke-san apperars.");
3811                                 kakusan = "Suke-san";
3812 #endif
3813                                 count++;
3814                         }
3815                         if (summon_named_creature(0, py, px, MON_KAKU, PM_FORCE_PET))
3816                         {
3817 #ifdef JP
3818                                 msg_print("¡Ø³Ê¤µ¤ó¡Ù¤¬¸½¤ì¤¿¡£");
3819 #else
3820                                 msg_print("Kaku-san appears.");
3821                                 kakusan = "Kaku-san";
3822 #endif
3823                                 count++;
3824                         }
3825                         if (!count)
3826                         {
3827                                 for (i = m_max - 1; i > 0; i--)
3828                                 {
3829                                         m_ptr = &m_list[i];
3830                                         if (!m_ptr->r_idx) continue;
3831                                         if (!((m_ptr->r_idx == MON_SUKE) || (m_ptr->r_idx == MON_KAKU))) continue;
3832                                         if (!los(m_ptr->fy, m_ptr->fx, py, px)) continue;
3833                                         if (!projectable(m_ptr->fy, m_ptr->fx, py, px)) continue;
3834                                         count++;
3835                                         break;
3836                                 }
3837                         }
3838
3839                         if (count)
3840                         {
3841 #ifdef JP
3842                                 msg_print("¡Ö¼Ô¤É¤â¡¢¤Ò¤«¤¨¤ª¤í¤¦¡ª¡ª¡ª¤³¤Î¤ªÊý¤ò¤É¤Ê¤¿¤È¤³¤³¤í¤¨¤ë¡£¡×");
3843 #else
3844                                 msg_format("%^s says 'WHO do you think this person is! Bow your head, down your knees!'", kakusan);
3845 #endif
3846                                 sukekaku = TRUE;
3847                                 stun_monsters(120);
3848                                 confuse_monsters(120);
3849                                 turn_monsters(120);
3850                                 stasis_monsters(120);
3851                                 sukekaku = FALSE;
3852                         }
3853                         else
3854                         {
3855 #ifdef JP
3856                                 msg_print("¤·¤«¤·¡¢²¿¤âµ¯¤­¤Ê¤«¤Ã¤¿¡£");
3857 #else
3858                                 msg_print("Nothing happen.");
3859 #endif
3860                         }
3861                         break;
3862                 }
3863
3864                 case ACT_MURAMASA:
3865                 {
3866                         /* Only for Muramasa */
3867                         if (o_ptr->name1 != ART_MURAMASA) return FALSE;
3868 #ifdef JP
3869                         if (get_check("ËÜÅö¤Ë»È¤¤¤Þ¤¹¤«¡©"))
3870 #else
3871                         if (get_check("Are you sure?!"))
3872 #endif
3873                         {
3874 #ifdef JP
3875                                 msg_print("¼Àµ¤¬¿Ì¤¨¤¿¡¥¡¥¡¥");
3876 #else
3877                                 msg_print("The Muramasa pulsates...");
3878 #endif
3879                                 do_inc_stat(A_STR);
3880                                 if (one_in_(2))
3881                                 {
3882 #ifdef JP
3883                                         msg_print("¼Àµ¤Ï²õ¤ì¤¿¡ª");
3884 #else
3885                                         msg_print("The Muramasa is destroyed!");
3886 #endif
3887                                         curse_weapon_object(TRUE, o_ptr);
3888                                 }
3889                         }
3890                         break;
3891                 }
3892
3893                 case ACT_BLOODY_MOON:
3894                 {
3895                         /* Only for Bloody Moon */
3896                         if (o_ptr->name1 != ART_BLOOD) return FALSE;
3897 #ifdef JP
3898                         msg_print("³ù¤¬ÌÀ¤ë¤¯µ±¤¤¤¿...");
3899 #else
3900                         msg_print("Your scythe glows brightly!");
3901 #endif
3902                         get_bloody_moon_flags(o_ptr);
3903                         if (p_ptr->prace == RACE_ANDROID) calc_android_exp();
3904                         p_ptr->update |= (PU_BONUS | PU_HP);
3905                         break;
3906                 }
3907
3908                 case ACT_CRIMSON:
3909                 {
3910                         int num = 1;
3911                         int i;
3912                         int flg = PROJECT_STOP | PROJECT_GRID | PROJECT_ITEM | PROJECT_KILL;
3913                         int tx, ty;
3914
3915                         /* Only for Crimson */
3916                         if (o_ptr->name1 != ART_CRIMSON) return FALSE;
3917
3918 #ifdef JP
3919                         msg_print("¤»¤Ã¤«¤¯¤À¤«¤é¡Ø¥¯¥ê¥à¥¾¥ó¡Ù¤ò¤Ö¤Ã¤Ñ¤Ê¤¹¤¼¡ª");
3920 #else
3921                         msg_print("I'll fire CRIMSON! SEKKAKUDAKARA!");
3922 #endif
3923
3924                         if (!get_aim_dir(&dir)) return FALSE;
3925
3926                         /* Use the given direction */
3927                         tx = px + 99 * ddx[dir];
3928                         ty = py + 99 * ddy[dir];
3929
3930                         /* Hack -- Use an actual "target" */
3931                         if ((dir == 5) && target_okay())
3932                         {
3933                                 tx = target_col;
3934                                 ty = target_row;
3935                         }
3936
3937                         if (p_ptr->pclass == CLASS_ARCHER)
3938                         {
3939                                 /* Extra shot at level 10 */
3940                                 if (p_ptr->lev >= 10) num++;
3941
3942                                 /* Extra shot at level 30 */
3943                                 if (p_ptr->lev >= 30) num++;
3944
3945                                 /* Extra shot at level 45 */
3946                                 if (p_ptr->lev >= 45) num++;
3947                         }
3948
3949                         for (i = 0; i < num; i++)
3950                                 project(0, p_ptr->lev/20+1, ty, tx, p_ptr->lev*p_ptr->lev*6/50, GF_ROCKET, flg, -1);
3951                         break;
3952                 }
3953
3954                 default:
3955                 {
3956 #ifdef JP
3957                         msg_format("Unknown activation effect: %d.", act_ptr->index);
3958 #else
3959                         msg_format("Unknown activation effect: %d.", act_ptr->index);
3960 #endif
3961                         return FALSE;
3962                 }
3963         }
3964
3965         /* Set activation timeout */
3966         if (act_ptr->timeout.constant >= 0) {
3967                 o_ptr->timeout = act_ptr->timeout.constant;
3968                 if (act_ptr->timeout.dice > 0) {
3969                         o_ptr->timeout += randint1(act_ptr->timeout.dice);
3970                 }
3971         } else {
3972                 /* Activations that have special timeout */
3973                 switch (act_ptr->index) {
3974                 case ACT_BR_FIRE:
3975                         o_ptr->timeout = ((o_ptr->tval == TV_RING) && (o_ptr->sval == SV_RING_FLAMES)) ? 200 : 250;
3976                         break;
3977                 case ACT_BR_COLD:
3978                         o_ptr->timeout = ((o_ptr->tval == TV_RING) && (o_ptr->sval == SV_RING_ICE)) ? 200 : 250;
3979                         break;
3980                 case ACT_TERROR:
3981                         o_ptr->timeout = 3 * (p_ptr->lev + 10);
3982                         break;
3983                 case ACT_MURAMASA:
3984                         /* Nothing to do */
3985                         break;
3986                 default:
3987                         msg_format("Special timeout is not implemented: %d.", act_ptr->index);
3988                         return FALSE;
3989                 }
3990         }
3991
3992         return TRUE;
3993 }
3994
3995
3996 void get_bloody_moon_flags(object_type *o_ptr)
3997 {
3998         int dummy, i;
3999
4000         for (i = 0; i < TR_FLAG_SIZE; i++)
4001                 o_ptr->art_flags[i] = a_info[ART_BLOOD].flags[i];
4002
4003         dummy = randint1(2) + randint1(2);
4004         for (i = 0; i < dummy; i++)
4005         {
4006                 int flag = randint0(26);
4007                 if (flag >= 20) add_flag(o_ptr->art_flags, TR_KILL_UNDEAD + flag - 20);
4008                 else if (flag == 19) add_flag(o_ptr->art_flags, TR_KILL_ANIMAL);
4009                 else if (flag == 18) add_flag(o_ptr->art_flags, TR_SLAY_HUMAN);
4010                 else add_flag(o_ptr->art_flags, TR_CHAOTIC + flag);
4011         }
4012
4013         dummy = randint1(2);
4014         for (i = 0; i < dummy; i++) one_resistance(o_ptr);
4015
4016         for (i = 0; i < 2; i++)
4017         {
4018                 int tmp = randint0(11);
4019                 if (tmp < 6) add_flag(o_ptr->art_flags, TR_STR + tmp);
4020                 else add_flag(o_ptr->art_flags, TR_STEALTH + tmp - 6);
4021         }
4022 }
4023
4024
4025 void random_artifact_resistance(object_type * o_ptr, artifact_type *a_ptr)
4026 {
4027         bool give_resistance = FALSE, give_power = FALSE;
4028
4029         if (o_ptr->name1 == ART_TERROR) /* Terror Mask is for warriors... */
4030         {
4031                 if (p_ptr->pclass == CLASS_WARRIOR || p_ptr->pclass == CLASS_ARCHER || p_ptr->pclass == CLASS_CAVALRY || p_ptr->pclass == CLASS_BERSERKER)
4032                 {
4033                         give_power = TRUE;
4034                         give_resistance = TRUE;
4035                 }
4036                 else
4037                 {
4038                         add_flag(o_ptr->art_flags, TR_AGGRAVATE);
4039                         add_flag(o_ptr->art_flags, TR_TY_CURSE);
4040                         o_ptr->curse_flags |=
4041                             (TRC_CURSED | TRC_HEAVY_CURSE);
4042                         o_ptr->curse_flags |= get_curse(2, o_ptr);
4043                         return;
4044                 }
4045         }
4046
4047         if (o_ptr->name1 == ART_MURAMASA)
4048         {
4049                 if (p_ptr->pclass != CLASS_SAMURAI)
4050                 {
4051                         add_flag(o_ptr->art_flags, TR_NO_MAGIC);
4052                         o_ptr->curse_flags |= (TRC_HEAVY_CURSE);
4053                 }
4054         }
4055
4056         if (o_ptr->name1 == ART_XIAOLONG)
4057         {
4058                 if (p_ptr->pclass == CLASS_MONK)
4059                         add_flag(o_ptr->art_flags, TR_BLOWS);
4060         }
4061
4062         if (o_ptr->name1 == ART_BLOOD)
4063         {
4064                 get_bloody_moon_flags(o_ptr);
4065         }
4066
4067         if (o_ptr->name1 == ART_HEAVENLY_MAIDEN)
4068         {
4069                 if (p_ptr->psex != SEX_FEMALE)
4070                 {
4071                         add_flag(o_ptr->art_flags, TR_AGGRAVATE);
4072                 }
4073         }
4074
4075         if (o_ptr->name1 == ART_MILIM)
4076         {
4077                 if (p_ptr->pseikaku == SEIKAKU_SEXY)
4078                 {
4079                         o_ptr->pval = 3;
4080                         add_flag(o_ptr->art_flags, TR_STR);
4081                         add_flag(o_ptr->art_flags, TR_INT);
4082                         add_flag(o_ptr->art_flags, TR_WIS);
4083                         add_flag(o_ptr->art_flags, TR_DEX);
4084                         add_flag(o_ptr->art_flags, TR_CON);
4085                         add_flag(o_ptr->art_flags, TR_CHR);
4086                 }
4087         }
4088
4089         if (a_ptr->gen_flags & (TRG_XTRA_POWER)) give_power = TRUE;
4090         if (a_ptr->gen_flags & (TRG_XTRA_H_RES)) give_resistance = TRUE;
4091         if (a_ptr->gen_flags & (TRG_XTRA_RES_OR_POWER))
4092         {
4093                 /* Give a resistance OR a power */
4094                 if (one_in_(2)) give_resistance = TRUE;
4095                 else give_power = TRUE;
4096         }
4097
4098         if (give_power)
4099         {
4100                 one_ability(o_ptr);
4101         }
4102
4103         if (give_resistance)
4104         {
4105                 one_high_resistance(o_ptr);
4106         }
4107 }
4108
4109
4110 /*
4111  * Create the artifact of the specified number
4112  */
4113 bool create_named_art(int a_idx, int y, int x)
4114 {
4115         object_type forge;
4116         object_type *q_ptr;
4117         int i;
4118
4119         artifact_type *a_ptr = &a_info[a_idx];
4120
4121         /* Get local object */
4122         q_ptr = &forge;
4123
4124         /* Ignore "empty" artifacts */
4125         if (!a_ptr->name) return FALSE;
4126
4127         /* Acquire the "kind" index */
4128         i = lookup_kind(a_ptr->tval, a_ptr->sval);
4129
4130         /* Oops */
4131         if (!i) return FALSE;
4132
4133         /* Create the artifact */
4134         object_prep(q_ptr, i);
4135
4136         /* Save the name */
4137         q_ptr->name1 = a_idx;
4138
4139         /* Extract the fields */
4140         q_ptr->pval = a_ptr->pval;
4141         q_ptr->ac = a_ptr->ac;
4142         q_ptr->dd = a_ptr->dd;
4143         q_ptr->ds = a_ptr->ds;
4144         q_ptr->to_a = a_ptr->to_a;
4145         q_ptr->to_h = a_ptr->to_h;
4146         q_ptr->to_d = a_ptr->to_d;
4147         q_ptr->weight = a_ptr->weight;
4148
4149         /* Hack -- extract the "cursed" flag */
4150         if (a_ptr->gen_flags & TRG_CURSED) q_ptr->curse_flags |= (TRC_CURSED);
4151         if (a_ptr->gen_flags & TRG_HEAVY_CURSE) q_ptr->curse_flags |= (TRC_HEAVY_CURSE);
4152         if (a_ptr->gen_flags & TRG_PERMA_CURSE) q_ptr->curse_flags |= (TRC_PERMA_CURSE);
4153         if (a_ptr->gen_flags & (TRG_RANDOM_CURSE0)) q_ptr->curse_flags |= get_curse(0, q_ptr);
4154         if (a_ptr->gen_flags & (TRG_RANDOM_CURSE1)) q_ptr->curse_flags |= get_curse(1, q_ptr);
4155         if (a_ptr->gen_flags & (TRG_RANDOM_CURSE2)) q_ptr->curse_flags |= get_curse(2, q_ptr);
4156
4157         random_artifact_resistance(q_ptr, a_ptr);
4158
4159         /*
4160          * drop_near()Æâ¤ÇÉáÄ̤θÇÄꥢ¡¼¥Æ¥£¥Õ¥¡¥¯¥È¤¬½Å¤Ê¤é¤Ê¤¤À­¼Á¤Ë°Í¸¤¹¤ë.
4161          * ²¾¤Ë2¸Ä°Ê¾å¸ºß²Äǽ¤«¤ÄÁõÈ÷Éʰʳ°¤Î¸ÇÄꥢ¡¼¥Æ¥£¥Õ¥¡¥¯¥È¤¬ºîÀ®¤µ¤ì¤ì¤Ð
4162          * ¤³¤Î´Ø¿ô¤ÎÊÖ¤êÃͤϿ®ÍѤǤ­¤Ê¤¯¤Ê¤ë.
4163          */
4164
4165         /* Drop the artifact from heaven */
4166         return drop_near(q_ptr, -1, y, x) ? TRUE : FALSE;
4167 }