OSDN Git Service

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