17 #define MS_BR_NETHER 13
21 #define MS_BR_SOUND 17
22 #define MS_BR_CHAOS 18
23 #define MS_BR_DISEN 19
24 #define MS_BR_NEXUS 20
26 #define MS_BR_INERTIA 22
27 #define MS_BR_GRAVITY 23
28 #define MS_BR_SHARDS 24
29 #define MS_BR_PLASMA 25
30 #define MS_BR_FORCE 26
32 #define MS_BALL_NUKE 28
34 #define MS_BALL_CHAOS 30
36 #define MS_BALL_ACID 32
37 #define MS_BALL_ELEC 33
38 #define MS_BALL_FIRE 34
39 #define MS_BALL_COLD 35
40 #define MS_BALL_POIS 36
41 #define MS_BALL_NETHER 37
42 #define MS_BALL_WATER 38
43 #define MS_BALL_MANA 39
44 #define MS_BALL_DARK 40
45 #define MS_DRAIN_MANA 41
46 #define MS_MIND_BLAST 42
47 #define MS_BRAIN_SMASH 43
52 #define MS_BOLT_ACID 48
53 #define MS_BOLT_ELEC 49
54 #define MS_BOLT_FIRE 50
55 #define MS_BOLT_COLD 51
56 #define MS_STARBURST 52
57 #define MS_BOLT_NETHER 53
58 #define MS_BOLT_WATER 54
59 #define MS_BOLT_MANA 55
60 #define MS_BOLT_PLASMA 56
61 #define MS_BOLT_ICE 57
62 #define MS_MAGIC_MISSILE 58
69 #define MS_HAND_DOOM 65
71 #define MS_INVULNER 67
73 #define MS_TELEPORT 69
77 #define MS_TELE_AWAY 73
78 #define MS_TELE_LEVEL 74
79 #define MS_PSY_SPEAR 75
80 #define MS_DARKNESS 76
81 #define MS_MAKE_TRAP 77
83 #define MS_RAISE_DEAD 79
86 #define MS_S_MONSTER 82
87 #define MS_S_MONSTERS 83
89 #define MS_S_SPIDER 85
94 #define MS_S_UNDEAD 90
95 #define MS_S_DRAGON 91
96 #define MS_S_HI_UNDEAD 92
97 #define MS_S_HI_DRAGON 93
98 #define MS_S_AMBERITE 94
99 #define MS_S_UNIQUE 95
102 * Hack -- choose "intelligent" spells when desperate
103 * Including "summon" spells
105 #define RF4_INT_MASK \
106 (RF4_SUMMON_MASK | RF4_DISPEL)
108 #define RF5_INT_MASK \
110 RF5_HOLD | RF5_SLOW | RF5_CONF | RF5_BLIND | RF5_SCARE)
112 #define RF6_INT_MASK \
114 RF6_BLINK | RF6_TPORT | RF6_TELE_LEVEL | RF6_TELE_AWAY | \
115 RF6_HEAL | RF6_INVULNER | RF6_HASTE | RF6_TRAPS)
118 * Hack -- spells that cannot be used while player riding on the monster
120 #define RF4_RIDING_MASK \
123 #define RF5_RIDING_MASK 0UL
125 #define RF6_RIDING_MASK \
126 (RF6_BLINK | RF6_TPORT | RF6_TRAPS | RF6_DARKNESS | RF6_SPECIAL)
129 * Hack -- "bolt" spells that may hurt fellow monsters
130 * Currently "bolt" spells are included in "attack"
132 #define RF4_BOLT_MASK \
133 (RF4_ROCKET | RF4_SHOOT)
135 #define RF5_BOLT_MASK \
136 (RF5_BO_ACID | RF5_BO_ELEC | RF5_BO_FIRE | RF5_BO_COLD | \
137 RF5_BO_NETH | RF5_BO_WATE | RF5_BO_MANA | RF5_BO_PLAS | \
138 RF5_BO_ICEE | RF5_MISSILE)
140 #define RF6_BOLT_MASK 0UL
143 * Hack -- "beam" spells that may hurt fellow monsters
144 * Currently "beam" spells are included in "attack"
146 #define RF4_BEAM_MASK 0UL
148 #define RF5_BEAM_MASK 0UL
150 #define RF6_BEAM_MASK (RF6_PSY_SPEAR)
153 * Hack -- "ball" spells that may hurt friends
154 * Including "radius 4 ball" and "breath" spells
155 * Currently "ball" spells are included in "attack"
157 #define RF4_BALL_MASK \
158 (RF4_BIG_BALL_MASK | RF4_BREATH_MASK | \
159 RF4_ROCKET | RF4_BA_NUKE)
161 #define RF5_BALL_MASK \
162 (RF5_BIG_BALL_MASK | RF5_BREATH_MASK | \
163 RF5_BA_ACID | RF5_BA_ELEC | RF5_BA_FIRE | RF5_BA_COLD | \
164 RF5_BA_POIS | RF5_BA_NETH)
166 #define RF6_BALL_MASK \
167 (RF6_BIG_BALL_MASK | RF6_BREATH_MASK)
170 * Hack -- "ball" spells with radius 4 that may hurt friends
171 * Currently "radius 4 ball" spells are included in "ball"
173 #define RF4_BIG_BALL_MASK \
176 #define RF5_BIG_BALL_MASK \
177 (RF5_BA_LITE | RF5_BA_DARK | RF5_BA_WATE | RF5_BA_MANA)
179 #define RF6_BIG_BALL_MASK 0UL
182 * Hack -- "breath" spells that may hurt friends
183 * Currently "breath" spells are included in "ball" and "non-magic"
185 #define RF4_BREATH_MASK \
186 (RF4_BR_ACID | RF4_BR_ELEC | RF4_BR_FIRE | RF4_BR_COLD | \
187 RF4_BR_POIS | RF4_BR_NETH | RF4_BR_LITE | RF4_BR_DARK | \
188 RF4_BR_CONF | RF4_BR_SOUN | RF4_BR_CHAO | RF4_BR_DISE | \
189 RF4_BR_NEXU | RF4_BR_SHAR | RF4_BR_TIME | RF4_BR_INER | \
190 RF4_BR_GRAV | RF4_BR_PLAS | RF4_BR_WALL | RF4_BR_MANA | \
191 RF4_BR_NUKE | RF4_BR_DISI)
193 #define RF5_BREATH_MASK 0UL
195 #define RF6_BREATH_MASK 0UL
198 * Hack -- "summon" spells
199 * Currently "summon" spells are included in "intelligent" and "indirect"
201 #define RF4_SUMMON_MASK 0UL
203 #define RF5_SUMMON_MASK 0UL
205 #define RF6_SUMMON_MASK \
206 (RF6_S_KIN | RF6_S_CYBER | RF6_S_MONSTER | RF6_S_MONSTERS | RF6_S_ANT | \
207 RF6_S_SPIDER | RF6_S_HOUND | RF6_S_HYDRA | RF6_S_ANGEL | RF6_S_DEMON | \
208 RF6_S_UNDEAD | RF6_S_DRAGON | RF6_S_HI_UNDEAD | RF6_S_HI_DRAGON | \
209 RF6_S_AMBERITES | RF6_S_UNIQUE)
212 * Hack -- "attack" spells
213 * Including "bolt", "beam" and "ball" spells
215 #define RF4_ATTACK_MASK \
216 (RF4_BOLT_MASK | RF4_BEAM_MASK | RF4_BALL_MASK | RF4_DISPEL)
218 #define RF5_ATTACK_MASK \
219 (RF5_BOLT_MASK | RF5_BEAM_MASK | RF5_BALL_MASK | \
220 RF5_DRAIN_MANA | RF5_MIND_BLAST | RF5_BRAIN_SMASH | \
221 RF5_CAUSE_1 | RF5_CAUSE_2 | RF5_CAUSE_3 | RF5_CAUSE_4 | \
222 RF5_SCARE | RF5_BLIND | RF5_CONF | RF5_SLOW | RF5_HOLD)
224 #define RF6_ATTACK_MASK \
225 (RF6_BOLT_MASK | RF6_BEAM_MASK | RF6_BALL_MASK | \
226 RF6_HAND_DOOM | RF6_TELE_TO | RF6_TELE_AWAY | RF6_TELE_LEVEL | \
227 RF6_DARKNESS | RF6_TRAPS | RF6_FORGET)
230 * Hack -- "indirect" spells
231 * Including "summon" spells
233 #define RF4_INDIRECT_MASK \
234 (RF4_SUMMON_MASK | RF4_SHRIEK)
236 #define RF5_INDIRECT_MASK \
239 #define RF6_INDIRECT_MASK \
241 RF6_HASTE | RF6_HEAL | RF6_INVULNER | RF6_BLINK | RF6_WORLD | \
242 RF6_TPORT | RF6_RAISE_DEAD)
245 * Hack -- "non-magic" spells
246 * Including "breath" spells
248 #define RF4_NOMAGIC_MASK \
249 (RF4_BREATH_MASK | RF4_SHRIEK | RF4_ROCKET | RF4_SHOOT)
251 #define RF5_NOMAGIC_MASK \
254 #define RF6_NOMAGIC_MASK \
255 (RF6_BREATH_MASK | RF6_SPECIAL)
257 extern const monster_power monster_powers[MAX_MONSPELLS];
258 extern const concptr monster_powers_short[MAX_MONSPELLS];
261 extern bool clean_shot(POSITION y1, POSITION x1, POSITION y2, POSITION x2, bool is_friend);
262 extern bool summon_possible(POSITION y1, POSITION x1);
263 extern bool raise_possible(monster_type *m_ptr);
264 extern bool dispel_check(MONSTER_IDX m_idx);
265 extern bool spell_is_inate(SPELL_IDX spell);
266 extern bool make_attack_spell(MONSTER_IDX m_idx);
267 extern void beam(MONSTER_IDX m_idx, POSITION y, POSITION x, EFFECT_ID typ, int dam_hp, int monspell, int target_type);
268 extern void bolt(MONSTER_IDX m_idx, POSITION y, POSITION x, EFFECT_ID typ, int dam_hp, int monspell, int target_type);
269 extern void breath(POSITION y, POSITION x, MONSTER_IDX m_idx, EFFECT_ID typ, int dam_hp, POSITION rad, bool breath, int monspell, int target_type);
272 extern void get_project_point(POSITION sy, POSITION sx, POSITION *ty, POSITION *tx, BIT_FLAGS flg);
273 extern bool monst_spell_monst(MONSTER_IDX m_idx);
276 extern bool do_cmd_cast_learned(void);
277 extern void learn_spell(int monspell);
278 extern void set_rf_masks(BIT_FLAGS *f4, BIT_FLAGS *f5, BIT_FLAGS *f6, BIT_FLAGS mode);
281 extern bool spell_learnable(MONSTER_IDX m_idx);
282 extern HIT_POINT monspell_to_player(int SPELL_NUM, POSITION y, POSITION x, MONSTER_IDX m_idx);
283 extern HIT_POINT monspell_to_monster(int SPELL_NUM, POSITION y, POSITION x, MONSTER_IDX m_idx, MONSTER_IDX t_idx);
284 extern HIT_POINT monspell_damage(int SPELL_NUM, MONSTER_IDX m_idx, int TYPE);
285 extern HIT_POINT monspell_race_damage(int SPELL_NUM, MONRACE_IDX r_idx, int TYPE);
286 extern HIT_POINT monspell_bluemage_damage(int SPELL_NUM, PLAYER_LEVEL plev, int TYPE);