OSDN Git Service

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