diff --git a/config/GZ2E01/rels/d_a_bd/symbols.txt b/config/GZ2E01/rels/d_a_bd/symbols.txt index 50537f86c51..3aaec7bce54 100644 --- a/config/GZ2E01/rels/d_a_bd/symbols.txt +++ b/config/GZ2E01/rels/d_a_bd/symbols.txt @@ -131,7 +131,7 @@ __global_destructor_chain = .bss:0x00000000; // type:object size:0x4 scope:globa @1012 = .bss:0x0000003C; // type:object size:0x1 scope:local @1010 = .bss:0x00000040; // type:object size:0x1 scope:local @1009 = .bss:0x00000044; // type:object size:0x1 scope:local -lbl_60_bss_45 = .bss:0x00000045; // type:object size:0x1 data:byte +l_HIOInit = .bss:0x00000045; // type:object size:0x1 data:byte @3937 = .bss:0x00000048; // type:object size:0xC scope:local l_HIO = .bss:0x00000054; // type:object size:0x20 scope:global data:byte @3946 = .bss:0x00000074; // type:object size:0xC scope:local diff --git a/config/GZ2E01/rels/d_a_e_sb/symbols.txt b/config/GZ2E01/rels/d_a_e_sb/symbols.txt index 2e3a678cf72..94ea694cdb5 100644 --- a/config/GZ2E01/rels/d_a_e_sb/symbols.txt +++ b/config/GZ2E01/rels/d_a_e_sb/symbols.txt @@ -5,17 +5,17 @@ __register_global_object = .text:0x00000078; // type:function size:0x1C scope:gl __destroy_global_chain = .text:0x00000094; // type:function size:0x58 scope:global __ct__12daE_SB_HIO_cFv = .text:0x000000EC; // type:function size:0x8C scope:global CreateHeap__8daE_SB_cFv = .text:0x00000178; // type:function size:0xF8 scope:global -useHeapInit__FP10fopAc_ac_c = .text:0x00000270; // type:function size:0x20 scope:global +useHeapInit__FP10fopAc_ac_c = .text:0x00000270; // type:function size:0x20 scope:local initCcCylinder__8daE_SB_cFv = .text:0x00000290; // type:function size:0x60 scope:global setCcCylinder__8daE_SB_cFv = .text:0x000002F0; // type:function size:0x48 scope:global ctrlJoint__8daE_SB_cFP8J3DJointP8J3DModel = .text:0x00000338; // type:function size:0xF8 scope:global -JointCallBack__FP8J3DJointi = .text:0x00000430; // type:function size:0x4C scope:global +JointCallBack__FP8J3DJointi = .text:0x00000430; // type:function size:0x4C scope:local Particle_Set__8daE_SB_cFUs = .text:0x0000047C; // type:function size:0x70 scope:global SetAnm__8daE_SB_cFiiff = .text:0x000004EC; // type:function size:0xAC scope:global MemberClear__8daE_SB_cFv = .text:0x00000598; // type:function size:0x5C scope:global other_bg_check__FP8daE_SB_cP10fopAc_ac_c = .text:0x000005F4; // type:function size:0xD8 scope:global -s_obj_sub__FPvPv = .text:0x000006CC; // type:function size:0x108 scope:global -s_bomb_sub__FPvPv = .text:0x000007D4; // type:function size:0xA0 scope:global +s_obj_sub__FPvPv = .text:0x000006CC; // type:function size:0x108 scope:local +s_bomb_sub__FPvPv = .text:0x000007D4; // type:function size:0xA0 scope:local Shield_Motion__8daE_SB_cFv = .text:0x00000874; // type:function size:0x15C scope:global AttackStop__8daE_SB_cFv = .text:0x000009D0; // type:function size:0x50 scope:global AttackSetSP__8daE_SB_cFv = .text:0x00000A20; // type:function size:0x200 scope:global @@ -50,16 +50,16 @@ Execute__8daE_SB_cFv = .text:0x00002E30; // type:function size:0x12C scope:globa Draw__8daE_SB_cFv = .text:0x00002F5C; // type:function size:0x11C scope:global Delete__8daE_SB_cFv = .text:0x00003078; // type:function size:0x68 scope:global setBaseMtx__8daE_SB_cFv = .text:0x000030E0; // type:function size:0x78 scope:global -daE_SB_Draw__FP8daE_SB_c = .text:0x00003158; // type:function size:0x20 scope:global -daE_SB_Execute__FP8daE_SB_c = .text:0x00003178; // type:function size:0x20 scope:global -daE_SB_IsDelete__FP8daE_SB_c = .text:0x00003198; // type:function size:0x8 scope:global -daE_SB_Delete__FP8daE_SB_c = .text:0x000031A0; // type:function size:0x20 scope:global +daE_SB_Draw__FP8daE_SB_c = .text:0x00003158; // type:function size:0x20 scope:local +daE_SB_Execute__FP8daE_SB_c = .text:0x00003178; // type:function size:0x20 scope:local +daE_SB_IsDelete__FP8daE_SB_c = .text:0x00003198; // type:function size:0x8 scope:local +daE_SB_Delete__FP8daE_SB_c = .text:0x000031A0; // type:function size:0x20 scope:local Create__8daE_SB_cFv = .text:0x000031C0; // type:function size:0x438 scope:global __dt__8cM3dGCylFv = .text:0x000035F8; // type:function size:0x48 scope:global __dt__8cM3dGSphFv = .text:0x00003640; // type:function size:0x48 scope:global __dt__8cM3dGAabFv = .text:0x00003688; // type:function size:0x48 scope:global __dt__12dBgS_ObjAcchFv = .text:0x000036D0; // type:function size:0x70 scope:global -daE_SB_Create__FP10fopAc_ac_c = .text:0x00003740; // type:function size:0x20 scope:global +daE_SB_Create__FP10fopAc_ac_c = .text:0x00003740; // type:function size:0x20 scope:local __dt__12daE_SB_HIO_cFv = .text:0x00003760; // type:function size:0x48 scope:global __sinit_d_a_e_sb_cpp = .text:0x000037A8; // type:function size:0x3C scope:local @36@__dt__12dBgS_ObjAcchFv = .text:0x000037E4; // type:function size:0x8 scope:local @@ -111,7 +111,7 @@ ccCylSrc$3693 = .rodata:0x0000002C; // type:object size:0x44 scope:local @4739 = .rodata:0x000000F8; // type:object size:0x4 scope:local @stringBase0 = .rodata:0x000000FC; // type:object size:0x5 scope:local data:string_table @4468 = .data:0x00000000; // type:object size:0x1C scope:local -l_daE_SB_Method = .data:0x0000001C; // type:object size:0x20 scope:global +l_daE_SB_Method = .data:0x0000001C; // type:object size:0x20 scope:local g_profile_E_SB = .data:0x0000003C; // type:object size:0x30 scope:global __vt__8cM3dGCyl = .data:0x0000006C; // type:object size:0xC scope:global __vt__8cM3dGSph = .data:0x00000078; // type:object size:0xC scope:global @@ -136,12 +136,12 @@ __global_destructor_chain = .bss:0x00000000; // type:object size:0x4 scope:globa @1012 = .bss:0x0000003C; // type:object size:0x1 scope:local @1010 = .bss:0x00000040; // type:object size:0x1 scope:local @1009 = .bss:0x00000044; // type:object size:0x1 scope:local -lbl_227_bss_45 = .bss:0x00000045; // type:object size:0x1 data:byte +l_HIOInit = .bss:0x00000045; // type:object size:0x1 scope:local data:byte @3653 = .bss:0x00000048; // type:object size:0xC scope:local -l_HIO = .bss:0x00000054; // type:object size:0x40 scope:global data:byte -s_Bomb__22@unnamed@d_a_e_sb_cpp@ = .bss:0x00000094; // type:object size:0x4 scope:global data:4byte -s_TargetAngle__22@unnamed@d_a_e_sb_cpp@ = .bss:0x00000098; // type:object size:0x2 scope:global data:2byte -s_LinkPos__22@unnamed@d_a_e_sb_cpp@ = .bss:0x0000009C; // type:object size:0x4 scope:global data:4byte +l_HIO = .bss:0x00000054; // type:object size:0x40 scope:local data:byte +s_Bomb__22@unnamed@d_a_e_sb_cpp@ = .bss:0x00000094; // type:object size:0x4 scope:local data:4byte +s_TargetAngle__22@unnamed@d_a_e_sb_cpp@ = .bss:0x00000098; // type:object size:0x2 scope:local data:2byte +s_LinkPos__22@unnamed@d_a_e_sb_cpp@ = .bss:0x0000009C; // type:object size:0x4 scope:local data:4byte sInstance__40JASGlobalInstance<19JASDefaultBankTable> = .bss:0x000000A0; // type:object size:0x4 scope:global sInstance__35JASGlobalInstance<14JASAudioThread> = .bss:0x000000A4; // type:object size:0x4 scope:global sInstance__27JASGlobalInstance<7Z2SeMgr> = .bss:0x000000A8; // type:object size:0x4 scope:global diff --git a/config/GZ2P01/rels/d_a_bd/symbols.txt b/config/GZ2P01/rels/d_a_bd/symbols.txt index 50537f86c51..3aaec7bce54 100644 --- a/config/GZ2P01/rels/d_a_bd/symbols.txt +++ b/config/GZ2P01/rels/d_a_bd/symbols.txt @@ -131,7 +131,7 @@ __global_destructor_chain = .bss:0x00000000; // type:object size:0x4 scope:globa @1012 = .bss:0x0000003C; // type:object size:0x1 scope:local @1010 = .bss:0x00000040; // type:object size:0x1 scope:local @1009 = .bss:0x00000044; // type:object size:0x1 scope:local -lbl_60_bss_45 = .bss:0x00000045; // type:object size:0x1 data:byte +l_HIOInit = .bss:0x00000045; // type:object size:0x1 data:byte @3937 = .bss:0x00000048; // type:object size:0xC scope:local l_HIO = .bss:0x00000054; // type:object size:0x20 scope:global data:byte @3946 = .bss:0x00000074; // type:object size:0xC scope:local diff --git a/config/ShieldD/rels/d_a_bdD/symbols.txt b/config/ShieldD/rels/d_a_bdD/symbols.txt index 47b18fd03e8..964778448b2 100644 --- a/config/ShieldD/rels/d_a_bdD/symbols.txt +++ b/config/ShieldD/rels/d_a_bdD/symbols.txt @@ -147,7 +147,7 @@ lbl_58_data_4B0 = .data:0x000004B0; // type:object size:0x24 @122173 = .data:0x00000698; // type:object size:0xC scope:local @122174 = .data:0x000006BC; // type:object size:0x11 scope:local data:string @122175 = .data:0x000006E4; // type:object size:0xD scope:local data:string -lbl_58_bss_0 = .bss:0x00000000; // type:object size:0x1 data:byte +l_HIOInit = .bss:0x00000000; // type:object size:0x1 data:byte l_HIO = .bss:0x00000008; // type:object size:0x20 scope:global data:byte land_sp_pos = .bss:0x00000028; // type:object size:0x30 scope:global rope_pt = .bss:0x00000058; // type:object size:0x4 scope:global data:4byte diff --git a/configure.py b/configure.py index ca6df41769a..1b20a23cdce 100755 --- a/configure.py +++ b/configure.py @@ -1537,7 +1537,7 @@ config.libs = [ ActorRel(MatchingFor("GZ2E01"), "d_a_tag_attention"), ActorRel(MatchingFor("GZ2E01"), "d_a_alldie"), ActorRel(MatchingFor("GZ2E01"), "d_a_andsw2"), - ActorRel(NonMatching, "d_a_bd"), + ActorRel(Equivalent, "d_a_bd"), # weak func order ActorRel(MatchingFor("GZ2E01"), "d_a_canoe"), ActorRel(MatchingFor("GZ2E01"), "d_a_cstaF"), ActorRel(MatchingFor("GZ2E01"), "d_a_demo_item"), @@ -1704,7 +1704,7 @@ config.libs = [ ActorRel(Equivalent, "d_a_e_rdb"), # weak func order ActorRel(Equivalent, "d_a_e_rdy"), # weak func order ActorRel(NonMatching, "d_a_e_s1"), - ActorRel(NonMatching, "d_a_e_sb"), + ActorRel(MatchingFor("GZ2E01"), "d_a_e_sb"), ActorRel(NonMatching, "d_a_e_sf"), ActorRel(MatchingFor("GZ2E01"), "d_a_e_sg"), ActorRel(NonMatching, "d_a_e_sh"), @@ -2154,8 +2154,8 @@ config.libs = [ ActorRel(MatchingFor("GZ2E01"), "d_a_obj_vground"), ActorRel(NonMatching, "d_a_obj_volcball"), ActorRel(MatchingFor("GZ2E01"), "d_a_obj_volcbom"), - ActorRel(NonMatching, "d_a_obj_warp_kbrg"), - ActorRel(NonMatching, "d_a_obj_warp_obrg"), + ActorRel(MatchingFor("GZ2E01"), "d_a_obj_warp_kbrg"), + ActorRel(MatchingFor("GZ2E01"), "d_a_obj_warp_obrg"), ActorRel(MatchingFor("GZ2E01"), "d_a_obj_waterGate"), ActorRel(Equivalent, "d_a_obj_waterPillar"), # vtable order ActorRel(MatchingFor("GZ2E01"), "d_a_obj_waterfall"), diff --git a/include/d/actor/d_a_bd.h b/include/d/actor/d_a_bd.h index 0cacdf28f51..a5e41c7a838 100644 --- a/include/d/actor/d_a_bd.h +++ b/include/d/actor/d_a_bd.h @@ -1,6 +1,8 @@ #ifndef D_A_BD_H #define D_A_BD_H +#include "d/d_bg_s_acch.h" +#include "d/d_cc_d.h" #include "f_op/f_op_actor_mng.h" /** @@ -11,18 +13,95 @@ * @details Used by birds that sit on Coro's head. * */ -class bd_class : public fopEn_enemy_c { -private: - /* 0x5ac */ u8 field_0x5ac[0x9ec - 0x5ac]; + +enum da_BD_ANM { + ANM_FLY = 5, + ANM_KAKKU, + ANM_KAKKU1, + ANM_PITA_DOWN, + ANM_PITA_LEFTUP, + ANM_PITA_RIGHT, + ANM_PYON, +}; + +enum Action_bd { + ACT_GROUND = 0, + ACT_FLY = 1, + ACT_DROP = 2, + ACT_LANDING = 3, + ACT_LANDING2 = 4, + ACT_LANDING3 = 5, + ACT_ROPE = 6, + ACT_KKRI = 7, +}; + +class bd_class { +public: + /* 0x000 */ fopEn_enemy_c enemy; + /* 0x5AC */ request_of_phase_process_class mPhase; + /* 0x5B4 */ u8 field_0x5B4; + /* 0x5B5 */ u8 field_0x5B5; + /* 0x5B6 */ u8 field_0x5B6; + /* 0x5B7 */ u8 field_0x5B7; + /* 0x5B8 */ u8 field_0x5B8; + /* 0x5B9 */ u8 field_0x5B9; + /* 0x5B8 */ char pad5B8[0x8]; // Padding + /* 0x5C2 */ s8 field_0x5C2; + /* 0x5C4 */ cXyz field_0x5C4; + /* 0x5D0 */ s16 mTargetAngleY; + /* 0x5D4 */ actor_place* field_0x5D4; + /* 0x5D8 */ s16 field_0x5D8; + /* 0x5DC */ f32 field_0x5DC; + /* 0x5E0 */ f32 field_0x5E0; + /* 0x5E4 */ mDoExt_McaMorf* mpMorf; + /* 0x5E8 */ mDoExt_btkAnm* mpBtk; + /* 0x5EC */ s8 field_0x5EC; + /* 0x5F0 */ s32 mAnmID; + /* 0x5F4 */ s16 mChirpDist; + /* 0x5F8 */ Z2SoundObjSimple mSound; + /* 0x618 */ s16 field_0x618; + /* 0x61A */ s16 mActionID; + /* 0x61C */ s16 field_0x61C; + /* 0x61E */ s16 field_0x61E; + /* 0x620 */ f32 field_0x620; + /* 0x624 */ f32 field_0x624; + /* 0x628 */ s16 field_0x628; + /* 0x62C */ cXyz* field_0x62C; + /* 0x630 */ int field_0x630; + /* 0x634 */ cXyz field_0x634; + /* 0x640 */ s16 field_0x640; + /* 0x642 */ s16 field_0x642; + /* 0x644 */ char pad644[1]; // Padding + /* 0x645 */ s8 field_0x645; + /* 0x646 */ char pad646[0x64C - 0x646]; // Padding + /* 0x64C */ s16 field_0x64C[4]; + /* 0x654 */ s16 field_0x654; + /* 0x656 */ s8 field_0x656; + /* 0x658 */ s16 field_0x658; + /* 0x65C */ dBgS_AcchCir mAcchCir; + /* 0x69C */ dBgS_ObjAcch mBgc; + /* 0x874 */ dCcD_Stts mStts; + /* 0x8B0 */ dCcD_Sph mSphere; + /* 0x9E8 */ u8 field_0x9E8; }; STATIC_ASSERT(sizeof(bd_class) == 0x9ec); -class daBd_HIO_c { +class daBd_HIO_c : public JORReflexible { public: /* 804D6C4C */ daBd_HIO_c(); - /* 804D9CB8 */ ~daBd_HIO_c(); + /* 804D9CB8 */ virtual ~daBd_HIO_c() {} + + void genMessage(JORMContext*); + + /* 0x04 */ s8 id; + /* 0x08 */ f32 mBasicSize; + /* 0x0C */ f32 mFlightSpeed; + /* 0x10 */ f32 mGroundSpeed; + /* 0x14 */ s16 mFlightTime; + /* 0x18 */ f32 mLinkDetectRange; + /* 0x1C */ s16 mChirpDist; + /* 0x1E */ s8 field_0x1E; }; - #endif /* D_A_BD_H */ diff --git a/include/d/actor/d_a_e_sb.h b/include/d/actor/d_a_e_sb.h index ba3ac14ccc0..f7a76a92a1a 100644 --- a/include/d/actor/d_a_e_sb.h +++ b/include/d/actor/d_a_e_sb.h @@ -1,5 +1,8 @@ #ifndef D_A_E_SB_H #define D_A_E_SB_H +#include "d/d_bg_s_acch.h" +#include "d/d_cc_d.h" +#include "d/d_cc_uty.h" #include "f_op/f_op_actor_mng.h" /** @@ -11,10 +14,11 @@ * */ class daE_SB_c : public fopEn_enemy_c { - /* 807816D8 */ void CreateHeap(); +public: + /* 807816D8 */ int CreateHeap(); /* 807817F0 */ void initCcCylinder(); /* 80781850 */ void setCcCylinder(); - /* 80781898 */ void ctrlJoint(J3DJoint*, J3DModel*); + /* 80781898 */ int ctrlJoint(J3DJoint*, J3DModel*); /* 807819DC */ void Particle_Set(u16); /* 80781A4C */ void SetAnm(int, int, f32, f32); /* 80781AF8 */ void MemberClear(); @@ -48,20 +52,84 @@ class daE_SB_c : public fopEn_enemy_c { /* 80783FBC */ void HashiraVib(); /* 80784144 */ void Yazirushi(); /* 807841CC */ void setGroundAngle(); - /* 80784390 */ void Execute(); - /* 807844BC */ void Draw(); - /* 807845D8 */ void Delete(); + /* 80784390 */ int Execute(); + /* 807844BC */ int Draw(); + /* 807845D8 */ int Delete(); /* 80784640 */ void setBaseMtx(); - /* 80784720 */ void Create(); + /* 80784720 */ cPhs__Step Create(); private: - /* 0x5ac */ u8 field_0x5ac[0xbc0 - 0x5ac]; + /* 0x5AC */ int field_0x5ac; + /* 0x5B0 */ int field_0x5b0; + /* 0x5B4 */ int field_0x5b4; + /* 0x5B8 */ int field_0x5b8; + /* 0x5BC */ int field_0x5bc; + /* 0x5C0 */ int field_0x5c0; + /* 0x5C4 */ int field_0x5c4; + /* 0x5C8 */ int field_0x5c8; + /* 0x5CC */ u32 field_0x5cc; + /* 0x5D0 */ u8 field_0x5d0; + /* 0x5D2 */ s16 field_0x5d2; + /* 0x5D1 */ f32 field_0x5d4; + /* 0x5D8 */ csXyz field_0x5d8; + /* 0x5DE */ csXyz field_0x5de; + /* 0x5E4 */ u8 field_0x5e4; + /* 0x5E6 */ s16 field_0x5e6; + /* 0x5E8 */ u8 field_0x5e8; +public: + /* 0x5EC */ cXyz* field_0x5ec; + /* 0x5F0 */ f32 field_0x5f0; +private: + /* 0x5F4 */ cXyz field_0x5f4; + /* 0x600 */ s16 field_0x600; + /* 0x602 */ u8 field_0x602; + /* 0x603 */ u8 field_0x603; + /* 0x604 */ u8 field_0x604; + /* 0x608 */ int field_0x608; + /* 0x60C */ int field_0x60c; + /* 0x610 */ s16 field_0x610; + /* 0x612 */ s16 field_0x612; + /* 0x614 */ csXyz field_0x614; + /* 0x61A */ u8 field_0x61a; + /* 0x61C */ mDoExt_McaMorfSO* mpMorf; + /* 0x620 */ request_of_phase_process_class mPhaseReq; + /* 0x628 */ int mShadowKey; + /* 0x62C */ Z2CreatureEnemy mSound; + /* 0x6D0 */ dBgS_AcchCir mAcchCir; + /* 0x710 */ dBgS_ObjAcch mAcch; + /* 0x8E8 */ dCcD_Stts mStts; + /* 0x924 */ dCcD_Sph mSph; + /* 0xA5C */ dCcD_Cyl mCyl; + /* 0xB98 */ dCcU_AtInfo mAtInfo; + /* 0xBBC */ u8 field_0xbbc; }; -STATIC_ASSERT(sizeof(daE_SB_c) == 0xbc0); +STATIC_ASSERT(sizeof(daE_SB_c) == 0xBC0); -class daE_SB_HIO_c { +class daE_SB_HIO_c : public JORReflexible { +public: /* 8078164C */ daE_SB_HIO_c(); - /* 80784CC0 */ ~daE_SB_HIO_c(); + /* 80784CC0 */ virtual ~daE_SB_HIO_c() {} + +#if DEBUG + void genMessage(JORMContext*); +#endif + + /* 0x04 */ s8 field_0x04; + /* 0x08 */ f32 search_area; + /* 0x0C */ f32 distance_home; + /* 0x10 */ f32 jump_xz_axis_speed; + /* 0x14 */ f32 jump_y_axis_speed; + /* 0x18 */ f32 atk_jump_xz_axis_speed; + /* 0x1C */ f32 atk_y_axis_speed; + /* 0x20 */ f32 magne_on_atk_y_axis_speed; + /* 0x24 */ f32 grav_reduct_rate; + /* 0x28 */ f32 other_anm_speed; + /* 0x2C */ f32 shield_atk_anm_speed; + /* 0x30 */ f32 death_anm_speed; + /* 0x34 */ f32 size; + /* 0x38 */ f32 atk_start_range; + /* 0x3C */ s16 field_0x3c; + /* 0x3E */ s16 field_0x3e; }; diff --git a/include/d/actor/d_a_midna.h b/include/d/actor/d_a_midna.h index 5f579756300..d78bbb8097d 100644 --- a/include/d/actor/d_a_midna.h +++ b/include/d/actor/d_a_midna.h @@ -383,6 +383,11 @@ public: mpKago = NULL; } + void onTagWaitPosPortalObj(const cXyz* i_pos) { + mTagWaitPos = *i_pos; + onStateFlg0(daMidna_FLG0(FLG0_PORTAL_OBJ_CALL | FLG0_TAG_WAIT)); + } + static daMidna_texData_s const m_texDataTable[21]; static daMidna_anmData_s const m_anmDataTable[53]; diff --git a/include/d/actor/d_a_npc_kkri.h b/include/d/actor/d_a_npc_kkri.h index 87978fe34f6..6dbf9cbfe17 100644 --- a/include/d/actor/d_a_npc_kkri.h +++ b/include/d/actor/d_a_npc_kkri.h @@ -57,11 +57,23 @@ public: /* 80553404 */ void checkChangeJoint(int); /* 80553414 */ void checkRemoveJoint(int); + MtxP getBd3Mtx() { + return mpMorf->getModel()->getAnmMtx(0x11); + } + MtxP getBd2Mtx() { + return mpMorf->getModel()->getAnmMtx(6); + } + MtxP getBd1Mtx() { + return mpMorf->getModel()->getAnmMtx(5); + } + static void* mCutNameList[3]; static u8 mCutList[36]; private: - /* 0x568 */ u8 field_0x568[0xfdc - 0x568]; + /* 0x568 */ u8 field_0x568[0x578 - 0x568]; + /* 0x578 */ mDoExt_McaMorfSO* mpMorf; + /* 0x57C */ u8 field_0x57C[0xfdc - 0x57C]; }; STATIC_ASSERT(sizeof(daNpc_Kkri_c) == 0xfdc); diff --git a/include/d/actor/d_a_obj_warp_kbrg.h b/include/d/actor/d_a_obj_warp_kbrg.h index dd112130927..6b8dc9d8cd2 100644 --- a/include/d/actor/d_a_obj_warp_kbrg.h +++ b/include/d/actor/d_a_obj_warp_kbrg.h @@ -2,23 +2,36 @@ #define D_A_OBJ_WARP_KBRG_H #include "f_op/f_op_actor_mng.h" +#include "d/d_bg_s_movebg_actor.h" +#include "d/d_msg_flow.h" /** * @ingroup actors-objects * @class daObjWarpKBrg_c - * @brief Warp K Bridge (Kakariko Gorge Bridge?) + * @brief Kakariko Gorge Warp Bridge * * @details * */ -class daObjWarpKBrg_c : public fopAc_ac_c { +class daObjWarpKBrg_c : public dBgS_MoveBgActor { public: + enum Action_e { + ACTION_WAIT_e, + ACTION_ORDER_EVENT_e, + ACTION_TALK_EVENT_e, + ACTION_WAIT_WARP_EVENT_e, + ACTION_WARP_EVENT_e, + ACTION_ORDER_A_TALK_EVENT_e, + ACTION_DEAD_e, + ACTION_WAIT2_e, + ACTION_ORDER_EVENT2_e, + ACTION_WARP_EVENT2_e, + ACTION_DEAD2_e, + }; + /* 80D26FA8 */ void initBaseMtx(); /* 80D27008 */ void setBaseMtx(); - /* 80D270C4 */ void Create(); - /* 80D27300 */ void CreateHeap(); - /* 80D276B4 */ void create1st(); - /* 80D2781C */ void Execute(f32 (**)[3][4]); + /* 80D276B4 */ int create1st(); /* 80D27890 */ void event_proc_call(); /* 80D27A38 */ void orderZHintEvent(); /* 80D27B2C */ void actionWait(); @@ -34,7 +47,7 @@ public: /* 80D28248 */ void actionDead2(); /* 80D2824C */ void demoProc(); /* 80D28A50 */ void calcObjPos(); - /* 80D28AE0 */ void checkTalkDistance(); + /* 80D28AE0 */ bool checkTalkDistance(); /* 80D28B7C */ void calcMidnaWaitPos(); /* 80D28C10 */ void setBindEffect(); /* 80D28CDC */ void followBindEffect(); @@ -44,11 +57,50 @@ public: /* 80D290A8 */ void followDstEffect(); /* 80D29158 */ void endSrcEffect(); /* 80D291FC */ void endDstEffect(); - /* 80D292A0 */ void Draw(); - /* 80D29448 */ void Delete(); -private: - /* 0x568 */ u8 field_0x568[0x69c - 0x568]; + /* 80D27300 */ virtual int CreateHeap(); + /* 80D270C4 */ virtual int Create(); + /* 80D2781C */ virtual int Execute(Mtx**); + /* 80D292A0 */ virtual int Draw(); + /* 80D29448 */ virtual int Delete(); + + u8 getNameArg() { return fopAcM_GetParamBit(this, 31, 2); } + u8 getSwbit() { return fopAcM_GetParamBit(this, 0, 8); } + u8 getSwbit2() { return fopAcM_GetParamBit(this, 8, 8); } + u8 getArg0() { return fopAcM_GetParamBit(this, 16, 8); } + + void setAction(u8 i_action) { mAction = i_action; } + u16 getMsgID() { return mMsgID; } + + /* 0x5A0 */ request_of_phase_process_class mPhase; + /* 0x5A8 */ request_of_phase_process_class mEvPhase; + /* 0x5B0 */ J3DModel* mpBridgeModel; + /* 0x5B4 */ mDoExt_btkAnm* mpBridgeBtk; + /* 0x5B8 */ mDoExt_bckAnm* mpBridgeBck; + /* 0x5BC */ J3DModel* mpPortalModel; + /* 0x5C0 */ mDoExt_btkAnm* mpPortalBtk; + /* 0x5C4 */ mDoExt_brkAnm* mpPortalBrk; + /* 0x5C8 */ u8 field_0x5c8; + /* 0x5C9 */ u8 mTimer; + /* 0x5CA */ u8 mAction; + /* 0x5CB */ u8 mPrmInit; + /* 0x5CC */ u16 mMsgID; + /* 0x5CE */ s16 mEventId[2]; + /* 0x5D4 */ int mStaffId; + /* 0x5D8 */ u8 mEventType; + /* 0x5D9 */ u8 field_0x5d9; + /* 0x5DC */ dMsgFlow_c mMsgFlow; + /* 0x628 */ cXyz mMidnaWaitPos; + /* 0x634 */ cXyz mObjPos; + /* 0x640 */ JPABaseEmitter* mStartEfEmitterID[3]; + /* 0x64C */ JPABaseEmitter* mDisappEfEmitterID[5]; + /* 0x660 */ JPABaseEmitter* mAppEfEmitterID[6]; + /* 0x678 */ JPABaseEmitter* mEndEfEmitterID[2]; + /* 0x680 */ u8 field_0x680[0x688 - 0x680]; + /* 0x688 */ JPABaseEmitter* mBindEfEmitterID[4]; + /* 0x698 */ u16 mEffJointNo; + /* 0x69A */ u8 field_0x69a; + /* 0x69B */ u8 field_0x69b; }; STATIC_ASSERT(sizeof(daObjWarpKBrg_c) == 0x69c); diff --git a/include/d/actor/d_a_obj_warp_obrg.h b/include/d/actor/d_a_obj_warp_obrg.h index e70bb756709..784ab467f96 100644 --- a/include/d/actor/d_a_obj_warp_obrg.h +++ b/include/d/actor/d_a_obj_warp_obrg.h @@ -2,23 +2,32 @@ #define D_A_OBJ_WARP_OBRG_H #include "f_op/f_op_actor_mng.h" +#include "d/d_bg_s_movebg_actor.h" +#include "d/d_msg_flow.h" /** * @ingroup actors-objects * @class daObjWarpOBrg_c - * @brief Warp O Bridge (Eldin Bridge?) + * @brief Eldin Warp Bridge * * @details * */ -class daObjWarpOBrg_c : public fopAc_ac_c { +class daObjWarpOBrg_c : public dBgS_MoveBgActor { public: + enum Action_e { + ACTION_WAIT_e, + ACTION_ORDER_EVENT_e, + ACTION_TALK_EVENT_e, + ACTION_WARP_EVENT_e, + ACTION_DEAD_e, + ACTION_ORDER_EVENT_DST_e, + ACTION_WARP_EVENT_DST_e, + }; + /* 80D299B8 */ void initBaseMtx(); /* 80D29A00 */ void setBaseMtx(); - /* 80D29ACC */ void Create(); - /* 80D29BB4 */ void CreateHeap(); - /* 80D29E7C */ void create1st(); - /* 80D2A008 */ void Execute(f32 (**)[3][4]); + /* 80D29E7C */ int create1st(); /* 80D2A04C */ void event_proc_call(); /* 80D2A194 */ void actionWait(); /* 80D2A4CC */ void actionOrderEvent(); @@ -28,13 +37,41 @@ public: /* 80D2A9E4 */ void actionWarpEventDst(); /* 80D2AA30 */ void actionDead(); /* 80D2AA34 */ void demoProc(); - /* 80D2B3BC */ void checkTalkDistance(); + /* 80D2B3BC */ bool checkTalkDistance(); /* 80D2B534 */ void calcMidnaWaitPos(); - /* 80D2B5C8 */ void Draw(); - /* 80D2B6C0 */ void Delete(); -private: - /* 0x568 */ u8 field_0x568[0x640 - 0x568]; + /* 80D29BB4 */ virtual int CreateHeap(); + /* 80D29ACC */ virtual int Create(); + /* 80D2A008 */ virtual int Execute(Mtx**); + /* 80D2B5C8 */ virtual int Draw(); + /* 80D2B6C0 */ virtual int Delete(); + + u8 getNameArg() { return subtype; } + u8 getSwNo() { return fopAcM_GetParamBit(this, 0, 8); } + u8 getSwNo2() { return fopAcM_GetParamBit(this, 8, 8); } + u8 getArg0() { return fopAcM_GetParamBit(this, 16, 8); } + u8 getMyPortalID() { return fopAcM_GetParamBit(this, 24, 7); } + + void setAction(u8 i_action) { mAction = i_action; } + u16 getMsgID() { return mMsgID; } + + /* 0x5A0 */ request_of_phase_process_class mPhase; + /* 0x5A8 */ J3DModel* mpModel; + /* 0x5AC */ mDoExt_bckAnm* mpBck; + /* 0x5B0 */ mDoExt_btkAnm* mpBtk; + /* 0x5B4 */ dMsgFlow_c mMsgFlow; + /* 0x600 */ JPABaseEmitter* mEfEmitter[5]; + /* 0x614 */ cXyz field_0x614; + /* 0x620 */ cXyz mMidnaWaitPos; + /* 0x62C */ f32 mTalkRange; + /* 0x630 */ int mStaffId; + /* 0x634 */ s16 mEventId; + /* 0x636 */ u16 mMsgID; + /* 0x638 */ u8 mPrmInit; + /* 0x639 */ u8 field_0x639; + /* 0x63A */ u8 field_0x63a; + /* 0x63B */ u8 mAction; + /* 0x63C */ u8 mTimer; }; STATIC_ASSERT(sizeof(daObjWarpOBrg_c) == 0x640); diff --git a/include/d/actor/d_a_player.h b/include/d/actor/d_a_player.h index b3c6e716f19..03fa2109cf6 100644 --- a/include/d/actor/d_a_player.h +++ b/include/d/actor/d_a_player.h @@ -599,7 +599,8 @@ public: }; enum CutType { - /* 0x01 */ CUT_TYPE_NM_VERTICAL = 1, + /* 0x00 */ CUT_TYPE_NONE, + /* 0x01 */ CUT_TYPE_NM_VERTICAL, /* 0x02 */ CUT_TYPE_NM_STAB, /* 0x03 */ CUT_TYPE_NM_RIGHT, /* 0x04 */ CUT_TYPE_NM_LEFT, diff --git a/include/d/d_bg_s_acch.h b/include/d/d_bg_s_acch.h index f2326b22f4d..04b92d41f99 100644 --- a/include/d/d_bg_s_acch.h +++ b/include/d/d_bg_s_acch.h @@ -149,6 +149,7 @@ public: u32 MaskRoofHit() const { return m_flags & ROOF_HIT; } bool ChkRoofHit() const { return MaskRoofHit() != 0; } void OffClrSpeedY() { m_flags |= CLR_SPEED_Y; } + void OnClrSpeedY() { m_flags &= ~CLR_SPEED_Y; } bool ChkClrSpeedY() const { return !(m_flags & CLR_SPEED_Y); } void SetGroundFind() { m_flags |= GROUND_FIND; } void SetGroundHit() { m_flags |= GROUND_HIT; } diff --git a/src/d/actor/d_a_bd.cpp b/src/d/actor/d_a_bd.cpp index 090103c3eec..e4af9bcd821 100644 --- a/src/d/actor/d_a_bd.cpp +++ b/src/d/actor/d_a_bd.cpp @@ -1,1225 +1,1119 @@ /** * @file d_a_bd.cpp - * -*/ + * + */ #include "d/actor/d_a_bd.h" +#include "d/actor/d_a_cow.h" +#include "d/actor/d_a_horse.h" +#include "d/actor/d_a_npc_kkri.h" #include "d/d_cc_d.h" -#include "dol2asm.h" - - - -// -// Forward References: -// - -extern "C" void __ct__10daBd_HIO_cFv(); -extern "C" static void anm_init__FP8bd_classifUcf(); -extern "C" static void daBd_Draw__FP8bd_class(); -extern "C" static void way_bg_check__FP8bd_class(); -extern "C" void __dt__4cXyzFv(); -extern "C" static void s_a_sub__FPvPv(); -extern "C" static void pl_check__FP8bd_class(); -extern "C" static void pointBgCheck__FP4cXyzP4cXyz(); -extern "C" static void land_check__FP8bd_class(); -extern "C" static void drop_check__FP8bd_class(); -extern "C" static void turn_set__FP8bd_class(); -extern "C" static void bd_ground__FP8bd_class(); -extern "C" static void bd_fly__FP8bd_class(); -extern "C" static void bd_landing__FP8bd_class(); -extern "C" static void bd_landing2__FP8bd_class(); -extern "C" static void bd_landing3__FP8bd_class(); -extern "C" static void bd_rope__FP8bd_class(); -extern "C" static void bd_kkri__FP8bd_class(); -extern "C" static void bd_drop__FP8bd_class(); -extern "C" static void action__FP8bd_class(); -extern "C" static void daBd_Execute__FP8bd_class(); -extern "C" static bool daBd_IsDelete__FP8bd_class(); -extern "C" static void daBd_Delete__FP8bd_class(); -extern "C" static void useHeapInit__FP10fopAc_ac_c(); -extern "C" void __dt__12J3DFrameCtrlFv(); -extern "C" static void daBd_Create__FP10fopAc_ac_c(); -extern "C" void __dt__8cM3dGSphFv(); -extern "C" void __dt__8cM3dGAabFv(); -extern "C" void __dt__12dBgS_ObjAcchFv(); -extern "C" void __dt__10daBd_HIO_cFv(); -extern "C" void __sinit_d_a_bd_cpp(); -extern "C" static void func_804D9E40(); -extern "C" static void func_804D9E48(); -extern "C" extern char const* const d_a_bd__stringBase0; - -// -// External References: -// - -extern "C" void mDoMtx_XrotM__FPA4_fs(); -extern "C" void mDoMtx_YrotS__FPA4_fs(); -extern "C" void mDoMtx_YrotM__FPA4_fs(); -extern "C" void mDoMtx_ZrotM__FPA4_fs(); -extern "C" void scaleM__14mDoMtx_stack_cFfff(); -extern "C" void init__13mDoExt_btkAnmFP16J3DMaterialTableP19J3DAnmTextureSRTKeyiifss(); -extern "C" void entry__13mDoExt_btkAnmFP16J3DMaterialTablef(); -extern "C" void -__ct__14mDoExt_McaMorfFP12J3DModelDataP25mDoExt_McaMorfCallBack1_cP25mDoExt_McaMorfCallBack2_cP15J3DAnmTransformifiiiPvUlUl(); -extern "C" void setAnm__14mDoExt_McaMorfFP15J3DAnmTransformiffffPv(); -extern "C" void play__14mDoExt_McaMorfFP3VecUlSc(); -extern "C" void entryDL__14mDoExt_McaMorfFv(); -extern "C" void modelCalc__14mDoExt_McaMorfFv(); -extern "C" void __ct__10fopAc_ac_cFv(); -extern "C" void fopAc_IsActor__FPv(); -extern "C" void fopAcIt_Judge__FPFPvPv_PvPv(); -extern "C" void fopAcM_SearchByName__FsPP10fopAc_ac_c(); -extern "C" void fopAcM_delete__FP10fopAc_ac_c(); -extern "C" void fopAcM_createChild__FsUiUlPC4cXyziPC5csXyzPC4cXyzScPFPv_i(); -extern "C" void fopAcM_entrySolidHeap__FP10fopAc_ac_cPFP10fopAc_ac_c_iUl(); -extern "C" void fopAcM_searchActorAngleY__FPC10fopAc_ac_cPC10fopAc_ac_c(); -extern "C" void fopAcM_searchActorDistance__FPC10fopAc_ac_cPC10fopAc_ac_c(); -extern "C" void fopAcM_searchActorDistanceXZ__FPC10fopAc_ac_cPC10fopAc_ac_c(); -extern "C" void fpcEx_Search__FPFPvPv_PvPv(); -extern "C" void fpcSch_JudgeForPName__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 getRes__14dRes_control_cFPCclP11dRes_info_ci(); -extern "C" void LineCross__4cBgSFP11cBgS_LinChk(); -extern "C" void GroundCross__4cBgSFP11cBgS_GndChk(); -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 __ct__11dBgS_GndChkFv(); -extern "C" void __dt__11dBgS_GndChkFv(); -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 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 __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_GndChkFPC3Vec(); -extern "C" void cLib_addCalc2__FPffff(); -extern "C" void cLib_addCalcAngleS2__FPssss(); -extern "C" void MtxPosition__FP4cXyzP4cXyz(); -extern "C" void deleteObject__14Z2SoundObjBaseFv(); -extern "C" void __ct__16Z2SoundObjSimpleFv(); -extern "C" void* __nw__FUl(); -extern "C" void __dl__FPv(); -extern "C" void init__12J3DFrameCtrlFs(); -extern "C" void _savegpr_21(); -extern "C" void _savegpr_27(); -extern "C" void _savegpr_28(); -extern "C" void _savegpr_29(); -extern "C" void _restgpr_21(); -extern "C" void _restgpr_27(); -extern "C" void _restgpr_28(); -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 g_Counter[12 + 4 /* padding */]; -extern "C" extern void* calc_mtx[1 + 1 /* padding */]; -extern "C" void __register_global_object(); - -// -// Declarations: -// +#include "d/d_s_play.h" +#include "Z2AudioLib/Z2Instances.h" +UNK_REL_BSS /* ############################################################################################## */ -/* 804D9E64-804D9E68 000000 0004+00 16/16 0/0 0/0 .rodata @3942 */ -SECTION_RODATA static f32 const lit_3942 = 6.0f / 5.0f; -COMPILER_STRIP_GATE(0x804D9E64, &lit_3942); -/* 804D9E68-804D9E6C 000004 0004+00 0/6 0/0 0/0 .rodata @3943 */ -#pragma push -#pragma force_active on -SECTION_RODATA static f32 const lit_3943 = 20.0f; -COMPILER_STRIP_GATE(0x804D9E68, &lit_3943); -#pragma pop -/* 804D9E6C-804D9E70 000008 0004+00 0/5 0/0 0/0 .rodata @3944 */ -#pragma push -#pragma force_active on -SECTION_RODATA static f32 const lit_3944 = 3.0f; -COMPILER_STRIP_GATE(0x804D9E6C, &lit_3944); -#pragma pop - -/* 804D9E70-804D9E74 00000C 0004+00 0/4 0/0 0/0 .rodata @3945 */ -#pragma push -#pragma force_active on -SECTION_RODATA static f32 const lit_3945 = 300.0f; -COMPILER_STRIP_GATE(0x804D9E70, &lit_3945); -#pragma pop +struct land_pos { + /* 0x00 */ s32 unk; + /* 0x04 */ f32 x; + /* 0x08 */ f32 y; + /* 0x0C */ f32 z; +}; /* 804D9F88-804DA0C8 000000 0140+00 2/2 0/0 0/0 .data land_pos103 */ -SECTION_DATA static u8 land_pos103[320] = { - 0x00, 0x00, 0x00, 0x00, 0xC4, 0x0B, 0x00, 0x00, 0x43, 0x9F, 0x80, 0x00, 0x45, 0xBD, 0x78, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x43, 0x84, 0x00, 0x00, 0x43, 0xFA, 0x80, 0x00, 0x45, 0xA2, 0x78, 0x00, - 0x00, 0x00, 0x00, 0x00, 0xC3, 0x9C, 0x80, 0x00, 0x43, 0x85, 0x80, 0x00, 0x45, 0x8B, 0x60, 0x00, - 0x00, 0x00, 0x00, 0x00, 0xC4, 0x32, 0x80, 0x00, 0x42, 0xE8, 0x00, 0x00, 0x45, 0x67, 0x80, 0x00, - 0x00, 0x00, 0x00, 0x00, 0xC4, 0x97, 0x00, 0x00, 0x42, 0xC8, 0x00, 0x00, 0x45, 0x1B, 0xB0, 0x00, - 0x00, 0x00, 0x00, 0x00, 0xC5, 0x1A, 0xE0, 0x00, 0x43, 0x07, 0x00, 0x00, 0x45, 0x75, 0x90, 0x00, - 0x00, 0x00, 0x00, 0x00, 0xC5, 0x46, 0xD0, 0x00, 0x43, 0x1B, 0x00, 0x00, 0x45, 0x82, 0xB0, 0x00, - 0x00, 0x00, 0x00, 0x00, 0xC5, 0x73, 0xE0, 0x00, 0x44, 0x10, 0xC0, 0x00, 0x45, 0x59, 0x20, 0x00, - 0x00, 0x00, 0x00, 0x00, 0xC5, 0x63, 0xD0, 0x00, 0x44, 0x1A, 0xC0, 0x00, 0x45, 0x2F, 0x60, 0x00, - 0x00, 0x00, 0x00, 0x00, 0xC5, 0x41, 0xA0, 0x00, 0x44, 0x0A, 0x80, 0x00, 0x45, 0x11, 0xF0, 0x00, - 0x00, 0x00, 0x00, 0x00, 0xC4, 0x5E, 0xC0, 0x00, 0x43, 0x9E, 0x00, 0x00, 0x44, 0x53, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0xC3, 0x4D, 0x00, 0x00, 0x43, 0x3F, 0x00, 0x00, 0x44, 0x98, 0xE0, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x44, 0xA7, 0xA0, 0x00, 0x42, 0xF4, 0x00, 0x00, 0x44, 0x99, 0xC0, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x44, 0xFE, 0x20, 0x00, 0x42, 0xC8, 0x00, 0x00, 0x45, 0x57, 0x90, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x45, 0x2E, 0x20, 0x00, 0x43, 0x01, 0x00, 0x00, 0x45, 0x6D, 0x30, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x45, 0x6D, 0xE0, 0x00, 0x43, 0x84, 0x80, 0x00, 0x45, 0x11, 0xC0, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x45, 0x31, 0x90, 0x00, 0x43, 0x39, 0x00, 0x00, 0x44, 0xDB, 0x20, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x45, 0x70, 0x70, 0x00, 0x42, 0xE4, 0x00, 0x00, 0x42, 0x10, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x44, 0x17, 0x40, 0x00, 0x42, 0xA2, 0x00, 0x00, 0xC4, 0xFA, 0xC0, 0x00, - 0xFF, 0xFF, 0xFF, 0xFF, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, +static land_pos land_pos103[20] = { + {0, -556.0f, 319.0f, 6063.0f}, {0, 264.0f, 501.0f, 5199.0f}, {0, -313.0f, 267.0f, 4460.0f}, + {0, -714.0f, 116.0f, 3704.0f}, {0, -1208.0f, 100.0f, 2491.0f}, {0, -2478.0f, 135.0f, 3929.0f}, + {0, -3181.0f, 155.0f, 4182.0f}, {0, -3902.0f, 579.0f, 3474.0f}, {0, -3645.0f, 619.0f, 2806.0f}, + {0, -3098.0f, 554.0f, 2335.0f}, {0, -891.0f, 316.0f, 844.0f}, {0, -205.0f, 191.0f, 1223.0f}, + {0, 1341.0f, 122.0f, 1230.0f}, {0, 2033.0f, 100.0f, 3449.0f}, {0, 2786.0f, 129.0f, 3795.0f}, + {0, 3806.0f, 265.0f, 2332.0f}, {0, 2841.0f, 185.0f, 1753.0f}, {0, 3847.0f, 114.0f, 36.0f}, + {0, 605.0f, 81.0f, -2006.0f}, {-1, 0.0f, 0.0f, 0.0f}, }; /* 804DA0C8-804DA208 000140 0140+00 2/2 0/0 0/0 .data land_pos127 */ -SECTION_DATA static u8 land_pos127[320] = { - 0x00, 0x00, 0x00, 0x00, 0x45, 0x4A, 0x60, 0x00, 0x42, 0x84, 0x00, 0x00, 0xC5, 0x44, 0x50, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x45, 0x2A, 0x10, 0x00, 0x42, 0x9E, 0x00, 0x00, 0xC5, 0x09, 0x20, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x45, 0x72, 0xD0, 0x00, 0x42, 0x0C, 0x00, 0x00, 0xC4, 0xAE, 0xE0, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x45, 0x71, 0x60, 0x00, 0x42, 0x0C, 0x00, 0x00, 0xC3, 0x5C, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x45, 0x8F, 0x28, 0x00, 0x42, 0x0C, 0x00, 0x00, 0x44, 0x22, 0xC0, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x45, 0xAB, 0xB8, 0x00, 0x42, 0x0C, 0x00, 0x00, 0x44, 0xC2, 0xC0, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x45, 0xB5, 0x60, 0x00, 0x42, 0x18, 0x00, 0x00, 0x45, 0x1F, 0x30, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x45, 0xC8, 0x48, 0x00, 0x42, 0x9E, 0x00, 0x00, 0x45, 0x77, 0x20, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x45, 0xB5, 0xB0, 0x00, 0x42, 0x7C, 0x00, 0x00, 0x45, 0x9E, 0xF0, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x45, 0x4C, 0x30, 0x00, 0x42, 0x96, 0x00, 0x00, 0x45, 0xC6, 0xC8, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x44, 0xDC, 0xE0, 0x00, 0x42, 0x9E, 0x00, 0x00, 0x45, 0xAC, 0x08, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x44, 0x02, 0x00, 0x00, 0x42, 0x0C, 0x00, 0x00, 0x45, 0xB3, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x41, 0xD8, 0x00, 0x00, 0x42, 0x0C, 0x00, 0x00, 0x45, 0xD9, 0x60, 0x00, - 0x00, 0x00, 0x00, 0x00, 0xC5, 0x01, 0x30, 0x00, 0x42, 0x0C, 0x00, 0x00, 0x45, 0xBE, 0x18, 0x00, - 0x00, 0x00, 0x00, 0x00, 0xC5, 0x47, 0x40, 0x00, 0x42, 0x0C, 0x00, 0x00, 0x45, 0xB4, 0x08, 0x00, - 0x00, 0x00, 0x00, 0x00, 0xC5, 0x67, 0x10, 0x00, 0x42, 0x0C, 0x00, 0x00, 0x45, 0x89, 0x30, 0x00, - 0x00, 0x00, 0x00, 0x00, 0xC5, 0x8B, 0x90, 0x00, 0x42, 0x0C, 0x00, 0x00, 0x45, 0x82, 0x08, 0x00, - 0x00, 0x00, 0x00, 0x00, 0xC5, 0x8D, 0x78, 0x00, 0x42, 0xAE, 0x00, 0x00, 0x45, 0xC0, 0x08, 0x00, - 0x00, 0x00, 0x00, 0x00, 0xC5, 0x0F, 0xE0, 0x00, 0x44, 0x98, 0x00, 0x00, 0xC3, 0x72, 0x00, 0x00, - 0xFF, 0xFF, 0xFF, 0xFF, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, +static land_pos land_pos127[20] = { + {0, 3238.0f, 66.0f, -3141.0f}, {0, 2721.0f, 79.0f, -2194.0f}, {0, 3885.0f, 35.0f, -1399.0f}, + {0, 3862.0f, 35.0f, -220.0f}, {0, 4581.0f, 35.0f, 651.0f}, {0, 5495.0f, 35.0f, 1558.0f}, + {0, 5804.0f, 38.0f, 2547.0f}, {0, 6409.0f, 79.0f, 3954.0f}, {0, 5814.0f, 63.0f, 5086.0f}, + {0, 3267.0f, 75.0f, 6361.0f}, {0, 1767.0f, 79.0f, 5505.0f}, {0, 520.0f, 35.0f, 5728.0f}, + {0, 27.0f, 35.0f, 6956.0f}, {0, -2067.0f, 35.0f, 6083.0f}, {0, -3188.0f, 35.0f, 5761.0f}, + {0, -3697.0f, 35.0f, 4390.0f}, {0, -4466.0f, 35.0f, 4161.0f}, {0, -4527.0f, 87.0f, 6145.0f}, + {0, -2302.0f, 1216.0f, -242.0f}, {-1, 0.0f, 0.0f, 0.0f}, }; /* 804DA208-804DA214 000280 000C+00 3/3 0/0 0/0 .data wait_bck */ -SECTION_DATA static u8 wait_bck[12] = { - 0x00, 0x00, 0x00, 0x09, 0x00, 0x00, 0x00, 0x0A, 0x00, 0x00, 0x00, 0x08, +static int wait_bck[3] = {ANM_PITA_LEFTUP, ANM_PITA_RIGHT, ANM_PITA_DOWN}; + +/* 804DA36C-804DA38C 000054 0020+00 8/10 0/0 0/0 .bss l_HIO */ +static u8 l_HIOInit; +static daBd_HIO_c l_HIO; + +/* 804DA3BC-804DA3EC 0000A4 0030+00 0/1 0/0 0/0 .bss land_sp_pos */ +static cXyz land_sp_pos[4] = { + cXyz(3350.0f, 474.0f, 1760.0f), + cXyz(553.0f, 395.0f, -599.0f), + cXyz(-194.0f, 594.0f, 4832.0f), + cXyz(-3349.0f, 865.0f, 2773.0f), }; -/* 804DA214-804DA234 -00001 0020+00 1/1 0/0 0/0 .data @4761 */ -SECTION_DATA static void* lit_4761[8] = { - (void*)(((char*)action__FP8bd_class) + 0xAC), (void*)(((char*)action__FP8bd_class) + 0xD4), - (void*)(((char*)action__FP8bd_class) + 0xC0), (void*)(((char*)action__FP8bd_class) + 0xE0), - (void*)(((char*)action__FP8bd_class) + 0xEC), (void*)(((char*)action__FP8bd_class) + 0xFC), - (void*)(((char*)action__FP8bd_class) + 0x110), (void*)(((char*)action__FP8bd_class) + 0x120), -}; +static int rope_pt; -/* 804DA234-804DA274 0002AC 0040+00 1/1 0/0 0/0 .data cc_sph_src$4956 */ -static dCcD_SrcSph cc_sph_src = { +/* 804D6C4C-804D6CA4 0000EC 0058+00 1/1 0/0 0/0 .text __ct__10daBd_HIO_cFv */ +daBd_HIO_c::daBd_HIO_c() { + id = -1; + mBasicSize = 1.2f; + mFlightSpeed = 20.0f; + mGroundSpeed = 3.0f; + mFlightTime = 400; + mLinkDetectRange = 300.0f; + mChirpDist = 60; + field_0x1E = 0; +} + +#ifdef DEBUG +/* daBd_HIO_c::genMessage (JORMContext *) */ +void daBd_HIO_c::genMessage(JORMContext* mctx) { + mctx->genLabel("小鳥", 0x80000001, 0, NULL, 0xFFFF, 0xFFFF, 0x200, 24); + mctx->genSlider("基本大きさ", &mBasicSize, 0.0f, 5.0f, 0, NULL, 0xFFFF, 0xFFFF, 0x200, 24); + mctx->genSlider("飛行速度", &mFlightSpeed, 0.0f, 50.0f, 0, NULL, 0xFFFF, 0xFFFF, 0x200, 24); + mctx->genSlider("地上速度", &mGroundSpeed, 0.0f, 20.0f, 0, NULL, 0xFFFF, 0xFFFF, 0x200, 24); + mctx->genSlider("飛行時間(およそ)", &mFlightTime, 0, 30000, 0, NULL, 0xFFFF, 0xFFFF, 0x200, + 24); + mctx->genSlider("リンク認識距離", &mLinkDetectRange, 0.0f, 2000.0f, 0, NULL, 0xFFFF, 0xFFFF, + 0x200, 24); + mctx->genSlider("羽LevelSE鳴る距離", &mChirpDist, 0, 1000, 0, NULL, 0xFFFF, 0xFFFF, 0x200, 24); +} +#endif + +/* ############################################################################################## */ + +/* 804D6CA4-804D6D54 000144 00B0+00 8/8 0/0 0/0 .text anm_init__FP8bd_classifUcf */ +static void anm_init(bd_class* i_this, int i_anmID, f32 i_morf, u8 i_attr, f32 i_speed) { + i_this->mpMorf->setAnm((J3DAnmTransform*)dComIfG_getObjectRes("Bd", i_anmID), i_attr, i_morf, + i_speed, 0.0f, -1.0f, NULL); + i_this->mAnmID = i_anmID; +} + +/* 804D6D54-804D6DD8 0001F4 0084+00 1/0 0/0 0/0 .text daBd_Draw__FP8bd_class */ +static int daBd_Draw(bd_class* i_this) { + fopEn_enemy_c* a_this = (fopEn_enemy_c*)i_this; + + J3DModel* mpModel = i_this->mpMorf->getModel(); + g_env_light.settingTevStruct(0, &a_this->current.pos, &a_this->tevStr); + g_env_light.setLightTevColorType_MAJI(mpModel, &a_this->tevStr); + i_this->mpBtk->entry(mpModel->getModelData()); + i_this->mpMorf->entryDL(); + return 1; +} + +/* ############################################################################################## */ + +/* 804D6DD8-804D6ED4 000278 00FC+00 1/1 0/0 0/0 .text way_bg_check__FP8bd_class */ +static int way_bg_check(bd_class* i_this) { + fopEn_enemy_c* a_this = (fopEn_enemy_c*)i_this; + + cXyz sp24; + cXyz sp18; + cXyz spC; + sp24 = a_this->current.pos; + sp24.y += 30.0f; + cMtx_YrotS(*calc_mtx, a_this->shape_angle.y); + spC.x = 0.0f; + spC.y = 0.0f; + spC.z = 100.0f; + MtxPosition(&spC, &sp18); + sp18 += sp24; + dBgS_LinChk sp30; + sp30.Set(&sp24, &sp18, a_this); + if (dComIfG_Bgsp().LineCross(&sp30) != 0) { + return 1; + } + return 0; +} + +/* ############################################################################################## */ + +/* 804D6F10-804D7210 0003B0 0300+00 1/1 0/0 0/0 .text s_a_sub__FPvPv */ +static void* s_a_sub(void* i_target, void* i_bird) { + fopAc_ac_c* a_target = (fopAc_ac_c*)i_target; + bd_class* b_bird = (bd_class*)i_bird; + fopEn_enemy_c* a_bird = (fopEn_enemy_c*)i_bird; + + if ((fopAcM_IsActor(i_target) && fopAcM_GetGroup(a_target) == fopAc_ENEMY_e) || + fopAcM_GetGroup(a_target) == fopAc_NPC_e || fopAcM_GetName(i_target) == PROC_OBJ_KANBAN2 || + fopAcM_GetName(i_target) == PROC_OBJ_FOOD) { - {0x0, {{0x0, 0x0, 0x0}, {0xd8fbfdff, 0x3}, 0x75}}, // mObj - {dCcD_SE_NONE, 0x0, 0x0, 0x0, 0x0}, // mGObjAt - {dCcD_SE_NONE, 0x0, 0x0, 0x0, 0x2}, // mGObjTg - {0x0}, // mGObjCo - }, // mObjInf + cXyz distance = a_bird->current.pos - a_target->current.pos; + if (distance.abs() < l_HIO.mLinkDetectRange + 10.0f * fabsf(a_target->speedF)) { + return i_target; + } + + distance = b_bird->field_0x5C4 - a_target->current.pos; + if (distance.abs() < l_HIO.mLinkDetectRange + 10.0f * fabsf(a_target->speedF)) { + return i_target; + } + } + return NULL; +} + +/* ############################################################################################## */ + +/* 804D7210-804D7518 0006B0 0308+00 1/1 0/0 0/0 .text pl_check__FP8bd_class */ +static void pl_check(bd_class* i_this) { + fopEn_enemy_c* a_this = (fopEn_enemy_c*)i_this; + daPy_py_c* player = (daPy_py_c*)dComIfGp_getPlayer(0); + + f32 var_f30; + f32 var_f31; + + cXyz sp8 = i_this->field_0x5C4 - player->current.pos; + u32 var_r28 = 0; + if (i_this->field_0x658 != 0 || i_this->field_0x5B6 >= 1) { + return; + } + + if ((i_this->field_0x618 & 0xF) == 0) { + var_r28 = (u32)fpcM_Search(s_a_sub, a_this); + } + + if (daPy_getPlayerActorClass()->checkHorseRide()) { + var_f30 = dComIfGp_getHorseActor()->speedF; + } else { + var_f30 = player->speedF; + } + + var_f31 = l_HIO.mLinkDetectRange + 10.0f * fabsf(var_f30); + if (player->getCutType() != daPy_py_c::CUT_TYPE_NONE) { + var_f31 += 300.0f; + } + if (i_this->field_0x5DC < var_f31 || sp8.abs() < var_f31 || var_r28 != 0) { + if (i_this->mActionID != ACT_FLY) { + i_this->mActionID = ACT_FLY; + i_this->field_0x61C = 0; + i_this->field_0x61E = 1; + i_this->field_0x624 = 0.0f; + i_this->field_0x628 = 6.0f + cM_rndF(2.0f); + anm_init(i_this, ANM_FLY, 1.0f, 2, 1.0f); + i_this->mChirpDist = l_HIO.mChirpDist; + return; + } + i_this->field_0x64C[0] = ((f32)l_HIO.mFlightTime + cM_rndF(0.5f * (f32)l_HIO.mFlightTime)); + } + return; +} + +/* 804D7518-804D75D0 0009B8 00B8+00 1/1 0/0 0/0 .text pointBgCheck__FP4cXyzP4cXyz */ +static int pointBgCheck(cXyz* param_0, cXyz* param_1) { + dBgS_LinChk sp20; + cXyz spC = *param_1; + spC.y += 2.0f; + sp20.Set(param_0, &spC, NULL); + if (dComIfG_Bgsp().LineCross(&sp20) != 0) { + return 1; + } + return 0; +} + +/* ############################################################################################## */ + +/* 804D75D0-804D785C 000A70 028C+00 1/1 0/0 0/0 .text land_check__FP8bd_class */ +static int land_check(bd_class* i_this) { + int land_pos_len; + land_pos* land_pos; + s8 temp_r1[112]; + + int sp20 = g_Counter.mCounter0 + fopAcM_GetID(i_this); + if ((sp20 & 7) != 0) { + return -1; + } + + fopEn_enemy_c* a_this = (fopEn_enemy_c*)i_this; + camera_class* camera = dComIfGp_getCamera(0); + cXyz sp30; + sp30 = camera->lookat.center - camera->lookat.eye; + s16 spA = cM_atan2s(sp30.x, sp30.z); + + if (strcmp(dComIfGp_getStartStageName(), "F_SP103") == 0) { + land_pos_len = 20; + land_pos = land_pos103; + } else if (strcmp(dComIfGp_getStartStageName(), "F_SP127") == 0) { + land_pos_len = 20; + land_pos = land_pos127; + } + + for (int i = 0; i < land_pos_len; i++) { + temp_r1[i] = 0; + } + f32 var_f31 = 1000.0f; + for (int i = 0; i < 5; i++) { + for (int j = 0; j < land_pos_len; j++) { + if (land_pos[j].unk < 0) { + break; + } + if (temp_r1[j] != 0) { + continue; + } + sp30.x = land_pos[j].x - camera->lookat.eye.x; + sp30.z = land_pos[j].z - camera->lookat.eye.z; + s16 sVar2 = cM_atan2s(sp30.x, sp30.z) - spA; + if (sVar2 >= 0x2000 || sVar2 <= -0x2000) { + continue; + } + + sp30.x = camera->lookat.eye.x - land_pos[j].x; + sp30.z = camera->lookat.eye.z - land_pos[j].z; + + f32 temp_f1 = JMAFastSqrt((sp30.x * sp30.x) + (sp30.z * sp30.z)); + if (!(temp_f1 >= 600.0f) || !(temp_f1 < var_f31)) { + continue; + } + + sp30.x = land_pos[j].x; + sp30.y = land_pos[j].y + 5.0f; + sp30.z = land_pos[j].z; + if (pointBgCheck(&a_this->current.pos, &sp30)) { + temp_r1[j] = 1; + } else { + return j; + } + } + var_f31 += 500.0f; + } + return -1; +} + +/* ############################################################################################## */ + +/* 804D785C-804D7890 000CFC 0034+00 1/1 0/0 0/0 .text drop_check__FP8bd_class */ +static void drop_check(bd_class* i_this) { + fopEn_enemy_c* a_this = (fopEn_enemy_c*)i_this; + + if (a_this->speed.y < -10.0f) { + i_this->mActionID = ACT_DROP; + i_this->field_0x61C = 0; + a_this->speed.y = 0.0f; + } +} + +/* ############################################################################################## */ + +/* 804D7890-804D78FC 000D30 006C+00 1/1 0/0 0/0 .text turn_set__FP8bd_class */ +static void turn_set(bd_class* i_this) { + s16 angle_table[3] = {0x8000, 0x4000, -0x4000}; + s16 angle = angle_table[(int)cM_rndF(2.99f)]; + i_this->mTargetAngleY = i_this->enemy.current.angle.y + angle; +} + +/* ############################################################################################## */ + +/* 804D78FC-804D7DF4 000D9C 04F8+00 1/1 0/0 0/0 .text bd_ground__FP8bd_class */ +static void bd_ground(bd_class* i_this) { + fopEn_enemy_c* a_this = (fopEn_enemy_c*)i_this; + daPy_py_c* player = (daPy_py_c*)dComIfGp_getPlayer(0); + + cXyz sp30; + cXyz sp24; + f32 speed = 0.0f; + dBgS_GndChk gnd_chk; + switch (i_this->field_0x61C) { + case -1: + Vec sp18; + sp18.x = a_this->home.pos.x + cM_rndFX(100.0f); + sp18.y = a_this->home.pos.y + 100.0f; + sp18.z = a_this->home.pos.z + cM_rndFX(100.0f); + if (strcmp(dComIfGp_getStartStageName(), "R_SP127") != 0) { + gnd_chk.SetPos(&sp18); + a_this->current.pos = sp18; + a_this->current.pos.y = dComIfG_Bgsp().GroundCross(&gnd_chk); + } + a_this->home.pos = a_this->current.pos; + i_this->field_0x61C = 0; + /* fallthrough */ + + case 0: + i_this->field_0x618 = cM_rndF(65536.0f); + i_this->field_0x64C[3] = 200.0f + cM_rndF(200.0f); + i_this->field_0x61C = 1; + /* fallthrough */ + + case 1: + if (i_this->mBgc.ChkGroundHit() || i_this->field_0x5C2 != 0) { + i_this->field_0x64C[0] = 20.0f + cM_rndF(60.0f); + i_this->field_0x61C = 2; + i_this->field_0x64C[1] = 0; + } + break; + + case 2: + if (i_this->field_0x64C[1] == 0) { + if (cM_rndF(1.0f) < 0.2f) { + i_this->field_0x64C[1] = 20.0f + cM_rndF(10.0f); + } else { + i_this->field_0x64C[1] = 2.0f + cM_rndF(2.0f); + } + anm_init(i_this, wait_bck[(int)cM_rndF(2.99f)], 2.0f, 0, 1.0f); + } + if (i_this->field_0x64C[0] == 0) { + if (way_bg_check(i_this)) { + turn_set(i_this); + } else { + f32 temp_f = 300.0f; + sp30.x = (a_this->home.pos.x + cM_rndFX(temp_f)) - a_this->current.pos.x; + sp30.z = (a_this->home.pos.z + cM_rndFX(temp_f)) - a_this->current.pos.z; + i_this->mTargetAngleY = cM_atan2s(sp30.x, sp30.z); + } + i_this->field_0x61C = 3; + i_this->field_0x64C[0] = 10.0f + cM_rndF(30.0f); + } + break; + + case 3: + anm_init(i_this, ANM_PYON, 1.0f, 2, 1.0f); + i_this->field_0x61C++; + /* fallthrough */ + + case 4: + speed = l_HIO.mGroundSpeed; + cLib_addCalcAngleS2(&a_this->current.angle.y, i_this->mTargetAngleY, 4, TREG_S(0) + 0x1000); + if (i_this->field_0x64C[0] == 0 && !((int)i_this->mpMorf->getFrame() > 1)) { + i_this->field_0x61C = 1; + } else if ((i_this->field_0x64C[2] == 0) && (i_this->mBgc.ChkWallHit() != 0)) { + turn_set(i_this); + i_this->field_0x64C[2] = 20; + } + } + + a_this->speedF = speed; + if ((i_this->field_0x618 & 0xF) == 0 && cM_rndF(1.0f) < 0.35f) { + i_this->mSound.startSound(Z2SE_BIRD_STAY, 0, -1); + } + drop_check(i_this); + if (i_this->field_0x658 == 0) { + if (fopAcM_CheckCondition(a_this, fopAcCnd_NODRAW_e)) { + if (i_this->field_0x64C[3] > 50) { + i_this->field_0x64C[3] = 30.0f + cM_rndF(20.0f); + } + + dScnKy_env_light_c* env_light = dKy_getEnvlight(); + int spC = env_light->daytime / 15.0f; + if (spC <= 6 || spC >= 17) { + fopAcM_delete(a_this); + OS_REPORT("BD TIME OFF\n"); + } + } + if (i_this->field_0x64C[3] == 0) { + i_this->mActionID = ACT_FLY; + i_this->field_0x61C = 0; + i_this->field_0x61E = 1; + i_this->field_0x624 = 0.0f; + i_this->field_0x628 = 6.0f + cM_rndF(2.0f); + anm_init(i_this, ANM_FLY, 1.0f, 2, 1.0f); + i_this->mChirpDist = l_HIO.mChirpDist; + } + } else { + i_this->field_0x658--; + } +} + +/* ############################################################################################## */ + +/* 804D7DF4-804D82E4 001294 04F0+00 1/1 0/0 0/0 .text bd_fly__FP8bd_class */ +static void bd_fly(bd_class* i_this) { + fopEn_enemy_c* a_this = (fopEn_enemy_c*)i_this; + daPy_py_c* player = (daPy_py_c*)dComIfGp_getPlayer(0); + + cXyz sp2C; + cXyz sp20; + f32 unused = 0.0f; + switch (i_this->field_0x61E) { + case 0: + if (i_this->field_0x620 <= 0.0f) { + i_this->field_0x61E = 1; + i_this->field_0x624 = -2.0f + TREG_F(2); + if (a_this->speed.y > 0.0f) { + i_this->field_0x628 = 7; + } else { + i_this->field_0x628 = 5; + } + anm_init(i_this, ANM_FLY, 1.0f, 2, 1.0f); + } + break; + + case 1: + if (i_this->field_0x628 == 0 && i_this->field_0x624 < 3.0f + TREG_F(1)) { + anm_init(i_this, ANM_KAKKU1, 1.0f, 0, 1.0f); + i_this->field_0x61E = 0; + } + break; + } + + switch (i_this->field_0x61C) { + case 0: + i_this->field_0x64C[0] = 300.0f + cM_rndF(200.0f); + i_this->field_0x64C[1] = 0; + a_this->current.angle.x = TREG_S(1) - 10000; + anm_init(i_this, ANM_FLY, 1.0f, 2, 1.0f); + i_this->field_0x61C = 1; + /* fallthrough */ + + case 1: + if (i_this->field_0x64C[0] == 0) { + if (strcmp(dComIfGp_getStartStageName(), "F_SP103") == 0) { + int spC = land_check(i_this); + if (spC >= 0) { + if (cM_rndF(1.0f) <= 0.2f && i_this->field_0x62C != NULL) { + a_this->home.pos = *i_this->field_0x62C; + i_this->field_0x645 = 1; + } else { + a_this->home.pos.x = land_pos103[spC].x; + a_this->home.pos.y = land_pos103[spC].y; + a_this->home.pos.z = land_pos103[spC].z; + i_this->field_0x645 = land_pos103[spC].unk; + } + i_this->mActionID = ACT_LANDING; + i_this->field_0x61C = 0; + } else { + i_this->field_0x64C[0] = 0; + } + } else { + if (strcmp(dComIfGp_getStartStageName(), "F_SP127") == 0 || + strcmp(dComIfGp_getStartStageName(), "R_SP127") == 0) + { + if (strcmp(dComIfGp_getStartStageName(), "R_SP127") == 0) { + a_this->home.pos.x = -450.0f; + a_this->home.pos.y = 3.0f; + a_this->home.pos.z = -612.0f; + i_this->field_0x645 = 0; + i_this->mActionID = ACT_LANDING; + i_this->field_0x61C = 0; + } else { + int sp8 = land_check(i_this); + if (sp8 >= 0) { + a_this->home.pos.x = land_pos127[sp8].x; + a_this->home.pos.y = land_pos127[sp8].y; + a_this->home.pos.z = land_pos127[sp8].z; + i_this->field_0x645 = land_pos127[sp8].unk; + i_this->mActionID = ACT_LANDING; + i_this->field_0x61C = 0; + } else { + i_this->field_0x64C[0] = 0; + } + } + } else { + i_this->mActionID = ACT_LANDING; + i_this->field_0x61C = 0; + if (i_this->field_0x5B6 >= 1) { + i_this->field_0x645 = 1; + a_this->home.pos = i_this->field_0x634; + } else { + i_this->field_0x645 = 0; + } + } + } + } else if (i_this->field_0x64C[1] == 0) { + if (strcmp(dComIfGp_getStartStageName(), "R_SP127") == 0) { + i_this->field_0x5C4.x = cM_rndFX(1000.0f); + i_this->field_0x5C4.y = 800.0f + cM_rndF(300.0f); + i_this->field_0x5C4.z = -3000.0f + cM_rndFX(1000.0f); + a_this->current.angle.y = 32768.0f + cM_rndFX(10000.0f); + } else { + i_this->field_0x5C4.x = a_this->home.pos.x + cM_rndFX(1000.0f); + i_this->field_0x5C4.y = a_this->home.pos.y + 800.0f + cM_rndF(300.0f); + i_this->field_0x5C4.z = a_this->home.pos.z + cM_rndFX(1000.0f); + } + i_this->field_0x64C[1] = 10.0f + cM_rndF(30.0f); + } + break; + } + + a_this->speedF = l_HIO.mFlightSpeed; + sp2C = i_this->field_0x5C4 - a_this->current.pos; + if (i_this->field_0x61E != 0) { + cLib_addCalcAngleS2(&a_this->current.angle.y, cM_atan2s(sp2C.x, sp2C.z), 8, + (TREG_S(2) + 700)); + cLib_addCalcAngleS2(&a_this->current.angle.x, + -cM_atan2s(sp2C.y, JMAFastSqrt((sp2C.x * sp2C.x) + (sp2C.z * sp2C.z))), + 8, (TREG_S(2) + 700)); + } +} + +/* ############################################################################################## */ + +/* 804D82E4-804D8648 001784 0364+00 1/1 0/0 0/0 .text bd_landing__FP8bd_class */ +static void bd_landing(bd_class* i_this) { + fopEn_enemy_c* a_this = (fopEn_enemy_c*)i_this; + daPy_py_c* player = (daPy_py_c*)dComIfGp_getPlayer(0); + + cXyz sp24; + cXyz sp18; + f32 unused = 0.0f; + switch (i_this->field_0x61E) { + case 0: + if (i_this->field_0x620 <= 0.0f) { + i_this->field_0x61E = 1; + i_this->field_0x624 = -2.0f + TREG_F(2); + if (a_this->speed.y > 0.0f) { + i_this->field_0x628 = 7; + } else { + i_this->field_0x628 = 5; + } + anm_init(i_this, ANM_FLY, 1.0f, 2, 1.0f); + } + break; + + case 1: + if (i_this->field_0x628 == 0 && i_this->field_0x624 < 3.0f + TREG_F(1)) { + anm_init(i_this, ANM_KAKKU1, 1.0f, 0, 1.0f); + i_this->field_0x61E = 0; + } + break; + } + + switch (i_this->field_0x61C) { + case 1: + break; + + case 0: + i_this->field_0x5C4.x = a_this->home.pos.x + cM_rndFX(20.0f); + i_this->field_0x5C4.y = a_this->home.pos.y + 20.0f + TREG_F(0); + i_this->field_0x5C4.z = a_this->home.pos.z + cM_rndFX(20.0f); + i_this->field_0x61C = 1; + break; + } + + a_this->speedF = l_HIO.mFlightSpeed; + sp24 = i_this->field_0x5C4 - a_this->current.pos; + if (sp24.abs() < 100.0f + TREG_F(3)) { + i_this->field_0x5C4.x = a_this->home.pos.x; + i_this->field_0x5C4.z = a_this->home.pos.z; + if (i_this->field_0x645 != 0) { + i_this->mActionID = ACT_LANDING3; + i_this->field_0x61C = 0; + anm_init(i_this, ANM_FLY, 2.0f, 2, 1.0f); + } else { + i_this->mActionID = ACT_LANDING2; + i_this->field_0x61C = 0; + anm_init(i_this, ANM_KAKKU, 1.0f, 0, 1.0f); + i_this->field_0x64C[0] = cM_rndF(45.0f + TREG_F(4)); + } + } + cLib_addCalcAngleS2(&a_this->current.angle.y, cM_atan2s(sp24.x, sp24.z), 4, (TREG_S(3) + 1000)); + cLib_addCalcAngleS2(&a_this->current.angle.x, + -cM_atan2s(sp24.y, JMAFastSqrt((sp24.x * sp24.x) + (sp24.z * sp24.z))), 4, + (TREG_S(3) + 1000)); +} + +/* 804D8648-804D8798 001AE8 0150+00 1/1 0/0 0/0 .text bd_landing2__FP8bd_class */ +static void bd_landing2(bd_class* i_this) { + fopEn_enemy_c* a_this = (fopEn_enemy_c*)i_this; + + cXyz sp20; + cXyz sp14; + if (i_this->field_0x64C[0] == 0x14) { + anm_init(i_this, ANM_FLY, 1.0f, 2, 1.0f); + } + if (i_this->field_0x64C[0] == 0) { + anm_init(i_this, ANM_FLY, 2.0f, 2, 1.0f); + i_this->mActionID = ACT_GROUND; + i_this->field_0x61C = 0; + a_this->speed.y = 0.0f; + } + cLib_addCalc2(&a_this->speedF, 10.0f + TREG_F(8), 0.5f, 1.0f + TREG_F(9)); + sp20 = i_this->field_0x5C4 - a_this->current.pos; + s16 temp_r28 = a_this->current.angle.y; + cLib_addCalcAngleS2(&a_this->current.angle.y, cM_atan2s(sp20.x, sp20.z), 4, TREG_S(4) + 2000); + cLib_addCalcAngleS2(&a_this->current.angle.x, + -cM_atan2s(sp20.y, JMAFastSqrt((sp20.x * sp20.x) + (sp20.z * sp20.z))), 4, + TREG_S(4) + 2000); + cLib_addCalcAngleS2(&a_this->current.angle.z, + (TREG_S(6) + 4) * (temp_r28 - a_this->current.angle.y), 4, + TREG_S(7) + 1000); +} + +/* ############################################################################################## */ + +/* 804D8798-804D8A34 001C38 029C+00 1/1 0/0 0/0 .text bd_landing3__FP8bd_class */ +static void bd_landing3(bd_class* i_this) { + fopEn_enemy_c* a_this = (fopEn_enemy_c*)i_this; + daPy_py_c* player = (daPy_py_c*)dComIfGp_getPlayer(0); + + cXyz sp20; + cXyz sp14; + f32 unused = 0.0f; + switch (i_this->field_0x61C) { + case 1: + break; + case 0: + i_this->field_0x61C = 1; + break; + } + + if (i_this->field_0x62C != NULL) { + i_this->field_0x5C4 = *i_this->field_0x62C; + } else { + i_this->field_0x5C4 = a_this->home.pos; + } + a_this->speedF = 0.0f; + a_this->gravity = 0.0f; + cLib_addCalc2(&a_this->current.pos.x, i_this->field_0x5C4.x, 0.1f + TREG_F(5), + fabsf(a_this->speed.x)); + cLib_addCalc2(&a_this->current.pos.y, i_this->field_0x5C4.y, 0.1f + TREG_F(5), + fabsf(a_this->speed.y)); + cLib_addCalc2(&a_this->current.pos.z, i_this->field_0x5C4.z, 0.1f + TREG_F(5), + fabsf(a_this->speed.z)); + sp20 = i_this->field_0x5C4 - a_this->current.pos; + cLib_addCalcAngleS2(&a_this->current.angle.y, cM_atan2s(sp20.x, sp20.z), 4, TREG_S(4) + 1000); + if (sp20.abs() < 10.0f) { + if (i_this->field_0x5B6 >= 1) { + i_this->mActionID = ACT_KKRI; + i_this->field_0x64C[3] = 400.0f + cM_rndF(100.0f); + } else { + i_this->mActionID = ACT_ROPE; + i_this->field_0x64C[3] = 200.0f + cM_rndF(200.0f); + } + i_this->field_0x61C = 0; + } +} + +/* ############################################################################################## */ + +/* 804D8A34-804D8C48 001ED4 0214+00 1/1 0/0 0/0 .text bd_rope__FP8bd_class */ +static void bd_rope(bd_class* i_this) { + fopEn_enemy_c* a_this = (fopEn_enemy_c*)i_this; + + a_this->speedF = 0.0f; + a_this->gravity = 0.0f; + a_this->speed.y = 0.0f; + if (i_this->field_0x64C[1] == 0) { + if (cM_rndF(1.0f) < 0.2f) { + i_this->field_0x64C[1] = (20.0f + cM_rndF(10.0f)); + } else { + i_this->field_0x64C[1] = (2.0f + cM_rndF(2.0f)); + } + anm_init(i_this, wait_bck[(int)cM_rndF(1.99f)], 2.0f, 0, 1.0f); + } + if (i_this->field_0x62C != NULL) { + i_this->field_0x5C4 = *i_this->field_0x62C; + } else { + i_this->field_0x5C4 = a_this->home.pos; + } + cLib_addCalc2(&a_this->current.pos.x, i_this->field_0x5C4.x, 1.0f, + 3.0f + fabsf(a_this->speed.x)); + cLib_addCalc2(&a_this->current.pos.y, i_this->field_0x5C4.y, 1.0f, + 3.0f + fabsf(a_this->speed.y)); + cLib_addCalc2(&a_this->current.pos.z, i_this->field_0x5C4.z, 1.0f, + 3.0f + fabsf(a_this->speed.z)); + cLib_addCalcAngleS2(&a_this->current.angle.y, i_this->field_0x640, 1, 0x800); + if (i_this->field_0x64C[3] == 0) { + i_this->mActionID = ACT_FLY; + i_this->field_0x61C = 0; + i_this->field_0x61E = 1; + i_this->field_0x624 = 0.0f; + i_this->field_0x628 = (6.0f + cM_rndF(2.0f)); + anm_init(i_this, ANM_FLY, 1.0f, 2, 1.0f); + i_this->mChirpDist = l_HIO.mChirpDist; + } +} + +/* 804D8C48-804D8E20 0020E8 01D8+00 1/1 0/0 0/0 .text bd_kkri__FP8bd_class */ +static void bd_kkri(bd_class* i_this) { + fopEn_enemy_c* a_this = (fopEn_enemy_c*)i_this; + + a_this->speedF = 0.0f; + a_this->gravity = 0.0f; + a_this->speed.y = 0.0f; + if (i_this->field_0x64C[1] == 0) { + if (cM_rndF(1.0f) < 0.2f) { + i_this->field_0x64C[1] = (20.0f + cM_rndF(10.0f)); + } else { + i_this->field_0x64C[1] = (2.0f + cM_rndF(2.0f)); + } + anm_init(i_this, wait_bck[(int)cM_rndF(1.99f)], 2.0f, 0, 1.0f); + } + i_this->field_0x5C4 = i_this->field_0x634; + cLib_addCalc2(&a_this->current.pos.x, i_this->field_0x5C4.x, 1.0f, + 3.0f + fabsf(a_this->speed.x)); + cLib_addCalc2(&a_this->current.pos.y, i_this->field_0x5C4.y, 1.0f, + 3.0f + fabsf(a_this->speed.y)); + cLib_addCalc2(&a_this->current.pos.z, i_this->field_0x5C4.z, 1.0f, + 3.0f + fabsf(a_this->speed.z)); + if (i_this->field_0x64C[3] == 0) { + i_this->mActionID = ACT_FLY; + i_this->field_0x61C = 0; + i_this->field_0x61E = 1; + i_this->field_0x624 = 0.0f; + i_this->field_0x628 = (6.0f + cM_rndF(2.0f)); + anm_init(i_this, ANM_FLY, 1.0f, 2, 1.0f); + i_this->mChirpDist = l_HIO.mChirpDist; + } +} + +/* 804D8E20-804D8EB8 0022C0 0098+00 1/1 0/0 0/0 .text bd_drop__FP8bd_class */ +static void bd_drop(bd_class* i_this) { + fopEn_enemy_c* a_this = (fopEn_enemy_c*)i_this; + + switch (i_this->field_0x61C) { /* irregular */ + case 1: + break; + case 0: + anm_init(i_this, ANM_FLY, 1.0f, 2, 1.0f); + i_this->field_0x61C++; + break; + } + a_this->gravity = -1.0f; + if (i_this->mBgc.ChkGroundHit() || i_this->field_0x5C2 != 0) { + i_this->mActionID = ACT_GROUND; + i_this->field_0x61C = 0; + } +} + +/* ############################################################################################## */ + +/* 804D8EB8-804D91F8 002358 0340+00 2/1 0/0 0/0 .text action__FP8bd_class */ +static void action(bd_class* i_this) { + fopEn_enemy_c* a_this = (fopEn_enemy_c*)i_this; + + cXyz sp24; + cXyz sp18; + a_this->gravity = -7.0f; + i_this->mSphere.OnCoSetBit(); + daPy_py_c* player = (daPy_py_c*)dComIfGp_getPlayer(0); + i_this->field_0x5D4 = &player->current; + i_this->field_0x5DC = fopAcM_searchPlayerDistance(a_this); + i_this->field_0x5E0 = fopAcM_searchPlayerDistanceXZ(a_this); + i_this->field_0x5D8 = fopAcM_searchPlayerAngleY(a_this); + + int sp10 = 0; + int var_r28 = 0; + int unused = 0; + s16 target_angle_x = 0; + pl_check(i_this); + + switch (i_this->mActionID) { + case ACT_GROUND: + bd_ground(i_this); + var_r28 = 1; + sp10 = 1; + break; + + case ACT_DROP: + bd_drop(i_this); + var_r28 = 1; + sp10 = 1; + break; + + case ACT_FLY: + bd_fly(i_this); + break; + + case ACT_LANDING: + bd_landing(i_this); + break; + + case ACT_LANDING2: + bd_landing2(i_this); + sp10 = true; + break; + + case ACT_LANDING3: + bd_landing3(i_this); + var_r28 = -1; + target_angle_x = TREG_S(5) - 0x2000; + break; + + case ACT_ROPE: + bd_rope(i_this); + var_r28 = -1; + break; + + case ACT_KKRI: + bd_kkri(i_this); + var_r28 = -1; + break; + } + + cLib_addCalcAngleS2(&a_this->shape_angle.y, a_this->current.angle.y, 4, 0x2000); + cLib_addCalcAngleS2(&a_this->shape_angle.x, target_angle_x, 1, 0x1000); + a_this->shape_angle.z = a_this->current.angle.z; + cLib_addCalcAngleS2(&a_this->current.angle.z, 0, 1, 500); + if (var_r28 != 0) { + if (var_r28 > 0) { + cMtx_YrotS(*calc_mtx, a_this->current.angle.y); + sp24.x = 0.0f; + sp24.y = 0.0f; + sp24.z = a_this->speedF; + MtxPosition(&sp24, &sp18); + a_this->speed.x = sp18.x; + a_this->speed.z = sp18.z; + a_this->current.pos += a_this->speed; + a_this->speed.y += a_this->gravity; + if (a_this->speed.y < -80.0f) { + a_this->speed.y = -80.0f; + } + } + } else { + cMtx_YrotS(*calc_mtx, a_this->current.angle.y); + cMtx_XrotM(*calc_mtx, a_this->current.angle.x); + sp24.x = 0.0f; + sp24.y = 0.0f; + sp24.z = a_this->speedF; + MtxPosition(&sp24, &a_this->speed); + a_this->current.pos += a_this->speed; + } + i_this->field_0x5C2 = 0; + if (sp10) { + i_this->mBgc.CrrPos(dComIfG_Bgsp()); + if (strcmp(dComIfGp_getStartStageName(), "R_SP127") == 0) { + if (a_this->speed.y <= 0.0f) { + if (a_this->current.pos.y <= 0.0f) { + a_this->current.pos.y = 0.0f; + a_this->speed.y = 0.0f; + i_this->field_0x5C2 = 1; + } + } + } + } + i_this->field_0x620 += i_this->field_0x624; + if (i_this->field_0x628 != 0) { + i_this->field_0x628--; + i_this->field_0x624 += 1.5f + TREG_F(6); + } else { + i_this->field_0x624 -= 0.5f + TREG_F(7); + } + if (i_this->field_0x620 <= 0.0f) { + i_this->field_0x620 = 0.0f; + } +} + +/* ############################################################################################## */ + +/* 804D91F8-804D959C 002698 03A4+00 2/1 0/0 0/0 .text daBd_Execute__FP8bd_class */ +static int daBd_Execute(bd_class* i_this) { + fopEn_enemy_c* a_this = (fopEn_enemy_c*)i_this; + daNpc_Kkri_c* kkri; + daCow_c* cow; + + if (i_this->field_0x5B6 >= 1) { + if (i_this->field_0x642 != 0) { + i_this->field_0x642--; + } + + fopAcM_SearchByName(PROC_NPC_KKRI, (fopAc_ac_c**)&kkri); + if (kkri != NULL && i_this->field_0x642 == 0) { + if (i_this->field_0x5B6 == 1) { + MTXCopy(kkri->getBd1Mtx(), *calc_mtx); + } else if (i_this->field_0x5B6 == 2) { + MTXCopy(kkri->getBd2Mtx(), *calc_mtx); + } else { + MTXCopy(kkri->getBd3Mtx(), *calc_mtx); + } + cXyz sp18(0.0f, 0.0f, 0.0f); + MtxPosition(&sp18, &i_this->field_0x634); + i_this->field_0x62C = &i_this->field_0x634; + i_this->field_0x640 = kkri->shape_angle.y; + } + } + i_this->field_0x618++; + for (int i = 0; i < 4; i++) { + if (i_this->field_0x64C[i] != 0) { + i_this->field_0x64C[i]--; + } + } + if (i_this->field_0x654 != 0) { + i_this->field_0x654--; + } + action(i_this); + mDoMtx_stack_c::transS(a_this->current.pos.x, a_this->current.pos.y + i_this->field_0x620, + a_this->current.pos.z); + mDoMtx_stack_c::YrotM(a_this->shape_angle.y); + mDoMtx_stack_c::XrotM(a_this->shape_angle.x); + mDoMtx_stack_c::ZrotM(a_this->shape_angle.z); + mDoMtx_stack_c::scaleM(l_HIO.mBasicSize, l_HIO.mBasicSize, l_HIO.mBasicSize); + J3DModel* model_p = i_this->mpMorf->getModel(); + model_p->setBaseTRMtx(mDoMtx_stack_c::get()); + i_this->mpMorf->play(&a_this->eyePos, 0, 0); + if (i_this->mAnmID == ANM_FLY && i_this->mChirpDist != 0) { + i_this->mChirpDist--; + i_this->mSound.startLevelSound(Z2SE_BIRD_FLYING, 0, -1); + } + i_this->mpBtk->setFrame((f32)(int)i_this->field_0x5EC); + i_this->mpMorf->modelCalc(); + a_this->eyePos = a_this->current.pos; + a_this->eyePos.y += 20.0f; + a_this->attention_info.position = a_this->eyePos; + i_this->mSound.framework(0, dComIfGp_getReverb(fopAcM_GetRoomNo(a_this))); + + if (i_this->field_0x656 == 0 && dComIfGp_event_runCheck()) { + cow = (daCow_c*)fopAcM_SearchByName(PROC_COW); + if (cow != NULL && cow->speedF > 1.0f) { + i_this->field_0x656 = 1; + i_this->mActionID = ACT_GROUND; + i_this->field_0x61C = 0; + i_this->field_0x658 = TREG_S(6) + 160; + a_this->current.pos.x = -914.0f + cM_rndFX(200.0f); + a_this->current.pos.y = 160.0f; + a_this->current.pos.z = 3931.0f + cM_rndFX(200.0f); + } + } + return 1; +} + +/* 804D959C-804D95A4 002A3C 0008+00 1/0 0/0 0/0 .text daBd_IsDelete__FP8bd_class */ +static int daBd_IsDelete(bd_class* i_this) { + return 1; +} + +/* 804D95A4-804D960C 002A44 0068+00 1/0 0/0 0/0 .text daBd_Delete__FP8bd_class */ +static int daBd_Delete(bd_class* i_this) { + fopEn_enemy_c* a_this = (fopEn_enemy_c*)i_this; + + fopAcM_RegisterDeleteID(i_this, "Bd"); + dComIfG_resDelete(&i_this->mPhase, "Bd"); + if (i_this->field_0x9E8 != 0) { + l_HIOInit = 0; + mDoHIO_DELETE_CHILD(l_HIO.id); + } + if (a_this->heap != 0) { + i_this->mSound.deleteObject(); + } + return 1; +} + +/* 804D960C-804D97D4 002AAC 01C8+00 1/1 0/0 0/0 .text useHeapInit__FP10fopAc_ac_c */ +static int useHeapInit(fopAc_ac_c* i_this) { + bd_class* a_this = (bd_class*)i_this; + + a_this->mpMorf = new mDoExt_McaMorf((J3DModelData*)dComIfG_getObjectRes("Bd", 0xE), NULL, NULL, + (J3DAnmTransform*)dComIfG_getObjectRes("Bd", 8), 0, 1.0f, 0, + -1, 1, NULL, 0x80000, 0x11000284); + if (a_this->mpMorf == NULL || a_this->mpMorf->getModel() == NULL) { + return 0; + } + + a_this->mpBtk = new mDoExt_btkAnm(); + if (a_this->mpBtk == NULL) { + return 0; + } + if (a_this->mpBtk->init(a_this->mpMorf->getModel()->getModelData(), + (J3DAnmTextureSRTKey*)dComIfG_getObjectRes("Bd", 0x11), 1, 0, 1.0f, 0, + -1) == 0) { - {{0.0f, 0.0f, 0.0f}, 10.0f} // mSph - } // mSphAttr -}; + return 0; + } + a_this->mSound.init(&i_this->current.pos, 1); + return 1; +} + +/* ############################################################################################## */ + +/* 804D981C-804D9BB8 002CBC 039C+00 1/0 0/0 0/0 .text daBd_Create__FP10fopAc_ac_c */ +static int daBd_Create(fopAc_ac_c* i_act_this) { + bd_class* i_this = (bd_class*)i_act_this; + fopAcM_SetupActor(i_act_this, bd_class); + + int phase_state = dComIfG_resLoad(&i_this->mPhase, "Bd"); + if (phase_state == cPhs_COMPLEATE_e) { + OS_REPORT("BD PARAM %x\n", fopAcM_GetParam(i_act_this)); + i_this->field_0x5B4 = fopAcM_GetParam(i_act_this); + i_this->field_0x5B5 = (fopAcM_GetParam(i_act_this) & 0xFF00) >> 8; + i_this->field_0x5B6 = (fopAcM_GetParam(i_act_this) & 0xFF0000) >> 0x10; + i_this->field_0x5B7 = (fopAcM_GetParam(i_act_this) & 0xFF000000) >> 0x18; + if (i_this->field_0x5B6 == 0xFF) { + i_this->field_0x5B6 = 0; + } + i_this->field_0x5B9 = (fopAcM_GetParam(i_act_this) & 0xFF0000) >> 0x10; + i_this->field_0x5B8 = (fopAcM_GetParam(i_act_this) & 0xFF000000) >> 0x18; + OS_REPORT("BD//////////////BD SET 1 !!\n"); + if (fopAcM_entrySolidHeap(i_act_this, useHeapInit, 0xBE0) == 0) { + OS_REPORT("//////////////BD SET NON !!\n"); + return cPhs_ERROR_e; + } + OS_REPORT("//////////////BD SET 2 !!\n"); + if (l_HIOInit == 0) { + i_this->field_0x9E8 = 1; + l_HIOInit = 1; + l_HIO.id = mDoHIO_CREATE_CHILD("小鳥", (JORReflexible*)&l_HIO); + } + fopAcM_SetMtx(i_act_this, i_this->mpMorf->getModel()->getBaseTRMtx()); + i_this->mBgc.Set(fopAcM_GetPosition_p(i_act_this), fopAcM_GetOldPosition_p(i_act_this), + i_act_this, 1, &i_this->mAcchCir, fopAcM_GetSpeed_p(i_act_this), NULL, + NULL); + i_this->mAcchCir.SetWall(10.0f, 10.0f); + i_act_this->health = 1; + i_act_this->field_0x560 = 1; + i_this->mStts.Init(100, 0, i_act_this); + + /* 804DA234-804DA274 0002AC 0040+00 1/1 0/0 0/0 .data cc_sph_src$4956 */ + static dCcD_SrcSph cc_sph_src = { + { + {0x0, {{0x0, 0x0, 0x0}, {0xd8fbfdff, 0x3}, 0x75}}, // mObj + {dCcD_SE_NONE, 0x0, 0x0, 0x0, 0x0}, // mGObjAt + {dCcD_SE_NONE, 0x0, 0x0, 0x0, 0x2}, // mGObjTg + {0x0}, // mGObjCo + }, // mObjInf + { + {{0.0f, 0.0f, 0.0f}, 10.0f} // mSph + } // mSphAttr + }; + + i_this->mSphere.Set(cc_sph_src); + i_this->mSphere.SetStts(&i_this->mStts); + if (i_this->field_0x5B5 == 0xFF) { + i_this->field_0x5EC = cM_rndF(7.999f); + } else { + i_this->field_0x5EC = i_this->field_0x5B5; + if (i_this->field_0x5EC > 7) { + i_this->field_0x5EC = 7; + } + } + i_this->mActionID = ACT_GROUND; + i_this->field_0x61C = -1; + i_this->field_0x630 = rope_pt; + rope_pt++; + if (rope_pt > 13) { + rope_pt = 0; + } + i_this->field_0x642 = 20; + daBd_Execute(i_this); + csXyz sp1C = i_act_this->current.angle; + sp1C.y = cM_rndF(65536.0f); + if (i_this->field_0x5B4 != 0xFF && i_this->field_0x5B4 != 0 && i_this->field_0x5B4 != 1) { + for (int i = 0; i < i_this->field_0x5B4 - 1; i++) { + fopAcM_createChild( + PROC_BD, fopAcM_GetID(i_act_this), fopAcM_GetParam(i_act_this) & 0xFFFFFF00, + &i_act_this->current.pos, fopAcM_GetRoomNo(i_act_this), &sp1C, NULL, -1, NULL); + } + } + } + return phase_state; +} /* 804DA274-804DA294 -00001 0020+00 1/0 0/0 0/0 .data l_daBd_Method */ static actor_method_class l_daBd_Method = { - (process_method_func)daBd_Create__FP10fopAc_ac_c, - (process_method_func)daBd_Delete__FP8bd_class, - (process_method_func)daBd_Execute__FP8bd_class, - (process_method_func)daBd_IsDelete__FP8bd_class, - (process_method_func)daBd_Draw__FP8bd_class, + (process_method_func)daBd_Create, (process_method_func)daBd_Delete, + (process_method_func)daBd_Execute, (process_method_func)daBd_IsDelete, + (process_method_func)daBd_Draw, }; /* 804DA294-804DA2C4 -00001 0030+00 0/0 0/0 1/0 .data g_profile_BD */ extern actor_process_profile_definition g_profile_BD = { - fpcLy_CURRENT_e, // mLayerID - 8, // mListID - fpcPi_CURRENT_e, // mListPrio - PROC_BD, // mProcName - &g_fpcLf_Method.base, // sub_method - sizeof(bd_class), // mSize - 0, // mSizeOther - 0, // mParameters - &g_fopAc_Method.base, // sub_method - 718, // mPriority - &l_daBd_Method, // sub_method - 0x000C4100, // mStatus - fopAc_ACTOR_e, // mActorType - fopAc_CULLBOX_0_e, // cullType + fpcLy_CURRENT_e, // mLayerID + 8, // mListID + fpcPi_CURRENT_e, // mListPrio + PROC_BD, // mProcName + &g_fpcLf_Method.base, // sub_method + sizeof(bd_class), // mSize + 0, // mSizeOther + 0, // mParameters + &g_fopAc_Method.base, // sub_method + 718, // mPriority + &l_daBd_Method, // sub_method + 0x000C4100, // mStatus + fopAc_ACTOR_e, // mActorType + fopAc_CULLBOX_0_e, // cullType }; -/* 804DA2C4-804DA2D0 00033C 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, -}; - -/* 804DA2D0-804DA2DC 000348 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, -}; - -/* 804DA2DC-804DA300 000354 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_804D9E48, - (void*)NULL, - (void*)NULL, - (void*)func_804D9E40, -}; - -/* 804DA300-804DA30C 000378 000C+00 2/2 0/0 0/0 .data __vt__12J3DFrameCtrl */ -SECTION_DATA extern void* __vt__12J3DFrameCtrl[3] = { - (void*)NULL /* RTTI */, - (void*)NULL, - (void*)__dt__12J3DFrameCtrlFv, -}; - -/* 804DA30C-804DA318 000384 000C+00 2/2 0/0 0/0 .data __vt__10daBd_HIO_c */ -SECTION_DATA extern void* __vt__10daBd_HIO_c[3] = { - (void*)NULL /* RTTI */, - (void*)NULL, - (void*)__dt__10daBd_HIO_cFv, -}; - -/* 804D6C4C-804D6CA4 0000EC 0058+00 1/1 0/0 0/0 .text __ct__10daBd_HIO_cFv */ -daBd_HIO_c::daBd_HIO_c() { - // NONMATCHING -} - -/* ############################################################################################## */ -/* 804D9E74-804D9E78 000010 0004+00 2/14 0/0 0/0 .rodata @3963 */ -SECTION_RODATA static u8 const lit_3963[4] = { - 0x00, - 0x00, - 0x00, - 0x00, -}; -COMPILER_STRIP_GATE(0x804D9E74, &lit_3963); - -/* 804D9E78-804D9E7C 000014 0004+00 2/2 0/0 0/0 .rodata @3964 */ -SECTION_RODATA static f32 const lit_3964 = -1.0f; -COMPILER_STRIP_GATE(0x804D9E78, &lit_3964); - -/* 804D9F6C-804D9F6C 000108 0000+00 0/0 0/0 0/0 .rodata @stringBase0 */ -#pragma push -#pragma force_active on -SECTION_DEAD static char const* const stringBase_804D9F6C = "Bd"; -#pragma pop - -/* 804D6CA4-804D6D54 000144 00B0+00 8/8 0/0 0/0 .text anm_init__FP8bd_classifUcf */ -static void anm_init(bd_class* param_0, int param_1, f32 param_2, u8 param_3, f32 param_4) { - // NONMATCHING -} - -/* 804D6D54-804D6DD8 0001F4 0084+00 1/0 0/0 0/0 .text daBd_Draw__FP8bd_class */ -static void daBd_Draw(bd_class* param_0) { - // NONMATCHING -} - -/* ############################################################################################## */ -/* 804D9E7C-804D9E80 000018 0004+00 0/3 0/0 0/0 .rodata @4012 */ -#pragma push -#pragma force_active on -SECTION_RODATA static f32 const lit_4012 = 30.0f; -COMPILER_STRIP_GATE(0x804D9E7C, &lit_4012); -#pragma pop - -/* 804D9E80-804D9E84 00001C 0004+00 0/4 0/0 0/0 .rodata @4013 */ -#pragma push -#pragma force_active on -SECTION_RODATA static f32 const lit_4013 = 100.0f; -COMPILER_STRIP_GATE(0x804D9E80, &lit_4013); -#pragma pop - -/* 804D6DD8-804D6ED4 000278 00FC+00 1/1 0/0 0/0 .text way_bg_check__FP8bd_class */ -static void way_bg_check(bd_class* param_0) { - // NONMATCHING -} - -/* 804D6ED4-804D6F10 000374 003C+00 1/1 0/0 0/0 .text __dt__4cXyzFv */ -// cXyz::~cXyz() { -extern "C" void __dt__4cXyzFv() { - // NONMATCHING -} - -/* ############################################################################################## */ -/* 804D9E84-804D9E8C 000020 0008+00 0/4 0/0 0/0 .rodata @4105 */ -#pragma push -#pragma force_active on -SECTION_RODATA static u8 const lit_4105[8] = { - 0x3F, 0xE0, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, -}; -COMPILER_STRIP_GATE(0x804D9E84, &lit_4105); -#pragma pop - -/* 804D9E8C-804D9E94 000028 0008+00 0/4 0/0 0/0 .rodata @4106 */ -#pragma push -#pragma force_active on -SECTION_RODATA static u8 const lit_4106[8] = { - 0x40, 0x08, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, -}; -COMPILER_STRIP_GATE(0x804D9E8C, &lit_4106); -#pragma pop - -/* 804D9E94-804D9E9C 000030 0008+00 0/4 0/0 0/0 .rodata @4107 */ -#pragma push -#pragma force_active on -SECTION_RODATA static u8 const lit_4107[8] = { - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, -}; -COMPILER_STRIP_GATE(0x804D9E94, &lit_4107); -#pragma pop - -/* 804D9E9C-804D9EA0 000038 0004+00 0/9 0/0 0/0 .rodata @4108 */ -#pragma push -#pragma force_active on -SECTION_RODATA static f32 const lit_4108 = 10.0f; -COMPILER_STRIP_GATE(0x804D9E9C, &lit_4108); -#pragma pop - -/* 804DA320-804DA324 000008 0001+03 2/2 0/0 0/0 .bss @1109 */ -static u8 lit_1109[1 + 3 /* padding */]; - -/* 804DA324-804DA328 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 - -/* 804DA328-804DA32C 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 - -/* 804DA32C-804DA330 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 - -/* 804DA330-804DA334 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 - -/* 804DA334-804DA338 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 - -/* 804DA338-804DA33C 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 - -/* 804DA33C-804DA340 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 - -/* 804DA340-804DA344 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 - -/* 804DA344-804DA348 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 - -/* 804DA348-804DA34C 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 - -/* 804DA34C-804DA350 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 - -/* 804DA350-804DA354 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 - -/* 804DA354-804DA358 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 - -/* 804DA358-804DA35C 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 - -/* 804DA35C-804DA360 -00001 0004+00 1/2 0/0 0/0 .bss None */ -/* 804DA35C 0001+00 data_804DA35C @1009 */ -/* 804DA35D 0003+00 data_804DA35D None */ -static u8 struct_804DA35C[4]; - -/* 804DA360-804DA36C 000048 000C+00 0/1 0/0 0/0 .bss @3937 */ -#pragma push -#pragma force_active on -static u8 lit_3937[12]; -#pragma pop - -/* 804DA36C-804DA38C 000054 0020+00 8/10 0/0 0/0 .bss l_HIO */ -static u8 l_HIO[32]; - -/* 804D6F10-804D7210 0003B0 0300+00 1/1 0/0 0/0 .text s_a_sub__FPvPv */ -static void s_a_sub(void* param_0, void* param_1) { - // NONMATCHING -} - -/* ############################################################################################## */ -/* 804D9EA0-804D9EA4 00003C 0004+00 0/4 0/0 0/0 .rodata @4169 */ -#pragma push -#pragma force_active on -SECTION_RODATA static f32 const lit_4169 = 6.0f; -COMPILER_STRIP_GATE(0x804D9EA0, &lit_4169); -#pragma pop - -/* 804D9EA4-804D9EA8 000040 0004+00 1/7 0/0 0/0 .rodata @4170 */ -SECTION_RODATA static f32 const lit_4170 = 2.0f; -COMPILER_STRIP_GATE(0x804D9EA4, &lit_4170); - -/* 804D9EA8-804D9EAC 000044 0004+00 2/10 0/0 0/0 .rodata @4171 */ -SECTION_RODATA static f32 const lit_4171 = 1.0f; -COMPILER_STRIP_GATE(0x804D9EA8, &lit_4171); - -/* 804D9EAC-804D9EB4 000048 0004+04 0/2 0/0 0/0 .rodata @4172 */ -#pragma push -#pragma force_active on -SECTION_RODATA static f32 const lit_4172[1 + 1 /* padding */] = { - 0.5f, - /* padding */ - 0.0f, -}; -COMPILER_STRIP_GATE(0x804D9EAC, &lit_4172); -#pragma pop - -/* 804D9EB4-804D9EBC 000050 0008+00 0/2 0/0 0/0 .rodata @4174 */ -#pragma push -#pragma force_active on -SECTION_RODATA static u8 const lit_4174[8] = { - 0x43, 0x30, 0x00, 0x00, 0x80, 0x00, 0x00, 0x00, -}; -COMPILER_STRIP_GATE(0x804D9EB4, &lit_4174); -#pragma pop - -/* 804D7210-804D7518 0006B0 0308+00 1/1 0/0 0/0 .text pl_check__FP8bd_class */ -static void pl_check(bd_class* param_0) { - // NONMATCHING -} - -/* 804D7518-804D75D0 0009B8 00B8+00 1/1 0/0 0/0 .text pointBgCheck__FP4cXyzP4cXyz */ -static void pointBgCheck(cXyz* param_0, cXyz* param_1) { - // NONMATCHING -} - -/* ############################################################################################## */ -/* 804D9EBC-804D9EC0 000058 0004+00 0/2 0/0 0/0 .rodata @4272 */ -#pragma push -#pragma force_active on -SECTION_RODATA static f32 const lit_4272 = 1000.0f; -COMPILER_STRIP_GATE(0x804D9EBC, &lit_4272); -#pragma pop - -/* 804D9EC0-804D9EC4 00005C 0004+00 0/1 0/0 0/0 .rodata @4273 */ -#pragma push -#pragma force_active on -SECTION_RODATA static f32 const lit_4273 = 600.0f; -COMPILER_STRIP_GATE(0x804D9EC0, &lit_4273); -#pragma pop - -/* 804D9EC4-804D9EC8 000060 0004+00 0/1 0/0 0/0 .rodata @4274 */ -#pragma push -#pragma force_active on -SECTION_RODATA static f32 const lit_4274 = 5.0f; -COMPILER_STRIP_GATE(0x804D9EC4, &lit_4274); -#pragma pop - -/* 804D9EC8-804D9ECC 000064 0004+00 0/1 0/0 0/0 .rodata @4275 */ -#pragma push -#pragma force_active on -SECTION_RODATA static f32 const lit_4275 = 500.0f; -COMPILER_STRIP_GATE(0x804D9EC8, &lit_4275); -#pragma pop - -/* 804D9F6C-804D9F6C 000108 0000+00 0/0 0/0 0/0 .rodata @stringBase0 */ -#pragma push -#pragma force_active on -SECTION_DEAD static char const* const stringBase_804D9F6F = "F_SP103"; -SECTION_DEAD static char const* const stringBase_804D9F77 = "F_SP127"; -#pragma pop - -/* 804D75D0-804D785C 000A70 028C+00 1/1 0/0 0/0 .text land_check__FP8bd_class */ -static void land_check(bd_class* param_0) { - // NONMATCHING -} - -/* ############################################################################################## */ -/* 804D9ECC-804D9ED0 000068 0004+00 1/1 0/0 0/0 .rodata @4282 */ -SECTION_RODATA static f32 const lit_4282 = -10.0f; -COMPILER_STRIP_GATE(0x804D9ECC, &lit_4282); - -/* 804D785C-804D7890 000CFC 0034+00 1/1 0/0 0/0 .text drop_check__FP8bd_class */ -static void drop_check(bd_class* param_0) { - // NONMATCHING -} - -/* ############################################################################################## */ -/* 804D9ED0-804D9ED8 00006C 0006+02 1/1 0/0 0/0 .rodata @4286 */ -SECTION_RODATA static u8 const lit_4286[6 + 2 /* padding */] = { - 0x80, - 0x00, - 0x40, - 0x00, - 0xC0, - 0x00, - /* padding */ - 0x00, - 0x00, -}; -COMPILER_STRIP_GATE(0x804D9ED0, &lit_4286); - -/* 804D9ED8-804D9EDC 000074 0004+00 1/2 0/0 0/0 .rodata @4288 */ -SECTION_RODATA static u32 const lit_4288 = 0x403F5C29; -COMPILER_STRIP_GATE(0x804D9ED8, &lit_4288); - -/* 804D7890-804D78FC 000D30 006C+00 1/1 0/0 0/0 .text turn_set__FP8bd_class */ -static void turn_set(bd_class* param_0) { - // NONMATCHING -} - -/* ############################################################################################## */ -/* 804D9EDC-804D9EE0 000078 0004+00 0/2 0/0 0/0 .rodata @4358 */ -#pragma push -#pragma force_active on -SECTION_RODATA static f32 const lit_4358 = 65536.0f; -COMPILER_STRIP_GATE(0x804D9EDC, &lit_4358); -#pragma pop - -/* 804D9EE0-804D9EE4 00007C 0004+00 0/4 0/0 0/0 .rodata @4359 */ -#pragma push -#pragma force_active on -SECTION_RODATA static f32 const lit_4359 = 200.0f; -COMPILER_STRIP_GATE(0x804D9EE0, &lit_4359); -#pragma pop - -/* 804D9EE4-804D9EE8 000080 0004+00 0/1 0/0 0/0 .rodata @4360 */ -#pragma push -#pragma force_active on -SECTION_RODATA static f32 const lit_4360 = 60.0f; -COMPILER_STRIP_GATE(0x804D9EE4, &lit_4360); -#pragma pop - -/* 804D9EE8-804D9EEC 000084 0004+00 0/4 0/0 0/0 .rodata @4361 */ -#pragma push -#pragma force_active on -SECTION_RODATA static f32 const lit_4361 = 1.0f / 5.0f; -COMPILER_STRIP_GATE(0x804D9EE8, &lit_4361); -#pragma pop - -/* 804D9EEC-804D9EF0 000088 0004+00 0/1 0/0 0/0 .rodata @4362 */ -#pragma push -#pragma force_active on -SECTION_RODATA static f32 const lit_4362 = 7.0f / 20.0f; -COMPILER_STRIP_GATE(0x804D9EEC, &lit_4362); -#pragma pop - -/* 804D9EF0-804D9EF4 00008C 0004+00 0/1 0/0 0/0 .rodata @4363 */ -#pragma push -#pragma force_active on -SECTION_RODATA static f32 const lit_4363 = 15.0f; -COMPILER_STRIP_GATE(0x804D9EF0, &lit_4363); -#pragma pop - -/* 804D9F6C-804D9F6C 000108 0000+00 0/0 0/0 0/0 .rodata @stringBase0 */ -#pragma push -#pragma force_active on -SECTION_DEAD static char const* const stringBase_804D9F7F = "R_SP127"; -#pragma pop - -/* 804D78FC-804D7DF4 000D9C 04F8+00 1/1 0/0 0/0 .text bd_ground__FP8bd_class */ -static void bd_ground(bd_class* param_0) { - // NONMATCHING -} - -/* ############################################################################################## */ -/* 804D9EF4-804D9EF8 000090 0004+00 0/2 0/0 0/0 .rodata @4452 */ -#pragma push -#pragma force_active on -SECTION_RODATA static f32 const lit_4452 = -2.0f; -COMPILER_STRIP_GATE(0x804D9EF4, &lit_4452); -#pragma pop - -/* 804D9EF8-804D9EFC 000094 0004+00 0/1 0/0 0/0 .rodata @4453 */ -#pragma push -#pragma force_active on -SECTION_RODATA static f32 const lit_4453 = -450.0f; -COMPILER_STRIP_GATE(0x804D9EF8, &lit_4453); -#pragma pop - -/* 804D9EFC-804D9F00 000098 0004+00 0/1 0/0 0/0 .rodata @4454 */ -#pragma push -#pragma force_active on -SECTION_RODATA static f32 const lit_4454 = -612.0f; -COMPILER_STRIP_GATE(0x804D9EFC, &lit_4454); -#pragma pop - -/* 804D9F00-804D9F04 00009C 0004+00 0/1 0/0 0/0 .rodata @4455 */ -#pragma push -#pragma force_active on -SECTION_RODATA static f32 const lit_4455 = 800.0f; -COMPILER_STRIP_GATE(0x804D9F00, &lit_4455); -#pragma pop - -/* 804D9F04-804D9F08 0000A0 0004+00 0/1 0/0 0/0 .rodata @4456 */ -#pragma push -#pragma force_active on -SECTION_RODATA static f32 const lit_4456 = -3000.0f; -COMPILER_STRIP_GATE(0x804D9F04, &lit_4456); -#pragma pop - -/* 804D9F08-804D9F0C 0000A4 0004+00 0/1 0/0 0/0 .rodata @4457 */ -#pragma push -#pragma force_active on -SECTION_RODATA static f32 const lit_4457 = 32768.0f; -COMPILER_STRIP_GATE(0x804D9F08, &lit_4457); -#pragma pop - -/* 804D9F0C-804D9F10 0000A8 0004+00 0/1 0/0 0/0 .rodata @4458 */ -#pragma push -#pragma force_active on -SECTION_RODATA static f32 const lit_4458 = 10000.0f; -COMPILER_STRIP_GATE(0x804D9F0C, &lit_4458); -#pragma pop - -/* 804D7DF4-804D82E4 001294 04F0+00 1/1 0/0 0/0 .text bd_fly__FP8bd_class */ -static void bd_fly(bd_class* param_0) { - // NONMATCHING -} - -/* ############################################################################################## */ -/* 804D9F10-804D9F14 0000AC 0004+00 0/1 0/0 0/0 .rodata @4526 */ -#pragma push -#pragma force_active on -SECTION_RODATA static f32 const lit_4526 = 45.0f; -COMPILER_STRIP_GATE(0x804D9F10, &lit_4526); -#pragma pop - -/* 804D82E4-804D8648 001784 0364+00 1/1 0/0 0/0 .text bd_landing__FP8bd_class */ -static void bd_landing(bd_class* param_0) { - // NONMATCHING -} - -/* 804D8648-804D8798 001AE8 0150+00 1/1 0/0 0/0 .text bd_landing2__FP8bd_class */ -static void bd_landing2(bd_class* param_0) { - // NONMATCHING -} - -/* ############################################################################################## */ -/* 804D9F14-804D9F18 0000B0 0004+00 0/1 0/0 0/0 .rodata @4624 */ -#pragma push -#pragma force_active on -SECTION_RODATA static f32 const lit_4624 = 1.0f / 10.0f; -COMPILER_STRIP_GATE(0x804D9F14, &lit_4624); -#pragma pop - -/* 804D9F18-804D9F1C 0000B4 0004+00 0/1 0/0 0/0 .rodata @4625 */ -#pragma push -#pragma force_active on -SECTION_RODATA static f32 const lit_4625 = 400.0f; -COMPILER_STRIP_GATE(0x804D9F18, &lit_4625); -#pragma pop - -/* 804D8798-804D8A34 001C38 029C+00 1/1 0/0 0/0 .text bd_landing3__FP8bd_class */ -static void bd_landing3(bd_class* param_0) { - // NONMATCHING -} - -/* ############################################################################################## */ -/* 804D9F1C-804D9F20 0000B8 0004+00 0/2 0/0 0/0 .rodata @4659 */ -#pragma push -#pragma force_active on -SECTION_RODATA static u32 const lit_4659 = 0x3FFEB852; -COMPILER_STRIP_GATE(0x804D9F1C, &lit_4659); -#pragma pop - -/* 804D8A34-804D8C48 001ED4 0214+00 1/1 0/0 0/0 .text bd_rope__FP8bd_class */ -static void bd_rope(bd_class* param_0) { - // NONMATCHING -} - -/* 804D8C48-804D8E20 0020E8 01D8+00 1/1 0/0 0/0 .text bd_kkri__FP8bd_class */ -static void bd_kkri(bd_class* param_0) { - // NONMATCHING -} - -/* 804D8E20-804D8EB8 0022C0 0098+00 1/1 0/0 0/0 .text bd_drop__FP8bd_class */ -static void bd_drop(bd_class* param_0) { - // NONMATCHING -} - -/* ############################################################################################## */ -/* 804D9F20-804D9F24 0000BC 0004+00 0/1 0/0 0/0 .rodata @4758 */ -#pragma push -#pragma force_active on -SECTION_RODATA static f32 const lit_4758 = -7.0f; -COMPILER_STRIP_GATE(0x804D9F20, &lit_4758); -#pragma pop - -/* 804D8EB8-804D91F8 002358 0340+00 2/1 0/0 0/0 .text action__FP8bd_class */ -static void action(bd_class* param_0) { - // NONMATCHING -} - -/* ############################################################################################## */ -/* 804D9F24-804D9F28 0000C0 0004+00 0/0 0/0 0/0 .rodata @4759 */ -#pragma push -#pragma force_active on -SECTION_RODATA static f32 const lit_4759 = -80.0f; -COMPILER_STRIP_GATE(0x804D9F24, &lit_4759); -#pragma pop - -/* 804D9F28-804D9F2C 0000C4 0004+00 0/0 0/0 0/0 .rodata @4760 */ -#pragma push -#pragma force_active on -SECTION_RODATA static f32 const lit_4760 = 1.5f; -COMPILER_STRIP_GATE(0x804D9F28, &lit_4760); -#pragma pop - -/* 804D9F2C-804D9F30 0000C8 0004+00 0/1 0/0 0/0 .rodata @4872 */ -#pragma push -#pragma force_active on -SECTION_RODATA static f32 const lit_4872 = -914.0f; -COMPILER_STRIP_GATE(0x804D9F2C, &lit_4872); -#pragma pop - -/* 804D9F30-804D9F34 0000CC 0004+00 0/1 0/0 0/0 .rodata @4873 */ -#pragma push -#pragma force_active on -SECTION_RODATA static f32 const lit_4873 = 160.0f; -COMPILER_STRIP_GATE(0x804D9F30, &lit_4873); -#pragma pop - -/* 804D9F34-804D9F38 0000D0 0004+00 0/1 0/0 0/0 .rodata @4874 */ -#pragma push -#pragma force_active on -SECTION_RODATA static f32 const lit_4874 = 3931.0f; -COMPILER_STRIP_GATE(0x804D9F34, &lit_4874); -#pragma pop - -/* 804D91F8-804D959C 002698 03A4+00 2/1 0/0 0/0 .text daBd_Execute__FP8bd_class */ -static void daBd_Execute(bd_class* param_0) { - // NONMATCHING -} - -/* 804D959C-804D95A4 002A3C 0008+00 1/0 0/0 0/0 .text daBd_IsDelete__FP8bd_class */ -static bool daBd_IsDelete(bd_class* param_0) { - return true; -} - -/* 804D95A4-804D960C 002A44 0068+00 1/0 0/0 0/0 .text daBd_Delete__FP8bd_class */ -static void daBd_Delete(bd_class* param_0) { - // NONMATCHING -} - -/* 804D960C-804D97D4 002AAC 01C8+00 1/1 0/0 0/0 .text useHeapInit__FP10fopAc_ac_c */ -static void useHeapInit(fopAc_ac_c* param_0) { - // NONMATCHING -} - -/* 804D97D4-804D981C 002C74 0048+00 1/0 0/0 0/0 .text __dt__12J3DFrameCtrlFv */ -// J3DFrameCtrl::~J3DFrameCtrl() { -extern "C" void __dt__12J3DFrameCtrlFv() { - // NONMATCHING -} - -/* ############################################################################################## */ -/* 804D9F38-804D9F3C 0000D4 0004+00 0/1 0/0 0/0 .rodata @5073 */ -#pragma push -#pragma force_active on -SECTION_RODATA static u32 const lit_5073 = 0x40FFF7CF; -COMPILER_STRIP_GATE(0x804D9F38, &lit_5073); -#pragma pop - -/* 804DA38C-804DA398 000074 000C+00 0/1 0/0 0/0 .bss @3946 */ -#pragma push -#pragma force_active on -static u8 lit_3946[12]; -#pragma pop - -/* 804DA398-804DA3A4 000080 000C+00 0/1 0/0 0/0 .bss @3947 */ -#pragma push -#pragma force_active on -static u8 lit_3947[12]; -#pragma pop - -/* 804DA3A4-804DA3B0 00008C 000C+00 0/1 0/0 0/0 .bss @3948 */ -#pragma push -#pragma force_active on -static u8 lit_3948[12]; -#pragma pop - -/* 804DA3B0-804DA3BC 000098 000C+00 0/1 0/0 0/0 .bss @3949 */ -#pragma push -#pragma force_active on -static u8 lit_3949[12]; -#pragma pop - -/* 804DA3BC-804DA3EC 0000A4 0030+00 0/1 0/0 0/0 .bss land_sp_pos */ -#pragma push -#pragma force_active on -static u8 land_sp_pos[48]; -#pragma pop - -/* 804DA3EC-804DA3F0 0000D4 0004+00 0/1 0/0 0/0 .bss rope_pt */ -#pragma push -#pragma force_active on -static u8 rope_pt[4]; -#pragma pop - -/* 804D981C-804D9BB8 002CBC 039C+00 1/0 0/0 0/0 .text daBd_Create__FP10fopAc_ac_c */ -static void daBd_Create(fopAc_ac_c* param_0) { - // NONMATCHING -} - -/* 804D9BB8-804D9C00 003058 0048+00 1/0 0/0 0/0 .text __dt__8cM3dGSphFv */ -// cM3dGSph::~cM3dGSph() { -extern "C" void __dt__8cM3dGSphFv() { - // NONMATCHING -} - -/* 804D9C00-804D9C48 0030A0 0048+00 1/0 0/0 0/0 .text __dt__8cM3dGAabFv */ -// cM3dGAab::~cM3dGAab() { -extern "C" void __dt__8cM3dGAabFv() { - // NONMATCHING -} - -/* 804D9C48-804D9CB8 0030E8 0070+00 3/2 0/0 0/0 .text __dt__12dBgS_ObjAcchFv */ -// dBgS_ObjAcch::~dBgS_ObjAcch() { -extern "C" void __dt__12dBgS_ObjAcchFv() { - // NONMATCHING -} - -/* 804D9CB8-804D9D00 003158 0048+00 2/1 0/0 0/0 .text __dt__10daBd_HIO_cFv */ -daBd_HIO_c::~daBd_HIO_c() { - // NONMATCHING -} - -/* ############################################################################################## */ -/* 804D9F3C-804D9F40 0000D8 0004+00 0/1 0/0 0/0 .rodata @5191 */ -#pragma push -#pragma force_active on -SECTION_RODATA static f32 const lit_5191 = 3350.0f; -COMPILER_STRIP_GATE(0x804D9F3C, &lit_5191); -#pragma pop - -/* 804D9F40-804D9F44 0000DC 0004+00 0/1 0/0 0/0 .rodata @5192 */ -#pragma push -#pragma force_active on -SECTION_RODATA static f32 const lit_5192 = 474.0f; -COMPILER_STRIP_GATE(0x804D9F40, &lit_5192); -#pragma pop - -/* 804D9F44-804D9F48 0000E0 0004+00 0/1 0/0 0/0 .rodata @5193 */ -#pragma push -#pragma force_active on -SECTION_RODATA static f32 const lit_5193 = 1760.0f; -COMPILER_STRIP_GATE(0x804D9F44, &lit_5193); -#pragma pop - -/* 804D9F48-804D9F4C 0000E4 0004+00 0/1 0/0 0/0 .rodata @5194 */ -#pragma push -#pragma force_active on -SECTION_RODATA static f32 const lit_5194 = 553.0f; -COMPILER_STRIP_GATE(0x804D9F48, &lit_5194); -#pragma pop - -/* 804D9F4C-804D9F50 0000E8 0004+00 0/1 0/0 0/0 .rodata @5195 */ -#pragma push -#pragma force_active on -SECTION_RODATA static f32 const lit_5195 = 395.0f; -COMPILER_STRIP_GATE(0x804D9F4C, &lit_5195); -#pragma pop - -/* 804D9F50-804D9F54 0000EC 0004+00 0/1 0/0 0/0 .rodata @5196 */ -#pragma push -#pragma force_active on -SECTION_RODATA static f32 const lit_5196 = -599.0f; -COMPILER_STRIP_GATE(0x804D9F50, &lit_5196); -#pragma pop - -/* 804D9F54-804D9F58 0000F0 0004+00 0/1 0/0 0/0 .rodata @5197 */ -#pragma push -#pragma force_active on -SECTION_RODATA static f32 const lit_5197 = -194.0f; -COMPILER_STRIP_GATE(0x804D9F54, &lit_5197); -#pragma pop - -/* 804D9F58-804D9F5C 0000F4 0004+00 0/1 0/0 0/0 .rodata @5198 */ -#pragma push -#pragma force_active on -SECTION_RODATA static f32 const lit_5198 = 594.0f; -COMPILER_STRIP_GATE(0x804D9F58, &lit_5198); -#pragma pop - -/* 804D9F5C-804D9F60 0000F8 0004+00 0/1 0/0 0/0 .rodata @5199 */ -#pragma push -#pragma force_active on -SECTION_RODATA static f32 const lit_5199 = 4832.0f; -COMPILER_STRIP_GATE(0x804D9F5C, &lit_5199); -#pragma pop - -/* 804D9F60-804D9F64 0000FC 0004+00 0/1 0/0 0/0 .rodata @5200 */ -#pragma push -#pragma force_active on -SECTION_RODATA static f32 const lit_5200 = -3349.0f; -COMPILER_STRIP_GATE(0x804D9F60, &lit_5200); -#pragma pop - -/* 804D9F64-804D9F68 000100 0004+00 0/1 0/0 0/0 .rodata @5201 */ -#pragma push -#pragma force_active on -SECTION_RODATA static f32 const lit_5201 = 865.0f; -COMPILER_STRIP_GATE(0x804D9F64, &lit_5201); -#pragma pop - -/* 804D9F68-804D9F6C 000104 0004+00 0/1 0/0 0/0 .rodata @5202 */ -#pragma push -#pragma force_active on -SECTION_RODATA static f32 const lit_5202 = 2773.0f; -COMPILER_STRIP_GATE(0x804D9F68, &lit_5202); -#pragma pop - -/* 804D9D00-804D9E40 0031A0 0140+00 0/0 1/0 0/0 .text __sinit_d_a_bd_cpp */ -void __sinit_d_a_bd_cpp() { - // NONMATCHING -} - -#pragma push -#pragma force_active on -REGISTER_CTORS(0x804D9D00, __sinit_d_a_bd_cpp); -#pragma pop - -/* 804D9E40-804D9E48 0032E0 0008+00 1/0 0/0 0/0 .text @36@__dt__12dBgS_ObjAcchFv */ -static void func_804D9E40() { - // NONMATCHING -} - -/* 804D9E48-804D9E50 0032E8 0008+00 1/0 0/0 0/0 .text @20@__dt__12dBgS_ObjAcchFv */ -static void func_804D9E48() { - // NONMATCHING -} - -/* ############################################################################################## */ -/* 804DA3F0-804DA3F4 0000D8 0004+00 0/0 0/0 0/0 .bss - * sInstance__40JASGlobalInstance<19JASDefaultBankTable> */ -#pragma push -#pragma force_active on -static u8 data_804DA3F0[4]; -#pragma pop - -/* 804DA3F4-804DA3F8 0000DC 0004+00 0/0 0/0 0/0 .bss - * sInstance__35JASGlobalInstance<14JASAudioThread> */ -#pragma push -#pragma force_active on -static u8 data_804DA3F4[4]; -#pragma pop - -/* 804DA3F8-804DA3FC 0000E0 0004+00 0/0 0/0 0/0 .bss sInstance__27JASGlobalInstance<7Z2SeMgr> */ -#pragma push -#pragma force_active on -static u8 data_804DA3F8[4]; -#pragma pop - -/* 804DA3FC-804DA400 0000E4 0004+00 0/0 0/0 0/0 .bss sInstance__28JASGlobalInstance<8Z2SeqMgr> */ -#pragma push -#pragma force_active on -static u8 data_804DA3FC[4]; -#pragma pop - -/* 804DA400-804DA404 0000E8 0004+00 0/0 0/0 0/0 .bss sInstance__31JASGlobalInstance<10Z2SceneMgr> - */ -#pragma push -#pragma force_active on -static u8 data_804DA400[4]; -#pragma pop - -/* 804DA404-804DA408 0000EC 0004+00 0/0 0/0 0/0 .bss sInstance__32JASGlobalInstance<11Z2StatusMgr> - */ -#pragma push -#pragma force_active on -static u8 data_804DA404[4]; -#pragma pop - -/* 804DA408-804DA40C 0000F0 0004+00 0/0 0/0 0/0 .bss sInstance__31JASGlobalInstance<10Z2DebugSys> - */ -#pragma push -#pragma force_active on -static u8 data_804DA408[4]; -#pragma pop - -/* 804DA40C-804DA410 0000F4 0004+00 0/0 0/0 0/0 .bss - * sInstance__36JASGlobalInstance<15JAISoundStarter> */ -#pragma push -#pragma force_active on -static u8 data_804DA40C[4]; -#pragma pop - -/* 804DA410-804DA414 0000F8 0004+00 0/0 0/0 0/0 .bss - * sInstance__35JASGlobalInstance<14Z2SoundStarter> */ -#pragma push -#pragma force_active on -static u8 data_804DA410[4]; -#pragma pop - -/* 804DA414-804DA418 0000FC 0004+00 0/0 0/0 0/0 .bss - * sInstance__33JASGlobalInstance<12Z2SpeechMgr2> */ -#pragma push -#pragma force_active on -static u8 data_804DA414[4]; -#pragma pop - -/* 804DA418-804DA41C 000100 0004+00 0/0 0/0 0/0 .bss sInstance__28JASGlobalInstance<8JAISeMgr> */ -#pragma push -#pragma force_active on -static u8 data_804DA418[4]; -#pragma pop - -/* 804DA41C-804DA420 000104 0004+00 0/0 0/0 0/0 .bss sInstance__29JASGlobalInstance<9JAISeqMgr> */ -#pragma push -#pragma force_active on -static u8 data_804DA41C[4]; -#pragma pop - -/* 804DA420-804DA424 000108 0004+00 0/0 0/0 0/0 .bss - * sInstance__33JASGlobalInstance<12JAIStreamMgr> */ -#pragma push -#pragma force_active on -static u8 data_804DA420[4]; -#pragma pop - -/* 804DA424-804DA428 00010C 0004+00 0/0 0/0 0/0 .bss sInstance__31JASGlobalInstance<10Z2SoundMgr> - */ -#pragma push -#pragma force_active on -static u8 data_804DA424[4]; -#pragma pop - -/* 804DA428-804DA42C 000110 0004+00 0/0 0/0 0/0 .bss - * sInstance__33JASGlobalInstance<12JAISoundInfo> */ -#pragma push -#pragma force_active on -static u8 data_804DA428[4]; -#pragma pop - -/* 804DA42C-804DA430 000114 0004+00 0/0 0/0 0/0 .bss - * sInstance__34JASGlobalInstance<13JAUSoundTable> */ -#pragma push -#pragma force_active on -static u8 data_804DA42C[4]; -#pragma pop - -/* 804DA430-804DA434 000118 0004+00 0/0 0/0 0/0 .bss - * sInstance__38JASGlobalInstance<17JAUSoundNameTable> */ -#pragma push -#pragma force_active on -static u8 data_804DA430[4]; -#pragma pop - -/* 804DA434-804DA438 00011C 0004+00 0/0 0/0 0/0 .bss - * sInstance__33JASGlobalInstance<12JAUSoundInfo> */ -#pragma push -#pragma force_active on -static u8 data_804DA434[4]; -#pragma pop - -/* 804DA438-804DA43C 000120 0004+00 0/0 0/0 0/0 .bss sInstance__32JASGlobalInstance<11Z2SoundInfo> - */ -#pragma push -#pragma force_active on -static u8 data_804DA438[4]; -#pragma pop - -/* 804DA43C-804DA440 000124 0004+00 0/0 0/0 0/0 .bss - * sInstance__34JASGlobalInstance<13Z2SoundObjMgr> */ -#pragma push -#pragma force_active on -static u8 data_804DA43C[4]; -#pragma pop - -/* 804DA440-804DA444 000128 0004+00 0/0 0/0 0/0 .bss sInstance__31JASGlobalInstance<10Z2Audience> - */ -#pragma push -#pragma force_active on -static u8 data_804DA440[4]; -#pragma pop - -/* 804DA444-804DA448 00012C 0004+00 0/0 0/0 0/0 .bss sInstance__32JASGlobalInstance<11Z2FxLineMgr> - */ -#pragma push -#pragma force_active on -static u8 data_804DA444[4]; -#pragma pop - -/* 804DA448-804DA44C 000130 0004+00 0/0 0/0 0/0 .bss sInstance__31JASGlobalInstance<10Z2EnvSeMgr> - */ -#pragma push -#pragma force_active on -static u8 data_804DA448[4]; -#pragma pop - -/* 804DA44C-804DA450 000134 0004+00 0/0 0/0 0/0 .bss sInstance__32JASGlobalInstance<11Z2SpeechMgr> - */ -#pragma push -#pragma force_active on -static u8 data_804DA44C[4]; -#pragma pop - -/* 804DA450-804DA454 000138 0004+00 0/0 0/0 0/0 .bss - * sInstance__34JASGlobalInstance<13Z2WolfHowlMgr> */ -#pragma push -#pragma force_active on -static u8 data_804DA450[4]; -#pragma pop - -/* 804D9F6C-804D9F6C 000108 0000+00 0/0 0/0 0/0 .rodata @stringBase0 */ +AUDIO_INSTANCES diff --git a/src/d/actor/d_a_e_hzelda.cpp b/src/d/actor/d_a_e_hzelda.cpp index 70d8058368d..9df6899acb4 100644 --- a/src/d/actor/d_a_e_hzelda.cpp +++ b/src/d/actor/d_a_e_hzelda.cpp @@ -1045,7 +1045,7 @@ static int daE_HZELDA_Execute(e_hzelda_class* i_this) { BOOL on_player_at_sph = FALSE; if (daPy_py_c::checkMasterSwordEquip()) { - if (daPy_getPlayerActorClass()->getCutType() != 0) { + if (daPy_getPlayerActorClass()->getCutType() != daPy_py_c::CUT_TYPE_NONE) { i_this->mSwordAtTimer++; if (i_this->mSwordAtTimer < 6) { on_player_at_sph = TRUE; diff --git a/src/d/actor/d_a_e_oc.cpp b/src/d/actor/d_a_e_oc.cpp index efde656b962..c2f9a39af09 100644 --- a/src/d/actor/d_a_e_oc.cpp +++ b/src/d/actor/d_a_e_oc.cpp @@ -354,7 +354,7 @@ int daE_OC_c::searchPlayerShakeHead() { int daE_OC_c::searchSound() { if (field_0x6b4 == 2 && mpBridge && mpBridge->getPlayerRide()) return 0; - if (daPy_getPlayerActorClass()->getCutType() != 0 && fopAcM_searchPlayerDistance(this) < mPlayerRange) { + if (daPy_getPlayerActorClass()->getCutType() != daPy_py_c::CUT_TYPE_NONE && fopAcM_searchPlayerDistance(this) < mPlayerRange) { field_0x67c = dComIfGp_getPlayer(0)->current.pos; setActionMode(8, 0); return 1; diff --git a/src/d/actor/d_a_e_sb.cpp b/src/d/actor/d_a_e_sb.cpp index 5f039af0264..c4f4cf7cdda 100644 --- a/src/d/actor/d_a_e_sb.cpp +++ b/src/d/actor/d_a_e_sb.cpp @@ -4,271 +4,1224 @@ */ #include "d/actor/d_a_e_sb.h" +#include "d/actor/d_a_e_bg.h" +#include "d/actor/d_a_player.h" +#include "d/d_bomb.h" #include "d/d_cc_d.h" -#include "dol2asm.h" +#include "d/d_com_inf_game.h" +#include "Z2AudioLib/Z2Instances.h" +/* 8078164C-807816D8 0000EC 008C+00 1/1 0/0 0/0 .text __ct__12daE_SB_HIO_cFv */ +daE_SB_HIO_c::daE_SB_HIO_c() { + field_0x04 = -1; + search_area = 1100.0f; + distance_home = 600.0f; + jump_xz_axis_speed = 40.0f; + jump_y_axis_speed = 35.0f; + atk_jump_xz_axis_speed = 75.0f; + atk_y_axis_speed = 40.0f; + magne_on_atk_y_axis_speed = 30.0f; + grav_reduct_rate = 0.83f; + other_anm_speed = 1.0f; + shield_atk_anm_speed = 1.0f; + death_anm_speed = 0.7f; + field_0x3c = 0x1000; + field_0x3e = 0x1000; + size = 1.4f; + atk_start_range = 1000.0f; +} +#if DEBUG +void daE_SB_HIO_c::genMessage(JORMContext* ctext) { + // "Shell Blade" + ctext->genLabel("シェルブレイド", 0x80000001, 0, NULL, 0xFFFF, 0xFFFF, 0x200, 24); + // "Search Area" + ctext->genSlider("サーチエリア", &search_area, 0.0f, 3000.0f, 0, NULL, 0xFFFF, 0xFFFF, 0x200, 24); + // "Distance home" + ctext->genSlider("お家に帰る距離", &distance_home, 0.0f, 1000.0f, 0, NULL, 0xFFFF, 0xFFFF, 0x200, 24); + // "Jump XZ axis speed" + ctext->genSlider("ジャンプXZ軸スピード", &jump_xz_axis_speed, 0.0f, 100.0f, 0, NULL, 0xFFFF, 0xFFFF, 0x200, 24); + // "Jump Y-axis speed" + ctext->genSlider("ジャンプY軸スピード", &jump_y_axis_speed, 0.0f, 100.0f, 0, NULL, 0xFFFF, 0xFFFF, 0x200, 24); + // "Attack jump XZ axis speed" + ctext->genSlider("攻撃ジャンプXZ軸スピード", &atk_jump_xz_axis_speed, 0.0f, 100.0f, 0, NULL, 0xFFFF, 0xFFFF, 0x200, 24); + // "Attack Y-axis speed" + ctext->genSlider("攻撃Y軸スピード", &atk_y_axis_speed, 0.0f, 100.0f, 0, NULL, 0xFFFF, 0xFFFF, 0x200, 24); + // "Magne On Attack Y-axis Speed" + ctext->genSlider("マグネOn攻撃Y軸スピード", &magne_on_atk_y_axis_speed, 0.0f, 100.0f, 0, NULL, 0xFFFF, 0xFFFF, 0x200, 24); + // "Gravity reduction rate" + ctext->genSlider("重力の減る比率", &grav_reduct_rate, 0.0f, 1.0f, 0, NULL, 0xFFFF, 0xFFFF, 0x200, 24); + // "Other animation speed" + ctext->genSlider("その他アニメーションスピード", &other_anm_speed, 0.0f, 10.0f, 0, NULL, 0xFFFF, 0xFFFF, 0x200, 24); + // "Shield attack animation speed" + ctext->genSlider("盾攻撃アニメーションスピード", &shield_atk_anm_speed, 0.0f, 10.0f, 0, NULL, 0xFFFF, 0xFFFF, 0x200, 24); + // "DEATH animation speed" + ctext->genSlider("DEATHアニメーションスピード", &death_anm_speed, 0.0f, 10.0f, 0, NULL, 0xFFFF, 0xFFFF, 0x200, 24); + // "Size" + ctext->genSlider("大きさ", &size, 0.0f, 10.0f, 0, NULL, 0xFFFF, 0xFFFF, 0x200, 24); + // "Attack start range" + ctext->genSlider("攻撃開始範囲", &atk_start_range, 0.0f, 3000.0f, 0, NULL, 0xFFFF, 0xFFFF, 0x200, 24); +} +#endif -// -// Forward References: -// +/* 807816D8-807817D0 000178 00F8+00 1/1 0/0 0/0 .text CreateHeap__8daE_SB_cFv */ +int daE_SB_c::CreateHeap() { + J3DModelData* modelData = (J3DModelData*) dComIfG_getObjectRes("E_SB", 0xF); + JUT_ASSERT(271, modelData != 0); + mpMorf = new mDoExt_McaMorfSO(modelData, NULL, NULL, + (J3DAnmTransform*)dComIfG_getObjectRes("E_SB", 0xC), + 2, 1.0f, 0, -1, + &mSound, 0x80000, 0x11000084); + if (mpMorf == NULL || mpMorf->getModel() == NULL) { + return 0; + } -extern "C" void __ct__12daE_SB_HIO_cFv(); -extern "C" void CreateHeap__8daE_SB_cFv(); -extern "C" static void useHeapInit__FP10fopAc_ac_c(); -extern "C" void initCcCylinder__8daE_SB_cFv(); -extern "C" void setCcCylinder__8daE_SB_cFv(); -extern "C" void ctrlJoint__8daE_SB_cFP8J3DJointP8J3DModel(); -extern "C" static void JointCallBack__FP8J3DJointi(); -extern "C" void Particle_Set__8daE_SB_cFUs(); -extern "C" void SetAnm__8daE_SB_cFiiff(); -extern "C" void MemberClear__8daE_SB_cFv(); -extern "C" static void other_bg_check__FP8daE_SB_cP10fopAc_ac_c(); -extern "C" static void s_obj_sub__FPvPv(); -extern "C" static void s_bomb_sub__FPvPv(); -extern "C" void Shield_Motion__8daE_SB_cFv(); -extern "C" void AttackStop__8daE_SB_cFv(); -extern "C" void AttackSetSP__8daE_SB_cFv(); -extern "C" void AttackAngle__8daE_SB_cFv(); -extern "C" void AttackSpeedMotion__8daE_SB_cFv(); -extern "C" void Attack_Motion__8daE_SB_cFv(); -extern "C" void Bomb_Death_Motion__8daE_SB_cFv(); -extern "C" void BombJumpSet__8daE_SB_cFv(); -extern "C" void GetHomeSet__8daE_SB_cFv(); -extern "C" void HomeJumpMotion__8daE_SB_cFv(); -extern "C" void Jump_Normal_Set__8daE_SB_cFv(); -extern "C" void Jump_Set__8daE_SB_cFv(); -extern "C" void JumpMiddleMotion__8daE_SB_cFv(); -extern "C" void Jump_Motion__8daE_SB_cFv(); -extern "C" void Death_Motion__8daE_SB_cFv(); -extern "C" void Hanekaeri__8daE_SB_cFv(); -extern "C" void Hit__8daE_SB_cFv(); -extern "C" void ActionCheck__8daE_SB_cFv(); -extern "C" void Search__8daE_SB_cFv(); -extern "C" void Wait_Motion__8daE_SB_cFv(); -extern "C" void Attack__8daE_SB_cFv(); -extern "C" void Shield__8daE_SB_cFv(); -extern "C" void Anm_Motion__8daE_SB_cFv(); -extern "C" void Search_Bomb__8daE_SB_cFv(); -extern "C" void ChanceMotion__8daE_SB_cFv(); -extern "C" void NoChanceMotion__8daE_SB_cFv(); -extern "C" void Obj_Damage__8daE_SB_cFv(); -extern "C" void HashiraVib__8daE_SB_cFv(); -extern "C" void Yazirushi__8daE_SB_cFv(); -extern "C" void setGroundAngle__8daE_SB_cFv(); -extern "C" void Execute__8daE_SB_cFv(); -extern "C" void Draw__8daE_SB_cFv(); -extern "C" void Delete__8daE_SB_cFv(); -extern "C" void setBaseMtx__8daE_SB_cFv(); -extern "C" static void daE_SB_Draw__FP8daE_SB_c(); -extern "C" static void daE_SB_Execute__FP8daE_SB_c(); -extern "C" static bool daE_SB_IsDelete__FP8daE_SB_c(); -extern "C" static void daE_SB_Delete__FP8daE_SB_c(); -extern "C" void Create__8daE_SB_cFv(); -extern "C" void __dt__8cM3dGCylFv(); -extern "C" void __dt__8cM3dGSphFv(); -extern "C" void __dt__8cM3dGAabFv(); -extern "C" void __dt__12dBgS_ObjAcchFv(); -extern "C" static void daE_SB_Create__FP10fopAc_ac_c(); -extern "C" void __dt__12daE_SB_HIO_cFv(); -extern "C" void __sinit_d_a_e_sb_cpp(); -extern "C" static void func_80784D44(); -extern "C" static void func_80784D4C(); -extern "C" extern char const* const d_a_e_sb__stringBase0; + return 1; +} -// -// External References: -// +/* 807817D0-807817F0 000270 0020+00 1/1 0/0 0/0 .text useHeapInit__FP10fopAc_ac_c */ +static int useHeapInit(fopAc_ac_c* i_this) { + return static_cast(i_this)->CreateHeap(); +} -extern "C" void mDoMtx_YrotM__FPA4_fs(); -extern "C" void mDoMtx_ZrotM__FPA4_fs(); -extern "C" void transS__14mDoMtx_stack_cFRC4cXyz(); -extern "C" void scaleM__14mDoMtx_stack_cFfff(); -extern "C" void ZXYrotM__14mDoMtx_stack_cFRC5csXyz(); -extern "C" void -__ct__16mDoExt_McaMorfSOFP12J3DModelDataP25mDoExt_McaMorfCallBack1_cP25mDoExt_McaMorfCallBack2_cP15J3DAnmTransformifiiP10Z2CreatureUlUl(); -extern "C" void setAnm__16mDoExt_McaMorfSOFP15J3DAnmTransformiffff(); -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 fopAc_IsActor__FPv(); -extern "C" void fopAcM_delete__FP10fopAc_ac_c(); -extern "C" void fopAcM_fastCreate__FsUlPC4cXyziPC5csXyzPC4cXyzScPFPv_iPv(); -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_posMoveF__FP10fopAc_ac_cPC4cXyz(); -extern "C" void fopAcM_searchActorDistanceXZ__FPC10fopAc_ac_cPC10fopAc_ac_c(); -extern "C" void fopAcM_createDisappear__FPC10fopAc_ac_cPC4cXyzUcUcUc(); -extern "C" void gndCheck__11fopAcM_gc_cFPC4cXyz(); -extern "C" void fpcEx_Search__FPFPvPv_PvPv(); -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 -dComIfGd_setShadow__FUlScP8J3DModelP4cXyzffffR13cBgS_PolyInfoP12dKy_tevstr_csfP9_GXTexObj(); -extern "C" void onSwitch__10dSv_info_cFii(); -extern "C" void isSwitch__10dSv_info_cCFii(); -extern "C" void getRes__14dRes_control_cFPCclP11dRes_info_ci(); -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 LineCross__4cBgSFP11cBgS_LinChk(); -extern "C" void GroundCross__4cBgSFP11cBgS_GndChk(); -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 __ct__11dBgS_GndChkFv(); -extern "C" void __dt__11dBgS_GndChkFv(); -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 Move__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 Set__8dCcD_CylFRC11dCcD_SrcCyl(); -extern "C" void cc_at_check__FP10fopAc_ac_cP11dCcU_AtInfo(); -extern "C" void checkMasterSwordEquip__9daPy_py_cFv(); -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 SetPos__11cBgS_GndChkFPC4cXyz(); -extern "C" void SetC__8cM3dGCylFRC4cXyz(); -extern "C" void cLib_addCalc2__FPffff(); -extern "C" void cLib_chaseAngleS__FPsss(); -extern "C" void cLib_targetAngleY__FPC3VecPC3Vec(); -extern "C" void __ct__15Z2CreatureEnemyFv(); -extern "C" void init__15Z2CreatureEnemyFP3VecP3VecUcUc(); -extern "C" void setLinkSearch__15Z2CreatureEnemyFb(); -extern "C" void setEnemyName__15Z2CreatureEnemyFPCc(); -extern "C" void* __nw__FUl(); -extern "C" void __dl__FPv(); -extern "C" void checkPass__12J3DFrameCtrlFf(); -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__8dCcD_Sph[36]; -extern "C" extern void* __vt__8dCcD_Cyl[36]; -extern "C" extern void* __vt__9dCcD_Stts[11]; -extern "C" extern void* __vt__12cCcD_SphAttr[25]; -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" extern u8 g_dComIfG_gameInfo[122384]; -extern "C" u8 mSimpleTexObj__21dDlst_shadowControl_c[32]; -extern "C" u8 mCurrentMtx__6J3DSys[48]; -extern "C" u8 sincosTable___5JMath[65536]; -extern "C" f32 mGroundY__11fopAcM_gc_c; -extern "C" void __register_global_object(); +/* 807817F0-80781850 000290 0060+00 1/1 0/0 0/0 .text initCcCylinder__8daE_SB_cFv */ +void daE_SB_c::initCcCylinder() { + const static dCcD_SrcCyl ccCylSrc = { + { + {0x0, {{AT_TYPE_CSTATUE_SWING, 0x2, 0xd}, {0x6032, 0x11}, 0x75}}, // mObj + {dCcD_SE_STONE, 0x0, 0x0, 0x0, 0x1}, // mGObjAt + {dCcD_SE_NONE, 0x0, 0x0, 0x0, 0x1}, // mGObjTg + {0x0}, // mGObjCo + }, // mObjInf + { + {0.0f, 0.0f, 0.0f}, // mCenter + 80.0f, // mRadius + 130.0f // mHeight + } // mCyl + }; -// -// Declarations: -// + mStts.Init(0xFE, 0xFF, this); + mCyl.Set(ccCylSrc); + mCyl.SetStts(&mStts); + mCyl.SetC(current.pos); +} -/* ############################################################################################## */ -/* 80784D68-80784D6C 000000 0004+00 18/18 0/0 0/0 .rodata @3658 */ -SECTION_RODATA static f32 const lit_3658 = 1100.0f; -COMPILER_STRIP_GATE(0x80784D68, &lit_3658); +/* 80781850-80781898 0002F0 0048+00 1/1 0/0 0/0 .text setCcCylinder__8daE_SB_cFv */ +void daE_SB_c::setCcCylinder() { + mCyl.SetC(current.pos); + dComIfG_Ccsp()->Set(&mCyl); +} -/* 80784D6C-80784D70 000004 0004+00 0/1 0/0 0/0 .rodata @3659 */ -#pragma push -#pragma force_active on -SECTION_RODATA static f32 const lit_3659 = 600.0f; -COMPILER_STRIP_GATE(0x80784D6C, &lit_3659); -#pragma pop +/* 80781898-80781990 000338 00F8+00 1/1 0/0 0/0 .text ctrlJoint__8daE_SB_cFP8J3DJointP8J3DModel */ +int daE_SB_c::ctrlJoint(J3DJoint* i_joint, J3DModel* param_1) { + int jnt_no = i_joint->getJntNo(); + MtxP anmMtx = param_1->getAnmMtx(jnt_no); + mDoMtx_stack_c::copy(anmMtx); + switch (jnt_no) { + case 3: + case 1: { + break; + } -/* 80784D70-80784D74 000008 0004+00 0/1 0/0 0/0 .rodata @3660 */ -#pragma push -#pragma force_active on -SECTION_RODATA static f32 const lit_3660 = 40.0f; -COMPILER_STRIP_GATE(0x80784D70, &lit_3660); -#pragma pop + case 2: { + mDoMtx_stack_c::ZrotM(field_0x5d8.x); + mDoMtx_stack_c::YrotM(field_0x5d8.y); + break; + } -/* 80784D74-80784D78 00000C 0004+00 0/1 0/0 0/0 .rodata @3661 */ -#pragma push -#pragma force_active on -SECTION_RODATA static f32 const lit_3661 = 35.0f; -COMPILER_STRIP_GATE(0x80784D74, &lit_3661); -#pragma pop + case 4: { + mDoMtx_stack_c::ZrotM(-field_0x5de.x); + mDoMtx_stack_c::YrotM(field_0x5de.y); + break; + } + } -/* 80784D78-80784D7C 000010 0004+00 0/1 0/0 0/0 .rodata @3662 */ -#pragma push -#pragma force_active on -SECTION_RODATA static f32 const lit_3662 = 75.0f; -COMPILER_STRIP_GATE(0x80784D78, &lit_3662); -#pragma pop + param_1->setAnmMtx(jnt_no, mDoMtx_stack_c::get()); + mDoMtx_copy(mDoMtx_stack_c::get(), J3DSys::mCurrentMtx); + return 1; +} -/* 80784D7C-80784D80 000014 0004+00 0/5 0/0 0/0 .rodata @3663 */ -#pragma push -#pragma force_active on -SECTION_RODATA static f32 const lit_3663 = 30.0f; -COMPILER_STRIP_GATE(0x80784D7C, &lit_3663); -#pragma pop +/* 80781990-807819DC 000430 004C+00 1/1 0/0 0/0 .text JointCallBack__FP8J3DJointi */ +static int JointCallBack(J3DJoint* i_joint, int param_1) { + if (param_1 == 0) { + daE_SB_c* sb_ptr = (daE_SB_c*) j3dSys.getModel()->getUserArea(); + if (sb_ptr) { + sb_ptr->ctrlJoint(i_joint, j3dSys.getModel()); + } + } -/* 80784D80-80784D84 000018 0004+00 0/1 0/0 0/0 .rodata @3664 */ -#pragma push -#pragma force_active on -SECTION_RODATA static f32 const lit_3664 = 83.0f / 100.0f; -COMPILER_STRIP_GATE(0x80784D80, &lit_3664); -#pragma pop + return 1; +} -/* 80784D84-80784D88 00001C 0004+00 3/7 0/0 0/0 .rodata @3665 */ -SECTION_RODATA static f32 const lit_3665 = 1.0f; -COMPILER_STRIP_GATE(0x80784D84, &lit_3665); +/* 807819DC-80781A4C 00047C 0070+00 6/6 0/0 0/0 .text Particle_Set__8daE_SB_cFUs */ +void daE_SB_c::Particle_Set(u16 param_0) { + dComIfGp_particle_set(param_0, ¤t.pos, &tevStr, &shape_angle, NULL); +} -/* 80784D88-80784D8C 000020 0004+00 0/2 0/0 0/0 .rodata @3666 */ -#pragma push -#pragma force_active on -SECTION_RODATA static f32 const lit_3666 = 7.0f / 10.0f; -COMPILER_STRIP_GATE(0x80784D88, &lit_3666); -#pragma pop +/* 80781A4C-80781AF8 0004EC 00AC+00 8/8 0/0 0/0 .text SetAnm__8daE_SB_cFiiff */ +void daE_SB_c::SetAnm(int param_0, int param_1, f32 param_2, f32 param_3) { + mpMorf->setAnm((J3DAnmTransform*) dComIfG_getObjectRes("E_SB", param_0), param_1, param_2, param_3, 0.0f, -1.0f); + field_0x608 = param_0; +} -/* 80784D8C-80784D90 000024 0004+00 0/1 0/0 0/0 .rodata @3667 */ -#pragma push -#pragma force_active on -SECTION_RODATA static f32 const lit_3667 = 7.0f / 5.0f; -COMPILER_STRIP_GATE(0x80784D8C, &lit_3667); -#pragma pop +/* 80781AF8-80781B54 000598 005C+00 8/8 0/0 0/0 .text MemberClear__8daE_SB_cFv */ +void daE_SB_c::MemberClear() { + gravity = -9.0f; + speedF = 0.0f; + speed.y = 0.0f; + field_0x5b0 = 1; + field_0x5ac = 0; + field_0x5b4 = 0; + field_0x5b8 = 0; + field_0x5bc = 0; + field_0x5c0 = 0; + field_0x5c4 = 0; + field_0x5c8 = 0; + mCyl.OnTgShield(); + mCyl.SetTgHitMark(CcG_Tg_UNK_MARK_2); +} -/* 80784D90-80784D94 000028 0004+00 0/3 0/0 0/0 .rodata @3668 */ -#pragma push -#pragma force_active on -SECTION_RODATA static f32 const lit_3668 = 1000.0f; -COMPILER_STRIP_GATE(0x80784D90, &lit_3668); -#pragma pop +/* 80781B54-80781C2C 0005F4 00D8+00 2/2 0/0 0/0 .text other_bg_check__FP8daE_SB_cP10fopAc_ac_c */ +static BOOL other_bg_check(daE_SB_c* a_this, fopAc_ac_c* i_other) { + fopAc_ac_c* i_this = (fopAc_ac_c*)a_this; + dBgS_LinChk line_chk; + cXyz sp28; + cXyz start; + cXyz end; -/* 80784E6C-80784E88 -00001 001C+00 1/1 0/0 0/0 .data @4468 */ -SECTION_DATA static void* lit_4468[7] = { - (void*)(((char*)Anm_Motion__8daE_SB_cFv) + 0x4C), - (void*)(((char*)Anm_Motion__8daE_SB_cFv) + 0x44), - (void*)(((char*)Anm_Motion__8daE_SB_cFv) + 0x64), - (void*)(((char*)Anm_Motion__8daE_SB_cFv) + 0xE4), - (void*)(((char*)Anm_Motion__8daE_SB_cFv) + 0x54), - (void*)(((char*)Anm_Motion__8daE_SB_cFv) + 0x5C), - (void*)(((char*)Anm_Motion__8daE_SB_cFv) + 0xEC), -}; + end = i_other->current.pos; + end.y += 100.0f; + + start = i_this->current.pos; + start.y += 100.0f; + + line_chk.Set(&start, &end, i_this); + + if (dComIfG_Bgsp().LineCross(&line_chk)) { + return TRUE; + } + + return FALSE; +} + +/* 80781C2C-80781D34 0006CC 0108+00 2/2 0/0 0/0 .text s_obj_sub__FPvPv */ +static void* s_obj_sub(void* arg0, void* arg1) { + if (fopAcM_IsActor(arg0) && dBomb_c::checkBombActor((fopAc_ac_c*) arg0)) { + if (!fopAcM_checkCarryNow((fopAc_ac_c*) arg0) && !((dBomb_c*)arg0)->checkStateExplode()) { + if (arg1 != NULL) { + ((daE_SB_c*) arg1)->field_0x5f0 = fopAcM_searchActorDistanceXZ((fopAc_ac_c*) arg0, (fopAc_ac_c*) arg1); + ((daE_SB_c*) arg1)->field_0x5ec = &((fopAc_ac_c*) arg0)->current.pos; + } + + return arg0; + } + } else if (fopAcM_GetName(arg0) == PROC_E_BG) { + // bomb fish: + if (arg0 != NULL && ((daE_BG_c*) arg0)->isBomb()) { + if (arg1 != NULL) { + ((daE_SB_c*) arg1)->field_0x5f0 = fopAcM_searchActorDistanceXZ((fopAc_ac_c*) arg0, (fopAc_ac_c*) arg1); + ((daE_SB_c*) arg1)->field_0x5ec = &((fopAc_ac_c*) arg0)->current.pos; + } + + return arg0; + } + } else if (fopAcM_GetName(arg0) == PROC_NBOMB) { + // generic bomb: + if (arg1 != NULL) { + ((daE_SB_c*) arg1)->field_0x5f0 = fopAcM_searchActorDistanceXZ((fopAc_ac_c*) arg0, (fopAc_ac_c*) arg1); + ((daE_SB_c*) arg1)->field_0x5ec = &((fopAc_ac_c*) arg0)->current.pos; + } + + return arg0; + } + + return NULL; +} + +/* 80781D34-80781DD4 0007D4 00A0+00 1/1 0/0 0/0 .text s_bomb_sub__FPvPv */ +static void* s_bomb_sub(void* arg0, void* arg1) { + if (fopAcM_GetName(arg0) == PROC_E_BG) { + // bomb fish: + if (arg0 != NULL && ((daE_BG_c*) arg0)->isBomb()) { + if (arg1 != NULL) { + ((daE_SB_c*) arg1)->field_0x5f0 = fopAcM_searchActorDistanceXZ((fopAc_ac_c*) arg0, (fopAc_ac_c*) arg1); + ((daE_SB_c*) arg1)->field_0x5ec = &((fopAc_ac_c*) arg0)->current.pos; + } + + return arg0; + } + } else if (fopAcM_GetName(arg0) == PROC_NBOMB) { + // generic bomb: + if (arg1 != NULL) { + ((daE_SB_c*) arg1)->field_0x5f0 = fopAcM_searchActorDistanceXZ((fopAc_ac_c*) arg0, (fopAc_ac_c*) arg1); + ((daE_SB_c*) arg1)->field_0x5ec = &((fopAc_ac_c*) arg0)->current.pos; + } + + return arg0; + } + + return NULL; +} + +UNK_REL_BSS; + +static u8 l_HIOInit; + +/* 80784F84-80784FC4 000054 0040+00 14/16 0/0 0/0 .bss l_HIO */ +static daE_SB_HIO_c l_HIO; + +namespace { + /* 80784FC4-80784FC8 000094 0004+00 2/2 0/0 0/0 .bss s_Bomb__22@unnamed@d_a_e_sb_cpp@ */ + static fopAc_ac_c* s_Bomb; + /* 80784FC8-80784FCC 000098 0002+02 3/5 0/0 0/0 .bss s_TargetAngle__22@unnamed@d_a_e_sb_cpp@ */ + static s16 s_TargetAngle; + /* 80784FCC-80784FD0 00009C 0004+00 5/7 0/0 0/0 .bss s_LinkPos__22@unnamed@d_a_e_sb_cpp@ */ + static cXyz* s_LinkPos; +} + +/* 80781DD4-80781F30 000874 015C+00 1/1 0/0 0/0 .text Shield_Motion__8daE_SB_cFv */ +void daE_SB_c::Shield_Motion() { + mpMorf->setAnm((J3DAnmTransform*) dComIfG_getObjectRes("E_SB", 0xB), 0, 5.0f, l_HIO.shield_atk_anm_speed, 0.0f, -1.0f); + field_0x602 = 1; + current.angle.y = cLib_targetAngleY(¤t.pos, s_LinkPos); + speedF = -5.0f; + field_0x5b0 = 5; + field_0x5b8 = 0; + mCyl.OffAtSetBit(); + dComIfGp_particle_set(0x849E, ¤t.pos, &tevStr, &shape_angle, NULL); + dComIfGp_particle_set(0x8478, ¤t.pos, &tevStr, &shape_angle, NULL); +} + +/* 80781F30-80781F80 0009D0 0050+00 1/1 0/0 0/0 .text AttackStop__8daE_SB_cFv */ +void daE_SB_c::AttackStop() { + s_Bomb = (fopAc_ac_c*) fpcM_Search(s_obj_sub, this); + if (s_Bomb == NULL) { + MemberClear(); + } +} + +/* 80781F80-80782180 000A20 0200+00 1/1 0/0 0/0 .text AttackSetSP__8daE_SB_cFv */ +void daE_SB_c::AttackSetSP() { + daPy_py_c* player = daPy_getPlayerActorClass(); + dBgS_LinChk line_chk; + cXyz pi_start(0.0f, 200.0f, 100.0f); + cXyz pi_end(0.0f, -200.0f, 100.0f); + mDoMtx_stack_c::transS(current.pos); + mDoMtx_stack_c::YrotM(shape_angle.y); + mDoMtx_stack_c::multVec(&pi_start, &pi_start); + mDoMtx_stack_c::multVec(&pi_end, &pi_end); + line_chk.Set(&pi_start, &pi_end, NULL); + if (dComIfG_Bgsp().LineCross(&line_chk)) { + cXyz cross = line_chk.GetCross(); + if (cross.y - current.pos.y > 0.0f) { + if (field_0x5c0 != 2) { + if (!player->checkEquipHeavyBoots()) { + speed.y = (0.8f * l_HIO.atk_y_axis_speed); + } else { + speed.y = (0.8f * l_HIO.magne_on_atk_y_axis_speed); + } + } else { + speed.y = (0.5f * l_HIO.atk_y_axis_speed); + } + } else if (field_0x5c0 != 2) { + if (!player->checkEquipHeavyBoots()) { + speed.y = (0.7f * l_HIO.atk_y_axis_speed); + } else { + speed.y = (0.7f * l_HIO.magne_on_atk_y_axis_speed); + } + } else { + speed.y = (0.5f * l_HIO.atk_y_axis_speed); + } + } + + speedF = l_HIO.atk_jump_xz_axis_speed; +} + +/* 80782180-80782264 000C20 00E4+00 1/1 0/0 0/0 .text AttackAngle__8daE_SB_cFv */ +void daE_SB_c::AttackAngle() { + s16 var_r29 = 0x300; + s16 var_r30 = (field_0x5c0 == 2) ? cLib_targetAngleY(¤t.pos, field_0x5ec) + : cLib_targetAngleY(¤t.pos, s_LinkPos); + field_0x610 += (0x13a0); + shape_angle.x = (1792.0f * cM_ssin(field_0x610)); + if (shape_angle.x < 0) { + var_r29 = 0; + } + + cLib_chaseAngleS(&field_0x612, var_r29, 0x100); + cLib_chaseAngleS(&shape_angle.y, var_r30, field_0x612); + cLib_chaseAngleS(¤t.angle.y, var_r30, field_0x612); +} + +/* 80782264-807822B8 000D04 0054+00 1/1 0/0 0/0 .text AttackSpeedMotion__8daE_SB_cFv */ +void daE_SB_c::AttackSpeedMotion() { + cLib_addCalc2(&speedF, 5.0f, 0.2f, 30.0f); + gravity = -1.0f; +} + +/* 807822B8-80782650 000D58 0398+00 1/1 0/0 0/0 .text Attack_Motion__8daE_SB_cFv */ +void daE_SB_c::Attack_Motion() { + switch (field_0x5ac) { + case 0: { + SetAnm(4, 0, 5.0f, 1.0f); + field_0x5ac = 1; + mSound.startCreatureSound(Z2SE_EN_SB_ATTACK01, 0, -1); + Particle_Set(0x8478); + break; + } + + case 1: { + if (mpMorf->getFrame() < 53.0f && field_0x5c0 == 2) { + AttackStop(); + } + + if (mpMorf->getFrame() > 53.0f) { + mCyl.OnTgShield(); + mCyl.SetTgHitMark(CcG_Tg_UNK_MARK_2); + mCyl.OnAtSetBit(); + gravity = -9.0f; + field_0x5ac = 2; + } + + AttackAngle(); + break; + } + + case 2: { + mSound.startCreatureSound(Z2SE_EN_SB_JUMP, 0, -1); + AttackSetSP(); + field_0x5ac = 3; + mCyl.SetTgHitMark(CcG_Tg_UNK_MARK_2); + mCyl.OnTgShield(); + break; + } + + case 3: { + if (64.0f == mpMorf->getFrame()) { + mSound.startCreatureSound(Z2SE_EN_SB_ATTACK02, 0, -1); + } + + cLib_chaseAngleS(&shape_angle.x, 0, 0x100); + AttackSpeedMotion(); + fopAc_ac_c* actor_p = (fopAc_ac_c*) fpcM_Search(s_bomb_sub, this); + if (field_0x5f0 < 200.0f && actor_p != NULL) { + fopAcM_delete(actor_p); + if (field_0x61a != 0xFF && !dComIfGs_isSwitch(field_0x61a, fopAcM_GetRoomNo(this))) { + dComIfGs_onSwitch(field_0x61a, fopAcM_GetRoomNo(this)); + } + + field_0x603 = 1; + } + + if (mAcch.ChkGroundHit() && mpMorf->isStop()) { + mSound.startCreatureSound(Z2SE_EN_SB_LAND, 0, -1); + Particle_Set(0x8479); + speedF = 0.0f; + field_0x5ac = 4; + field_0x5c8 = 10; + field_0x5d0 = 1; + mCyl.OffAtSetBit(); + if (field_0x603 == 1) { + MemberClear(); + field_0x5b0 = 3; + field_0x5c8 = 40; + SetAnm(12, 2, 5.0f, 2.0f); + mSound.startCreatureSound(Z2SE_EN_SB_WAIT, 0, -1); + field_0x5ac = 0; + } + } + + break; + } + + case 4: { + if (field_0x5c8 == 0) { + MemberClear(); + } + + break; + } + } + + if (field_0x5ac != 3) { + ActionCheck(); + Obj_Damage(); + } +} + +/* 80782650-80782714 0010F0 00C4+00 1/1 0/0 0/0 .text Bomb_Death_Motion__8daE_SB_cFv */ +void daE_SB_c::Bomb_Death_Motion() { + if (field_0x5c8 == 0) { + dBomb_c::createNormalBombExplode(¤t.pos); + mCyl.OffAtSetBit(); + mCyl.OnTgNoHitMark(); + SetAnm(6, 0, 5.0f, l_HIO.other_anm_speed); + Particle_Set(0x8475); + Particle_Set(0x8476); + field_0x5b0 = 2; + } +} + +/* 80782714-8078273C 0011B4 0028+00 1/1 0/0 0/0 .text BombJumpSet__8daE_SB_cFv */ +void daE_SB_c::BombJumpSet() { + speed.y = 0.5f * l_HIO.jump_y_axis_speed; + speedF = l_HIO.jump_xz_axis_speed; +} + +/* 8078273C-8078294C 0011DC 0210+00 1/1 0/0 0/0 .text GetHomeSet__8daE_SB_cFv */ +void daE_SB_c::GetHomeSet() { + if (field_0x5f4.absXZ(current.pos) < 300.0f) { + speedF = 0.0f; + speed.y = 0.5f * l_HIO.jump_y_axis_speed; + field_0x604 = 1; + if (shape_angle.y == field_0x600) { + field_0x604 = 0; + MemberClear(); + } + } else { + s16 var_r30 = cLib_targetAngleY(¤t.pos, &field_0x5f4); + if (mAcch.ChkWallHit()) { + var_r30 += 0x1000; + } + + cLib_chaseAngleS(&shape_angle.y, var_r30, 0x1000); + cLib_chaseAngleS(¤t.angle.y, var_r30, 0x1000); + speed.y = 0.5f * l_HIO.jump_y_axis_speed; + speedF = l_HIO.jump_xz_axis_speed; + } +} + +/* 8078294C-807829E8 0013EC 009C+00 1/1 0/0 0/0 .text HomeJumpMotion__8daE_SB_cFv */ +void daE_SB_c::HomeJumpMotion() { + if (field_0x604 == 1) { + speedF = 0.0f; + cLib_chaseAngleS(&shape_angle.y, field_0x600, 0x200); + cLib_chaseAngleS(¤t.angle.y, field_0x600, 0x200); + return; + } + + s16 temp_r3 = cLib_targetAngleY((Vec *) ¤t.pos, (Vec *) &field_0x5f4); + cLib_chaseAngleS(&shape_angle.y, temp_r3, 0x200); + cLib_chaseAngleS(¤t.angle.y, temp_r3, 0x200); +} + +/* 807829E8-80782B7C 001488 0194+00 1/1 0/0 0/0 .text Jump_Normal_Set__8daE_SB_cFv */ +void daE_SB_c::Jump_Normal_Set() { + f32 my_speed = l_HIO.jump_xz_axis_speed; + cLib_chaseAngleS(&shape_angle.y, s_TargetAngle, 0x1000); + cLib_chaseAngleS(¤t.angle.y, s_TargetAngle, 0x1000); + dBgS_LinChk line_chk; + cXyz pi_start(0.0f, 200.0f, 100.0f); + cXyz pi_end(0.0f, -200.0f, 100.0f); + mDoMtx_stack_c::transS(current.pos); + mDoMtx_stack_c::YrotM(shape_angle.y); + mDoMtx_stack_c::multVec(&pi_start, &pi_start); + mDoMtx_stack_c::multVec(&pi_end, &pi_end); + line_chk.Set(&pi_start, &pi_end, NULL); + if (dComIfG_Bgsp().LineCross(&line_chk)) { + cXyz cross = line_chk.GetCross(); + if (cross.y - current.pos.y > 0.0f) { + speed.y = 0.6f * l_HIO.jump_y_axis_speed; + } else { + speed.y = 0.5f * l_HIO.jump_y_axis_speed; + } + } + + speedF = my_speed; +} + +/* 80782B7C-80782BD4 00161C 0058+00 1/1 0/0 0/0 .text Jump_Set__8daE_SB_cFv */ +void daE_SB_c::Jump_Set() { + switch (field_0x5c0) { + case 0: + Jump_Normal_Set(); + return; + case 1: + GetHomeSet(); + return; + case 2: + BombJumpSet(); + return; + } +} + +/* 80782BD4-80782CC8 001674 00F4+00 1/1 0/0 0/0 .text JumpMiddleMotion__8daE_SB_cFv */ +void daE_SB_c::JumpMiddleMotion() { + cLib_addCalc2(&speedF, 5.0f, 0.2f, 30.0f); + gravity = -1.0f; + switch (field_0x5c0) { + case 0: + cLib_chaseAngleS(&shape_angle.y, s_TargetAngle, 0x400); + cLib_chaseAngleS(¤t.angle.y, s_TargetAngle, 0x400); + return; + case 1: + HomeJumpMotion(); + return; + case 2: + cLib_chaseAngleS(&shape_angle.y, cLib_targetAngleY((Vec *) ¤t.pos, field_0x5ec), 0x400); + cLib_chaseAngleS(¤t.angle.y, cLib_targetAngleY((Vec *) ¤t.pos, field_0x5ec), 0x400); + return; + } +} + +/* 80782CC8-80782E90 001768 01C8+00 1/1 0/0 0/0 .text Jump_Motion__8daE_SB_cFv */ +void daE_SB_c::Jump_Motion() { + switch (field_0x5bc) { + case 0: { + mSound.startCreatureSound(Z2SE_EN_SB_JUMP, 0, -1); + ActionCheck(); + SetAnm(8, 0, 5.0f, l_HIO.other_anm_speed); + field_0x5bc = 1; + Jump_Set(); + Obj_Damage(); + return; + } + + case 1: { + SetAnm(9, 0, 5.0f, l_HIO.other_anm_speed); + JumpMiddleMotion(); + if (mAcch.ChkGroundHit()) { + if (speed.y <= 0.0f) { + speed.y = 0.0f; + speedF = 0.0f; + gravity = -9.0f; + SetAnm(0xA, 0, 5.0f, l_HIO.other_anm_speed); + mSound.startCreatureSound(Z2SE_EN_SB_LAND, 0, -1); + Particle_Set(0x8479); + field_0x5bc = 2; + return; + } + } + + break; + } + + case 2: { + ActionCheck(); + if (mpMorf->isStop()) { + MemberClear(); + } + + Obj_Damage(); + break; + } + } +} + +/* 80782E90-80782ED4 001930 0044+00 1/1 0/0 0/0 .text Death_Motion__8daE_SB_cFv */ +void daE_SB_c::Death_Motion() { + fopAcM_createDisappear(this, ¤t.pos, 10, 0, 15); + fopAcM_delete(this); +} + +/* 80782ED4-80782EF4 001974 0020+00 1/1 0/0 0/0 .text Hanekaeri__8daE_SB_cFv */ +void daE_SB_c::Hanekaeri() { + // Japanese for "Bounce" + mCyl.OnTgShield(); + mCyl.SetTgHitMark(CcG_Tg_UNK_MARK_2); + field_0x5d0 = 1; +} + +/* 80782EF4-80782F10 001994 001C+00 1/1 0/0 0/0 .text Hit__8daE_SB_cFv */ +void daE_SB_c::Hit() { + mCyl.OffTgShield(); + mCyl.SetTgHitMark(CcG_Tg_UNK_MARK_0); + field_0x5d0 = 0; +} + +/* 80782F10-80783010 0019B0 0100+00 5/5 0/0 0/0 .text ActionCheck__8daE_SB_cFv */ +void daE_SB_c::ActionCheck() { + if (field_0x5b0 == 0 || field_0x602 == 1) { + u8 temp_r27 = daPy_getPlayerActorClass()->getCutCount(); + u8 temp_r29 = daPy_getPlayerActorClass()->getCutType(); + daPy_py_c* player = daPy_getPlayerActorClass(); + cXyz& unused_pos = fopAcM_GetPosition(player); + s16 tgt_ang = cLib_targetAngleY(¤t.pos, s_LinkPos); + if ( (s16) (shape_angle.y - tgt_ang) > -0x3000 && (s16) (shape_angle.y - tgt_ang) < 0x3000) { + if (temp_r27 > 1U) { + Hit(); + } else if (temp_r29 == 1 || temp_r29 == 10 || temp_r29 == 0x29 || dComIfGp_checkPlayerStatus0(0, 0x4000U)) { + Hanekaeri(); + } else { + Hit(); + } + } else { + Hanekaeri(); + } + + return; + } + + Hanekaeri(); +} + +/* 80783010-80783404 001AB0 03F4+00 1/1 0/0 0/0 .text Search__8daE_SB_cFv */ +void daE_SB_c::Search() { + f32 temp_f31 = current.pos.absXZ(*s_LinkPos); + f32 temp_f30 = field_0x5f4.absXZ(current.pos); + daPy_py_c* player = daPy_getPlayerActorClass(); + mSound.setLinkSearch(0); + attention_info.flags = 0; + if (temp_f31 < l_HIO.search_area) { + if (!other_bg_check(this, player)) { + attention_info.flags = 4; + mSound.setLinkSearch(1); + field_0x5b0 = 4; + if (temp_f31 < l_HIO.atk_start_range && (s16) (shape_angle.y - s_TargetAngle) > -0x3000 + && (s16) (shape_angle.y - s_TargetAngle) < 0x3000) { + field_0x5b0 = 0; + } + } else { + field_0x5b0 = 4; + field_0x5c0 = 1; + } + } else if (temp_f31 < (400.0f + l_HIO.search_area)) { + if (!other_bg_check(this, player)) { + attention_info.flags = 4; + } + } else if (temp_f30 > l_HIO.distance_home) { + field_0x5b0 = 4; + field_0x5c0 = 1; + } else if (field_0x608 != 12) { + field_0x5b0 = 1; + field_0x5b4 = 0; + } + + Search_Bomb(); + if (current.pos.y - home.pos.y > 200.0f) { + field_0x5b0 = 4; + field_0x5c0 = 1; + } +} + +/* 80783404-807834FC 001EA4 00F8+00 1/1 0/0 0/0 .text Wait_Motion__8daE_SB_cFv */ +void daE_SB_c::Wait_Motion() { + switch (field_0x5b4) { + case 0: + SetAnm(0xC, 2, 5.0f, l_HIO.other_anm_speed); + mSound.startCreatureSound(Z2SE_EN_SB_WAIT, 0, -1); + field_0x5b4 = 1; + break; + case 1: + if (mpMorf->getFrame() == 0.0f) { + mSound.startCreatureSound(Z2SE_EN_SB_WAIT, 0, -1); + } + + Search(); + break; + } + + ActionCheck(); + Obj_Damage(); +} + +/* 807834FC-807835A0 001F9C 00A4+00 1/1 0/0 0/0 .text Attack__8daE_SB_cFv */ +void daE_SB_c::Attack() { + field_0x5cc = dComIfGp_particle_set(field_0x5cc, 0x8473, ¤t.pos, &tevStr, &shape_angle, + NULL, 0xFF, NULL, -1, NULL, NULL, NULL); + mCyl.SetTgHitMark(CcG_Tg_UNK_MARK_2); + mCyl.OnTgShield(); + Attack_Motion(); +} + +/* 807835A0-80783678 002040 00D8+00 1/1 0/0 0/0 .text Shield__8daE_SB_cFv */ +void daE_SB_c::Shield() { + switch (field_0x5b8) { + case 0: + cLib_addCalc2(&speedF, 0.0f, 0.2f, 30.0f); + if (speedF > -1.0f) { + speedF = 0.0f; + field_0x5b8 = 1; + } + + break; + case 1: + ActionCheck(); + if (mpMorf->isStop()) { + field_0x602 = 0; + MemberClear(); + } + break; + } + + Obj_Damage(); +} + +/* 80783678-80783854 002118 01DC+00 2/1 0/0 0/0 .text Anm_Motion__8daE_SB_cFv */ +void daE_SB_c::Anm_Motion() { + switch (field_0x5b0) { + case 1: + Wait_Motion(); + break; + case 0: + Attack(); + break; + case 4: + Jump_Motion(); + break; + case 5: + Shield(); + break; + + case 2: { + if (mpMorf->checkFrame(49.5f)) { + mSound.startCreatureSound(Z2SE_EN_SB_LAND, 0, -1); + } + + if (mpMorf->isStop()) { + Death_Motion(); + } + + break; + } + + case 3: + Bomb_Death_Motion(); + break; + + case 6: { + ActionCheck(); + if (2.0f == mpMorf->getFrame()) { + mSound.startCreatureSound(Z2SE_EN_SB_DEFENCE, 0, -1); + } + + if (mpMorf->isStop()) { + MemberClear(); + field_0x5b0 = 1; + SetAnm(0xC, 2, 5.0f, l_HIO.other_anm_speed); + mSound.startCreatureSound(Z2SE_EN_SB_WAIT, 0, -1); + } + + Obj_Damage(); + break; + } + } +} + +/* 80783854-80783914 0022F4 00C0+00 1/1 0/0 0/0 .text Search_Bomb__8daE_SB_cFv */ +void daE_SB_c::Search_Bomb() { + s_Bomb = (fopAc_ac_c*) fpcM_Search(s_obj_sub, this); + if (s_Bomb != NULL) { + if (!other_bg_check(this, s_Bomb) && !(field_0x5f0 < 100.0f)) { + if (field_0x5f0 < 400.0f) { + field_0x5b0 = 0; + field_0x5c0 = 2; + return; + } + + if (field_0x5f0 < 1000.0f) { + field_0x5b0 = 4; + field_0x5c0 = 2; + } + } + } else { + field_0x5c0 = 0; + } +} + +/* 80783914-80783A9C 0023B4 0188+00 1/1 0/0 0/0 .text ChanceMotion__8daE_SB_cFv */ +void daE_SB_c::ChanceMotion() { + if (field_0x5e6 <= 0) { + mSound.startCreatureSound(Z2SE_EN_SB_DEATH, 0, -1); + mCyl.OffAtSetBit(); + mCyl.OnTgNoHitMark(); + mSound.startCreatureSound(Z2SE_EN_SB_BUBBLE, 0, -1); + SetAnm(6, 0, 5.0f, l_HIO.death_anm_speed); + Particle_Set(0x84A3); + Particle_Set(0x8475); + Particle_Set(0x8476); + attention_info.flags = 0; + if (field_0x61a != 0xFF && !dComIfGs_isSwitch(field_0x61a, fopAcM_GetRoomNo(this))) { + dComIfGs_onSwitch(field_0x61a, fopAcM_GetRoomNo(this)); + } + + field_0x5b0 = 2; + return; + } + + field_0x5d2 = 0x2000; + field_0x5e4 = 1; + field_0x5d8.set(0, 0, 0); + field_0x5de.set(0, 0, 0); + field_0x5d4 = 0.0f; + Shield_Motion(); +} + +/* 80783A9C-80783B4C 00253C 00B0+00 1/1 0/0 0/0 .text NoChanceMotion__8daE_SB_cFv */ +void daE_SB_c::NoChanceMotion() { + if (mAcch.ChkGroundHit()) { + if (speed.y <= 0.0f) { + mCyl.OnTgShield(); + mCyl.OffAtSetBit(); + mCyl.GetTgHitObj(); + MemberClear(); + SetAnm(7, 0, 5.0f, l_HIO.other_anm_speed); + Particle_Set(0x8478); + field_0x5b0 = 6; + } + } +} + +/* 80783B4C-80783FBC 0025EC 0470+00 5/5 0/0 0/0 .text Obj_Damage__8daE_SB_cFv */ +void daE_SB_c::Obj_Damage() { + if (field_0x60c > 0) { + mCyl.OffTgSetBit(); + mCyl.ClrTgHit(); + return; + } + + mCyl.OnTgSetBit(); + mStts.Move(); + if (mCyl.ChkTgHit()) { + mAtInfo.mpCollider = mCyl.GetTgHitObj(); + if (field_0x5d0) { + mAtInfo.field_0x18 = 42; + } else { + mAtInfo.field_0x18 = 30; + } + + cCcD_Obj* tg_hit_obj = mCyl.GetTgHitObj(); + cc_at_check(this, &mAtInfo); + field_0x60c = 0xF; + if (tg_hit_obj->ChkAtType(AT_TYPE_SHIELD_ATTACK)) { + field_0x60c = 10; + } + + if (tg_hit_obj->ChkAtType(AT_TYPE_HOOKSHOT)) { + field_0x60c = 5; + } + + u8 cut_cnt = daPy_getPlayerActorClass()->getCutCount(); + if (tg_hit_obj->ChkAtType(AT_TYPE_SHIELD_ATTACK) + || tg_hit_obj->ChkAtType(AT_TYPE_HOOKSHOT) + || tg_hit_obj->ChkAtType(AT_TYPE_BOMB)) { + s16 tgt_ang = cLib_targetAngleY(¤t.pos, s_LinkPos); + if ((s16) (shape_angle.y - tgt_ang) < 0x6000 && (s16) (shape_angle.y - tgt_ang) > -0x6000) { + if (mAcch.ChkGroundHit()) { + if (speed.y <= 0.0f) { + if (tg_hit_obj->ChkAtType(AT_TYPE_HOOKSHOT)) { + SetAnm(5, 0, 5.0f, l_HIO.shield_atk_anm_speed); + mSound.startCreatureSound(Z2SE_EN_SB_BIND, 0, -1); + } else { + SetAnm(0xB, 0, 5.0f, l_HIO.shield_atk_anm_speed); + mSound.startCreatureSound(Z2SE_EN_SB_SHIELD, 0, -1); + } + + field_0x602 = 1; + mCyl.OnTgShield(); + mCyl.SetTgHitMark(CcG_Tg_UNK_MARK_2); + current.angle.y = s_TargetAngle; + speedF = -5.0f; + MemberClear(); + field_0x5b0 = 5; + mCyl.OffAtSetBit(); + Particle_Set(0x849E); + Particle_Set(0x8478); + } + } + } else { + NoChanceMotion(); + } + + return; + } + + if (field_0x5b0 == 0 || field_0x602 == 1) { + if (tg_hit_obj->ChkAtType(AT_TYPE_NORMAL_SWORD)) { + u32 cut_type = daPy_getPlayerActorClass()->getCutType(); + if (field_0x5e8 == 1 && cut_cnt > 1 + && (s16) (shape_angle.y - s_TargetAngle) > -0x3000 && (s16) (shape_angle.y - s_TargetAngle) < 0x3000) { + ChanceMotion(); + --field_0x5e6; + if (daPy_getPlayerActorClass()->checkMasterSwordEquip()) { + field_0x5e6 -= 1; + } + + if (cut_type == daPy_py_c::CUT_TYPE_TURN_RIGHT + || cut_type == daPy_py_c::CUT_TYPE_TURN_LEFT + || cut_type == daPy_py_c::CUT_TYPE_LARGE_JUMP_INIT + || cut_type == daPy_py_c::CUT_TYPE_LARGE_JUMP + || cut_type == daPy_py_c::CUT_TYPE_LARGE_JUMP_FINISH + || cut_type == daPy_py_c::CUT_TYPE_MORTAL_DRAW_B + || cut_type == daPy_py_c::CUT_TYPE_MORTAL_DRAW_A + || cut_type == daPy_py_c::CUT_TYPE_TWIRL + || cut_type == daPy_py_c::CUT_TYPE_LARGE_TURN_LEFT + || cut_type == daPy_py_c::CUT_TYPE_LARGE_TURN_RIGHT) { + field_0x5e6 -= 5; + ChanceMotion(); + speedF = 0.0f; + } + } else if (cut_type != daPy_py_c::CUT_TYPE_NM_VERTICAL && cut_type != daPy_py_c::CUT_TYPE_JUMP + && (s16) (shape_angle.y - s_TargetAngle) > -0x3000 && (s16) (shape_angle.y - s_TargetAngle) < 0x3000) { + if (cut_type == daPy_py_c::CUT_TYPE_TURN_RIGHT + || cut_type == daPy_py_c::CUT_TYPE_TURN_LEFT + || cut_type == daPy_py_c::CUT_TYPE_LARGE_JUMP_INIT + || cut_type == daPy_py_c::CUT_TYPE_LARGE_JUMP + || cut_type == daPy_py_c::CUT_TYPE_LARGE_JUMP_FINISH + || cut_type == daPy_py_c::CUT_TYPE_MORTAL_DRAW_B + || cut_type == daPy_py_c::CUT_TYPE_MORTAL_DRAW_A + || cut_type == daPy_py_c::CUT_TYPE_TWIRL + || cut_type == daPy_py_c::CUT_TYPE_LARGE_TURN_LEFT + || cut_type == daPy_py_c::CUT_TYPE_LARGE_TURN_RIGHT) { + field_0x5e6 -= 5; + ChanceMotion(); + speedF = 0.0f; + } + + if (field_0x5ac == 3) { + field_0x603 = 1; + } else { + ChanceMotion(); + --field_0x5e6; + if (daPy_getPlayerActorClass()->checkMasterSwordEquip()) { + field_0x5e6 -= 1; + } + + field_0x5e8 = 1; + } + } else { + NoChanceMotion(); + field_0x5e8 = 0; + } + } + } else { + NoChanceMotion(); + } + } +} + +/* 80783FBC-80784144 002A5C 0188+00 1/1 0/0 0/0 .text HashiraVib__8daE_SB_cFv */ +void daE_SB_c::HashiraVib() { + // "Hashira" means pillar. + field_0x5d4 += 6000.0f; + field_0x5d2 *= 0.9f; + field_0x5d8.x = field_0x5d2 * cM_ssin(field_0x5d4); + field_0x5d8.y = field_0x5d2 * cM_ssin(8192.0f + field_0x5d4); + field_0x5de.x = field_0x5d2 * cM_ssin(field_0x5d4); + field_0x5de.y = field_0x5d2 * cM_ssin(field_0x5d4 - 8192.0f); +} + +/* 80784144-807841CC 002BE4 0088+00 1/1 0/0 0/0 .text Yazirushi__8daE_SB_cFv */ +void daE_SB_c::Yazirushi() { + eyePos.x = current.pos.x; + eyePos.z = current.pos.z; + eyePos.y = current.pos.y; + eyePos.y += 80.0f; + attention_info.position.y = eyePos.y; + attention_info.position.y += 80.0f; + attention_info.position.x = current.pos.x; + attention_info.position.z = current.pos.z; + s_TargetAngle = cLib_targetAngleY(¤t.pos, s_LinkPos); +} + +/* 807841CC-80784390 002C6C 01C4+00 1/1 0/0 0/0 .text setGroundAngle__8daE_SB_cFv */ +void daE_SB_c::setGroundAngle() { + cXyz vec_0x44; + cXyz vec_0x38; + cXyz vec_0x2c; + cXyz vec_0x20; + dBgS_GndChk gnd_chk; + vec_0x2c = current.pos; + vec_0x2c.y = mAcch.GetGroundH(); + vec_0x44.x = vec_0x2c.x; + vec_0x44.y = 50.0f + vec_0x2c.y; + vec_0x44.z = 80.0f + vec_0x2c.z; + gnd_chk.SetPos(&vec_0x44); + vec_0x44.y = dComIfG_Bgsp().GroundCross(&gnd_chk); + if (-1000000000.0f != vec_0x44.y && fabsf(vec_0x44.y - vec_0x2c.y) < 50.0f) { + vec_0x20 = vec_0x44 - vec_0x2c; + cLib_chaseAngleS(&field_0x614.x, (s16) -cM_atan2s(vec_0x20.y, vec_0x20.z), 0x100); + } + + vec_0x38.x = 50.0f + vec_0x2c.x; + vec_0x38.y = 50.0f + vec_0x2c.y; + vec_0x38.z = vec_0x2c.z; + gnd_chk.SetPos(&vec_0x38); + vec_0x38.y = dComIfG_Bgsp().GroundCross(&gnd_chk); + if (-1000000000.0f != vec_0x38.y && fabsf(vec_0x38.y - vec_0x2c.y) < 50.0f) { + vec_0x20 = vec_0x38 - vec_0x2c; + cLib_chaseAngleS(&field_0x614.z, (s16) cM_atan2s(vec_0x20.y, vec_0x20.x), 0x100); + } +} + +/* 80784390-807844BC 002E30 012C+00 1/1 0/0 0/0 .text Execute__8daE_SB_cFv */ +int daE_SB_c::Execute() { + s_LinkPos = &fopAcM_GetPosition(daPy_getPlayerActorClass()); + field_0x5c8 -= 1; + if (field_0x5c8 < 0) { + field_0x5c8 = 0; + } + + Yazirushi(); + if (field_0x5e4 == 1) { + HashiraVib(); + } + + Anm_Motion(); + setGroundAngle(); + if (speed.y > 0.0f) { + mAcch.OffClrSpeedY(); + } else { + mAcch.OnClrSpeedY(); + } + + mpMorf->play(0, dComIfGp_getReverb(fopAcM_GetRoomNo(this))); + field_0x60c -= 1; + if (field_0x60c < 0) { + field_0x60c = 0; + } + + setCcCylinder(); + fopAcM_posMoveF(this, mStts.GetCCMoveP()); + mAcch.CrrPos(dComIfG_Bgsp()); + setBaseMtx(); + return 1; +} + +/* 807844BC-807845D8 002F5C 011C+00 1/1 0/0 0/0 .text Draw__8daE_SB_cFv */ +int daE_SB_c::Draw() { + J3DModel* model = mpMorf->getModel(); + g_env_light.settingTevStruct(0, ¤t.pos, &tevStr); + g_env_light.setLightTevColorType_MAJI(model, &tevStr); + J3DShape* shape = mpMorf->getModel()->getModelData()->getMaterialNodePointer(1)->getShape(); + if (shape != NULL) { + if (field_0x5b0 == 2) { + shape->hide(); + } else { + shape->show(); + } + } + + mpMorf->entryDL(); + cXyz my_vec; + my_vec.set(current.pos.x, 100.0f + current.pos.y, current.pos.z); + _GXTexObj* tex_obj = dDlst_shadowControl_c::getSimpleTex(); + mShadowKey = dComIfGd_setShadow(mShadowKey, 1, model, &my_vec, 1000.0f, 300.0f, + current.pos.y, mAcch.GetGroundH(), mAcch.m_gnd, + &tevStr, 0, 1.0f, tex_obj); + return 1; +} + +/* 807845D8-80784640 003078 0068+00 1/1 0/0 0/0 .text Delete__8daE_SB_cFv */ +int daE_SB_c::Delete() { + dComIfG_resDelete(&mPhaseReq, "E_SB"); + if (field_0xbbc) { + l_HIOInit = 0; + } + + if (heap != NULL) { + mpMorf->stopZelAnime(); + } + + return 1; +} + +/* 80784640-807846B8 0030E0 0078+00 1/1 0/0 0/0 .text setBaseMtx__8daE_SB_cFv */ +void daE_SB_c::setBaseMtx() { + mDoMtx_stack_c::transS(current.pos); + mDoMtx_stack_c::ZXYrotM(field_0x614); + mDoMtx_stack_c::ZXYrotM(shape_angle); + mDoMtx_stack_c::scaleM(l_HIO.size, l_HIO.size, l_HIO.size); + J3DModel* model = mpMorf->getModel(); + model->setBaseTRMtx(mDoMtx_stack_c::get()); + mpMorf->modelCalc(); +} + +/* 807846B8-807846D8 003158 0020+00 1/0 0/0 0/0 .text daE_SB_Draw__FP8daE_SB_c */ +static int daE_SB_Draw(daE_SB_c* i_this) { + return i_this->Draw(); +} + +/* 807846D8-807846F8 003178 0020+00 2/1 0/0 0/0 .text daE_SB_Execute__FP8daE_SB_c */ +static int daE_SB_Execute(daE_SB_c* i_this) { + return i_this->Execute(); +} + +/* 807846F8-80784700 003198 0008+00 1/0 0/0 0/0 .text daE_SB_IsDelete__FP8daE_SB_c */ +static int daE_SB_IsDelete(daE_SB_c*) { + return 1; +} + +/* 80784700-80784720 0031A0 0020+00 1/0 0/0 0/0 .text daE_SB_Delete__FP8daE_SB_c */ +static int daE_SB_Delete(daE_SB_c* i_this) { + return i_this->Delete(); +} + +/* 80784720-80784B58 0031C0 0438+00 1/1 0/0 0/0 .text Create__8daE_SB_cFv */ +cPhs__Step daE_SB_c::Create() { + fopAcM_SetupActor(this, daE_SB_c); + cPhs__Step phase = (cPhs__Step) dComIfG_resLoad(&mPhaseReq, "E_SB"); + if (phase == cPhs_COMPLEATE_e) { + field_0x61a = fopAcM_GetParam(this); + if (field_0x61a != 0xFF && dComIfGs_isSwitch(field_0x61a, fopAcM_GetRoomNo(this))) { + return cPhs_ERROR_e; + } + + OS_REPORT("E_SB PARAM %x\n", fopAcM_GetParam(this)); + if (!fopAcM_entrySolidHeap(this, useHeapInit, 0x1100)) { + return cPhs_ERROR_e; + } + + if (l_HIOInit == 0) { + l_HIOInit = 1; + field_0xbbc = 1; + l_HIO.field_0x04 = -1; + } + + attention_info.flags = 4; + attention_info.distances[2] = 0x24; + fopAcM_SetMtx(this, mpMorf->getModel()->getBaseTRMtx()); + fopAcM_SetMin(this, -200.0f, 0.0f, -200.0f); + fopAcM_SetMax(this, 200.0f, 200.0f, 200.0f); + mAcchCir.SetWall(30.0f, 100.0f); + mAcch.Set(fopAcM_GetPosition_p(this), fopAcM_GetOldPosition_p(this), this, 1, + &mAcchCir, fopAcM_GetSpeed_p(this), NULL, 0); + mSound.init(¤t.pos, &eyePos, 3, 1); + mAtInfo.mpSound = &mSound; + mAtInfo.mPowerType = 1; + mAtInfo.mpSound = &mSound; + if (fopAcM_gc_c::gndCheck(¤t.pos)) { + current.pos.y = fopAcM_gc_c::getGroundY(); + } + + initCcCylinder(); + mpMorf->setAnm((J3DAnmTransform *) dComIfG_getObjectRes("E_SB", 0xC), 2, 5.0f, l_HIO.other_anm_speed, 0.0f, -1.0f); + mSound.startCreatureSound(Z2SE_EN_SB_WAIT, 0, -1); + field_0x5b0 = 1; + gravity = -9.0f; + field_0x5f4 = current.pos; + field_0x600 = shape_angle.y; + mCyl.OnTgShield(); + mCyl.SetTgHitMark(CcG_Tg_UNK_MARK_2); + mCyl.OffAtSetBit(); + mSound.setEnemyName("E_SB"); + J3DModel* model = mpMorf->getModel(); + model->setUserArea((u32) this); + for (u16 idx = 0; idx < model->getModelData()->getJointNum(); ++idx) { + if (idx != 0) { + model->getModelData()->getJointNodePointer(idx)->setCallBack(JointCallBack); + } + } + + field_0x5e6 = 3; + daE_SB_Execute(this); + } + + return phase; +} + +/* 80784CA0-80784CC0 003740 0020+00 1/0 0/0 0/0 .text daE_SB_Create__FP10fopAc_ac_c */ +static int daE_SB_Create(fopAc_ac_c* i_this) { + return static_cast(i_this)->Create(); +} /* 80784E88-80784EA8 -00001 0020+00 1/0 0/0 0/0 .data l_daE_SB_Method */ static actor_method_class l_daE_SB_Method = { - (process_method_func)daE_SB_Create__FP10fopAc_ac_c, - (process_method_func)daE_SB_Delete__FP8daE_SB_c, - (process_method_func)daE_SB_Execute__FP8daE_SB_c, - (process_method_func)daE_SB_IsDelete__FP8daE_SB_c, - (process_method_func)daE_SB_Draw__FP8daE_SB_c, + (process_method_func)daE_SB_Create, + (process_method_func)daE_SB_Delete, + (process_method_func)daE_SB_Execute, + (process_method_func)daE_SB_IsDelete, + (process_method_func)daE_SB_Draw, }; /* 80784EA8-80784ED8 -00001 0030+00 0/0 0/0 1/0 .data g_profile_E_SB */ @@ -289,876 +1242,4 @@ extern actor_process_profile_definition g_profile_E_SB = { fopAc_CULLBOX_CUSTOM_e, // cullType }; -/* 80784ED8-80784EE4 00006C 000C+00 2/2 0/0 0/0 .data __vt__8cM3dGCyl */ -SECTION_DATA extern void* __vt__8cM3dGCyl[3] = { - (void*)NULL /* RTTI */, - (void*)NULL, - (void*)__dt__8cM3dGCylFv, -}; - -/* 80784EE4-80784EF0 000078 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, -}; - -/* 80784EF0-80784EFC 000084 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, -}; - -/* 80784EFC-80784F20 000090 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_80784D4C, - (void*)NULL, - (void*)NULL, - (void*)func_80784D44, -}; - -/* 80784F20-80784F2C 0000B4 000C+00 2/2 0/0 0/0 .data __vt__12daE_SB_HIO_c */ -SECTION_DATA extern void* __vt__12daE_SB_HIO_c[3] = { - (void*)NULL /* RTTI */, - (void*)NULL, - (void*)__dt__12daE_SB_HIO_cFv, -}; - -/* 8078164C-807816D8 0000EC 008C+00 1/1 0/0 0/0 .text __ct__12daE_SB_HIO_cFv */ -daE_SB_HIO_c::daE_SB_HIO_c() { - // NONMATCHING -} - -/* ############################################################################################## */ -/* 80784E64-80784E64 0000FC 0000+00 0/0 0/0 0/0 .rodata @stringBase0 */ -#pragma push -#pragma force_active on -SECTION_DEAD static char const* const stringBase_80784E64 = "E_SB"; -#pragma pop - -/* 807816D8-807817D0 000178 00F8+00 1/1 0/0 0/0 .text CreateHeap__8daE_SB_cFv */ -void daE_SB_c::CreateHeap() { - // NONMATCHING -} - -/* 807817D0-807817F0 000270 0020+00 1/1 0/0 0/0 .text useHeapInit__FP10fopAc_ac_c */ -static void useHeapInit(fopAc_ac_c* param_0) { - // NONMATCHING -} - -/* ############################################################################################## */ -/* 80784D94-80784DD8 00002C 0044+00 1/1 0/0 0/0 .rodata ccCylSrc$3693 */ -const static dCcD_SrcCyl ccCylSrc = { - { - {0x0, {{AT_TYPE_CSTATUE_SWING, 0x2, 0xd}, {0x6032, 0x11}, 0x75}}, // mObj - {dCcD_SE_STONE, 0x0, 0x0, 0x0, 0x1}, // mGObjAt - {dCcD_SE_NONE, 0x0, 0x0, 0x0, 0x1}, // mGObjTg - {0x0}, // mGObjCo - }, // mObjInf - { - {0.0f, 0.0f, 0.0f}, // mCenter - 80.0f, // mRadius - 130.0f // mHeight - } // mCyl -}; - -/* 807817F0-80781850 000290 0060+00 1/1 0/0 0/0 .text initCcCylinder__8daE_SB_cFv */ -void daE_SB_c::initCcCylinder() { - // NONMATCHING -} - -/* 80781850-80781898 0002F0 0048+00 1/1 0/0 0/0 .text setCcCylinder__8daE_SB_cFv */ -void daE_SB_c::setCcCylinder() { - // NONMATCHING -} - -/* 80781898-80781990 000338 00F8+00 1/1 0/0 0/0 .text ctrlJoint__8daE_SB_cFP8J3DJointP8J3DModel */ -void daE_SB_c::ctrlJoint(J3DJoint* param_0, J3DModel* param_1) { - // NONMATCHING -} - -/* 80781990-807819DC 000430 004C+00 1/1 0/0 0/0 .text JointCallBack__FP8J3DJointi */ -static void JointCallBack(J3DJoint* param_0, int param_1) { - // NONMATCHING -} - -/* 807819DC-80781A4C 00047C 0070+00 6/6 0/0 0/0 .text Particle_Set__8daE_SB_cFUs */ -void daE_SB_c::Particle_Set(u16 param_0) { - // NONMATCHING -} - -/* ############################################################################################## */ -/* 80784DD8-80784DDC 000070 0004+00 7/17 0/0 0/0 .rodata @3758 */ -SECTION_RODATA static u8 const lit_3758[4] = { - 0x00, - 0x00, - 0x00, - 0x00, -}; -COMPILER_STRIP_GATE(0x80784DD8, &lit_3758); - -/* 80784DDC-80784DE0 000074 0004+00 1/6 0/0 0/0 .rodata @3759 */ -SECTION_RODATA static f32 const lit_3759 = -1.0f; -COMPILER_STRIP_GATE(0x80784DDC, &lit_3759); - -/* 80781A4C-80781AF8 0004EC 00AC+00 8/8 0/0 0/0 .text SetAnm__8daE_SB_cFiiff */ -void daE_SB_c::SetAnm(int param_0, int param_1, f32 param_2, f32 param_3) { - // NONMATCHING -} - -/* ############################################################################################## */ -/* 80784DE0-80784DE4 000078 0004+00 1/4 0/0 0/0 .rodata @3768 */ -SECTION_RODATA static f32 const lit_3768 = -9.0f; -COMPILER_STRIP_GATE(0x80784DE0, &lit_3768); - -/* 80781AF8-80781B54 000598 005C+00 8/8 0/0 0/0 .text MemberClear__8daE_SB_cFv */ -void daE_SB_c::MemberClear() { - // NONMATCHING -} - -/* ############################################################################################## */ -/* 80784DE4-80784DE8 00007C 0004+00 1/6 0/0 0/0 .rodata @3831 */ -SECTION_RODATA static f32 const lit_3831 = 100.0f; -COMPILER_STRIP_GATE(0x80784DE4, &lit_3831); - -/* 80781B54-80781C2C 0005F4 00D8+00 2/2 0/0 0/0 .text other_bg_check__FP8daE_SB_cP10fopAc_ac_c */ -static void other_bg_check(daE_SB_c* param_0, fopAc_ac_c* param_1) { - // NONMATCHING -} - -/* 80781C2C-80781D34 0006CC 0108+00 2/2 0/0 0/0 .text s_obj_sub__FPvPv */ -static s32 s_obj_sub(void* param_0, void* param_1) { - // NONMATCHING -} - -/* 80781D34-80781DD4 0007D4 00A0+00 1/1 0/0 0/0 .text s_bomb_sub__FPvPv */ -static void s_bomb_sub(void* param_0, void* param_1) { - // NONMATCHING -} - -/* ############################################################################################## */ -/* 80784DE8-80784DEC 000080 0004+00 4/11 0/0 0/0 .rodata @3906 */ -SECTION_RODATA static f32 const lit_3906 = 5.0f; -COMPILER_STRIP_GATE(0x80784DE8, &lit_3906); - -/* 80784DEC-80784DF0 000084 0004+00 0/2 0/0 0/0 .rodata @3907 */ -#pragma push -#pragma force_active on -SECTION_RODATA static f32 const lit_3907 = -5.0f; -COMPILER_STRIP_GATE(0x80784DEC, &lit_3907); -#pragma pop - -/* 80784F38-80784F3C 000008 0001+03 2/2 0/0 0/0 .bss @1109 */ -static u8 lit_1109[1 + 3 /* padding */]; - -/* 80784F3C-80784F40 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 - -/* 80784F40-80784F44 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 - -/* 80784F44-80784F48 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 - -/* 80784F48-80784F4C 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 - -/* 80784F4C-80784F50 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 - -/* 80784F50-80784F54 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 - -/* 80784F54-80784F58 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 - -/* 80784F58-80784F5C 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 - -/* 80784F5C-80784F60 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 - -/* 80784F60-80784F64 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 - -/* 80784F64-80784F68 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 - -/* 80784F68-80784F6C 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 - -/* 80784F6C-80784F70 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 - -/* 80784F70-80784F74 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 - -/* 80784F74-80784F78 -00001 0004+00 2/2 0/0 0/0 .bss None */ -/* 80784F74 0001+00 data_80784F74 @1009 */ -/* 80784F75 0003+00 data_80784F75 None */ -static u8 struct_80784F74[4]; - -/* 80784F78-80784F84 000048 000C+00 1/1 0/0 0/0 .bss @3653 */ -static u8 lit_3653[12]; - -/* 80784F84-80784FC4 000054 0040+00 14/16 0/0 0/0 .bss l_HIO */ -static u8 l_HIO[64]; - -/* 80784FC4-80784FC8 000094 0004+00 2/2 0/0 0/0 .bss s_Bomb__22@unnamed@d_a_e_sb_cpp@ */ -static u8 data_80784FC4[4]; - -/* 80784FC8-80784FCC 000098 0002+02 3/5 0/0 0/0 .bss s_TargetAngle__22@unnamed@d_a_e_sb_cpp@ */ -static u8 data_80784FC8[2 + 2 /* padding */]; - -/* 80784FCC-80784FD0 00009C 0004+00 5/7 0/0 0/0 .bss s_LinkPos__22@unnamed@d_a_e_sb_cpp@ - */ -static u8 data_80784FCC[4]; - -/* 80781DD4-80781F30 000874 015C+00 1/1 0/0 0/0 .text Shield_Motion__8daE_SB_cFv */ -void daE_SB_c::Shield_Motion() { - // NONMATCHING -} - -/* 80781F30-80781F80 0009D0 0050+00 1/1 0/0 0/0 .text AttackStop__8daE_SB_cFv */ -void daE_SB_c::AttackStop() { - // NONMATCHING -} - -/* ############################################################################################## */ -/* 80784DF0-80784DF4 000088 0004+00 0/5 0/0 0/0 .rodata @3954 */ -#pragma push -#pragma force_active on -SECTION_RODATA static f32 const lit_3954 = 200.0f; -COMPILER_STRIP_GATE(0x80784DF0, &lit_3954); -#pragma pop - -/* 80784DF4-80784DF8 00008C 0004+00 0/3 0/0 0/0 .rodata @3955 */ -#pragma push -#pragma force_active on -SECTION_RODATA static f32 const lit_3955 = -200.0f; -COMPILER_STRIP_GATE(0x80784DF4, &lit_3955); -#pragma pop - -/* 80784DF8-80784DFC 000090 0004+00 0/1 0/0 0/0 .rodata @3956 */ -#pragma push -#pragma force_active on -SECTION_RODATA static f32 const lit_3956 = 4.0f / 5.0f; -COMPILER_STRIP_GATE(0x80784DF8, &lit_3956); -#pragma pop - -/* 80784DFC-80784E00 000094 0004+00 1/4 0/0 0/0 .rodata @3957 */ -SECTION_RODATA static f32 const lit_3957 = 0.5f; -COMPILER_STRIP_GATE(0x80784DFC, &lit_3957); - -/* 80781F80-80782180 000A20 0200+00 1/1 0/0 0/0 .text AttackSetSP__8daE_SB_cFv */ -void daE_SB_c::AttackSetSP() { - // NONMATCHING -} - -/* ############################################################################################## */ -/* 80784E00-80784E04 000098 0004+00 1/1 0/0 0/0 .rodata @3975 */ -SECTION_RODATA static f32 const lit_3975 = 1792.0f; -COMPILER_STRIP_GATE(0x80784E00, &lit_3975); - -/* 80782180-80782264 000C20 00E4+00 1/1 0/0 0/0 .text AttackAngle__8daE_SB_cFv */ -void daE_SB_c::AttackAngle() { - // NONMATCHING -} - -/* ############################################################################################## */ -/* 80784E04-80784E08 00009C 0004+00 0/3 0/0 0/0 .rodata @3981 */ -#pragma push -#pragma force_active on -SECTION_RODATA static f32 const lit_3981 = 1.0f / 5.0f; -COMPILER_STRIP_GATE(0x80784E04, &lit_3981); -#pragma pop - -/* 80782264-807822B8 000D04 0054+00 1/1 0/0 0/0 .text AttackSpeedMotion__8daE_SB_cFv */ -void daE_SB_c::AttackSpeedMotion() { - // NONMATCHING -} - -/* ############################################################################################## */ -/* 80784E08-80784E0C 0000A0 0004+00 0/1 0/0 0/0 .rodata @4064 */ -#pragma push -#pragma force_active on -SECTION_RODATA static f32 const lit_4064 = 53.0f; -COMPILER_STRIP_GATE(0x80784E08, &lit_4064); -#pragma pop - -/* 80784E0C-80784E10 0000A4 0004+00 0/1 0/0 0/0 .rodata @4065 */ -#pragma push -#pragma force_active on -SECTION_RODATA static f32 const lit_4065 = 64.0f; -COMPILER_STRIP_GATE(0x80784E0C, &lit_4065); -#pragma pop - -/* 80784E10-80784E18 0000A8 0004+04 0/1 0/0 0/0 .rodata @4066 */ -#pragma push -#pragma force_active on -SECTION_RODATA static f32 const lit_4066[1 + 1 /* padding */] = { - 2.0f, - /* padding */ - 0.0f, -}; -COMPILER_STRIP_GATE(0x80784E10, &lit_4066); -#pragma pop - -/* 807822B8-80782650 000D58 0398+00 1/1 0/0 0/0 .text Attack_Motion__8daE_SB_cFv */ -void daE_SB_c::Attack_Motion() { - // NONMATCHING -} - -/* 80782650-80782714 0010F0 00C4+00 1/1 0/0 0/0 .text Bomb_Death_Motion__8daE_SB_cFv */ -void daE_SB_c::Bomb_Death_Motion() { - // NONMATCHING -} - -/* 80782714-8078273C 0011B4 0028+00 1/1 0/0 0/0 .text BombJumpSet__8daE_SB_cFv */ -void daE_SB_c::BombJumpSet() { - // NONMATCHING -} - -/* ############################################################################################## */ -/* 80784E18-80784E20 0000B0 0008+00 0/2 0/0 0/0 .rodata @4130 */ -#pragma push -#pragma force_active on -SECTION_RODATA static u8 const lit_4130[8] = { - 0x3F, 0xE0, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, -}; -COMPILER_STRIP_GATE(0x80784E18, &lit_4130); -#pragma pop - -/* 80784E20-80784E28 0000B8 0008+00 0/2 0/0 0/0 .rodata @4131 */ -#pragma push -#pragma force_active on -SECTION_RODATA static u8 const lit_4131[8] = { - 0x40, 0x08, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, -}; -COMPILER_STRIP_GATE(0x80784E20, &lit_4131); -#pragma pop - -/* 80784E28-80784E30 0000C0 0008+00 0/2 0/0 0/0 .rodata @4132 */ -#pragma push -#pragma force_active on -SECTION_RODATA static u8 const lit_4132[8] = { - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, -}; -COMPILER_STRIP_GATE(0x80784E28, &lit_4132); -#pragma pop - -/* 80784E30-80784E34 0000C8 0004+00 0/2 0/0 0/0 .rodata @4133 */ -#pragma push -#pragma force_active on -SECTION_RODATA static f32 const lit_4133 = 300.0f; -COMPILER_STRIP_GATE(0x80784E30, &lit_4133); -#pragma pop - -/* 8078273C-8078294C 0011DC 0210+00 1/1 0/0 0/0 .text GetHomeSet__8daE_SB_cFv */ -void daE_SB_c::GetHomeSet() { - // NONMATCHING -} - -/* 8078294C-807829E8 0013EC 009C+00 1/1 0/0 0/0 .text HomeJumpMotion__8daE_SB_cFv */ -void daE_SB_c::HomeJumpMotion() { - // NONMATCHING -} - -/* ############################################################################################## */ -/* 80784E34-80784E38 0000CC 0004+00 0/1 0/0 0/0 .rodata @4166 */ -#pragma push -#pragma force_active on -SECTION_RODATA static f32 const lit_4166 = 3.0f / 5.0f; -COMPILER_STRIP_GATE(0x80784E34, &lit_4166); -#pragma pop - -/* 807829E8-80782B7C 001488 0194+00 1/1 0/0 0/0 .text Jump_Normal_Set__8daE_SB_cFv */ -void daE_SB_c::Jump_Normal_Set() { - // NONMATCHING -} - -/* 80782B7C-80782BD4 00161C 0058+00 1/1 0/0 0/0 .text Jump_Set__8daE_SB_cFv */ -void daE_SB_c::Jump_Set() { - // NONMATCHING -} - -/* 80782BD4-80782CC8 001674 00F4+00 1/1 0/0 0/0 .text JumpMiddleMotion__8daE_SB_cFv */ -void daE_SB_c::JumpMiddleMotion() { - // NONMATCHING -} - -/* 80782CC8-80782E90 001768 01C8+00 1/1 0/0 0/0 .text Jump_Motion__8daE_SB_cFv */ -void daE_SB_c::Jump_Motion() { - // NONMATCHING -} - -/* 80782E90-80782ED4 001930 0044+00 1/1 0/0 0/0 .text Death_Motion__8daE_SB_cFv */ -void daE_SB_c::Death_Motion() { - // NONMATCHING -} - -/* 80782ED4-80782EF4 001974 0020+00 1/1 0/0 0/0 .text Hanekaeri__8daE_SB_cFv */ -void daE_SB_c::Hanekaeri() { - // NONMATCHING -} - -/* 80782EF4-80782F10 001994 001C+00 1/1 0/0 0/0 .text Hit__8daE_SB_cFv */ -void daE_SB_c::Hit() { - // NONMATCHING -} - -/* 80782F10-80783010 0019B0 0100+00 5/5 0/0 0/0 .text ActionCheck__8daE_SB_cFv */ -void daE_SB_c::ActionCheck() { - // NONMATCHING -} - -/* ############################################################################################## */ -/* 80784E38-80784E3C 0000D0 0004+00 0/2 0/0 0/0 .rodata @4370 */ -#pragma push -#pragma force_active on -SECTION_RODATA static f32 const lit_4370 = 400.0f; -COMPILER_STRIP_GATE(0x80784E38, &lit_4370); -#pragma pop - -/* 80783010-80783404 001AB0 03F4+00 1/1 0/0 0/0 .text Search__8daE_SB_cFv */ -void daE_SB_c::Search() { - // NONMATCHING -} - -/* 80783404-807834FC 001EA4 00F8+00 1/1 0/0 0/0 .text Wait_Motion__8daE_SB_cFv */ -void daE_SB_c::Wait_Motion() { - // NONMATCHING -} - -/* 807834FC-807835A0 001F9C 00A4+00 1/1 0/0 0/0 .text Attack__8daE_SB_cFv */ -void daE_SB_c::Attack() { - // NONMATCHING -} - -/* 807835A0-80783678 002040 00D8+00 1/1 0/0 0/0 .text Shield__8daE_SB_cFv */ -void daE_SB_c::Shield() { - // NONMATCHING -} - -/* 80783678-80783854 002118 01DC+00 2/1 0/0 0/0 .text Anm_Motion__8daE_SB_cFv */ -void daE_SB_c::Anm_Motion() { - // NONMATCHING -} - -/* 80783854-80783914 0022F4 00C0+00 1/1 0/0 0/0 .text Search_Bomb__8daE_SB_cFv */ -void daE_SB_c::Search_Bomb() { - // NONMATCHING -} - -/* 80783914-80783A9C 0023B4 0188+00 1/1 0/0 0/0 .text ChanceMotion__8daE_SB_cFv */ -void daE_SB_c::ChanceMotion() { - // NONMATCHING -} - -/* 80783A9C-80783B4C 00253C 00B0+00 1/1 0/0 0/0 .text NoChanceMotion__8daE_SB_cFv */ -void daE_SB_c::NoChanceMotion() { - // NONMATCHING -} - -/* 80783B4C-80783FBC 0025EC 0470+00 5/5 0/0 0/0 .text Obj_Damage__8daE_SB_cFv */ -void daE_SB_c::Obj_Damage() { - // NONMATCHING -} - -/* ############################################################################################## */ -/* 80784E3C-80784E40 0000D4 0004+00 0/0 0/0 0/0 .rodata @4467 */ -#pragma push -#pragma force_active on -SECTION_RODATA static f32 const lit_4467 = 49.5f; -COMPILER_STRIP_GATE(0x80784E3C, &lit_4467); -#pragma pop - -/* 80784E40-80784E44 0000D8 0004+00 0/1 0/0 0/0 .rodata @4656 */ -#pragma push -#pragma force_active on -SECTION_RODATA static f32 const lit_4656 = 6000.0f; -COMPILER_STRIP_GATE(0x80784E40, &lit_4656); -#pragma pop - -/* 80784E44-80784E48 0000DC 0004+00 0/1 0/0 0/0 .rodata @4657 */ -#pragma push -#pragma force_active on -SECTION_RODATA static f32 const lit_4657 = 9.0f / 10.0f; -COMPILER_STRIP_GATE(0x80784E44, &lit_4657); -#pragma pop - -/* 80784E48-80784E50 0000E0 0004+04 0/1 0/0 0/0 .rodata @4658 */ -#pragma push -#pragma force_active on -SECTION_RODATA static f32 const lit_4658[1 + 1 /* padding */] = { - 8192.0f, - /* padding */ - 0.0f, -}; -COMPILER_STRIP_GATE(0x80784E48, &lit_4658); -#pragma pop - -/* 80784E50-80784E58 0000E8 0008+00 0/1 0/0 0/0 .rodata @4660 */ -#pragma push -#pragma force_active on -SECTION_RODATA static u8 const lit_4660[8] = { - 0x43, 0x30, 0x00, 0x00, 0x80, 0x00, 0x00, 0x00, -}; -COMPILER_STRIP_GATE(0x80784E50, &lit_4660); -#pragma pop - -/* 80783FBC-80784144 002A5C 0188+00 1/1 0/0 0/0 .text HashiraVib__8daE_SB_cFv */ -void daE_SB_c::HashiraVib() { - // NONMATCHING -} - -/* ############################################################################################## */ -/* 80784E58-80784E5C 0000F0 0004+00 1/2 0/0 0/0 .rodata @4682 */ -SECTION_RODATA static f32 const lit_4682 = 80.0f; -COMPILER_STRIP_GATE(0x80784E58, &lit_4682); - -/* 80784144-807841CC 002BE4 0088+00 1/1 0/0 0/0 .text Yazirushi__8daE_SB_cFv */ -void daE_SB_c::Yazirushi() { - // NONMATCHING -} - -/* ############################################################################################## */ -/* 80784E5C-80784E60 0000F4 0004+00 0/1 0/0 0/0 .rodata @4738 */ -#pragma push -#pragma force_active on -SECTION_RODATA static f32 const lit_4738 = 50.0f; -COMPILER_STRIP_GATE(0x80784E5C, &lit_4738); -#pragma pop - -/* 80784E60-80784E64 0000F8 0004+00 0/1 0/0 0/0 .rodata @4739 */ -#pragma push -#pragma force_active on -SECTION_RODATA static f32 const lit_4739 = -1000000000.0f; -COMPILER_STRIP_GATE(0x80784E60, &lit_4739); -#pragma pop - -/* 807841CC-80784390 002C6C 01C4+00 1/1 0/0 0/0 .text setGroundAngle__8daE_SB_cFv */ -void daE_SB_c::setGroundAngle() { - // NONMATCHING -} - -/* 80784390-807844BC 002E30 012C+00 1/1 0/0 0/0 .text Execute__8daE_SB_cFv */ -void daE_SB_c::Execute() { - // NONMATCHING -} - -/* 807844BC-807845D8 002F5C 011C+00 1/1 0/0 0/0 .text Draw__8daE_SB_cFv */ -void daE_SB_c::Draw() { - // NONMATCHING -} - -/* 807845D8-80784640 003078 0068+00 1/1 0/0 0/0 .text Delete__8daE_SB_cFv */ -void daE_SB_c::Delete() { - // NONMATCHING -} - -/* 80784640-807846B8 0030E0 0078+00 1/1 0/0 0/0 .text setBaseMtx__8daE_SB_cFv */ -void daE_SB_c::setBaseMtx() { - // NONMATCHING -} - -/* 807846B8-807846D8 003158 0020+00 1/0 0/0 0/0 .text daE_SB_Draw__FP8daE_SB_c */ -static void daE_SB_Draw(daE_SB_c* param_0) { - // NONMATCHING -} - -/* 807846D8-807846F8 003178 0020+00 2/1 0/0 0/0 .text daE_SB_Execute__FP8daE_SB_c */ -static void daE_SB_Execute(daE_SB_c* param_0) { - // NONMATCHING -} - -/* 807846F8-80784700 003198 0008+00 1/0 0/0 0/0 .text daE_SB_IsDelete__FP8daE_SB_c */ -static bool daE_SB_IsDelete(daE_SB_c* param_0) { - return true; -} - -/* 80784700-80784720 0031A0 0020+00 1/0 0/0 0/0 .text daE_SB_Delete__FP8daE_SB_c */ -static void daE_SB_Delete(daE_SB_c* param_0) { - // NONMATCHING -} - -/* 80784720-80784B58 0031C0 0438+00 1/1 0/0 0/0 .text Create__8daE_SB_cFv */ -void daE_SB_c::Create() { - // NONMATCHING -} - -/* 80784B58-80784BA0 0035F8 0048+00 1/0 0/0 0/0 .text __dt__8cM3dGCylFv */ -// cM3dGCyl::~cM3dGCyl() { -extern "C" void __dt__8cM3dGCylFv() { - // NONMATCHING -} - -/* 80784BA0-80784BE8 003640 0048+00 1/0 0/0 0/0 .text __dt__8cM3dGSphFv */ -// cM3dGSph::~cM3dGSph() { -extern "C" void __dt__8cM3dGSphFv() { - // NONMATCHING -} - -/* 80784BE8-80784C30 003688 0048+00 1/0 0/0 0/0 .text __dt__8cM3dGAabFv */ -// cM3dGAab::~cM3dGAab() { -extern "C" void __dt__8cM3dGAabFv() { - // NONMATCHING -} - -/* 80784C30-80784CA0 0036D0 0070+00 3/2 0/0 0/0 .text __dt__12dBgS_ObjAcchFv */ -// dBgS_ObjAcch::~dBgS_ObjAcch() { -extern "C" void __dt__12dBgS_ObjAcchFv() { - // NONMATCHING -} - -/* 80784CA0-80784CC0 003740 0020+00 1/0 0/0 0/0 .text daE_SB_Create__FP10fopAc_ac_c */ -static void daE_SB_Create(fopAc_ac_c* param_0) { - // NONMATCHING -} - -/* 80784CC0-80784D08 003760 0048+00 2/1 0/0 0/0 .text __dt__12daE_SB_HIO_cFv */ -daE_SB_HIO_c::~daE_SB_HIO_c() { - // NONMATCHING -} - -/* 80784D08-80784D44 0037A8 003C+00 0/0 1/0 0/0 .text __sinit_d_a_e_sb_cpp */ -void __sinit_d_a_e_sb_cpp() { - // NONMATCHING -} - -#pragma push -#pragma force_active on -REGISTER_CTORS(0x80784D08, __sinit_d_a_e_sb_cpp); -#pragma pop - -/* 80784D44-80784D4C 0037E4 0008+00 1/0 0/0 0/0 .text @36@__dt__12dBgS_ObjAcchFv */ -static void func_80784D44() { - // NONMATCHING -} - -/* 80784D4C-80784D54 0037EC 0008+00 1/0 0/0 0/0 .text @20@__dt__12dBgS_ObjAcchFv */ -static void func_80784D4C() { - // NONMATCHING -} - -/* ############################################################################################## */ -/* 80784FD0-80784FD4 0000A0 0004+00 0/0 0/0 0/0 .bss - * sInstance__40JASGlobalInstance<19JASDefaultBankTable> */ -#pragma push -#pragma force_active on -static u8 data_80784FD0[4]; -#pragma pop - -/* 80784FD4-80784FD8 0000A4 0004+00 0/0 0/0 0/0 .bss - * sInstance__35JASGlobalInstance<14JASAudioThread> */ -#pragma push -#pragma force_active on -static u8 data_80784FD4[4]; -#pragma pop - -/* 80784FD8-80784FDC 0000A8 0004+00 0/0 0/0 0/0 .bss sInstance__27JASGlobalInstance<7Z2SeMgr> */ -#pragma push -#pragma force_active on -static u8 data_80784FD8[4]; -#pragma pop - -/* 80784FDC-80784FE0 0000AC 0004+00 0/0 0/0 0/0 .bss sInstance__28JASGlobalInstance<8Z2SeqMgr> */ -#pragma push -#pragma force_active on -static u8 data_80784FDC[4]; -#pragma pop - -/* 80784FE0-80784FE4 0000B0 0004+00 0/0 0/0 0/0 .bss sInstance__31JASGlobalInstance<10Z2SceneMgr> - */ -#pragma push -#pragma force_active on -static u8 data_80784FE0[4]; -#pragma pop - -/* 80784FE4-80784FE8 0000B4 0004+00 0/0 0/0 0/0 .bss sInstance__32JASGlobalInstance<11Z2StatusMgr> - */ -#pragma push -#pragma force_active on -static u8 data_80784FE4[4]; -#pragma pop - -/* 80784FE8-80784FEC 0000B8 0004+00 0/0 0/0 0/0 .bss sInstance__31JASGlobalInstance<10Z2DebugSys> - */ -#pragma push -#pragma force_active on -static u8 data_80784FE8[4]; -#pragma pop - -/* 80784FEC-80784FF0 0000BC 0004+00 0/0 0/0 0/0 .bss - * sInstance__36JASGlobalInstance<15JAISoundStarter> */ -#pragma push -#pragma force_active on -static u8 data_80784FEC[4]; -#pragma pop - -/* 80784FF0-80784FF4 0000C0 0004+00 0/0 0/0 0/0 .bss - * sInstance__35JASGlobalInstance<14Z2SoundStarter> */ -#pragma push -#pragma force_active on -static u8 data_80784FF0[4]; -#pragma pop - -/* 80784FF4-80784FF8 0000C4 0004+00 0/0 0/0 0/0 .bss - * sInstance__33JASGlobalInstance<12Z2SpeechMgr2> */ -#pragma push -#pragma force_active on -static u8 data_80784FF4[4]; -#pragma pop - -/* 80784FF8-80784FFC 0000C8 0004+00 0/0 0/0 0/0 .bss sInstance__28JASGlobalInstance<8JAISeMgr> */ -#pragma push -#pragma force_active on -static u8 data_80784FF8[4]; -#pragma pop - -/* 80784FFC-80785000 0000CC 0004+00 0/0 0/0 0/0 .bss sInstance__29JASGlobalInstance<9JAISeqMgr> */ -#pragma push -#pragma force_active on -static u8 data_80784FFC[4]; -#pragma pop - -/* 80785000-80785004 0000D0 0004+00 0/0 0/0 0/0 .bss - * sInstance__33JASGlobalInstance<12JAIStreamMgr> */ -#pragma push -#pragma force_active on -static u8 data_80785000[4]; -#pragma pop - -/* 80785004-80785008 0000D4 0004+00 0/0 0/0 0/0 .bss sInstance__31JASGlobalInstance<10Z2SoundMgr> - */ -#pragma push -#pragma force_active on -static u8 data_80785004[4]; -#pragma pop - -/* 80785008-8078500C 0000D8 0004+00 0/0 0/0 0/0 .bss - * sInstance__33JASGlobalInstance<12JAISoundInfo> */ -#pragma push -#pragma force_active on -static u8 data_80785008[4]; -#pragma pop - -/* 8078500C-80785010 0000DC 0004+00 0/0 0/0 0/0 .bss - * sInstance__34JASGlobalInstance<13JAUSoundTable> */ -#pragma push -#pragma force_active on -static u8 data_8078500C[4]; -#pragma pop - -/* 80785010-80785014 0000E0 0004+00 0/0 0/0 0/0 .bss - * sInstance__38JASGlobalInstance<17JAUSoundNameTable> */ -#pragma push -#pragma force_active on -static u8 data_80785010[4]; -#pragma pop - -/* 80785014-80785018 0000E4 0004+00 0/0 0/0 0/0 .bss - * sInstance__33JASGlobalInstance<12JAUSoundInfo> */ -#pragma push -#pragma force_active on -static u8 data_80785014[4]; -#pragma pop - -/* 80785018-8078501C 0000E8 0004+00 0/0 0/0 0/0 .bss sInstance__32JASGlobalInstance<11Z2SoundInfo> - */ -#pragma push -#pragma force_active on -static u8 data_80785018[4]; -#pragma pop - -/* 8078501C-80785020 0000EC 0004+00 0/0 0/0 0/0 .bss - * sInstance__34JASGlobalInstance<13Z2SoundObjMgr> */ -#pragma push -#pragma force_active on -static u8 data_8078501C[4]; -#pragma pop - -/* 80785020-80785024 0000F0 0004+00 0/0 0/0 0/0 .bss sInstance__31JASGlobalInstance<10Z2Audience> - */ -#pragma push -#pragma force_active on -static u8 data_80785020[4]; -#pragma pop - -/* 80785024-80785028 0000F4 0004+00 0/0 0/0 0/0 .bss sInstance__32JASGlobalInstance<11Z2FxLineMgr> - */ -#pragma push -#pragma force_active on -static u8 data_80785024[4]; -#pragma pop - -/* 80785028-8078502C 0000F8 0004+00 0/0 0/0 0/0 .bss sInstance__31JASGlobalInstance<10Z2EnvSeMgr> - */ -#pragma push -#pragma force_active on -static u8 data_80785028[4]; -#pragma pop - -/* 8078502C-80785030 0000FC 0004+00 0/0 0/0 0/0 .bss sInstance__32JASGlobalInstance<11Z2SpeechMgr> - */ -#pragma push -#pragma force_active on -static u8 data_8078502C[4]; -#pragma pop - -/* 80785030-80785034 000100 0004+00 0/0 0/0 0/0 .bss - * sInstance__34JASGlobalInstance<13Z2WolfHowlMgr> */ -#pragma push -#pragma force_active on -static u8 data_80785030[4]; -#pragma pop - -/* 80784E64-80784E64 0000FC 0000+00 0/0 0/0 0/0 .rodata @stringBase0 */ +AUDIO_INSTANCES; diff --git a/src/d/actor/d_a_e_tk_ball.cpp b/src/d/actor/d_a_e_tk_ball.cpp index d69a9530643..81a8e89cc7c 100644 --- a/src/d/actor/d_a_e_tk_ball.cpp +++ b/src/d/actor/d_a_e_tk_ball.cpp @@ -147,7 +147,7 @@ static void e_tk_ball_move(e_tk_ball_class* i_this) { if (i_this->mTgSph.ChkTgHit() || i_this->mAtSph.ChkAtShieldHit()) { impact_eff_set(i_this); actor->current.angle.x *= -1; - if (actor_lockon && daPy_getPlayerActorClass()->getCutType() != 0x00) { + if (actor_lockon && daPy_getPlayerActorClass()->getCutType() != daPy_py_c::CUT_TYPE_NONE) { i_this->mAction = ACT_TK_BALL_RETURN; i_this->mMode = MODE_TK_BALL_INIT; actor->current.angle.y -= 0x8000; @@ -168,7 +168,7 @@ static void e_tk_ball_move(e_tk_ball_class* i_this) { i_this->mInitalDistance = direction_vec.abs(); speed_vec.x = 0.0; speed_vec.y = 0.0; - if (daPy_getPlayerActorClass()->getCutType() != 0x00) { + if (daPy_getPlayerActorClass()->getCutType() != daPy_py_c::CUT_TYPE_NONE) { speed_vec.z = 60.0f; } cMtx_YrotS(*calc_mtx, actor->current.angle.y); diff --git a/src/d/actor/d_a_e_yd.cpp b/src/d/actor/d_a_e_yd.cpp index f11b86694ca..09b6e819644 100644 --- a/src/d/actor/d_a_e_yd.cpp +++ b/src/d/actor/d_a_e_yd.cpp @@ -134,7 +134,7 @@ static void damage_check(e_yd_class* i_this) { j = i_this->field_0xff4.mpCollider->ChkAtType(AT_TYPE_BOMB | AT_TYPE_40); if (j != 0 || i_this->field_0x66e == 6) { at_power_check(&i_this->field_0xff4); - if (daPy_getPlayerActorClass()->getCutType() != 0) { + if (daPy_getPlayerActorClass()->getCutType() != daPy_py_c::CUT_TYPE_NONE) { cVar6 = 1; } else { cVar6 = 2; diff --git a/src/d/actor/d_a_kytag12.cpp b/src/d/actor/d_a_kytag12.cpp index eccc407048b..2e1ce83b8ba 100644 --- a/src/d/actor/d_a_kytag12.cpp +++ b/src/d/actor/d_a_kytag12.cpp @@ -50,7 +50,7 @@ static void daKytag12_light_swprd_proc(kytag12_class* i_this) { daPy_py_c* player = (daPy_py_c*)dComIfGp_getPlayer(0); if (dComIfGs_getSelectEquipSword() == fpcNm_ITEM_LIGHT_SWORD) { - if (player->getCutType() != 0) { + if (player->getCutType() != daPy_py_c::CUT_TYPE_NONE) { if (i_this->field_0x576 == 0) { cXyz sp28(player->current.pos); sp28.y -= 100.0f; @@ -878,7 +878,7 @@ static int daKytag12_Execute_R00(kytag12_class* i_this) { sp80.y = player->current.pos.y; if (player->current.pos.abs(sp80) < 600.0f && - dComIfGs_getSelectEquipSword() == fpcNm_ITEM_LIGHT_SWORD && player->getCutType() != 0 && + dComIfGs_getSelectEquipSword() == fpcNm_ITEM_LIGHT_SWORD && player->getCutType() != daPy_py_c::CUT_TYPE_NONE && d_kytag12_cut_turn_check()) { i_this->field_0x575 = 1; diff --git a/src/d/actor/d_a_obj_warp_kbrg.cpp b/src/d/actor/d_a_obj_warp_kbrg.cpp index ce937b8c752..df1299adb65 100644 --- a/src/d/actor/d_a_obj_warp_kbrg.cpp +++ b/src/d/actor/d_a_obj_warp_kbrg.cpp @@ -4,897 +4,896 @@ */ #include "d/actor/d_a_obj_warp_kbrg.h" -#include "dol2asm.h" +#include "d/d_com_inf_game.h" +#include "d/actor/d_a_player.h" +#include "d/actor/d_a_midna.h" +#include "d/d_s_play.h" +#include "d/d_bg_w.h" +#include "d/d_meter2_info.h" +/* 80D295B4-80D295BC 000000 0008+00 6/6 0/0 0/0 .rodata l_bmd_idx */ +static const int l_bmd_idx[] = {9, 11}; +/* 80D295BC-80D295C4 000008 0008+00 1/1 0/0 0/0 .rodata l_dzb_idx */ +static const int l_dzb_idx[] = {15, 22}; -// -// Forward References: -// +/* 80D295C4-80D295CC 000010 0008+00 0/1 0/0 0/0 .rodata l_btk_idx */ +static const int l_btk_idx[] = {12, 19}; -extern "C" static void eventCallBack__FPvi(); -extern "C" void initBaseMtx__15daObjWarpKBrg_cFv(); -extern "C" void setBaseMtx__15daObjWarpKBrg_cFv(); -extern "C" void Create__15daObjWarpKBrg_cFv(); -extern "C" void CreateHeap__15daObjWarpKBrg_cFv(); -extern "C" void __dt__12J3DFrameCtrlFv(); -extern "C" void create1st__15daObjWarpKBrg_cFv(); -extern "C" void Execute__15daObjWarpKBrg_cFPPA3_A4_f(); -extern "C" void event_proc_call__15daObjWarpKBrg_cFv(); -extern "C" void orderZHintEvent__15daObjWarpKBrg_cFv(); -extern "C" void actionWait__15daObjWarpKBrg_cFv(); -extern "C" void actionOrderEvent__15daObjWarpKBrg_cFv(); -extern "C" void actionWaitWarpEvent__15daObjWarpKBrg_cFv(); -extern "C" void actionOrderATalkEvent__15daObjWarpKBrg_cFv(); -extern "C" void actionTalkEvent__15daObjWarpKBrg_cFv(); -extern "C" void actionWarpEvent__15daObjWarpKBrg_cFv(); -extern "C" void actionDead__15daObjWarpKBrg_cFv(); -extern "C" void actionWait2__15daObjWarpKBrg_cFv(); -extern "C" void actionOrderEvent2__15daObjWarpKBrg_cFv(); -extern "C" void actionWarpEvent2__15daObjWarpKBrg_cFv(); -extern "C" void actionDead2__15daObjWarpKBrg_cFv(); -extern "C" void demoProc__15daObjWarpKBrg_cFv(); -extern "C" void calcObjPos__15daObjWarpKBrg_cFv(); -extern "C" void checkTalkDistance__15daObjWarpKBrg_cFv(); -extern "C" void calcMidnaWaitPos__15daObjWarpKBrg_cFv(); -extern "C" void setBindEffect__15daObjWarpKBrg_cFv(); -extern "C" void followBindEffect__15daObjWarpKBrg_cFv(); -extern "C" void setSrcEffect__15daObjWarpKBrg_cFv(); -extern "C" void setDstEffect__15daObjWarpKBrg_cFv(); -extern "C" void followSrcEffect__15daObjWarpKBrg_cFv(); -extern "C" void followDstEffect__15daObjWarpKBrg_cFv(); -extern "C" void endSrcEffect__15daObjWarpKBrg_cFv(); -extern "C" void endDstEffect__15daObjWarpKBrg_cFv(); -extern "C" void Draw__15daObjWarpKBrg_cFv(); -extern "C" void Delete__15daObjWarpKBrg_cFv(); -extern "C" static void daObjWarpKBrg_create1st__FP15daObjWarpKBrg_c(); -extern "C" static void daObjWarpKBrg_MoveBGDelete__FP15daObjWarpKBrg_c(); -extern "C" static void daObjWarpKBrg_MoveBGExecute__FP15daObjWarpKBrg_c(); -extern "C" static void daObjWarpKBrg_MoveBGDraw__FP15daObjWarpKBrg_c(); -extern "C" void func_80D29590(void* _this, u8*); -extern "C" extern char const* const d_a_obj_warp_kbrg__stringBase0; +/* 80D295CC-80D295D4 000018 0008+00 1/2 0/0 0/0 .rodata l_bck_idx */ +static const int l_bck_idx[] = {6, 7}; -// -// External References: -// +/* 80D295D4-80D295E0 000020 000A+02 0/1 0/0 0/0 .rodata l_disapp_eff */ +static const u16 l_disapp_eff[] = {0x8532, 0x8533, 0x8534, 0x8535, 0x8536}; -extern "C" void transS__14mDoMtx_stack_cFRC4cXyz(); -extern "C" void transM__14mDoMtx_stack_cFfff(); -extern "C" void scaleM__14mDoMtx_stack_cFfff(); -extern "C" void ZXYrotM__14mDoMtx_stack_cFRC5csXyz(); -extern "C" void play__14mDoExt_baseAnmFv(); -extern "C" void init__13mDoExt_btkAnmFP16J3DMaterialTableP19J3DAnmTextureSRTKeyiifss(); -extern "C" void entry__13mDoExt_btkAnmFP16J3DMaterialTablef(); -extern "C" void init__13mDoExt_brkAnmFP16J3DMaterialTableP15J3DAnmTevRegKeyiifss(); -extern "C" void entry__13mDoExt_brkAnmFP16J3DMaterialTablef(); -extern "C" void init__13mDoExt_bckAnmFP15J3DAnmTransformiifssb(); -extern "C" void entry__13mDoExt_bckAnmFP12J3DModelDataf(); -extern "C" void mDoExt_modelUpdateDL__FP8J3DModel(); -extern "C" void mDoExt_btkAnmRemove__FP12J3DModelData(); -extern "C" void mDoExt_brkAnmRemove__FP12J3DModelData(); -extern "C" void mDoExt_J3DModel__create__FP12J3DModelDataUlUl(); -extern "C" void fopAcM_setCullSizeBox2__FP10fopAc_ac_cP12J3DModelData(); -extern "C" void fopAcM_searchActorDistanceXZ__FPC10fopAc_ac_cPC10fopAc_ac_c(); -extern "C" void fopAcM_orderOtherEventId__FP10fopAc_ac_csUcUsUsUs(); -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 dComIfGp_TargetWarpPt_set__FUc(); -extern "C" void dComIfGp_TransportWarp_check__Fv(); -extern "C" void onEventBit__11dSv_event_cFUs(); -extern "C" void isEventBit__11dSv_event_cCFUs(); -extern "C" void onSwitch__10dSv_info_cFii(); -extern "C" void isSwitch__10dSv_info_cCFii(); -extern "C" void getRes__14dRes_control_cFPCclP11dRes_info_ci(); -extern "C" void reset__14dEvt_control_cFv(); -extern "C" void setSkipProc__14dEvt_control_cFPvPFPvi_ii(); -extern "C" void setPt2__14dEvt_control_cFPv(); -extern "C" void getEventIdx__16dEvent_manager_cFP10fopAc_ac_cPCcUc(); -extern "C" void startCheck__16dEvent_manager_cFs(); -extern "C" void endCheck__16dEvent_manager_cFs(); -extern "C" void getMyStaffId__16dEvent_manager_cFPCcP10fopAc_ac_ci(); -extern "C" void getIsAddvance__16dEvent_manager_cFi(); -extern "C" void getMyActIdx__16dEvent_manager_cFiPCPCciii(); -extern "C" void getMySubstanceP__16dEvent_manager_cFiPCci(); -extern "C" void cutEnd__16dEvent_manager_cFi(); -extern "C" void getRunEventName__16dEvent_manager_cFv(); -extern "C" void -set__13dPa_control_cFUcUsPC4cXyzPC12dKy_tevstr_cPC5csXyzPC4cXyzUcP18dPa_levelEcallBackScPC8_GXColorPC8_GXColorPC4cXyzf(); -extern "C" void StartShock__12dVibration_cFii4cXyz(); -extern "C" void request__10dAttHint_cFP10fopAc_ac_ci(); -extern "C" void Release__4cBgSFP9dBgW_Base(); -extern "C" void Regist__4dBgSFP9dBgW_BaseP10fopAc_ac_c(); -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 settingTevStruct__18dScnKy_env_light_cFiP4cXyzP12dKy_tevstr_c(); -extern "C" void setLightTevColorType_MAJI__18dScnKy_env_light_cFP12J3DModelDataP12dKy_tevstr_c(); -extern "C" void __ct__10dMsgFlow_cFv(); -extern "C" void init__10dMsgFlow_cFP10fopAc_ac_ciiPP10fopAc_ac_c(); -extern "C" void doFlow__10dMsgFlow_cFP10fopAc_ac_cPP10fopAc_ac_ci(); -extern "C" void getEventId__10dMsgFlow_cFPi(); -extern "C" void ChkUsed__9cBgW_BgIdCFv(); -extern "C" void cLib_targetAngleY__FPC3VecPC3Vec(); -extern "C" void cLib_targetAngleX__FPC4cXyzPC4cXyz(); -extern "C" void func_802807E0(); -extern "C" void seStart__7Z2SeMgrF10JAISoundIDPC3VecUlScffffUc(); -extern "C" void* __nw__FUl(); -extern "C" void __dl__FPv(); -extern "C" void getName__10JUTNameTabCFUs(); -extern "C" void init__12J3DFrameCtrlFs(); -extern "C" void __ptmf_scall(); -extern "C" void _savegpr_23(); -extern "C" void _savegpr_25(); -extern "C" void _savegpr_26(); -extern "C" void _savegpr_28(); -extern "C" void _savegpr_29(); -extern "C" void _restgpr_23(); -extern "C" void _restgpr_25(); -extern "C" void _restgpr_26(); -extern "C" void _restgpr_28(); -extern "C" void _restgpr_29(); -extern "C" u8 saveBitLabels__16dSv_event_flag_c[1644 + 4 /* padding */]; -extern "C" u8 now__14mDoMtx_stack_c[48]; -extern "C" extern u8 g_dComIfG_gameInfo[122384]; -extern "C" extern u8 g_meter2_info[248]; -extern "C" u8 m_midnaActor__9daPy_py_c[4]; -extern "C" u8 mAudioMgrPtr__10Z2AudioMgr[4 + 4 /* padding */]; -extern "C" extern u8 data_80D29928[4]; +/* 80D295E0-80D295E8 00002C 0006+02 0/1 0/0 0/0 .rodata l_start_eff */ +static const u16 l_start_eff[] = {0x8B3F, 0x8B40, 0x8B41}; -// -// Declarations: -// +/* 80D295E8-80D295F4 000034 000C+00 0/1 0/0 0/0 .rodata l_app_eff */ +static const u16 l_app_eff[] = {0x852D, 0x852E, 0x852F, 0x8530, 0x8531, 0x8B3C}; + +/* 80D295F4-80D295F8 000040 0004+00 0/1 0/0 0/0 .rodata l_end_eff */ +static const u16 l_end_eff[] = {0x8B3D, 0x8B3E}; + +/* 80D295F8-80D29600 000044 0008+00 1/1 0/0 0/0 .rodata l_bind_eff */ +static const u16 l_bind_eff[] = {0x8B4F, 0x8B50, 0x8B51, 0x8B52}; + +/* 80D29600-80D29608 00004C 0008+00 1/1 0/0 0/0 .rodata l_heap_size */ +static const u32 l_heap_size[] = {0x6400, 0x7E60}; + +/* 80D29608-80D29614 000054 000C+00 1/1 0/0 0/0 .rodata l_midna_wait_offset */ +static const Vec l_midna_wait_offset = {0.0f, -200.0f, 1200.0f}; /* 80D26F38-80D26FA8 000078 0070+00 1/1 0/0 0/0 .text eventCallBack__FPvi */ -static void eventCallBack(void* param_0, int param_1) { - // NONMATCHING +static int eventCallBack(void* i_proc, int param_1) { + daPy_py_c* player_p = daPy_getPlayerActorClass(); + + if (i_proc != NULL) { + player_p->skipPortalObjWarp(); + if (dComIfGp_TransportWarp_check()) { + dComIfGs_onEventBit(dSv_event_flag_c::saveBitLabels[51]); + // "Kakariko Bridge: Warp destination is correct" + OS_REPORT("\x1B[43;30mカカリコ橋:ワープ先正解です\n\x1B[m"); + } + } + + return 1; } /* 80D26FA8-80D27008 0000E8 0060+00 1/1 0/0 0/0 .text initBaseMtx__15daObjWarpKBrg_cFv */ void daObjWarpKBrg_c::initBaseMtx() { - // NONMATCHING + mpBridgeModel->setBaseScale(scale); + + if (mpPortalModel != NULL) { + mpPortalModel->setBaseScale(scale); + } + + setBaseMtx(); } -/* ############################################################################################## */ -/* 80D295B4-80D295BC 000000 0008+00 6/6 0/0 0/0 .rodata l_bmd_idx */ -SECTION_RODATA static u8 const l_bmd_idx[8] = { - 0x00, 0x00, 0x00, 0x09, 0x00, 0x00, 0x00, 0x0B, -}; -COMPILER_STRIP_GATE(0x80D295B4, &l_bmd_idx); - -/* 80D295BC-80D295C4 000008 0008+00 1/1 0/0 0/0 .rodata l_dzb_idx */ -SECTION_RODATA static u8 const l_dzb_idx[8] = { - 0x00, 0x00, 0x00, 0x0F, 0x00, 0x00, 0x00, 0x16, -}; -COMPILER_STRIP_GATE(0x80D295BC, &l_dzb_idx); - -/* 80D295C4-80D295CC 000010 0008+00 0/1 0/0 0/0 .rodata l_btk_idx */ -#pragma push -#pragma force_active on -SECTION_RODATA static u8 const l_btk_idx[8] = { - 0x00, 0x00, 0x00, 0x0C, 0x00, 0x00, 0x00, 0x13, -}; -COMPILER_STRIP_GATE(0x80D295C4, &l_btk_idx); -#pragma pop - -/* 80D295CC-80D295D4 000018 0008+00 1/2 0/0 0/0 .rodata l_bck_idx */ -SECTION_RODATA static u8 const l_bck_idx[8] = { - 0x00, 0x00, 0x00, 0x06, 0x00, 0x00, 0x00, 0x07, -}; -COMPILER_STRIP_GATE(0x80D295CC, &l_bck_idx); - -/* 80D295D4-80D295E0 000020 000A+02 0/1 0/0 0/0 .rodata l_disapp_eff */ -#pragma push -#pragma force_active on -SECTION_RODATA static u8 const l_disapp_eff[10 + 2 /* padding */] = { - 0x85, - 0x32, - 0x85, - 0x33, - 0x85, - 0x34, - 0x85, - 0x35, - 0x85, - 0x36, - /* padding */ - 0x00, - 0x00, -}; -COMPILER_STRIP_GATE(0x80D295D4, &l_disapp_eff); -#pragma pop - -/* 80D295E0-80D295E8 00002C 0006+02 0/1 0/0 0/0 .rodata l_start_eff */ -#pragma push -#pragma force_active on -SECTION_RODATA static u8 const l_start_eff[6 + 2 /* padding */] = { - 0x8B, - 0x3F, - 0x8B, - 0x40, - 0x8B, - 0x41, - /* padding */ - 0x00, - 0x00, -}; -COMPILER_STRIP_GATE(0x80D295E0, &l_start_eff); -#pragma pop - -/* 80D295E8-80D295F4 000034 000C+00 0/1 0/0 0/0 .rodata l_app_eff */ -#pragma push -#pragma force_active on -SECTION_RODATA static u8 const l_app_eff[12] = { - 0x85, 0x2D, 0x85, 0x2E, 0x85, 0x2F, 0x85, 0x30, 0x85, 0x31, 0x8B, 0x3C, -}; -COMPILER_STRIP_GATE(0x80D295E8, &l_app_eff); -#pragma pop - -/* 80D295F4-80D295F8 000040 0004+00 0/1 0/0 0/0 .rodata l_end_eff */ -#pragma push -#pragma force_active on -SECTION_RODATA static u32 const l_end_eff = 0x8B3D8B3E; -COMPILER_STRIP_GATE(0x80D295F4, &l_end_eff); -#pragma pop - -/* 80D295F8-80D29600 000044 0008+00 1/1 0/0 0/0 .rodata l_bind_eff */ -SECTION_RODATA static u8 const l_bind_eff[8] = { - 0x8B, 0x4F, 0x8B, 0x50, 0x8B, 0x51, 0x8B, 0x52, -}; -COMPILER_STRIP_GATE(0x80D295F8, &l_bind_eff); - -/* 80D29600-80D29608 00004C 0008+00 1/1 0/0 0/0 .rodata l_heap_size */ -SECTION_RODATA static u8 const l_heap_size[8] = { - 0x00, 0x00, 0x64, 0x00, 0x00, 0x00, 0x7E, 0x60, -}; -COMPILER_STRIP_GATE(0x80D29600, &l_heap_size); - -/* 80D29608-80D29614 000054 000C+00 1/1 0/0 0/0 .rodata l_midna_wait_offset */ -SECTION_RODATA static u8 const l_midna_wait_offset[12] = { - 0x00, 0x00, 0x00, 0x00, 0xC3, 0x48, 0x00, 0x00, 0x44, 0x96, 0x00, 0x00, -}; -COMPILER_STRIP_GATE(0x80D29608, &l_midna_wait_offset); - -/* 80D29614-80D29618 000060 0004+00 0/1 0/0 0/0 .rodata @3726 */ -#pragma push -#pragma force_active on -SECTION_RODATA static f32 const lit_3726 = -7643.0f; -COMPILER_STRIP_GATE(0x80D29614, &lit_3726); -#pragma pop - -/* 80D29618-80D2961C 000064 0004+00 0/1 0/0 0/0 .rodata @3727 */ -#pragma push -#pragma force_active on -SECTION_RODATA static f32 const lit_3727 = -2770.0f; -COMPILER_STRIP_GATE(0x80D29618, &lit_3727); -#pragma pop - -/* 80D2961C-80D29620 000068 0004+00 0/1 0/0 0/0 .rodata @3728 */ -#pragma push -#pragma force_active on -SECTION_RODATA static f32 const lit_3728 = 56750.0f; -COMPILER_STRIP_GATE(0x80D2961C, &lit_3728); -#pragma pop - -/* 80D29620-80D29624 00006C 0004+00 0/2 0/0 0/0 .rodata @3729 */ -#pragma push -#pragma force_active on -SECTION_RODATA static f32 const lit_3729 = 5.0f; -COMPILER_STRIP_GATE(0x80D29620, &lit_3729); -#pragma pop - /* 80D27008-80D270C4 000148 00BC+00 2/2 0/0 0/0 .text setBaseMtx__15daObjWarpKBrg_cFv */ void daObjWarpKBrg_c::setBaseMtx() { - // NONMATCHING + mDoMtx_stack_c::transS(current.pos); + mpBridgeModel->setBaseTRMtx(mDoMtx_stack_c::get()); + + mDoMtx_stack_c::ZXYrotM(shape_angle); + MTXCopy(mDoMtx_stack_c::get(), mBgMtx); + + if (mpPortalModel != NULL) { + cXyz portal_pos(-7643.0f, -2770.0f + KREG_F(0), 56750.0f); + + mDoMtx_stack_c::transS(portal_pos); + mDoMtx_stack_c::scaleM(5.0f, 5.0f, 5.0f); + mpPortalModel->setBaseTRMtx(mDoMtx_stack_c::get()); + } } -/* ############################################################################################## */ -/* 80D29624-80D2962C 000070 0004+04 1/3 0/0 0/0 .rodata @3825 */ -SECTION_RODATA static u8 const lit_3825[4 + 4 /* padding */] = { - 0x00, - 0x00, - 0x00, - 0x00, - /* padding */ - 0x00, - 0x00, - 0x00, - 0x00, -}; -COMPILER_STRIP_GATE(0x80D29624, &lit_3825); - -/* 80D2962C-80D29634 000078 0008+00 1/1 0/0 0/0 .rodata @3827 */ -SECTION_RODATA static u8 const lit_3827[8] = { - 0x43, 0x30, 0x00, 0x00, 0x80, 0x00, 0x00, 0x00, -}; -COMPILER_STRIP_GATE(0x80D2962C, &lit_3827); - -/* 80D29688-80D29688 0000D4 0000+00 0/0 0/0 0/0 .rodata @stringBase0 */ -#pragma push -#pragma force_active on -SECTION_DEAD static char const* const stringBase_80D29688 = "Obj_kbrgS"; -SECTION_DEAD static char const* const stringBase_80D29692 = "Obj_kbrgD"; -SECTION_DEAD static char const* const stringBase_80D2969C = "Obj_kbrg"; -SECTION_DEAD static char const* const stringBase_80D296A5 = "PORTAL_WARP_KBRIDGE"; -SECTION_DEAD static char const* const stringBase_80D296B9 = "PORTAL_WARP_KBRIDGE_OUT"; -SECTION_DEAD static char const* const stringBase_80D296D1 = "WarpBrg"; -SECTION_DEAD static char const* const stringBase_80D296D9 = "effect_p"; -#pragma pop - -/* 80D29710-80D2971C 000000 000C+00 1/1 0/0 0/0 .data cNullVec__6Z2Calc */ -SECTION_DATA static u8 cNullVec__6Z2Calc[12] = { - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, -}; - -/* 80D2971C-80D29730 00000C 0004+10 0/0 0/0 0/0 .data @1787 */ -#pragma push -#pragma force_active on -SECTION_DATA static u32 lit_1787[1 + 4 /* padding */] = { - 0x02000201, - /* padding */ - 0x40080000, - 0x00000000, - 0x3FE00000, - 0x00000000, -}; -#pragma pop +UNK_REL_DATA /* 80D29730-80D29738 -00001 0008+00 5/5 0/0 0/0 .data l_arcName */ -SECTION_DATA static void* l_arcName[2] = { - (void*)&d_a_obj_warp_kbrg__stringBase0, - (void*)(((char*)&d_a_obj_warp_kbrg__stringBase0) + 0xA), +static char* l_arcName[2] = { + "Obj_kbrgS", + "Obj_kbrgD", }; /* 80D29738-80D2973C -00001 0004+00 3/3 0/0 0/0 .data l_evArcName */ -SECTION_DATA static void* l_evArcName = (void*)(((char*)&d_a_obj_warp_kbrg__stringBase0) + 0x14); +static char* l_evArcName = "Obj_kbrg"; /* 80D2973C-80D29744 -00001 0008+00 1/1 0/0 0/0 .data l_portal_warp_name */ -SECTION_DATA static void* l_portal_warp_name[2] = { - (void*)(((char*)&d_a_obj_warp_kbrg__stringBase0) + 0x1D), - (void*)(((char*)&d_a_obj_warp_kbrg__stringBase0) + 0x31), +static char* l_portal_warp_name[2] = { + "PORTAL_WARP_KBRIDGE", + "PORTAL_WARP_KBRIDGE_OUT", }; -/* 80D270C4-80D27300 000204 023C+00 1/0 0/0 0/0 .text Create__15daObjWarpKBrg_cFv */ -void daObjWarpKBrg_c::Create() { - // NONMATCHING -} - -/* ############################################################################################## */ -/* 80D29634-80D29638 000080 0004+00 2/5 0/0 0/0 .rodata @3964 */ -SECTION_RODATA static f32 const lit_3964 = 1.0f; -COMPILER_STRIP_GATE(0x80D29634, &lit_3964); - -/* 80D29688-80D29688 0000D4 0000+00 0/0 0/0 0/0 .rodata @stringBase0 */ -#pragma push -#pragma force_active on -SECTION_DEAD static char const* const stringBase_80D296E2 = "WAIT"; -SECTION_DEAD static char const* const stringBase_80D296E7 = "FLY"; -SECTION_DEAD static char const* const stringBase_80D296EB = "DOWN"; -SECTION_DEAD static char const* const stringBase_80D296F0 = "P_APP"; -SECTION_DEAD static char const* const stringBase_80D296F6 = "P_DIS"; -SECTION_DEAD static char const* const stringBase_80D296FC = "B_APP"; -SECTION_DEAD static char const* const stringBase_80D29702 = "BEAM"; -#pragma pop - /* 80D29744-80D29748 -00001 0004+00 4/4 0/0 0/0 .data l_staff_name */ -SECTION_DATA static void* l_staff_name = (void*)(((char*)&d_a_obj_warp_kbrg__stringBase0) + 0x49); +static char* l_staff_name = "WarpBrg"; -/* 80D29748-80D29754 -00001 000C+00 0/1 0/0 0/0 .data @4029 */ -#pragma push -#pragma force_active on -SECTION_DATA static void* lit_4029[3] = { - (void*)NULL, - (void*)0xFFFFFFFF, - (void*)actionWait__15daObjWarpKBrg_cFv, -}; -#pragma pop +/* 80D270C4-80D27300 000204 023C+00 1/0 0/0 0/0 .text Create__15daObjWarpKBrg_cFv */ +int daObjWarpKBrg_c::Create() { + switch (getNameArg()) { + case 0: + mEventType = 0; + break; + case 1: + if (!fopAcM_isSwitch(this, getSwbit())) { + setAction(ACTION_ORDER_EVENT2_e); -/* 80D29754-80D29760 -00001 000C+00 0/1 0/0 0/0 .data @4030 */ -#pragma push -#pragma force_active on -SECTION_DATA static void* lit_4030[3] = { - (void*)NULL, - (void*)0xFFFFFFFF, - (void*)actionOrderEvent__15daObjWarpKBrg_cFv, -}; -#pragma pop + if (mpBgW != NULL && mpBgW->ChkUsed()) { + dComIfG_Bgsp().Release(mpBgW); + } + } else { + mpBridgeBck->setFrame(mpBridgeBck->getEndFrame()); + mpBridgeBtk->setFrame(mpBridgeBtk->getEndFrame()); + field_0x5c8 = 1; + mpPortalBrk->setFrame(0.0f); -/* 80D29760-80D2976C -00001 000C+00 0/1 0/0 0/0 .data @4031 */ -#pragma push -#pragma force_active on -SECTION_DATA static void* lit_4031[3] = { - (void*)NULL, - (void*)0xFFFFFFFF, - (void*)actionTalkEvent__15daObjWarpKBrg_cFv, -}; -#pragma pop + setAction(ACTION_DEAD2_e); + } -/* 80D2976C-80D29778 -00001 000C+00 0/1 0/0 0/0 .data @4032 */ -#pragma push -#pragma force_active on -SECTION_DATA static void* lit_4032[3] = { - (void*)NULL, - (void*)0xFFFFFFFF, - (void*)actionWaitWarpEvent__15daObjWarpKBrg_cFv, -}; -#pragma pop + mEventType = 1; + break; + } -/* 80D29778-80D29784 -00001 000C+00 0/1 0/0 0/0 .data @4033 */ -#pragma push -#pragma force_active on -SECTION_DATA static void* lit_4033[3] = { - (void*)NULL, - (void*)0xFFFFFFFF, - (void*)actionWarpEvent__15daObjWarpKBrg_cFv, -}; -#pragma pop + if (getNameArg() == 0) { + JUTNameTab* jnt_nametab = mpBridgeModel->getModelData()->getJointTree().getJointName(); + mEffJointNo = 0xFFFF; -/* 80D29784-80D29790 -00001 000C+00 0/1 0/0 0/0 .data @4034 */ -#pragma push -#pragma force_active on -SECTION_DATA static void* lit_4034[3] = { - (void*)NULL, - (void*)0xFFFFFFFF, - (void*)actionOrderATalkEvent__15daObjWarpKBrg_cFv, -}; -#pragma pop + for (u16 i = 0; i < mpBridgeModel->getModelData()->getJointNum(); i++) { + if (strcmp(jnt_nametab->getName(i), "effect_p") == 0) { + mEffJointNo = i; + break; + } + } -/* 80D29790-80D2979C -00001 000C+00 0/1 0/0 0/0 .data @4035 */ -#pragma push -#pragma force_active on -SECTION_DATA static void* lit_4035[3] = { - (void*)NULL, - (void*)0xFFFFFFFF, - (void*)actionDead__15daObjWarpKBrg_cFv, -}; -#pragma pop + #ifdef DEBUG + if (mEffJointNo == 0xFFFF) { + // "Kakariko Bridge: joint effect_p not found" + OSReport_Error("カカリコ橋;ジョイント effect_p が見つかりませんでした\n"); + return 0; + } + #endif + } -/* 80D2979C-80D297A8 -00001 000C+00 0/1 0/0 0/0 .data @4036 */ -#pragma push -#pragma force_active on -SECTION_DATA static void* lit_4036[3] = { - (void*)NULL, - (void*)0xFFFFFFFF, - (void*)actionWait2__15daObjWarpKBrg_cFv, -}; -#pragma pop + initBaseMtx(); + fopAcM_SetMtx(this, mpBridgeModel->getBaseTRMtx()); + fopAcM_setCullSizeBox2(this, mpBridgeModel->getModelData()); -/* 80D297A8-80D297B4 -00001 000C+00 0/1 0/0 0/0 .data @4037 */ -#pragma push -#pragma force_active on -SECTION_DATA static void* lit_4037[3] = { - (void*)NULL, - (void*)0xFFFFFFFF, - (void*)actionOrderEvent2__15daObjWarpKBrg_cFv, -}; -#pragma pop + attention_info.distances[fopAc_attn_TALK_e] = 54; + attention_info.distances[fopAc_attn_SPEAK_e] = 54; -/* 80D297B4-80D297C0 -00001 000C+00 0/1 0/0 0/0 .data @4038 */ -#pragma push -#pragma force_active on -SECTION_DATA static void* lit_4038[3] = { - (void*)NULL, - (void*)0xFFFFFFFF, - (void*)actionWarpEvent2__15daObjWarpKBrg_cFv, -}; -#pragma pop + eventInfo.setArchiveName(l_evArcName); -/* 80D297C0-80D297CC -00001 000C+00 0/1 0/0 0/0 .data @4039 */ -#pragma push -#pragma force_active on -SECTION_DATA static void* lit_4039[3] = { - (void*)NULL, - (void*)0xFFFFFFFF, - (void*)actionDead2__15daObjWarpKBrg_cFv, -}; -#pragma pop + for (int i = 0; i < 2; i++) { + mEventId[i] = dComIfGp_getEventManager().getEventIdx(this, l_portal_warp_name[i], 0xFF); + } -/* 80D297CC-80D29850 0000BC 0084+00 0/1 0/0 0/0 .data l_func$4028 */ -#pragma push -#pragma force_active on -SECTION_DATA static u8 l_func[132] = { - 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, 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, 0x00, 0x00, 0x00, 0x00, -}; -#pragma pop - -/* 80D29850-80D2986C -00001 001C+00 1/1 0/0 0/0 .data action_table$4265 */ -SECTION_DATA static void* action_table[7] = { - (void*)(((char*)&d_a_obj_warp_kbrg__stringBase0) + 0x5A), - (void*)(((char*)&d_a_obj_warp_kbrg__stringBase0) + 0x5F), - (void*)(((char*)&d_a_obj_warp_kbrg__stringBase0) + 0x63), - (void*)(((char*)&d_a_obj_warp_kbrg__stringBase0) + 0x68), - (void*)(((char*)&d_a_obj_warp_kbrg__stringBase0) + 0x6E), - (void*)(((char*)&d_a_obj_warp_kbrg__stringBase0) + 0x74), - (void*)(((char*)&d_a_obj_warp_kbrg__stringBase0) + 0x7A), -}; - -/* 80D2986C-80D29888 -00001 001C+00 1/1 0/0 0/0 .data @4535 */ -SECTION_DATA static void* lit_4535[7] = { - (void*)(((char*)demoProc__15daObjWarpKBrg_cFv) + 0x3F4), - (void*)(((char*)demoProc__15daObjWarpKBrg_cFv) + 0x414), - (void*)(((char*)demoProc__15daObjWarpKBrg_cFv) + 0x4B4), - (void*)(((char*)demoProc__15daObjWarpKBrg_cFv) + 0x7C8), - (void*)(((char*)demoProc__15daObjWarpKBrg_cFv) + 0x55C), - (void*)(((char*)demoProc__15daObjWarpKBrg_cFv) + 0x584), - (void*)(((char*)demoProc__15daObjWarpKBrg_cFv) + 0x5AC), -}; - -/* 80D29888-80D298A4 -00001 001C+00 1/1 0/0 0/0 .data @4533 */ -SECTION_DATA static void* lit_4533[7] = { - (void*)(((char*)demoProc__15daObjWarpKBrg_cFv) + 0x9C), - (void*)(((char*)demoProc__15daObjWarpKBrg_cFv) + 0xD8), - (void*)(((char*)demoProc__15daObjWarpKBrg_cFv) + 0x1A8), - (void*)(((char*)demoProc__15daObjWarpKBrg_cFv) + 0x23C), - (void*)(((char*)demoProc__15daObjWarpKBrg_cFv) + 0x268), - (void*)(((char*)demoProc__15daObjWarpKBrg_cFv) + 0x310), - (void*)(((char*)demoProc__15daObjWarpKBrg_cFv) + 0x380), -}; - -/* 80D298A4-80D298C4 -00001 0020+00 1/0 0/0 0/0 .data daObjWarpKBrg_METHODS */ -static actor_method_class daObjWarpKBrg_METHODS = { - (process_method_func)daObjWarpKBrg_create1st__FP15daObjWarpKBrg_c, - (process_method_func)daObjWarpKBrg_MoveBGDelete__FP15daObjWarpKBrg_c, - (process_method_func)daObjWarpKBrg_MoveBGExecute__FP15daObjWarpKBrg_c, - 0, - (process_method_func)daObjWarpKBrg_MoveBGDraw__FP15daObjWarpKBrg_c, -}; - -/* 80D298C4-80D298F4 -00001 0030+00 0/0 0/0 1/0 .data g_profile_Obj_KakarikoBrg */ -extern actor_process_profile_definition g_profile_Obj_KakarikoBrg = { - fpcLy_CURRENT_e, // mLayerID - 3, // mListID - fpcPi_CURRENT_e, // mListPrio - PROC_Obj_KakarikoBrg, // mProcName - &g_fpcLf_Method.base, // sub_method - sizeof(daObjWarpKBrg_c), // mSize - 0, // mSizeOther - 0, // mParameters - &g_fopAc_Method.base, // sub_method - 530, // mPriority - &daObjWarpKBrg_METHODS, // sub_method - 0x00040000, // mStatus - fopAc_ACTOR_e, // mActorType - fopAc_CULLBOX_CUSTOM_e, // cullType -}; - -/* 80D298F4-80D29900 0001E4 000C+00 2/2 0/0 0/0 .data __vt__12J3DFrameCtrl */ -SECTION_DATA extern void* __vt__12J3DFrameCtrl[3] = { - (void*)NULL /* RTTI */, - (void*)NULL, - (void*)__dt__12J3DFrameCtrlFv, -}; - -/* 80D27300-80D2766C 000440 036C+00 1/0 0/0 0/0 .text CreateHeap__15daObjWarpKBrg_cFv */ -void daObjWarpKBrg_c::CreateHeap() { - // NONMATCHING + calcMidnaWaitPos(); + MoveBGExecute(); + return 1; } -/* 80D2766C-80D276B4 0007AC 0048+00 1/0 0/0 0/0 .text __dt__12J3DFrameCtrlFv */ -// J3DFrameCtrl::~J3DFrameCtrl() { -extern "C" void __dt__12J3DFrameCtrlFv() { - // NONMATCHING +/* 80D27300-80D2766C 000440 036C+00 1/0 0/0 0/0 .text CreateHeap__15daObjWarpKBrg_cFv */ +int daObjWarpKBrg_c::CreateHeap() { + J3DModelData* modelData = (J3DModelData*)dComIfG_getObjectRes(l_arcName[getNameArg()], l_bmd_idx[getNameArg()]); + JUT_ASSERT(380, modelData != 0); + + u32 sp2C = 0x11000284; + mpBridgeModel = mDoExt_J3DModel__create(modelData, 0x80000, sp2C); + if (mpBridgeModel == NULL) { + return 0; + } + + J3DAnmTextureSRTKey* pbtk = (J3DAnmTextureSRTKey*)dComIfG_getObjectRes(l_arcName[getNameArg()], l_btk_idx[getNameArg()]); + JUT_ASSERT(394, pbtk != 0); + mpBridgeBtk = new mDoExt_btkAnm(); + if (mpBridgeBtk == NULL || !mpBridgeBtk->init(modelData, pbtk, TRUE, 0, 1.0f, 0, -1)) { + return 0; + } + mpBridgeBtk->setFrame(0.0f); + + J3DAnmTransform* pbck = (J3DAnmTransform*)dComIfG_getObjectRes(l_arcName[getNameArg()], l_bck_idx[getNameArg()]); + JUT_ASSERT(407, pbck != 0); + mpBridgeBck = new mDoExt_bckAnm(); + if (mpBridgeBck == NULL || !mpBridgeBck->init(pbck, TRUE, 0, 1.0f, 0, -1, false)) { + return 0; + } + + if (getNameArg() == 1) { + modelData = (J3DModelData*)dComIfG_getObjectRes(l_arcName[getNameArg()], 10); + JUT_ASSERT(424, modelData != 0); + mpPortalModel = mDoExt_J3DModel__create(modelData, 0x80000, 0x11000284); + if (mpPortalModel == NULL) { + return 0; + } + + pbtk = (J3DAnmTextureSRTKey*)dComIfG_getObjectRes(l_arcName[getNameArg()], 18); + JUT_ASSERT(438, pbtk != 0); + mpPortalBtk = new mDoExt_btkAnm(); + if (mpPortalBtk == NULL || !mpPortalBtk->init(modelData, pbtk, TRUE, 2, 1.0f, 0, -1)) { + return 0; + } + mpPortalBtk->setFrame(0.0f); + + J3DAnmTevRegKey* pbrk = (J3DAnmTevRegKey*)dComIfG_getObjectRes(l_arcName[getNameArg()], 14); + JUT_ASSERT(451, pbrk != 0); + mpPortalBrk = new mDoExt_brkAnm(); + if (mpPortalBrk == NULL || !mpPortalBrk->init(modelData, pbrk, TRUE, 0, 1.0f, 0, -1)) { + return 0; + } + + #if VERSION == VERSION_SHIELD_DEBUG + pbrk = (J3DAnmTevRegKey*)dComIfG_getObjectRes(l_arcName[getNameArg()], 15); + JUT_ASSERT(463, pbrk != 0); + #endif + } + + return 1; } /* 80D276B4-80D2781C 0007F4 0168+00 1/1 0/0 0/0 .text create1st__15daObjWarpKBrg_cFv */ -void daObjWarpKBrg_c::create1st() { - // NONMATCHING +int daObjWarpKBrg_c::create1st() { + if (!mPrmInit) { + mMsgID = home.angle.z; + mPrmInit = TRUE; + home.angle.z = 0; + current.angle.z = 0; + shape_angle.z = 0; + } + + switch (getNameArg()) { + case 0: + if (dComIfGs_isEventBit(dSv_event_flag_c::saveBitLabels[51])) { + // "Kakariko Bridge: already warped so creation cancelled!" + OS_REPORT("\x1B[43;30mカカリコ橋:ワープさせたので発生取り消し!\n\x1B[m"); + return cPhs_ERROR_e; + } + break; + case 1: + if (!dComIfGs_isEventBit(dSv_event_flag_c::saveBitLabels[51])) { + // "Kakariko Bridge: not warped so creation cancelled!" + OS_REPORT("\x1B[43;30mカカリコ橋:ワープさせてないので発生取り消し!\n\x1B[m"); + return cPhs_ERROR_e; + } + break; + } + + int phase_state = dComIfG_resLoad(&mEvPhase, l_evArcName); + if (phase_state != cPhs_COMPLEATE_e) { + return phase_state; + } + + phase_state = dComIfG_resLoad(&mPhase, l_arcName[getNameArg()]); + if (phase_state == cPhs_COMPLEATE_e) { + phase_state = MoveBGCreate(l_arcName[getNameArg()], l_dzb_idx[getNameArg()], dBgS_MoveBGProc_TypicalRotY, l_heap_size[getNameArg()], NULL); + if (phase_state == cPhs_ERROR_e) { + return phase_state; + } + } + + return phase_state; } /* 80D2781C-80D27890 00095C 0074+00 1/0 0/0 0/0 .text Execute__15daObjWarpKBrg_cFPPA3_A4_f */ -void daObjWarpKBrg_c::Execute(f32 (**param_0)[3][4]) { - // NONMATCHING +int daObjWarpKBrg_c::Execute(f32 (**param_0)[3][4]) { + #if VERSION == VERSION_SHIELD_DEBUG + calcMidnaWaitPos(); + #endif + + if (getNameArg() == 0 && daPy_py_c::getMidnaActor() == NULL) { + return 1; + } + + event_proc_call(); + + *param_0 = &mBgMtx; + setBaseMtx(); + return 1; } /* 80D27890-80D27A38 0009D0 01A8+00 1/1 0/0 0/0 .text event_proc_call__15daObjWarpKBrg_cFv */ void daObjWarpKBrg_c::event_proc_call() { - // NONMATCHING -} + static void (daObjWarpKBrg_c::*l_func[])() = { + &daObjWarpKBrg_c::actionWait, + &daObjWarpKBrg_c::actionOrderEvent, + &daObjWarpKBrg_c::actionTalkEvent, + &daObjWarpKBrg_c::actionWaitWarpEvent, + &daObjWarpKBrg_c::actionWarpEvent, + &daObjWarpKBrg_c::actionOrderATalkEvent, + &daObjWarpKBrg_c::actionDead, + &daObjWarpKBrg_c::actionWait2, + &daObjWarpKBrg_c::actionOrderEvent2, + &daObjWarpKBrg_c::actionWarpEvent2, + &daObjWarpKBrg_c::actionDead2, + }; -/* ############################################################################################## */ -/* 80D29638-80D2963C 000084 0004+00 1/1 0/0 0/0 .rodata @4071 */ -SECTION_RODATA static f32 const lit_4071 = -1.0f; -COMPILER_STRIP_GATE(0x80D29638, &lit_4071); + attention_info.flags = 0; + + if (field_0x69b != 0) { + field_0x69b--; + } + + (this->*l_func[mAction])(); + + if (!eventInfo.chkCondition(dEvtCnd_CANTALK_e)) { + field_0x69a = 0; + } +} /* 80D27A38-80D27B2C 000B78 00F4+00 1/1 0/0 0/0 .text orderZHintEvent__15daObjWarpKBrg_cFv */ void daObjWarpKBrg_c::orderZHintEvent() { - // NONMATCHING + daMidna_c* midna_p = (daMidna_c*)daPy_py_c::getMidnaActor(); + daPy_py_c* player_p = daPy_getPlayerActorClass(); + + if (checkTalkDistance()) { + eventInfo.onCondition(dEvtCnd_CANTALK_e); + if (!player_p->checkPlayerFly()) { + dComIfGp_att_ZHintRequest(this, 0x1FF); + + if (field_0x69a == 0) { + field_0x69a = 1; + if (field_0x69b == 0) { + mDoAud_seStart(Z2SE_NAVI_CALLVOICE, NULL, 0, 0); + } + field_0x69b = 60; + } + } + } } /* 80D27B2C-80D27C6C 000C6C 0140+00 1/0 0/0 0/0 .text actionWait__15daObjWarpKBrg_cFv */ void daObjWarpKBrg_c::actionWait() { - // NONMATCHING + daMidna_c* midna_p = (daMidna_c*)daPy_py_c::getMidnaActor(); + daPy_py_c* player_p = daPy_getPlayerActorClass(); + + if (fopAcM_isSwitch(this, getSwbit2()) && dComIfGs_isEventBit(dSv_event_flag_c::saveBitLabels[54])) { + setAction(ACTION_ORDER_EVENT_e); + actionOrderEvent(); + } + + if (dComIfGp_evmng_startCheck(mEventId[mEventType])) { + if (strcmp(dComIfGp_getEventManager().getRunEventName(), "PORTAL_WARP_KBRIDGE") == 0) { + midna_p->onTagWaitPosPortalObj(&mMidnaWaitPos); + dComIfGp_getEvent().setPt2(this); + mStaffId = dComIfGp_evmng_getMyStaffId(l_staff_name, NULL, 0); + setAction(ACTION_WARP_EVENT_e); + demoProc(); + } + } } -/* ############################################################################################## */ -/* 80D2963C-80D29644 000088 0008+00 0/1 0/0 0/0 .rodata @4147 */ -#pragma push -#pragma force_active on -SECTION_RODATA static u8 const lit_4147[8] = { - 0x3F, 0xE0, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, -}; -COMPILER_STRIP_GATE(0x80D2963C, &lit_4147); -#pragma pop - -/* 80D29644-80D2964C 000090 0008+00 0/1 0/0 0/0 .rodata @4148 */ -#pragma push -#pragma force_active on -SECTION_RODATA static u8 const lit_4148[8] = { - 0x40, 0x08, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, -}; -COMPILER_STRIP_GATE(0x80D29644, &lit_4148); -#pragma pop - -/* 80D2964C-80D29654 000098 0008+00 0/1 0/0 0/0 .rodata @4149 */ -#pragma push -#pragma force_active on -SECTION_RODATA static u8 const lit_4149[8] = { - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, -}; -COMPILER_STRIP_GATE(0x80D2964C, &lit_4149); -#pragma pop - /* 80D27C6C-80D27E08 000DAC 019C+00 2/1 0/0 0/0 .text actionOrderEvent__15daObjWarpKBrg_cFv */ void daObjWarpKBrg_c::actionOrderEvent() { - // NONMATCHING + daMidna_c* midna_p = (daMidna_c*)daPy_py_c::getMidnaActor(); + + if (eventInfo.checkCommandTalk()) { + midna_p->onTagWaitPosPortalObj(&mMidnaWaitPos); + if (midna_p->current.pos.abs(mMidnaWaitPos) < 5.0f) { + setAction(ACTION_TALK_EVENT_e); + mMsgFlow.init(this, getMsgID(), 0, NULL); + } + } else { + orderZHintEvent(); + } } /* 80D27E08-80D27ED0 000F48 00C8+00 1/0 0/0 0/0 .text actionWaitWarpEvent__15daObjWarpKBrg_cFv */ void daObjWarpKBrg_c::actionWaitWarpEvent() { - // NONMATCHING + daMidna_c* midna_p = (daMidna_c*)daPy_py_c::getMidnaActor(); + + if (dComIfGp_evmng_startCheck(mEventId[mEventType])) { + midna_p->onTagWaitPosPortalObj(&mMidnaWaitPos); + dComIfGp_getEvent().setPt2(this); + mStaffId = dComIfGp_evmng_getMyStaffId(l_staff_name, NULL, 0); + setAction(ACTION_WARP_EVENT_e); + demoProc(); + } } /* 80D27ED0-80D28040 001010 0170+00 1/0 0/0 0/0 .text actionOrderATalkEvent__15daObjWarpKBrg_cFv */ void daObjWarpKBrg_c::actionOrderATalkEvent() { - // NONMATCHING + daMidna_c* midna_p = (daMidna_c*)daPy_py_c::getMidnaActor(); + + if (eventInfo.checkCommandTalk()) { + setAction(ACTION_TALK_EVENT_e); + mMsgFlow.init(this, getMsgID(), 0, NULL); + } else if (dComIfGp_evmng_startCheck(mEventId[mEventType])) { + midna_p->onTagWaitPosPortalObj(&mMidnaWaitPos); + dComIfGp_getEvent().setPt2(this); + mStaffId = dComIfGp_evmng_getMyStaffId(l_staff_name, NULL, 0); + setAction(ACTION_WARP_EVENT_e); + demoProc(); + } else if (checkTalkDistance()) { + midna_p->onTagWaitPosPortalObj(&mMidnaWaitPos); + dComIfGp_TargetWarpPt_set(3); + eventInfo.onCondition(dEvtCnd_CANTALK_e); + attention_info.flags = 0xA; + } else { + midna_p->offTagWaitPos(); + setAction(ACTION_WAIT_e); + } } /* 80D28040-80D280CC 001180 008C+00 1/0 0/0 0/0 .text actionTalkEvent__15daObjWarpKBrg_cFv */ void daObjWarpKBrg_c::actionTalkEvent() { - // NONMATCHING + if (mMsgFlow.doFlow(this, NULL, 0)) { + dComIfGp_event_reset(); + field_0x5d9 = 1; + + int sp8; + if (mMsgFlow.getEventId(&sp8) == 11) { + dMeter2Info_setPauseStatus(6); + } + + setAction(ACTION_ORDER_A_TALK_EVENT_e); + // "Kakariko Bridge: talk end!" + OS_REPORT_ERROR("カカリコ橋:会話終了!\n"); + } } /* 80D280CC-80D28144 00120C 0078+00 1/0 0/0 0/0 .text actionWarpEvent__15daObjWarpKBrg_cFv */ void daObjWarpKBrg_c::actionWarpEvent() { - // NONMATCHING + if (!dComIfGp_evmng_endCheck(mEventId[mEventType])) { + dComIfGp_getEvent().setSkipProc(this, eventCallBack, 0); + demoProc(); + } } /* 80D28144-80D28148 001284 0004+00 1/0 0/0 0/0 .text actionDead__15daObjWarpKBrg_cFv */ -void daObjWarpKBrg_c::actionDead() { - /* empty function */ -} +void daObjWarpKBrg_c::actionDead() {} /* 80D28148-80D2814C 001288 0004+00 1/0 0/0 0/0 .text actionWait2__15daObjWarpKBrg_cFv */ -void daObjWarpKBrg_c::actionWait2() { - /* empty function */ -} +void daObjWarpKBrg_c::actionWait2() {} /* 80D2814C-80D281E4 00128C 0098+00 1/0 0/0 0/0 .text actionOrderEvent2__15daObjWarpKBrg_cFv */ void daObjWarpKBrg_c::actionOrderEvent2() { - // NONMATCHING + if (eventInfo.checkCommandDemoAccrpt()) { + setAction(ACTION_WARP_EVENT2_e); + mStaffId = dComIfGp_evmng_getMyStaffId(l_staff_name, NULL, 0); + demoProc(); + } else { + fopAcM_orderOtherEventId(this, mEventId[mEventType], 0xFF, 0xFFFF, 2, 1); + } } /* 80D281E4-80D28248 001324 0064+00 1/0 0/0 0/0 .text actionWarpEvent2__15daObjWarpKBrg_cFv */ void daObjWarpKBrg_c::actionWarpEvent2() { - // NONMATCHING + if (dComIfGp_evmng_endCheck(mEventId[mEventType])) { + setAction(ACTION_DEAD2_e); + } else { + demoProc(); + } } /* 80D28248-80D2824C 001388 0004+00 1/0 0/0 0/0 .text actionDead2__15daObjWarpKBrg_cFv */ -void daObjWarpKBrg_c::actionDead2() { - /* empty function */ -} - -/* ############################################################################################## */ -/* 80D29688-80D29688 0000D4 0000+00 0/0 0/0 0/0 .rodata @stringBase0 */ -#pragma push -#pragma force_active on -SECTION_DEAD static char const* const stringBase_80D29707 = "Timer"; -#pragma pop +void daObjWarpKBrg_c::actionDead2() {} /* 80D2824C-80D28A50 00138C 0804+00 8/6 0/0 0/0 .text demoProc__15daObjWarpKBrg_cFv */ void daObjWarpKBrg_c::demoProc() { - // NONMATCHING + static char* action_table[7] = { + "WAIT", + "FLY", + "DOWN", + "P_APP", + "P_DIS", + "B_APP", + "BEAM", + }; + + daPy_py_c* player_p = daPy_getPlayerActorClass(); + daMidna_c* midna_p = (daMidna_c*)daPy_py_c::getMidnaActor(); + int act_idx = dComIfGp_evmng_getMyActIdx(mStaffId, action_table, 7, 0, 0); + + if (dComIfGp_evmng_getIsAddvance(mStaffId)) { + switch (act_idx) { + case 0: { + int* timer_p = dComIfGp_evmng_getMyIntegerP(mStaffId, "Timer"); + if (timer_p == NULL) { + mTimer = 1; + } else { + mTimer = *timer_p; + } + break; + } + case 1: + mpBridgeBck->setPlaySpeed(1.0f); + mpBridgeBtk->setPlaySpeed(1.0f); + + shape_angle.setall(0); + field_0x5c8 = 1; + setSrcEffect(); + fopAcM_seStart(this, Z2SE_OBJ_KKRK_BRG_LIFT_UP, 0); + + if (mpBgW != NULL && mpBgW->ChkUsed()) { + dComIfG_Bgsp().Release(mpBgW); + } + + if (dComIfGp_TransportWarp_check()) { + dComIfGs_onEventBit(dSv_event_flag_c::saveBitLabels[51]); + // "Kakariko Bridge: Warp destination is correct" + OS_REPORT("\x1B[43;30mカカリコ橋:ワープ先正解です\n\x1B[m"); + } + break; + case 2: + mpBridgeBtk->setPlaySpeed(1.0f); + mpBridgeBck->setPlaySpeed(1.0f); + + if (mpBgW != NULL) { + dComIfG_Bgsp().Regist(mpBgW, this); + } + + mDoAud_seStart(Z2SE_OBJ_KKRK_BRG_LIFT_DW, &mObjPos, 0, dComIfGp_getReverb(fopAcM_GetRoomNo(this))); + player_p->onPlayerNoDraw(); + player_p->onPlayerShadowNoDraw(); + break; + case 3: + mpPortalBrk->setFrame(mpPortalBrk->getEndFrame()); + break; + case 4: + mpPortalBrk->init((J3DModelData*)dComIfG_getObjectRes(l_arcName[getNameArg()], 10), (J3DAnmTevRegKey*)dComIfG_getObjectRes(l_arcName[getNameArg()], 15), 0, 0, 1.0f, 0, -1); + mpPortalBrk->setFrame(0.0f); + mpPortalBrk->setPlaySpeed(1.0f); + mpPortalBtk->setPlaySpeed(1.0f); + break; + case 5: + field_0x5c8 = 1; + mTimer = 35; + setDstEffect(); + calcObjPos(); + mDoAud_seStart(Z2SE_OBJ_KKRK_BRG_WARP_OUT, &mObjPos, 0, dComIfGp_getReverb(fopAcM_GetRoomNo(this))); + break; + case 6: + setBindEffect(); + fopAcM_seStart(this, Z2SE_MDN_WARP_MAGIC, 0); + break; + } + } + + cXyz effpos; + cXyz sp28; + csXyz effrot; + switch (act_idx) { + case 0: + if (cLib_calcTimer(&mTimer) == 0) { + dComIfGp_evmng_cutEnd(mStaffId); + } + break; + case 1: { + int temp_r25 = mpBridgeBtk->play(); + temp_r25 &= mpBridgeBck->play(); + + if (240.0f == mpBridgeBck->getFrame()) { + calcObjPos(); + mDoAud_seStart(Z2SE_OBJ_KKRK_BRG_WARP_IN, &mObjPos, 0, dComIfGp_getReverb(fopAcM_GetRoomNo(this))); + // "Kakariko Bridge: Warp SE" + OS_REPORT("カカリコ橋:ワープSE\n"); + } + + if (temp_r25 != 0) { + dComIfGp_evmng_cutEnd(mStaffId); + } + + followSrcEffect(); + break; + } + case 2: + mpBridgeBtk->play(); + + if (180.0f == mpBridgeBck->getFrame()) { + dComIfGp_getVibration().StartShock(8, 0x1F, cXyz(0.0f, 1.0f, 0.0f)); + } + + if (mpBridgeBck->play()) { + player_p->offPlayerNoDraw(); + player_p->offPlayerShadowNoDraw(); + fopAcM_onSwitch(this, getSwbit()); + dComIfGp_evmng_cutEnd(mStaffId); + } + + followDstEffect(); + calcObjPos(); + break; + case 4: + if (mpPortalBrk->play()) { + dComIfGp_evmng_cutEnd(mStaffId); + } + endDstEffect(); + break; + case 5: + if (cLib_calcTimer(&mTimer) == 0) { + dComIfGp_evmng_cutEnd(mStaffId); + } + followDstEffect(); + break; + case 6: { + mDoMtx_stack_c::copy(midna_p->getMtxHairTop()); + mDoMtx_stack_c::transM(-10.0f, -65.0f, 55.0f); + mDoMtx_stack_c::multVecZero(&sp28); + + mDoMtx_stack_c::copy(mpBridgeModel->getAnmMtx(0)); + mDoMtx_stack_c::transM(0.0f, -180.0f, 0.0f); + mDoMtx_stack_c::multVecZero(&effpos); + + effrot.y = cLib_targetAngleY(&effpos, &sp28); + effrot.x = cLib_targetAngleX(&sp28, &effpos); + effrot.z = 0; + + f32 h_scale = 0.01f * effpos.abs(sp28); + + JPABaseEmitter* emitter_p = dComIfGp_particle_set(0x8B53, &effpos, &effrot, NULL, 0xFF, NULL, -1, NULL, NULL, NULL); + if (emitter_p != NULL) { + emitter_p->setGlobalParticleHeightScale(h_scale); + } + + followBindEffect(); + dComIfGp_evmng_cutEnd(mStaffId); + break; + } + default: + dComIfGp_evmng_cutEnd(mStaffId); + break; + } + + if (mpPortalBtk != NULL) { + mpPortalBtk->play(); + } } /* 80D28A50-80D28AE0 001B90 0090+00 1/1 0/0 0/0 .text calcObjPos__15daObjWarpKBrg_cFv */ void daObjWarpKBrg_c::calcObjPos() { - // NONMATCHING + J3DAnmTransform* pbck = (J3DAnmTransform*)dComIfG_getObjectRes(l_arcName[getNameArg()], l_bck_idx[getNameArg()]); + JUT_ASSERT(1191, pbck != 0); + + J3DTransformInfo transinfo; + pbck->getTransform(0, &transinfo); + mObjPos.x = transinfo.mTranslate.x; + mObjPos.y = transinfo.mTranslate.y; + mObjPos.z = transinfo.mTranslate.z; } -/* ############################################################################################## */ -/* 80D29654-80D29658 0000A0 0004+00 0/0 0/0 0/0 .rodata @4526 */ -#pragma push -#pragma force_active on -SECTION_RODATA static f32 const lit_4526 = 240.0f; -COMPILER_STRIP_GATE(0x80D29654, &lit_4526); -#pragma pop - -/* 80D29658-80D2965C 0000A4 0004+00 0/0 0/0 0/0 .rodata @4527 */ -#pragma push -#pragma force_active on -SECTION_RODATA static f32 const lit_4527 = 180.0f; -COMPILER_STRIP_GATE(0x80D29658, &lit_4527); -#pragma pop - -/* 80D2965C-80D29660 0000A8 0004+00 0/0 0/0 0/0 .rodata @4528 */ -#pragma push -#pragma force_active on -SECTION_RODATA static f32 const lit_4528 = -10.0f; -COMPILER_STRIP_GATE(0x80D2965C, &lit_4528); -#pragma pop - -/* 80D29660-80D29664 0000AC 0004+00 0/0 0/0 0/0 .rodata @4529 */ -#pragma push -#pragma force_active on -SECTION_RODATA static f32 const lit_4529 = -65.0f; -COMPILER_STRIP_GATE(0x80D29660, &lit_4529); -#pragma pop - -/* 80D29664-80D29668 0000B0 0004+00 0/0 0/0 0/0 .rodata @4530 */ -#pragma push -#pragma force_active on -SECTION_RODATA static f32 const lit_4530 = 55.0f; -COMPILER_STRIP_GATE(0x80D29664, &lit_4530); -#pragma pop - -/* 80D29668-80D2966C 0000B4 0004+00 0/0 0/0 0/0 .rodata @4531 */ -#pragma push -#pragma force_active on -SECTION_RODATA static f32 const lit_4531 = -180.0f; -COMPILER_STRIP_GATE(0x80D29668, &lit_4531); -#pragma pop - -/* 80D2966C-80D29670 0000B8 0004+00 0/0 0/0 0/0 .rodata @4532 */ -#pragma push -#pragma force_active on -SECTION_RODATA static f32 const lit_4532 = 1.0f / 100.0f; -COMPILER_STRIP_GATE(0x80D2966C, &lit_4532); -#pragma pop - -/* 80D29670-80D29674 0000BC 0004+00 1/1 0/0 0/0 .rodata @4576 */ -SECTION_RODATA static f32 const lit_4576 = 10.0f; -COMPILER_STRIP_GATE(0x80D29670, &lit_4576); - -/* 80D29674-80D2967C 0000C0 0004+04 1/1 0/0 0/0 .rodata @4577 */ -SECTION_RODATA static f32 const lit_4577[1 + 1 /* padding */] = { - 500.0f, - /* padding */ - 0.0f, -}; -COMPILER_STRIP_GATE(0x80D29674, &lit_4577); - -/* 80D2967C-80D29684 0000C8 0008+00 1/1 0/0 0/0 .rodata @4579 */ -SECTION_RODATA static u8 const lit_4579[8] = { - 0x43, 0x30, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, -}; -COMPILER_STRIP_GATE(0x80D2967C, &lit_4579); - /* 80D28AE0-80D28B7C 001C20 009C+00 2/2 0/0 0/0 .text checkTalkDistance__15daObjWarpKBrg_cFv */ -void daObjWarpKBrg_c::checkTalkDistance() { - // NONMATCHING -} +bool daObjWarpKBrg_c::checkTalkDistance() { + daPy_py_c* player = daPy_getPlayerActorClass(); + f32 player_dist = fopAcM_searchPlayerDistanceXZ(this); -/* ############################################################################################## */ -/* 80D29684-80D29688 0000D0 0004+00 1/1 0/0 0/0 .rodata @4590 */ -SECTION_RODATA static f32 const lit_4590 = 250.0f; -COMPILER_STRIP_GATE(0x80D29684, &lit_4590); + if ((getArg0() != 0xFF && player_dist < (10.0f * getArg0())) || (getArg0() == 0xFF && player_dist < 500.0f)) { + return true; + } else { + return false; + } +} /* 80D28B7C-80D28C10 001CBC 0094+00 1/1 0/0 0/0 .text calcMidnaWaitPos__15daObjWarpKBrg_cFv */ void daObjWarpKBrg_c::calcMidnaWaitPos() { - // NONMATCHING + cXyz offset(l_midna_wait_offset); + mDoMtx_stack_c::transS(current.pos); + mDoMtx_stack_c::ZXYrotM(shape_angle); + mDoMtx_stack_c::multVec(&offset, &mMidnaWaitPos); + + attention_info.position = mMidnaWaitPos; + attention_info.position.y += 250.0f; } /* 80D28C10-80D28CDC 001D50 00CC+00 1/1 0/0 0/0 .text setBindEffect__15daObjWarpKBrg_cFv */ void daObjWarpKBrg_c::setBindEffect() { - // NONMATCHING + for (int i = 0; i < 4; i++) { + mBindEfEmitterID[i] = dComIfGp_particle_set(l_bind_eff[i], ¤t.pos, &home.angle, &scale, 0xFF, NULL, -1, NULL, NULL, NULL); + if (mBindEfEmitterID[i] != NULL) { + mBindEfEmitterID[i]->becomeImmortalEmitter(); + } + } } /* 80D28CDC-80D28D4C 001E1C 0070+00 1/1 0/0 0/0 .text followBindEffect__15daObjWarpKBrg_cFv */ void daObjWarpKBrg_c::followBindEffect() { - // NONMATCHING + for (int i = 0; i < 4; i++) { + if (mBindEfEmitterID[i] != NULL) { + mBindEfEmitterID[i]->setGlobalRTMatrix(mpBridgeModel->getAnmMtx(0)); + } + } } /* 80D28D4C-80D28E9C 001E8C 0150+00 1/1 0/0 0/0 .text setSrcEffect__15daObjWarpKBrg_cFv */ void daObjWarpKBrg_c::setSrcEffect() { - // NONMATCHING + for (int i = 0; i < 5; i++) { + mDisappEfEmitterID[i] = dComIfGp_particle_set(l_disapp_eff[i], ¤t.pos, &home.angle, &scale, 0xFF, NULL, -1, NULL, NULL, NULL); + if (mDisappEfEmitterID[i] != NULL) { + mDisappEfEmitterID[i]->becomeImmortalEmitter(); + } + } + + for (int i = 0; i < 3; i++) { + mStartEfEmitterID[i] = dComIfGp_particle_set(l_start_eff[i], ¤t.pos, &home.angle, &scale, 0xFF, NULL, -1, NULL, NULL, NULL); + if (mStartEfEmitterID[i] != NULL) { + mStartEfEmitterID[i]->becomeImmortalEmitter(); + } + } } /* 80D28E9C-80D28FEC 001FDC 0150+00 1/1 0/0 0/0 .text setDstEffect__15daObjWarpKBrg_cFv */ void daObjWarpKBrg_c::setDstEffect() { - // NONMATCHING + for (int i = 0; i < 6; i++) { + mAppEfEmitterID[i] = dComIfGp_particle_set(l_app_eff[i], ¤t.pos, &home.angle, &scale, 0xFF, NULL, -1, NULL, NULL, NULL); + if (mAppEfEmitterID[i] != NULL) { + mAppEfEmitterID[i]->becomeImmortalEmitter(); + } + } + + for (int i = 0; i < 2; i++) { + mEndEfEmitterID[i] = dComIfGp_particle_set(l_end_eff[i], ¤t.pos, &home.angle, &scale, 0xFF, NULL, -1, NULL, NULL, NULL); + if (mEndEfEmitterID[i] != NULL) { + mEndEfEmitterID[i]->becomeImmortalEmitter(); + } + } } /* 80D28FEC-80D290A8 00212C 00BC+00 1/1 0/0 0/0 .text followSrcEffect__15daObjWarpKBrg_cFv */ void daObjWarpKBrg_c::followSrcEffect() { - // NONMATCHING + for (int i = 0; i < 5; i++) { + if (mDisappEfEmitterID[i] != NULL) { + mDisappEfEmitterID[i]->setGlobalRTMatrix(mpBridgeModel->getAnmMtx(mEffJointNo)); + } + } + + for (int i = 0; i < 3; i++) { + if (mStartEfEmitterID[i] != NULL) { + mStartEfEmitterID[i]->setGlobalRTMatrix(mpBridgeModel->getAnmMtx(0)); + } + } } /* 80D290A8-80D29158 0021E8 00B0+00 1/1 0/0 0/0 .text followDstEffect__15daObjWarpKBrg_cFv */ void daObjWarpKBrg_c::followDstEffect() { - // NONMATCHING + for (int i = 0; i < 6; i++) { + if (mAppEfEmitterID[i] != NULL) { + mAppEfEmitterID[i]->setGlobalRTMatrix(mpBridgeModel->getAnmMtx(0)); + } + } + + for (int i = 0; i < 2; i++) { + if (mEndEfEmitterID[i] != NULL) { + mEndEfEmitterID[i]->setGlobalRTMatrix(mpBridgeModel->getAnmMtx(0)); + } + } } /* 80D29158-80D291FC 002298 00A4+00 1/1 0/0 0/0 .text endSrcEffect__15daObjWarpKBrg_cFv */ void daObjWarpKBrg_c::endSrcEffect() { - // NONMATCHING + for (int i = 0; i < 5; i++) { + if (mDisappEfEmitterID[i] != NULL) { + mDisappEfEmitterID[i]->becomeInvalidEmitter(); + mDisappEfEmitterID[i]->quitImmortalEmitter(); + mDisappEfEmitterID[i] = NULL; + } + } + + for (int i = 0; i < 3; i++) { + if (mStartEfEmitterID[i] != NULL) { + mStartEfEmitterID[i]->becomeInvalidEmitter(); + mStartEfEmitterID[i]->quitImmortalEmitter(); + mStartEfEmitterID[i] = NULL; + } + } } /* 80D291FC-80D292A0 00233C 00A4+00 2/2 0/0 0/0 .text endDstEffect__15daObjWarpKBrg_cFv */ void daObjWarpKBrg_c::endDstEffect() { - // NONMATCHING + for (int i = 0; i < 6; i++) { + if (mAppEfEmitterID[i] != NULL) { + mAppEfEmitterID[i]->becomeInvalidEmitter(); + mAppEfEmitterID[i]->quitImmortalEmitter(); + mAppEfEmitterID[i] = NULL; + } + } + + for (int i = 0; i < 2; i++) { + if (mEndEfEmitterID[i] != NULL) { + mEndEfEmitterID[i]->becomeInvalidEmitter(); + mEndEfEmitterID[i]->quitImmortalEmitter(); + mEndEfEmitterID[i] = NULL; + } + } } /* 80D292A0-80D29448 0023E0 01A8+00 1/0 0/0 0/0 .text Draw__15daObjWarpKBrg_cFv */ -void daObjWarpKBrg_c::Draw() { - // NONMATCHING +int daObjWarpKBrg_c::Draw() { + if (getNameArg() == 1) { + g_env_light.settingTevStruct(32, ¤t.pos, &tevStr); + } else { + g_env_light.settingTevStruct(16, ¤t.pos, &tevStr); + } + + g_env_light.setLightTevColorType_MAJI(mpBridgeModel, &tevStr); + dComIfGd_setListBG(); + + if (field_0x5c8 && mpBridgeBck != NULL) { + mpBridgeBck->entry(mpBridgeModel->getModelData()); + } + + if (mpBridgeBtk != NULL) { + mpBridgeBtk->entry(mpBridgeModel->getModelData()); + } + + mDoExt_modelUpdateDL(mpBridgeModel); + mDoExt_bckAnmRemove(mpBridgeModel->getModelData()); + dComIfGd_setList(); + + if (mpPortalModel != NULL) { + dComIfGd_setListDark(); + mpPortalBtk->entry(mpPortalModel->getModelData()); + mpPortalBrk->entry(mpPortalModel->getModelData()); + mDoExt_modelUpdateDL(mpPortalModel); + mDoExt_brkAnmRemove(mpBridgeModel->getModelData()); + mDoExt_btkAnmRemove(mpBridgeModel->getModelData()); + dComIfGd_setList(); + } + + return 1; } /* 80D29448-80D294B0 002588 0068+00 1/0 0/0 0/0 .text Delete__15daObjWarpKBrg_cFv */ -void daObjWarpKBrg_c::Delete() { - // NONMATCHING -} +int daObjWarpKBrg_c::Delete() { + endSrcEffect(); + endDstEffect(); -/* ############################################################################################## */ -/* 80D29900-80D29928 0001F0 0028+00 1/1 0/0 0/0 .data __vt__15daObjWarpKBrg_c */ -SECTION_DATA extern void* __vt__15daObjWarpKBrg_c[10] = { - (void*)NULL /* RTTI */, - (void*)NULL, - (void*)CreateHeap__15daObjWarpKBrg_cFv, - (void*)Create__15daObjWarpKBrg_cFv, - (void*)Execute__15daObjWarpKBrg_cFPPA3_A4_f, - (void*)Draw__15daObjWarpKBrg_cFv, - (void*)Delete__15daObjWarpKBrg_cFv, - (void*)IsDelete__16dBgS_MoveBgActorFv, - (void*)ToFore__16dBgS_MoveBgActorFv, - (void*)ToBack__16dBgS_MoveBgActorFv, -}; + dComIfG_resDelete(&mPhase, l_arcName[getNameArg()]); + dComIfG_resDelete(&mEvPhase, l_evArcName); + return 1; +} /* 80D294B0-80D29524 0025F0 0074+00 1/0 0/0 0/0 .text daObjWarpKBrg_create1st__FP15daObjWarpKBrg_c */ -static void daObjWarpKBrg_create1st(daObjWarpKBrg_c* param_0) { - // NONMATCHING +static int daObjWarpKBrg_create1st(daObjWarpKBrg_c* i_this) { + fopAcM_SetupActor(i_this, daObjWarpKBrg_c); + return i_this->create1st(); } /* 80D29524-80D29544 002664 0020+00 1/0 0/0 0/0 .text * daObjWarpKBrg_MoveBGDelete__FP15daObjWarpKBrg_c */ -static void daObjWarpKBrg_MoveBGDelete(daObjWarpKBrg_c* param_0) { - // NONMATCHING +static int daObjWarpKBrg_MoveBGDelete(daObjWarpKBrg_c* i_this) { + return i_this->MoveBGDelete(); } /* 80D29544-80D29564 002684 0020+00 1/0 0/0 0/0 .text * daObjWarpKBrg_MoveBGExecute__FP15daObjWarpKBrg_c */ -static void daObjWarpKBrg_MoveBGExecute(daObjWarpKBrg_c* param_0) { - // NONMATCHING +static int daObjWarpKBrg_MoveBGExecute(daObjWarpKBrg_c* i_this) { + return i_this->MoveBGExecute(); } /* 80D29564-80D29590 0026A4 002C+00 1/0 0/0 0/0 .text * daObjWarpKBrg_MoveBGDraw__FP15daObjWarpKBrg_c */ -static void daObjWarpKBrg_MoveBGDraw(daObjWarpKBrg_c* param_0) { - // NONMATCHING +static int daObjWarpKBrg_MoveBGDraw(daObjWarpKBrg_c* i_this) { + return i_this->MoveBGDraw(); } -/* 80D29590-80D295AC 0026D0 001C+00 1/1 0/0 0/0 .text cLib_calcTimer__FPUc */ -extern "C" void func_80D29590(void* _this, u8* param_0) { - // NONMATCHING -} +/* 80D298A4-80D298C4 -00001 0020+00 1/0 0/0 0/0 .data daObjWarpKBrg_METHODS */ +static actor_method_class daObjWarpKBrg_METHODS = { + (process_method_func)daObjWarpKBrg_create1st, + (process_method_func)daObjWarpKBrg_MoveBGDelete, + (process_method_func)daObjWarpKBrg_MoveBGExecute, + (process_method_func)NULL, + (process_method_func)daObjWarpKBrg_MoveBGDraw, +}; -/* 80D29688-80D29688 0000D4 0000+00 0/0 0/0 0/0 .rodata @stringBase0 */ +/* 80D298C4-80D298F4 -00001 0030+00 0/0 0/0 1/0 .data g_profile_Obj_KakarikoBrg */ +extern actor_process_profile_definition g_profile_Obj_KakarikoBrg = { + fpcLy_CURRENT_e, // mLayerID + 3, // mListID + fpcPi_CURRENT_e, // mListPrio + PROC_Obj_KakarikoBrg, // mProcName + &g_fpcLf_Method.base, // sub_method + sizeof(daObjWarpKBrg_c), // mSize + 0, // mSizeOther + 0, // mParameters + &g_fopAc_Method.base, // sub_method + 530, // mPriority + &daObjWarpKBrg_METHODS, // sub_method + 0x00040000, // mStatus + fopAc_ACTOR_e, // mActorType + fopAc_CULLBOX_CUSTOM_e, // cullType +}; diff --git a/src/d/actor/d_a_obj_warp_obrg.cpp b/src/d/actor/d_a_obj_warp_obrg.cpp index 80e38f04236..a7867f10ffd 100644 --- a/src/d/actor/d_a_obj_warp_obrg.cpp +++ b/src/d/actor/d_a_obj_warp_obrg.cpp @@ -4,722 +4,641 @@ */ #include "d/actor/d_a_obj_warp_obrg.h" -#include "dol2asm.h" +#include "d/d_com_inf_game.h" +#include "d/d_meter2_info.h" +#include "d/actor/d_a_player.h" +#include "d/actor/d_a_midna.h" +#include "d/d_bg_w.h" +UNK_REL_DATA +/* 80D2B934-80D2B938 -00001 0004+00 6/6 0/0 0/0 .data l_arcName */ +static char* l_arcName = "Obj_obrg"; -// -// Forward References: -// +/* 80D2B938-80D2B940 -00001 0008+00 1/1 0/0 0/0 .data l_portal_warp_name */ +static char* l_portal_warp_name[2] = { + "PORTAL_WARP_OBRIDGE", + "PORTAL_WARP_OUT_OBRIDGE", +}; -extern "C" void initBaseMtx__15daObjWarpOBrg_cFv(); -extern "C" void setBaseMtx__15daObjWarpOBrg_cFv(); -extern "C" void Create__15daObjWarpOBrg_cFv(); -extern "C" void CreateHeap__15daObjWarpOBrg_cFv(); -extern "C" void __dt__12J3DFrameCtrlFv(); -extern "C" void create1st__15daObjWarpOBrg_cFv(); -extern "C" void Execute__15daObjWarpOBrg_cFPPA3_A4_f(); -extern "C" void event_proc_call__15daObjWarpOBrg_cFv(); -extern "C" void actionWait__15daObjWarpOBrg_cFv(); -extern "C" void actionOrderEvent__15daObjWarpOBrg_cFv(); -extern "C" void actionTalkEvent__15daObjWarpOBrg_cFv(); -extern "C" void actionWarpEvent__15daObjWarpOBrg_cFv(); -extern "C" void actionOrderEventDst__15daObjWarpOBrg_cFv(); -extern "C" void actionWarpEventDst__15daObjWarpOBrg_cFv(); -extern "C" void actionDead__15daObjWarpOBrg_cFv(); -extern "C" void demoProc__15daObjWarpOBrg_cFv(); -extern "C" void checkTalkDistance__15daObjWarpOBrg_cFv(); -extern "C" void calcMidnaWaitPos__15daObjWarpOBrg_cFv(); -extern "C" void Draw__15daObjWarpOBrg_cFv(); -extern "C" void Delete__15daObjWarpOBrg_cFv(); -extern "C" static void daObjWarpOBrg_create1st__FP15daObjWarpOBrg_c(); -extern "C" static void daObjWarpOBrg_MoveBGDelete__FP15daObjWarpOBrg_c(); -extern "C" static void daObjWarpOBrg_MoveBGExecute__FP15daObjWarpOBrg_c(); -extern "C" static void daObjWarpOBrg_MoveBGDraw__FP15daObjWarpOBrg_c(); -extern "C" void func_80D2B7D4(void* _this, u8*); -extern "C" extern char const* const d_a_obj_warp_obrg__stringBase0; +/* 80D2B7F8-80D2B800 000000 0008+00 6/6 0/0 0/0 .rodata l_bmd_idx */ +static const int l_bmd_idx[] = {12, 11}; -// -// External References: -// +/* 80D2B800-80D2B808 000008 0008+00 0/1 0/0 0/0 .rodata l_dzb_idx */ +static const int l_dzb_idx[] = {20, 19}; -extern "C" void mDoMtx_ZXYrotM__FPA4_fsss(); -extern "C" void transS__14mDoMtx_stack_cFRC4cXyz(); -extern "C" void transM__14mDoMtx_stack_cFfff(); -extern "C" void ZXYrotM__14mDoMtx_stack_cFRC5csXyz(); -extern "C" void play__14mDoExt_baseAnmFv(); -extern "C" void init__13mDoExt_btkAnmFP16J3DMaterialTableP19J3DAnmTextureSRTKeyiifss(); -extern "C" void entry__13mDoExt_btkAnmFP16J3DMaterialTablef(); -extern "C" void init__13mDoExt_bckAnmFP15J3DAnmTransformiifssb(); -extern "C" void entry__13mDoExt_bckAnmFP12J3DModelDataf(); -extern "C" void mDoExt_modelUpdateDL__FP8J3DModel(); -extern "C" void mDoExt_J3DModel__create__FP12J3DModelDataUlUl(); -extern "C" void fopAcM_setCullSizeBox2__FP10fopAc_ac_cP12J3DModelData(); -extern "C" void fopAcM_orderOtherEventId__FP10fopAc_ac_csUcUsUsUs(); -extern "C" void dComIfG_resLoad__FP30request_of_phase_process_classPCc(); -extern "C" void dComIfG_resDelete__FP30request_of_phase_process_classPCc(); -extern "C" void dComIfGp_TargetWarpPt_set__FUc(); -extern "C" void dComIfGp_TransportWarp_check__Fv(); -extern "C" void onEventBit__11dSv_event_cFUs(); -extern "C" void offEventBit__11dSv_event_cFUs(); -extern "C" void isEventBit__11dSv_event_cCFUs(); -extern "C" void onSwitch__10dSv_info_cFii(); -extern "C" void isSwitch__10dSv_info_cCFii(); -extern "C" void getRes__14dRes_control_cFPCclP11dRes_info_ci(); -extern "C" void reset__14dEvt_control_cFv(); -extern "C" void dEv_noFinishSkipProc__FPvi(); -extern "C" void setSkipProc__14dEvt_control_cFPvPFPvi_ii(); -extern "C" void setPt2__14dEvt_control_cFPv(); -extern "C" void getEventIdx__16dEvent_manager_cFP10fopAc_ac_cPCcUc(); -extern "C" void startCheck__16dEvent_manager_cFs(); -extern "C" void endCheck__16dEvent_manager_cFs(); -extern "C" void getMyStaffId__16dEvent_manager_cFPCcP10fopAc_ac_ci(); -extern "C" void getIsAddvance__16dEvent_manager_cFi(); -extern "C" void getMyActIdx__16dEvent_manager_cFiPCPCciii(); -extern "C" void getMySubstanceP__16dEvent_manager_cFiPCci(); -extern "C" void cutEnd__16dEvent_manager_cFi(); -extern "C" void getRunEventName__16dEvent_manager_cFv(); -extern "C" void -set__13dPa_control_cFUcUsPC4cXyzPC12dKy_tevstr_cPC5csXyzPC4cXyzUcP18dPa_levelEcallBackScPC8_GXColorPC8_GXColorPC4cXyzf(); -extern "C" void StartShock__12dVibration_cFii4cXyz(); -extern "C" void request__10dAttHint_cFP10fopAc_ac_ci(); -extern "C" void Release__4cBgSFP9dBgW_Base(); -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 settingTevStruct__18dScnKy_env_light_cFiP4cXyzP12dKy_tevstr_c(); -extern "C" void setLightTevColorType_MAJI__18dScnKy_env_light_cFP12J3DModelDataP12dKy_tevstr_c(); -extern "C" void __ct__10dMsgFlow_cFv(); -extern "C" void init__10dMsgFlow_cFP10fopAc_ac_ciiPP10fopAc_ac_c(); -extern "C" void doFlow__10dMsgFlow_cFP10fopAc_ac_cPP10fopAc_ac_ci(); -extern "C" void getEventId__10dMsgFlow_cFPi(); -extern "C" void ChkUsed__9cBgW_BgIdCFv(); -extern "C" void cLib_targetAngleY__FPC3VecPC3Vec(); -extern "C" void cLib_targetAngleX__FPC4cXyzPC4cXyz(); -extern "C" void func_802807E0(); -extern "C" void seStart__7Z2SeMgrF10JAISoundIDPC3VecUlScffffUc(); -extern "C" void* __nw__FUl(); -extern "C" void __dl__FPv(); -extern "C" void init__12J3DFrameCtrlFs(); -extern "C" void checkPass__12J3DFrameCtrlFf(); -extern "C" void __ptmf_scall(); -extern "C" void _savegpr_19(); -extern "C" void _savegpr_26(); -extern "C" void _savegpr_28(); -extern "C" void _restgpr_19(); -extern "C" void _restgpr_26(); -extern "C" void _restgpr_28(); -extern "C" u8 const tempBitLabels__20dSv_event_tmp_flag_c[370 + 2 /* padding */]; -extern "C" u8 saveBitLabels__16dSv_event_flag_c[1644 + 4 /* padding */]; -extern "C" u8 now__14mDoMtx_stack_c[48]; -extern "C" extern u8 g_dComIfG_gameInfo[122384]; -extern "C" extern u8 g_meter2_info[248]; -extern "C" u8 m_midnaActor__9daPy_py_c[4]; -extern "C" u8 mAudioMgrPtr__10Z2AudioMgr[4 + 4 /* padding */]; -extern "C" extern u8 data_80D2BA88[4]; +/* 80D2B808-80D2B810 000010 0008+00 1/3 0/0 0/0 .rodata l_bck_idx */ +static const int l_bck_idx[] = {8, 7}; -// -// Declarations: -// +/* 80D2B810-80D2B818 000018 0008+00 0/1 0/0 0/0 .rodata l_btk_idx */ +static const int l_btk_idx[] = {16, 15}; + +/* 80D2B818-80D2B824 000020 000A+02 0/1 0/0 0/0 .rodata l_beam_eff */ +static const u16 l_beam_eff[] = {0x8B4B, 0x8B4C, 0x8B4D, 0x8B4E, 0x8B53}; + +/* 80D2B824-80D2B830 00002C 000A+02 0/1 0/0 0/0 .rodata l_disapp_eff */ +static const u16 l_disapp_eff[] = {0x8B38, 0x8B39, 0x8B3A, 0x8B3B, 0x8B35}; + +/* 80D2B830-80D2B838 000038 0006+02 0/1 0/0 0/0 .rodata l_app_eff */ +static const u16 l_app_eff[] = {0x8B34, 0x8B36, 0x8B37}; + +/* 80D2B838-80D2B844 000040 000C+00 1/1 0/0 0/0 .rodata l_midna_wait_offset */ +static const Vec l_midna_wait_offset = {100.0f, -1265.0f, -760.0f}; + +/* 80D2B940-80D2B948 -00001 0008+00 3/3 0/0 0/0 .data l_staff_name */ +static char* l_staff_name[2] = { + "WarpOB1", + "WarpOB2", +}; /* 80D299B8-80D29A00 000078 0048+00 1/1 0/0 0/0 .text initBaseMtx__15daObjWarpOBrg_cFv */ void daObjWarpOBrg_c::initBaseMtx() { - // NONMATCHING + fopAcM_SetMtx(this, mpModel->getBaseTRMtx()); + mpModel->setBaseScale(scale); + setBaseMtx(); } -/* ############################################################################################## */ -/* 80D2B7F8-80D2B800 000000 0008+00 6/6 0/0 0/0 .rodata l_bmd_idx */ -SECTION_RODATA static u8 const l_bmd_idx[8] = { - 0x00, 0x00, 0x00, 0x0C, 0x00, 0x00, 0x00, 0x0B, -}; -COMPILER_STRIP_GATE(0x80D2B7F8, &l_bmd_idx); - -/* 80D2B800-80D2B808 000008 0008+00 0/1 0/0 0/0 .rodata l_dzb_idx */ -#pragma push -#pragma force_active on -SECTION_RODATA static u8 const l_dzb_idx[8] = { - 0x00, 0x00, 0x00, 0x14, 0x00, 0x00, 0x00, 0x13, -}; -COMPILER_STRIP_GATE(0x80D2B800, &l_dzb_idx); -#pragma pop - -/* 80D2B808-80D2B810 000010 0008+00 1/3 0/0 0/0 .rodata l_bck_idx */ -SECTION_RODATA static u8 const l_bck_idx[8] = { - 0x00, 0x00, 0x00, 0x08, 0x00, 0x00, 0x00, 0x07, -}; -COMPILER_STRIP_GATE(0x80D2B808, &l_bck_idx); - -/* 80D2B8AC-80D2B8AC 0000B4 0000+00 0/0 0/0 0/0 .rodata @stringBase0 */ -#pragma push -#pragma force_active on -SECTION_DEAD static char const* const stringBase_80D2B8AC = "Obj_obrg"; -#pragma pop - -/* 80D2B914-80D2B920 000000 000C+00 1/1 0/0 0/0 .data cNullVec__6Z2Calc */ -SECTION_DATA static u8 cNullVec__6Z2Calc[12] = { - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, -}; - -/* 80D2B920-80D2B934 00000C 0004+10 0/0 0/0 0/0 .data @1787 */ -#pragma push -#pragma force_active on -SECTION_DATA static u32 lit_1787[1 + 4 /* padding */] = { - 0x02000201, - /* padding */ - 0x40080000, - 0x00000000, - 0x3FE00000, - 0x00000000, -}; -#pragma pop - -/* 80D2B934-80D2B938 -00001 0004+00 6/6 0/0 0/0 .data l_arcName */ -SECTION_DATA static void* l_arcName = (void*)&d_a_obj_warp_obrg__stringBase0; - /* 80D29A00-80D29ACC 0000C0 00CC+00 1/1 0/0 0/0 .text setBaseMtx__15daObjWarpOBrg_cFv */ void daObjWarpOBrg_c::setBaseMtx() { - // NONMATCHING + mDoMtx_stack_c::transS(current.pos); + mDoMtx_stack_c::ZXYrotM(shape_angle); + mpModel->setBaseTRMtx(mDoMtx_stack_c::get()); + + if (getNameArg() == 0) { + J3DAnmTransform* pbck = (J3DAnmTransform*)dComIfG_getObjectRes(l_arcName, l_bck_idx[getNameArg()]); + JUT_ASSERT(189, pbck != 0); + + J3DTransformInfo transinfo; + pbck->getTransform(0, &transinfo); + mDoMtx_stack_c::ZXYrotM(transinfo.mRotation.x, transinfo.mRotation.y, transinfo.mRotation.z); + } + + MTXCopy(mDoMtx_stack_c::get(), mBgMtx); } -/* ############################################################################################## */ -/* 80D2B8AC-80D2B8AC 0000B4 0000+00 0/0 0/0 0/0 .rodata @stringBase0 */ -#pragma push -#pragma force_active on -SECTION_DEAD static char const* const stringBase_80D2B8B5 = "PORTAL_WARP_OBRIDGE"; -SECTION_DEAD static char const* const stringBase_80D2B8C9 = "PORTAL_WARP_OUT_OBRIDGE"; -#pragma pop - -/* 80D2B938-80D2B940 -00001 0008+00 1/1 0/0 0/0 .data l_portal_warp_name */ -SECTION_DATA static void* l_portal_warp_name[2] = { - (void*)(((char*)&d_a_obj_warp_obrg__stringBase0) + 0x9), - (void*)(((char*)&d_a_obj_warp_obrg__stringBase0) + 0x1D), -}; - /* 80D29ACC-80D29BB4 00018C 00E8+00 1/0 0/0 0/0 .text Create__15daObjWarpOBrg_cFv */ -void daObjWarpOBrg_c::Create() { - // NONMATCHING +int daObjWarpOBrg_c::Create() { + initBaseMtx(); + fopAcM_setCullSizeBox2(this, mpModel->getModelData()); + + attention_info.distances[fopAc_attn_SPEAK_e] = 54; + attention_info.distances[fopAc_attn_TALK_e] = 54; + + eventInfo.setArchiveName(l_arcName); + + mEventId = dComIfGp_getEventManager().getEventIdx(this, l_portal_warp_name[getNameArg()], 0xFF); + + calcMidnaWaitPos(); + + if (getNameArg() == 0) { + setAction(ACTION_WAIT_e); + } else if (fopAcM_isSwitch(this, getSwNo())) { + setAction(ACTION_DEAD_e); + } else { + setAction(ACTION_ORDER_EVENT_DST_e); + } + + MoveBGExecute(); + return 1; } -/* ############################################################################################## */ -/* 80D2B810-80D2B818 000018 0008+00 0/1 0/0 0/0 .rodata l_btk_idx */ -#pragma push -#pragma force_active on -SECTION_RODATA static u8 const l_btk_idx[8] = { - 0x00, 0x00, 0x00, 0x10, 0x00, 0x00, 0x00, 0x0F, -}; -COMPILER_STRIP_GATE(0x80D2B810, &l_btk_idx); -#pragma pop - -/* 80D2B818-80D2B824 000020 000A+02 0/1 0/0 0/0 .rodata l_beam_eff */ -#pragma push -#pragma force_active on -SECTION_RODATA static u8 const l_beam_eff[10 + 2 /* padding */] = { - 0x8B, - 0x4B, - 0x8B, - 0x4C, - 0x8B, - 0x4D, - 0x8B, - 0x4E, - 0x8B, - 0x53, - /* padding */ - 0x00, - 0x00, -}; -COMPILER_STRIP_GATE(0x80D2B818, &l_beam_eff); -#pragma pop - -/* 80D2B824-80D2B830 00002C 000A+02 0/1 0/0 0/0 .rodata l_disapp_eff */ -#pragma push -#pragma force_active on -SECTION_RODATA static u8 const l_disapp_eff[10 + 2 /* padding */] = { - 0x8B, - 0x38, - 0x8B, - 0x39, - 0x8B, - 0x3A, - 0x8B, - 0x3B, - 0x8B, - 0x35, - /* padding */ - 0x00, - 0x00, -}; -COMPILER_STRIP_GATE(0x80D2B824, &l_disapp_eff); -#pragma pop - -/* 80D2B830-80D2B838 000038 0006+02 0/1 0/0 0/0 .rodata l_app_eff */ -#pragma push -#pragma force_active on -SECTION_RODATA static u8 const l_app_eff[6 + 2 /* padding */] = { - 0x8B, - 0x34, - 0x8B, - 0x36, - 0x8B, - 0x37, - /* padding */ - 0x00, - 0x00, -}; -COMPILER_STRIP_GATE(0x80D2B830, &l_app_eff); -#pragma pop - -/* 80D2B838-80D2B844 000040 000C+00 1/1 0/0 0/0 .rodata l_midna_wait_offset */ -SECTION_RODATA static u8 const l_midna_wait_offset[12] = { - 0x42, 0xC8, 0x00, 0x00, 0xC4, 0x9E, 0x20, 0x00, 0xC4, 0x3E, 0x00, 0x00, -}; -COMPILER_STRIP_GATE(0x80D2B838, &l_midna_wait_offset); - -/* 80D2B844-80D2B848 00004C 0004+00 0/5 0/0 0/0 .rodata @3834 */ -#pragma push -#pragma force_active on -SECTION_RODATA static u8 const lit_3834[4] = { - 0x00, - 0x00, - 0x00, - 0x00, -}; -COMPILER_STRIP_GATE(0x80D2B844, &lit_3834); -#pragma pop - -/* 80D2B848-80D2B850 000050 0008+00 0/1 0/0 0/0 .rodata @3836 */ -#pragma push -#pragma force_active on -SECTION_RODATA static u8 const lit_3836[8] = { - 0x43, 0x30, 0x00, 0x00, 0x80, 0x00, 0x00, 0x00, -}; -COMPILER_STRIP_GATE(0x80D2B848, &lit_3836); -#pragma pop - -/* 80D2B8AC-80D2B8AC 0000B4 0000+00 0/0 0/0 0/0 .rodata @stringBase0 */ -#pragma push -#pragma force_active on -SECTION_DEAD static char const* const stringBase_80D2B8E1 = "WarpOB1"; -SECTION_DEAD static char const* const stringBase_80D2B8E9 = "WarpOB2"; -SECTION_DEAD static char const* const stringBase_80D2B8F1 = "WAIT"; -SECTION_DEAD static char const* const stringBase_80D2B8F6 = "OBJ_DISAPP"; -SECTION_DEAD static char const* const stringBase_80D2B901 = "OBJ_APP"; -SECTION_DEAD static char const* const stringBase_80D2B909 = "BEAM"; -#pragma pop - -/* 80D2B940-80D2B948 -00001 0008+00 3/3 0/0 0/0 .data l_staff_name */ -SECTION_DATA static void* l_staff_name[2] = { - (void*)(((char*)&d_a_obj_warp_obrg__stringBase0) + 0x35), - (void*)(((char*)&d_a_obj_warp_obrg__stringBase0) + 0x3D), -}; - -/* 80D2B948-80D2B954 -00001 000C+00 0/1 0/0 0/0 .data @3894 */ -#pragma push -#pragma force_active on -SECTION_DATA static void* lit_3894[3] = { - (void*)NULL, - (void*)0xFFFFFFFF, - (void*)actionWait__15daObjWarpOBrg_cFv, -}; -#pragma pop - -/* 80D2B954-80D2B960 -00001 000C+00 0/1 0/0 0/0 .data @3895 */ -#pragma push -#pragma force_active on -SECTION_DATA static void* lit_3895[3] = { - (void*)NULL, - (void*)0xFFFFFFFF, - (void*)actionOrderEvent__15daObjWarpOBrg_cFv, -}; -#pragma pop - -/* 80D2B960-80D2B96C -00001 000C+00 0/1 0/0 0/0 .data @3896 */ -#pragma push -#pragma force_active on -SECTION_DATA static void* lit_3896[3] = { - (void*)NULL, - (void*)0xFFFFFFFF, - (void*)actionTalkEvent__15daObjWarpOBrg_cFv, -}; -#pragma pop - -/* 80D2B96C-80D2B978 -00001 000C+00 0/1 0/0 0/0 .data @3897 */ -#pragma push -#pragma force_active on -SECTION_DATA static void* lit_3897[3] = { - (void*)NULL, - (void*)0xFFFFFFFF, - (void*)actionWarpEvent__15daObjWarpOBrg_cFv, -}; -#pragma pop - -/* 80D2B978-80D2B984 -00001 000C+00 0/1 0/0 0/0 .data @3898 */ -#pragma push -#pragma force_active on -SECTION_DATA static void* lit_3898[3] = { - (void*)NULL, - (void*)0xFFFFFFFF, - (void*)actionDead__15daObjWarpOBrg_cFv, -}; -#pragma pop - -/* 80D2B984-80D2B990 -00001 000C+00 0/1 0/0 0/0 .data @3899 */ -#pragma push -#pragma force_active on -SECTION_DATA static void* lit_3899[3] = { - (void*)NULL, - (void*)0xFFFFFFFF, - (void*)actionOrderEventDst__15daObjWarpOBrg_cFv, -}; -#pragma pop - -/* 80D2B990-80D2B99C -00001 000C+00 0/1 0/0 0/0 .data @3900 */ -#pragma push -#pragma force_active on -SECTION_DATA static void* lit_3900[3] = { - (void*)NULL, - (void*)0xFFFFFFFF, - (void*)actionWarpEventDst__15daObjWarpOBrg_cFv, -}; -#pragma pop - -/* 80D2B99C-80D2B9F0 000088 0054+00 0/1 0/0 0/0 .data l_func$3893 */ -#pragma push -#pragma force_active on -SECTION_DATA static u8 l_func[84] = { - 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, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, -}; -#pragma pop - -/* 80D2B9F0-80D2BA00 -00001 0010+00 1/1 0/0 0/0 .data action_table$4165 */ -SECTION_DATA static void* action_table[4] = { - (void*)(((char*)&d_a_obj_warp_obrg__stringBase0) + 0x45), - (void*)(((char*)&d_a_obj_warp_obrg__stringBase0) + 0x4A), - (void*)(((char*)&d_a_obj_warp_obrg__stringBase0) + 0x55), - (void*)(((char*)&d_a_obj_warp_obrg__stringBase0) + 0x5D), -}; - -/* 80D2BA00-80D2BA20 -00001 0020+00 1/0 0/0 0/0 .data daObjWarpOBrg_METHODS */ -static actor_method_class daObjWarpOBrg_METHODS = { - (process_method_func)daObjWarpOBrg_create1st__FP15daObjWarpOBrg_c, - (process_method_func)daObjWarpOBrg_MoveBGDelete__FP15daObjWarpOBrg_c, - (process_method_func)daObjWarpOBrg_MoveBGExecute__FP15daObjWarpOBrg_c, - 0, - (process_method_func)daObjWarpOBrg_MoveBGDraw__FP15daObjWarpOBrg_c, -}; - -/* 80D2BA20-80D2BA50 -00001 0030+00 0/0 0/0 1/0 .data g_profile_Obj_OrdinBrg */ -extern actor_process_profile_definition g_profile_Obj_OrdinBrg = { - fpcLy_CURRENT_e, // mLayerID - 3, // mListID - fpcPi_CURRENT_e, // mListPrio - PROC_Obj_OrdinBrg, // mProcName - &g_fpcLf_Method.base, // sub_method - sizeof(daObjWarpOBrg_c), // mSize - 0, // mSizeOther - 0, // mParameters - &g_fopAc_Method.base, // sub_method - 531, // mPriority - &daObjWarpOBrg_METHODS, // sub_method - 0x00040000, // mStatus - fopAc_ENV_e, // mActorType - fopAc_CULLBOX_CUSTOM_e, // cullType -}; - -/* 80D2BA50-80D2BA5C 00013C 000C+00 2/2 0/0 0/0 .data __vt__12J3DFrameCtrl */ -SECTION_DATA extern void* __vt__12J3DFrameCtrl[3] = { - (void*)NULL /* RTTI */, - (void*)NULL, - (void*)__dt__12J3DFrameCtrlFv, -}; - /* 80D29BB4-80D29E34 000274 0280+00 1/0 0/0 0/0 .text CreateHeap__15daObjWarpOBrg_cFv */ -void daObjWarpOBrg_c::CreateHeap() { - // NONMATCHING +int daObjWarpOBrg_c::CreateHeap() { + J3DModelData* modelData = (J3DModelData*)dComIfG_getObjectRes(l_arcName, l_bmd_idx[getNameArg()]); + JUT_ASSERT(254, modelData != 0); + + mpModel = mDoExt_J3DModel__create(modelData, 0x80000, 0x11000284); + if (mpModel == NULL) { + return 0; + } + + J3DAnmTransform* pbck = (J3DAnmTransform*)dComIfG_getObjectRes(l_arcName, l_bck_idx[getNameArg()]); + JUT_ASSERT(263, pbck != 0); + mpBck = new mDoExt_bckAnm(); + if (mpBck == NULL || !mpBck->init(pbck, TRUE, 0, 0.0f, 0, -1, false)) { + return 0; + } + mpBck->setPlaySpeed(0.0f); + + if (fopAcM_isSwitch(this, getSwNo())) { + mpBck->setFrame(mpBck->getEndFrame()); + } + + J3DAnmTextureSRTKey* pbtk = (J3DAnmTextureSRTKey*)dComIfG_getObjectRes(l_arcName, l_btk_idx[getNameArg()]); + JUT_ASSERT(271, pbtk != 0); + mpBtk = new mDoExt_btkAnm(); + if (mpBtk == NULL || !mpBtk->init(modelData, pbtk, TRUE, 0, 0.0f, 0, -1)) { + return 0; + } + mpBtk->setPlaySpeed(0.0f); + + if (fopAcM_isSwitch(this, getSwNo())) { + mpBtk->setFrame(mpBtk->getEndFrame()); + } + + return 1; } -/* 80D29E34-80D29E7C 0004F4 0048+00 1/0 0/0 0/0 .text __dt__12J3DFrameCtrlFv */ -// J3DFrameCtrl::~J3DFrameCtrl() { -extern "C" void __dt__12J3DFrameCtrlFv() { - // NONMATCHING -} - -/* ############################################################################################## */ -/* 80D2B850-80D2B854 000058 0004+00 0/1 0/0 0/0 .rodata @3882 */ -#pragma push -#pragma force_active on -SECTION_RODATA static f32 const lit_3882 = 10.0f; -COMPILER_STRIP_GATE(0x80D2B850, &lit_3882); -#pragma pop - -/* 80D2B854-80D2B858 00005C 0004+00 0/2 0/0 0/0 .rodata @3883 */ -#pragma push -#pragma force_active on -SECTION_RODATA static f32 const lit_3883 = 550.0f; -COMPILER_STRIP_GATE(0x80D2B854, &lit_3883); -#pragma pop - -/* 80D2B858-80D2B860 000060 0008+00 0/1 0/0 0/0 .rodata @3885 */ -#pragma push -#pragma force_active on -SECTION_RODATA static u8 const lit_3885[8] = { - 0x43, 0x30, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, -}; -COMPILER_STRIP_GATE(0x80D2B858, &lit_3885); -#pragma pop - /* 80D29E7C-80D2A008 00053C 018C+00 1/1 0/0 0/0 .text create1st__15daObjWarpOBrg_cFv */ -void daObjWarpOBrg_c::create1st() { - // NONMATCHING +int daObjWarpOBrg_c::create1st() { + if (!mPrmInit) { + mMsgID = home.angle.z; + mPrmInit = TRUE; + home.angle.z = 0; + current.angle.z = 0; + shape_angle.z = 0; + } + + switch (getNameArg()) { + case 0: + if (dComIfGs_isEventBit(dSv_event_flag_c::saveBitLabels[125])) { + // "Eldin Bridge: already warped so creation cancelled!" + OS_REPORT("\x1B[43;30mオルディン大橋:ワープさせたので発生取り消し!\n\x1B[m"); + return cPhs_ERROR_e; + } + break; + case 1: + if (!dComIfGs_isEventBit(dSv_event_flag_c::saveBitLabels[125])) { + // "Eldin Bridge: not warped so creation cancelled!" + OS_REPORT("\x1B[43;30mオルディン大橋:ワープさせてないので発生取り消し!\n\x1B[m"); + return cPhs_ERROR_e; + } + break; + } + + int phase_state = dComIfG_resLoad(&mPhase, l_arcName); + if (phase_state == cPhs_COMPLEATE_e) { + u32 heap_size; + if (getNameArg() != 0) { + heap_size = 0x3B40; + } else { + heap_size = 0x21A0; + } + + phase_state = MoveBGCreate(l_arcName, l_dzb_idx[getNameArg()], dBgS_MoveBGProc_TypicalRotY, heap_size, NULL); + if (phase_state == cPhs_ERROR_e) { + return phase_state; + } + + if (getArg0() != 0xFF) { + mTalkRange = getArg0() * 10.0f; + } else { + mTalkRange = 550.0f; + } + } + + return phase_state; } /* 80D2A008-80D2A04C 0006C8 0044+00 1/0 0/0 0/0 .text Execute__15daObjWarpOBrg_cFPPA3_A4_f */ -void daObjWarpOBrg_c::Execute(f32 (**param_0)[3][4]) { - // NONMATCHING +int daObjWarpOBrg_c::Execute(f32 (**param_0)[3][4]) { + #if VERSION == VERSION_SHIELD_DEBUG + calcMidnaWaitPos(); + #endif + + event_proc_call(); + + *param_0 = &mBgMtx; + return 1; } /* 80D2A04C-80D2A194 00070C 0148+00 1/1 0/0 0/0 .text event_proc_call__15daObjWarpOBrg_cFv */ void daObjWarpOBrg_c::event_proc_call() { - // NONMATCHING + static void (daObjWarpOBrg_c::*l_func[])() = { + &daObjWarpOBrg_c::actionWait, + &daObjWarpOBrg_c::actionOrderEvent, + &daObjWarpOBrg_c::actionTalkEvent, + &daObjWarpOBrg_c::actionWarpEvent, + &daObjWarpOBrg_c::actionDead, + &daObjWarpOBrg_c::actionOrderEventDst, + &daObjWarpOBrg_c::actionWarpEventDst, + }; + + attention_info.flags = 0; + + if (field_0x63a != 0) { + field_0x63a--; + } + + (this->*l_func[mAction])(); + + if (!eventInfo.chkCondition(dEvtCnd_CANTALK_e)) { + field_0x639 = 0; + } } -/* ############################################################################################## */ -/* 80D2B860-80D2B868 000068 0008+00 0/4 0/0 0/0 .rodata @3999 */ -#pragma push -#pragma force_active on -SECTION_RODATA static u8 const lit_3999[8] = { - 0x3F, 0xE0, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, -}; -COMPILER_STRIP_GATE(0x80D2B860, &lit_3999); -#pragma pop - -/* 80D2B868-80D2B870 000070 0008+00 0/4 0/0 0/0 .rodata @4000 */ -#pragma push -#pragma force_active on -SECTION_RODATA static u8 const lit_4000[8] = { - 0x40, 0x08, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, -}; -COMPILER_STRIP_GATE(0x80D2B868, &lit_4000); -#pragma pop - -/* 80D2B870-80D2B878 000078 0008+00 0/4 0/0 0/0 .rodata @4001 */ -#pragma push -#pragma force_active on -SECTION_RODATA static u8 const lit_4001[8] = { - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, -}; -COMPILER_STRIP_GATE(0x80D2B870, &lit_4001); -#pragma pop - -/* 80D2B878-80D2B87C 000080 0004+00 0/2 0/0 0/0 .rodata @4002 */ -#pragma push -#pragma force_active on -SECTION_RODATA static f32 const lit_4002 = 5.0f; -COMPILER_STRIP_GATE(0x80D2B878, &lit_4002); -#pragma pop - -/* 80D2B87C-80D2B880 000084 0004+00 0/2 0/0 0/0 .rodata @4003 */ -#pragma push -#pragma force_active on -SECTION_RODATA static f32 const lit_4003 = 1.0f; -COMPILER_STRIP_GATE(0x80D2B87C, &lit_4003); -#pragma pop - -/* 80D2B880-80D2B884 000088 0004+00 0/2 0/0 0/0 .rodata @4004 */ -#pragma push -#pragma force_active on -SECTION_RODATA static f32 const lit_4004 = -1.0f; -COMPILER_STRIP_GATE(0x80D2B880, &lit_4004); -#pragma pop - /* 80D2A194-80D2A4CC 000854 0338+00 1/0 0/0 0/0 .text actionWait__15daObjWarpOBrg_cFv */ void daObjWarpOBrg_c::actionWait() { - // NONMATCHING + daMidna_c* midna_p = daPy_py_c::getMidnaActor(); + + if (midna_p != NULL) { + dComIfG_play_c* play = &g_dComIfG_gameInfo.play; // fakematch + if (dComIfGp_event_runCheck() && eventInfo.checkCommandTalk()) { + midna_p->onTagWaitPosPortalObj(&mMidnaWaitPos); + if (midna_p->current.pos.abs(mMidnaWaitPos) < 5.0f) { + dComIfGp_TargetWarpPt_set(getMyPortalID()); + mMsgFlow.init(this, getMsgID(), 0, NULL); + setAction(ACTION_TALK_EVENT_e); + } + } else if (fopAcM_isSwitch(this, getSwNo2()) && checkTalkDistance()) { + eventInfo.onCondition(dEvtCnd_CANTALK_e); + if (!daPy_getPlayerActorClass()->checkPlayerFly()) { + dComIfGp_att_ZHintRequest(this, 0x1FF); + + if (field_0x639 == 0) { + field_0x639 = 1; + if (field_0x63a == 0) { + mDoAud_seStart(Z2SE_NAVI_CALLVOICE, NULL, 0, 0); + } + } + + field_0x63a = 60; + } + } + + if (dComIfGp_evmng_startCheck(mEventId)) { + if (strcmp(dComIfGp_getEventManager().getRunEventName(), "PORTAL_WARP_OBRIDGE") == 0) { + mStaffId = dComIfGp_evmng_getMyStaffId(l_staff_name[getNameArg()], NULL, 0); + setAction(ACTION_WARP_EVENT_e); + dEvt_control_c* event = &play->getEvent(); // fakematch + event->startCheckSkipEdge(this); + midna_p->offTagWaitPos(); + event->setPt2(this); + } + } + } } /* 80D2A4CC-80D2A740 000B8C 0274+00 1/0 0/0 0/0 .text actionOrderEvent__15daObjWarpOBrg_cFv */ void daObjWarpOBrg_c::actionOrderEvent() { - // NONMATCHING + daMidna_c* midna_p = (daMidna_c*)daPy_py_c::getMidnaActor(); + + if (eventInfo.checkCommandTalk()) { + midna_p->onTagWaitPosPortalObj(&mMidnaWaitPos); + if (midna_p->current.pos.abs(mMidnaWaitPos) < 5.0f) { + dComIfGp_TargetWarpPt_set(getMyPortalID()); + mMsgFlow.init(this, getMsgID(), 0, NULL); + setAction(ACTION_TALK_EVENT_e); + } + } else if (dComIfGp_evmng_startCheck(mEventId)) { + mStaffId = dComIfGp_evmng_getMyStaffId(l_staff_name[getNameArg()], NULL, 0); + setAction(ACTION_WARP_EVENT_e); + dComIfGp_getEvent().startCheckSkipEdge(this); + midna_p->offTagWaitPos(); + dComIfGp_getEvent().setPt2(this); + } else { + eventInfo.onCondition(1); + if (checkTalkDistance()) { + attention_info.flags = 10; + } else { + midna_p->offTagWaitPos(); + setAction(ACTION_WAIT_e); + } + } } /* 80D2A740-80D2A7C4 000E00 0084+00 1/0 0/0 0/0 .text actionTalkEvent__15daObjWarpOBrg_cFv */ void daObjWarpOBrg_c::actionTalkEvent() { - // NONMATCHING + if (mMsgFlow.doFlow(this, NULL, 0)) { + setAction(ACTION_ORDER_EVENT_e); + dComIfGp_event_reset(); + + int sp8; + if (mMsgFlow.getEventId(&sp8) == 11) { + dMeter2Info_setPauseStatus(6); + } + } } /* 80D2A7C4-80D2A93C 000E84 0178+00 1/0 0/0 0/0 .text actionWarpEvent__15daObjWarpOBrg_cFv */ void daObjWarpOBrg_c::actionWarpEvent() { - // NONMATCHING + if (!dComIfGp_evmng_endCheck(mEventId)) { + demoProc(); + + if (dComIfGp_getEvent().checkSkipEdge()) { + dComIfGs_offTmpBit(dSv_event_tmp_flag_c::tempBitLabels[11]); + dComIfGs_offTmpBit(dSv_event_tmp_flag_c::tempBitLabels[12]); + dComIfGs_offTmpBit(dSv_event_tmp_flag_c::tempBitLabels[13]); + dComIfGs_offTmpBit(dSv_event_tmp_flag_c::tempBitLabels[14]); + dComIfGs_offTmpBit(dSv_event_tmp_flag_c::tempBitLabels[15]); + dComIfGs_offTmpBit(dSv_event_tmp_flag_c::tempBitLabels[51]); + dComIfGs_offTmpBit(dSv_event_tmp_flag_c::tempBitLabels[52]); + dComIfGs_offTmpBit(dSv_event_tmp_flag_c::tempBitLabels[53]); + dComIfGs_offTmpBit(dSv_event_tmp_flag_c::tempBitLabels[54]); + dComIfGs_offTmpBit(dSv_event_tmp_flag_c::tempBitLabels[55]); + + daPy_getPlayerActorClass()->skipPortalObjWarp(); + if (dComIfGp_TransportWarp_check()) { + dComIfGs_onEventBit(dSv_event_flag_c::saveBitLabels[125]); + // "Eldin Bridge: Warp destination is correct" + OS_REPORT("\x1B[43;30mオルディン大橋:ワープ先正解です\n\x1B[m"); + } + } + } } /* 80D2A93C-80D2A9E4 000FFC 00A8+00 1/0 0/0 0/0 .text actionOrderEventDst__15daObjWarpOBrg_cFv */ void daObjWarpOBrg_c::actionOrderEventDst() { - // NONMATCHING + if (eventInfo.checkCommandDemoAccrpt()) { + mStaffId = dComIfGp_evmng_getMyStaffId(l_staff_name[getNameArg()], NULL, 0); + fopAcM_onSwitch(this, getSwNo()); + setAction(ACTION_WARP_EVENT_DST_e); + } else { + fopAcM_orderOtherEventId(this, mEventId, 0xFF, 0xFFFF, 2, 1); + } } /* 80D2A9E4-80D2AA30 0010A4 004C+00 1/0 0/0 0/0 .text actionWarpEventDst__15daObjWarpOBrg_cFv */ void daObjWarpOBrg_c::actionWarpEventDst() { - // NONMATCHING + if (!dComIfGp_evmng_endCheck(mEventId)) { + demoProc(); + } } /* 80D2AA30-80D2AA34 0010F0 0004+00 1/0 0/0 0/0 .text actionDead__15daObjWarpOBrg_cFv */ -void daObjWarpOBrg_c::actionDead() { - /* empty function */ -} - -/* ############################################################################################## */ -/* 80D2B884-80D2B888 00008C 0004+00 0/1 0/0 0/0 .rodata @4599 */ -#pragma push -#pragma force_active on -SECTION_RODATA static f32 const lit_4599 = -10.0f; -COMPILER_STRIP_GATE(0x80D2B884, &lit_4599); -#pragma pop - -/* 80D2B888-80D2B88C 000090 0004+00 0/1 0/0 0/0 .rodata @4600 */ -#pragma push -#pragma force_active on -SECTION_RODATA static f32 const lit_4600 = -65.0f; -COMPILER_STRIP_GATE(0x80D2B888, &lit_4600); -#pragma pop - -/* 80D2B88C-80D2B890 000094 0004+00 0/1 0/0 0/0 .rodata @4601 */ -#pragma push -#pragma force_active on -SECTION_RODATA static f32 const lit_4601 = 55.0f; -COMPILER_STRIP_GATE(0x80D2B88C, &lit_4601); -#pragma pop - -/* 80D2B890-80D2B894 000098 0004+00 0/1 0/0 0/0 .rodata @4602 */ -#pragma push -#pragma force_active on -SECTION_RODATA static f32 const lit_4602 = -500.0f; -COMPILER_STRIP_GATE(0x80D2B890, &lit_4602); -#pragma pop - -/* 80D2B894-80D2B898 00009C 0004+00 0/1 0/0 0/0 .rodata @4603 */ -#pragma push -#pragma force_active on -SECTION_RODATA static f32 const lit_4603 = 1.0f / 100.0f; -COMPILER_STRIP_GATE(0x80D2B894, &lit_4603); -#pragma pop - -/* 80D2B898-80D2B89C 0000A0 0004+00 0/1 0/0 0/0 .rodata @4604 */ -#pragma push -#pragma force_active on -SECTION_RODATA static f32 const lit_4604 = 40.0f; -COMPILER_STRIP_GATE(0x80D2B898, &lit_4604); -#pragma pop - -/* 80D2B89C-80D2B8A0 0000A4 0004+00 0/1 0/0 0/0 .rodata @4605 */ -#pragma push -#pragma force_active on -SECTION_RODATA static f32 const lit_4605 = 367.0f; -COMPILER_STRIP_GATE(0x80D2B89C, &lit_4605); -#pragma pop - -/* 80D2B8A0-80D2B8A4 0000A8 0004+00 0/1 0/0 0/0 .rodata @4606 */ -#pragma push -#pragma force_active on -SECTION_RODATA static f32 const lit_4606 = 120.0f; -COMPILER_STRIP_GATE(0x80D2B8A0, &lit_4606); -#pragma pop - -/* 80D2B8A4-80D2B8A8 0000AC 0004+00 0/1 0/0 0/0 .rodata @4607 */ -#pragma push -#pragma force_active on -SECTION_RODATA static f32 const lit_4607 = 247.0f; -COMPILER_STRIP_GATE(0x80D2B8A4, &lit_4607); -#pragma pop - -/* 80D2B8AC-80D2B8AC 0000B4 0000+00 0/0 0/0 0/0 .rodata @stringBase0 */ -#pragma push -#pragma force_active on -SECTION_DEAD static char const* const stringBase_80D2B90E = "Timer"; -#pragma pop +void daObjWarpOBrg_c::actionDead() {} /* 80D2AA34-80D2B3BC 0010F4 0988+00 2/2 0/0 0/0 .text demoProc__15daObjWarpOBrg_cFv */ void daObjWarpOBrg_c::demoProc() { - // NONMATCHING + static char* action_table[4] = { + "WAIT", + "OBJ_DISAPP", + "OBJ_APP", + "BEAM", + }; + + daPy_py_c* player_p = daPy_getPlayerActorClass(); + daMidna_c* midna_p = (daMidna_c*)daPy_py_c::getMidnaActor(); + int act_idx = dComIfGp_evmng_getMyActIdx(mStaffId, action_table, 4, 0, 0); + + if (dComIfGp_evmng_getIsAddvance(mStaffId)) { + switch (act_idx) { + case 0: { + int* timer_p = dComIfGp_evmng_getMyIntegerP(mStaffId, "Timer"); + if (timer_p == NULL) { + mTimer = 1; + } else { + mTimer = *timer_p; + } + break; + } + case 1: + if (mpBgW != NULL && mpBgW->ChkUsed()) { + dComIfG_Bgsp().Release(mpBgW); + } + + if (dComIfGp_TransportWarp_check()) { + dComIfGs_onEventBit(dSv_event_flag_c::saveBitLabels[125]); + // "Eldin Bridge: Warp destination is correct" + OS_REPORT("\x1B[43;30mオルディン大橋:ワープ先正解です\n\x1B[m"); + } + + mpBck->setFrame(0.0f); + mpBtk->setFrame(0.0f); + mpBck->setPlaySpeed(1.0f); + mpBtk->setPlaySpeed(1.0f); + + for (int i = 0; i < 5; i++) { + mEfEmitter[i] = dComIfGp_particle_set(l_disapp_eff[i], ¤t.pos, &shape_angle, NULL, 0xFF, NULL, -1, NULL, NULL, NULL); + if (mEfEmitter[i] != NULL) { + mEfEmitter[i]->becomeImmortalEmitter(); + } + } + break; + case 2: + mTimer = 35; + + mpBck->setFrame(0.0f); + mpBtk->setFrame(0.0f); + mpBck->setPlaySpeed(1.0f); + mpBtk->setPlaySpeed(1.0f); + + for (int i = 0; i < 3; i++) { + mEfEmitter[i] = dComIfGp_particle_set(l_app_eff[i], ¤t.pos, &shape_angle, NULL, 0xFF, NULL, -1, NULL, NULL, NULL); + if (mEfEmitter[i] != NULL) { + mEfEmitter[i]->becomeImmortalEmitter(); + } + } + + Z2GetAudioMgr()->seStart(Z2SE_OBJ_ORDN_BRG_WARP_OUT, &attention_info.position, 0, 0, 1.0f, 1.0f, -1.0f, -1.0f, 0); + break; + case 3: + mTimer = 60; + + for (int i = 0; i < 5; i++) { + cXyz effpos(current.pos); + cXyz sp74; + csXyz effrot(shape_angle); + + if (i == 4) { + sp74.set(-10.0f, -65.0f, 55.0f); + mDoMtx_stack_c::copy(midna_p->getMtxHairTop()); + mDoMtx_stack_c::multVec(&sp74, &sp74); + + mDoMtx_stack_c::copy(mpModel->getAnmMtx(0)); + mDoMtx_stack_c::transM(0.0f, -500.0f, 0.0f); + mDoMtx_stack_c::multVecZero(&effpos); + + effrot.set(cLib_targetAngleX(&sp74, &effpos), (s16)cLib_targetAngleY(&effpos, &sp74), 0); + } + + mEfEmitter[i] = dComIfGp_particle_set(l_beam_eff[i], &effpos, &effrot, NULL, 0xFF, NULL, -1, NULL, NULL, NULL); + if (mEfEmitter[i] != NULL) { + if (i == 4) { + mEfEmitter[i]->setGlobalParticleHeightScale(effpos.abs(sp74) * 0.01f); + } else { + mEfEmitter[i]->setGlobalRTMatrix(mpModel->getAnmMtx(0)); + } + } + } + + Z2GetAudioMgr()->seStart(Z2SE_MDN_WARP_MAGIC, &attention_info.position, 0, 0, 1.0f, 1.0f, -1.0f, -1.0f, 0); + break; + } + } + + int sp40 = 0; + switch (act_idx) { + case 0: + case 3: + if (cLib_calcTimer(&mTimer) == 0) { + dComIfGp_evmng_cutEnd(mStaffId); + } + break; + case 1: + sp40 = mpBck->play(); + sp40 &= mpBtk->play(); + + for (int i = 0; i < 5; i++) { + int jnt_no = i == 4 ? 1 : 0; + if (mEfEmitter[i] != NULL) { + mEfEmitter[i]->setGlobalRTMatrix(mpModel->getAnmMtx(jnt_no)); + } + } + + if (mpBck->checkFrame(40.0f)) { + Z2GetAudioMgr()->seStart(0x80244, &attention_info.position, 0, 0, 1.0f, 1.0f, -1.0f, -1.0f, 0); + } else if (mpBck->checkFrame(367.0f)) { + Z2GetAudioMgr()->seStart(0x80245, &attention_info.position, 0, 0, 1.0f, 1.0f, -1.0f, -1.0f, 0); + } + + if (sp40 != 0) { + for (int i = 0; i < 5; i++) { + if (mEfEmitter[i] != NULL) { + mEfEmitter[i]->becomeInvalidEmitter(); + mEfEmitter[i]->quitImmortalEmitter(); + mEfEmitter[i] = NULL; + } + } + + dComIfGp_evmng_cutEnd(mStaffId); + } + break; + case 2: { + if (cLib_calcTimer(&mTimer) == 0) { + sp40 = mpBck->play(); + sp40 &= mpBtk->play(); + } + + J3DAnmTransform* pbck = (J3DAnmTransform*)dComIfG_getObjectRes(l_arcName, l_bck_idx[getNameArg()]); + JUT_ASSERT(740, pbck != 0); + + J3DTransformInfo transinfo; + pbck->getTransform(0, &transinfo); + + attention_info.position.set(current.pos.x + transinfo.mTranslate.x, + current.pos.y + transinfo.mTranslate.y, + current.pos.z + transinfo.mTranslate.z); + + if (mpBck->checkFrame(120.0f)) { + Z2GetAudioMgr()->seStart(0x80247, &attention_info.position, 0, 0, 1.0f, 1.0f, -1.0f, -1.0f, 0); + } else if (mpBck->checkFrame(247.0f)) { + dComIfGp_getVibration().StartShock(8, 0xF, cXyz(0.0f, 1.0f, 0.0f)); + } + + for (int i = 0; i < 3; i++) { + if (mEfEmitter[i] != NULL) { + mEfEmitter[i]->setGlobalRTMatrix(mpModel->getAnmMtx(0)); + } + } + + if (sp40 != 0) { + for (int i = 0; i < 3; i++) { + if (mEfEmitter[i] != NULL) { + mEfEmitter[i]->becomeInvalidEmitter(); + mEfEmitter[i]->quitImmortalEmitter(); + mEfEmitter[i] = NULL; + } + } + + dComIfGp_evmng_cutEnd(mStaffId); + } + break; + } + default: + dComIfGp_evmng_cutEnd(mStaffId); + break; + } } /* 80D2B3BC-80D2B534 001A7C 0178+00 2/2 0/0 0/0 .text checkTalkDistance__15daObjWarpOBrg_cFv */ -void daObjWarpOBrg_c::checkTalkDistance() { - // NONMATCHING -} +bool daObjWarpOBrg_c::checkTalkDistance() { + daPy_py_c* player = daPy_getPlayerActorClass(); + f32 player_dist = mMidnaWaitPos.absXZ(*fopAcM_GetPosition_p(daPy_getPlayerActorClass())); -/* ############################################################################################## */ -/* 80D2B8A8-80D2B8AC 0000B0 0004+00 1/1 0/0 0/0 .rodata @4666 */ -SECTION_RODATA static f32 const lit_4666 = 250.0f; -COMPILER_STRIP_GATE(0x80D2B8A8, &lit_4666); + mTalkRange = 550.0f; + + if (player_dist < mTalkRange) { + return true; + } else { + return false; + } +} /* 80D2B534-80D2B5C8 001BF4 0094+00 1/1 0/0 0/0 .text calcMidnaWaitPos__15daObjWarpOBrg_cFv */ void daObjWarpOBrg_c::calcMidnaWaitPos() { - // NONMATCHING + cXyz offset(l_midna_wait_offset); + mDoMtx_stack_c::transS(current.pos); + mDoMtx_stack_c::ZXYrotM(shape_angle); + mDoMtx_stack_c::multVec(&offset, &mMidnaWaitPos); + + attention_info.position = mMidnaWaitPos; + attention_info.position.y += 250.0f; } /* 80D2B5C8-80D2B6C0 001C88 00F8+00 1/0 0/0 0/0 .text Draw__15daObjWarpOBrg_cFv */ -void daObjWarpOBrg_c::Draw() { - // NONMATCHING +int daObjWarpOBrg_c::Draw() { + if (getNameArg() == 1) { + g_env_light.settingTevStruct(32, ¤t.pos, &tevStr); + } else { + g_env_light.settingTevStruct(16, ¤t.pos, &tevStr); + } + + g_env_light.setLightTevColorType_MAJI(mpModel, &tevStr); + dComIfGd_setListBG(); + + mpBck->entry(mpModel->getModelData()); + mpBtk->entry(mpModel->getModelData()); + + mDoExt_modelUpdateDL(mpModel); + dComIfGd_setList(); + return 1; } /* 80D2B6C0-80D2B6F4 001D80 0034+00 1/0 0/0 0/0 .text Delete__15daObjWarpOBrg_cFv */ -void daObjWarpOBrg_c::Delete() { - // NONMATCHING +int daObjWarpOBrg_c::Delete() { + dComIfG_resDelete(&mPhase, l_arcName); + return 1; } -/* ############################################################################################## */ -/* 80D2BA5C-80D2BA84 000148 0028+00 1/1 0/0 0/0 .data __vt__15daObjWarpOBrg_c */ -SECTION_DATA extern void* __vt__15daObjWarpOBrg_c[10] = { - (void*)NULL /* RTTI */, - (void*)NULL, - (void*)CreateHeap__15daObjWarpOBrg_cFv, - (void*)Create__15daObjWarpOBrg_cFv, - (void*)Execute__15daObjWarpOBrg_cFPPA3_A4_f, - (void*)Draw__15daObjWarpOBrg_cFv, - (void*)Delete__15daObjWarpOBrg_cFv, - (void*)IsDelete__16dBgS_MoveBgActorFv, - (void*)ToFore__16dBgS_MoveBgActorFv, - (void*)ToBack__16dBgS_MoveBgActorFv, -}; - /* 80D2B6F4-80D2B768 001DB4 0074+00 1/0 0/0 0/0 .text daObjWarpOBrg_create1st__FP15daObjWarpOBrg_c */ -static void daObjWarpOBrg_create1st(daObjWarpOBrg_c* param_0) { - // NONMATCHING +static int daObjWarpOBrg_create1st(daObjWarpOBrg_c* i_this) { + fopAcM_SetupActor(i_this, daObjWarpOBrg_c); + return i_this->create1st(); } /* 80D2B768-80D2B788 001E28 0020+00 1/0 0/0 0/0 .text * daObjWarpOBrg_MoveBGDelete__FP15daObjWarpOBrg_c */ -static void daObjWarpOBrg_MoveBGDelete(daObjWarpOBrg_c* param_0) { - // NONMATCHING +static int daObjWarpOBrg_MoveBGDelete(daObjWarpOBrg_c* i_this) { + return i_this->MoveBGDelete(); } /* 80D2B788-80D2B7A8 001E48 0020+00 1/0 0/0 0/0 .text * daObjWarpOBrg_MoveBGExecute__FP15daObjWarpOBrg_c */ -static void daObjWarpOBrg_MoveBGExecute(daObjWarpOBrg_c* param_0) { - // NONMATCHING +static int daObjWarpOBrg_MoveBGExecute(daObjWarpOBrg_c* i_this) { + return i_this->MoveBGExecute(); } /* 80D2B7A8-80D2B7D4 001E68 002C+00 1/0 0/0 0/0 .text * daObjWarpOBrg_MoveBGDraw__FP15daObjWarpOBrg_c */ -static void daObjWarpOBrg_MoveBGDraw(daObjWarpOBrg_c* param_0) { - // NONMATCHING +static int daObjWarpOBrg_MoveBGDraw(daObjWarpOBrg_c* i_this) { + return i_this->MoveBGDraw(); } -/* 80D2B7D4-80D2B7F0 001E94 001C+00 1/1 0/0 0/0 .text cLib_calcTimer__FPUc */ -extern "C" void func_80D2B7D4(void* _this, u8* param_0) { - // NONMATCHING -} +/* 80D2BA00-80D2BA20 -00001 0020+00 1/0 0/0 0/0 .data daObjWarpOBrg_METHODS */ +static actor_method_class daObjWarpOBrg_METHODS = { + (process_method_func)daObjWarpOBrg_create1st, + (process_method_func)daObjWarpOBrg_MoveBGDelete, + (process_method_func)daObjWarpOBrg_MoveBGExecute, + (process_method_func)NULL, + (process_method_func)daObjWarpOBrg_MoveBGDraw, +}; -/* 80D2B8AC-80D2B8AC 0000B4 0000+00 0/0 0/0 0/0 .rodata @stringBase0 */ +/* 80D2BA20-80D2BA50 -00001 0030+00 0/0 0/0 1/0 .data g_profile_Obj_OrdinBrg */ +extern actor_process_profile_definition g_profile_Obj_OrdinBrg = { + fpcLy_CURRENT_e, // mLayerID + 3, // mListID + fpcPi_CURRENT_e, // mListPrio + PROC_Obj_OrdinBrg, // mProcName + &g_fpcLf_Method.base, // sub_method + sizeof(daObjWarpOBrg_c), // mSize + 0, // mSizeOther + 0, // mParameters + &g_fopAc_Method.base, // sub_method + 531, // mPriority + &daObjWarpOBrg_METHODS, // sub_method + 0x00040000, // mStatus + fopAc_ENV_e, // mActorType + fopAc_CULLBOX_CUSTOM_e, // cullType +};