OSDN Git Service

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