OSDN Git Service

[Refactor] #37353 hack_m_idx, hack_m_idx_ii を monster2.c / monster.h へ移動.
[hengband/hengband.git] / src / monster.h
1 #pragma once
2 #include "monsterrace.h"
3
4 typedef bool(*monsterrace_hook_type)(MONRACE_IDX r_idx);
5
6 extern MONSTER_IDX hack_m_idx;
7 extern MONSTER_IDX hack_m_idx_ii;
8
9 /*
10  * Monster information, for a specific monster.
11  * Note: fy, fx constrain dungeon size to 256x256
12  * The "hold_o_idx" field points to the first object of a stack
13  * of objects (if any) being carried by the monster (see above).
14  */
15
16 typedef struct monster_type monster_type;
17
18 struct monster_type
19 {
20         MONRACE_IDX r_idx;              /* Monster race index 0 = dead. */
21         MONRACE_IDX ap_r_idx;   /* Monster race appearance index */
22         byte sub_align;         /* Sub-alignment for a neutral monster */
23
24         POSITION fy;            /* Y location on map */
25         POSITION fx;            /* X location on map */
26
27         HIT_POINT hp;           /* Current Hit points */
28         HIT_POINT maxhp;                /* Max Hit points */
29         HIT_POINT max_maxhp;            /* Max Max Hit points */
30         HIT_POINT dealt_damage;         /* Sum of damages dealt by player */
31
32         TIME_EFFECT mtimed[MAX_MTIMED]; /* Timed status counter */
33
34         SPEED mspeed;           /* Monster "speed" */
35         ACTION_ENERGY energy_need;      /* Monster "energy" */
36
37         POSITION cdis;          /* Current dis from player */
38
39         BIT_FLAGS8 mflag;       /* Extra monster flags */
40 #define MFLAG_VIEW      0x01    /* Monster is in line of sight */
41 #define MFLAG_LOS       0x02    /* Monster is marked for project_all_los() */
42 #define MFLAG_XXX2      0x04    /* (unused) */
43 #define MFLAG_ETF       0x08    /* Monster is entering the field. */
44 #define MFLAG_BORN      0x10    /* Monster is still being born */
45 #define MFLAG_NICE      0x20    /* Monster is still being nice */
46
47         BIT_FLAGS8 mflag2;      /* Extra monster flags */
48 #define MFLAG2_KAGE      0x01    /* Monster is kage */
49 #define MFLAG2_NOPET     0x02    /* Cannot make monster pet */
50 #define MFLAG2_NOGENO    0x04    /* Cannot genocide */
51 #define MFLAG2_CHAMELEON 0x08    /* Monster is chameleon */
52 #define MFLAG2_NOFLOW    0x10    /* Monster is in no_flow_by_smell mode */
53 #define MFLAG2_SHOW      0x20    /* Monster is recently memorized */
54 #define MFLAG2_MARK      0x40    /* Monster is currently memorized */
55
56         bool ml;                /* Monster is "visible" */
57
58         OBJECT_IDX hold_o_idx;  /* Object being held (if any) */
59
60         POSITION target_y;              /* Can attack !los player */
61         POSITION target_x;              /* Can attack !los player */
62
63         STR_OFFSET nickname;            /* Monster's Nickname */
64
65         EXP exp;
66
67         /* TODO: クローン、ペット、有効化は意義が異なるので別変数に切り離すこと。save/loadのバージョン更新が面倒そうだけど */
68         BIT_FLAGS smart; /*!< Field for "smart_learn" - Some bit-flags for the "smart" field */
69 #define SM_RES_ACID             0x00000001 /*!< モンスターの学習フラグ: プレイヤーに酸耐性あり */
70 #define SM_RES_ELEC             0x00000002 /*!< モンスターの学習フラグ: プレイヤーに電撃耐性あり */
71 #define SM_RES_FIRE             0x00000004 /*!< モンスターの学習フラグ: プレイヤーに火炎耐性あり */
72 #define SM_RES_COLD             0x00000008 /*!< モンスターの学習フラグ: プレイヤーに冷気耐性あり */
73 #define SM_RES_POIS             0x00000010 /*!< モンスターの学習フラグ: プレイヤーに毒耐性あり */
74 #define SM_RES_NETH             0x00000020 /*!< モンスターの学習フラグ: プレイヤーに地獄耐性あり */
75 #define SM_RES_LITE             0x00000040 /*!< モンスターの学習フラグ: プレイヤーに閃光耐性あり */
76 #define SM_RES_DARK             0x00000080 /*!< モンスターの学習フラグ: プレイヤーに暗黒耐性あり */
77 #define SM_RES_FEAR             0x00000100 /*!< モンスターの学習フラグ: プレイヤーに恐怖耐性あり */
78 #define SM_RES_CONF             0x00000200 /*!< モンスターの学習フラグ: プレイヤーに混乱耐性あり */
79 #define SM_RES_CHAOS            0x00000400 /*!< モンスターの学習フラグ: プレイヤーにカオス耐性あり */
80 #define SM_RES_DISEN            0x00000800 /*!< モンスターの学習フラグ: プレイヤーに劣化耐性あり */
81 #define SM_RES_BLIND            0x00001000 /*!< モンスターの学習フラグ: プレイヤーに盲目耐性あり */
82 #define SM_RES_NEXUS            0x00002000 /*!< モンスターの学習フラグ: プレイヤーに因果混乱耐性あり */
83 #define SM_RES_SOUND            0x00004000 /*!< モンスターの学習フラグ: プレイヤーに轟音耐性あり */
84 #define SM_RES_SHARD            0x00008000 /*!< モンスターの学習フラグ: プレイヤーに破片耐性あり */
85 #define SM_OPP_ACID             0x00010000 /*!< モンスターの学習フラグ: プレイヤーに二重酸耐性あり */
86 #define SM_OPP_ELEC             0x00020000 /*!< モンスターの学習フラグ: プレイヤーに二重電撃耐性あり */
87 #define SM_OPP_FIRE             0x00040000 /*!< モンスターの学習フラグ: プレイヤーに二重火炎耐性あり */
88 #define SM_OPP_COLD             0x00080000 /*!< モンスターの学習フラグ: プレイヤーに二重冷気耐性あり */
89 #define SM_OPP_POIS             0x00100000 /*!< モンスターの学習フラグ: プレイヤーに二重毒耐性あり */
90 #define SM_OPP_XXX1             0x00200000 /*!< 未使用 / (unused) */
91 #define SM_CLONED               0x00400000 /*!< クローンである / Cloned */
92 #define SM_PET                  0x00800000 /*!< ペットである / Pet */
93 #define SM_IMM_ACID             0x01000000 /*!< モンスターの学習フラグ: プレイヤーに酸免疫あり */
94 #define SM_IMM_ELEC             0x02000000 /*!< モンスターの学習フラグ: プレイヤーに電撃免疫あり */
95 #define SM_IMM_FIRE             0x04000000 /*!< モンスターの学習フラグ: プレイヤーに火炎免疫あり */
96 #define SM_IMM_COLD             0x08000000 /*!< モンスターの学習フラグ: プレイヤーに冷気免疫あり */
97 #define SM_FRIENDLY             0x10000000 /*!< 友好的である / Friendly */
98 #define SM_IMM_REFLECT          0x20000000 /*!< モンスターの学習フラグ: プレイヤーに反射あり */
99 #define SM_IMM_FREE             0x40000000 /*!< モンスターの学習フラグ: プレイヤーに麻痺耐性あり */
100 #define SM_IMM_MANA             0x80000000 /*!< モンスターの学習フラグ: プレイヤーにMPがない */
101
102         MONSTER_IDX parent_m_idx;
103 };
104
105 #define MON_BEGGAR        12
106 #define MON_LEPER         13
107 #define MON_BLACK_MARKET  14
108 #define MON_LION_HEART    19
109 #define MON_GHB           39
110 #define MON_NOV_PRIEST    45
111 #define MON_GRIP          53
112 #define MON_WOLF          54
113 #define MON_FANG          55
114 #define MON_LOUSE         69
115 #define MON_PIRANHA       70
116 #define MON_COPPER_COINS  85
117 #define MON_NOV_PALADIN   97
118 #define MON_GREEN_G       100
119 #define MON_NOV_PRIEST_G  109
120 #define MON_SILVER_COINS  117
121 #define MON_D_ELF         122
122 #define MON_MANES         128
123 #define MON_LOST_SOUL     133
124 #define MON_ROBIN_HOOD    138
125 #define MON_NOV_PALADIN_G 147
126 #define MON_PHANTOM_W     152
127 #define MON_WOUNDED_BEAR  159
128 #define MON_D_ELF_MAGE    178
129 #define MON_D_ELF_WARRIOR 182
130 #define MON_BLUE_HORROR   189
131 #define MON_GOLD_COINS    195
132 #define MON_VORPAL_BUNNY  205
133 #define MON_MASTER_YEEK   224
134 #define MON_PRIEST        225
135 #define MON_D_ELF_PRIEST  226
136 #define MON_TIGER         230
137 #define MON_MITHRIL_COINS 239
138 #define MON_DRUID         241
139 #define MON_PINK_HORROR   242
140 #define MON_HILL_GIANT    255
141 #define MON_WERERAT       270
142 #define MON_UMBER_HULK    283
143 #define MON_ORC_CAPTAIN   285
144 #define MON_BERSERKER     293
145 #define MON_IMP           296
146 #define MON_SHAGRAT       314
147 #define MON_GORBAG        315
148 #define MON_STONE_GIANT   321
149 #define MON_LIZARD_KING   332
150 #define MON_WYVERN        334
151 #define MON_SABRE_TIGER   339
152 #define MON_D_ELF_LORD    348
153 #define MON_FIRE_VOR      354
154 #define MON_WATER_VOR     355
155 #define MON_ARCH_VILE     357
156 #define MON_COLD_VOR      358
157 #define MON_ENERGY_VOR    359
158 #define MON_IRON_GOLEM    367
159 #define MON_JADE_MONK     370
160 #define MON_D_ELF_WARLOCK 375
161 #define MON_HAGEN         383
162 #define MON_MENELDOR      384
163 #define MON_PHANTOM_B     385
164 #define MON_C_CRAWLER     395
165 #define MON_XICLOTLAN     396
166 #define MON_D_ELF_DRUID   400
167 #define MON_TROLL_PRIEST  403
168 #define MON_GWAIHIR       410
169 #define MON_ANGEL         417
170 #define MON_ADAMANT_COINS 423
171 #define MON_COLBRAN       435
172 #define MON_SPIRIT_NAGA   436
173 #define MON_GACHAPIN      441
174 #define MON_BASILISK      453
175 #define MON_ARCHANGEL     456
176 #define MON_MITHRIL_GOLEM 464
177 #define MON_THORONDOR     468
178 #define MON_SHADOW_DRAKE  471
179 #define MON_GHOST         477
180 #define MON_OGRE_SHAMAN   479
181 #define MON_GHOUL_KING    483
182 #define MON_NINJA         485
183 #define MON_BICLOPS       490
184 #define MON_IVORY_MONK    492
185 #define MON_LOG_MASTER    498
186 #define MON_ETHER_DRAKE   504
187 #define MON_GOEMON        505
188 #define MON_CHERUB        511
189 #define MON_WATER_ELEM    512
190 #define MON_JURT          517
191 #define MON_LICH          518
192 #define MON_BLOODLETTER   523
193 #define MON_HALFLING_S    539
194 #define MON_GRAV_HOUND    540
195 #define MON_REVENANT      555
196 #define MON_RAAL          557
197 #define MON_COLOSSUS      558
198 #define MON_NIGHTBLADE    564
199 #define MON_ELDER_THING   569
200 #define MON_CRYPT_THING   577
201 #define MON_NEXUS_VOR     587
202 #define MON_PLASMA_VOR    588
203 #define MON_TIME_VOR      589
204 #define MON_M_MH_DRAGON   593
205 #define MON_MANDOR        598
206 #define MON_SHIM_VOR      600
207 #define MON_SERAPH        605
208 #define MON_BARON_HELL    609
209 #define MON_KAVLAX        616
210 #define MON_ETTIN         621
211 #define MON_VAMPIRE_LORD  623
212 #define MON_JUBJUB        640
213 #define MON_G_C_DRAKE     646
214 #define MON_CLUB_DEMON    648
215 #define MON_F_ANGEL       652
216 #define MON_D_ELF_SORC    657
217 #define MON_MASTER_LICH   658
218 #define MON_RINALDO       660
219 #define MON_ARCHON        661
220 #define MON_UND_BEHOLDER  664
221 #define MON_IRON_LICH     666
222 #define MON_JACK_SHADOWS  670
223 #define MON_LLOIGOR       682
224 #define MON_DREADMASTER   690
225 #define MON_DROLEM        691
226 #define MON_DAWN          693
227 #define MON_NAZGUL        696
228 #define MON_SMAUG         697
229 #define MON_STORMBRINGER  698
230 #define MON_ULTRA_PALADIN 699
231 #define MON_G_TITAN       702
232 #define MON_S_TYRANNO     705
233 #define MON_FAFNER        712
234 #define MON_G_BALROG      720
235 #define MON_TIME_HOUND    725
236 #define MON_PLASMA_HOUND  726
237 #define MON_BULLGATES     732
238 #define MON_SANTACLAUS    733
239 #define MON_LORD_CHAOS    737
240 #define MON_TINDALOS      739
241 #define MON_DEMILICH      742
242 #define MON_NIGHTCRAWLER  744
243 #define MON_CHAOS_VOR     751
244 #define MON_AETHER_VOR    752
245 #define MON_FUNDIN        762
246 #define MON_DWORKIN       763
247 #define MON_NIGHTWALKER   768
248 #define MON_RAPHAEL       769
249 #define MON_SARUMAN       771
250 #define MON_GANDALF       772
251 #define MON_BRAND         773
252 #define MON_SHADOWLORD    774
253 #define MON_ARCHLICH      776
254 #define MON_JABBERWOCK    778
255 #define MON_CHAOS_HOUND   779
256 #define MON_ULT_BEHOLDER  781
257 #define MON_SHAMBLER      786
258 #define MON_BLEYS         789
259 #define MON_FIONA         791
260 #define MON_SKY_DRAKE     793
261 #define MON_JULIAN        794
262 #define MON_BLACK_REAVER  798
263 #define MON_CAINE         799
264 #define MON_GERARD        807
265 #define MON_UNGOLIANT     808
266 #define MON_ATLACH_NACHA  809
267 #define MON_Y_GOLONAC     810
268 #define MON_AETHER_HOUND  811
269 #define MON_WARP_DEMON    812
270 #define MON_ERIC          813
271 #define MON_UNMAKER       815
272 #define MON_CYBER         816
273 #define MON_KLING         819
274 #define MON_CORWIN        820
275 #define MON_ANGMAR        825
276 #define MON_CANTORAS      830
277 #define MON_GODZILLA      832
278 #define MON_SPAWN_CTH     836
279 #define MON_SURTUR        837
280 #define MON_TARRASQUE     838
281 #define MON_LUNGORTHIN    839
282 #define MON_CYBER_KING    843
283 #define MON_WYRM_POWER    847
284 #define MON_NODENS        849
285 #define MON_JORMUNGAND    854
286 #define MON_DESTROYER     855
287 #define MON_GOTHMOG       856
288 #define MON_G_CTHULHU     857
289 #define MON_SAURON        858
290 #define MON_UNICORN_ORD   859
291 #define MON_OBERON        860
292 #define MON_MORGOTH       861
293 #define MON_SERPENT       862
294 #define MON_ONE_RING      864
295 #define MON_CAAWS         866
296 #define MON_CULVERIN      867
297 #define MON_EBONY_MONK    870
298 #define MON_HAGURE        871
299 #define MON_OROCHI        872
300 #define MON_ECHIZEN       873
301 #define MON_SPECT_WYRM    874
302 #define MON_DIO           878
303 #define MON_OHMU          879
304 #define MON_WONG          880
305 #define MON_ZOMBI_SERPENT 883
306 #define MON_D_ELF_SHADE   886
307 #define MON_MANA_HOUND    887
308 #define MON_VENOM_WYRM    890
309 #define MON_TROLL_KING    894
310 #define MON_BAZOOKER      896
311 #define MON_SHARD_VOR     897
312 #define MON_ELF_LORD      900
313 #define MON_MASTER_MYS    916
314 #define MON_G_MASTER_MYS  917
315 #define MON_IE            921
316 #define MON_TSUCHINOKO    926
317 #define MON_GCWADL        929
318 #define MON_LOCKE_CLONE   930
319 #define MON_CALDARM       931
320 #define MON_BANORLUPART   932
321 #define MON_BANOR         933
322 #define MON_LUPART        934
323 #define MON_KENSHIROU     936
324 #define MON_W_KNIGHT      938
325 #define MON_PLANETAR      942
326 #define MON_SOLAR         943
327 #define MON_BIKETAL       945
328 #define MON_RICH          948
329 #define MON_IKETA         949
330 #define MON_B_DEATH_SWORD 953
331 #define MON_YASE_HORSE    955
332 #define MON_HORSE         956
333 #define MON_BOTEI         963
334 #define MON_KAGE          964
335 #define MON_JAIAN         967
336 #define MON_BELD          973
337 #define MON_THAT_BAT      975
338 #define MON_SHUTEN        979
339 #define MON_FENGHUANG     988
340 #define MON_KIRIN         989
341 #define MON_BAHAMUT       1000
342 #define MON_SUKE          1001
343 #define MON_KAKU          1002
344 #define MON_GHOST_Q       1003
345 #define MON_PIP           1004
346 #define MON_A_GOLD        1010
347 #define MON_A_SILVER      1011
348 #define MON_ROLENTO       1013
349 #define MON_RAOU          1018
350 #define MON_SHURYUUDAN    1023
351 #define MON_WAHHA         1031
352 #define MON_DEBBY         1032
353 #define MON_KNI_TEMPLAR   1037
354 #define MON_PALADIN       1038
355 #define MON_CHAMELEON     1040
356 #define MON_CHAMELEON_K   1041
357 #define MON_TOPAZ_MONK    1047
358 #define MON_M_MINDCRAFTER 1056
359 #define MON_ELDER_VAMPIRE 1058
360 #define MON_NOBORTA       1059
361 #define MON_MORI_TROLL    1060
362 #define MON_BARNEY        1061
363 #define MON_GROO          1062
364 #define MON_LOUSY         1063
365 #define MON_WYRM_SPACE    1064
366 #define MON_JIZOTAKO      1065
367 #define MON_TANUKI        1067
368 #define MON_ALIEN_JURAL   1082
369 #define MON_HATOPOPPO     1083
370 #define MON_KOGAN         1096
371
372 /*
373  * Bit flags for the place_monster_???() (etc)
374  */
375 #define PM_ALLOW_SLEEP    0x00000001    /*!< モンスター生成フラグ: 眠っている状態で生成されても良い */
376 #define PM_ALLOW_GROUP    0x00000002    /*!< モンスター生成フラグ: 集団生成されても良い */
377 #define PM_FORCE_FRIENDLY 0x00000004    /*!< モンスター生成フラグ: 必ず友好的に生成される */
378 #define PM_FORCE_PET      0x00000008    /*!< モンスター生成フラグ: 必ずペットとして生成される */
379 #define PM_NO_KAGE        0x00000010    /*!< モンスター生成フラグ: 必ずあやしい影としては生成されない */
380 #define PM_NO_PET         0x00000020    /*!< モンスター生成フラグ: 必ずペットとして生成されない */
381 #define PM_ALLOW_UNIQUE   0x00000040    /*!< モンスター生成フラグ: ユニークの選択生成を許可する */
382 #define PM_IGNORE_TERRAIN 0x00000080    /*!< モンスター生成フラグ: 侵入可能地形を考慮せずに生成する */
383 #define PM_HASTE          0x00000100    /*!< モンスター生成フラグ: 加速状態で生成する */
384 #define PM_KAGE           0x00000200    /*!< モンスター生成フラグ: 必ずあやしい影として生成する */
385 #define PM_MULTIPLY       0x00000400    /*!< モンスター生成フラグ: 増殖処理時として生成する */
386
387 extern bool place_monster_aux(MONSTER_IDX who, POSITION y, POSITION x, MONRACE_IDX r_idx, BIT_FLAGS mode);
388 extern bool place_monster(POSITION y, POSITION x, BIT_FLAGS mode);
389 extern bool alloc_horde(POSITION y, POSITION x);
390 extern bool alloc_guardian(bool def_val);
391 extern bool alloc_monster(POSITION dis, BIT_FLAGS mode);
392
393 extern void monster_desc(char *desc, monster_type *m_ptr, BIT_FLAGS mode);
394 /* Bit flags for monster_desc() */
395 #define MD_OBJECTIVE      0x00000001 /* Objective (or Reflexive) */
396 #define MD_POSSESSIVE     0x00000002 /* Possessive (or Reflexive) */
397 #define MD_INDEF_HIDDEN   0x00000004 /* Use indefinites for hidden monsters ("something") */
398 #define MD_INDEF_VISIBLE  0x00000008 /* Use indefinites for visible monsters ("a kobold") */
399 #define MD_PRON_HIDDEN    0x00000010 /* Pronominalize hidden monsters */
400 #define MD_PRON_VISIBLE   0x00000020 /* Pronominalize visible monsters */
401 #define MD_ASSUME_HIDDEN  0x00000040 /* Assume the monster is hidden */
402 #define MD_ASSUME_VISIBLE 0x00000080 /* Assume the monster is visible */
403 #define MD_TRUE_NAME      0x00000100 /* Chameleon's true name */
404 #define MD_IGNORE_HALLU   0x00000200 /* Ignore hallucination, and penetrate shape change */
405
406 #define MD_WRONGDOER_NAME (MD_IGNORE_HALLU | MD_ASSUME_VISIBLE | MD_INDEF_VISIBLE) /* 加害明記向け */
407
408 extern void monster_name(MONSTER_IDX m_idx, char* m_name);
409
410 extern void roff_top(MONRACE_IDX r_idx);
411 extern void screen_roff(MONRACE_IDX r_idx, BIT_FLAGS mode);
412 extern void display_roff(MONRACE_IDX r_idx);
413 extern void output_monster_spoiler(MONRACE_IDX r_idx, void(*roff_func)(TERM_COLOR attr, concptr str));
414 extern concptr extract_note_dies(MONRACE_IDX r_idx);
415 extern void monster_death(MONSTER_IDX m_idx, bool drop_item);
416 extern monsterrace_hook_type get_monster_hook(void);
417 extern monsterrace_hook_type get_monster_hook2(POSITION y, POSITION x);
418 extern void set_friendly(monster_type *m_ptr);
419 extern void set_pet(monster_type *m_ptr);
420 extern void set_hostile(monster_type *m_ptr);
421 extern void anger_monster(monster_type *m_ptr);
422 extern bool monster_can_cross_terrain(FEAT_IDX feat, monster_race *r_ptr, BIT_FLAGS16 mode);
423 extern bool monster_can_enter(POSITION y, POSITION x, monster_race *r_ptr, BIT_FLAGS16 mode);
424 extern bool are_enemies(monster_type *m_ptr1, monster_type *m_ptr2);
425 extern bool monster_has_hostile_align(monster_type *m_ptr, int pa_good, int pa_evil, monster_race *r_ptr);
426 extern void dice_to_string(int base_damage, int dice_num, int dice_side, int dice_mult, int dice_div, char* msg);
427 extern concptr look_mon_desc(monster_type *m_ptr, BIT_FLAGS mode);
428 extern int get_monster_crowd_number(MONSTER_IDX m_idx);
429 extern void message_pain(MONSTER_IDX m_idx, HIT_POINT dam);
430
431 /* monster2.c */
432 extern void set_target(monster_type *m_ptr, POSITION y, POSITION x);
433 extern void reset_target(monster_type *m_ptr);
434 extern monster_race *real_r_ptr(monster_type *m_ptr);
435 extern MONRACE_IDX real_r_idx(monster_type *m_ptr);
436 extern void delete_monster_idx(MONSTER_IDX i);
437 extern void delete_monster(POSITION y, POSITION x);
438 extern void compact_monsters(int size);
439 extern void wipe_m_list(void);
440 extern MONSTER_IDX m_pop(void);
441 extern errr get_mon_num_prep(monsterrace_hook_type monster_hook, monsterrace_hook_type monster_hook2);
442 extern MONRACE_IDX get_mon_num(DEPTH level);
443 extern int lore_do_probe(MONRACE_IDX r_idx);
444 extern void lore_treasure(MONSTER_IDX m_idx, ITEM_NUMBER num_item, ITEM_NUMBER num_gold);
445 extern void update_monster(MONSTER_IDX m_idx, bool full);
446 extern void update_monsters(bool full);
447 extern bool multiply_monster(MONSTER_IDX m_idx, bool clone, BIT_FLAGS mode);
448 extern void update_smart_learn(MONSTER_IDX m_idx, int what);
449 extern void choose_new_monster(MONSTER_IDX m_idx, bool born, MONRACE_IDX r_idx);
450 extern SPEED get_mspeed(monster_race *r_ptr);
451 extern void monster_drop_carried_objects(monster_type *m_ptr);
452
453 #define is_friendly(A) \
454          (bool)(((A)->smart & SM_FRIENDLY) ? TRUE : FALSE)
455
456 #define is_friendly_idx(IDX) \
457          (bool)((IDX) > 0 && is_friendly(&current_floor_ptr->m_list[(IDX)]))
458
459 #define is_pet(A) \
460          (bool)(((A)->smart & SM_PET) ? TRUE : FALSE)
461
462 #define is_hostile(A) \
463          (bool)((is_friendly(A) || is_pet(A)) ? FALSE : TRUE)