OSDN Git Service

Reworded English description for sniper's exploding arrow ability.
[hengband/hengband.git] / src / mind / mind-info.c
1 #include "mind/mind-info.h"
2 #include "cmd-action/cmd-spell.h"
3 #include "mind/mind-force-trainer.h"
4 #include "mind/mind-types.h"
5
6 static void switch_mind_mindcrafter(player_type *caster_ptr, const PLAYER_LEVEL plev, const int power, char *p)
7 {
8     switch (power) {
9     case 0:
10         break;
11     case 1:
12         sprintf(p, " %s%dd%d", KWD_DAM, 3 + ((plev - 1) / 4), 3 + plev / 15);
13         break;
14     case 2:
15         sprintf(p, " %s10", KWD_SPHERE);
16         break;
17     case 3:
18         sprintf(p, " %s%d", KWD_SPHERE, plev * 5);
19         break;
20     case 4:
21         break;
22     case 5:
23         sprintf(p, " %s%dd8", KWD_DAM, 8 + ((plev - 5) / 4));
24         break;
25     case 6:
26         sprintf(p, " %s%d", KWD_DURATION, plev);
27         break;
28     case 7:
29         break;
30     case 8:
31         sprintf(p, (plev < 25 ? " %s%d" : " %sd%d"), KWD_DAM, (plev < 25 ? plev * 3 / 2 : plev * ((plev - 5) / 10 + 1)));
32         break;
33     case 9:
34         sprintf(p, " %s10+d%d", KWD_DURATION, plev * 3 / 2);
35         break;
36 #ifdef JP
37     case 10:
38         sprintf(p, " 最大重量:%d.%dkg", lbtokg1(plev * 15), lbtokg2(plev * 15));
39         break;
40 #else
41     case 10:
42         sprintf(p, " max wgt %d", plev * 15);
43         break;
44 #endif
45     case 11:
46         sprintf(p, " %s%dd6", KWD_DAM, plev / 2);
47         break;
48     case 12:
49         sprintf(p, " %sd%d+%d", KWD_DAM, plev * 3, plev * 3);
50         break;
51     case 13:
52         sprintf(p, _(" 行動:%ld回", " %ld acts."), (long int)(caster_ptr->csp + 100 - caster_ptr->energy_need - 50) / 100);
53         break;
54     }
55 }
56
57 static void switch_mind_ki(player_type *caster_ptr, const PLAYER_LEVEL plev, const int power, char *p)
58 {
59     int boost = get_current_ki(caster_ptr);
60     if (heavy_armor(caster_ptr))
61         boost /= 2;
62
63     switch (power) {
64     case 0:
65         sprintf(p, " %s%dd4", KWD_DAM, 3 + ((plev - 1) / 5) + boost / 12);
66         break;
67     case 1:
68         break;
69     case 2:
70         sprintf(p, " %s%d+d30", KWD_DURATION, 30 + boost / 5);
71         break;
72     case 3:
73         sprintf(p, " %s%dd5", KWD_DAM, 5 + ((plev - 1) / 5) + boost / 10);
74         break;
75     case 4:
76         sprintf(p, " %s%d+d20", KWD_DURATION, 20 + boost / 5);
77         break;
78     case 5:
79         break;
80     case 6:
81         sprintf(p, " %s%d+d%d", KWD_DURATION, 15 + boost / 7, plev / 2);
82         break;
83     case 7:
84         sprintf(p, " %s%dd8", KWD_DAM, 8 + ((plev - 5) / 4) + boost / 12);
85         break;
86     case 8:
87         sprintf(p, " %s10d6+%d", KWD_DAM, plev * 3 / 2 + boost * 3 / 5);
88         break;
89     case 9:
90         break;
91     case 10:
92         sprintf(p, _(" 最大%d体", " max %d"), 1 + boost / 100);
93         break;
94     case 11:
95         sprintf(p, " %s%d", KWD_DAM, 100 + plev + boost);
96         break;
97     case 12:
98         sprintf(p, " %s%dd15", KWD_DAM, 10 + plev / 2 + boost * 3 / 10);
99         break;
100     case 13:
101         sprintf(p, _(" 行動:%d+d16回", " %d+d16 acts"), 16 + boost / 20);
102         break;
103     }
104 }
105
106 static void switch_mind_mirror_master(const PLAYER_LEVEL plev, const int power, char *p)
107 {
108     switch (power) {
109     case 0:
110         break;
111     case 1:
112         break;
113     case 2:
114         sprintf(p, " %s%dd4", KWD_DAM, 3 + ((plev - 1) / 5));
115         break;
116     case 3:
117         sprintf(p, " %s10", KWD_SPHERE);
118         break;
119     case 4:
120         break;
121     case 5:
122         sprintf(p, " %s%d", KWD_SPHERE, plev * 5);
123         break;
124     case 6:
125         sprintf(p, " %s20+d20", KWD_DURATION);
126         break;
127     case 7:
128         break;
129     case 8:
130         sprintf(p, " %s%dd8", KWD_DAM, 8 + ((plev - 5) / 4));
131         break;
132     case 9:
133         break;
134     case 10:
135         sprintf(p, " %s%dd8", KWD_DAM, 11 + (plev - 5) / 4);
136         break;
137     case 11:
138         break;
139     case 12:
140         sprintf(p, " %s20+d20", KWD_DURATION);
141         break;
142     case 13:
143         sprintf(p, " %s150+d%d", KWD_DAM, plev * 2);
144         break;
145     case 14:
146         break;
147     case 15:
148         break;
149     case 16:
150         sprintf(p, " %s%d", KWD_SPHERE, plev / 2 + 10);
151         break;
152     case 17:
153         break;
154     case 18:
155         sprintf(p, " %s6+d6", KWD_DURATION);
156         break;
157     case 19:
158         sprintf(p, " %s%d", KWD_DAM, plev * 11 + 5);
159         break;
160     case 20:
161         sprintf(p, " %s4+d4", KWD_DURATION);
162         break;
163     }
164 }
165
166 static void switch_mind_ninja(const PLAYER_LEVEL plev, const int power, char *p)
167 {
168     switch (power) {
169     case 0:
170     case 1:
171         break;
172     case 2:
173         sprintf(p, " %s10", KWD_SPHERE);
174         break;
175     case 3:
176         break;
177     case 4:
178         sprintf(p, " %s%d", KWD_SPHERE, plev * 5);
179         break;
180     case 5:
181         sprintf(p, " %s30", KWD_SPHERE);
182         break;
183     case 6:
184     case 7:
185         break;
186     case 8:
187         sprintf(p, " %s20+d20", KWD_DURATION);
188         break;
189     case 9:
190         sprintf(p, " %s%d", KWD_DAM, (50 + plev) / 2);
191         break;
192     case 10:
193     case 11:
194     case 12:
195     case 13:
196     case 14:
197     case 15:
198         break;
199     case 16:
200         sprintf(p, " %s%d+d%d", KWD_DURATION, plev / 2, plev / 2);
201         break;
202     case 17:
203         sprintf(p, " %s%d*3", KWD_DAM, (75 + plev * 2 / 3) / 2);
204         break;
205     case 18:
206         sprintf(p, " %s%dd10", KWD_DAM, 6 + plev / 8);
207         break;
208     case 19:
209         sprintf(p, " %s6+d6", KWD_DURATION);
210         break;
211     }
212 }
213
214 /*!
215  * @brief 特殊技能の効果情報をまとめたフォーマットを返す
216  * @param p 情報を返す文字列参照ポインタ
217  * @param use_mind 職業毎の特殊技能ID
218  * @param power モンスター魔法のID
219  * @return なし
220  */
221 void mindcraft_info(player_type *caster_ptr, char *p, int use_mind, int power)
222 {
223     const PLAYER_LEVEL plev = caster_ptr->lev;
224     strcpy(p, "");
225     switch (use_mind) {
226     case MIND_MINDCRAFTER:
227         switch_mind_mindcrafter(caster_ptr, plev, power, p);
228         break;
229     case MIND_KI:
230         switch_mind_ki(caster_ptr, plev, power, p);
231         break;
232     case MIND_MIRROR_MASTER:
233         switch_mind_mirror_master(plev, power, p);
234         break;
235     case MIND_NINJUTSU:
236         switch_mind_ninja(plev, power, p);
237         break;
238     }
239 }