OSDN Git Service

[Refactor] #37353 カオスパトロンの報酬処理を acquire_chaos_weapon() に分離. / Separate chaos weapon...
[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 "mutation.h"
9 #include "artifact.h"
10 #include "player-status.h"
11
12 #include "spells-summon.h"
13 #include "spells-object.h"
14 #include "spells-status.h"
15
16 #ifdef JP
17 /*!
18  * @brief カオスパトロン名テーブル
19  */
20 const concptr chaos_patrons[MAX_PATRON] =
21 {
22         "スローター",
23         "マベロード",
24         "チャードロス",
25         "ハイオンハーン",
26         "キシオムバーグ",
27
28         "ピアレー",
29         "バラン",
30         "アリオッチ",
31         "イーカー",
32         "ナージャン",
33
34         "バロ",
35         "コーン",
36         "スラーネッシュ",
37         "ナーグル",
38         "ティーンチ",
39
40         "カイン"
41 };
42 #else
43 const concptr chaos_patrons[MAX_PATRON] =
44 {
45         "Slortar",
46         "Mabelode",
47         "Chardros",
48         "Hionhurn",
49         "Xiombarg",
50
51         "Pyaray",
52         "Balaan",
53         "Arioch",
54         "Eequor",
55         "Narjhan",
56
57         "Balo",
58         "Khorne",
59         "Slaanesh",
60         "Nurgle",
61         "Tzeentch",
62
63         "Khaine"
64 };
65 #endif
66
67
68 /*!
69  * @brief カオスパトロンの報酬能力値テーブル
70  */
71 const int chaos_stats[MAX_PATRON] =
72 {
73         A_CON,  /* Slortar */
74         A_CON,  /* Mabelode */
75         A_STR,  /* Chardros */
76         A_STR,  /* Hionhurn */
77         A_STR,  /* Xiombarg */
78
79         A_INT,  /* Pyaray */
80         A_STR,  /* Balaan */
81         A_INT,  /* Arioch */
82         A_CON,  /* Eequor */
83         A_CHR,  /* Narjhan */
84
85         -1,     /* Balo */
86         A_STR,  /* Khorne */
87         A_CHR,  /* Slaanesh */
88         A_CON,  /* Nurgle */
89         A_INT,  /* Tzeentch */
90
91         A_STR,  /* Khaine */
92 };
93
94 /*!
95  * @brief カオスパトロンの報酬テーブル
96  */
97 const int chaos_rewards[MAX_PATRON][20] =
98 {
99         /* Slortar the Old: */
100         {
101                 REW_WRATH, REW_CURSE_WP, REW_CURSE_AR, REW_RUIN_ABL, REW_LOSE_ABL,
102                 REW_IGNORE, REW_IGNORE, REW_IGNORE, REW_POLY_WND, REW_POLY_SLF,
103                 REW_POLY_SLF, REW_POLY_SLF, REW_GAIN_ABL, REW_GAIN_ABL, REW_GAIN_EXP,
104                 REW_GOOD_OBJ, REW_CHAOS_WP, REW_GREA_OBJ, REW_AUGM_ABL, REW_AUGM_ABL
105         },
106
107         /* Mabelode the Faceless: */
108         {
109                 REW_WRATH, REW_CURSE_WP, REW_CURSE_AR, REW_H_SUMMON, REW_SUMMON_M,
110                 REW_SUMMON_M, REW_IGNORE, REW_IGNORE, REW_POLY_WND, REW_POLY_WND,
111                 REW_POLY_SLF, REW_HEAL_FUL, REW_HEAL_FUL, REW_GAIN_ABL, REW_SER_UNDE,
112                 REW_CHAOS_WP, REW_GOOD_OBJ, REW_GOOD_OBJ, REW_GOOD_OBS, REW_GOOD_OBS
113         },
114
115         /* Chardros the Reaper: */
116         {
117                 REW_WRATH, REW_WRATH, REW_HURT_LOT, REW_PISS_OFF, REW_H_SUMMON,
118                 REW_SUMMON_M, REW_IGNORE, REW_IGNORE, REW_DESTRUCT, REW_SER_UNDE,
119                 REW_GENOCIDE, REW_MASS_GEN, REW_MASS_GEN, REW_DISPEL_C, REW_GOOD_OBJ,
120                 REW_CHAOS_WP, REW_GOOD_OBS, REW_GOOD_OBS, REW_AUGM_ABL, REW_AUGM_ABL
121         },
122
123         /* Hionhurn the Executioner: */
124         {
125                 REW_WRATH, REW_WRATH, REW_CURSE_WP, REW_CURSE_AR, REW_RUIN_ABL,
126                 REW_IGNORE, REW_IGNORE, REW_SER_UNDE, REW_DESTRUCT, REW_GENOCIDE,
127                 REW_MASS_GEN, REW_MASS_GEN, REW_HEAL_FUL, REW_GAIN_ABL, REW_GAIN_ABL,
128                 REW_CHAOS_WP, REW_GOOD_OBS, REW_GOOD_OBS, REW_AUGM_ABL, REW_AUGM_ABL
129         },
130
131         /* Xiombarg the Sword-Queen: */
132         {
133                 REW_TY_CURSE, REW_TY_CURSE, REW_PISS_OFF, REW_RUIN_ABL, REW_LOSE_ABL,
134                 REW_IGNORE, REW_POLY_SLF, REW_POLY_SLF, REW_POLY_WND, REW_POLY_WND,
135                 REW_GENOCIDE, REW_DISPEL_C, REW_GOOD_OBJ, REW_GOOD_OBJ, REW_SER_MONS,
136                 REW_GAIN_ABL, REW_CHAOS_WP, REW_GAIN_EXP, REW_AUGM_ABL, REW_GOOD_OBS
137         },
138
139
140         /* Pyaray the Tentacled Whisperer of Impossible Secretes: */
141         {
142                 REW_WRATH, REW_TY_CURSE, REW_PISS_OFF, REW_H_SUMMON, REW_H_SUMMON,
143                 REW_IGNORE, REW_IGNORE, REW_IGNORE, REW_POLY_WND, REW_POLY_SLF,
144                 REW_POLY_SLF, REW_SER_DEMO, REW_HEAL_FUL, REW_GAIN_ABL, REW_GAIN_ABL,
145                 REW_CHAOS_WP, REW_DO_HAVOC, REW_GOOD_OBJ, REW_GREA_OBJ, REW_GREA_OBS
146         },
147
148         /* Balaan the Grim: */
149         {
150                 REW_TY_CURSE, REW_HURT_LOT, REW_CURSE_WP, REW_CURSE_AR, REW_RUIN_ABL,
151                 REW_SUMMON_M, REW_LOSE_EXP, REW_POLY_SLF, REW_POLY_SLF, REW_POLY_WND,
152                 REW_SER_UNDE, REW_HEAL_FUL, REW_HEAL_FUL, REW_GAIN_EXP, REW_GAIN_EXP,
153                 REW_CHAOS_WP, REW_GOOD_OBJ, REW_GOOD_OBS, REW_GREA_OBS, REW_AUGM_ABL
154         },
155
156         /* Arioch, Duke of Hell: */
157         {
158                 REW_WRATH, REW_PISS_OFF, REW_RUIN_ABL, REW_LOSE_EXP, REW_H_SUMMON,
159                 REW_IGNORE, REW_IGNORE, REW_IGNORE, REW_IGNORE, REW_POLY_SLF,
160                 REW_POLY_SLF, REW_MASS_GEN, REW_SER_DEMO, REW_HEAL_FUL, REW_CHAOS_WP,
161                 REW_CHAOS_WP, REW_GOOD_OBJ, REW_GAIN_EXP, REW_GREA_OBJ, REW_AUGM_ABL
162         },
163
164         /* Eequor, Blue Lady of Dismay: */
165         {
166                 REW_WRATH, REW_TY_CURSE, REW_PISS_OFF, REW_CURSE_WP, REW_RUIN_ABL,
167                 REW_IGNORE, REW_IGNORE, REW_POLY_SLF, REW_POLY_SLF, REW_POLY_WND,
168                 REW_GOOD_OBJ, REW_GOOD_OBJ, REW_SER_MONS, REW_HEAL_FUL, REW_GAIN_EXP,
169                 REW_GAIN_ABL, REW_CHAOS_WP, REW_GOOD_OBS, REW_GREA_OBJ, REW_AUGM_ABL
170         },
171
172         /* Narjhan, Lord of Beggars: */
173         {
174                 REW_WRATH, REW_CURSE_AR, REW_CURSE_WP, REW_CURSE_WP, REW_CURSE_AR,
175                 REW_IGNORE, REW_IGNORE, REW_IGNORE, REW_POLY_SLF, REW_POLY_SLF,
176                 REW_POLY_WND, REW_HEAL_FUL, REW_HEAL_FUL, REW_GAIN_EXP, REW_AUGM_ABL,
177                 REW_GOOD_OBJ, REW_GOOD_OBJ, REW_CHAOS_WP, REW_GREA_OBJ, REW_GREA_OBS
178         },
179
180         /* Balo the Jester: */
181         {
182                 REW_WRATH, REW_SER_DEMO, REW_CURSE_WP, REW_CURSE_AR, REW_LOSE_EXP,
183                 REW_GAIN_ABL, REW_LOSE_ABL, REW_POLY_WND, REW_POLY_SLF, REW_IGNORE,
184                 REW_DESTRUCT, REW_MASS_GEN, REW_CHAOS_WP, REW_GREA_OBJ, REW_HURT_LOT,
185                 REW_AUGM_ABL, REW_RUIN_ABL, REW_H_SUMMON, REW_GREA_OBS, REW_AUGM_ABL
186         },
187
188         /* Khorne the Bloodgod: */
189         {
190                 REW_WRATH, REW_HURT_LOT, REW_HURT_LOT, REW_H_SUMMON, REW_H_SUMMON,
191                 REW_IGNORE, REW_IGNORE, REW_IGNORE, REW_SER_MONS, REW_SER_DEMO,
192                 REW_POLY_SLF, REW_POLY_WND, REW_HEAL_FUL, REW_GOOD_OBJ, REW_GOOD_OBJ,
193                 REW_CHAOS_WP, REW_GOOD_OBS, REW_GOOD_OBS, REW_GREA_OBJ, REW_GREA_OBS
194         },
195
196         /* Slaanesh: */
197         {
198                 REW_WRATH, REW_PISS_OFF, REW_PISS_OFF, REW_RUIN_ABL, REW_LOSE_ABL,
199                 REW_LOSE_EXP, REW_IGNORE, REW_IGNORE, REW_POLY_WND, REW_SER_DEMO,
200                 REW_POLY_SLF, REW_HEAL_FUL, REW_HEAL_FUL, REW_GOOD_OBJ, REW_GAIN_EXP,
201                 REW_GAIN_EXP, REW_CHAOS_WP, REW_GAIN_ABL, REW_GREA_OBJ, REW_AUGM_ABL
202         },
203
204         /* Nurgle: */
205         {
206                 REW_WRATH, REW_PISS_OFF, REW_HURT_LOT, REW_RUIN_ABL, REW_LOSE_ABL,
207                 REW_LOSE_EXP, REW_IGNORE, REW_IGNORE, REW_IGNORE, REW_POLY_SLF,
208                 REW_POLY_SLF, REW_POLY_WND, REW_HEAL_FUL, REW_GOOD_OBJ, REW_GAIN_ABL,
209                 REW_GAIN_ABL, REW_SER_UNDE, REW_CHAOS_WP, REW_GREA_OBJ, REW_AUGM_ABL
210         },
211
212         /* Tzeentch: */
213         {
214                 REW_WRATH, REW_CURSE_WP, REW_CURSE_AR, REW_RUIN_ABL, REW_LOSE_ABL,
215                 REW_LOSE_EXP, REW_IGNORE, REW_POLY_SLF, REW_POLY_SLF, REW_POLY_SLF,
216                 REW_POLY_SLF, REW_POLY_WND, REW_HEAL_FUL, REW_CHAOS_WP, REW_GREA_OBJ,
217                 REW_GAIN_ABL, REW_GAIN_ABL, REW_GAIN_EXP, REW_GAIN_EXP, REW_AUGM_ABL
218         },
219
220         /* Khaine: */
221         {
222                 REW_WRATH, REW_HURT_LOT, REW_PISS_OFF, REW_LOSE_ABL, REW_LOSE_EXP,
223                 REW_IGNORE,   REW_IGNORE,   REW_DISPEL_C, REW_DO_HAVOC, REW_DO_HAVOC,
224                 REW_POLY_SLF, REW_POLY_SLF, REW_GAIN_EXP, REW_GAIN_ABL, REW_GAIN_ABL,
225                 REW_SER_MONS, REW_GOOD_OBJ, REW_CHAOS_WP, REW_GREA_OBJ, REW_GOOD_OBS
226         }
227 };
228
229
230 void gain_level_reward(int chosen_reward)
231 {
232         char        wrath_reason[32] = "";
233         int         nasty_chance = 6;
234         OBJECT_TYPE_VALUE dummy = 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                         msg_format(_("%sの声がささやいた:", "The voice of %s whispers:"), chaos_patrons[p_ptr->chaos_patron]);
324                         msg_print(_("「我が与えし物を賢明に使うべし。」", "'Use my gift wisely.'"));
325
326                         acquirement(p_ptr->y, p_ptr->x, 1, FALSE, FALSE, FALSE);
327                         reward = _("上質なアイテムを手に入れた。", "a good item");
328                         break;
329
330                 case REW_GREA_OBJ:
331
332                         msg_format(_("%sの声が響き渡った:", "The voice of %s booms out:"), chaos_patrons[p_ptr->chaos_patron]);
333                         msg_print(_("「我が与えし物を賢明に使うべし。」", "'Use my gift wisely.'"));
334
335                         acquirement(p_ptr->y, p_ptr->x, 1, TRUE, FALSE, FALSE);
336                         reward = _("高級品のアイテムを手に入れた。", "an excellent item");
337                         break;
338
339                 case REW_CHAOS_WP:
340                         msg_format(_("%sの声が響き渡った:", "The voice of %s booms out:"), chaos_patrons[p_ptr->chaos_patron]);
341                         msg_print(_("「汝の行いは貴き剣に値せり。」", "'Thy deed hath earned thee a worthy blade.'"));
342                         acquire_chaos_weapon(p_ptr);
343                         reward = _("(混沌)の武器を手に入れた。", "chaos weapon");
344                         break;
345
346                 case REW_GOOD_OBS:
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 reward.'"));
350
351                         acquirement(p_ptr->y, p_ptr->x, randint1(2) + 1, FALSE, FALSE, FALSE);
352                         reward = _("上質なアイテムを手に入れた。", "good items");
353                         break;
354
355                 case REW_GREA_OBS:
356
357                         msg_format(_("%sの声が響き渡った:", "The voice of %s booms out:"), chaos_patrons[p_ptr->chaos_patron]);
358                         msg_print(_("「下僕よ、汝の献身への我が惜しみ無き報いを見るがよい。」", "'Behold, mortal, how generously I reward thy loyalty.'"));
359
360                         acquirement(p_ptr->y, p_ptr->x, randint1(2) + 1, TRUE, FALSE, FALSE);
361                         reward = _("高級品のアイテムを手に入れた。", "excellent items");
362                         break;
363
364                 case REW_TY_CURSE:
365                         msg_format(_("%sの声が轟き渡った:", "The voice of %s thunders:"), chaos_patrons[p_ptr->chaos_patron]);
366                         msg_print(_("「下僕よ、汝傲慢なり。」", "'Thou art growing arrogant, mortal.'"));
367
368                         (void)activate_ty_curse(FALSE, &count);
369                         reward = _("禍々しい呪いをかけられた。", "cursing");
370                         break;
371
372                 case REW_SUMMON_M:
373
374                         msg_format(_("%sの声が響き渡った:", "The voice of %s booms out:"), chaos_patrons[p_ptr->chaos_patron]);
375                         msg_print(_("「我が下僕たちよ、かの傲慢なる者を倒すべし!」", "'My pets, destroy the arrogant mortal!'"));
376
377                         for (dummy = 0; dummy < randint1(5) + 1; dummy++)
378                         {
379                                 (void)summon_specific(0, p_ptr->y, p_ptr->x, dun_level, 0, (PM_ALLOW_GROUP | PM_ALLOW_UNIQUE | PM_NO_PET), '\0');
380                         }
381                         reward = _("モンスターを召喚された。", "summoning hostile monsters");
382                         break;
383
384
385                 case REW_H_SUMMON:
386
387                         msg_format(_("%sの声が響き渡った:", "The voice of %s booms out:"), chaos_patrons[p_ptr->chaos_patron]);
388                         msg_print(_("「汝、より強き敵を必要とせり!」", "'Thou needst worthier opponents!'"));
389
390                         activate_hi_summon(p_ptr->y, p_ptr->x, FALSE);
391                         reward = _("モンスターを召喚された。", "summoning many hostile monsters");
392                         break;
393
394
395                 case REW_DO_HAVOC:
396                         msg_format(_("%sの声が響き渡った:", "The voice of %s booms out:"), chaos_patrons[p_ptr->chaos_patron]);
397                         msg_print(_("「死と破壊こそ我が喜びなり!」", "'Death and destruction! This pleaseth me!'"));
398
399                         call_chaos();
400                         reward = _("カオスの力が渦巻いた。", "calling chaos");
401                         break;
402
403
404                 case REW_GAIN_ABL:
405                         msg_format(_("%sの声が鳴り響いた:", "The voice of %s rings out:"), chaos_patrons[p_ptr->chaos_patron]);
406                         msg_print(_("「留まるのだ、下僕よ。余が汝の肉体を鍛えん。」", "'Stay, mortal, and let me mold thee.'"));
407
408                         if (one_in_(3) && !(chaos_stats[p_ptr->chaos_patron] < 0))
409                                 do_inc_stat(chaos_stats[p_ptr->chaos_patron]);
410                         else
411                                 do_inc_stat(randint0(6));
412                         reward = _("能力値が上がった。", "increasing a stat");
413                         break;
414
415
416                 case REW_LOSE_ABL:
417                         msg_format(_("%sの声が響き渡った:", "The voice of %s booms out:"), chaos_patrons[p_ptr->chaos_patron]);
418                         msg_print(_("「下僕よ、余は汝に飽みたり。」", "'I grow tired of thee, mortal.'"));
419
420                         if (one_in_(3) && !(chaos_stats[p_ptr->chaos_patron] < 0))
421                                 do_dec_stat(chaos_stats[p_ptr->chaos_patron]);
422                         else
423                                 (void)do_dec_stat(randint0(6));
424                         reward = _("能力値が下がった。", "decreasing a stat");
425                         break;
426
427
428                 case REW_RUIN_ABL:
429
430                         msg_format(_("%sの声が轟き渡った:", "The voice of %s thunders:"), chaos_patrons[p_ptr->chaos_patron]);
431                         msg_print(_("「汝、謙虚たることを学ぶべし!」", "'Thou needst a lesson in humility, mortal!'"));
432                         msg_print(_("あなたは以前より弱くなった!", "You feel less powerful!"));
433
434                         for (dummy = 0; dummy < A_MAX; dummy++)
435                         {
436                                 (void)dec_stat(dummy, 10 + randint1(15), TRUE);
437                         }
438                         reward = _("全能力値が下がった。", "decreasing all stats");
439                         break;
440
441                 case REW_POLY_WND:
442
443                         msg_format(_("%sの力が触れるのを感じた。", "You feel the power of %s touch you."),
444                                 chaos_patrons[p_ptr->chaos_patron]);
445                         do_poly_wounds();
446                         reward = _("傷が変化した。", "polymorphing wounds");
447                         break;
448
449                 case REW_AUGM_ABL:
450
451                         msg_format(_("%sの声が響き渡った:", "The voice of %s booms out:"), chaos_patrons[p_ptr->chaos_patron]);
452
453                         msg_print(_("「我がささやかなる賜物を受けとるがよい!」", "'Receive this modest gift from me!'"));
454
455                         for (dummy = 0; dummy < A_MAX; dummy++)
456                         {
457                                 (void)do_inc_stat(dummy);
458                         }
459                         reward = _("全能力値が上がった。", "increasing all stats");
460                         break;
461
462                 case REW_HURT_LOT:
463
464                         msg_format(_("%sの声が響き渡った:", "The voice of %s booms out:"), chaos_patrons[p_ptr->chaos_patron]);
465                         msg_print(_("「苦しむがよい、無能な愚か者よ!」", "'Suffer, pathetic fool!'"));
466
467                         fire_ball(GF_DISINTEGRATE, 0, p_ptr->lev * 4, 4);
468                         take_hit(DAMAGE_NOESCAPE, p_ptr->lev * 4, wrath_reason, -1);
469                         reward = _("分解の球が発生した。", "generating disintegration ball");
470                         break;
471
472                 case REW_HEAL_FUL:
473
474                         msg_format(_("%sの声が響き渡った:", "The voice of %s booms out:"), chaos_patrons[p_ptr->chaos_patron]);
475                         (void)restore_level();
476                         (void)restore_all_status();
477                         (void)true_healing(5000);
478                         reward = _("体力が回復した。", "healing");
479                         break;
480
481                 case REW_CURSE_WP:
482
483                         if (!has_melee_weapon(INVEN_RARM) && !has_melee_weapon(INVEN_LARM)) break;
484                         msg_format(_("%sの声が響き渡った:", "The voice of %s booms out:"), chaos_patrons[p_ptr->chaos_patron]);
485                         msg_print(_("「汝、武器に頼ることなかれ。」", "'Thou reliest too much on thy weapon.'"));
486
487                         dummy = INVEN_RARM;
488                         if (has_melee_weapon(INVEN_LARM))
489                         {
490                                 dummy = INVEN_LARM;
491                                 if (has_melee_weapon(INVEN_RARM) && one_in_(2)) dummy = INVEN_RARM;
492                         }
493                         object_desc(o_name, &inventory[dummy], OD_NAME_ONLY);
494                         (void)curse_weapon(FALSE, dummy);
495                         reward = format(_("%sが破壊された。", "destroying %s"), o_name);
496                         break;
497
498                 case REW_CURSE_AR:
499
500                         if (!inventory[INVEN_BODY].k_idx) break;
501                         msg_format(_("%sの声が響き渡った:", "The voice of %s booms out:"), chaos_patrons[p_ptr->chaos_patron]);
502                         msg_print(_("「汝、防具に頼ることなかれ。」", "'Thou reliest too much on thine equipment.'"));
503
504                         object_desc(o_name, &inventory[INVEN_BODY], OD_NAME_ONLY);
505                         (void)curse_armor();
506                         reward = format(_("%sが破壊された。", "destroying %s"), o_name);
507                         break;
508
509                 case REW_PISS_OFF:
510
511                         msg_format(_("%sの声がささやいた:", "The voice of %s whispers:"), chaos_patrons[p_ptr->chaos_patron]);
512                         msg_print(_("「我を怒りしめた罪を償うべし。」", "'Now thou shalt pay for annoying me.'"));
513
514                         switch (randint1(4))
515                         {
516                         case 1:
517                                 (void)activate_ty_curse(FALSE, &count);
518                                 reward = _("禍々しい呪いをかけられた。", "cursing");
519                                 break;
520                         case 2:
521                                 activate_hi_summon(p_ptr->y, p_ptr->x, FALSE);
522                                 reward = _("モンスターを召喚された。", "summoning hostile monsters");
523                                 break;
524                         case 3:
525                                 if (one_in_(2))
526                                 {
527                                         if (!has_melee_weapon(INVEN_RARM) && !has_melee_weapon(INVEN_LARM)) break;
528                                         dummy = INVEN_RARM;
529                                         if (has_melee_weapon(INVEN_LARM))
530                                         {
531                                                 dummy = INVEN_LARM;
532                                                 if (has_melee_weapon(INVEN_RARM) && one_in_(2)) dummy = INVEN_RARM;
533                                         }
534                                         object_desc(o_name, &inventory[dummy], OD_NAME_ONLY);
535                                         (void)curse_weapon(FALSE, dummy);
536                                         reward = format(_("%sが破壊された。", "destroying %s"), o_name);
537                                 }
538                                 else
539                                 {
540                                         if (!inventory[INVEN_BODY].k_idx) break;
541                                         object_desc(o_name, &inventory[INVEN_BODY], OD_NAME_ONLY);
542                                         (void)curse_armor();
543                                         reward = format(_("%sが破壊された。", "destroying %s"), o_name);
544                                 }
545                                 break;
546                         default:
547                                 for (dummy = 0; dummy < A_MAX; dummy++)
548                                 {
549                                         (void)dec_stat(dummy, 10 + randint1(15), TRUE);
550                                 }
551                                 reward = _("全能力値が下がった。", "decreasing all stats");
552                                 break;
553                         }
554                         break;
555
556                 case REW_WRATH:
557
558                         msg_format(_("%sの声が轟き渡った:", "The voice of %s thunders:"), chaos_patrons[p_ptr->chaos_patron]);
559                         msg_print(_("「死ぬがよい、下僕よ!」", "'Die, mortal!'"));
560
561                         take_hit(DAMAGE_LOSELIFE, p_ptr->lev * 4, wrath_reason, -1);
562                         for (dummy = 0; dummy < A_MAX; dummy++)
563                         {
564                                 (void)dec_stat(dummy, 10 + randint1(15), FALSE);
565                         }
566                         activate_hi_summon(p_ptr->y, p_ptr->x, FALSE);
567                         (void)activate_ty_curse(FALSE, &count);
568                         if (one_in_(2))
569                         {
570                                 dummy = 0;
571
572                                 if (has_melee_weapon(INVEN_RARM))
573                                 {
574                                         dummy = INVEN_RARM;
575                                         if (has_melee_weapon(INVEN_LARM) && one_in_(2)) dummy = INVEN_LARM;
576                                 }
577                                 else if (has_melee_weapon(INVEN_LARM)) dummy = INVEN_LARM;
578
579                                 if (dummy) (void)curse_weapon(FALSE, dummy);
580                         }
581                         if (one_in_(2)) (void)curse_armor();
582                         break;
583
584                 case REW_DESTRUCT:
585
586                         msg_format(_("%sの声が響き渡った:", "The voice of %s booms out:"), chaos_patrons[p_ptr->chaos_patron]);
587                         msg_print(_("「死と破壊こそ我が喜びなり!」", "'Death and destruction! This pleaseth me!'"));
588
589                         (void)destroy_area(p_ptr->y, p_ptr->x, 25, FALSE);
590                         reward = _("ダンジョンが*破壊*された。", "*destruct*ing dungeon");
591                         break;
592
593                 case REW_GENOCIDE:
594
595                         msg_format(_("%sの声が響き渡った:", "The voice of %s booms out:"), chaos_patrons[p_ptr->chaos_patron]);
596                         msg_print(_("「我、汝の敵を抹殺せん!」", "'Let me relieve thee of thine oppressors!'"));
597                         (void)symbol_genocide(0, FALSE);
598                         reward = _("モンスターが抹殺された。", "genociding monsters");
599                         break;
600
601                 case REW_MASS_GEN:
602
603                         msg_format(_("%sの声が響き渡った:", "The voice of %s booms out:"), chaos_patrons[p_ptr->chaos_patron]);
604                         msg_print(_("「我、汝の敵を抹殺せん!」", "'Let me relieve thee of thine oppressors!'"));
605
606                         (void)mass_genocide(0, FALSE);
607                         reward = _("モンスターが抹殺された。", "genociding nearby monsters");
608                         break;
609
610                 case REW_DISPEL_C:
611
612                         msg_format(_("%sの力が敵を攻撃するのを感じた!", "You can feel the power of %s assault your enemies!"), chaos_patrons[p_ptr->chaos_patron]);
613                         (void)dispel_monsters(p_ptr->lev * 4);
614                         break;
615
616                 case REW_IGNORE:
617
618                         msg_format(_("%sはあなたを無視した。", "%s ignores you."), chaos_patrons[p_ptr->chaos_patron]);
619                         break;
620
621                 case REW_SER_DEMO:
622
623                         msg_format(_("%sは褒美として悪魔の使いをよこした!", "%s rewards you with a demonic servant!"), chaos_patrons[p_ptr->chaos_patron]);
624
625                         if (!summon_specific(-1, p_ptr->y, p_ptr->x, dun_level, SUMMON_DEMON, PM_FORCE_PET, '\0'))
626                                 msg_print(_("何も現れなかった...", "Nobody ever turns up..."));
627                         else
628                                 reward = _("悪魔がペットになった。", "a demonic servant");
629
630                         break;
631
632                 case REW_SER_MONS:
633                         msg_format(_("%sは褒美として使いをよこした!", "%s rewards you with a servant!"), chaos_patrons[p_ptr->chaos_patron]);
634
635                         if (!summon_specific(-1, p_ptr->y, p_ptr->x, dun_level, 0, PM_FORCE_PET, '\0'))
636                                 msg_print(_("何も現れなかった...", "Nobody ever turns up..."));
637                         else
638                                 reward = _("モンスターがペットになった。", "a servant");
639
640                         break;
641
642                 case REW_SER_UNDE:
643                         msg_format(_("%sは褒美としてアンデッドの使いをよこした。", "%s rewards you with an undead servant!"), chaos_patrons[p_ptr->chaos_patron]);
644
645                         if (!summon_specific(-1, p_ptr->y, p_ptr->x, dun_level, SUMMON_UNDEAD, PM_FORCE_PET, '\0'))
646                                 msg_print(_("何も現れなかった...", "Nobody ever turns up..."));
647                         else
648                                 reward = _("アンデッドがペットになった。", "an undead servant");
649
650                         break;
651
652                 default:
653                         msg_format(_("%sの声がどもった:", "The voice of %s stammers:"), chaos_patrons[p_ptr->chaos_patron]);
654                         msg_format(_("「あー、あー、答えは %d/%d。質問は何?」", "'Uh... uh... the answer's %d/%d, what's the question?'"), type, effect);
655
656                 }
657         }
658         if (reward)
659         {
660                 do_cmd_write_nikki(NIKKI_BUNSHOU, 0, format(_("パトロンの報酬で%s", "The patron rewards you with %s."), reward));
661         }
662 }
663