From 5eeb1ef50e732e7cbd32d8a13779a95417e5907a Mon Sep 17 00:00:00 2001 From: TakaRikka <38417346+TakaRikka@users.noreply.github.com> Date: Thu, 8 May 2025 04:30:05 -0700 Subject: [PATCH] obj_yousei equivalent / bullet done (#2426) * obj_yousei equivalent * d_a_bullet done --- configure.py | 4 +- include/d/actor/d_a_bullet.h | 68 +- include/d/actor/d_a_obj_yousei.h | 57 +- include/d/actor/d_a_player.h | 1 + src/d/actor/d_a_bullet.cpp | 682 +++++------ src/d/actor/d_a_obj_yousei.cpp | 1814 ++++++++++++++---------------- 6 files changed, 1170 insertions(+), 1456 deletions(-) diff --git a/configure.py b/configure.py index 8a822f562ee..04967656f7f 100755 --- a/configure.py +++ b/configure.py @@ -1517,7 +1517,7 @@ config.libs = [ ActorRel(NonMatching, "d_a_midna"), ActorRel(Equivalent, "d_a_nbomb"), # weak func order ActorRel(MatchingFor("GZ2E01"), "d_a_obj_life_container"), - ActorRel(NonMatching, "d_a_obj_yousei"), + ActorRel(Equivalent, "d_a_obj_yousei"), # weak func order ActorRel(MatchingFor("GZ2E01"), "d_a_spinner"), ActorRel(MatchingFor("GZ2E01"), "d_a_suspend"), ActorRel(MatchingFor("GZ2E01"), "d_a_tag_attention"), @@ -1623,7 +1623,7 @@ config.libs = [ ActorRel(MatchingFor("GZ2E01"), "d_a_b_zant_mobile"), ActorRel(MatchingFor("GZ2E01"), "d_a_b_zant_sima"), ActorRel(NonMatching, "d_a_balloon_2D"), - ActorRel(NonMatching, "d_a_bullet"), + ActorRel(MatchingFor("GZ2E01"), "d_a_bullet"), ActorRel(Equivalent, "d_a_coach_2D"), # weak func order ActorRel(MatchingFor("GZ2E01"), "d_a_coach_fire"), ActorRel(Equivalent, "d_a_cow"), diff --git a/include/d/actor/d_a_bullet.h b/include/d/actor/d_a_bullet.h index ff475943e33..6dde5f71487 100644 --- a/include/d/actor/d_a_bullet.h +++ b/include/d/actor/d_a_bullet.h @@ -1,8 +1,9 @@ #ifndef D_A_BULLET_H #define D_A_BULLET_H -#include "dolphin/types.h" #include "f_op/f_op_actor_mng.h" +#include "d/d_bg_s_acch.h" +#include "d/d_cc_d.h" /** * @ingroup actors-unsorted @@ -12,37 +13,60 @@ * @details * */ -class daBullet_c : public fopEn_enemy_c { +class daBullet_c : public fopAc_ac_c { public: - /* 8065594C */ ~daBullet_c(); - /* 80655B08 */ void create(); - /* 80655E5C */ void CreateHeap(); - /* 80655EDC */ void Delete(); - /* 80655F10 */ void Execute(); - /* 806560FC */ void Draw(); - /* 80656160 */ void createHeapCallBack(fopAc_ac_c*); - /* 80656180 */ void getResName(); - /* 80656198 */ void getBmdName(); - /* 806561B0 */ void getTypeFromParam(); + typedef int (daBullet_c::*processFn)(void*); + + /* 0x568 */ request_of_phase_process_class mPhase; + /* 0x570 */ J3DModel* mpModel; + /* 0x574 */ dBgS_ObjAcch mAcch; + /* 0x74C */ dCcD_Stts mCcStts; + /* 0x788 */ dBgS_AcchCir mAcchCir; + /* 0x7C8 */ dCcD_Sph mCcSph; + /* 0x900 */ cBgS_GndChk mGndChk; + /* 0x93C */ u8 field_0x93C[0x940 - 0x93C]; + /* 0x940 */ f32 mGroundY; + /* 0x944 */ processFn mProcess; + /* 0x950 */ int mLifetime; + /* 0x954 */ u16 mMode; + /* 0x956 */ u8 mType; + /* 0x957 */ u8 field_0x957; + + /* 8065594C */ virtual ~daBullet_c(); + /* 80655B08 */ int create(); + /* 80655E5C */ BOOL CreateHeap(); + /* 80655EDC */ int Delete(); + /* 80655F10 */ int Execute(); + /* 806560FC */ int Draw(); + /* 80656160 */ static int createHeapCallBack(fopAc_ac_c*); + /* 80656180 */ const char* getResName(); + /* 80656198 */ const char* getBmdName(); + /* 806561B0 */ int getTypeFromParam(); /* 806561D0 */ void initialize(); - /* 80656378 */ void setProcess(int (daBullet_c::*)(void*)); - /* 80656420 */ void wait(void*); - /* 806564B8 */ void move(void*); + /* 80656378 */ int setProcess(processFn); + /* 80656420 */ int wait(void*); + /* 806564B8 */ int move(void*); - static u8 const mCcDObjInfo[48]; - static u8 mCcDSph[64]; - -private: - /* 0x5ac */ u8 field_0x5ac[0x95c - 0x5ac]; + static dCcD_SrcGObjInf const mCcDObjInfo; + static dCcD_SrcSph mCcDSph; }; STATIC_ASSERT(sizeof(daBullet_c) == 0x95c); +struct daBullet_HIOParam { + /* 0x00 */ f32 gravity; + /* 0x04 */ f32 weight; + /* 0x08 */ f32 height; + /* 0x0C */ f32 knee_height; + /* 0x10 */ f32 width; + /* 0x14 */ s16 lifetime; +}; + class daBullet_Param_c { public: - /* 806566A8 */ ~daBullet_Param_c(); + /* 806566A8 */ virtual ~daBullet_Param_c() {} - static u8 const m[24]; + static daBullet_HIOParam const m; }; diff --git a/include/d/actor/d_a_obj_yousei.h b/include/d/actor/d_a_obj_yousei.h index b2d0a659e3b..edec4b6a877 100644 --- a/include/d/actor/d_a_obj_yousei.h +++ b/include/d/actor/d_a_obj_yousei.h @@ -2,6 +2,7 @@ #define D_A_OBJ_YOUSEI_H #include "f_op/f_op_actor_mng.h" +#include "d/actor/d_a_player.h" /** * @ingroup actors-objects @@ -11,7 +12,7 @@ * @details * */ -class daObjYOUSEI_c : public fopAc_ac_c { +class daObjYOUSEI_c : public fopEn_enemy_c { public: /* 804CE738 */ void InitCcSph(); /* 804CE7A4 */ void SetCcSph(); @@ -21,20 +22,58 @@ public: /* 804CF098 */ void LinkChk(); /* 804CF6C4 */ void WaitAction(); /* 804CFCE8 */ void LinkAction(); - /* 804D057C */ void LinkSearch(); - /* 804D065C */ void WayBgCheck(f32, f32, s16); + /* 804D057C */ bool LinkSearch(); + /* 804D065C */ bool WayBgCheck(f32, f32, s16); /* 804D0780 */ void CareAction(); /* 804D080C */ void CheckGround(); - /* 804D0988 */ void CheckWater(); + /* 804D0988 */ bool CheckWater(); /* 804D0AD0 */ void Action(); /* 804D0CCC */ void ObjHit(); - /* 804D0DF0 */ void Execute(); - /* 804D0F98 */ void Delete(); + /* 804D0DF0 */ int Execute(); + /* 804D0F98 */ int Delete(); /* 804D0FCC */ void setBaseMtx(); - /* 804D111C */ void create(); + /* 804D111C */ int create(); -private: - /* 0x568 */ u8 field_0x568[0xa4c - 0x568]; + inline int CreateHeap(); + inline int Draw(); + + /* 0x5AC */ u8 field_0x5ac; + /* 0x5AD */ u8 field_0x5ad; + /* 0x5AE */ u8 field_0x5ae; + /* 0x5AF */ u8 field_0x5af; + /* 0x5B0 */ cXyz field_0x5b0; + /* 0x5BC */ daPy_boomerangMove_c mBoomerangMove; + /* 0x5C8 */ u8 mPrm; + /* 0x5CA */ s16 mAction; + /* 0x5CC */ s16 mMode; + /* 0x5CE */ s16 mTimers[4]; + /* 0x5D6 */ s16 field_0x5d6; + /* 0x5D8 */ u8 field_0x5D8[0x5DA - 0x5D8]; + /* 0x5DA */ s16 mAngleTarget; + /* 0x5DC */ s16 field_0x5dc; + /* 0x5E0 */ f32 mSpeedVTarget; + /* 0x5E4 */ f32 mSpeedFTarget; + /* 0x5E8 */ f32 field_0x5e8; + /* 0x5EC */ f32 field_0x5ec; + /* 0x5F0 */ f32 mAnmSpeed; + /* 0x5F4 */ u8 field_0x5F4[0x5F8 - 0x5F4]; + /* 0x5F8 */ cXyz field_0x5f8; + /* 0x604 */ u32 field_0x604; + /* 0x608 */ u32 field_0x608; + /* 0x60C */ u32 field_0x60c; + /* 0x610 */ u32 field_0x610; + /* 0x614 */ f32 mDistToPlayer; + /* 0x618 */ s16 mAngleToPlayer; + /* 0x61A */ s16 field_0x61a; + /* 0x61C */ Z2Creature mSound; + /* 0x6AC */ u8 field_0x6AC[0x6B0 - 0x6AC]; + /* 0x6B0 */ mDoExt_McaMorfSO* mpModelMorf; + /* 0x6B4 */ u8 field_0x6B4[0x6BC - 0x6B4]; + /* 0x6BC */ dBgS_AcchCir mAcchCir; + /* 0x6FC */ dBgS_ObjAcch mAcch; + /* 0x8D4 */ dCcD_Stts mCcStts; + /* 0x910 */ dCcD_Sph mCcSph; + /* 0xA48 */ u8 field_0xa48[0xA4C - 0xA48]; }; STATIC_ASSERT(sizeof(daObjYOUSEI_c) == 0xa4c); diff --git a/include/d/actor/d_a_player.h b/include/d/actor/d_a_player.h index 340638859cd..78a1434530c 100644 --- a/include/d/actor/d_a_player.h +++ b/include/d/actor/d_a_player.h @@ -920,6 +920,7 @@ public: bool checkGrabThrow() const { return checkResetFlg0(RFLG0_GRAB_THROW); } bool checkMidnaAtnPos() const { return checkNoResetFlg1(FLG1_MIDNA_ATN_POS); } bool checkMidnaHairAtnPos() const { return checkNoResetFlg1(FLG1_MIDNA_HAIR_ATN_POS); } + bool checkAttentionLock() const { return checkResetFlg0(RFLG0_UNK_10000); } void onBossRoomWait() { onEndResetFlg0(ERFLG0_BOSS_ROOM_WAIT); } void onBeeFollow() { onEndResetFlg0(ERFLG0_BEE_FOLLOW); } diff --git a/src/d/actor/d_a_bullet.cpp b/src/d/actor/d_a_bullet.cpp index ba13c104093..dd96a502996 100644 --- a/src/d/actor/d_a_bullet.cpp +++ b/src/d/actor/d_a_bullet.cpp @@ -4,149 +4,276 @@ */ #include "d/actor/d_a_bullet.h" -#include "dol2asm.h" - - - -// -// Forward References: -// - -extern "C" void __dt__10daBullet_cFv(); -extern "C" void create__10daBullet_cFv(); -extern "C" void __dt__8cM3dGSphFv(); -extern "C" void __dt__8cM3dGAabFv(); -extern "C" void __dt__12dBgS_AcchCirFv(); -extern "C" void __dt__10dCcD_GSttsFv(); -extern "C" void __dt__12dBgS_ObjAcchFv(); -extern "C" void CreateHeap__10daBullet_cFv(); -extern "C" void Delete__10daBullet_cFv(); -extern "C" void Execute__10daBullet_cFv(); -extern "C" void Draw__10daBullet_cFv(); -extern "C" void createHeapCallBack__10daBullet_cFP10fopAc_ac_c(); -extern "C" void getResName__10daBullet_cFv(); -extern "C" void getBmdName__10daBullet_cFv(); -extern "C" void getTypeFromParam__10daBullet_cFv(); -extern "C" void initialize__10daBullet_cFv(); -extern "C" void setProcess__10daBullet_cFM10daBullet_cFPCvPvPv_i(); -extern "C" void wait__10daBullet_cFPv(); -extern "C" void move__10daBullet_cFPv(); -extern "C" static void daBullet_Create__FPv(); -extern "C" static void daBullet_Delete__FPv(); -extern "C" static void daBullet_Execute__FPv(); -extern "C" static void daBullet_Draw__FPv(); -extern "C" static bool daBullet_IsDelete__FPv(); -extern "C" void __dt__10cCcD_GSttsFv(); -extern "C" void func_80656618(void* _this, int*); -extern "C" void __sinit_d_a_bullet_cpp(); -extern "C" void __dt__16daBullet_Param_cFv(); -extern "C" static void func_806566F0(); -extern "C" static void func_806566F8(); -extern "C" u8 const mCcDObjInfo__10daBullet_c[48]; -extern "C" u8 const m__16daBullet_Param_c[24]; -extern "C" extern char const* const d_a_bullet__stringBase0; -extern "C" u8 mCcDSph__10daBullet_c[64]; - -// -// External References: -// - -extern "C" void transS__14mDoMtx_stack_cFRC4cXyz(); -extern "C" void scaleM__14mDoMtx_stack_cFRC4cXyz(); -extern "C" void ZXYrotM__14mDoMtx_stack_cFRC5csXyz(); -extern "C" void mDoExt_modelUpdateDL__FP8J3DModel(); -extern "C" void mDoExt_J3DModel__create__FP12J3DModelDataUlUl(); -extern "C" void __ct__10fopAc_ac_cFv(); -extern "C" void __dt__10fopAc_ac_cFv(); -extern "C" void fopAcM_delete__FP10fopAc_ac_c(); -extern "C" void fopAcM_entrySolidHeap__FP10fopAc_ac_cPFP10fopAc_ac_c_iUl(); -extern "C" void fopAcM_setCullSizeBox__FP10fopAc_ac_cffffff(); -extern "C" void fopAcM_posMoveF__FP10fopAc_ac_cPC4cXyz(); -extern "C" void dComIfG_resLoad__FP30request_of_phase_process_classPCc(); -extern "C" void dComIfG_resDelete__FP30request_of_phase_process_classPCc(); -extern "C" void getRes__14dRes_control_cFPCcPCcP11dRes_info_ci(); -extern "C" void GetPolyColor__4dBgSFRC13cBgS_PolyInfo(); -extern "C" void GetRoomId__4dBgSFRC13cBgS_PolyInfo(); -extern "C" void __ct__12dBgS_AcchCirFv(); -extern "C" void SetWall__12dBgS_AcchCirFff(); -extern "C" void __dt__9dBgS_AcchFv(); -extern "C" void __ct__9dBgS_AcchFv(); -extern "C" void Set__9dBgS_AcchFP4cXyzP4cXyzP10fopAc_ac_ciP12dBgS_AcchCirP4cXyzP5csXyzP5csXyz(); -extern "C" void CrrPos__9dBgS_AcchFR4dBgS(); -extern "C" void SetObj__16dBgS_PolyPassChkFv(); -extern "C" void __ct__10dCcD_GSttsFv(); -extern "C" void Init__9dCcD_SttsFiiP10fopAc_ac_c(); -extern "C" void __ct__12dCcD_GObjInfFv(); -extern "C" void __dt__12dCcD_GObjInfFv(); -extern "C" void Set__8dCcD_SphFRC11dCcD_SrcSph(); -extern "C" void settingTevStruct__18dScnKy_env_light_cFiP4cXyzP12dKy_tevstr_c(); -extern "C" void setLightTevColorType_MAJI__18dScnKy_env_light_cFP12J3DModelDataP12dKy_tevstr_c(); -extern "C" void __ct__11cBgS_GndChkFv(); -extern "C" void __dt__11cBgS_GndChkFv(); -extern "C" void __dt__13cBgS_PolyInfoFv(); -extern "C" void __dt__8cM3dGCirFv(); -extern "C" void __dl__FPv(); -extern "C" void __ptmf_test(); -extern "C" void __ptmf_scall(); -extern "C" void _savegpr_29(); -extern "C" void _restgpr_29(); -extern "C" extern void* __vt__8dCcD_Sph[36]; -extern "C" extern void* __vt__9dCcD_Stts[11]; -extern "C" extern void* __vt__12cCcD_SphAttr[25]; -extern "C" extern void* __vt__14cCcD_ShapeAttr[22]; -extern "C" extern void* __vt__9cCcD_Stts[8]; -extern "C" u8 now__14mDoMtx_stack_c[48]; -extern "C" extern u8 g_dComIfG_gameInfo[122384]; -extern "C" extern u8 mStayNo__20dStage_roomControl_c[4]; -extern "C" void __register_global_object(); - -// -// Declarations: -// - -/* ############################################################################################## */ -/* 80656774-80656774 000060 0000+00 0/0 0/0 0/0 .rodata @stringBase0 */ -#pragma push -#pragma force_active on -SECTION_DEAD static char const* const stringBase_80656774 = "Hanjo1"; -SECTION_DEAD static char const* const stringBase_8065677B = "hanjo_stone.bmd"; -#pragma pop +#include "d/d_com_inf_game.h" /* 8065678C-80656790 -00001 0004+00 1/1 0/0 0/0 .data l_resFileNameList */ -SECTION_DATA static void* l_resFileNameList = (void*)&d_a_bullet__stringBase0; +static char* l_resFileNameList[] = {"Hanjo1"}; /* 80656790-80656794 -00001 0004+00 1/2 0/0 0/0 .data l_bmdFileNameList */ -SECTION_DATA static void* l_bmdFileNameList = (void*)(((char*)&d_a_bullet__stringBase0) + 0x7); +static char* l_bmdFileNameList[] = {"hanjo_stone.bmd"}; + +/* 806568CC-806568D0 000014 0004+00 1/1 0/0 0/0 .bss l_HIO */ +static daBullet_Param_c l_HIO; + +/* 80656714-80656744 000000 0030+00 2/2 0/0 0/0 .rodata mCcDObjInfo__10daBullet_c */ +const dCcD_SrcGObjInf daBullet_c::mCcDObjInfo = { + {0, {{0, 0, 0}, {0x0, 0x0}, {0x79}}}, + {dCcD_SE_NONE, 0, 0, 0, 0}, + {dCcD_SE_NONE, 0, 0, 0, 0}, + {0}, +}; /* 80656794-806567D4 000008 0040+00 2/2 0/0 0/0 .data mCcDSph__10daBullet_c */ -SECTION_DATA u8 daBullet_c::mCcDSph[64] = { - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, +dCcD_SrcSph daBullet_c::mCcDSph = { + daBullet_c::mCcDObjInfo, + { + {{0.0f, 0.0f, 0.0f}, 0.0f} // mSph + } // mSphAttr }; -/* 806567D4-806567E0 -00001 000C+00 1/1 0/0 0/0 .data @3878 */ -SECTION_DATA static void* lit_3878[3] = { - (void*)NULL, - (void*)0xFFFFFFFF, - (void*)wait__10daBullet_cFPv, +/* 8065594C-80655B08 0000EC 01BC+00 1/0 0/0 0/0 .text __dt__10daBullet_cFv */ +daBullet_c::~daBullet_c() { + dComIfG_resDelete(&mPhase, getResName()); +} + +/* 80655B08-80655C90 0002A8 0188+00 1/1 0/0 0/0 .text create__10daBullet_cFv */ +int daBullet_c::create() { + fopAcM_SetupActor(this, daBullet_c); + mType = getTypeFromParam(); + + int phase_state = dComIfG_resLoad(&mPhase, getResName()); + if (phase_state == cPhs_COMPLEATE_e) { + if (!fopAcM_entrySolidHeap(this, createHeapCallBack, 0x810)) { + return cPhs_ERROR_e; + } + + initialize(); + } + + return phase_state; +} + +/* 80655E5C-80655EDC 0005FC 0080+00 1/1 0/0 0/0 .text CreateHeap__10daBullet_cFv */ +BOOL daBullet_c::CreateHeap() { + void* mdlData_p = dComIfG_getObjectRes(getResName(), getBmdName()); + JUT_ASSERT(273, 0 != mdlData_p); + mpModel = mDoExt_J3DModel__create((J3DModelData*)mdlData_p, 0x80000, 0x11000084); + return mpModel != NULL; +} + +/* 80655EDC-80655F10 00067C 0034+00 1/1 0/0 0/0 .text Delete__10daBullet_cFv */ +int daBullet_c::Delete() { + fopAcM_GetID(this); + this->~daBullet_c(); + return 1; +} + +/* 80656744-8065675C 000030 0018+00 1/2 0/0 0/0 .rodata m__16daBullet_Param_c */ +daBullet_HIOParam const daBullet_Param_c::m = { + -3.0f, + 255.0f, + 3.0f, + 1.5f, + 3.0f, + 0x708, }; -/* 806567E0-806567EC -00001 000C+00 1/1 0/0 0/0 .data @3933 */ -SECTION_DATA static void* lit_3933[3] = { - (void*)NULL, - (void*)0xFFFFFFFF, - (void*)move__10daBullet_cFPv, -}; +/* 80655F10-806560FC 0006B0 01EC+00 2/2 0/0 0/0 .text Execute__10daBullet_cFv */ +int daBullet_c::Execute() { + gravity = daBullet_Param_c::m.gravity; + + if (field_0x957 == 0) { + if (mProcess != NULL) { + (this->*mProcess)(NULL); + } + + fopAcM_posMoveF(this, mCcStts.GetCCMoveP()); + mAcch.CrrPos(dComIfG_Bgsp()); + mGndChk = mAcch.m_gnd; + mGroundY = mAcch.GetGroundH(); + } else { + mGroundY = -1000000000.0f; + } + + int room_no; + if (mGroundY != -1000000000.0f) { + room_no = dComIfG_Bgsp().GetRoomId(mGndChk); + tevStr.YukaCol = dComIfG_Bgsp().GetPolyColor(mGndChk); + } else { + room_no = dComIfGp_roomControl_getStayNo(); + } + + tevStr.room_no = room_no; + fopAcM_SetRoomNo(this, tevStr.room_no); + attention_info.flags = 0; + attention_info.position = current.pos; + eyePos = attention_info.position; + + if (field_0x957 == 0) { + mDoMtx_stack_c::transS(current.pos); + mDoMtx_stack_c::ZXYrotM(shape_angle); + mDoMtx_stack_c::scaleM(scale); + mpModel->setBaseTRMtx(mDoMtx_stack_c::get()); + } + + field_0x957 = 0; + return 1; +} + +/* 806560FC-80656160 00089C 0064+00 1/1 0/0 0/0 .text Draw__10daBullet_cFv */ +int daBullet_c::Draw() { + g_env_light.settingTevStruct(0, ¤t.pos, &tevStr); + g_env_light.setLightTevColorType_MAJI(mpModel, &tevStr); + mDoExt_modelUpdateDL(mpModel); + return 1; +} + +/* 80656160-80656180 000900 0020+00 1/1 0/0 0/0 .text + * createHeapCallBack__10daBullet_cFP10fopAc_ac_c */ +int daBullet_c::createHeapCallBack(fopAc_ac_c* i_this) { + return ((daBullet_c*)i_this)->CreateHeap(); +} + +/* 80656180-80656198 000920 0018+00 3/3 0/0 0/0 .text getResName__10daBullet_cFv */ +const char* daBullet_c::getResName() { + return l_resFileNameList[mType]; +} + +/* 80656198-806561B0 000938 0018+00 1/1 0/0 0/0 .text getBmdName__10daBullet_cFv */ +const char* daBullet_c::getBmdName() { + return l_bmdFileNameList[mType]; +} + +/* 806561B0-806561D0 000950 0020+00 1/1 0/0 0/0 .text getTypeFromParam__10daBullet_cFv */ +int daBullet_c::getTypeFromParam() { + u8 prm = fopAcM_GetParam(this); + switch (prm) { + case 0: + return 0; + } + + return 0; +} + +static f32 dummyLiteral() { + f32 rt = 0.1f; + rt += 0.5f; + return rt; +} + +static f32 dummyLiteral2() { + return 0.0f; +} + +/* 806561D0-80656378 000970 01A8+00 1/1 0/0 0/0 .text initialize__10daBullet_cFv */ +void daBullet_c::initialize() { + mpModel->getModelData(); + fopAcM_SetMtx(this, mpModel->getBaseTRMtx()); + fopAcM_setCullSizeBox(this, -10.0f, -10.0f, -10.0f, 10.0f, 10.0f, 10.0f); + + mAcchCir.SetWall(daBullet_Param_c::m.width, daBullet_Param_c::m.knee_height); + mAcch.Set(fopAcM_GetPosition_p(this), fopAcM_GetOldPosition_p(this), this, 1, &mAcchCir, fopAcM_GetSpeed_p(this), fopAcM_GetAngle_p(this), fopAcM_GetShapeAngle_p(this)); + + mCcStts.Init(daBullet_Param_c::m.weight, 0, this); + mCcSph.Set(mCcDSph); + mCcSph.SetStts(&mCcStts); + mAcch.CrrPos(dComIfG_Bgsp()); + mGndChk = mAcch.m_gnd; + mGroundY = mAcch.GetGroundH(); + + setProcess(&daBullet_c::wait); + mLifetime = daBullet_Param_c::m.lifetime; + Execute(); +} + +/* 80656378-80656420 000B18 00A8+00 2/2 0/0 0/0 .text + * setProcess__10daBullet_cFM10daBullet_cFPCvPvPv_i */ +int daBullet_c::setProcess(daBullet_c::processFn i_process) { + mMode = 2; + if (mProcess != NULL) { + (this->*mProcess)(NULL); + } + + mMode = 0; + mProcess = i_process; + + if (mProcess != NULL) { + (this->*mProcess)(NULL); + } + + return 1; +} + +/* 80656420-806564B8 000BC0 0098+00 1/0 0/0 0/0 .text wait__10daBullet_cFPv */ +int daBullet_c::wait(void*) { + switch (mMode) { + case 0: + mMode = 1; + break; + case 1: + if (cM3d_IsZero(speedF) == false) { + setProcess(&daBullet_c::move); + } + break; + case 2: + break; + } + + return 1; +} + +/* 806564B8-80656548 000C58 0090+00 1/0 0/0 0/0 .text move__10daBullet_cFPv */ +int daBullet_c::move(void*) { + switch (mMode) { + case 0: + mMode = 1; + break; + case 1: + if (cLib_calcTimer(&mLifetime) == 0) { + fopAcM_delete(this); + } else if (mAcch.ChkGroundHit() || mAcch.ChkWallHit()) { + fopAcM_delete(this); + } + break; + case 2: + break; + } + + return 1; +} + +/* 80656548-80656568 000CE8 0020+00 1/0 0/0 0/0 .text daBullet_Create__FPv */ +static int daBullet_Create(void* i_this) { + return ((daBullet_c*)i_this)->create(); +} + +/* 80656568-80656588 000D08 0020+00 1/0 0/0 0/0 .text daBullet_Delete__FPv */ +static int daBullet_Delete(void* i_this) { + return ((daBullet_c*)i_this)->Delete(); +} + +/* 80656588-806565A8 000D28 0020+00 1/0 0/0 0/0 .text daBullet_Execute__FPv */ +static int daBullet_Execute(void* i_this) { + return ((daBullet_c*)i_this)->Execute(); +} + +/* 806565A8-806565C8 000D48 0020+00 1/0 0/0 0/0 .text daBullet_Draw__FPv */ +static int daBullet_Draw(void* i_this) { + return ((daBullet_c*)i_this)->Draw(); +} + +/* 806565C8-806565D0 000D68 0008+00 1/0 0/0 0/0 .text daBullet_IsDelete__FPv */ +static int daBullet_IsDelete(void* i_this) { + return 1; +} /* 806567EC-8065680C -00001 0020+00 1/0 0/0 0/0 .data daBullet_MethodTable */ static actor_method_class daBullet_MethodTable = { - (process_method_func)daBullet_Create__FPv, - (process_method_func)daBullet_Delete__FPv, - (process_method_func)daBullet_Execute__FPv, - (process_method_func)daBullet_IsDelete__FPv, - (process_method_func)daBullet_Draw__FPv, + (process_method_func)daBullet_Create, + (process_method_func)daBullet_Delete, + (process_method_func)daBullet_Execute, + (process_method_func)daBullet_IsDelete, + (process_method_func)daBullet_Draw, }; /* 8065680C-8065683C -00001 0030+00 0/0 0/0 1/0 .data g_profile_BULLET */ @@ -166,298 +293,3 @@ extern actor_process_profile_definition g_profile_BULLET = { fopAc_ACTOR_e, // mActorType fopAc_CULLBOX_CUSTOM_e, // cullType }; - -/* 8065683C-80656860 0000B0 0024+00 3/3 0/0 0/0 .data __vt__12dBgS_ObjAcch */ -SECTION_DATA extern void* __vt__12dBgS_ObjAcch[9] = { - (void*)NULL /* RTTI */, - (void*)NULL, - (void*)__dt__12dBgS_ObjAcchFv, - (void*)NULL, - (void*)NULL, - (void*)func_806566F8, - (void*)NULL, - (void*)NULL, - (void*)func_806566F0, -}; - -/* 80656860-8065686C 0000D4 000C+00 3/3 0/0 0/0 .data __vt__10cCcD_GStts */ -SECTION_DATA extern void* __vt__10cCcD_GStts[3] = { - (void*)NULL /* RTTI */, - (void*)NULL, - (void*)__dt__10cCcD_GSttsFv, -}; - -/* 8065686C-80656878 0000E0 000C+00 2/2 0/0 0/0 .data __vt__10dCcD_GStts */ -SECTION_DATA extern void* __vt__10dCcD_GStts[3] = { - (void*)NULL /* RTTI */, - (void*)NULL, - (void*)__dt__10dCcD_GSttsFv, -}; - -/* 80656878-80656884 0000EC 000C+00 2/2 0/0 0/0 .data __vt__12dBgS_AcchCir */ -SECTION_DATA extern void* __vt__12dBgS_AcchCir[3] = { - (void*)NULL /* RTTI */, - (void*)NULL, - (void*)__dt__12dBgS_AcchCirFv, -}; - -/* 80656884-80656890 0000F8 000C+00 3/3 0/0 0/0 .data __vt__8cM3dGAab */ -SECTION_DATA extern void* __vt__8cM3dGAab[3] = { - (void*)NULL /* RTTI */, - (void*)NULL, - (void*)__dt__8cM3dGAabFv, -}; - -/* 80656890-8065689C 000104 000C+00 3/3 0/0 0/0 .data __vt__8cM3dGSph */ -SECTION_DATA extern void* __vt__8cM3dGSph[3] = { - (void*)NULL /* RTTI */, - (void*)NULL, - (void*)__dt__8cM3dGSphFv, -}; - -/* 8065689C-806568A8 000110 000C+00 2/2 0/0 0/0 .data __vt__10daBullet_c */ -SECTION_DATA extern void* __vt__10daBullet_c[3] = { - (void*)NULL /* RTTI */, - (void*)NULL, - (void*)__dt__10daBullet_cFv, -}; - -/* 8065594C-80655B08 0000EC 01BC+00 1/0 0/0 0/0 .text __dt__10daBullet_cFv */ -daBullet_c::~daBullet_c() { - // NONMATCHING -} - -/* 80655B08-80655C90 0002A8 0188+00 1/1 0/0 0/0 .text create__10daBullet_cFv */ -void daBullet_c::create() { - // NONMATCHING -} - -/* 80655C90-80655CD8 000430 0048+00 1/0 0/0 0/0 .text __dt__8cM3dGSphFv */ -// cM3dGSph::~cM3dGSph() { -extern "C" void __dt__8cM3dGSphFv() { - // NONMATCHING -} - -/* 80655CD8-80655D20 000478 0048+00 1/0 0/0 0/0 .text __dt__8cM3dGAabFv */ -// cM3dGAab::~cM3dGAab() { -extern "C" void __dt__8cM3dGAabFv() { - // NONMATCHING -} - -/* 80655D20-80655D90 0004C0 0070+00 1/0 0/0 0/0 .text __dt__12dBgS_AcchCirFv */ -// dBgS_AcchCir::~dBgS_AcchCir() { -extern "C" void __dt__12dBgS_AcchCirFv() { - // NONMATCHING -} - -/* 80655D90-80655DEC 000530 005C+00 1/0 0/0 0/0 .text __dt__10dCcD_GSttsFv */ -// dCcD_GStts::~dCcD_GStts() { -extern "C" void __dt__10dCcD_GSttsFv() { - // NONMATCHING -} - -/* 80655DEC-80655E5C 00058C 0070+00 3/2 0/0 0/0 .text __dt__12dBgS_ObjAcchFv */ -// dBgS_ObjAcch::~dBgS_ObjAcch() { -extern "C" void __dt__12dBgS_ObjAcchFv() { - // NONMATCHING -} - -/* 80655E5C-80655EDC 0005FC 0080+00 1/1 0/0 0/0 .text CreateHeap__10daBullet_cFv */ -void daBullet_c::CreateHeap() { - // NONMATCHING -} - -/* 80655EDC-80655F10 00067C 0034+00 1/1 0/0 0/0 .text Delete__10daBullet_cFv */ -void daBullet_c::Delete() { - // NONMATCHING -} - -/* ############################################################################################## */ -/* 80656714-80656744 000000 0030+00 2/2 0/0 0/0 .rodata mCcDObjInfo__10daBullet_c */ -SECTION_RODATA u8 const daBullet_c::mCcDObjInfo[48] = { - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x79, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, -}; -COMPILER_STRIP_GATE(0x80656714, &daBullet_c::mCcDObjInfo); - -/* 80656744-8065675C 000030 0018+00 1/2 0/0 0/0 .rodata m__16daBullet_Param_c */ -SECTION_RODATA u8 const daBullet_Param_c::m[24] = { - 0xC0, 0x40, 0x00, 0x00, 0x43, 0x7F, 0x00, 0x00, 0x40, 0x40, 0x00, 0x00, - 0x3F, 0xC0, 0x00, 0x00, 0x40, 0x40, 0x00, 0x00, 0x07, 0x08, 0x00, 0x00, -}; -COMPILER_STRIP_GATE(0x80656744, &daBullet_Param_c::m); - -/* 8065675C-80656760 000048 0004+00 1/1 0/0 0/0 .rodata @3824 */ -SECTION_RODATA static f32 const lit_3824 = -1000000000.0f; -COMPILER_STRIP_GATE(0x8065675C, &lit_3824); - -/* 80655F10-806560FC 0006B0 01EC+00 2/2 0/0 0/0 .text Execute__10daBullet_cFv */ -void daBullet_c::Execute() { - // NONMATCHING -} - -/* 806560FC-80656160 00089C 0064+00 1/1 0/0 0/0 .text Draw__10daBullet_cFv */ -void daBullet_c::Draw() { - // NONMATCHING -} - -/* 80656160-80656180 000900 0020+00 1/1 0/0 0/0 .text - * createHeapCallBack__10daBullet_cFP10fopAc_ac_c */ -void daBullet_c::createHeapCallBack(fopAc_ac_c* param_0) { - // NONMATCHING -} - -/* 80656180-80656198 000920 0018+00 3/3 0/0 0/0 .text getResName__10daBullet_cFv */ -void daBullet_c::getResName() { - // NONMATCHING -} - -/* 80656198-806561B0 000938 0018+00 1/1 0/0 0/0 .text getBmdName__10daBullet_cFv */ -void daBullet_c::getBmdName() { - // NONMATCHING -} - -/* 806561B0-806561D0 000950 0020+00 1/1 0/0 0/0 .text getTypeFromParam__10daBullet_cFv */ -void daBullet_c::getTypeFromParam() { - // NONMATCHING -} - -/* ############################################################################################## */ -/* 80656760-80656764 00004C 0004+00 0/0 0/0 0/0 .rodata @3843 */ -#pragma push -#pragma force_active on -SECTION_RODATA static f32 const lit_3843 = 1.0f / 10.0f; -COMPILER_STRIP_GATE(0x80656760, &lit_3843); -#pragma pop - -/* 80656764-80656768 000050 0004+00 0/0 0/0 0/0 .rodata @3844 */ -#pragma push -#pragma force_active on -SECTION_RODATA static f32 const lit_3844 = 0.5f; -COMPILER_STRIP_GATE(0x80656764, &lit_3844); -#pragma pop - -/* 80656768-8065676C 000054 0004+00 0/0 0/0 0/0 .rodata @3845 */ -#pragma push -#pragma force_active on -SECTION_RODATA static u8 const lit_3845[4] = { - 0x00, - 0x00, - 0x00, - 0x00, -}; -COMPILER_STRIP_GATE(0x80656768, &lit_3845); -#pragma pop - -/* 8065676C-80656770 000058 0004+00 0/1 0/0 0/0 .rodata @3908 */ -#pragma push -#pragma force_active on -SECTION_RODATA static f32 const lit_3908 = -10.0f; -COMPILER_STRIP_GATE(0x8065676C, &lit_3908); -#pragma pop - -/* 80656770-80656774 00005C 0004+00 0/1 0/0 0/0 .rodata @3909 */ -#pragma push -#pragma force_active on -SECTION_RODATA static f32 const lit_3909 = 10.0f; -COMPILER_STRIP_GATE(0x80656770, &lit_3909); -#pragma pop - -/* 806561D0-80656378 000970 01A8+00 1/1 0/0 0/0 .text initialize__10daBullet_cFv */ -void daBullet_c::initialize() { - // NONMATCHING -} - -/* 80656378-80656420 000B18 00A8+00 2/2 0/0 0/0 .text - * setProcess__10daBullet_cFM10daBullet_cFPCvPvPv_i */ -void daBullet_c::setProcess(int (daBullet_c::*param_0)(void*)) { - // NONMATCHING -} - -/* 80656420-806564B8 000BC0 0098+00 1/0 0/0 0/0 .text wait__10daBullet_cFPv */ -void daBullet_c::wait(void* param_0) { - // NONMATCHING -} - -/* 806564B8-80656548 000C58 0090+00 1/0 0/0 0/0 .text move__10daBullet_cFPv */ -void daBullet_c::move(void* param_0) { - // NONMATCHING -} - -/* 80656548-80656568 000CE8 0020+00 1/0 0/0 0/0 .text daBullet_Create__FPv */ -static void daBullet_Create(void* param_0) { - // NONMATCHING -} - -/* 80656568-80656588 000D08 0020+00 1/0 0/0 0/0 .text daBullet_Delete__FPv */ -static void daBullet_Delete(void* param_0) { - // NONMATCHING -} - -/* 80656588-806565A8 000D28 0020+00 1/0 0/0 0/0 .text daBullet_Execute__FPv */ -static void daBullet_Execute(void* param_0) { - // NONMATCHING -} - -/* 806565A8-806565C8 000D48 0020+00 1/0 0/0 0/0 .text daBullet_Draw__FPv */ -static void daBullet_Draw(void* param_0) { - // NONMATCHING -} - -/* 806565C8-806565D0 000D68 0008+00 1/0 0/0 0/0 .text daBullet_IsDelete__FPv */ -static bool daBullet_IsDelete(void* param_0) { - return true; -} - -/* 806565D0-80656618 000D70 0048+00 1/0 0/0 0/0 .text __dt__10cCcD_GSttsFv */ -// cCcD_GStts::~cCcD_GStts() { -extern "C" void __dt__10cCcD_GSttsFv() { - // NONMATCHING -} - -/* 80656618-80656634 000DB8 001C+00 1/1 0/0 0/0 .text cLib_calcTimer__FPi */ -extern "C" void func_80656618(void* _this, int* param_0) { - // NONMATCHING -} - -/* ############################################################################################## */ -/* 806568A8-806568B4 00011C 000C+00 2/2 0/0 0/0 .data __vt__16daBullet_Param_c */ -SECTION_DATA extern void* __vt__16daBullet_Param_c[3] = { - (void*)NULL /* RTTI */, - (void*)NULL, - (void*)__dt__16daBullet_Param_cFv, -}; - -/* 806568C0-806568CC 000008 000C+00 1/1 0/0 0/0 .bss @3619 */ -static u8 lit_3619[12]; - -/* 806568CC-806568D0 000014 0004+00 1/1 0/0 0/0 .bss l_HIO */ -static u8 l_HIO[4]; - -/* 80656634-806566A8 000DD4 0074+00 0/0 1/0 0/0 .text __sinit_d_a_bullet_cpp */ -void __sinit_d_a_bullet_cpp() { - // NONMATCHING -} - -#pragma push -#pragma force_active on -REGISTER_CTORS(0x80656634, __sinit_d_a_bullet_cpp); -#pragma pop - -/* 806566A8-806566F0 000E48 0048+00 2/1 0/0 0/0 .text __dt__16daBullet_Param_cFv */ -daBullet_Param_c::~daBullet_Param_c() { - // NONMATCHING -} - -/* 806566F0-806566F8 000E90 0008+00 1/0 0/0 0/0 .text @36@__dt__12dBgS_ObjAcchFv */ -static void func_806566F0() { - // NONMATCHING -} - -/* 806566F8-80656700 000E98 0008+00 1/0 0/0 0/0 .text @20@__dt__12dBgS_ObjAcchFv */ -static void func_806566F8() { - // NONMATCHING -} - -/* 80656774-80656774 000060 0000+00 0/0 0/0 0/0 .rodata @stringBase0 */ diff --git a/src/d/actor/d_a_obj_yousei.cpp b/src/d/actor/d_a_obj_yousei.cpp index e60c5c4edc1..ef620658d31 100644 --- a/src/d/actor/d_a_obj_yousei.cpp +++ b/src/d/actor/d_a_obj_yousei.cpp @@ -4,728 +4,888 @@ */ #include "d/actor/d_a_obj_yousei.h" -#include "d/d_cc_d.h" -#include "dol2asm.h" - - -// -// Forward References: -// - -extern "C" void InitCcSph__13daObjYOUSEI_cFv(); -extern "C" void SetCcSph__13daObjYOUSEI_cFv(); -extern "C" static void useHeapInit__FP10fopAc_ac_c(); -extern "C" static void daObjYOUSEI_Create__FP10fopAc_ac_c(); -extern "C" static void daObjYOUSEI_Delete__FP13daObjYOUSEI_c(); -extern "C" void SpeedSet__13daObjYOUSEI_cFv(); -extern "C" void MoveAction__13daObjYOUSEI_cFv(); -extern "C" void BinAction__13daObjYOUSEI_cFv(); -extern "C" void LinkChk__13daObjYOUSEI_cFv(); -extern "C" void WaitAction__13daObjYOUSEI_cFv(); -extern "C" void LinkAction__13daObjYOUSEI_cFv(); -extern "C" void LinkSearch__13daObjYOUSEI_cFv(); -extern "C" void WayBgCheck__13daObjYOUSEI_cFffs(); -extern "C" void CareAction__13daObjYOUSEI_cFv(); -extern "C" void CheckGround__13daObjYOUSEI_cFv(); -extern "C" void __dt__14dBgS_ObjGndChkFv(); -extern "C" void CheckWater__13daObjYOUSEI_cFv(); -extern "C" void Action__13daObjYOUSEI_cFv(); -extern "C" void ObjHit__13daObjYOUSEI_cFv(); -extern "C" void Execute__13daObjYOUSEI_cFv(); -extern "C" void Delete__13daObjYOUSEI_cFv(); -extern "C" void setBaseMtx__13daObjYOUSEI_cFv(); -extern "C" static void daObjYOUSEI_Draw__FP13daObjYOUSEI_c(); -extern "C" static void daObjYOUSEI_Execute__FP13daObjYOUSEI_c(); -extern "C" void create__13daObjYOUSEI_cFv(); -extern "C" void __dt__8cM3dGSphFv(); -extern "C" void __dt__8cM3dGAabFv(); -extern "C" void __dt__12dBgS_ObjAcchFv(); -extern "C" static bool daObjYOUSEI_IsDelete__FP13daObjYOUSEI_c(); -extern "C" static void func_804D15A4(); -extern "C" static void func_804D15AC(); -extern "C" static void func_804D15B4(); -extern "C" static void func_804D15BC(); -extern "C" static void func_804D15C4(); -extern "C" void getHeadTopPos__9daPy_py_cCFv(); -extern "C" extern char const* const d_a_obj_yousei__stringBase0; - -// -// External References: -// - -extern "C" void mDoMtx_YrotS__FPA4_fs(); -extern "C" void mDoMtx_YrotM__FPA4_fs(); -extern "C" void transS__14mDoMtx_stack_cFRC4cXyz(); -extern "C" void scaleM__14mDoMtx_stack_cFRC4cXyz(); -extern "C" void ZXYrotM__14mDoMtx_stack_cFRC5csXyz(); -extern "C" void -__ct__16mDoExt_McaMorfSOFP12J3DModelDataP25mDoExt_McaMorfCallBack1_cP25mDoExt_McaMorfCallBack2_cP15J3DAnmTransformifiiP10Z2CreatureUlUl(); -extern "C" void play__16mDoExt_McaMorfSOFUlSc(); -extern "C" void entryDL__16mDoExt_McaMorfSOFv(); -extern "C" void modelCalc__16mDoExt_McaMorfSOFv(); -extern "C" void stopZelAnime__16mDoExt_McaMorfSOFv(); -extern "C" void __ct__10fopAc_ac_cFv(); -extern "C" void fopAcM_delete__FP10fopAc_ac_c(); -extern "C" void fopAcM_entrySolidHeap__FP10fopAc_ac_cPFP10fopAc_ac_c_iUl(); -extern "C" void fopAcM_SetMin__FP10fopAc_ac_cfff(); -extern "C" void fopAcM_SetMax__FP10fopAc_ac_cfff(); -extern "C" void fopAcM_searchActorAngleY__FPC10fopAc_ac_cPC10fopAc_ac_c(); -extern "C" void fopAcM_searchActorDistanceXZ__FPC10fopAc_ac_cPC10fopAc_ac_c(); -extern "C" void dComIfGp_getReverb__Fi(); -extern "C" void dComIfGd_setSimpleShadow__FP4cXyzffR13cBgS_PolyInfosfP9_GXTexObj(); -extern "C" void dComIfGs_getMaxLifeGauge__Fv(); -extern "C" void isEventBit__11dSv_event_cCFUs(); -extern "C" void getRes__14dRes_control_cFPCclP11dRes_info_ci(); -extern "C" void forceOnEventMove__Q213dPa_control_c7level_cFUl(); -extern "C" void getEmitter__Q213dPa_control_c7level_cFUl(); -extern "C" void -set__13dPa_control_cFUlUcUsPC4cXyzPC12dKy_tevstr_cPC5csXyzPC4cXyzUcP18dPa_levelEcallBackScPC8_GXColorPC8_GXColorPC4cXyzf(); -extern "C" void request__11dAttCatch_cFP10fopAc_ac_cUcfffsi(); -extern "C" void LineCross__4cBgSFP11cBgS_LinChk(); -extern "C" void GroundCross__4cBgSFP11cBgS_GndChk(); -extern "C" void GetPolyAtt0__4dBgSFRC13cBgS_PolyInfo(); -extern "C" void __ct__12dBgS_AcchCirFv(); -extern "C" void SetWall__12dBgS_AcchCirFff(); -extern "C" void __dt__9dBgS_AcchFv(); -extern "C" void __ct__9dBgS_AcchFv(); -extern "C" void Set__9dBgS_AcchFP4cXyzP4cXyzP10fopAc_ac_ciP12dBgS_AcchCirP4cXyzP5csXyzP5csXyz(); -extern "C" void CrrPos__9dBgS_AcchFR4dBgS(); -extern "C" void ClrMoveBGOnly__9dBgS_AcchFv(); -extern "C" void __ct__11dBgS_GndChkFv(); -extern "C" void __dt__11dBgS_GndChkFv(); -extern "C" void __dt__18dBgS_ObjGndChk_AllFv(); -extern "C" void __ct__11dBgS_LinChkFv(); -extern "C" void __dt__11dBgS_LinChkFv(); -extern "C" void Set__11dBgS_LinChkFPC4cXyzPC4cXyzPC10fopAc_ac_c(); -extern "C" void SetObj__16dBgS_PolyPassChkFv(); -extern "C" void __ct__10dCcD_GSttsFv(); -extern "C" void Init__9dCcD_SttsFiiP10fopAc_ac_c(); -extern "C" void __ct__12dCcD_GObjInfFv(); -extern "C" void ChkTgHit__12dCcD_GObjInfFv(); -extern "C" void GetTgHitObj__12dCcD_GObjInfFv(); -extern "C" void GetTgHitGObj__12dCcD_GObjInfFv(); -extern "C" void Set__8dCcD_SphFRC11dCcD_SrcSph(); -extern "C" void execItemGet__FUc(); -extern "C" void initOffset__20daPy_boomerangMove_cFPC4cXyz(); -extern "C" void posMove__20daPy_boomerangMove_cFP4cXyzPsP10fopAc_ac_cs(); -extern "C" void bgCheckAfterOffset__20daPy_boomerangMove_cFPC4cXyz(); -extern "C" void settingTevStruct__18dScnKy_env_light_cFiP4cXyzP12dKy_tevstr_c(); -extern "C" void setLightTevColorType_MAJI__18dScnKy_env_light_cFP12J3DModelDataP12dKy_tevstr_c(); -extern "C" void Set__4cCcSFP8cCcD_Obj(); -extern "C" void __mi__4cXyzCFRC3Vec(); -extern "C" void cM_atan2s__Fff(); -extern "C" void cM_rndF__Ff(); -extern "C" void cM_rndFX__Ff(); -extern "C" void SetPos__11cBgS_GndChkFPC4cXyz(); -extern "C" void SetC__8cM3dGSphFRC4cXyz(); -extern "C" void SetR__8cM3dGSphFf(); -extern "C" void cLib_addCalc__FPfffff(); -extern "C" void cLib_addCalc2__FPffff(); -extern "C" void cLib_addCalcPos2__FP4cXyzRC4cXyzff(); -extern "C" void cLib_addCalcAngleS2__FPssss(); -extern "C" void cLib_chasePos__FP4cXyzRC4cXyzf(); -extern "C" void cLib_targetAngleY__FPC3VecPC3Vec(); -extern "C" void MtxPosition__FP4cXyzP4cXyz(); -extern "C" void deleteAllParticle__14JPABaseEmitterFv(); -extern "C" void __ct__10Z2CreatureFv(); -extern "C" void init__10Z2CreatureFP3VecP3VecUcUc(); -extern "C" void* __nw__FUl(); -extern "C" void __dl__FPv(); -extern "C" void checkPass__12J3DFrameCtrlFf(); -extern "C" void __cvt_fp2unsigned(); -extern "C" void _savegpr_25(); -extern "C" void _savegpr_28(); -extern "C" void _savegpr_29(); -extern "C" void _restgpr_25(); -extern "C" void _restgpr_28(); -extern "C" void _restgpr_29(); -extern "C" u8 saveBitLabels__16dSv_event_flag_c[1644 + 4 /* padding */]; -extern "C" extern void* __vt__18dBgS_ObjGndChk_All[12]; -extern "C" extern void* __vt__8dCcD_Sph[36]; -extern "C" extern void* __vt__9dCcD_Stts[11]; -extern "C" extern void* __vt__12cCcD_SphAttr[25]; -extern "C" extern void* __vt__14cCcD_ShapeAttr[22]; -extern "C" extern void* __vt__9cCcD_Stts[8]; -extern "C" u8 now__14mDoMtx_stack_c[48]; -extern "C" extern u8 g_dComIfG_gameInfo[122384]; -extern "C" u8 mSimpleTexObj__21dDlst_shadowControl_c[32]; -extern "C" extern void* calc_mtx[1 + 1 /* padding */]; - -// -// Declarations: -// - -/* ############################################################################################## */ -/* 804D15F0-804D1630 000000 0040+00 11/11 0/0 0/0 .rodata ccSphSrc$3652 */ -const static dCcD_SrcSph ccSphSrc = { - { - {0x0, {{0x0, 0x0, 0x0}, {0x14002, 0x11}, 0x75}}, // mObj - {dCcD_SE_STONE, 0x0, 0x0, 0x0, 0x0}, // mGObjAt - {dCcD_SE_NONE, 0x0, 0x0, 0x0, 0x0}, // mGObjTg - {0x0}, // mGObjCo - }, // mObjInf - { - {{0.0f, 0.0f, 0.0f}, 40.0f} // mSph - } // mSphAttr -}; +#include "d/d_com_inf_game.h" +#include "d/d_s_play.h" +#include "d/d_item.h" +#include "Z2AudioLib/Z2Instances.h" /* 804CE738-804CE7A4 000078 006C+00 1/1 0/0 0/0 .text InitCcSph__13daObjYOUSEI_cFv */ void daObjYOUSEI_c::InitCcSph() { - // NONMATCHING -} + const static dCcD_SrcSph ccSphSrc = { + { + {0x0, {{0x0, 0x0, 0x0}, {0x14002, 0x11}, 0x75}}, // mObj + {dCcD_SE_STONE, 0x0, 0x0, 0x0, 0x0}, // mGObjAt + {dCcD_SE_NONE, 0x0, 0x0, 0x0, 0x0}, // mGObjTg + {0x0}, // mGObjCo + }, // mObjInf + { + {{0.0f, 0.0f, 0.0f}, 40.0f} // mSph + } // mSphAttr + }; -/* ############################################################################################## */ -/* 804D1630-804D1634 000040 0004+00 1/2 0/0 0/0 .rodata @3661 */ -SECTION_RODATA static f32 const lit_3661 = 40.0f; -COMPILER_STRIP_GATE(0x804D1630, &lit_3661); + mCcStts.Init(1, 0, this); + mCcSph.Set(ccSphSrc); + mCcSph.SetStts(&mCcStts); + mCcSph.SetC(current.pos); + mCcSph.OnTgNoHitMark(); +} /* 804CE7A4-804CE7FC 0000E4 0058+00 1/1 0/0 0/0 .text SetCcSph__13daObjYOUSEI_cFv */ void daObjYOUSEI_c::SetCcSph() { - // NONMATCHING + mCcSph.SetC(current.pos); + mCcSph.SetR(40.0f); + dComIfG_Ccsp()->Set(&mCcSph); } -/* ############################################################################################## */ -/* 804D1634-804D1638 000044 0004+00 1/2 0/0 0/0 .rodata @3680 */ -SECTION_RODATA static f32 const lit_3680 = 2.0f / 5.0f; -COMPILER_STRIP_GATE(0x804D1634, &lit_3680); +int daObjYOUSEI_c::CreateHeap() { + void* modelData = dComIfG_getObjectRes("Always", 0x21); + JUT_ASSERT(177, modelData != 0); -/* 804D1720-804D1720 000130 0000+00 0/0 0/0 0/0 .rodata @stringBase0 */ -#pragma push -#pragma force_active on -SECTION_DEAD static char const* const stringBase_804D1720 = "Always"; -#pragma pop + mpModelMorf = new mDoExt_McaMorfSO((J3DModelData*)modelData, NULL, NULL, (J3DAnmTransform*)dComIfG_getObjectRes("Always", 0xF), 2, 0.4f, 0, -1, &mSound, 0x80000, 0x11000084); + if (mpModelMorf == NULL) { + return 0; + } + + return 1; +} /* 804CE7FC-804CE8DC 00013C 00E0+00 1/1 0/0 0/0 .text useHeapInit__FP10fopAc_ac_c */ -static void useHeapInit(fopAc_ac_c* param_0) { - // NONMATCHING +static int useHeapInit(fopAc_ac_c* i_this) { + daObjYOUSEI_c* a_this = (daObjYOUSEI_c*)i_this; + return a_this->CreateHeap(); } /* 804CE8DC-804CE8FC 00021C 0020+00 1/0 0/0 0/0 .text daObjYOUSEI_Create__FP10fopAc_ac_c */ -static void daObjYOUSEI_Create(fopAc_ac_c* param_0) { - // NONMATCHING +static int daObjYOUSEI_Create(fopAc_ac_c* i_this) { + daObjYOUSEI_c* a_this = (daObjYOUSEI_c*)i_this; + fpc_ProcID id = fopAcM_GetID(i_this); + return a_this->create(); } /* 804CE8FC-804CE920 00023C 0024+00 1/0 0/0 0/0 .text daObjYOUSEI_Delete__FP13daObjYOUSEI_c */ -static void daObjYOUSEI_Delete(daObjYOUSEI_c* param_0) { - // NONMATCHING +static int daObjYOUSEI_Delete(daObjYOUSEI_c* i_this) { + fpc_ProcID id = fopAcM_GetID(i_this); + i_this->Delete(); + return 1; } -/* ############################################################################################## */ -/* 804D1638-804D163C 000048 0004+00 2/10 0/0 0/0 .rodata @3708 */ -SECTION_RODATA static u8 const lit_3708[4] = { - 0x00, - 0x00, - 0x00, - 0x00, -}; -COMPILER_STRIP_GATE(0x804D1638, &lit_3708); - /* 804CE920-804CE9D0 000260 00B0+00 1/1 0/0 0/0 .text SpeedSet__13daObjYOUSEI_cFv */ void daObjYOUSEI_c::SpeedSet() { - // NONMATCHING + speed.y += gravity; + current.pos.y += speed.y; + + cXyz mae(0.0f, 0.0f, speedF); + cXyz ato(0.0f, 0.0f, 0.0f); + mDoMtx_stack_c::YrotS(current.angle.y); + mDoMtx_stack_c::multVec(&mae, &ato); + current.pos.x += ato.x; + current.pos.z += ato.z; } -/* ############################################################################################## */ -/* 804D163C-804D1640 00004C 0004+00 0/4 0/0 0/0 .rodata @3790 */ -#pragma push -#pragma force_active on -SECTION_RODATA static f32 const lit_3790 = 25.0f; -COMPILER_STRIP_GATE(0x804D163C, &lit_3790); -#pragma pop - -/* 804D1640-804D1644 000050 0004+00 1/6 0/0 0/0 .rodata @3791 */ -SECTION_RODATA static f32 const lit_3791 = 1.0f; -COMPILER_STRIP_GATE(0x804D1640, &lit_3791); - -/* 804D1644-804D1648 000054 0004+00 0/1 0/0 0/0 .rodata @3792 */ -#pragma push -#pragma force_active on -SECTION_RODATA static f32 const lit_3792 = 120.0f; -COMPILER_STRIP_GATE(0x804D1644, &lit_3792); -#pragma pop - -/* 804D1648-804D164C 000058 0004+00 0/1 0/0 0/0 .rodata @3793 */ -#pragma push -#pragma force_active on -SECTION_RODATA static f32 const lit_3793 = 3.0f / 100.0f; -COMPILER_STRIP_GATE(0x804D1648, &lit_3793); -#pragma pop - -/* 804D164C-804D1650 00005C 0004+00 0/4 0/0 0/0 .rodata @3794 */ -#pragma push -#pragma force_active on -SECTION_RODATA static f32 const lit_3794 = 10.0f; -COMPILER_STRIP_GATE(0x804D164C, &lit_3794); -#pragma pop - -/* 804D1650-804D1654 000060 0004+00 1/3 0/0 0/0 .rodata @3795 */ -SECTION_RODATA static f32 const lit_3795 = 130.0f; -COMPILER_STRIP_GATE(0x804D1650, &lit_3795); - -/* 804D1654-804D1658 000064 0004+00 0/1 0/0 0/0 .rodata @3796 */ -#pragma push -#pragma force_active on -SECTION_RODATA static f32 const lit_3796 = 600.0f; -COMPILER_STRIP_GATE(0x804D1654, &lit_3796); -#pragma pop - -/* 804D1658-804D165C 000068 0004+00 0/1 0/0 0/0 .rodata @3797 */ -#pragma push -#pragma force_active on -SECTION_RODATA static f32 const lit_3797 = 3.0f / 50.0f; -COMPILER_STRIP_GATE(0x804D1658, &lit_3797); -#pragma pop - -/* 804D165C-804D1660 00006C 0004+00 1/6 0/0 0/0 .rodata @3798 */ -SECTION_RODATA static f32 const lit_3798 = 1.0f / 5.0f; -COMPILER_STRIP_GATE(0x804D165C, &lit_3798); - -/* 804D1660-804D1664 000070 0004+00 0/1 0/0 0/0 .rodata @3799 */ -#pragma push -#pragma force_active on -SECTION_RODATA static f32 const lit_3799 = 3.0f / 5.0f; -COMPILER_STRIP_GATE(0x804D1660, &lit_3799); -#pragma pop - -/* 804D1664-804D1668 000074 0004+00 0/3 0/0 0/0 .rodata @3800 */ -#pragma push -#pragma force_active on -SECTION_RODATA static f32 const lit_3800 = 3.0f; -COMPILER_STRIP_GATE(0x804D1664, &lit_3800); -#pragma pop - -/* 804D1668-804D166C 000078 0004+00 0/3 0/0 0/0 .rodata @3801 */ -#pragma push -#pragma force_active on -SECTION_RODATA static f32 const lit_3801 = 2.0f; -COMPILER_STRIP_GATE(0x804D1668, &lit_3801); -#pragma pop - -/* 804D166C-804D1670 00007C 0004+00 1/7 0/0 0/0 .rodata @3802 */ -SECTION_RODATA static f32 const lit_3802 = 100.0f; -COMPILER_STRIP_GATE(0x804D166C, &lit_3802); - -/* 804D1670-804D1674 000080 0004+00 0/3 0/0 0/0 .rodata @3803 */ -#pragma push -#pragma force_active on -SECTION_RODATA static f32 const lit_3803 = 3.0f / 10.0f; -COMPILER_STRIP_GATE(0x804D1670, &lit_3803); -#pragma pop - -/* 804D1674-804D1678 000084 0004+00 0/5 0/0 0/0 .rodata @3804 */ -#pragma push -#pragma force_active on -SECTION_RODATA static f32 const lit_3804 = 30.0f; -COMPILER_STRIP_GATE(0x804D1674, &lit_3804); -#pragma pop - -/* 804D1678-804D1680 000088 0004+04 0/3 0/0 0/0 .rodata @3805 */ -#pragma push -#pragma force_active on -SECTION_RODATA static f32 const lit_3805[1 + 1 /* padding */] = { - 7.0f, - /* padding */ - 0.0f, -}; -COMPILER_STRIP_GATE(0x804D1678, &lit_3805); -#pragma pop - -/* 804D1680-804D1688 000090 0008+00 0/2 0/0 0/0 .rodata @3807 */ -#pragma push -#pragma force_active on -SECTION_RODATA static u8 const lit_3807[8] = { - 0x43, 0x30, 0x00, 0x00, 0x80, 0x00, 0x00, 0x00, -}; -COMPILER_STRIP_GATE(0x804D1680, &lit_3807); -#pragma pop - -/* 804D17E8-804D17EC 000000 0001+03 1/1 0/0 0/0 .bss @1109 */ -static u8 lit_1109[1 + 3 /* padding */]; - -/* 804D17EC-804D17F0 000004 0001+03 0/0 0/0 0/0 .bss @1107 */ -#pragma push -#pragma force_active on -static u8 lit_1107[1 + 3 /* padding */]; -#pragma pop - -/* 804D17F0-804D17F4 000008 0001+03 0/0 0/0 0/0 .bss @1105 */ -#pragma push -#pragma force_active on -static u8 lit_1105[1 + 3 /* padding */]; -#pragma pop - -/* 804D17F4-804D17F8 00000C 0001+03 0/0 0/0 0/0 .bss @1104 */ -#pragma push -#pragma force_active on -static u8 lit_1104[1 + 3 /* padding */]; -#pragma pop - -/* 804D17F8-804D17FC 000010 0001+03 0/0 0/0 0/0 .bss @1099 */ -#pragma push -#pragma force_active on -static u8 lit_1099[1 + 3 /* padding */]; -#pragma pop - -/* 804D17FC-804D1800 000014 0001+03 0/0 0/0 0/0 .bss @1097 */ -#pragma push -#pragma force_active on -static u8 lit_1097[1 + 3 /* padding */]; -#pragma pop - -/* 804D1800-804D1804 000018 0001+03 0/0 0/0 0/0 .bss @1095 */ -#pragma push -#pragma force_active on -static u8 lit_1095[1 + 3 /* padding */]; -#pragma pop - -/* 804D1804-804D1808 00001C 0001+03 0/0 0/0 0/0 .bss @1094 */ -#pragma push -#pragma force_active on -static u8 lit_1094[1 + 3 /* padding */]; -#pragma pop - -/* 804D1808-804D180C 000020 0001+03 0/0 0/0 0/0 .bss @1057 */ -#pragma push -#pragma force_active on -static u8 lit_1057[1 + 3 /* padding */]; -#pragma pop - -/* 804D180C-804D1810 000024 0001+03 0/0 0/0 0/0 .bss @1055 */ -#pragma push -#pragma force_active on -static u8 lit_1055[1 + 3 /* padding */]; -#pragma pop - -/* 804D1810-804D1814 000028 0001+03 0/0 0/0 0/0 .bss @1053 */ -#pragma push -#pragma force_active on -static u8 lit_1053[1 + 3 /* padding */]; -#pragma pop - -/* 804D1814-804D1818 00002C 0001+03 0/0 0/0 0/0 .bss @1052 */ -#pragma push -#pragma force_active on -static u8 lit_1052[1 + 3 /* padding */]; -#pragma pop - -/* 804D1818-804D181C 000030 0001+03 0/0 0/0 0/0 .bss @1014 */ -#pragma push -#pragma force_active on -static u8 lit_1014[1 + 3 /* padding */]; -#pragma pop - -/* 804D181C-804D1820 000034 0001+03 0/0 0/0 0/0 .bss @1012 */ -#pragma push -#pragma force_active on -static u8 lit_1012[1 + 3 /* padding */]; -#pragma pop - -/* 804D1820-804D1824 000038 0001+03 0/0 0/0 0/0 .bss @1010 */ -#pragma push -#pragma force_active on -static u8 lit_1010[1 + 3 /* padding */]; -#pragma pop - -/* 804D1824-804D1828 00003C 0001+03 0/0 0/0 0/0 .bss @1009 */ -#pragma push -#pragma force_active on -static u8 lit_1009[1 + 3 /* padding */]; -#pragma pop +UNK_REL_BSS /* 804D1828-804D182C 000040 0004+00 0/0 0/0 0/0 .bss s_dis */ -#pragma push -#pragma force_active on -static u8 s_dis[4]; -#pragma pop +static f32 s_dis; /* 804D182C-804D1830 000044 0004+00 4/5 0/0 0/0 .bss sLink_Pos */ -static u8 sLink_Pos[4]; +static cXyz* sLink_Pos; /* 804CE9D0-804CEE50 000310 0480+00 1/1 0/0 0/0 .text MoveAction__13daObjYOUSEI_cFv */ void daObjYOUSEI_c::MoveAction() { - // NONMATCHING + switch (mMode) { + case 0: + mMode++; + field_0x5dc = -0x1CB8; + mSpeedVTarget = 0.0f; + field_0x5d6 = 120.0f + yREG_F(18); + mAngleTarget = yREG_F(17) + (f32)(cLib_targetAngleY(sLink_Pos, ¤t.pos) - 0x3000); + break; + case 1: + if (field_0x5d6 == 100 && mPrm != 0) { + execItemGet(fpcNm_ITEM_RECOVERY_FAILY); + } + + f32 var_f31 = (25.0f + yREG_F(16)) / field_0x5d6; + if (var_f31 > 1.0f) { + var_f31 = 1.0f; + } + + cXyz sp30; + cXyz sp24; + f32 temp_f30 = field_0x5d6 / 120.0f; + + if ((fopAcM_GetParam(this) & 0xFF) == 0 && field_0x5d6 > 110) { + if (field_0x5d6 > 115) { + var_f31 = 0.03f + BREG_F(1); + sp30.set(0.0f, 600.0f + BREG_F(3), (10.0f / field_0x5e8) + (130.0f * temp_f30)); + } else if (field_0x5d6 > 110) { + var_f31 = 0.06f + BREG_F(2); + sp30.set(0.0f, BREG_F(4), (10.0f / field_0x5e8) + (130.0f * temp_f30)); + } + + cXyz sp18(1.0f, 1.0f, 1.0f); + cLib_addCalcPos2(&scale, sp18, 0.2f + nREG_F(16), 10.0f); + mpModelMorf->setPlaySpeed(0.6f); + } else { + mAngleTarget += field_0x5dc * var_f31; + sp30.set(0.0f, mSpeedVTarget, (10.0f / field_0x5e8) + (130.0f * temp_f30)); + mpModelMorf->setPlaySpeed((3.0f + yREG_F(9)) * field_0x5ec); + } + + current.angle.y = mAngleTarget - 0x4000; + cLib_addCalc2(&field_0x5ec, var_f31, 0.2f + BREG_F(5), 10.0f); + + mDoMtx_stack_c::transS(*sLink_Pos); + mDoMtx_stack_c::YrotM(mAngleTarget); + mDoMtx_stack_c::multVec(&sp30, &sp24); + mSpeedVTarget += (2.0f + yREG_F(19)) * field_0x5e8; + + cLib_addCalc(¤t.pos.x, sp24.x, field_0x5ec, 100.0f, 0.0f); + cLib_addCalc(¤t.pos.y, sp24.y, field_0x5ec * (0.3f + yREG_F(10)), 30.0f, 0.0f); + cLib_addCalc(¤t.pos.z, sp24.z, field_0x5ec, 100.0f, 0.0f); + break; + } + + if (mpModelMorf->checkFrame(7.0f)) { + mpModelMorf->setFrame(0.0f); + } + + if (field_0x5d6 == 0) { + fopAcM_delete(this); + } + + field_0x604 = dComIfGp_particle_set(field_0x604, 0x72F, ¤t.pos, &tevStr, &shape_angle, NULL, 0xFF, NULL, -1, NULL, NULL, NULL); + field_0x60c = dComIfGp_particle_set(field_0x60c, 0x730, ¤t.pos, &tevStr, &shape_angle, NULL, 0xFF, NULL, -1, NULL, NULL, NULL); + field_0x610 = dComIfGp_particle_set(field_0x610, 0x732, ¤t.pos, &tevStr, &shape_angle, NULL, 0xFF, NULL, -1, NULL, NULL, NULL); } -/* ############################################################################################## */ -/* 804D1688-804D168C 000098 0004+00 0/1 0/0 0/0 .rodata @3849 */ -#pragma push -#pragma force_active on -SECTION_RODATA static f32 const lit_3849 = 1.5f; -COMPILER_STRIP_GATE(0x804D1688, &lit_3849); -#pragma pop - -/* 804D168C-804D1690 00009C 0004+00 0/2 0/0 0/0 .rodata @3850 */ -#pragma push -#pragma force_active on -SECTION_RODATA static f32 const lit_3850 = 4.5f; -COMPILER_STRIP_GATE(0x804D168C, &lit_3850); -#pragma pop - -/* 804D1690-804D1694 0000A0 0004+00 0/2 0/0 0/0 .rodata @3851 */ -#pragma push -#pragma force_active on -SECTION_RODATA static f32 const lit_3851 = -2.0f; -COMPILER_STRIP_GATE(0x804D1690, &lit_3851); -#pragma pop - -/* 804D1694-804D1698 0000A4 0004+00 0/2 0/0 0/0 .rodata @3852 */ -#pragma push -#pragma force_active on -SECTION_RODATA static f32 const lit_3852 = 1.0f / 20.0f; -COMPILER_STRIP_GATE(0x804D1694, &lit_3852); -#pragma pop - -/* 804D1698-804D169C 0000A8 0004+00 0/2 0/0 0/0 .rodata @3853 */ -#pragma push -#pragma force_active on -SECTION_RODATA static f32 const lit_3853 = 1.0f / 50.0f; -COMPILER_STRIP_GATE(0x804D1698, &lit_3853); -#pragma pop - -/* 804D169C-804D16A0 0000AC 0004+00 0/4 0/0 0/0 .rodata @3854 */ -#pragma push -#pragma force_active on -SECTION_RODATA static f32 const lit_3854 = 5.0f; -COMPILER_STRIP_GATE(0x804D169C, &lit_3854); -#pragma pop - /* 804CEE50-804CF098 000790 0248+00 1/1 0/0 0/0 .text BinAction__13daObjYOUSEI_cFv */ void daObjYOUSEI_c::BinAction() { - // NONMATCHING + switch (mMode) { + case 0: + mAngleTarget = yREG_F(17) + (f32)(cLib_targetAngleY(sLink_Pos, ¤t.pos) - 0x3000); + mSpeedVTarget = 1.5f + nREG_F(18); + speedF = 2.0f; + mSpeedFTarget = 10.0f; + mMode++; + mpModelMorf->setPlaySpeed(0.4f); + mTimers[0] = 7.0f + nREG_F(12); + break; + case 1: + if (mpModelMorf->checkFrame(7.0f)) { + mpModelMorf->setFrame(0.0f); + mSpeedVTarget = 1.0f; + } + + if (mpModelMorf->checkFrame(4.5f + yREG_F(12))) { + mSpeedVTarget = -2.0f + BREG_F(6); + } + + if (mTimers[0] == 0) { + CareAction(); + } + break; + } + + cXyz sp18(1.0f, 1.0f, 1.0f); + cLib_addCalcPos2(&scale, sp18, 0.05f + nREG_F(16), 10.0f); + cLib_addCalc(&speed.y, mSpeedVTarget, 0.2f, 25.0f + yREG_F(11), 0.0f); + cLib_addCalc(&speedF, mSpeedFTarget, 0.02f + yREG_F(7), 5.0f, 0.0f); + cLib_addCalcAngleS2(¤t.angle.y, mAngleTarget, 3, 0x1000); + + field_0x604 = dComIfGp_particle_set(field_0x604, 0x72F, ¤t.pos, &tevStr, &shape_angle, NULL, 0xFF, NULL, -1, NULL, NULL, NULL); + field_0x608 = dComIfGp_particle_set(field_0x608, 0x731, ¤t.pos, &tevStr, &shape_angle, NULL, 0xFF, NULL, -1, NULL, NULL, NULL); } -/* ############################################################################################## */ -/* 804D16A0-804D16A8 0000B0 0008+00 0/2 0/0 0/0 .rodata @3996 */ -#pragma push -#pragma force_active on -SECTION_RODATA static u8 const lit_3996[8] = { - 0x3F, 0xE0, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, -}; -COMPILER_STRIP_GATE(0x804D16A0, &lit_3996); -#pragma pop - -/* 804D16A8-804D16B0 0000B8 0008+00 0/2 0/0 0/0 .rodata @3997 */ -#pragma push -#pragma force_active on -SECTION_RODATA static u8 const lit_3997[8] = { - 0x40, 0x08, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, -}; -COMPILER_STRIP_GATE(0x804D16A8, &lit_3997); -#pragma pop - -/* 804D16B0-804D16B8 0000C0 0008+00 0/2 0/0 0/0 .rodata @3998 */ -#pragma push -#pragma force_active on -SECTION_RODATA static u8 const lit_3998[8] = { - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, -}; -COMPILER_STRIP_GATE(0x804D16B0, &lit_3998); -#pragma pop - -/* 804D16B8-804D16BC 0000C8 0004+00 0/1 0/0 0/0 .rodata @3999 */ -#pragma push -#pragma force_active on -SECTION_RODATA static f32 const lit_3999 = 500.0f; -COMPILER_STRIP_GATE(0x804D16B8, &lit_3999); -#pragma pop - -/* 804D16BC-804D16C0 0000CC 0004+00 0/3 0/0 0/0 .rodata @4000 */ -#pragma push -#pragma force_active on -SECTION_RODATA static f32 const lit_4000 = 80.0f; -COMPILER_STRIP_GATE(0x804D16BC, &lit_4000); -#pragma pop - -/* 804D16C0-804D16C4 0000D0 0004+00 0/2 0/0 0/0 .rodata @4001 */ -#pragma push -#pragma force_active on -SECTION_RODATA static f32 const lit_4001 = 29.0f / 50.0f; -COMPILER_STRIP_GATE(0x804D16C0, &lit_4001); -#pragma pop - -/* 804D16C4-804D16C8 0000D4 0004+00 0/2 0/0 0/0 .rodata @4002 */ -#pragma push -#pragma force_active on -SECTION_RODATA static f32 const lit_4002 = 7.0f / 20.0f; -COMPILER_STRIP_GATE(0x804D16C4, &lit_4002); -#pragma pop - -/* 804D16C8-804D16CC 0000D8 0004+00 1/4 0/0 0/0 .rodata @4003 */ -SECTION_RODATA static f32 const lit_4003 = 200.0f; -COMPILER_STRIP_GATE(0x804D16C8, &lit_4003); - -/* 804D16CC-804D16D0 0000DC 0004+00 0/1 0/0 0/0 .rodata @4004 */ -#pragma push -#pragma force_active on -SECTION_RODATA static f32 const lit_4004 = 51.0f / 100.0f; -COMPILER_STRIP_GATE(0x804D16CC, &lit_4004); -#pragma pop - -/* 804D16D0-804D16D4 0000E0 0004+00 2/7 0/0 0/0 .rodata @4005 */ -SECTION_RODATA static f32 const lit_4005 = 50.0f; -COMPILER_STRIP_GATE(0x804D16D0, &lit_4005); - /* 804D1830-804D1834 -00001 0004+00 2/3 0/0 0/0 .bss None */ /* 804D1830 0001+00 data_804D1830 None */ +static u8 data_804D1830; + /* 804D1831 0003+00 data_804D1831 None */ -static u8 struct_804D1830[4]; +static u8 data_804D1831; /* 804CF098-804CF6C4 0009D8 062C+00 1/1 0/0 0/0 .text LinkChk__13daObjYOUSEI_cFv */ void daObjYOUSEI_c::LinkChk() { - // NONMATCHING + daPy_py_c* player = daPy_getPlayerActorClass(); + cXyz& player_pos = fopAcM_GetPosition(player); + cXyz sp20; + cXyz sp14; + + if (current.pos.abs(player_pos) < 500.0f && 0.0f == fopAcM_GetSpeedF(player)) { + if (player->checkItemSwordEquip() && current.pos.y - player_pos.y < 130.0f && !player->checkAttentionLock() && (data_804D1830 == 0 || field_0x5ac != 0)) { + data_804D1830 = 1; + field_0x5ac = 1; + + sp20.set(30.0f + yREG_F(8), 80.0f + yREG_F(9), yREG_F(10)); + MTXCopy(daPy_getLinkPlayerActorClass()->getModelJointMtx(9), *calc_mtx); + MtxPosition(&sp20, &sp14); + + mAngleTarget = cLib_targetAngleY(¤t.pos, &sp14); + cLib_addCalcAngleS2(¤t.angle.y, mAngleTarget, 10, 0x500); + + if (current.pos.y - sp14.y < 0.0f) { + mAnmSpeed = 0.58f; + } else { + mAnmSpeed = 0.35f; + } + + if (current.pos.abs(sp14) < 30.0f + TREG_F(2)) { + mAction = 3; + mMode = 0; + } + + field_0x5f8 = sp14; + } else if ((data_804D1831 == 0 || field_0x5ad != 0) && current.pos.y - player_pos.y > 130.0f && current.pos.y - player_pos.y < 200.0f) { + data_804D1831 = 1; + field_0x5ad = 1; + mAnmSpeed = 0.50999999f; + sp14 = player->getHeadTopPos(); + mAngleTarget = cLib_targetAngleY(¤t.pos, &sp14); + field_0x61a = -0xE90; + + if (current.pos.y > 5.0f + sp14.y && current.pos.y < 50.0f + sp14.y) { + cLib_addCalcAngleS2(¤t.angle.y, mAngleTarget, 2, 0x600); + } + + if (current.pos.abs(sp14) < 50.0f + TREG_F(2) && current.pos.y > sp14.y && (current.angle.y - mAngleTarget) < 0x2000 && (current.angle.y - mAngleTarget) > -0x2000) { + mAction = 3; + mMode = 2; + } + + field_0x5f8 = sp14; + } else if (field_0x5ac != 0) { + data_804D1830 = 0; + field_0x5ac = 0; + } else if (field_0x5ad != 0) { + data_804D1831 = 0; + field_0x5ad = 0; + } + } else { + if (field_0x5ac != 0) { + data_804D1830 = 0; + field_0x5ac = 0; + } else if (field_0x5ad != 0) { + data_804D1831 = 0; + field_0x5ad = 0; + } + } } -/* ############################################################################################## */ -/* 804D16D4-804D16D8 0000E4 0004+00 0/1 0/0 0/0 .rodata @4187 */ -#pragma push -#pragma force_active on -SECTION_RODATA static f32 const lit_4187 = 15.0f; -COMPILER_STRIP_GATE(0x804D16D4, &lit_4187); -#pragma pop - -/* 804D16D8-804D16DC 0000E8 0004+00 0/2 0/0 0/0 .rodata @4188 */ -#pragma push -#pragma force_active on -SECTION_RODATA static f32 const lit_4188 = 6.0f; -COMPILER_STRIP_GATE(0x804D16D8, &lit_4188); -#pragma pop - -/* 804D16DC-804D16E0 0000EC 0004+00 0/1 0/0 0/0 .rodata @4189 */ -#pragma push -#pragma force_active on -SECTION_RODATA static f32 const lit_4189 = 0.25f; -COMPILER_STRIP_GATE(0x804D16DC, &lit_4189); -#pragma pop - -/* 804D16E0-804D16E4 0000F0 0004+00 0/1 0/0 0/0 .rodata @4190 */ -#pragma push -#pragma force_active on -SECTION_RODATA static f32 const lit_4190 = 13.0f; -COMPILER_STRIP_GATE(0x804D16E0, &lit_4190); -#pragma pop - -/* 804D16E4-804D16E8 0000F4 0004+00 0/2 0/0 0/0 .rodata @4191 */ -#pragma push -#pragma force_active on -SECTION_RODATA static f32 const lit_4191 = 150.0f; -COMPILER_STRIP_GATE(0x804D16E4, &lit_4191); -#pragma pop - -/* 804D16E8-804D16EC 0000F8 0004+00 0/1 0/0 0/0 .rodata @4192 */ -#pragma push -#pragma force_active on -SECTION_RODATA static f32 const lit_4192 = 2.5f; -COMPILER_STRIP_GATE(0x804D16E8, &lit_4192); -#pragma pop - -/* 804D16EC-804D16F0 0000FC 0004+00 0/1 0/0 0/0 .rodata @4193 */ -#pragma push -#pragma force_active on -SECTION_RODATA static u32 const lit_4193 = 0x3F666667; -COMPILER_STRIP_GATE(0x804D16EC, &lit_4193); -#pragma pop - -/* 804D16F0-804D16F4 000100 0004+00 0/1 0/0 0/0 .rodata @4194 */ -#pragma push -#pragma force_active on -SECTION_RODATA static f32 const lit_4194 = 250.0f; -COMPILER_STRIP_GATE(0x804D16F0, &lit_4194); -#pragma pop - -/* 804D16F4-804D16F8 000104 0004+00 0/1 0/0 0/0 .rodata @4195 */ -#pragma push -#pragma force_active on -SECTION_RODATA static f32 const lit_4195 = 13.0f / 20.0f; -COMPILER_STRIP_GATE(0x804D16F4, &lit_4195); -#pragma pop - -/* 804D16F8-804D16FC 000108 0004+00 0/1 0/0 0/0 .rodata @4196 */ -#pragma push -#pragma force_active on -SECTION_RODATA static f32 const lit_4196 = 20.0f; -COMPILER_STRIP_GATE(0x804D16F8, &lit_4196); -#pragma pop - -/* 804D16FC-804D1700 00010C 0004+00 0/2 0/0 0/0 .rodata @4197 */ -#pragma push -#pragma force_active on -SECTION_RODATA static f32 const lit_4197 = -100.0f; -COMPILER_STRIP_GATE(0x804D16FC, &lit_4197); -#pragma pop - -/* 804D1700-804D1704 000110 0004+00 0/1 0/0 0/0 .rodata @4198 */ -#pragma push -#pragma force_active on -SECTION_RODATA static f32 const lit_4198 = 26.0f; -COMPILER_STRIP_GATE(0x804D1700, &lit_4198); -#pragma pop - /* 804CF6C4-804CFCE8 001004 0624+00 1/1 0/0 0/0 .text WaitAction__13daObjYOUSEI_cFv */ void daObjYOUSEI_c::WaitAction() { - // NONMATCHING + u8 sp18 = 0; + f32 var_f30 = 0.0f; + f32 anm_frame = mpModelMorf->getFrame(); + f32 var_f28 = 0.0f; + f32 var_f29 = 0.0f; + f32 var_f31 = 0.0f; + + daPy_py_c* player = daPy_getPlayerActorClass(); + if (dComIfGs_getLife() != dComIfGs_getMaxLifeGauge() && 0.0f != fopAcM_GetSpeedF(player) && LinkSearch()) { + var_f30 = 1.0f + nREG_F(1); + var_f28 = 50.0f + nREG_F(3); + mTimers[0] = 150; + var_f31 = 15.0f; + var_f29 = 5.0f; + } + + cXyz sp40; + cXyz sp34; + switch (mMode) { + case 0: + mMode++; + mSpeedFTarget = 5.0f; + mTimers[1] = 30; + break; + case 1: + if (mpModelMorf->checkFrame(7.0f)) { + mpModelMorf->setFrame(0.0f); + + if (mTimers[0] == 0) { + mTimers[0] = 30.0f + cM_rndF(40.0f); + mAnmSpeed = 0.3f + var_f30 + yREG_F(6) + cM_rndF((0.3f - var_f30) + yREG_F(5)); + mpModelMorf->setPlaySpeed(mAnmSpeed); + } + + mSpeedVTarget = (6.0f + yREG_F(1)) * ((mAnmSpeed - 0.25f) + yREG_F(13)); + mSpeedFTarget = (13.0f + yREG_F(8)) * ((mAnmSpeed - 0.25f) + yREG_F(14)); + + if (current.pos.y > 150.0f + home.pos.y + var_f28) { + mAnmSpeed = 0.35f; + mTimers[0] = 30; + mpModelMorf->setPlaySpeed(mAnmSpeed); + } else if (current.pos.y < 80.0f + home.pos.y) { + mAnmSpeed = 0.58f; + mTimers[0] = 30; + mpModelMorf->setPlaySpeed(mAnmSpeed); + } + } + + if (mpModelMorf->checkFrame(4.5f + yREG_F(12))) { + mSpeedVTarget = -2.0f + yREG_F(3); + } + + if (field_0x5d6 == 0 && mPrm == 5) { + mMode++; + field_0x5d6 = 100; + mSpeedVTarget = 2.5f; + mSpeedFTarget = 6.0f; + mAnmSpeed = 0.90000004f; + mpModelMorf->setPlaySpeed(mAnmSpeed); + } + break; + case 2: + if (field_0x5d6 == 0 && current.pos.y - sLink_Pos->y > 250.0f) { + JPABaseEmitter* emitter = dComIfGp_particle_getEmitter(field_0x604); + emitter->deleteAllParticle(); + dComIfGp_particle_levelEmitterOnEventMove(field_0x604); + sp18 = 1; + fopAcM_delete(this); + } + + if (mpModelMorf->checkFrame(7.0f)) { + mpModelMorf->setFrame(0.0f); + mSpeedVTarget = 3.0f + yREG_F(4); + } + + if (mpModelMorf->checkFrame(4.5f + yREG_F(12))) { + mSpeedVTarget = -2.0f + yREG_F(3); + } + break; + } + + if (mTimers[2] > 0) { + var_f31 = 15.0f; + var_f29 = 10.0f + TREG_F(0); + mAnmSpeed = 0.65f + TREG_F(1); + mpModelMorf->setPlaySpeed(mAnmSpeed); + } + + if (mTimers[1] == 0) { + mTimers[1] = (30.0f + nREG_F(2) + cM_rndF(20.0f - var_f31)) - var_f31; + + sp40 = home.pos - current.pos; + sp40.x += cM_rndFX(200.0f + nREG_F(10)); + sp40.z += cM_rndFX(200.0f + nREG_F(10)); + mAngleTarget = cM_atan2s(sp40.x, sp40.z); + } + + cLib_addCalc(&speed.y, mSpeedVTarget, 0.2f, 25.0f + yREG_F(11), 0.0f); + cLib_addCalc(&speedF, mSpeedFTarget, 0.02f + yREG_F(7), 5.0f, 0.0f); + + if (eventInfo.checkCommandCatch()) { + JPABaseEmitter* emitter = dComIfGp_particle_getEmitter(field_0x604); + emitter->deleteAllParticle(); + dComIfGp_particle_levelEmitterOnEventMove(field_0x604); + + emitter = dComIfGp_particle_getEmitter(field_0x608); + emitter->deleteAllParticle(); + dComIfGp_particle_levelEmitterOnEventMove(field_0x608); + + sp18 = 1; + data_804D1831 = 0; + data_804D1830 = 0; + fopAcM_delete(this); + } else { + dComIfGp_att_CatchRequest(this, fpcNm_ITEM_FAIRY, 150.0f, 50.0f, -100.0f, 0x5000, 1); + eventInfo.onCondition(0x40); + } + + if (sp18 == 0) { + field_0x604 = dComIfGp_particle_set(field_0x604, 0x72F, ¤t.pos, &tevStr, &shape_angle, NULL, 0xFF, NULL, -1, NULL, NULL, NULL); + field_0x608 = dComIfGp_particle_set(field_0x608, 0x731, ¤t.pos, &tevStr, &shape_angle, NULL, 0xFF, NULL, -1, NULL, NULL, NULL); + } + + if (mTimers[3] == 0) { + if (dComIfGs_getLife() == dComIfGs_getMaxLifeGauge()) { + if (field_0x5d6 != 0 && mPrm == 5) { + LinkChk(); + } else { + LinkChk(); + } + } + } + + cLib_addCalcAngleS2(¤t.angle.y, mAngleTarget, (26.0f - var_f29) + nREG_S(0), (field_0x61a + 0x1000)); } -/* ############################################################################################## */ -/* 804D1704-804D1708 000114 0004+00 0/1 0/0 0/0 .rodata @4394 */ -#pragma push -#pragma force_active on -SECTION_RODATA static f32 const lit_4394 = 0.5f; -COMPILER_STRIP_GATE(0x804D1704, &lit_4394); -#pragma pop - -/* 804D1708-804D170C 000118 0004+00 0/1 0/0 0/0 .rodata @4395 */ -#pragma push -#pragma force_active on -SECTION_RODATA static u32 const lit_4395 = 0x3A83126F; -COMPILER_STRIP_GATE(0x804D1708, &lit_4395); -#pragma pop - /* 804CFCE8-804D057C 001628 0894+00 1/1 0/0 0/0 .text LinkAction__13daObjYOUSEI_cFv */ void daObjYOUSEI_c::LinkAction() { - // NONMATCHING + u8 sp18 = 0; + daPy_py_c* player = daPy_getPlayerActorClass(); + cXyz& player_pos = fopAcM_GetPosition(player); + cXyz sp44(30.0f + yREG_F(8), 80.0f + yREG_F(9), yREG_F(10)); + cXyz sp38; + + MTXCopy(daPy_getLinkPlayerActorClass()->getModelJointMtx(9), *calc_mtx); + MtxPosition(&sp44, &sp38); + + switch (mMode) { + case 0: + sp38.y += 5.0f; + mAngleTarget = cLib_targetAngleY(¤t.pos, &sp38); + mAnmSpeed = 0.5f; + + if (cLib_chasePos(¤t.pos, sp38, speedF)) { + speedF = 0.0f; + mSpeedFTarget = 0.0f; + mTimers[0] = 200; + mMode++; + } + + if (!player->checkItemSwordEquip() || sp38.abs(field_0x5f8) > 6.0f) { + mAction = 0; + mMode = 0; + mTimers[2] = 80.0f + TREG_F(3); + mTimers[3] = 100; + mTimers[1] = 0; + data_804D1830 = 0; + field_0x5ac = 0; + } + + mpModelMorf->setPlaySpeed(mAnmSpeed); + break; + case 1: + sp38.y += 5.0f; + + if (mTimers[0] < 100) { + if (mpModelMorf->checkFrame(0.0f)) { + mAnmSpeed = 0.0f; + } + } else { + cLib_addCalc2(&mAnmSpeed, 0.3f, 0.05f, 0.001f); + } + + mpModelMorf->setPlaySpeed(mAnmSpeed); + + if (mTimers[0] == 0) { + mAction = 0; + mMode = 0; + mTimers[2] = 80.0f + TREG_F(3); + mTimers[3] = 100; + mTimers[1] = 0; + data_804D1830 = 0; + field_0x5ac = 0; + } + + cLib_chasePos(¤t.pos, sp38, 3.0f); + + if (!player->checkItemSwordEquip() || sp38.abs(field_0x5f8) > 2.0f) { + mAction = 0; + mMode = 0; + mTimers[2] = 80.0f + TREG_F(3); + mTimers[3] = 100; + mTimers[1] = 0; + data_804D1830 = 0; + field_0x5ac = 0; + } + break; + case 2: + mAnmSpeed = 0.5f; + sp38 = player->getHeadTopPos(); + sp38.y += 5.0f; + + mAngleTarget = cLib_targetAngleY(¤t.pos, &sp38); + mSpeedFTarget = 2.0f; + cLib_addCalc2(&speedF, mSpeedFTarget, 0.2f + yREG_F(7), 5.0f); + + if (cLib_chasePos(¤t.pos, sp38, speedF)) { + speedF = 0.0f; + mSpeedFTarget = 0.0f; + mTimers[0] = 200; + mMode++; + } + + cLib_addCalcAngleS2(¤t.angle.y, mAngleTarget, 2, 0x400); + mpModelMorf->setPlaySpeed(mAnmSpeed); + break; + case 3: + if (mTimers[0] < 100) { + if (mpModelMorf->checkFrame(0.0f)) { + mAnmSpeed = 0.0f; + } + } else { + cLib_addCalc2(&mAnmSpeed, 0.3f, 0.05f, 0.001f); + } + + sp38 = player->getHeadTopPos(); + sp38.y += 5.0f; + mpModelMorf->setPlaySpeed(mAnmSpeed); + + if (mTimers[0] == 0) { + mAction = 0; + mMode = 0; + mTimers[2] = 80.0f + TREG_F(3); + mTimers[3] = 100; + mTimers[1] = 0; + data_804D1831 = 0; + field_0x5ad = 0; + } + + cLib_chasePos(¤t.pos, sp38, 3.0f); + + if (sp38.abs(field_0x5f8) > 2.0f) { + mAction = 0; + mMode = 0; + mTimers[2] = 80.0f + TREG_F(3); + mTimers[3] = 100; + mTimers[1] = 0; + data_804D1831 = 0; + field_0x5ad = 0; + } + break; + } + + if (eventInfo.checkCommandCatch()) { + dComIfGp_particle_getEmitter(field_0x604)->deleteAllParticle(); + dComIfGp_particle_levelEmitterOnEventMove(field_0x604); + dComIfGp_particle_getEmitter(field_0x608)->deleteAllParticle(); + dComIfGp_particle_levelEmitterOnEventMove(field_0x608); + sp18 = 1; + data_804D1831 = 0; + data_804D1830 = 0; + fopAcM_delete(this); + } else { + dComIfGp_att_CatchRequest(this, fpcNm_ITEM_FAIRY, 150.0f, 50.0f, -100.0f, 0x5000, 1); + eventInfo.onCondition(0x40); + } + + if (sp18 == 0) { + field_0x604 = dComIfGp_particle_set(field_0x604, 0x72F, ¤t.pos, &tevStr, &shape_angle, NULL, 0xFF, NULL, -1, NULL, NULL, NULL); + field_0x608 = dComIfGp_particle_set(field_0x608, 0x731, ¤t.pos, &tevStr, &shape_angle, NULL, 0xFF, NULL, -1, NULL, NULL, NULL); + } + + field_0x5f8 = sp38; } -/* ############################################################################################## */ -/* 804D170C-804D1710 00011C 0004+00 0/1 0/0 0/0 .rodata @4419 */ -#pragma push -#pragma force_active on -SECTION_RODATA static f32 const lit_4419 = -200.0f; -COMPILER_STRIP_GATE(0x804D170C, &lit_4419); -#pragma pop - /* 804D057C-804D065C 001EBC 00E0+00 1/1 0/0 0/0 .text LinkSearch__13daObjYOUSEI_cFv */ -void daObjYOUSEI_c::LinkSearch() { - // NONMATCHING +bool daObjYOUSEI_c::LinkSearch() { + if (mDistToPlayer < 200.0f) { + f32 var_f31; + if (WayBgCheck(200.0f, 100.0f, mAngleToPlayer + 0x8000)) { + var_f31 = -200.0f; + } else { + var_f31 = 100.0f; + } + + cXyz sp14(0.0f, 0.0f, var_f31); + mDoMtx_stack_c::YrotS(mAngleToPlayer + 0x8000); + cXyz sp8; + mDoMtx_stack_c::multVec(&sp14, &sp8); + home.pos.set(current.pos.x + sp8.x, home.pos.y, current.pos.z + sp8.z); + return true; + } + + return false; } /* 804D065C-804D0780 001F9C 0124+00 1/1 0/0 0/0 .text WayBgCheck__13daObjYOUSEI_cFffs */ -void daObjYOUSEI_c::WayBgCheck(f32 param_0, f32 param_1, s16 param_2) { - // NONMATCHING -} +bool daObjYOUSEI_c::WayBgCheck(f32 param_0, f32 param_1, s16 param_2) { + dBgS_LinChk line_chk; + cXyz sp2C; + cXyz sp20; + cXyz sp14; -/* ############################################################################################## */ -/* 804D1710-804D1714 000120 0004+00 1/1 0/0 0/0 .rodata @4462 */ -SECTION_RODATA static f32 const lit_4462 = 7.0f / 10.0f; -COMPILER_STRIP_GATE(0x804D1710, &lit_4462); + sp20 = current.pos; + sp20.y += param_1; + cMtx_YrotS(*calc_mtx, param_2); + sp2C.x = 0.0f; + sp2C.y = 50.0f; + sp2C.z = param_0; + MtxPosition(&sp2C, &sp14); + sp14 += current.pos; + line_chk.Set(&sp20, &sp14, NULL); + + if (dComIfG_Bgsp().LineCross(&line_chk)) { + return true; + } + + return false; +} /* 804D0780-804D080C 0020C0 008C+00 4/4 0/0 0/0 .text CareAction__13daObjYOUSEI_cFv */ void daObjYOUSEI_c::CareAction() { - // NONMATCHING + daPy_py_c* player = daPy_getPlayerActorClass(); + if (player->checkNowWolf()) { + field_0x5e8 = 0.7f + yREG_F(18); + } else { + field_0x5e8 = 1.0f; + } + + mAction = 1; + mMode = 0; + field_0x5ae = 1; + mSound.startCreatureSound(Z2SE_FAIRY_S_FLY_RTT, 0, -1); } -/* ############################################################################################## */ -/* 804D1714-804D1718 000124 0004+00 1/2 0/0 0/0 .rodata @4482 */ -SECTION_RODATA static f32 const lit_4482 = -1000000000.0f; -COMPILER_STRIP_GATE(0x804D1714, &lit_4482); +/* 804D080C-804D0910 00214C 0104+00 2/2 0/0 0/0 .text CheckGround__13daObjYOUSEI_cFv */ +void daObjYOUSEI_c::CheckGround() { + dBgS_ObjGndChk_All gnd_chk; + cXyz pos(current.pos.x, 100.0f + current.pos.y, current.pos.z); + gnd_chk.SetPos(&pos); + + pos.y = dComIfG_Bgsp().GroundCross(&gnd_chk); + if (pos.y != -1000000000.0f) { + home.pos.y = pos.y; + } +} + +/* 804D0988-804D0AD0 0022C8 0148+00 1/1 0/0 0/0 .text CheckWater__13daObjYOUSEI_cFv */ +bool daObjYOUSEI_c::CheckWater() { + dBgS_ObjGndChk_All gnd_chk; + cXyz pos(current.pos.x, 100.0f + current.pos.y, current.pos.z); + gnd_chk.SetPos(&pos); + pos.y = dComIfG_Bgsp().GroundCross(&gnd_chk); + + if (-1000000000.0f != pos.y && dComIfG_Bgsp().GetPolyAtt0(gnd_chk) == 7 && current.pos.y - pos.y < 50.0f+ yREG_F(0)) { + return true; + } + + return false; +} + +/* 804D0AD0-804D0CCC 002410 01FC+00 1/1 0/0 0/0 .text Action__13daObjYOUSEI_cFv */ +void daObjYOUSEI_c::Action() { + switch (mAction) { + case 0: + field_0x61a = 0; + WaitAction(); + SpeedSet(); + SetCcSph(); + ObjHit(); + + if (field_0x5af != 0) { + if (mBoomerangMove.posMove(¤t.pos, &shape_angle.y, NULL, 0x1C00)) { + mBoomerangMove.bgCheckAfterOffset(¤t.pos); + } else { + field_0x5af = 0; + if (dComIfGs_getLife() != dComIfGs_getMaxLifeGauge()) { + CareAction(); + } + home.pos = current.pos; + CheckGround(); + } + } + + mAcch.CrrPos(dComIfG_Bgsp()); + + if (mDistToPlayer < 50.0f && current.pos.y - sLink_Pos->y < 200.0f) { + if (dComIfGs_getLife() != dComIfGs_getMaxLifeGauge()) { + CareAction(); + field_0x5af = 0; + } + } + + if (fopAcM_checkHookCarryNow(this)) { + if (CheckWater()) { + fopAcM_cancelHookCarryNow(this); + } + home.pos = current.pos; + CheckGround(); + } + break; + case 1: + MoveAction(); + break; + case 2: + BinAction(); + SpeedSet(); + break; + case 3: + LinkAction(); + break; + } + + shape_angle.y = current.angle.y; +} + +/* 804D0CCC-804D0DF0 00260C 0124+00 1/1 0/0 0/0 .text ObjHit__13daObjYOUSEI_cFv */ +void daObjYOUSEI_c::ObjHit() { + if (mCcSph.ChkTgHit()) { + cCcD_Obj* hit_obj = mCcSph.GetTgHitObj(); + if (hit_obj->ChkAtType(AT_TYPE_BOOMERANG)) { + if (field_0x5af == 0) { + field_0x5af = 1; + mAcch.ClrMoveBGOnly(); + mAcch.ClrGrndNone(); + mCcSph.GetTgHitGObj(); + mBoomerangMove.initOffset(¤t.pos); + } + } else if (hit_obj->ChkAtType(AT_TYPE_NORMAL_SWORD)) { + if (mDistToPlayer < 130.0f + TREG_F(5) && dComIfGs_getLife() != dComIfGs_getMaxLifeGauge()) { + CareAction(); + } else { + mTimers[2] = 80.0f + TREG_F(3); + } + } else { + if (dComIfGs_getLife() != dComIfGs_getMaxLifeGauge()) { + CareAction(); + } + } + + mCcSph.ClrTgHit(); + } +} + +/* 804D0DF0-804D0F98 002730 01A8+00 1/1 0/0 0/0 .text Execute__13daObjYOUSEI_cFv */ +int daObjYOUSEI_c::Execute() { + sLink_Pos = &fopAcM_GetPosition(daPy_getPlayerActorClass()); + mDistToPlayer = fopAcM_searchPlayerDistanceXZ(this); + mAngleToPlayer = fopAcM_searchPlayerAngleY(this); + attention_info.position = current.pos; + eyePos = current.pos; + eyePos.y += 10.0f; + + mSound.startCreatureSoundLevel(Z2SE_FAIRY_S_LV, 0, -1); + + if (mpModelMorf->checkFrame(1.0f) && mAnmSpeed > 0.0f) { + mSound.startCreatureSound(Z2SE_FAIRY_S_FLY, 100.0f * mAnmSpeed, -1); + } + + for (int i = 0; i < 4; i++) { + if (mTimers[i] != 0) { + mTimers[i]--; + } + } + + if (field_0x5d6 != 0) { + field_0x5d6--; + } + + Action(); + mpModelMorf->play(0, dComIfGp_getReverb(fopAcM_GetRoomNo(this))); + setBaseMtx(); + return 1; +} + +/* 804D0F98-804D0FCC 0028D8 0034+00 1/1 0/0 0/0 .text Delete__13daObjYOUSEI_cFv */ +int daObjYOUSEI_c::Delete() { + if (heap != NULL) { + mpModelMorf->stopZelAnime(); + } + + return 1; +} + +/* 804D0FCC-804D1040 00290C 0074+00 1/1 0/0 0/0 .text setBaseMtx__13daObjYOUSEI_cFv */ +void daObjYOUSEI_c::setBaseMtx() { + cXyz sp8(0.2f, 0.2f, 0.2f); + mDoMtx_stack_c::transS(current.pos); + mDoMtx_stack_c::ZXYrotM(shape_angle); + mDoMtx_stack_c::scaleM(scale); + mpModelMorf->getModel()->setBaseTRMtx(mDoMtx_stack_c::get()); + mpModelMorf->modelCalc(); +} + +int daObjYOUSEI_c::Draw() { + J3DModel* model = mpModelMorf->getModel(); + g_env_light.settingTevStruct(0, ¤t.pos, &tevStr); + g_env_light.setLightTevColorType_MAJI(model, &tevStr); + mpModelMorf->entryDL(); + + cXyz sp8; + sp8.set(current.pos.x, 100.0f + current.pos.y, current.pos.z); + dComIfGd_setSimpleShadow(¤t.pos, mAcch.GetGroundH(), 25.0f, mAcch.m_gnd, 0, 0.8f, dDlst_shadowControl_c::getSimpleTex()); + return 1; +} + +/* 804D1040-804D10FC 002980 00BC+00 1/0 0/0 0/0 .text daObjYOUSEI_Draw__FP13daObjYOUSEI_c + */ +static int daObjYOUSEI_Draw(daObjYOUSEI_c* i_this) { + return i_this->Draw(); +} + +/* 804D10FC-804D111C 002A3C 0020+00 2/1 0/0 0/0 .text daObjYOUSEI_Execute__FP13daObjYOUSEI_c */ +static int daObjYOUSEI_Execute(daObjYOUSEI_c* i_this) { + return i_this->Execute(); +} + +/* 804D111C-804D149C 002A5C 0380+00 1/1 0/0 0/0 .text create__13daObjYOUSEI_cFv */ +int daObjYOUSEI_c::create() { + fopAcM_SetupActor(this, daObjYOUSEI_c); + + OS_REPORT("YOUSEI PARAM %x\n", fopAcM_GetParam()); + if (!fopAcM_entrySolidHeap(this, useHeapInit, 0x1100)) { + return cPhs_ERROR_e; + } + + mPrm = fopAcM_GetParam(this); + switch (mPrm) { + case 0: + mPrm = 0; + break; + case 1: + if (!dComIfGs_isEventBit(dSv_event_flag_c::saveBitLabels[501])) { + return cPhs_ERROR_e; + } + mPrm = 1; + break; + case 2: + mPrm = 2; + if (!dComIfGs_isEventBit(dSv_event_flag_c::saveBitLabels[502])) { + return cPhs_ERROR_e; + } + break; + case 3: + mPrm = 3; + if (!dComIfGs_isEventBit(dSv_event_flag_c::saveBitLabels[503])) { + return cPhs_ERROR_e; + } + break; + case 4: + mPrm = 4; + if (!dComIfGs_isEventBit(dSv_event_flag_c::saveBitLabels[504])) { + return cPhs_ERROR_e; + } + break; + default: + mPrm = 5; + break; + } + + gravity = nREG_F(0); + mAction = 0; + mMode = 0; + + mTimers[2] = 80.0f + TREG_F(3); + mAcchCir.SetWall(100.0f, 30.0f); + mAcch.Set(fopAcM_GetPosition_p(this), fopAcM_GetOldPosition_p(this), this, 1, &mAcchCir, fopAcM_GetSpeed_p(this), NULL, NULL); + + fopAcM_SetMtx(this, mpModelMorf->getModel()->getBaseTRMtx()); + fopAcM_SetMin(this, -50.0f, -50.0f, -50.0f); + fopAcM_SetMax(this, 50.0f, 50.0f, 50.0f); + + InitCcSph(); + mSound.init(¤t.pos, &eyePos, 3, 1); + + if (mPrm == 0) { + execItemGet(fpcNm_ITEM_RECOVERY_FAILY); + CareAction(); + scale.set(0.2f, 0.2f, 0.2f); + } else { + current.pos.y += 50.0f; + field_0x5d6 = 1500; + } + + CheckGround(); + field_0x61a = 0; + daObjYOUSEI_Execute(this); + return cPhs_COMPLEATE_e; +} + +/* 804D159C-804D15A4 002EDC 0008+00 1/0 0/0 0/0 .text daObjYOUSEI_IsDelete__FP13daObjYOUSEI_c */ +static int daObjYOUSEI_IsDelete(daObjYOUSEI_c* i_this) { + return 1; +} /* 804D1728-804D1748 -00001 0020+00 1/0 0/0 0/0 .data l_daObjYOUSEI_Method */ static actor_method_class l_daObjYOUSEI_Method = { - (process_method_func)daObjYOUSEI_Create__FP10fopAc_ac_c, - (process_method_func)daObjYOUSEI_Delete__FP13daObjYOUSEI_c, - (process_method_func)daObjYOUSEI_Execute__FP13daObjYOUSEI_c, - (process_method_func)daObjYOUSEI_IsDelete__FP13daObjYOUSEI_c, - (process_method_func)daObjYOUSEI_Draw__FP13daObjYOUSEI_c, + (process_method_func)daObjYOUSEI_Create, + (process_method_func)daObjYOUSEI_Delete, + (process_method_func)daObjYOUSEI_Execute, + (process_method_func)daObjYOUSEI_IsDelete, + (process_method_func)daObjYOUSEI_Draw, }; /* 804D1748-804D1778 -00001 0030+00 0/0 0/0 1/0 .data g_profile_Obj_Yousei */ @@ -746,346 +906,4 @@ extern actor_process_profile_definition g_profile_Obj_Yousei = { fopAc_CULLBOX_CUSTOM_e, // cullType }; -/* 804D1778-804D1784 000050 000C+00 2/2 0/0 0/0 .data __vt__8cM3dGSph */ -SECTION_DATA extern void* __vt__8cM3dGSph[3] = { - (void*)NULL /* RTTI */, - (void*)NULL, - (void*)__dt__8cM3dGSphFv, -}; - -/* 804D1784-804D1790 00005C 000C+00 2/2 0/0 0/0 .data __vt__8cM3dGAab */ -SECTION_DATA extern void* __vt__8cM3dGAab[3] = { - (void*)NULL /* RTTI */, - (void*)NULL, - (void*)__dt__8cM3dGAabFv, -}; - -/* 804D1790-804D17B4 000068 0024+00 2/2 0/0 0/0 .data __vt__12dBgS_ObjAcch */ -SECTION_DATA extern void* __vt__12dBgS_ObjAcch[9] = { - (void*)NULL /* RTTI */, - (void*)NULL, - (void*)__dt__12dBgS_ObjAcchFv, - (void*)NULL, - (void*)NULL, - (void*)func_804D15C4, - (void*)NULL, - (void*)NULL, - (void*)func_804D15BC, -}; - -/* 804D17B4-804D17E4 00008C 0030+00 3/3 0/0 0/0 .data __vt__14dBgS_ObjGndChk */ -SECTION_DATA extern void* __vt__14dBgS_ObjGndChk[12] = { - (void*)NULL /* RTTI */, - (void*)NULL, - (void*)__dt__14dBgS_ObjGndChkFv, - (void*)NULL, - (void*)NULL, - (void*)func_804D15A4, - (void*)NULL, - (void*)NULL, - (void*)func_804D15B4, - (void*)NULL, - (void*)NULL, - (void*)func_804D15AC, -}; - -/* 804D080C-804D0910 00214C 0104+00 2/2 0/0 0/0 .text CheckGround__13daObjYOUSEI_cFv */ -void daObjYOUSEI_c::CheckGround() { - // NONMATCHING -} - -/* 804D0910-804D0988 002250 0078+00 4/3 0/0 0/0 .text __dt__14dBgS_ObjGndChkFv */ -// dBgS_ObjGndChk::~dBgS_ObjGndChk() { -extern "C" void __dt__14dBgS_ObjGndChkFv() { - // NONMATCHING -} - -/* 804D0988-804D0AD0 0022C8 0148+00 1/1 0/0 0/0 .text CheckWater__13daObjYOUSEI_cFv */ -void daObjYOUSEI_c::CheckWater() { - // NONMATCHING -} - -/* 804D0AD0-804D0CCC 002410 01FC+00 1/1 0/0 0/0 .text Action__13daObjYOUSEI_cFv */ -void daObjYOUSEI_c::Action() { - // NONMATCHING -} - -/* 804D0CCC-804D0DF0 00260C 0124+00 1/1 0/0 0/0 .text ObjHit__13daObjYOUSEI_cFv */ -void daObjYOUSEI_c::ObjHit() { - // NONMATCHING -} - -/* 804D0DF0-804D0F98 002730 01A8+00 1/1 0/0 0/0 .text Execute__13daObjYOUSEI_cFv */ -void daObjYOUSEI_c::Execute() { - // NONMATCHING -} - -/* 804D0F98-804D0FCC 0028D8 0034+00 1/1 0/0 0/0 .text Delete__13daObjYOUSEI_cFv */ -void daObjYOUSEI_c::Delete() { - // NONMATCHING -} - -/* 804D0FCC-804D1040 00290C 0074+00 1/1 0/0 0/0 .text setBaseMtx__13daObjYOUSEI_cFv */ -void daObjYOUSEI_c::setBaseMtx() { - // NONMATCHING -} - -/* ############################################################################################## */ -/* 804D1718-804D171C 000128 0004+00 0/1 0/0 0/0 .rodata @4682 */ -#pragma push -#pragma force_active on -SECTION_RODATA static f32 const lit_4682 = 4.0f / 5.0f; -COMPILER_STRIP_GATE(0x804D1718, &lit_4682); -#pragma pop - -/* 804D1040-804D10FC 002980 00BC+00 1/0 0/0 0/0 .text daObjYOUSEI_Draw__FP13daObjYOUSEI_c - */ -static void daObjYOUSEI_Draw(daObjYOUSEI_c* param_0) { - // NONMATCHING -} - -/* 804D10FC-804D111C 002A3C 0020+00 2/1 0/0 0/0 .text daObjYOUSEI_Execute__FP13daObjYOUSEI_c */ -static void daObjYOUSEI_Execute(daObjYOUSEI_c* param_0) { - // NONMATCHING -} - -/* ############################################################################################## */ -/* 804D171C-804D1720 00012C 0004+00 0/1 0/0 0/0 .rodata @4796 */ -#pragma push -#pragma force_active on -SECTION_RODATA static f32 const lit_4796 = -50.0f; -COMPILER_STRIP_GATE(0x804D171C, &lit_4796); -#pragma pop - -/* 804D111C-804D149C 002A5C 0380+00 1/1 0/0 0/0 .text create__13daObjYOUSEI_cFv */ -void daObjYOUSEI_c::create() { - // NONMATCHING -} - -/* 804D149C-804D14E4 002DDC 0048+00 1/0 0/0 0/0 .text __dt__8cM3dGSphFv */ -// cM3dGSph::~cM3dGSph() { -extern "C" void __dt__8cM3dGSphFv() { - // NONMATCHING -} - -/* 804D14E4-804D152C 002E24 0048+00 1/0 0/0 0/0 .text __dt__8cM3dGAabFv */ -// cM3dGAab::~cM3dGAab() { -extern "C" void __dt__8cM3dGAabFv() { - // NONMATCHING -} - -/* 804D152C-804D159C 002E6C 0070+00 3/2 0/0 0/0 .text __dt__12dBgS_ObjAcchFv */ -// dBgS_ObjAcch::~dBgS_ObjAcch() { -extern "C" void __dt__12dBgS_ObjAcchFv() { - // NONMATCHING -} - -/* 804D159C-804D15A4 002EDC 0008+00 1/0 0/0 0/0 .text daObjYOUSEI_IsDelete__FP13daObjYOUSEI_c */ -static bool daObjYOUSEI_IsDelete(daObjYOUSEI_c* param_0) { - return true; -} - -/* 804D15A4-804D15AC 002EE4 0008+00 1/0 0/0 0/0 .text @20@__dt__14dBgS_ObjGndChkFv */ -static void func_804D15A4() { - // NONMATCHING -} - -/* 804D15AC-804D15B4 002EEC 0008+00 1/0 0/0 0/0 .text @76@__dt__14dBgS_ObjGndChkFv */ -static void func_804D15AC() { - // NONMATCHING -} - -/* 804D15B4-804D15BC 002EF4 0008+00 1/0 0/0 0/0 .text @60@__dt__14dBgS_ObjGndChkFv */ -static void func_804D15B4() { - // NONMATCHING -} - -/* 804D15BC-804D15C4 002EFC 0008+00 1/0 0/0 0/0 .text @36@__dt__12dBgS_ObjAcchFv */ -static void func_804D15BC() { - // NONMATCHING -} - -/* 804D15C4-804D15CC 002F04 0008+00 1/0 0/0 0/0 .text @20@__dt__12dBgS_ObjAcchFv */ -static void func_804D15C4() { - // NONMATCHING -} - -/* 804D15CC-804D15E8 002F0C 001C+00 2/2 0/0 0/0 .text getHeadTopPos__9daPy_py_cCFv */ -// void daPy_py_c::getHeadTopPos() const { -extern "C" void getHeadTopPos__9daPy_py_cCFv() { - // NONMATCHING -} - -/* ############################################################################################## */ -/* 804D1834-804D1838 00004C 0004+00 0/0 0/0 0/0 .bss - * sInstance__40JASGlobalInstance<19JASDefaultBankTable> */ -#pragma push -#pragma force_active on -static u8 data_804D1834[4]; -#pragma pop - -/* 804D1838-804D183C 000050 0004+00 0/0 0/0 0/0 .bss - * sInstance__35JASGlobalInstance<14JASAudioThread> */ -#pragma push -#pragma force_active on -static u8 data_804D1838[4]; -#pragma pop - -/* 804D183C-804D1840 000054 0004+00 0/0 0/0 0/0 .bss sInstance__27JASGlobalInstance<7Z2SeMgr> */ -#pragma push -#pragma force_active on -static u8 data_804D183C[4]; -#pragma pop - -/* 804D1840-804D1844 000058 0004+00 0/0 0/0 0/0 .bss sInstance__28JASGlobalInstance<8Z2SeqMgr> */ -#pragma push -#pragma force_active on -static u8 data_804D1840[4]; -#pragma pop - -/* 804D1844-804D1848 00005C 0004+00 0/0 0/0 0/0 .bss sInstance__31JASGlobalInstance<10Z2SceneMgr> - */ -#pragma push -#pragma force_active on -static u8 data_804D1844[4]; -#pragma pop - -/* 804D1848-804D184C 000060 0004+00 0/0 0/0 0/0 .bss sInstance__32JASGlobalInstance<11Z2StatusMgr> - */ -#pragma push -#pragma force_active on -static u8 data_804D1848[4]; -#pragma pop - -/* 804D184C-804D1850 000064 0004+00 0/0 0/0 0/0 .bss sInstance__31JASGlobalInstance<10Z2DebugSys> - */ -#pragma push -#pragma force_active on -static u8 data_804D184C[4]; -#pragma pop - -/* 804D1850-804D1854 000068 0004+00 0/0 0/0 0/0 .bss - * sInstance__36JASGlobalInstance<15JAISoundStarter> */ -#pragma push -#pragma force_active on -static u8 data_804D1850[4]; -#pragma pop - -/* 804D1854-804D1858 00006C 0004+00 0/0 0/0 0/0 .bss - * sInstance__35JASGlobalInstance<14Z2SoundStarter> */ -#pragma push -#pragma force_active on -static u8 data_804D1854[4]; -#pragma pop - -/* 804D1858-804D185C 000070 0004+00 0/0 0/0 0/0 .bss - * sInstance__33JASGlobalInstance<12Z2SpeechMgr2> */ -#pragma push -#pragma force_active on -static u8 data_804D1858[4]; -#pragma pop - -/* 804D185C-804D1860 000074 0004+00 0/0 0/0 0/0 .bss sInstance__28JASGlobalInstance<8JAISeMgr> */ -#pragma push -#pragma force_active on -static u8 data_804D185C[4]; -#pragma pop - -/* 804D1860-804D1864 000078 0004+00 0/0 0/0 0/0 .bss sInstance__29JASGlobalInstance<9JAISeqMgr> */ -#pragma push -#pragma force_active on -static u8 data_804D1860[4]; -#pragma pop - -/* 804D1864-804D1868 00007C 0004+00 0/0 0/0 0/0 .bss - * sInstance__33JASGlobalInstance<12JAIStreamMgr> */ -#pragma push -#pragma force_active on -static u8 data_804D1864[4]; -#pragma pop - -/* 804D1868-804D186C 000080 0004+00 0/0 0/0 0/0 .bss sInstance__31JASGlobalInstance<10Z2SoundMgr> - */ -#pragma push -#pragma force_active on -static u8 data_804D1868[4]; -#pragma pop - -/* 804D186C-804D1870 000084 0004+00 0/0 0/0 0/0 .bss - * sInstance__33JASGlobalInstance<12JAISoundInfo> */ -#pragma push -#pragma force_active on -static u8 data_804D186C[4]; -#pragma pop - -/* 804D1870-804D1874 000088 0004+00 0/0 0/0 0/0 .bss - * sInstance__34JASGlobalInstance<13JAUSoundTable> */ -#pragma push -#pragma force_active on -static u8 data_804D1870[4]; -#pragma pop - -/* 804D1874-804D1878 00008C 0004+00 0/0 0/0 0/0 .bss - * sInstance__38JASGlobalInstance<17JAUSoundNameTable> */ -#pragma push -#pragma force_active on -static u8 data_804D1874[4]; -#pragma pop - -/* 804D1878-804D187C 000090 0004+00 0/0 0/0 0/0 .bss - * sInstance__33JASGlobalInstance<12JAUSoundInfo> */ -#pragma push -#pragma force_active on -static u8 data_804D1878[4]; -#pragma pop - -/* 804D187C-804D1880 000094 0004+00 0/0 0/0 0/0 .bss sInstance__32JASGlobalInstance<11Z2SoundInfo> - */ -#pragma push -#pragma force_active on -static u8 data_804D187C[4]; -#pragma pop - -/* 804D1880-804D1884 000098 0004+00 0/0 0/0 0/0 .bss - * sInstance__34JASGlobalInstance<13Z2SoundObjMgr> */ -#pragma push -#pragma force_active on -static u8 data_804D1880[4]; -#pragma pop - -/* 804D1884-804D1888 00009C 0004+00 0/0 0/0 0/0 .bss sInstance__31JASGlobalInstance<10Z2Audience> - */ -#pragma push -#pragma force_active on -static u8 data_804D1884[4]; -#pragma pop - -/* 804D1888-804D188C 0000A0 0004+00 0/0 0/0 0/0 .bss sInstance__32JASGlobalInstance<11Z2FxLineMgr> - */ -#pragma push -#pragma force_active on -static u8 data_804D1888[4]; -#pragma pop - -/* 804D188C-804D1890 0000A4 0004+00 0/0 0/0 0/0 .bss sInstance__31JASGlobalInstance<10Z2EnvSeMgr> - */ -#pragma push -#pragma force_active on -static u8 data_804D188C[4]; -#pragma pop - -/* 804D1890-804D1894 0000A8 0004+00 0/0 0/0 0/0 .bss sInstance__32JASGlobalInstance<11Z2SpeechMgr> - */ -#pragma push -#pragma force_active on -static u8 data_804D1890[4]; -#pragma pop - -/* 804D1894-804D1898 0000AC 0004+00 0/0 0/0 0/0 .bss - * sInstance__34JASGlobalInstance<13Z2WolfHowlMgr> */ -#pragma push -#pragma force_active on -static u8 data_804D1894[4]; -#pragma pop - -/* 804D1720-804D1720 000130 0000+00 0/0 0/0 0/0 .rodata @stringBase0 */ +AUDIO_INSTANCES