OSDN Git Service

[Refactor] #37353 patron.c 内のメッセージ整理。 / Refactor messages in patron.c.
[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         object_type *q_ptr;
233         object_type forge;
234         char        wrath_reason[32] = "";
235         int         nasty_chance = 6;
236         OBJECT_TYPE_VALUE dummy = 0;
237         OBJECT_SUBTYPE_VALUE dummy2 = 0;
238         int         type, effect;
239         concptr        reward = NULL;
240         GAME_TEXT o_name[MAX_NLEN];
241
242         int count = 0;
243
244         if (!chosen_reward)
245         {
246                 if (multi_rew) return;
247                 else multi_rew = TRUE;
248         }
249
250
251         if (p_ptr->lev == 13) nasty_chance = 2;
252         else if (!(p_ptr->lev % 13)) nasty_chance = 3;
253         else if (!(p_ptr->lev % 14)) nasty_chance = 12;
254
255         if (one_in_(nasty_chance))
256                 type = randint1(20); /* Allow the 'nasty' effects */
257         else
258                 type = randint1(15) + 5; /* Or disallow them */
259
260         if (type < 1) type = 1;
261         if (type > 20) type = 20;
262         type--;
263
264
265         sprintf(wrath_reason, _("%sの怒り", "the Wrath of %s"), chaos_patrons[p_ptr->chaos_patron]);
266
267         effect = chaos_rewards[p_ptr->chaos_patron][type];
268
269         if (one_in_(6) && !chosen_reward)
270         {
271                 msg_format(_("%^sは褒美としてあなたを突然変異させた。", "%^s rewards you with a mutation!"), chaos_patrons[p_ptr->chaos_patron]);
272                 (void)gain_random_mutation(0);
273                 reward = _("変異した。", "mutation");
274         }
275         else
276         {
277                 switch (chosen_reward ? chosen_reward : effect)
278                 {
279
280                 case REW_POLY_SLF:
281
282                         msg_format(_("%sの声が響き渡った:", "The voice of %s booms out:"), chaos_patrons[p_ptr->chaos_patron]);
283                         msg_print(_("「汝、新たなる姿を必要とせり!」", "'Thou needst a new form, mortal!'"));
284
285                         do_poly_self();
286                         reward = _("変異した。", "polymorphing");
287                         break;
288
289                 case REW_GAIN_EXP:
290
291                         msg_format(_("%sの声が響き渡った:", "The voice of %s booms out:"), chaos_patrons[p_ptr->chaos_patron]);
292                         msg_print(_("「汝は良く行いたり!続けよ!」", "'Well done, mortal! Lead on!'"));
293
294                         if (p_ptr->prace == RACE_ANDROID)
295                         {
296                                 msg_print(_("しかし何も起こらなかった。", "But, nothing happen."));
297                         }
298                         else if (p_ptr->exp < PY_MAX_EXP)
299                         {
300                                 s32b ee = (p_ptr->exp / 2) + 10;
301                                 if (ee > 100000L) ee = 100000L;
302                                 msg_print(_("更に経験を積んだような気がする。", "You feel more experienced."));
303
304                                 gain_exp(ee);
305                                 reward = _("経験値を得た", "experience");
306                         }
307                         break;
308
309                 case REW_LOSE_EXP:
310
311                         msg_format(_("%sの声が響き渡った:", "The voice of %s booms out:"), chaos_patrons[p_ptr->chaos_patron]);
312                         msg_print(_("「下僕よ、汝それに値せず。」", "'Thou didst not deserve that, slave.'"));
313
314                         if (p_ptr->prace == RACE_ANDROID)
315                         {
316                                 msg_print(_("しかし何も起こらなかった。", "But, nothing happen."));
317                         }
318                         else
319                         {
320                                 lose_exp(p_ptr->exp / 6);
321                                 reward = _("経験値を失った。", "losing experience");
322                         }
323                         break;
324
325                 case REW_GOOD_OBJ:
326                         msg_format(_("%sの声がささやいた:", "The voice of %s whispers:"), chaos_patrons[p_ptr->chaos_patron]);
327                         msg_print(_("「我が与えし物を賢明に使うべし。」", "'Use my gift wisely.'"));
328
329                         acquirement(p_ptr->y, p_ptr->x, 1, FALSE, FALSE, FALSE);
330                         reward = _("上質なアイテムを手に入れた。", "a good item");
331                         break;
332
333                 case REW_GREA_OBJ:
334
335                         msg_format(_("%sの声が響き渡った:", "The voice of %s booms out:"), chaos_patrons[p_ptr->chaos_patron]);
336                         msg_print(_("「我が与えし物を賢明に使うべし。」", "'Use my gift wisely.'"));
337
338                         acquirement(p_ptr->y, p_ptr->x, 1, TRUE, FALSE, FALSE);
339                         reward = _("高級品のアイテムを手に入れた。", "an excellent item");
340                         break;
341
342                 case REW_CHAOS_WP:
343
344                         msg_format(_("%sの声が響き渡った:", "The voice of %s booms out:"), chaos_patrons[p_ptr->chaos_patron]);
345                         msg_print(_("「汝の行いは貴き剣に値せり。」", "'Thy deed hath earned thee a worthy blade.'"));
346                         q_ptr = &forge;
347                         dummy = TV_SWORD;
348                         switch (randint1(p_ptr->lev))
349                         {
350                         case 0: case 1:
351                                 dummy2 = SV_DAGGER;
352                                 break;
353                         case 2: case 3:
354                                 dummy2 = SV_MAIN_GAUCHE;
355                                 break;
356                         case 4:
357                                 dummy2 = SV_TANTO;
358                                 break;
359                         case 5: case 6:
360                                 dummy2 = SV_RAPIER;
361                                 break;
362                         case 7: case 8:
363                                 dummy2 = SV_SMALL_SWORD;
364                                 break;
365                         case 9: case 10:
366                                 dummy2 = SV_BASILLARD;
367                                 break;
368                         case 11: case 12: case 13:
369                                 dummy2 = SV_SHORT_SWORD;
370                                 break;
371                         case 14: case 15:
372                                 dummy2 = SV_SABRE;
373                                 break;
374                         case 16: case 17:
375                                 dummy2 = SV_CUTLASS;
376                                 break;
377                         case 18:
378                                 dummy2 = SV_WAKIZASHI;
379                                 break;
380                         case 19:
381                                 dummy2 = SV_KHOPESH;
382                                 break;
383                         case 20:
384                                 dummy2 = SV_TULWAR;
385                                 break;
386                         case 21:
387                                 dummy2 = SV_BROAD_SWORD;
388                                 break;
389                         case 22: case 23:
390                                 dummy2 = SV_LONG_SWORD;
391                                 break;
392                         case 24: case 25:
393                                 dummy2 = SV_SCIMITAR;
394                                 break;
395                         case 26:
396                                 dummy2 = SV_NINJATO;
397                                 break;
398                         case 27:
399                                 dummy2 = SV_KATANA;
400                                 break;
401                         case 28: case 29:
402                                 dummy2 = SV_BASTARD_SWORD;
403                                 break;
404                         case 30:
405                                 dummy2 = SV_GREAT_SCIMITAR;
406                                 break;
407                         case 31:
408                                 dummy2 = SV_CLAYMORE;
409                                 break;
410                         case 32:
411                                 dummy2 = SV_ESPADON;
412                                 break;
413                         case 33:
414                                 dummy2 = SV_TWO_HANDED_SWORD;
415                                 break;
416                         case 34:
417                                 dummy2 = SV_FLAMBERGE;
418                                 break;
419                         case 35:
420                                 dummy2 = SV_NO_DACHI;
421                                 break;
422                         case 36:
423                                 dummy2 = SV_EXECUTIONERS_SWORD;
424                                 break;
425                         case 37:
426                                 dummy2 = SV_ZWEIHANDER;
427                                 break;
428                         case 38:
429                                 dummy2 = SV_HAYABUSA;
430                                 break;
431                         default:
432                                 dummy2 = SV_BLADE_OF_CHAOS;
433                         }
434
435                         object_prep(q_ptr, lookup_kind(dummy, dummy2));
436                         q_ptr->to_h = 3 + randint1(dun_level) % 10;
437                         q_ptr->to_d = 3 + randint1(dun_level) % 10;
438                         one_resistance(q_ptr);
439                         q_ptr->name2 = EGO_CHAOTIC;
440                         (void)drop_near(q_ptr, -1, p_ptr->y, p_ptr->x);
441                         reward = _("(混沌)の武器を手に入れた。", "chaos weapon");
442                         break;
443
444                 case REW_GOOD_OBS:
445
446                         msg_format(_("%sの声が響き渡った:", "The voice of %s booms out:"), chaos_patrons[p_ptr->chaos_patron]);
447                         msg_print(_("「汝の行いは貴き報いに値せり。」", "'Thy deed hath earned thee a worthy reward.'"));
448
449                         acquirement(p_ptr->y, p_ptr->x, randint1(2) + 1, FALSE, FALSE, FALSE);
450                         reward = _("上質なアイテムを手に入れた。", "good items");
451                         break;
452
453                 case REW_GREA_OBS:
454
455                         msg_format(_("%sの声が響き渡った:", "The voice of %s booms out:"), chaos_patrons[p_ptr->chaos_patron]);
456                         msg_print(_("「下僕よ、汝の献身への我が惜しみ無き報いを見るがよい。」", "'Behold, mortal, how generously I reward thy loyalty.'"));
457
458                         acquirement(p_ptr->y, p_ptr->x, randint1(2) + 1, TRUE, FALSE, FALSE);
459                         reward = _("高級品のアイテムを手に入れた。", "excellent items");
460                         break;
461
462                 case REW_TY_CURSE:
463                         msg_format(_("%sの声が轟き渡った:", "The voice of %s thunders:"), chaos_patrons[p_ptr->chaos_patron]);
464                         msg_print(_("「下僕よ、汝傲慢なり。」", "'Thou art growing arrogant, mortal.'"));
465
466                         (void)activate_ty_curse(FALSE, &count);
467                         reward = _("禍々しい呪いをかけられた。", "cursing");
468                         break;
469
470                 case REW_SUMMON_M:
471
472                         msg_format(_("%sの声が響き渡った:", "The voice of %s booms out:"), chaos_patrons[p_ptr->chaos_patron]);
473                         msg_print(_("「我が下僕たちよ、かの傲慢なる者を倒すべし!」", "'My pets, destroy the arrogant mortal!'"));
474
475                         for (dummy = 0; dummy < randint1(5) + 1; dummy++)
476                         {
477                                 (void)summon_specific(0, p_ptr->y, p_ptr->x, dun_level, 0, (PM_ALLOW_GROUP | PM_ALLOW_UNIQUE | PM_NO_PET), '\0');
478                         }
479                         reward = _("モンスターを召喚された。", "summoning hostile monsters");
480                         break;
481
482
483                 case REW_H_SUMMON:
484
485                         msg_format(_("%sの声が響き渡った:", "The voice of %s booms out:"), chaos_patrons[p_ptr->chaos_patron]);
486                         msg_print(_("「汝、より強き敵を必要とせり!」", "'Thou needst worthier opponents!'"));
487
488                         activate_hi_summon(p_ptr->y, p_ptr->x, FALSE);
489                         reward = _("モンスターを召喚された。", "summoning many hostile monsters");
490                         break;
491
492
493                 case REW_DO_HAVOC:
494                         msg_format(_("%sの声が響き渡った:", "The voice of %s booms out:"), chaos_patrons[p_ptr->chaos_patron]);
495                         msg_print(_("「死と破壊こそ我が喜びなり!」", "'Death and destruction! This pleaseth me!'"));
496
497                         call_chaos();
498                         reward = _("カオスの力が渦巻いた。", "calling chaos");
499                         break;
500
501
502                 case REW_GAIN_ABL:
503                         msg_format(_("%sの声が鳴り響いた:", "The voice of %s rings out:"), chaos_patrons[p_ptr->chaos_patron]);
504                         msg_print(_("「留まるのだ、下僕よ。余が汝の肉体を鍛えん。」", "'Stay, mortal, and let me mold thee.'"));
505
506                         if (one_in_(3) && !(chaos_stats[p_ptr->chaos_patron] < 0))
507                                 do_inc_stat(chaos_stats[p_ptr->chaos_patron]);
508                         else
509                                 do_inc_stat(randint0(6));
510                         reward = _("能力値が上がった。", "increasing a stat");
511                         break;
512
513
514                 case REW_LOSE_ABL:
515                         msg_format(_("%sの声が響き渡った:", "The voice of %s booms out:"), chaos_patrons[p_ptr->chaos_patron]);
516                         msg_print(_("「下僕よ、余は汝に飽みたり。」", "'I grow tired of thee, mortal.'"));
517
518                         if (one_in_(3) && !(chaos_stats[p_ptr->chaos_patron] < 0))
519                                 do_dec_stat(chaos_stats[p_ptr->chaos_patron]);
520                         else
521                                 (void)do_dec_stat(randint0(6));
522                         reward = _("能力値が下がった。", "decreasing a stat");
523                         break;
524
525
526                 case REW_RUIN_ABL:
527
528                         msg_format(_("%sの声が轟き渡った:", "The voice of %s thunders:"), chaos_patrons[p_ptr->chaos_patron]);
529                         msg_print(_("「汝、謙虚たることを学ぶべし!」", "'Thou needst a lesson in humility, mortal!'"));
530                         msg_print(_("あなたは以前より弱くなった!", "You feel less powerful!"));
531
532                         for (dummy = 0; dummy < A_MAX; dummy++)
533                         {
534                                 (void)dec_stat(dummy, 10 + randint1(15), TRUE);
535                         }
536                         reward = _("全能力値が下がった。", "decreasing all stats");
537                         break;
538
539                 case REW_POLY_WND:
540
541                         msg_format(_("%sの力が触れるのを感じた。", "You feel the power of %s touch you."),
542                                 chaos_patrons[p_ptr->chaos_patron]);
543                         do_poly_wounds();
544                         reward = _("傷が変化した。", "polymorphing wounds");
545                         break;
546
547                 case REW_AUGM_ABL:
548
549                         msg_format(_("%sの声が響き渡った:", "The voice of %s booms out:"), chaos_patrons[p_ptr->chaos_patron]);
550
551                         msg_print(_("「我がささやかなる賜物を受けとるがよい!」", "'Receive this modest gift from me!'"));
552
553                         for (dummy = 0; dummy < A_MAX; dummy++)
554                         {
555                                 (void)do_inc_stat(dummy);
556                         }
557                         reward = _("全能力値が上がった。", "increasing all stats");
558                         break;
559
560                 case REW_HURT_LOT:
561
562                         msg_format(_("%sの声が響き渡った:", "The voice of %s booms out:"), chaos_patrons[p_ptr->chaos_patron]);
563                         msg_print(_("「苦しむがよい、無能な愚か者よ!」", "'Suffer, pathetic fool!'"));
564
565                         fire_ball(GF_DISINTEGRATE, 0, p_ptr->lev * 4, 4);
566                         take_hit(DAMAGE_NOESCAPE, p_ptr->lev * 4, wrath_reason, -1);
567                         reward = _("分解の球が発生した。", "generating disintegration ball");
568                         break;
569
570                 case REW_HEAL_FUL:
571
572                         msg_format(_("%sの声が響き渡った:", "The voice of %s booms out:"), chaos_patrons[p_ptr->chaos_patron]);
573                         (void)restore_level();
574                         (void)restore_all_status();
575                         (void)true_healing(5000);
576                         reward = _("体力が回復した。", "healing");
577                         break;
578
579                 case REW_CURSE_WP:
580
581                         if (!has_melee_weapon(INVEN_RARM) && !has_melee_weapon(INVEN_LARM)) break;
582                         msg_format(_("%sの声が響き渡った:", "The voice of %s booms out:"), chaos_patrons[p_ptr->chaos_patron]);
583                         msg_print(_("「汝、武器に頼ることなかれ。」", "'Thou reliest too much on thy weapon.'"));
584
585                         dummy = INVEN_RARM;
586                         if (has_melee_weapon(INVEN_LARM))
587                         {
588                                 dummy = INVEN_LARM;
589                                 if (has_melee_weapon(INVEN_RARM) && one_in_(2)) dummy = INVEN_RARM;
590                         }
591                         object_desc(o_name, &inventory[dummy], OD_NAME_ONLY);
592                         (void)curse_weapon(FALSE, dummy);
593                         reward = format(_("%sが破壊された。", "destroying %s"), o_name);
594                         break;
595
596                 case REW_CURSE_AR:
597
598                         if (!inventory[INVEN_BODY].k_idx) break;
599                         msg_format(_("%sの声が響き渡った:", "The voice of %s booms out:"), chaos_patrons[p_ptr->chaos_patron]);
600                         msg_print(_("「汝、防具に頼ることなかれ。」", "'Thou reliest too much on thine equipment.'"));
601
602                         object_desc(o_name, &inventory[INVEN_BODY], OD_NAME_ONLY);
603                         (void)curse_armor();
604                         reward = format(_("%sが破壊された。", "destroying %s"), o_name);
605                         break;
606
607                 case REW_PISS_OFF:
608
609                         msg_format(_("%sの声がささやいた:", "The voice of %s whispers:"), chaos_patrons[p_ptr->chaos_patron]);
610                         msg_print(_("「我を怒りしめた罪を償うべし。」", "'Now thou shalt pay for annoying me.'"));
611
612                         switch (randint1(4))
613                         {
614                         case 1:
615                                 (void)activate_ty_curse(FALSE, &count);
616                                 reward = _("禍々しい呪いをかけられた。", "cursing");
617                                 break;
618                         case 2:
619                                 activate_hi_summon(p_ptr->y, p_ptr->x, FALSE);
620                                 reward = _("モンスターを召喚された。", "summoning hostile monsters");
621                                 break;
622                         case 3:
623                                 if (one_in_(2))
624                                 {
625                                         if (!has_melee_weapon(INVEN_RARM) && !has_melee_weapon(INVEN_LARM)) break;
626                                         dummy = INVEN_RARM;
627                                         if (has_melee_weapon(INVEN_LARM))
628                                         {
629                                                 dummy = INVEN_LARM;
630                                                 if (has_melee_weapon(INVEN_RARM) && one_in_(2)) dummy = INVEN_RARM;
631                                         }
632                                         object_desc(o_name, &inventory[dummy], OD_NAME_ONLY);
633                                         (void)curse_weapon(FALSE, dummy);
634                                         reward = format(_("%sが破壊された。", "destroying %s"), o_name);
635                                 }
636                                 else
637                                 {
638                                         if (!inventory[INVEN_BODY].k_idx) break;
639                                         object_desc(o_name, &inventory[INVEN_BODY], OD_NAME_ONLY);
640                                         (void)curse_armor();
641                                         reward = format(_("%sが破壊された。", "destroying %s"), o_name);
642                                 }
643                                 break;
644                         default:
645                                 for (dummy = 0; dummy < A_MAX; dummy++)
646                                 {
647                                         (void)dec_stat(dummy, 10 + randint1(15), TRUE);
648                                 }
649                                 reward = _("全能力値が下がった。", "decreasing all stats");
650                                 break;
651                         }
652                         break;
653
654                 case REW_WRATH:
655
656                         msg_format(_("%sの声が轟き渡った:", "The voice of %s thunders:"), chaos_patrons[p_ptr->chaos_patron]);
657                         msg_print(_("「死ぬがよい、下僕よ!」", "'Die, mortal!'"));
658
659                         take_hit(DAMAGE_LOSELIFE, p_ptr->lev * 4, wrath_reason, -1);
660                         for (dummy = 0; dummy < A_MAX; dummy++)
661                         {
662                                 (void)dec_stat(dummy, 10 + randint1(15), FALSE);
663                         }
664                         activate_hi_summon(p_ptr->y, p_ptr->x, FALSE);
665                         (void)activate_ty_curse(FALSE, &count);
666                         if (one_in_(2))
667                         {
668                                 dummy = 0;
669
670                                 if (has_melee_weapon(INVEN_RARM))
671                                 {
672                                         dummy = INVEN_RARM;
673                                         if (has_melee_weapon(INVEN_LARM) && one_in_(2)) dummy = INVEN_LARM;
674                                 }
675                                 else if (has_melee_weapon(INVEN_LARM)) dummy = INVEN_LARM;
676
677                                 if (dummy) (void)curse_weapon(FALSE, dummy);
678                         }
679                         if (one_in_(2)) (void)curse_armor();
680                         break;
681
682                 case REW_DESTRUCT:
683
684                         msg_format(_("%sの声が響き渡った:", "The voice of %s booms out:"), chaos_patrons[p_ptr->chaos_patron]);
685                         msg_print(_("「死と破壊こそ我が喜びなり!」", "'Death and destruction! This pleaseth me!'"));
686
687                         (void)destroy_area(p_ptr->y, p_ptr->x, 25, FALSE);
688                         reward = _("ダンジョンが*破壊*された。", "*destruct*ing dungeon");
689                         break;
690
691                 case REW_GENOCIDE:
692
693                         msg_format(_("%sの声が響き渡った:", "The voice of %s booms out:"), chaos_patrons[p_ptr->chaos_patron]);
694                         msg_print(_("「我、汝の敵を抹殺せん!」", "'Let me relieve thee of thine oppressors!'"));
695                         (void)symbol_genocide(0, FALSE);
696                         reward = _("モンスターが抹殺された。", "genociding monsters");
697                         break;
698
699                 case REW_MASS_GEN:
700
701                         msg_format(_("%sの声が響き渡った:", "The voice of %s booms out:"), chaos_patrons[p_ptr->chaos_patron]);
702                         msg_print(_("「我、汝の敵を抹殺せん!」", "'Let me relieve thee of thine oppressors!'"));
703
704                         (void)mass_genocide(0, FALSE);
705                         reward = _("モンスターが抹殺された。", "genociding nearby monsters");
706                         break;
707
708                 case REW_DISPEL_C:
709
710                         msg_format(_("%sの力が敵を攻撃するのを感じた!", "You can feel the power of %s assault your enemies!"), chaos_patrons[p_ptr->chaos_patron]);
711                         (void)dispel_monsters(p_ptr->lev * 4);
712                         break;
713
714                 case REW_IGNORE:
715
716                         msg_format(_("%sはあなたを無視した。", "%s ignores you."), chaos_patrons[p_ptr->chaos_patron]);
717                         break;
718
719                 case REW_SER_DEMO:
720
721                         msg_format(_("%sは褒美として悪魔の使いをよこした!", "%s rewards you with a demonic servant!"), chaos_patrons[p_ptr->chaos_patron]);
722
723                         if (!summon_specific(-1, p_ptr->y, p_ptr->x, dun_level, SUMMON_DEMON, PM_FORCE_PET, '\0'))
724                                 msg_print(_("何も現れなかった...", "Nobody ever turns up..."));
725                         else
726                                 reward = _("悪魔がペットになった。", "a demonic servant");
727
728                         break;
729
730                 case REW_SER_MONS:
731                         msg_format(_("%sは褒美として使いをよこした!", "%s rewards you with a servant!"), chaos_patrons[p_ptr->chaos_patron]);
732
733                         if (!summon_specific(-1, p_ptr->y, p_ptr->x, dun_level, 0, PM_FORCE_PET, '\0'))
734                                 msg_print(_("何も現れなかった...", "Nobody ever turns up..."));
735                         else
736                                 reward = _("モンスターがペットになった。", "a servant");
737
738                         break;
739
740                 case REW_SER_UNDE:
741                         msg_format(_("%sは褒美としてアンデッドの使いをよこした。", "%s rewards you with an undead servant!"), chaos_patrons[p_ptr->chaos_patron]);
742
743                         if (!summon_specific(-1, p_ptr->y, p_ptr->x, dun_level, SUMMON_UNDEAD, PM_FORCE_PET, '\0'))
744                                 msg_print(_("何も現れなかった...", "Nobody ever turns up..."));
745                         else
746                                 reward = _("アンデッドがペットになった。", "an undead servant");
747
748                         break;
749
750                 default:
751                         msg_format(_("%sの声がどもった:", "The voice of %s stammers:"), chaos_patrons[p_ptr->chaos_patron]);
752                         msg_format(_("「あー、あー、答えは %d/%d。質問は何?」", "'Uh... uh... the answer's %d/%d, what's the question?'"), type, effect);
753
754                 }
755         }
756         if (reward)
757         {
758                 do_cmd_write_nikki(NIKKI_BUNSHOU, 0, format(_("パトロンの報酬で%s", "The patron rewards you with %s."), reward));
759         }
760 }
761