OSDN Git Service

Merge pull request #3569 from sikabane-works/release/3.0.0.88-alpha
[hengbandforosx/hengbandosx.git] / src / racial / race-racial-command-setter.cpp
1 #include "racial/race-racial-command-setter.h"
2 #include "cmd-action/cmd-spell.h"
3 #include "player-info/race-info.h"
4 #include "racial/racial-util.h"
5 #include "system/player-type-definition.h"
6
7 void set_mimic_racial_command(PlayerType *player_ptr, rc_type *rc_ptr)
8 {
9     rpi_type rpi;
10     switch (player_ptr->mimic_form) {
11     case MimicKindType::NONE:
12         return;
13     case MimicKindType::DEMON:
14     case MimicKindType::DEMON_LORD:
15         rpi = rpi_type(_("地獄/火炎のブレス", "Nether or Fire Breath"));
16         rpi.info = format("%s%d", KWD_DAM, rc_ptr->lvl * 3);
17         rpi.text = _("火炎または地獄のブレスを放つ。", "Fires a breath of fire or nether.");
18         rpi.min_level = 15;
19         rpi.cost = 10 + rc_ptr->lvl / 3;
20         rpi.stat = A_CON;
21         rpi.fail = 20;
22         rc_ptr->add_power(rpi, RC_IDX_RACE_0);
23         return;
24     case MimicKindType::VAMPIRE:
25         rpi = rpi_type(_("吸血", "Vampiric Drain"));
26         rpi.info = format("%s%d", KWD_DAM, rc_ptr->lvl * 2);
27         rpi.text = _("隣接したモンスター1体から生命力を吸い取る。吸い取った生命力によって満腹度があがる。",
28             "Drains and transfers HP from a monster near by you. You will also gain nutritional sustenance from this.");
29         rpi.min_level = 2;
30         rpi.cost = 1 + (rc_ptr->lvl / 3);
31         rpi.stat = A_CON;
32         rpi.fail = 9;
33         rc_ptr->add_power(rpi, RC_IDX_RACE_0);
34         return;
35     }
36 }
37
38 void set_race_racial_command(PlayerType *player_ptr, rc_type *rc_ptr)
39 {
40     rpi_type rpi;
41     switch (player_ptr->prace) {
42     case PlayerRaceType::DWARF:
43         rpi = rpi_type(_("ドアと罠 感知", "Detect Doors+Traps"));
44         rpi.text = _("近くの全ての扉と罠、階段を感知する。", "Detects traps, doors, and stairs in your vicinity.");
45         rpi.min_level = 5;
46         rpi.cost = 5;
47         rpi.stat = A_WIS;
48         rpi.fail = 12;
49         rc_ptr->add_power(rpi, RC_IDX_RACE_0);
50         break;
51     case PlayerRaceType::NIBELUNG:
52         rpi = rpi_type(_("ドアと罠 感知", "Detect Doors+Traps"));
53         rpi.text = _("近くの全ての扉と罠、階段を感知する。", "Detects traps, doors, and stairs in your vicinity.");
54         rpi.min_level = 10;
55         rpi.cost = 5;
56         rpi.stat = A_WIS;
57         rpi.fail = 10;
58         rc_ptr->add_power(rpi, RC_IDX_RACE_0);
59         break;
60     case PlayerRaceType::HOBBIT:
61         rpi = rpi_type(_("食糧生成", "Create Food"));
62         rpi.text = _("食料を一つ作り出す。", "Produces a Ration of Food.");
63         rpi.min_level = 15;
64         rpi.cost = 10;
65         rpi.stat = A_INT;
66         rpi.fail = 10;
67         rc_ptr->add_power(rpi, RC_IDX_RACE_0);
68         break;
69     case PlayerRaceType::GNOME:
70         rpi = rpi_type(_("ショート・テレポート", "Blink"));
71         rpi.info = format("%s%d", KWD_SPHERE, 10);
72         rpi.text = _("近距離のテレポートをする。", "Teleports you a short distance.");
73         rpi.min_level = 5;
74         rpi.cost = 5;
75         rpi.stat = A_INT;
76         rpi.fail = 12;
77         rc_ptr->add_power(rpi, RC_IDX_RACE_0);
78         break;
79     case PlayerRaceType::HALF_ORC:
80         rpi = rpi_type(_("恐怖除去", "Remove Fear"));
81         rpi.text = _("恐怖を取り除く。", "Removes fear.");
82         rpi.min_level = 3;
83         rpi.cost = 5;
84         rpi.stat = A_WIS;
85         rpi.fail = rc_ptr->is_warrior ? 5 : 10;
86         rc_ptr->add_power(rpi, RC_IDX_RACE_0);
87         break;
88     case PlayerRaceType::HALF_TROLL:
89         rpi = rpi_type(_("狂戦士化", "Berserk"));
90         rpi.info = format("%s%d+d%d", KWD_DURATION, 10, rc_ptr->lvl);
91         rpi.text = _("狂戦士化し、恐怖を除去する。防御力が少し低下する。", "Gives a bonus to hit and HP, immunity to fear for a while. But decreases AC.");
92         rpi.min_level = 10;
93         rpi.cost = 12;
94         rpi.stat = A_STR;
95         rpi.fail = rc_ptr->is_warrior ? 6 : 12;
96         rc_ptr->add_power(rpi, RC_IDX_RACE_0);
97         break;
98     case PlayerRaceType::BARBARIAN:
99         rpi = rpi_type(_("狂戦士化", "Berserk"));
100         rpi.info = format("%s%d+d%d", KWD_DURATION, 10, rc_ptr->lvl);
101         rpi.text = _("狂戦士化し、恐怖を除去する。防御力が少し低下する。", "Gives a bonus to hit and HP, immunity to fear for a while. But decreases AC.");
102         rpi.min_level = 8;
103         rpi.cost = 10;
104         rpi.stat = A_STR;
105         rpi.fail = rc_ptr->is_warrior ? 6 : 12;
106         rc_ptr->add_power(rpi, RC_IDX_RACE_0);
107         break;
108     case PlayerRaceType::AMBERITE:
109         rpi = rpi_type(_("シャドウ・シフト", "Shadow Shifting"));
110         rpi.text = _("現在の階を再構成する。", "Recreates current dungeon level.");
111         rpi.min_level = 30;
112         rpi.cost = 50;
113         rpi.stat = A_INT;
114         rpi.fail = 50;
115         rc_ptr->add_power(rpi, RC_IDX_RACE_0);
116
117         rpi = rpi_type(_("パターン・ウォーク", "Pattern Mindwalking"));
118         rpi.text = _("すべてのステータスと経験値を回復する。", "Restores all stats and experience.");
119         rpi.min_level = 40;
120         rpi.cost = 75;
121         rpi.stat = A_WIS;
122         rpi.fail = 50;
123         rc_ptr->add_power(rpi, RC_IDX_RACE_1);
124         break;
125     case PlayerRaceType::HALF_OGRE:
126         rpi = rpi_type(_("爆発のルーン", "Explosive Rune"));
127         rpi.text = _("自分のいる床の上に、モンスターが上を通ろうとすると爆発するルーンを描く。",
128             "Sets a rune on the floor beneath you which exprodes if a monster through upon it. Monsters can try to disarm it.");
129         rpi.min_level = 25;
130         rpi.cost = 35;
131         rpi.stat = A_INT;
132         rpi.fail = 15;
133         rc_ptr->add_power(rpi, RC_IDX_RACE_0);
134         break;
135     case PlayerRaceType::HALF_GIANT:
136         rpi = rpi_type(_("岩石溶解", "Stone to Mud"));
137         rpi.text = _("壁を溶かして床にする。", "Turns one rock square to mud.");
138         rpi.min_level = 20;
139         rpi.cost = 10;
140         rpi.stat = A_STR;
141         rpi.fail = 12;
142         rc_ptr->add_power(rpi, RC_IDX_RACE_0);
143         break;
144     case PlayerRaceType::HALF_TITAN:
145         rpi = rpi_type(_("スキャン・モンスター", "Probing"));
146         rpi.text = _("モンスターの属性、残り体力、最大体力、スピード、正体を知る。", "Probes all monsters' alignment, HP, speed and their true character.");
147         rpi.min_level = 15;
148         rpi.cost = 10;
149         rpi.stat = A_INT;
150         rpi.fail = 12;
151         rc_ptr->add_power(rpi, RC_IDX_RACE_0);
152         break;
153     case PlayerRaceType::CYCLOPS:
154         rpi = rpi_type(_("岩石投げ", "Throw Boulder"));
155         rpi.info = format("%s%d", KWD_DAM, rc_ptr->lvl * 3 / 2);
156         rpi.text = _("弱い魔法のボールを放つ", "Fires a weak boll of magic.");
157         rpi.min_level = 20;
158         rpi.cost = 15;
159         rpi.stat = A_STR;
160         rpi.fail = 12;
161         rc_ptr->add_power(rpi, RC_IDX_RACE_0);
162         break;
163     case PlayerRaceType::YEEK:
164         rpi = rpi_type(_("モンスター恐慌", "Scare Monster"));
165         rpi.text = _("モンスター1体を恐怖させる。抵抗されると無効。", "Attempts to scare a monster.");
166         rpi.min_level = 15;
167         rpi.cost = 15;
168         rpi.stat = A_WIS;
169         rpi.fail = 10;
170         rc_ptr->add_power(rpi, RC_IDX_RACE_0);
171         break;
172     case PlayerRaceType::SPECTRE:
173         rpi = rpi_type(_("モンスター恐慌", "Scare Monster"));
174         rpi.text = _("モンスター1体を恐怖させる。抵抗されると無効。", "Attempts to scare a monster.");
175         rpi.min_level = 4;
176         rpi.cost = 6;
177         rpi.stat = A_INT;
178         rpi.fail = 3;
179         rc_ptr->add_power(rpi, RC_IDX_RACE_0);
180         break;
181     case PlayerRaceType::KLACKON:
182         rpi = rpi_type(_("酸の唾", "Spit Acid"));
183         rpi.info = format("%s%d", KWD_DAM, rc_ptr->lvl);
184         if (rc_ptr->lvl >= 25) {
185             rpi.text = _("酸のボールを放つ", "Fires a boll of acid.");
186         } else {
187             rpi.text = _("酸の矢を放つ", "Fires a bolt of acid.");
188         }
189         rpi.min_level = 9;
190         rpi.cost = 9;
191         rpi.stat = A_DEX;
192         rpi.fail = 14;
193         rc_ptr->add_power(rpi, RC_IDX_RACE_0);
194         break;
195     case PlayerRaceType::KOBOLD:
196         rpi = rpi_type(_("毒のダーツ", "Poison Dart"));
197         rpi.info = format("%s%d", KWD_DAM, rc_ptr->lvl);
198         rpi.text = _("毒の矢を放つ", "Fires a bolt of poison.");
199         rpi.min_level = 12;
200         rpi.cost = 8;
201         rpi.stat = A_DEX;
202         rpi.fail = 14;
203         rc_ptr->add_power(rpi, RC_IDX_RACE_0);
204         break;
205     case PlayerRaceType::DARK_ELF:
206         rpi = rpi_type(_("マジック・ミサイル", "Magic Missile"));
207         rpi.info = format("%s%dd%d", KWD_DAM, 3 + ((rc_ptr->lvl - 1) / 5), 4);
208         rpi.text = _("弱い魔法の矢を放つ。", "Fires a weak bolt of magic.");
209         rpi.min_level = 2;
210         rpi.cost = 2;
211         rpi.stat = A_INT;
212         rpi.fail = 9;
213         rc_ptr->add_power(rpi, RC_IDX_RACE_0);
214         break;
215     case PlayerRaceType::DRACONIAN:
216         rpi = rpi_type(_("ブレス", "Breath Weapon"));
217         rpi.info = format("%s%d", KWD_DAM, rc_ptr->lvl * 2);
218         rpi.text = _("元素のブレスを放つ", "Fires a breath of an element.");
219         rpi.min_level = 1;
220         rpi.cost = rc_ptr->lvl;
221         rpi.stat = A_CON;
222         rpi.fail = 12;
223         rc_ptr->add_power(rpi, RC_IDX_RACE_0);
224         break;
225     case PlayerRaceType::MIND_FLAYER:
226         rpi = rpi_type(_("精神攻撃", "Mind Blast"));
227         rpi.info = format("%s%d", KWD_DAM, rc_ptr->lvl);
228         rpi.text = _("モンスター1体に精神攻撃を行う。", "Deals a PSI damage to a monster.");
229         rpi.min_level = 15;
230         rpi.cost = 12;
231         rpi.stat = A_INT;
232         rpi.fail = 14;
233         rc_ptr->add_power(rpi, RC_IDX_RACE_0);
234         break;
235     case PlayerRaceType::IMP:
236         if (rc_ptr->lvl > 30) {
237             rpi = rpi_type(_("ファイア・ボール", "Fire Ball"));
238             rpi.text = _("火炎のボールを放つ。", "Fires a ball of fire.");
239         } else {
240             rpi = rpi_type(_("ファイア・ボルト", "Fire Bolt"));
241             rpi.text = _("火炎の矢を放つ。", "Fires a bolt of fire.");
242         }
243         rpi.info = format("%s%d", KWD_DAM, rc_ptr->lvl);
244         rpi.min_level = 9;
245         rpi.cost = 15;
246         rpi.stat = A_WIS;
247         rpi.fail = 15;
248         rc_ptr->add_power(rpi, RC_IDX_RACE_0);
249         break;
250     case PlayerRaceType::GOLEM:
251         rpi = rpi_type(_("肌石化", "Stone Skin"));
252         rpi.info = format("%s%d+d%d", KWD_DURATION, 30, 20);
253         rpi.text = _("一定期間防御力を高める。", "Increases your AC temporary");
254         rpi.min_level = 20;
255         rpi.cost = 15;
256         rpi.stat = A_CON;
257         rpi.fail = 8;
258         rc_ptr->add_power(rpi, RC_IDX_RACE_0);
259         break;
260     case PlayerRaceType::SKELETON:
261     case PlayerRaceType::ZOMBIE:
262         rpi = rpi_type(_("経験値復活", "Restore Experience"));
263         rpi.text = _("経験値を回復する。", "Restores experience.");
264         rpi.min_level = 30;
265         rpi.cost = 30;
266         rpi.stat = A_WIS;
267         rpi.fail = 18;
268         rc_ptr->add_power(rpi, RC_IDX_RACE_0);
269         break;
270     case PlayerRaceType::VAMPIRE:
271         rpi = rpi_type(_("吸血", "Vampiric Drain"));
272         rpi.info = format("%s%d", KWD_DAM, rc_ptr->lvl * 2);
273         rpi.text = _("隣接したモンスター1体から生命力を吸い取る。吸い取った生命力によって満腹度があがる。",
274             "Drains and transfers HP from a monster near by you. You will also gain nutritional sustenance from this.");
275         rpi.min_level = 2;
276         rpi.cost = 1 + (rc_ptr->lvl / 3);
277         rpi.stat = A_CON;
278         rpi.fail = 9;
279         rc_ptr->add_power(rpi, RC_IDX_RACE_0);
280         break;
281     case PlayerRaceType::SPRITE:
282         rpi = rpi_type(_("眠り粉", "Sleeping Dust"));
283         rpi.info = format("%s%d", KWD_POWER, rc_ptr->lvl);
284         rpi.text = _("モンスター1体を眠らせる。抵抗されると無効。", "Attempts to put a monster to sleep.");
285         rpi.min_level = 12;
286         rpi.cost = 12;
287         rpi.stat = A_INT;
288         rpi.fail = 15;
289         rc_ptr->add_power(rpi, RC_IDX_RACE_0);
290         break;
291     case PlayerRaceType::BALROG:
292         rpi = rpi_type(_("地獄/火炎のブレス", "Nether or Fire Breath"));
293         rpi.info = format("%s%d", KWD_DAM, rc_ptr->lvl * 3);
294         rpi.text = _("火炎または地獄のブレスを放つ。", "Fires a breath of fire or nether.");
295         rpi.min_level = 15;
296         rpi.cost = 10 + rc_ptr->lvl / 3;
297         rpi.stat = A_CON;
298         rpi.fail = 20;
299         rc_ptr->add_power(rpi, RC_IDX_RACE_0);
300         break;
301     case PlayerRaceType::KUTAR:
302         rpi = rpi_type(_("横に伸びる", "Expand Horizontally"));
303         rpi.info = format("%s%d+d%d", KWD_DURATION, 30, 20);
304         rpi.text = _("横に伸びて防御力を高める。魔法防御力は低下する。",
305             "Expands your body horizontally then increases AC, but decreases your magic resistance for curses.");
306         rpi.min_level = 20;
307         rpi.cost = 15;
308         rpi.stat = A_CHR;
309         rpi.fail = 8;
310         rc_ptr->add_power(rpi, RC_IDX_RACE_0);
311         break;
312     case PlayerRaceType::ANDROID:
313         if (player_ptr->lev < 10) {
314             rpi = rpi_type(_("レイガン", "Ray Gun"));
315             rpi.info = format("%s%d", KWD_DAM, (rc_ptr->lvl + 1) / 2);
316             rpi.text = _("弱い魔法の矢を放つ。", "Fires a weak bolt of magic.");
317             rpi.min_level = 1;
318             rpi.cost = 7;
319             rpi.fail = 8;
320         } else if (player_ptr->lev < 25) {
321             rpi = rpi_type(_("ブラスター", "Blaster"));
322             rpi.info = format("%s%d", KWD_DAM, rc_ptr->lvl);
323             rpi.text = _("弱い魔法の矢を放つ。", "Fires a weak bolt of magic.");
324             rpi.min_level = 10;
325             rpi.cost = 13;
326             rpi.fail = 10;
327         } else if (player_ptr->lev < 35) {
328             rpi = rpi_type(_("バズーカ", "Bazooka"));
329             rpi.info = format("%s%d", KWD_DAM, rc_ptr->lvl * 2);
330             rpi.text = _("弱い魔法のボールを放つ。", "Fires a weak ball of magic.");
331             rpi.min_level = 25;
332             rpi.cost = 26;
333             rpi.fail = 12;
334         } else if (player_ptr->lev < 45) {
335             rpi = rpi_type(_("ビームキャノン", "Beam Cannon"));
336             rpi.info = format("%s%d", KWD_DAM, rc_ptr->lvl * 2);
337             rpi.text = _("弱い魔法のビームを放つ。", "Fires a beam bolt of magic.");
338             rpi.min_level = 35;
339             rpi.cost = 40;
340             rpi.fail = 15;
341         } else {
342             rpi = rpi_type(_("ロケット", "Rocket"));
343             rpi.info = format("%s%d", KWD_DAM, rc_ptr->lvl * 5);
344             rpi.text = _("ロケットを放つ。", "Fires a magic rocket.");
345             rpi.min_level = 45;
346             rpi.cost = 60;
347             rpi.fail = 18;
348         }
349         rpi.stat = A_STR;
350         rc_ptr->add_power(rpi, RC_IDX_RACE_0);
351         break;
352     default:
353         break;
354     }
355 }