Implement & link ac_haniwa.c

This commit is contained in:
Cuyler36
2023-06-29 19:24:16 -04:00
parent a5d0f188b3
commit 011c898e11
22 changed files with 1253 additions and 6 deletions
+69
View File
@@ -3,11 +3,80 @@
#include "types.h"
#include "m_actor.h"
#include "c_keyframe.h"
#include "m_collision_obj.h"
#ifdef __cplusplus
extern "C" {
#endif
typedef struct actor_haniwa_s HANIWA_ACTOR;
typedef void (*HANIWA_ACTOR_PROC)(ACTOR*, GAME*);
enum haniwa_msg {
aHNW_MSG_NO_OWNER,
aHNW_MSG_PROCEEDS,
aHNW_MSG_NORMAL,
aHNW_MSG_OTHER_OWNER,
aHNW_MSG_NEED_FRIEND,
aHNW_MSG_NUM
};
enum haniwa_handover {
aHNW_HANDOVER_YES,
aHNW_HANDOVER_NO,
aHNW_HANDOVER_NUM
};
enum haniwa_action {
aHNW_ACTION_WAIT,
aHNW_ACTION_DANCE,
aHNW_ACTION_CHECK_PROCEEDS,
aHNW_ACTION_TALK_WITH_MASTER,
aHNW_ACTION_TALK_WITH_MASTER2,
aHNW_ACTION_TALK_END_WAIT,
aHNW_ACTION_MENU_OPEN_WAIT,
aHNW_ACTION_MENU_END_WAIT,
aHNW_ACTION_TALK_WITH_GUEST,
aHNW_ACTION_MENU_OPEN_WAIT_FOR_GUEST,
aHNW_ACTION_MENU_END_WAIT_FOR_GUEST,
aHNW_ACTION_ROOF_CHECK,
aHNW_ACTION_SAVE_CHECK,
aHNW_ACTION_SAVE_END_WAIT,
aHNW_ACTION_PL_APPROACH_DOOR,
aHNW_ACTION_DOOR_OPEN_WAIT,
aHNW_ACTION_DOOR_OPEN_TIMER,
aHNW_ACTION_NUM
};
struct actor_haniwa_s {
ACTOR actor_class;
int saved_current_frame;
int keyframe_state;
cKF_SkeletonInfo_R_c keyframe;
int animation_state;
ClObjPipe_c col_pipe;
int action;
char* bank_ram_start;
s_xyz keyframe_work_area[8];
s_xyz keyframe_morph_area[8];
HANIWA_ACTOR_PROC action_proc;
f32 anim_frame_speed;
int player_approach_door_stage;
u16 door_approach_frame;
u8 submenu_type;
u8 house_idx;
u8 playing_save_bgm;
};
extern ACTOR_PROFILE Haniwa_Profile;
#ifdef __cplusplus
+20
View File
@@ -8,6 +8,26 @@
extern "C" {
#endif
typedef struct actor_intor_demo_s INTRO_DEMO_ACTOR;
struct actor_intor_demo_s {
ACTOR actor_class;
int action;
int rcn_action;
void (*action_proc)(ACTOR*, GAME*);
void* train1_actor_p; // TODO: correct type
void* station_master_actor_p; // TODO: correct type
void* rcn_guide_actor_p; // TODO: correct type
int player_in_intro_demo;
int player_intro_demo_state;
int selected_house;
int _198;
u8 first_field_bgm_state;
int _1A0;
int _1A4;
int _1A8;
};
extern ACTOR_PROFILE Intro_Demo_Profile;
#ifdef __cplusplus
+23
View File
@@ -8,6 +8,29 @@
extern "C" {
#endif
typedef struct actor_my_house_s MY_HOUSE_ACTOR;
struct actor_my_house_s {
ACTOR actor_class;
int _174;
cKF_SkeletonInfo_R_c keyframe;
int _1E8;
s_xyz work_area[15];
s_xyz morph_area[15];
u8 _2A0[0x2B0 - 0x2A0];
int door_rotation_speed_idx;
int house_no;
int house_shape;
int _2BC;
int _2C0;
int intro_flag;
f32 door_pos_x;
f32 door_poz_z;
f32 door_rotation_speed;
f32 _2D4;
int season;
};
extern ACTOR_PROFILE MyHouse_Profile;
#ifdef __cplusplus
+3 -1
View File
@@ -7,6 +7,8 @@
#include "m_lib.h"
#include "m_lights.h"
#include "m_collision_bg.h"
#include "m_collision_obj.h"
#include "libforest/gbi_extensions.h"
#ifdef __cplusplus
extern "C" {
@@ -356,7 +358,7 @@ struct actor_s {
/* 0x0B8 */ f32 player_distance; /* distance between actor and player actor (squared magnitude) */
/* 0x0BC */ f32 player_distance_xz; /* distance between actor and player actor on XZ plane (magnitude) */
/* 0x0C0 */ f32 player_distance_y; /* distance between actor and player actor on Y plane */
/* 0x0C4 */ u8 status_data[0xDC-0xC4]; /* TODO: implement, see m_collision_obj */
/* 0x0C4 */ Status_c status_data; /* collider info, lots of leftover stuff from OoT */
/* 0x0DC */ Shape_Info shape_info;
/* 0x124 */ xyz_t camera_position; /* camera position relative to actor position */
/* 0x130 */ f32 camera_w; /* camera projection W value */
+2
View File
@@ -12,6 +12,8 @@ extern void mBGM_reset();
extern void mBGMPsComp_make_ps_lost_fanfare(u8 bgm_no, u16 unk);
extern void mBGMPsComp_scene_mode(int scene_mode);
extern void mBGMPsComp_make_ps_wipe(u16 ps_wipe);
extern void mBGMPsComp_delete_ps_demo(u8 bgm_num, u16 stop_type);
extern void mBGMPsComp_make_ps_demo(u8 bgm_no, u16 stop_type);
#ifdef __cplusplus
}
+28
View File
@@ -0,0 +1,28 @@
#ifndef M_CHOICE_H
#define M_CHOICE_H
#include "types.h"
#ifdef __cplusplus
extern "C" {
#endif
typedef struct choice_s mChoice_c; // TODO
enum choice {
mChoice_CHOICE0,
mChoice_CHOICE1,
mChoice_CHOICE2,
mChoice_CHOICE3,
mChoice_CHOICE_NUM
};
extern mChoice_c* mChoice_Get_base_window_p();
extern int mChoice_Get_ChoseNum(mChoice_c* choice);
#ifdef __cplusplus
}
#endif
#endif
+5 -1
View File
@@ -7,6 +7,7 @@
#include "ac_structure.h"
#include "ac_animal_logo.h"
#include "ef_effect_control.h"
#include "m_demo.h"
#ifdef __cplusplus
extern "C" {
@@ -19,7 +20,10 @@ typedef struct clip_s {
/* 0x080 */ void* _080[(0x08C - 0x080) / sizeof(void*)];
/* 0x08C */ aSTR_Clip_c* structure_clip;
/* 0x090 */ eEC_EffectControl_Clip_c* effect_clip;
/* 0x094 */ void* _094[(0x0AC - 0x094) / sizeof(void*)];
/* 0x094 */ void* _094[(0x0A0 - 0x094) / sizeof(void*)];
/* 0x0A0 */ mDemo_Clip_c* demo_clip; /* can be multiple clip classes */
/* 0x0A4 */ void* demo_clip2; /* can be multiple clip classes */
/* 0x0A8 */ void* _0A8;
/* 0x0AC */ aGYO_Clip_c* gyo_clip;
/* 0x0B0 */ void* _0B0[(0x0DC - 0x0B0) / sizeof(void*)];
/* 0x0DC */ aAL_Clip_c* animal_logo_clip;
+25
View File
@@ -71,11 +71,36 @@ typedef struct collision_check_s {
ClObj_c* collider_table[Cl_COLLIDER_NUM];
} CollisionCheck_c;
/* This appears to again be copy-paste from OoT? */
typedef struct status_s {
xyz_t collision_vec;
s16 radius;
s16 height;
s16 offset;
u8 weight;
u8 hp;
u8 damage;
u8 damage_effect;
u8 at_hit_effect;
u8 ac_hit_effect;
} Status_c;
typedef struct status_data_s {
u8 health; // assuming this is inherited from OoT, seems largely unused
s16 radius;
s16 height;
s16 offset;
u8 weight;
} StatusData_c;
extern void ClObjPipe_ct(GAME_PLAY* play, ClObjPipe_c* pipe);
extern void ClObjPipe_dt(GAME_PLAY* play, ClObjPipe_c* pipe);
extern void ClObjPipe_set5(GAME_PLAY* play, ClObjPipe_c* pipe, ACTOR* owner, ClObjPipeData_c* data);
extern void CollisionCheck_Uty_ActorWorldPosSetPipeC(ACTOR* actor, ClObjPipe_c* col_pipe);
extern int CollisionCheck_setOC(GAME_PLAY* play, CollisionCheck_c* collision_check, ClObj_c* col_obj);
extern void CollisionCheck_Status_set3(Status_c* status, StatusData_c* data);
#ifdef __cplusplus
}
+3 -1
View File
@@ -200,7 +200,9 @@ typedef struct common_data_s {
/* 0x028860 */ f32 unused_028860;
/* 0x028864 */ u16 unused_028864;
/* 0x028866 */ u16 unused_028866;
/* 0x028868 */ u8 _028868[0x028879 - 0x028868];
/* 0x028868 */ u8 reset_flag;
/* 0x028869 */ u8 reset_type;
/* 0x02886A */ u8 _02886A[0x028879 - 0x02886A];
/* 0x028879 */ u8 auto_nwrite_count;
/* 0x02887A */ lbRTC_year_t auto_nwrite_year;
/* 0x02887C */ u8 save_error_type; /* set to one of the mFRm_ERROR_* states when save is invalid */
+17
View File
@@ -10,12 +10,29 @@ extern "C" {
typedef void (*mDemo_REQUEST_PROC)(ACTOR*);
typedef struct demo_clip_s {
void* class;
int type; /* 0 = none?, 1 = intro_demo, 2 = ride_off_demo */
} mDemo_Clip_c;
enum demo_clip_type {
mDemo_CLIP_TYPE_NONE,
mDemo_CLIP_TYPE_INTRO_DEMO,
mDemo_CLIP_TYPE_RIDE_OFF_DEMO,
mDemo_CLIP_TYPE_NUM
};
extern int mDemo_Request(int type, ACTOR* actor, mDemo_REQUEST_PROC request_proc);
extern void mDemo_Set_msg_num(int msg_num);
extern int mDemo_Check(int type, ACTOR* actor);
extern int mDemo_Check_DiffAngle_forTalk(s16 angle);
extern int mDemo_Check_ListenAble();
extern void mDemo_Set_ListenAble();
extern ACTOR* mDemo_Get_talk_actor();
extern void mDemo_Set_OrderValue(int type, int idx, u16 value);
extern u16 mDemo_Get_OrderValue(int type, int idx);
extern void mDemo_Set_talk_return_demo_wait(u8 value);
#ifdef __cplusplus
}
+1
View File
@@ -138,6 +138,7 @@ extern u8 mFI_BkNum2BlockType();
extern mFI_sound_source_info_c* mFI_GetSoundSourcePBlockNum(int block_x,int block_z);
extern int mFI_Wpos2UtNum(int* ut_x, int* ut_z, xyz_t wpos);
extern void mFI_ClearFieldData();
extern int mFI_SetFG_common(mActor_name_t item, xyz_t wpos, int update);
extern void mFI_PrintNowBGNum(gfxprint_t* gfxprint);
extern void mFI_PrintFgAttr(gfxprint_t* gfxprint);
+9
View File
@@ -19,6 +19,15 @@ extern void mMsg_aram_init();
extern int mMsg_Check_MainHide(mMsg_Window_c* msg);
extern void mMsg_Set_item_str(mMsg_Window_c* msg_win, int str_no, u8* item_str, int str_len);
extern void mMsg_Set_mail_str(mMsg_Window_c* msg_win, int str_no, u8* str, int str_len);
extern void mMsg_Set_continue_msg_num(mMsg_Window_c* msg_win, int continue_msg_num);
extern int mMsg_Check_MainNormalContinue(mMsg_Window_c* msg_win);
extern int mMsg_Check_main_wait(mMsg_Window_c* msg_win);
extern int mMsg_ChangeMsgData(mMsg_Window_c* msg_win, int msg_no);
extern void mMsg_Set_ForceNext(mMsg_Window_c* msg_win);
extern int mMsg_Check_not_series_main_wait(mMsg_Window_c* msg_win);
extern int mMsg_Check_MainDisappear(mMsg_Window_c* msg_win);
extern void mMsg_request_main_disappear_wait_type1(mMsg_Window_c* msg_win);
extern void mMsg_request_main_appear_wait_type1(mMsg_Window_c* msg_win);
#ifdef __cplusplus
}
+20
View File
@@ -468,6 +468,11 @@ extern int mNT_check_unknown(mActor_name_t item_no);
#define EXIT_DOOR 0x4080
#define STRUCTURE_START 0x5800
#define HOUSE0 (STRUCTURE_START)
#define HOUSE1 (HOUSE0 + 1)
#define HOUSE2 (HOUSE1 + 1)
#define HOUSE3 (HOUSE2 + 1)
#define TRAIN_STATION 0x5809
#define TRAIN0 0x580A
#define TRAIN1 0x580B
@@ -480,6 +485,15 @@ extern int mNT_check_unknown(mActor_name_t item_no);
#define MISC_ACTOR_START 0x9000
#define MISC_ACTOR_SAMPLE MISC_ACTOR_START
#define ACTOR_PROP_START 0xA000
#define ACTOR_PROP_MAILBOX0 (ACTOR_PROP_START)
#define ACTOR_PROP_MAILBOX1 (ACTOR_PROP_MAILBOX0 + 1)
#define ACTOR_PROP_MAILBOX2 (ACTOR_PROP_MAILBOX1 + 1)
#define ACTOR_PROP_MAILBOX3 (ACTOR_PROP_MAILBOX2 + 1)
#define ACTOR_PROP_HANIWA0 (ACTOR_PROP_MAILBOX3 + 1)
#define ACTOR_PROP_HANIWA1 (ACTOR_PROP_HANIWA0 + 1)
#define ACTOR_PROP_HANIWA2 (ACTOR_PROP_HANIWA1 + 1)
#define ACTOR_PROP_HANIWA3 (ACTOR_PROP_HANIWA2 + 1)
#define TRAIN_DOOR 0xA011
#define SP_NPC_START 0xD000
@@ -575,6 +589,12 @@ extern int mNT_check_unknown(mActor_name_t item_no);
#define NPC_LOBO 0xE0B9
#define NPC_BIFF 0xE0C2
#define DUMMY_START 0xF000
#define DUMMY_HANIWA0 0xF0FB
#define DUMMY_HANIWA1 (DUMMY_HANIWA0 + 1)
#define DUMMY_HANIWA2 (DUMMY_HANIWA2 + 1)
#define DUMMY_HANIWA3 (DUMMY_HANIWA2 + 1)
#define RSV_DOOR 0xFE1B
#define RSV_WALL_NO 0xFFFE /* interior wall item, no collision */
#define RSV_NO 0xFFFF /* reserved space, can't interact but no collision */
+17
View File
@@ -0,0 +1,17 @@
#ifndef M_NEEDLEWORK_OVL_H
#define M_NEEDLEWORK_OVL_H
#include "types.h"
#include "m_submenu.h"
#ifdef __cplusplus
extern "C" {
#endif
extern u8 mNW_get_image_no(Submenu* submenu, int slot_no);
#ifdef __cplusplus
}
#endif
#endif
+2
View File
@@ -11,6 +11,7 @@
#include "m_personal_id.h"
#include "m_quest.h"
#include "m_lib.h"
#include "m_private_h.h"
#ifdef __cplusplus
extern "C" {
@@ -199,6 +200,7 @@ extern void mNpc_ClearAnimalInfo(Animal_c* animal_p);
extern Animal_c* mNpc_GetInAnimalP();
extern int mNpc_GetLooks2Sex(int looks);
extern int mNpc_CheckFreeAnimalInfo(Animal_c* animal);
extern int mNpc_GetFriendAnimalNum(Private_c* private_p);
extern void mNpc_PrintRemoveInfo(gfxprint_t* gfxprint);
extern void mNpc_PrintFriendship_fdebug(gfxprint_t* gfxprint);
+3 -1
View File
@@ -14,7 +14,9 @@ typedef struct player_actor_s PLAYER_ACTOR;
/* sizeof(struct player_actor_s) == 0x13A8 */
struct player_actor_s {
/* 0x0000 */ ACTOR actor_class;
/* 0x0174 */ u8 tmp0174[0x1318 - 0x0174];
/* 0x0174 */ u8 tmp0174[0x1300 - 0x0174];
/* 0x1300 */ void* (*get_door_label_proc)(GAME*);
/* 0x1304 */ u8 tmp1304[0x1318 - 0x1304];
/* 0x1318 */ int (*Get_WadeEndPos_proc)(GAME*, xyz_t*);
/* 0x131C */ u8 tmp131C[0x13A8 - 0x131C];
/* TODO: finish */
+3
View File
@@ -16,6 +16,9 @@ extern mActor_name_t mPlib_Get_itemNo_forWindow();
extern int mPlib_check_able_change_camera_normal_index();
extern void mPlib_request_main_refuse_type1(GAME_PLAY* play);
extern void mPlib_request_main_wait_type3(GAME_PLAY* play);
extern void mPlib_Set_able_force_speak_label(ACTOR* actor);
extern int mPlib_request_main_demo_walk_type1(GAME* game, f32 goal_x, f32 goal_z, f32 speed, int flag);
extern void mPlib_Set_goal_player_demo_walk(f32 goal_x, f32 goal_z, f32 speed);
#ifdef __cplusplus
}
+6 -2
View File
@@ -2,6 +2,7 @@
#define M_PRIVATE_H
#include "types.h"
#include "m_private_h.h"
#include "libu64/gfxprint.h"
#include "m_personal_id.h"
#include "m_npc.h"
@@ -18,6 +19,8 @@ extern "C" {
#define FOREIGNER_NUM 1
#define TOTAL_PLAYER_NUM (PLAYER_NUM + FOREIGNER_NUM)
#define mPr_WALLET_MAX 99999
enum {
mPr_PLAYER_0,
mPr_PLAYER_1,
@@ -144,7 +147,7 @@ typedef struct player_ecard_data_s {
/* 0x04 */ u8 card_letters_sent[mPr_ECARD_LETTER_NUM]; /* bitfield keeping track of which eCard letters have been sent to the player [0, 366] */
} mPr_carde_data_c;
typedef struct private_s {
struct private_s {
/* 0x0000 */ PersonalID_c player_ID; /* player's id info */
/* 0x0014 */ s8 gender; /* gender/sex of player */
/* 0x0015 */ s8 face; /* face type of player */
@@ -212,7 +215,7 @@ typedef struct private_s {
/* 0x23DC */ u32 soncho_trophy_field1; /* remaining tortimer event flags */
/* 0x23E0 */ mPr_carde_data_c ecard_letter_data; /* info relating to scanned e-Card letters */
/* 0x2412 */ u8 unused_2412[46];
} Private_c;
};
extern s16 mPr_GetGoodsPower();
extern s16 mPr_GetMoneyPower();
@@ -227,6 +230,7 @@ extern void mPr_ClearPrivateInfo(Private_c* private_data);
extern int mPr_CheckCmpPlayerName(u8* str0, u8* str1);
extern void mPr_RandomSetPlayerData_title_demo();
extern int mPr_GetPossessionItemSumWithCond(Private_c* priv, mActor_name_t item_no, u32 cond);
extern int mPr_SetFreePossessionItem(Private_c* priv, mActor_name_t item_no, u32 cond);
extern void mPr_CopyPlayerName(u8* dst, Private_c* private_p);
#ifdef __cplusplus
+16
View File
@@ -0,0 +1,16 @@
#ifndef M_PRIVATE_H_H
#define M_PRIVATE_H_H
#include "types.h"
#ifdef __cplusplus
extern "C" {
#endif
typedef struct private_s Private_c;
#ifdef __cplusplus
}
#endif
#endif
+2
View File
@@ -103,6 +103,8 @@ struct submenu_s {
/* 0x17C */ Submenu_Item_c items[mPr_POCKETS_SLOT_COUNT]; /* item buffer, entries are only set when an item is selected by the player */
};
extern void mSM_open_submenu(Submenu* submenu, int menu_type, int arg0, int arg1);
#ifdef __cplusplus
}
#endif