OSDN Git Service

Merge pull request #3569 from sikabane-works/release/3.0.0.88-alpha
[hengbandforosx/hengbandosx.git] / src / monster-attack / monster-attack-describer.cpp
1 /*!
2  * @brief モンスターの打撃種別を記述すると共に、切り傷/朦朧値を追加する
3  * @date 2020/05/31
4  * @author Hourier
5  */
6
7 #include "monster-attack/monster-attack-describer.h"
8 #include "main/sound-definitions-table.h"
9 #include "main/sound-of-music.h"
10 #include "monster-attack/insults-moans.h"
11 #include "monster-attack/monster-attack-player.h"
12 #include "monster-attack/monster-attack-table.h"
13 #include "monster-race/race-indice-types.h"
14 #include "system/angband.h"
15 #include "system/monster-entity.h"
16
17 static void show_jaian_song(MonsterAttackPlayer *monap_ptr)
18 {
19 #ifdef JP
20     constexpr static auto songs = {
21         "「♪お~れはジャイアン~~ガ~キだいしょう~」",
22         "「♪て~んかむ~てきのお~とこだぜ~~」",
23         "「♪の~び太スネ夫はメじゃないよ~~」",
24         "「♪け~んかスポ~ツ~どんとこい~」",
25         "「♪うた~も~~う~まいぜ~まかしとけ~」",
26         "「♪お~れはジャイアン~~ガ~キだいしょう~」",
27         "「♪ま~ちいちば~んのに~んきもの~~」",
28         "「♪べんきょうしゅくだいメじゃないよ~~」",
29         "「♪きはやさし~くて~ち~からもち~」",
30         "「♪かお~も~~スタイルも~バツグンさ~」",
31         "「♪お~れはジャイアン~~ガ~キだいしょう~」",
32         "「♪がっこうい~ちの~あ~ばれんぼう~~」",
33         "「♪ド~ラもドラミもメじゃないよ~~」",
34         "「♪よじげんぽけっと~な~くたって~」",
35         "「♪あし~の~~ながさ~は~まけないぜ~」",
36     };
37
38     monap_ptr->act = rand_choice(songs);
39 #else
40     monap_ptr->act = "horribly sings 'I AM GIAAAAAN. THE BOOOSS OF THE KIIIIDS.'";
41 #endif
42 }
43
44 static void monster_attack_show(MonsterAttackPlayer *monap_ptr)
45 {
46 #ifdef JP
47     monap_ptr->abbreviate = -1;
48 #endif
49     if (monap_ptr->m_ptr->r_idx == MonsterRaceId::JAIAN) {
50         show_jaian_song(monap_ptr);
51     } else {
52         if (one_in_(3)) {
53             monap_ptr->act = _("は♪僕らは楽しい家族♪と歌っている。", "sings 'We are a happy family.'");
54         } else {
55             monap_ptr->act = _("は♪アイ ラブ ユー、ユー ラブ ミー♪と歌っている。", "sings 'I love you, you love me.'");
56         }
57     }
58
59     sound(SOUND_SHOW);
60 }
61
62 void describe_monster_attack_method(MonsterAttackPlayer *monap_ptr)
63 {
64     switch (monap_ptr->method) {
65     case RaceBlowMethodType::HIT: {
66         monap_ptr->act = _("殴られた。", "hits you.");
67         monap_ptr->do_cut = monap_ptr->do_stun = 1;
68         monap_ptr->touched = true;
69         sound(SOUND_ENEMY_HIT);
70         break;
71     }
72     case RaceBlowMethodType::TOUCH: {
73         monap_ptr->act = _("触られた。", "touches you.");
74         monap_ptr->touched = true;
75         sound(SOUND_TOUCH);
76         break;
77     }
78     case RaceBlowMethodType::PUNCH: {
79         monap_ptr->act = _("パンチされた。", "punches you.");
80         monap_ptr->touched = true;
81         monap_ptr->do_stun = 1;
82         sound(SOUND_ENEMY_HIT);
83         break;
84     }
85     case RaceBlowMethodType::KICK: {
86         monap_ptr->act = _("蹴られた。", "kicks you.");
87         monap_ptr->touched = true;
88         monap_ptr->do_stun = 1;
89         sound(SOUND_ENEMY_HIT);
90         break;
91     }
92     case RaceBlowMethodType::CLAW: {
93         monap_ptr->act = _("ひっかかれた。", "claws you.");
94         monap_ptr->touched = true;
95         monap_ptr->do_cut = 1;
96         sound(SOUND_CLAW);
97         break;
98     }
99     case RaceBlowMethodType::BITE: {
100         monap_ptr->act = _("噛まれた。", "bites you.");
101         monap_ptr->do_cut = 1;
102         monap_ptr->touched = true;
103         sound(SOUND_BITE);
104         break;
105     }
106     case RaceBlowMethodType::STING: {
107         monap_ptr->act = _("刺された。", "stings you.");
108         monap_ptr->touched = true;
109         sound(SOUND_STING);
110         break;
111     }
112     case RaceBlowMethodType::SLASH: {
113         monap_ptr->act = _("斬られた。", "slashes you.");
114         monap_ptr->touched = true;
115         monap_ptr->do_cut = 1;
116         sound(SOUND_CLAW);
117         break;
118     }
119     case RaceBlowMethodType::BUTT: {
120         monap_ptr->act = _("角で突かれた。", "butts you.");
121         monap_ptr->do_stun = 1;
122         monap_ptr->touched = true;
123         sound(SOUND_ENEMY_HIT);
124         break;
125     }
126     case RaceBlowMethodType::CRUSH: {
127         monap_ptr->act = _("体当たりされた。", "crushes you.");
128         monap_ptr->do_stun = 1;
129         monap_ptr->touched = true;
130         sound(SOUND_CRUSH);
131         break;
132     }
133     case RaceBlowMethodType::ENGULF: {
134         monap_ptr->act = _("飲み込まれた。", "engulfs you.");
135         monap_ptr->touched = true;
136         sound(SOUND_CRUSH);
137         break;
138     }
139     case RaceBlowMethodType::CHARGE: {
140 #ifdef JP
141         monap_ptr->abbreviate = -1;
142 #endif
143         monap_ptr->act = _("は請求書をよこした。", "charges you.");
144         monap_ptr->touched = true;
145
146         /* このコメントはジョークが効いているので残しておく / Note! This is "charges", not "charges at". */
147         sound(SOUND_BUY);
148         break;
149     }
150     case RaceBlowMethodType::CRAWL: {
151 #ifdef JP
152         monap_ptr->abbreviate = -1;
153 #endif
154         monap_ptr->act = _("が体の上を這い回った。", "crawls on you.");
155         monap_ptr->touched = true;
156         sound(SOUND_SLIME);
157         break;
158     }
159     case RaceBlowMethodType::DROOL: {
160         monap_ptr->act = _("よだれをたらされた。", "drools on you.");
161         sound(SOUND_SLIME);
162         break;
163     }
164     case RaceBlowMethodType::SPIT: {
165         monap_ptr->act = _("唾を吐かれた。", "spits on you.");
166         sound(SOUND_SLIME);
167         break;
168     }
169     case RaceBlowMethodType::EXPLODE: {
170 #ifdef JP
171         monap_ptr->abbreviate = -1;
172 #endif
173         monap_ptr->act = _("は爆発した。", "explodes.");
174         monap_ptr->explode = true;
175         break;
176     }
177     case RaceBlowMethodType::GAZE: {
178         monap_ptr->act = _("にらまれた。", "gazes at you.");
179         break;
180     }
181     case RaceBlowMethodType::WAIL: {
182         monap_ptr->act = _("泣き叫ばれた。", "wails at you.");
183         sound(SOUND_WAIL);
184         break;
185     }
186     case RaceBlowMethodType::SPORE: {
187         monap_ptr->act = _("胞子を飛ばされた。", "releases spores at you.");
188         sound(SOUND_SLIME);
189         break;
190     }
191     case RaceBlowMethodType::XXX4: {
192 #ifdef JP
193         monap_ptr->abbreviate = -1;
194 #endif
195         monap_ptr->act = _("が XXX4 を発射した。", "projects XXX4's at you.");
196         break;
197     }
198     case RaceBlowMethodType::BEG: {
199         monap_ptr->act = _("金をせがまれた。", "begs you for money.");
200         sound(SOUND_MOAN);
201         break;
202     }
203     case RaceBlowMethodType::INSULT: {
204 #ifdef JP
205         monap_ptr->abbreviate = -1;
206 #endif
207         monap_ptr->act = desc_insult[randint0(monap_ptr->m_ptr->r_idx == MonsterRaceId::DEBBY ? 10 : 8)];
208         sound(SOUND_MOAN);
209         break;
210     }
211     case RaceBlowMethodType::MOAN: {
212 #ifdef JP
213         monap_ptr->abbreviate = -1;
214 #endif
215         monap_ptr->act = rand_choice(desc_moan);
216         sound(SOUND_MOAN);
217         break;
218     }
219     case RaceBlowMethodType::SHOW: {
220         monster_attack_show(monap_ptr);
221         break;
222     }
223
224     case RaceBlowMethodType::NONE:
225     case RaceBlowMethodType::SHOOT:
226     case RaceBlowMethodType::MAX:
227         break;
228     }
229 }