Implement & link ac_npc_curator

This commit is contained in:
Cuyler36
2023-12-21 17:52:57 -05:00
parent ae3e1f5ba9
commit ff88594f7f
6 changed files with 1401 additions and 6 deletions
+55 -1
View File
@@ -13,8 +13,13 @@
extern "C" {
#endif
#define aNPC_SPNPC_BIT_CURATOR 0
#define aNPC_SPNPC_BIT_EV_SONCHO 5
#define aNPC_SPNPC_BIT_GET(field, bit) (((field) >> (bit)) & 1)
#define aNPC_SPNPC_BIT_SET(field, bit) ((field) |= (1 << (bit)))
#define aNPC_SPNPC_BIT_CLR(field, bit) ((field) &= ~(1 << (bit)))
typedef struct ac_npc_clip_s aNPC_Clip_c;
typedef struct npc_draw_data_s {
@@ -31,6 +36,29 @@ enum {
aNPC_ATTENTION_TYPE_NUM
};
enum {
aNPC_THINK_WAIT,
aNPC_THINK_WANDER,
aNPC_THINK_WANDER2,
aNPC_THINK_GO_HOME,
aNPC_THINK_INTO_HOUSE,
aNPC_THINK_LEAVE_HOUSE,
aNPC_THINK_IN_BLOCK,
aNPC_THINK_PITFALL,
aNPC_THINK_SLEEP,
aNPC_THINK_SPECIAL,
aNPC_THINK_NUM
};
enum {
aNPC_THINK_TYPE_INIT,
aNPC_THINK_TYPE_CHK_INTERRUPT,
aNPC_THINK_TYPE_MAIN,
aNPC_THINK_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*);
@@ -62,6 +90,8 @@ typedef void (*aNPC_MOVE_AFTER_PROC)(ACTOR*, GAME*);
typedef void (*aNPC_DRAW_PROC)(ACTOR*, GAME*);
typedef void (*aNPC_REBUILD_DMA_PROC)();
typedef void (*aNPC_ANIMATION_INIT_PROC)(ACTOR*, int, int);
typedef int (*aNPC_CLIP_THINK_PROC)(NPC_ACTOR*, GAME_PLAY*, int, int);
typedef int (*aNPC_FORCE_CALL_REQ_PROC)(NPC_ACTOR*, int);
@@ -86,7 +116,11 @@ 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[(0x124 - 0x0FC) / sizeof(void*)];
/* 0x0FC */ void* _0FC[(0x114 - 0x0FC) / sizeof(void*)];
/* 0x114 */ aNPC_ANIMATION_INIT_PROC animation_init_proc;
/* 0x118 */ void* _118;
/* 0x11C */ void* _11C;
/* 0x120 */ aNPC_CLIP_THINK_PROC think_proc;
/* 0x124 */ aNPC_FORCE_CALL_REQ_PROC force_call_req_proc;
/* 0x128 */ void* _128;
};
@@ -151,6 +185,8 @@ enum {
typedef void (*aNPC_ACTION_PROC)(NPC_ACTOR*, GAME_PLAY*, int);
#define aNPC_ACTION_END_STEP 0xFF
typedef struct npc_action_s {
u8 priority;
u8 idx;
@@ -180,6 +216,23 @@ typedef struct npc_request_s {
xyz_t head_pos;
} aNPC_request_c;
#define aNPC_COND_DEMO_SKIP_MOVE_RANGE_CHECK (1 << 0) /* 0x0001 */
#define aNPC_COND_DEMO_SKIP_MOVE_CIRCLE_REV (1 << 1) /* 0x0002 */
#define aNPC_COND_DEMO_SKIP_MOVE_Y (1 << 2) /* 0x0004 */
#define aNPC_COND_DEMO_SKIP_OBJ_COL_CHECK (1 << 3) /* 0x0008 */
#define aNPC_COND_DEMO_SKIP_BGCHECK (1 << 4) /* 0x0010 */
#define aNPC_COND_DEMO_SKIP_FORWARD_CHECK (1 << 5) /* 0x0020 */
#define aNPC_COND_DEMO_SKIP_ITEM (1 << 6) /* 0x0040 */
#define aNPC_COND_DEMO_SKIP_TALK_CHECK (1 << 7) /* 0x0080 */
#define aNPC_COND_DEMO_SKIP_HEAD_LOOKAT (1 << 8) /* 0x0100 */
#define aNPC_COND_DEMO_SKIP_ENTRANCE_CHECK (1 << 9) /* 0x0200 */
#define aNPC_COND_DEMO_SKIP_KUTIPAKU (1 << 10) /* 0x0400 */
#define aNPC_COND_DEMO_SKIP_FOOTSTEPS (1 << 11) /* 0x0800 */
#define aNPC_COND_DEMO_SKIP_FEEL_CHECK (1 << 12) /* 0x1000 */
#define aNPC_COND_DEMO_SKIP_LOVE_CHECK (1 << 13) /* 0x2000 */
#define aNPC_COND_DEMO_SKIP_FOOTSTEPS_VFX (1 << 14) /* 0x4000 */
#define aNPC_COND_DEMO_SKIP_UZAI_CHECK (1 << 15) /* 0x8000 */
typedef struct npc_condition_s {
u8 hide_flg;
u8 hide_request;
@@ -296,6 +349,7 @@ typedef struct npc_actor_talk_info_s {
s16 npc_voice_id;
u8 feel;
u8 memory;
u8 kutipaku_timer; // frames of mouth movement animation
} aNPC_talk_info_c;
typedef struct npc_accessory_s {
+12 -3
View File
@@ -9,16 +9,25 @@
extern "C" {
#endif
#define aCR_SLEEP_WAIT_TIMER (6 * 60) // 6 seconds (calculated in frames frames)
#define aCR_SLEEP_TIME_START ( 6 * mTM_SECONDS_IN_HOUR)
#define aCR_SLEEP_TIME_END (18 * mTM_SECONDS_IN_HOUR)
typedef struct npc_curator_actor_s NPC_CURATOR_ACTOR;
typedef void (*aCR_SETUPTALKACTION_PROC)(NPC_CURATOR_ACTOR*, GAME_PLAY*, int);
typedef void (*aCR_ACTION_PROC)(NPC_ACTOR*, GAME_PLAY*);
typedef void (*aCR_ACT_PROC)(NPC_CURATOR_ACTOR*, GAME_PLAY*);
typedef void (*aCR_TALK_ACT_PROC)(NPC_CURATOR_ACTOR*, GAME_PLAY*);
struct npc_curator_actor_s {
NPC_ACTOR npc_class;
int action;
aNPC_SUB_PROC action_proc;
aCR_ACT_PROC action_proc;
int sleep_wait_timer;
int talk_act_idx;
aNPC_SUB_PROC talk_proc;
aNPC_PROC setupTalkAction_proc;
aCR_TALK_ACT_PROC talk_proc;
aCR_SETUPTALKACTION_PROC setupTalkAction_proc;
int msg_no;
int _9B0; // might be unused 'awake' state
mActor_name_t donated_item;
+27 -2
View File
@@ -637,9 +637,31 @@ extern int mNT_check_unknown(mActor_name_t item_no);
#define FTR_DINO_START 0x1EEC
#define FTR_DINO_TRICERA_SKULL FTR_DINO_START
#define FTR_DINO_TRICERA_TAIL 0x1EF0
#define FTR_DINO_TRICERA_BODY 0x1EF4
#define FTR_DINO_TREX_SKULL 0x1EF8
#define FTR_DINO_TREX_TAIL 0x1EFC
#define FTR_DINO_TREX_BODY 0x1F00
#define FTR_DINO_APATO_SKULL 0x1F04
#define FTR_DINO_APATO_TAIL 0x1F08
#define FTR_DINO_APATO_BODY 0x1F0C
#define FTR_DINO_STEGO_SKULL 0x1F10
#define FTR_DINO_STEGO_TAIL 0x1F14
#define FTR_DINO_STEGO_BODY 0x1F18
#define FTR_DINO_PTERA_SKULL 0x1F1C
#define FTR_DINO_PTERA_RIGHT_WING 0x1F20
#define FTR_DINO_PTERA_LEFT_WING 0x1F24
#define FTR_DINO_PLESIO_SKULL 0x1F28
#define FTR_DINO_PLESIO_NECK 0x1F2C
#define FTR_DINO_PLESIO_TORSO 0x1F30
#define FTR_DINO_MAMMOTH_SKULL 0x1F34
#define FTR_DINO_MAMMOTH_TORSO 0x1F38
#define FTR_FOSSIL_AMBER 0x1F3C
#define FTR_FOSSIL_TRACK 0x1F40
#define FTR_FOSSIL_AMMONITE 0x1F44
#define FTR_FOSSIL_EGG 0x1F48
#define FTR_FOSSIL_TRILOBITE 0x1F4C
//
#define FTR_DINO_TRILOBITE_WEST 0x1F4F
#define FTR_DINO_END FTR_DINO_TRILOBITE_WEST
@@ -1556,6 +1578,9 @@ extern int mNT_check_unknown(mActor_name_t item_no);
#define FTR_AXE 0x3190
#define FTR_PAINTING15_UNUSED 0x31D8
#define FTR_PAINTING16_UNUSED 0x31DC
#define FTR_BOTTLE_ROCKET 0x31F0
#define FTR_FISHING_TROPHY 0x3210