OSDN Git Service

[Refactor] #38997 get_monster_hook() にplayer_type * 引数を追加 / Added player_type * argum...
[hengband/hengband.git] / src / monster.h
index e38f76e..8a103cc 100644 (file)
@@ -3,6 +3,30 @@
 
 typedef bool(*monsterrace_hook_type)(MONRACE_IDX r_idx);
 
+extern MONSTER_IDX hack_m_idx;
+extern MONSTER_IDX hack_m_idx_ii;
+
+/* Maximum "Nazguls" number */
+#define MAX_NAZGUL_NUM 5
+
+#define MTIMED_CSLEEP   0 /* Monster is sleeping */
+#define MTIMED_FAST     1 /* Monster is temporarily fast */
+#define MTIMED_SLOW     2 /* Monster is temporarily slow */
+#define MTIMED_STUNNED  3 /* Monster is stunned */
+#define MTIMED_CONFUSED 4 /* Monster is confused */
+#define MTIMED_MONFEAR  5 /* Monster is afraid */
+#define MTIMED_INVULNER 6 /* Monster is temporarily invulnerable */
+
+#define MAX_MTIMED      7
+
+#define MON_CSLEEP(M_PTR)   ((M_PTR)->mtimed[MTIMED_CSLEEP])
+#define MON_FAST(M_PTR)     ((M_PTR)->mtimed[MTIMED_FAST])
+#define MON_SLOW(M_PTR)     ((M_PTR)->mtimed[MTIMED_SLOW])
+#define MON_STUNNED(M_PTR)  ((M_PTR)->mtimed[MTIMED_STUNNED])
+#define MON_CONFUSED(M_PTR) ((M_PTR)->mtimed[MTIMED_CONFUSED])
+#define MON_MONFEAR(M_PTR)  ((M_PTR)->mtimed[MTIMED_MONFEAR])
+#define MON_INVULNER(M_PTR) ((M_PTR)->mtimed[MTIMED_INVULNER])
+
 /*
  * Monster information, for a specific monster.
  * Note: fy, fx constrain dungeon size to 256x256
@@ -12,11 +36,18 @@ typedef bool(*monsterrace_hook_type)(MONRACE_IDX r_idx);
 
 typedef struct monster_type monster_type;
 
+
 struct monster_type
 {
        MONRACE_IDX r_idx;              /* Monster race index 0 = dead. */
        MONRACE_IDX ap_r_idx;   /* Monster race appearance index */
-       byte sub_align;         /* Sub-alignment for a neutral monster */
+       struct floor_type *current_floor_ptr;
+
+       /* Sub-alignment flags for neutral monsters */
+       #define SUB_ALIGN_NEUTRAL 0x0000
+       #define SUB_ALIGN_EVIL    0x0001
+       #define SUB_ALIGN_GOOD    0x0002
+       BIT_FLAGS8 sub_align;           /* Sub-alignment for a neutral monster */
 
        POSITION fy;            /* Y location on map */
        POSITION fx;            /* X location on map */
@@ -35,7 +66,7 @@ struct monster_type
 
        BIT_FLAGS8 mflag;       /* Extra monster flags */
 #define MFLAG_VIEW      0x01    /* Monster is in line of sight */
-#define MFLAG_LOS       0x02    /* Monster is marked for project_all_los() */
+#define MFLAG_LOS       0x02    /* Monster is marked for project_all_los(caster_ptr, ) */
 #define MFLAG_XXX2      0x04    /* (unused) */
 #define MFLAG_ETF       0x08    /* Monster is entering the field. */
 #define MFLAG_BORN      0x10    /* Monster is still being born */
@@ -405,19 +436,26 @@ extern void monster_desc(char *desc, monster_type *m_ptr, BIT_FLAGS mode);
 extern void monster_name(MONSTER_IDX m_idx, char* m_name);
 
 extern void roff_top(MONRACE_IDX r_idx);
-extern void screen_roff(MONRACE_IDX r_idx, BIT_FLAGS mode);
-extern void display_roff(MONRACE_IDX r_idx);
-extern void output_monster_spoiler(MONRACE_IDX r_idx, void(*roff_func)(TERM_COLOR attr, concptr str));
+extern void screen_roff(player_type *player_ptr, MONRACE_IDX r_idx, BIT_FLAGS mode);
+extern void display_roff(player_type *player_ptr);
+extern void output_monster_spoiler(player_type *player_ptr, MONRACE_IDX r_idx, void(*roff_func)(TERM_COLOR attr, concptr str));
 extern concptr extract_note_dies(MONRACE_IDX r_idx);
