OSDN Git Service

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