OSDN Git Service

[Refactor] #37353 ソースファイル改名。
[hengband/hengband.git] / src / cmd-spell.c
1 /*!\r
2     @file cmd-spell.c\r
3     @brief 魔法のインターフェイスと発動 / Purpose: Do everything for each spell\r
4     @date 2013/12/31\r
5     @author\r
6     2013 Deskull rearranged comment for Doxygen.\r
7  */\r
8 \r
9 #include "angband.h"\r
10 #include "selfinfo.h"\r
11 #include "spells-summon.h"\r
12 #include "realm-arcane.h"\r
13 #include "realm-chaos.h"\r
14 #include "realm-craft.h"\r
15 #include "realm-crusade.h"\r
16 #include "realm-daemon.h"\r
17 #include "realm-death.h"\r
18 #include "realm-hex.h"\r
19 #include "realm-hissatsu.h"\r
20 #include "realm-life.h"\r
21 #include "realm-nature.h"\r
22 #include "realm-song.h"\r
23 #include "realm-sorcery.h"\r
24 #include "realm-trump.h"\r
25 \r
26 /*!\r
27  * @brief\r
28  * 魔法の効果を「キャプション:ダイス+定数値」のフォーマットで出力する / Generate dice info string such as "foo 2d10"\r
29  * @param str キャプション\r
30  * @param dice ダイス数\r
31  * @param sides ダイス目\r
32  * @param base 固定値\r
33  * @return フォーマットに従い整形された文字列\r
34  */\r
35 cptr info_string_dice(cptr str, int dice, int sides, int base)\r
36 {\r
37         /* Fix value */\r
38         if (!dice)\r
39                 return format("%s%d", str, base);\r
40 \r
41         /* Dice only */\r
42         else if (!base)\r
43                 return format("%s%dd%d", str, dice, sides);\r
44 \r
45         /* Dice plus base value */\r
46         else\r
47                 return format("%s%dd%d%+d", str, dice, sides, base);\r
48 }\r
49 \r
50 \r
51 /*!\r
52  * @brief 魔法によるダメージを出力する / Generate damage-dice info string such as "dam 2d10"\r
53  * @param dice ダイス数\r
54  * @param sides ダイス目\r
55  * @param base 固定値\r
56  * @return フォーマットに従い整形された文字列\r
57  */\r
58 cptr info_damage(int dice, int sides, int base)\r
59 {\r
60         return info_string_dice(_("損傷:", "dam "), dice, sides, base);\r
61 }\r
62 \r
63 /*!\r
64  * @brief 魔法の効果時間を出力する / Generate duration info string such as "dur 20+1d20"\r
65  * @param base 固定値\r
66  * @param sides ダイス目\r
67  * @return フォーマットに従い整形された文字列\r
68  */\r
69 cptr info_duration(int base, int sides)\r
70 {\r
71         return format(_("期間:%d+1d%d", "dur %d+1d%d"), base, sides);\r
72 }\r
73 \r
74 /*!\r
75  * @brief 魔法の効果範囲を出力する / Generate range info string such as "range 5"\r
76  * @param range 効果範囲\r
77  * @return フォーマットに従い整形された文字列\r
78  */\r
79 cptr info_range(POSITION range)\r
80 {\r
81         return format(_("範囲:%d", "range %d"), range);\r
82 }\r
83 \r
84 /*!\r
85  * @brief 魔法による回復量を出力する / Generate heal info string such as "heal 2d8"\r
86  * @param dice ダイス数\r
87  * @param sides ダイス目\r
88  * @param base 固定値\r
89  * @return フォーマットに従い整形された文字列\r
90  */\r
91 cptr info_heal(int dice, int sides, int base)\r
92 {\r
93         return info_string_dice(_("回復:", "heal "), dice, sides, base);\r
94 }\r
95 \r
96 /*!\r
97  * @brief 魔法効果発動までの遅延ターンを出力する / Generate delay info string such as "delay 15+1d15"\r
98  * @param base 固定値\r
99  * @param sides ダイス目\r
100  * @return フォーマットに従い整形された文字列\r
101  */\r
102 cptr info_delay(int base, int sides)\r
103 {\r
104         return format(_("遅延:%d+1d%d", "delay %d+1d%d"), base, sides);\r
105 }\r
106 \r
107 \r
108 /*!\r
109  * @brief 魔法によるダメージを出力する(固定値&複数回処理) / Generate multiple-damage info string such as "dam 25 each"\r
110  * @param dam 固定値\r
111  * @return フォーマットに従い整形された文字列\r
112  */\r
113 cptr info_multi_damage(HIT_POINT dam)\r
114 {\r
115         return format(_("損傷:各%d", "dam %d each"), dam);\r
116 }\r
117 \r
118 \r
119 /*!\r
120  * @brief 魔法によるダメージを出力する(ダイスのみ&複数回処理) / Generate multiple-damage-dice info string such as "dam 5d2 each"\r
121  * @param dice ダイス数\r
122  * @param sides ダイス目\r
123  * @return フォーマットに従い整形された文字列\r
124  */\r
125 cptr info_multi_damage_dice(int dice, int sides)\r
126 {\r
127         return format(_("損傷:各%dd%d", "dam %dd%d each"), dice, sides);\r
128 }\r
129 \r
130 /*!\r
131  * @brief 魔法による一般的な効力値を出力する(固定値) / Generate power info string such as "power 100"\r
132  * @param power 固定値\r
133  * @return フォーマットに従い整形された文字列\r
134  */\r
135 cptr info_power(int power)\r
136 {\r
137         return format(_("効力:%d", "power %d"), power);\r
138 }\r
139 \r
140 \r
141 /*!\r
142  * @brief 魔法による一般的な効力値を出力する(ダイス値) / Generate power info string such as "power 100"\r
143  * @param dice ダイス数\r
144  * @param sides ダイス目\r
145  * @return フォーマットに従い整形された文字列\r
146  */\r
147 /*\r
148  * Generate power info string such as "power 1d100"\r
149  */\r
150 cptr info_power_dice(int dice, int sides)\r
151 {\r
152         return format(_("効力:%dd%d", "power %dd%d"), dice, sides);\r
153 }\r
154 \r
155 \r
156 /*!\r
157  * @brief 魔法の効果半径を出力する / Generate radius info string such as "rad 100"\r
158  * @param rad 効果半径\r
159  * @return フォーマットに従い整形された文字列\r
160  */\r
161 cptr info_radius(int rad)\r
162 {\r
163         return format(_("半径:%d", "rad %d"), rad);\r
164 }\r
165 \r
166 \r
167 /*!\r
168  * @brief 魔法効果の限界重量を出力する / Generate weight info string such as "max wgt 15"\r
169  * @param weight 最大重量\r
170  * @return フォーマットに従い整形された文字列\r
171  */\r
172 cptr info_weight(int weight)\r
173 {\r
174 #ifdef JP\r
175         return format("最大重量:%d.%dkg", lbtokg1(weight), lbtokg2(weight));\r
176 #else\r
177         return format("max wgt %d", weight/10);\r
178 #endif\r
179 }\r
180 \r
181 \r
182 \r
183 \r
184 \r
185 /*!\r
186  * @brief 魔法処理のメインルーチン\r
187  * @param realm 魔法領域のID\r
188  * @param spell 各領域の魔法ID\r
189  * @param mode 求める処理\r
190  * @return 各領域魔法に各種テキストを求めた場合は文字列参照ポインタ、そうでない場合はNULLポインタを返す。\r
191  */\r
192 cptr do_spell(REALM_IDX realm, SPELL_IDX spell, BIT_FLAGS mode)\r
193 {\r
194         switch (realm)\r
195         {\r
196         case REALM_LIFE:     return do_life_spell(spell, mode);\r
197         case REALM_SORCERY:  return do_sorcery_spell(spell, mode);\r
198         case REALM_NATURE:   return do_nature_spell(spell, mode);\r
199         case REALM_CHAOS:    return do_chaos_spell(spell, mode);\r
200         case REALM_DEATH:    return do_death_spell(spell, mode);\r
201         case REALM_TRUMP:    return do_trump_spell(spell, mode);\r
202         case REALM_ARCANE:   return do_arcane_spell(spell, mode);\r
203         case REALM_CRAFT:    return do_craft_spell(spell, mode);\r
204         case REALM_DAEMON:   return do_daemon_spell(spell, mode);\r
205         case REALM_CRUSADE:  return do_crusade_spell(spell, mode);\r
206         case REALM_MUSIC:    return do_music_spell(spell, mode);\r
207         case REALM_HISSATSU: return do_hissatsu_spell(spell, mode);\r
208         case REALM_HEX:      return do_hex_spell(spell, mode);\r
209         }\r
210 \r
211         return NULL;\r
212 }\r