OSDN Git Service

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