OSDN Git Service

Merge branch 'develop' into macos-develop
[hengbandforosx/hengbandosx.git] / src / player-info / race-ability-info.cpp
1 #include "player-info/race-ability-info.h"
2 #include "player-info/self-info-util.h"
3 #include "system/player-type-definition.h"
4 #include "term/z-form.h"
5
6 /*!
7  * @brief レイシャルパワーの説明文を表示する
8  * @param player_ptr プレイヤー情報へのポインタ
9  * @param self_ptr 自己分析情報へのポインタ
10  * @details
11  *  使用可能レベル以上を条件とする。
12  */
13 void set_race_ability_info(PlayerType *player_ptr, self_info_type *self_ptr)
14 {
15     switch (player_ptr->prace) {
16     case PlayerRaceType::DWARF:
17         if (player_ptr->lev >= 5) {
18             self_ptr->info[self_ptr->line++] = _("あなたは罠とドアと階段を感知できる。(5 MP)", "You can find traps, doors and stairs (cost 5).");
19         }
20
21         break;
22     case PlayerRaceType::NIBELUNG:
23         if (player_ptr->lev >= 10) {
24             self_ptr->info[self_ptr->line++] = _("あなたは罠とドアと階段を感知できる。(5 MP)", "You can find traps, doors and stairs (cost 5).");
25         }
26
27         break;
28     case PlayerRaceType::HOBBIT:
29         if (player_ptr->lev >= 15) {
30             self_ptr->info[self_ptr->line++] = _("あなたは食料を生成できる。(10 MP)", "You can produce food (cost 10).");
31         }
32
33         break;
34     case PlayerRaceType::GNOME:
35         if (player_ptr->lev >= 5) {
36             self_ptr->info[self_ptr->line++] = _("あなたは範囲 10 以内にテレポートできる。(5 MP)", "You can teleport, range 10 (cost 5).");
37         }
38
39         break;
40     case PlayerRaceType::HALF_ORC:
41         if (player_ptr->lev >= 3) {
42             self_ptr->info[self_ptr->line++] = _("あなたは恐怖を除去できる。(5 MP)", "You can remove fear (cost 5).");
43         }
44
45         break;
46     case PlayerRaceType::HALF_TROLL:
47         if (player_ptr->lev >= 10) {
48             self_ptr->info[self_ptr->line++] = _("あなたは狂暴化することができる。(12 MP) ", "You can enter a berserk fury (cost 12).");
49         }
50
51         break;
52     case PlayerRaceType::AMBERITE:
53         if (player_ptr->lev >= 30) {
54             self_ptr->info[self_ptr->line++] = _("あなたはシャドウシフトすることができる。(50 MP)", "You can Shift Shadows (cost 50).");
55         }
56
57         if (player_ptr->lev >= 40) {
58             self_ptr->info[self_ptr->line++] = _("あなたは「パターン」を心に描いて歩くことができる。(75 MP)", "You can mentally Walk the Pattern (cost 75).");
59         }
60
61         break;
62     case PlayerRaceType::BARBARIAN:
63         if (player_ptr->lev >= 8) {
64             self_ptr->info[self_ptr->line++] = _("あなたは狂暴化することができる。(10 MP) ", "You can enter a berserk fury (cost 10).");
65         }
66
67         break;
68     case PlayerRaceType::HALF_OGRE:
69         if (player_ptr->lev >= 25) {
70             self_ptr->info[self_ptr->line++] = _("あなたは爆発のルーンを仕掛けることができる。(35 MP)", "You can set an Explosive Rune (cost 35).");
71         }
72
73         break;
74     case PlayerRaceType::HALF_GIANT:
75         if (player_ptr->lev >= 20) {
76             self_ptr->info[self_ptr->line++] = _("あなたは石の壁を壊すことができる。(10 MP)", "You can break stone walls (cost 10).");
77         }
78
79         break;
80     case PlayerRaceType::HALF_TITAN:
81         if (player_ptr->lev >= 15) {
82             self_ptr->info[self_ptr->line++] = _("あなたはモンスターをスキャンすることができる。(10 MP)", "You can probe monsters (cost 10).");
83         }
84
85         break;
86     case PlayerRaceType::CYCLOPS:
87         if (player_ptr->lev >= 20) {
88             strnfmt(self_ptr->plev_buf, sizeof(self_ptr->plev_buf), _("あなたは %d ダメージの岩石を投げることができる。(15 MP)", "You can throw a boulder, dam. %d (cost 15)."),
89                 (3 * player_ptr->lev) / 2);
90             self_ptr->info[self_ptr->line++] = self_ptr->plev_buf;
91         }
92
93         break;
94     case PlayerRaceType::YEEK:
95         if (player_ptr->lev >= 15) {
96             self_ptr->info[self_ptr->line++] = _("あなたは恐怖を呼び起こす叫び声を発することができる。(15 MP)", "You can make a terrifying scream (cost 15).");
97         }
98
99         break;
100     case PlayerRaceType::KLACKON:
101         if (player_ptr->lev >= 9) {
102             strnfmt(
103                 self_ptr->plev_buf, sizeof(self_ptr->plev_buf), _("あなたは %d ダメージの酸を吹きかけることができる。(9 MP)", "You can spit acid, dam. %d (cost 9)."), player_ptr->lev);
104             self_ptr->info[self_ptr->line++] = self_ptr->plev_buf;
105         }
106
107         break;
108     case PlayerRaceType::KOBOLD:
109         if (player_ptr->lev >= 12) {
110             strnfmt(self_ptr->plev_buf, sizeof(self_ptr->plev_buf), _("あなたは %d ダメージの毒矢を投げることができる。(8 MP)", "You can throw a dart of poison, dam. %d (cost 8)."),
111                 player_ptr->lev);
112             self_ptr->info[self_ptr->line++] = self_ptr->plev_buf;
113         }
114
115         break;
116     case PlayerRaceType::DARK_ELF:
117         if (player_ptr->lev >= 2) {
118             strnfmt(self_ptr->plev_buf, sizeof(self_ptr->plev_buf), _("あなたは %d ダメージのマジック・ミサイルの呪文を使える。(2 MP)", "You can cast a Magic Missile, dam %d (cost 2)."),
119                 (3 + ((player_ptr->lev - 1) / 5)));
120             self_ptr->info[self_ptr->line++] = self_ptr->plev_buf;
121         }
122
123         break;
124     case PlayerRaceType::DRACONIAN:
125         strnfmt(self_ptr->plev_buf, sizeof(self_ptr->plev_buf), _("あなたは %d ダメージのブレスを吐くことができる。(%d MP)", "You can breathe, dam. %d (cost %d)."), 2 * player_ptr->lev,
126             player_ptr->lev);
127         self_ptr->info[self_ptr->line++] = self_ptr->plev_buf;
128         break;
129     case PlayerRaceType::MIND_FLAYER:
130         if (player_ptr->lev >= 15) {
131             strnfmt(self_ptr->plev_buf, sizeof(self_ptr->plev_buf), _("あなたは %d ダメージの精神攻撃をすることができる。(12 MP)", "You can mind blast your enemies, dam %d (cost 12)."),
132                 player_ptr->lev);
133         }
134
135         self_ptr->info[self_ptr->line++] = self_ptr->plev_buf;
136         break;
137     case PlayerRaceType::IMP:
138         if (player_ptr->lev >= 30) {
139             strnfmt(self_ptr->plev_buf, sizeof(self_ptr->plev_buf), _("あなたは %d ダメージのファイア・ボールの呪文を使える。(15 MP)", "You can cast a Fire Ball, dam. %d (cost 15)."),
140                 player_ptr->lev);
141             self_ptr->info[self_ptr->line++] = self_ptr->plev_buf;
142             break;
143         }
144
145         if (player_ptr->lev >= 9) {
146             strnfmt(self_ptr->plev_buf, sizeof(self_ptr->plev_buf), _("あなたは %d ダメージのファイア・ボルトの呪文を使える。(15 MP)", "You can cast a Fire Bolt, dam. %d (cost 15)."),
147                 player_ptr->lev);
148             self_ptr->info[self_ptr->line++] = self_ptr->plev_buf;
149         }
150
151         break;
152     case PlayerRaceType::GOLEM:
153         if (player_ptr->lev >= 20) {
154             self_ptr->info[self_ptr->line++] = _("あなたは d20+30 ターンの間肌を石に変化させられる。(15 MP)", "You can turn your skin to stone, dur d20+30 (cost 15).");
155         }
156
157         break;
158     case PlayerRaceType::ZOMBIE:
159     case PlayerRaceType::SKELETON:
160         if (player_ptr->lev >= 30) {
161             self_ptr->info[self_ptr->line++] = _("あなたは失った経験値を回復することができる。(30 MP)", "You can restore lost experience (cost 30).");
162         }
163
164         break;
165     case PlayerRaceType::VAMPIRE:
166         if (player_ptr->lev < 2) {
167             break;
168         }
169
170         strnfmt(self_ptr->plev_buf, sizeof(self_ptr->plev_buf), _("あなたは敵から %d HP の生命力を吸収できる。(%d MP)", "You can steal life from a foe, dam. %d (cost %d)."),
171             player_ptr->lev * 2, 1 + (player_ptr->lev / 3));
172         self_ptr->info[self_ptr->line++] = self_ptr->plev_buf;
173         break;
174     case PlayerRaceType::SPECTRE:
175         if (player_ptr->lev >= 4) {
176             self_ptr->info[self_ptr->line++] = _("あなたは泣き叫んで敵を恐怖させることができる。(6 MP)", "You can wail to terrify your enemies (cost 6).");
177         }
178
179         break;
180     case PlayerRaceType::SPRITE:
181         if (player_ptr->lev >= 12) {
182             self_ptr->info[self_ptr->line++] = _("あなたは敵を眠らせる魔法の粉を投げることができる。(12 MP)", "You can throw magical dust which induces sleep (cost 12).");
183         }
184
185         break;
186     case PlayerRaceType::BALROG:
187         strnfmt(self_ptr->plev_buf, sizeof(self_ptr->plev_buf), _("あなたは %d ダメージの地獄か火炎のブレスを吐くことができる。(%d MP)", "You can breathe nether, dam. %d (cost %d)."),
188             3 * player_ptr->lev, 10 + player_ptr->lev / 3);
189         self_ptr->info[self_ptr->line++] = self_ptr->plev_buf;
190         break;
191     case PlayerRaceType::KUTAR:
192         if (player_ptr->lev >= 20) {
193             self_ptr->info[self_ptr->line++] = _("あなたは d20+30 ターンの間横に伸びることができる。(15 MP)", "You can expand horizontally, dur d20+30 (cost 15).");
194         }
195
196         break;
197     case PlayerRaceType::ANDROID:
198         if (player_ptr->lev < 10) {
199             strnfmt(self_ptr->plev_buf, sizeof(self_ptr->plev_buf), _("あなたは %d ダメージのレイガンを撃つことができる。(7 MP)", "You can fire a ray gun with damage %d (cost 7)."),
200                 (player_ptr->lev + 1) / 2);
201         } else if (player_ptr->lev < 25) {
202             strnfmt(self_ptr->plev_buf, sizeof(self_ptr->plev_buf), _("あなたは %d ダメージのブラスターを撃つことができる。(13 MP)", "You can fire a blaster with damage %d (cost 13)."),
203                 player_ptr->lev);
204         } else if (player_ptr->lev < 35) {
205             strnfmt(self_ptr->plev_buf, sizeof(self_ptr->plev_buf), _("あなたは %d ダメージのバズーカを撃つことができる。(26 MP)", "You can fire a bazooka with damage %d (cost 26)."),
206                 player_ptr->lev * 2);
207         } else if (player_ptr->lev < 45) {
208             strnfmt(self_ptr->plev_buf, sizeof(self_ptr->plev_buf),
209                 _("あなたは %d ダメージのビームキャノンを撃つことができる。(40 MP)", "You can fire a beam cannon with damage %d (cost 40)."),
210                 player_ptr->lev * 2);
211         } else {
212             strnfmt(self_ptr->plev_buf, sizeof(self_ptr->plev_buf), _("あなたは %d ダメージのロケットを撃つことができる。(60 MP)", "You can fire a rocket with damage %d (cost 60)."),
213                 player_ptr->lev * 5);
214         }
215
216         self_ptr->info[self_ptr->line++] = self_ptr->plev_buf;
217         break;
218     default:
219         break;
220     }
221 }