-extern void monster_death(MONSTER_IDX m_idx, bool drop_item);
-extern monsterrace_hook_type get_monster_hook(void);
+extern void monster_death(player_type *player_ptr, MONSTER_IDX m_idx, bool drop_item);
+extern monsterrace_hook_type get_monster_hook(player_type *player_ptr);
 extern monsterrace_hook_type get_monster_hook2(POSITION y, POSITION x);
 extern void set_friendly(monster_type *m_ptr);
 extern void set_pet(monster_type *m_ptr);
 extern void set_hostile(monster_type *m_ptr);
 extern void anger_monster(monster_type *m_ptr);
+
+/*
+ * Bit flags for the *_can_enter() and monster_can_cross_terrain()
+ */
+#define CEM_RIDING              0x0001
+#define CEM_P_CAN_ENTER_PATTERN 0x0002
 extern bool monster_can_cross_terrain(FEAT_IDX feat, monster_race *r_ptr, BIT_FLAGS16 mode);
 extern bool monster_can_enter(POSITION y, POSITION x, monster_race *r_ptr, BIT_FLAGS16 mode);
+
 extern bool are_enemies(monster_type *m_ptr1, monster_type *m_ptr2);
 extern bool monster_has_hostile_align(monster_type *m_ptr, int pa_good, int pa_evil, monster_race *r_ptr);
 extern void dice_to_string(int base_damage, int dice_num, int dice_side, int dice_mult, int dice_div, char* msg);
@@ -425,14 +463,67 @@ extern concptr look_mon_desc(monster_type *m_ptr, BIT_FLAGS mode);
 extern int get_monster_crowd_number(MONSTER_IDX m_idx);
 extern void message_pain(MONSTER_IDX m_idx, HIT_POINT dam);
 
+/* monster2.c */
+extern void set_target(monster_type *m_ptr, POSITION y, POSITION x);
+extern void reset_target(monster_type *m_ptr);
+extern monster_race *real_r_ptr(monster_type *m_ptr);
+extern MONRACE_IDX real_r_idx(monster_type *m_ptr);
+extern void delete_monster_idx(MONSTER_IDX i);
+extern void compact_monsters(int size);
+extern void wipe_m_list(void);
+extern MONSTER_IDX m_pop(void);
+extern errr get_mon_num_prep(monsterrace_hook_type monster_hook, monsterrace_hook_type monster_hook2);
+extern MONRACE_IDX get_mon_num(DEPTH level);
+extern int lore_do_probe(MONRACE_IDX r_idx);
+extern void lore_treasure(MONSTER_IDX m_idx, ITEM_NUMBER num_item, ITEM_NUMBER num_gold);
+extern void update_monster(player_type *subject_ptr, MONSTER_IDX m_idx, bool full);
+extern void update_monsters(bool full);
+extern bool multiply_monster(MONSTER_IDX m_idx, bool clone, BIT_FLAGS mode);
+
+
+/*
+ * Some things which induce learning
+ */
+#define DRS_ACID         1
+#define DRS_ELEC         2
+#define DRS_FIRE         3
+#define DRS_COLD         4
+#define DRS_POIS         5
+#define DRS_NETH         6
+#define DRS_LITE         7
+#define DRS_DARK         8
+#define DRS_FEAR         9
+#define DRS_CONF        10
+#define DRS_CHAOS       11
+#define DRS_DISEN       12
+#define DRS_BLIND       13
+#define DRS_NEXUS       14
+#define DRS_SOUND       15
+#define DRS_SHARD       16
+#define DRS_FREE        30
+#define DRS_MANA        31
+#define DRS_REFLECT     32
+extern void update_smart_learn(MONSTER_IDX m_idx, int what);
+
+extern void choose_new_monster(MONSTER_IDX m_idx, bool born, MONRACE_IDX r_idx);
+extern SPEED get_mspeed(monster_race *r_ptr);
+extern void monster_drop_carried_objects(monster_type *m_ptr);
+
 #define is_friendly(A) \
         (bool)(((A)->smart & SM_FRIENDLY) ? TRUE : FALSE)
 
-#define is_friendly_idx(IDX) \
-        (bool)((IDX) > 0 && is_friendly(&current_floor_ptr->m_list[(IDX)]))
+#define is_friendly_idx(MONSTER_IDX) \
+        (bool)((MONSTER_IDX) > 0 && is_friendly(&p_ptr->current_floor_ptr->m_list[(MONSTER_IDX)]))
 
 #define is_pet(A) \
         (bool)(((A)->smart & SM_PET) ? TRUE : FALSE)
 
 #define is_hostile(A) \
-        (bool)((is_friendly(A) || is_pet(A)) ? FALSE : TRUE)
\ No newline at end of file
+        (bool)((is_friendly(A) || is_pet(A)) ? FALSE : TRUE)
+
+/* Hack -- Determine monster race appearance index is same as race index */
+#define is_original_ap(A) \
+        (bool)(((A)->ap_r_idx == (A)->r_idx) ? TRUE : FALSE)
+
+#define is_original_ap_and_seen(A) \
+        (bool)((A)->ml && !p_ptr->image && ((A)->ap_r_idx == (A)->r_idx))