OSDN Git Service

Merge pull request #2494 from Slimebreath6078/feature/fix_unknwon_breath
[hengbandforosx/hengbandosx.git] / src / racial / class-racial-switcher.cpp
1 #include "racial/class-racial-switcher.h"
2 #include "cmd-action/cmd-spell.h"
3 #include "mind/mind-elementalist.h"
4 #include "racial/racial-util.h"
5 #include "realm/realm-names-table.h"
6 #include "realm/realm-types.h"
7 #include "system/player-type-definition.h"
8
9 void switch_class_racial(PlayerType *player_ptr, rc_type *rc_ptr)
10 {
11     rpi_type rpi;
12     switch (player_ptr->pclass) {
13     case PlayerClassType::WARRIOR:
14         rpi = rpi_type(_("剣の舞い", "Sword Dancing"));
15         rpi.text = _("ランダムな方向に数回攻撃する。", "Attacks some times to random directions.");
16         rpi.min_level = 40;
17         rpi.cost = 75;
18         rpi.stat = A_DEX;
19         rpi.fail = 35;
20         rc_ptr->add_power(rpi, RC_IDX_CLASS_0);
21         break;
22     case PlayerClassType::HIGH_MAGE:
23         if (player_ptr->realm1 == REALM_HEX) {
24             rpi = rpi_type(_("詠唱をやめる", "Stop spell casting"));
25             rpi.text = _("呪術の詠唱を全てやめる。", "Stops all casting hex spells.");
26             rpi.min_level = 1;
27             rpi.cost = 0;
28             rpi.stat = A_INT;
29             rpi.fail = 0;
30             rc_ptr->add_power(rpi, RC_IDX_CLASS_0);
31             break;
32         }
33         /* Fall through */
34     case PlayerClassType::MAGE:
35     case PlayerClassType::SORCERER:
36         rpi = rpi_type(_("魔力食い", "Eat Magic"));
37         rpi.info = format("%s%d", KWD_POWER, rc_ptr->lvl * 2);
38         rpi.text = _("魔法道具から魔力を吸収してMPを回復する。", "Absorbs mana from a magic device to heal your SP.");
39         rpi.min_level = 25;
40         rpi.cost = 1;
41         rpi.stat = A_INT;
42         rpi.fail = 25;
43         rc_ptr->add_power(rpi, RC_IDX_CLASS_0);
44         break;
45     case PlayerClassType::PRIEST:
46         if (is_good_realm(player_ptr->realm1)) {
47             rpi = rpi_type(_("武器祝福", "Bless Weapon"));
48             rpi.text = _("武器を祝福する。抵抗されることがある。", "Blesses a weapon. Some weapons can resist it.");
49             rpi.min_level = 35;
50             rpi.cost = 70;
51             rpi.stat = A_WIS;
52             rpi.fail = 50;
53             rc_ptr->add_power(rpi, RC_IDX_CLASS_0);
54         } else {
55             rpi = rpi_type(_("召魂", "Evocation"));
56             rpi.info = format("%s%d", KWD_POWER, rc_ptr->lvl * 4);
57             rpi.text = _("視界内の全てのモンスターにダメージを与え、恐怖させ、遠くへ飛ばす。", "Deals damage to all monster in your sight, makes them scared and tereports then away.");
58             rpi.min_level = 42;
59             rpi.cost = 40;
60             rpi.stat = A_WIS;
61             rpi.fail = 35;
62             rc_ptr->add_power(rpi, RC_IDX_CLASS_0);
63         }
64
65         break;
66     case PlayerClassType::ROGUE:
67         rpi = rpi_type(_("ヒット&アウェイ", "Hit and Away"));
68         rpi.info = format("%s%d", KWD_SPHERE, 30);
69         rpi.text = _("対象のモンスターを攻撃したあと短距離テレポートする。", "Attacks a monster then tereports you a short range.");
70         rpi.min_level = 8;
71         rpi.cost = 12;
72         rpi.stat = A_DEX;
73         rpi.fail = 14;
74         rc_ptr->add_power(rpi, RC_IDX_CLASS_0);
75         break;
76     case PlayerClassType::RANGER:
77     case PlayerClassType::SNIPER:
78         rpi = rpi_type(_("モンスター調査", "Probe Monster"));
79         rpi.text = _("モンスターの属性、残り体力、最大体力、スピード、正体を知る。", "Probes all monsters' alignment, HP, speed and their true character.");
80         rpi.min_level = 15;
81         rpi.cost = 20;
82         rpi.stat = A_INT;
83         rpi.fail = 12;
84         rc_ptr->add_power(rpi, RC_IDX_CLASS_0);
85         break;
86     case PlayerClassType::PALADIN:
87         if (is_good_realm(player_ptr->realm1)) {
88             rpi = rpi_type(_("ホーリー・ランス", "Holy Lance"));
89             rpi.info = format("%s%d", KWD_DAM, rc_ptr->lvl * 3);
90             rpi.text = _("聖なる炎のビームを放つ。", "Fires a beam of holy fire.");
91             rpi.min_level = 30;
92             rpi.cost = 30;
93             rpi.stat = A_WIS;
94             rpi.fail = 30;
95             rc_ptr->add_power(rpi, RC_IDX_CLASS_0);
96         } else {
97             rpi = rpi_type(_("ヘル・ランス", "Hell Lance"));
98             rpi.info = format("%s%d", KWD_DAM, rc_ptr->lvl * 3);
99             rpi.text = _("地獄の業火のビームを放つ。", "Fires a beam of hell fire.");
100             rpi.min_level = 30;
101             rpi.cost = 30;
102             rpi.stat = A_WIS;
103             rpi.fail = 30;
104             rc_ptr->add_power(rpi, RC_IDX_CLASS_0);
105         }
106
107         break;
108     case PlayerClassType::WARRIOR_MAGE:
109         rpi = rpi_type(_("変換: HP→MP", "Convert HP to SP"));
110         rpi.text = _("HPを少しMPに変換する。", "Transfers a few HP to SP.");
111         rpi.min_level = 25;
112         rpi.cost = 0;
113         rpi.stat = A_INT;
114         rpi.fail = 10;
115         rc_ptr->add_power(rpi, RC_IDX_CLASS_0);
116
117         rpi = rpi_type(_("変換: MP→HP", "Convert SP to HP"));
118         rpi.text = _("MPを少しHPに変換する。", "Transfers a few SP to HP.");
119         rpi.min_level = 25;
120         rpi.cost = 0;
121         rpi.stat = A_INT;
122         rpi.fail = 10;
123         rc_ptr->add_power(rpi, RC_IDX_CLASS_1);
124         break;
125     case PlayerClassType::CHAOS_WARRIOR:
126         rpi = rpi_type(_("幻惑の光", "Confusing Light"));
127         rpi.info = format("%s%d", KWD_POWER, rc_ptr->lvl * 4);
128         rpi.text = _("周辺のモンスターを減速・朦朧・混乱・朦朧・恐怖・睡眠させようとする。抵抗されると無効。",
129             "Tries to make all monsters in your sight slowed, stunned, confused, scared, sleeped.");
130         rpi.min_level = 40;
131         rpi.cost = 50;
132         rpi.stat = A_INT;
133         rpi.fail = 25;
134         rc_ptr->add_power(rpi, RC_IDX_CLASS_0);
135         break;
136     case PlayerClassType::MONK:
137         rpi = rpi_type(_("構える", "Assume a Stance"));
138         rpi.text = _("型に構えて特殊な能力を得る。", "Gains extra abilities with posing a 'kata'.");
139         rpi.min_level = 25;
140         rpi.cost = 0;
141         rpi.stat = A_DEX;
142         rpi.fail = 0;
143         rc_ptr->add_power(rpi, RC_IDX_CLASS_0);
144
145         rpi = rpi_type(_("百裂拳", "Double Attack"));
146         rpi.text = _("対象に対して2回の打撃を行う。", "Melee attacks to a target monster two times.");
147         rpi.min_level = 30;
148         rpi.cost = 30;
149         rpi.stat = A_STR;
150         rpi.fail = 20;
151         rc_ptr->add_power(rpi, -4);
152         break;
153     case PlayerClassType::MINDCRAFTER:
154     case PlayerClassType::FORCETRAINER:
155         rpi = rpi_type(_("明鏡止水", "Clear Mind"));
156         rpi.info = format("%s%d", KWD_MANA, 3 + rc_ptr->lvl / 20);
157         rpi.text = _("精神を集中してMPを少し回復する。", "Concentrates deeply to heal your SP a little.");
158         rpi.min_level = 15;
159         rpi.cost = 0;
160         rpi.stat = A_WIS;
161         rpi.fail = 10;
162         rc_ptr->add_power(rpi, RC_IDX_CLASS_0);
163         break;
164     case PlayerClassType::TOURIST:
165         rpi = rpi_type(_("写真撮影", "Take a Photograph"));
166         rpi.text = _("対象のモンスター1体の写真を撮影する。", "Takes a picture of a monster.");
167         rpi.min_level = 1;
168         rpi.cost = 0;
169         rpi.stat = A_DEX;
170         rpi.fail = 0;
171         rc_ptr->add_power(rpi, RC_IDX_CLASS_0);
172
173         rpi = rpi_type(_("真・鑑定", "Identify True"));
174         rpi.text = _("アイテムの持つ能力を完全に知る。", "*Identifies* an item.");
175         rpi.min_level = 25;
176         rpi.cost = 20;
177         rpi.stat = A_INT;
178         rpi.fail = 20;
179         rc_ptr->add_power(rpi, -4);
180         break;
181     case PlayerClassType::IMITATOR:
182         rpi = rpi_type(_("倍返し", "Double Revenge"));
183         rpi.text = _("威力を倍にしてものまねを行う。", "Fires an imitation a damage of which you makes doubled.");
184         rpi.min_level = 30;
185         rpi.cost = 100;
186         rpi.stat = A_DEX;
187         rpi.fail = 30;
188         rc_ptr->add_power(rpi, RC_IDX_CLASS_0);
189         break;
190     case PlayerClassType::BEASTMASTER:
191         rpi = rpi_type(_("生物支配", "Dominate a Living Thing"));
192         rpi.info = format("%s%d", KWD_POWER, rc_ptr->lvl);
193         rpi.text = _("1体のモンスターをペットにする。抵抗されると無効。", "Attempts to charm a monster.");
194         rpi.min_level = 1;
195         rpi.cost = (player_ptr->lev + 3) / 4;
196         rpi.stat = A_CHR;
197         rpi.fail = 10;
198         rc_ptr->add_power(rpi, RC_IDX_CLASS_0);
199
200         rpi = rpi_type(_("真・生物支配", "Dominate Living Things"));
201         rpi.info = format("%s%d", KWD_POWER, rc_ptr->lvl);
202         rpi.text = _("周辺のモンスターをペットにする。抵抗されると無効。", "Attempts to charm a monsters in your sight.");
203         rpi.min_level = 30;
204         rpi.cost = (player_ptr->lev + 20) / 2;
205         rpi.stat = A_CHR;
206         rpi.fail = 10;
207         rc_ptr->add_power(rpi, -4);
208         break;
209     case PlayerClassType::ARCHER:
210         rpi = rpi_type(_("弾/矢の製造", "Create Ammo"));
211         rpi.text = _("弾または矢を製造する。原料となるアイテムが必要。", "Creates ammos from materials.");
212         rpi.min_level = 1;
213         rpi.cost = 0;
214         rpi.stat = A_DEX;
215         rpi.fail = 0;
216         rc_ptr->add_power(rpi, RC_IDX_CLASS_0);
217         break;
218     case PlayerClassType::MAGIC_EATER:
219         rpi = rpi_type(_("魔力の取り込み", "Absorb Magic"));
220         rpi.text = _("魔法道具を取りこんで魔力とする。取りこんだ魔法道具は取り出せない。",
221             "Absorbs a magic device as your mana. Cannot take out it from your mana later.");
222         rpi.min_level = 1;
223         rpi.cost = 0;
224         rpi.stat = A_INT;
225         rpi.fail = 0;
226         rc_ptr->add_power(rpi, RC_IDX_CLASS_0);
227
228         rpi = rpi_type(_("強力発動", "Powerful Activation"));
229         rpi.text = _("取りこんだ魔法道具を威力を高めて使用する。", "Activates absorbed magic device powerfully.");
230         rpi.min_level = 10;
231         rpi.cost = 10 + (rc_ptr->lvl - 10) / 2;
232         rpi.stat = A_INT;
233         rpi.fail = 0;
234         rc_ptr->add_power(rpi, -4);
235         break;
236     case PlayerClassType::BARD:
237         rpi = rpi_type(_("歌を止める", "Stop Singing"));
238         rpi.text = _("現在詠唱中の歌をやめる。", "Stops singing a song.");
239         rpi.min_level = 1;
240         rpi.cost = 0;
241         rpi.stat = A_CHR;
242         rpi.fail = 0;
243         rc_ptr->add_power(rpi, RC_IDX_CLASS_0);
244         break;
245     case PlayerClassType::RED_MAGE:
246         rpi = rpi_type(_("連続魔", "Double Magic"));
247         rpi.text = _("1回の行動で2つの呪文を詠唱する。", "Casts two spells in an action.");
248         rpi.min_level = 48;
249         rpi.cost = 20;
250         rpi.stat = A_INT;
251         rpi.fail = 0;
252         rc_ptr->add_power(rpi, RC_IDX_CLASS_0);
253         break;
254     case PlayerClassType::SAMURAI:
255         rpi = rpi_type(_("気合いため", "Concentration"));
256         rpi.text = _("気合を溜めてMPを増やす。上限値をある程度超えられる。", "Increases SP for Kendo over SP limit.");
257         rpi.min_level = 1;
258         rpi.cost = 0;
259         rpi.stat = A_WIS;
260         rpi.fail = 0;
261         rc_ptr->add_power(rpi, RC_IDX_CLASS_0);
262
263         rpi = rpi_type(_("型", "Assume a Stance"));
264         rpi.text = _("型に構えて特殊な能力を得る。", "Gains extra abilities with posing a 'kata'.");
265         rpi.min_level = 25;
266         rpi.cost = 0;
267         rpi.stat = A_DEX;
268         rpi.fail = 0;
269         rc_ptr->add_power(rpi, -4);
270         break;
271     case PlayerClassType::BLUE_MAGE:
272         rpi = rpi_type(_("ラーニング", "Learning"));
273         rpi.text = _("青魔法の学習を開始または終了する。学習中はMPを消費する。", "Starts or ends to learn blue magics. Pays SP for upkeep costs during it.");
274         rpi.min_level = 1;
275         rpi.cost = 0;
276         rpi.stat = A_INT;
277         rpi.fail = 0;
278         rc_ptr->add_power(rpi, RC_IDX_CLASS_0);
279         break;
280     case PlayerClassType::CAVALRY:
281         rpi = rpi_type(_("荒馬ならし", "Rodeo"));
282         rpi.text = _("対象のモンスターの無理やり乗馬しペットにする。", "Rides to target monster and tame it focibly.");
283         rpi.min_level = 10;
284         rpi.cost = 0;
285         rpi.stat = A_STR;
286         rpi.fail = 10;
287         rc_ptr->add_power(rpi, RC_IDX_CLASS_0);
288         break;
289     case PlayerClassType::BERSERKER:
290         rpi = rpi_type(_("帰還", "Recall"));
291         rpi.text = _("地上にいるときはダンジョンの最深階へ、ダンジョンにいるときは地上へと移動する。",
292             "Recalls player from dungeon to town or from town to the deepest level of dungeon.");
293         rpi.min_level = 10;
294         rpi.cost = 10;
295         rpi.stat = A_DEX;
296         rpi.fail = 20;
297         rc_ptr->add_power(rpi, RC_IDX_CLASS_0);
298         break;
299     case PlayerClassType::MIRROR_MASTER:
300         rpi = rpi_type(_("鏡割り", "Break Mirrors"));
301         rpi.text = _("現在の階に設置した鏡を全て割る。割られた鏡はなくなり、破片属性のボールが発生する。", "Destroys all mirrors located in current level. They are deleted from the level.");
302         rpi.min_level = 1;
303         rpi.cost = 0;
304         rpi.stat = A_INT;
305         rpi.fail = 0;
306         rc_ptr->add_power(rpi, RC_IDX_CLASS_0);
307
308         rpi = rpi_type(_("静水", "Mirror Concentration"));
309         rpi.info = format("%s%d", KWD_MANA, 5 + rc_ptr->lvl * rc_ptr->lvl / 100);
310         rpi.text = _("精神を集中してMPを少し回復する。", "Concentrates deeply to heal your SP a little.");
311         rpi.min_level = 30;
312         rpi.cost = 0;
313         rpi.stat = A_INT;
314         rpi.fail = 20;
315         rc_ptr->add_power(rpi, -4);
316         break;
317     case PlayerClassType::SMITH:
318         rpi = rpi_type(_("目利き", "Judgment"));
319         rpi.text = _("武器・矢弾・防具を鑑定する。", "Identifies an equipment or an ammo object.");
320         rpi.min_level = 5;
321         rpi.cost = 15;
322         rpi.stat = A_INT;
323         rpi.fail = 20;
324         rc_ptr->add_power(rpi, RC_IDX_CLASS_0);
325         break;
326     case PlayerClassType::NINJA:
327         rpi = rpi_type(_("速駆け", "Quick Walk"));
328         rpi.text = _("身体を酷使して素早く移動する。", "Moves quickly but cannot regenerate HP naturally.");
329         rpi.min_level = 20;
330         rpi.cost = 0;
331         rpi.stat = A_DEX;
332         rpi.fail = 0;
333         rc_ptr->add_power(rpi, RC_IDX_CLASS_0);
334         break;
335     case PlayerClassType::ELEMENTALIST:
336         rpi = rpi_type(_("明鏡止水", "Clear Mind"));
337         rpi.info = format("%s%d", KWD_MANA, 3 + rc_ptr->lvl / 20);
338         rpi.text = _("精神を集中してMPを少し回復する。", "Concentrates deeply to heal your SP a little.");
339         rpi.min_level = 15;
340         rpi.cost = 0;
341         rpi.stat = A_WIS;
342         rpi.fail = 10;
343         rc_ptr->add_power(rpi, RC_IDX_CLASS_0);
344
345         switch_element_racial(player_ptr, rc_ptr);
346         break;
347     default:
348         break;
349     }
350 }