diff --git a/config/GZ2E01/rels/d_a_obj_Y_taihou/splits.txt b/config/GZ2E01/rels/d_a_obj_Y_taihou/splits.txt index 4750cdf5887..b9e412e91ce 100644 --- a/config/GZ2E01/rels/d_a_obj_Y_taihou/splits.txt +++ b/config/GZ2E01/rels/d_a_obj_Y_taihou/splits.txt @@ -16,6 +16,6 @@ REL/global_destructor_chain.c: d/actor/d_a_obj_Y_taihou.cpp: .text start:0x000000EC end:0x00001744 - .rodata start:0x00000000 end:0x0000008C + .rodata start:0x00000000 end:0x00000089 .data start:0x00000000 end:0x00000130 .bss start:0x00000008 end:0x000000D0 diff --git a/config/GZ2E01/rels/d_a_obj_Y_taihou/symbols.txt b/config/GZ2E01/rels/d_a_obj_Y_taihou/symbols.txt index cef45c42047..e981d7eadba 100644 --- a/config/GZ2E01/rels/d_a_obj_Y_taihou/symbols.txt +++ b/config/GZ2E01/rels/d_a_obj_Y_taihou/symbols.txt @@ -3,10 +3,10 @@ _epilog = .text:0x0000002C; // type:function size:0x2C scope:global _unresolved = .text:0x00000058; // type:function size:0x20 scope:global __register_global_object = .text:0x00000078; // type:function size:0x1C scope:global __destroy_global_chain = .text:0x00000094; // type:function size:0x58 scope:global -ccHitCallback__FP10fopAc_ac_cP12dCcD_GObjInfP10fopAc_ac_cP12dCcD_GObjInf = .text:0x000000EC; // type:function size:0x154 scope:global -pushPullcallBack__FP10fopAc_ac_cP10fopAc_ac_csQ29dBgW_Base13PushPullLabel = .text:0x00000240; // type:function size:0xE0 scope:global +ccHitCallback__FP10fopAc_ac_cP12dCcD_GObjInfP10fopAc_ac_cP12dCcD_GObjInf = .text:0x000000EC; // type:function size:0x154 scope:local +pushPullcallBack__FP10fopAc_ac_cP10fopAc_ac_csQ29dBgW_Base13PushPullLabel = .text:0x00000240; // type:function size:0xE0 scope:local __dt__4cXyzFv = .text:0x00000320; // type:function size:0x3C scope:global -searchIronBallCallback__FPvPv = .text:0x0000035C; // type:function size:0x8C scope:global +searchIronBallCallback__FPvPv = .text:0x0000035C; // type:function size:0x8C scope:local create1st__14daObjYtaihou_cFv = .text:0x000003E8; // type:function size:0xC8 scope:global setIronBall__14daObjYtaihou_cFP12daObjCarry_c = .text:0x000004B0; // type:function size:0x58 scope:global getEvent__14daObjYtaihou_cFUc = .text:0x00000508; // type:function size:0x14 scope:global @@ -22,13 +22,13 @@ Create__14daObjYtaihou_cFv = .text:0x00000FE4; // type:function size:0xB0 scope: Execute__14daObjYtaihou_cFPPA3_A4_f = .text:0x00001094; // type:function size:0xB8 scope:global Draw__14daObjYtaihou_cFv = .text:0x0000114C; // type:function size:0xD0 scope:global Delete__14daObjYtaihou_cFv = .text:0x0000121C; // type:function size:0x6C scope:global -daObjYtaihou_create1st__FP14daObjYtaihou_c = .text:0x00001288; // type:function size:0x11C scope:global +daObjYtaihou_create1st__FP14daObjYtaihou_c = .text:0x00001288; // type:function size:0x11C scope:local __dt__8cM3dGCylFv = .text:0x000013A4; // type:function size:0x48 scope:global __dt__8cM3dGAabFv = .text:0x000013EC; // type:function size:0x48 scope:global __dt__10dCcD_GSttsFv = .text:0x00001434; // type:function size:0x5C scope:global -daObjYtaihou_MoveBGDelete__FP14daObjYtaihou_c = .text:0x00001490; // type:function size:0x20 scope:global -daObjYtaihou_MoveBGExecute__FP14daObjYtaihou_c = .text:0x000014B0; // type:function size:0x20 scope:global -daObjYtaihou_MoveBGDraw__FP14daObjYtaihou_c = .text:0x000014D0; // type:function size:0x2C scope:global +daObjYtaihou_MoveBGDelete__FP14daObjYtaihou_c = .text:0x00001490; // type:function size:0x20 scope:local +daObjYtaihou_MoveBGExecute__FP14daObjYtaihou_c = .text:0x000014B0; // type:function size:0x20 scope:local +daObjYtaihou_MoveBGDraw__FP14daObjYtaihou_c = .text:0x000014D0; // type:function size:0x2C scope:local __dt__10cCcD_GSttsFv = .text:0x000014FC; // type:function size:0x48 scope:global __dt__17dEvLib_callback_cFv = .text:0x00001544; // type:function size:0x48 scope:global eventStart__17dEvLib_callback_cFv = .text:0x0000158C; // type:function size:0x8 scope:global @@ -65,10 +65,10 @@ l_shotSmokeOffset$3962 = .rodata:0x00000054; // type:object size:0xC scope:local @4109 = .rodata:0x00000070; // type:object size:0x4 scope:local l_cc_offset$4147 = .rodata:0x00000074; // type:object size:0xC scope:local @stringBase0 = .rodata:0x00000080; // type:object size:0x9 scope:local data:string_table -l_arcName = .data:0x00000000; // type:object size:0x4 scope:global -l_cc_cyl_src = .data:0x00000004; // type:object size:0x44 scope:global +l_arcName = .data:0x00000000; // type:object size:0x4 scope:local +l_cc_cyl_src = .data:0x00000004; // type:object size:0x44 scope:local l_offsetAngle$3829 = .data:0x00000048; // type:object size:0x8 scope:local -daObjYtaihou_METHODS = .data:0x00000050; // type:object size:0x20 scope:global +daObjYtaihou_METHODS = .data:0x00000050; // type:object size:0x20 scope:local g_profile_Obj_Ytaihou = .data:0x00000070; // type:object size:0x30 scope:global __vt__10cCcD_GStts = .data:0x000000A0; // type:object size:0xC scope:global __vt__10dCcD_GStts = .data:0x000000AC; // type:object size:0xC scope:global @@ -95,7 +95,7 @@ __global_destructor_chain = .bss:0x00000000; // type:object size:0x4 scope:globa @1010 = .bss:0x00000040; // type:object size:0x1 scope:local @1009 = .bss:0x00000044; // type:object size:0x1 scope:local l_wheelMinR$3836 = .bss:0x00000048; // type:object size:0x4 scope:local data:float -lbl_396_bss_4C = .bss:0x0000004C; // type:object size:0x1 data:byte +lbl_396_bss_4C = .bss:0x0000004C; // type:object size:0x1 scope:local data:byte @3951 = .bss:0x00000050; // type:object size:0xC scope:local l_effectScale$3950 = .bss:0x00000060; // type:object size:0xC scope:local sInstance__40JASGlobalInstance<19JASDefaultBankTable> = .bss:0x0000006C; // type:object size:0x4 scope:global diff --git a/configure.py b/configure.py index 6769c581ad8..483bc8a8965 100755 --- a/configure.py +++ b/configure.py @@ -1827,7 +1827,7 @@ config.libs = [ ActorRel(MatchingFor("GZ2E01"), "d_a_obj_Lv5Key"), ActorRel(Equivalent, "d_a_obj_Turara"), ActorRel(MatchingFor("GZ2E01"), "d_a_obj_TvCdlst"), - ActorRel(NonMatching, "d_a_obj_Y_taihou"), + ActorRel(Equivalent, "d_a_obj_Y_taihou"), # weak func ordering. ActorRel(NonMatching, "d_a_obj_amiShutter"), ActorRel(MatchingFor("GZ2E01"), "d_a_obj_ari"), ActorRel(MatchingFor("GZ2E01"), "d_a_obj_automata"), diff --git a/include/d/actor/d_a_obj_Y_taihou.h b/include/d/actor/d_a_obj_Y_taihou.h index 988fcebe598..df4ce5ec946 100644 --- a/include/d/actor/d_a_obj_Y_taihou.h +++ b/include/d/actor/d_a_obj_Y_taihou.h @@ -1,8 +1,9 @@ #ifndef D_A_OBJ_Y_TAIHOU_H #define D_A_OBJ_Y_TAIHOU_H -#include "f_op/f_op_actor_mng.h" +#include "d/d_bg_s_movebg_actor.h" #include "d/actor/d_a_obj_carry.h" +#include "d/d_event_lib.h" /** * @ingroup actors-objects @@ -12,27 +13,43 @@ * @details * */ -class daObjYtaihou_c : public fopAc_ac_c { +class daObjYtaihou_c : public dBgS_MoveBgActor, public request_of_phase_process_class, public dEvLib_callback_c { public: - /* 80B9FDE8 */ void create1st(); + daObjYtaihou_c() : dEvLib_callback_c(this) { mIronBallId = -1; } + /* 80B9FDE8 */ int create1st(); /* 80B9FEB0 */ void setIronBall(daObjCarry_c*); - /* 80B9FF08 */ void getEvent(u8); + /* 80B9FF08 */ int getEvent(u8); /* 80B9FF1C */ void loadAngle(); /* 80B9FFAC */ void saveAngle(); /* 80BA0060 */ void setNextAngle(); /* 80BA0084 */ void setMtx(); /* 80BA0208 */ void rotateCheck(); /* 80BA045C */ void shotCheck(); - /* 80BA0964 */ void eventStart(); - /* 80BA0974 */ void CreateHeap(); - /* 80BA09E4 */ void Create(); - /* 80BA0A94 */ void Execute(f32 (**)[3][4]); - /* 80BA0B4C */ void Draw(); - /* 80BA0C1C */ void Delete(); - /* 80BA0FA4 */ ~daObjYtaihou_c(); + /* 80BA0964 */ virtual BOOL eventStart(); + /* 80BA0974 */ int CreateHeap(); + /* 80BA09E4 */ int Create(); + /* 80BA0A94 */ int Execute(Mtx** i_mtx); + /* 80BA0B4C */ int Draw(); + /* 80BA0C1C */ int Delete(); + /* 80BA0FA4 */ ~daObjYtaihou_c() {} + + void setAddAngle(s8 add_angle) { mAddAngle = add_angle; } + s32 getIronBallId() { return mIronBallId; } + void startBomb() { mStartBomb = 0xffff; } private: - /* 0x568 */ u8 field_0x568[0x778 - 0x568]; + /* 0x5b8 */ Mtx mMtx; + /* 0x5e8 */ J3DModel* mpModel; + /* 0x5ec */ dCcD_Stts mStts; + /* 0x628 */ dCcD_Cyl mCyl; + /* 0x764 */ s32 mIronBallId; + /* 0x768 */ u32 mParticleKeys[2]; + /* 0x770 */ s16 mStartBomb; + /* 0x772 */ s16 field_0x772; + /* 0x774 */ s8 field_0x774; + /* 0x775 */ u8 field_0x775; + /* 0x776 */ s8 mAddAngle; + /* 0x777 */ s8 mOldAddAngle; }; STATIC_ASSERT(sizeof(daObjYtaihou_c) == 0x778); diff --git a/include/d/actor/d_a_obj_carry.h b/include/d/actor/d_a_obj_carry.h index 473daee0f95..3b6b57e1bd3 100644 --- a/include/d/actor/d_a_obj_carry.h +++ b/include/d/actor/d_a_obj_carry.h @@ -274,9 +274,18 @@ public: void startCtrl() { mCtrl = 1; } void endCtrl() { mCtrl = 0; } void setDrop() { field_0xcf2 = 3; } - + void offDraw() { mDraw = 1; } + void onDraw() { mDraw = 0; } bool isDraw() { return mDraw == false; } + void setPower(fopAc_ac_c* cannon_actor, f32 my_0xde0, f32 my_0xde4, s16 my_0xde8) { + mpCannonActor = cannon_actor; + field_0xde0 = my_0xde0; + field_0xde4 = my_0xde4; + field_0xde8 = my_0xde8; + field_0xdea = 1; + } + static void make_prm(csXyz* param_1, u8 param_2, u8 param_3, u8 param_4, u8 param_5, u8 param_6 = 0) { param_1->x = (param_4 << 8) | param_3; diff --git a/include/d/actor/d_a_player.h b/include/d/actor/d_a_player.h index 7c5131ec644..24ba5827fb7 100644 --- a/include/d/actor/d_a_player.h +++ b/include/d/actor/d_a_player.h @@ -1026,6 +1026,7 @@ public: void onForceGameOver() { onNoResetFlg2(FLG2_FORCE_GAMEOVER); } void onForceWolfChange() { onEndResetFlg0(ERFLG0_UNK_2); } void onDoPutEmphasys() { onEndResetFlg1(ERFLG1_UNK_10000000); } + void onDoExchangePutIn() { onEndResetFlg1(ERFLG1_UNK_4000000); } void onNsScream() { onEndResetFlg1(ERFLG1_UNK_1); } void onNsScreamAnm() { onEndResetFlg1(daPy_ERFLG1(ERFLG1_UNK_1 | ERFLG1_UNK_2)); } void onNeckSearchWide() { onEndResetFlg0(ERFLG0_UNK_400); } diff --git a/include/d/d_bg_w_base.h b/include/d/d_bg_w_base.h index 3382fd34f0f..bcd0246279b 100644 --- a/include/d/d_bg_w_base.h +++ b/include/d/d_bg_w_base.h @@ -29,6 +29,7 @@ public: PPLABEL_NONE = 0, PPLABEL_PUSH = 1, PPLABEL_PULL = 2, + PPLABEL_3 = 3, PPLABEL_4 = 4, PPLABEL_HEAVY = 8, }; diff --git a/src/d/actor/d_a_obj_Y_taihou.cpp b/src/d/actor/d_a_obj_Y_taihou.cpp index 288b87f19e6..9158023685e 100644 --- a/src/d/actor/d_a_obj_Y_taihou.cpp +++ b/src/d/actor/d_a_obj_Y_taihou.cpp @@ -4,225 +4,144 @@ */ #include "d/actor/d_a_obj_Y_taihou.h" +#include "d/d_bg_w.h" #include "d/d_cc_d.h" #include "dol2asm.h" #include "d/actor/d_a_obj_carry.h" +#include "Z2AudioLib/Z2Instances.h" +#include "SSystem/SComponent/c_math.h" +#include "d/actor/d_a_player.h" -// -// Forward References: -// - -extern "C" static void ccHitCallback__FP10fopAc_ac_cP12dCcD_GObjInfP10fopAc_ac_cP12dCcD_GObjInf(); -extern "C" static void pushPullcallBack__FP10fopAc_ac_cP10fopAc_ac_csQ29dBgW_Base13PushPullLabel(); -extern "C" void __dt__4cXyzFv(); -extern "C" static void searchIronBallCallback__FPvPv(); -extern "C" void create1st__14daObjYtaihou_cFv(); -extern "C" void setIronBall__14daObjYtaihou_cFP12daObjCarry_c(); -extern "C" void getEvent__14daObjYtaihou_cFUc(); -extern "C" void loadAngle__14daObjYtaihou_cFv(); -extern "C" void saveAngle__14daObjYtaihou_cFv(); -extern "C" void setNextAngle__14daObjYtaihou_cFv(); -extern "C" void setMtx__14daObjYtaihou_cFv(); -extern "C" void rotateCheck__14daObjYtaihou_cFv(); -extern "C" void shotCheck__14daObjYtaihou_cFv(); -extern "C" void eventStart__14daObjYtaihou_cFv(); -extern "C" void CreateHeap__14daObjYtaihou_cFv(); -extern "C" void Create__14daObjYtaihou_cFv(); -extern "C" void Execute__14daObjYtaihou_cFPPA3_A4_f(); -extern "C" void Draw__14daObjYtaihou_cFv(); -extern "C" void Delete__14daObjYtaihou_cFv(); -extern "C" static void daObjYtaihou_create1st__FP14daObjYtaihou_c(); -extern "C" void __dt__8cM3dGCylFv(); -extern "C" void __dt__8cM3dGAabFv(); -extern "C" void __dt__10dCcD_GSttsFv(); -extern "C" static void daObjYtaihou_MoveBGDelete__FP14daObjYtaihou_c(); -extern "C" static void daObjYtaihou_MoveBGExecute__FP14daObjYtaihou_c(); -extern "C" static void daObjYtaihou_MoveBGDraw__FP14daObjYtaihou_c(); -extern "C" void __dt__10cCcD_GSttsFv(); -extern "C" void __dt__17dEvLib_callback_cFv(); -extern "C" bool eventStart__17dEvLib_callback_cFv(); -extern "C" bool eventRun__17dEvLib_callback_cFv(); -extern "C" bool eventEnd__17dEvLib_callback_cFv(); -extern "C" void __dt__14daObjYtaihou_cFv(); -extern "C" void func_80BA1118(void* _this, s16*); -extern "C" static void func_80BA1134(); -extern "C" static void func_80BA113C(); -extern "C" extern char const* const d_a_obj_Y_taihou__stringBase0; - -// -// External References: -// - -extern "C" void mDoMtx_YrotS__FPA4_fs(); -extern "C" void mDoMtx_YrotM__FPA4_fs(); -extern "C" void transM__14mDoMtx_stack_cFfff(); -extern "C" void mDoExt_modelUpdateDL__FP8J3DModel(); -extern "C" void mDoExt_J3DModel__create__FP12J3DModelDataUlUl(); -extern "C" void __dt__10fopAc_ac_cFv(); -extern "C" void fopAcIt_Judge__FPFPvPv_PvPv(); -extern "C" void fopAcM_delete__FP10fopAc_ac_c(); -extern "C" void fopAcM_setCullSizeBox__FP10fopAc_ac_cffffff(); -extern "C" void fopAcM_searchActorAngleY__FPC10fopAc_ac_cPC10fopAc_ac_c(); -extern "C" void fopAcM_searchActorDistance2__FPC10fopAc_ac_cPC10fopAc_ac_c(); -extern "C" void fopAcM_searchActorDistanceXZ__FPC10fopAc_ac_cPC10fopAc_ac_c(); -extern "C" void fpcSch_JudgeByID__FPvPv(); -extern "C" void dComIfG_resLoad__FP30request_of_phase_process_classPCc(); -extern "C" void dComIfG_resDelete__FP30request_of_phase_process_classPCc(); -extern "C" void dComIfGp_getReverb__Fi(); -extern "C" void onSwitch__10dSv_info_cFii(); -extern "C" void offSwitch__10dSv_info_cFii(); -extern "C" void isSwitch__10dSv_info_cCFii(); -extern "C" void getRes__14dRes_control_cFPCclP11dRes_info_ci(); -extern "C" void eventUpdate__17dEvLib_callback_cFv(); -extern "C" void orderEvent__17dEvLib_callback_cFiii(); -extern "C" void -set__13dPa_control_cFUcUsPC4cXyzPC12dKy_tevstr_cPC5csXyzPC4cXyzUcP18dPa_levelEcallBackScPC8_GXColorPC8_GXColorPC4cXyzf(); -extern "C" void -set__13dPa_control_cFUlUcUsPC4cXyzPC12dKy_tevstr_cPC5csXyzPC4cXyzUcP18dPa_levelEcallBackScPC8_GXColorPC8_GXColorPC4cXyzf(); -extern "C" void StartShock__12dVibration_cFii4cXyz(); -extern "C" void dBgS_MoveBGProc_TypicalRotY__FP4dBgWPvRC13cBgS_PolyInfobP4cXyzP5csXyzP5csXyz(); -extern "C" void __ct__16dBgS_MoveBgActorFv(); -extern "C" bool IsDelete__16dBgS_MoveBgActorFv(); -extern "C" bool ToFore__16dBgS_MoveBgActorFv(); -extern "C" bool ToBack__16dBgS_MoveBgActorFv(); -extern "C" void -MoveBGCreate__16dBgS_MoveBgActorFPCciPFP4dBgWPvRC13cBgS_PolyInfobP4cXyzP5csXyzP5csXyz_vUlPA3_A4_f(); -extern "C" void MoveBGDelete__16dBgS_MoveBgActorFv(); -extern "C" void MoveBGExecute__16dBgS_MoveBgActorFv(); -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_CylFRC11dCcD_SrcCyl(); -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 SetC__8cM3dGCylFRC4cXyz(); -extern "C" void cLib_chaseAngleS__FPsss(); -extern "C" void cLib_distanceAngleS__Fss(); -extern "C" void seStart__7Z2SeMgrF10JAISoundIDPC3VecUlScffffUc(); -extern "C" void seStartLevel__7Z2SeMgrF10JAISoundIDPC3VecUlScffffUc(); -extern "C" void __dl__FPv(); -extern "C" void _savegpr_28(); -extern "C" void _savegpr_29(); -extern "C" void _restgpr_28(); -extern "C" void _restgpr_29(); -extern "C" extern void* __vt__16dBgS_MoveBgActor[10]; -extern "C" extern void* __vt__8dCcD_Cyl[36]; -extern "C" extern void* __vt__9dCcD_Stts[11]; -extern "C" extern void* __vt__12cCcD_CylAttr[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" u8 sincosTable___5JMath[65536]; -extern "C" u8 mAudioMgrPtr__10Z2AudioMgr[4 + 4 /* padding */]; -extern "C" void __register_global_object(); // // Declarations: // -/* ############################################################################################## */ -/* 80BA1154-80BA1158 000000 0004+00 4/4 0/0 0/0 .rodata @3695 */ -SECTION_RODATA static f32 const lit_3695 = 150.0f; -COMPILER_STRIP_GATE(0x80BA1154, &lit_3695); - -/* 80BA1158-80BA115C 000004 0004+00 0/1 0/0 0/0 .rodata @3696 */ -#pragma push -#pragma force_active on -SECTION_RODATA static f32 const lit_3696 = 200.0f; -COMPILER_STRIP_GATE(0x80BA1158, &lit_3696); -#pragma pop - -/* 80BA115C-80BA1160 000008 0004+00 0/3 0/0 0/0 .rodata @3697 */ -#pragma push -#pragma force_active on -SECTION_RODATA static f32 const lit_3697 = 1.0f; -COMPILER_STRIP_GATE(0x80BA115C, &lit_3697); -#pragma pop - -/* 80BA1160-80BA1164 00000C 0004+00 0/3 0/0 0/0 .rodata @3698 */ -#pragma push -#pragma force_active on -SECTION_RODATA static f32 const lit_3698 = -1.0f; -COMPILER_STRIP_GATE(0x80BA1160, &lit_3698); -#pragma pop - /* 80B9FAEC-80B9FC40 0000EC 0154+00 1/1 0/0 0/0 .text * ccHitCallback__FP10fopAc_ac_cP12dCcD_GObjInfP10fopAc_ac_cP12dCcD_GObjInf */ static void ccHitCallback(fopAc_ac_c* param_0, dCcD_GObjInf* param_1, fopAc_ac_c* param_2, - dCcD_GObjInf* param_3) { - // NONMATCHING + dCcD_GObjInf* param_3) { + if (fopAcM_checkCarryNow(param_2) != 0) { + f32 actor_dist = fopAcM_searchActorDistanceY(param_0, param_2); + if (actor_dist < 150.0f || actor_dist > 200.0f) { + return; + } + } + if (fopAcM_GetProfName(param_2) == 0x2fc) { + int iVar1 = ((daObjYtaihou_c*)param_0)->getIronBallId(); + if (iVar1 == 0xffffffff && ((daObjCarry_c*)param_2)->getType() == daObjCarry_c::TYPE_IRON_BALL) { + ((daObjYtaihou_c*)param_0)->setIronBall((daObjCarry_c*)param_2); + fopAcM_seStartCurrent(param_0, 0x801c9, 0); + } + } else if (fopAcM_GetProfName(param_2) == 0x221) { + ((daObjYtaihou_c*)param_0)->startBomb(); + fopAcM_delete(param_2); + fopAcM_seStartCurrent(param_0, 0x801c9, 0); + } } -/* ############################################################################################## */ -/* 80BA1164-80BA1168 000010 0004+00 1/3 0/0 0/0 .rodata @3733 */ -SECTION_RODATA static u8 const lit_3733[4] = { - 0x00, - 0x00, - 0x00, - 0x00, -}; -COMPILER_STRIP_GATE(0x80BA1164, &lit_3733); - /* 80B9FC40-80B9FD20 000240 00E0+00 1/1 0/0 0/0 .text * pushPullcallBack__FP10fopAc_ac_cP10fopAc_ac_csQ29dBgW_Base13PushPullLabel */ -static void pushPullcallBack(fopAc_ac_c* param_0, fopAc_ac_c* param_1, s16 param_2, - dBgW_Base::PushPullLabel param_3) { - // NONMATCHING +static fopAc_ac_c* pushPullcallBack(fopAc_ac_c* param_0, fopAc_ac_c* param_1, s16 param_2, + dBgW_Base::PushPullLabel label) { + if (cLib_checkBit(label, dBgW_Base::PPLABEL_3)) { + cXyz my_vec = param_1->current.pos - param_0->current.pos; + mDoMtx_stack_c::YrotS(-param_0->shape_angle.y); + mDoMtx_stack_c::multVec(&my_vec, &my_vec); + BOOL my_ubit; + if (my_vec.x > 0.0f) { + my_ubit = 1; + } else { + my_ubit = -1; + } + if (cLib_distanceAngleS(param_0->shape_angle.y, param_2) > 0x4000) { + my_ubit = -my_ubit; + } + if (cLib_checkBit(label, dBgW_Base::PPLABEL_PULL)) { + my_ubit = -my_ubit; + } + static_cast(param_0)->setAddAngle(my_ubit); + } + return param_0; } -/* 80B9FD20-80B9FD5C 000320 003C+00 1/1 0/0 0/0 .text __dt__4cXyzFv */ -// cXyz::~cXyz() { -extern "C" void __dt__4cXyzFv() { - // NONMATCHING -} - -/* ############################################################################################## */ -/* 80BA1168-80BA116C 000014 0004+00 1/1 0/0 0/0 .rodata @3749 */ -SECTION_RODATA static f32 const lit_3749 = 40000.0f; -COMPILER_STRIP_GATE(0x80BA1168, &lit_3749); - /* 80B9FD5C-80B9FDE8 00035C 008C+00 1/1 0/0 0/0 .text searchIronBallCallback__FPvPv */ -static void searchIronBallCallback(void* param_0, void* param_1) { +static void* searchIronBallCallback(void* i_actor, void* i_data) { // NONMATCHING + daObjYtaihou_c* taihou_rhs = (daObjYtaihou_c*)i_data; + if (fopAcM_GetProfName(i_actor) == PROC_Obj_Carry) { + daObjCarry_c* pCarry = ((daObjCarry_c*)i_actor); + if ( ((daObjCarry_c*)i_actor)->getType() == daObjCarry_c::TYPE_IRON_BALL) { + if ( pCarry->isDraw() == 0 + && fopAcM_searchActorDistance2(taihou_rhs, pCarry) < 40000.0f) { + taihou_rhs->setIronBall(pCarry); + return pCarry; + } + } + } + return NULL; } -/* ############################################################################################## */ -/* 80BA11D4-80BA11D4 000080 0000+00 0/0 0/0 0/0 .rodata @stringBase0 */ -#pragma push -#pragma force_active on -SECTION_DEAD static char const* const stringBase_80BA11D4 = "Y_taihou"; -#pragma pop - /* 80BA11E0-80BA11E4 -00001 0004+00 3/3 0/0 0/0 .data l_arcName */ -SECTION_DATA static void* l_arcName = (void*)&d_a_obj_Y_taihou__stringBase0; +SECTION_DATA static char const* l_arcName[1] = {"Y_taihou"}; /* 80B9FDE8-80B9FEB0 0003E8 00C8+00 1/1 0/0 0/0 .text create1st__14daObjYtaihou_cFv */ -void daObjYtaihou_c::create1st() { - // NONMATCHING +int daObjYtaihou_c::create1st() { + int phase = dComIfG_resLoad(this, l_arcName[0]); + if (phase == cPhs_COMPLEATE_e) { + setMtx(); + phase = MoveBGCreate(l_arcName[0], 7, dBgS_MoveBGProc_TypicalRotY, 0x4550, &mMtx); + if (phase == cPhs_ERROR_e) { + return phase; + } + loadAngle(); + setNextAngle(); + shape_angle.x = 0; + shape_angle.y = current.angle.z; + fopAcM_Search(searchIronBallCallback,this); + // FIXME: Need mDoHIO_entry_c::entryHIO + } + return phase; } /* 80B9FEB0-80B9FF08 0004B0 0058+00 3/3 0/0 0/0 .text * setIronBall__14daObjYtaihou_cFP12daObjCarry_c */ -void daObjYtaihou_c::setIronBall(daObjCarry_c* param_0) { - // NONMATCHING +void daObjYtaihou_c::setIronBall(daObjCarry_c* obj) { + mIronBallId = fopAcM_GetID(obj); + obj->offDraw(); + obj->startCtrl(); + obj->current.pos = current.pos; + obj->old.pos = current.pos; } /* 80B9FF08-80B9FF1C 000508 0014+00 1/1 0/0 0/0 .text getEvent__14daObjYtaihou_cFUc */ -void daObjYtaihou_c::getEvent(u8 param_0) { - // NONMATCHING +int daObjYtaihou_c::getEvent(u8 param_0) { + return fopAcM_GetParamBit(this, (param_0 & 0x1f) << 3, 8); } /* 80B9FF1C-80B9FFAC 00051C 0090+00 1/1 0/0 0/0 .text loadAngle__14daObjYtaihou_cFv */ void daObjYtaihou_c::loadAngle() { - // NONMATCHING + int sw = home.angle.x >> 8 & 0xff; + field_0x775 = (fopAcM_isSwitch(this, home.angle.x & 0xff)) ? 2 : 0; + if (fopAcM_isSwitch(this, sw)) { + field_0x775 |= 1; + } } /* 80B9FFAC-80BA0060 0005AC 00B4+00 1/1 0/0 0/0 .text saveAngle__14daObjYtaihou_cFv */ void daObjYtaihou_c::saveAngle() { - // NONMATCHING + int sw_1 = home.angle.x & 0xff; + int sw_2 = home.angle.x >> 8 & 0xff; + if (field_0x775 & 2) { + fopAcM_onSwitch(this, sw_1); + } else { + fopAcM_offSwitch(this, sw_1); + } + if (field_0x775 & 1) { + fopAcM_onSwitch(this, sw_2); + } else { + fopAcM_offSwitch(this, sw_2); + } } /* ############################################################################################## */ @@ -242,307 +161,289 @@ static dCcD_SrcCyl l_cc_cyl_src = { }; /* 80BA1228-80BA1230 000048 0008+00 1/1 0/0 0/0 .data l_offsetAngle$3829 */ -SECTION_DATA static u8 l_offsetAngle[8] = { - 0x00, 0x00, 0xC0, 0x00, 0x80, 0x00, 0x40, 0x00, +static u16 l_offsetAngle[4] = { + 0x0, 0xC000, 0x8000, 0x4000, }; /* 80BA0060-80BA0084 000660 0024+00 2/2 0/0 0/0 .text setNextAngle__14daObjYtaihou_cFv */ void daObjYtaihou_c::setNextAngle() { - // NONMATCHING + current.angle.z = home.angle.y + l_offsetAngle[field_0x775]; } -/* ############################################################################################## */ -/* 80BA116C-80BA1170 000018 0004+00 0/1 0/0 0/0 .rodata @3852 */ -#pragma push -#pragma force_active on -SECTION_RODATA static f32 const lit_3852 = 4.0f / 5.0f; -COMPILER_STRIP_GATE(0x80BA116C, &lit_3852); -#pragma pop - -/* 80BA1170-80BA1174 00001C 0004+00 0/1 0/0 0/0 .rodata @3853 */ -#pragma push -#pragma force_active on -SECTION_RODATA static f32 const lit_3853 = 60.0f; -COMPILER_STRIP_GATE(0x80BA1170, &lit_3853); -#pragma pop - -/* 80BA1174-80BA1178 000020 0004+00 0/1 0/0 0/0 .rodata @3854 */ -#pragma push -#pragma force_active on -SECTION_RODATA static f32 const lit_3854 = 59.0f; -COMPILER_STRIP_GATE(0x80BA1174, &lit_3854); -#pragma pop - -/* 80BA1178-80BA117C 000024 0004+00 0/1 0/0 0/0 .rodata @3855 */ -#pragma push -#pragma force_active on -SECTION_RODATA static f32 const lit_3855 = 3.0f / 5.0f; -COMPILER_STRIP_GATE(0x80BA1178, &lit_3855); -#pragma pop - -/* 80BA117C-80BA1184 000028 0004+04 0/1 0/0 0/0 .rodata @3856 */ -#pragma push -#pragma force_active on -SECTION_RODATA static f32 const lit_3856[1 + 1 /* padding */] = { - 2.0f / 5.0f, - /* padding */ - 0.0f, -}; -COMPILER_STRIP_GATE(0x80BA117C, &lit_3856); -#pragma pop - -/* 80BA1184-80BA118C 000030 0008+00 0/1 0/0 0/0 .rodata @3858 */ -#pragma push -#pragma force_active on -SECTION_RODATA static u8 const lit_3858[8] = { - 0x43, 0x30, 0x00, 0x00, 0x80, 0x00, 0x00, 0x00, -}; -COMPILER_STRIP_GATE(0x80BA1184, &lit_3858); -#pragma pop - -/* 80BA1318-80BA131C 000008 0001+03 1/1 0/0 0/0 .bss @1109 */ -static u8 lit_1109[1 + 3 /* padding */]; - -/* 80BA131C-80BA1320 00000C 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 - -/* 80BA1320-80BA1324 000010 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 - -/* 80BA1324-80BA1328 000014 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 - -/* 80BA1328-80BA132C 000018 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 - -/* 80BA132C-80BA1330 00001C 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 - -/* 80BA1330-80BA1334 000020 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 - -/* 80BA1334-80BA1338 000024 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 - -/* 80BA1338-80BA133C 000028 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 - -/* 80BA133C-80BA1340 00002C 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 - -/* 80BA1340-80BA1344 000030 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 - -/* 80BA1344-80BA1348 000034 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 - -/* 80BA1348-80BA134C 000038 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 - -/* 80BA134C-80BA1350 00003C 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 - -/* 80BA1350-80BA1354 000040 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 - -/* 80BA1354-80BA1358 000044 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_BSS(1109); +UNK_BSS(1107); +UNK_BSS(1105); +UNK_BSS(1104); +UNK_BSS(1099); +UNK_BSS(1097); +UNK_BSS(1095); +UNK_BSS(1094); +UNK_BSS(1057); +UNK_BSS(1055); +UNK_BSS(1053); +UNK_BSS(1052); +UNK_BSS(1014); +UNK_BSS(1012); +UNK_BSS(1010); +UNK_BSS(1009); /* 80BA1358-80BA135C 000048 0004+00 1/1 0/0 0/0 .bss l_wheelMinR$3836 */ -static u8 l_wheelMinR[4]; +static f32 l_wheelMinR; /* 80BA135C-80BA1360 00004C 0004+00 1/1 0/0 0/0 .bss None */ -static u8 data_80BA135C[4]; +static u8 lbl_396_bss_4C; /* 80BA0084-80BA0208 000684 0184+00 2/2 0/0 0/0 .text setMtx__14daObjYtaihou_cFv */ void daObjYtaihou_c::setMtx() { - // NONMATCHING + home.angle.z += (s16) ((s16)(shape_angle.y - old.angle.y) * 0.8f); + if ((s8)lbl_396_bss_4C == 0) { + l_wheelMinR = cM_scos(0xccc) * 60.0f; + lbl_396_bss_4C = 1; + } + int iVar1 = abs(home.angle.z % 0x1999) - 0xccc; + f32 my_val = 59.0f - l_wheelMinR / cM_scos(iVar1); + speedF += speed.y; + speed.y *= 0.6f; + speed.y -= speedF * 0.4f; + mDoMtx_stack_c::transS(current.pos.x, current.pos.y - my_val, current.pos.z); + mDoMtx_stack_c::YrotM(shape_angle.y); + mDoMtx_stack_c::transM(0.0f, 0.0f, speedF); + mDoMtx_copy(mDoMtx_stack_c::get(), mMtx); } -/* ############################################################################################## */ -/* 80BA118C-80BA1190 000038 0004+00 0/1 0/0 0/0 .rodata @3915 */ -#pragma push -#pragma force_active on -SECTION_RODATA static f32 const lit_3915 = 10.0f; -COMPILER_STRIP_GATE(0x80BA118C, &lit_3915); -#pragma pop - /* 80BA0208-80BA045C 000808 0254+00 1/1 0/0 0/0 .text rotateCheck__14daObjYtaihou_cFv */ void daObjYtaihou_c::rotateCheck() { // NONMATCHING + if (shape_angle.y != current.angle.z) { + cLib_chaseAngleS(¤t.angle.x, 0xbe, 5); + if (cLib_chaseAngleS(&shape_angle.y, current.angle.z, current.angle.x)) { + field_0x772 = 0; + daPy_getLinkPlayerActorClass()->offPushPullKeep(); + field_0x774 = -1; + fopAcM_seStartCurrent(this, 0x801cb, 0); + } else { + fopAcM_seStartCurrentLevel(this, 0x801ca, 0); + } + } else if (field_0x774) { + daPy_py_c* player_class = daPy_getLinkPlayerActorClass(); + if (field_0x774 < 0) { + if (player_class->getBaseAnimeFrame() > 10.0f) { + field_0x774 = 1; + } + } else { + if (player_class->getBaseAnimeFrame() <= 10.0f) { + field_0x774 = 0; + } + } + } else if (mAddAngle == 0 || mAddAngle != mOldAddAngle) { + field_0x772 = 0; + } else if (mStartBomb == 0 && ++field_0x772 > 10) { + // FIXME: Order of registers in add statement: + int temp = field_0x775; + temp = mAddAngle + temp; + temp += 4; + field_0x775 = (temp) % 4; + current.angle.x = 0; + setNextAngle(); + saveAngle(); + daPy_getLinkPlayerActorClass()->onPushPullKeep(); + } } /* ############################################################################################## */ /* 80BA1190-80BA119C 00003C 000C+00 0/1 0/0 0/0 .rodata l_hibanaOffset$3954 */ -#pragma push -#pragma force_active on -SECTION_RODATA static u8 const l_hibanaOffset[12] = { - 0x00, 0x00, 0x00, 0x00, 0x43, 0x16, 0x00, 0x00, 0x42, 0x48, 0x00, 0x00, -}; -COMPILER_STRIP_GATE(0x80BA1190, &l_hibanaOffset); -#pragma pop +static const Vec l_hibanaOffset = {0.0f, 150.0f, 50.0f}; /* 80BA119C-80BA11A8 000048 000C+00 0/1 0/0 0/0 .rodata l_shotOffset$3961 */ -#pragma push -#pragma force_active on -SECTION_RODATA static u8 const l_shotOffset[12] = { - 0x00, 0x00, 0x00, 0x00, 0x43, 0x02, 0x00, 0x00, 0xC2, 0xC8, 0x00, 0x00, -}; -COMPILER_STRIP_GATE(0x80BA119C, &l_shotOffset); -#pragma pop +static const Vec l_shotOffset = {0.0f, 130.0f, -100.0f}; /* 80BA11A8-80BA11B4 000054 000C+00 0/1 0/0 0/0 .rodata l_shotSmokeOffset$3962 */ -#pragma push -#pragma force_active on -SECTION_RODATA static u8 const l_shotSmokeOffset[12] = { - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, -}; -COMPILER_STRIP_GATE(0x80BA11A8, &l_shotSmokeOffset); -#pragma pop - -/* 80BA11B4-80BA11B8 000060 0004+00 0/1 0/0 0/0 .rodata @4105 */ -#pragma push -#pragma force_active on -SECTION_RODATA static f32 const lit_4105 = 55.0f; -COMPILER_STRIP_GATE(0x80BA11B4, &lit_4105); -#pragma pop - -/* 80BA11B8-80BA11BC 000064 0004+00 0/1 0/0 0/0 .rodata @4106 */ -#pragma push -#pragma force_active on -SECTION_RODATA static f32 const lit_4106 = 95.0f; -COMPILER_STRIP_GATE(0x80BA11B8, &lit_4106); -#pragma pop - -/* 80BA11BC-80BA11C0 000068 0004+00 0/1 0/0 0/0 .rodata @4107 */ -#pragma push -#pragma force_active on -SECTION_RODATA static f32 const lit_4107 = 9.0f / 5.0f; -COMPILER_STRIP_GATE(0x80BA11BC, &lit_4107); -#pragma pop - -/* 80BA11C0-80BA11C4 00006C 0004+00 0/1 0/0 0/0 .rodata @4108 */ -#pragma push -#pragma force_active on -SECTION_RODATA static f32 const lit_4108 = 210.0f; -COMPILER_STRIP_GATE(0x80BA11C0, &lit_4108); -#pragma pop - -/* 80BA11C4-80BA11C8 000070 0004+00 0/1 0/0 0/0 .rodata @4109 */ -#pragma push -#pragma force_active on -SECTION_RODATA static f32 const lit_4109 = 40.0f; -COMPILER_STRIP_GATE(0x80BA11C4, &lit_4109); -#pragma pop - -/* 80BA1360-80BA1370 000050 000C+04 0/1 0/0 0/0 .bss @3951 */ -#pragma push -#pragma force_active on -static u8 lit_3951[12 + 4 /* padding */]; -#pragma pop - -/* 80BA1370-80BA137C 000060 000C+00 0/1 0/0 0/0 .bss l_effectScale$3950 */ -#pragma push -#pragma force_active on -static u8 l_effectScale[12]; -#pragma pop +static const Vec l_shotSmokeOffset = {0.0f, 0.0f, 0.0f}; /* 80BA045C-80BA0964 000A5C 0508+00 1/1 0/0 0/0 .text shotCheck__14daObjYtaihou_cFv */ void daObjYtaihou_c::shotCheck() { - // NONMATCHING + if (mStartBomb == 0) { + f32 player_dist = fopAcM_searchPlayerDistanceY(this); + daPy_py_c *player_actor = daPy_getLinkPlayerActorClass(); + if (55.0f < player_dist && player_dist < 95.0f && fopAcM_searchPlayerDistanceXZ(this) < 150.0f) { + s16 player_angle = fopAcM_searchPlayerAngleY(this); + if (cLib_distanceAngleS(player_angle, shape_angle.y) < 0x2000 + && cLib_distanceAngleS(player_actor->shape_angle.y, player_angle) > 0x6800) { + if (mCyl.GetCoHitCallback() == 0) { + if (player_actor->getGrabPutStart()) { + mCyl.SetCoHitCallback(ccHitCallback); + return; + } + player_actor->onDoExchangePutIn(); + } else { + if (player_actor->getGrabActorID() != 0xffffffff) { + return; + } + } + } + } + } else if (mStartBomb < 0) { + int event = getEvent(field_0x775); + if (mIronBallId != 0xffffffff && event != 0xff) { + orderEvent(event, 0xff, 1); + } else { + eventStart(); + } + } else { + if (cLib_calcTimer(&mStartBomb)) { + if (mStartBomb > 4) { + static cXyz l_effectScale(1.8f, 1.8f, 1.8f); + cXyz my_vec_0; + cMtx_multVec(mMtx, &l_hibanaOffset, &my_vec_0); + mParticleKeys[0] = dComIfGp_particle_set(mParticleKeys[0], 0x1de, &my_vec_0, &tevStr, + NULL, &l_effectScale, 0xff, NULL, -1, + NULL, NULL, NULL); + mParticleKeys[1] = dComIfGp_particle_set(mParticleKeys[1], 0x1df, &my_vec_0, &tevStr, + NULL, &l_effectScale, 0xff, NULL, -1, + NULL, NULL, NULL); + fopAcM_seStartCurrentLevel(this, 0x8000a, 0); + } else if (mStartBomb == 4) { + daObjCarry_c* pCarry = (daObjCarry_c*) fopAcM_SearchByID(mIronBallId); + if (pCarry) { + cXyz my_vec_0; + cMtx_multVec(mMtx, &l_shotOffset, &my_vec_0); + pCarry->current.pos = my_vec_0; + pCarry->old.pos = my_vec_0; + pCarry->onDraw(); + pCarry->endCtrl(); + s16 adj_angle = shape_angle.y + 0x8000; + f32 cos_val = cM_scos(3000) * 210.0f; + f32 sin_val = cM_ssin(3000) * 210.0f; + pCarry->setPower(this, sin_val, cos_val, adj_angle); + } + mIronBallId = -1; + cXyz my_vec_1; + cMtx_multVec(mMtx, &l_shotSmokeOffset, &my_vec_1); + dComIfGp_particle_set(0x8ae4, &my_vec_1, &tevStr, &shape_angle, 0); + dComIfGp_particle_set(0x8ae5, &my_vec_1, &tevStr, &shape_angle, 0); + dComIfGp_particle_set(0x8ae6, &my_vec_1, &tevStr, &shape_angle, 0); + dComIfGp_getVibration().StartShock(8, 0x1f, cXyz(0.0f, 1.0f, 0.0f)); + fopAcM_seStartCurrent(this, 0x8000b, 0); + speed.y = 40.0f; + } + } + } + mCyl.SetCoHitCallback(NULL); } /* 80BA0964-80BA0974 000F64 0010+00 2/1 0/0 0/0 .text eventStart__14daObjYtaihou_cFv */ -void daObjYtaihou_c::eventStart() { - // NONMATCHING +BOOL daObjYtaihou_c::eventStart() { + mStartBomb = 0x5a; + return 1; } /* 80BA0974-80BA09E4 000F74 0070+00 1/0 0/0 0/0 .text CreateHeap__14daObjYtaihou_cFv */ -void daObjYtaihou_c::CreateHeap() { - // NONMATCHING +int daObjYtaihou_c::CreateHeap() { + J3DModelData* model_data = (J3DModelData*) dComIfG_getObjectRes(l_arcName[0], 0x4); + JUT_ASSERT(0x247, model_data != NULL); + mpModel = mDoExt_J3DModel__create(model_data, 0x80000, 0x11000084); + if (mpModel) { + return 1; + } else { + return 0; + } } /* 80BA09E4-80BA0A94 000FE4 00B0+00 1/0 0/0 0/0 .text Create__14daObjYtaihou_cFv */ -void daObjYtaihou_c::Create() { - // NONMATCHING +int daObjYtaihou_c::Create() { + mpModel->setBaseTRMtx(mMtx); + fopAcM_SetMtx(this, mMtx); + J3DJoint* joint = mpModel->getModelData()->getJointNodePointer(1); + Vec* min_vals = joint->getMin(); + Vec* max_vals = joint->getMax(); + fopAcM_setCullSizeBox(this, min_vals->x, min_vals->y, min_vals->z, + max_vals->x, max_vals->y, max_vals->z); + mStts.Init(0xff, 0, this); + mCyl.Set(l_cc_cyl_src); + mCyl.SetStts(&mStts); + mpBgW->SetPushPullCallback(pushPullcallBack); + return 1; } /* ############################################################################################## */ /* 80BA11C8-80BA11D4 000074 000C+00 1/1 0/0 0/0 .rodata l_cc_offset$4147 */ -SECTION_RODATA static u8 const l_cc_offset[12] = { - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xC2, 0x48, 0x00, 0x00, -}; -COMPILER_STRIP_GATE(0x80BA11C8, &l_cc_offset); +static const Vec l_cc_offset = {0.0f, 0.0f, -50.0f}; /* 80BA0A94-80BA0B4C 001094 00B8+00 1/0 0/0 0/0 .text Execute__14daObjYtaihou_cFPPA3_A4_f */ -void daObjYtaihou_c::Execute(f32 (**param_0)[3][4]) { - // NONMATCHING +int daObjYtaihou_c::Execute(Mtx** i_mtx) { + old.angle.y = shape_angle.y; + rotateCheck(); + setMtx(); + mpModel->setBaseTRMtx(mMtx); + *i_mtx = &mMtx; + eventUpdate(); + shotCheck(); + cXyz my_vec_0; + cMtx_multVec(mMtx, &l_cc_offset, &my_vec_0); + mCyl.SetC(my_vec_0); + dComIfG_Ccsp()->Set(&mCyl); + mOldAddAngle = mAddAngle; + mAddAngle = 0; + return 1; } /* 80BA0B4C-80BA0C1C 00114C 00D0+00 1/0 0/0 0/0 .text Draw__14daObjYtaihou_cFv */ -void daObjYtaihou_c::Draw() { - // NONMATCHING +int daObjYtaihou_c::Draw() { + g_env_light.settingTevStruct(0x10, ¤t.pos, &tevStr); + g_env_light.setLightTevColorType_MAJI(mpModel, &tevStr); + J3DModelData* model_data = mpModel->getModelData(); + model_data->getJointNodePointer(2)->getTransformInfo().mRotation.x = home.angle.z; + model_data->getJointNodePointer(3)->getTransformInfo().mRotation.x = -home.angle.z; + dComIfGd_setListBG(); + mDoExt_modelUpdateDL(mpModel); + dComIfGd_setList(); + return 1; } /* 80BA0C1C-80BA0C88 00121C 006C+00 1/0 0/0 0/0 .text Delete__14daObjYtaihou_cFv */ -void daObjYtaihou_c::Delete() { - // NONMATCHING +int daObjYtaihou_c::Delete() { + dComIfG_resDelete(this, l_arcName[0]); + daObjCarry_c* pCarry = (daObjCarry_c*) fopAcM_SearchByID(mIronBallId); + if (pCarry) { + setIronBall(pCarry); + } + return 1; +} + +/* 80BA0C88-80BA0DA4 001288 011C+00 1/0 0/0 0/0 .text daObjYtaihou_create1st__FP14daObjYtaihou_c + */ +static void daObjYtaihou_create1st(daObjYtaihou_c* i_this) { + fopAcM_SetupActor(i_this, daObjYtaihou_c); + i_this->create1st(); +} + +/* 80BA0E90-80BA0EB0 001490 0020+00 1/0 0/0 0/0 .text + * daObjYtaihou_MoveBGDelete__FP14daObjYtaihou_c */ +static void daObjYtaihou_MoveBGDelete(daObjYtaihou_c* i_this) { + i_this->MoveBGDelete(); +} + +/* 80BA0EB0-80BA0ED0 0014B0 0020+00 1/0 0/0 0/0 .text + * daObjYtaihou_MoveBGExecute__FP14daObjYtaihou_c */ +static void daObjYtaihou_MoveBGExecute(daObjYtaihou_c* i_this) { + i_this->MoveBGExecute(); +} + +/* 80BA0ED0-80BA0EFC 0014D0 002C+00 1/0 0/0 0/0 .text daObjYtaihou_MoveBGDraw__FP14daObjYtaihou_c + */ +static void daObjYtaihou_MoveBGDraw(daObjYtaihou_c* i_this) { + i_this->Draw(); } /* ############################################################################################## */ /* 80BA1230-80BA1250 -00001 0020+00 1/0 0/0 0/0 .data daObjYtaihou_METHODS */ static actor_method_class daObjYtaihou_METHODS = { - (process_method_func)daObjYtaihou_create1st__FP14daObjYtaihou_c, - (process_method_func)daObjYtaihou_MoveBGDelete__FP14daObjYtaihou_c, - (process_method_func)daObjYtaihou_MoveBGExecute__FP14daObjYtaihou_c, + (process_method_func)daObjYtaihou_create1st, + (process_method_func)daObjYtaihou_MoveBGDelete, + (process_method_func)daObjYtaihou_MoveBGExecute, 0, - (process_method_func)daObjYtaihou_MoveBGDraw__FP14daObjYtaihou_c, + (process_method_func)daObjYtaihou_MoveBGDraw, }; /* 80BA1250-80BA1280 -00001 0030+00 0/0 0/0 1/0 .data g_profile_Obj_Ytaihou */ @@ -563,329 +464,6 @@ extern actor_process_profile_definition g_profile_Obj_Ytaihou = { fopAc_CULLBOX_CUSTOM_e, // cullType }; -/* 80BA1280-80BA128C 0000A0 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, -}; - -/* 80BA128C-80BA1298 0000AC 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, -}; - -/* 80BA1298-80BA12A4 0000B8 000C+00 3/3 0/0 0/0 .data __vt__8cM3dGCyl */ -SECTION_DATA extern void* __vt__8cM3dGCyl[3] = { - (void*)NULL /* RTTI */, - (void*)NULL, - (void*)__dt__8cM3dGCylFv, -}; - -/* 80BA12A4-80BA12B0 0000C4 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, -}; - -/* 80BA12B0-80BA12C8 0000D0 0018+00 3/3 0/0 0/0 .data __vt__17dEvLib_callback_c */ -SECTION_DATA extern void* __vt__17dEvLib_callback_c[6] = { - (void*)NULL /* RTTI */, - (void*)NULL, - (void*)__dt__17dEvLib_callback_cFv, - (void*)eventStart__17dEvLib_callback_cFv, - (void*)eventRun__17dEvLib_callback_cFv, - (void*)eventEnd__17dEvLib_callback_cFv, -}; - -/* 80BA12C8-80BA1310 0000E8 0048+00 2/2 0/0 0/0 .data __vt__14daObjYtaihou_c */ -SECTION_DATA extern void* __vt__14daObjYtaihou_c[18] = { - (void*)NULL /* RTTI */, - (void*)NULL, - (void*)CreateHeap__14daObjYtaihou_cFv, - (void*)Create__14daObjYtaihou_cFv, - (void*)Execute__14daObjYtaihou_cFPPA3_A4_f, - (void*)Draw__14daObjYtaihou_cFv, - (void*)Delete__14daObjYtaihou_cFv, - (void*)IsDelete__16dBgS_MoveBgActorFv, - (void*)ToFore__16dBgS_MoveBgActorFv, - (void*)ToBack__16dBgS_MoveBgActorFv, - (void*)NULL, - (void*)NULL, - (void*)func_80BA113C, - (void*)func_80BA1134, - (void*)eventRun__17dEvLib_callback_cFv, - (void*)eventEnd__17dEvLib_callback_cFv, - (void*)eventStart__14daObjYtaihou_cFv, - (void*)__dt__14daObjYtaihou_cFv, -}; - -/* 80BA0C88-80BA0DA4 001288 011C+00 1/0 0/0 0/0 .text daObjYtaihou_create1st__FP14daObjYtaihou_c - */ -static void daObjYtaihou_create1st(daObjYtaihou_c* param_0) { - // NONMATCHING -} - -/* 80BA0DA4-80BA0DEC 0013A4 0048+00 1/0 0/0 0/0 .text __dt__8cM3dGCylFv */ -// cM3dGCyl::~cM3dGCyl() { -extern "C" void __dt__8cM3dGCylFv() { - // NONMATCHING -} - -/* 80BA0DEC-80BA0E34 0013EC 0048+00 1/0 0/0 0/0 .text __dt__8cM3dGAabFv */ -// cM3dGAab::~cM3dGAab() { -extern "C" void __dt__8cM3dGAabFv() { - // NONMATCHING -} - -/* 80BA0E34-80BA0E90 001434 005C+00 1/0 0/0 0/0 .text __dt__10dCcD_GSttsFv */ -// dCcD_GStts::~dCcD_GStts() { -extern "C" void __dt__10dCcD_GSttsFv() { - // NONMATCHING -} - -/* 80BA0E90-80BA0EB0 001490 0020+00 1/0 0/0 0/0 .text - * daObjYtaihou_MoveBGDelete__FP14daObjYtaihou_c */ -static void daObjYtaihou_MoveBGDelete(daObjYtaihou_c* param_0) { - // NONMATCHING -} - -/* 80BA0EB0-80BA0ED0 0014B0 0020+00 1/0 0/0 0/0 .text - * daObjYtaihou_MoveBGExecute__FP14daObjYtaihou_c */ -static void daObjYtaihou_MoveBGExecute(daObjYtaihou_c* param_0) { - // NONMATCHING -} - -/* 80BA0ED0-80BA0EFC 0014D0 002C+00 1/0 0/0 0/0 .text daObjYtaihou_MoveBGDraw__FP14daObjYtaihou_c - */ -static void daObjYtaihou_MoveBGDraw(daObjYtaihou_c* param_0) { - // NONMATCHING -} - -/* 80BA0EFC-80BA0F44 0014FC 0048+00 1/0 0/0 0/0 .text __dt__10cCcD_GSttsFv */ -// cCcD_GStts::~cCcD_GStts() { -extern "C" void __dt__10cCcD_GSttsFv() { - // NONMATCHING -} - -/* 80BA0F44-80BA0F8C 001544 0048+00 1/0 0/0 0/0 .text __dt__17dEvLib_callback_cFv */ -// dEvLib_callback_c::~dEvLib_callback_c() { -extern "C" void __dt__17dEvLib_callback_cFv() { - // NONMATCHING -} - -/* 80BA0F8C-80BA0F94 00158C 0008+00 1/0 0/0 0/0 .text eventStart__17dEvLib_callback_cFv - */ -// bool dEvLib_callback_c::eventStart() { -extern "C" bool eventStart__17dEvLib_callback_cFv() { - return true; -} - -/* 80BA0F94-80BA0F9C 001594 0008+00 2/0 0/0 0/0 .text eventRun__17dEvLib_callback_cFv */ -// bool dEvLib_callback_c::eventRun() { -extern "C" bool eventRun__17dEvLib_callback_cFv() { - return true; -} - -/* 80BA0F9C-80BA0FA4 00159C 0008+00 2/0 0/0 0/0 .text eventEnd__17dEvLib_callback_cFv */ -// bool dEvLib_callback_c::eventEnd() { -extern "C" bool eventEnd__17dEvLib_callback_cFv() { - return true; -} - -/* 80BA0FA4-80BA1118 0015A4 0174+00 2/1 0/0 0/0 .text __dt__14daObjYtaihou_cFv */ -daObjYtaihou_c::~daObjYtaihou_c() { - // NONMATCHING -} - -/* 80BA1118-80BA1134 001718 001C+00 1/1 0/0 0/0 .text cLib_calcTimer__FPs */ -extern "C" void func_80BA1118(void* _this, s16* param_0) { - // NONMATCHING -} - -/* 80BA1134-80BA113C 001734 0008+00 1/0 0/0 0/0 .text @1448@eventStart__14daObjYtaihou_cFv */ -static void func_80BA1134() { - // NONMATCHING -} - -/* 80BA113C-80BA1144 00173C 0008+00 1/0 0/0 0/0 .text @1448@__dt__14daObjYtaihou_cFv */ -static void func_80BA113C() { - // NONMATCHING -} - -/* ############################################################################################## */ -/* 80BA137C-80BA1380 00006C 0004+00 0/0 0/0 0/0 .bss - * sInstance__40JASGlobalInstance<19JASDefaultBankTable> */ -#pragma push -#pragma force_active on -static u8 data_80BA137C[4]; -#pragma pop - -/* 80BA1380-80BA1384 000070 0004+00 0/0 0/0 0/0 .bss - * sInstance__35JASGlobalInstance<14JASAudioThread> */ -#pragma push -#pragma force_active on -static u8 data_80BA1380[4]; -#pragma pop - -/* 80BA1384-80BA1388 000074 0004+00 0/0 0/0 0/0 .bss sInstance__27JASGlobalInstance<7Z2SeMgr> */ -#pragma push -#pragma force_active on -static u8 data_80BA1384[4]; -#pragma pop - -/* 80BA1388-80BA138C 000078 0004+00 0/0 0/0 0/0 .bss sInstance__28JASGlobalInstance<8Z2SeqMgr> */ -#pragma push -#pragma force_active on -static u8 data_80BA1388[4]; -#pragma pop - -/* 80BA138C-80BA1390 00007C 0004+00 0/0 0/0 0/0 .bss sInstance__31JASGlobalInstance<10Z2SceneMgr> - */ -#pragma push -#pragma force_active on -static u8 data_80BA138C[4]; -#pragma pop - -/* 80BA1390-80BA1394 000080 0004+00 0/0 0/0 0/0 .bss sInstance__32JASGlobalInstance<11Z2StatusMgr> - */ -#pragma push -#pragma force_active on -static u8 data_80BA1390[4]; -#pragma pop - -/* 80BA1394-80BA1398 000084 0004+00 0/0 0/0 0/0 .bss sInstance__31JASGlobalInstance<10Z2DebugSys> - */ -#pragma push -#pragma force_active on -static u8 data_80BA1394[4]; -#pragma pop - -/* 80BA1398-80BA139C 000088 0004+00 0/0 0/0 0/0 .bss - * sInstance__36JASGlobalInstance<15JAISoundStarter> */ -#pragma push -#pragma force_active on -static u8 data_80BA1398[4]; -#pragma pop - -/* 80BA139C-80BA13A0 00008C 0004+00 0/0 0/0 0/0 .bss - * sInstance__35JASGlobalInstance<14Z2SoundStarter> */ -#pragma push -#pragma force_active on -static u8 data_80BA139C[4]; -#pragma pop - -/* 80BA13A0-80BA13A4 000090 0004+00 0/0 0/0 0/0 .bss - * sInstance__33JASGlobalInstance<12Z2SpeechMgr2> */ -#pragma push -#pragma force_active on -static u8 data_80BA13A0[4]; -#pragma pop - -/* 80BA13A4-80BA13A8 000094 0004+00 0/0 0/0 0/0 .bss sInstance__28JASGlobalInstance<8JAISeMgr> */ -#pragma push -#pragma force_active on -static u8 data_80BA13A4[4]; -#pragma pop - -/* 80BA13A8-80BA13AC 000098 0004+00 0/0 0/0 0/0 .bss sInstance__29JASGlobalInstance<9JAISeqMgr> */ -#pragma push -#pragma force_active on -static u8 data_80BA13A8[4]; -#pragma pop - -/* 80BA13AC-80BA13B0 00009C 0004+00 0/0 0/0 0/0 .bss - * sInstance__33JASGlobalInstance<12JAIStreamMgr> */ -#pragma push -#pragma force_active on -static u8 data_80BA13AC[4]; -#pragma pop - -/* 80BA13B0-80BA13B4 0000A0 0004+00 0/0 0/0 0/0 .bss sInstance__31JASGlobalInstance<10Z2SoundMgr> - */ -#pragma push -#pragma force_active on -static u8 data_80BA13B0[4]; -#pragma pop - -/* 80BA13B4-80BA13B8 0000A4 0004+00 0/0 0/0 0/0 .bss - * sInstance__33JASGlobalInstance<12JAISoundInfo> */ -#pragma push -#pragma force_active on -static u8 data_80BA13B4[4]; -#pragma pop - -/* 80BA13B8-80BA13BC 0000A8 0004+00 0/0 0/0 0/0 .bss - * sInstance__34JASGlobalInstance<13JAUSoundTable> */ -#pragma push -#pragma force_active on -static u8 data_80BA13B8[4]; -#pragma pop - -/* 80BA13BC-80BA13C0 0000AC 0004+00 0/0 0/0 0/0 .bss - * sInstance__38JASGlobalInstance<17JAUSoundNameTable> */ -#pragma push -#pragma force_active on -static u8 data_80BA13BC[4]; -#pragma pop - -/* 80BA13C0-80BA13C4 0000B0 0004+00 0/0 0/0 0/0 .bss - * sInstance__33JASGlobalInstance<12JAUSoundInfo> */ -#pragma push -#pragma force_active on -static u8 data_80BA13C0[4]; -#pragma pop - -/* 80BA13C4-80BA13C8 0000B4 0004+00 0/0 0/0 0/0 .bss sInstance__32JASGlobalInstance<11Z2SoundInfo> - */ -#pragma push -#pragma force_active on -static u8 data_80BA13C4[4]; -#pragma pop - -/* 80BA13C8-80BA13CC 0000B8 0004+00 0/0 0/0 0/0 .bss - * sInstance__34JASGlobalInstance<13Z2SoundObjMgr> */ -#pragma push -#pragma force_active on -static u8 data_80BA13C8[4]; -#pragma pop - -/* 80BA13CC-80BA13D0 0000BC 0004+00 0/0 0/0 0/0 .bss sInstance__31JASGlobalInstance<10Z2Audience> - */ -#pragma push -#pragma force_active on -static u8 data_80BA13CC[4]; -#pragma pop - -/* 80BA13D0-80BA13D4 0000C0 0004+00 0/0 0/0 0/0 .bss sInstance__32JASGlobalInstance<11Z2FxLineMgr> - */ -#pragma push -#pragma force_active on -static u8 data_80BA13D0[4]; -#pragma pop - -/* 80BA13D4-80BA13D8 0000C4 0004+00 0/0 0/0 0/0 .bss sInstance__31JASGlobalInstance<10Z2EnvSeMgr> - */ -#pragma push -#pragma force_active on -static u8 data_80BA13D4[4]; -#pragma pop - -/* 80BA13D8-80BA13DC 0000C8 0004+00 0/0 0/0 0/0 .bss sInstance__32JASGlobalInstance<11Z2SpeechMgr> - */ -#pragma push -#pragma force_active on -static u8 data_80BA13D8[4]; -#pragma pop - -/* 80BA13DC-80BA13E0 0000CC 0004+00 0/0 0/0 0/0 .bss - * sInstance__34JASGlobalInstance<13Z2WolfHowlMgr> */ -#pragma push -#pragma force_active on -static u8 data_80BA13DC[4]; -#pragma pop +AUDIO_INSTANCES; /* 80BA11D4-80BA11D4 000080 0000+00 0/0 0/0 0/0 .rodata @stringBase0 */