mirror of
https://github.com/ACreTeam/ac-decomp
synced 2026-09-10 03:01:58 -04:00
Implement & link ac_npc
This commit is contained in:
+7
-2
@@ -8,6 +8,12 @@
|
||||
extern "C" {
|
||||
#endif
|
||||
|
||||
#define aBALL_STATE_DEAD (1 << 0)
|
||||
#define aBALL_STATE_IN_HOLE (1 << 1)
|
||||
#define aBALL_STATE_PLAYER_HIT_SCOOP (1 << 2)
|
||||
#define aBALL_STATE_PLAYER_HIT_AXE (1 << 3)
|
||||
|
||||
|
||||
typedef void (*BALL_PROCESS_PROC)(ACTOR*, GAME*);
|
||||
|
||||
typedef struct actor_ball_s {
|
||||
@@ -27,7 +33,7 @@ typedef struct actor_ball_s {
|
||||
s16 unk1FE;
|
||||
s_xyz angle;
|
||||
s16 unk206;
|
||||
s16 unk208;
|
||||
s16 state_flags;
|
||||
s16 unk20A;
|
||||
s16 unk20C;
|
||||
} BALL_ACTOR;
|
||||
@@ -39,4 +45,3 @@ extern ACTOR_PROFILE Ball_Profile;
|
||||
#endif
|
||||
|
||||
#endif
|
||||
|
||||
|
||||
@@ -22,7 +22,7 @@ typedef void (*aGYO_dt_proc)(ACTOR*, GAME*);
|
||||
typedef void (*aGYO_ballcheck_proc)(xyz_t*, f32, s16);
|
||||
typedef void (*aGYO_hitcheck_proc)(xyz_t*, s16);
|
||||
typedef int (*aGYO_chk_live_proc)(int, int, GAME*);
|
||||
typedef int (*aGYO_search_near_proc)(f32, f32);
|
||||
typedef ACTOR* (*aGYO_search_near_proc)(f32, f32);
|
||||
|
||||
/* sizeof(aGYO_Clip_c) == 0x1C */
|
||||
typedef struct ac_gyoei_clip_s {
|
||||
|
||||
+374
-56
@@ -57,6 +57,60 @@ enum {
|
||||
aNPC_JOINT_NUM
|
||||
};
|
||||
|
||||
enum {
|
||||
aNPC_ANIM_SPEED_TYPE_LOCKED,
|
||||
aNPC_ANIM_SPEED_TYPE_FREE,
|
||||
|
||||
aNPC_ANIM_SPEED_TYPE_NUM
|
||||
};
|
||||
|
||||
enum {
|
||||
aNPC_SUB_ANIM_NONE,
|
||||
aNPC_SUB_ANIM_UMBRELLA,
|
||||
aNPC_SUB_ANIM_UTIWA, // paper fan
|
||||
aNPC_SUB_ANIM_TUE, // Tortimer's cane
|
||||
|
||||
aNPC_SUB_ANIM_NUM
|
||||
};
|
||||
|
||||
enum {
|
||||
aNPC_TEX_ANIM_EYE,
|
||||
aNPC_TEX_ANIM_MOUTH,
|
||||
|
||||
aNPC_TEX_ANIM_NUM
|
||||
};
|
||||
|
||||
enum {
|
||||
aNPC_CHN_BASE_TYPE_RELATIVE,
|
||||
aNPC_CHN_BASE_TYPE_WORLD,
|
||||
|
||||
aNPC_CHN_BASE_TYPE_NUM
|
||||
};
|
||||
|
||||
enum {
|
||||
aNPC_CLOTH_IDX_NONE,
|
||||
aNPC_CLOTH_IDX0,
|
||||
aNPC_CLOTH_IDX1,
|
||||
aNPC_CLOTH_IDX2,
|
||||
aNPC_CLOTH_IDX3,
|
||||
aNPC_CLOTH_IDX4,
|
||||
aNPC_CLOTH_IDX5,
|
||||
aNPC_CLOTH_IDX6,
|
||||
aNPC_CLOTH_IDX7,
|
||||
aNPC_CLOTH_IDX8,
|
||||
aNPC_CLOTH_IDX9,
|
||||
aNPC_CLOTH_IDX_ORG,
|
||||
|
||||
aNPC_CLOTH_IDX_NUM
|
||||
};
|
||||
|
||||
enum {
|
||||
aNPC_MASK_CAT_TYPE_NONE,
|
||||
aNPC_MASK_CAT_TYPE_MASKCAT,
|
||||
|
||||
aNPC_MASK_CAT_TYPE_NUM
|
||||
};
|
||||
|
||||
typedef struct ac_npc_clip_s aNPC_Clip_c;
|
||||
|
||||
#define aNPC_EYE_TEX_NUM 8
|
||||
@@ -104,7 +158,7 @@ enum {
|
||||
enum {
|
||||
aNPC_THINK_WAIT,
|
||||
aNPC_THINK_WANDER,
|
||||
aNPC_THINK_WANDER2,
|
||||
aNPC_THINK_WALK_WANDER,
|
||||
aNPC_THINK_GO_HOME,
|
||||
aNPC_THINK_INTO_HOUSE,
|
||||
aNPC_THINK_LEAVE_HOUSE,
|
||||
@@ -131,6 +185,17 @@ enum {
|
||||
aNPC_THINK_PROC_NUM
|
||||
};
|
||||
|
||||
enum {
|
||||
aNPC_CT_SCHED_TYPE_NONE,
|
||||
aNPC_CT_SCHED_TYPE_NORMAL,
|
||||
aNPC_CT_SCHED_TYPE_STAND,
|
||||
aNPC_CT_SCHED_TYPE_WANDER,
|
||||
aNPC_CT_SCHED_TYPE_WALK_WANDER,
|
||||
aNPC_CT_SCHED_TYPE_SPECIAL,
|
||||
|
||||
aNPC_CT_SCHED_TYPE_NUM
|
||||
};
|
||||
|
||||
typedef void (*aNPC_TALK_REQUEST_PROC)(ACTOR*, GAME*);
|
||||
typedef int (*aNPC_TALK_INIT_PROC)(ACTOR*, GAME*);
|
||||
typedef int (*aNPC_TALK_END_CHECK_PROC)(ACTOR*, GAME*);
|
||||
@@ -138,14 +203,34 @@ typedef int (*aNPC_TALK_END_CHECK_PROC)(ACTOR*, GAME*);
|
||||
typedef struct npc_ct_data_s {
|
||||
mActor_proc move_proc;
|
||||
mActor_proc draw_proc;
|
||||
int _08;
|
||||
int sched_type;
|
||||
aNPC_TALK_REQUEST_PROC talk_request_proc;
|
||||
aNPC_TALK_INIT_PROC talk_init_proc;
|
||||
aNPC_TALK_END_CHECK_PROC talk_end_check_proc;
|
||||
int _18;
|
||||
} aNPC_ct_data_c;
|
||||
|
||||
enum {
|
||||
aNPC_ATT_TYPE_NONE,
|
||||
aNPC_ATT_TYPE_ACTOR,
|
||||
aNPC_ATT_TYPE_POS,
|
||||
|
||||
aNPC_ATT_TYPE_NUM
|
||||
};
|
||||
|
||||
typedef struct npc_attention_s {
|
||||
u8 type;
|
||||
ACTOR* actor;
|
||||
xyz_t pos;
|
||||
} aNPC_attention_c;
|
||||
|
||||
typedef struct npc_overlay_s {
|
||||
u8* buf;
|
||||
int used;
|
||||
} aNPC_overlay_c;
|
||||
|
||||
typedef int (*aNPC_SETUP_ACTOR_PROC)(GAME_PLAY*, mActor_name_t, s8, int, s16, int, int, int, int);
|
||||
typedef void (*aNPC_GET_OVERLAY_AREA_PROC)(ACTOR_DLFTBL*, u8*, size_t, mActor_name_t);
|
||||
typedef void (*aNPC_DMA_DRAW_DATA_PROC)(aNPC_draw_data_c*, mActor_name_t);
|
||||
typedef void (*aNPC_FREE_OVERLAY_AREA_PROC)(ACTOR_DLFTBL*);
|
||||
typedef ACTOR* (*aNPC_GET_ACTOR_AREA_PROC)(size_t, const char*, int);
|
||||
@@ -163,22 +248,31 @@ typedef void (*aNPC_DRAW_PROC)(ACTOR*, GAME*);
|
||||
typedef void (*aNPC_SET_DST_POS_PROC)(NPC_ACTOR*, f32, f32);
|
||||
|
||||
typedef void (*aNPC_REBUILD_DMA_PROC)();
|
||||
typedef int (*aNPC_SET_REQUEST_ACT_PROC)(NPC_ACTOR* nactorx, u8 priority, u8 act_idx, u8 act_type, u16* arg_data);
|
||||
typedef int (*aNPC_SET_HEAD_REQUEST_PROC)(NPC_ACTOR* nactorx, u8 priority, u8 type, ACTOR* target_actor, xyz_t* target_pos);
|
||||
typedef void (*aNPC_TALK_DEMO_PROC)(ACTOR*);
|
||||
typedef void (*aNPC_ANIMATION_INIT_PROC)(ACTOR*, int, int);
|
||||
typedef void (*aNPC_CHG_SCHEDULE_PROC)(NPC_ACTOR*, GAME_PLAY*, u8);
|
||||
typedef int (*aNPC_CLIP_THINK_PROC)(NPC_ACTOR*, GAME_PLAY*, int, int);
|
||||
|
||||
typedef int (*aNPC_FORCE_CALL_REQ_PROC)(NPC_ACTOR*, int);
|
||||
typedef void (*aNPC_SET_START_POS_PROC)(ACTOR* actorx);
|
||||
|
||||
struct ac_npc_clip_s {
|
||||
/* 0x000 */ aNPC_SETUP_ACTOR_PROC setupActor_proc;
|
||||
/* 0x004 */ void* _004;
|
||||
/* 0x004 */ aNPC_GET_OVERLAY_AREA_PROC get_overlay_area_proc;
|
||||
/* 0x008 */ aNPC_FREE_OVERLAY_AREA_PROC free_overlay_area_proc;
|
||||
/* 0x00C */ aNPC_GET_ACTOR_AREA_PROC get_actor_area_proc;
|
||||
/* 0x010 */ aNPC_FREE_ACTOR_AREA_PROC free_actor_area_proc;
|
||||
/* 0x014 */ aNPC_DMA_DRAW_DATA_PROC dma_draw_data_proc;
|
||||
/* 0x018 */ aNPC_SET_ATTENTION_REQUEST_PROC set_attention_request_proc;
|
||||
/* 0x01C */ void* _01C[(0x0CC - 0x01C) / sizeof(void*)];
|
||||
/* 0x01C */ NPC_ACTOR* keep_actors[9];
|
||||
/* 0x040 */ int keep_actor_used[9];
|
||||
/* 0x064 */ aNPC_overlay_c keep_n_overlay[1];
|
||||
/* 0x06C */ aNPC_overlay_c keep_s_overlay[2];
|
||||
/* 0x07C */ aNPC_overlay_c keep_k_overlay[3];
|
||||
/* 0x094 */ aNPC_overlay_c keep_e_overlay[2];
|
||||
/* 0x0A4 */ aNPC_attention_c attention_request;
|
||||
/* 0x0B8 */ aNPC_attention_c attention;
|
||||
/* 0x0CC */ aNPC_BIRTH_CHECK_PROC birth_check_proc;
|
||||
/* 0x0D0 */ aNPC_CT_PROC ct_proc;
|
||||
/* 0x0D4 */ aNPC_DT_PROC dt_proc;
|
||||
@@ -191,14 +285,16 @@ struct ac_npc_clip_s {
|
||||
/* 0x0F0 */ void* _0F0;
|
||||
/* 0x0F4 */ aNPC_DRAW_PROC draw_proc;
|
||||
/* 0x0F8 */ aNPC_REBUILD_DMA_PROC rebuild_dma_proc;
|
||||
/* 0x0FC */ void* _0FC[(0x110 - 0x0FC) / sizeof(void*)];
|
||||
/* 0x0FC */ void* _0FC[(0x108 - 0x0FC) / sizeof(void*)];
|
||||
/* 0x108 */ aNPC_SET_REQUEST_ACT_PROC set_request_act_proc;
|
||||
/* 0x10C */ aNPC_SET_HEAD_REQUEST_PROC set_head_request_act_proc;
|
||||
/* 0x110 */ aNPC_TALK_DEMO_PROC talk_demo_proc;
|
||||
/* 0x114 */ aNPC_ANIMATION_INIT_PROC animation_init_proc;
|
||||
/* 0x118 */ aNPC_CHG_SCHEDULE_PROC chg_schedule_proc;
|
||||
/* 0x11C */ aNPC_SET_DST_POS_PROC set_dst_pos_proc;
|
||||
/* 0x120 */ aNPC_CLIP_THINK_PROC think_proc;
|
||||
/* 0x124 */ aNPC_FORCE_CALL_REQ_PROC force_call_req_proc;
|
||||
/* 0x128 */ void* _128;
|
||||
/* 0x128 */ aNPC_SET_START_POS_PROC set_start_pos_proc;
|
||||
};
|
||||
|
||||
typedef struct npc_info_s {
|
||||
@@ -218,7 +314,51 @@ typedef struct npc_animation_s {
|
||||
s8 animation_id;
|
||||
} aNPC_ANIMATION_c;
|
||||
|
||||
/* TODO: draw data */
|
||||
typedef struct {
|
||||
int num_check_frames;
|
||||
int* check_frame_tbl;
|
||||
} aNPC_se_data_c;
|
||||
|
||||
enum {
|
||||
aNPC_OTHER_SE_TYPE_NONE,
|
||||
aNPC_OTHER_SE_TYPE1,
|
||||
|
||||
aNPC_OTHER_SE_TYPE_NUM
|
||||
};
|
||||
|
||||
typedef struct {
|
||||
aNPC_se_data_c se_data;
|
||||
u16 se_no;
|
||||
} aNPC_other_se_data_c;
|
||||
|
||||
#define aNPC_OTHER_SE_NUM 3
|
||||
|
||||
typedef struct {
|
||||
aNPC_se_data_c lfoot;
|
||||
aNPC_se_data_c rfoot;
|
||||
int other_se_type;
|
||||
aNPC_other_se_data_c other_se[aNPC_OTHER_SE_NUM];
|
||||
} aNPC_se_c;
|
||||
|
||||
typedef struct {
|
||||
u8 seq_type;
|
||||
u8 last_seq_type;
|
||||
u8 seq_pattern;
|
||||
u8 seq_counter;
|
||||
u8 pattern;
|
||||
f32 pattern_counter;
|
||||
s8 pattern_stop_idx;
|
||||
u8 loop_counter;
|
||||
u8* fixed_pattern_seq;
|
||||
} aNPC_tex_anim_c;
|
||||
|
||||
typedef struct {
|
||||
s16 feel_type;
|
||||
u8 max;
|
||||
u8 set_num;
|
||||
u8* set_p;
|
||||
} aNPC_feel_effect_c;
|
||||
|
||||
typedef struct npc_draw_info_s {
|
||||
/* 0x000 */ int main_animation_frame;
|
||||
/* 0x004 */ int main_animation_state;
|
||||
@@ -228,39 +368,51 @@ typedef struct npc_draw_info_s {
|
||||
/* 0x014 */ aNPC_ANIMATION_c main_animation;
|
||||
/* 0x1D0 */ aNPC_ANIMATION_c sub_animation0;
|
||||
/* 0x38C */ aNPC_ANIMATION_c sub_animation1;
|
||||
/* 0x548 */ u8 _548[0x580 - 0x548];
|
||||
/* 0x548 */ aNPC_se_c se;
|
||||
/* 0x580 */ int animation_id;
|
||||
/* 0x584 */ int texture_bank_idx;
|
||||
/* 0x588 */ u8 _588[0x5B0 - 0x588];
|
||||
/* 0x588 */ aNPC_tex_anim_c tex_anim[aNPC_TEX_ANIM_NUM]; // eye -> mouth
|
||||
/* 0x5B0 */ u8 draw_type;
|
||||
/* 0x5B1 */ u8 _5B1;
|
||||
/* 0x5B2 */ u8 _5B2;
|
||||
/* 0x5B3 */ u8 _5B3;
|
||||
/* 0x5B4 */ u8 _5B4;
|
||||
/* 0x5B5 */ u8 _5B5;
|
||||
/* 0x5B6 */ u8 _5B6;
|
||||
/* 0x5B7 */ u8 _5B7;
|
||||
/* 0x5B8 */ u8 _5B8;
|
||||
/* 0x5B9 */ u8 _5B9;
|
||||
/* 0x5BA */ u8 _5BA;
|
||||
/* 0x5BB */ u8 _5BB;
|
||||
/* 0x5BC */ u8 _5BC;
|
||||
/* 0x5BD */ u8 _5BD;
|
||||
/* 0x5BE */ u8 _5BE;
|
||||
/* 0x5BE */ u8 _5BF[0x5D0 - 0x5BF];
|
||||
/* 0x5D0 */ f32 animation_speed;
|
||||
/* 0x5D4 */ u8 _5D4[0x5D8 - 0x5D4];
|
||||
/* 0x5B1 */ u8 cloth_change_step;
|
||||
/* 0x5B2 */ mActor_name_t next_cloth_no;
|
||||
/* 0x5B4 */ mActor_name_t cloth_no;
|
||||
/* 0x5B6 */ u8 next_org_idx;
|
||||
/* 0x5B7 */ u8 org_idx;
|
||||
/* 0x5B8 */ s8 cloth_idx;
|
||||
/* 0x5B9 */ u8 chn_base_type;
|
||||
/* 0x5BA */ u16 _5BA;
|
||||
/* 0x5BC */ u8 umb_state;
|
||||
/* 0x5BD */ u8 sub_anim_type;
|
||||
/* 0x5BE */ u8 anim_speed_type;
|
||||
/* 0x5BF */ u8 loop_flag;
|
||||
/* 0x5C0 */ s16 effect_pattern;
|
||||
/* 0x5C2 */ s16 effect_type;
|
||||
/* 0x5C4 */ aNPC_feel_effect_c* feel_effect;
|
||||
/* 0x5C8 */ f32 feel_effect_counter;
|
||||
/* 0x5CC */ s16 shape_bank;
|
||||
/* 0x5CE */ s16 tex_bank;
|
||||
/* 0x5D0 */ f32 frame_speed;
|
||||
/* 0x5D4 */ f32 frame_sub_speed;
|
||||
/* 0x5D8 */ xyz_t shadow_pos;
|
||||
/* 0x5E4 */ u8 _5E4[0x630 - 0x5E4];
|
||||
/* 0x5E4 */ aNPC_draw_tex_data_c draw_tex_data;
|
||||
} aNPC_draw_info_c;
|
||||
|
||||
typedef void (*aNPC_THINK_PROC)(NPC_ACTOR*, GAME_PLAY*, int);
|
||||
|
||||
#define aNPC_THINK_INTERRUPT_FRIENDSHIP (1 << 0)
|
||||
#define aNPC_THINK_INTERRUPT_FATIGUE (1 << 1)
|
||||
#define aNPC_THINK_INTERRUPT_OBSTANCE (1 << 2)
|
||||
#define aNPC_THINK_INTERRUPT_OBSTACLE (1 << 2)
|
||||
#define aNPC_THINK_INTERRUPT_ENTRANCE (1 << 3)
|
||||
|
||||
enum {
|
||||
aNPC_FORCE_CALL_NONE,
|
||||
aNPC_FORCE_CALL_REQUEST,
|
||||
aNPC_FORCE_CALL_SET,
|
||||
aNPC_FORCE_CALL_START,
|
||||
|
||||
aNPC_FORCE_CALL_NUM
|
||||
};
|
||||
|
||||
/* sizeof(aNPC_think_info_c) == 0x18 */
|
||||
typedef struct npc_think_info_s {
|
||||
/* 0x00 */ int idx;
|
||||
@@ -277,7 +429,7 @@ typedef void (*aNPC_SCHEDULE_PROC)(NPC_ACTOR*, GAME_PLAY*, int);
|
||||
|
||||
typedef struct npc_schedule_info_s {
|
||||
u8 type;
|
||||
u8 state;
|
||||
u8 step;
|
||||
mNPS_schedule_c schedule;
|
||||
aNPC_SCHEDULE_PROC schedule_proc;
|
||||
} aNPC_schedule_info_c;
|
||||
@@ -289,6 +441,7 @@ enum {
|
||||
aNPC_ACT_OBJ_TARGET_NPC,
|
||||
aNPC_ACT_OBJ_4,
|
||||
aNPC_ACT_OBJ_5,
|
||||
aNPC_ACT_OBJ_BALL,
|
||||
aNPC_ACT_OBJ_INSECT,
|
||||
aNPC_ACT_OBJ_FISH,
|
||||
|
||||
@@ -304,14 +457,16 @@ enum {
|
||||
aNPC_ACT_TYPE_NUM
|
||||
};
|
||||
|
||||
#define aNPC_ACT_NONE 0xFF
|
||||
|
||||
enum {
|
||||
aNPC_ACT_WAIT,
|
||||
aNPC_ACT_WALK,
|
||||
aNPC_ACT_WALK2,
|
||||
aNPC_ACT_RUN,
|
||||
aNPC_ACT_TURN,
|
||||
aNPC_ACT_TURN2,
|
||||
aNPC_ACT_CHASE_INSECT,
|
||||
aNPC_ACT_CHASE_INSECT2,
|
||||
aNPC_ACT_CHASE_GYOEI,
|
||||
aNPC_ACT_GREETING,
|
||||
aNPC_ACT_TALK,
|
||||
aNPC_ACT_INTO_HOUSE,
|
||||
@@ -324,7 +479,7 @@ enum {
|
||||
aNPC_ACT_CLAP,
|
||||
aNPC_ACT_TRANS,
|
||||
aNPC_ACT_GET,
|
||||
aNPC_ACT_GET2,
|
||||
aNPC_ACT_CHANGE_CLOTH,
|
||||
aNPC_ACT_PITFALL,
|
||||
aNPC_ACT_REVIVE,
|
||||
aNPC_ACT_SPECIAL,
|
||||
@@ -332,6 +487,76 @@ enum {
|
||||
aNPC_ACT_NUM
|
||||
};
|
||||
|
||||
enum {
|
||||
aNPC_ACTION_PROC_TYPE_INIT,
|
||||
aNPC_ACTION_PROC_TYPE_CHG_DATA,
|
||||
aNPC_ACTION_PROC_TYPE_MAIN,
|
||||
|
||||
aNPC_ACTION_PROC_TYPE_NUM
|
||||
};
|
||||
|
||||
enum {
|
||||
aNPC_ACTION_TYPE_WAIT,
|
||||
aNPC_ACTION_TYPE_WAIT_KI,
|
||||
aNPC_ACTION_TYPE_WAIT_DO,
|
||||
aNPC_ACTION_TYPE_WAIT_AI,
|
||||
aNPC_ACTION_TYPE_WAIT_NEMU,
|
||||
aNPC_ACTION_TYPE_WALK,
|
||||
aNPC_ACTION_TYPE_WALK_KI,
|
||||
aNPC_ACTION_TYPE_WALK_DO,
|
||||
aNPC_ACTION_TYPE_WALK_AI,
|
||||
aNPC_ACTION_TYPE_RUN,
|
||||
aNPC_ACTION_TYPE_RUN_KI,
|
||||
aNPC_ACTION_TYPE_RUN_DO,
|
||||
aNPC_ACTION_TYPE_RUN_AI,
|
||||
aNPC_ACTION_TYPE_TURN,
|
||||
aNPC_ACTION_TYPE_TURN2,
|
||||
aNPC_ACTION_TYPE_PAL_WAIT,
|
||||
aNPC_ACTION_TYPE_GREETING0,
|
||||
aNPC_ACTION_TYPE_GREETING1,
|
||||
aNPC_ACTION_TYPE_GREETING2,
|
||||
aNPC_ACTION_TYPE_GREETING3,
|
||||
aNPC_ACTION_TYPE_GURATUKU,
|
||||
aNPC_ACTION_TYPE_OTIRU1,
|
||||
aNPC_ACTION_TYPE_OTIRU2,
|
||||
aNPC_ACTION_TYPE_MOGAKU,
|
||||
aNPC_ACTION_TYPE_DERU1,
|
||||
aNPC_ACTION_TYPE_DERU2,
|
||||
aNPC_ACTION_TYPE_TALK_TURN,
|
||||
aNPC_ACTION_TYPE_TALK,
|
||||
aNPC_ACTION_TYPE_OPEN_DOOR,
|
||||
aNPC_ACTION_TYPE_GO_OUT,
|
||||
aNPC_ACTION_TYPE_UMB_OPEN,
|
||||
aNPC_ACTION_TYPE_UMB_CLOSE,
|
||||
aNPC_ACTION_TYPE_TRANSFER_MOVE,
|
||||
aNPC_ACTION_TYPE_TRANSFER,
|
||||
aNPC_ACTION_TYPE_TRANSFER_WAIT,
|
||||
aNPC_ACTION_TYPE_TRANSFER_F,
|
||||
aNPC_ACTION_TYPE_TRANSFER_F_WAIT,
|
||||
aNPC_ACTION_TYPE_SEND_MAIL,
|
||||
aNPC_ACTION_TYPE_GET_MOVE,
|
||||
aNPC_ACTION_TYPE_GET,
|
||||
aNPC_ACTION_TYPE_GET_PULL,
|
||||
aNPC_ACTION_TYPE_GET_PULL_WAIT,
|
||||
aNPC_ACTION_TYPE_GET_PUTAWAY,
|
||||
aNPC_ACTION_TYPE_GET_EAT,
|
||||
aNPC_ACTION_TYPE_GET_CHANGE,
|
||||
aNPC_ACTION_TYPE_GET_RETURN,
|
||||
aNPC_ACTION_TYPE_GET_F,
|
||||
aNPC_ACTION_TYPE_GET_PULL_F,
|
||||
aNPC_ACTION_TYPE_GET_PULL_WAIT_F,
|
||||
aNPC_ACTION_TYPE_GET_PUTAWAY_F,
|
||||
aNPC_ACTION_TYPE_GET_RETURN_F,
|
||||
aNPC_ACTION_TYPE_ESTIMATE_F,
|
||||
aNPC_ACTION_TYPE_ENSOU_E,
|
||||
aNPC_ACTION_TYPE_WAIT_E,
|
||||
aNPC_ACTION_TYPE_GYAFUN1,
|
||||
aNPC_ACTION_TYPE_GYAFUN2,
|
||||
aNPC_ACTION_TYPE_CLAP,
|
||||
|
||||
aNPC_ACTION_TYPE_NUM
|
||||
};
|
||||
|
||||
typedef void (*aNPC_ACTION_PROC)(NPC_ACTOR*, GAME_PLAY*, int);
|
||||
|
||||
#define aNPC_ACTION_END_STEP 0xFF
|
||||
@@ -341,9 +566,9 @@ typedef struct npc_action_s {
|
||||
u8 idx;
|
||||
u8 step;
|
||||
u8 type;
|
||||
u8 prev_priority;
|
||||
u8 prev_idx;
|
||||
u8 prev_step;
|
||||
s16 act_timer;
|
||||
u16 act_timer;
|
||||
u8 feel;
|
||||
u8 act_obj;
|
||||
u16 act_obj_id;
|
||||
@@ -384,6 +609,14 @@ typedef struct npc_request_s {
|
||||
#define aNPC_COND_DEMO_SKIP_FOOTSTEPS_VFX (1 << 14) /* 0x4000 */
|
||||
#define aNPC_COND_DEMO_SKIP_UZAI_CHECK (1 << 15) /* 0x8000 */
|
||||
|
||||
enum {
|
||||
aNPC_ENTRANCE_TYPE_NONE, // not near any entrance
|
||||
aNPC_ENTRANCE_TYPE_NEARBY, // near a house entrance
|
||||
aNPC_ENTRANCE_TYPE_AT, // at a house entrance
|
||||
|
||||
aNPC_ENTRANCE_TYPE_NUM
|
||||
};
|
||||
|
||||
typedef struct npc_condition_s {
|
||||
u8 hide_flg;
|
||||
u8 hide_request;
|
||||
@@ -413,11 +646,21 @@ typedef struct npc_condition_s {
|
||||
|
||||
typedef struct npc_uzai_s {
|
||||
int step;
|
||||
u8 counter;
|
||||
u8 tool;
|
||||
u8 flag;
|
||||
u8 cross;
|
||||
} aNPC_uzai_c;
|
||||
|
||||
enum {
|
||||
aNPC_ITEM_TYPE_NONE,
|
||||
aNPC_ITEM_TYPE_UMBRELLA,
|
||||
aNPC_ITEM_TYPE_KEITAI,
|
||||
aNPC_ITEM_TYPE_PUTAWAY,
|
||||
aNPC_ITEM_TYPE_LEFT_HAND,
|
||||
|
||||
aNPC_ITEM_TYPE_NUM
|
||||
};
|
||||
|
||||
typedef struct npc_hand_s {
|
||||
u8 item_type;
|
||||
u8 requested_item_type;
|
||||
@@ -431,6 +674,14 @@ typedef struct npc_hand_s {
|
||||
xyz_t pos;
|
||||
} aNPC_hand_c;
|
||||
|
||||
enum {
|
||||
aNPC_HEAD_TARGET_NONE,
|
||||
aNPC_HEAD_TARGET_ACTOR,
|
||||
aNPC_HEAD_TARGET_POS,
|
||||
|
||||
aNPC_HEAD_TARGET_NUM
|
||||
};
|
||||
|
||||
typedef struct npc_head_s {
|
||||
s16 angle_x;
|
||||
s16 angle_y;
|
||||
@@ -450,12 +701,31 @@ enum {
|
||||
aNPC_FOOT_NUM
|
||||
};
|
||||
|
||||
typedef struct npc_movement_s {
|
||||
typedef struct npc_speed_s {
|
||||
f32 max_speed;
|
||||
f32 acceleration;
|
||||
f32 deceleration;
|
||||
f32 target_pos_x;
|
||||
f32 target_pos_z;
|
||||
} aNPC_spd_c;
|
||||
|
||||
enum {
|
||||
aNPC_MOVE_RANGE_TYPE_BLOCK,
|
||||
aNPC_MOVE_RANGE_TYPE_CIRCLE,
|
||||
|
||||
aNPC_MOVE_RANGE_TYPE_NUM
|
||||
};
|
||||
|
||||
enum {
|
||||
aNPC_FRIENDSHIP_NORMAL, // default
|
||||
aNPC_FRIENDSHIP_AVOID, // avoid player (hate player)
|
||||
aNPC_FRIENDSHIP_SEARCH, // search for player (love player)
|
||||
|
||||
aNPC_FRIENDSHIP_NUM
|
||||
};
|
||||
|
||||
typedef struct npc_movement_s {
|
||||
aNPC_spd_c speed;
|
||||
f32 dst_pos_x;
|
||||
f32 dst_pos_z;
|
||||
f32 avoid_pos_x;
|
||||
f32 avoid_pos_z;
|
||||
s16 move_timer;
|
||||
@@ -475,17 +745,49 @@ typedef struct npc_movement_s {
|
||||
u8 demo_move_timer;
|
||||
} aNPC_movement_c;
|
||||
|
||||
enum {
|
||||
aNPC_BG_CHECK_TYPE_NONE, // no collision
|
||||
aNPC_BG_CHECK_TYPE_ONLY_GROUND, // only ground collision
|
||||
aNPC_BG_CHECK_TYPE_NORMAL, // standard
|
||||
aNPC_BG_CHECK_TYPE_RANGE, // standard plus range
|
||||
|
||||
aNPC_BG_CHECK_TYPE_NUM
|
||||
};
|
||||
|
||||
typedef struct npc_collision_s {
|
||||
ClObjPipe_c pipe;
|
||||
f32 BGcheck_radius;
|
||||
u8 collision_flag;
|
||||
u8 priority;
|
||||
u8 check_kind;
|
||||
u8 turn_flag;
|
||||
u16 _24;
|
||||
s16 turn_angle;
|
||||
f32 bg_rev_add;
|
||||
} aNPC_collision_c;
|
||||
|
||||
enum {
|
||||
aNPC_TALK_TYPE_NONE,
|
||||
aNPC_TALK_TYPE_START,
|
||||
aNPC_TALK_TYPE_CONTINUE,
|
||||
|
||||
aNPC_TALK_TYPE_NUM
|
||||
};
|
||||
|
||||
enum {
|
||||
aNPC_TALK_TURN_NORMAL,
|
||||
aNPC_TALK_TURN_HEAD,
|
||||
aNPC_TALK_TURN_NONE,
|
||||
|
||||
aNPC_TALK_TURN_NUM
|
||||
};
|
||||
|
||||
enum {
|
||||
aNPC_MANPU_CODE_RESET_KEKE = 0xFD,
|
||||
aNPC_MANPU_CODE_RESET_SIT = 0xFE,
|
||||
aNPC_MANPU_CODE_RESET = 0xFF,
|
||||
aNPC_MANPU_CODE_NONE = 0,
|
||||
};
|
||||
|
||||
typedef struct npc_actor_talk_info_s {
|
||||
aNPC_TALK_REQUEST_PROC talk_request_proc;
|
||||
aNPC_TALK_INIT_PROC talk_init_proc;
|
||||
@@ -525,6 +827,8 @@ enum {
|
||||
aNPC_SCHEDULE_TYPE_NUM
|
||||
};
|
||||
|
||||
#define aNPC_SCHEDULE_NONE 0xFF
|
||||
|
||||
enum {
|
||||
aNPC_SCHEDULE_PROC_INIT,
|
||||
aNPC_SCHEDULE_PROC_MAIN,
|
||||
@@ -561,27 +865,41 @@ struct npc_actor_s {
|
||||
int _990;
|
||||
};
|
||||
|
||||
typedef struct npc_control_cloth_s {
|
||||
u8 dma_flag;
|
||||
u8 init_flag;
|
||||
s16 _02;
|
||||
mActor_name_t cloth_item;
|
||||
u8 in_use_count;
|
||||
Object_Bank_c texture_bank;
|
||||
Object_Bank_c palette_bank;
|
||||
} aNPC_cloth_c;
|
||||
|
||||
typedef struct npc_control_actor_s {
|
||||
ACTOR* actor_class;
|
||||
aNPC_cloth_c cloth[10];
|
||||
u8 _8F4[0x9D8 - 0x8F4]; // TODO
|
||||
} NPC_CONTROL_ACTOR;
|
||||
|
||||
typedef struct npc_destruct_table_proc {
|
||||
aNPC_SUB_PROC unk0;
|
||||
aNPC_SUB_PROC unk4;
|
||||
} NPC_DT_PROCS;
|
||||
|
||||
typedef struct {
|
||||
aNPC_se_data_c* lfoot_data;
|
||||
aNPC_se_data_c* rfoot_data;
|
||||
int other_se_type;
|
||||
aNPC_other_se_data_c* other_se_data;
|
||||
} aNPC_se_data_table_c;
|
||||
|
||||
typedef struct {
|
||||
cKF_Animation_R_c anim;
|
||||
f32 start_frame;
|
||||
f32 end_frame;
|
||||
int mode;
|
||||
f32 morph_counter;
|
||||
u8* eye_seq_p;
|
||||
s16 eye_seq_type;
|
||||
s16 eye_seq_stop_frame;
|
||||
u8* mouth_seq_p;
|
||||
s16 mouth_seq_type;
|
||||
s16 mouth_seq_stop_frame;
|
||||
s16 feel_effect_set_frame;
|
||||
s16 feel_effect_type;
|
||||
aNPC_feel_effect_c* feel_effect;
|
||||
aNPC_se_data_table_c* se_data_table;
|
||||
} aNPC_Animation_c;
|
||||
|
||||
typedef struct {
|
||||
aNPC_Animation_c* anim_p;
|
||||
int anim_idx;
|
||||
} aNPC_anim_info_c;
|
||||
|
||||
extern ACTOR_PROFILE Npc_Profile;
|
||||
|
||||
#ifdef __cplusplus
|
||||
|
||||
+2
-2
@@ -90,8 +90,8 @@ typedef struct tools_s {
|
||||
/* 0x1C8 */ int work2;
|
||||
} TOOLS_ACTOR;
|
||||
|
||||
typedef ACTOR* (*ToolBirthProc)(int, int, ACTOR*, GAME*, s16, int*);
|
||||
typedef int (*ToolChgRequestModeProc)(ACTOR*, ACTOR*, int);
|
||||
typedef ACTOR* (*ToolBirthProc)(int kind, int mode, ACTOR* parent_actor, GAME* game, s16 arg, int* bank_id);
|
||||
typedef int (*ToolChgRequestModeProc)(ACTOR* parent_actor, ACTOR* tool, int mode);
|
||||
|
||||
typedef struct ToolClip {
|
||||
ToolBirthProc aTOL_birth_proc;
|
||||
|
||||
+2
-2
@@ -62,8 +62,8 @@ extern void sAdo_SysTrgStart(u16 id);
|
||||
|
||||
extern void sAdo_PlyWalkSe(u16 walk, const xyz_t* pos);
|
||||
extern void sAdo_PlyWalkSeRoom(u8 walk, const xyz_t* pos);
|
||||
extern void sAdo_NpcWalkSe(int walk, const xyz_t* pos);
|
||||
extern void sAdo_NpcWalkSeRoom(int walk, const xyz_t* pos);
|
||||
extern void sAdo_NpcWalkSe(u16 se_no, const xyz_t* pos);
|
||||
extern void sAdo_NpcWalkSeRoom(u16 se_no, const xyz_t* pos);
|
||||
|
||||
extern void sAdo_PlayerStatusLevel(f32 speed, int p);
|
||||
|
||||
|
||||
@@ -40,12 +40,20 @@ typedef enum audio_sound_effects {
|
||||
NA_SE_SENTAKU_OPEN,
|
||||
NA_SE_SENTAKU_KETTEI,
|
||||
|
||||
NA_SE_TUMBLE_GRASS,
|
||||
NA_SE_TUMBLE_SOIL,
|
||||
NA_SE_TUMBLE_STONE,
|
||||
NA_SE_TUMBLE_WOOD,
|
||||
NA_SE_TUMBLE_BUSH,
|
||||
NA_SE_TUMBLE_SNOW,
|
||||
|
||||
NA_SE_ZOOMDOWN_LONG = 0x15,
|
||||
NA_SE_LIGHT_ON,
|
||||
NA_SE_LIGHT_OFF,
|
||||
|
||||
NA_SE_25 = 0x25,
|
||||
NA_SE_26 = 0x26,
|
||||
NA_SE_27 = 0x27,
|
||||
|
||||
NA_SE_2A = 0x2A,
|
||||
|
||||
@@ -156,6 +164,9 @@ typedef enum audio_sound_effects {
|
||||
|
||||
NA_SE_SOUND_KNOCK,
|
||||
|
||||
NA_SE_TUMBLE_SAND = 0x156,
|
||||
NA_SE_TUMBLE_WAVE,
|
||||
|
||||
NA_SE_ARAIIKI_BOY = 0x158,
|
||||
NA_SE_ARAIIKI_GIRL = 0x15A,
|
||||
|
||||
@@ -210,6 +221,8 @@ typedef enum audio_sound_effects {
|
||||
|
||||
NA_SE_KARABURI = 0x43A,
|
||||
|
||||
NA_SE_43D = 0x43D,
|
||||
|
||||
NA_SE_ROD_STROKE_SMALL = 0x445,
|
||||
NA_SE_446 = 0x446,
|
||||
|
||||
@@ -227,6 +240,19 @@ typedef enum audio_sound_effects {
|
||||
|
||||
NA_SE_COIN_GASAGOSO = 0x465,
|
||||
|
||||
// Footsteps
|
||||
NA_SE_FOOTSTEP_BEGIN = 0x4200,
|
||||
NA_SE_FOOTSTEP_GRASS,
|
||||
NA_SE_FOOTSTEP_SOIL,
|
||||
NA_SE_FOOTSTEP_STONE,
|
||||
NA_SE_FOOTSTEP_WOOD,
|
||||
NA_SE_FOOTSTEP_BUSH,
|
||||
NA_SE_FOOTSTEP_SNOW,
|
||||
NA_SE_FOOTSTEP_7,
|
||||
NA_SE_FOOTSTEP_SAND,
|
||||
NA_SE_FOOTSTEP_WAVE,
|
||||
NA_SE_FOOTSTEP_PLUSSBRIDGE,
|
||||
|
||||
} AudioSE;
|
||||
|
||||
typedef enum bgm_e {
|
||||
|
||||
@@ -16,8 +16,8 @@ extern void Na_BgmStop(u16);
|
||||
extern void Na_SysTrgStart(u16);
|
||||
extern void Na_PlyWalkSe(u16, u16, f32);
|
||||
extern void Na_PlyWalkSeRoom(u8, u16, f32);
|
||||
extern void Na_NpcWalkSe(int, u16, f32);
|
||||
extern void Na_NpcWalkSeRoom(int, u16, f32);
|
||||
extern void Na_NpcWalkSe(u16, u16, f32);
|
||||
extern void Na_NpcWalkSeRoom(u16, u16, f32);
|
||||
extern void Na_PlayerStatusLevel(f32, int);
|
||||
extern void Na_VoiceSe(u8, u8, u8, s16, u8, u8);
|
||||
extern void Na_MessageStatus(u8);
|
||||
|
||||
@@ -174,6 +174,7 @@ typedef struct collision_unit_info_s {
|
||||
mActor_name_t item;
|
||||
} mCoBG_UnitInfo_c;
|
||||
|
||||
#define mCoBG_DIDNT_HIT_WALL 0
|
||||
#define mCoBG_HIT_WALL (1 << 0) /* in contact with *any* wall */
|
||||
#define mCoBG_HIT_WALL_FRONT (1 << 1) /* in contact with wall to the front */
|
||||
#define mCoBG_HIT_WALL_RIGHT (1 << 2) /* in contact with wall to the right */
|
||||
@@ -183,13 +184,16 @@ typedef struct collision_unit_info_s {
|
||||
typedef struct collision_bg_check_result_s {
|
||||
u32 on_ground : 1;
|
||||
u32 hit_attribute_wall : 5;
|
||||
u32 hit_wall : 5;
|
||||
//
|
||||
u32 hit_wall : 5; // 2 bits in prev byte
|
||||
u32 hit_wall_count : 3;
|
||||
u32 unk_flag0 : 1;
|
||||
u32 unit_attribute : 6;
|
||||
//
|
||||
u32 unit_attribute : 6; // 1 bit in prev byte
|
||||
u32 is_on_move_bg_obj : 1;
|
||||
u32 is_in_water : 1;
|
||||
u32 unk_flag1 : 1;
|
||||
//
|
||||
u32 unk_flag2 : 1;
|
||||
u32 unk_flag3 : 1;
|
||||
u32 unk_flag4 : 1;
|
||||
@@ -356,6 +360,8 @@ extern int mCoBG_CheckAcceptDesignSign(const xyz_t* pos_p);
|
||||
extern void mCoBG_VirtualBGCheck(xyz_t* rev_pos_p, mCoBG_Check_c* bg_check, const xyz_t* start_pos_p,
|
||||
const xyz_t* end_pos_p, s16 angle_y, s16 water_flag, s16 ground_flag, f32 range,
|
||||
f32 ground_dist, s16 attr_wall, s16 rev_type, s16 check_type);
|
||||
extern f32 mCoBG_Wpos2GroundCheckOnly(const xyz_t* pos_p, f32 ground_dist);
|
||||
extern int mCoBG_Wpos2CheckNpc(xyz_t wpos);
|
||||
|
||||
typedef int (*mCoBG_LINECHECK_PROC)(mActor_name_t);
|
||||
|
||||
@@ -370,6 +376,7 @@ extern int mCoBG_WoodSoundEffect(const xyz_t* pos_p);
|
||||
|
||||
extern void mCoBG_InitMoveBgData();
|
||||
extern void mCoBG_InitBlockBgCheckMode();
|
||||
extern void mCoBG_InitBgCheckResult(mCoBG_CheckResult_c* check_result);
|
||||
extern void mCoBG_InitDecalCircle();
|
||||
|
||||
extern void mCoBG_CalcTimerDecalCircle();
|
||||
|
||||
@@ -18,6 +18,10 @@ enum collision_type {
|
||||
ClObj_TYPE_NUM
|
||||
};
|
||||
|
||||
#define ClObj_FLAG_COLLIDED (1 << 1)
|
||||
|
||||
#define ClObj_DID_COLLIDE(obj) ((obj).collision_flags0 & ClObj_FLAG_COLLIDED)
|
||||
|
||||
enum weight { MASS_IMMOVABLE, MASS_HEAVY, MASS_NORMAL };
|
||||
|
||||
#define MASSTYPE_IMMOVABLE 0xFF
|
||||
|
||||
@@ -207,6 +207,7 @@ extern int mDemo_Check_DiffAngle_forTalk(s16 diff_angle);
|
||||
extern void mDemo_KeepCamera(int camera_type);
|
||||
|
||||
#define mDemo_CAN_ACTOR_TALK(actor) (!mDemo_Check(mDemo_TYPE_SPEAK, (actor)) && !mDemo_Check(mDemo_TYPE_TALK, (actor)))
|
||||
#define mDemo_IS_ACTOR_TALKING(actor) (mDemo_Check(mDemo_TYPE_SPEAK, (actor)) == TRUE || mDemo_Check(mDemo_TYPE_TALK, (actor)) == TRUE)
|
||||
|
||||
#ifdef __cplusplus
|
||||
}
|
||||
|
||||
@@ -219,6 +219,7 @@ extern int mNT_check_unknown(mActor_name_t item_no);
|
||||
#define ITEM_IS_WISP(n) ((n) >= ITM_SPIRIT0 && (n) <= ITM_SPIRIT4)
|
||||
#define ITEM_IS_PAPER(n) ((n) >= ITM_PAPER_START && (n) <= (ITM_PAPER_END - 1))
|
||||
#define ITEM_IS_CLOTH(n) ((n) >= ITM_CLOTH_START && (n) < ITM_CLOTH_END)
|
||||
#define ITEM_IS_NPC_CLOTH(n) ((n) == RSV_CLOTH || ITEM_IS_CLOTH(n))
|
||||
|
||||
#define ITEM_IS_RSVCLOTH(n) ((n) >= RSV_CLOTH && (n) <= RSV_CLOTH7)
|
||||
#define ITEM_IS_RSVNWORG(n) ((n) >= RSV_NW_ORIGINAL0 && (n) <= RSV_NW_ORIGINAL7)
|
||||
@@ -532,6 +533,7 @@ extern int mNT_check_unknown(mActor_name_t item_no);
|
||||
|
||||
#define ITEM_IS_PLAYER_HOUSE(item) ((item) >= HOUSE0 && (item) < (HOUSE3 + 1))
|
||||
#define ITEM_IS_NPC_HOUSE(item) ((item) >= NPC_HOUSE_START && (item) < NPC_HOUSE_END)
|
||||
#define ITEM_IS_DUMMY_NPC_HOUSE(item) ((item) >= DUMMY_NPC_HOUSE_START && (item) < (DUMMY_NPC_HOUSE_END + 1))
|
||||
#define ITEM_IS_ISLAND_NPC_HOUSE(item) ((item) >= COTTAGE_NPC && (item) < COTTAGE_NPC_END)
|
||||
|
||||
#define ITEM_IS_SIGNBOARD(item) ((item) >= SIGNBOARD_START && (item) <= SIGNBOARD_END)
|
||||
@@ -545,6 +547,7 @@ extern int mNT_check_unknown(mActor_name_t item_no);
|
||||
#define ITEM_IS_SCOOP(item) ((item) >= ITM_SHOVEL && (item) <= ITM_SHOVEL)
|
||||
#define ITEM_IS_GOLD_SCOOP(item) ((item) >= ITM_GOLDEN_SHOVEL && (item) <= ITM_GOLDEN_SHOVEL)
|
||||
#define ITEM_IS_PAINT(item) ((item) >= ITM_RED_PAINT && (item) <= ITM_BROWN_PAINT)
|
||||
#define ITEM_IS_TOOL(item) ((item) >= ITM_TOOL_START && (item) < ITM_TOOL_END)
|
||||
|
||||
#define BG_CATEGORY 0
|
||||
#define ENV_CATEGORY 8
|
||||
@@ -2715,11 +2718,11 @@ extern int mNT_check_unknown(mActor_name_t item_no);
|
||||
#define SP_NPC_NEEDLEWORK0 (SP_NPC_START + 112) // D070
|
||||
#define SP_NPC_NEEDLEWORK1 (SP_NPC_START + 113) // D071
|
||||
#define SP_NPC_SENDO (SP_NPC_START + 114) // D072
|
||||
//
|
||||
#define SP_NPC_PRESENT_NPC (SP_NPC_START + 115) // D073
|
||||
#define SP_NPC_EV_SONCHO2 (SP_NPC_START + 116) // D074
|
||||
#define SP_NPC_MASK_CAT (SP_NPC_START + 117) // D075
|
||||
#define SP_NPC_MASK_CAT2 (SP_NPC_START + 118) // D076
|
||||
//
|
||||
#define SP_NPC_GO_HONE_NPC (SP_NPC_START + 119) // D077
|
||||
#define SP_NPC_SONCHO_D078 (SP_NPC_START + 120) // D078
|
||||
#define SP_NPC_SONCHO_D079 (SP_NPC_START + 121) // D079
|
||||
#define SP_NPC_SASHO (SP_NPC_START + 122) // D07A
|
||||
@@ -3019,6 +3022,7 @@ extern int mNT_check_unknown(mActor_name_t item_no);
|
||||
#define NPC_END (NPC_START + 236)
|
||||
|
||||
#define DUMMY_START 0xF000
|
||||
#define DUMMY_NPC_HOUSE_START (DUMMY_START + 5) // 0xF005
|
||||
#define DUMMY_NPC_HOUSE_000 (DUMMY_START + 5) // F005
|
||||
#define DUMMY_NPC_HOUSE_001 (DUMMY_START + 6) // F006
|
||||
#define DUMMY_NPC_HOUSE_002 (DUMMY_START + 7) // F007
|
||||
@@ -3257,6 +3261,7 @@ extern int mNT_check_unknown(mActor_name_t item_no);
|
||||
#define DUMMY_NPC_HOUSE_235 (DUMMY_START + 240) // F0F0
|
||||
#define DUMMY_NPC_HOUSE_236 (DUMMY_START + 241) // F0F1
|
||||
#define DUMMY_NPC_HOUSE_237 (DUMMY_START + 242) // F0F2
|
||||
#define DUMMY_NPC_HOUSE_END (DUMMY_START + 242) // F0F2
|
||||
#define DUMMY_HOUSE0 0xF0F3
|
||||
#define DUMMY_HOUSE1 0xF0F4
|
||||
#define DUMMY_HOUSE2 0xF0F5
|
||||
|
||||
+3
-2
@@ -14,6 +14,7 @@
|
||||
#include "m_private_h.h"
|
||||
#include "m_field_make.h"
|
||||
#include "m_name_table.h"
|
||||
#include "ac_npc_h.h"
|
||||
|
||||
#ifdef __cplusplus
|
||||
extern "C" {
|
||||
@@ -217,7 +218,7 @@ typedef struct animal_s {
|
||||
/* 0x8EA */ u8 removing; /* TRUE when the villager is leaving town, FALSE otherwise */
|
||||
/* 0x8EB */ u8
|
||||
cloth_original_id; /* 0xFF when not wearing an Able Sister's pattern, otherwise 0-3 indicating which pattern */
|
||||
/* 0x8EC */ s8 umbrella_id; /* 0xFF when no umbrella, 0-31 when a standard umbrella, 32-35 when using an Able
|
||||
/* 0x8EC */ u8 umbrella_id; /* 0xFF when no umbrella, 0-31 when a standard umbrella, 32-35 when using an Able
|
||||
Sister's pattern */
|
||||
/* 0x8ED */ u8 unk_8ED; /* Exists according to mISL_gc_to_agb_animal, but seems unused in practice */
|
||||
/* 0x8EE */ mActor_name_t
|
||||
@@ -371,7 +372,7 @@ extern int mNpc_GetPresentClothMemoryIdx_rnd(Anmmem_c* memory);
|
||||
extern int mNpc_CheckTalkPresentCloth(Animal_c* animal);
|
||||
extern void mNpc_ChangePresentCloth();
|
||||
extern u8* mNpc_GetWordEnding(ACTOR* actor);
|
||||
extern void mNpc_ResetWordEnding(ACTOR* actor);
|
||||
extern void mNpc_ResetWordEnding(NPC_ACTOR* nactorx);
|
||||
extern int mNpc_GetFreeEventNpcIdx();
|
||||
extern int mNpc_RegistEventNpc(mActor_name_t event_id, mActor_name_t texture_id, mActor_name_t npc_id,
|
||||
mActor_name_t cloth_id);
|
||||
|
||||
@@ -10,12 +10,12 @@ extern "C" {
|
||||
#endif
|
||||
|
||||
enum {
|
||||
mNpc_LOOKS_GIRL,
|
||||
mNpc_LOOKS_KO_GIRL,
|
||||
mNpc_LOOKS_BOY,
|
||||
mNpc_LOOKS_SPORT_MAN,
|
||||
mNpc_LOOKS_GRIM_MAN,
|
||||
mNpc_LOOKS_NANIWA_LADY,
|
||||
mNpc_LOOKS_GIRL, // 'normal'
|
||||
mNpc_LOOKS_KO_GIRL, // 'peppy'
|
||||
mNpc_LOOKS_BOY, // 'lazy'
|
||||
mNpc_LOOKS_SPORT_MAN, // 'jock'
|
||||
mNpc_LOOKS_GRIM_MAN, // 'cranky'
|
||||
mNpc_LOOKS_NANIWA_LADY, // 'snooty'
|
||||
mNpc_LOOKS_UNSET,
|
||||
|
||||
mNpc_LOOKS_NUM = mNpc_LOOKS_UNSET
|
||||
|
||||
@@ -14,6 +14,7 @@ enum {
|
||||
mNPS_SCHED_SLEEP, /* asleep in their house */
|
||||
mNPS_SCHED_STAND, /* standing around town?? */
|
||||
mNPS_SCHED_WANDER, /* wander around town */
|
||||
mNPS_SCHED_WALK_WANDER, /* walk wander */
|
||||
mNPS_SCHED_SPECIAL, /* unique schedule method for each NPC actor type */
|
||||
|
||||
mNPS_SCHED_TYPE_NUM
|
||||
|
||||
@@ -56,6 +56,7 @@ typedef struct door_data_s {
|
||||
} Door_data_c;
|
||||
|
||||
#define mSc_OBJECT_BANK_NUM 70
|
||||
#define mSC_BANK_NONE 0xFF
|
||||
|
||||
typedef struct object_bank_s {
|
||||
s16 bank_id;
|
||||
|
||||
@@ -89,6 +89,7 @@ typedef u32 unknown;
|
||||
#define BUTTON_A 0x8000
|
||||
|
||||
#define FRAMES_PER_SECOND 60
|
||||
#define FRAMES_PER_MINUTE (FRAMES_PER_SECOND * 60)
|
||||
|
||||
#define ARRAY_SIZE(arr, type) (sizeof(arr) / sizeof(type))
|
||||
#define ARRAY_COUNT(arr) (int)(sizeof(arr) / sizeof(arr[0]))
|
||||
|
||||
Reference in New Issue
Block a user