OSDN Git Service

841ebd63a8d45691e6514f6bfedc84ba636ead3c
[hengband/hengband.git] / src / spells.h
1 #pragma once
2 #include "realm.h"
3
4 #define DETECT_RAD_DEFAULT 30
5 #define DETECT_RAD_MAP     30
6 #define DETECT_RAD_ALL     255
7
8 #define SPOP_DISPLAY_MES    0x0001 // !< スペル処理オプション … メッセージを表示する
9 #define SPOP_NO_UPDATE      0x0002 // !< スペル処理オプション … ステータス更新を解決後行う
10 #define SPOP_DEBUG          0x8000 // !< スペル処理オプション … デバッグ処理あり
11
12 /*
13  * Spell types used by project(), and related functions.
14  */
15 #define GF_ELEC         1                       /*!< 魔法効果: 電撃*/
16 #define GF_POIS         2                       /*!< 魔法効果: 毒*/
17 #define GF_ACID         3                       /*!< 魔法効果: 酸*/
18 #define GF_COLD         4                       /*!< 魔法効果: 冷気*/
19 #define GF_FIRE         5                       /*!< 魔法効果: 火炎*/
20 #define GF_PSY_SPEAR    9                       /*!< 魔法効果: 光の剣*/
21 #define GF_MISSILE      10                      /*!< 魔法効果: 弱魔力*/
22 #define GF_ARROW        11                      /*!< 魔法効果: 射撃*/
23 #define GF_PLASMA       12                      /*!< 魔法効果: プラズマ*/
24  /* Replaced with GF_HOLY_FIRE and GF_HELL_FIRE */
25  /* #define GF_HOLY_ORB     13 */
26 #define GF_WATER        14                      /*!< 魔法効果: 水流*/
27 #define GF_LITE         15                      /*!< 魔法効果: 閃光*/
28 #define GF_DARK         16                      /*!< 魔法効果: 暗黒*/
29 #define GF_LITE_WEAK    17                      /*!< 魔法効果: 弱光*/
30 #define GF_DARK_WEAK    18                      /*!< 魔法効果: 弱暗*/
31 #define GF_SHARDS       20                      /*!< 魔法効果: 破片*/
32 #define GF_SOUND        21                      /*!< 魔法効果: 轟音*/
33 #define GF_CONFUSION    22                      /*!< 魔法効果: 混乱*/
34 #define GF_FORCE        23                      /*!< 魔法効果: フォース*/
35 #define GF_INERTIAL     24                      /*!< 魔法効果: 遅鈍*/
36 #define GF_MANA         26                      /*!< 魔法効果: 純粋魔力*/
37 #define GF_METEOR       27                      /*!< 魔法効果: 隕石*/
38 #define GF_ICE          28                      /*!< 魔法効果: 極寒*/
39 #define GF_CHAOS        30                      /*!< 魔法効果: カオス*/
40 #define GF_NETHER       31                      /*!< 魔法効果: 地獄*/
41 #define GF_DISENCHANT   32                      /*!< 魔法効果: 劣化*/
42 #define GF_NEXUS        33                      /*!< 魔法効果: 因果混乱*/
43 #define GF_TIME         34                      /*!< 魔法効果: 時間逆転*/
44 #define GF_GRAVITY      35                      /*!< 魔法効果: 重力*/
45 #define GF_KILL_WALL    40                      /*!< 魔法効果: 岩石溶解*/
46 #define GF_KILL_DOOR    41                      /*!< 魔法効果: ドア破壊*/
47 #define GF_KILL_TRAP    42                      /*!< 魔法効果: トラップ破壊*/
48 #define GF_MAKE_WALL    45                      /*!< 魔法効果: 壁生成*/
49 #define GF_MAKE_DOOR    46                      /*!< 魔法効果: ドア生成*/
50 #define GF_MAKE_TRAP    47                      /*!< 魔法効果: トラップ生成*/
51 #define GF_MAKE_TREE    48                      /*!< 魔法効果: 森林生成*/
52 #define GF_OLD_CLONE    51                      /*!< 魔法効果: クローン・モンスター*/
53 #define GF_OLD_POLY     52                      /*!< 魔法効果: チェンジ・モンスター*/
54 #define GF_OLD_HEAL     53                      /*!< 魔法効果: 回復モンスター*/
55 #define GF_OLD_SPEED    54                      /*!< 魔法効果: スピード・モンスター*/
56 #define GF_OLD_SLOW     55                      /*!< 魔法効果: スロウ・モンスター*/
57 #define GF_OLD_CONF     56                      /*!< 魔法効果: パニック・モンスター*/
58 #define GF_OLD_SLEEP    57                      /*!< 魔法効果: スリープ・モンスター*/
59 #define GF_HYPODYNAMIA  58                      /*!< 魔法効果: 衰弱*/
60 #define GF_AWAY_UNDEAD  61                      /*!< 魔法効果: アンデッド・アウェイ*/
61 #define GF_AWAY_EVIL    62                      /*!< 魔法効果: 邪悪飛ばし*/
62 #define GF_AWAY_ALL     63                      /*!< 魔法効果: テレポート・アウェイ*/
63 #define GF_TURN_UNDEAD  64                      /*!< 魔法効果: アンデッド恐慌*/
64 #define GF_TURN_EVIL    65                      /*!< 魔法効果: 邪悪恐慌*/
65 #define GF_TURN_ALL     66                      /*!< 魔法効果: モンスター恐慌*/
66 #define GF_DISP_UNDEAD  67                      /*!< 魔法効果: アンデッド退散*/
67 #define GF_DISP_EVIL    68                      /*!< 魔法効果: 邪悪退散*/
68 #define GF_DISP_ALL     69                      /*!< 魔法効果: モンスター退散*/
69 /* New types for Zangband begin here... */
70 #define GF_DISP_DEMON      70           /*!< 魔法効果: 悪魔退散*/
71 #define GF_DISP_LIVING     71           /*!< 魔法効果: 生命退散*/
72 #define GF_ROCKET          72           /*!< 魔法効果: ロケット*/
73 #define GF_NUKE            73           /*!< 魔法効果: 放射性廃棄物*/
74 #define GF_MAKE_GLYPH      74           /*!< 魔法効果: 守りのルーン生成*/
75 #define GF_STASIS          75           /*!< 魔法効果: モンスター拘束*/
76 #define GF_STONE_WALL      76           /*!< 魔法効果: 壁生成*/
77 #define GF_DEATH_RAY       77           /*!< 魔法効果: 死の光線*/
78 #define GF_STUN            78           /*!< 魔法効果: 朦朧*/
79 #define GF_HOLY_FIRE       79           /*!< 魔法効果: 聖光*/
80 #define GF_HELL_FIRE       80           /*!< 魔法効果: 地獄の劫火*/
81 #define GF_DISINTEGRATE    81           /*!< 魔法効果: 分解*/
82 #define GF_CHARM           82           /*!< 魔法効果: モンスター魅了*/
83 #define GF_CONTROL_UNDEAD  83           /*!< 魔法効果: アンデッド支配*/
84 #define GF_CONTROL_ANIMAL  84           /*!< 魔法効果: 動物支配*/
85 #define GF_PSI             85           /*!< 魔法効果: サイキック攻撃*/
86 #define GF_PSI_DRAIN       86           /*!< 魔法効果: 精神吸収*/
87 #define GF_TELEKINESIS     87           /*!< 魔法効果: テレキシネス*/
88 #define GF_JAM_DOOR        88           /*!< 魔法効果: 施錠*/
89 #define GF_DOMINATION      89           /*!< 魔法効果: 精神支配*/
90 #define GF_DISP_GOOD       90           /*!< 魔法効果: 善良退散*/
91 #define GF_DRAIN_MANA      91           /*!< 魔法効果: 魔力吸収*/
92 #define GF_MIND_BLAST      92           /*!< 魔法効果: 精神攻撃*/
93 #define GF_BRAIN_SMASH     93           /*!< 魔法効果: 脳攻撃*/
94 #define GF_CAUSE_1         94           /*!< 魔法効果: 軽傷の呪い*/
95 #define GF_CAUSE_2         95           /*!< 魔法効果: 重傷の呪い*/
96 #define GF_CAUSE_3         96           /*!< 魔法効果: 致命傷の呪い*/
97 #define GF_CAUSE_4         97           /*!< 魔法効果: 秘孔を突く*/
98 #define GF_HAND_DOOM       98           /*!< 魔法効果: 破滅の手*/
99 #define GF_CAPTURE         99           /*!< 魔法効果: 捕縛*/
100 #define GF_ANIM_DEAD      100           /*!< 魔法効果: 死者復活*/
101 #define GF_CHARM_LIVING   101           /*!< 魔法効果: 生命魅了*/
102 #define GF_IDENTIFY       102           /*!< 魔法効果: 鑑定*/
103 #define GF_ATTACK         103           /*!< 魔法効果: 白兵*/
104 #define GF_ENGETSU        104           /*!< 魔法効果: 円月*/
105 #define GF_GENOCIDE       105           /*!< 魔法効果: 抹殺*/
106 #define GF_PHOTO          106           /*!< 魔法効果: 撮影*/
107 #define GF_CONTROL_DEMON  107           /*!< 魔法効果: 悪魔支配*/
108 #define GF_LAVA_FLOW      108           /*!< 魔法効果: 溶岩噴出*/
109 #define GF_BLOOD_CURSE    109           /*!< 魔法効果: 血の呪い*/
110 #define GF_SEEKER         110           /*!< 魔法効果: シーカーレイ*/
111 #define GF_SUPER_RAY      111           /*!< 魔法効果: スーパーレイ*/
112 #define GF_STAR_HEAL      112           /*!< 魔法効果: 星の癒し*/
113 #define GF_WATER_FLOW     113           /*!< 魔法効果: 流水*/
114 #define GF_CRUSADE        114           /*!< 魔法効果: 聖戦*/
115 #define GF_STASIS_EVIL    115           /*!< 魔法効果: 邪悪拘束*/
116 #define GF_WOUNDS         116           /*!< 魔法効果: 創傷*/
117
118 #define MAX_GF         117
119
120 /*
121  * The "name" of spell 'N' is stored as spell_names[X][N],
122  * where X is 0 for mage-spells and 1 for priest-spells.
123  */
124 typedef struct magic_type magic_type;
125
126 struct magic_type
127 {
128         PLAYER_LEVEL slevel;    /* Required level (to learn) */
129         MANA_POINT smana;               /* Required mana (to cast) */
130         PERCENTAGE sfail;               /* Minimum chance of failure */
131         EXP sexp;                               /* Encoded experience bonus */
132 };
133
134 extern int cap_mon;
135 extern int cap_mspeed;
136 extern HIT_POINT cap_hp;
137 extern HIT_POINT cap_maxhp;
138 extern STR_OFFSET cap_nickname;
139 extern bool sukekaku;
140
141 extern const magic_type technic_info[NUM_TECHNIC][32];
142
143 /* spells1.c */
144 extern PERCENTAGE beam_chance(void);
145 extern bool in_disintegration_range(POSITION y1, POSITION x1, POSITION y2, POSITION x2);
146 extern void breath_shape(u16b *path_g, int dist, int *pgrids, POSITION *gx, POSITION *gy, POSITION *gm, POSITION *pgm_rad, POSITION rad, POSITION y1, POSITION x1, POSITION y2, POSITION x2, EFFECT_ID typ);
147 extern POSITION dist_to_line(POSITION y, POSITION x, POSITION y1, POSITION x1, POSITION y2, POSITION x2);
148
149 #define PROJECT_WHO_UNCTRL_POWER -1 /*!< 魔法効果の自然発生要因: 名状し難い力の解放 */
150 #define PROJECT_WHO_GLASS_SHARDS -2 /*!< 魔法効果の自然発生要因: 破壊されたガラス地形の破片 */
151 extern bool project(MONSTER_IDX who, POSITION rad, POSITION y, POSITION x, HIT_POINT dam, EFFECT_ID typ, BIT_FLAGS flg, int monspell);
152
153 extern int project_length;
154 extern bool binding_field(HIT_POINT dam);
155 extern void seal_of_mirror(HIT_POINT dam);
156 extern concptr spell_category_name(OBJECT_TYPE_VALUE tval);
157
158 /* spells2.c */
159 extern bool detect_traps(POSITION range, bool known);
160 extern bool detect_doors(POSITION range);
161 extern bool detect_stairs(POSITION range);
162 extern bool detect_treasure(POSITION range);
163 extern bool detect_objects_gold(POSITION range);
164 extern bool detect_objects_normal(POSITION range);
165 extern bool detect_objects_magic(POSITION range);
166 extern bool detect_monsters_normal(POSITION range);
167 extern bool detect_monsters_invis(POSITION range);
168 extern bool detect_monsters_evil(POSITION range);
169 extern bool detect_monsters_xxx(POSITION range, u32b match_flag);
170 extern bool detect_monsters_string(POSITION range, concptr);
171 extern bool detect_monsters_nonliving(POSITION range);
172 extern bool detect_monsters_mind(POSITION range);
173 extern bool detect_all(POSITION range);
174 extern bool wall_stone(void);
175 extern bool speed_monsters(void);
176 extern bool slow_monsters(int power);
177 extern bool sleep_monsters(int power);
178 extern void aggravate_monsters(MONSTER_IDX who);
179 extern bool genocide_aux(MONSTER_IDX m_idx, int power, bool player_cast, int dam_side, concptr spell_name);
180 extern bool symbol_genocide(int power, bool player_cast);
181 extern bool mass_genocide(int power, bool player_cast);
182 extern bool mass_genocide_undead(int power, bool player_cast);
183 extern bool probing(void);
184 extern bool banish_evil(int dist);
185 extern bool dispel_evil(HIT_POINT dam);
186 extern bool dispel_good(HIT_POINT dam);
187 extern bool dispel_undead(HIT_POINT dam);
188 extern bool dispel_monsters(HIT_POINT dam);
189 extern bool dispel_living(HIT_POINT dam);
190 extern bool dispel_demons(HIT_POINT dam);
191 extern bool cleansing_nova(player_type *creature_ptr, bool magic, bool powerful);
192 extern bool unleash_mana_storm(player_type *creature_ptr, bool powerful);
193 extern bool crusade(void);
194 extern bool turn_undead(void);
195 extern void lite_room(POSITION y1, POSITION x1);
196 extern bool starlight(bool magic);
197 extern void unlite_room(POSITION y1, POSITION x1);
198 extern bool lite_area(HIT_POINT dam, POSITION rad);
199 extern bool unlite_area(HIT_POINT dam, POSITION rad);
200 extern bool fire_ball(EFFECT_ID typ, DIRECTION dir, HIT_POINT dam, POSITION rad);
201 extern bool fire_breath(EFFECT_ID typ, DIRECTION dir, HIT_POINT dam, POSITION rad);
202 extern bool fire_rocket(EFFECT_ID typ, DIRECTION dir, HIT_POINT dam, POSITION rad);
203 extern bool fire_ball_hide(EFFECT_ID typ, DIRECTION dir, HIT_POINT dam, POSITION rad);
204 extern bool fire_meteor(MONSTER_IDX who, EFFECT_ID typ, POSITION x, POSITION y, HIT_POINT dam, POSITION rad);
205 extern bool fire_bolt(EFFECT_ID typ, DIRECTION dir, HIT_POINT dam);
206 extern bool fire_blast(EFFECT_ID typ, DIRECTION dir, DICE_NUMBER dd, DICE_SID ds, int num, int dev);
207 extern void call_chaos(void);
208 extern bool fire_beam(EFFECT_ID typ, DIRECTION dir, HIT_POINT dam);
209 extern bool fire_bolt_or_beam(PERCENTAGE prob, EFFECT_ID typ, DIRECTION dir, HIT_POINT dam);
210 extern bool lite_line(DIRECTION dir, HIT_POINT dam);
211 extern bool hypodynamic_bolt(DIRECTION dir, HIT_POINT dam);
212 extern bool death_ray(DIRECTION dir, PLAYER_LEVEL plev);
213 extern bool wall_to_mud(DIRECTION dir, HIT_POINT dam);
214 extern bool destroy_door(DIRECTION dir);
215 extern bool disarm_trap(DIRECTION dir);
216 extern bool wizard_lock(DIRECTION dir);
217 extern bool teleport_monster(DIRECTION dir, int distance);
218 extern bool door_creation(void);
219 extern bool trap_creation(POSITION y, POSITION x);
220 extern bool tree_creation(void);
221 extern bool glyph_creation(void);
222 extern bool destroy_doors_touch(void);
223 extern bool disarm_traps_touch(void);
224 extern bool animate_dead(MONSTER_IDX who, POSITION y, POSITION x);
225 extern bool sleep_monsters_touch(void);
226 extern bool activate_ty_curse(bool stop_ty, int *count);
227 extern int activate_hi_summon(POSITION y, POSITION x, bool can_pet);
228 extern void wall_breaker(void);
229 extern bool confuse_monsters(HIT_POINT dam);
230 extern bool charm_monsters(HIT_POINT dam);
231 extern bool charm_animals(HIT_POINT dam);
232 extern bool stun_monsters(HIT_POINT dam);
233 extern bool stasis_monsters(HIT_POINT dam);
234 extern bool banish_monsters(int dist);
235 extern bool turn_monsters(HIT_POINT dam);
236 extern bool turn_evil(HIT_POINT dam);
237 extern bool deathray_monsters(void);
238 extern bool charm_monster(DIRECTION dir, PLAYER_LEVEL plev);
239 extern bool control_one_undead(DIRECTION dir, PLAYER_LEVEL plev);
240 extern bool control_one_demon(DIRECTION dir, PLAYER_LEVEL plev);
241 extern bool charm_animal(DIRECTION dir, PLAYER_LEVEL plev);
242 extern bool mindblast_monsters(HIT_POINT dam);
243 extern bool teleport_swap(DIRECTION dir);
244 extern bool project_hook(EFFECT_ID typ, DIRECTION dir, HIT_POINT dam, BIT_FLAGS flg);
245 extern bool project_all_los(EFFECT_ID typ, HIT_POINT dam);
246 extern bool eat_magic(int power);
247 extern void discharge_minion(void);
248 extern bool kawarimi(bool success);
249 extern bool rush_attack(bool *mdeath);
250 extern void remove_all_mirrors(bool explode);
251 extern void ring_of_power(DIRECTION dir);
252 extern void wild_magic(int spell);
253 extern void cast_meteor(HIT_POINT dam, POSITION rad);
254 extern bool cast_wrath_of_the_god(HIT_POINT dam, POSITION rad);
255 extern void cast_wonder(DIRECTION dir);
256 extern void cast_invoke_spirits(DIRECTION dir);
257 extern void cast_shuffle(void);
258 extern void stop_mouth(void);
259 extern bool_hack vampirism(void);
260 extern bool panic_hit(void);
261 extern bool psychometry(void);
262 extern bool draconian_breath(player_type *creature_ptr);
263 extern bool android_inside_weapon(player_type *creature_ptr);
264 extern bool create_ration(player_type *crature_ptr);
265 extern void hayagake(player_type *creature_ptr);
266 extern bool double_attack(player_type *creature_ptr);
267 extern bool comvert_hp_to_mp(player_type *creature_ptr);
268 extern bool comvert_mp_to_hp(player_type *creature_ptr);
269 extern bool demonic_breath(player_type *creature_ptr);
270 extern bool mirror_concentration(player_type *creature_ptr);
271 extern bool sword_dancing(player_type *creature_ptr);
272 extern bool confusing_light(player_type *creature_ptr);
273 extern bool rodeo(player_type *creature_ptr);
274 extern bool clear_mind(player_type *creature_ptr);
275 extern bool concentration(player_type *creature_ptr);
276
277 /*
278  * Bit flags for teleportation
279  */
280 #define TELEPORT_NONMAGICAL 0x00000001
281 #define TELEPORT_PASSIVE    0x00000002
282 #define TELEPORT_DEC_VALOUR 0x00000004
283
284 /* spells3.c */
285 extern bool teleport_away(MONSTER_IDX m_idx, POSITION dis, BIT_FLAGS mode);
286 extern void teleport_monster_to(MONSTER_IDX m_idx, POSITION ty, POSITION tx, int power, BIT_FLAGS mode);
287 extern bool teleport_player_aux(POSITION dis, BIT_FLAGS mode);
288 extern void teleport_player(POSITION dis, BIT_FLAGS mode);
289 extern void teleport_player_away(MONSTER_IDX m_idx, POSITION dis);
290 extern void teleport_player_to(POSITION ny, POSITION nx, BIT_FLAGS mode);
291 extern void teleport_away_followable(MONSTER_IDX m_idx);
292 extern bool teleport_level_other(player_type *creature_ptr);
293 extern void teleport_level(MONSTER_IDX m_idx);
294 extern bool recall_player(player_type *creature_ptr, TIME_EFFECT turns);
295 extern bool free_level_recall(player_type *creature_ptr);
296 extern bool reset_recall(void);
297 extern bool apply_disenchant(BIT_FLAGS mode);
298 extern void brand_weapon(int brand_type);
299 extern void call_the_(void);
300 extern void fetch(DIRECTION dir, WEIGHT wgt, bool require_los);
301 extern void alter_reality(void);
302 extern void identify_pack(void);
303 extern int remove_curse(void);
304 extern int remove_all_curse(void);
305 extern bool alchemy(void);
306
307 /*
308  * Bit flags for the "enchant()" function
309  */
310 #define ENCH_TOHIT      0x01 /*!< 装備強化処理: 命中強化 / Enchant to hit */
311 #define ENCH_TODAM      0x02 /*!< 装備強化処理: ダメージ強化 / Enchant to damage */
312 #define ENCH_TOAC       0x04 /*!< 装備強化処理: AC強化 / Enchant to AC */
313 #define ENCH_FORCE      0x08 /*!< 装備強化処理: 無条件に成功させる / Force enchantment */
314 extern bool enchant(object_type *o_ptr, int n, int eflag);
315 extern bool enchant_spell(HIT_PROB num_hit, HIT_POINT num_dam, ARMOUR_CLASS num_ac);
316
317 extern bool artifact_scroll(void);
318 extern bool ident_spell(bool only_equip);
319 extern bool mundane_spell(bool only_equip);
320 extern bool identify_item(object_type *o_ptr);
321 extern bool identify_fully(bool only_equip);
322 extern bool recharge(int power);
323 extern void display_spell_list(void);
324 extern EXP experience_of_spell(SPELL_IDX spell, REALM_IDX use_realm);
325 extern MANA_POINT mod_need_mana(MANA_POINT need_mana, SPELL_IDX spell, REALM_IDX realm);
326 extern PERCENTAGE mod_spell_chance_1(PERCENTAGE chance);
327 extern PERCENTAGE mod_spell_chance_2(PERCENTAGE chance);
328 extern PERCENTAGE spell_chance(SPELL_IDX spell, REALM_IDX realm);
329 extern void print_spells(SPELL_IDX target_spell, SPELL_IDX *spells, int num, TERM_LEN y, TERM_LEN x, REALM_IDX realm);
330 extern bool polymorph_monster(POSITION y, POSITION x);
331 extern bool dimension_door(void);
332 extern bool mirror_tunnel(void);
333 extern void massacre(void);
334 extern bool eat_lock(void);
335 extern bool shock_power(void);
336 extern bool booze(player_type *creature_ptr);
337 extern bool detonation(player_type *creature_ptr);
338 extern void blood_curse_to_enemy(MONSTER_IDX m_idx);
339 extern bool fire_crimson(void);
340 extern bool tele_town(void);
341
342 /* Is "teleport level" ineffective to this target? */
343 #define TELE_LEVEL_IS_INEFF(TARGET) \
344         (p_ptr->inside_arena || p_ptr->inside_battle || \
345          (p_ptr->inside_quest && !random_quest_number(current_floor_ptr->dun_level)) || \
346          (((TARGET) <= 0) && (quest_number(current_floor_ptr->dun_level) || (current_floor_ptr->dun_level >= d_info[p_ptr->dungeon_idx].maxdepth)) && \
347           (current_floor_ptr->dun_level >= 1) && ironman_downward))