OSDN Git Service

40206b45d133645cebf277e67d1dbada0d884600
[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 TABLE_NAME      20
16 #define A_CURSED        13
17 #define WEIRD_LUCK      12
18 #define BIAS_LUCK       20
19 #define IM_LUCK         7
20
21 /*
22  * Bias luck needs to be higher than weird luck,
23  * since it is usually tested several times...
24  */
25 #define ACTIVATION_CHANCE 3
26
27
28 /*
29  * Use for biased artifact creation
30  */
31 static int artifact_bias;
32
33
34 /*
35  * Choose one random sustain
36  */
37 void one_sustain(object_type *o_ptr)
38 {
39         switch (randint0(6))
40         {
41                 case 0: add_flag(o_ptr->art_flags, TR_SUST_STR); break;
42                 case 1: add_flag(o_ptr->art_flags, TR_SUST_INT); break;
43                 case 2: add_flag(o_ptr->art_flags, TR_SUST_WIS); break;
44                 case 3: add_flag(o_ptr->art_flags, TR_SUST_DEX); break;
45                 case 4: add_flag(o_ptr->art_flags, TR_SUST_CON); break;
46                 case 5: add_flag(o_ptr->art_flags, TR_SUST_CHR); break;
47         }
48 }
49
50
51 /*
52  * Choose one random high resistance
53  */
54 void one_high_resistance(object_type *o_ptr)
55 {
56         switch (randint0(12))
57         {
58                 case  0: add_flag(o_ptr->art_flags, TR_RES_POIS);   break;
59                 case  1: add_flag(o_ptr->art_flags, TR_RES_LITE);   break;
60                 case  2: add_flag(o_ptr->art_flags, TR_RES_DARK);   break;
61                 case  3: add_flag(o_ptr->art_flags, TR_RES_SHARDS); break;
62                 case  4: add_flag(o_ptr->art_flags, TR_RES_BLIND);  break;
63                 case  5: add_flag(o_ptr->art_flags, TR_RES_CONF);   break;
64                 case  6: add_flag(o_ptr->art_flags, TR_RES_SOUND);  break;
65                 case  7: add_flag(o_ptr->art_flags, TR_RES_NETHER); break;
66                 case  8: add_flag(o_ptr->art_flags, TR_RES_NEXUS);  break;
67                 case  9: add_flag(o_ptr->art_flags, TR_RES_CHAOS);  break;
68                 case 10: add_flag(o_ptr->art_flags, TR_RES_DISEN);  break;
69                 case 11: add_flag(o_ptr->art_flags, TR_RES_FEAR);   break;
70         }
71 }
72
73
74 /*
75  * Choose one random high resistance ( except poison and disenchantment )
76  */
77 void one_lordly_high_resistance(object_type *o_ptr)
78 {
79         switch (randint0(10))
80         {
81                 case 0: add_flag(o_ptr->art_flags, TR_RES_LITE);   break;
82                 case 1: add_flag(o_ptr->art_flags, TR_RES_DARK);   break;
83                 case 2: add_flag(o_ptr->art_flags, TR_RES_SHARDS); break;
84                 case 3: add_flag(o_ptr->art_flags, TR_RES_BLIND);  break;
85                 case 4: add_flag(o_ptr->art_flags, TR_RES_CONF);   break;
86                 case 5: add_flag(o_ptr->art_flags, TR_RES_SOUND);  break;
87                 case 6: add_flag(o_ptr->art_flags, TR_RES_NETHER); break;
88                 case 7: add_flag(o_ptr->art_flags, TR_RES_NEXUS);  break;
89                 case 8: add_flag(o_ptr->art_flags, TR_RES_CHAOS);  break;
90                 case 9: add_flag(o_ptr->art_flags, TR_RES_FEAR);   break;
91         }
92 }
93
94
95 /*
96  * Choose one random element resistance
97  */
98 void one_ele_resistance(object_type *o_ptr)
99 {
100         switch (randint0(4))
101         {
102                 case  0: add_flag(o_ptr->art_flags, TR_RES_ACID); break;
103                 case  1: add_flag(o_ptr->art_flags, TR_RES_ELEC); break;
104                 case  2: add_flag(o_ptr->art_flags, TR_RES_COLD); break;
105                 case  3: add_flag(o_ptr->art_flags, TR_RES_FIRE); break;
106         }
107 }
108
109
110 /*
111  * Choose one random element or poison resistance
112  */
113 void one_dragon_ele_resistance(object_type *o_ptr)
114 {
115         if (one_in_(7))
116         {
117                 add_flag(o_ptr->art_flags, TR_RES_POIS);
118         }
119         else
120         {
121                 one_ele_resistance(o_ptr);
122         }
123 }
124
125
126 /*
127  * Choose one lower rank esp
128  */
129 void one_low_esp(object_type *o_ptr)
130 {
131         switch (randint1(9))
132         {
133         case 1: add_flag(o_ptr->art_flags, TR_ESP_ANIMAL);   break;
134         case 2: add_flag(o_ptr->art_flags, TR_ESP_UNDEAD);   break;
135         case 3: add_flag(o_ptr->art_flags, TR_ESP_DEMON);   break;
136         case 4: add_flag(o_ptr->art_flags, TR_ESP_ORC);   break;
137         case 5: add_flag(o_ptr->art_flags, TR_ESP_TROLL);   break;
138         case 6: add_flag(o_ptr->art_flags, TR_ESP_GIANT);   break;
139         case 7: add_flag(o_ptr->art_flags, TR_ESP_DRAGON);   break;
140         case 8: add_flag(o_ptr->art_flags, TR_ESP_HUMAN);   break;
141         case 9: add_flag(o_ptr->art_flags, TR_ESP_GOOD);   break;
142         }
143 }
144
145
146
147 /*
148  * Choose one random resistance
149  */
150 void one_resistance(object_type *o_ptr)
151 {
152         if (one_in_(3))
153         {
154                 one_ele_resistance(o_ptr);
155         }
156         else
157         {
158                 one_high_resistance(o_ptr);
159         }
160 }
161
162
163 /*
164  * Choose one random ability
165  */
166 void one_ability(object_type *o_ptr)
167 {
168         switch (randint0(10))
169         {
170         case 0: add_flag(o_ptr->art_flags, TR_LEVITATION);     break;
171         case 1: add_flag(o_ptr->art_flags, TR_LITE);        break;
172         case 2: add_flag(o_ptr->art_flags, TR_SEE_INVIS);   break;
173         case 3: add_flag(o_ptr->art_flags, TR_WARNING);     break;
174         case 4: add_flag(o_ptr->art_flags, TR_SLOW_DIGEST); break;
175         case 5: add_flag(o_ptr->art_flags, TR_REGEN);       break;
176         case 6: add_flag(o_ptr->art_flags, TR_FREE_ACT);    break;
177         case 7: add_flag(o_ptr->art_flags, TR_HOLD_LIFE);   break;
178         case 8:
179         case 9:
180                 one_low_esp(o_ptr);
181                 break;
182         }
183 }
184
185
186 static void curse_artifact(object_type * o_ptr)
187 {
188         if (o_ptr->pval > 0) o_ptr->pval = 0 - (o_ptr->pval + randint1(4));
189         if (o_ptr->to_a > 0) o_ptr->to_a = 0 - (o_ptr->to_a + randint1(4));
190         if (o_ptr->to_h > 0) o_ptr->to_h = 0 - (o_ptr->to_h + randint1(4));
191         if (o_ptr->to_d > 0) o_ptr->to_d = 0 - (o_ptr->to_d + randint1(4));
192
193         o_ptr->curse_flags |= (TRC_HEAVY_CURSE | TRC_CURSED);
194         remove_flag(o_ptr->art_flags, TR_BLESSED);
195
196         if (one_in_(4)) o_ptr->curse_flags |= TRC_PERMA_CURSE;
197         if (one_in_(3)) add_flag(o_ptr->art_flags, TR_TY_CURSE);
198         if (one_in_(2)) add_flag(o_ptr->art_flags, TR_AGGRAVATE);
199         if (one_in_(3)) add_flag(o_ptr->art_flags, TR_DRAIN_EXP);
200         if (one_in_(2)) add_flag(o_ptr->art_flags, TR_TELEPORT);
201         else if (one_in_(3)) add_flag(o_ptr->art_flags, TR_NO_TELE);
202
203         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))
204                 add_flag(o_ptr->art_flags, TR_NO_MAGIC);
205 }
206
207
208 static void random_plus(object_type * o_ptr)
209 {
210         int this_type = (object_is_weapon_ammo(o_ptr) ? 23 : 19);
211
212         switch (artifact_bias)
213         {
214         case BIAS_WARRIOR:
215                 if (!(have_flag(o_ptr->art_flags, TR_STR)))
216                 {
217                         add_flag(o_ptr->art_flags, TR_STR);
218                         if (one_in_(2)) return;
219                 }
220
221                 if (!(have_flag(o_ptr->art_flags, TR_CON)))
222                 {
223                         add_flag(o_ptr->art_flags, TR_CON);
224                         if (one_in_(2)) return;
225                 }
226
227                 if (!(have_flag(o_ptr->art_flags, TR_DEX)))
228                 {
229                         add_flag(o_ptr->art_flags, TR_DEX);
230                         if (one_in_(2)) return;
231                 }
232                 break;
233
234         case BIAS_MAGE:
235                 if (!(have_flag(o_ptr->art_flags, TR_INT)))
236                 {
237                         add_flag(o_ptr->art_flags, TR_INT);
238                         if (one_in_(2)) return;
239                 }
240                 if ((o_ptr->tval == TV_GLOVES) && !(have_flag(o_ptr->art_flags, TR_MAGIC_MASTERY)))
241                 {
242                         add_flag(o_ptr->art_flags, TR_MAGIC_MASTERY);
243                         if (one_in_(2)) return;
244                 }
245                 break;
246
247         case BIAS_PRIESTLY:
248                 if (!(have_flag(o_ptr->art_flags, TR_WIS)))
249                 {
250                         add_flag(o_ptr->art_flags, TR_WIS);
251                         if (one_in_(2)) return;
252                 }
253                 break;
254
255         case BIAS_RANGER:
256                 if (!(have_flag(o_ptr->art_flags, TR_DEX)))
257                 {
258                         add_flag(o_ptr->art_flags, TR_DEX);
259                         if (one_in_(2)) return;
260                 }
261
262                 if (!(have_flag(o_ptr->art_flags, TR_CON)))
263                 {
264                         add_flag(o_ptr->art_flags, TR_CON);
265                         if (one_in_(2)) return;
266                 }
267
268                 if (!(have_flag(o_ptr->art_flags, TR_STR)))
269                 {
270                         add_flag(o_ptr->art_flags, TR_STR);
271                         if (one_in_(2)) return;
272                 }
273                 break;
274
275         case BIAS_ROGUE:
276                 if (!(have_flag(o_ptr->art_flags, TR_STEALTH)))
277                 {
278                         add_flag(o_ptr->art_flags, TR_STEALTH);
279                         if (one_in_(2)) return;
280                 }
281                 if (!(have_flag(o_ptr->art_flags, TR_SEARCH)))
282                 {
283                         add_flag(o_ptr->art_flags, TR_SEARCH);
284                         if (one_in_(2)) return;
285                 }
286                 break;
287
288         case BIAS_STR:
289                 if (!(have_flag(o_ptr->art_flags, TR_STR)))
290                 {
291                         add_flag(o_ptr->art_flags, TR_STR);
292                         if (one_in_(2)) return;
293                 }
294                 break;
295
296         case BIAS_WIS:
297                 if (!(have_flag(o_ptr->art_flags, TR_WIS)))
298                 {
299                         add_flag(o_ptr->art_flags, TR_WIS);
300                         if (one_in_(2)) return;
301                 }
302                 break;
303
304         case BIAS_INT:
305                 if (!(have_flag(o_ptr->art_flags, TR_INT)))
306                 {
307                         add_flag(o_ptr->art_flags, TR_INT);
308                         if (one_in_(2)) return;
309                 }
310                 break;
311
312         case BIAS_DEX:
313                 if (!(have_flag(o_ptr->art_flags, TR_DEX)))
314                 {
315                         add_flag(o_ptr->art_flags, TR_DEX);
316                         if (one_in_(2)) return;
317                 }
318                 break;
319
320         case BIAS_CON:
321                 if (!(have_flag(o_ptr->art_flags, TR_CON)))
322                 {
323                         add_flag(o_ptr->art_flags, TR_CON);
324                         if (one_in_(2)) return;
325                 }
326                 break;
327
328         case BIAS_CHR:
329                 if (!(have_flag(o_ptr->art_flags, TR_CHR)))
330                 {
331                         add_flag(o_ptr->art_flags, TR_CHR);
332                         if (one_in_(2)) return;
333                 }
334                 break;
335         }
336
337         if ((artifact_bias == BIAS_MAGE || artifact_bias == BIAS_PRIESTLY) && (o_ptr->tval == TV_SOFT_ARMOR) && (o_ptr->sval == SV_ROBE))
338         {
339                 if (!(have_flag(o_ptr->art_flags, TR_DEC_MANA)) && one_in_(3))
340                 {
341                         add_flag(o_ptr->art_flags, TR_DEC_MANA);
342                         if (one_in_(2)) return;
343                 }
344         }
345
346         switch (randint1(this_type))
347         {
348         case 1: case 2:
349                 add_flag(o_ptr->art_flags, TR_STR);
350                 if (!artifact_bias && !one_in_(13))
351                         artifact_bias = BIAS_STR;
352                 else if (!artifact_bias && one_in_(7))
353                         artifact_bias = BIAS_WARRIOR;
354                 break;
355         case 3: case 4:
356                 add_flag(o_ptr->art_flags, TR_INT);
357                 if (!artifact_bias && !one_in_(13))
358                         artifact_bias = BIAS_INT;
359                 else if (!artifact_bias && one_in_(7))
360                         artifact_bias = BIAS_MAGE;
361                 break;
362         case 5: case 6:
363                 add_flag(o_ptr->art_flags, TR_WIS);
364                 if (!artifact_bias && !one_in_(13))
365                         artifact_bias = BIAS_WIS;
366                 else if (!artifact_bias && one_in_(7))
367                         artifact_bias = BIAS_PRIESTLY;
368                 break;
369         case 7: case 8:
370                 add_flag(o_ptr->art_flags, TR_DEX);
371                 if (!artifact_bias && !one_in_(13))
372                         artifact_bias = BIAS_DEX;
373                 else if (!artifact_bias && one_in_(7))
374                         artifact_bias = BIAS_ROGUE;
375                 break;
376         case 9: case 10:
377                 add_flag(o_ptr->art_flags, TR_CON);
378                 if (!artifact_bias && !one_in_(13))
379                         artifact_bias = BIAS_CON;
380                 else if (!artifact_bias && one_in_(9))
381                         artifact_bias = BIAS_RANGER;
382                 break;
383         case 11: case 12:
384                 add_flag(o_ptr->art_flags, TR_CHR);
385                 if (!artifact_bias && !one_in_(13))
386                         artifact_bias = BIAS_CHR;
387                 break;
388         case 13: case 14:
389                 add_flag(o_ptr->art_flags, TR_STEALTH);
390                 if (!artifact_bias && one_in_(3))
391                         artifact_bias = BIAS_ROGUE;
392                 break;
393         case 15: case 16:
394                 add_flag(o_ptr->art_flags, TR_SEARCH);
395                 if (!artifact_bias && one_in_(9))
396                         artifact_bias = BIAS_RANGER;
397                 break;
398         case 17: case 18:
399                 add_flag(o_ptr->art_flags, TR_INFRA);
400                 break;
401         case 19:
402                 add_flag(o_ptr->art_flags, TR_SPEED);
403                 if (!artifact_bias && one_in_(11))
404                         artifact_bias = BIAS_ROGUE;
405                 break;
406         case 20: case 21:
407                 add_flag(o_ptr->art_flags, TR_TUNNEL);
408                 break;
409         case 22: case 23:
410                 if (o_ptr->tval == TV_BOW) random_plus(o_ptr);
411                 else
412                 {
413                         add_flag(o_ptr->art_flags, TR_BLOWS);
414                         if (!artifact_bias && one_in_(11))
415                                 artifact_bias = BIAS_WARRIOR;
416                 }
417                 break;
418         }
419 }
420
421
422 static void random_resistance(object_type * o_ptr)
423 {
424         switch (artifact_bias)
425         {
426         case BIAS_ACID:
427                 if (!(have_flag(o_ptr->art_flags, TR_RES_ACID)))
428                 {
429                         add_flag(o_ptr->art_flags, TR_RES_ACID);
430                         if (one_in_(2)) return;
431                 }
432                 if (one_in_(BIAS_LUCK) && !(have_flag(o_ptr->art_flags, TR_IM_ACID)))
433                 {
434                         add_flag(o_ptr->art_flags, TR_IM_ACID);
435                         if (!one_in_(IM_LUCK))
436                         {
437                                 remove_flag(o_ptr->art_flags, TR_IM_ELEC);
438                                 remove_flag(o_ptr->art_flags, TR_IM_COLD);
439                                 remove_flag(o_ptr->art_flags, TR_IM_FIRE);
440                         }
441                         if (one_in_(2)) return;
442                 }
443                 break;
444
445         case BIAS_ELEC:
446                 if (!(have_flag(o_ptr->art_flags, TR_RES_ELEC)))
447                 {
448                         add_flag(o_ptr->art_flags, TR_RES_ELEC);
449                         if (one_in_(2)) return;
450                 }
451                 if ((o_ptr->tval >= TV_CLOAK) && (o_ptr->tval <= TV_HARD_ARMOR) &&
452                     !(have_flag(o_ptr->art_flags, TR_SH_ELEC)))
453                 {
454                         add_flag(o_ptr->art_flags, TR_SH_ELEC);
455                         if (one_in_(2)) return;
456                 }
457                 if (one_in_(BIAS_LUCK) && !(have_flag(o_ptr->art_flags, TR_IM_ELEC)))
458                 {
459                         add_flag(o_ptr->art_flags, TR_IM_ELEC);
460                         if (!one_in_(IM_LUCK))
461                         {
462                                 remove_flag(o_ptr->art_flags, TR_IM_ACID);
463                                 remove_flag(o_ptr->art_flags, TR_IM_COLD);
464                                 remove_flag(o_ptr->art_flags, TR_IM_FIRE);
465                         }
466
467                         if (one_in_(2)) return;
468                 }
469                 break;
470
471         case BIAS_FIRE:
472                 if (!(have_flag(o_ptr->art_flags, TR_RES_FIRE)))
473                 {
474                         add_flag(o_ptr->art_flags, TR_RES_FIRE);
475                         if (one_in_(2)) return;
476                 }
477                 if ((o_ptr->tval >= TV_CLOAK) &&
478                     (o_ptr->tval <= TV_HARD_ARMOR) &&
479                     !(have_flag(o_ptr->art_flags, TR_SH_FIRE)))
480                 {
481                         add_flag(o_ptr->art_flags, TR_SH_FIRE);
482                         if (one_in_(2)) return;
483                 }
484                 if (one_in_(BIAS_LUCK) &&
485                     !(have_flag(o_ptr->art_flags, TR_IM_FIRE)))
486                 {
487                         add_flag(o_ptr->art_flags, TR_IM_FIRE);
488                         if (!one_in_(IM_LUCK))
489                         {
490                                 remove_flag(o_ptr->art_flags, TR_IM_ELEC);
491                                 remove_flag(o_ptr->art_flags, TR_IM_COLD);
492                                 remove_flag(o_ptr->art_flags, TR_IM_ACID);
493                         }
494                         if (one_in_(2)) return;
495                 }
496                 break;
497
498         case BIAS_COLD:
499                 if (!(have_flag(o_ptr->art_flags, TR_RES_COLD)))
500                 {
501                         add_flag(o_ptr->art_flags, TR_RES_COLD);
502                         if (one_in_(2)) return;
503                 }
504                 if ((o_ptr->tval >= TV_CLOAK) &&
505                     (o_ptr->tval <= TV_HARD_ARMOR) &&
506                     !(have_flag(o_ptr->art_flags, TR_SH_COLD)))
507                 {
508                         add_flag(o_ptr->art_flags, TR_SH_COLD);
509                         if (one_in_(2)) return;
510                 }
511                 if (one_in_(BIAS_LUCK) && !(have_flag(o_ptr->art_flags, TR_IM_COLD)))
512                 {
513                         add_flag(o_ptr->art_flags, TR_IM_COLD);
514                         if (!one_in_(IM_LUCK))
515                         {
516                                 remove_flag(o_ptr->art_flags, TR_IM_ELEC);
517                                 remove_flag(o_ptr->art_flags, TR_IM_ACID);
518                                 remove_flag(o_ptr->art_flags, TR_IM_FIRE);
519                         }
520                         if (one_in_(2)) return;
521                 }
522                 break;
523
524         case BIAS_POIS:
525                 if (!(have_flag(o_ptr->art_flags, TR_RES_POIS)))
526                 {
527                         add_flag(o_ptr->art_flags, TR_RES_POIS);
528                         if (one_in_(2)) return;
529                 }
530                 break;
531
532         case BIAS_WARRIOR:
533                 if (!one_in_(3) && (!(have_flag(o_ptr->art_flags, TR_RES_FEAR))))
534                 {
535                         add_flag(o_ptr->art_flags, TR_RES_FEAR);
536                         if (one_in_(2)) return;
537                 }
538                 if (one_in_(3) && (!(have_flag(o_ptr->art_flags, TR_NO_MAGIC))))
539                 {
540                         add_flag(o_ptr->art_flags, TR_NO_MAGIC);
541                         if (one_in_(2)) return;
542                 }
543                 break;
544
545         case BIAS_NECROMANTIC:
546                 if (!(have_flag(o_ptr->art_flags, TR_RES_NETHER)))
547                 {
548                         add_flag(o_ptr->art_flags, TR_RES_NETHER);
549                         if (one_in_(2)) return;
550                 }
551                 if (!(have_flag(o_ptr->art_flags, TR_RES_POIS)))
552                 {
553                         add_flag(o_ptr->art_flags, TR_RES_POIS);
554                         if (one_in_(2)) return;
555                 }
556                 if (!(have_flag(o_ptr->art_flags, TR_RES_DARK)))
557                 {
558                         add_flag(o_ptr->art_flags, TR_RES_DARK);
559                         if (one_in_(2)) return;
560                 }
561                 break;
562
563         case BIAS_CHAOS:
564                 if (!(have_flag(o_ptr->art_flags, TR_RES_CHAOS)))
565                 {
566                         add_flag(o_ptr->art_flags, TR_RES_CHAOS);
567                         if (one_in_(2)) return;
568                 }
569                 if (!(have_flag(o_ptr->art_flags, TR_RES_CONF)))
570                 {
571                         add_flag(o_ptr->art_flags, TR_RES_CONF);
572                         if (one_in_(2)) return;
573                 }
574                 if (!(have_flag(o_ptr->art_flags, TR_RES_DISEN)))
575                 {
576                         add_flag(o_ptr->art_flags, TR_RES_DISEN);
577                         if (one_in_(2)) return;
578                 }
579                 break;
580         }
581
582         switch (randint1(42))
583         {
584                 case 1:
585                         if (!one_in_(WEIRD_LUCK))
586                                 random_resistance(o_ptr);
587                         else
588                         {
589                                 add_flag(o_ptr->art_flags, TR_IM_ACID);
590                                 if (!artifact_bias)
591                                         artifact_bias = BIAS_ACID;
592                         }
593                         break;
594                 case 2:
595                         if (!one_in_(WEIRD_LUCK))
596                                 random_resistance(o_ptr);
597                         else
598                         {
599                                 add_flag(o_ptr->art_flags, TR_IM_ELEC);
600                                 if (!artifact_bias)
601                                         artifact_bias = BIAS_ELEC;
602                         }
603                         break;
604                 case 3:
605                         if (!one_in_(WEIRD_LUCK))
606                                 random_resistance(o_ptr);
607                         else
608                         {
609                                 add_flag(o_ptr->art_flags, TR_IM_COLD);
610                                 if (!artifact_bias)
611                                         artifact_bias = BIAS_COLD;
612                         }
613                         break;
614                 case 4:
615                         if (!one_in_(WEIRD_LUCK))
616                                 random_resistance(o_ptr);
617                         else
618                         {
619                                 add_flag(o_ptr->art_flags, TR_IM_FIRE);
620                                 if (!artifact_bias)
621                                         artifact_bias = BIAS_FIRE;
622                         }
623                         break;
624                 case 5:
625                 case 6:
626                 case 13:
627                         add_flag(o_ptr->art_flags, TR_RES_ACID);
628                         if (!artifact_bias)
629                                 artifact_bias = BIAS_ACID;
630                         break;
631                 case 7:
632                 case 8:
633                 case 14:
634                         add_flag(o_ptr->art_flags, TR_RES_ELEC);
635                         if (!artifact_bias)
636                                 artifact_bias = BIAS_ELEC;
637                         break;
638                 case 9:
639                 case 10:
640                 case 15:
641                         add_flag(o_ptr->art_flags, TR_RES_FIRE);
642                         if (!artifact_bias)
643                                 artifact_bias = BIAS_FIRE;
644                         break;
645                 case 11:
646                 case 12:
647                 case 16:
648                         add_flag(o_ptr->art_flags, TR_RES_COLD);
649                         if (!artifact_bias)
650                                 artifact_bias = BIAS_COLD;
651                         break;
652                 case 17:
653                 case 18:
654                         add_flag(o_ptr->art_flags, TR_RES_POIS);
655                         if (!artifact_bias && !one_in_(4))
656                                 artifact_bias = BIAS_POIS;
657                         else if (!artifact_bias && one_in_(2))
658                                 artifact_bias = BIAS_NECROMANTIC;
659                         else if (!artifact_bias && one_in_(2))
660                                 artifact_bias = BIAS_ROGUE;
661                         break;
662                 case 19:
663                 case 20:
664                         add_flag(o_ptr->art_flags, TR_RES_FEAR);
665                         if (!artifact_bias && one_in_(3))
666                                 artifact_bias = BIAS_WARRIOR;
667                         break;
668                 case 21:
669                         add_flag(o_ptr->art_flags, TR_RES_LITE);
670                         break;
671                 case 22:
672                         add_flag(o_ptr->art_flags, TR_RES_DARK);
673                         break;
674                 case 23:
675                 case 24:
676                         add_flag(o_ptr->art_flags, TR_RES_BLIND);
677                         break;
678                 case 25:
679                 case 26:
680                         add_flag(o_ptr->art_flags, TR_RES_CONF);
681                         if (!artifact_bias && one_in_(6))
682                                 artifact_bias = BIAS_CHAOS;
683                         break;
684                 case 27:
685                 case 28:
686                         add_flag(o_ptr->art_flags, TR_RES_SOUND);
687                         break;
688                 case 29:
689                 case 30:
690                         add_flag(o_ptr->art_flags, TR_RES_SHARDS);
691                         break;
692                 case 31:
693                 case 32:
694                         add_flag(o_ptr->art_flags, TR_RES_NETHER);
695                         if (!artifact_bias && one_in_(3))
696                                 artifact_bias = BIAS_NECROMANTIC;
697                         break;
698                 case 33:
699                 case 34:
700                         add_flag(o_ptr->art_flags, TR_RES_NEXUS);
701                         break;
702                 case 35:
703                 case 36:
704                         add_flag(o_ptr->art_flags, TR_RES_CHAOS);
705                         if (!artifact_bias && one_in_(2))
706                                 artifact_bias = BIAS_CHAOS;
707                         break;
708                 case 37:
709                 case 38:
710                         add_flag(o_ptr->art_flags, TR_RES_DISEN);
711                         break;
712                 case 39:
713                         if (o_ptr->tval >= TV_CLOAK && o_ptr->tval <= TV_HARD_ARMOR)
714                                 add_flag(o_ptr->art_flags, TR_SH_ELEC);
715                         else
716                                 random_resistance(o_ptr);
717                         if (!artifact_bias)
718                                 artifact_bias = BIAS_ELEC;
719                         break;
720                 case 40:
721                         if (o_ptr->tval >= TV_CLOAK && o_ptr->tval <= TV_HARD_ARMOR)
722                                 add_flag(o_ptr->art_flags, TR_SH_FIRE);
723                         else
724                                 random_resistance(o_ptr);
725                         if (!artifact_bias)
726                                 artifact_bias = BIAS_FIRE;
727                         break;
728                 case 41:
729                         if (o_ptr->tval == TV_SHIELD || o_ptr->tval == TV_CLOAK ||
730                             o_ptr->tval == TV_HELM || o_ptr->tval == TV_HARD_ARMOR)
731                                 add_flag(o_ptr->art_flags, TR_REFLECT);
732                         else
733                                 random_resistance(o_ptr);
734                         break;
735                 case 42:
736                         if (o_ptr->tval >= TV_CLOAK && o_ptr->tval <= TV_HARD_ARMOR)
737                                 add_flag(o_ptr->art_flags, TR_SH_COLD);
738                         else
739                                 random_resistance(o_ptr);
740                         if (!artifact_bias)
741                                 artifact_bias = BIAS_COLD;
742                         break;
743         }
744 }
745
746
747
748 static void random_misc(object_type * o_ptr)
749 {
750         switch (artifact_bias)
751         {
752         case BIAS_RANGER:
753                 if (!(have_flag(o_ptr->art_flags, TR_SUST_CON)))
754                 {
755                         add_flag(o_ptr->art_flags, TR_SUST_CON);
756                         if (one_in_(2)) return;
757                 }
758                 break;
759
760         case BIAS_STR:
761                 if (!(have_flag(o_ptr->art_flags, TR_SUST_STR)))
762                 {
763                         add_flag(o_ptr->art_flags, TR_SUST_STR);
764                         if (one_in_(2)) return;
765                 }
766                 break;
767
768         case BIAS_WIS:
769                 if (!(have_flag(o_ptr->art_flags, TR_SUST_WIS)))
770                 {
771                         add_flag(o_ptr->art_flags, TR_SUST_WIS);
772                         if (one_in_(2)) return;
773                 }
774                 break;
775
776         case BIAS_INT:
777                 if (!(have_flag(o_ptr->art_flags, TR_SUST_INT)))
778                 {
779                         add_flag(o_ptr->art_flags, TR_SUST_INT);
780                         if (one_in_(2)) return;
781                 }
782                 break;
783
784         case BIAS_DEX:
785                 if (!(have_flag(o_ptr->art_flags, TR_SUST_DEX)))
786                 {
787                         add_flag(o_ptr->art_flags, TR_SUST_DEX);
788                         if (one_in_(2)) return;
789                 }
790                 break;
791
792         case BIAS_CON:
793                 if (!(have_flag(o_ptr->art_flags, TR_SUST_CON)))
794                 {
795                         add_flag(o_ptr->art_flags, TR_SUST_CON);
796                         if (one_in_(2)) return;
797                 }
798                 break;
799
800         case BIAS_CHR:
801                 if (!(have_flag(o_ptr->art_flags, TR_SUST_CHR)))
802                 {
803                         add_flag(o_ptr->art_flags, TR_SUST_CHR);
804                         if (one_in_(2)) return;
805                 }
806                 break;
807
808         case BIAS_CHAOS:
809                 if (!(have_flag(o_ptr->art_flags, TR_TELEPORT)))
810                 {
811                         add_flag(o_ptr->art_flags, TR_TELEPORT);
812                         if (one_in_(2)) return;
813                 }
814                 break;
815
816         case BIAS_FIRE:
817                 if (!(have_flag(o_ptr->art_flags, TR_LITE)))
818                 {
819                         add_flag(o_ptr->art_flags, TR_LITE); /* Freebie */
820                 }
821                 break;
822         }
823
824         switch (randint1(33))
825         {
826                 case 1:
827                         add_flag(o_ptr->art_flags, TR_SUST_STR);
828                         if (!artifact_bias)
829                                 artifact_bias = BIAS_STR;
830                         break;
831                 case 2:
832                         add_flag(o_ptr->art_flags, TR_SUST_INT);
833                         if (!artifact_bias)
834                                 artifact_bias = BIAS_INT;
835                         break;
836                 case 3:
837                         add_flag(o_ptr->art_flags, TR_SUST_WIS);
838                         if (!artifact_bias)
839                                 artifact_bias = BIAS_WIS;
840                         break;
841                 case 4:
842                         add_flag(o_ptr->art_flags, TR_SUST_DEX);
843                         if (!artifact_bias)
844                                 artifact_bias = BIAS_DEX;
845                         break;
846                 case 5:
847                         add_flag(o_ptr->art_flags, TR_SUST_CON);
848                         if (!artifact_bias)
849                                 artifact_bias = BIAS_CON;
850                         break;
851                 case 6:
852                         add_flag(o_ptr->art_flags, TR_SUST_CHR);
853                         if (!artifact_bias)
854                                 artifact_bias = BIAS_CHR;
855                         break;
856                 case 7:
857                 case 8:
858                 case 14:
859                         add_flag(o_ptr->art_flags, TR_FREE_ACT);
860                         break;
861                 case 9:
862                         add_flag(o_ptr->art_flags, TR_HOLD_LIFE);
863                         if (!artifact_bias && one_in_(5))
864                                 artifact_bias = BIAS_PRIESTLY;
865                         else if (!artifact_bias && one_in_(6))
866                                 artifact_bias = BIAS_NECROMANTIC;
867                         break;
868                 case 10:
869                 case 11:
870                         add_flag(o_ptr->art_flags, TR_LITE);
871                         break;
872                 case 12:
873                 case 13:
874                         add_flag(o_ptr->art_flags, TR_LEVITATION);
875                         break;
876                 case 15:
877                 case 16:
878                 case 17:
879                         add_flag(o_ptr->art_flags, TR_SEE_INVIS);
880                         break;
881                 case 19:
882                 case 20:
883                         add_flag(o_ptr->art_flags, TR_SLOW_DIGEST);
884                         break;
885                 case 21:
886                 case 22:
887                         add_flag(o_ptr->art_flags, TR_REGEN);
888                         break;
889                 case 23:
890                         add_flag(o_ptr->art_flags, TR_TELEPORT);
891                         break;
892                 case 24:
893                 case 25:
894                 case 26:
895                         if (object_is_armour(o_ptr))
896                                 random_misc(o_ptr);
897                         else
898                         {
899                                 o_ptr->to_a = 4 + randint1(11);
900                         }
901                         break;
902                 case 27:
903                 case 28:
904                 case 29:
905                 {
906                         int bonus_h, bonus_d;
907                         add_flag(o_ptr->art_flags, TR_SHOW_MODS);
908                         bonus_h = 4 + (randint1(11));
909                         bonus_d = 4 + (randint1(11));
910                         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))
911                         {
912                                 bonus_h /= 2;
913                                 bonus_d /= 2;
914                         }
915                         o_ptr->to_h += bonus_h;
916                         o_ptr->to_d += bonus_d;
917                         break;
918                 }
919                 case 30:
920                         add_flag(o_ptr->art_flags, TR_NO_MAGIC);
921                         break;
922                 case 31:
923                         add_flag(o_ptr->art_flags, TR_NO_TELE);
924                         break;
925                 case 32:
926                         add_flag(o_ptr->art_flags, TR_WARNING);
927                         break;
928
929                 case 18:
930                         switch (randint1(3))
931                         {
932                         case 1:
933                                 add_flag(o_ptr->art_flags, TR_ESP_EVIL);
934                                 if (!artifact_bias && one_in_(3))
935                                         artifact_bias = BIAS_LAW;
936                                 break;
937                         case 2:
938                                 add_flag(o_ptr->art_flags, TR_ESP_NONLIVING);
939                                 if (!artifact_bias && one_in_(3))
940                                         artifact_bias = BIAS_MAGE;
941                                 break;
942                         case 3:
943                                 add_flag(o_ptr->art_flags, TR_TELEPATHY);
944                                 if (!artifact_bias && one_in_(9))
945                                         artifact_bias = BIAS_MAGE;
946                                 break;
947                         }
948                         break;
949
950                 case 33:
951                 {
952                         int idx[3];
953                         int n = randint1(3);
954
955                         idx[0] = randint1(8);
956
957                         idx[1] = randint1(7);
958                         if (idx[1] >= idx[0]) idx[1]++;
959
960                         idx[2] = randint1(6);
961                         if (idx[2] >= idx[0]) idx[2]++;
962                         if (idx[2] >= idx[1]) idx[2]++;
963
964                         while (n--) switch (idx[n])
965                         {
966                         case 1:
967                                 add_flag(o_ptr->art_flags, TR_ESP_ANIMAL);
968                                 if (!artifact_bias && one_in_(4))
969                                         artifact_bias = BIAS_RANGER;
970                                 break;
971                         case 2:
972                                 add_flag(o_ptr->art_flags, TR_ESP_UNDEAD);
973                                 if (!artifact_bias && one_in_(3))
974                                         artifact_bias = BIAS_PRIESTLY;
975                                 else if (!artifact_bias && one_in_(6))
976                                         artifact_bias = BIAS_NECROMANTIC;
977                                 break;
978                         case 3:
979                                 add_flag(o_ptr->art_flags, TR_ESP_DEMON);
980                                 break;
981                         case 4:
982                                 add_flag(o_ptr->art_flags, TR_ESP_ORC);
983                                 break;
984                         case 5:
985                                 add_flag(o_ptr->art_flags, TR_ESP_TROLL);
986                                 break;
987                         case 6:
988                                 add_flag(o_ptr->art_flags, TR_ESP_GIANT);
989                                 break;
990                         case 7:
991                                 add_flag(o_ptr->art_flags, TR_ESP_HUMAN);
992                                 if (!artifact_bias && one_in_(6))
993                                         artifact_bias = BIAS_ROGUE;
994                                 break;
995                         case 8:
996                                 add_flag(o_ptr->art_flags, TR_ESP_GOOD);
997                                 if (!artifact_bias && one_in_(3))
998                                         artifact_bias = BIAS_LAW;
999                                 break;
1000                         }
1001                         break;
1002                 }
1003         }
1004 }
1005
1006
1007 static void random_slay(object_type *o_ptr)
1008 {
1009         if (o_ptr->tval == TV_BOW)
1010         {
1011                 switch (randint1(6))
1012                 {
1013                         case 1:
1014                         case 2:
1015                         case 3:
1016                                 add_flag(o_ptr->art_flags, TR_XTRA_MIGHT);
1017                                 if (!one_in_(7)) remove_flag(o_ptr->art_flags, TR_XTRA_SHOTS);
1018                                 if (!artifact_bias && one_in_(9))
1019                                         artifact_bias = BIAS_RANGER;
1020                                 break;
1021                         default:
1022                                 add_flag(o_ptr->art_flags, TR_XTRA_SHOTS);
1023                                 if (!one_in_(7)) remove_flag(o_ptr->art_flags, TR_XTRA_MIGHT);
1024                                 if (!artifact_bias && one_in_(9))
1025                                         artifact_bias = BIAS_RANGER;
1026                         break;
1027                 }
1028
1029                 return;
1030         }
1031
1032         switch (artifact_bias)
1033         {
1034         case BIAS_CHAOS:
1035                 if (!(have_flag(o_ptr->art_flags, TR_CHAOTIC)))
1036                 {
1037                         add_flag(o_ptr->art_flags, TR_CHAOTIC);
1038                         if (one_in_(2)) return;
1039                 }
1040                 break;
1041
1042         case BIAS_PRIESTLY:
1043                 if((o_ptr->tval == TV_SWORD || o_ptr->tval == TV_POLEARM) &&
1044                    !(have_flag(o_ptr->art_flags, TR_BLESSED)))
1045                 {
1046                         /* A free power for "priestly" random artifacts */
1047                         add_flag(o_ptr->art_flags, TR_BLESSED);
1048                 }
1049                 break;
1050
1051         case BIAS_NECROMANTIC:
1052                 if (!(have_flag(o_ptr->art_flags, TR_VAMPIRIC)))
1053                 {
1054                         add_flag(o_ptr->art_flags, TR_VAMPIRIC);
1055                         if (one_in_(2)) return;
1056                 }
1057                 if (!(have_flag(o_ptr->art_flags, TR_BRAND_POIS)) && one_in_(2))
1058                 {
1059                         add_flag(o_ptr->art_flags, TR_BRAND_POIS);
1060                         if (one_in_(2)) return;
1061                 }
1062                 break;
1063
1064         case BIAS_RANGER:
1065                 if (!(have_flag(o_ptr->art_flags, TR_SLAY_ANIMAL)))
1066                 {
1067                         add_flag(o_ptr->art_flags, TR_SLAY_ANIMAL);
1068                         if (one_in_(2)) return;
1069                 }
1070                 break;
1071
1072         case BIAS_ROGUE:
1073                 if ((((o_ptr->tval == TV_SWORD) && (o_ptr->sval == SV_DAGGER)) ||
1074                      ((o_ptr->tval == TV_POLEARM) && (o_ptr->sval == SV_SPEAR))) &&
1075                          !(have_flag(o_ptr->art_flags, TR_THROW)))
1076                 {
1077                         /* Free power for rogues... */
1078                         add_flag(o_ptr->art_flags, TR_THROW);
1079                 }
1080                 if (!(have_flag(o_ptr->art_flags, TR_BRAND_POIS)))
1081                 {
1082                         add_flag(o_ptr->art_flags, TR_BRAND_POIS);
1083                         if (one_in_(2)) return;
1084                 }
1085                 break;
1086
1087         case BIAS_POIS:
1088                 if (!(have_flag(o_ptr->art_flags, TR_BRAND_POIS)))
1089                 {
1090                         add_flag(o_ptr->art_flags, TR_BRAND_POIS);
1091                         if (one_in_(2)) return;
1092                 }
1093                 break;
1094
1095         case BIAS_FIRE:
1096                 if (!(have_flag(o_ptr->art_flags, TR_BRAND_FIRE)))
1097                 {
1098                         add_flag(o_ptr->art_flags, TR_BRAND_FIRE);
1099                         if (one_in_(2)) return;
1100                 }
1101                 break;
1102
1103         case BIAS_COLD:
1104                 if (!(have_flag(o_ptr->art_flags, TR_BRAND_COLD)))
1105                 {
1106                         add_flag(o_ptr->art_flags, TR_BRAND_COLD);
1107                         if (one_in_(2)) return;
1108                 }
1109                 break;
1110
1111         case BIAS_ELEC:
1112                 if (!(have_flag(o_ptr->art_flags, TR_BRAND_ELEC)))
1113                 {
1114                         add_flag(o_ptr->art_flags, TR_BRAND_ELEC);
1115                         if (one_in_(2)) return;
1116                 }
1117                 break;
1118
1119         case BIAS_ACID:
1120                 if (!(have_flag(o_ptr->art_flags, TR_BRAND_ACID)))
1121                 {
1122                         add_flag(o_ptr->art_flags, TR_BRAND_ACID);
1123                         if (one_in_(2)) return;
1124                 }
1125                 break;
1126
1127         case BIAS_LAW:
1128                 if (!(have_flag(o_ptr->art_flags, TR_SLAY_EVIL)))
1129                 {
1130                         add_flag(o_ptr->art_flags, TR_SLAY_EVIL);
1131                         if (one_in_(2)) return;
1132                 }
1133                 if (!(have_flag(o_ptr->art_flags, TR_SLAY_UNDEAD)))
1134                 {
1135                         add_flag(o_ptr->art_flags, TR_SLAY_UNDEAD);
1136                         if (one_in_(2)) return;
1137                 }
1138                 if (!(have_flag(o_ptr->art_flags, TR_SLAY_DEMON)))
1139                 {
1140                         add_flag(o_ptr->art_flags, TR_SLAY_DEMON);
1141                         if (one_in_(2)) return;
1142                 }
1143                 break;
1144         }
1145
1146         switch (randint1(36))
1147         {
1148                 case 1:
1149                 case 2:
1150                         add_flag(o_ptr->art_flags, TR_SLAY_ANIMAL);
1151                         break;
1152                 case 3:
1153                 case 4:
1154                         add_flag(o_ptr->art_flags, TR_SLAY_EVIL);
1155                         if (!artifact_bias && one_in_(2))
1156                                 artifact_bias = BIAS_LAW;
1157                         else if (!artifact_bias && one_in_(9))
1158                                 artifact_bias = BIAS_PRIESTLY;
1159                         break;
1160                 case 5:
1161                 case 6:
1162                         add_flag(o_ptr->art_flags, TR_SLAY_UNDEAD);
1163                         if (!artifact_bias && one_in_(9))
1164                                 artifact_bias = BIAS_PRIESTLY;
1165                         break;
1166                 case 7:
1167                 case 8:
1168                         add_flag(o_ptr->art_flags, TR_SLAY_DEMON);
1169                         if (!artifact_bias && one_in_(9))
1170                                 artifact_bias = BIAS_PRIESTLY;
1171                         break;
1172                 case 9:
1173                 case 10:
1174                         add_flag(o_ptr->art_flags, TR_SLAY_ORC);
1175                         break;
1176                 case 11:
1177                 case 12:
1178                         add_flag(o_ptr->art_flags, TR_SLAY_TROLL);
1179                         break;
1180                 case 13:
1181                 case 14:
1182                         add_flag(o_ptr->art_flags, TR_SLAY_GIANT);
1183                         break;
1184                 case 15:
1185                 case 16:
1186                         add_flag(o_ptr->art_flags, TR_SLAY_DRAGON);
1187                         break;
1188                 case 17:
1189                         add_flag(o_ptr->art_flags, TR_KILL_DRAGON);
1190                         break;
1191                 case 18:
1192                 case 19:
1193                         if (o_ptr->tval == TV_SWORD)
1194                         {
1195                                 add_flag(o_ptr->art_flags, TR_VORPAL);
1196                                 if (!artifact_bias && one_in_(9))
1197                                         artifact_bias = BIAS_WARRIOR;
1198                         }
1199                         else
1200                                 random_slay(o_ptr);
1201                         break;
1202                 case 20:
1203                         add_flag(o_ptr->art_flags, TR_IMPACT);
1204                         break;
1205                 case 21:
1206                 case 22:
1207                         add_flag(o_ptr->art_flags, TR_BRAND_FIRE);
1208                         if (!artifact_bias)
1209                                 artifact_bias = BIAS_FIRE;
1210                         break;
1211                 case 23:
1212                 case 24:
1213                         add_flag(o_ptr->art_flags, TR_BRAND_COLD);
1214                         if (!artifact_bias)
1215                                 artifact_bias = BIAS_COLD;
1216                         break;
1217                 case 25:
1218                 case 26:
1219                         add_flag(o_ptr->art_flags, TR_BRAND_ELEC);
1220                         if (!artifact_bias)
1221                                 artifact_bias = BIAS_ELEC;
1222                         break;
1223                 case 27:
1224                 case 28:
1225                         add_flag(o_ptr->art_flags, TR_BRAND_ACID);
1226                         if (!artifact_bias)
1227                                 artifact_bias = BIAS_ACID;
1228                         break;
1229                 case 29:
1230                 case 30:
1231                         add_flag(o_ptr->art_flags, TR_BRAND_POIS);
1232                         if (!artifact_bias && !one_in_(3))
1233                                 artifact_bias = BIAS_POIS;
1234                         else if (!artifact_bias && one_in_(6))
1235                                 artifact_bias = BIAS_NECROMANTIC;
1236                         else if (!artifact_bias)
1237                                 artifact_bias = BIAS_ROGUE;
1238                         break;
1239                 case 31:
1240                         add_flag(o_ptr->art_flags, TR_VAMPIRIC);
1241                         if (!artifact_bias)
1242                                 artifact_bias = BIAS_NECROMANTIC;
1243                         break;
1244                 case 32:
1245                         add_flag(o_ptr->art_flags, TR_FORCE_WEAPON);
1246                         if (!artifact_bias)
1247                                 artifact_bias = (one_in_(2) ? BIAS_MAGE : BIAS_PRIESTLY);
1248                         break;
1249                 case 33:
1250                 case 34:
1251                         add_flag(o_ptr->art_flags, TR_SLAY_HUMAN);
1252                         break;
1253                 default:
1254                         add_flag(o_ptr->art_flags, TR_CHAOTIC);
1255                         if (!artifact_bias)
1256                                 artifact_bias = BIAS_CHAOS;
1257                         break;
1258         }
1259 }
1260
1261
1262 static void give_activation_power(object_type *o_ptr)
1263 {
1264         int type = 0, chance = 0;
1265
1266         switch (artifact_bias)
1267         {
1268                 case BIAS_ELEC:
1269                         if (!one_in_(3))
1270                         {
1271                                 type = ACT_BO_ELEC_1;
1272                         }
1273                         else if (!one_in_(5))
1274                         {
1275                                 type = ACT_BA_ELEC_2;
1276                         }
1277                         else
1278                         {
1279                                 type = ACT_BA_ELEC_3;
1280                         }
1281                         chance = 101;
1282                         break;
1283
1284                 case BIAS_POIS:
1285                         type = ACT_BA_POIS_1;
1286                         chance = 101;
1287                         break;
1288
1289                 case BIAS_FIRE:
1290                         if (!one_in_(3))
1291                         {
1292                                 type = ACT_BO_FIRE_1;
1293                         }
1294                         else if (!one_in_(5))
1295                         {
1296                                 type = ACT_BA_FIRE_1;
1297                         }
1298                         else
1299                         {
1300                                 type = ACT_BA_FIRE_2;
1301                         }
1302                         chance = 101;
1303                         break;
1304
1305                 case BIAS_COLD:
1306                         chance = 101;
1307                         if (!one_in_(3))
1308                                 type = ACT_BO_COLD_1;
1309                         else if (!one_in_(3))
1310                                 type = ACT_BA_COLD_1;
1311                         else if (!one_in_(3))
1312                                 type = ACT_BA_COLD_2;
1313                         else
1314                                 type = ACT_BA_COLD_3;
1315                         break;
1316
1317                 case BIAS_CHAOS:
1318                         chance = 50;
1319                         if (one_in_(6))
1320                                 type = ACT_SUMMON_DEMON;
1321                         else
1322                                 type = ACT_CALL_CHAOS;
1323                         break;
1324
1325                 case BIAS_PRIESTLY:
1326                         chance = 101;
1327
1328                         if (one_in_(13))
1329                                 type = ACT_CHARM_UNDEAD;
1330                         else if (one_in_(12))
1331                                 type = ACT_BANISH_EVIL;
1332                         else if (one_in_(11))
1333                                 type = ACT_DISP_EVIL;
1334                         else if (one_in_(10))
1335                                 type = ACT_PROT_EVIL;
1336                         else if (one_in_(9))
1337                                 type = ACT_CURE_1000;
1338                         else if (one_in_(8))
1339                                 type = ACT_CURE_700;
1340                         else if (one_in_(7))
1341                                 type = ACT_REST_ALL;
1342                         else if (one_in_(6))
1343                                 type = ACT_REST_LIFE;
1344                         else
1345                                 type = ACT_CURE_MW;
1346                         break;
1347
1348                 case BIAS_NECROMANTIC:
1349                         chance = 101;
1350                         if (one_in_(66))
1351                                 type = ACT_WRAITH;
1352                         else if (one_in_(13))
1353                                 type = ACT_DISP_GOOD;
1354                         else if (one_in_(9))
1355                                 type = ACT_MASS_GENO;
1356                         else if (one_in_(8))
1357                                 type = ACT_GENOCIDE;
1358                         else if (one_in_(13))
1359                                 type = ACT_SUMMON_UNDEAD;
1360                         else if (one_in_(9))
1361                                 type = ACT_VAMPIRE_2;
1362                         else if (one_in_(6))
1363                                 type = ACT_CHARM_UNDEAD;
1364                         else
1365                                 type = ACT_VAMPIRE_1;
1366                         break;
1367
1368                 case BIAS_LAW:
1369                         chance = 101;
1370                         if (one_in_(8))
1371                                 type = ACT_BANISH_EVIL;
1372                         else if (one_in_(4))
1373                                 type = ACT_DISP_EVIL;
1374                         else
1375                                 type = ACT_PROT_EVIL;
1376                         break;
1377
1378                 case BIAS_ROGUE:
1379                         chance = 101;
1380                         if (one_in_(50))
1381                                 type = ACT_SPEED;
1382                         else if (one_in_(4))
1383                                 type = ACT_SLEEP;
1384                         else if (one_in_(3))
1385                                 type = ACT_DETECT_ALL;
1386                         else if (one_in_(8))
1387                                 type = ACT_ID_FULL;
1388                         else
1389                                 type = ACT_ID_PLAIN;
1390                         break;
1391
1392                 case BIAS_MAGE:
1393                         chance = 66;
1394                         if (one_in_(20))
1395                                 type = ACT_SUMMON_ELEMENTAL;
1396                         else if (one_in_(10))
1397                                 type = ACT_SUMMON_PHANTOM;
1398                         else if (one_in_(5))
1399                                 type = ACT_RUNE_EXPLO;
1400                         else
1401                                 type = ACT_ESP;
1402                         break;
1403
1404                 case BIAS_WARRIOR:
1405                         chance = 80;
1406                         if (one_in_(100))
1407                                 type = ACT_INVULN;
1408                         else
1409                                 type = ACT_BERSERK;
1410                         break;
1411
1412                 case BIAS_RANGER:
1413                         chance = 101;
1414                         if (one_in_(20))
1415                                 type = ACT_CHARM_ANIMALS;
1416                         else if (one_in_(7))
1417                                 type = ACT_SUMMON_ANIMAL;
1418                         else if (one_in_(6))
1419                                 type = ACT_CHARM_ANIMAL;
1420                         else if (one_in_(4))
1421                                 type = ACT_RESIST_ALL;
1422                         else if (one_in_(3))
1423                                 type = ACT_SATIATE;
1424                         else
1425                                 type = ACT_CURE_POISON;
1426                         break;
1427         }
1428
1429         while (!type || (randint1(100) >= chance))
1430         {
1431                 type = randint1(255);
1432                 switch (type)
1433                 {
1434                         case ACT_SUNLIGHT:
1435                         case ACT_BO_MISS_1:
1436                         case ACT_BA_POIS_1:
1437                         case ACT_BO_ELEC_1:
1438                         case ACT_BO_ACID_1:
1439                         case ACT_BO_COLD_1:
1440                         case ACT_BO_FIRE_1:
1441                         case ACT_CONFUSE:
1442                         case ACT_SLEEP:
1443                         case ACT_QUAKE:
1444                         case ACT_CURE_LW:
1445                         case ACT_CURE_MW:
1446                         case ACT_CURE_POISON:
1447                         case ACT_BERSERK:
1448                         case ACT_LIGHT:
1449                         case ACT_MAP_LIGHT:
1450                         case ACT_DEST_DOOR:
1451                         case ACT_STONE_MUD:
1452                         case ACT_TELEPORT:
1453                                 chance = 101;
1454                                 break;
1455                         case ACT_BA_COLD_1:
1456                         case ACT_BA_FIRE_1:
1457                         case ACT_DRAIN_1:
1458                         case ACT_TELE_AWAY:
1459                         case ACT_ESP:
1460                         case ACT_RESIST_ALL:
1461                         case ACT_DETECT_ALL:
1462                         case ACT_RECALL:
1463                         case ACT_SATIATE:
1464                         case ACT_RECHARGE:
1465                                 chance = 85;
1466                                 break;
1467                         case ACT_TERROR:
1468                         case ACT_PROT_EVIL:
1469                         case ACT_ID_PLAIN:
1470                                 chance = 75;
1471                                 break;
1472                         case ACT_DRAIN_2:
1473                         case ACT_VAMPIRE_1:
1474                         case ACT_BO_MISS_2:
1475                         case ACT_BA_FIRE_2:
1476                         case ACT_REST_LIFE:
1477                                 chance = 66;
1478                                 break;
1479                         case ACT_BA_COLD_3:
1480                         case ACT_BA_ELEC_3:
1481                         case ACT_WHIRLWIND:
1482                         case ACT_VAMPIRE_2:
1483                         case ACT_CHARM_ANIMAL:
1484                                 chance = 50;
1485                                 break;
1486                         case ACT_SUMMON_ANIMAL:
1487                                 chance = 40;
1488                                 break;
1489                         case ACT_DISP_EVIL:
1490                         case ACT_BA_MISS_3:
1491                         case ACT_DISP_GOOD:
1492                         case ACT_BANISH_EVIL:
1493                         case ACT_GENOCIDE:
1494                         case ACT_MASS_GENO:
1495                         case ACT_CHARM_UNDEAD:
1496                         case ACT_CHARM_OTHER:
1497                         case ACT_SUMMON_PHANTOM:
1498                         case ACT_REST_ALL:
1499                         case ACT_RUNE_EXPLO:
1500                                 chance = 33;
1501                                 break;
1502                         case ACT_CALL_CHAOS:
1503                         case ACT_ROCKET:
1504                         case ACT_CHARM_ANIMALS:
1505                         case ACT_CHARM_OTHERS:
1506                         case ACT_SUMMON_ELEMENTAL:
1507                         case ACT_CURE_700:
1508                         case ACT_SPEED:
1509                         case ACT_ID_FULL:
1510                         case ACT_RUNE_PROT:
1511                                 chance = 25;
1512                                 break;
1513                         case ACT_CURE_1000:
1514                         case ACT_XTRA_SPEED:
1515                         case ACT_DETECT_XTRA:
1516                         case ACT_DIM_DOOR:
1517                                 chance = 10;
1518                                 break;
1519                         case ACT_SUMMON_UNDEAD:
1520                         case ACT_SUMMON_DEMON:
1521                         case ACT_WRAITH:
1522                         case ACT_INVULN:
1523                         case ACT_ALCHEMY:
1524                                 chance = 5;
1525                                 break;
1526                         default:
1527                                 chance = 0;
1528                 }
1529         }
1530
1531         /* A type was chosen... */
1532         o_ptr->xtra2 = type;
1533         add_flag(o_ptr->art_flags, TR_ACTIVATE);
1534         o_ptr->timeout = 0;
1535 }
1536
1537
1538 /*
1539  * Create a name from random parts.
1540  */
1541 static void get_table_name_aux(char *out_string)
1542 {
1543 #ifdef JP
1544         char Syllable[80];
1545         get_rnd_line("aname_j.txt", 1, Syllable);
1546         strcat(out_string, Syllable);
1547         get_rnd_line("aname_j.txt", 2, Syllable);
1548         strcat(out_string, Syllable);
1549 #else
1550         int testcounter = randint1(3) + 1;
1551
1552         strcpy(out_string, "'");
1553
1554         if (randint1(3) == 2)
1555         {
1556                 while (testcounter--)
1557                         strcat(out_string, syllables[randint0(MAX_SYLLABLES)]);
1558         }
1559         else
1560         {
1561                 char Syllable[80];
1562                 testcounter = randint1(2) + 1;
1563                 while (testcounter--)
1564                 {
1565                         (void)get_rnd_line("elvish.txt", 0, Syllable);
1566                         strcat(out_string, Syllable);
1567                 }
1568         }
1569
1570         out_string[0] = toupper(out_string[1]);
1571
1572         strcat(out_string, "'");
1573
1574         out_string[16] = '\0';
1575 #endif
1576 }
1577
1578
1579 /*
1580  * Create a name from random parts without quotes.
1581  */
1582 static void get_table_name(char *out_string)
1583 {
1584         char buff[80];
1585         get_table_name_aux(buff);
1586
1587 #ifdef JP
1588         sprintf(out_string, "¡Ø%s¡Ù", buff);
1589 #else
1590         sprintf(out_string, "'%s'", buff);
1591 #endif
1592 }
1593
1594
1595 static void get_random_name(char *return_name, bool armour, int power)
1596 {
1597         if (randint1(100) <= TABLE_NAME)
1598         {
1599                 get_table_name(return_name);
1600         }
1601         else
1602         {
1603                 cptr filename;
1604
1605                 switch (armour)
1606                 {
1607                         case 1:
1608                                 switch (power)
1609                                 {
1610                                         case 0:
1611 #ifdef JP
1612 filename = "a_cursed_j.txt";
1613 #else
1614                                                 filename = "a_cursed.txt";
1615 #endif
1616
1617                                                 break;
1618                                         case 1:
1619 #ifdef JP
1620 filename = "a_low_j.txt";
1621 #else
1622                                                 filename = "a_low.txt";
1623 #endif
1624
1625                                                 break;
1626                                         case 2:
1627 #ifdef JP
1628 filename = "a_med_j.txt";
1629 #else
1630                                                 filename = "a_med.txt";
1631 #endif
1632
1633                                                 break;
1634                                         default:
1635 #ifdef JP
1636 filename = "a_high_j.txt";
1637 #else
1638                                                 filename = "a_high.txt";
1639 #endif
1640
1641                                 }
1642                                 break;
1643                         default:
1644                                 switch (power)
1645                                 {
1646                                         case 0:
1647 #ifdef JP
1648 filename = "w_cursed_j.txt";
1649 #else
1650                                                 filename = "w_cursed.txt";
1651 #endif
1652
1653                                                 break;
1654                                         case 1:
1655 #ifdef JP
1656 filename = "w_low_j.txt";
1657 #else
1658                                                 filename = "w_low.txt";
1659 #endif
1660
1661                                                 break;
1662                                         case 2:
1663 #ifdef JP
1664 filename = "w_med_j.txt";
1665 #else
1666                                                 filename = "w_med.txt";
1667 #endif
1668
1669                                                 break;
1670                                         default:
1671 #ifdef JP
1672 filename = "w_high_j.txt";
1673 #else
1674                                                 filename = "w_high.txt";
1675 #endif
1676
1677                                 }
1678                 }
1679
1680                 (void)get_rnd_line(filename, artifact_bias, return_name);
1681 #ifdef JP
1682  if(return_name[0]==0)get_table_name(return_name);
1683 #endif
1684         }
1685 }
1686
1687
1688 bool create_artifact(object_type *o_ptr, bool a_scroll)
1689 {
1690         char    new_name[1024];
1691         int     has_pval = 0;
1692         int     powers = randint1(5) + 1;
1693         int     max_type = (object_is_weapon_ammo(o_ptr) ? 7 : 5);
1694         int     power_level;
1695         s32b    total_flags;
1696         bool    a_cursed = FALSE;
1697         int     warrior_artifact_bias = 0;
1698         int i;
1699
1700         /* Reset artifact bias */
1701         artifact_bias = 0;
1702
1703         /* Nuke enchantments */
1704         o_ptr->name1 = 0;
1705         o_ptr->name2 = 0;
1706
1707         for (i = 0; i < TR_FLAG_SIZE; i++)
1708                 o_ptr->art_flags[i] |= k_info[o_ptr->k_idx].flags[i];
1709
1710         if (o_ptr->pval) has_pval = TRUE;
1711
1712         if (a_scroll && one_in_(4))
1713         {
1714                 switch (p_ptr->pclass)
1715                 {
1716                         case CLASS_WARRIOR:
1717                         case CLASS_BERSERKER:
1718                         case CLASS_ARCHER:
1719                         case CLASS_SAMURAI:
1720                         case CLASS_CAVALRY:
1721                         case CLASS_SMITH:
1722                                 artifact_bias = BIAS_WARRIOR;
1723                                 break;
1724                         case CLASS_MAGE:
1725                         case CLASS_HIGH_MAGE:
1726                         case CLASS_SORCERER:
1727                         case CLASS_MAGIC_EATER:
1728                         case CLASS_BLUE_MAGE:
1729                                 artifact_bias = BIAS_MAGE;
1730                                 break;
1731                         case CLASS_PRIEST:
1732                                 artifact_bias = BIAS_PRIESTLY;
1733                                 break;
1734                         case CLASS_ROGUE:
1735                         case CLASS_NINJA:
1736                                 artifact_bias = BIAS_ROGUE;
1737                                 warrior_artifact_bias = 25;
1738                                 break;
1739                         case CLASS_RANGER:
1740                                 artifact_bias = BIAS_RANGER;
1741                                 warrior_artifact_bias = 30;
1742                                 break;
1743                         case CLASS_PALADIN:
1744                                 artifact_bias = BIAS_PRIESTLY;
1745                                 warrior_artifact_bias = 40;
1746                                 break;
1747                         case CLASS_WARRIOR_MAGE:
1748                         case CLASS_RED_MAGE:
1749                                 artifact_bias = BIAS_MAGE;
1750                                 warrior_artifact_bias = 40;
1751                                 break;
1752                         case CLASS_CHAOS_WARRIOR:
1753                                 artifact_bias = BIAS_CHAOS;
1754                                 warrior_artifact_bias = 40;
1755                                 break;
1756                         case CLASS_MONK:
1757                         case CLASS_FORCETRAINER:
1758                                 artifact_bias = BIAS_PRIESTLY;
1759                                 break;
1760                         case CLASS_MINDCRAFTER:
1761                         case CLASS_BARD:
1762                                 if (randint1(5) > 2) artifact_bias = BIAS_PRIESTLY;
1763                                 break;
1764                         case CLASS_TOURIST:
1765                                 if (randint1(5) > 2) artifact_bias = BIAS_WARRIOR;
1766                                 break;
1767                         case CLASS_IMITATOR:
1768                                 if (randint1(2) > 1) artifact_bias = BIAS_RANGER;
1769                                 break;
1770                         case CLASS_BEASTMASTER:
1771                                 artifact_bias = BIAS_CHR;
1772                                 warrior_artifact_bias = 50;
1773                                 break;
1774                         case CLASS_MIRROR_MASTER:
1775                                 if (randint1(4) > 1) 
1776                                 {
1777                                     artifact_bias = BIAS_MAGE;
1778                                 }
1779                                 else
1780                                 {
1781                                     artifact_bias = BIAS_ROGUE;
1782                                 }
1783                                 break;
1784                 }
1785         }
1786
1787         if (a_scroll && (randint1(100) <= warrior_artifact_bias))
1788                 artifact_bias = BIAS_WARRIOR;
1789
1790         strcpy(new_name, "");
1791
1792         if (!a_scroll && one_in_(A_CURSED))
1793                 a_cursed = TRUE;
1794         if (((o_ptr->tval == TV_AMULET) || (o_ptr->tval == TV_RING)) && object_is_cursed(o_ptr))
1795                 a_cursed = TRUE;
1796
1797         while (one_in_(powers) || one_in_(7) || one_in_(10))
1798                 powers++;
1799
1800         if (!a_cursed && one_in_(WEIRD_LUCK))
1801                 powers *= 2;
1802
1803         if (a_cursed) powers /= 2;
1804
1805         /* Main loop */
1806         while (powers--)
1807         {
1808                 switch (randint1(max_type))
1809                 {
1810                         case 1: case 2:
1811                                 random_plus(o_ptr);
1812                                 has_pval = TRUE;
1813                                 break;
1814                         case 3: case 4:
1815                                 if (one_in_(2) && object_is_weapon_ammo(o_ptr) && (o_ptr->tval != TV_BOW))
1816                                 {
1817                                         if (a_cursed && !one_in_(13)) break;
1818                                         if (one_in_(13))
1819                                         {
1820                                                 if (one_in_(o_ptr->ds+4)) o_ptr->ds++;
1821                                         }
1822                                         else
1823                                         {
1824                                                 if (one_in_(o_ptr->dd+1)) o_ptr->dd++;
1825                                         }
1826                                 }
1827                                 else
1828                                         random_resistance(o_ptr);
1829                                 break;
1830                         case 5:
1831                                 random_misc(o_ptr);
1832                                 break;
1833                         case 6: case 7:
1834                                 random_slay(o_ptr);
1835                                 break;
1836                         default:
1837                                 if (p_ptr->wizard) msg_print("Switch error in create_artifact!");
1838                                 powers++;
1839                 }
1840         };
1841
1842         if (has_pval)
1843         {
1844 #if 0
1845                 add_flag(o_ptr->art_flags, TR_SHOW_MODS);
1846
1847                 /* This one commented out by gw's request... */
1848                 if (!a_scroll)
1849                         add_flag(o_ptr->art_flags, TR_HIDE_TYPE);
1850 #endif
1851
1852                 if (have_flag(o_ptr->art_flags, TR_BLOWS))
1853                 {
1854                         o_ptr->pval = randint1(2);
1855                         if ((o_ptr->tval == TV_SWORD) && (o_ptr->sval == SV_HAYABUSA))
1856                                 o_ptr->pval++;
1857                 }
1858                 else
1859                 {
1860                         do
1861                         {
1862                                 o_ptr->pval++;
1863                         }
1864                         while (o_ptr->pval < randint1(5) || one_in_(o_ptr->pval));
1865                 }
1866
1867                 if ((o_ptr->pval > 4) && !one_in_(WEIRD_LUCK))
1868                         o_ptr->pval = 4;
1869         }
1870
1871         /* give it some plusses... */
1872         if (object_is_armour(o_ptr))
1873                 o_ptr->to_a += randint1(o_ptr->to_a > 19 ? 1 : 20 - o_ptr->to_a);
1874         else if (object_is_weapon_ammo(o_ptr))
1875         {
1876                 o_ptr->to_h += randint1(o_ptr->to_h > 19 ? 1 : 20 - o_ptr->to_h);
1877                 o_ptr->to_d += randint1(o_ptr->to_d > 19 ? 1 : 20 - o_ptr->to_d);
1878                 if ((have_flag(o_ptr->art_flags, TR_WIS)) && (o_ptr->pval > 0)) add_flag(o_ptr->art_flags, TR_BLESSED);
1879         }
1880
1881         /* Just to be sure */
1882         add_flag(o_ptr->art_flags, TR_IGNORE_ACID);
1883         add_flag(o_ptr->art_flags, TR_IGNORE_ELEC);
1884         add_flag(o_ptr->art_flags, TR_IGNORE_FIRE);
1885         add_flag(o_ptr->art_flags, TR_IGNORE_COLD);
1886
1887         total_flags = flag_cost(o_ptr, o_ptr->pval);
1888         if (cheat_peek) msg_format("%ld", total_flags);
1889
1890         if (a_cursed) curse_artifact(o_ptr);
1891
1892         if (!a_cursed &&
1893             one_in_(object_is_armour(o_ptr) ? ACTIVATION_CHANCE * 2 : ACTIVATION_CHANCE))
1894         {
1895                 o_ptr->xtra2 = 0;
1896                 give_activation_power(o_ptr);
1897         }
1898
1899         if (object_is_armour(o_ptr))
1900         {
1901                 while ((o_ptr->to_d+o_ptr->to_h) > 20)
1902                 {
1903                         if (one_in_(o_ptr->to_d) && one_in_(o_ptr->to_h)) break;
1904                         o_ptr->to_d -= (s16b)randint0(3);
1905                         o_ptr->to_h -= (s16b)randint0(3);
1906                 }
1907                 while ((o_ptr->to_d+o_ptr->to_h) > 10)
1908                 {
1909                         if (one_in_(o_ptr->to_d) || one_in_(o_ptr->to_h)) break;
1910                         o_ptr->to_d -= (s16b)randint0(3);
1911                         o_ptr->to_h -= (s16b)randint0(3);
1912                 }
1913         }
1914
1915         if (((artifact_bias == BIAS_MAGE) || (artifact_bias == BIAS_INT)) && (o_ptr->tval == TV_GLOVES)) add_flag(o_ptr->art_flags, TR_FREE_ACT);
1916
1917         if ((o_ptr->tval == TV_SWORD) && (o_ptr->sval == SV_DOKUBARI))
1918         {
1919                 o_ptr->to_h = 0;
1920                 o_ptr->to_d = 0;
1921                 remove_flag(o_ptr->art_flags, TR_BLOWS);
1922                 remove_flag(o_ptr->art_flags, TR_FORCE_WEAPON);
1923                 remove_flag(o_ptr->art_flags, TR_SLAY_ANIMAL);
1924                 remove_flag(o_ptr->art_flags, TR_SLAY_EVIL);
1925                 remove_flag(o_ptr->art_flags, TR_SLAY_UNDEAD);
1926                 remove_flag(o_ptr->art_flags, TR_SLAY_DEMON);
1927                 remove_flag(o_ptr->art_flags, TR_SLAY_ORC);
1928                 remove_flag(o_ptr->art_flags, TR_SLAY_TROLL);
1929                 remove_flag(o_ptr->art_flags, TR_SLAY_GIANT);
1930                 remove_flag(o_ptr->art_flags, TR_SLAY_DRAGON);
1931                 remove_flag(o_ptr->art_flags, TR_KILL_DRAGON);
1932                 remove_flag(o_ptr->art_flags, TR_SLAY_HUMAN);
1933                 remove_flag(o_ptr->art_flags, TR_VORPAL);
1934                 remove_flag(o_ptr->art_flags, TR_BRAND_POIS);
1935                 remove_flag(o_ptr->art_flags, TR_BRAND_ACID);
1936                 remove_flag(o_ptr->art_flags, TR_BRAND_ELEC);
1937                 remove_flag(o_ptr->art_flags, TR_BRAND_FIRE);
1938                 remove_flag(o_ptr->art_flags, TR_BRAND_COLD);
1939         }
1940
1941         if (!object_is_weapon_ammo(o_ptr))
1942         {
1943                 /* For armors */
1944                 if (a_cursed) power_level = 0;
1945                 else if (total_flags < 15000) power_level = 1;
1946                 else if (total_flags < 35000) power_level = 2;
1947                 else power_level = 3;
1948         }
1949
1950         else
1951         {
1952                 /* For weapons */
1953                 if (a_cursed) power_level = 0;
1954                 else if (total_flags < 20000) power_level = 1;
1955                 else if (total_flags < 45000) power_level = 2;
1956                 else power_level = 3;
1957         }
1958
1959         if (a_scroll)
1960         {
1961                 char dummy_name[80] = "";
1962 #ifdef JP
1963                 cptr ask_msg = "¤³¤Î¥¢¡¼¥Æ¥£¥Õ¥¡¥¯¥È¤ò²¿¤È̾ÉÕ¤±¤Þ¤¹¤«¡©";
1964 #else
1965                 cptr ask_msg = "What do you want to call the artifact? ";
1966 #endif
1967
1968                 /* Identify it fully */
1969                 object_aware(o_ptr);
1970                 object_known(o_ptr);
1971
1972                 /* Mark the item as fully known */
1973                 o_ptr->ident |= (IDENT_MENTAL);
1974
1975                 (void)screen_object(o_ptr, TRUE);
1976
1977                 if (!get_string(ask_msg, dummy_name, sizeof dummy_name)
1978                     || !dummy_name[0])
1979                 {
1980                         /* Cancelled */
1981 #if 0
1982                         if (one_in_(2))
1983                         {
1984                                 get_table_sindarin(dummy_name);
1985                         }
1986                         else
1987 #endif
1988                         {
1989                                 get_table_name_aux(dummy_name);
1990                         }
1991                 }
1992
1993 #ifdef JP
1994                 sprintf(new_name, "¡Ô%s¡Õ", dummy_name);
1995 #else
1996                 sprintf(new_name, "'%s'", dummy_name);
1997 #endif
1998
1999                 chg_virtue(V_INDIVIDUALISM, 2);
2000                 chg_virtue(V_ENCHANT, 5);
2001         }
2002         else
2003         {
2004                 get_random_name(new_name, object_is_armour(o_ptr), power_level);
2005         }
2006
2007         if (cheat_xtra)
2008         {
2009 #ifdef JP
2010                 if (artifact_bias) msg_format("±¿¤ÎÊФä¿¥¢¡¼¥Æ¥£¥Õ¥¡¥¯¥È: %d¡£", artifact_bias);
2011                 else msg_print("¥¢¡¼¥Æ¥£¥Õ¥¡¥¯¥È¤Ë±¿¤ÎÊФê¤Ê¤·¡£");
2012 #else
2013                 if (artifact_bias) msg_format("Biased artifact: %d.", artifact_bias);
2014                 else msg_print("No bias in artifact.");
2015 #endif
2016         }
2017
2018         /* Save the inscription */
2019         o_ptr->art_name = quark_add(new_name);
2020
2021         /* Window stuff */
2022         p_ptr->window |= (PW_INVEN | PW_EQUIP);
2023
2024         return TRUE;
2025 }
2026
2027
2028 bool activate_random_artifact(object_type * o_ptr)
2029 {
2030         int plev = p_ptr->lev;
2031         int k, dir, dummy = 0;
2032
2033         if (!o_ptr->art_name) return FALSE; /* oops? */
2034
2035         /* Activate for attack */
2036         switch (o_ptr->xtra2)
2037         {
2038                 case ACT_SUNLIGHT:
2039                 {
2040                         if (!get_aim_dir(&dir)) return FALSE;
2041 #ifdef JP
2042                         msg_print("ÂÀÍÛ¸÷Àþ¤¬Êü¤¿¤ì¤¿¡£");
2043 #else
2044                         msg_print("A line of sunlight appears.");
2045 #endif
2046
2047                         (void)lite_line(dir);
2048                         o_ptr->timeout = 10;
2049                         break;
2050                 }
2051
2052                 case ACT_BO_MISS_1:
2053                 {
2054 #ifdef JP
2055                         msg_print("¤½¤ì¤ÏâÁ¤·¤¤¤¯¤é¤¤¤ËÌÀ¤ë¤¯µ±¤¤¤Æ¤¤¤ë...");
2056 #else
2057                         msg_print("It glows extremely brightly...");
2058 #endif
2059
2060                         if (!get_aim_dir(&dir)) return FALSE;
2061                         fire_bolt(GF_MISSILE, dir, damroll(2, 6));
2062                         o_ptr->timeout = 2;
2063                         break;
2064                 }
2065
2066                 case ACT_BA_POIS_1:
2067                 {
2068 #ifdef JP
2069                         msg_print("¤½¤ì¤ÏÇ»Î理Ë̮ư¤·¤Æ¤¤¤ë...");
2070 #else
2071                         msg_print("It throbs deep green...");
2072 #endif
2073
2074                         if (!get_aim_dir(&dir)) return FALSE;
2075                         fire_ball(GF_POIS, dir, 12, 3);
2076                         o_ptr->timeout = randint0(4) + 4;
2077                         break;
2078                 }
2079
2080                 case ACT_BO_ELEC_1:
2081                 {
2082 #ifdef JP
2083                         msg_print("¤½¤ì¤Ï²Ð²Ö¤Ëʤ¤ï¤ì¤¿...");
2084 #else
2085                         msg_print("It is covered in sparks...");
2086 #endif
2087
2088                         if (!get_aim_dir(&dir)) return FALSE;
2089                         fire_bolt(GF_ELEC, dir, damroll(4, 8));
2090                         o_ptr->timeout = randint0(5) + 5;
2091                         break;
2092                 }
2093
2094                 case ACT_BO_ACID_1:
2095                 {
2096 #ifdef JP
2097                         msg_print("¤½¤ì¤Ï»À¤Ëʤ¤ï¤ì¤¿...");
2098 #else
2099                         msg_print("It is covered in acid...");
2100 #endif
2101
2102                         if (!get_aim_dir(&dir)) return FALSE;
2103                         fire_bolt(GF_ACID, dir, damroll(5, 8));
2104                         o_ptr->timeout = randint0(6) + 6;
2105                         break;
2106                 }
2107
2108                 case ACT_BO_COLD_1:
2109                 {
2110 #ifdef JP
2111                         msg_print("¤½¤ì¤ÏÁú¤Ëʤ¤ï¤ì¤¿...");
2112 #else
2113                         msg_print("It is covered in frost...");
2114 #endif
2115
2116                         if (!get_aim_dir(&dir)) return FALSE;
2117                         fire_bolt(GF_COLD, dir, damroll(6, 8));
2118                         o_ptr->timeout = randint0(7) + 7;
2119                         break;
2120                 }
2121
2122                 case ACT_BO_FIRE_1:
2123                 {
2124 #ifdef JP
2125                         msg_print("¤½¤ì¤Ï±ê¤Ëʤ¤ï¤ì¤¿...");
2126 #else
2127                         msg_print("It is covered in fire...");
2128 #endif
2129
2130                         if (!get_aim_dir(&dir)) return FALSE;
2131                         fire_bolt(GF_FIRE, dir, damroll(9, 8));
2132                         o_ptr->timeout = randint0(8) + 8;
2133                         break;
2134                 }
2135
2136                 case ACT_BA_COLD_1:
2137                 {
2138 #ifdef JP
2139                         msg_print("¤½¤ì¤ÏÁú¤Ëʤ¤ï¤ì¤¿...");
2140 #else
2141                         msg_print("It is covered in frost...");
2142 #endif
2143
2144                         if (!get_aim_dir(&dir)) return FALSE;
2145                         fire_ball(GF_COLD, dir, 48, 2);
2146                         o_ptr->timeout = 400;
2147                         break;
2148                 }
2149
2150                 case ACT_BA_FIRE_1:
2151                 {
2152 #ifdef JP
2153                         msg_print("¤½¤ì¤ÏÀÖ¤¯·ã¤·¤¯µ±¤¤¤¿...");
2154 #else
2155                         msg_print("It glows an intense red...");
2156 #endif
2157
2158                         if (!get_aim_dir(&dir)) return FALSE;
2159                         fire_ball(GF_FIRE, dir, 72, 2);
2160                         o_ptr->timeout = 400;
2161                         break;
2162                 }
2163
2164                 case ACT_DRAIN_1:
2165                 {
2166 #ifdef JP
2167                         msg_print("¤½¤ì¤Ï¹õ¤¯µ±¤¤¤¿...");
2168 #else
2169                         msg_print("It glows black...");
2170 #endif
2171
2172                         if (!get_aim_dir(&dir)) return FALSE;
2173                         if (drain_life(dir, 100))
2174                         o_ptr->timeout = randint0(100) + 100;
2175                         break;
2176                 }
2177
2178                 case ACT_BA_COLD_2:
2179                 {
2180 #ifdef JP
2181                         msg_print("¤½¤ì¤ÏÀĤ¯·ã¤·¤¯µ±¤¤¤¿...");
2182 #else
2183                         msg_print("It glows an intense blue...");
2184 #endif
2185
2186                         if (!get_aim_dir(&dir)) return FALSE;
2187                         fire_ball(GF_COLD, dir, 100, 2);
2188                         o_ptr->timeout = 300;
2189                         break;
2190                 }
2191
2192                 case ACT_BA_ELEC_2:
2193                 {
2194 #ifdef JP
2195                         msg_print("Åŵ¤¤¬¥Ñ¥Á¥Ñ¥Á²»¤òΩ¤Æ¤¿...");
2196 #else
2197                         msg_print("It crackles with electricity...");
2198 #endif
2199
2200                         if (!get_aim_dir(&dir)) return FALSE;
2201                         fire_ball(GF_ELEC, dir, 100, 3);
2202                         o_ptr->timeout = 500;
2203                         break;
2204                 }
2205
2206                 case ACT_DRAIN_2:
2207                 {
2208 #ifdef JP
2209                         msg_print("¹õ¤¯µ±¤¤¤Æ¤¤¤ë...");
2210 #else
2211                         msg_print("It glows black...");
2212 #endif
2213
2214                         if (!get_aim_dir(&dir)) return FALSE;
2215                         drain_life(dir, 120);
2216                         o_ptr->timeout = 400;
2217                         break;
2218                 }
2219
2220                 case ACT_VAMPIRE_1:
2221                 {
2222                         if (!get_aim_dir(&dir)) return FALSE;
2223                         for (dummy = 0; dummy < 3; dummy++)
2224                         {
2225                                 if (drain_life(dir, 50))
2226                                 hp_player(50);
2227                         }
2228                         o_ptr->timeout = 400;
2229                         break;
2230                 }
2231
2232                 case ACT_BO_MISS_2:
2233                 {
2234 #ifdef JP
2235                         msg_print("ËâË¡¤Î¥È¥²¤¬¸½¤ì¤¿...");
2236 #else
2237                         msg_print("It grows magical spikes...");
2238 #endif
2239
2240                         if (!get_aim_dir(&dir)) return FALSE;
2241                         fire_bolt(GF_ARROW, dir, 150);
2242                         o_ptr->timeout = randint0(90) + 90;
2243                         break;
2244                 }
2245
2246                 case ACT_BA_FIRE_2:
2247                 {
2248 #ifdef JP
2249                         msg_print("¿¼ÀÖ¿§¤Ëµ±¤¤¤Æ¤¤¤ë...");
2250 #else
2251                         msg_print("It glows deep red...");
2252 #endif
2253
2254                         if (!get_aim_dir(&dir)) return FALSE;
2255                         fire_ball(GF_FIRE, dir, 120, 3);
2256                         o_ptr->timeout = randint0(225) + 225;
2257                         break;
2258                 }
2259
2260                 case ACT_BA_COLD_3:
2261                 {
2262 #ifdef JP
2263                         msg_print("ÌÀ¤ë¤¯Çò¿§¤Ëµ±¤¤¤Æ¤¤¤ë...");
2264 #else
2265                         msg_print("It glows bright white...");
2266 #endif
2267
2268                         if (!get_aim_dir(&dir)) return FALSE;
2269                         fire_ball(GF_COLD, dir, 200, 3);
2270                         o_ptr->timeout = randint0(325) + 325;
2271                         break;
2272                 }
2273
2274                 case ACT_BA_ELEC_3:
2275                 {
2276 #ifdef JP
2277                         msg_print("¿¼ÀÄ¿§¤Ëµ±¤¤¤Æ¤¤¤ë...");
2278 #else
2279                         msg_print("It glows deep blue...");
2280 #endif
2281
2282                         if (!get_aim_dir(&dir)) return FALSE;
2283                         fire_ball(GF_ELEC, dir, 250, 3);
2284                         o_ptr->timeout = randint0(425) + 425;
2285                         break;
2286                 }
2287
2288                 case ACT_WHIRLWIND:
2289                 {
2290                         {
2291                                 int y = 0, x = 0;
2292                                 cave_type       *c_ptr;
2293                                 monster_type    *m_ptr;
2294
2295                                 for (dir = 0; dir <= 9; dir++)
2296                                 {
2297                                         y = py + ddy[dir];
2298                                         x = px + ddx[dir];
2299                                         c_ptr = &cave[y][x];
2300
2301                                         /* Get the monster */
2302                                         m_ptr = &m_list[c_ptr->m_idx];
2303
2304                                         /* Hack -- attack monsters */
2305                                         if (c_ptr->m_idx && (m_ptr->ml || cave_have_flag_bold(y, x, FF_PROJECT)))
2306                                                 py_attack(y, x, 0);
2307                                 }
2308                         }
2309                         o_ptr->timeout = 250;
2310                         break;
2311                 }
2312
2313                 case ACT_VAMPIRE_2:
2314                 {
2315                         if (!get_aim_dir(&dir)) return FALSE;
2316                         for (dummy = 0; dummy < 3; dummy++)
2317                         {
2318                                 if (drain_life(dir, 100))
2319                                 hp_player(100);
2320                         }
2321
2322                         o_ptr->timeout = 400;
2323                         break;
2324                 }
2325
2326
2327                 case ACT_CALL_CHAOS:
2328                 {
2329 #ifdef JP
2330                         msg_print("ÍÍ¡¹¤Ê¿§¤Î²Ð²Ö¤òȯ¤·¤Æ¤¤¤ë...");
2331 #else
2332                         msg_print("It glows in scintillating colours...");
2333 #endif
2334
2335                         call_chaos();
2336                         o_ptr->timeout = 350;
2337                         break;
2338                 }
2339
2340                 case ACT_ROCKET:
2341                 {
2342                         if (!get_aim_dir(&dir)) return FALSE;
2343 #ifdef JP
2344                         msg_print("¥í¥±¥Ã¥È¤òȯ¼Í¤·¤¿¡ª");
2345 #else
2346                         msg_print("You launch a rocket!");
2347 #endif
2348
2349                         fire_ball(GF_ROCKET, dir, 250 + plev*3, 2);
2350                         o_ptr->timeout = 400;
2351                         break;
2352                 }
2353
2354                 case ACT_DISP_EVIL:
2355                 {
2356 #ifdef JP
2357                         msg_print("¿ÀÀ»¤ÊÊ·°Ïµ¤¤¬½¼Ëþ¤·¤¿...");
2358 #else
2359                         msg_print("It floods the area with goodness...");
2360 #endif
2361
2362                         dispel_evil(p_ptr->lev * 5);
2363                         o_ptr->timeout = randint0(300) + 300;
2364                         break;
2365                 }
2366
2367                 case ACT_DISP_GOOD:
2368                 {
2369 #ifdef JP
2370                         msg_print("¼Ù°­¤ÊÊ·°Ïµ¤¤¬½¼Ëþ¤·¤¿...");
2371 #else
2372                         msg_print("It floods the area with evil...");
2373 #endif
2374
2375                         dispel_good(p_ptr->lev * 5);
2376                         o_ptr->timeout = randint0(300) + 300;
2377                         break;
2378                 }
2379
2380                 case ACT_BA_MISS_3:
2381                 {
2382                         if (!get_aim_dir(&dir)) return FALSE;
2383 #ifdef JP
2384                         msg_print("¤¢¤Ê¤¿¤Ï¥¨¥ì¥á¥ó¥È¤Î¥Ö¥ì¥¹¤òÅǤ¤¤¿¡£");
2385 #else
2386                         msg_print("You breathe the elements.");
2387 #endif
2388
2389                         fire_ball(GF_MISSILE, dir, 300, 4);
2390                         o_ptr->timeout = 500;
2391                         break;
2392                 }
2393
2394                 /* Activate for other offensive action */
2395
2396                 case ACT_CONFUSE:
2397                 {
2398 #ifdef JP
2399                         msg_print("ÍÍ¡¹¤Ê¿§¤Î²Ð²Ö¤òȯ¤·¤Æ¤¤¤ë...");
2400 #else
2401                         msg_print("It glows in scintillating colours...");
2402 #endif
2403
2404                         if (!get_aim_dir(&dir)) return FALSE;
2405                         confuse_monster(dir, 20);
2406                         o_ptr->timeout = 15;
2407                         break;
2408                 }
2409
2410                 case ACT_SLEEP:
2411                 {
2412 #ifdef JP
2413                         msg_print("¿¼ÀÄ¿§¤Ëµ±¤¤¤Æ¤¤¤ë...");
2414 #else
2415                         msg_print("It glows deep blue...");
2416 #endif
2417
2418                         sleep_monsters_touch();
2419                         o_ptr->timeout = 55;
2420                         break;
2421                 }
2422
2423                 case ACT_QUAKE:
2424                 {
2425                         earthquake(py, px, 10);
2426                         o_ptr->timeout = 50;
2427                         break;
2428                 }
2429
2430                 case ACT_TERROR:
2431                 {
2432                         turn_monsters(40 + p_ptr->lev);
2433                         o_ptr->timeout = 3 * (p_ptr->lev + 10);
2434                         break;
2435                 }
2436
2437                 case ACT_TELE_AWAY:
2438                 {
2439                         if (!get_aim_dir(&dir)) return FALSE;
2440                         (void)fire_beam(GF_AWAY_ALL, dir, plev);
2441                         o_ptr->timeout = 200;
2442                         break;
2443                 }
2444
2445                 case ACT_BANISH_EVIL:
2446                 {
2447                         if (banish_evil(100))
2448                         {
2449 #ifdef JP
2450                                 msg_print("¥¢¡¼¥Æ¥£¥Õ¥¡¥¯¥È¤ÎÎϤ¬¼Ù°­¤òÂǤÁʧ¤Ã¤¿¡ª");
2451 #else
2452                                 msg_print("The power of the artifact banishes evil!");
2453 #endif
2454
2455                         }
2456                         o_ptr->timeout = 250 + randint1(250);
2457                         break;
2458                 }
2459
2460                 case ACT_GENOCIDE:
2461                 {
2462 #ifdef JP
2463                         msg_print("¿¼ÀÄ¿§¤Ëµ±¤¤¤Æ¤¤¤ë...");
2464 #else
2465                         msg_print("It glows deep blue...");
2466 #endif
2467
2468                         (void)symbol_genocide(200, TRUE);
2469                         o_ptr->timeout = 500;
2470                         break;
2471                 }
2472
2473                 case ACT_MASS_GENO:
2474                 {
2475 #ifdef JP
2476                         msg_print("¤Ò¤É¤¯±Ô¤¤²»¤¬Î®¤ì½Ð¤¿...");
2477 #else
2478                         msg_print("It lets out a long, shrill note...");
2479 #endif
2480
2481                         (void)mass_genocide(200, TRUE);
2482                         o_ptr->timeout = 1000;
2483                         break;
2484                 }
2485
2486                 /* Activate for summoning / charming */
2487
2488                 case ACT_CHARM_ANIMAL:
2489                 {
2490                         if (!get_aim_dir(&dir)) return FALSE;
2491                         (void)charm_animal(dir, plev);
2492                         o_ptr->timeout = 300;
2493                         break;
2494                 }
2495
2496                 case ACT_CHARM_UNDEAD:
2497                 {
2498                         if (!get_aim_dir(&dir)) return FALSE;
2499                         (void)control_one_undead(dir, plev);
2500                         o_ptr->timeout = 333;
2501                         break;
2502                 }
2503
2504                 case ACT_CHARM_OTHER:
2505                 {
2506                         if (!get_aim_dir(&dir)) return FALSE;
2507                         (void)charm_monster(dir, plev);
2508                         o_ptr->timeout = 400;
2509                         break;
2510                 }
2511
2512                 case ACT_CHARM_ANIMALS:
2513                 {
2514                         (void)charm_animals(plev * 2);
2515                         o_ptr->timeout = 500;
2516                         break;
2517                 }
2518
2519                 case ACT_CHARM_OTHERS:
2520                 {
2521                         charm_monsters(plev * 2);
2522                         o_ptr->timeout = 750;
2523                         break;
2524                 }
2525
2526                 case ACT_SUMMON_ANIMAL:
2527                 {
2528                         (void)summon_specific(-1, py, px, plev, SUMMON_ANIMAL_RANGER, (PM_ALLOW_GROUP | PM_FORCE_PET));
2529                         o_ptr->timeout = 200 + randint1(300);
2530                         break;
2531                 }
2532
2533                 case ACT_SUMMON_PHANTOM:
2534                 {
2535 #ifdef JP
2536                         msg_print("¸¸Îî¤ò¾¤´­¤·¤¿¡£");
2537 #else
2538                         msg_print("You summon a phantasmal servant.");
2539 #endif
2540
2541                         (void)summon_specific(-1, py, px, dun_level, SUMMON_PHANTOM, (PM_ALLOW_GROUP | PM_FORCE_PET));
2542                         o_ptr->timeout = 200 + randint1(200);
2543                         break;
2544                 }
2545
2546                 case ACT_SUMMON_ELEMENTAL:
2547                 {
2548                         bool pet = one_in_(3);
2549                         u32b mode = 0L;
2550
2551                         if (!(pet && (plev < 50))) mode |= PM_ALLOW_GROUP;
2552                         if (pet) mode |= PM_FORCE_PET;
2553                         else mode |= PM_NO_PET;
2554
2555                         if (summon_specific((pet ? -1 : 0), py, px, ((plev * 3) / 2), SUMMON_ELEMENTAL, mode))
2556                         {
2557 #ifdef JP
2558                                 msg_print("¥¨¥ì¥á¥ó¥¿¥ë¤¬¸½¤ì¤¿...");
2559 #else
2560                                 msg_print("An elemental materializes...");
2561 #endif
2562
2563
2564                                 if (pet)
2565 #ifdef JP
2566                                         msg_print("¤¢¤Ê¤¿¤ËÉþ½¾¤·¤Æ¤¤¤ë¤è¤¦¤À¡£");
2567 #else
2568                                         msg_print("It seems obedient to you.");
2569 #endif
2570
2571                                 else
2572 #ifdef JP
2573                                         msg_print("¤½¤ì¤ò¥³¥ó¥È¥í¡¼¥ë¤Ç¤­¤Ê¤«¤Ã¤¿¡ª");
2574 #else
2575                                         msg_print("You fail to control it!");
2576 #endif
2577
2578                         }
2579
2580                         o_ptr->timeout = 750;
2581                         break;
2582                 }
2583
2584                 case ACT_SUMMON_DEMON:
2585                 {
2586                         bool pet = one_in_(3);
2587                         u32b mode = 0L;
2588
2589                         if (!(pet && (plev < 50))) mode |= PM_ALLOW_GROUP;
2590                         if (pet) mode |= PM_FORCE_PET;
2591                         else mode |= PM_NO_PET;
2592
2593                         if (summon_specific((pet ? -1 : 0), py, px, ((plev * 3) / 2), SUMMON_DEMON, mode))
2594                         {
2595 #ifdef JP
2596                                 msg_print("ⲫ¤Î°­½­¤¬½¼Ëþ¤·¤¿¡£");
2597 #else
2598                                 msg_print("The area fills with a stench of sulphur and brimstone.");
2599 #endif
2600
2601                                 if (pet)
2602 #ifdef JP
2603                                         msg_print("¡Ö¤´ÍѤǤ´¤¶¤¤¤Þ¤¹¤«¡¢¤´¼ç¿ÍÍÍ¡×");
2604 #else
2605                                         msg_print("'What is thy bidding... Master?'");
2606 #endif
2607
2608                                 else
2609 #ifdef JP
2610                                         msg_print("¡ÖNON SERVIAM! Wretch! ¤ªÁ°¤Îº²¤òĺ¤¯¤¾¡ª¡×");
2611 #else
2612                                         msg_print("'NON SERVIAM! Wretch! I shall feast on thy mortal soul!'");
2613 #endif
2614
2615                         }
2616
2617                         o_ptr->timeout = 666 + randint1(333);
2618                         break;
2619                 }
2620
2621                 case ACT_SUMMON_UNDEAD:
2622                 {
2623                         bool pet = one_in_(3);
2624                         int type;
2625                         u32b mode = 0L;
2626
2627                         type = (plev > 47 ? SUMMON_HI_UNDEAD : SUMMON_UNDEAD);
2628
2629                         if (!pet || ((plev > 24) && one_in_(3))) mode |= PM_ALLOW_GROUP;
2630                         if (pet) mode |= PM_FORCE_PET;
2631                         else mode |= (PM_ALLOW_UNIQUE | PM_NO_PET);
2632
2633                         if (summon_specific((pet ? -1 : 0), py, px, ((plev * 3) / 2), type, mode))
2634                         {
2635 #ifdef JP
2636                                 msg_print("Î䤿¤¤É÷¤¬¤¢¤Ê¤¿¤Î¼þ¤ê¤Ë¿á¤­»Ï¤á¤¿¡£¤½¤ì¤ÏÉåÇÔ½­¤ò±¿¤ó¤Ç¤¤¤ë...");
2637 #else
2638                                 msg_print("Cold winds begin to blow around you, carrying with them the stench of decay...");
2639 #endif
2640
2641                                 if (pet)
2642 #ifdef JP
2643                                         msg_print("¸Å¤¨¤Î»à¤»¤ë¼Ô¶¦¤¬¤¢¤Ê¤¿¤Ë»Å¤¨¤ë¤¿¤áÅÚ¤«¤éᴤä¿¡ª");
2644 #else
2645                                         msg_print("Ancient, long-dead forms arise from the ground to serve you!");
2646 #endif
2647
2648                                 else
2649 #ifdef JP
2650                                         msg_print("»à¼Ô¤¬á´¤Ã¤¿¡£Ì²¤ê¤ò˸¤²¤ë¤¢¤Ê¤¿¤òȳ¤¹¤ë¤¿¤á¤Ë¡ª");
2651 #else
2652                                         msg_print("'The dead arise... to punish you for disturbing them!'");
2653 #endif
2654
2655                         }
2656
2657                         o_ptr->timeout = 666 + randint1(333);
2658                         break;
2659                 }
2660
2661                 /* Activate for healing */
2662
2663                 case ACT_CURE_LW:
2664                 {
2665                         (void)set_afraid(0);
2666                         (void)hp_player(30);
2667                         o_ptr->timeout = 10;
2668                         break;
2669                 }
2670
2671                 case ACT_CURE_MW:
2672                 {
2673 #ifdef JP
2674                         msg_print("¿¼»ç¿§¤Î¸÷¤òȯ¤·¤Æ¤¤¤ë...");
2675 #else
2676                         msg_print("It radiates deep purple...");
2677 #endif
2678
2679                         hp_player(damroll(4, 8));
2680                         (void)set_cut((p_ptr->cut / 2) - 50);
2681                         o_ptr->timeout = randint0(3) + 3;
2682                         break;
2683                 }
2684
2685                 case ACT_CURE_POISON:
2686                 {
2687 #ifdef JP
2688                         msg_print("¿¼ÀÄ¿§¤Ëµ±¤¤¤Æ¤¤¤ë...");
2689 #else
2690                         msg_print("It glows deep blue...");
2691 #endif
2692
2693                         (void)set_afraid(0);
2694                         (void)set_poisoned(0);
2695                         o_ptr->timeout = 5;
2696                         break;
2697                 }
2698
2699                 case ACT_REST_LIFE:
2700                 {
2701 #ifdef JP
2702                         msg_print("¿¼¹È¤Ëµ±¤¤¤Æ¤¤¤ë...");
2703 #else
2704                         msg_print("It glows a deep red...");
2705 #endif
2706
2707                         restore_level();
2708                         o_ptr->timeout = 450;
2709                         break;
2710                 }
2711
2712                 case ACT_REST_ALL:
2713                 {
2714 #ifdef JP
2715                         msg_print("Ç»Îп§¤Ëµ±¤¤¤Æ¤¤¤ë...");
2716 #else
2717                         msg_print("It glows a deep green...");
2718 #endif
2719
2720                         (void)do_res_stat(A_STR);
2721                         (void)do_res_stat(A_INT);
2722                         (void)do_res_stat(A_WIS);
2723                         (void)do_res_stat(A_DEX);
2724                         (void)do_res_stat(A_CON);
2725                         (void)do_res_stat(A_CHR);
2726                         (void)restore_level();
2727                         o_ptr->timeout = 750;
2728                         break;
2729                 }
2730
2731                 case ACT_CURE_700:
2732                 {
2733 #ifdef JP
2734                         msg_print("¿¼ÀÄ¿§¤Ëµ±¤¤¤Æ¤¤¤ë...");
2735 #else
2736                         msg_print("It glows deep blue...");
2737 #endif
2738
2739 #ifdef JP
2740                         msg_print("ÂÎÆâ¤ËÃȤ«¤¤¸ÝÆ°¤¬´¶¤¸¤é¤ì¤ë...");
2741 #else
2742                         msg_print("You feel a warm tingling inside...");
2743 #endif
2744
2745                         (void)hp_player(700);
2746                         (void)set_cut(0);
2747                         o_ptr->timeout = 250;
2748                         break;
2749                 }
2750
2751                 case ACT_CURE_1000:
2752                 {
2753 #ifdef JP
2754                         msg_print("Çò¤¯ÌÀ¤ë¤¯µ±¤¤¤Æ¤¤¤ë...");
2755 #else
2756                         msg_print("It glows a bright white...");
2757 #endif
2758
2759 #ifdef JP
2760                         msg_print("¤Ò¤¸¤ç¤¦¤Ëµ¤Ê¬¤¬¤è¤¤...");
2761 #else
2762                         msg_print("You feel much better...");
2763 #endif
2764
2765                         (void)hp_player(1000);
2766                         (void)set_cut(0);
2767                         o_ptr->timeout = 888;
2768                         break;
2769                 }
2770
2771                 /* Activate for timed effect */
2772
2773                 case ACT_ESP:
2774                 {
2775                         (void)set_tim_esp(randint1(30) + 25, FALSE);
2776                         o_ptr->timeout = 200;
2777                         break;
2778                 }
2779
2780                 case ACT_BERSERK:
2781                 {
2782                         (void)set_hero(randint1(50) + 50, FALSE);
2783                         (void)set_blessed(randint1(50) + 50, FALSE);
2784                         o_ptr->timeout = 100 + randint1(100);
2785                         break;
2786                 }
2787
2788                 case ACT_PROT_EVIL:
2789                 {
2790 #ifdef JP
2791                         msg_print("±Ô¤¤²»¤¬Î®¤ì½Ð¤¿...");
2792 #else
2793                         msg_print("It lets out a shrill wail...");
2794 #endif
2795
2796                         k = 3 * p_ptr->lev;
2797                         (void)set_protevil(randint1(25) + k, FALSE);
2798                         o_ptr->timeout = randint0(225) + 225;
2799                         break;
2800                 }
2801
2802                 case ACT_RESIST_ALL:
2803                 {
2804 #ifdef JP
2805                         msg_print("ÍÍ¡¹¤Ê¿§¤Ëµ±¤¤¤Æ¤¤¤ë...");
2806 #else
2807                         msg_print("It glows many colours...");
2808 #endif
2809
2810                         (void)set_oppose_acid(randint1(40) + 40, FALSE);
2811                         (void)set_oppose_elec(randint1(40) + 40, FALSE);
2812                         (void)set_oppose_fire(randint1(40) + 40, FALSE);
2813                         (void)set_oppose_cold(randint1(40) + 40, FALSE);
2814                         (void)set_oppose_pois(randint1(40) + 40, FALSE);
2815                         o_ptr->timeout = 200;
2816                         break;
2817                 }
2818
2819                 case ACT_SPEED:
2820                 {
2821 #ifdef JP
2822                         msg_print("ÌÀ¤ë¤¯Îп§¤Ëµ±¤¤¤Æ¤¤¤ë...");
2823 #else
2824                         msg_print("It glows bright green...");
2825 #endif
2826
2827                         (void)set_fast(randint1(20) + 20, FALSE);
2828                         o_ptr->timeout = 250;
2829                         break;
2830                 }
2831
2832                 case ACT_XTRA_SPEED:
2833                 {
2834 #ifdef JP
2835                         msg_print("ÌÀ¤ë¤¯µ±¤¤¤Æ¤¤¤ë...");
2836 #else
2837                         msg_print("It glows brightly...");
2838 #endif
2839
2840                         (void)set_fast(randint1(75) + 75, FALSE);
2841                         o_ptr->timeout = randint0(200) + 200;
2842                         break;
2843                 }
2844
2845                 case ACT_WRAITH:
2846                 {
2847                         set_wraith_form(randint1(plev / 2) + (plev / 2), FALSE);
2848                         o_ptr->timeout = 1000;
2849                         break;
2850                 }
2851
2852                 case ACT_INVULN:
2853                 {
2854                         (void)set_invuln(randint1(8) + 8, FALSE);
2855                         o_ptr->timeout = 1000;
2856                         break;
2857                 }
2858
2859                 /* Activate for general purpose effect (detection etc.) */
2860
2861                 case ACT_LIGHT:
2862                 {
2863 #ifdef JP
2864                         msg_print("À¡¤ó¤À¸÷¤¬¤¢¤Õ¤ì½Ð¤¿...");
2865 #else
2866                         msg_print("It wells with clear light...");
2867 #endif
2868
2869                         lite_area(damroll(2, 15), 3);
2870                         o_ptr->timeout = randint0(10) + 10;
2871                         break;
2872                 }
2873
2874                 case ACT_MAP_LIGHT:
2875                 {
2876 #ifdef JP
2877                         msg_print("âÁ¤·¤¯µ±¤¤¤¿...");
2878 #else
2879                         msg_print("It shines brightly...");
2880 #endif
2881
2882                         map_area(DETECT_RAD_MAP);
2883                         lite_area(damroll(2, 15), 3);
2884                         o_ptr->timeout = randint0(50) + 50;
2885                         break;
2886                 }
2887
2888                 case ACT_DETECT_ALL:
2889                 {
2890 #ifdef JP
2891                         msg_print("Çò¤¯ÌÀ¤ë¤¯µ±¤¤¤Æ¤¤¤ë...");
2892 #else
2893                         msg_print("It glows bright white...");
2894 #endif
2895
2896 #ifdef JP
2897                         msg_print("¿´¤Ë¥¤¥á¡¼¥¸¤¬É⤫¤ó¤Ç¤­¤¿...");
2898 #else
2899                         msg_print("An image forms in your mind...");
2900 #endif
2901
2902                         detect_all(DETECT_RAD_DEFAULT);
2903                         o_ptr->timeout = randint0(55) + 55;
2904                         break;
2905                 }
2906
2907                 case ACT_DETECT_XTRA:
2908                 {
2909 #ifdef JP
2910                         msg_print("ÌÀ¤ë¤¯µ±¤¤¤Æ¤¤¤ë...");
2911 #else
2912                         msg_print("It glows brightly...");
2913 #endif
2914
2915                         detect_all(DETECT_RAD_DEFAULT);
2916                         probing();
2917                         identify_fully(FALSE);
2918                         o_ptr->timeout = 1000;
2919                         break;
2920                 }
2921
2922                 case ACT_ID_FULL:
2923                 {
2924 #ifdef JP
2925                         msg_print("²«¿§¤¯µ±¤¤¤Æ¤¤¤ë...");
2926 #else
2927                         msg_print("It glows yellow...");
2928 #endif
2929
2930                         identify_fully(FALSE);
2931                         o_ptr->timeout = 750;
2932                         break;
2933                 }
2934
2935                 case ACT_ID_PLAIN:
2936                 {
2937                         if (!ident_spell(FALSE)) return FALSE;
2938                         o_ptr->timeout = 10;
2939                         break;
2940                 }
2941
2942                 case ACT_RUNE_EXPLO:
2943                 {
2944 #ifdef JP
2945                         msg_print("ÌÀ¤ë¤¤ÀÖ¿§¤Ëµ±¤¤¤Æ¤¤¤ë...");
2946 #else
2947                         msg_print("It glows bright red...");
2948 #endif
2949
2950                         explosive_rune();
2951                         o_ptr->timeout = 200;
2952                         break;
2953                 }
2954
2955                 case ACT_RUNE_PROT:
2956                 {
2957 #ifdef JP
2958                         msg_print("¥Ö¥ë¡¼¤ËÌÀ¤ë¤¯µ±¤¤¤Æ¤¤¤ë...");
2959 #else
2960                         msg_print("It glows light blue...");
2961 #endif
2962
2963                         warding_glyph();
2964                         o_ptr->timeout = 400;
2965                         break;
2966                 }
2967
2968                 case ACT_SATIATE:
2969                 {
2970                         (void)set_food(PY_FOOD_MAX - 1);
2971                         o_ptr->timeout = 200;
2972                         break;
2973                 }
2974
2975                 case ACT_DEST_DOOR:
2976                 {
2977 #ifdef JP
2978                         msg_print("ÌÀ¤ë¤¤ÀÖ¿§¤Ëµ±¤¤¤Æ¤¤¤ë...");
2979 #else
2980                         msg_print("It glows bright red...");
2981 #endif
2982
2983                         destroy_doors_touch();
2984                         o_ptr->timeout = 10;
2985                         break;
2986                 }
2987
2988                 case ACT_STONE_MUD:
2989                 {
2990 #ifdef JP
2991                         msg_print("¸ÝÆ°¤·¤Æ¤¤¤ë...");
2992 #else
2993                         msg_print("It pulsates...");
2994 #endif
2995
2996                         if (!get_aim_dir(&dir)) return FALSE;
2997                         wall_to_mud(dir);
2998                         o_ptr->timeout = 5;
2999                         break;
3000                 }
3001
3002                 case ACT_RECHARGE:
3003                 {
3004                         recharge(130);
3005                         o_ptr->timeout = 70;
3006                         break;
3007                 }
3008
3009                 case ACT_ALCHEMY:
3010                 {
3011 #ifdef JP
3012                         msg_print("ÌÀ¤ë¤¤²«¿§¤Ëµ±¤¤¤Æ¤¤¤ë...");
3013 #else
3014                         msg_print("It glows bright yellow...");
3015 #endif
3016
3017                         (void)alchemy();
3018                         o_ptr->timeout = 500;
3019                         break;
3020                 }
3021
3022                 case ACT_DIM_DOOR:
3023                 {
3024 #ifdef JP
3025                         msg_print("¼¡¸µ¤ÎÈ⤬³«¤¤¤¿¡£ÌÜŪÃϤòÁª¤ó¤Ç²¼¤µ¤¤¡£");
3026 #else
3027                         msg_print("You open a dimensional gate. Choose a destination.");
3028 #endif
3029
3030                         if (!dimension_door()) return FALSE;
3031                         o_ptr->timeout = 100;
3032                         break;
3033                 }
3034
3035
3036                 case ACT_TELEPORT:
3037                 {
3038 #ifdef JP
3039                         msg_print("¼þ¤ê¤Î¶õ´Ö¤¬ÏĤó¤Ç¤¤¤ë...");
3040 #else
3041                         msg_print("It twists space around you...");
3042 #endif
3043
3044                         teleport_player(100, FALSE);
3045                         o_ptr->timeout = 45;
3046                         break;
3047                 }
3048
3049                 case ACT_RECALL:
3050                 {
3051 #ifdef JP
3052                         msg_print("¤ä¤ï¤é¤«¤ÊÇò¿§¤Ëµ±¤¤¤Æ¤¤¤ë...");
3053 #else
3054                         msg_print("It glows soft white...");
3055 #endif
3056                         if (!word_of_recall()) return FALSE;
3057                         o_ptr->timeout = 200;
3058                         break;
3059                 }
3060
3061                 default:
3062                 {
3063 #ifdef JP
3064                         msg_format("Unknown activation effect: %d.", o_ptr->xtra2);
3065 #else
3066                         msg_format("Unknown activation effect: %d.", o_ptr->xtra2);
3067 #endif
3068
3069                         return FALSE;
3070                 }
3071         }
3072
3073         return TRUE;
3074 }
3075
3076
3077 void random_artifact_resistance(object_type * o_ptr, artifact_type *a_ptr)
3078 {
3079         bool give_resistance = FALSE, give_power = FALSE;
3080
3081         if (o_ptr->name1 == ART_TERROR) /* Terror Mask is for warriors... */
3082         {
3083                 if (p_ptr->pclass == CLASS_WARRIOR || p_ptr->pclass == CLASS_ARCHER || p_ptr->pclass == CLASS_CAVALRY || p_ptr->pclass == CLASS_BERSERKER)
3084                 {
3085                         give_power = TRUE;
3086                         give_resistance = TRUE;
3087                 }
3088                 else
3089                 {
3090                         add_flag(o_ptr->art_flags, TR_AGGRAVATE);
3091                         add_flag(o_ptr->art_flags, TR_TY_CURSE);
3092                         o_ptr->curse_flags |=
3093                             (TRC_CURSED | TRC_HEAVY_CURSE);
3094                         o_ptr->curse_flags |= get_curse(2, o_ptr);
3095                         return;
3096                 }
3097         }
3098         if (o_ptr->name1 == ART_MURAMASA)
3099         {
3100                 if (p_ptr->pclass != CLASS_SAMURAI)
3101                 {
3102                         add_flag(o_ptr->art_flags, TR_NO_MAGIC);
3103                         o_ptr->curse_flags |= (TRC_HEAVY_CURSE);
3104                 }
3105         }
3106
3107         if (o_ptr->name1 == ART_XIAOLONG)
3108         {
3109                 if (p_ptr->pclass == CLASS_MONK)
3110                         add_flag(o_ptr->art_flags, TR_BLOWS);
3111         }
3112
3113         if (o_ptr->name1 == ART_BLOOD)
3114         {
3115                 int dummy, i;
3116                 dummy = randint1(2)+randint1(2);
3117                 for (i = 0; i < dummy; i++)
3118                 {
3119                         int flag = randint0(19);
3120                         if (flag == 18) add_flag(o_ptr->art_flags, TR_SLAY_HUMAN);
3121                         else add_flag(o_ptr->art_flags, TR_CHAOTIC + flag);
3122                 }
3123                 dummy = randint1(2);
3124                 for (i = 0; i < dummy; i++)
3125                         one_resistance(o_ptr);
3126                 dummy = 2;
3127                 for (i = 0; i < dummy; i++)
3128                 {
3129                         int tmp = randint0(11);
3130                         if (tmp < 6) add_flag(o_ptr->art_flags, TR_STR + tmp);
3131                         else add_flag(o_ptr->art_flags, TR_STEALTH + tmp - 6);
3132                 }
3133         }
3134
3135         if (a_ptr->gen_flags & (TRG_XTRA_POWER)) give_power = TRUE;
3136         if (a_ptr->gen_flags & (TRG_XTRA_H_RES)) give_resistance = TRUE;
3137         if (a_ptr->gen_flags & (TRG_XTRA_RES_OR_POWER))
3138         {
3139                 /* Give a resistance OR a power */
3140                 if (one_in_(2)) give_resistance = TRUE;
3141                 else give_power = TRUE;
3142         }
3143
3144         if (give_power)
3145         {
3146                 one_ability(o_ptr);
3147         }
3148
3149         if (give_resistance)
3150         {
3151                 one_high_resistance(o_ptr);
3152         }
3153 }
3154
3155
3156 /*
3157  * Create the artifact of the specified number
3158  */
3159 void create_named_art(int a_idx, int y, int x)
3160 {
3161         object_type forge;
3162         object_type *q_ptr;
3163         int i;
3164
3165         artifact_type *a_ptr = &a_info[a_idx];
3166
3167         /* Get local object */
3168         q_ptr = &forge;
3169
3170         /* Ignore "empty" artifacts */
3171         if (!a_ptr->name) return;
3172
3173         /* Acquire the "kind" index */
3174         i = lookup_kind(a_ptr->tval, a_ptr->sval);
3175
3176         /* Oops */
3177         if (!i) return;
3178
3179         /* Create the artifact */
3180         object_prep(q_ptr, i);
3181
3182         /* Save the name */
3183         q_ptr->name1 = a_idx;
3184
3185         /* Extract the fields */
3186         q_ptr->pval = a_ptr->pval;
3187         q_ptr->ac = a_ptr->ac;
3188         q_ptr->dd = a_ptr->dd;
3189         q_ptr->ds = a_ptr->ds;
3190         q_ptr->to_a = a_ptr->to_a;
3191         q_ptr->to_h = a_ptr->to_h;
3192         q_ptr->to_d = a_ptr->to_d;
3193         q_ptr->weight = a_ptr->weight;
3194
3195         /* Hack -- extract the "cursed" flag */
3196         if (a_ptr->gen_flags & TRG_CURSED) q_ptr->curse_flags |= (TRC_CURSED);
3197         if (a_ptr->gen_flags & TRG_HEAVY_CURSE) q_ptr->curse_flags |= (TRC_HEAVY_CURSE);
3198         if (a_ptr->gen_flags & TRG_PERMA_CURSE) q_ptr->curse_flags |= (TRC_PERMA_CURSE);
3199         if (a_ptr->gen_flags & (TRG_RANDOM_CURSE0)) q_ptr->curse_flags |= get_curse(0, q_ptr);
3200         if (a_ptr->gen_flags & (TRG_RANDOM_CURSE1)) q_ptr->curse_flags |= get_curse(1, q_ptr);
3201         if (a_ptr->gen_flags & (TRG_RANDOM_CURSE2)) q_ptr->curse_flags |= get_curse(2, q_ptr);
3202
3203         random_artifact_resistance(q_ptr, a_ptr);
3204
3205         /* Drop the artifact from heaven */
3206         (void)drop_near(q_ptr, -1, y, x);
3207 }