OSDN Git Service

[Refactor] #37353 鏡使いのレイシャル「静水」を mirror_concentration() に分離。 / Separate Mirror master...
[hengband/hengband.git] / src / patron.c
1 #include "patron.h"
2
3 #include "angband.h"
4 #include "cmd-pet.h"
5 #include "object-curse.h"
6 #include "monsterrace-hook.h"
7 #include "objectkind-hook.h"
8 #include "spells-summon.h"
9 #include "mutation.h"
10 #include "artifact.h"
11 #include "player-status.h"
12
13 #ifdef JP
14 /*!
15  * @brief カオスパトロン名テーブル
16  */
17 const concptr chaos_patrons[MAX_PATRON] =
18 {
19         "スローター",
20         "マベロード",
21         "チャードロス",
22         "ハイオンハーン",
23         "キシオムバーグ",
24
25         "ピアレー",
26         "バラン",
27         "アリオッチ",
28         "イーカー",
29         "ナージャン",
30
31         "バロ",
32         "コーン",
33         "スラーネッシュ",
34         "ナーグル",
35         "ティーンチ",
36
37         "カイン"
38 };
39 #else
40 const concptr chaos_patrons[MAX_PATRON] =
41 {
42         "Slortar",
43         "Mabelode",
44         "Chardros",
45         "Hionhurn",
46         "Xiombarg",
47
48         "Pyaray",
49         "Balaan",
50         "Arioch",
51         "Eequor",
52         "Narjhan",
53
54         "Balo",
55         "Khorne",
56         "Slaanesh",
57         "Nurgle",
58         "Tzeentch",
59
60         "Khaine"
61 };
62 #endif
63
64
65 /*!
66  * @brief カオスパトロンの報酬能力値テーブル
67  */
68 const int chaos_stats[MAX_PATRON] =
69 {
70         A_CON,  /* Slortar */
71         A_CON,  /* Mabelode */
72         A_STR,  /* Chardros */
73         A_STR,  /* Hionhurn */
74         A_STR,  /* Xiombarg */
75
76         A_INT,  /* Pyaray */
77         A_STR,  /* Balaan */
78         A_INT,  /* Arioch */
79         A_CON,  /* Eequor */
80         A_CHR,  /* Narjhan */
81
82         -1,     /* Balo */
83         A_STR,  /* Khorne */
84         A_CHR,  /* Slaanesh */
85         A_CON,  /* Nurgle */
86         A_INT,  /* Tzeentch */
87
88         A_STR,  /* Khaine */
89 };
90
91 /*!
92  * @brief カオスパトロンの報酬テーブル
93  */
94 const int chaos_rewards[MAX_PATRON][20] =
95 {
96         /* Slortar the Old: */
97         {
98                 REW_WRATH, REW_CURSE_WP, REW_CURSE_AR, REW_RUIN_ABL, REW_LOSE_ABL,
99                 REW_IGNORE, REW_IGNORE, REW_IGNORE, REW_POLY_WND, REW_POLY_SLF,
100                 REW_POLY_SLF, REW_POLY_SLF, REW_GAIN_ABL, REW_GAIN_ABL, REW_GAIN_EXP,
101                 REW_GOOD_OBJ, REW_CHAOS_WP, REW_GREA_OBJ, REW_AUGM_ABL, REW_AUGM_ABL
102         },
103
104         /* Mabelode the Faceless: */
105         {
106                 REW_WRATH, REW_CURSE_WP, REW_CURSE_AR, REW_H_SUMMON, REW_SUMMON_M,
107                 REW_SUMMON_M, REW_IGNORE, REW_IGNORE, REW_POLY_WND, REW_POLY_WND,
108                 REW_POLY_SLF, REW_HEAL_FUL, REW_HEAL_FUL, REW_GAIN_ABL, REW_SER_UNDE,
109                 REW_CHAOS_WP, REW_GOOD_OBJ, REW_GOOD_OBJ, REW_GOOD_OBS, REW_GOOD_OBS
110         },
111
112         /* Chardros the Reaper: */
113         {
114                 REW_WRATH, REW_WRATH, REW_HURT_LOT, REW_PISS_OFF, REW_H_SUMMON,
115                 REW_SUMMON_M, REW_IGNORE, REW_IGNORE, REW_DESTRUCT, REW_SER_UNDE,
116                 REW_GENOCIDE, REW_MASS_GEN, REW_MASS_GEN, REW_DISPEL_C, REW_GOOD_OBJ,
117                 REW_CHAOS_WP, REW_GOOD_OBS, REW_GOOD_OBS, REW_AUGM_ABL, REW_AUGM_ABL
118         },
119
120         /* Hionhurn the Executioner: */
121         {
122                 REW_WRATH, REW_WRATH, REW_CURSE_WP, REW_CURSE_AR, REW_RUIN_ABL,
123                 REW_IGNORE, REW_IGNORE, REW_SER_UNDE, REW_DESTRUCT, REW_GENOCIDE,
124                 REW_MASS_GEN, REW_MASS_GEN, REW_HEAL_FUL, REW_GAIN_ABL, REW_GAIN_ABL,
125                 REW_CHAOS_WP, REW_GOOD_OBS, REW_GOOD_OBS, REW_AUGM_ABL, REW_AUGM_ABL
126         },
127
128         /* Xiombarg the Sword-Queen: */
129         {
130                 REW_TY_CURSE, REW_TY_CURSE, REW_PISS_OFF, REW_RUIN_ABL, REW_LOSE_ABL,
131                 REW_IGNORE, REW_POLY_SLF, REW_POLY_SLF, REW_POLY_WND, REW_POLY_WND,
132                 REW_GENOCIDE, REW_DISPEL_C, REW_GOOD_OBJ, REW_GOOD_OBJ, REW_SER_MONS,
133                 REW_GAIN_ABL, REW_CHAOS_WP, REW_GAIN_EXP, REW_AUGM_ABL, REW_GOOD_OBS
134         },
135
136
137         /* Pyaray the Tentacled Whisperer of Impossible Secretes: */
138         {
139                 REW_WRATH, REW_TY_CURSE, REW_PISS_OFF, REW_H_SUMMON, REW_H_SUMMON,
140                 REW_IGNORE, REW_IGNORE, REW_IGNORE, REW_POLY_WND, REW_POLY_SLF,
141                 REW_POLY_SLF, REW_SER_DEMO, REW_HEAL_FUL, REW_GAIN_ABL, REW_GAIN_ABL,
142                 REW_CHAOS_WP, REW_DO_HAVOC, REW_GOOD_OBJ, REW_GREA_OBJ, REW_GREA_OBS
143         },
144
145         /* Balaan the Grim: */
146         {
147                 REW_TY_CURSE, REW_HURT_LOT, REW_CURSE_WP, REW_CURSE_AR, REW_RUIN_ABL,
148                 REW_SUMMON_M, REW_LOSE_EXP, REW_POLY_SLF, REW_POLY_SLF, REW_POLY_WND,
149                 REW_SER_UNDE, REW_HEAL_FUL, REW_HEAL_FUL, REW_GAIN_EXP, REW_GAIN_EXP,
150                 REW_CHAOS_WP, REW_GOOD_OBJ, REW_GOOD_OBS, REW_GREA_OBS, REW_AUGM_ABL
151         },
152
153         /* Arioch, Duke of Hell: */
154         {
155                 REW_WRATH, REW_PISS_OFF, REW_RUIN_ABL, REW_LOSE_EXP, REW_H_SUMMON,
156                 REW_IGNORE, REW_IGNORE, REW_IGNORE, REW_IGNORE, REW_POLY_SLF,
157                 REW_POLY_SLF, REW_MASS_GEN, REW_SER_DEMO, REW_HEAL_FUL, REW_CHAOS_WP,
158                 REW_CHAOS_WP, REW_GOOD_OBJ, REW_GAIN_EXP, REW_GREA_OBJ, REW_AUGM_ABL
159         },
160
161         /* Eequor, Blue Lady of Dismay: */
162         {
163                 REW_WRATH, REW_TY_CURSE, REW_PISS_OFF, REW_CURSE_WP, REW_RUIN_ABL,
164                 REW_IGNORE, REW_IGNORE, REW_POLY_SLF, REW_POLY_SLF, REW_POLY_WND,
165                 REW_GOOD_OBJ, REW_GOOD_OBJ, REW_SER_MONS, REW_HEAL_FUL, REW_GAIN_EXP,
166                 REW_GAIN_ABL, REW_CHAOS_WP, REW_GOOD_OBS, REW_GREA_OBJ, REW_AUGM_ABL
167         },
168
169         /* Narjhan, Lord of Beggars: */
170         {
171                 REW_WRATH, REW_CURSE_AR, REW_CURSE_WP, REW_CURSE_WP, REW_CURSE_AR,
172                 REW_IGNORE, REW_IGNORE, REW_IGNORE, REW_POLY_SLF, REW_POLY_SLF,
173                 REW_POLY_WND, REW_HEAL_FUL, REW_HEAL_FUL, REW_GAIN_EXP, REW_AUGM_ABL,
174                 REW_GOOD_OBJ, REW_GOOD_OBJ, REW_CHAOS_WP, REW_GREA_OBJ, REW_GREA_OBS
175         },
176
177         /* Balo the Jester: */
178         {
179                 REW_WRATH, REW_SER_DEMO, REW_CURSE_WP, REW_CURSE_AR, REW_LOSE_EXP,
180                 REW_GAIN_ABL, REW_LOSE_ABL, REW_POLY_WND, REW_POLY_SLF, REW_IGNORE,
181                 REW_DESTRUCT, REW_MASS_GEN, REW_CHAOS_WP, REW_GREA_OBJ, REW_HURT_LOT,
182                 REW_AUGM_ABL, REW_RUIN_ABL, REW_H_SUMMON, REW_GREA_OBS, REW_AUGM_ABL
183         },
184
185         /* Khorne the Bloodgod: */
186         {
187                 REW_WRATH, REW_HURT_LOT, REW_HURT_LOT, REW_H_SUMMON, REW_H_SUMMON,
188                 REW_IGNORE, REW_IGNORE, REW_IGNORE, REW_SER_MONS, REW_SER_DEMO,
189                 REW_POLY_SLF, REW_POLY_WND, REW_HEAL_FUL, REW_GOOD_OBJ, REW_GOOD_OBJ,
190                 REW_CHAOS_WP, REW_GOOD_OBS, REW_GOOD_OBS, REW_GREA_OBJ, REW_GREA_OBS
191         },
192
193         /* Slaanesh: */
194         {
195                 REW_WRATH, REW_PISS_OFF, REW_PISS_OFF, REW_RUIN_ABL, REW_LOSE_ABL,
196                 REW_LOSE_EXP, REW_IGNORE, REW_IGNORE, REW_POLY_WND, REW_SER_DEMO,
197                 REW_POLY_SLF, REW_HEAL_FUL, REW_HEAL_FUL, REW_GOOD_OBJ, REW_GAIN_EXP,
198                 REW_GAIN_EXP, REW_CHAOS_WP, REW_GAIN_ABL, REW_GREA_OBJ, REW_AUGM_ABL
199         },
200
201         /* Nurgle: */
202         {
203                 REW_WRATH, REW_PISS_OFF, REW_HURT_LOT, REW_RUIN_ABL, REW_LOSE_ABL,
204                 REW_LOSE_EXP, REW_IGNORE, REW_IGNORE, REW_IGNORE, REW_POLY_SLF,
205                 REW_POLY_SLF, REW_POLY_WND, REW_HEAL_FUL, REW_GOOD_OBJ, REW_GAIN_ABL,
206                 REW_GAIN_ABL, REW_SER_UNDE, REW_CHAOS_WP, REW_GREA_OBJ, REW_AUGM_ABL
207         },
208
209         /* Tzeentch: */
210         {
211                 REW_WRATH, REW_CURSE_WP, REW_CURSE_AR, REW_RUIN_ABL, REW_LOSE_ABL,
212                 REW_LOSE_EXP, REW_IGNORE, REW_POLY_SLF, REW_POLY_SLF, REW_POLY_SLF,
213                 REW_POLY_SLF, REW_POLY_WND, REW_HEAL_FUL, REW_CHAOS_WP, REW_GREA_OBJ,
214                 REW_GAIN_ABL, REW_GAIN_ABL, REW_GAIN_EXP, REW_GAIN_EXP, REW_AUGM_ABL
215         },
216
217         /* Khaine: */
218         {
219                 REW_WRATH, REW_HURT_LOT, REW_PISS_OFF, REW_LOSE_ABL, REW_LOSE_EXP,
220                 REW_IGNORE,   REW_IGNORE,   REW_DISPEL_C, REW_DO_HAVOC, REW_DO_HAVOC,
221                 REW_POLY_SLF, REW_POLY_SLF, REW_GAIN_EXP, REW_GAIN_ABL, REW_GAIN_ABL,
222                 REW_SER_MONS, REW_GOOD_OBJ, REW_CHAOS_WP, REW_GREA_OBJ, REW_GOOD_OBS
223         }
224 };
225
226
227 void gain_level_reward(int chosen_reward)
228 {
229         object_type *q_ptr;
230         object_type forge;
231         char        wrath_reason[32] = "";
232         int         nasty_chance = 6;
233         OBJECT_TYPE_VALUE dummy = 0;
234         OBJECT_SUBTYPE_VALUE dummy2 = 0;
235         int         type, effect;
236         concptr        reward = NULL;
237         GAME_TEXT o_name[MAX_NLEN];
238
239         int count = 0;
240
241         if (!chosen_reward)
242         {
243                 if (multi_rew) return;
244                 else multi_rew = TRUE;
245         }
246
247
248         if (p_ptr->lev == 13) nasty_chance = 2;
249         else if (!(p_ptr->lev % 13)) nasty_chance = 3;
250         else if (!(p_ptr->lev % 14)) nasty_chance = 12;
251
252         if (one_in_(nasty_chance))
253                 type = randint1(20); /* Allow the 'nasty' effects */
254         else
255                 type = randint1(15) + 5; /* Or disallow them */
256
257         if (type < 1) type = 1;
258         if (type > 20) type = 20;
259         type--;
260
261
262         sprintf(wrath_reason, _("%sの怒り", "the Wrath of %s"), chaos_patrons[p_ptr->chaos_patron]);
263
264         effect = chaos_rewards[p_ptr->chaos_patron][type];
265
266         if (one_in_(6) && !chosen_reward)
267         {
268                 msg_format(_("%^sは褒美としてあなたを突然変異させた。", "%^s rewards you with a mutation!"), chaos_patrons[p_ptr->chaos_patron]);
269                 (void)gain_random_mutation(0);
270                 reward = _("変異した。", "mutation");
271         }
272         else
273         {
274                 switch (chosen_reward ? chosen_reward : effect)
275                 {
276
277                 case REW_POLY_SLF:
278
279                         msg_format(_("%sの声が響き渡った:", "The voice of %s booms out:"), chaos_patrons[p_ptr->chaos_patron]);
280                         msg_print(_("「汝、新たなる姿を必要とせり!」", "'Thou needst a new form, mortal!'"));
281
282                         do_poly_self();
283                         reward = _("変異した。", "polymorphing");
284                         break;
285
286                 case REW_GAIN_EXP:
287
288                         msg_format(_("%sの声が響き渡った:", "The voice of %s booms out:"), chaos_patrons[p_ptr->chaos_patron]);
289                         msg_print(_("「汝は良く行いたり!続けよ!」", "'Well done, mortal! Lead on!'"));
290
291                         if (p_ptr->prace == RACE_ANDROID)
292                         {
293                                 msg_print(_("しかし何も起こらなかった。", "But, nothing happen."));
294                         }
295                         else if (p_ptr->exp < PY_MAX_EXP)
296                         {
297                                 s32b ee = (p_ptr->exp / 2) + 10;
298                                 if (ee > 100000L) ee = 100000L;
299                                 msg_print(_("更に経験を積んだような気がする。", "You feel more experienced."));
300
301                                 gain_exp(ee);
302                                 reward = _("経験値を得た", "experience");
303                         }
304                         break;
305
306                 case REW_LOSE_EXP:
307
308                         msg_format(_("%sの声が響き渡った:", "The voice of %s booms out:"), chaos_patrons[p_ptr->chaos_patron]);
309                         msg_print(_("「下僕よ、汝それに値せず。」", "'Thou didst not deserve that, slave.'"));
310
311                         if (p_ptr->prace == RACE_ANDROID)
312                         {
313                                 msg_print(_("しかし何も起こらなかった。", "But, nothing happen."));
314                         }
315                         else
316                         {
317                                 lose_exp(p_ptr->exp / 6);
318                                 reward = _("経験値を失った。", "losing experience");
319                         }
320                         break;
321
322                 case REW_GOOD_OBJ:
323 #ifdef JP
324                         msg_format("%sの声がささやいた:",
325                                 chaos_patrons[p_ptr->chaos_patron]);
326 #else
327                         msg_format("The voice of %s whispers:",
328                                 chaos_patrons[p_ptr->chaos_patron]);
329 #endif
330
331                         msg_print(_("「我が与えし物を賢明に使うべし。」", "'Use my gift wisely.'"));
332
333                         acquirement(p_ptr->y, p_ptr->x, 1, FALSE, FALSE, FALSE);
334                         reward = _("上質なアイテムを手に入れた。", "a good item");
335                         break;
336
337                 case REW_GREA_OBJ:
338
339                         msg_format(_("%sの声が響き渡った:", "The voice of %s booms out:"), chaos_patrons[p_ptr->chaos_patron]);
340                         msg_print(_("「我が与えし物を賢明に使うべし。」", "'Use my gift wisely.'"));
341
342                         acquirement(p_ptr->y, p_ptr->x, 1, TRUE, FALSE, FALSE);
343                         reward = _("高級品のアイテムを手に入れた。", "an excellent item");
344                         break;
345
346                 case REW_CHAOS_WP:
347
348                         msg_format(_("%sの声が響き渡った:", "The voice of %s booms out:"), chaos_patrons[p_ptr->chaos_patron]);
349                         msg_print(_("「汝の行いは貴き剣に値せり。」", "'Thy deed hath earned thee a worthy blade.'"));
350                         q_ptr = &forge;
351                         dummy = TV_SWORD;
352                         switch (randint1(p_ptr->lev))
353                         {
354                         case 0: case 1:
355                                 dummy2 = SV_DAGGER;
356                                 break;
357                         case 2: case 3:
358                                 dummy2 = SV_MAIN_GAUCHE;
359                                 break;
360                         case 4:
361                                 dummy2 = SV_TANTO;
362                                 break;
363                         case 5: case 6:
364                                 dummy2 = SV_RAPIER;
365                                 break;
366                         case 7: case 8:
367                                 dummy2 = SV_SMALL_SWORD;
368                                 break;
369                         case 9: case 10:
370                                 dummy2 = SV_BASILLARD;
371                                 break;
372                         case 11: case 12: case 13:
373                                 dummy2 = SV_SHORT_SWORD;
374                                 break;
375                         case 14: case 15:
376                                 dummy2 = SV_SABRE;
377                                 break;
378                         case 16: case 17:
379                                 dummy2 = SV_CUTLASS;
380                                 break;
381                         case 18:
382                                 dummy2 = SV_WAKIZASHI;
383                                 break;
384                         case 19:
385                                 dummy2 = SV_KHOPESH;
386                                 break;
387                         case 20:
388                                 dummy2 = SV_TULWAR;
389                                 break;
390                         case 21:
391                                 dummy2 = SV_BROAD_SWORD;
392                                 break;
393                         case 22: case 23:
394                                 dummy2 = SV_LONG_SWORD;
395                                 break;
396                         case 24: case 25:
397                                 dummy2 = SV_SCIMITAR;
398                                 break;
399                         case 26:
400                                 dummy2 = SV_NINJATO;
401                                 break;
402                         case 27:
403                                 dummy2 = SV_KATANA;
404                                 break;
405                         case 28: case 29:
406                                 dummy2 = SV_BASTARD_SWORD;
407                                 break;
408                         case 30:
409                                 dummy2 = SV_GREAT_SCIMITAR;
410                                 break;
411                         case 31:
412                                 dummy2 = SV_CLAYMORE;
413                                 break;
414                         case 32:
415                                 dummy2 = SV_ESPADON;
416                                 break;
417                         case 33:
418                                 dummy2 = SV_TWO_HANDED_SWORD;
419                                 break;
420                         case 34:
421                                 dummy2 = SV_FLAMBERGE;
422                                 break;
423                         case 35:
424                                 dummy2 = SV_NO_DACHI;
425                                 break;
426                         case 36:
427                                 dummy2 = SV_EXECUTIONERS_SWORD;
428                                 break;
429                         case 37:
430                                 dummy2 = SV_ZWEIHANDER;
431                                 break;
432                         case 38:
433                                 dummy2 = SV_HAYABUSA;
434                                 break;
435                         default:
436                                 dummy2 = SV_BLADE_OF_CHAOS;
437                         }
438
439                         object_prep(q_ptr, lookup_kind(dummy, dummy2));
440                         q_ptr->to_h = 3 + randint1(dun_level) % 10;
441                         q_ptr->to_d = 3 + randint1(dun_level) % 10;
442                         one_resistance(q_ptr);
443                         q_ptr->name2 = EGO_CHAOTIC;
444                         (void)drop_near(q_ptr, -1, p_ptr->y, p_ptr->x);
445                         reward = _("(混沌)の武器を手に入れた。", "chaos weapon");
446                         break;
447
448                 case REW_GOOD_OBS:
449
450                         msg_format(_("%sの声が響き渡った:", "The voice of %s booms out:"), chaos_patrons[p_ptr->chaos_patron]);
451                         msg_print(_("「汝の行いは貴き報いに値せり。」", "'Thy deed hath earned thee a worthy reward.'"));
452
453                         acquirement(p_ptr->y, p_ptr->x, randint1(2) + 1, FALSE, FALSE, FALSE);
454                         reward = _("上質なアイテムを手に入れた。", "good items");
455                         break;
456
457                 case REW_GREA_OBS:
458
459                         msg_format(_("%sの声が響き渡った:", "The voice of %s booms out:"), chaos_patrons[p_ptr->chaos_patron]);
460                         msg_print(_("「下僕よ、汝の献身への我が惜しみ無き報いを見るがよい。」", "'Behold, mortal, how generously I reward thy loyalty.'"));
461
462                         acquirement(p_ptr->y, p_ptr->x, randint1(2) + 1, TRUE, FALSE, FALSE);
463                         reward = _("高級品のアイテムを手に入れた。", "excellent items");
464                         break;
465
466                 case REW_TY_CURSE:
467 #ifdef JP
468                         msg_format("%sの声が轟き渡った:", chaos_patrons[p_ptr->chaos_patron]);
469 #else
470                         msg_format("The voice of %s thunders:", chaos_patrons[p_ptr->chaos_patron]);
471 #endif
472
473                         msg_print(_("「下僕よ、汝傲慢なり。」", "'Thou art growing arrogant, mortal.'"));
474
475                         (void)activate_ty_curse(FALSE, &count);
476                         reward = _("禍々しい呪いをかけられた。", "cursing");
477                         break;
478
479                 case REW_SUMMON_M:
480
481                         msg_format(_("%sの声が響き渡った:", "The voice of %s booms out:"), chaos_patrons[p_ptr->chaos_patron]);
482                         msg_print(_("「我が下僕たちよ、かの傲慢なる者を倒すべし!」", "'My pets, destroy the arrogant mortal!'"));
483
484                         for (dummy = 0; dummy < randint1(5) + 1; dummy++)
485                         {
486                                 (void)summon_specific(0, p_ptr->y, p_ptr->x, dun_level, 0, (PM_ALLOW_GROUP | PM_ALLOW_UNIQUE | PM_NO_PET), '\0');
487                         }
488                         reward = _("モンスターを召喚された。", "summoning hostile monsters");
489                         break;
490
491
492                 case REW_H_SUMMON:
493
494                         msg_format(_("%sの声が響き渡った:", "The voice of %s booms out:"), chaos_patrons[p_ptr->chaos_patron]);
495                         msg_print(_("「汝、より強き敵を必要とせり!」", "'Thou needst worthier opponents!'"));
496
497                         activate_hi_summon(p_ptr->y, p_ptr->x, FALSE);
498                         reward = _("モンスターを召喚された。", "summoning many hostile monsters");
499                         break;
500
501
502                 case REW_DO_HAVOC:
503 #ifdef JP
504                         msg_format("%sの声が響き渡った:",
505                                 chaos_patrons[p_ptr->chaos_patron]);
506 #else
507                         msg_format("The voice of %s booms out:",
508                                 chaos_patrons[p_ptr->chaos_patron]);
509 #endif
510
511                         msg_print(_("「死と破壊こそ我が喜びなり!」", "'Death and destruction! This pleaseth me!'"));
512
513                         call_chaos();
514                         reward = _("カオスの力が渦巻いた。", "calling chaos");
515                         break;
516
517
518                 case REW_GAIN_ABL:
519 #ifdef JP
520                         msg_format("%sの声が鳴り響いた:",
521                                 chaos_patrons[p_ptr->chaos_patron]);
522 #else
523                         msg_format("The voice of %s rings out:",
524                                 chaos_patrons[p_ptr->chaos_patron]);
525 #endif
526
527                         msg_print(_("「留まるのだ、下僕よ。余が汝の肉体を鍛えん。」", "'Stay, mortal, and let me mold thee.'"));
528
529                         if (one_in_(3) && !(chaos_stats[p_ptr->chaos_patron] < 0))
530                                 do_inc_stat(chaos_stats[p_ptr->chaos_patron]);
531                         else
532                                 do_inc_stat(randint0(6));
533                         reward = _("能力値が上がった。", "increasing a stat");
534                         break;
535
536
537                 case REW_LOSE_ABL:
538 #ifdef JP
539                         msg_format("%sの声が響き渡った:",
540                                 chaos_patrons[p_ptr->chaos_patron]);
541 #else
542                         msg_format("The voice of %s booms out:",
543                                 chaos_patrons[p_ptr->chaos_patron]);
544 #endif
545
546                         msg_print(_("「下僕よ、余は汝に飽みたり。」", "'I grow tired of thee, mortal.'"));
547
548                         if (one_in_(3) && !(chaos_stats[p_ptr->chaos_patron] < 0))
549                                 do_dec_stat(chaos_stats[p_ptr->chaos_patron]);
550                         else
551                                 (void)do_dec_stat(randint0(6));
552                         reward = _("能力値が下がった。", "decreasing a stat");
553                         break;
554
555
556                 case REW_RUIN_ABL:
557
558 #ifdef JP
559                         msg_format("%sの声が轟き渡った:",
560                                 chaos_patrons[p_ptr->chaos_patron]);
561 #else
562                         msg_format("The voice of %s thunders:",
563                                 chaos_patrons[p_ptr->chaos_patron]);
564 #endif
565
566                         msg_print(_("「汝、謙虚たることを学ぶべし!」", "'Thou needst a lesson in humility, mortal!'"));
567                         msg_print(_("あなたは以前より弱くなった!", "You feel less powerful!"));
568
569                         for (dummy = 0; dummy < A_MAX; dummy++)
570                         {
571                                 (void)dec_stat(dummy, 10 + randint1(15), TRUE);
572                         }
573                         reward = _("全能力値が下がった。", "decreasing all stats");
574                         break;
575
576                 case REW_POLY_WND:
577
578                         msg_format(_("%sの力が触れるのを感じた。", "You feel the power of %s touch you."),
579                                 chaos_patrons[p_ptr->chaos_patron]);
580                         do_poly_wounds();
581                         reward = _("傷が変化した。", "polymorphing wounds");
582                         break;
583
584                 case REW_AUGM_ABL:
585
586                         msg_format(_("%sの声が響き渡った:", "The voice of %s booms out:"), chaos_patrons[p_ptr->chaos_patron]);
587
588                         msg_print(_("「我がささやかなる賜物を受けとるがよい!」", "'Receive this modest gift from me!'"));
589
590                         for (dummy = 0; dummy < A_MAX; dummy++)
591                         {
592                                 (void)do_inc_stat(dummy);
593                         }
594                         reward = _("全能力値が上がった。", "increasing all stats");
595                         break;
596
597                 case REW_HURT_LOT:
598
599                         msg_format(_("%sの声が響き渡った:", "The voice of %s booms out:"), chaos_patrons[p_ptr->chaos_patron]);
600                         msg_print(_("「苦しむがよい、無能な愚か者よ!」", "'Suffer, pathetic fool!'"));
601
602                         fire_ball(GF_DISINTEGRATE, 0, p_ptr->lev * 4, 4);
603                         take_hit(DAMAGE_NOESCAPE, p_ptr->lev * 4, wrath_reason, -1);
604                         reward = _("分解の球が発生した。", "generating disintegration ball");
605                         break;
606
607                 case REW_HEAL_FUL:
608
609                         msg_format(_("%sの声が響き渡った:", "The voice of %s booms out:"), chaos_patrons[p_ptr->chaos_patron]);
610                         (void)restore_level();
611                         (void)restore_all_status();
612                         (void)true_healing(5000);
613                         reward = _("体力が回復した。", "healing");
614                         break;
615
616                 case REW_CURSE_WP:
617
618                         if (!has_melee_weapon(INVEN_RARM) && !has_melee_weapon(INVEN_LARM)) break;
619                         msg_format(_("%sの声が響き渡った:", "The voice of %s booms out:"), chaos_patrons[p_ptr->chaos_patron]);
620                         msg_print(_("「汝、武器に頼ることなかれ。」", "'Thou reliest too much on thy weapon.'"));
621
622                         dummy = INVEN_RARM;
623                         if (has_melee_weapon(INVEN_LARM))
624                         {
625                                 dummy = INVEN_LARM;
626                                 if (has_melee_weapon(INVEN_RARM) && one_in_(2)) dummy = INVEN_RARM;
627                         }
628                         object_desc(o_name, &inventory[dummy], OD_NAME_ONLY);
629                         (void)curse_weapon(FALSE, dummy);
630                         reward = format(_("%sが破壊された。", "destroying %s"), o_name);
631                         break;
632
633                 case REW_CURSE_AR:
634
635                         if (!inventory[INVEN_BODY].k_idx) break;
636                         msg_format(_("%sの声が響き渡った:", "The voice of %s booms out:"), chaos_patrons[p_ptr->chaos_patron]);
637                         msg_print(_("「汝、防具に頼ることなかれ。」", "'Thou reliest too much on thine equipment.'"));
638
639                         object_desc(o_name, &inventory[INVEN_BODY], OD_NAME_ONLY);
640                         (void)curse_armor();
641                         reward = format(_("%sが破壊された。", "destroying %s"), o_name);
642                         break;
643                 case REW_PISS_OFF:
644
645                         msg_format(_("%sの声がささやいた:", "The voice of %s whispers:"), chaos_patrons[p_ptr->chaos_patron]);
646                         msg_print(_("「我を怒りしめた罪を償うべし。」", "'Now thou shalt pay for annoying me.'"));
647
648                         switch (randint1(4))
649                         {
650                         case 1:
651                                 (void)activate_ty_curse(FALSE, &count);
652                                 reward = _("禍々しい呪いをかけられた。", "cursing");
653                                 break;
654                         case 2:
655                                 activate_hi_summon(p_ptr->y, p_ptr->x, FALSE);
656                                 reward = _("モンスターを召喚された。", "summoning hostile monsters");
657                                 break;
658                         case 3:
659                                 if (one_in_(2))
660                                 {
661                                         if (!has_melee_weapon(INVEN_RARM) && !has_melee_weapon(INVEN_LARM)) break;
662                                         dummy = INVEN_RARM;
663                                         if (has_melee_weapon(INVEN_LARM))
664                                         {
665                                                 dummy = INVEN_LARM;
666                                                 if (has_melee_weapon(INVEN_RARM) && one_in_(2)) dummy = INVEN_RARM;
667                                         }
668                                         object_desc(o_name, &inventory[dummy], OD_NAME_ONLY);
669                                         (void)curse_weapon(FALSE, dummy);
670                                         reward = format(_("%sが破壊された。", "destroying %s"), o_name);
671                                 }
672                                 else
673                                 {
674                                         if (!inventory[INVEN_BODY].k_idx) break;
675                                         object_desc(o_name, &inventory[INVEN_BODY], OD_NAME_ONLY);
676                                         (void)curse_armor();
677                                         reward = format(_("%sが破壊された。", "destroying %s"), o_name);
678                                 }
679                                 break;
680                         default:
681                                 for (dummy = 0; dummy < A_MAX; dummy++)
682                                 {
683                                         (void)dec_stat(dummy, 10 + randint1(15), TRUE);
684                                 }
685                                 reward = _("全能力値が下がった。", "decreasing all stats");
686                                 break;
687                         }
688                         break;
689
690                 case REW_WRATH:
691
692                         msg_format(_("%sの声が轟き渡った:", "The voice of %s thunders:"), chaos_patrons[p_ptr->chaos_patron]);
693                         msg_print(_("「死ぬがよい、下僕よ!」", "'Die, mortal!'"));
694
695                         take_hit(DAMAGE_LOSELIFE, p_ptr->lev * 4, wrath_reason, -1);
696                         for (dummy = 0; dummy < A_MAX; dummy++)
697                         {
698                                 (void)dec_stat(dummy, 10 + randint1(15), FALSE);
699                         }
700                         activate_hi_summon(p_ptr->y, p_ptr->x, FALSE);
701                         (void)activate_ty_curse(FALSE, &count);
702                         if (one_in_(2))
703                         {
704                                 dummy = 0;
705
706                                 if (has_melee_weapon(INVEN_RARM))
707                                 {
708                                         dummy = INVEN_RARM;
709                                         if (has_melee_weapon(INVEN_LARM) && one_in_(2)) dummy = INVEN_LARM;
710                                 }
711                                 else if (has_melee_weapon(INVEN_LARM)) dummy = INVEN_LARM;
712
713                                 if (dummy) (void)curse_weapon(FALSE, dummy);
714                         }
715                         if (one_in_(2)) (void)curse_armor();
716                         break;
717
718                 case REW_DESTRUCT:
719
720                         msg_format(_("%sの声が響き渡った:", "The voice of %s booms out:"), chaos_patrons[p_ptr->chaos_patron]);
721                         msg_print(_("「死と破壊こそ我が喜びなり!」", "'Death and destruction! This pleaseth me!'"));
722
723                         (void)destroy_area(p_ptr->y, p_ptr->x, 25, FALSE);
724                         reward = _("ダンジョンが*破壊*された。", "*destruct*ing dungeon");
725                         break;
726
727                 case REW_GENOCIDE:
728
729                         msg_format(_("%sの声が響き渡った:", "The voice of %s booms out:"), chaos_patrons[p_ptr->chaos_patron]);
730                         msg_print(_("「我、汝の敵を抹殺せん!」", "'Let me relieve thee of thine oppressors!'"));
731                         (void)symbol_genocide(0, FALSE);
732                         reward = _("モンスターが抹殺された。", "genociding monsters");
733                         break;
734
735                 case REW_MASS_GEN:
736
737                         msg_format(_("%sの声が響き渡った:", "The voice of %s booms out:"), chaos_patrons[p_ptr->chaos_patron]);
738                         msg_print(_("「我、汝の敵を抹殺せん!」", "'Let me relieve thee of thine oppressors!'"));
739
740                         (void)mass_genocide(0, FALSE);
741                         reward = _("モンスターが抹殺された。", "genociding nearby monsters");
742                         break;
743
744                 case REW_DISPEL_C:
745
746                         msg_format(_("%sの力が敵を攻撃するのを感じた!", "You can feel the power of %s assault your enemies!"), chaos_patrons[p_ptr->chaos_patron]);
747                         (void)dispel_monsters(p_ptr->lev * 4);
748                         break;
749
750                 case REW_IGNORE:
751
752                         msg_format(_("%sはあなたを無視した。", "%s ignores you."), chaos_patrons[p_ptr->chaos_patron]);
753                         break;
754
755                 case REW_SER_DEMO:
756
757                         msg_format(_("%sは褒美として悪魔の使いをよこした!", "%s rewards you with a demonic servant!"), chaos_patrons[p_ptr->chaos_patron]);
758
759                         if (!summon_specific(-1, p_ptr->y, p_ptr->x, dun_level, SUMMON_DEMON, PM_FORCE_PET, '\0'))
760                                 msg_print(_("何も現れなかった...", "Nobody ever turns up..."));
761                         else
762                                 reward = _("悪魔がペットになった。", "a demonic servant");
763
764                         break;
765
766                 case REW_SER_MONS:
767                         msg_format(_("%sは褒美として使いをよこした!", "%s rewards you with a servant!"), chaos_patrons[p_ptr->chaos_patron]);
768
769                         if (!summon_specific(-1, p_ptr->y, p_ptr->x, dun_level, 0, PM_FORCE_PET, '\0'))
770                                 msg_print(_("何も現れなかった...", "Nobody ever turns up..."));
771                         else
772                                 reward = _("モンスターがペットになった。", "a servant");
773
774                         break;
775
776                 case REW_SER_UNDE:
777                         msg_format(_("%sは褒美としてアンデッドの使いをよこした。", "%s rewards you with an undead servant!"), chaos_patrons[p_ptr->chaos_patron]);
778
779                         if (!summon_specific(-1, p_ptr->y, p_ptr->x, dun_level, SUMMON_UNDEAD, PM_FORCE_PET, '\0'))
780                                 msg_print(_("何も現れなかった...", "Nobody ever turns up..."));
781                         else
782                                 reward = _("アンデッドがペットになった。", "an undead servant");
783
784                         break;
785
786                 default:
787                         msg_format(_("%sの声がどもった:", "The voice of %s stammers:"),
788
789                                 chaos_patrons[p_ptr->chaos_patron]);
790                         msg_format(_("「あー、あー、答えは %d/%d。質問は何?」", "'Uh... uh... the answer's %d/%d, what's the question?'"), type, effect);
791
792                 }
793         }
794         if (reward)
795         {
796                 do_cmd_write_nikki(NIKKI_BUNSHOU, 0, format(_("パトロンの報酬で%s", "The patron rewards you with %s."), reward));
797         }
798 }
799