diff --git a/config/GZ2E01/rels/d_a_fr/symbols.txt b/config/GZ2E01/rels/d_a_fr/symbols.txt index e9566290480..0ef3af06f54 100644 --- a/config/GZ2E01/rels/d_a_fr/symbols.txt +++ b/config/GZ2E01/rels/d_a_fr/symbols.txt @@ -91,6 +91,6 @@ __vt__12dBgS_ObjAcch = .data:0x00000134; // type:object size:0x24 scope:global __vt__12J3DFrameCtrl = .data:0x00000158; // type:object size:0xC scope:global __vt__10daFr_HIO_c = .data:0x00000164; // type:object size:0xC scope:global __global_destructor_chain = .bss:0x00000000; // type:object size:0x4 scope:global -lbl_72_bss_8 = .bss:0x00000008; // type:object size:0x1 data:byte +l_initHIO = .bss:0x00000008; // type:object size:0x1 data:byte @3644 = .bss:0x0000000C; // type:object size:0xC scope:local l_HIO = .bss:0x00000018; // type:object size:0x2C scope:global data:byte diff --git a/config/GZ2E01/rels/d_a_kago/symbols.txt b/config/GZ2E01/rels/d_a_kago/symbols.txt index 0b84959ecd2..1d6519d20d7 100644 --- a/config/GZ2E01/rels/d_a_kago/symbols.txt +++ b/config/GZ2E01/rels/d_a_kago/symbols.txt @@ -246,6 +246,6 @@ __vt__12dBgS_ObjAcch = .data:0x000001D8; // type:object size:0x24 scope:global __vt__8cM3dGPla = .data:0x000001FC; // type:object size:0xC scope:global __vt__12daKago_HIO_c = .data:0x00000208; // type:object size:0xC scope:global __global_destructor_chain = .bss:0x00000000; // type:object size:0x4 scope:global -lbl_265_bss_8 = .bss:0x00000008; // type:object size:0x1 data:byte +l_HIOInit = .bss:0x00000008; // type:object size:0x1 data:byte @3924 = .bss:0x0000000C; // type:object size:0xC scope:local l_HIO = .bss:0x00000018; // type:object size:0x5C scope:global data:byte diff --git a/config/GZ2E01/rels/d_a_obj_brg/symbols.txt b/config/GZ2E01/rels/d_a_obj_brg/symbols.txt index 87975b2b717..24008d87950 100644 --- a/config/GZ2E01/rels/d_a_obj_brg/symbols.txt +++ b/config/GZ2E01/rels/d_a_obj_brg/symbols.txt @@ -3,9 +3,9 @@ _epilog = .text:0x0000002C; // type:function size:0x2C scope:global _unresolved = .text:0x00000058; // type:function size:0x20 scope:global __register_global_object = .text:0x00000078; // type:function size:0x1C scope:global __destroy_global_chain = .text:0x00000094; // type:function size:0x58 scope:global -ride_call_back__FP4dBgWP10fopAc_ac_cP10fopAc_ac_c = .text:0x000000EC; // type:function size:0x3F0 scope:global +ride_call_back__FP4dBgWP10fopAc_ac_cP10fopAc_ac_c = .text:0x000000EC; // type:function size:0x3F0 scope:local __dt__4cXyzFv = .text:0x000004DC; // type:function size:0x3C scope:global -daObj_Brg_Draw__FP13obj_brg_class = .text:0x00000518; // type:function size:0xA08 scope:global +daObj_Brg_Draw__FP13obj_brg_class = .text:0x00000518; // type:function size:0xA08 scope:local control1__FP13obj_brg_classP4br_s = .text:0x00000F20; // type:function size:0x324 scope:global control2__FP13obj_brg_classP4br_s = .text:0x00001244; // type:function size:0x1C4 scope:global control3__FP13obj_brg_classP4br_s = .text:0x00001408; // type:function size:0xC0 scope:global @@ -13,12 +13,12 @@ cut_control1__FP13obj_brg_classP4br_s = .text:0x000014C8; // type:function size: cut_control2__FP13obj_brg_classP4br_s = .text:0x000017E8; // type:function size:0x330 scope:global himo_cut_control1__FP13obj_brg_classP4cXyzf = .text:0x00001B18; // type:function size:0x240 scope:global obj_brg_move__FP13obj_brg_class = .text:0x00001D58; // type:function size:0xCA4 scope:global -daObj_Brg_Execute__FP13obj_brg_class = .text:0x000029FC; // type:function size:0x1618 scope:global -daObj_Brg_IsDelete__FP13obj_brg_class = .text:0x00004014; // type:function size:0x20 scope:global -daObj_Brg_Delete__FP13obj_brg_class = .text:0x00004034; // type:function size:0x5C scope:global +daObj_Brg_Execute__FP13obj_brg_class = .text:0x000029FC; // type:function size:0x1618 scope:local +daObj_Brg_IsDelete__FP13obj_brg_class = .text:0x00004014; // type:function size:0x20 scope:local +daObj_Brg_Delete__FP13obj_brg_class = .text:0x00004034; // type:function size:0x5C scope:local CreateInit__FP10fopAc_ac_c = .text:0x00004090; // type:function size:0x190 scope:global -CallbackCreateHeap__FP10fopAc_ac_c = .text:0x00004220; // type:function size:0x610 scope:global -daObj_Brg_Create__FP10fopAc_ac_c = .text:0x00004830; // type:function size:0xD24 scope:global +CallbackCreateHeap__FP10fopAc_ac_c = .text:0x00004220; // type:function size:0x610 scope:local +daObj_Brg_Create__FP10fopAc_ac_c = .text:0x00004830; // type:function size:0xD24 scope:local __dt__8dCcD_CylFv = .text:0x00005554; // type:function size:0xCC scope:global __ct__8dCcD_CylFv = .text:0x00005620; // type:function size:0x84 scope:global __dt__8cM3dGCylFv = .text:0x000056A4; // type:function size:0x48 scope:global @@ -173,10 +173,10 @@ obj_brg_bmd$5576 = .rodata:0x00000160; // type:object size:0xC scope:local @stringBase0 = .rodata:0x00000244; // type:object size:0x17 scope:local data:string_table l_color$4002 = .data:0x00000000; // type:object size:0x4 scope:local l_color$4042 = .data:0x00000004; // type:object size:0x4 scope:local -ita_z_p = .data:0x00000008; // type:object size:0x2C scope:global align:4 data:float +ita_z_p = .data:0x00000008; // type:object size:0x2C scope:local align:4 data:float himo_cyl_src$5532 = .data:0x00000034; // type:object size:0x44 scope:local wire_cyl_src$5533 = .data:0x00000078; // type:object size:0x44 scope:local -l_daObj_Brg_Method = .data:0x000000BC; // type:object size:0x20 scope:global +l_daObj_Brg_Method = .data:0x000000BC; // type:object size:0x20 scope:local g_profile_OBJ_BRG = .data:0x000000DC; // type:object size:0x30 scope:global __vt__8cM3dGAab = .data:0x0000010C; // type:object size:0xC scope:global __vt__8cM3dGCyl = .data:0x00000118; // type:object size:0xC scope:global @@ -199,7 +199,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 -wy = .bss:0x00000046; // type:object size:0x2 scope:global data:2byte +wy = .bss:0x00000046; // type:object size:0x2 scope:local data:2byte @5786 = .bss:0x00000048; // type:object size:0xC scope:local @5789 = .bss:0x00000058; // type:object size:0xC scope:local @5790 = .bss:0x00000064; // type:object size:0xC scope:local diff --git a/config/GZ2E01/rels/d_a_obj_timer/symbols.txt b/config/GZ2E01/rels/d_a_obj_timer/symbols.txt index 5b11c898e4f..d46b9e5ac93 100644 --- a/config/GZ2E01/rels/d_a_obj_timer/symbols.txt +++ b/config/GZ2E01/rels/d_a_obj_timer/symbols.txt @@ -27,4 +27,4 @@ lbl_22_data_10 = .data:0x00000010; // type:object size:0x10 mode_proc$3725 = .data:0x00000038; // type:object size:0x18 scope:local Mthd_Table__Q210daObjTimer27@unnamed@d_a_obj_timer_cpp@ = .data:0x00000050; // type:object size:0x20 scope:global g_profile_Obj_Timer = .data:0x00000070; // type:object size:0x30 scope:global -lbl_22_bss_0 = .bss:0x00000000; // type:object size:0x1 data:byte +init$1527 = .bss:0x00000000; // type:object size:0x1 data:byte diff --git a/config/GZ2E01/rels/d_a_obj_tobyhouse/symbols.txt b/config/GZ2E01/rels/d_a_obj_tobyhouse/symbols.txt index f69aaf861c3..82e9d1efcbf 100644 --- a/config/GZ2E01/rels/d_a_obj_tobyhouse/symbols.txt +++ b/config/GZ2E01/rels/d_a_obj_tobyhouse/symbols.txt @@ -56,8 +56,7 @@ l_bck = .rodata:0x00000018; // type:object size:0xC scope:global @stringBase0 = .rodata:0x00000074; // type:object size:0x98 scope:local data:string_table ...data.0 = .data:0x00000000; // type:label scope:local cNullVec__6Z2Calc = .data:0x00000000; // type:object size:0xC scope:global -@1787 = .data:0x0000000C; // type:object size:0x4 scope:local -lbl_664_data_10 = .data:0x00000010; // type:object size:0x10 +@1787 = .data:0x0000000C; // type:object size:0x14 scope:local l_arcName = .data:0x00000020; // type:object size:0x8 scope:global l_staff_name = .data:0x00000028; // type:object size:0x4 scope:global data:4byte l_event_name = .data:0x0000002C; // type:object size:0x8 scope:global @@ -91,7 +90,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_664_bss_45 = .bss:0x00000045; // type:object size:0x1 data:byte +init$1832 = .bss:0x00000045; // type:object size:0x1 scope:local data:byte @4351 = .bss:0x00000048; // type:object size:0xC scope:local l_shotSmokeScale$4350 = .bss:0x00000058; // type:object size:0xC scope:local sInstance__40JASGlobalInstance<19JASDefaultBankTable> = .bss:0x00000064; // type:object size:0x4 scope:global diff --git a/config/GZ2E01/rels/d_a_obj_togeTrap/symbols.txt b/config/GZ2E01/rels/d_a_obj_togeTrap/symbols.txt index 7824cb45ef7..007fae8716a 100644 --- a/config/GZ2E01/rels/d_a_obj_togeTrap/symbols.txt +++ b/config/GZ2E01/rels/d_a_obj_togeTrap/symbols.txt @@ -28,10 +28,10 @@ init_modeBreak__12daTogeTrap_cFv = .text:0x00000F14; // type:function size:0xC8 modeBreak__12daTogeTrap_cFv = .text:0x00000FDC; // type:function size:0x190 scope:global Draw__12daTogeTrap_cFv = .text:0x0000116C; // type:function size:0xB8 scope:global Delete__12daTogeTrap_cFv = .text:0x00001224; // type:function size:0x30 scope:global -daTogeTrap_Draw__FP12daTogeTrap_c = .text:0x00001254; // type:function size:0x2C scope:global -daTogeTrap_Execute__FP12daTogeTrap_c = .text:0x00001280; // type:function size:0x20 scope:global -daTogeTrap_Delete__FP12daTogeTrap_c = .text:0x000012A0; // type:function size:0x20 scope:global -daTogeTrap_Create__FP10fopAc_ac_c = .text:0x000012C0; // type:function size:0x20 scope:global +daTogeTrap_Draw__FP12daTogeTrap_c = .text:0x00001254; // type:function size:0x2C scope:local +daTogeTrap_Execute__FP12daTogeTrap_c = .text:0x00001280; // type:function size:0x20 scope:local +daTogeTrap_Delete__FP12daTogeTrap_c = .text:0x000012A0; // type:function size:0x20 scope:local +daTogeTrap_Create__FP10fopAc_ac_c = .text:0x000012C0; // type:function size:0x20 scope:local __dt__10cCcD_GSttsFv = .text:0x000012E0; // type:function size:0x48 scope:global __dt__16daTogeTrap_HIO_cFv = .text:0x00001328; // type:function size:0x6C scope:global __sinit_d_a_obj_togeTrap_cpp = .text:0x00001394; // type:function size:0x70 scope:local @@ -57,16 +57,16 @@ mCcDObjInfo__12daTogeTrap_c = .rodata:0x00000014; // type:object size:0x30 scope @4036 = .rodata:0x0000006C; // type:object size:0x4 scope:local @stringBase0 = .rodata:0x00000070; // type:object size:0x7 scope:local data:string_table ...data.0 = .data:0x00000000; // type:label scope:local -cNullVec__6Z2Calc = .data:0x00000000; // type:object size:0xC scope:global +cNullVec__6Z2Calc = .data:0x00000000; // type:object size:0xC scope:local @1787 = .data:0x0000000C; // type:object size:0x4 scope:local -lbl_665_data_10 = .data:0x00000010; // type:object size:0x10 +lbl_665_data_10 = .data:0x00000010; // type:object size:0x10 scope:local mCcDCyl__12daTogeTrap_c = .data:0x00000020; // type:object size:0x44 scope:global @3883 = .data:0x00000064; // type:object size:0xC scope:local @3884 = .data:0x00000070; // type:object size:0xC scope:local @3885 = .data:0x0000007C; // type:object size:0xC scope:local @3886 = .data:0x00000088; // type:object size:0xC scope:local mode_proc$3882 = .data:0x00000094; // type:object size:0x30 scope:local -l_daTogeTrap_Method = .data:0x000000C4; // type:object size:0x20 scope:global +l_daTogeTrap_Method = .data:0x000000C4; // type:object size:0x20 scope:local g_profile_Obj_TogeTrap = .data:0x000000E4; // type:object size:0x30 scope:global __vt__10cCcD_GStts = .data:0x00000114; // type:object size:0xC scope:global __vt__10dCcD_GStts = .data:0x00000120; // type:object size:0xC scope:global @@ -78,5 +78,5 @@ __vt__18fOpAcm_HIO_entry_c = .data:0x00000178; // type:object size:0xC scope:glo __vt__14mDoHIO_entry_c = .data:0x00000184; // type:object size:0xC scope:global __global_destructor_chain = .bss:0x00000000; // type:object size:0x4 scope:global @3647 = .bss:0x00000008; // type:object size:0xC scope:local -l_HIO = .bss:0x00000014; // type:object size:0x20 scope:global align:4 data:float -lbl_665_bss_34 = .bss:0x00000034; // type:object size:0x1 data:byte +l_HIO = .bss:0x00000014; // type:object size:0x20 scope:local align:4 data:float +init$1675 = .bss:0x00000034; // type:object size:0x1 scope:local data:byte diff --git a/config/GZ2E01/rels/d_a_obj_tombo/symbols.txt b/config/GZ2E01/rels/d_a_obj_tombo/symbols.txt index e1f158c128a..0447e763ccd 100644 --- a/config/GZ2E01/rels/d_a_obj_tombo/symbols.txt +++ b/config/GZ2E01/rels/d_a_obj_tombo/symbols.txt @@ -109,6 +109,6 @@ __vt__14dBgS_ObjGndChk = .data:0x000000A4; // type:object size:0x30 scope:global __vt__12J3DFrameCtrl = .data:0x000000D4; // type:object size:0xC scope:global __vt__14daObj_TomHIO_c = .data:0x000000E0; // type:object size:0xC scope:global __global_destructor_chain = .bss:0x00000000; // type:object size:0x4 scope:global -lbl_666_bss_8 = .bss:0x00000008; // type:object size:0x1 data:byte +l_HIOInit = .bss:0x00000008; // type:object size:0x1 scope:local data:byte @3770 = .bss:0x0000000C; // type:object size:0xC scope:local l_HIO = .bss:0x00000018; // type:object size:0x14 scope:global align:4 data:float diff --git a/config/GZ2J01/rels/d_a_obj_tobyhouse/symbols.txt b/config/GZ2J01/rels/d_a_obj_tobyhouse/symbols.txt index c1bbc0da2a4..fca66da4977 100644 --- a/config/GZ2J01/rels/d_a_obj_tobyhouse/symbols.txt +++ b/config/GZ2J01/rels/d_a_obj_tobyhouse/symbols.txt @@ -55,8 +55,7 @@ l_bck = .rodata:0x00000018; // type:object size:0xC scope:global @4905 = .rodata:0x00000070; // type:object size:0x4 scope:local @stringBase0 = .rodata:0x00000074; // type:object size:0x98 scope:local data:string_table cNullVec__6Z2Calc = .data:0x00000000; // type:object size:0xC scope:global -@1787 = .data:0x0000000C; // type:object size:0x4 scope:local -lbl_664_data_10 = .data:0x00000010; // type:object size:0x10 +@1787 = .data:0x0000000C; // type:object size:0x14 scope:local l_arcName = .data:0x00000020; // type:object size:0x8 scope:global l_staff_name = .data:0x00000028; // type:object size:0x4 scope:global data:4byte l_event_name = .data:0x0000002C; // type:object size:0x8 scope:global @@ -90,7 +89,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_664_bss_45 = .bss:0x00000045; // type:object size:0x1 data:byte +init$1832 = .bss:0x00000045; // type:object size:0x1 data:byte scope:local @4351 = .bss:0x00000048; // type:object size:0xC scope:local l_shotSmokeScale$4350 = .bss:0x00000058; // type:object size:0xC scope:local sInstance__40JASGlobalInstance<19JASDefaultBankTable> = .bss:0x00000064; // type:object size:0x4 scope:global diff --git a/config/GZ2J01/rels/d_a_obj_togeTrap/symbols.txt b/config/GZ2J01/rels/d_a_obj_togeTrap/symbols.txt index 650591b246d..391c756d044 100644 --- a/config/GZ2J01/rels/d_a_obj_togeTrap/symbols.txt +++ b/config/GZ2J01/rels/d_a_obj_togeTrap/symbols.txt @@ -28,10 +28,10 @@ init_modeBreak__12daTogeTrap_cFv = .text:0x00000F14; // type:function size:0xC8 modeBreak__12daTogeTrap_cFv = .text:0x00000FDC; // type:function size:0x190 scope:global Draw__12daTogeTrap_cFv = .text:0x0000116C; // type:function size:0xB8 scope:global Delete__12daTogeTrap_cFv = .text:0x00001224; // type:function size:0x30 scope:global -daTogeTrap_Draw__FP12daTogeTrap_c = .text:0x00001254; // type:function size:0x2C scope:global -daTogeTrap_Execute__FP12daTogeTrap_c = .text:0x00001280; // type:function size:0x20 scope:global -daTogeTrap_Delete__FP12daTogeTrap_c = .text:0x000012A0; // type:function size:0x20 scope:global -daTogeTrap_Create__FP10fopAc_ac_c = .text:0x000012C0; // type:function size:0x20 scope:global +daTogeTrap_Draw__FP12daTogeTrap_c = .text:0x00001254; // type:function size:0x2C scope:local +daTogeTrap_Execute__FP12daTogeTrap_c = .text:0x00001280; // type:function size:0x20 scope:local +daTogeTrap_Delete__FP12daTogeTrap_c = .text:0x000012A0; // type:function size:0x20 scope:local +daTogeTrap_Create__FP10fopAc_ac_c = .text:0x000012C0; // type:function size:0x20 scope:local __dt__10cCcD_GSttsFv = .text:0x000012E0; // type:function size:0x48 scope:global __dt__16daTogeTrap_HIO_cFv = .text:0x00001328; // type:function size:0x6C scope:global __sinit_d_a_obj_togeTrap_cpp = .text:0x00001394; // type:function size:0x70 scope:local @@ -56,16 +56,16 @@ mCcDObjInfo__12daTogeTrap_c = .rodata:0x00000014; // type:object size:0x30 scope @4007 = .rodata:0x00000068; // type:object size:0x4 scope:local align:4 data:float @4036 = .rodata:0x0000006C; // type:object size:0x4 scope:local @stringBase0 = .rodata:0x00000070; // type:object size:0x7 scope:local data:string_table -cNullVec__6Z2Calc = .data:0x00000000; // type:object size:0xC scope:global +cNullVec__6Z2Calc = .data:0x00000000; // type:object size:0xC scope:local @1787 = .data:0x0000000C; // type:object size:0x4 scope:local -lbl_665_data_10 = .data:0x00000010; // type:object size:0x10 +lbl_665_data_10 = .data:0x00000010; // type:object size:0x10 scope:local mCcDCyl__12daTogeTrap_c = .data:0x00000020; // type:object size:0x44 scope:global @3883 = .data:0x00000064; // type:object size:0xC scope:local @3884 = .data:0x00000070; // type:object size:0xC scope:local @3885 = .data:0x0000007C; // type:object size:0xC scope:local @3886 = .data:0x00000088; // type:object size:0xC scope:local mode_proc$3882 = .data:0x00000094; // type:object size:0x30 scope:local -l_daTogeTrap_Method = .data:0x000000C4; // type:object size:0x20 scope:global +l_daTogeTrap_Method = .data:0x000000C4; // type:object size:0x20 scope:local g_profile_Obj_TogeTrap = .data:0x000000E4; // type:object size:0x30 scope:global __vt__10cCcD_GStts = .data:0x00000114; // type:object size:0xC scope:global __vt__10dCcD_GStts = .data:0x00000120; // type:object size:0xC scope:global @@ -77,5 +77,5 @@ __vt__18fOpAcm_HIO_entry_c = .data:0x00000178; // type:object size:0xC scope:glo __vt__14mDoHIO_entry_c = .data:0x00000184; // type:object size:0xC scope:global __global_destructor_chain = .bss:0x00000000; // type:object size:0x4 scope:global @3647 = .bss:0x00000008; // type:object size:0xC scope:local -l_HIO = .bss:0x00000014; // type:object size:0x20 scope:global align:4 data:float -lbl_665_bss_34 = .bss:0x00000034; // type:object size:0x1 data:byte +l_HIO = .bss:0x00000014; // type:object size:0x20 scope:local align:4 data:float +init$1675 = .bss:0x00000034; // type:object size:0x1 data:byte scope:local diff --git a/config/GZ2J01/rels/d_a_obj_tombo/symbols.txt b/config/GZ2J01/rels/d_a_obj_tombo/symbols.txt index e1f158c128a..fb642bbc7b2 100644 --- a/config/GZ2J01/rels/d_a_obj_tombo/symbols.txt +++ b/config/GZ2J01/rels/d_a_obj_tombo/symbols.txt @@ -109,6 +109,6 @@ __vt__14dBgS_ObjGndChk = .data:0x000000A4; // type:object size:0x30 scope:global __vt__12J3DFrameCtrl = .data:0x000000D4; // type:object size:0xC scope:global __vt__14daObj_TomHIO_c = .data:0x000000E0; // type:object size:0xC scope:global __global_destructor_chain = .bss:0x00000000; // type:object size:0x4 scope:global -lbl_666_bss_8 = .bss:0x00000008; // type:object size:0x1 data:byte +l_HIOInit = .bss:0x00000008; // type:object size:0x1 data:byte scope:local @3770 = .bss:0x0000000C; // type:object size:0xC scope:local l_HIO = .bss:0x00000018; // type:object size:0x14 scope:global align:4 data:float diff --git a/config/GZ2P01/rels/d_a_obj_tobyhouse/symbols.txt b/config/GZ2P01/rels/d_a_obj_tobyhouse/symbols.txt index c1bbc0da2a4..fca66da4977 100644 --- a/config/GZ2P01/rels/d_a_obj_tobyhouse/symbols.txt +++ b/config/GZ2P01/rels/d_a_obj_tobyhouse/symbols.txt @@ -55,8 +55,7 @@ l_bck = .rodata:0x00000018; // type:object size:0xC scope:global @4905 = .rodata:0x00000070; // type:object size:0x4 scope:local @stringBase0 = .rodata:0x00000074; // type:object size:0x98 scope:local data:string_table cNullVec__6Z2Calc = .data:0x00000000; // type:object size:0xC scope:global -@1787 = .data:0x0000000C; // type:object size:0x4 scope:local -lbl_664_data_10 = .data:0x00000010; // type:object size:0x10 +@1787 = .data:0x0000000C; // type:object size:0x14 scope:local l_arcName = .data:0x00000020; // type:object size:0x8 scope:global l_staff_name = .data:0x00000028; // type:object size:0x4 scope:global data:4byte l_event_name = .data:0x0000002C; // type:object size:0x8 scope:global @@ -90,7 +89,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_664_bss_45 = .bss:0x00000045; // type:object size:0x1 data:byte +init$1832 = .bss:0x00000045; // type:object size:0x1 data:byte scope:local @4351 = .bss:0x00000048; // type:object size:0xC scope:local l_shotSmokeScale$4350 = .bss:0x00000058; // type:object size:0xC scope:local sInstance__40JASGlobalInstance<19JASDefaultBankTable> = .bss:0x00000064; // type:object size:0x4 scope:global diff --git a/config/GZ2P01/rels/d_a_obj_togeTrap/symbols.txt b/config/GZ2P01/rels/d_a_obj_togeTrap/symbols.txt index 650591b246d..391c756d044 100644 --- a/config/GZ2P01/rels/d_a_obj_togeTrap/symbols.txt +++ b/config/GZ2P01/rels/d_a_obj_togeTrap/symbols.txt @@ -28,10 +28,10 @@ init_modeBreak__12daTogeTrap_cFv = .text:0x00000F14; // type:function size:0xC8 modeBreak__12daTogeTrap_cFv = .text:0x00000FDC; // type:function size:0x190 scope:global Draw__12daTogeTrap_cFv = .text:0x0000116C; // type:function size:0xB8 scope:global Delete__12daTogeTrap_cFv = .text:0x00001224; // type:function size:0x30 scope:global -daTogeTrap_Draw__FP12daTogeTrap_c = .text:0x00001254; // type:function size:0x2C scope:global -daTogeTrap_Execute__FP12daTogeTrap_c = .text:0x00001280; // type:function size:0x20 scope:global -daTogeTrap_Delete__FP12daTogeTrap_c = .text:0x000012A0; // type:function size:0x20 scope:global -daTogeTrap_Create__FP10fopAc_ac_c = .text:0x000012C0; // type:function size:0x20 scope:global +daTogeTrap_Draw__FP12daTogeTrap_c = .text:0x00001254; // type:function size:0x2C scope:local +daTogeTrap_Execute__FP12daTogeTrap_c = .text:0x00001280; // type:function size:0x20 scope:local +daTogeTrap_Delete__FP12daTogeTrap_c = .text:0x000012A0; // type:function size:0x20 scope:local +daTogeTrap_Create__FP10fopAc_ac_c = .text:0x000012C0; // type:function size:0x20 scope:local __dt__10cCcD_GSttsFv = .text:0x000012E0; // type:function size:0x48 scope:global __dt__16daTogeTrap_HIO_cFv = .text:0x00001328; // type:function size:0x6C scope:global __sinit_d_a_obj_togeTrap_cpp = .text:0x00001394; // type:function size:0x70 scope:local @@ -56,16 +56,16 @@ mCcDObjInfo__12daTogeTrap_c = .rodata:0x00000014; // type:object size:0x30 scope @4007 = .rodata:0x00000068; // type:object size:0x4 scope:local align:4 data:float @4036 = .rodata:0x0000006C; // type:object size:0x4 scope:local @stringBase0 = .rodata:0x00000070; // type:object size:0x7 scope:local data:string_table -cNullVec__6Z2Calc = .data:0x00000000; // type:object size:0xC scope:global +cNullVec__6Z2Calc = .data:0x00000000; // type:object size:0xC scope:local @1787 = .data:0x0000000C; // type:object size:0x4 scope:local -lbl_665_data_10 = .data:0x00000010; // type:object size:0x10 +lbl_665_data_10 = .data:0x00000010; // type:object size:0x10 scope:local mCcDCyl__12daTogeTrap_c = .data:0x00000020; // type:object size:0x44 scope:global @3883 = .data:0x00000064; // type:object size:0xC scope:local @3884 = .data:0x00000070; // type:object size:0xC scope:local @3885 = .data:0x0000007C; // type:object size:0xC scope:local @3886 = .data:0x00000088; // type:object size:0xC scope:local mode_proc$3882 = .data:0x00000094; // type:object size:0x30 scope:local -l_daTogeTrap_Method = .data:0x000000C4; // type:object size:0x20 scope:global +l_daTogeTrap_Method = .data:0x000000C4; // type:object size:0x20 scope:local g_profile_Obj_TogeTrap = .data:0x000000E4; // type:object size:0x30 scope:global __vt__10cCcD_GStts = .data:0x00000114; // type:object size:0xC scope:global __vt__10dCcD_GStts = .data:0x00000120; // type:object size:0xC scope:global @@ -77,5 +77,5 @@ __vt__18fOpAcm_HIO_entry_c = .data:0x00000178; // type:object size:0xC scope:glo __vt__14mDoHIO_entry_c = .data:0x00000184; // type:object size:0xC scope:global __global_destructor_chain = .bss:0x00000000; // type:object size:0x4 scope:global @3647 = .bss:0x00000008; // type:object size:0xC scope:local -l_HIO = .bss:0x00000014; // type:object size:0x20 scope:global align:4 data:float -lbl_665_bss_34 = .bss:0x00000034; // type:object size:0x1 data:byte +l_HIO = .bss:0x00000014; // type:object size:0x20 scope:local align:4 data:float +init$1675 = .bss:0x00000034; // type:object size:0x1 data:byte scope:local diff --git a/config/GZ2P01/rels/d_a_obj_tombo/symbols.txt b/config/GZ2P01/rels/d_a_obj_tombo/symbols.txt index e1f158c128a..fb642bbc7b2 100644 --- a/config/GZ2P01/rels/d_a_obj_tombo/symbols.txt +++ b/config/GZ2P01/rels/d_a_obj_tombo/symbols.txt @@ -109,6 +109,6 @@ __vt__14dBgS_ObjGndChk = .data:0x000000A4; // type:object size:0x30 scope:global __vt__12J3DFrameCtrl = .data:0x000000D4; // type:object size:0xC scope:global __vt__14daObj_TomHIO_c = .data:0x000000E0; // type:object size:0xC scope:global __global_destructor_chain = .bss:0x00000000; // type:object size:0x4 scope:global -lbl_666_bss_8 = .bss:0x00000008; // type:object size:0x1 data:byte +l_HIOInit = .bss:0x00000008; // type:object size:0x1 data:byte scope:local @3770 = .bss:0x0000000C; // type:object size:0xC scope:local l_HIO = .bss:0x00000018; // type:object size:0x14 scope:global align:4 data:float diff --git a/config/RZDE01_00/rels/d_a_fr/symbols.txt b/config/RZDE01_00/rels/d_a_fr/symbols.txt index f022e562041..aea16b9405b 100644 --- a/config/RZDE01_00/rels/d_a_fr/symbols.txt +++ b/config/RZDE01_00/rels/d_a_fr/symbols.txt @@ -67,6 +67,6 @@ lbl_73_data_134 = .data:0x00000134; // type:object size:0xC @92624 = .data:0x00000140; // type:object size:0xC scope:local __RTTI__10daFr_HIO_c = .data:0x0000014C; // type:object size:0x8 scope:global __global_destructor_chain = .bss:0x00000000; // type:object size:0x4 scope:global -lbl_73_bss_8 = .bss:0x00000008; // type:object size:0x1 data:byte +l_initHIO = .bss:0x00000008; // type:object size:0x1 data:byte @92050 = .bss:0x0000000C; // type:object size:0xC scope:local l_HIO = .bss:0x00000018; // type:object size:0x2C scope:global data:byte diff --git a/config/ShieldD/rels/d_a_frD/symbols.txt b/config/ShieldD/rels/d_a_frD/symbols.txt index 9476c5d7937..1fbc1d1ea60 100644 --- a/config/ShieldD/rels/d_a_frD/symbols.txt +++ b/config/ShieldD/rels/d_a_frD/symbols.txt @@ -125,5 +125,5 @@ lbl_70_data_2F8 = .data:0x000002F8; // type:object size:0x24 @117848 = .data:0x000004E0; // type:object size:0xC scope:local @117849 = .data:0x00000504; // type:object size:0x11 scope:local data:string @117850 = .data:0x0000052C; // type:object size:0xD scope:local data:string -lbl_70_bss_0 = .bss:0x00000000; // type:object size:0x1 data:byte +l_initHIO = .bss:0x00000000; // type:object size:0x1 data:byte l_HIO = .bss:0x00000004; // type:object size:0x2C scope:global data:byte diff --git a/config/ShieldD/rels/d_a_kagoD/symbols.txt b/config/ShieldD/rels/d_a_kagoD/symbols.txt index fe6f39bcf8d..5ca8576a451 100644 --- a/config/ShieldD/rels/d_a_kagoD/symbols.txt +++ b/config/ShieldD/rels/d_a_kagoD/symbols.txt @@ -313,5 +313,5 @@ lbl_256_data_530 = .data:0x00000530; // type:object size:0x24 @125862 = .data:0x00000738; // type:object size:0xC scope:local @125863 = .data:0x0000075C; // type:object size:0x11 scope:local data:string lbl_256_data_76D = .data:0x0000076D; // type:object size:0xB7 -lbl_256_bss_0 = .bss:0x00000000; // type:object size:0x1 data:byte +l_HIOInit = .bss:0x00000000; // type:object size:0x1 data:byte l_HIO = .bss:0x00000004; // type:object size:0x5C scope:global data:byte diff --git a/configure.py b/configure.py index eaed651a90b..bcdca9bb39f 100755 --- a/configure.py +++ b/configure.py @@ -1499,7 +1499,7 @@ config.libs = [ ActorRel(NonMatching, "d_a_obj_ito"), ActorRel(NonMatching, "d_a_obj_movebox"), ActorRel(NonMatching, "d_a_obj_swpush"), - ActorRel(NonMatching, "d_a_obj_timer"), + ActorRel(MatchingFor("GZ2E01"), "d_a_obj_timer"), ActorRel(MatchingFor("GZ2E01"), "d_a_path_line"), ActorRel(NonMatching, "d_a_scene_exit"), ActorRel(MatchingFor("GZ2E01"), "d_a_set_bgobj"), @@ -1636,7 +1636,7 @@ config.libs = [ ActorRel(MatchingFor("GZ2E01"), "d_a_b_zant_magic"), ActorRel(MatchingFor("GZ2E01"), "d_a_b_zant_mobile"), ActorRel(MatchingFor("GZ2E01"), "d_a_b_zant_sima"), - ActorRel(NonMatching, "d_a_balloon_2D"), + ActorRel(Equivalent, "d_a_balloon_2D"), # weak func order ActorRel(MatchingFor("GZ2E01"), "d_a_bullet"), ActorRel(Equivalent, "d_a_coach_2D"), # weak func order ActorRel(MatchingFor("GZ2E01"), "d_a_coach_fire"), @@ -1655,7 +1655,7 @@ config.libs = [ ActorRel(NonMatching, "d_a_e_bi"), ActorRel(MatchingFor("GZ2E01"), "d_a_e_bi_leaf"), ActorRel(NonMatching, "d_a_e_bs"), - ActorRel(NonMatching, "d_a_e_bu"), + ActorRel(Equivalent, "d_a_e_bu"), ActorRel(Equivalent, "d_a_e_bug"), # weak func order ActorRel(Equivalent, "d_a_e_cr"), # weak func order ActorRel(MatchingFor("GZ2E01"), "d_a_e_cr_egg"), @@ -1683,7 +1683,7 @@ config.libs = [ ActorRel(MatchingFor("GZ2E01"), "d_a_e_is"), ActorRel(Equivalent, "d_a_e_kg"), ActorRel(Equivalent, "d_a_e_kk"), # weak func order - ActorRel(NonMatching, "d_a_e_kr"), + ActorRel(Equivalent, "d_a_e_kr"), # weak func order ActorRel(MatchingFor("GZ2E01"), "d_a_e_mb"), ActorRel(MatchingFor("GZ2E01"), "d_a_e_md"), ActorRel(Equivalent, "d_a_e_mf"), @@ -1732,7 +1732,7 @@ config.libs = [ ActorRel(Equivalent, "d_a_e_yk"), # weak func order ActorRel(Equivalent, "d_a_e_ym"), ActorRel(MatchingFor("GZ2E01"), "d_a_e_ym_tag"), - ActorRel(NonMatching, "d_a_e_ymb"), + ActorRel(Equivalent, "d_a_e_ymb"), # weak func order ActorRel(NonMatching, "d_a_e_yr"), ActorRel(NonMatching, "d_a_e_zh"), ActorRel(NonMatching, "d_a_e_zm"), @@ -1891,7 +1891,7 @@ config.libs = [ ActorRel(MatchingFor("GZ2E01"), "d_a_obj_bmshutter"), ActorRel(MatchingFor("GZ2E01"), "d_a_obj_bombf"), ActorRel(MatchingFor("GZ2E01"), "d_a_obj_boumato"), - ActorRel(NonMatching, "d_a_obj_brg"), + ActorRel(MatchingFor("GZ2E01"), "d_a_obj_brg"), ActorRel(MatchingFor("GZ2E01"), "d_a_obj_bsGate"), ActorRel(MatchingFor("GZ2E01"), "d_a_obj_bubblePilar"), ActorRel(MatchingFor("GZ2E01"), "d_a_obj_catdoor"), @@ -1921,7 +1921,7 @@ config.libs = [ ActorRel(MatchingFor("GZ2E01"), "d_a_obj_enemy_create"), ActorRel(NonMatching, "d_a_obj_fallobj"), ActorRel(MatchingFor("GZ2E01"), "d_a_obj_fan"), - ActorRel(NonMatching, "d_a_obj_fchain"), + ActorRel(Equivalent, "d_a_obj_fchain"), # weak func order ActorRel(MatchingFor("GZ2E01"), "d_a_obj_fireWood"), ActorRel(MatchingFor("GZ2E01"), "d_a_obj_fireWood2"), ActorRel(MatchingFor("GZ2E01"), "d_a_obj_firepillar"), @@ -2073,7 +2073,7 @@ config.libs = [ ActorRel(MatchingFor("GZ2E01"), "d_a_obj_pillar"), ActorRel(MatchingFor("GZ2E01"), "d_a_obj_pleaf"), ActorRel(NonMatching, "d_a_obj_poCandle"), - ActorRel(NonMatching, "d_a_obj_poFire"), + ActorRel(Equivalent, "d_a_obj_poFire"), ActorRel(NonMatching, "d_a_obj_poTbox"), ActorRel(MatchingFor("GZ2E01"), "d_a_obj_prop"), ActorRel(NonMatching, "d_a_obj_pumpkin"), @@ -2141,9 +2141,9 @@ config.libs = [ ActorRel(MatchingFor("GZ2E01"), "d_a_obj_tmoon"), ActorRel(MatchingFor("GZ2E01"), "d_a_obj_toaru_maki"), ActorRel(NonMatching, "d_a_obj_toby"), - ActorRel(NonMatching, "d_a_obj_tobyhouse"), - ActorRel(NonMatching, "d_a_obj_togeTrap"), - ActorRel(NonMatching, "d_a_obj_tombo"), + ActorRel(Equivalent, "d_a_obj_tobyhouse"), # weak function order + ActorRel(MatchingFor("GZ2E01"), "d_a_obj_togeTrap"), + ActorRel(MatchingFor("GZ2E01"), "d_a_obj_tombo"), ActorRel(MatchingFor("GZ2E01"), "d_a_obj_tornado"), ActorRel(MatchingFor("GZ2E01"), "d_a_obj_tornado2"), ActorRel(MatchingFor("GZ2E01"), "d_a_obj_tp"), @@ -2229,7 +2229,7 @@ config.libs = [ ActorRel(MatchingFor("GZ2E01"), "d_a_tag_wara_howl"), ActorRel(MatchingFor("GZ2E01"), "d_a_tag_watchge"), ActorRel(MatchingFor("GZ2E01"), "d_a_tag_waterfall"), - ActorRel(NonMatching, "d_a_tag_wljump"), + ActorRel(MatchingFor("GZ2E01"), "d_a_tag_wljump"), ActorRel(MatchingFor("GZ2E01"), "d_a_tag_yami", extra_cflags=['-pragma "nosyminline off"']), ActorRel(MatchingFor("GZ2E01"), "d_a_talk"), ActorRel(MatchingFor("GZ2E01"), "d_a_tboxSw"), diff --git a/include/JSystem/J3DGraphAnimator/J3DJoint.h b/include/JSystem/J3DGraphAnimator/J3DJoint.h index d5854e996f5..ccd676967a0 100644 --- a/include/JSystem/J3DGraphAnimator/J3DJoint.h +++ b/include/JSystem/J3DGraphAnimator/J3DJoint.h @@ -28,7 +28,10 @@ public: virtual void calc() = 0; static J3DMtxBuffer* getMtxBuffer() { return mMtxBuffer; } - static J3DJoint* getJoint() { return mJoint; } + static J3DJoint* getJoint() { + J3D_ASSERT(185, mJoint != NULL, "Error : null pointer.") + return mJoint; + } static void setJoint(J3DJoint* joint) { mJoint = joint; } static J3DMtxBuffer* mMtxBuffer; diff --git a/include/d/actor/d_a_alink.h b/include/d/actor/d_a_alink.h index 07cdc6619a5..c71b8d88dee 100644 --- a/include/d/actor/d_a_alink.h +++ b/include/d/actor/d_a_alink.h @@ -221,11 +221,16 @@ public: /* 0x0 */ u8 unk_0x0; }; -class daAlinkHIO_c { +class daAlinkHIO_c +#ifdef DEBUG +: public mDoHIO_entry_c +#endif +{ public: /* 80140B88 */ daAlinkHIO_c(); /* 80140C10 */ virtual ~daAlinkHIO_c(); + void genMessage(JORMContext*); void jumpStateUpdate(const cXyz*, const cXyz*, f32); /* 0x04 */ u8 field_0x4[0xC - 0x4]; diff --git a/include/d/actor/d_a_balloon_2D.h b/include/d/actor/d_a_balloon_2D.h index b66db2653df..ba578b58a2b 100644 --- a/include/d/actor/d_a_balloon_2D.h +++ b/include/d/actor/d_a_balloon_2D.h @@ -13,6 +13,75 @@ class J2DPicture; class J2DPane; class J2DTextBox; +class daBalloon2D_HIO_c : public mDoHIO_entry_c { +public: + inline daBalloon2D_HIO_c(); + /* 806553A8 */ virtual ~daBalloon2D_HIO_c(); + +#if DEBUG + void genMessage(JORMContext*); + +#endif + + void resetAddScoreSetFlag(); + + struct param { + /* 0x04 */ u8 mAdjustmentToggle; + /* 0x08 */ s32 mScore; + /* 0x0C */ u8 mComboCount; + /* 0x0D */ u8 mBalloonSize; + /* 0x0E */ u8 mOverheadScoreToggle; + /* 0x10 */ s32 mOverheadScore; + /* 0x14 */ s32 field_0x14; + /* 0x18 */ f32 field_0x1c; + /* 0x1C */ f32 field_0x20; + /* 0x20 */ f32 mScorePosX; + /* 0x24 */ f32 mScorePosY; + /* 0x28 */ f32 mScoreSize; + /* 0x2C */ f32 m5DNumberPosX; + /* 0x30 */ f32 m5DNumberPosY; + /* 0x34 */ f32 m5DNumberSizeX; + /* 0x38 */ f32 m5DNumberSizeY; + /* 0x3C */ f32 m5DNumberAlpha; + /* 0x40 */ f32 m5DNumber2PosX; + /* 0x44 */ f32 m5DNumber2PosY; + /* 0x48 */ f32 m5DNumber2Size; + /* 0x4C */ f32 mUnkPosX; + /* 0x50 */ f32 mUnkPosY; + /* 0x54 */ f32 mUnkSize; + /* 0x58 */ f32 mComboPosX; + /* 0x5C */ f32 mComboPosY; + /* 0x60 */ f32 mComboSize; + /* 0x64 */ f32 m2DNumberPosX; + /* 0x68 */ f32 m2DNumberPosY; + /* 0x6C */ f32 m2DNumberSizeX; + /* 0x70 */ f32 m2DNumberSizeY; + /* 0x74 */ f32 field_0x78; + /* 0x78 */ f32 m2DNumberComboPosX; + /* 0x7C */ f32 m2DNumberComboPosY; + /* 0x80 */ f32 m2DNumberComboSize; + /* 0x84 */ f32 m2DNumberComboAlpha; + /* 0x88 */ f32 mBalloonLargePosX; + /* 0x8C */ f32 mBalloonLargePosY; + /* 0x90 */ f32 mBalloonLargeSize; + /* 0x94 */ f32 mBalloonLargeAlpha; + /* 0x98 */ f32 mBalloonMedPosX; + /* 0x9C */ f32 mBalloonMedPosY; + /* 0xA0 */ f32 mBalloonMedSize; + /* 0xA4 */ f32 mBalloonMedAlpha; + /* 0xA8 */ f32 mBalloonSmallPosX; + /* 0xAC */ f32 mBalloonSmallPosY; + /* 0xB0 */ f32 mBalloonSmallSize; + /* 0xB4 */ f32 mBalloonSmallAlpha; + /* 0xB8 */ f32 m2DNumberCombo2PosX; + /* 0xBC */ f32 m2DNumberCombo2PosY; + /* 0xC0 */ f32 m2DNumberCombo2Size; + /* 0xC4 */ f32 m2DNumberCombo2PosX43; + }; + + param m; +}; + /** * @ingroup actors-unsorted * @class daBalloon2D_c @@ -28,24 +97,12 @@ public: c_list() { mBalloon = NULL; } void set(daBalloon2D_c* i_this) { mBalloon = i_this; } - #ifdef NONMATCHING /* 806534CC */ virtual void draw(); - /* 8065544C */ virtual ~c_list(); - #else - void draw(); - ~c_list(); - void* vtable; - #endif + /* 8065544C */ virtual ~c_list() {} daBalloon2D_c* mBalloon; }; - class CHeadScore { - public: - /* 80655304 */ ~CHeadScore(); - /* 80655340 */ CHeadScore(); - }; - daBalloon2D_c() { initiate(); } @@ -69,9 +126,7 @@ public: /* 80654730 */ void drawAddScore(); /* 80654E8C */ void setHIO(bool); /* 80655494 */ - #ifdef NONMATCHING virtual - #endif ~daBalloon2D_c(); void show() { mIsVisible = 1; } @@ -87,10 +142,12 @@ public: u8 field_0xf; }; - #ifdef NONMATCHING - #else - /* 0x570 */ u32 vtable; - #endif + class CHeadScore : public ScoreCount { + public: + /* 80655304 */ ~CHeadScore(); + /* 80655340 */ CHeadScore(); + }; + /* 0x574 */ J2DScreen* mScreen; /* 0x578 */ CPaneMgr* field_0x578; /* 0x57C */ CPaneMgr* field_0x57c; @@ -108,7 +165,7 @@ public: /* 0x5A4 */ J2DPicture* field_0x5c4[10]; /* 0x5EC */ J2DPicture* field_0x5ec; /* 0x5F0 */ c_list field_0x5f0; - /* 0x5F8 */ ScoreCount field_0x5f8[20]; + /* 0x5F8 */ CHeadScore field_0x5f8[20]; /* 0x738 */ f32 mAllAlpha; /* 0x73C */ f32 mComboAlpha; /* 0x740 */ u32 mScoreCount; @@ -117,56 +174,6 @@ public: /* 0x746 */ u8 mIsVisible; }; -class daBalloon2D_HIO_c /*: public mDoHIO_entry_c */ { -public: - /* 806553A8 */ /* virtual */ ~daBalloon2D_HIO_c(); - /* 0x00 */ u32 field_0x00; - /* 0x04 */ u8 field_0x04; - /* 0x00 */ u8 field_0x05[0x20 - 5]; - /* 0x20 */ f32 field_0x20; - /* 0x24 */ f32 field_0x24; - /* 0x28 */ f32 field_0x28; - /* 0x2C */ f32 field_0x2c; - /* 0x30 */ f32 field_0x30; - /* 0x34 */ f32 field_0x34; - /* 0x38 */ f32 field_0x38; - /* 0x3C */ f32 field_0x3c; - /* 0x40 */ f32 field_0x40; - /* 0x44 */ f32 field_0x44; - /* 0x48 */ f32 field_0x48; - /* 0x4C */ f32 field_0x4c; - /* 0x50 */ f32 field_0x50; - /* 0x54 */ f32 field_0x54; - /* 0x58 */ f32 field_0x58; - /* 0x5C */ f32 field_0x5c; - /* 0x60 */ f32 field_0x60; - /* 0x64 */ f32 field_0x64; - /* 0x68 */ f32 field_0x68; - /* 0x6C */ f32 field_0x6c; - /* 0x70 */ f32 field_0x70; - /* 0x74 */ f32 field_0x74; - /* 0x78 */ f32 field_0x78; - /* 0x7C */ f32 field_0x7c; - /* 0x80 */ f32 field_0x80; - /* 0x84 */ f32 field_0x84; - /* 0x88 */ f32 field_0x88; - /* 0x8C */ f32 field_0x8c; - /* 0x90 */ f32 field_0x90; - /* 0x94 */ f32 field_0x94; - /* 0x98 */ f32 field_0x98; - /* 0x9C */ f32 field_0x9c; - /* 0xA0 */ f32 field_0xa0; - /* 0xA4 */ f32 field_0xa4; - /* 0xA8 */ f32 field_0xa8; - /* 0xAC */ f32 field_0xac; - /* 0xB0 */ f32 field_0xb0; - /* 0xB4 */ f32 field_0xb4; - /* 0xB8 */ f32 field_0xb8; - /* 0xBC */ f32 field_0xbc; - /* 0xC0 */ f32 field_0xc0; - /* 0xC4 */ f32 field_0xc4; -}; - #include "f_op/f_op_actor_mng.h" struct JKRExpHeap {}; diff --git a/include/d/actor/d_a_e_bu.h b/include/d/actor/d_a_e_bu.h index ebbfbe3eeae..8ec8f9a9a5d 100644 --- a/include/d/actor/d_a_e_bu.h +++ b/include/d/actor/d_a_e_bu.h @@ -1,6 +1,11 @@ #ifndef D_A_E_BU_H #define D_A_E_BU_H + #include "f_op/f_op_actor_mng.h" +#include "d/d_path.h" +#include "d/d_bg_s_acch.h" +#include "d/d_cc_d.h" +#include "d/d_cc_uty.h" /** * @ingroup actors-enemies @@ -10,16 +15,69 @@ * @details * */ -class e_bu_class : public fopEn_enemy_c { -private: - /* 0x5ac */ u8 field_0x5ac[0xaa4 - 0x5ac]; +class e_bu_class { +public: + /* 0x000 */ fopEn_enemy_c enemy; + /* 0x5AC */ request_of_phase_process_class phase; + /* 0x5B4 */ u8 prm0; + /* 0x5B5 */ u8 prm1; + /* 0x5B6 */ u8 type; + /* 0x5B7 */ u8 pathNo; + /* 0x5B8 */ s8 field_0x5b8; + /* 0x5B9 */ s8 now_path_pntNo; + /* 0x5BA */ s8 path_step; + /* 0x5BC */ dPath* ppd; + /* 0x5C0 */ mDoExt_McaMorfSO* modelMorf; + /* 0x5C4 */ Z2CreatureEnemy sound; + /* 0x668 */ int anm; + /* 0x66C */ int anm_frame; + /* 0x670 */ s16 lifetime; + /* 0x672 */ s16 action; + /* 0x674 */ s16 mode; + /* 0x678 */ cXyz move_pos; + /* 0x684 */ s16 angle_to_player; + /* 0x688 */ f32 dist_to_player; + /* 0x68C */ f32 pl_search_range; + /* 0x690 */ f32 field_0x690; + /* 0x694 */ f32 field_0x694; + /* 0x698 */ f32 hit_speed; + /* 0x69C */ s16 hit_rot; + /* 0x69E */ csXyz field_0x69e; + /* 0x6A4 */ s8 is_dead; + /* 0x6A8 */ f32 field_0x6a8; + /* 0x6AC */ s16 timers[4]; + /* 0x6B4 */ s16 invulnerabilityTimer; + /* 0x6B6 */ s16 head_rot_y; + /* 0x6B8 */ s16 field_0x6b8; + /* 0x6BA */ s16 head_rot_x; + /* 0x6BC */ s16 field_0x6bc; + /* 0x6BE */ s16 jaw_rot; + /* 0x6C0 */ cXyz field_0x6c0; + /* 0x6CC */ dBgS_AcchCir acchcir; + /* 0x70C */ dBgS_ObjAcch acch; + /* 0x8E4 */ dCcD_Stts ccStts; + /* 0x920 */ dCcD_Sph ccSph; + /* 0xA58 */ dCcU_AtInfo atInfo; + /* 0xA7C */ u32 field_0xa7c; + /* 0xA80 */ u32 field_0xa80; + /* 0xA84 */ u32 mtrl_emitter_id[4]; + /* 0xA94 */ u8 field_0xA94[0xAA0 - 0xA94]; + /* 0xAA0 */ u8 HIOInit; }; STATIC_ASSERT(sizeof(e_bu_class) == 0xaa4); class daE_BU_HIO_c { +public: /* 806911AC */ daE_BU_HIO_c(); - /* 806941D4 */ ~daE_BU_HIO_c(); + /* 806941D4 */ virtual ~daE_BU_HIO_c() {} + + /* 0x04 */ s8 id; + /* 0x08 */ f32 base_size; + /* 0x0C */ f32 fly_speed; + /* 0x10 */ f32 attack_range; + /* 0x14 */ f32 attack_speed; + /* 0x18 */ f32 dash_speed; }; diff --git a/include/d/actor/d_a_e_kr.h b/include/d/actor/d_a_e_kr.h index 176cdedf44e..4a935096459 100644 --- a/include/d/actor/d_a_e_kr.h +++ b/include/d/actor/d_a_e_kr.h @@ -1,26 +1,197 @@ #ifndef D_A_E_KR_H #define D_A_E_KR_H +#include "d/d_bg_s_acch.h" +#include "d/d_cc_d.h" +#include "d/d_cc_uty.h" +#include "d/d_path.h" #include "f_op/f_op_actor_mng.h" /** * @ingroup actors-enemies * @class e_kr_class * @brief Kargorok - * - * @details - * + * + * @details + * */ -class e_kr_class : public fopEn_enemy_c { +class e_kr_class { +public: /* 80705004 */ e_kr_class(); -private: - /* 0x5ac */ u8 field_0x5ac[0xf08 - 0x5ac]; + + /* 0x000 */ fopEn_enemy_c enemy; + /* 0x5AC */ request_of_phase_process_class mPhase; + /* 0x5B4 */ mDoExt_McaMorfSO* mpMorf; + /* 0x5B8 */ s32 field_0x5b8; + /* 0x5BC */ s32 field_0x5bc; + /* 0x5C0 */ Z2CreatureEnemy mSound; + /* 0x664 */ u8 field_0x664; + /* 0x665 */ u8 field_0x665; + /* 0x666 */ u8 field_0x666; + /* 0x666 */ u8 field_0x667; + /* 0x668 */ s16 mCurAction; + /* 0x66A */ u8 field_0x66a; + /* 0x66B */ u8 field_0x66b; + /* 0x66C */ fpc_ProcID mBombId; + /* 0x670 */ s8 field_0x670; + /* 0x672 */ s16 field_0x672; + /* 0x674 */ u8 field_0x674; + /* 0x678 */ cXyz field_0x678; + /* 0x684 */ f32 field_0x684; + /* 0x688 */ f32 field_0x688; + /* 0x68C */ f32 field_0x68c; + /* 0x690 */ f32 field_0x690; + /* 0x694 */ f32 field_0x694; + /* 0x698 */ u8 field_0x698[0x69c - 0x698]; + /* 0x69C */ s16 field_0x69c[6]; + /* 0x6A8 */ s16 field_0x6a8; + /* 0x6AA */ s16 field_0x6aa; + /* 0x6AC */ u8 field_0x6ac[0x6b4 - 0x6ac]; + /* 0x6B4 */ f32 field_0x6b4; + /* 0x6B8 */ f32 field_0x6b8; + /* 0x6BC */ s16 field_0x6bc; + /* 0x6BE */ u8 field_0x6be[0x6c0 - 0x6be]; + /* 0x6C0 */ s16 field_0x6c0; + /* 0x6C2 */ s16 field_0x6c2; + /* 0x6C4 */ f32 field_0x6c4; + /* 0x6C8 */ s16 field_0x6c8; + /* 0x6CA */ s16 field_0x6ca; + /* 0x6CC */ s16 field_0x6cc; + /* 0x6D0 */ f32 field_0x6d0; + /* 0x6D4 */ s16 field_0x6d4; + /* 0x6D6 */ s16 field_0x6d6; + /* 0x6D8 */ s16 field_0x6d8; + /* 0x6DA */ u8 field_0x6da[0x6de - 0x6da]; + /* 0x6DE */ s16 field_0x6de; + /* 0x6E0 */ u8 field_0x6e0[0x6e1 - 0x6e0]; + /* 0x6E1 */ s8 field_0x6e1; + /* 0x6E2 */ s8 field_0x6e2; + /* 0x6E3 */ s8 field_0x6e3; + /* 0x6E4 */ dPath* field_0x6e4; + /* 0x6E8 */ u8 field_0x6e8[0x6ea - 0x6e8]; + /* 0x6EC */ csXyz field_0x6ea; + /* 0x6F2 */ csXyz field_0x6f0; + /* 0x6EA */ s16 field_0x6f6; + /* 0x6F8 */ cXyz field_0x6f8; + /* 0x704 */ dBgS_AcchCir mAcchCir; + /* 0x744 */ dBgS_ObjAcch mAcch; + /* 0x91C */ bool field_0x91c; + /* 0x920 */ f32 field_0x920; + /* 0x924 */ dCcD_Stts mStts; + /* 0x960 */ dCcD_Sph mSphere1; + /* 0xA98 */ dCcD_Sph mSphere2; + /* 0xBD0 */ dCcD_Sph mSphere3; + /* 0xD08 */ dCcD_Sph mSphere4; + /* 0xE40 */ dCcU_AtInfo mAtInfo; + /* 0xE64 */ cXyz field_0xe64[2]; + /* 0xE7C */ s16 field_0xe7c; + /* 0xE7E */ s16 field_0xe7e; + /* 0xE80 */ s16 field_0xe80; + /* 0xE82 */ s16 field_0xe82; + /* 0xE84 */ s16 field_0xe84; + /* 0xE88 */ JAISoundID field_0xe88; + /* 0xE8C */ u8 field_0xe8c; + /* 0xE8E */ s16 field_0xe8e[11]; + /* 0xEA4 */ u8 field_0xea4[0xea8 - 0xea4]; + /* 0xEA8 */ f32 field_0xea8; + /* 0xEAC */ s16 field_0xeac; + /* 0xEAE */ s16 field_0xeae; + /* 0xEB0 */ s16 field_0xeb0; + /* 0xEB2 */ s16 field_0xeb2; + /* 0xEB4 */ s16 field_0xeb4; + /* 0xEB6 */ s16 field_0xeb6; + /* 0xEB8 */ f32 field_0xeb8; + /* 0xEBC */ s16 field_0xebc; + /* 0xEBE */ s16 field_0xebe; + /* 0xEC0 */ s8 field_0xec0; + /* 0xEC4 */ u32 field_0xec4[5]; + /* 0xED8 */ u32 field_0xed8[5]; + /* 0xEDC */ u8 field_0xedc[0xef8 - 0xeec]; + /* 0xEF8 */ f32 field_0xef8; + /* 0xEFC */ s8 field_0xefc; + /* 0xF00 */ s32 field_0xf00; + /* 0xF04 */ s32 field_0xf04; }; STATIC_ASSERT(sizeof(e_kr_class) == 0xf08); -class e_krHIO_c { - /* 80705574 */ ~e_krHIO_c(); +class e_krHIO_c : public fOpAcm_HIO_entry_c { +public: + e_krHIO_c() { + field_0x4 = 0; + field_0x5 = 0; + field_0x8 = 20.0f; + field_0xc = 2500.0f; + field_0x14 = 1.0f; + field_0x18 = 2000; + field_0x1a = 2500; + field_0x1c = 2000; + field_0x1e = 2500; + field_0x20 = 0.35f; + field_0x24 = 0.5f; + field_0x28 = 1.0f; + field_0x2c = 1.0f; + field_0x30 = 1.0f; + field_0x38 = 1.0f; + field_0x3c = 1.0f; + field_0x40 = 30; + field_0x44 = 1.0f; + field_0x48 = 1.0f; + field_0x4c = 1.5f; + field_0x50 = 1100; + field_0x54 = 3.5f; + field_0x34 = 60; + field_0x58 = 60.0f; + field_0x5c = 40.0f; + field_0x60 = 1; + field_0x64 = 8000.0f; + field_0x70 = 3000.0f; + field_0x6c = 20000; + field_0x68 = 1500.0f; + field_0x74 = 2000.0f; + field_0x6e = 20000; + field_0x78 = -40.0f; + } + /* 80705574 */ virtual ~e_krHIO_c() {} + void genMessage(JORMContext*); + + /* 0x04 */ u8 field_0x4; + /* 0x05 */ u8 field_0x5; + /* 0x06 */ u8 field_0x6; + /* 0x08 */ f32 field_0x8; + /* 0x0C */ f32 field_0xc; + /* 0x10 */ u8 field_0x10[0x14 - 0x10]; + /* 0x14 */ f32 field_0x14; + /* 0x18 */ s16 field_0x18; + /* 0x1A */ s16 field_0x1a; + /* 0x1C */ s16 field_0x1c; + /* 0x1E */ s16 field_0x1e; + /* 0x20 */ f32 field_0x20; + /* 0x24 */ f32 field_0x24; + /* 0x28 */ f32 field_0x28; + /* 0x2C */ f32 field_0x2c; + /* 0x30 */ f32 field_0x30; + /* 0x34 */ s16 field_0x34; + /* 0x38 */ f32 field_0x38; + /* 0x3C */ f32 field_0x3c; + /* 0x40 */ s16 field_0x40; + /* 0x44 */ f32 field_0x44; + /* 0x48 */ f32 field_0x48; + /* 0x4C */ f32 field_0x4c; + /* 0x50 */ s16 field_0x50; + /* 0x54 */ f32 field_0x54; + /* 0x58 */ f32 field_0x58; + /* 0x5C */ f32 field_0x5c; + /* 0x60 */ s16 field_0x60; + /* 0x64 */ f32 field_0x64; + /* 0x68 */ f32 field_0x68; + /* 0x6C */ s16 field_0x6c; + /* 0x6E */ s16 field_0x6e; + /* 0x70 */ f32 field_0x70; + /* 0x74 */ f32 field_0x74; + /* 0x78 */ f32 field_0x78; }; +STATIC_ASSERT(sizeof(e_krHIO_c) == 0x7c); + #endif /* D_A_E_KR_H */ diff --git a/include/d/actor/d_a_e_ymb.h b/include/d/actor/d_a_e_ymb.h index 18a0151f18f..9a0112279a4 100644 --- a/include/d/actor/d_a_e_ymb.h +++ b/include/d/actor/d_a_e_ymb.h @@ -1,7 +1,10 @@ #ifndef D_A_E_YMB_H #define D_A_E_YMB_H +#include "d/d_cc_d.h" +#include "d/d_cc_uty.h" #include "f_op/f_op_actor_mng.h" +#include "d/d_bg_w.h" /** * @ingroup actors-enemies @@ -13,11 +16,11 @@ */ class daE_YMB_c : public fopEn_enemy_c { public: - /* 8081615C */ void ctrlJoint(J3DJoint*, J3DModel*); - /* 808164F0 */ void JointCallBack(J3DJoint*, int); - /* 80816554 */ void draw(); + /* 8081615C */ int ctrlJoint(J3DJoint*, J3DModel*); + /* 808164F0 */ static int JointCallBack(J3DJoint*, int); + /* 80816554 */ int draw(); /* 8081697C */ void setBck(int, u8, f32, f32); - /* 80816A20 */ void checkBck(int); + /* 80816A20 */ bool checkBck(int); /* 80816A7C */ void setActionMode(int, int); /* 80816A88 */ void setLastDamage(); /* 80816B7C */ void damage_check(); @@ -41,7 +44,7 @@ public: /* 80818328 */ void setBitePos(int); /* 80818370 */ void setInclination(); /* 80818518 */ void setBodyAngle(); - /* 80818930 */ void checkWolfLockIn(); + /* 80818930 */ bool checkWolfLockIn(); /* 80818AE8 */ void executeFly(); /* 80819610 */ void executeFlyAttack(); /* 80819FD0 */ void executeRunAway(); @@ -59,36 +62,123 @@ public: /* 8081D4D8 */ void setCreateDrop(); /* 8081D594 */ void executeDeath(); /* 8081DBD0 */ void demo_skip(int); - /* 8081DDE0 */ void DemoSkipCallBack(void*, int); + /* 8081DDE0 */ static int DemoSkipCallBack(void*, int); /* 8081DE14 */ void calcLakeDemoPlayerPos(); /* 8081DE84 */ void executeLakeDemo(); /* 8081E5B4 */ void executeStartDemo(); - /* 8081F140 */ void checkStartBattleDemo(); + /* 8081F140 */ bool checkStartBattleDemo(); /* 8081F2E0 */ void executeBattleDemo(); /* 8081FAC8 */ void action(); /* 8081FF88 */ void mtx_set(); /* 808200A0 */ void getBellyBitePos(cXyz*); - /* 80820128 */ void getDownLockPoint(); + /* 80820128 */ int getDownLockPoint(); /* 808203D8 */ void setAttentionPos(); /* 80820668 */ void cc_set(); - /* 808207AC */ void execute(); - /* 80820A40 */ void _delete(); - /* 80820AF0 */ void CreateHeap(); - /* 80820DD0 */ void create(); + /* 808207AC */ int execute(); + /* 80820A40 */ int _delete(); + /* 80820AF0 */ int CreateHeap(); + /* 80820DD0 */ cPhs__Step create(); int getMaxLockAttack() { return 6; } u8 getSwitchBit() { return mSwitchBit; } - /* 0x5AC */ u8 field_0x5ac[0x6C0 - 0x5ac]; - /* 0x6C0 */ u8 mSwitchBit; - /* 0x6C1 */ u8 field_0x6c1[0x1524 - 0x6C1]; + /* 0x05AC */ request_of_phase_process_class mPhase; + /* 0x05B4 */ mDoExt_invisibleModel mInvisModel; + /* 0x05BC */ mDoExt_McaMorfSO* mpModelMorf; + /* 0x05C0 */ mDoExt_brkAnm* mpBrkAnm; + /* 0x05C4 */ Z2CreatureEnemy mSound; + /* 0x0668 */ f32 field_0x668[6]; + /* 0x0680 */ int field_0x680[6]; + /* 0x0698 */ int field_0x698; + /* 0x069C */ cXyz field_0x69c; + /* 0x06A8 */ cXyz field_0x6a8; + /* 0x06B4 */ int mAction; + /* 0x06B8 */ int mMode; + /* 0x06BC */ u32 mShadowKey; + /* 0x06C0 */ u8 mSwitchBit; + /* 0x06C1 */ u8 field_0x6c1; + /* 0x06C4 */ f32 field_0x6c4; + /* 0x06C8 */ f32 field_0x6c8; + /* 0x06CC */ f32 field_0x6cc; + /* 0x06D0 */ f32 field_0x6d0; + /* 0x06D4 */ f32 field_0x6d4; + /* 0x06D8 */ f32 field_0x6d8; + /* 0x06DC */ f32 field_0x6dc; + /* 0x06E0 */ f32 field_0x6e0; + /* 0x06E4 */ s16 field_0x6e4; + /* 0x06E6 */ s16 field_0x6e6; + /* 0x06E8 */ s16 field_0x6e8; + /* 0x06EA */ s16 field_0x6ea; + /* 0x06EC */ int field_0x6ec; + /* 0x06F0 */ int field_0x6f0; + /* 0x06F4 */ int field_0x6f4; + /* 0x06F8 */ int field_0x6f8; + /* 0x06FC */ int field_0x6fc; + /* 0x0700 */ int field_0x700; + /* 0x0704 */ int field_0x704; + /* 0x0708 */ int field_0x708; + /* 0x070C */ int field_0x70c; + /* 0x0710 */ u8 field_0x710; + /* 0x0711 */ u8 field_0x711; + /* 0x0712 */ u8 field_0x712; + /* 0x0713 */ u8 field_0x713; + /* 0x0714 */ u8 field_0x714; + /* 0x0715 */ u8 field_0x715; + /* 0x0716 */ u8 field_0x716; + /* 0x0717 */ u8 field_0x717; + /* 0x0718 */ u8 field_0x718; + /* 0x0719 */ u8 field_0x719[0x71f - 0x719]; + /* 0x071F */ u8 field_0x71f; + /* 0x0720 */ u8 field_0x720; + /* 0x0721 */ u8 field_0x721; + /* 0x0722 */ u8 field_0x722; + /* 0x0723 */ u8 field_0x723; + /* 0x0724 */ u8 field_0x724; + /* 0x0725 */ u8 field_0x725; + /* 0x0728 */ cXyz mDemoCamEye; + /* 0x0734 */ cXyz mDemoCamCenter; + /* 0x0740 */ cXyz field_0x740; + /* 0x074C */ cXyz field_0x74c; + /* 0x0758 */ f32 mDemoCamFovy; + /* 0x075C */ f32 field_0x75c; + /* 0x0760 */ s16 field_0x760; + /* 0x0762 */ s16 field_0x762; + /* 0x0764 */ u8 field_0x764; + /* 0x0765 */ u8 field_0x765; + /* 0x0768 */ Mtx field_0x768; + /* 0x0798 */ dBgW* mpBgW; + /* 0x079C */ dBgS_GndChk mGndChk; + /* 0x07F0 */ dCcD_Stts mStts; + /* 0x082C */ dCcD_Sph field_0x82c[2]; + /* 0x0A9C */ dCcD_Sph field_0xa9c; + /* 0x0BD4 */ dCcD_Sph field_0xbd4[6]; + /* 0x1324 */ dCcD_Sph field_0x1324; + /* 0x145C */ dCcU_AtInfo mAtInfo; + /* 0x1480 */ u32 mElecParticles[4]; + /* 0x1490 */ u32 mMidnaBindParticles[3]; + /* 0x149C */ u8 field_0x149c[0x14d8 - 0x149c]; + /* 0x14D8 */ u32 mWaterParticles1[6]; + /* 0x14F0 */ u32 mWaterParticles2[7]; + /* 0x150C */ u32 mDownHamonParticles[2]; + /* 0x1514 */ u32 mBlurParticles[2]; + /* 0x151C */ u32 mDamageParticle; + /* 0x1520 */ u8 field_0x1520; }; STATIC_ASSERT(sizeof(daE_YMB_c) == 0x1524); struct daE_YMB_HIO_c { +public: /* 8081610C */ daE_YMB_HIO_c(); - /* 80821460 */ ~daE_YMB_HIO_c(); + /* 80821460 */ virtual ~daE_YMB_HIO_c() {} + + /* 0x04 */ s8 field_0x4; + /* 0x08 */ f32 model_size; // モデルサイズ (Model Size) + /* 0x0C */ f32 fly_movement_speed; // 飛行移動速度 (Fly Movement Speed) + /* 0x10 */ f32 swim_attack_speed; // 泳ぎ攻撃速度 (Swim Attack Speed) + /* 0x14 */ f32 fly_attack_speed; // 飛行攻撃速度 (Fly Attack Speed) + /* 0x18 */ f32 rollover_time; // ひっくり返り時間 (Rollover Time) + /* 0x1C */ f32 fly_height_adjust; // 飛行高度-加減値 (Fly Height Adjust) }; #endif /* D_A_E_YMB_H */ diff --git a/include/d/actor/d_a_e_zh.h b/include/d/actor/d_a_e_zh.h index e22a1ec5212..6bcbb6524ab 100644 --- a/include/d/actor/d_a_e_zh.h +++ b/include/d/actor/d_a_e_zh.h @@ -1,29 +1,36 @@ #ifndef D_A_E_ZH_H #define D_A_E_ZH_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" /** * @ingroup actors-enemies * @class daE_ZH_c - * @brief Zant Head + * @brief Ball Master * * @details * */ + +class daObjCarry_c; + class daE_ZH_c : public fopEn_enemy_c { - /* 8082907C */ void draw(); +public: + /* 8082907C */ int draw(); /* 808293A8 */ void setBck(int, u8, f32, f32); /* 80829454 */ void setActionMode(int, int); - /* 80829570 */ void startDemoCheck(); + /* 80829570 */ bool startDemoCheck(); /* 80829658 */ void mBallBGCheck(); /* 808298BC */ void mGateOpen(); - /* 808299F8 */ void mColorSet(bool, f32, f32); - /* 80829AD8 */ void mReturnLineMove(); - /* 80829E44 */ void mBallBgLineCheck(); - /* 8082A01C */ void mSearchMove(u8); + /* 808299F8 */ bool mColorSet(bool, f32, f32); + /* 80829AD8 */ bool mReturnLineMove(); + /* 80829E44 */ bool mBallBgLineCheck(); + /* 8082A01C */ bool mSearchMove(u8); /* 8082A390 */ void mStartParticleSet(); - /* 8082A4C8 */ void mCutTypeCheck(); + /* 8082A4C8 */ bool mCutTypeCheck(); /* 8082A534 */ void damage_check(); /* 8082A88C */ void executeStartDemo(); /* 8082ABDC */ void executeWait(); @@ -42,22 +49,83 @@ class daE_ZH_c : public fopEn_enemy_c { /* 8082DB84 */ void action(); /* 8082DE18 */ void mtx_set(); /* 8082DF44 */ void cc_set(); - /* 8082E2FC */ void execute(); - /* 8082E3E8 */ void _delete(); - /* 8082E4E4 */ void CreateHeap(); - /* 8082E730 */ void create(); - /* 8082ECEC */ daE_ZH_c(); - -private: - /* 0x5ac */ u8 field_0x5ac[0xe08 - 0x5ac]; + /* 8082E2FC */ int execute(); + /* 8082E3E8 */ int _delete(); + /* 8082E4E4 */ int CreateHeap(); + /* 8082E730 */ cPhs__Step create(); + /* 8082ECEC */ daE_ZH_c() {} + + /* 0x5AC */ request_of_phase_process_class mPhase; + /* 0x5B4 */ mDoExt_McaMorfSO* mpModelMorf; + /* 0x5B8 */ J3DModel* mEntranceModel; + /* 0x5BC */ mDoExt_btkAnm* mpBtkAnm; + /* 0x5C0 */ Z2CreatureEnemy mSound; + /* 0x664 */ daObjCarry_c* mS_Ball; + /* 0x668 */ cXyz field_0x668; + /* 0x674 */ u8 field_0x674[0x680 - 0x674]; + /* 0x680 */ cXyz field_0x680; + /* 0x68C */ cXyz field_0x68c; + /* 0x698 */ cXyz mRetrunStartLine; + /* 0x6A4 */ cXyz mRetrunEndLine; + /* 0x6B0 */ cXyz mBallHosei; + /* 0x6BC */ cXyz field_0x6bc; + /* 0x6C8 */ cXyz field_0x6c8[3]; + /* 0x6EC */ int field_0x6ec[3]; + /* 0x6F8 */ cXyz field_0x6f8[8]; + /* 0x758 */ u8 field_0x758[8]; + /* 0x760 */ f32 field_0x760; + /* 0x764 */ f32 field_0x764[3]; + /* 0x770 */ f32 pmRoofPos; + /* 0x774 */ f32 field_0x774; + /* 0x778 */ f32 field_0x778; + /* 0x77C */ f32 field_0x77c; + /* 0x780 */ int mActionMode; + /* 0x784 */ int mMoveMode; + /* 0x788 */ u32 mShadowKey; + /* 0x78C */ int field_0x78c; + /* 0x790 */ int mAnm; + /* 0x794 */ int field_0x794[3]; + /* 0x7A0 */ int field_0x7a0; + /* 0x7A4 */ int field_0x7a4; + /* 0x7A8 */ u8 field_0x7a8; + /* 0x7A9 */ u8 bitSw; + /* 0x7AA */ u8 bitSwEnd; + /* 0x7AB */ u8 arg0; + /* 0x7AC */ u8 field_0x7ac; + /* 0x7AD */ u8 field_0x7ad; + /* 0x7AE */ u8 field_0x7ae; + /* 0x7AF */ u8 field_0x7af; + /* 0x7B0 */ s16 mRollAngle; + /* 0x7B2 */ s16 field_0x7b2; + /* 0x7B4 */ dBgS_AcchCir mAcchCir; + /* 0x7F4 */ dBgS_ObjAcch mBgc; + /* 0x9CC */ dCcD_Stts mStts; + /* 0xA08 */ dCcD_Sph field_0xa08; + /* 0xB40 */ dCcD_Cyl field_0xb40; + /* 0xC7C */ dCcD_Cyl field_0xc7c; + /* 0xDB8 */ dCcU_AtInfo mAtInfo; + /* 0xDDC */ u32 field_0xddc[3]; + /* 0xDE8 */ u32 field_0xde8; + /* 0xDEC */ cXyz mDemoCamEye; + /* 0xDF8 */ cXyz mDemoCamCenter; + /* 0xE04 */ u8 field_0xe04; }; STATIC_ASSERT(sizeof(daE_ZH_c) == 0xe08); -class daE_ZH_HIO_c { +class daE_ZH_HIO_c: public JORReflexible { +public: /* 8082902C */ daE_ZH_HIO_c(); - /* 8082F160 */ ~daE_ZH_HIO_c(); + /* 8082F160 */ virtual ~daE_ZH_HIO_c() {} + + // ボールマスター (Ball Master) + /* 0x04 */ s8 field_0x4; + /* 0x08 */ f32 model_size; // モデルサイズ (Model Size) + /* 0x0C */ f32 ascent_rate; // 上昇速度(落下後)(Rate of ascent (after falling)) + /* 0x10 */ f32 wandering_area; // うろうろ範囲 (Wandering Area) + /* 0x14 */ s16 wait_time; // 玉取られ後移動開始待ち時間 (Waiting time after the stone is taken and movement begins) + /* 0x16 */ s16 piyori_time; // ピヨリ時間 (Piyori Time) + /* 0x18 */ u8 dungeon_bit_check; // ダンジョンビットチェックON/OFF (Dungeon Bit Check ON/OFF) }; - #endif /* D_A_E_ZH_H */ diff --git a/include/d/actor/d_a_fr.h b/include/d/actor/d_a_fr.h index 09684b11226..4cddd88479c 100644 --- a/include/d/actor/d_a_fr.h +++ b/include/d/actor/d_a_fr.h @@ -16,12 +16,11 @@ * @details * */ -class fr_class : public fopAc_ac_c { +class fr_class : public fopEn_enemy_c { public: - /* 0x568 */ u8 field_0x568[0x5ac - 0x568]; /* 0x5AC */ request_of_phase_process_class mPhase; /* 0x5B4 */ u8 field_0x5b4; - /* 0x5B5 */ u8 field_0x5b5[0x5c4 - 0x5b5]; + /* 0x5B5 */ cXyz field_0x5b8; /* 0x5C4 */ mDoExt_McaMorf* mMorf; /* 0x5C8 */ mDoExt_btkAnm* mBtkAnm; /* 0x5CC */ u8 field_0x5cc; @@ -77,6 +76,7 @@ public: /* 0x20 */ f32 field_0x20; /* 0x24 */ f32 field_0x24; /* 0x28 */ f32 field_0x28; + /* 0x2C */ f32 field_0x2c; }; diff --git a/include/d/actor/d_a_kago.h b/include/d/actor/d_a_kago.h index 32fac3d6620..de886797ca4 100644 --- a/include/d/actor/d_a_kago.h +++ b/include/d/actor/d_a_kago.h @@ -1,68 +1,72 @@ #ifndef D_A_KAGO_H #define D_A_KAGO_H -#include "f_op/f_op_actor_mng.h" +#include "d/d_bg_s_acch.h" +#include "d/d_cc_d.h" +#include "d/d_cc_uty.h" +#include "d/d_msg_flow.h" #include "d/d_path.h" +#include "f_op/f_op_actor_mng.h" /** * @ingroup actors-unsorted * @class daKago_c - * @brief Basket + * @brief Player-controlled Kargarok * * @details * */ class daKago_c : public fopAc_ac_c { public: - /* 80849660 */ void getBckName(int); + /* 80849660 */ int getBckName(int); /* 808496F0 */ void setBck(int, u8, f32, f32); - /* 80849798 */ void checkBck(int); - /* 808497F8 */ void draw(); - /* 80849980 */ void executeBalloonMenu(); - /* 80849BA8 */ void checkGroundHeight(cXyz, f32*); - /* 8084A070 */ void checkRoofHeight(cXyz); + /* 80849798 */ bool checkBck(int); + /* 808497F8 */ int draw(); + /* 80849980 */ int executeBalloonMenu(); + /* 80849BA8 */ f32 checkGroundHeight(cXyz, f32*); + /* 8084A070 */ f32 checkRoofHeight(cXyz); /* 8084A210 */ void checkMoveHeight(); /* 8084A2A8 */ void checkSizeBg(); - /* 8084A6DC */ bool getBeforeGroundHeight(u8); + /* 8084A6DC */ s16 getBeforeGroundHeight(u8); /* 8084A6E4 */ void demo_skip(int); - /* 8084AA64 */ void DemoSkipCallBack(void*, int); + /* 8084AA64 */ static int DemoSkipCallBack(void*, int); /* 8084AA98 */ void setActionMode(int, int); /* 8084AAAC */ void setMidnaTagPos(); /* 8084AB40 */ void setMidnaRideOn(); /* 8084AB8C */ void setPlayerRideOn(); /* 8084ABC8 */ void setRideOff(); - /* 8084AC2C */ void searchNearPassPoint(); - /* 8084AE78 */ void setSceneChange(int); + /* 8084AC2C */ s8 searchNearPassPoint(); + /* 8084AE78 */ int setSceneChange(int); /* 8084AF40 */ void createBalloonScore(); /* 8084AFB0 */ void startBalloonScore(); /* 8084B024 */ void endBalloonScore(); /* 8084B088 */ f32 checkNextPath(cXyz); /* 8084B108 */ void checkHeight(); - /* 8084B134 */ void checkYaguraPos(cXyz); - /* 8084B1E0 */ void checkWallHitFall(int); - /* 8084B56C */ void checkAttackStart(); - /* 8084B5DC */ void getValueY(f32); - /* 8084B6F4 */ void getValueX(f32); - /* 8084B718 */ void getValueAbsX(f32); + /* 8084B134 */ bool checkYaguraPos(cXyz); + /* 8084B1E0 */ bool checkWallHitFall(int); + /* 8084B56C */ bool checkAttackStart(); + /* 8084B5DC */ s16 getValueY(f32); + /* 8084B6F4 */ s16 getValueX(f32); + /* 8084B718 */ s16 getValueAbsX(f32); /* 8084B744 */ void flySpeedCalcLockOn(); /* 8084B96C */ void flySpeedCalc(s16, int); - /* 8084C078 */ void checkFlySceneChange(); + /* 8084C078 */ bool checkFlySceneChange(); /* 8084C178 */ void setFlyAway(); /* 8084C204 */ void setFlyAnime(); /* 8084C2CC */ void executeFly(); /* 8084C8FC */ void executeStagger(); /* 8084D108 */ void executeWait(); - /* 8084D354 */ void calcAttackMove(int); + /* 8084D354 */ bool calcAttackMove(int); /* 8084D50C */ void executeAttack(); /* 8084DA18 */ void calcCircleCamera(int); /* 8084DBFC */ void executeEvent(); /* 8084DD18 */ void initPerchDemo(); - /* 8084E2D4 */ void executePerchDemo(); - /* 8084F09C */ void PerchDemoAwayForward(); + /* 8084E2D4 */ bool executePerchDemo(); + /* 8084F09C */ bool PerchDemoAwayForward(); /* 8084FA58 */ void executePerch(); /* 8084FAA8 */ void executeEvent2(); /* 8084FB50 */ void initFirstDemo(); - /* 80850384 */ void executeFirstDemo(); + /* 80850384 */ bool executeFirstDemo(); /* 808513E4 */ void executePerch2(); /* 80851434 */ void executeLandingLakeHairia(); /* 80851DEC */ void executeLandingBoartHouse(); @@ -80,67 +84,179 @@ public: /* 80853BCC */ void action(); /* 80853EF0 */ void mtx_set(); /* 80853FB0 */ void cc_set(); - /* 80854058 */ void execute(); - /* 80854190 */ void _delete(); - /* 80854220 */ void ctrlJoint(J3DJoint*, J3DModel*); - /* 808542DC */ void JointCallBack(J3DJoint*, int); - /* 80854328 */ void CreateHeap(); - /* 808544D8 */ void create(); + /* 80854058 */ int execute(); + /* 80854190 */ int _delete(); + /* 80854220 */ int ctrlJoint(J3DJoint*, J3DModel*); + /* 808542DC */ static int JointCallBack(J3DJoint*, int); + /* 80854328 */ int CreateHeap(); + /* 808544D8 */ int create(); void setEvent() { - mIsFlying = 0; - field_0x740 = 2; + mIsFlying = false; + mCurrentAction = 2; field_0x744 = 0; } void setEvent2() { - mIsFlying = 0; - field_0x740 = 6; + mIsFlying = false; + mCurrentAction = 6; field_0x744 = 0; } void setKagoPath(u8 i_pathNo) { if (i_pathNo != 0xFF) { - field_0x76c = dPath_GetRoomPath(i_pathNo, fopAcM_GetRoomNo(this)); + mpPath2 = dPath_GetRoomPath(i_pathNo, fopAcM_GetRoomNo(this)); } } + void onWaterFall() { + field_0x6ea = 1; + } + + bool isAttack() { + return field_0x6dd != 0; + } + MtxP getLegR3Mtx() { return mLegR3Mtx; } MtxP getMidnaLocaterMtx() { return mpMorf->getModel()->getAnmMtx(4); } s8 getPathDir() { return mPathDir; } - u8 isFlying() { return mIsFlying; } + bool isFlying() { return mIsFlying; } fopAc_ac_c* getLockActor() { return mpLockActor; } void setLockActor(fopAc_ac_c* actor) { mpLockActor = actor; } void setEatYm() { field_0x6d8 |= 4; } MtxP getMouthMtx() { return mpMorf->getModel()->getAnmMtx(7); } private: - /* 0x568 */ u8 field_0x568[8]; + /* 0x568 */ request_of_phase_process_class mPhase; /* 0x570 */ mDoExt_McaMorfSO* mpMorf; - /* 0x574 */ u8 field_0x574[0x618 - 0x574]; + /* 0x574 */ Z2CreatureEnemy mSound; /* 0x618 */ fopAc_ac_c* mpLockActor; - /* 0x61c */ u8 field_0x61c[0x620 - 0x61c]; + /* 0x61C */ fpc_ProcID mBalloon2DId; /* 0x620 */ Mtx mLegR3Mtx; - /* 0x650 */ u8 field_0x650[0x6d8 - 0x650]; - /* 0x6d8 */ u8 field_0x6d8; - /* 0x6d9 */ u8 field_0x6d9[0x6E1 - 0x6d9]; - /* 0x6E1 */ u8 mIsFlying; - /* 0x6E2 */ u8 field_0x6E2[0x740 - 0x6E2]; - /* 0x740 */ int field_0x740; - /* 0x744 */ int field_0x744; - /* 0x748 */ u8 field_0x748[0x76C - 0x748]; - /* 0x76C */ dPath* field_0x76c; - /* 0x770 */ u8 field_0x770[0x773 - 0x770]; + /* 0x650 */ cXyz field_0x650[3]; + /* 0x674 */ cXyz field_0x674; + /* 0x680 */ cXyz field_0x680; + /* 0x68C */ cXyz field_0x68c; + /* 0x698 */ cXyz field_0x698; + /* 0x6A4 */ cXyz field_0x6a4; + /* 0x6B0 */ cXyz field_0x6b0; + /* 0x6BC */ s16 field_0x6bc; + /* 0x6BE */ csXyz field_0x6be; + /* 0x6C4 */ f32 field_0x6c4; + /* 0x6C8 */ s16 field_0x6c8; + /* 0x6CA */ s16 field_0x6ca; + /* 0x6CC */ f32 field_0x6cc; + /* 0x6D0 */ f32 field_0x6d0; + /* 0x6D4 */ f32 field_0x6d4; + /* 0x6D8 */ u8 field_0x6d8; + /* 0x6D9 */ u8 field_0x6d9; + /* 0x6DA */ s16 field_0x6da; + /* 0x6DC */ u8 field_0x6dc; + /* 0x6DD */ u8 field_0x6dd; + /* 0x6DE */ u8 field_0x6de; + /* 0x6DF */ u8 field_0x6df; + /* 0x6E0 */ u8 field_0x6e0; + /* 0x6E1 */ bool mIsFlying; + /* 0x6E2 */ u8 field_0x6e2[0x6e3 - 0x6e2]; + /* 0x6E3 */ u8 field_0x6e3; + /* 0x6E4 */ u8 field_0x6e4; + /* 0x6E5 */ u8 field_0x6e5; + /* 0x6E6 */ u8 field_0x6e6; + /* 0x6E7 */ u8 field_0x6e7; + /* 0x6E8 */ u8 field_0x6e8; + /* 0x6E8 */ u8 field_0x6e9; + /* 0x6EA */ u8 field_0x6ea; + /* 0x6EB */ u8 field_0x6eb; + /* 0x6EC */ u8 field_0x6ec[0x6ed - 0x6ec]; + /* 0x6ED */ u8 field_0x6ed; + /* 0x6F0 */ f32 field_0x6f0; + /* 0x6F4 */ f32 field_0x6f4; + /* 0x6F8 */ f32 field_0x6f8; + /* 0x6FC */ f32 field_0x6fc; + /* 0x700 */ f32 field_0x700; + /* 0x704 */ f32 mGroundHeight; + /* 0x708 */ f32 mRoofHeight; + /* 0x70C */ f32 field_0x70c; + /* 0x710 */ s16 field_0x710; + /* 0x712 */ s16 field_0x712; + /* 0x714 */ s16 field_0x714; + /* 0x716 */ s16 field_0x716; + /* 0x718 */ s16 field_0x718; + /* 0x71A */ s16 field_0x71a; + /* 0x71C */ s32 field_0x71c; + /* 0x720 */ s32 field_0x720; + /* 0x724 */ u8 field_0x724[0x728 - 0x724]; + /* 0x728 */ s32 field_0x728; + /* 0x72C */ s32 field_0x72c; + /* 0x730 */ s32 mDashCooldownTime; + /* 0x734 */ s32 mDashTime; + /* 0x738 */ s32 field_0x738; + /* 0x73C */ s32 field_0x73c; + /* 0x740 */ s32 mCurrentAction; + /* 0x744 */ s32 field_0x744; + /* 0x748 */ s32 field_0x748; + /* 0x74C */ s32 field_0x74c; + /* 0x750 */ s32 field_0x750; + /* 0x754 */ s32 field_0x754; + /* 0x758 */ s32 field_0x758; + /* 0x75C */ char* field_0x75c; + /* 0x760 */ char* field_0x760; + /* 0x764 */ s32 field_0x764; + /* 0x768 */ dPath* mpPath1; + /* 0x76C */ dPath* mpPath2; + /* 0x770 */ s8 mPathIdx; + /* 0x771 */ s8 field_0x771; + /* 0x772 */ s8 mPathIdxOffset; /* 0x773 */ s8 mPathDir; - /* 0x774 */ u8 field_0x774[0xBA4 - 0x774]; + /* 0x774 */ u8 field_0x774[0x778 - 0x774]; + /* 0x778 */ dBgS_AcchCir mAcchCir; + /* 0x7B8 */ dBgS_ObjAcch mObjAcch; + /* 0x990 */ dCcD_Stts mStts; + /* 0x9CC */ dCcD_Sph mSph; + /* 0xB04 */ dCcU_AtInfo mAtInfo; + /* 0xB28 */ u8 field_0xb28[0xb30 - 0xb28]; + /* 0xB30 */ u32 field_0xb30; + /* 0xB34 */ u32 field_0xb34; + /* 0xB38 */ u32 field_0xb38; + /* 0xB3C */ u32 field_0xb3c; + /* 0xB40 */ u32 field_0xb40; + /* 0xB44 */ u32 field_0xb44[3]; + /* 0xB50 */ u32 field_0xb50; + /* 0xB54 */ u8 field_0xb54; + /* 0xB58 */ dMsgFlow_c mMsgFlow; }; STATIC_ASSERT(sizeof(daKago_c) == 0xBA4); -class daKago_HIO_c { +class daKago_HIO_c : public JORReflexible { public: /* 808495AC */ daKago_HIO_c(); - /* 80854A4C */ ~daKago_HIO_c(); + /* 80854A4C */ virtual ~daKago_HIO_c() {} + + void genMessage(JORMContext* ctx); + + /* 0x04 */ s8 mChild; + /* 0x08 */ f32 mRevoconUpDown; + /* 0x0C */ f32 mRevoconUpDownMax; + /* 0x10 */ f32 mRevoconLeftRight; + /* 0x14 */ f32 mRevoconLeftRightMax; + /* 0x18 */ f32 mBasicSize; + /* 0x1C */ f32 mFlightSpeed; + /* 0x20 */ f32 mFlightGroundAltitude; + /* 0x24 */ f32 mFlightCeilingAltitude; + /* 0x28 */ f32 mShadowDensity; + /* 0x2C */ f32 mDescentRateIncrement; + /* 0x30 */ f32 mAscentRateDecel; + /* 0x34 */ f32 mDashTime; + /* 0x38 */ f32 mDashTimeMultiplier; + /* 0x3C */ f32 mWallHitInvulnTime; + /* 0x40 */ f32 mDashCooldownTime; + /* 0x44 */ f32 mZOffset; + /* 0x48 */ f32 mZOffsetHori; + /* 0x4C */ u8 mAngleTrackingMode; + /* 0x50 */ f32 mYOffsetFromWaterSurface; + /* 0x54 */ f32 mWaterSplashTime; + /* 0x58 */ f32 mSplashGenTimeDuringDash; }; #endif /* D_A_KAGO_H */ diff --git a/include/d/actor/d_a_midna.h b/include/d/actor/d_a_midna.h index 23061712957..8e2fef45093 100644 --- a/include/d/actor/d_a_midna.h +++ b/include/d/actor/d_a_midna.h @@ -369,6 +369,14 @@ public: void onForceMorfCancel() { onEndResetStateFlg0(ERFLG0_FORCE_MORF_CANCEL); } + void setCargoActor(fopAc_ac_c* i_actor) { + mpKago = (daKago_c*)i_actor; + } + + void offCargoActor() { + mpKago = NULL; + } + static daMidna_texData_s const m_texDataTable[21]; static daMidna_anmData_s const m_anmDataTable[53]; diff --git a/include/d/actor/d_a_obj_brg.h b/include/d/actor/d_a_obj_brg.h index 711a2a0fb3e..f92497a5039 100644 --- a/include/d/actor/d_a_obj_brg.h +++ b/include/d/actor/d_a_obj_brg.h @@ -89,8 +89,9 @@ public: /* 0xB1EE */ u8 field_0xB1EE[0xB1EF - 0xB1EE]; /* 0xB1EF */ s8 field_0xb1ef; /* 0xB1F0 */ s8 field_0xb1f0; - /* 0xB1F1 */ u8 field_0xb1f1; - /* 0xB1F2 */ u8 field_0xb1f2[0xb1f8 - 0xB1F2]; + /* 0xB1F1 */ s8 field_0xb1f1; + /* 0xB1F2 */ s8 field_0xb1f2[2]; + /* 0xB1F4 */ u8 field_0xb1f4[0xb1f8 - 0xB1F4]; }; STATIC_ASSERT(sizeof(obj_brg_class) == 0xb1f8); diff --git a/include/d/actor/d_a_obj_carry.h b/include/d/actor/d_a_obj_carry.h index 3b6b57e1bd3..5609c9f96a2 100644 --- a/include/d/actor/d_a_obj_carry.h +++ b/include/d/actor/d_a_obj_carry.h @@ -277,6 +277,10 @@ public: void offDraw() { mDraw = 1; } void onDraw() { mDraw = 0; } bool isDraw() { return mDraw == false; } + void onCarryHookOK() { mCarryHookOK = 1; } + void offCarryHookOK() { mCarryHookOK = 0; } + BOOL checkRecover() { return mRecover; } + void reset() { mReset = 1; } void setPower(fopAc_ac_c* cannon_actor, f32 my_0xde0, f32 my_0xde4, s16 my_0xde8) { mpCannonActor = cannon_actor; diff --git a/include/d/actor/d_a_obj_drop.h b/include/d/actor/d_a_obj_drop.h index 5d4f904ede2..5a961c125dc 100644 --- a/include/d/actor/d_a_obj_drop.h +++ b/include/d/actor/d_a_obj_drop.h @@ -55,8 +55,10 @@ public: u8 getYmSwbit() { return fopAcM_GetParamBit(this, 8, 8); } u8 getSave() { return fopAcM_GetParamBit(this, 0, 6); } + void setPos(cXyz i_pos) { current.pos = i_pos; } void setDemoMode(u8 i_mode) { mDemoMode = i_mode; } void setMode(u8 i_mode) { mMode = i_mode; } + void setAppear() { mAppear = 1; } u8 chkDemoMode() { return mDemoMode; } /* 0x568 */ cXyz mLinePos[3]; diff --git a/include/d/actor/d_a_obj_poCandle.h b/include/d/actor/d_a_obj_poCandle.h index 417ee125b72..dd6d7439d98 100644 --- a/include/d/actor/d_a_obj_poCandle.h +++ b/include/d/actor/d_a_obj_poCandle.h @@ -33,10 +33,18 @@ public: /* 80CB242C */ void Delete(); /* 80CB2610 */ ~daPoCandle_c(); - /* 80CB3E3C */ void getFirePos(); // implemented in d_a_obj_poFire.cpp + /* 80CB3E3C */ cXyz getFirePos(); // implemented in d_a_obj_poFire.cpp + u8 getIDNum() {return mIDNum;} + void setFireFlag(u8 flag) { field_0x5D2 = flag; } private: - /* 0x568 */ u8 field_0x568[0x614 - 0x568]; + /* 0x568 */ u8 field_0x568[0x5C4 - 0x568]; + /* 0x5C4 */ cXyz mFirePos; + /* 0x5D0 */ u8 field_0x5D0[0x5D2 - 0x5D0]; + /* 0x5D2 */ u8 field_0x5D2; + /* 0x5D3 */ u8 field_0x5D3[0x5D5 - 0x5D3]; + /* 0x5D5 */ u8 mIDNum; + /* 0x5DB */ u8 field_0x5DB[0x614 - 0x5D6]; }; STATIC_ASSERT(sizeof(daPoCandle_c) == 0x614); diff --git a/include/d/actor/d_a_obj_poFire.h b/include/d/actor/d_a_obj_poFire.h index 2815197d981..5afc413e38a 100644 --- a/include/d/actor/d_a_obj_poFire.h +++ b/include/d/actor/d_a_obj_poFire.h @@ -1,8 +1,11 @@ #ifndef D_A_OBJ_POFIRE_H #define D_A_OBJ_POFIRE_H -#include "f_op/f_op_actor_mng.h" #include "d/actor/d_a_obj_poCandle.h" +#include "d/actor/d_a_player.h" +#include "d/actor/d_a_tag_poFire.h" +#include "d/d_event_lib.h" + /** * @ingroup actors-objects @@ -12,15 +15,32 @@ * @details * */ -class daPoFire_c : public fopAc_ac_c { +class daPoFire_c : public fopAc_ac_c, + public request_of_phase_process_class, + public dEvLib_callback_c { public: + typedef void (daPoFire_c::*modeProc)(); + daPoFire_c() : dEvLib_callback_c(this) {} + + enum Mode { + MODE_INIT_MOVE = 0, + MODE_WAIT = 1, + MODE_WAIT_SET_EFFECT = 2, + MODE_MOVE_OUT = 3, + MODE_MOVE = 4, + MODE_NO_MOVE = 5, + MODE_MOVE_WAIT = 6, + MODE_ON_FIRE = 7, + MODE_FIRE_END = 8, + }; + /* 80CB2A0C */ void setBaseMtx(); - /* 80CB2A74 */ void create(); - /* 80CB2BB8 */ void Execute(); + /* 80CB2A74 */ int create(); + /* 80CB2BB8 */ int Execute(); /* 80CB2BFC */ void procMain(); /* 80CB2D84 */ void setFire(); - /* 80CB2F68 */ void searchCandle(void*, void*); - /* 80CB2FD4 */ void searchFireTag(void*, void*); + /* 80CB2F68 */ static void* searchCandle(void*, void*); + /* 80CB2FD4 */ static void* searchFireTag(void*, void*); /* 80CB3024 */ void init_modeInitMove(); /* 80CB30FC */ void modeInitMove(); /* 80CB31FC */ void modeWait(); @@ -37,26 +57,67 @@ public: /* 80CB39E0 */ void modeOnFire(); /* 80CB3ADC */ void init_modeFireEnd(); /* 80CB3AE8 */ void modeFireEnd(); - /* 80CB3B70 */ void eventStart(); - /* 80CB3BE0 */ void eventRun(); - /* 80CB3C64 */ bool eventEnd(); - /* 80CB3C6C */ bool Draw(); - /* 80CB3C74 */ void Delete(); - /* 80CB3E58 */ ~daPoFire_c(); + /* 80CB3C6C */ int Draw(); + /* 80CB3C74 */ int Delete(); + + /* 80CB3E58 */ virtual ~daPoFire_c() {} + /* 80CB3B70 */ virtual bool eventStart(); + /* 80CB3BE0 */ virtual bool eventRun(); + /* 80CB3C64 */ virtual bool eventEnd(); u8 getMoveEnd() { return mMoveEnd; } + u32 getID() { return fopAcM_GetParamBit(this, 0, 8); } + private: - /* 0x568 */ u8 field_0x568[0x594 - 0x568]; + /* 0x584 */ request_of_phase_process_class mPhase; + /* 0x58C */ int mStaffID; + /* 0x590 */ s16 unk590; + /* 0x592 */ u8 mMode; + /* 0x593 */ u8 mActorID; // Identifies each of the 4 Poe flames /* 0x594 */ bool mMoveEnd; - /* 0x595 */ u8 field_0x595[0x618 - 0x595]; + /* 0x598 */ u32 mParticleKeys[2]; + /* 0x5A0 */ cXyz unk5A0; + /* 0x5AC */ cXyz unk5AC; + /* 0x5B4 */ cXyz unk5B4; + /* 0x5C4 */ u8 unk5C4; + /* 0x5C5 */ u8 mWaitTimer; + /* 0x5C8 */ daPoCandle_c* mpPoCandle; + /* 0x5CC */ daTagPoFire_c* mpTagPoFire; + /* 0x5D0 */ f32 mGroundY; + /* 0x5D4 */ f32 unk5D4; + /* 0x5D8 */ f32 unk5D8; + /* 0x5DC */ u8 pad5DC[0xC]; // Padding + /* 0x5E8 */ f32 unk5E8; + /* 0x5EC */ f32 unk5EC; + /* 0x5F0 */ f32 unk5F0; + /* 0x5F4 */ f32 unk5F4; + /* 0x5F8 */ cXyz unk5F8; + /* 0x604 */ s32 unk604; + /* 0x608 */ f32 unk608; + /* 0x610 */ cXyz unk610; }; STATIC_ASSERT(sizeof(daPoFire_c) == 0x618); -class daPoFire_HIO_c { +class daPoFire_HIO_c : public mDoHIO_entry_c { public: /* 80CB294C */ daPoFire_HIO_c(); - /* 80CB3D24 */ ~daPoFire_HIO_c(); + /* 80CB3D24 */ virtual ~daPoFire_HIO_c() {} + + void genMessage(JORMContext*); + + /* 0x06 */ s8 unk6; + /* 0x08 */ f32 mWaitPeriod; // Wait oscillation period + /* 0x0C */ f32 mWaitVertRange; // Wait oscillation amplitude, vertical range + /* 0x10 */ f32 mWaitVertSpeed; // Wait oscillation speed, vertical speed + /* 0x14 */ f32 mMovePeriod1; // Move period + /* 0x18 */ f32 mMoveSwingSpeed1; // Move oscillation speed + /* 0x1C */ f32 mMoveSpeed; // Move speed + /* 0x20 */ f32 mMovePeriod2; // Move period ?? + /* 0x24 */ f32 mMoveSwingSpeed2; // Move oscillation speed + /* 0x28 */ f32 mMoveSwingRange; // Move oscillation range + /* 0x2C */ f32 mPickupRange; // Horizontal dist ? + /* 0x30 */ u8 mFireWaitTime; // Fire wait }; #endif /* D_A_OBJ_POFIRE_H */ diff --git a/include/d/actor/d_a_obj_riverrock.h b/include/d/actor/d_a_obj_riverrock.h index a4501a9dd89..62cd48d7b8b 100644 --- a/include/d/actor/d_a_obj_riverrock.h +++ b/include/d/actor/d_a_obj_riverrock.h @@ -45,7 +45,6 @@ public: /* 80CBD8E0 */ int Draw(); /* 80CBD964 */ int Delete(); -private: /* 0x5A0 */ ActionEnum mAction; /* 0x5A4 */ BreakSubAction mBreakSubAction; /* 0x5A8 */ u8 field_0x5a8; diff --git a/include/d/actor/d_a_obj_timer.h b/include/d/actor/d_a_obj_timer.h index e2fadb57f45..7072e2d0780 100644 --- a/include/d/actor/d_a_obj_timer.h +++ b/include/d/actor/d_a_obj_timer.h @@ -32,7 +32,7 @@ class Act_c : public fopAc_ac_c { /* 80485284 */ void mode_wait(); /* 804852E0 */ void mode_count_init(); /* 80485324 */ void mode_count(); - /* 804854BC */ int _execute(); + /* 804854BC */ bool _execute(); int prm_get_swSave() { return daObj::PrmAbstract(this,PRM_8, PRM_16); diff --git a/include/d/actor/d_a_obj_tobyhouse.h b/include/d/actor/d_a_obj_tobyhouse.h index b0f447e7fc3..ba339267ad6 100644 --- a/include/d/actor/d_a_obj_tobyhouse.h +++ b/include/d/actor/d_a_obj_tobyhouse.h @@ -1,6 +1,7 @@ #ifndef D_A_OBJ_TOBYHOUSE_H #define D_A_OBJ_TOBYHOUSE_H +#include "d/d_bg_s_movebg_actor.h" #include "f_op/f_op_actor_mng.h" /** @@ -11,14 +12,28 @@ * @details * */ -class daObjTobyHouse_c : public fopAc_ac_c { +class daObjTobyHouse_c : public dBgS_MoveBgActor { public: + typedef void (daObjTobyHouse_c::*actionFunc)(); + + enum Action { + ACTION_WAIT, + ACTION_ORDER_EVENT, + ACTION_EVENT, + ACTION_DEAD, + }; + + enum Type { + TYPE_0, + TYPE_1, + }; + /* 80D15F0C */ void initBaseMtx(); /* 80D15F48 */ void setBaseMtx(); - /* 80D15FE0 */ void Create(); - /* 80D161A4 */ void CreateHeap(); - /* 80D163F0 */ void create1st(); - /* 80D164C0 */ void Execute(f32 (**)[3][4]); + /* 80D15FE0 */ int Create(); + /* 80D161A4 */ int CreateHeap(); + /* 80D163F0 */ int create1st(); + /* 80D164C0 */ int Execute(Mtx**); /* 80D16560 */ void action(); /* 80D1661C */ void actionWait(); /* 80D166E0 */ void actionOrderEvent(); @@ -26,15 +41,61 @@ public: /* 80D16860 */ void actionDead(); /* 80D16864 */ void demoProc(); /* 80D171C0 */ void sceneChange(); - /* 80D17230 */ void Draw(); - /* 80D17374 */ void checkLODModel(); - /* 80D174F8 */ void Delete(); + /* 80D17230 */ int Draw(); + /* 80D17374 */ BOOL checkLODModel(); + /* 80D174F8 */ int Delete(); -private: - /* 0x568 */ u8 field_0x568[0x600 - 0x568]; + bool checkWater() { return fopAcM_GetParamBit(this, 31, 1); } + void setAction(u8 action) { mAction = action; } + + /* 0x5A0 */ request_of_phase_process_class mPhase; + /* 0x5A8 */ J3DModel* mModel; + /* 0x5AC */ J3DModel* mLODModel; + /* 0x5B0 */ mDoExt_bckAnm* mBcks[3]; + /* 0x5BC */ mDoExt_bckAnm* mActiveBck; + /* 0x5C0 */ int field_0x5c0; + /* 0x5C4 */ int field_0x5c4; + /* 0x5C8 */ int field_0x5c8; + /* 0x5CC */ int mStaffId; + /* 0x5D0 */ int mEventIdIdx; + /* 0x5D4 */ s16 mEventIds[2]; + /* 0x5D8 */ u16 mBirlPJnt; + /* 0x5DA */ u16 mBirlCannonJnt; + /* 0x5DC */ u8 field_0x5dc; + /* 0x5DD */ u8 mAction; + /* 0x5DE */ u8 field_0x5de; + /* 0x5E0 */ s16 field_0x5e0; + /* 0x5E2 */ u8 field_0x5e2; + /* 0x5E3 */ u8 field_0x5e3; + /* 0x5E4 */ u8 field_0x5e4; + /* 0x5E5 */ u8 mType; + /* 0x5E8 */ f32 mHeightOffset; + /* 0x5EC */ u16 mDemoTimer; + /* 0x5F0 */ JPABaseEmitter* field_0x5f0; + /* 0x5F4 */ JPABaseEmitter* field_0x5f4; + /* 0x5F8 */ JPABaseEmitter* field_0x5f8; + /* 0x5FC */ JPABaseEmitter* field_0x5fc; }; STATIC_ASSERT(sizeof(daObjTobyHouse_c) == 0x600); +#ifdef DEBUG + +class daObjTobyHouse_HIO_c : public mDoHIO_entry_c { +public: + daObjTobyHouse_HIO_c(); + ~daObjTobyHouse_HIO_c() {} + void genMessage(JORMContext* ctx); + + /* 0x06 */ u8 mHawkeyeMediumLOD; + /* 0x07 */ u8 field_0x07; + /* 0x08 */ u8 mDrawCollision; + /* 0x0A */ s16 mShakingCycle; + /* 0x0C */ f32 mShakingAmplitude; + /* 0x10 */ f32 mLODDistance; +}; + +#endif + #endif /* D_A_OBJ_TOBYHOUSE_H */ diff --git a/include/d/actor/d_a_obj_togeTrap.h b/include/d/actor/d_a_obj_togeTrap.h index cad57c2d76b..b0b7f285238 100644 --- a/include/d/actor/d_a_obj_togeTrap.h +++ b/include/d/actor/d_a_obj_togeTrap.h @@ -1,6 +1,8 @@ #ifndef D_A_OBJ_TOGETRAP_H #define D_A_OBJ_TOGETRAP_H +#include "d/d_bg_s_movebg_actor.h" +#include "d/d_cc_d.h" #include "f_op/f_op_actor_mng.h" /** @@ -11,15 +13,24 @@ * @details * */ -class daTogeTrap_c : public fopAc_ac_c { +class daTogeTrap_c : public dBgS_MoveBgActor { public: + typedef void (daTogeTrap_c::*modeFunc)(); + + enum Mode { + MODE_WAIT, + MODE_MOVE_UP, + MODE_MOVE_DOWN, + MODE_BREAK, + }; + /* 80D17C74 */ void setBaseMtx(); - /* 80D17D5C */ void CreateHeap(); - /* 80D17E14 */ void create(); - /* 80D18244 */ void rideCallBack(dBgW*, fopAc_ac_c*, fopAc_ac_c*); - /* 80D1825C */ void Execute(f32 (**)[3][4]); + /* 80D17D5C */ int CreateHeap(); + /* 80D17E14 */ int create(); + /* 80D18244 */ static void rideCallBack(dBgW*, fopAc_ac_c*, fopAc_ac_c*); + /* 80D1825C */ int Execute(Mtx**); /* 80D182C8 */ void moveMain(); - /* 80D185DC */ void playerAreaCheck(); + /* 80D185DC */ BOOL playerAreaCheck(); /* 80D186B0 */ void init_modeWait(); /* 80D186BC */ void modeWait(); /* 80D186C0 */ void init_modeMoveUp(); @@ -28,23 +39,78 @@ public: /* 80D188DC */ void modeMoveDown(); /* 80D18994 */ void init_modeBreak(); /* 80D18A5C */ void modeBreak(); - /* 80D18BEC */ void Draw(); - /* 80D18CA4 */ void Delete(); + /* 80D18BEC */ int Draw(); + /* 80D18CA4 */ int Delete(); - static u8 const mCcDObjInfo[48]; - static u8 mCcDCyl[68]; + u8 getSwBit() { return fopAcM_GetParamBit(this, 0, 8); } + + static dCcD_SrcGObjInf const mCcDObjInfo; + static dCcD_SrcCyl mCcDCyl; private: - /* 0x568 */ u8 field_0x568[0xae4 - 0x568]; + /* 0x5A0 */ dCcD_Stts mStts; + /* 0x5DC */ dCcD_Cyl mCyls[4]; + /* 0xACC */ request_of_phase_process_class mPhase; + /* 0xAD4 */ J3DModel* mModel; + /* 0xAD8 */ J3DModel* mWolfEyeModel; + /* 0xADC */ u8 mMode; + /* 0xADD */ u8 field_0xadd; + /* 0xADE */ u8 mSwBit; + /* 0xADF */ bool mIsWolfEye; + /* 0xAE0 */ BOOL mIsPlayerInArea; }; STATIC_ASSERT(sizeof(daTogeTrap_c) == 0xae4); -class daTogeTrap_HIO_c { + +class daTogeTrap_HIO_c : public fOpAcm_HIO_entry_c { public: /* 80D17B6C */ daTogeTrap_HIO_c(); - /* 80D18DA8 */ ~daTogeTrap_HIO_c(); + /* 80D18DA8 */ ~daTogeTrap_HIO_c() {} + + #ifdef DEBUG + void genMessage(JORMContext* ctx) { + // Speed + ctx->genLabel("--- 速 出現時---", 0, 0, NULL, 0xffff, 0xffff, 0x200, 0x18); + // Initial speed + ctx->genSlider("初速", &mInitialSpeed, 0.0f, 10000.0f, 0, NULL, 0xffff, 0xffff, 0x200, + 0x18); + // Max + ctx->genSlider("最大", &mMaxSpeed, 0.0f, 10000.0f, 0, NULL, 0xffff, 0xffff, 0x200, 0x18); + // Speed when pulling + ctx->genLabel("--- 速度 引っ込み時---", 0, 0, NULL, 0xffff, 0xffff, 0x200, 0x18); + ctx->genSlider("初速", &mInitialDownSpeed, 0.0, 10000.0, 0, NULL, 0xffff, 0xffff, 0x200, + 0x18); + // Max + ctx->genSlider("最大", &mMaxDownSpeed, 0.0f, 10000.0f, 0, NULL, 0xffff, 0xffff, 0x200, + 0x18); + // Range + ctx->genSlider("範囲", &mRange, 0.1f, 1000.0f, 0, NULL, 0xffff, 0xffff, 0x200, 0x18); + // Spinner speed + ctx->genSlider("スピナー速度", &mSpinnerSpeed, 0.0f, 100.0f, 0, NULL, 0xffff, 0xffff, 0x200, + 0x18); + // Vibration + ctx->startComboBox("振動", &mVibration, 0, NULL, 0xffff, 0xffff, 0x100, 0x1a); + // Strength 1-8 + ctx->genComboBoxItem("強さ1", 1); + ctx->genComboBoxItem("強さ2", 2); + ctx->genComboBoxItem("強さ3", 3); + ctx->genComboBoxItem("強さ4", 4); + ctx->genComboBoxItem("強さ5", 5); + ctx->genComboBoxItem("強さ6", 6); + ctx->genComboBoxItem("強さ7", 7); + ctx->genComboBoxItem("強さ8", 8); + ctx->endComboBox(); + } + #endif + + /* 0x08 */ f32 mRange; + /* 0x0C */ f32 mInitialSpeed; + /* 0x10 */ f32 mMaxSpeed; + /* 0x14 */ f32 mInitialDownSpeed; + /* 0x18 */ f32 mMaxDownSpeed; + /* 0x1C */ f32 mSpinnerSpeed; + /* 0x20 */ u8 mVibration; }; - #endif /* D_A_OBJ_TOGETRAP_H */ diff --git a/include/d/actor/d_a_obj_tombo.h b/include/d/actor/d_a_obj_tombo.h index 89ed3c42ebd..f52fd5027e6 100644 --- a/include/d/actor/d_a_obj_tombo.h +++ b/include/d/actor/d_a_obj_tombo.h @@ -1,6 +1,9 @@ #ifndef D_A_OBJ_TOMBO_H #define D_A_OBJ_TOMBO_H +#include "JSystem/JHostIO/JORReflexible.h" +#include "d/actor/d_a_player.h" +#include "d/d_cc_d.h" #include "d/d_insect.h" /** @@ -11,14 +14,20 @@ * @details * */ -class daObjTOMBO_c : public fopAc_ac_c { +class daObjTOMBO_c : public dInsect_c { public: + enum Action { + ACTION_WAIT, + ACTION_MOVE, + ACTION_LINK, + }; + /* 80D19200 */ void InitCcSph(); /* 80D1926C */ void SetCcSph(); - /* 80D192E4 */ void CreateHeap(); + /* 80D192E4 */ int CreateHeap(); /* 80D19658 */ void WaitAction(); /* 80D19744 */ void SpeedSet(); - /* 80D19834 */ void CheckWater(); + /* 80D19834 */ bool CheckWater(); /* 80D199F4 */ void CheckGround(); /* 80D19B48 */ void CheckWall(); /* 80D19C34 */ void SearchLink(); @@ -29,25 +38,44 @@ public: /* 80D1A514 */ void Insect_Release(); /* 80D1A524 */ void ParticleSet(); /* 80D1A648 */ void BoomChk(); - /* 80D1A904 */ void Execute(); + /* 80D1A904 */ int Execute(); /* 80D1AB20 */ void ObjHit(); /* 80D1AC84 */ void Z_BufferChk(); - /* 80D1AE00 */ void Delete(); + /* 80D1AE00 */ int Delete(); /* 80D1AE68 */ void setBaseMtx(); - /* 80D1AFC8 */ void CreateChk(); - /* 80D1B174 */ void create(); + /* 80D1AFC8 */ bool CreateChk(); + /* 80D1B174 */ int create(); + + inline int Draw(); private: - /* 0x568 */ u8 field_0x568[0xa18 - 0x568]; + /* 0x590 */ dCcD_Stts mStts; + /* 0x5CC */ dCcD_Sph mSph; + /* 0x704 */ daPy_boomerangMove_c mBoomerangMove; + /* 0x710 */ bool mIsHitByBoomerang; + /* 0x711 */ u8 mAction; + /* 0x712 */ u8 field_0x712; + /* 0x714 */ s16 field_0x714[2]; + /* 0x718 */ s16 field_0x718; + /* 0x71C */ f32 field_0x71c; + /* 0x720 */ f32 field_0x720; + /* 0x724 */ s16 field_0x724; + /* 0x726 */ u8 field_0x726[0x73c - 0x726]; + /* 0x73C */ cXyz field_0x73c; + /* 0x748 */ mDoExt_brkAnm* mBrk; + /* 0x74C */ mDoExt_btkAnm* mBtk; + /* 0x750 */ f32 field_0x750; + /* 0x754 */ u32 field_0x754; + /* 0x758 */ f32 mParticleScale; + /* 0x75C */ u8 field_0x75c; + /* 0x760 */ Z2Creature mCreature; + /* 0x7F0 */ dBgS_AcchCir mAcchCir; + /* 0x830 */ mDoExt_McaMorfSO* mpMorf; + /* 0x834 */ dBgS_ObjAcch mAcch; + /* 0xA0C */ request_of_phase_process_class mPhase; + /* 0xA14 */ bool mIsHIOOwner; }; STATIC_ASSERT(sizeof(daObjTOMBO_c) == 0xa18); -class daObj_TomHIO_c { -public: - /* 80D191CC */ daObj_TomHIO_c(); - /* 80D1B618 */ ~daObj_TomHIO_c(); -}; - - #endif /* D_A_OBJ_TOMBO_H */ diff --git a/include/d/actor/d_a_player.h b/include/d/actor/d_a_player.h index b799edc328f..3e48728a1b4 100644 --- a/include/d/actor/d_a_player.h +++ b/include/d/actor/d_a_player.h @@ -710,175 +710,175 @@ public: bool getDkCaught() const { return checkNoResetFlg1(FLG1_DK_CAUGHT); } bool getStCaught() const { return checkNoResetFlg1(FLG1_UNK_80000000); } - virtual cXyz* getMidnaAtnPos() const { return NULL; } - virtual void setMidnaMsgNum(fopAc_ac_c*, u16) {} - virtual MtxP getModelMtx() { return cullMtx; } - virtual MtxP getInvMtx() { return cullMtx; } - virtual cXyz* getShadowTalkAtnPos() { return ¤t.pos; } - virtual f32 getGroundY() = 0; - virtual MtxP getLeftItemMatrix() { return cullMtx; } - virtual MtxP getRightItemMatrix() { return cullMtx; } - virtual MtxP getLeftHandMatrix() { return cullMtx; } - virtual MtxP getRightHandMatrix() { return cullMtx; } - virtual MtxP getLinkBackBone1Matrix() { return cullMtx; } - virtual MtxP getWolfMouthMatrix() { return cullMtx; } - virtual MtxP getWolfBackbone2Matrix() { return cullMtx; } - virtual MtxP getBottleMtx() { return NULL; } - virtual BOOL checkPlayerGuard() const { return FALSE; } - virtual u32 checkPlayerFly() const { return 0; } - virtual BOOL checkFrontRoll() const { return FALSE; } - virtual BOOL checkWolfDash() const { return FALSE; } - virtual BOOL checkAutoJump() const { return FALSE; } - virtual bool checkSideStep() const { return FALSE; } - virtual bool checkWolfTriggerJump() const { return FALSE; } - virtual BOOL checkGuardBreakMode() const { return FALSE; } - virtual bool checkLv3Slide() const { return FALSE; } - virtual bool checkWolfHowlDemoMode() const { return FALSE; } - virtual bool checkChainBlockPushPull() { return FALSE; } - virtual BOOL checkElecDamage() const { return FALSE; } - virtual BOOL checkEmptyBottleSwing() const { return FALSE; } - virtual BOOL checkBottleSwingMode() const { return FALSE; } - virtual BOOL checkHawkWait() const { return FALSE; } - virtual BOOL checkGoatThrow() const { return FALSE; } - virtual BOOL checkGoatThrowAfter() const { return FALSE; } - virtual BOOL checkWolfTagLockJump() const { return FALSE; } - virtual BOOL checkWolfTagLockJumpLand() const { return FALSE; } - virtual BOOL checkWolfRope() { return FALSE; } - virtual BOOL checkWolfRopeHang() const { return FALSE; } - virtual BOOL checkRollJump() const { return FALSE; } - virtual BOOL checkGoronRideWait() const { return FALSE; } - virtual BOOL checkWolfChain() const { return FALSE; } - virtual BOOL checkWolfWait() const { return FALSE; } - virtual BOOL checkWolfJumpAttack() const { return FALSE; } - virtual BOOL checkWolfRSit() const { return FALSE; } - virtual bool checkBubbleFly() const { return FALSE; } - virtual BOOL checkBottleDrinkEnd() const { return FALSE; } - virtual BOOL checkWolfDig() const { return FALSE; } - virtual BOOL checkCutCharge() const { return FALSE; } - virtual BOOL checkCutTurnCharge() const { return FALSE; } - virtual BOOL checkCutLargeJumpCharge() const { return FALSE; } - virtual bool getBokoFlamePos(cXyz*) { return FALSE; } - virtual BOOL checkComboCutTurn() const { return FALSE; } - virtual BOOL checkClimbMove() const { return FALSE; } - virtual BOOL checkGrassWhistle() const { return FALSE; } - virtual BOOL checkBoarRun() const { return FALSE; } - virtual bool checkFmChainPut() const { return FALSE; } - virtual BOOL checkHorseElecDamage() const { return FALSE; } - virtual f32 getBaseAnimeFrameRate() const { return 1.0f; } - virtual f32 getBaseAnimeFrame() const { return 0.0f; } - virtual void setAnimeFrame(f32) {} - virtual BOOL checkWolfLock(fopAc_ac_c*) const { return FALSE; } - virtual bool cancelWolfLock(fopAc_ac_c*) { return FALSE; } - virtual s32 getAtnActorID() const { return fpcM_ERROR_PROCESS_ID_e; } - virtual s32 getItemID() const { return fpcM_ERROR_PROCESS_ID_e; } - virtual u32 getGrabActorID() const { return fpcM_ERROR_PROCESS_ID_e; } - virtual BOOL exchangeGrabActor(fopAc_ac_c*) { return FALSE; } - virtual BOOL setForceGrab(fopAc_ac_c*, int, int) { return FALSE; } - virtual void setForcePutPos(cXyz const&) {} - virtual u32 checkPlayerNoDraw() { return FALSE; } - virtual bool checkRopeTag() { return FALSE; } - virtual void voiceStart(u32) {} - virtual void seStartOnlyReverb(u32) {} - virtual void seStartOnlyReverbLevel(u32) {} - virtual void setOutPower(f32, short, int) {} - virtual void setGrabCollisionOffset(f32, f32, cBgS_PolyInfo*) {} - virtual void onMagneGrab(f32, f32) {} - virtual void onFrollCrashFlg(u8, int) {} - virtual MtxP getModelJointMtx(u16) { return NULL; } - virtual MtxP getHeadMtx() { return NULL; } - virtual bool setHookshotCarryOffset(fpc_ProcID, cXyz const*) { return FALSE; } - virtual BOOL checkCutJumpCancelTurn() const { return FALSE; } - virtual bool checkIronBallReturn() const { return FALSE; } - virtual bool checkIronBallGroundStop() const { return FALSE; } - virtual BOOL checkSingleBoarBattleSecondBowReady() const { return FALSE; } - virtual bool checkPointSubWindowMode() const { return FALSE; } - virtual void setClothesChange(int) {} - virtual void setPlayerPosAndAngle(cXyz const*, short, int) {} - virtual void setPlayerPosAndAngle(cXyz const*, csXyz const*) {} - virtual void setPlayerPosAndAngle(f32 (*)[4]) {} - virtual bool setThrowDamage(short, f32, f32, int, int, int) { return FALSE; } - virtual bool checkSetNpcTks(cXyz*, int, int) { return FALSE; } - virtual int setRollJump(f32, f32, short) { return FALSE; } - virtual void playerStartCollisionSE(u32, u32) {} - virtual void changeTextureAnime(u16, u16, int) {} - virtual void cancelChangeTextureAnime() {} - virtual void cancelDungeonWarpReadyNeck() {} - virtual void onSceneChangeArea(u8, u8, fopAc_ac_c*) {} - virtual void onSceneChangeAreaJump(u8, u8, fopAc_ac_c*) {} - virtual void onSceneChangeDead(u8, int) {} - virtual u32 checkHorseRide() const { return false; } - virtual u32 checkBoarRide() const { return 0; } - virtual u32 checkCanoeRide() const { return 0; } - virtual u32 checkBoardRide() const { return 0; } - virtual u32 checkSpinnerRide() const { return 0; } - virtual daSpinner_c* getSpinnerActor() { return NULL; } - virtual BOOL checkHorseRideNotReady() const { return FALSE; } - virtual bool checkArrowChargeEnd() const { return FALSE; } - virtual f32 getSearchBallScale() const { return 0.0f; } - virtual int checkFastShotTime() { return FALSE; } - virtual bool checkNoEquipItem() const { return TRUE; } - virtual bool checkFireMaterial() const { return FALSE; } - virtual bool checkKandelaarSwing(int) const { return FALSE; } - virtual s16 getBoardCutTurnOffsetAngleY() const { return 0; } - virtual cXyz* getMagneHitPos() { return &mSwordTopPos; } - virtual cXyz* getMagneBootsTopVec() { return ¤t.pos; } - virtual cXyz* getKandelaarFlamePos() { return NULL; } - virtual bool checkUseKandelaar(int) { return FALSE; } - virtual void setDkCaught(fopAc_ac_c*) {} - virtual void onPressedDamage(cXyz const&, short) {} - virtual bool checkPriActorOwn(fopAc_ac_c const*) const { return FALSE; } - virtual bool onWolfEnemyBiteAll(fopAc_ac_c*, daPy_FLG2) { return FALSE; } - virtual bool checkWolfEnemyBiteAllOwn(fopAc_ac_c const*) const { return FALSE; } - virtual void setWolfEnemyHangBiteAngle(short) {} - virtual void setKandelaarMtx(f32 (*)[4], int, int) {} - virtual bool getStickAngleFromPlayerShape(short*) const { return FALSE; } - virtual bool checkSpinnerPathMove() { return FALSE; } - virtual bool checkSpinnerTriggerAttack() { return FALSE; } - virtual void onSpinnerPathForceRemove() {} - virtual int getIronBallBgHit() const { return FALSE; } - virtual cXyz* getIronBallCenterPos() { return NULL; } - virtual bool checkCanoeFishingGetLeft() const { return FALSE; } - virtual bool checkCanoeFishingGetRight() const { return FALSE; } - virtual u8 checkBeeChildDrink() const { return FALSE; } - virtual void skipPortalObjWarp() {} - virtual BOOL checkTreasureRupeeReturn(int) const { return FALSE; } - virtual void setSumouReady(fopAc_ac_c*) {} - virtual bool checkAcceptDungeonWarpAlink(int) { return FALSE; } - virtual s16 getSumouCounter() const { return 0; } - virtual s16 checkSumouWithstand() const { return 0; } - virtual void cancelGoronThrowEvent() {} - virtual void setSumouGraspCancelCount(int) {} - virtual void setSumouPushBackDirection(short) {} - virtual void setSumouLoseHeadUp() {} - virtual s16 getGiantPuzzleAimAngle() const { return shape_angle.y; } - virtual void setGoronSideMove(fopAc_ac_c*) {} - virtual void setCargoCarry(fopAc_ac_c*) {} - virtual bool getDpdFarFlg() const { return 0; } - virtual cXyz* getHookshotTopPos() { return NULL; } - virtual bool checkHookshotReturnMode() const { return FALSE; } - virtual bool checkHookshotShootReturnMode() const { return FALSE; } - virtual bool checkOctaIealHang() const { return FALSE; } - virtual void cancelOctaIealHang() {} - virtual void cancelDragonHangBackJump() {} - virtual void setOctaIealWildHang() {} - virtual bool checkDragonHangRide() const { return FALSE; } - virtual void changeDragonActor(fopAc_ac_c*) {} - virtual u8 getClothesChangeWaitTimer() const { return 0; } - virtual u8 getShieldChangeWaitTimer() const { return 0; } - virtual u8 getSwordChangeWaitTimer() const { return 0; } - virtual BOOL checkMetamorphose() const { return FALSE; } - virtual BOOL checkWolfDownAttackPullOut() const { return FALSE; } - virtual BOOL checkBootsOrArmorHeavy() const { return FALSE; } - virtual s32 getBottleOpenAppearItem() const { return fpcM_ERROR_PROCESS_ID_e; } - virtual bool checkItemSwordEquip() const { return FALSE; } - virtual f32 getSinkShapeOffset() const { return 0.0f; } - virtual BOOL checkSinkDead() const { return FALSE; } - virtual BOOL checkHorseStart() { return FALSE; } - virtual Z2WolfHowlMgr* getWolfHowlMgrP() { return NULL; } - virtual BOOL checkWolfHowlSuccessAnime() const { return FALSE; } - virtual BOOL checkCopyRodTopUse() { return FALSE; } - virtual bool checkCopyRodEquip() const { return FALSE; } - virtual BOOL checkCutJumpMode() const { return FALSE; } + /* vt 0X008 */ virtual cXyz* getMidnaAtnPos() const { return NULL; } + /* vt 0X00C */ virtual void setMidnaMsgNum(fopAc_ac_c*, u16) {} + /* vt 0X010 */ virtual MtxP getModelMtx() { return cullMtx; } + /* vt 0X014 */ virtual MtxP getInvMtx() { return cullMtx; } + /* vt 0X018 */ virtual cXyz* getShadowTalkAtnPos() { return ¤t.pos; } + /* vt 0X01C */ virtual f32 getGroundY() = 0; + /* vt 0X020 */ virtual MtxP getLeftItemMatrix() { return cullMtx; } + /* vt 0X024 */ virtual MtxP getRightItemMatrix() { return cullMtx; } + /* vt 0X028 */ virtual MtxP getLeftHandMatrix() { return cullMtx; } + /* vt 0X02C */ virtual MtxP getRightHandMatrix() { return cullMtx; } + /* vt 0X030 */ virtual MtxP getLinkBackBone1Matrix() { return cullMtx; } + /* vt 0X034 */ virtual MtxP getWolfMouthMatrix() { return cullMtx; } + /* vt 0X038 */ virtual MtxP getWolfBackbone2Matrix() { return cullMtx; } + /* vt 0X03C */ virtual MtxP getBottleMtx() { return NULL; } + /* vt 0X040 */ virtual BOOL checkPlayerGuard() const { return FALSE; } + /* vt 0X044 */ virtual u32 checkPlayerFly() const { return 0; } + /* vt 0X048 */ virtual BOOL checkFrontRoll() const { return FALSE; } + /* vt 0X04C */ virtual BOOL checkWolfDash() const { return FALSE; } + /* vt 0X050 */ virtual BOOL checkAutoJump() const { return FALSE; } + /* vt 0X054 */ virtual bool checkSideStep() const { return FALSE; } + /* vt 0X058 */ virtual bool checkWolfTriggerJump() const { return FALSE; } + /* vt 0X05C */ virtual BOOL checkGuardBreakMode() const { return FALSE; } + /* vt 0X060 */ virtual bool checkLv3Slide() const { return FALSE; } + /* vt 0X064 */ virtual bool checkWolfHowlDemoMode() const { return FALSE; } + /* vt 0X068 */ virtual bool checkChainBlockPushPull() { return FALSE; } + /* vt 0X06C */ virtual BOOL checkElecDamage() const { return FALSE; } + /* vt 0X070 */ virtual BOOL checkEmptyBottleSwing() const { return FALSE; } + /* vt 0X074 */ virtual BOOL checkBottleSwingMode() const { return FALSE; } + /* vt 0X078 */ virtual BOOL checkHawkWait() const { return FALSE; } + /* vt 0X07C */ virtual BOOL checkGoatThrow() const { return FALSE; } + /* vt 0X080 */ virtual BOOL checkGoatThrowAfter() const { return FALSE; } + /* vt 0X084 */ virtual BOOL checkWolfTagLockJump() const { return FALSE; } + /* vt 0X088 */ virtual BOOL checkWolfTagLockJumpLand() const { return FALSE; } + /* vt 0X08C */ virtual BOOL checkWolfRope() { return FALSE; } + /* vt 0X090 */ virtual BOOL checkWolfRopeHang() const { return FALSE; } + /* vt 0X094 */ virtual BOOL checkRollJump() const { return FALSE; } + /* vt 0X098 */ virtual BOOL checkGoronRideWait() const { return FALSE; } + /* vt 0X09C */ virtual BOOL checkWolfChain() const { return FALSE; } + /* vt 0X0A0 */ virtual BOOL checkWolfWait() const { return FALSE; } + /* vt 0X0A4 */ virtual BOOL checkWolfJumpAttack() const { return FALSE; } + /* vt 0X0A8 */ virtual BOOL checkWolfRSit() const { return FALSE; } + /* vt 0X0AC */ virtual bool checkBubbleFly() const { return FALSE; } + /* vt 0X0B0 */ virtual BOOL checkBottleDrinkEnd() const { return FALSE; } + /* vt 0X0B4 */ virtual BOOL checkWolfDig() const { return FALSE; } + /* vt 0X0B8 */ virtual BOOL checkCutCharge() const { return FALSE; } + /* vt 0X0BC */ virtual BOOL checkCutTurnCharge() const { return FALSE; } + /* vt 0X0C0 */ virtual BOOL checkCutLargeJumpCharge() const { return FALSE; } + /* vt 0X0C4 */ virtual BOOL getBokoFlamePos(cXyz*) { return FALSE; } + /* vt 0X0C8 */ virtual BOOL checkComboCutTurn() const { return FALSE; } + /* vt 0X0CC */ virtual BOOL checkClimbMove() const { return FALSE; } + /* vt 0X0D0 */ virtual BOOL checkGrassWhistle() const { return FALSE; } + /* vt 0X0D4 */ virtual BOOL checkBoarRun() const { return FALSE; } + /* vt 0X0D8 */ virtual bool checkFmChainPut() const { return FALSE; } + /* vt 0X0DC */ virtual BOOL checkHorseElecDamage() const { return FALSE; } + /* vt 0X0E0 */ virtual f32 getBaseAnimeFrameRate() const { return 1.0f; } + /* vt 0X0E4 */ virtual f32 getBaseAnimeFrame() const { return 0.0f; } + /* vt 0X0E8 */ virtual void setAnimeFrame(f32) {} + /* vt 0X0EC */ virtual BOOL checkWolfLock(fopAc_ac_c*) const { return FALSE; } + /* vt 0X0F0 */ virtual bool cancelWolfLock(fopAc_ac_c*) { return FALSE; } + /* vt 0X0F4 */ virtual s32 getAtnActorID() const { return fpcM_ERROR_PROCESS_ID_e; } + /* vt 0X0F8 */ virtual s32 getItemID() const { return fpcM_ERROR_PROCESS_ID_e; } + /* vt 0X0FC */ virtual u32 getGrabActorID() const { return fpcM_ERROR_PROCESS_ID_e; } + /* vt 0X100 */ virtual BOOL exchangeGrabActor(fopAc_ac_c*) { return FALSE; } + /* vt 0X104 */ virtual BOOL setForceGrab(fopAc_ac_c*, int, int) { return FALSE; } + /* vt 0X108 */ virtual void setForcePutPos(cXyz const&) {} + /* vt 0X10C */ virtual u32 checkPlayerNoDraw() { return FALSE; } + /* vt 0X110 */ virtual bool checkRopeTag() { return FALSE; } + /* vt 0X114 */ virtual void voiceStart(u32) {} + /* vt 0X118 */ virtual void seStartOnlyReverb(u32) {} + /* vt 0X11C */ virtual void seStartOnlyReverbLevel(u32) {} + /* vt 0X120 */ virtual void setOutPower(f32, short, int) {} + /* vt 0X124 */ virtual void setGrabCollisionOffset(f32, f32, cBgS_PolyInfo*) {} + /* vt 0X128 */ virtual void onMagneGrab(f32, f32) {} + /* vt 0X12C */ virtual void onFrollCrashFlg(u8, int) {} + /* vt 0X130 */ virtual MtxP getModelJointMtx(u16) { return NULL; } + /* vt 0X134 */ virtual MtxP getHeadMtx() { return NULL; } + /* vt 0X138 */ virtual bool setHookshotCarryOffset(fpc_ProcID, cXyz const*) { return FALSE; } + /* vt 0X13C */ virtual BOOL checkCutJumpCancelTurn() const { return FALSE; } + /* vt 0X140 */ virtual bool checkIronBallReturn() const { return FALSE; } + /* vt 0X144 */ virtual bool checkIronBallGroundStop() const { return FALSE; } + /* vt 0X148 */ virtual BOOL checkSingleBoarBattleSecondBowReady() const { return FALSE; } + /* vt 0X14C */ virtual bool checkPointSubWindowMode() const { return FALSE; } + /* vt 0X150 */ virtual void setClothesChange(int) {} + /* vt 0X154 */ virtual void setPlayerPosAndAngle(cXyz const*, short, int) {} + /* vt 0X158 */ virtual void setPlayerPosAndAngle(cXyz const*, csXyz const*) {} + /* vt 0X15C */ virtual void setPlayerPosAndAngle(f32 (*)[4]) {} + /* vt 0X160 */ virtual bool setThrowDamage(short, f32, f32, int, int, int) { return FALSE; } + /* vt 0X164 */ virtual bool checkSetNpcTks(cXyz*, int, int) { return FALSE; } + /* vt 0X168 */ virtual int setRollJump(f32, f32, short) { return FALSE; } + /* vt 0X16C */ virtual void playerStartCollisionSE(u32, u32) {} + /* vt 0X170 */ virtual void changeTextureAnime(u16, u16, int) {} + /* vt 0X174 */ virtual void cancelChangeTextureAnime() {} + /* vt 0X178 */ virtual void cancelDungeonWarpReadyNeck() {} + /* vt 0X17C */ virtual void onSceneChangeArea(u8, u8, fopAc_ac_c*) {} + /* vt 0X180 */ virtual void onSceneChangeAreaJump(u8, u8, fopAc_ac_c*) {} + /* vt 0X184 */ virtual void onSceneChangeDead(u8, int) {} + /* vt 0X188 */ virtual u32 checkHorseRide() const { return false; } + /* vt 0X18C */ virtual u32 checkBoarRide() const { return 0; } + /* vt 0X190 */ virtual u32 checkCanoeRide() const { return 0; } + /* vt 0X194 */ virtual u32 checkBoardRide() const { return 0; } + /* vt 0X198 */ virtual u32 checkSpinnerRide() const { return 0; } + /* vt 0X19C */ virtual daSpinner_c* getSpinnerActor() { return NULL; } + /* vt 0X1A0 */ virtual BOOL checkHorseRideNotReady() const { return FALSE; } + /* vt 0X1A4 */ virtual bool checkArrowChargeEnd() const { return FALSE; } + /* vt 0X1A8 */ virtual f32 getSearchBallScale() const { return 0.0f; } + /* vt 0X1AC */ virtual int checkFastShotTime() { return FALSE; } + /* vt 0X1B0 */ virtual bool checkNoEquipItem() const { return TRUE; } + /* vt 0X1B4 */ virtual bool checkFireMaterial() const { return FALSE; } + /* vt 0X1B8 */ virtual bool checkKandelaarSwing(int) const { return FALSE; } + /* vt 0X1BC */ virtual s16 getBoardCutTurnOffsetAngleY() const { return 0; } + /* vt 0X1C0 */ virtual cXyz* getMagneHitPos() { return &mSwordTopPos; } + /* vt 0X1C4 */ virtual cXyz* getMagneBootsTopVec() { return ¤t.pos; } + /* vt 0X1C8 */ virtual cXyz* getKandelaarFlamePos() { return NULL; } + /* vt 0X1CC */ virtual bool checkUseKandelaar(int) { return FALSE; } + /* vt 0X1D0 */ virtual void setDkCaught(fopAc_ac_c*) {} + /* vt 0X1D4 */ virtual void onPressedDamage(cXyz const&, short) {} + /* vt 0X1D8 */ virtual bool checkPriActorOwn(fopAc_ac_c const*) const { return FALSE; } + /* vt 0X1DC */ virtual bool onWolfEnemyBiteAll(fopAc_ac_c*, daPy_FLG2) { return FALSE; } + /* vt 0X1E0 */ virtual bool checkWolfEnemyBiteAllOwn(fopAc_ac_c const*) const { return FALSE; } + /* vt 0X1E4 */ virtual void setWolfEnemyHangBiteAngle(short) {} + /* vt 0X1E8 */ virtual void setKandelaarMtx(f32 (*)[4], int, int) {} + /* vt 0X1EC */ virtual bool getStickAngleFromPlayerShape(short*) const { return FALSE; } + /* vt 0X1F0 */ virtual bool checkSpinnerPathMove() { return FALSE; } + /* vt 0X1F4 */ virtual bool checkSpinnerTriggerAttack() { return FALSE; } + /* vt 0X1F8 */ virtual void onSpinnerPathForceRemove() {} + /* vt 0X1FC */ virtual int getIronBallBgHit() const { return FALSE; } + /* vt 0X200 */ virtual cXyz* getIronBallCenterPos() { return NULL; } + /* vt 0X204 */ virtual bool checkCanoeFishingGetLeft() const { return FALSE; } + /* vt 0X208 */ virtual bool checkCanoeFishingGetRight() const { return FALSE; } + /* vt 0X20C */ virtual u8 checkBeeChildDrink() const { return FALSE; } + /* vt 0X210 */ virtual void skipPortalObjWarp() {} + /* vt 0X214 */ virtual BOOL checkTreasureRupeeReturn(int) const { return FALSE; } + /* vt 0X218 */ virtual void setSumouReady(fopAc_ac_c*) {} + /* vt 0X21C */ virtual bool checkAcceptDungeonWarpAlink(int) { return FALSE; } + /* vt 0X220 */ virtual s16 getSumouCounter() const { return 0; } + /* vt 0X224 */ virtual s16 checkSumouWithstand() const { return 0; } + /* vt 0X228 */ virtual void cancelGoronThrowEvent() {} + /* vt 0X22C */ virtual void setSumouGraspCancelCount(int) {} + /* vt 0X230 */ virtual void setSumouPushBackDirection(short) {} + /* vt 0X234 */ virtual void setSumouLoseHeadUp() {} + /* vt 0X238 */ virtual s16 getGiantPuzzleAimAngle() const { return shape_angle.y; } + /* vt 0X23C */ virtual void setGoronSideMove(fopAc_ac_c*) {} + /* vt 0X240 */ virtual void setCargoCarry(fopAc_ac_c*) {} + /* vt 0X244 */ virtual bool getDpdFarFlg() const { return 0; } + /* vt 0X248 */ virtual cXyz* getHookshotTopPos() { return NULL; } + /* vt 0X24C */ virtual bool checkHookshotReturnMode() const { return FALSE; } + /* vt 0X250 */ virtual bool checkHookshotShootReturnMode() const { return FALSE; } + /* vt 0X254 */ virtual bool checkOctaIealHang() const { return FALSE; } + /* vt 0X258 */ virtual void cancelOctaIealHang() {} + /* vt 0X25C */ virtual void cancelDragonHangBackJump() {} + /* vt 0X260 */ virtual void setOctaIealWildHang() {} + /* vt 0X264 */ virtual bool checkDragonHangRide() const { return FALSE; } + /* vt 0X268 */ virtual void changeDragonActor(fopAc_ac_c*) {} + /* vt 0X26C */ virtual u8 getClothesChangeWaitTimer() const { return 0; } + /* vt 0X270 */ virtual u8 getShieldChangeWaitTimer() const { return 0; } + /* vt 0X274 */ virtual u8 getSwordChangeWaitTimer() const { return 0; } + /* vt 0X278 */ virtual BOOL checkMetamorphose() const { return FALSE; } + /* vt 0X27C */ virtual BOOL checkWolfDownAttackPullOut() const { return FALSE; } + /* vt 0X280 */ virtual BOOL checkBootsOrArmorHeavy() const { return FALSE; } + /* vt 0X284 */ virtual s32 getBottleOpenAppearItem() const { return fpcM_ERROR_PROCESS_ID_e; } + /* vt 0X288 */ virtual bool checkItemSwordEquip() const { return FALSE; } + /* vt 0X28C */ virtual f32 getSinkShapeOffset() const { return 0.0f; } + /* vt 0X290 */ virtual BOOL checkSinkDead() const { return FALSE; } + /* vt 0X294 */ virtual BOOL checkHorseStart() { return FALSE; } + /* vt 0X298 */ virtual Z2WolfHowlMgr* getWolfHowlMgrP() { return NULL; } + /* vt 0X29C */ virtual BOOL checkWolfHowlSuccessAnime() const { return FALSE; } + /* vt 0X2A0 */ virtual BOOL checkCopyRodTopUse() { return FALSE; } + /* vt 0X2A4 */ virtual bool checkCopyRodEquip() const { return FALSE; } + /* vt 0X2A8 */ virtual BOOL checkCutJumpMode() const { return FALSE; } f32 getSpeedF() const { return speedF; } @@ -1102,6 +1102,8 @@ public: static bool checkPeepEndSceneChange() { return getLastSceneMode() == 7; } + static bool checkWolfCargoCarrySceneChange() { return getLastSceneMode() == 10; } + static int getLastSceneDamage() { return (dComIfGs_getLastSceneMode() >> 4) & 0x7F; } static u8 getLastSceneSwordAtUpTime() { return (dComIfGs_getLastSceneMode() >> 11) & 0xFF; } diff --git a/include/d/actor/d_a_tag_TWgate.h b/include/d/actor/d_a_tag_TWgate.h index c28a50cb8b9..7057c4d6991 100644 --- a/include/d/actor/d_a_tag_TWgate.h +++ b/include/d/actor/d_a_tag_TWgate.h @@ -3,7 +3,7 @@ #include "d/d_msg_flow.h" #include "f_op/f_op_actor_mng.h" -#include "SSystem\SComponent\c_phase.h" +#include "SSystem/SComponent/c_phase.h" class daTagTWGate_c; typedef void (daTagTWGate_c::*actionFunc)(); diff --git a/include/d/actor/d_a_tag_poFire.h b/include/d/actor/d_a_tag_poFire.h index d198e1c8768..ae3c6ed3a18 100644 --- a/include/d/actor/d_a_tag_poFire.h +++ b/include/d/actor/d_a_tag_poFire.h @@ -12,6 +12,8 @@ public: /* 80D5DC20 */ int Draw(); /* 80D5DC28 */ int Delete(); + void setFireFlag(u8 flag) { field_0x569 = flag; } + /* 0x568 */ u8 field_0x568; /* 0x569 */ u8 field_0x569; /* 0x56A */ u16 field_0x56a; diff --git a/include/d/d_bomb.h b/include/d/d_bomb.h index 2c5ed11d568..6312c3c159c 100644 --- a/include/d/d_bomb.h +++ b/include/d/d_bomb.h @@ -83,6 +83,11 @@ public: return (fopAc_ac_c*)fopAcM_fastCreate(PROC_NBOMB, 16, i_pos, i_roomNo, i_angle, NULL, -1, NULL, NULL); } + + static fopAc_ac_c* createBombCargoCarry(cXyz* i_pos, csXyz* i_angle, int i_roomNo) { + return (fopAc_ac_c*)fopAcM_fastCreate(PROC_NBOMB, 0x11, i_pos, i_roomNo, i_angle, NULL, -1, + NULL, NULL); + } }; #endif /* D_D_BOMB_H */ diff --git a/include/d/d_camera.h b/include/d/d_camera.h index d65b67451c3..648cf51e12b 100644 --- a/include/d/d_camera.h +++ b/include/d/d_camera.h @@ -1191,5 +1191,7 @@ public: dCamera_c* dCam_getBody(); camera_class* dCam_getCamera(); s16 dCam_getControledAngleY(camera_class* param_0); +s16 dCam_getAngleX(camera_class* i_cam); +s16 dCam_getAngleY(camera_class* i_cam); #endif /* D_D_CAMERA_H */ diff --git a/include/d/d_msg_object.h b/include/d/d_msg_object.h index 051516069db..ecfaaf966e1 100644 --- a/include/d/d_msg_object.h +++ b/include/d/d_msg_object.h @@ -453,7 +453,7 @@ inline void dMsgObject_setSmellType(u8 type) { } inline u8 dMsgObject_getSelectCursorPos() { - return dMsgObject_c::getSelectCursorPos(); + return dMsgObject_getMsgObjectClass()->getSelectCursorPos(); } inline void dMsgObject_setTalkPartner(fopAc_ac_c* actor) { diff --git a/include/f_op/f_op_actor.h b/include/f_op/f_op_actor.h index 92490d44f06..c31a1e28e79 100644 --- a/include/f_op/f_op_actor.h +++ b/include/f_op/f_op_actor.h @@ -263,7 +263,7 @@ public: bool checkHeadLockFlg() const { return mFlags & 0x80; } bool checkWolfBiteDamage() const { return mFlags & 0x40; } bool checkWolfDownPullFlg() const { return mFlags & 0x10; } - bool checkDownFlg() const { return mFlags & 0x1; } + bool checkDownFlg() { return mFlags & 0x1; } bool checkCutDownHitFlg() const { return mFlags & 0x2; } bool checkWolfDownStartFlg() const { return mFlags & 0x4; } bool checkDeadFlg() const { return mFlags & 0x8; } diff --git a/src/d/actor/d_a_balloon_2D.cpp b/src/d/actor/d_a_balloon_2D.cpp index ef59090e294..98daf52a320 100644 --- a/src/d/actor/d_a_balloon_2D.cpp +++ b/src/d/actor/d_a_balloon_2D.cpp @@ -5,104 +5,16 @@ #include "d/actor/d_a_balloon_2D.h" #include "JSystem/J2DGraph/J2DGrafContext.h" -#include "JSystem/J2DGraph/J2DTextBox.h" #include "JSystem/J2DGraph/J2DScreen.h" +#include "JSystem/J2DGraph/J2DTextBox.h" #include "SSystem/SComponent/c_math.h" +#include "d/actor/d_a_player.h" #include "d/d_com_inf_game.h" -#include "d/d_pane_class.h" #include "d/d_meter2_info.h" #include "d/d_msg_object.h" +#include "d/d_pane_class.h" +#include "m_Do/m_Do_graphic.h" #include "m_Do/m_Do_lib.h" -#include "dol2asm.h" - - - -// -// Forward References: -// - -extern "C" void draw__Q213daBalloon2D_c6c_listFv(); -extern "C" static void daBalloon2D_createHeap__FP10fopAc_ac_c(); -extern "C" void createHeap__13daBalloon2D_cFv(); -extern "C" void create__13daBalloon2D_cFv(); -extern "C" void destroy__13daBalloon2D_cFv(); -extern "C" void draw__13daBalloon2D_cFv(); -extern "C" void execute__13daBalloon2D_cFv(); -extern "C" void drawMeter__13daBalloon2D_cFv(); -extern "C" void setComboCount__13daBalloon2D_cFUcUc(); -extern "C" void setScoreCount__13daBalloon2D_cFUl(); -extern "C" void addScoreCount__13daBalloon2D_cFP4cXyzUlUc(); -extern "C" void initiate__13daBalloon2D_cFv(); -extern "C" void update__13daBalloon2D_cFv(); -extern "C" void setComboNum__13daBalloon2D_cFUc(); -extern "C" void setBalloonSize__13daBalloon2D_cFUc(); -extern "C" void setScoreNum__13daBalloon2D_cFi(); -extern "C" void setAllAlpha__13daBalloon2D_cFv(); -extern "C" void setComboAlpha__13daBalloon2D_cFv(); -extern "C" void drawAddScore__13daBalloon2D_cFv(); -extern "C" void setHIO__13daBalloon2D_cFb(); -extern "C" static void daBalloon2D_create__FP13daBalloon2D_c(); -extern "C" void __dt__Q213daBalloon2D_c10CHeadScoreFv(); -extern "C" void __ct__Q213daBalloon2D_c10CHeadScoreFv(); -extern "C" static void daBalloon2D_destroy__FP13daBalloon2D_c(); -extern "C" static void daBalloon2D_execute__FP13daBalloon2D_c(); -extern "C" static void daBalloon2D_draw__FP13daBalloon2D_c(); -extern "C" void draw__12dDlst_base_cFv(); -extern "C" void __dt__17daBalloon2D_HIO_cFv(); -extern "C" void __dt__14mDoHIO_entry_cFv(); -extern "C" void __dt__Q213daBalloon2D_c6c_listFv(); -extern "C" void __dt__13daBalloon2D_cFv(); -extern "C" void __sinit_d_a_balloon_2D_cpp(); -extern "C" extern char const* const d_a_balloon_2D__stringBase0; -extern "C" u8 myclass__13daBalloon2D_c[4]; - -// -// External References: -// - -extern "C" void mDoExt_getMesgFont__Fv(); -extern "C" void mDoLib_project__FP3VecP3Vec(); -extern "C" void __ct__10fopAc_ac_cFv(); -extern "C" void __dt__10fopAc_ac_cFv(); -extern "C" void fopAcM_entrySolidHeap__FP10fopAc_ac_cPFP10fopAc_ac_c_iUl(); -extern "C" void dComIfG_resLoad__FP30request_of_phase_process_classPCc(); -extern "C" void dComIfG_resDelete__FP30request_of_phase_process_classPCc(); -extern "C" void getResInfo__14dRes_control_cFPCcP11dRes_info_ci(); -extern "C" void set__12dDlst_list_cFRPP12dDlst_base_cRPP12dDlst_base_cP12dDlst_base_c(); -extern "C" void getStringKanji__13dMeter2Info_cFUlPcP14JMSMesgEntry_c(); -extern "C" void dMeter2Info_getNumberTextureName__Fi(); -extern "C" void dMeter2Info_getPlusTextureName__Fv(); -extern "C" void getStatus__12dMsgObject_cFv(); -extern "C" void __ct__8CPaneMgrFP9J2DScreenUxUcP10JKRExpHeap(); -extern "C" void paneTrans__8CPaneMgrFff(); -extern "C" void dPaneClass_showNullPane__FP9J2DScreen(); -extern "C" void show__13CPaneMgrAlphaFv(); -extern "C" void hide__13CPaneMgrAlphaFv(); -extern "C" void setAlphaRate__13CPaneMgrAlphaFf(); -extern "C" void getAlphaRate__13CPaneMgrAlphaFv(); -extern "C" void cLib_addCalc2__FPffff(); -extern "C" void* __nw__FUl(); -extern "C" void __dl__FPv(); -extern "C" void __ct__9J2DScreenFv(); -extern "C" void setPriority__9J2DScreenFPCcUlP10JKRArchive(); -extern "C" void draw__9J2DScreenFffPC14J2DGrafContext(); -extern "C" void __ct__10J2DPictureFPC7ResTIMG(); -extern "C" void getStringPtr__10J2DTextBoxCFv(); -extern "C" void setString__10J2DTextBoxFsPCce(); -extern "C" void __destroy_arr(); -extern "C" void __construct_array(); -extern "C" void _savegpr_23(); -extern "C" void _savegpr_28(); -extern "C" void _savegpr_29(); -extern "C" void _restgpr_23(); -extern "C" void _restgpr_28(); -extern "C" void _restgpr_29(); -extern "C" u8 sincosTable___5JMath[65536]; -extern "C" void __register_global_object(); - -// -// Declarations: -// /* 806534CC-80653518 0000EC 004C+00 1/0 0/0 0/0 .text draw__Q213daBalloon2D_c6c_listFv */ void daBalloon2D_c::c_list::draw() { @@ -115,42 +27,6 @@ static int daBalloon2D_createHeap(fopAc_ac_c* i_this) { return static_cast(i_this)->createHeap(); } -/* ############################################################################################## */ -/* 806555AC-806555B0 000000 0004+00 5/5 0/0 0/0 .rodata @3896 */ -SECTION_RODATA static u8 const lit_3896[4] = { - 0x00, - 0x00, - 0x00, - 0x00, -}; -COMPILER_STRIP_GATE(0x806555AC, &lit_3896); - -/* 806555EC-806555EC 000040 0000+00 0/0 0/0 0/0 .rodata @stringBase0 */ -#pragma push -#pragma force_active on -SECTION_DEAD static char const* const stringBase_806555EC = "Balloon2D"; -SECTION_DEAD static char const* const stringBase_806555F6 = "zelda_balloon_game.blo"; -SECTION_DEAD static char const* const stringBase_8065560D = ""; -#pragma pop - -/* 80655610-806556D4 000000 00C4+00 1/1 0/0 0/0 .data - * aParam$localstatic3$__ct__17daBalloon2D_HIO_cFv */ -SECTION_DATA static u8 data_80655610[196] = { - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x3F, 0x80, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0xC1, 0x20, 0x00, 0x00, 0x3F, 0x4C, 0xCC, 0xCD, 0x00, 0x00, 0x00, 0x00, 0xC1, 0x50, 0x00, 0x00, - 0x3F, 0x8C, 0xCC, 0xCD, 0x3F, 0x66, 0x66, 0x66, 0x3F, 0x33, 0x33, 0x33, 0x00, 0x00, 0x00, 0x00, - 0x41, 0x90, 0x00, 0x00, 0x3F, 0x80, 0x00, 0x00, 0xC0, 0xD3, 0x33, 0x33, 0x40, 0xD3, 0x33, 0x33, - 0x3F, 0xA6, 0x66, 0x66, 0xBF, 0xA6, 0x66, 0x66, 0x41, 0x13, 0x33, 0x33, 0x3F, 0x80, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x40, 0xD3, 0x33, 0x33, 0x3F, 0x8C, 0xCC, 0xCD, 0x3F, 0x66, 0x66, 0x66, - 0x3F, 0x80, 0x00, 0x00, 0x40, 0x79, 0x99, 0x9A, 0xC1, 0x13, 0x33, 0x33, 0x3F, 0x59, 0x99, 0x9A, - 0x3F, 0x4C, 0xCC, 0xCD, 0x40, 0xD3, 0x33, 0x33, 0x3F, 0xA6, 0x66, 0x66, 0x3F, 0x40, 0x00, 0x00, - 0x3F, 0x66, 0x66, 0x66, 0x40, 0x79, 0x99, 0x9A, 0x00, 0x00, 0x00, 0x00, 0x3F, 0x59, 0x99, 0x9A, - 0x3F, 0x66, 0x66, 0x66, 0x40, 0x79, 0x99, 0x9A, 0x00, 0x00, 0x00, 0x00, 0x3F, 0x73, 0x33, 0x33, - 0x3F, 0x66, 0x66, 0x66, 0x41, 0xB0, 0x00, 0x00, 0xC1, 0x88, 0x00, 0x00, 0x3F, 0x80, 0x00, 0x00, - 0x41, 0xA0, 0x00, 0x00, -}; - /* 806556D4-806556D8 -00001 0004+00 3/3 0/0 0/0 .data l_arcName */ static char* l_arcName = "Balloon2D"; @@ -228,11 +104,6 @@ int daBalloon2D_c::createHeap() { return 1; } - -/* ############################################################################################## */ -/* 80655770-8065577C 000008 000C+00 1/1 0/0 0/0 .bss @3779 */ -static u8 lit_3779[12]; - /* 8065577C-80655844 000014 00C8+00 3/3 0/0 0/0 .bss l_HOSTIO */ daBalloon2D_HIO_c l_HOSTIO; @@ -398,35 +269,6 @@ void daBalloon2D_c::setScoreNum(int scoreNum) { field_0x5a8[4]->changeTexture(resTimg, 0); } -/* ############################################################################################## */ -/* 806555B0-806555B4 000004 0004+00 0/3 0/0 0/0 .rodata @4064 */ -#pragma push -#pragma force_active on -SECTION_RODATA static f32 const lit_4064 = 1.0f; -COMPILER_STRIP_GATE(0x806555B0, &lit_4064); -#pragma pop - -/* 806555B4-806555B8 000008 0004+00 0/2 0/0 0/0 .rodata @4065 */ -#pragma push -#pragma force_active on -SECTION_RODATA static f32 const lit_4065 = 2.0f / 5.0f; -COMPILER_STRIP_GATE(0x806555B4, &lit_4065); -#pragma pop - -/* 806555B8-806555BC 00000C 0004+00 0/3 0/0 0/0 .rodata @4066 */ -#pragma push -#pragma force_active on -SECTION_RODATA static f32 const lit_4066 = 0.5f; -COMPILER_STRIP_GATE(0x806555B8, &lit_4066); -#pragma pop - -/* 806555BC-806555C0 000010 0004+00 0/2 0/0 0/0 .rodata @4067 */ -#pragma push -#pragma force_active on -SECTION_RODATA static f32 const lit_4067 = 1.0f / 10.0f; -COMPILER_STRIP_GATE(0x806555BC, &lit_4067); -#pragma pop - /* 80654440-8065464C 001060 020C+00 1/1 0/0 0/0 .text setAllAlpha__13daBalloon2D_cFv */ void daBalloon2D_c::setAllAlpha() { mAllAlpha = field_0x578->getAlphaRate(); @@ -437,11 +279,11 @@ void daBalloon2D_c::setAllAlpha() { mAllAlpha = 1.0f; } field_0x578->setAlphaRate(mAllAlpha); - field_0x580->setAlphaRate(l_HOSTIO.field_0x3c * mAllAlpha); - field_0x594->setAlphaRate(l_HOSTIO.field_0x84 * mAllAlpha); - field_0x598->setAlphaRate(l_HOSTIO.field_0x94 * mAllAlpha); - field_0x59c->setAlphaRate(l_HOSTIO.field_0xa4 * mAllAlpha); - field_0x5a0->setAlphaRate(l_HOSTIO.field_0xb4 * mAllAlpha); + field_0x580->setAlphaRate(l_HOSTIO.m.m5DNumberAlpha * mAllAlpha); + field_0x594->setAlphaRate(l_HOSTIO.m.m2DNumberComboAlpha * mAllAlpha); + field_0x598->setAlphaRate(l_HOSTIO.m.mBalloonLargeAlpha * mAllAlpha); + field_0x59c->setAlphaRate(l_HOSTIO.m.mBalloonMedAlpha * mAllAlpha); + field_0x5a0->setAlphaRate(l_HOSTIO.m.mBalloonSmallAlpha * mAllAlpha); } } else if (mAllAlpha != 1.0f) { cLib_addCalc2(&mAllAlpha, 0.0f, 0.4f, 0.5f); @@ -449,11 +291,11 @@ void daBalloon2D_c::setAllAlpha() { mAllAlpha = 0.0f; } field_0x578->setAlphaRate(mAllAlpha); - field_0x580->setAlphaRate(l_HOSTIO.field_0x3c * mAllAlpha); - field_0x594->setAlphaRate(l_HOSTIO.field_0x84 * mAllAlpha); - field_0x598->setAlphaRate(l_HOSTIO.field_0x94 * mAllAlpha); - field_0x59c->setAlphaRate(l_HOSTIO.field_0xa4 * mAllAlpha); - field_0x5a0->setAlphaRate(l_HOSTIO.field_0xb4 * mAllAlpha); + field_0x580->setAlphaRate(l_HOSTIO.m.m5DNumberAlpha * mAllAlpha); + field_0x594->setAlphaRate(l_HOSTIO.m.m2DNumberComboAlpha * mAllAlpha); + field_0x598->setAlphaRate(l_HOSTIO.m.mBalloonLargeAlpha * mAllAlpha); + field_0x59c->setAlphaRate(l_HOSTIO.m.mBalloonMedAlpha * mAllAlpha); + field_0x5a0->setAlphaRate(l_HOSTIO.m.mBalloonSmallAlpha * mAllAlpha); } } @@ -475,91 +317,20 @@ void daBalloon2D_c::setComboAlpha() { } } - -/* ############################################################################################## */ -/* 806555C0-806555C4 000014 0004+00 0/1 0/0 0/0 .rodata @4165 */ -#pragma push -#pragma force_active on -SECTION_RODATA static f32 const lit_4165 = 30.0f; -COMPILER_STRIP_GATE(0x806555C0, &lit_4165); -#pragma pop - -/* 806555C4-806555C8 000018 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 / 10.0f; -COMPILER_STRIP_GATE(0x806555C4, &lit_4166); -#pragma pop - -/* 806555C8-806555CC 00001C 0004+00 0/1 0/0 0/0 .rodata @4167 */ -#pragma push -#pragma force_active on -SECTION_RODATA static f32 const lit_4167 = 10.0f; -COMPILER_STRIP_GATE(0x806555C8, &lit_4167); -#pragma pop - -/* 806555CC-806555D0 000020 0004+00 0/1 0/0 0/0 .rodata @4168 */ -#pragma push -#pragma force_active on -SECTION_RODATA static f32 const lit_4168 = 255.0f; -COMPILER_STRIP_GATE(0x806555CC, &lit_4168); -#pragma pop - -/* 806555D0-806555D4 000024 0004+00 0/1 0/0 0/0 .rodata @4169 */ -#pragma push -#pragma force_active on -SECTION_RODATA static f32 const lit_4169 = 6.0f; -COMPILER_STRIP_GATE(0x806555D0, &lit_4169); -#pragma pop - -/* 806555D4-806555D8 000028 0004+00 0/1 0/0 0/0 .rodata @4170 */ -#pragma push -#pragma force_active on -SECTION_RODATA static f32 const lit_4170 = 2.0f; -COMPILER_STRIP_GATE(0x806555D4, &lit_4170); -#pragma pop - -/* 806555D8-806555DC 00002C 0004+00 0/1 0/0 0/0 .rodata @4171 */ -#pragma push -#pragma force_active on -SECTION_RODATA static f32 const lit_4171 = 3.0f; -COMPILER_STRIP_GATE(0x806555D8, &lit_4171); -#pragma pop - -/* 806555DC-806555E0 000030 0004+00 0/1 0/0 0/0 .rodata @4172 */ -#pragma push -#pragma force_active on -SECTION_RODATA static f32 const lit_4172 = 4.0f; -COMPILER_STRIP_GATE(0x806555DC, &lit_4172); -#pragma pop - -/* 806555E0-806555E4 000034 0004+00 0/1 0/0 0/0 .rodata @4173 */ -#pragma push -#pragma force_active on -SECTION_RODATA static f32 const lit_4173 = 5.0f; -COMPILER_STRIP_GATE(0x806555E0, &lit_4173); -#pragma pop - -/* 806555E4-806555EC 000038 0008+00 0/1 0/0 0/0 .rodata @4175 */ -#pragma push -#pragma force_active on -SECTION_RODATA static u8 const lit_4175[8] = { - 0x43, 0x30, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, -}; -COMPILER_STRIP_GATE(0x806555E4, &lit_4175); -#pragma pop - /* 80654730-80654E8C 001350 075C+00 1/1 0/0 0/0 .text drawAddScore__13daBalloon2D_cFv */ // NONMATCHING - field_0x0.x, regalloc void daBalloon2D_c::drawAddScore() { - for (int i = 19; i >= 0; i--) { + for (s32 i = 19; i >= 0; i--) { if (field_0x5f8[i].field_0xe != 0) { field_0x5f8[i].field_0xe--; - int uVar7 = field_0x5f8[i].field_0xc; + s32 score3; + s32 score2; + s32 score = field_0x5f8[i].field_0xc; + s16 temp0 = (field_0x5f8[i].field_0xe % 60) * 1024; u8 local_88 = 0xff; f32 dVar11 = 30.0f; f32 dVar9 = 30.0f; - field_0x5f8[i].field_0x0.x += 0.3f * cM_ssin((field_0x5f8[i].field_0xe % 60) * 1024); + field_0x5f8[i].field_0x0.x += cM_ssin(temp0) * 0.3f; field_0x5f8[i].field_0x0.y -= 1.0f; if (field_0x5f8[i].field_0xe < 10) { f32 fVar5 = field_0x5f8[i].field_0xe / 10.0f; @@ -567,67 +338,67 @@ void daBalloon2D_c::drawAddScore() { dVar11 *= fVar5; dVar9 *= fVar5; } - for (int j = 0; j < 10; j++) { + for (s32 j = 0; j < 10; j++) { field_0x5c4[j]->setAlpha(local_88); } field_0x5ec->setAlpha(local_88); f32 dVar8 = (field_0x5f8[i].field_0x0.y - (dVar9 / 2.0f)); - int digit; - if (uVar7 >= 10000) { + s32 digit; + if (score >= 10000) { f32 dVar10 = (field_0x5f8[i].field_0x0.x - (dVar11 / 2.0f) * 6.0f); field_0x5ec->draw(dVar10, dVar8, dVar11, dVar9, false, false, false); - digit = uVar7 / 10000; - uVar7 = uVar7 % 10000; + digit = score / 10000; + score = score % 10000; field_0x5c4[digit]->draw(dVar10 + dVar11, dVar8, dVar11, dVar9, false, false, false); - digit = uVar7 / 1000; - uVar7 %= 1000; + digit = score / 1000; + score %= 1000; field_0x5c4[digit]->draw(dVar10 + dVar11 * 2.0f, dVar8, dVar11, dVar9, false, false, false); - digit = uVar7 / 100; - uVar7 %= 100; + digit = score / 100; + score %= 100; field_0x5c4[digit]->draw(dVar10 + dVar11 * 3.0f, dVar8, dVar11, dVar9, false, false, false); - digit = uVar7 / 10; - uVar7 %= 10; + digit = score / 10; + score %= 10; field_0x5c4[digit]->draw(dVar10 + dVar11 * 4.0f, dVar8, dVar11, dVar9, false, false, false); - field_0x5c4[uVar7]->draw(dVar10 + dVar11 * 5.0f, dVar8, dVar11, dVar9, false, false, false); - } else if (uVar7 >= 1000) { + field_0x5c4[score]->draw(dVar10 + dVar11 * 5.0f, dVar8, dVar11, dVar9, false, false, false); + } else if (score >= 1000) { f32 dVar10 = (field_0x5f8[i].field_0x0.x - (dVar11 / 2.0f) * 5.0f); field_0x5ec->draw(dVar10, dVar8, dVar11, dVar9, false, false, false); - digit = uVar7 / 1000; - uVar7 %= 1000; + digit = score / 1000; + score2 = score % 1000; field_0x5c4[digit]->draw(dVar10 + dVar11, dVar8, dVar11, dVar9, false, false, false); - digit = uVar7 / 100; - uVar7 %= 100; + digit = score2 / 100; + score2 %= 100; field_0x5c4[digit]->draw(dVar10 + dVar11 * 2.0f, dVar8, dVar11, dVar9, false, false, false); - digit = uVar7 / 10; - uVar7 %= 10; + digit = score2 / 10; + score2 %= 10; field_0x5c4[digit]->draw(dVar10 + dVar11 * 3.0f, dVar8, dVar11, dVar9, false, false, false); - field_0x5c4[uVar7]->draw(dVar10 + dVar11 * 4.0f, dVar8, dVar11, dVar9, false, false, false); - } else if (uVar7 >= 100) { + field_0x5c4[score2]->draw(dVar10 + dVar11 * 4.0f, dVar8, dVar11, dVar9, false, false, false); + } else if (score >= 100) { f32 dVar10 = (field_0x5f8[i].field_0x0.x - (dVar11 / 2.0f) * 4.0f); field_0x5ec->draw(dVar10, dVar8, dVar11, dVar9, false, false, false); - digit = uVar7 / 100; - uVar7 %= 100; + digit = score / 100; + score3 = score % 100; field_0x5c4[digit]->draw(dVar10 + dVar11, dVar8, dVar11, dVar9, false, false, false); - digit = uVar7 / 10; - uVar7 %= 10; + digit = score3 / 10; + score3 %= 10; field_0x5c4[digit]->draw(dVar10 + dVar11 * 2.0f, dVar8, dVar11, dVar9, false, false, false); - field_0x5c4[uVar7]->draw(dVar10 + dVar11 * 3.0f, dVar8, dVar11, dVar9, false, false, false); - } else if (uVar7 >= 10) { + field_0x5c4[score3]->draw(dVar10 + dVar11 * 3.0f, dVar8, dVar11, dVar9, false, false, false); + } else if (score >= 10) { f32 dVar10 = (field_0x5f8[i].field_0x0.x - (dVar11 / 2.0f) * 3.0f); field_0x5ec->draw(dVar10, dVar8, dVar11, dVar9, false, false, false); - digit = uVar7 / 10; - uVar7 %= 10; + digit = score / 10; + score3 = score % 10; field_0x5c4[digit]->draw(dVar10 + dVar11, dVar8, dVar11, dVar9, false, false, false); - field_0x5c4[uVar7]->draw(dVar10 + dVar11 * 2.0f, dVar8, dVar11, dVar9, false, false, false); + field_0x5c4[score3]->draw(dVar10 + dVar11 * 2.0f, dVar8, dVar11, dVar9, false, false, false); } else { f32 dVar10 = (field_0x5f8[i].field_0x0.x - (dVar11 / 2.0f) * 2.0f); field_0x5ec->draw(dVar10, dVar8, dVar11, dVar9, false, false, false); - field_0x5c4[uVar7]->draw(dVar10 + dVar11, dVar8, dVar11, dVar9, false, false, false); + field_0x5c4[score]->draw(dVar10 + dVar11, dVar8, dVar11, dVar9, false, false, false); } } } @@ -635,87 +406,120 @@ void daBalloon2D_c::drawAddScore() { /* 80654E8C-80655250 001AAC 03C4+00 2/2 0/0 0/0 .text setHIO__13daBalloon2D_cFb */ void daBalloon2D_c::setHIO(bool param_1) { - if ((l_HOSTIO.field_0x04 != 0) || param_1) { - field_0x57c->paneTrans(l_HOSTIO.field_0x20, l_HOSTIO.field_0x24); - field_0x57c->scale(l_HOSTIO.field_0x28, l_HOSTIO.field_0x28); - field_0x580->paneTrans(l_HOSTIO.field_0x2c, l_HOSTIO.field_0x30); - field_0x580->scale(l_HOSTIO.field_0x34, l_HOSTIO.field_0x38); - field_0x580->setAlphaRate(l_HOSTIO.field_0x3c * mAllAlpha); - field_0x584->paneTrans(l_HOSTIO.field_0x40, l_HOSTIO.field_0x44); - field_0x584->scale(l_HOSTIO.field_0x48, l_HOSTIO.field_0x48); - field_0x588->paneTrans(l_HOSTIO.field_0x4c, l_HOSTIO.field_0x50); - field_0x588->scale(l_HOSTIO.field_0x54, l_HOSTIO.field_0x54); - field_0x58c->paneTrans(l_HOSTIO.field_0x58, l_HOSTIO.field_0x5c); - field_0x58c->scale(l_HOSTIO.field_0x60, l_HOSTIO.field_0x60); - field_0x590->paneTrans(l_HOSTIO.field_0x64, l_HOSTIO.field_0x68); - field_0x590->scale(l_HOSTIO.field_0x6c, l_HOSTIO.field_0x70); - field_0x594->paneTrans(l_HOSTIO.field_0x78, l_HOSTIO.field_0x7c); - field_0x594->scale(l_HOSTIO.field_0x80, l_HOSTIO.field_0x80); - field_0x594->setAlphaRate(l_HOSTIO.field_0x84 * mAllAlpha); - field_0x598->paneTrans(l_HOSTIO.field_0x88, l_HOSTIO.field_0x8c); - field_0x598->scale(l_HOSTIO.field_0x90, l_HOSTIO.field_0x90); - field_0x598->setAlphaRate(l_HOSTIO.field_0x94 * mAllAlpha); - field_0x59c->paneTrans(l_HOSTIO.field_0x98, l_HOSTIO.field_0x9c); - field_0x59c->scale(l_HOSTIO.field_0xa0, l_HOSTIO.field_0xa0); - field_0x59c->setAlphaRate(l_HOSTIO.field_0xa4 * mAllAlpha); - field_0x5a0->paneTrans(l_HOSTIO.field_0xa8, l_HOSTIO.field_0xac); - field_0x5a0->scale(l_HOSTIO.field_0xb0, l_HOSTIO.field_0xb0); - field_0x5a0->setAlphaRate(l_HOSTIO.field_0xb4 * mAllAlpha); - field_0x5a4->paneTrans(l_HOSTIO.field_0xb8, l_HOSTIO.field_0xbc); - field_0x5a4->scale(l_HOSTIO.field_0xc0, l_HOSTIO.field_0xc0); + if ((l_HOSTIO.m.mAdjustmentToggle != 0) || param_1) { +#if DEBUG + if (l_HOSTIO.m.mOverheadScoreToggle != 0) { + daPy_py_c* player = daPy_getPlayerActorClass(); + cXyz acStack_28; + acStack_28.set(player->getHeadTopPos()); + addScoreCount(&acStack_28, l_HOSTIO.m.mOverheadScore, 0); + l_HOSTIO.resetAddScoreSetFlag(); + } +#endif + + field_0x57c->paneTrans(l_HOSTIO.m.mScorePosX, l_HOSTIO.m.mScorePosY); + field_0x57c->scale(l_HOSTIO.m.mScoreSize, l_HOSTIO.m.mScoreSize); + field_0x580->paneTrans(l_HOSTIO.m.m5DNumberPosX, l_HOSTIO.m.m5DNumberPosY); + field_0x580->scale(l_HOSTIO.m.m5DNumberSizeX, l_HOSTIO.m.m5DNumberSizeY); + field_0x580->setAlphaRate(l_HOSTIO.m.m5DNumberAlpha * mAllAlpha); + field_0x584->paneTrans(l_HOSTIO.m.m5DNumber2PosX, l_HOSTIO.m.m5DNumber2PosY); + field_0x584->scale(l_HOSTIO.m.m5DNumber2Size, l_HOSTIO.m.m5DNumber2Size); + field_0x588->paneTrans(l_HOSTIO.m.mUnkPosX, l_HOSTIO.m.mUnkPosY); + field_0x588->scale(l_HOSTIO.m.mUnkSize, l_HOSTIO.m.mUnkSize); + field_0x58c->paneTrans(l_HOSTIO.m.mComboPosX, l_HOSTIO.m.mComboPosY); + field_0x58c->scale(l_HOSTIO.m.mComboSize, l_HOSTIO.m.mComboSize); + field_0x590->paneTrans(l_HOSTIO.m.m2DNumberPosX, l_HOSTIO.m.m2DNumberPosY); + field_0x590->scale(l_HOSTIO.m.m2DNumberSizeX, l_HOSTIO.m.m2DNumberSizeY); + field_0x594->paneTrans(l_HOSTIO.m.m2DNumberComboPosX, l_HOSTIO.m.m2DNumberComboPosY); + field_0x594->scale(l_HOSTIO.m.m2DNumberComboSize, l_HOSTIO.m.m2DNumberComboSize); + field_0x594->setAlphaRate(l_HOSTIO.m.m2DNumberComboAlpha * mAllAlpha); + field_0x598->paneTrans(l_HOSTIO.m.mBalloonLargePosX, l_HOSTIO.m.mBalloonLargePosY); + field_0x598->scale(l_HOSTIO.m.mBalloonLargeSize, l_HOSTIO.m.mBalloonLargeSize); + field_0x598->setAlphaRate(l_HOSTIO.m.mBalloonLargeAlpha * mAllAlpha); + field_0x59c->paneTrans(l_HOSTIO.m.mBalloonMedPosX, l_HOSTIO.m.mBalloonMedPosY); + field_0x59c->scale(l_HOSTIO.m.mBalloonMedSize, l_HOSTIO.m.mBalloonMedSize); + field_0x59c->setAlphaRate(l_HOSTIO.m.mBalloonMedAlpha * mAllAlpha); + field_0x5a0->paneTrans(l_HOSTIO.m.mBalloonSmallPosX, l_HOSTIO.m.mBalloonSmallPosY); + field_0x5a0->scale(l_HOSTIO.m.mBalloonSmallSize, l_HOSTIO.m.mBalloonSmallSize); + field_0x5a0->setAlphaRate(l_HOSTIO.m.mBalloonSmallAlpha * mAllAlpha); +#if DEBUG + if (mDoGph_gInf_c::isWide()) { + field_0x5a4->paneTrans(l_HOSTIO.m.m2DNumberCombo2PosX, l_HOSTIO.m.m2DNumberCombo2PosY); + } else { + field_0x5a4->paneTrans(l_HOSTIO.m.m2DNumberCombo2PosX43, l_HOSTIO.m.m2DNumberCombo2PosY); + } +#else + field_0x5a4->paneTrans(l_HOSTIO.m.m2DNumberCombo2PosX, l_HOSTIO.m.m2DNumberCombo2PosY); +#endif + field_0x5a4->scale(l_HOSTIO.m.m2DNumberCombo2Size, l_HOSTIO.m.m2DNumberCombo2Size); } } +daBalloon2D_HIO_c::daBalloon2D_HIO_c() { + static param aParam = { + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0.0f, + 1.0f, + 0.0f, + -10.0f, + 0.8f, + 0.0f, + -13.0f, + 1.1f, + 0.9f, + 0.7f, + 0.0f, + 18.0f, + 1.0f, + -6.6f, + 6.6f, + 1.3f, + -1.3f, + 9.2f, + 1.0f, + 0.0f, + 6.6f, + 1.1f, + 0.9f, + 1.0f, + 3.9f, + -9.2f, + 0.85f, + 0.8f, + 6.6f, + 1.3f, + 0.75f, + 0.9f, + 3.9f, + 0.0f, + 0.85f, + 0.9f, + 3.9f, + 0.0f, + 0.95f, + 0.9f, + 22.0f, + -17.0f, + 1.0f, + 20.0f, + }; + memcpy(&m, &aParam, sizeof(aParam)); +} -/* ############################################################################################## */ -/* 806556D8-806556F8 -00001 0020+00 1/0 0/0 0/0 .data daBalloon2D_METHODS */ -static actor_method_class daBalloon2D_METHODS = { - (process_method_func)daBalloon2D_create__FP13daBalloon2D_c, - (process_method_func)daBalloon2D_destroy__FP13daBalloon2D_c, - (process_method_func)daBalloon2D_execute__FP13daBalloon2D_c, - 0, - (process_method_func)daBalloon2D_draw__FP13daBalloon2D_c, -}; - -/* 806556F8-80655728 -00001 0030+00 0/0 0/0 1/0 .data g_profile_BALLOON2D */ -extern actor_process_profile_definition g_profile_BALLOON2D = { - fpcLy_CURRENT_e, // mLayerID - 3, // mListID - fpcPi_CURRENT_e, // mListPrio - PROC_BALLOON2D, // mProcName - &g_fpcLf_Method.base, // sub_method - sizeof(daBalloon2D_c), // mSize - 0, // mSizeOther - 0, // mParameters - &g_fopAc_Method.base, // sub_method - 765, // mPriority - &daBalloon2D_METHODS, // sub_method - 0x00040000, // mStatus - fopAc_ACTOR_e, // mActorType - fopAc_CULLBOX_0_e, // cullType -}; - -/* 80655728-80655734 000118 000C+00 1/1 0/0 0/0 .data __vt__12dDlst_base_c */ -SECTION_DATA extern void* __vt__12dDlst_base_c[3] = { - (void*)NULL /* RTTI */, - (void*)NULL, - (void*)draw__12dDlst_base_cFv, -}; - -/* 80655734-80655740 000124 000C+00 2/2 0/0 0/0 .data __vt__13daBalloon2D_c */ -SECTION_DATA extern void* __vt__13daBalloon2D_c[3] = { - (void*)NULL /* RTTI */, - (void*)NULL, - (void*)__dt__13daBalloon2D_cFv, -}; - -/* 80655740-80655750 000130 0010+00 3/3 0/0 0/0 .data __vt__Q213daBalloon2D_c6c_list */ -SECTION_DATA extern void* __vt__Q213daBalloon2D_c6c_list[4] = { - (void*)NULL /* RTTI */, - (void*)NULL, - (void*)draw__Q213daBalloon2D_c6c_listFv, - (void*)__dt__Q213daBalloon2D_c6c_listFv, -}; +void daBalloon2D_HIO_c::resetAddScoreSetFlag() { + JORMContext* ctx = attachJORMContext(8); + ctx->startUpdateNode(this); + m.mOverheadScoreToggle = 0x0; + ctx->updateCheckBox(2, &m.mOverheadScoreToggle, 1, 0); + ctx->endUpdateNode(); + releaseJORMContext(ctx); +} /* 80655250-80655304 001E70 00B4+00 1/0 0/0 0/0 .text daBalloon2D_create__FP13daBalloon2D_c */ // NONMATCHING - vtable @@ -748,55 +552,162 @@ static int daBalloon2D_draw(daBalloon2D_c* i_this) { return i_this->draw(); } -/* 806553A4-806553A8 001FC4 0004+00 1/0 0/0 0/0 .text draw__12dDlst_base_cFv */ -void draw__12dDlst_base_cFv() { - /* empty function */ -} - -/* ############################################################################################## */ -/* 80655750-8065575C 000140 000C+00 2/2 0/0 0/0 .data __vt__17daBalloon2D_HIO_c */ -SECTION_DATA extern void* __vt__17daBalloon2D_HIO_c[3] = { - (void*)NULL /* RTTI */, - (void*)NULL, - (void*)__dt__17daBalloon2D_HIO_cFv, -}; - -/* 8065575C-80655768 00014C 000C+00 3/3 0/0 0/0 .data __vt__14mDoHIO_entry_c */ -SECTION_DATA extern void* __vt__14mDoHIO_entry_c[3] = { - (void*)NULL /* RTTI */, - (void*)NULL, - (void*)__dt__14mDoHIO_entry_cFv, -}; - /* 806553A8-80655404 001FC8 005C+00 2/1 0/0 0/0 .text __dt__17daBalloon2D_HIO_cFv */ daBalloon2D_HIO_c::~daBalloon2D_HIO_c() { // NONMATCHING } -/* 80655404-8065544C 002024 0048+00 1/0 0/0 0/0 .text __dt__14mDoHIO_entry_cFv */ -void __dt__14mDoHIO_entry_cFv() { -//asm mDoHIO_entry_c::~mDoHIO_entry_c() { - // NONMATCHING -} - -/* 8065544C-80655494 00206C 0048+00 1/0 0/0 0/0 .text __dt__Q213daBalloon2D_c6c_listFv */ -daBalloon2D_c::c_list::~c_list() { - // NONMATCHING +#if DEBUG +void daBalloon2D_HIO_c::genMessage(JORMContext* ctx) { + ctx->genCheckBox("調整ON", &m.mAdjustmentToggle, 1, 0, NULL, 0xffff, + 0xffff, 0x200, 0x18); + ctx->genSlider("スコア", &m.mScore, 0, 99999, 0, NULL, 0xffff, 0xffff, 0x200, + 0x18); + ctx->genSlider("コンボ数", &m.mComboCount, 0, 99, 0, NULL, 0xffff, 0xffff, + 0x200, 0x18); + ctx->startComboBox("風船のサイズ", &m.mBalloonSize, 0, NULL, 0xffff, 0xffff, 0x100, + 0x1a); + ctx->genComboBoxItem("大", 0); // large + ctx->genComboBoxItem("中", 1); // medium + ctx->genComboBoxItem("小", 2); // small + ctx->endComboBox(); + ctx->genCheckBox("頭上スコアON", &m.mOverheadScoreToggle, 1, 0, NULL, 0xffff, 0xffff, + 0x200, 0x18); + ctx->genSlider("頭上スコア", &m.mOverheadScore, 0, 99999, 0, NULL, 0xffff, 0xffff, + 0x200, 0x18); + ctx->genLabel("*****「SCORE」(score_tn)*****", 0, 0, NULL, 0xffff, 0xffff, 0x200, 0x18); + ctx->genSlider("位置X", &m.mScorePosX, -300.0, 300.0, 0, NULL, 0xffff, 0xffff, + 0x200, 0x18); + ctx->genSlider("位置Y", &m.mScorePosY, -300.0, 300.0, 0, NULL, 0xffff, 0xffff, + 0x200, 0x18); + ctx->genSlider("サイズ", &m.mScoreSize, 0.0, 3.0, 0, NULL, 0xffff, 0xffff, + 0x200, 0x18); + // 5-digit number + ctx->genLabel("*****5ケタの数字(suji_n)*****", 0, 0, NULL, 0xffff, 0xffff, 0x200, 0x18); + ctx->genSlider("位置X", &m.m5DNumberPosX, -300.0, 300.0, 0, NULL, 0xffff, 0xffff, + 0x200, 0x18); + ctx->genSlider("位置Y", &m.m5DNumberPosY, -300.0, 300.0, 0, NULL, 0xffff, 0xffff, + 0x200, 0x18); + ctx->genSlider("サイズX", &m.m5DNumberSizeX, 0.0, 3.0, 0, NULL, 0xffff, 0xffff, + 0x200, 0x18); + ctx->genSlider("サイズY", &m.m5DNumberSizeY, 0.0, 3.0, 0, NULL, 0xffff, 0xffff, + 0x200, 0x18); + ctx->genSlider("アルファ", &m.m5DNumberAlpha, 0.0, 1.0, 0, NULL, 0xffff, 0xffff, + 0x200, 0x18); + // "SCORE" & 5-digit number + ctx->genLabel("*****「SCORE」&5ケタの数字(suji_n)*****", 0, 0, NULL, 0xffff, 0xffff, 0x200, 0x18); + ctx->genSlider("位置X", &m.m5DNumber2PosX, -300.0, 300.0, 0, NULL, 0xffff, 0xffff, + 0x200, 0x18); + ctx->genSlider("位置Y", &m.m5DNumber2PosY, -300.0, 300.0, 0, NULL, 0xffff, 0xffff, + 0x200, 0x18); + ctx->genSlider("サイズ", &m.m5DNumber2Size, 0.0, 3.0, 0, NULL, 0xffff, 0xffff, + 0x200, 0x18); + ctx->genLabel("*****「+」(tas_n)*****", 0, 0, NULL, 0xffff, 0xffff, 0x200, 0x18); + ctx->genSlider("位置X", &m.mUnkPosX, -300.0, 300.0, 0, NULL, 0xffff, 0xffff, + 0x200, 0x18); + ctx->genSlider("位置Y", &m.mUnkPosY, -300.0, 300.0, 0, NULL, 0xffff, 0xffff, + 0x200, 0x18); + ctx->genSlider("サイズ", &m.mUnkSize, 0.0, 3.0, 0, NULL, 0xffff, 0xffff, + 0x200, 0x18); + ctx->genLabel("*****「COMBO」\u3000(combo_tn)*****", 0, 0, NULL, 0xffff, 0xffff, 0x200, 0x18); + ctx->genSlider("位置X", &m.mComboPosX, -300.0, 300.0, 0, NULL, 0xffff, 0xffff, + 0x200, 0x18); + ctx->genSlider("位置Y", &m.mComboPosY, -300.0, 300.0, 0, NULL, 0xffff, 0xffff, + 0x200, 0x18); + ctx->genSlider("サイズ", &m.mComboSize, 0.0, 3.0, 0, NULL, 0xffff, 0xffff, + 0x200, 0x18); + ctx->genLabel("*****2ケタの数字(num_n)*****", 0, 0, NULL, 0xffff, 0xffff, 0x200, 0x18); + ctx->genSlider("位置X", &m.m2DNumberPosX, -300.0, 300.0, 0, NULL, 0xffff, 0xffff, + 0x200, 0x18); + ctx->genSlider("位置Y", &m.m2DNumberPosY, -300.0, 300.0, 0, NULL, 0xffff, 0xffff, + 0x200, 0x18); + ctx->genSlider("サイズX", &m.m2DNumberSizeX, 0.0, 3.0, 0, NULL, 0xffff, 0xffff, + 0x200, 0x18); + ctx->genSlider("サイズY", &m.m2DNumberSizeY, 0.0, 3.0, 0, NULL, 0xffff, 0xffff, + 0x200, 0x18); + // "+" & 2-digit number & "COMBO" + ctx->genLabel("*****「+」&2ケタの数字&「COMBO」(co_set_n)*****", 0, 0, NULL, 0xffff, 0xffff, 0x200, 0x18); + ctx->genSlider("位置X", &m.m2DNumberComboPosX, -300.0, 300.0, 0, NULL, 0xffff, 0xffff, + 0x200, 0x18); + ctx->genSlider("位置Y", &m.m2DNumberComboPosY, -300.0, 300.0, 0, NULL, 0xffff, 0xffff, + 0x200, 0x18); + ctx->genSlider("サイズ", &m.m2DNumberComboSize, 0.0, 3.0, 0, NULL, 0xffff, 0xffff, + 0x200, 0x18); + ctx->genSlider("アルファ", &m.m2DNumberComboAlpha, 0.0, 1.0, 0, NULL, 0xffff, 0xffff, + 0x200, 0x18); + // balloon "large" + ctx->genLabel("*****風船「大」(bal_1_n)*****", 0, 0, NULL, 0xffff, 0xffff, 0x200, 0x18); + ctx->genSlider("位置X", &m.mBalloonLargePosX, -300.0, 300.0, 0, NULL, 0xffff, 0xffff, + 0x200, 0x18); + ctx->genSlider("位置Y", &m.mBalloonLargePosY, -300.0, 300.0, 0, NULL, 0xffff, 0xffff, + 0x200, 0x18); + ctx->genSlider("サイズ", &m.mBalloonLargeSize, 0.0, 3.0, 0, NULL, 0xffff, 0xffff, + 0x200, 0x18); + ctx->genSlider("アルファ", &m.mBalloonLargeAlpha, 0.0, 1.0, 0, NULL, 0xffff, 0xffff, + 0x200, 0x18); + // balloon "medium" + ctx->genLabel("*****風船「中」(bal_2_n)*****", 0, 0, NULL, 0xffff, 0xffff, 0x200, 0x18); + ctx->genSlider("位置X", &m.mBalloonMedPosX, -300.0, 300.0, 0, NULL, 0xffff, 0xffff, + 0x200, 0x18); + ctx->genSlider("位置Y", &m.mBalloonMedPosY, -300.0, 300.0, 0, NULL, 0xffff, 0xffff, + 0x200, 0x18); + ctx->genSlider("サイズ", &m.mBalloonMedSize, 0.0, 3.0, 0, NULL, 0xffff, 0xffff, + 0x200, 0x18); + ctx->genSlider("アルファ", &m.mBalloonMedAlpha, 0.0, 1.0, 0, NULL, 0xffff, 0xffff, + 0x200, 0x18); + // balloon "small" + ctx->genLabel("*****風船「小」(bal_3_n)*****", 0, 0, NULL, 0xffff, 0xffff, 0x200, 0x18); + ctx->genSlider("位置X", &m.mBalloonSmallPosX, -300.0, 300.0, 0, NULL, 0xffff, 0xffff, + 0x200, 0x18); + ctx->genSlider("位置Y", &m.mBalloonSmallPosY, -300.0, 300.0, 0, NULL, 0xffff, 0xffff, + 0x200, 0x18); + ctx->genSlider("サイズ", &m.mBalloonSmallSize, 0.0, 3.0, 0, NULL, 0xffff, 0xffff, + 0x200, 0x18); + ctx->genSlider("アルファ", &m.mBalloonSmallAlpha, 0.0, 1.0, 0, NULL, 0xffff, 0xffff, + 0x200, 0x18); + // "Balloon" & "+" & two-digit number & "COMBO" + ctx->genLabel("*****「風船」&「+」&2ケタの数字&「COMBO」(ba_com_n)*****", 0, 0, NULL, 0xffff, 0xffff, 0x200, + 0x18); + ctx->genSlider("位置X", &m.m2DNumberCombo2PosX, -300.0, 300.0, 0, NULL, 0xffff, 0xffff, + 0x200, 0x18); + ctx->genSlider("位置X(4:3)", &m.m2DNumberCombo2PosX43, -300.0, 300.0, 0, NULL, 0xffff, 0xffff, + 0x200, 0x18); + ctx->genSlider("位置Y", &m.m2DNumberCombo2PosY, -300.0, 300.0, 0, NULL, 0xffff, 0xffff, + 0x200, 0x18); + ctx->genSlider("サイズ", &m.m2DNumberCombo2Size, 0.0, 3.0, 0, NULL, 0xffff, 0xffff, + 0x200, 0x18); } +#endif /* 80655494-80655524 0020B4 0090+00 1/0 0/0 0/0 .text __dt__13daBalloon2D_cFv */ daBalloon2D_c::~daBalloon2D_c() { // NONMATCHING } -/* 80655524-80655598 002144 0074+00 0/0 1/0 0/0 .text __sinit_d_a_balloon_2D_cpp */ -void __sinit_d_a_balloon_2D_cpp() { - // NONMATCHING -} +/* ############################################################################################## */ +/* 806556D8-806556F8 -00001 0020+00 1/0 0/0 0/0 .data daBalloon2D_METHODS */ +static actor_method_class daBalloon2D_METHODS = { + (process_method_func)daBalloon2D_create, + (process_method_func)daBalloon2D_destroy, + (process_method_func)daBalloon2D_execute, + 0, + (process_method_func)daBalloon2D_draw, +}; -#pragma push -#pragma force_active on -REGISTER_CTORS(0x80655524, __sinit_d_a_balloon_2D_cpp); -#pragma pop - -/* 806555EC-806555EC 000040 0000+00 0/0 0/0 0/0 .rodata @stringBase0 */ +/* 806556F8-80655728 -00001 0030+00 0/0 0/0 1/0 .data g_profile_BALLOON2D */ +extern actor_process_profile_definition g_profile_BALLOON2D = { + fpcLy_CURRENT_e, // mLayerID + 3, // mListID + fpcPi_CURRENT_e, // mListPrio + PROC_BALLOON2D, // mProcName + &g_fpcLf_Method.base, // sub_method + sizeof(daBalloon2D_c), // mSize + 0, // mSizeOther + 0, // mParameters + &g_fopAc_Method.base, // sub_method + 765, // mPriority + &daBalloon2D_METHODS, // sub_method + 0x00040000, // mStatus + fopAc_ACTOR_e, // mActorType + fopAc_CULLBOX_0_e, // cullType + }; diff --git a/src/d/actor/d_a_demo00.cpp b/src/d/actor/d_a_demo00.cpp index f2ca3d4e2c3..8c00ac754d0 100644 --- a/src/d/actor/d_a_demo00.cpp +++ b/src/d/actor/d_a_demo00.cpp @@ -386,7 +386,8 @@ int daDemo00_c::createHeap() { if (mModel.mID.field_0x1c != -1) { mDeformData = (J3DDeformData*)dComIfG_getObjectIDRes(dStage_roomControl_c::getDemoArcName(), (u16)mModel.mID.field_0x1c); - JUT_ASSERT(687, mModel.mDeformData != 0); + // Should be mModel.mDeformData + JUT_ASSERT(687, mDeformData != 0); if (mModel.mID.field_0x20 != -1) { mpBlkAnm = new mDoExt_blkAnm(); @@ -396,7 +397,7 @@ int daDemo00_c::createHeap() { J3DAnmCluster* anm_cluster = (J3DAnmCluster*)dComIfG_getObjectIDRes(dStage_roomControl_c::getDemoArcName(), (u16)mModel.mID.field_0x20); if (anm_cluster == NULL) { - OS_REPORT("ESC_WARNING指定blkアニメーションが見つかりません!(%d)\n", field_0x5ac.field_0x20); // ESC_WARNING: Specified blk animation not found! (%d) + OS_REPORT("ESC_WARNING指定blkアニメーションが見つかりません!(%d)\n", mModel.mID.field_0x20); // ESC_WARNING: Specified blk animation not found! (%d) } else { if (mpBlkAnm->init(mDeformData, anm_cluster, 1, -1, 1.0f, 0, -1) == 0) { return 0; @@ -557,7 +558,8 @@ int daDemo00_c::actPerformance(dDemo_actor_c* actor) { } if (mModel.mID.field_0x20 != mModel.field_0x0.field_0x20) { - JUT_ASSERT(1049, mModel.mDeformData != 0 && mModel.mBlkAnm != 0); + // Should be mModel.mDeformData and mModel.mBlkAnm + JUT_ASSERT(1049, mDeformData != 0 && mpBlkAnm != 0); J3DAnmCluster* anmCluster = (J3DAnmCluster*)dComIfG_getObjectIDRes(dStage_roomControl_c::getDemoArcName(), (u16)mModel.field_0x0.field_0x20); if (anmCluster == NULL) { diff --git a/src/d/actor/d_a_e_bu.cpp b/src/d/actor/d_a_e_bu.cpp index 1bf930f9e3f..09661d030e1 100644 --- a/src/d/actor/d_a_e_bu.cpp +++ b/src/d/actor/d_a_e_bu.cpp @@ -4,838 +4,1164 @@ */ #include "d/actor/d_a_e_bu.h" -#include "d/d_cc_d.h" -#include "dol2asm.h" + UNK_REL_DATA; #include "f_op/f_op_actor_enemy.h" - -// -// Forward References: -// - -extern "C" void __ct__12daE_BU_HIO_cFv(); -extern "C" static void bu_disappear__FP10fopAc_ac_c(); -extern "C" static void anm_init__FP10e_bu_classifUcf(); -extern "C" static void nodeCallBack__FP8J3DJointi(); -extern "C" static void daE_BU_Draw__FP10e_bu_class(); -extern "C" static void other_bg_check__FP10e_bu_classP10fopAc_ac_c(); -extern "C" static void pl_check__FP10e_bu_classfs(); -extern "C" static void damage_check__FP10e_bu_class(); -extern "C" static void path_check__FP10e_bu_class(); -extern "C" static void fly_move__FP10e_bu_class(); -extern "C" static void e_bu_wait__FP10e_bu_class(); -extern "C" static void e_bu_fight_fly__FP10e_bu_class(); -extern "C" static void e_bu_fight__FP10e_bu_class(); -extern "C" static void e_bu_attack__FP10e_bu_class(); -extern "C" static void e_bu_fly__FP10e_bu_class(); -extern "C" static void e_bu_path_fly__FP10e_bu_class(); -extern "C" static void e_bu_chance__FP10e_bu_class(); -extern "C" static void e_bu_head__FP10e_bu_class(); -extern "C" static void action__FP10e_bu_class(); -extern "C" static void daE_BU_Execute__FP10e_bu_class(); -extern "C" static bool daE_BU_IsDelete__FP10e_bu_class(); -extern "C" static void daE_BU_Delete__FP10e_bu_class(); -extern "C" static void useHeapInit__FP10fopAc_ac_c(); -extern "C" static void daE_BU_Create__FP10fopAc_ac_c(); -extern "C" void __dt__8cM3dGSphFv(); -extern "C" void __dt__8cM3dGAabFv(); -extern "C" void __dt__10dCcD_GSttsFv(); -extern "C" void __dt__12dBgS_ObjAcchFv(); -extern "C" void __dt__12dBgS_AcchCirFv(); -extern "C" void __dt__10cCcD_GSttsFv(); -extern "C" void __dt__12daE_BU_HIO_cFv(); -extern "C" void __sinit_d_a_e_bu_cpp(); -extern "C" static void func_80694258(); -extern "C" static void func_80694260(); -extern "C" extern char const* const d_a_e_bu__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 -__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 fopAcM_delete__FP10fopAc_ac_c(); -extern "C" void fopAcM_entrySolidHeap__FP10fopAc_ac_cPFP10fopAc_ac_c_iUl(); -extern "C" void fopAcM_SetMin__FP10fopAc_ac_cfff(); -extern "C" void fopAcM_SetMax__FP10fopAc_ac_cfff(); -extern "C" void fopAcM_searchActorAngleY__FPC10fopAc_ac_cPC10fopAc_ac_c(); -extern "C" void fopAcM_searchActorDistance__FPC10fopAc_ac_cPC10fopAc_ac_c(); -extern "C" void fopAcM_createDisappear__FPC10fopAc_ac_cPC4cXyzUcUcUc(); -extern "C" void fopAcM_otherBgCheck__FPC10fopAc_ac_cPC10fopAc_ac_c(); -extern "C" void fopAcM_effSmokeSet1__FPUlPUlPC4cXyzPC5csXyzfPC12dKy_tevstr_ci(); -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_setSimpleShadow__FP4cXyzffR13cBgS_PolyInfosfP9_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 getEmitter__Q213dPa_control_c7level_cFUl(); -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 dPath_GetRoomPath__Fii(); -extern "C" void LineCross__4cBgSFP11cBgS_LinChk(); -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_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_SphFRC11dCcD_SrcSph(); -extern "C" void cc_at_check__FP10fopAc_ac_cP11dCcU_AtInfo(); -extern "C" void settingTevStruct__18dScnKy_env_light_cFiP4cXyzP12dKy_tevstr_c(); -extern "C" void setLightTevColorType_MAJI__18dScnKy_env_light_cFP12J3DModelDataP12dKy_tevstr_c(); -extern "C" void dKy_darkworld_check__Fv(); -extern "C" void Set__4cCcSFP8cCcD_Obj(); -extern "C" void __mi__4cXyzCFRC3Vec(); -extern "C" void cM_atan2s__Fff(); -extern "C" void cM_rndF__Ff(); -extern "C" void cM_rndFX__Ff(); -extern "C" void __dt__13cBgS_PolyInfoFv(); -extern "C" void __dt__8cM3dGCirFv(); -extern "C" void SetC__8cM3dGSphFRC4cXyz(); -extern "C" void SetR__8cM3dGSphFf(); -extern "C" void cLib_addCalc2__FPffff(); -extern "C" void cLib_addCalc0__FPfff(); -extern "C" void cLib_addCalcAngleS2__FPssss(); -extern "C" void MtxPosition__FP4cXyzP4cXyz(); -extern "C" void func_80280808(); -extern "C" void __ct__15Z2CreatureEnemyFv(); -extern "C" void init__15Z2CreatureEnemyFP3VecP3VecUcUc(); -extern "C" void setEnemyName__15Z2CreatureEnemyFPCc(); -extern "C" void* __nw__FUl(); -extern "C" void __dl__FPv(); -extern "C" void checkPass__12J3DFrameCtrlFf(); -extern "C" void _savegpr_19(); -extern "C" void _savegpr_23(); -extern "C" void _savegpr_26(); -extern "C" void _savegpr_27(); -extern "C" void _savegpr_28(); -extern "C" void _savegpr_29(); -extern "C" void _restgpr_19(); -extern "C" void _restgpr_23(); -extern "C" void _restgpr_26(); -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" u8 mSimpleTexObj__21dDlst_shadowControl_c[32]; -extern "C" u8 mCurrentMtx__6J3DSys[48]; -extern "C" u8 sincosTable___5JMath[65536]; -extern "C" u8 mParticleTracePCB__13dPa_control_c[4 + 4 /* padding */]; -extern "C" u8 m_midnaActor__9daPy_py_c[4]; -extern "C" void __register_global_object(); - -// -// Declarations: -// - -/* ############################################################################################## */ -/* 806946BC-806946C0 00002C 0004+00 0/2 0/0 0/0 .rodata @3809 */ -#pragma push -#pragma force_active on -SECTION_RODATA static f32 const lit_3809 = 1.5f; -COMPILER_STRIP_GATE(0x806946BC, &lit_3809); -#pragma pop - -/* 806946C0-806946C4 000030 0004+00 0/1 0/0 0/0 .rodata @3810 */ -#pragma push -#pragma force_active on -SECTION_RODATA static f32 const lit_3810 = 15.0f; -COMPILER_STRIP_GATE(0x806946C0, &lit_3810); -#pragma pop - -/* 806946C4-806946C8 000034 0004+00 0/1 0/0 0/0 .rodata @3811 */ -#pragma push -#pragma force_active on -SECTION_RODATA static f32 const lit_3811 = 250.0f; -COMPILER_STRIP_GATE(0x806946C4, &lit_3811); -#pragma pop - -/* 806946C8-806946CC 000038 0004+00 0/2 0/0 0/0 .rodata @3812 */ -#pragma push -#pragma force_active on -SECTION_RODATA static f32 const lit_3812 = 40.0f; -COMPILER_STRIP_GATE(0x806946C8, &lit_3812); -#pragma pop - -/* 806947B4-806947E8 -00001 0034+00 1/1 0/0 0/0 .data @4457 */ -SECTION_DATA static void* lit_4457[13] = { - (void*)(((char*)e_bu_head__FP10e_bu_class) + 0x48), - (void*)(((char*)e_bu_head__FP10e_bu_class) + 0x68), - (void*)(((char*)e_bu_head__FP10e_bu_class) + 0x11C), - (void*)(((char*)e_bu_head__FP10e_bu_class) + 0x15C), - (void*)(((char*)e_bu_head__FP10e_bu_class) + 0x278), - (void*)(((char*)e_bu_head__FP10e_bu_class) + 0x438), - (void*)(((char*)e_bu_head__FP10e_bu_class) + 0x438), - (void*)(((char*)e_bu_head__FP10e_bu_class) + 0x438), - (void*)(((char*)e_bu_head__FP10e_bu_class) + 0x438), - (void*)(((char*)e_bu_head__FP10e_bu_class) + 0x438), - (void*)(((char*)e_bu_head__FP10e_bu_class) + 0x2D0), - (void*)(((char*)e_bu_head__FP10e_bu_class) + 0x328), - (void*)(((char*)e_bu_head__FP10e_bu_class) + 0x398), +enum daE_BU_TYPE { + TYPE_NORMAL, + TYPE_FIRE, + TYPE_ICE, }; -/* 806947E8-80694840 -00001 0058+00 1/1 0/0 0/0 .data @4547 */ -SECTION_DATA static void* lit_4547[22] = { - (void*)(((char*)action__FP10e_bu_class) + 0x8C), - (void*)(((char*)action__FP10e_bu_class) + 0xA4), - (void*)(((char*)action__FP10e_bu_class) + 0xB0), - (void*)(((char*)action__FP10e_bu_class) + 0xBC), - (void*)(((char*)action__FP10e_bu_class) + 0x168), - (void*)(((char*)action__FP10e_bu_class) + 0xD4), - (void*)(((char*)action__FP10e_bu_class) + 0xE0), - (void*)(((char*)action__FP10e_bu_class) + 0x168), - (void*)(((char*)action__FP10e_bu_class) + 0x168), - (void*)(((char*)action__FP10e_bu_class) + 0x168), - (void*)(((char*)action__FP10e_bu_class) + 0xEC), - (void*)(((char*)action__FP10e_bu_class) + 0x168), - (void*)(((char*)action__FP10e_bu_class) + 0x168), - (void*)(((char*)action__FP10e_bu_class) + 0x168), - (void*)(((char*)action__FP10e_bu_class) + 0x168), - (void*)(((char*)action__FP10e_bu_class) + 0x104), - (void*)(((char*)action__FP10e_bu_class) + 0x168), - (void*)(((char*)action__FP10e_bu_class) + 0x168), - (void*)(((char*)action__FP10e_bu_class) + 0x168), - (void*)(((char*)action__FP10e_bu_class) + 0x168), - (void*)(((char*)action__FP10e_bu_class) + 0x168), - (void*)(((char*)action__FP10e_bu_class) + 0x11C), -}; - -/* 80694840-80694848 0000C4 0008+00 1/1 0/0 0/0 .data fire_name$4572 */ -SECTION_DATA static u8 fire_name[8] = { - 0x82, 0x1D, 0x82, 0x1E, 0x82, 0x1F, 0x82, 0x20, -}; - -/* 80694848-80694850 0000CC 0006+02 1/1 0/0 0/0 .data ice_name$4573 */ -SECTION_DATA static u8 ice_name[6 + 2 /* padding */] = { - 0x82, - 0x21, - 0x82, - 0x22, - 0x82, - 0x23, - /* padding */ - 0x00, - 0x00, -}; - -/* 80694850-80694890 0000D4 0040+00 1/1 0/0 0/0 .data cc_sph_src$4803 */ -static dCcD_SrcSph cc_sph_src = { - { - {0x0, {{AT_TYPE_CSTATUE_SWING, 0x1, 0xd}, {0xd8fbfdff, 0x3}, 0x75}}, // mObj - {dCcD_SE_HARD_BODY, 0x0, 0x0, 0x0, 0x0}, // mGObjAt - {dCcD_SE_NONE, 0x0, 0x0, 0x0, 0x2}, // mGObjTg - {0x0}, // mGObjCo - }, // mObjInf - { - {{0.0f, 0.0f, 0.0f}, 40.0f} // mSph - } // mSphAttr -}; - -/* 80694890-806948B0 -00001 0020+00 1/0 0/0 0/0 .data l_daE_BU_Method */ -static actor_method_class l_daE_BU_Method = { - (process_method_func)daE_BU_Create__FP10fopAc_ac_c, - (process_method_func)daE_BU_Delete__FP10e_bu_class, - (process_method_func)daE_BU_Execute__FP10e_bu_class, - (process_method_func)daE_BU_IsDelete__FP10e_bu_class, - (process_method_func)daE_BU_Draw__FP10e_bu_class, -}; - -/* 806948B0-806948E0 -00001 0030+00 0/0 0/0 1/0 .data g_profile_E_BU */ -extern actor_process_profile_definition g_profile_E_BU = { - fpcLy_CURRENT_e, // mLayerID - 7, // mListID - fpcPi_CURRENT_e, // mListPrio - PROC_E_BU, // mProcName - &g_fpcLf_Method.base, // sub_method - sizeof(e_bu_class), // mSize - 0, // mSizeOther - 0, // mParameters - &g_fopAc_Method.base, // sub_method - 181, // mPriority - &l_daE_BU_Method, // sub_method - 0x100C0120, // mStatus - fopAc_ENEMY_e, // mActorType - fopAc_CULLBOX_CUSTOM_e, // cullType -}; - -/* 806948E0-806948EC 000164 000C+00 1/1 0/0 0/0 .data __vt__12dBgS_AcchCir */ -SECTION_DATA extern void* __vt__12dBgS_AcchCir[3] = { - (void*)NULL /* RTTI */, - (void*)NULL, - (void*)__dt__12dBgS_AcchCirFv, -}; - -/* 806948EC-806948F8 000170 000C+00 2/2 0/0 0/0 .data __vt__10cCcD_GStts */ -SECTION_DATA extern void* __vt__10cCcD_GStts[3] = { - (void*)NULL /* RTTI */, - (void*)NULL, - (void*)__dt__10cCcD_GSttsFv, -}; - -/* 806948F8-80694904 00017C 000C+00 1/1 0/0 0/0 .data __vt__10dCcD_GStts */ -SECTION_DATA extern void* __vt__10dCcD_GStts[3] = { - (void*)NULL /* RTTI */, - (void*)NULL, - (void*)__dt__10dCcD_GSttsFv, -}; - -/* 80694904-80694910 000188 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, -}; - -/* 80694910-8069491C 000194 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, -}; - -/* 8069491C-80694940 0001A0 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_80694260, - (void*)NULL, - (void*)NULL, - (void*)func_80694258, -}; - -/* 80694940-8069494C 0001C4 000C+00 2/2 0/0 0/0 .data __vt__12daE_BU_HIO_c */ -SECTION_DATA extern void* __vt__12daE_BU_HIO_c[3] = { - (void*)NULL /* RTTI */, - (void*)NULL, - (void*)__dt__12daE_BU_HIO_cFv, +enum daE_BU_ACTION { + ACTION_WAIT, + ACTION_FIGHT_FLY, + ACTION_FIGHT, + ACTION_ATTACK, + ACTION_FLY = 5, + ACTION_PATH_FLY, + ACTION_CHANCE = 10, + ACTION_HEAD = 15, + ACTION_DEAD = 21, }; /* 806911AC-806911F0 0000EC 0044+00 1/1 0/0 0/0 .text __ct__12daE_BU_HIO_cFv */ daE_BU_HIO_c::daE_BU_HIO_c() { - // NONMATCHING + id = -1; + base_size = 1.5f; + fly_speed = 15.0f; + attack_range = 250.0f; + attack_speed = 15.0f; + dash_speed = 40.0f; } /* 806911F0-80691250 000130 0060+00 1/1 0/0 0/0 .text bu_disappear__FP10fopAc_ac_c */ -static void bu_disappear(fopAc_ac_c* param_0) { - // NONMATCHING +static void bu_disappear(fopAc_ac_c* i_this) { + fopAcM_createDisappear(i_this, &i_this->current.pos, 6, 0, 0x1C); + + int swbit = (fopAcM_GetParam(i_this) & 0xFF000000) >> 0x18; + if (swbit != 0xFF) { + dComIfGs_onSwitch(swbit, fopAcM_GetRoomNo(i_this)); + } } -/* ############################################################################################## */ -/* 806946CC-806946D0 00003C 0004+00 1/1 0/0 0/0 .rodata @3836 */ -SECTION_RODATA static f32 const lit_3836 = -1.0f; -COMPILER_STRIP_GATE(0x806946CC, &lit_3836); - -/* 80694770-80694770 0000E0 0000+00 0/0 0/0 0/0 .rodata @stringBase0 */ -#pragma push -#pragma force_active on -SECTION_DEAD static char const* const stringBase_80694770 = "E_BU"; -#pragma pop - /* 80691250-806912FC 000190 00AC+00 6/6 0/0 0/0 .text anm_init__FP10e_bu_classifUcf */ -static void anm_init(e_bu_class* param_0, int param_1, f32 param_2, u8 param_3, f32 param_4) { - // NONMATCHING +static void anm_init(e_bu_class* i_this, int i_anm, f32 i_morf, u8 i_mode, f32 i_speed) { + i_this->modelMorf->setAnm((J3DAnmTransform*)dComIfG_getObjectRes("E_BU", i_anm), i_mode, i_morf, i_speed, 0.0f, -1.0f); + i_this->anm = i_anm; } /* 806912FC-80691458 00023C 015C+00 1/1 0/0 0/0 .text nodeCallBack__FP8J3DJointi */ -static void nodeCallBack(J3DJoint* param_0, int param_1) { - // NONMATCHING +static int nodeCallBack(J3DJoint* i_joint, int param_1) { + if (param_1 == 0) { + int jnt_no = i_joint->getJntNo(); + J3DModel* model = j3dSys.getModel(); + e_bu_class* a_this = (e_bu_class*)model->getUserArea(); + + if (a_this != NULL) { + if (jnt_no == TREG_S(0)) { + MTXCopy(model->getAnmMtx(jnt_no), *calc_mtx); + cMtx_YrotM(*calc_mtx, TREG_S(1)); + cMtx_XrotM(*calc_mtx, TREG_S(2)); + cMtx_ZrotM(*calc_mtx, TREG_S(3)); + model->setAnmMtx(jnt_no, *calc_mtx); + MTXCopy(*calc_mtx, J3DSys::mCurrentMtx); + } + + if (jnt_no == 17) { + MTXCopy(model->getAnmMtx(jnt_no), *calc_mtx); + cMtx_ZrotM(*calc_mtx, a_this->jaw_rot); + model->setAnmMtx(jnt_no, *calc_mtx); + MTXCopy(*calc_mtx, J3DSys::mCurrentMtx); + } + } + } + + return 1; } -/* ############################################################################################## */ -/* 806946D0-806946D4 000040 0004+00 1/5 0/0 0/0 .rodata @3889 */ -SECTION_RODATA static f32 const lit_3889 = 30.0f; -COMPILER_STRIP_GATE(0x806946D0, &lit_3889); - /* 80694958-8069495C 000008 0004+00 2/2 0/0 0/0 .bss None */ -static u8 data_80694958[4]; - -/* 8069495C-80694968 00000C 000C+00 1/1 0/0 0/0 .bss @3804 */ -static u8 lit_3804[12]; +static u8 l_HIOInit; /* 80694968-80694984 000018 001C+00 11/11 0/0 0/0 .bss l_HIO */ -static u8 l_HIO[28]; +static daE_BU_HIO_c l_HIO; /* 80691458-80691504 000398 00AC+00 1/0 0/0 0/0 .text daE_BU_Draw__FP10e_bu_class */ -static void daE_BU_Draw(e_bu_class* param_0) { - // NONMATCHING +static int daE_BU_Draw(e_bu_class* i_this) { + fopAc_ac_c* actor = &i_this->enemy; + J3DModel* model = i_this->modelMorf->getModel(); + + g_env_light.settingTevStruct(0, &actor->current.pos, &actor->tevStr); + g_env_light.setLightTevColorType_MAJI(model, &actor->tevStr); + + i_this->modelMorf->entryDL(); + dComIfGd_setSimpleShadow(&actor->current.pos, i_this->acch.GetGroundH(), (30.0f + TREG_F(11)) * l_HIO.base_size, i_this->acch.m_gnd, 0, 1.0f, dDlst_shadowControl_c::getSimpleTex()); + return 1; } /* 80691504-806915DC 000444 00D8+00 1/1 0/0 0/0 .text other_bg_check__FP10e_bu_classP10fopAc_ac_c */ -static void other_bg_check(e_bu_class* param_0, fopAc_ac_c* param_1) { - // NONMATCHING +static BOOL other_bg_check(e_bu_class* i_this, fopAc_ac_c* i_other) { + fopAc_ac_c* actor = &i_this->enemy; + dBgS_LinChk linchk; + cXyz sp28; + cXyz startpos; + cXyz endpos; + + endpos = i_other->current.pos; + endpos.y += 100.0f; + + startpos = actor->current.pos; + startpos.y = actor->eyePos.y; + + linchk.Set(&startpos, &endpos, actor); + if (dComIfG_Bgsp().LineCross(&linchk)) { + return TRUE; + } + + return FALSE; } /* 806915DC-80691660 00051C 0084+00 5/5 0/0 0/0 .text pl_check__FP10e_bu_classfs */ -static void pl_check(e_bu_class* param_0, f32 param_1, s16 param_2) { - // NONMATCHING +static BOOL pl_check(e_bu_class* i_this, f32 i_range, s16 i_angle) { + fopAc_ac_c* actor = &i_this->enemy; + fopAc_ac_c* player = dComIfGp_getPlayer(0); + + if (i_this->dist_to_player < i_range) { + s16 temp_r28 = actor->shape_angle.y - i_this->angle_to_player; + if ((i_angle == 1 || (temp_r28 < i_angle && temp_r28 > (s16)-i_angle)) && !other_bg_check(i_this, player)) { + return TRUE; + } + } + + return FALSE; } -/* ############################################################################################## */ -/* 806946D4-806946D8 000044 0004+00 0/3 0/0 0/0 .rodata @3968 */ -#pragma push -#pragma force_active on -SECTION_RODATA static f32 const lit_3968 = 1.0f / 5.0f; -COMPILER_STRIP_GATE(0x806946D4, &lit_3968); -#pragma pop - -/* 806946D8-806946DC 000048 0004+00 0/1 0/0 0/0 .rodata @3969 */ -#pragma push -#pragma force_active on -SECTION_RODATA static f32 const lit_3969 = 80.0f; -COMPILER_STRIP_GATE(0x806946D8, &lit_3969); -#pragma pop - /* 80691660-8069182C 0005A0 01CC+00 1/1 0/0 0/0 .text damage_check__FP10e_bu_class */ -static void damage_check(e_bu_class* param_0) { - // NONMATCHING +static void damage_check(e_bu_class* i_this) { + fopAc_ac_c* actor = &i_this->enemy; + daPy_py_c* player = (daPy_py_c*)dComIfGp_getPlayer(0); + + if (i_this->invulnerabilityTimer == 0) { + i_this->ccStts.Move(); + + if (i_this->ccSph.ChkTgHit()) { + OS_REPORT("E_BU HP %d\n", actor->health); + i_this->atInfo.mpCollider = i_this->ccSph.GetTgHitObj(); + cc_at_check(actor, &i_this->atInfo); + OS_REPORT("E_BU AP %d\n", i_this->atInfo.mAttackPower); + + if (i_this->atInfo.mpCollider->ChkAtType(AT_TYPE_WOLF_ATTACK | AT_TYPE_WOLF_CUT_TURN | AT_TYPE_10000000 | AT_TYPE_MIDNA_LOCK)) { + i_this->invulnerabilityTimer = 20; + } else { + i_this->invulnerabilityTimer = 10; + } + + if (actor->health <= 0) { + i_this->sound.startCreatureVoice(Z2SE_EN_BU_V_DEAD, -1); + i_this->modelMorf->setPlaySpeed(0.2f); + i_this->is_dead = TRUE; + i_this->hit_speed = 80.0f + TREG_F(13); + i_this->hit_rot = i_this->atInfo.mHitDirection.y; + } else { + i_this->sound.startCreatureVoice(Z2SE_EN_BU_V_DMG, -1); + i_this->action = ACTION_HEAD; + i_this->mode = 0; + + if (i_this->atInfo.mpCollider->ChkAtType(AT_TYPE_HOOKSHOT)) { + actor->speedF = 0.0f; + i_this->head_rot_y = i_this->atInfo.mHitDirection.y; + } else if (player->getCutType() == 10 && player->checkCutJumpCancelTurn()) { + i_this->invulnerabilityTimer = NREG_S(7) + 3; + actor->speedF = 0.0f; + } else { + i_this->head_rot_y = i_this->atInfo.mHitDirection.y + 0x8000; + actor->speedF = 40.0f + AREG_F(0); + } + } + } + + if (actor->health <= 1) { + actor->health = 0; + i_this->ccSph.SetTgHitMark((CcG_Tg_HitMark)3); + } + } } -/* ############################################################################################## */ -/* 806946DC-806946E0 00004C 0004+00 0/1 0/0 0/0 .rodata @4001 */ -#pragma push -#pragma force_active on -SECTION_RODATA static f32 const lit_4001 = 50.0f; -COMPILER_STRIP_GATE(0x806946DC, &lit_4001); -#pragma pop - -/* 80694984-80694A83 000034 00FF+00 1/1 0/0 0/0 .bss check_index$4007 */ -static u8 check_index[255]; - /* 8069182C-80691A94 00076C 0268+00 2/2 0/0 0/0 .text path_check__FP10e_bu_class */ -static void path_check(e_bu_class* param_0) { - // NONMATCHING +static BOOL path_check(e_bu_class* i_this) { + static u8 check_index[255]; + + if (i_this->ppd != NULL) { + dPnt* pnt; + fopAc_ac_c* actor = &i_this->enemy; + dBgS_LinChk linchk; + cXyz startpos; + cXyz endpos; + + startpos = actor->current.pos; + startpos.y += 100.0f; + + pnt = i_this->ppd->m_points; + for (int i = 0; i < i_this->ppd->m_num; i++, pnt++) { + endpos.x = pnt->m_position.x; + endpos.y = 100.0f + pnt->m_position.y; + endpos.z = pnt->m_position.z; + linchk.Set(&startpos, &endpos, actor); + + if (!dComIfG_Bgsp().LineCross(&linchk)) { + check_index[i] = TRUE; + } else { + check_index[i] = FALSE; + } + } + + f32 pnt_search_range = 0.0f; + u8 pnt_found = FALSE; + + for (int i = 0; i < 100; i++, pnt_search_range += 50.0f) { + pnt = i_this->ppd->m_points; + + for (int j = 0; j < i_this->ppd->m_num; j++, pnt++) { + if (check_index[j]) { + Vec pnt_vec; + pnt_vec.x = actor->current.pos.x - pnt->m_position.x; + pnt_vec.y = actor->current.pos.y - pnt->m_position.y; + pnt_vec.z = actor->current.pos.z - pnt->m_position.z; + + if (JMAFastSqrt(SQUARE(pnt_vec.x) + SQUARE(pnt_vec.y) + SQUARE(pnt_vec.z)) < pnt_search_range) { + i_this->now_path_pntNo = j - i_this->path_step; + if (i_this->now_path_pntNo >= (s8)i_this->ppd->m_num) { + i_this->now_path_pntNo = i_this->ppd->m_num; + } else if (i_this->now_path_pntNo < 0) { + i_this->now_path_pntNo = 0; + } + pnt_found = TRUE; + break; + } + } + } + + if (pnt_found) { + break; + } + } + + if (!pnt_found) { + i_this->field_0x5b8 = 0; + } else { + i_this->field_0x5b8 = i_this->pathNo + 1; + return TRUE; + } + } + + return FALSE; } -/* ############################################################################################## */ -/* 806946E0-806946E4 000050 0004+00 0/4 0/0 0/0 .rodata @4087 */ -#pragma push -#pragma force_active on -SECTION_RODATA static f32 const lit_4087 = 2000.0f; -COMPILER_STRIP_GATE(0x806946E0, &lit_4087); -#pragma pop - -/* 806946E4-806946E8 000054 0004+00 0/1 0/0 0/0 .rodata @4088 */ -#pragma push -#pragma force_active on -SECTION_RODATA static f32 const lit_4088 = 1.0f / 25.0f; -COMPILER_STRIP_GATE(0x806946E4, &lit_4088); -#pragma pop - /* 80691A94-80691C24 0009D4 0190+00 4/4 0/0 0/0 .text fly_move__FP10e_bu_class */ -static void fly_move(e_bu_class* param_0) { - // NONMATCHING +static void fly_move(e_bu_class* i_this) { + fopAc_ac_c* actor = &i_this->enemy; + cXyz sp8; + f32 dist_x = i_this->move_pos.x - actor->current.pos.x; + f32 dist_y = i_this->move_pos.y - actor->current.pos.y; + f32 dist_z = i_this->move_pos.z - actor->current.pos.z; + + s16 temp_r28 = cM_atan2s(dist_x, dist_z); + s16 temp_r27 = -cM_atan2s(dist_y, JMAFastSqrt(SQUARE(dist_x) + SQUARE(dist_z))); + i_this->field_0x694 = 2000.0f; + + cLib_addCalcAngleS2(&actor->current.angle.y, temp_r28, (TREG_S(3) + 10), (i_this->field_0x694 * i_this->field_0x690)); + cLib_addCalcAngleS2(&actor->current.angle.x, temp_r27, (TREG_S(3) + 10), (i_this->field_0x694 * i_this->field_0x690)); + cLib_addCalc2(&i_this->field_0x690, 1.0f, 1.0f, 0.04f); + + sp8.x = 0.0f; + sp8.y = 0.0f; + sp8.z = actor->speedF; + cMtx_YrotS(*calc_mtx, actor->current.angle.y); + cMtx_XrotM(*calc_mtx, actor->current.angle.x); + MtxPosition(&sp8, &actor->speed); + actor->current.pos += actor->speed; } -/* ############################################################################################## */ -/* 806946E8-806946EC 000058 0004+00 0/1 0/0 0/0 .rodata @4118 */ -#pragma push -#pragma force_active on -SECTION_RODATA static f32 const lit_4118 = 1.0f / 20.0f; -COMPILER_STRIP_GATE(0x806946E8, &lit_4118); -#pragma pop - -/* 806946EC-806946F0 00005C 0004+00 0/3 0/0 0/0 .rodata @4119 */ -#pragma push -#pragma force_active on -SECTION_RODATA static f32 const lit_4119 = 20.0f; -COMPILER_STRIP_GATE(0x806946EC, &lit_4119); -#pragma pop - -/* 806946F0-806946F4 000060 0004+00 0/5 0/0 0/0 .rodata @4120 */ -#pragma push -#pragma force_active on -SECTION_RODATA static f32 const lit_4120 = 1.0f / 10.0f; -COMPILER_STRIP_GATE(0x806946F0, &lit_4120); -#pragma pop - -/* 806946F4-806946F8 000064 0004+00 0/1 0/0 0/0 .rodata @4121 */ -#pragma push -#pragma force_active on -SECTION_RODATA static f32 const lit_4121 = 35.0f; -COMPILER_STRIP_GATE(0x806946F4, &lit_4121); -#pragma pop - /* 80691C24-80691DC4 000B64 01A0+00 1/1 0/0 0/0 .text e_bu_wait__FP10e_bu_class */ -static void e_bu_wait(e_bu_class* param_0) { - // NONMATCHING -} +static void e_bu_wait(e_bu_class* i_this) { + fopAc_ac_c* actor = &i_this->enemy; + int anm_frame = i_this->modelMorf->getFrame(); -/* ############################################################################################## */ -/* 806946F8-806946FC 000068 0004+00 0/4 0/0 0/0 .rodata @4142 */ -#pragma push -#pragma force_active on -SECTION_RODATA static f32 const lit_4142 = 10.0f; -COMPILER_STRIP_GATE(0x806946F8, &lit_4142); -#pragma pop + switch (i_this->mode) { + case 0: + anm_init(i_this, 6, 1.0f, 0, 0.0f); + i_this->mode = 1; + break; + case 1: + if (pl_check(i_this, i_this->pl_search_range, 1)) { + i_this->mode = 2; + i_this->modelMorf->setPlaySpeed(1.0f); + } + break; + case 2: + if (anm_frame == 36) { + i_this->sound.startCreatureSound(Z2SE_EN_BU_WING, 0, -1); + } + + if (anm_frame >= 37) { + cLib_addCalc2(&actor->current.pos.y, 100.0f + actor->home.pos.y, 0.05f, 20.0f); + } + + if (anm_frame >= JREG_S(0) + 41) { + i_this->mode = 3; + anm_init(i_this, 7, 1.0f + JREG_F(12), 2, 1.0f + cM_rndF(0.1f)); + actor->current.pos.y += 35.0f + JREG_F(13); + i_this->timers[0] = 30; + } + break; + case 3: + cLib_addCalc2(&actor->current.pos.y, 100.0f + actor->home.pos.y, 0.05f, 20.0f); + + if (i_this->timers[0] == 0) { + i_this->action = ACTION_FIGHT_FLY; + i_this->mode = 1; + } + break; + } +} /* 80691DC4-80691F10 000D04 014C+00 1/1 0/0 0/0 .text e_bu_fight_fly__FP10e_bu_class */ -static void e_bu_fight_fly(e_bu_class* param_0) { - // NONMATCHING +static void e_bu_fight_fly(e_bu_class* i_this) { + fopAc_ac_c* actor = &i_this->enemy; + fopAc_ac_c* player = dComIfGp_getPlayer(0); + + switch (i_this->mode) { + case 0: + anm_init(i_this, 7, 10.0f, 2, 1.0f + cM_rndF(0.1f)); + i_this->mode = 1; + break; + case 1: + if (!pl_check(i_this, 2000.0f, 1)) { + if (!path_check(i_this)) { + i_this->action = ACTION_FLY; + i_this->mode = 1; + } else { + i_this->action = ACTION_PATH_FLY; + i_this->mode = 1; + } + } else if (pl_check(i_this, l_HIO.attack_range, 1)) { + i_this->action = ACTION_FIGHT; + i_this->mode = 0; + } + break; + } + + cLib_addCalc2(&actor->speedF, l_HIO.fly_speed, 1.0f, 0.1f * l_HIO.fly_speed); + i_this->move_pos = player->current.pos; + fly_move(i_this); } -/* ############################################################################################## */ -/* 806946FC-80694700 00006C 0004+00 0/1 0/0 0/0 .rodata @4205 */ -#pragma push -#pragma force_active on -SECTION_RODATA static f32 const lit_4205 = 12288.0f; -COMPILER_STRIP_GATE(0x806946FC, &lit_4205); -#pragma pop - -/* 80694700-80694704 000070 0004+00 0/2 0/0 0/0 .rodata @4206 */ -#pragma push -#pragma force_active on -SECTION_RODATA static f32 const lit_4206 = 150.0f; -COMPILER_STRIP_GATE(0x80694700, &lit_4206); -#pragma pop - /* 80691F10-8069222C 000E50 031C+00 1/1 0/0 0/0 .text e_bu_fight__FP10e_bu_class */ -static void e_bu_fight(e_bu_class* param_0) { - // NONMATCHING +static void e_bu_fight(e_bu_class* i_this) { + fopAc_ac_c* actor = &i_this->enemy; + fopAc_ac_c* player = dComIfGp_getPlayer(0); + cXyz sp24; + cXyz sp18; + s16 sp8 = player->shape_angle.y; + + switch (i_this->mode) { + case 0: + i_this->modelMorf->setPlaySpeed(1.0f); + i_this->mode = 1; + i_this->timers[0] = 0; + i_this->timers[1] = 30.0f + cM_rndF(100.0f); + break; + case 1: + if (i_this->timers[0] == 0) { + cMtx_YrotS(*calc_mtx, sp8 + (s16)cM_rndFX(12288.0f)); + sp24.x = 0.0f; + sp24.y = 150.0f + cM_rndF(100.0f); + sp24.z = 150.0f + cM_rndF(150.0f); + MtxPosition(&sp24, &i_this->move_pos); + i_this->move_pos += player->current.pos; + sp24 = i_this->move_pos - actor->current.pos; + cMtx_YrotS(*calc_mtx, cM_atan2s(sp24.x, sp24.z)); + cMtx_XrotM(*calc_mtx, -cM_atan2s(sp24.y, JMAFastSqrt((sp24.x * sp24.x) + (sp24.z * sp24.z)))); + + sp24.x = 0.0f; + sp24.y = 0.0f; + sp24.z = l_HIO.attack_speed; + MtxPosition(&sp24, &actor->speed); + i_this->timers[0] = 10.0f + cM_rndF(30.0f); + i_this->field_0x690 = 0.0f; + } + + if (i_this->timers[1] == 0) { + i_this->timers[1] = 30.0f + cM_rndF(100.0f); + i_this->action = ACTION_ATTACK; + i_this->mode = 0; + } + break; + } + + cLib_addCalc2(&actor->current.pos.x, i_this->move_pos.x, 0.2f, i_this->field_0x690 * fabsf(actor->speed.x)); + cLib_addCalc2(&actor->current.pos.y, i_this->move_pos.y, 0.2f, i_this->field_0x690 * fabsf(actor->speed.y)); + cLib_addCalc2(&actor->current.pos.z, i_this->move_pos.z, 0.2f, i_this->field_0x690 * fabsf(actor->speed.z)); + cLib_addCalc2(&i_this->field_0x690, 1.0f, 1.0f, 0.1f); + cLib_addCalcAngleS2(&actor->current.angle.y, i_this->angle_to_player, 4, 0x800); + + if (!pl_check(i_this, 2000.0f, 1)) { + if (!path_check(i_this)) { + i_this->action = ACTION_FLY; + i_this->mode = 1; + } else { + i_this->action = ACTION_PATH_FLY; + i_this->mode = 1; + } + } } -/* ############################################################################################## */ -/* 80694704-80694708 000074 0004+00 0/1 0/0 0/0 .rodata @4258 */ -#pragma push -#pragma force_active on -SECTION_RODATA static f32 const lit_4258 = 2.0f; -COMPILER_STRIP_GATE(0x80694704, &lit_4258); -#pragma pop - -/* 80694708-8069470C 000078 0004+00 0/1 0/0 0/0 .rodata @4259 */ -#pragma push -#pragma force_active on -SECTION_RODATA static f32 const lit_4259 = 120.0f; -COMPILER_STRIP_GATE(0x80694708, &lit_4259); -#pragma pop - -/* 8069470C-80694710 00007C 0004+00 0/1 0/0 0/0 .rodata @4260 */ -#pragma push -#pragma force_active on -SECTION_RODATA static f32 const lit_4260 = 3000.0f; -COMPILER_STRIP_GATE(0x8069470C, &lit_4260); -#pragma pop - -/* 80694710-80694714 000080 0004+00 0/1 0/0 0/0 .rodata @4261 */ -#pragma push -#pragma force_active on -SECTION_RODATA static f32 const lit_4261 = 70.0f; -COMPILER_STRIP_GATE(0x80694710, &lit_4261); -#pragma pop - /* 8069222C-8069243C 00116C 0210+00 1/1 0/0 0/0 .text e_bu_attack__FP10e_bu_class */ -static void e_bu_attack(e_bu_class* param_0) { - // NONMATCHING +static void e_bu_attack(e_bu_class* i_this) { + fopAc_ac_c* actor = &i_this->enemy; + fopAc_ac_c* player = dComIfGp_getPlayer(0); + cXyz sp18; + cXyz spC; + f32 var_f31 = 0.0f; + + i_this->field_0x690 = 0.0f; + + switch (i_this->mode) { + case 0: + i_this->modelMorf->setPlaySpeed(2.0f); + i_this->mode = 1; + i_this->timers[1] = 20; + break; + case 1: + i_this->move_pos = player->current.pos; + i_this->move_pos.y += 120.0f; + i_this->field_0x690 = 2.0f; + + if (i_this->timers[1] == 0) { + i_this->mode = 2; + i_this->timers[0] = BREG_S(7) + 10; + i_this->sound.startCreatureVoice(Z2SE_EN_BU_V_ATK, -1); + } + + cLib_addCalcAngleS2(&i_this->jaw_rot, -(3000.0f + (2000.0f * cM_ssin(i_this->lifetime * 0x3100))), 1, 0x1000); + break; + case 2: + var_f31 = l_HIO.dash_speed; + + if (i_this->ccSph.ChkAtShieldHit()) { + i_this->action = ACTION_CHANCE; + i_this->mode = 0; + i_this->hit_speed = 70.0f + TREG_F(19); + i_this->hit_rot = actor->shape_angle.y; + i_this->is_dead = FALSE; + } else if (i_this->timers[0] == 0) { + i_this->mode = 3; + } + break; + case 3: + if (actor->speedF <= 1.0f) { + i_this->action = ACTION_FIGHT; + i_this->mode = 0; + } + break; + } + + cLib_addCalc2(&actor->speedF, var_f31, 1.0f, 0.2f * l_HIO.dash_speed); + fly_move(i_this); } -/* ############################################################################################## */ -/* 80694714-80694718 000084 0004+00 0/1 0/0 0/0 .rodata @4299 */ -#pragma push -#pragma force_active on -SECTION_RODATA static f32 const lit_4299 = 500.0f; -COMPILER_STRIP_GATE(0x80694714, &lit_4299); -#pragma pop - -/* 80694718-8069471C 000088 0004+00 0/3 0/0 0/0 .rodata @4300 */ -#pragma push -#pragma force_active on -SECTION_RODATA static f32 const lit_4300 = 200.0f; -COMPILER_STRIP_GATE(0x80694718, &lit_4300); -#pragma pop - -/* 8069471C-80694720 00008C 0004+00 0/2 0/0 0/0 .rodata @4301 */ -#pragma push -#pragma force_active on -SECTION_RODATA static f32 const lit_4301 = 3.0f / 10.0f; -COMPILER_STRIP_GATE(0x8069471C, &lit_4301); -#pragma pop - /* 8069243C-8069262C 00137C 01F0+00 1/1 0/0 0/0 .text e_bu_fly__FP10e_bu_class */ -static void e_bu_fly(e_bu_class* param_0) { - // NONMATCHING -} +static void e_bu_fly(e_bu_class* i_this) { + fopAc_ac_c* actor = &i_this->enemy; + fopAc_ac_c* player = dComIfGp_getPlayer(0); + cXyz sp14; -/* ############################################################################################## */ -/* 80694720-80694724 000090 0004+00 0/3 0/0 0/0 .rodata @4362 */ -#pragma push -#pragma force_active on -SECTION_RODATA static f32 const lit_4362 = 3.0f; -COMPILER_STRIP_GATE(0x80694720, &lit_4362); -#pragma pop + switch (i_this->mode) { + case 0: + anm_init(i_this, 7, 10.0f, 2, 1.0f + cM_rndF(0.1f)); + i_this->mode = 1; + break; + case 1: + if (i_this->timers[0] == 0) { + i_this->move_pos.x = actor->home.pos.x + cM_rndFX(500.0f); + i_this->move_pos.y = actor->home.pos.y + cM_rndFX(200.0f); + i_this->move_pos.z = actor->home.pos.z + cM_rndFX(500.0f); + sp14 = i_this->move_pos - actor->current.pos; + cMtx_YrotS(*calc_mtx, cM_atan2s(sp14.x, sp14.z)); + cMtx_XrotM(*calc_mtx, -cM_atan2s(sp14.y, JMAFastSqrt((sp14.x * sp14.x) + (sp14.z * sp14.z)))); + sp14.x = 0.0f; + sp14.y = 0.0f; + sp14.z = l_HIO.attack_speed; + MtxPosition(&sp14, &actor->speed); + i_this->timers[0] = 10.0f + cM_rndF(30.0f); + i_this->field_0x690 = 0.0f; + } + break; + } + + cLib_addCalc2(&actor->speedF, l_HIO.fly_speed, 1.0f, 0.3f * l_HIO.fly_speed); + fly_move(i_this); + + if (pl_check(i_this, i_this->pl_search_range, 1)) { + i_this->action = ACTION_FIGHT_FLY; + i_this->mode = 1; + } +} /* 8069262C-80692930 00156C 0304+00 1/1 0/0 0/0 .text e_bu_path_fly__FP10e_bu_class */ -static void e_bu_path_fly(e_bu_class* param_0) { - // NONMATCHING +static void e_bu_path_fly(e_bu_class* i_this) { + fopAc_ac_c* actor = &i_this->enemy; + fopAc_ac_c* player = dComIfGp_getPlayer(0); + cXyz sp18; + + switch (i_this->mode) { + case 0: + anm_init(i_this, 7, 3.0f, 2, 1.0f + cM_rndF(0.1f)); + i_this->mode = 1; + /* fallthrough */ + case 1: + i_this->now_path_pntNo += i_this->path_step; + if (i_this->now_path_pntNo >= (s8)i_this->ppd->m_num) { + if (dPath_ChkClose(i_this->ppd)) { + i_this->now_path_pntNo = 0; + } else { + i_this->path_step = -1; + i_this->now_path_pntNo = i_this->ppd->m_num - 2; + } + + int next_path_id = i_this->ppd->m_nextID; + if (next_path_id != 0xFFFF) { + i_this->ppd = dPath_GetRoomPath(next_path_id, fopAcM_GetRoomNo(actor)); + JUT_ASSERT(919, i_this->ppd != 0); + } + } else if (i_this->now_path_pntNo < 0) { + i_this->path_step = 1; + i_this->now_path_pntNo = 1; + } + /* fallthrough */ + case 2: + i_this->mode = 3; + + dPnt* pnt = i_this->ppd->m_points; + pnt += i_this->now_path_pntNo; + + i_this->field_0x690 = TREG_F(7); + i_this->move_pos.x = pnt->m_position.x + cM_rndFX(150.0f); + i_this->move_pos.y = pnt->m_position.y + cM_rndFX(150.0f); + i_this->move_pos.z = pnt->m_position.z + cM_rndFX(150.0f); + break; + case 3: + sp18 = i_this->move_pos - actor->current.pos; + if (sp18.abs() < 200.0f + (10.0f * TREG_F(10))) { + i_this->mode = 1; + } + break; + } + + cLib_addCalc2(&actor->speedF, l_HIO.fly_speed, 1.0f, 0.3f * l_HIO.fly_speed); + fly_move(i_this); + + if (pl_check(i_this, i_this->pl_search_range, 1)) { + i_this->action = ACTION_FIGHT_FLY; + i_this->mode = 1; + } } -/* ############################################################################################## */ -/* 80694724-80694728 000094 0004+00 0/1 0/0 0/0 .rodata @4381 */ -#pragma push -#pragma force_active on -SECTION_RODATA static f32 const lit_4381 = 0.5f; -COMPILER_STRIP_GATE(0x80694724, &lit_4381); -#pragma pop - -/* 80694728-8069472C 000098 0004+00 0/1 0/0 0/0 .rodata @4382 */ -#pragma push -#pragma force_active on -SECTION_RODATA static f32 const lit_4382 = 65536.0f; -COMPILER_STRIP_GATE(0x80694728, &lit_4382); -#pragma pop - -/* 8069472C-80694730 00009C 0004+00 0/1 0/0 0/0 .rodata @4383 */ -#pragma push -#pragma force_active on -SECTION_RODATA static f32 const lit_4383 = 5.0f; -COMPILER_STRIP_GATE(0x8069472C, &lit_4383); -#pragma pop - /* 80692930-80692AF4 001870 01C4+00 1/1 0/0 0/0 .text e_bu_chance__FP10e_bu_class */ -static void e_bu_chance(e_bu_class* param_0) { - // NONMATCHING +static s8 e_bu_chance(e_bu_class* i_this) { + fopAc_ac_c* actor = &i_this->enemy; + s8 is_smoke_eff = FALSE; + + switch (i_this->mode) { + case 0: + anm_init(i_this, 7, 3.0f, 2, 1.5f); + i_this->mode = 1; + i_this->timers[0] = 100.0f + cM_rndF(30.0f); + actor->speed.set(0.0f, 0.0f, 0.0f); + break; + case 1: + if (i_this->acch.ChkGroundHit()) { + actor->speed.y = JREG_F(7) + (20.0f + cM_rndF(10.0f)); + actor->speed.x = cM_rndFX(20.0f + JREG_F(6)); + actor->speed.z = cM_rndFX(20.0f + JREG_F(6)); + + if (cM_rndF(1.0f) < 0.5f) { + i_this->field_0x69e.z = 0; + } else { + i_this->field_0x69e.z = -0x8000; + } + + i_this->field_0x69e.y = cM_rndF(65536.0f); + is_smoke_eff = TRUE; + i_this->sound.startCreatureSound(Z2SE_EN_BU_NODMG_BOUND, 0, -1); + } + + if (i_this->timers[0] == 0) { + actor->current.angle.z = 0; + i_this->action = ACTION_FIGHT; + i_this->mode = 0; + return is_smoke_eff; + } + break; + } + + actor->current.pos += actor->speed; + actor->speed.y -= 5.0f + JREG_F(8); + cLib_addCalcAngleS2(&actor->current.angle.y, i_this->field_0x69e.y, 2, 0x1000); + cLib_addCalcAngleS2(&actor->current.angle.z, i_this->field_0x69e.z, 1, 0x1000); + return is_smoke_eff; } /* 80692AF4-80693074 001A34 0580+00 2/1 0/0 0/0 .text e_bu_head__FP10e_bu_class */ -static void e_bu_head(e_bu_class* param_0) { - // NONMATCHING +static s8 e_bu_head(e_bu_class* i_this) { + fopAc_ac_c* actor = &i_this->enemy; + cXyz sp20; + cXyz sp14; + s8 is_smoke_eff = FALSE; + + switch (i_this->mode) { + case 0: + anm_init(i_this, 8, 3.0f, 0, 1.0f); + i_this->mode = 1; + break; + case 1: + i_this->head_rot_x += 6000; + + if (i_this->acch.ChkGroundHit()) { + actor->speedF *= 0.5f; + actor->speed.y = 30.0f; + i_this->mode = 2; + i_this->head_rot_y += (s16)cM_rndFX(10000.0f); + + if (cM_rndF(1.0f) < 0.5f) { + i_this->field_0x6bc = 0x4000; + } else { + i_this->field_0x6bc = -0x4000; + } + + is_smoke_eff = TRUE; + i_this->sound.startCreatureSound(Z2SE_EN_BU_DMG_BOUND, 20, -1); + } + break; + case 2: + i_this->head_rot_x += (s16)(actor->speedF * (400.0f + AREG_F(1))); + + if (!i_this->acch.ChkGroundHit()) { + break; + } + + i_this->mode = 3; + actor->speed.y = 20.0f; + case 3: + i_this->head_rot_x += (s16)(actor->speedF * (400.0f + AREG_F(1))); + i_this->head_rot_y += i_this->field_0x6b8; + + cLib_addCalc2(&actor->speedF, 10.0f, 1.0f, 2.0f + TREG_F(16)); + if (actor->speedF <= 10.0f) { + i_this->field_0x6b8 = 0; + if (i_this->head_rot_x <= 2000 && i_this->head_rot_x > -2000) { + i_this->mode = 4; + i_this->timers[1] = 30.0f + cM_rndF(20.0f); + actor->speedF = 0.0f; + } + } else if (i_this->timers[2] == 0) { + i_this->timers[2] = cM_rndF(10.0f); + i_this->field_0x6b8 = cM_rndFX(4000.0f); + + actor->speed.y = cM_rndF(actor->speedF); + if (actor->speed.y > 20.0f) { + actor->speed.y = 20.0f; + } + } + + cLib_addCalcAngleS2(&actor->current.angle.z, i_this->field_0x6bc, 1, 0x400); + break; + case 4: + cLib_addCalcAngleS2(&i_this->head_rot_x, 0, 1, 0x1000); + cLib_addCalcAngleS2(&actor->current.angle.z, i_this->field_0x6bc, 1, 0x1000); + + if (i_this->timers[1] == 0) { + i_this->mode = 10; + anm_init(i_this, 5, 3.0f, 2, 1.0f); + } + break; + case 10: + if (i_this->timers[1] == 0) { + i_this->timers[0] = 200.0f + cM_rndF(100.0f); + i_this->timers[1] = 5.0f + cM_rndF(10.0f); + i_this->mode = 12; + } + break; + case 11: + if (i_this->acch.ChkGroundHit()) { + i_this->timers[1] = 5.0f + cM_rndF(10.0f); + i_this->mode = 12; + actor->speedF = 0.0f; + is_smoke_eff = TRUE; + i_this->sound.startCreatureSound(Z2SE_EN_BU_MOVE_BOUND, 0, -1); + } + break; + case 12: + if (i_this->timers[1] == 0) { + if (i_this->timers[0] == 0) { + i_this->action = ACTION_FIGHT; + i_this->mode = 0; + anm_init(i_this, 7, 10.0f, 2, 1.0f + cM_rndF(0.1f)); + } else { + actor->current.angle.y += (s16)cM_rndFX(8000.0f); + i_this->mode = 11; + actor->speed.y = JREG_F(7) + (20.0f + cM_rndF(10.0f)); + actor->speedF = 10.0f + cM_rndF(10.0f); + } + } + break; + } + + if (i_this->mode < 10) { + cMtx_YrotS(*calc_mtx, i_this->head_rot_y); + if (i_this->timers[0] == 0 && i_this->acch.ChkWallHit()) { + actor->speedF *= -0.4f; + i_this->timers[0] = 30; + } + i_this->field_0x6a8 = (15.0f + AREG_F(3)) * l_HIO.base_size; + } else { + cLib_addCalcAngleS2(&i_this->head_rot_y, 0, 2, 0x800); + cLib_addCalcAngleS2(&actor->current.angle.z, 0, 2, 0x800); + cMtx_YrotS(*calc_mtx, actor->current.angle.y); + cLib_addCalc2(&i_this->field_0x6a8, (20.0f + AREG_F(4)) * l_HIO.base_size, 1.0f, 2.0f); + } + + sp20.x = 0.0f; + sp20.y = 0.0f; + sp20.z = actor->speedF; + MtxPosition(&sp20, &sp14); + actor->current.pos.x += sp14.x; + actor->current.pos.z += sp14.z; + actor->current.pos.y += actor->speed.y; + actor->speed.y -= 7.0f + JREG_F(8); + return is_smoke_eff; } /* 80693074-80693528 001FB4 04B4+00 2/1 0/0 0/0 .text action__FP10e_bu_class */ -static void action(e_bu_class* param_0) { - // NONMATCHING +static s8 action(e_bu_class* i_this) { + fopAc_ac_c* actor = &i_this->enemy; + daPy_py_c* player = (daPy_py_c*)dComIfGp_getPlayer(0); + cXyz sp30; + cXyz sp24; + + i_this->angle_to_player = fopAcM_searchPlayerAngleY(actor); + i_this->dist_to_player = fopAcM_searchPlayerDistance(actor); + + damage_check(i_this); + i_this->ccSph.OffAtVsPlayerBit(); + + s8 do_smoke_eff = FALSE; + s8 is_mtrl_eff = TRUE; + s8 down_status = 0; + + switch (i_this->action) { + case ACTION_WAIT: + e_bu_wait(i_this); + i_this->field_0x6a8 = 0.0f; + is_mtrl_eff = FALSE; + break; + case ACTION_FIGHT_FLY: + e_bu_fight_fly(i_this); + break; + case ACTION_FIGHT: + e_bu_fight(i_this); + break; + case ACTION_ATTACK: + e_bu_attack(i_this); + i_this->ccSph.OnAtVsPlayerBit(); + break; + case ACTION_FLY: + e_bu_fly(i_this); + break; + case ACTION_PATH_FLY: + e_bu_path_fly(i_this); + break; + case ACTION_CHANCE: + do_smoke_eff = e_bu_chance(i_this); + is_mtrl_eff = FALSE; + down_status = 1; + break; + case ACTION_HEAD: + do_smoke_eff = e_bu_head(i_this); + is_mtrl_eff = FALSE; + down_status = 1; + break; + case ACTION_DEAD: + actor->current.pos.y += actor->speed.y; + actor->speed.y -= 7.0f + JREG_F(8); + i_this->invulnerabilityTimer = 10; + + if (i_this->timers[3] == 0) { + bu_disappear(actor); + fopAcM_delete(actor); + } + + is_mtrl_eff = FALSE; + down_status = 2; + break; + } + + fopEn_enemy_c* enemy = (fopEn_enemy_c*)actor; + + if (down_status == 1) { + enemy->onDownFlg(); + enemy->setDownPos(&actor->current.pos); + } else { + enemy->offDownFlg(); + } + + if (fopAcM_checkHookCarryNow(actor)) { + actor->speed.y = 0.0f; + actor->speedF = 0.0f; + } + + if (enemy->checkCutDownHitFlg()) { + enemy->offCutDownHitFlg(); + enemy->offDownFlg(); + actor->health = 0; + i_this->timers[3] = 10; + i_this->action = ACTION_DEAD; + + i_this->sound.startCreatureVoice(Z2SE_EN_BU_V_DEAD, -1); + i_this->modelMorf->setPlaySpeed(0.0f); + i_this->ccSph.OffCoSetBit(); + } + + if (i_this->hit_speed > 0.1f) { + sp30.x = 0.0f; + sp30.y = 0.0f; + sp30.z = -i_this->hit_speed; + cMtx_YrotS(*calc_mtx, i_this->hit_rot); + MtxPosition(&sp30, &sp24); + actor->current.pos += sp24; + + cLib_addCalc0(&i_this->hit_speed, 1.0f, 5.0f); + + if (i_this->is_dead) { + i_this->invulnerabilityTimer = 3; + actor->shape_angle.y += 0x1300; + actor->shape_angle.z += 0x1700; + + if (i_this->hit_speed <= 1.0f || i_this->acch.ChkWallHit()) { + bu_disappear(actor); + fopAcM_delete(actor); + } + } + } else { + cLib_addCalcAngleS2(&actor->shape_angle.y, actor->current.angle.y, 4, 0x2000); + cLib_addCalcAngleS2(&actor->shape_angle.x, 0, 4, 0x2000); + cLib_addCalcAngleS2(&actor->shape_angle.z, actor->current.angle.z, 4, 0x2000); + } + + actor->current.pos.y -= i_this->field_0x6a8; + actor->old.pos.y -= i_this->field_0x6a8; + i_this->acch.CrrPos(dComIfG_Bgsp()); + actor->current.pos.y += i_this->field_0x6a8; + actor->old.pos.y += i_this->field_0x6a8; + + if (down_status != 2) { + cLib_addCalc2(&i_this->field_0x6a8, 30.0f * l_HIO.base_size, 1.0f, 1.0f); + } + + if (player->current.pos.y - 30.0f < actor->current.pos.y && i_this->action != ACTION_WAIT) { + if (fopAcM_otherBgCheck(player, actor)) { + fopAcM_OffStatus(actor, 0); + actor->attention_info.flags = 0; + } else { + fopAcM_OnStatus(actor, 0); + actor->attention_info.flags = 4; + } + } else { + fopAcM_OffStatus(actor, 0); + actor->attention_info.flags = 0; + } + + if (do_smoke_eff) { + fopAcM_effSmokeSet1(&i_this->field_0xa7c, &i_this->field_0xa80, &actor->current.pos, &actor->shape_angle, 0.8f + NREG_F(18), &actor->tevStr, 1); + } + + cLib_addCalcAngleS2(&i_this->jaw_rot, 0, 2, 0x400); + + cXyz effsize(0.75f, 0.75f, 0.75f); + setMidnaBindEffect((fopEn_enemy_c*)actor, &i_this->sound, &actor->eyePos, &effsize); + return is_mtrl_eff; } -/* ############################################################################################## */ -/* 80694730-80694734 0000A0 0004+00 0/0 0/0 0/0 .rodata @4451 */ -#pragma push -#pragma force_active on -SECTION_RODATA static f32 const lit_4451 = 10000.0f; -COMPILER_STRIP_GATE(0x80694730, &lit_4451); -#pragma pop - -/* 80694734-80694738 0000A4 0004+00 0/0 0/0 0/0 .rodata @4452 */ -#pragma push -#pragma force_active on -SECTION_RODATA static f32 const lit_4452 = 400.0f; -COMPILER_STRIP_GATE(0x80694734, &lit_4452); -#pragma pop - -/* 80694738-8069473C 0000A8 0004+00 0/0 0/0 0/0 .rodata @4453 */ -#pragma push -#pragma force_active on -SECTION_RODATA static f32 const lit_4453 = 4000.0f; -COMPILER_STRIP_GATE(0x80694738, &lit_4453); -#pragma pop - -/* 8069473C-80694740 0000AC 0004+00 0/0 0/0 0/0 .rodata @4454 */ -#pragma push -#pragma force_active on -SECTION_RODATA static f32 const lit_4454 = 8000.0f; -COMPILER_STRIP_GATE(0x8069473C, &lit_4454); -#pragma pop - -/* 80694740-80694744 0000B0 0004+00 0/0 0/0 0/0 .rodata @4455 */ -#pragma push -#pragma force_active on -SECTION_RODATA static f32 const lit_4455 = -2.0f / 5.0f; -COMPILER_STRIP_GATE(0x80694740, &lit_4455); -#pragma pop - -/* 80694744-80694748 0000B4 0004+00 0/0 0/0 0/0 .rodata @4456 */ -#pragma push -#pragma force_active on -SECTION_RODATA static f32 const lit_4456 = 7.0f; -COMPILER_STRIP_GATE(0x80694744, &lit_4456); -#pragma pop - -/* 80694748-8069474C 0000B8 0004+00 0/1 0/0 0/0 .rodata @4545 */ -#pragma push -#pragma force_active on -SECTION_RODATA static f32 const lit_4545 = 4.0f / 5.0f; -COMPILER_STRIP_GATE(0x80694748, &lit_4545); -#pragma pop - -/* 8069474C-80694750 0000BC 0004+00 0/0 0/0 0/0 .rodata @4546 */ -#pragma push -#pragma force_active on -SECTION_RODATA static f32 const lit_4546 = 0.75f; -COMPILER_STRIP_GATE(0x8069474C, &lit_4546); -#pragma pop - -/* 80694750-80694754 0000C0 0004+00 0/1 0/0 0/0 .rodata @4716 */ -#pragma push -#pragma force_active on -SECTION_RODATA static f32 const lit_4716 = 4.0f; -COMPILER_STRIP_GATE(0x80694750, &lit_4716); -#pragma pop - -/* 80694754-80694758 0000C4 0004+00 0/1 0/0 0/0 .rodata @4717 */ -#pragma push -#pragma force_active on -SECTION_RODATA static f32 const lit_4717 = 6.0f / 5.0f; -COMPILER_STRIP_GATE(0x80694754, &lit_4717); -#pragma pop - -/* 80694758-8069475C 0000C8 0004+00 0/1 0/0 0/0 .rodata @4718 */ -#pragma push -#pragma force_active on -SECTION_RODATA static f32 const lit_4718 = 30000.0f; -COMPILER_STRIP_GATE(0x80694758, &lit_4718); -#pragma pop - /* 80693528-80693A30 002468 0508+00 2/1 0/0 0/0 .text daE_BU_Execute__FP10e_bu_class */ -static void daE_BU_Execute(e_bu_class* param_0) { - // NONMATCHING +static int daE_BU_Execute(e_bu_class* i_this) { + fopAc_ac_c* actor = &i_this->enemy; + cXyz sp34; + cXyz sp28; + + i_this->lifetime++; + + for (int i = 0; i < 4; i++) { + if (i_this->timers[i] != 0) { + i_this->timers[i]--; + } + } + + if (i_this->invulnerabilityTimer != 0) { + i_this->invulnerabilityTimer--; + } + + s8 do_mtrl_eff = action(i_this); + + mDoMtx_stack_c::transS(actor->current.pos.x, actor->current.pos.y, actor->current.pos.z); + mDoMtx_stack_c::YrotM(i_this->head_rot_y); + mDoMtx_stack_c::XrotM(i_this->head_rot_x); + mDoMtx_stack_c::YrotM(-i_this->head_rot_y); + mDoMtx_stack_c::YrotM(actor->shape_angle.y); + mDoMtx_stack_c::ZrotM(actor->shape_angle.z); + mDoMtx_stack_c::scaleM(l_HIO.base_size, l_HIO.base_size, l_HIO.base_size); + + J3DModel* model = i_this->modelMorf->getModel(); + model->setBaseTRMtx(mDoMtx_stack_c::get()); + + i_this->modelMorf->play(0, dComIfGp_getReverb(fopAcM_GetRoomNo(actor))); + + if (i_this->anm == 7 && i_this->modelMorf->checkFrame(4.0f)) { + if (i_this->modelMorf->getPlaySpeed() > 1.2f) { + i_this->sound.startCreatureSound(Z2SE_EN_BU_WING_L, 0, -1); + } else { + i_this->sound.startCreatureSound(Z2SE_EN_BU_WING, 0, -1); + } + } + + i_this->anm_frame = i_this->modelMorf->getFrame(); + i_this->modelMorf->modelCalc(); + + actor->eyePos = actor->current.pos; + actor->eyePos.y += 30.0f; + + actor->attention_info.position = actor->eyePos; + actor->attention_info.position.y += 20.0f; + + sp34.set(0.0f, 0.0f, 0.0f); + MtxPosition(&sp34, &sp28); + + if (i_this->invulnerabilityTimer != 0) { + sp28.z += 30000.0f; + } + + i_this->ccSph.SetC(sp28); + i_this->ccSph.SetR((30.0f + JREG_F(3)) * l_HIO.base_size); + dComIfG_Ccsp()->Set(&i_this->ccSph); + + if (do_mtrl_eff && i_this->type != TYPE_NORMAL) { + i_this->field_0x6c0 = actor->current.pos - actor->old.pos; + i_this->field_0x6c0 *= 0.8f; + + if (i_this->type == TYPE_FIRE) { + i_this->sound.startCreatureSoundLevel(Z2SE_EN_BU_LV_FIRE, 0, -1); + + for (int i = 0; i < 4; i++) { + static u16 fire_name[] = {0x821D, 0x821E, 0x821F, 0x8220}; + i_this->mtrl_emitter_id[i] = dComIfGp_particle_set(i_this->mtrl_emitter_id[i], fire_name[i], &actor->current.pos, NULL, NULL); + + JPABaseEmitter* emitter = dComIfGp_particle_getEmitter(i_this->mtrl_emitter_id[i]); + if (emitter != NULL) { + emitter->setGlobalSRTMatrix(i_this->modelMorf->getModel()->getAnmMtx(0)); + emitter->setParticleCallBackPtr(dPa_control_c::getParticleTracePCB()); + emitter->setUserWork((u32)&i_this->field_0x6c0); + } + } + } else { + for (int i = 0; i < 3; i++) { + static u16 ice_name[] = {0x8221, 0x8222, 0x8223}; + i_this->mtrl_emitter_id[i] = dComIfGp_particle_set(i_this->mtrl_emitter_id[i], ice_name[i], &actor->current.pos, NULL, NULL); + + JPABaseEmitter* emitter = dComIfGp_particle_getEmitter(i_this->mtrl_emitter_id[i]); + if (emitter != NULL) { + emitter->setGlobalSRTMatrix(i_this->modelMorf->getModel()->getAnmMtx(0)); + emitter->setParticleCallBackPtr(dPa_control_c::getParticleTracePCB()); + emitter->setUserWork((u32)&i_this->field_0x6c0); + } + } + } + } + + return 1; } /* 80693A30-80693A38 002970 0008+00 1/0 0/0 0/0 .text daE_BU_IsDelete__FP10e_bu_class */ -static bool daE_BU_IsDelete(e_bu_class* param_0) { - return true; +static int daE_BU_IsDelete(e_bu_class* i_this) { + return 1; } /* 80693A38-80693AA0 002978 0068+00 1/0 0/0 0/0 .text daE_BU_Delete__FP10e_bu_class */ -static void daE_BU_Delete(e_bu_class* param_0) { - // NONMATCHING +static int daE_BU_Delete(e_bu_class* i_this) { + fopAc_ac_c* actor = &i_this->enemy; + fpc_ProcID id = fopAcM_GetID(actor); + dComIfG_resDelete(&i_this->phase, "E_BU"); + + if (i_this->HIOInit != 0) { + l_HIOInit = 0; + mDoHIO_DELETE_CHILD(l_HIO.id); + } + + if (actor->heap != NULL) { + i_this->modelMorf->stopZelAnime(); + } + + return 1; } /* 80693AA0-80693BD4 0029E0 0134+00 1/1 0/0 0/0 .text useHeapInit__FP10fopAc_ac_c */ -static void useHeapInit(fopAc_ac_c* param_0) { - // NONMATCHING +static int useHeapInit(fopAc_ac_c* i_this) { + e_bu_class* a_this = (e_bu_class*)i_this; + + a_this->modelMorf = new mDoExt_McaMorfSO((J3DModelData*)dComIfG_getObjectRes("E_BU", 11), NULL, NULL, (J3DAnmTransform*)dComIfG_getObjectRes("E_BU", 7), 2, 1.0f, 0, -1, &a_this->sound, 0x80000, 0x11000084); + if (a_this->modelMorf == NULL || a_this->modelMorf->getModel() == NULL) { + return 0; + } + + J3DModel* model = a_this->modelMorf->getModel(); + model->setUserArea((u32)a_this); + + for (u16 i = 0; i < model->getModelData()->getJointNum(); i++) { + model->getModelData()->getJointNodePointer(i)->setCallBack(nodeCallBack); + } + + return 1; } -/* ############################################################################################## */ -/* 8069475C-80694760 0000CC 0004+00 0/1 0/0 0/0 .rodata @4918 */ -#pragma push -#pragma force_active on -SECTION_RODATA static f32 const lit_4918 = -200.0f; -COMPILER_STRIP_GATE(0x8069475C, &lit_4918); -#pragma pop - -/* 80694760-80694768 0000D0 0004+04 0/1 0/0 0/0 .rodata @4919 */ -#pragma push -#pragma force_active on -SECTION_RODATA static f32 const lit_4919[1 + 1 /* padding */] = { - 55.0f, - /* padding */ - 0.0f, -}; -COMPILER_STRIP_GATE(0x80694760, &lit_4919); -#pragma pop - -/* 80694768-80694770 0000D8 0008+00 0/1 0/0 0/0 .rodata @4921 */ -#pragma push -#pragma force_active on -SECTION_RODATA static u8 const lit_4921[8] = { - 0x43, 0x30, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, -}; -COMPILER_STRIP_GATE(0x80694768, &lit_4921); -#pragma pop - -/* 80694770-80694770 0000E0 0000+00 0/0 0/0 0/0 .rodata @stringBase0 */ -#pragma push -#pragma force_active on -SECTION_DEAD static char const* const stringBase_80694775 = "E_bu"; -#pragma pop - /* 80693BD4-80693FC0 002B14 03EC+00 1/0 0/0 0/0 .text daE_BU_Create__FP10fopAc_ac_c */ -static void daE_BU_Create(fopAc_ac_c* param_0) { - // NONMATCHING +static int daE_BU_Create(fopAc_ac_c* i_this) { + e_bu_class* a_this = (e_bu_class*)i_this; + fopAcM_SetupActor(i_this, e_bu_class); + + int phase_state = dComIfG_resLoad(&a_this->phase, "E_BU"); + if (phase_state == cPhs_COMPLEATE_e) { + OS_REPORT("E_BU PARAM %x\n", fopAcM_GetParam(i_this)); + + int swbit = (fopAcM_GetParam(i_this) & 0xFF000000) >> 0x18; + if (swbit != 0xFF && dComIfGs_isSwitch(swbit, fopAcM_GetRoomNo(i_this))) { + return cPhs_ERROR_e; + } + + a_this->prm0 = fopAcM_GetParam(i_this); + a_this->prm1 = (fopAcM_GetParam(i_this) & 0xF00) >> 8; + a_this->type = (fopAcM_GetParam(i_this) & 0xF000) >> 0xC; + a_this->pathNo = (fopAcM_GetParam(i_this) & 0xFF0000) >> 0x10; + + if (a_this->prm0 == 0xFF) { + a_this->prm0 = 0; + } + + if (a_this->prm1 == 0xFF) { + a_this->prm1 = 10; + } + + if (a_this->type == 0xF) { + a_this->type = TYPE_NORMAL; + } + + a_this->pl_search_range = 100.0f * a_this->prm1; + OS_REPORT("E_BU//////////////E_BU SET 1 !!\n"); + + if (!fopAcM_entrySolidHeap(i_this, useHeapInit, 0x15C0)) { + OS_REPORT("//////////////E_BU SET NON !!\n"); + return cPhs_ERROR_e; + } + + OS_REPORT("//////////////E_BU SET 2 !!\n"); + + if (a_this->pathNo != 0xFF) { + a_this->ppd = dPath_GetRoomPath(a_this->pathNo, fopAcM_GetRoomNo(i_this)); + if (a_this->ppd == NULL) { + return cPhs_ERROR_e; + } + + a_this->field_0x5b8 = a_this->pathNo + 1; + a_this->path_step = 1; + a_this->action = ACTION_PATH_FLY; + } else if (a_this->prm0 == 1) { + a_this->action = ACTION_FLY; + } + + if (!l_HIOInit) { + a_this->HIOInit = TRUE; + l_HIOInit = TRUE; + l_HIO.id = mDoHIO_CREATE_CHILD("バブル", &l_HIO); + } + + i_this->attention_info.flags = 4; + fopAcM_SetMtx(i_this, a_this->modelMorf->getModel()->getBaseTRMtx()); + fopAcM_SetMin(i_this, -200.0f, -200.0f, -200.0f); + fopAcM_SetMax(i_this, 200.0f, 200.0f, 200.0f); + + i_this->health = 40; + i_this->field_0x560 = 40; + + static dCcD_SrcSph cc_sph_src = { + { + {0x0, {{AT_TYPE_CSTATUE_SWING, 0x1, 0xd}, {0xd8fbfdff, 0x3}, 0x75}}, // mObj + {dCcD_SE_HARD_BODY, 0x0, 0x0, 0x0, 0x0}, // mGObjAt + {dCcD_SE_NONE, 0x0, 0x0, 0x0, 0x2}, // mGObjTg + {0x0}, // mGObjCo + }, // mObjInf + { + {{0.0f, 0.0f, 0.0f}, 40.0f} // mSph + } // mSphAttr + }; + + a_this->ccStts.Init(Z2SE_SY_TALK_CURSOR_OK, 0, i_this); + a_this->ccSph.Set(cc_sph_src); + a_this->ccSph.SetStts(&a_this->ccStts); + + if (a_this->type == TYPE_FIRE) { + a_this->ccSph.SetAtType(AT_TYPE_100); + a_this->ccSph.SetAtMtrl(dCcD_MTRL_FIRE); + } else if (a_this->type == TYPE_ICE) { + a_this->ccSph.SetAtType(AT_TYPE_100); + a_this->ccSph.SetAtMtrl(dCcD_MTRL_ICE); + } + + a_this->acch.Set(fopAcM_GetPosition_p(i_this), fopAcM_GetOldPosition_p(i_this), i_this, 1, &a_this->acchcir, fopAcM_GetSpeed_p(i_this), NULL, NULL); + a_this->acchcir.SetWall(55.0f, 55.0f); + + a_this->sound.init(&i_this->current.pos, &i_this->eyePos, 3, 1); + a_this->atInfo.mpSound = &a_this->sound; + a_this->sound.setEnemyName("E_bu"); + a_this->atInfo.mPowerType = 4; + + daE_BU_Execute(a_this); + } + + return phase_state; } -/* 80693FC0-80694008 002F00 0048+00 1/0 0/0 0/0 .text __dt__8cM3dGSphFv */ -// cM3dGSph::~cM3dGSph() { -extern "C" void __dt__8cM3dGSphFv() { - // NONMATCHING -} +/* 80694890-806948B0 -00001 0020+00 1/0 0/0 0/0 .data l_daE_BU_Method */ +static actor_method_class l_daE_BU_Method = { + (process_method_func)daE_BU_Create, + (process_method_func)daE_BU_Delete, + (process_method_func)daE_BU_Execute, + (process_method_func)daE_BU_IsDelete, + (process_method_func)daE_BU_Draw, +}; -/* 80694008-80694050 002F48 0048+00 1/0 0/0 0/0 .text __dt__8cM3dGAabFv */ -// cM3dGAab::~cM3dGAab() { -extern "C" void __dt__8cM3dGAabFv() { - // NONMATCHING -} - -/* 80694050-806940AC 002F90 005C+00 1/0 0/0 0/0 .text __dt__10dCcD_GSttsFv */ -// dCcD_GStts::~dCcD_GStts() { -extern "C" void __dt__10dCcD_GSttsFv() { - // NONMATCHING -} - -/* 806940AC-8069411C 002FEC 0070+00 3/2 0/0 0/0 .text __dt__12dBgS_ObjAcchFv */ -// dBgS_ObjAcch::~dBgS_ObjAcch() { -extern "C" void __dt__12dBgS_ObjAcchFv() { - // NONMATCHING -} - -/* 8069411C-8069418C 00305C 0070+00 1/0 0/0 0/0 .text __dt__12dBgS_AcchCirFv */ -// dBgS_AcchCir::~dBgS_AcchCir() { -extern "C" void __dt__12dBgS_AcchCirFv() { - // NONMATCHING -} - -/* 8069418C-806941D4 0030CC 0048+00 1/0 0/0 0/0 .text __dt__10cCcD_GSttsFv */ -// cCcD_GStts::~cCcD_GStts() { -extern "C" void __dt__10cCcD_GSttsFv() { - // NONMATCHING -} - -/* 806941D4-8069421C 003114 0048+00 2/1 0/0 0/0 .text __dt__12daE_BU_HIO_cFv */ -daE_BU_HIO_c::~daE_BU_HIO_c() { - // NONMATCHING -} - -/* 8069421C-80694258 00315C 003C+00 0/0 1/0 0/0 .text __sinit_d_a_e_bu_cpp */ -void __sinit_d_a_e_bu_cpp() { - // NONMATCHING -} - -#pragma push -#pragma force_active on -REGISTER_CTORS(0x8069421C, __sinit_d_a_e_bu_cpp); -#pragma pop - -/* 80694258-80694260 003198 0008+00 1/0 0/0 0/0 .text @36@__dt__12dBgS_ObjAcchFv */ -static void func_80694258() { - // NONMATCHING -} - -/* 80694260-80694268 0031A0 0008+00 1/0 0/0 0/0 .text @20@__dt__12dBgS_ObjAcchFv */ -static void func_80694260() { - // NONMATCHING -} - -/* 80694770-80694770 0000E0 0000+00 0/0 0/0 0/0 .rodata @stringBase0 */ +/* 806948B0-806948E0 -00001 0030+00 0/0 0/0 1/0 .data g_profile_E_BU */ +extern actor_process_profile_definition g_profile_E_BU = { + fpcLy_CURRENT_e, // mLayerID + 7, // mListID + fpcPi_CURRENT_e, // mListPrio + PROC_E_BU, // mProcName + &g_fpcLf_Method.base, // sub_method + sizeof(e_bu_class), // mSize + 0, // mSizeOther + 0, // mParameters + &g_fopAc_Method.base, // sub_method + 181, // mPriority + &l_daE_BU_Method, // sub_method + 0x100C0120, // mStatus + fopAc_ENEMY_e, // mActorType + fopAc_CULLBOX_CUSTOM_e, // cullType +}; diff --git a/src/d/actor/d_a_e_kr.cpp b/src/d/actor/d_a_e_kr.cpp index 68bdf3806ed..0e1111b0923 100644 --- a/src/d/actor/d_a_e_kr.cpp +++ b/src/d/actor/d_a_e_kr.cpp @@ -1,1208 +1,2363 @@ /** * @file d_a_e_kr.cpp - * -*/ + * + */ #include "d/actor/d_a_e_kr.h" +#include "d/actor/d_a_horse.h" +#include "d/d_bomb.h" #include "d/d_cc_d.h" -#include "dol2asm.h" +#include "d/d_cc_uty.h" + UNK_REL_DATA; + #include "f_op/f_op_actor_enemy.h" - -// -// Forward References: -// - -extern "C" static void nodeCallBack__FP8J3DJointi(); -extern "C" static void anm_init__FP10e_kr_classifUcf(); -extern "C" static void kuti_open__FP10e_kr_classsUl(); -extern "C" static void e_kr_player_bg_check__FP10e_kr_class(); -extern "C" static void e_kr_setpos_bg_check__FP10e_kr_class(); -extern "C" static void e_kr_player_view_check__FP10e_kr_class(); -extern "C" static void pl_horse_check__FP10e_kr_class(); -extern "C" static void daE_Kr_shadowDraw__FP10e_kr_class(); -extern "C" static void daE_Kr_Draw__FP10e_kr_class(); -extern "C" static void e_kr_pos_move__FP10e_kr_class(); -extern "C" static void coach_path_check__FP10e_kr_class(); -extern "C" static void e_kr_path_move__FP10e_kr_class(); -extern "C" static void e_kr_auto_move__FP10e_kr_class(); -extern "C" static void e_kr_atack_move__FP10e_kr_class(); -extern "C" static void e_kr_horse_move__FP10e_kr_class(); -extern "C" static void e_kr_wait_move__FP10e_kr_class(); -extern "C" static void e_kr_su_wait_move__FP10e_kr_class(); -extern "C" static void body_smoke_set__FP10e_kr_class(); -extern "C" static void wing_smoke_set__FP10e_kr_class(); -extern "C" static void e_kr_damage__FP10e_kr_class(); -extern "C" static void damage_check__FP10e_kr_class(); -extern "C" static void ground_angle_set__FP10e_kr_class(); -extern "C" static void action__FP10e_kr_class(); -extern "C" static void daE_Kr_Execute__FP10e_kr_class(); -extern "C" static bool daE_Kr_IsDelete__FP10e_kr_class(); -extern "C" static void daE_Kr_Delete__FP10e_kr_class(); -extern "C" static void useHeapInit__FP10fopAc_ac_c(); -extern "C" static void daE_Kr_Create__FP10fopAc_ac_c(); -extern "C" void __ct__10e_kr_classFv(); -extern "C" void __ct__4cXyzFv(); -extern "C" void __dt__8cM3dGSphFv(); -extern "C" void __dt__8cM3dGAabFv(); -extern "C" void __dt__10dCcD_GSttsFv(); -extern "C" void __dt__12dBgS_ObjAcchFv(); -extern "C" void __dt__12dBgS_AcchCirFv(); -extern "C" void __dt__10cCcD_GSttsFv(); -extern "C" void __sinit_d_a_e_kr_cpp(); -extern "C" void __dt__9e_krHIO_cFv(); -extern "C" void __dt__18fOpAcm_HIO_entry_cFv(); -extern "C" void __dt__14mDoHIO_entry_cFv(); -extern "C" static void func_80705684(); -extern "C" static void func_8070568C(); -extern "C" void __dt__4cXyzFv(); -extern "C" extern char const* const d_a_e_kr__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 -__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 fopAcIt_Judge__FPFPvPv_PvPv(); -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_searchActorDistance__FPC10fopAc_ac_cPC10fopAc_ac_c(); -extern "C" void fopAcM_createDisappear__FPC10fopAc_ac_cPC4cXyzUcUcUc(); -extern "C" void fopAcM_setCarryNow__FP10fopAc_ac_ci(); -extern "C" void fopAcM_cancelCarryNow__FP10fopAc_ac_c(); -extern "C" void fopAcM_effSmokeSet1__FPUlPUlPC4cXyzPC5csXyzfPC12dKy_tevstr_ci(); -extern "C" void fpcSch_JudgeForPName__FPvPv(); -extern "C" void fpcSch_JudgeByID__FPvPv(); -extern "C" void dComIfG_resLoad__FP30request_of_phase_process_classPCc(); -extern "C" void dComIfG_resDelete__FP30request_of_phase_process_classPCc(); -extern "C" void dComIfGp_getReverb__Fi(); -extern "C" void -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 dPath_GetRoomPath__Fii(); -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 ChkAtHit__12dCcD_GObjInfFv(); -extern "C" void ChkTgHit__12dCcD_GObjInfFv(); -extern "C" void GetTgHitObj__12dCcD_GObjInfFv(); -extern "C" void Set__8dCcD_SphFRC11dCcD_SrcSph(); -extern "C" void cc_at_check__FP10fopAc_ac_cP11dCcU_AtInfo(); -extern "C" void cancelBoomerangLockActor__9daPy_py_cFP10fopAc_ac_c(); -extern "C" void settingTevStruct__18dScnKy_env_light_cFiP4cXyzP12dKy_tevstr_c(); -extern "C" void setLightTevColorType_MAJI__18dScnKy_env_light_cFP12J3DModelDataP12dKy_tevstr_c(); -extern "C" void dKy_Sound_set__F4cXyziUii(); -extern "C" void dKy_darkworld_check__Fv(); -extern "C" void Set__4cCcSFP8cCcD_Obj(); -extern "C" void __pl__4cXyzCFRC3Vec(); -extern "C" void __mi__4cXyzCFRC3Vec(); -extern "C" void __dv__4cXyzCFf(); -extern "C" void __pl__5csXyzFR5csXyz(); -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 SetPos__11cBgS_GndChkFPC4cXyz(); -extern "C" void __dt__13cBgS_PolyInfoFv(); -extern "C" void __dt__8cM3dGCirFv(); -extern "C" void SetC__8cM3dGSphFRC4cXyz(); -extern "C" void cLib_addCalc2__FPffff(); -extern "C" void cLib_addCalc0__FPfff(); -extern "C" void cLib_addCalcAngleS2__FPssss(); -extern "C" void MtxTrans__FfffUc(); -extern "C" void MtxScale__FfffUc(); -extern "C" void MtxPosition__FP4cXyzP4cXyz(); -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 __construct_array(); -extern "C" void _savegpr_19(); -extern "C" void _savegpr_26(); -extern "C" void _savegpr_27(); -extern "C" void _savegpr_28(); -extern "C" void _savegpr_29(); -extern "C" void _restgpr_19(); -extern "C" void _restgpr_26(); -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" u8 mSimpleTexObj__21dDlst_shadowControl_c[32]; -extern "C" u8 mCurrentMtx__6J3DSys[48]; -extern "C" u8 sincosTable___5JMath[65536]; -extern "C" u8 m_midnaActor__9daPy_py_c[4]; -extern "C" void __register_global_object(); - -// -// Declarations: -// +/* 80705FF4-80706070 000014 007C+00 9/9 0/0 0/0 .bss l_e_krHIO */ +static e_krHIO_c l_e_krHIO; /* 806FF9AC-806FFCD8 0000EC 032C+00 1/1 0/0 0/0 .text nodeCallBack__FP8J3DJointi */ -static void nodeCallBack(J3DJoint* param_0, int param_1) { - // NONMATCHING +static int nodeCallBack(J3DJoint* i_joint, int param_1) { + if (param_1 == 0) { + J3DJoint* joint = i_joint; + s32 jointNo = joint->getJntNo(); + J3DModel* model = j3dSys.getModel(); + + e_kr_class* kr = (e_kr_class*)model->getUserArea(); + e_kr_class* unused = kr; // debug match + if (kr != NULL) { + MTXCopy(model->getAnmMtx(jointNo), *calc_mtx); + if (jointNo == 3 || jointNo == 4) { + cMtx_YrotM(*calc_mtx, kr->field_0xe7c / 2); + cMtx_XrotM(*calc_mtx, kr->field_0xe7c); + cMtx_ZrotM(*calc_mtx, kr->field_0xe80 / 3); + } else if (jointNo == 8) { + cMtx_ZrotM(*calc_mtx, -(kr->field_0xe80 / 3)); + } else if (jointNo == 7) { + cMtx_ZrotM(*calc_mtx, -kr->field_0xe80); + } + + if (jointNo >= 10 && jointNo <= 13) { + cMtx_ZrotM(*calc_mtx, kr->field_0xe8e[9] / 2); + cMtx_XrotM(*calc_mtx, kr->field_0xe8e[jointNo - 9]); + } else { + if (jointNo >= 15 && jointNo <= 18) { + cMtx_ZrotM(*calc_mtx, kr->field_0xe8e[10] / 2); + cMtx_XrotM(*calc_mtx, kr->field_0xe8e[jointNo - 9]); + } + } + + if (jointNo == 3) { + cMtx_ZrotM(*calc_mtx, kr->field_0xeac); + } else if (jointNo == 19) { + cMtx_ZrotM(*calc_mtx, -kr->field_0xeac); + } else if (jointNo == 20) { + cMtx_ZrotM(*calc_mtx, -kr->field_0xeae); + } else if (jointNo == 25) { + cMtx_ZrotM(*calc_mtx, -kr->field_0xeb0); + } else if ((jointNo == 30) || (jointNo == 31)) { + cMtx_YrotM(*calc_mtx, (s16)kr->field_0xeb6); + cMtx_ZrotM(*calc_mtx, (s16)kr->field_0xeb6); + } + + if (kr->field_0xebc != 0) { + if ((jointNo & 1) != 0) { + cMtx_YrotM(*calc_mtx, kr->field_0xebc); + } else if ((jointNo & 2) != 0) { + cMtx_XrotM(*calc_mtx, kr->field_0xebc); + } else if ((jointNo & 4) != 0) { + cMtx_ZrotM(*calc_mtx, kr->field_0xebc); + } + } + + model->setAnmMtx(jointNo, *calc_mtx); + MTXCopy(*calc_mtx, J3DSys::mCurrentMtx); + } + } + + return 1; } -/* ############################################################################################## */ -/* 80705B24-80705B28 00002C 0004+00 1/1 0/0 0/0 .rodata @4043 */ -SECTION_RODATA static f32 const lit_4043 = -1.0f; -COMPILER_STRIP_GATE(0x80705B24, &lit_4043); - -/* 80705C4C-80705C4C 000154 0000+00 0/0 0/0 0/0 .rodata @stringBase0 */ -#pragma push -#pragma force_active on -SECTION_DEAD static char const* const stringBase_80705C4C = "E_kr"; -#pragma pop - /* 806FFCD8-806FFD84 000418 00AC+00 8/8 0/0 0/0 .text anm_init__FP10e_kr_classifUcf */ -static void anm_init(e_kr_class* param_0, int param_1, f32 param_2, u8 param_3, f32 param_4) { - // NONMATCHING +static void anm_init(e_kr_class* i_this, int i_resIndex, f32 i_morf, u8 i_attr, f32 i_rate) { + i_this->mpMorf->setAnm((J3DAnmTransform*)dComIfG_getObjectRes("E_kr", i_resIndex), i_attr, + i_morf, i_rate, 0.0f, -1.0f); + i_this->field_0x5b8 = i_resIndex; } /* 806FFD84-806FFDB0 0004C4 002C+00 3/3 0/0 0/0 .text kuti_open__FP10e_kr_classsUl */ -static void kuti_open(e_kr_class* param_0, s16 param_1, u32 param_2) { - // NONMATCHING +static void kuti_open(e_kr_class* i_this, s16 param_1, u32 param_2) { + if (i_this->field_0xe82 == 0) { + i_this->field_0xe82 = param_1; + i_this->field_0xe84 = param_1 - 5; + i_this->field_0xe88 = param_2; + } } /* 806FFDB0-806FFE90 0004F0 00E0+00 2/2 0/0 0/0 .text e_kr_player_bg_check__FP10e_kr_class */ -static void e_kr_player_bg_check(e_kr_class* param_0) { - // NONMATCHING +static BOOL e_kr_player_bg_check(e_kr_class* i_this) { + fopAc_ac_c* actor = &i_this->enemy; + daPy_py_c* player = (daPy_py_c*)dComIfGp_getPlayer(0); + + dBgS_LinChk linChk; + cXyz unkXyz1; + cXyz unkXyz2; + cXyz unkXyz3; + + unkXyz3 = player->current.pos; + unkXyz3.y = player->eyePos.y; + unkXyz2 = actor->current.pos; + unkXyz2.y += 100.0f; + linChk.Set(&unkXyz2, &unkXyz3, actor); + if (dComIfG_Bgsp().LineCross(&linChk)) { + return TRUE; + } else { + return FALSE; + } } /* 806FFE90-806FFF54 0005D0 00C4+00 1/1 0/0 0/0 .text e_kr_setpos_bg_check__FP10e_kr_class */ -static void e_kr_setpos_bg_check(e_kr_class* param_0) { - // NONMATCHING +static BOOL e_kr_setpos_bg_check(e_kr_class* i_this) { + fopAc_ac_c* actor = &i_this->enemy; + fopAc_ac_c* player = dComIfGp_getPlayer(0); + + dBgS_LinChk linChk; + cXyz unkXyz1; + cXyz unkXyz2; + cXyz unkXyz3; + + unkXyz3 = actor->home.pos; + unkXyz3.y += 100.0f; + unkXyz2 = actor->eyePos; + linChk.Set(&unkXyz2, &unkXyz3, actor); + if (dComIfG_Bgsp().LineCross(&linChk)) { + return TRUE; + } else { + return FALSE; + } } -/* ############################################################################################## */ -/* 80705B28-80705B30 000030 0008+00 1/1 0/0 0/0 .rodata @4155 */ -SECTION_RODATA static u8 const lit_4155[8] = { - 0x43, 0x30, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, -}; -COMPILER_STRIP_GATE(0x80705B28, &lit_4155); - -/* 80705FE8-80705FF4 000008 000C+00 1/1 0/0 0/0 .bss @3921 */ -static u8 lit_3921[12]; - -/* 80705FF4-80706070 000014 007C+00 9/9 0/0 0/0 .bss l_e_krHIO */ -static u8 l_e_krHIO[124]; - /* 806FFF54-80700108 000694 01B4+00 3/3 0/0 0/0 .text e_kr_player_view_check__FP10e_kr_class */ -static void e_kr_player_view_check(e_kr_class* param_0) { - // NONMATCHING -} +static BOOL e_kr_player_view_check(e_kr_class* i_this) { + fopAc_ac_c* actor = &i_this->enemy; + fopAc_ac_c* player = dComIfGp_getPlayer(0); -/* ############################################################################################## */ -/* 80705B30-80705B34 000038 0004+00 1/5 0/0 0/0 .rodata @4167 */ -SECTION_RODATA static f32 const lit_4167 = 20.0f; -COMPILER_STRIP_GATE(0x80705B30, &lit_4167); + if (l_e_krHIO.field_0x6 != 0) { + return TRUE; + } + if (i_this->field_0x665 != 0xff) { + if (i_this->field_0x6c4 > i_this->field_0x665 * 100.0f || + e_kr_player_bg_check(i_this) != 0) + { + return FALSE; + } + } else { + if (i_this->mCurAction == 4 || i_this->mCurAction == 7) { + if (i_this->field_0x6c4 > l_e_krHIO.field_0x68 || e_kr_player_bg_check(i_this) != 0) { + return FALSE; + } + } else if (i_this->field_0x6c4 > l_e_krHIO.field_0x64 || + e_kr_player_bg_check(i_this) != 0) + { + return FALSE; + } + } + + f32 unkFloat1; + s16 unkInt1; + if (i_this->mCurAction == 4 || i_this->mCurAction == 7) { + unkInt1 = l_e_krHIO.field_0x6e; + unkFloat1 = l_e_krHIO.field_0x74; + } else { + unkInt1 = l_e_krHIO.field_0x6c; + unkFloat1 = l_e_krHIO.field_0x70; + } + + f32 unkFloat2 = fabsf(player->eyePos.y + 100.0f - actor->eyePos.y); + if (unkFloat2 < unkFloat1) { + s16 unkShort1 = actor->current.angle.y - i_this->field_0xe7c - i_this->field_0x6c0; + if (unkShort1 < 0) { + unkShort1 = unkShort1 * -1; + } + if ((u16)unkShort1 < unkInt1) { + return true; + } + } + return false; +} /* 80700108-80700174 000848 006C+00 2/2 0/0 0/0 .text pl_horse_check__FP10e_kr_class */ -static void pl_horse_check(e_kr_class* param_0) { - // NONMATCHING +static BOOL pl_horse_check(e_kr_class* i_this) { + fopAc_ac_c* actor = &i_this->enemy; + if (daPy_getPlayerActorClass()->checkHorseRide() && dComIfGp_getHorseActor()->speedF > 20.0f) { + return TRUE; + } else { + return FALSE; + } } -/* ############################################################################################## */ -/* 80705B34-80705B38 00003C 0004+00 0/3 0/0 0/0 .rodata @4192 */ -#pragma push -#pragma force_active on -SECTION_RODATA static f32 const lit_4192 = 150.0f; -COMPILER_STRIP_GATE(0x80705B34, &lit_4192); -#pragma pop - -/* 80705B38-80705B3C 000040 0004+00 0/1 0/0 0/0 .rodata @4193 */ -#pragma push -#pragma force_active on -SECTION_RODATA static f32 const lit_4193 = 1200.0f; -COMPILER_STRIP_GATE(0x80705B38, &lit_4193); -#pragma pop - /* 80700174-80700204 0008B4 0090+00 1/1 0/0 0/0 .text daE_Kr_shadowDraw__FP10e_kr_class */ -static void daE_Kr_shadowDraw(e_kr_class* param_0) { - // NONMATCHING +static void daE_Kr_shadowDraw(e_kr_class* i_this) { + fopAc_ac_c* actor = &i_this->enemy; + J3DModel* model = i_this->mpMorf->getModel(); + cXyz unkXyz1; + unkXyz1.set(actor->current.pos.x, actor->current.pos.y + 150.0f + BREG_F(0x12), + actor->current.pos.z); + i_this->field_0x5bc = dComIfGd_setShadow( + i_this->field_0x5bc, 0x01, model, &unkXyz1, BREG_F(0x13) + 1200.0f, BREG_F(0x11), + actor->current.pos.y, i_this->mAcch.GetGroundH(), i_this->mAcch.m_gnd, &actor->tevStr, 0, + 1.0f, dDlst_shadowControl_c::getSimpleTex()); } /* 80700204-8070034C 000944 0148+00 1/0 0/0 0/0 .text daE_Kr_Draw__FP10e_kr_class */ -static void daE_Kr_Draw(e_kr_class* param_0) { - // NONMATCHING +static int daE_Kr_Draw(e_kr_class* i_this) { + fopAc_ac_c* actor = &i_this->enemy; + + if (i_this->field_0x674 != 0) { + return 1; + } + + J3DModel* model = i_this->mpMorf->getModel(); + + g_env_light.settingTevStruct(0, &actor->current.pos, &actor->tevStr); + g_env_light.setLightTevColorType_MAJI(model, &actor->tevStr); + + if (i_this->field_0xefc != 0) { + J3DModelData* modelData = model->getModelData(); + for (u16 i = 0; i < modelData->getMaterialNum(); i++) { + J3DMaterial* material = modelData->getMaterialNodePointer(i); + material->getTevColor(0)->r = i_this->field_0xef8; + material->getTevColor(0)->g = i_this->field_0xef8; + material->getTevColor(0)->b = i_this->field_0xef8; + } + } + + i_this->mpMorf->entryDL(); + + daE_Kr_shadowDraw(i_this); + + return 1; } -/* ############################################################################################## */ -/* 80705B3C-80705B40 000044 0004+00 0/5 0/0 0/0 .rodata @4249 */ -#pragma push -#pragma force_active on -SECTION_RODATA static f32 const lit_4249 = 0.5f; -COMPILER_STRIP_GATE(0x80705B3C, &lit_4249); -#pragma pop - -/* 80705B40-80705B44 000048 0004+00 0/1 0/0 0/0 .rodata @4250 */ -#pragma push -#pragma force_active on -SECTION_RODATA static f32 const lit_4250 = 1.0f / 25.0f; -COMPILER_STRIP_GATE(0x80705B40, &lit_4250); -#pragma pop - -/* 80705B44-80705B48 00004C 0004+00 0/7 0/0 0/0 .rodata @4251 */ -#pragma push -#pragma force_active on -SECTION_RODATA static f32 const lit_4251 = 5.0f; -COMPILER_STRIP_GATE(0x80705B44, &lit_4251); -#pragma pop - /* 8070034C-80700588 000A8C 023C+00 6/6 0/0 0/0 .text e_kr_pos_move__FP10e_kr_class */ -static void e_kr_pos_move(e_kr_class* param_0) { - // NONMATCHING +static void e_kr_pos_move(e_kr_class* i_this) { + cXyz unkXyz1; + + fopAc_ac_c* actor = &i_this->enemy; + + f32 xDiff = i_this->field_0x678.x - actor->current.pos.x; + f32 yDiff = i_this->field_0x678.y - actor->current.pos.y; + f32 zDiff = i_this->field_0x678.z - actor->current.pos.z; + + s16 unkYaw = cM_atan2s(xDiff, zDiff); + s16 unkPitch = -cM_atan2s(yDiff, JMAFastSqrt(xDiff * xDiff + zDiff * zDiff)); + + s16 curYaw = actor->current.angle.y; + + cLib_addCalcAngleS2(&actor->current.angle.y, unkYaw, 10 + TREG_S(3), + i_this->field_0x694 * i_this->field_0x68c); + + curYaw = (curYaw - actor->current.angle.y) * 32; + s16 unkShort1 = 5500 + TREG_S(1); + if (curYaw > unkShort1) { + curYaw = unkShort1; + } else if ((s32)curYaw < -(s32)unkShort1) { + curYaw = -unkShort1; + } + + cLib_addCalcAngleS2(&actor->current.angle.z, curYaw, 10 + TREG_S(3), + i_this->field_0x694 * i_this->field_0x68c * 0.5f); + cLib_addCalcAngleS2(&actor->current.angle.x, unkPitch, TREG_S(3) + 10, + i_this->field_0x694 * i_this->field_0x68c); + cLib_addCalc2(&i_this->field_0x68c, 1.0f, 1.0f, 0.04f); + cLib_addCalc2(&actor->speedF, i_this->field_0x684, 1.0f, i_this->field_0x688); + + unkXyz1.x = 0.0f; + unkXyz1.y = 0.0f; + unkXyz1.z = actor->speedF; + + cMtx_YrotS(*calc_mtx, actor->current.angle.y); + cMtx_XrotM(*calc_mtx, actor->current.angle.x); + MtxPosition(&unkXyz1, &actor->speed); + + actor->current.pos.x = actor->current.pos.x + actor->speed.x; + actor->current.pos.y = actor->current.pos.y + actor->speed.y; + actor->current.pos.z = actor->current.pos.z + actor->speed.z; + + if (i_this->field_0x6a8 != 0) { + i_this->field_0x6a8--; + actor->current.pos.y += 5.0f; + } } -/* ############################################################################################## */ -/* 80705B48-80705B4C 000050 0004+00 0/1 0/0 0/0 .rodata @4269 */ -#pragma push -#pragma force_active on -SECTION_RODATA static f32 const lit_4269 = 1.0f / 10.0f; -COMPILER_STRIP_GATE(0x80705B48, &lit_4269); -#pragma pop +static void e_kr_ground_pos_move(e_kr_class* i_this) { + fopAc_ac_c* actor = &i_this->enemy; -/* 80705B4C-80705B50 000054 0004+00 0/1 0/0 0/0 .rodata @4270 */ -#pragma push -#pragma force_active on -SECTION_RODATA static f32 const lit_4270 = 3.0f; -COMPILER_STRIP_GATE(0x80705B4C, &lit_4270); -#pragma pop + cXyz unkXyz1; + cXyz unkXyz2; -/* 80705B50-80705B54 000058 0004+00 0/0 0/0 0/0 .rodata @4271 */ -#pragma push -#pragma force_active on -SECTION_RODATA static f32 const lit_4271 = -0.5f; -COMPILER_STRIP_GATE(0x80705B50, &lit_4271); -#pragma pop + f32 xDiff = i_this->field_0x678.x - actor->current.pos.x; + f32 zDiff = i_this->field_0x678.z - actor->current.pos.z; + s16 latAngle = cM_atan2s(xDiff, zDiff); + cLib_addCalcAngleS2(&actor->current.angle.y, latAngle, 2 + TREG_S(3), + i_this->field_0x694 * i_this->field_0x6c4); + cLib_addCalc2(&i_this->field_0x6c4, 1.0f, 1.0f, 0.1f); + cLib_addCalc2(&actor->speedF, i_this->field_0x684, 1.0f, i_this->field_0x688); -/* 80705B54-80705B58 00005C 0004+00 1/3 0/0 0/0 .rodata @4289 */ -SECTION_RODATA static f32 const lit_4289 = 500.0f; -COMPILER_STRIP_GATE(0x80705B54, &lit_4289); + unkXyz1.x = 0.0f; + unkXyz1.y = 0.0f; + unkXyz1.z = actor->speedF; + + cMtx_YrotS(*calc_mtx, actor->current.angle.y); + MtxPosition(&unkXyz1, &unkXyz2); + + actor->speed.x = unkXyz2.x; + actor->speed.z = unkXyz2.z; + + actor->current.pos.x += actor->speed.x; + actor->current.pos.y += actor->speed.y; + actor->current.pos.z += actor->speed.z; + + actor->speed.y = actor->speed.y - 3.0f; + + if (i_this->mAcch.ChkGroundHit()) { + actor->speed.y = -0.5f; + } +} /* 80700588-80700638 000CC8 00B0+00 1/1 0/0 0/0 .text coach_path_check__FP10e_kr_class */ -static void coach_path_check(e_kr_class* param_0) { - // NONMATCHING +static BOOL coach_path_check(e_kr_class* i_this) { + fopAc_ac_c* coach = fopAcM_SearchByName(PROC_NPC_COACH); + if (coach == NULL) { + return FALSE; + } + + Vec* pointPos = &i_this->field_0x6e4->m_points[0].m_position; + f32 x = pointPos->x - coach->current.pos.x; + f32 z = pointPos->z - coach->current.pos.z; + if (JMAFastSqrt(x * x + z * z) < 500.0f + KREG_F(9)) { + return TRUE; + } else { + return FALSE; + } } -/* ############################################################################################## */ -/* 80705B58-80705B5C 000060 0004+00 0/3 0/0 0/0 .rodata @4420 */ -#pragma push -#pragma force_active on -SECTION_RODATA static f32 const lit_4420 = 12.0f; -COMPILER_STRIP_GATE(0x80705B58, &lit_4420); -#pragma pop - -/* 80705B5C-80705B60 000064 0004+00 0/2 0/0 0/0 .rodata @4421 */ -#pragma push -#pragma force_active on -SECTION_RODATA static f32 const lit_4421 = 2.0f; -COMPILER_STRIP_GATE(0x80705B5C, &lit_4421); -#pragma pop - /* 80700638-80700AF8 000D78 04C0+00 1/1 0/0 0/0 .text e_kr_path_move__FP10e_kr_class */ -static void e_kr_path_move(e_kr_class* param_0) { - // NONMATCHING +static s8 e_kr_path_move(e_kr_class* i_this) { + fopAc_ac_c* actor = &i_this->enemy; + fopAc_ac_c* playerActor = dComIfGp_getPlayer(0); + daPy_py_c* player = (daPy_py_c*)playerActor; + + cXyz unkXyz1; + s8 unkFlag1 = TRUE; + s8 retVal = TRUE; + i_this->field_0xe8c = 2; + s32 frame = i_this->mpMorf->getFrame(); + + switch (i_this->field_0x670) { + case 0: { + if (actor->current.pos.y > i_this->field_0x678.y) { + if (frame == 9 + TREG_S(0)) { + i_this->field_0x670 = 1; + anm_init(i_this, 14, 12.0f + TREG_F(0), 2, 1.0f); + } + } + break; + } + case 1: { + if (actor->current.pos.y <= i_this->field_0x678.y) { + i_this->field_0x670 = 0; + anm_init(i_this, 12, 5.0f, 2, 2.0f); + } + break; + } + case 2: { + i_this->field_0x670 = 3; + anm_init(i_this, 8, 5.0f, 2, 2.0f); + break; + } + case 3: + break; + default: + break; + } + + dPnt* point; + dBomb_c* bomb; + switch (i_this->field_0x672) { + case -10: { + unkFlag1 = FALSE; + retVal = FALSE; + i_this->field_0x6c8 = 10; + if (coach_path_check(i_this)) { + i_this->field_0x672 = -9; + } + break; + } + case -9: { + unkFlag1 = FALSE; + retVal = FALSE; + bomb = (dBomb_c*)dBomb_c::createBombCargoCarry(&actor->current.pos, &actor->shape_angle, + fopAcM_GetRoomNo(actor)); + if (bomb != NULL) { + i_this->field_0x66b = 1; + i_this->field_0x674 = 0; + i_this->field_0x672 = 0; + i_this->field_0xf00 = fopAcM_GetParam(actor) >> 24; + i_this->mBombId = fopAcM_GetID(bomb); + fopAcM_setCarryNow(bomb, 0); + } + break; + } + case 0: { + i_this->field_0x672 = 1; + i_this->field_0x684 = (50.0f + NREG_F(0)) * 1.2f; + i_this->field_0x688 = 2.0f; + i_this->field_0x68c = 1.0f + TREG_F(7); + i_this->field_0x6e2++; + + point = &i_this->field_0x6e4->m_points[i_this->field_0x6e2]; + i_this->field_0x678.x = point->m_position.x; + i_this->field_0x678.y = point->m_position.y; + i_this->field_0x678.z = point->m_position.z; + } + case 1: { + f32 xDiff = i_this->field_0x678.x - actor->current.pos.x; + f32 yDiff = i_this->field_0x678.y - actor->current.pos.y; + f32 zDiff = i_this->field_0x678.z - actor->current.pos.z; + f32 totalDiff = JMAFastSqrt(xDiff * xDiff + yDiff * yDiff + zDiff * zDiff); + i_this->field_0x694 = 5000.0f + NREG_F(6); + + if (totalDiff < 10.0f * TREG_F(10) + 300.0f) { + point = &i_this->field_0x6e4->m_points[i_this->field_0x6e2]; + u8 pointArg1 = point->mArg1; + if (pointArg1 == -1) { + i_this->field_0x684 = 50.0f * 1.2f; + } else { + i_this->field_0x684 = pointArg1; + } + + if (i_this->field_0x6e2 >= i_this->field_0x6e4[0].m_num - 1) { + i_this->field_0x672 = 2; + i_this->field_0x69c[2] = 200; + cMtx_YrotS(*calc_mtx, actor->current.angle.y); + unkXyz1.x = 0.0f; + unkXyz1.y = 2000.0f; + unkXyz1.z = -2000.0f; + MtxPosition(&unkXyz1, &i_this->field_0x678); + i_this->field_0x678 += actor->current.pos; + i_this->field_0x670 = 2; + i_this->field_0x66b = 0; + bomb = (dBomb_c*)fopAcM_SearchByID(i_this->mBombId); + if (bomb != NULL) { + fopAcM_cancelCarryNow(bomb); + bomb->speedF = KREG_F(8) + 20.0f; + } + i_this->field_0x6c8 = 0xdc; + } else { + i_this->field_0x672 = 0; + } + } + break; + } + case 2: { + i_this->field_0x6c8 = 10; + retVal = FALSE; + if (i_this->field_0x69c[2] == 180) { + daPy_getPlayerActorClass()->cancelBoomerangLockActor(actor); + } + if (i_this->field_0x69c[2] == 150) { + bomb = (dBomb_c*)fopAcM_SearchByID(i_this->mBombId); + if (bomb != NULL) { + bomb->setCargoBombExplode(); + } + i_this->field_0xf04 = 1; + } + if (i_this->field_0x69c[2] == 50) { + i_this->field_0xf00 = -1; + } + if (i_this->field_0x69c[2] == 0) { + actor->current = actor->home; + i_this->field_0x672 = -10; + i_this->field_0x674 = 1; + i_this->field_0x6e2 = 0; + actor->speedF = 0.0f; + i_this->field_0x684 = 0; + i_this->field_0xf04 = 0; + unkFlag1 = FALSE; + } + break; + } + } + + if (unkFlag1) { + e_kr_pos_move(i_this); + } + + return retVal; } -/* ############################################################################################## */ -/* 80705B60-80705B64 000068 0004+00 0/0 0/0 0/0 .rodata @4422 */ -#pragma push -#pragma force_active on -SECTION_RODATA static u32 const lit_4422 = 0x42700001; -COMPILER_STRIP_GATE(0x80705B60, &lit_4422); -#pragma pop - -/* 80705B64-80705B68 00006C 0004+00 0/1 0/0 0/0 .rodata @4423 */ -#pragma push -#pragma force_active on -SECTION_RODATA static f32 const lit_4423 = 5000.0f; -COMPILER_STRIP_GATE(0x80705B64, &lit_4423); -#pragma pop - -/* 80705B68-80705B6C 000070 0004+00 0/4 0/0 0/0 .rodata @4424 */ -#pragma push -#pragma force_active on -SECTION_RODATA static f32 const lit_4424 = 300.0f; -COMPILER_STRIP_GATE(0x80705B68, &lit_4424); -#pragma pop - -/* 80705B6C-80705B70 000074 0004+00 0/2 0/0 0/0 .rodata @4425 */ -#pragma push -#pragma force_active on -SECTION_RODATA static f32 const lit_4425 = 2000.0f; -COMPILER_STRIP_GATE(0x80705B6C, &lit_4425); -#pragma pop - -/* 80705B70-80705B74 000078 0004+00 0/0 0/0 0/0 .rodata @4426 */ -#pragma push -#pragma force_active on -SECTION_RODATA static f32 const lit_4426 = -2000.0f; -COMPILER_STRIP_GATE(0x80705B70, &lit_4426); -#pragma pop - -/* 80705B74-80705B78 00007C 0004+00 0/5 0/0 0/0 .rodata @4500 */ -#pragma push -#pragma force_active on -SECTION_RODATA static f32 const lit_4500 = 50.0f; -COMPILER_STRIP_GATE(0x80705B74, &lit_4500); -#pragma pop - -/* 80705B78-80705B7C 000080 0004+00 0/5 0/0 0/0 .rodata @4501 */ -#pragma push -#pragma force_active on -SECTION_RODATA static f32 const lit_4501 = 200.0f; -COMPILER_STRIP_GATE(0x80705B78, &lit_4501); -#pragma pop - -/* 80705B7C-80705B80 000084 0004+00 0/3 0/0 0/0 .rodata @4502 */ -#pragma push -#pragma force_active on -SECTION_RODATA static f32 const lit_4502 = 60.0f; -COMPILER_STRIP_GATE(0x80705B7C, &lit_4502); -#pragma pop - -/* 80705B80-80705B84 000088 0004+00 0/1 0/0 0/0 .rodata @4503 */ -#pragma push -#pragma force_active on -SECTION_RODATA static f32 const lit_4503 = 25.0f; -COMPILER_STRIP_GATE(0x80705B80, &lit_4503); -#pragma pop - /* 80700AF8-80700E3C 001238 0344+00 1/1 0/0 0/0 .text e_kr_auto_move__FP10e_kr_class */ -static void e_kr_auto_move(e_kr_class* param_0) { - // NONMATCHING +static void e_kr_auto_move(e_kr_class* i_this) { + fopAc_ac_c* playerActor = dComIfGp_getPlayer(0); + fopAc_ac_c* player = (daPy_py_c*)playerActor; + fopAc_ac_c* actor = &i_this->enemy; + cXyz unkXyz1; + cXyz unkXyz2; + s8 unkByte1 = 0; + + i_this->field_0xe8c = 2; + switch (i_this->field_0x670) { + case 0: { + s32 frame = i_this->mpMorf->getFrame(); + if (i_this->field_0x69c[0] == 0 && frame == 9 + TREG_S(0)) { + i_this->field_0x670 = 1; + i_this->field_0x69c[0] = cM_rndF(200.0f) + 50.0f; + anm_init(i_this, 13, 12.0f + TREG_F(0), 2, 1.0f); + } + + break; + } + case 1: { + if (i_this->field_0x69c[0] == 0 && actor->current.pos.y < i_this->field_0x678.y) { + i_this->field_0x670 = 0; + i_this->field_0x69c[0] = cM_rndF(60.0f) + 20.0f; + anm_init(i_this, 8, 5.0f, 2, l_e_krHIO.field_0x28); + } + + break; + } + case 10: + break; + case 20: { + s32 frame = i_this->mpMorf->getFrame(); + if (frame == 34) { + i_this->field_0x670 = 0; + i_this->field_0x69c[0] = cM_rndF(60.0f) + 20.0f; + anm_init(i_this, 8, 0.0f, 2, l_e_krHIO.field_0x28); + } + } + default: + break; + } + + switch (i_this->field_0x672) { + case 0: { + if (i_this->field_0x69c[1] == 0) { + f32 xDiff = actor->home.pos.x + cM_rndFX(l_e_krHIO.field_0xc) - actor->current.pos.x; + f32 zDiff = actor->home.pos.z + cM_rndFX(l_e_krHIO.field_0xc) - actor->current.pos.z; + if (JMAFastSqrt(xDiff * xDiff + zDiff * zDiff) > 200.0f) { + i_this->field_0x69c[1] = cM_rndF(150.0f) + 50.0f; + i_this->field_0x678.x = xDiff + actor->current.pos.x; + i_this->field_0x678.y = actor->home.pos.y + cM_rndF(500.0f); + i_this->field_0x678.z = zDiff + actor->current.pos.z; + i_this->field_0x68c = 0; + i_this->field_0x684 = 25.0f + TREG_F(10); + i_this->field_0x688 = 1.0f + TREG_F(11); + i_this->field_0x694 = cM_rndF(300.0f) + 200.0f; + if ((l_e_krHIO.field_0x6 != 0 || + (i_this->field_0x69c[3] == 0 && i_this->field_0x66b == 0)) && + e_kr_player_view_check(i_this)) + { + i_this->mCurAction = 3; + i_this->field_0x672 = 0; + i_this->mSound.startCreatureVoice(Z2SE_EN_KR_V_FIND, -1); + } + } + } + } + } + + switch (unkByte1) { + case 0: + e_kr_pos_move(i_this); + break; + case 1: + e_kr_ground_pos_move(i_this); + if (i_this->field_0x672 != 0x19) { + f32 xDiff = playerActor->current.pos.x - actor->current.pos.x; + f32 zDiff = playerActor->current.pos.z - actor->current.pos.z; + if (JMAFastSqrt(xDiff * xDiff + zDiff * zDiff) < 400.0f) { + i_this->field_0x672 = 0; + i_this->field_0x6a8 = 0; + i_this->field_0x69c[0] = cM_rndF(60.0f) + 20.0f; + anm_init(i_this, 8, 1.0f, 2, l_e_krHIO.field_0x68); + i_this->field_0x69c[1] = 50; + i_this->field_0x694 = 10.0f * TREG_F(4) + 5000.0f; + i_this->field_0x684 = 1.0f; + i_this->field_0x688 = 1.0f; + actor->speedF = 0.0f; + MtxTrans(actor->current.pos.x, actor->current.pos.y, actor->current.pos.z, 0); + unkXyz1.x = 0.0f; + unkXyz1.y = 1000.0f; + unkXyz1.z = 2000.0f; + cMtx_YrotM(*calc_mtx, actor->current.angle.y); + MtxPosition(&unkXyz1, &i_this->field_0x678); + i_this->field_0x66a = cM_rndF(250.0f) + 250.0f; + } + } + break; + } } -/* ############################################################################################## */ -/* 80705B84-80705B88 00008C 0004+00 0/4 0/0 0/0 .rodata @4827 */ -#pragma push -#pragma force_active on -SECTION_RODATA static f32 const lit_4827 = 30.0f; -COMPILER_STRIP_GATE(0x80705B84, &lit_4827); -#pragma pop - -/* 80705B88-80705B8C 000090 0004+00 0/3 0/0 0/0 .rodata @4828 */ -#pragma push -#pragma force_active on -SECTION_RODATA static f32 const lit_4828 = 10.0f; -COMPILER_STRIP_GATE(0x80705B88, &lit_4828); -#pragma pop - -/* 80705B8C-80705B90 000094 0004+00 0/3 0/0 0/0 .rodata @4829 */ -#pragma push -#pragma force_active on -SECTION_RODATA static f32 const lit_4829 = 400.0f; -COMPILER_STRIP_GATE(0x80705B8C, &lit_4829); -#pragma pop - -/* 80705B90-80705B94 000098 0004+00 0/3 0/0 0/0 .rodata @4830 */ -#pragma push -#pragma force_active on -SECTION_RODATA static f32 const lit_4830 = 1000.0f; -COMPILER_STRIP_GATE(0x80705B90, &lit_4830); -#pragma pop - -/* 80705B94-80705B98 00009C 0004+00 0/0 0/0 0/0 .rodata @4831 */ -#pragma push -#pragma force_active on -SECTION_RODATA static f32 const lit_4831 = 1280.0f; -COMPILER_STRIP_GATE(0x80705B94, &lit_4831); -#pragma pop - -/* 80705B98-80705B9C 0000A0 0004+00 0/0 0/0 0/0 .rodata @4832 */ -#pragma push -#pragma force_active on -SECTION_RODATA static f32 const lit_4832 = 768.0f; -COMPILER_STRIP_GATE(0x80705B98, &lit_4832); -#pragma pop - -/* 80705B9C-80705BA0 0000A4 0004+00 0/0 0/0 0/0 .rodata @4833 */ -#pragma push -#pragma force_active on -SECTION_RODATA static f32 const lit_4833 = 1.0f / 20.0f; -COMPILER_STRIP_GATE(0x80705B9C, &lit_4833); -#pragma pop - -/* 80705BA0-80705BA4 0000A8 0004+00 0/0 0/0 0/0 .rodata @4834 */ -#pragma push -#pragma force_active on -SECTION_RODATA static f32 const lit_4834 = 7000.0f; -COMPILER_STRIP_GATE(0x80705BA0, &lit_4834); -#pragma pop - -/* 80705BA4-80705BA8 0000AC 0004+00 0/1 0/0 0/0 .rodata @4835 */ -#pragma push -#pragma force_active on -SECTION_RODATA static f32 const lit_4835 = 600.0f; -COMPILER_STRIP_GATE(0x80705BA4, &lit_4835); -#pragma pop - -/* 80705BA8-80705BAC 0000B0 0004+00 0/0 0/0 0/0 .rodata @4836 */ -#pragma push -#pragma force_active on -SECTION_RODATA static f32 const lit_4836 = 35.0f; -COMPILER_STRIP_GATE(0x80705BA8, &lit_4836); -#pragma pop - -/* 80705BAC-80705BB0 0000B4 0004+00 0/0 0/0 0/0 .rodata @4837 */ -#pragma push -#pragma force_active on -SECTION_RODATA static f32 const lit_4837 = 1350.0f; -COMPILER_STRIP_GATE(0x80705BAC, &lit_4837); -#pragma pop - -/* 80705BB0-80705BB4 0000B8 0004+00 0/0 0/0 0/0 .rodata @4838 */ -#pragma push -#pragma force_active on -SECTION_RODATA static f32 const lit_4838 = -10.0f; -COMPILER_STRIP_GATE(0x80705BB0, &lit_4838); -#pragma pop - -/* 80705BB4-80705BB8 0000BC 0004+00 0/2 0/0 0/0 .rodata @4839 */ -#pragma push -#pragma force_active on -SECTION_RODATA static f32 const lit_4839 = 3000.0f; -COMPILER_STRIP_GATE(0x80705BB4, &lit_4839); -#pragma pop - -/* 80705BB8-80705BC0 0000C0 0004+04 0/2 0/0 0/0 .rodata @4840 */ -#pragma push -#pragma force_active on -SECTION_RODATA static f32 const lit_4840[1 + 1 /* padding */] = { - -20.0f, - /* padding */ - 0.0f, -}; -COMPILER_STRIP_GATE(0x80705BB8, &lit_4840); -#pragma pop - -/* 80705BC0-80705BC8 0000C8 0008+00 0/2 0/0 0/0 .rodata @4843 */ -#pragma push -#pragma force_active on -SECTION_RODATA static u8 const lit_4843[8] = { - 0x43, 0x30, 0x00, 0x00, 0x80, 0x00, 0x00, 0x00, -}; -COMPILER_STRIP_GATE(0x80705BC0, &lit_4843); -#pragma pop - -/* 80705C8C-80705D1C -00001 0090+00 1/1 0/0 0/0 .data @4842 */ -SECTION_DATA static void* lit_4842[36] = { - (void*)(((char*)e_kr_atack_move__FP10e_kr_class) + 0x10C), - (void*)(((char*)e_kr_atack_move__FP10e_kr_class) + 0x144), - (void*)(((char*)e_kr_atack_move__FP10e_kr_class) + 0x144), - (void*)(((char*)e_kr_atack_move__FP10e_kr_class) + 0x330), - (void*)(((char*)e_kr_atack_move__FP10e_kr_class) + 0x4CC), - (void*)(((char*)e_kr_atack_move__FP10e_kr_class) + 0x858), - (void*)(((char*)e_kr_atack_move__FP10e_kr_class) + 0xCF8), - (void*)(((char*)e_kr_atack_move__FP10e_kr_class) + 0x920), - (void*)(((char*)e_kr_atack_move__FP10e_kr_class) + 0xCF8), - (void*)(((char*)e_kr_atack_move__FP10e_kr_class) + 0xCF8), - (void*)(((char*)e_kr_atack_move__FP10e_kr_class) + 0xBBC), - (void*)(((char*)e_kr_atack_move__FP10e_kr_class) + 0xBBC), - (void*)(((char*)e_kr_atack_move__FP10e_kr_class) + 0xCF8), - (void*)(((char*)e_kr_atack_move__FP10e_kr_class) + 0xCF8), - (void*)(((char*)e_kr_atack_move__FP10e_kr_class) + 0xCF8), - (void*)(((char*)e_kr_atack_move__FP10e_kr_class) + 0xCF8), - (void*)(((char*)e_kr_atack_move__FP10e_kr_class) + 0xCF8), - (void*)(((char*)e_kr_atack_move__FP10e_kr_class) + 0xCF8), - (void*)(((char*)e_kr_atack_move__FP10e_kr_class) + 0xCF8), - (void*)(((char*)e_kr_atack_move__FP10e_kr_class) + 0xCF8), - (void*)(((char*)e_kr_atack_move__FP10e_kr_class) + 0xCF8), - (void*)(((char*)e_kr_atack_move__FP10e_kr_class) + 0xCF8), - (void*)(((char*)e_kr_atack_move__FP10e_kr_class) + 0xCF8), - (void*)(((char*)e_kr_atack_move__FP10e_kr_class) + 0xCF8), - (void*)(((char*)e_kr_atack_move__FP10e_kr_class) + 0xCF8), - (void*)(((char*)e_kr_atack_move__FP10e_kr_class) + 0xCF8), - (void*)(((char*)e_kr_atack_move__FP10e_kr_class) + 0xCF8), - (void*)(((char*)e_kr_atack_move__FP10e_kr_class) + 0xCF8), - (void*)(((char*)e_kr_atack_move__FP10e_kr_class) + 0xCF8), - (void*)(((char*)e_kr_atack_move__FP10e_kr_class) + 0xCF8), - (void*)(((char*)e_kr_atack_move__FP10e_kr_class) + 0xCF8), - (void*)(((char*)e_kr_atack_move__FP10e_kr_class) + 0xCF8), - (void*)(((char*)e_kr_atack_move__FP10e_kr_class) + 0xCF8), - (void*)(((char*)e_kr_atack_move__FP10e_kr_class) + 0xCF8), - (void*)(((char*)e_kr_atack_move__FP10e_kr_class) + 0xCF8), - (void*)(((char*)e_kr_atack_move__FP10e_kr_class) + 0x330), -}; - /* 80700E3C-80701CF4 00157C 0EB8+00 2/1 0/0 0/0 .text e_kr_atack_move__FP10e_kr_class */ -static void e_kr_atack_move(e_kr_class* param_0) { - // NONMATCHING +static void e_kr_atack_move(e_kr_class* i_this) { + fopAc_ac_c* playerActor = dComIfGp_getPlayer(0); + daPy_py_c* player = (daPy_py_c*)playerActor; + fopAc_ac_c* actor = &i_this->enemy; + f32 playerDist = fopAcM_searchPlayerDistance(actor); + cXyz unkXyz1; + + s8 unkFlag1 = FALSE; + s8 unkFlag2 = FALSE; + + i_this->field_0xe8c = 1; + + if (i_this->field_0xec0 != 0) { + i_this->field_0xec0 = 0; + i_this->field_0x69c[5] = (s32)(l_e_krHIO.field_0x24 * (cM_rndF(30.0f) + 20.0f)); + + anm_init(i_this, 17, 10.0f, 2, l_e_krHIO.field_0x2c); + + i_this->field_0x690 = 0; + i_this->field_0x68c = 0; + i_this->field_0x672 = 4; + + kuti_open(i_this, 25, Z2SE_EN_KR_V_NAKU); + } + + s32 frame = i_this->mpMorf->getFrame(); + + f32 unkFloat1; + switch (i_this->field_0x672) { + case 0: + i_this->field_0x672 = 1; + i_this->field_0x68c = i_this->field_0x690 = 0.0f; + i_this->field_0x684 = 30.0f; + i_this->field_0x688 = 1.0f; + + anm_init(i_this, 13, 10.0f, 2, 1.0f); + case 1: + case 2: + i_this->field_0x678 = playerActor->current.pos; + i_this->field_0x678.y = playerActor->eyePos.y + 50.0f; + + e_kr_pos_move(i_this); + + unkXyz1 = i_this->field_0x678 - actor->current.pos; + + unkFloat1 = unkXyz1.abs(); + if (unkFloat1 < 100.0f * TREG_F(9) + 500.0f) { + i_this->field_0x672 = 3; + } else { + if (i_this->field_0x672 == 1) { + i_this->field_0x694 = 400.0f; + if (unkFloat1 < l_e_krHIO.field_0x50) { + i_this->field_0x672 = 2; + + anm_init(i_this, 11, 10.0f, 0, 1.0f); + + kuti_open(i_this, 25, Z2SE_EN_KR_V_NAKU); + } + } else { + i_this->field_0xea8 = KREG_F(11) + 1000.0f; + i_this->field_0x694 = 2000.0f; + } + } + break; + case 3: + case 35: + i_this->field_0x684 = 0; + i_this->field_0x688 = 3.0f; + + e_kr_pos_move(i_this); + + if (actor->speedF <= 0.1f || i_this->mAcch.ChkWallHit()) { + i_this->field_0x672 = 4; + i_this->field_0x69c[0] = 0; + + if (i_this->field_0x664 == 4 || i_this->field_0x664 == 7) { + i_this->field_0x69c[1] = + l_e_krHIO.field_0x1c + cM_rndF(l_e_krHIO.field_0x1e - l_e_krHIO.field_0x1c); + } else { + i_this->field_0x69c[1] = (f32)l_e_krHIO.field_0x18 + + cM_rndF(l_e_krHIO.field_0x1a - l_e_krHIO.field_0x18); + } + + i_this->field_0x68c = i_this->field_0x690 = 0.0f; + + kuti_open(i_this, 25, Z2SE_EN_KR_V_NAKU); + } + if (i_this->field_0x672 == 3 && actor->speedF <= 10.0f) { + i_this->field_0x672 = 0x23; + + anm_init(i_this, 17, 5.0f, 2, l_e_krHIO.field_0x2c); + } + break; + case 4: + i_this->field_0x6d8++; + unkXyz1.x = cM_ssin(i_this->field_0x6d8 * (TREG_S(2) + 1000)) * 200.0f; + unkXyz1.y = cM_ssin(i_this->field_0x6d8 * (TREG_S(3) + 0x4b0)) * 100.0f; + unkXyz1.z = cM_scos(i_this->field_0x6d8 * (TREG_S(4) + 0x5dc)) * 200.0f; + + cLib_addCalc2(&actor->current.pos.x, i_this->field_0x678.x + unkXyz1.x, 0.1f, + i_this->field_0x68c * 30.0f); + cLib_addCalc2(&actor->current.pos.y, i_this->field_0x678.y + unkXyz1.y, 0.1f, + i_this->field_0x68c * 30.0f); + cLib_addCalc2(&actor->current.pos.z, i_this->field_0x678.z + unkXyz1.z, 0.1f, + i_this->field_0x68c * 30.0f); + cLib_addCalc2(&i_this->field_0x68c, l_e_krHIO.field_0x20, 1.0f, + l_e_krHIO.field_0x20 * 0.1f); + + cLib_addCalcAngleS2(&actor->current.angle.y, i_this->field_0x6c0, 5, + i_this->field_0x690 * 1280.0f); + cLib_addCalcAngleS2(&actor->current.angle.x, i_this->field_0x6c2, 5, + i_this->field_0x690 * 768.0f); + cLib_addCalcAngleS2(&actor->current.angle.z, 0, 5, i_this->field_0x690 * 768.0f); + + cLib_addCalc2(&i_this->field_0x690, 1.0f, 1.0f, 0.05f); + + if (i_this->field_0x69c[1] == 0) { + unkFlag1 = TRUE; + } else { + if ((i_this->field_0x69c[0] & 0x1f) == 0 && cM_rndF(1.0f) < 0.5f) { + kuti_open(i_this, 25, Z2SE_EN_KR_V_NAKU); + } + + if (i_this->field_0x69c[0] == 0) { + cMtx_YrotS(*calc_mtx, (playerActor->shape_angle).y + (s16)cM_rndFX(7000.0f)); + unkXyz1.x = 0.0f; + unkXyz1.y = cM_rndF(100.0f) + 100.0f + TREG_F(15); + unkXyz1.z = cM_rndF(100.0f) + 300.0f + TREG_F(16); + + MtxPosition(&unkXyz1, &i_this->field_0x678); + + i_this->field_0x678.x = i_this->field_0x678.x + playerActor->current.pos.x; + i_this->field_0x678.y = i_this->field_0x678.y + playerActor->eyePos.y; + i_this->field_0x678.z = i_this->field_0x678.z + playerActor->current.pos.z; + + i_this->field_0x69c[0] = cM_rndF(100.0f) + 20.0f; + i_this->field_0x68c = i_this->field_0x690 = 0.0f; + } + + if (i_this->field_0x69c[5] == 0 && i_this->field_0x6c4 > TREG_F(5) * 10.0f + 300.0f && + i_this->field_0x6c4 < TREG_F(6) * 10.0f + 400.0f && frame >= 14 + BREG_S(7)) + { + i_this->field_0x672 = 7; + i_this->field_0x69c[5] = l_e_krHIO.field_0x24 * (cM_rndF(30.0f) + 20.0f); + + anm_init(i_this, 4, 2.0f, 0, l_e_krHIO.field_0x30); + + i_this->mSound.startCreatureVoice(Z2SE_EN_KR_V_ATTACK, -1); + + i_this->field_0x68c = i_this->field_0x690 = 0.0f; + i_this->field_0x684 = 0.0f; + + i_this->field_0x688 = 5.0f; + actor->speedF = 0.0f; + } + } + + if (playerDist > 600.0f) { + i_this->field_0x672 = 5; + i_this->field_0x69c[0] = cM_rndF(35.0f) + 35.0f; + } + break; + case 5: + if ((i_this->field_0x6d6 & 0x3f) == 0 && cM_rndF(1.0f) < 0.5f) { + kuti_open(i_this, 25, Z2SE_EN_KR_V_NAKU); + } + + i_this->field_0x684 = 25.0f; + i_this->field_0x688 = 2.0f; + i_this->field_0x694 = 2000.0f; + i_this->field_0x678.x = playerActor->current.pos.x; + i_this->field_0x678.y = playerActor->eyePos.y + 50.0f; + i_this->field_0x678.z = playerActor->current.pos.z; + + e_kr_pos_move(i_this); + + if (playerDist < 500.0f) { + i_this->field_0x672 = 4; + i_this->field_0x690 = 0; + i_this->field_0x68c = 0; + } + + if (i_this->field_0x69c[0] == 0 && playerDist > 1350.0f) { + i_this->field_0x672 = 0; + } + + if (i_this->field_0x69c[1] == 0) { + unkFlag1 = TRUE; + } + break; + case 7: + i_this->field_0xe8c = 0; + + if (frame == 3) { + kuti_open(i_this, 25, Z2SE_SY_DUMMY); + } + + if (frame == 15 + TREG_S(5)) { + i_this->field_0x684 = 30.0f + TREG_F(7); + i_this->field_0x688 = 10.0f + TREG_F(8); + } + + if (frame == 25 + TREG_S(6)) { + i_this->field_0x684 = -10.0f + TREG_F(9); + i_this->field_0x688 = 5.0f + TREG_F(10); + } + + if (frame <= 23) { + i_this->field_0x694 = 2000.0f; + i_this->field_0x678.x = playerActor->current.pos.x; + i_this->field_0x678.y = playerActor->eyePos.y; + i_this->field_0x678.z = playerActor->current.pos.z; + } else { + i_this->field_0x694 = 0; + } + + e_kr_pos_move(i_this); + + if (i_this->mpMorf->isStop()) { + i_this->field_0x672 = 4; + + anm_init(i_this, 17, 3.0f, 2, l_e_krHIO.field_0x2c); + + i_this->field_0x69c[5] = l_e_krHIO.field_0x24 * (cM_rndF(30.0f) + 20.0f); + + cMtx_YrotS(*calc_mtx, playerActor->shape_angle.y + (s16)cM_rndFX(3000.0f)); + + unkXyz1.x = 0.0f; + unkXyz1.y = cM_rndF(100.0f) + 100.0f + TREG_F(15); + unkXyz1.z = cM_rndF(100.0f) + 300.0f + TREG_F(16); + MtxPosition(&unkXyz1, &i_this->field_0x678); + + i_this->field_0x678.x = i_this->field_0x678.x + playerActor->current.pos.x; + i_this->field_0x678.y = i_this->field_0x678.y + playerActor->eyePos.y; + i_this->field_0x678.z = i_this->field_0x678.z + playerActor->current.pos.z; + + i_this->field_0x69c[0] = cM_rndF(100.0f) + 20.0f; + i_this->field_0x68c = i_this->field_0x690 = 1.0f; + } else { + if (frame >= 15 && frame <= 27) { + unkFlag2 = true; + if (player->checkPlayerGuard() && i_this->mSphere1.ChkAtHit()) { + i_this->field_0x6aa = 10; + i_this->field_0x672 = 10; + i_this->field_0x69c[0] = l_e_krHIO.field_0x34; + + anm_init(i_this, 16, 0.0f, 0, l_e_krHIO.field_0x38); + + i_this->field_0x684 = TREG_F(7); + i_this->field_0x688 = 1.0f; + actor->speedF = -20.0f; + + unkFlag2 = false; + + i_this->mSound.startCreatureVoice(Z2SE_EN_KR_V_DAMAGE_S, -1); + } + } + } + break; + case 10: + case 11: + i_this->field_0xe8c = 0; + + e_kr_pos_move(i_this); + + if ((s32)i_this->mpMorf->getFrame() == 24) { + i_this->mSound.startCreatureVoice(Z2SE_EN_KR_V_FURA, -1); + } + + if (i_this->mpMorf->isStop() && i_this->field_0x672 == 10) { + i_this->field_0x672 = 11; + anm_init(i_this, 5, 0.0f, 2, l_e_krHIO.field_0x3c); + } + + if (i_this->field_0x69c[0] == 0) { + i_this->field_0x672 = 4; + i_this->field_0x69c[5] = l_e_krHIO.field_0x24 * (cM_rndF(30.0f) + 20.0f); + anm_init(i_this, 17, 10.0f, 2, l_e_krHIO.field_0x2c); + i_this->field_0x68c = i_this->field_0x690 = 0.0f; + } + + cLib_addCalc2(&actor->current.pos.y, i_this->mAcch.GetGroundH() + 100.0f + TREG_F(0x11), + 0.05f, 5.0f); + + break; + default: + break; + } + + if (i_this->field_0x664 != 0x03) { + unkXyz1 = i_this->field_0x678 - actor->current.pos; + + unkFloat1 = unkXyz1.abs(); + if (e_kr_player_bg_check(i_this) || e_kr_setpos_bg_check(i_this) || unkFlag1) { + i_this->mCurAction = i_this->field_0x664; + if (i_this->mCurAction == 4 || i_this->mCurAction == 7) { + i_this->field_0x672 = 10; + + anm_init(i_this, 8, 5.0f, 2, l_e_krHIO.field_0x28); + } else { + i_this->field_0x672 = 0; + i_this->field_0x69c[0] = 0; + i_this->field_0x69c[1] = 0; + i_this->field_0x670 = 1; + + anm_init(i_this, 13, TREG_F(0) + 12.0f, 2, 1.0f); + + actor->speedF = 0.0f; + + i_this->field_0x678.y = playerActor->current.pos.y + 500.0f; + i_this->field_0x69c[3] = cM_rndF(200.0f) + 300.0f; + } + i_this->field_0x68c = 0; + } + } + + if (unkFlag2) { + i_this->mSphere1.SetC(actor->eyePos); + dComIfG_Ccsp()->Set(&i_this->mSphere1); + } else { + i_this->mSphere1.ClrAtHit(); + } + + if ((i_this->field_0x6d6 & 0x3f) == 0 && pl_horse_check(i_this)) { + i_this->mCurAction = 8; + i_this->field_0x672 = 0; + } } -/* ############################################################################################## */ -/* 80705BC8-80705BCC 0000D0 0004+00 1/2 0/0 0/0 .rodata @5003 */ -SECTION_RODATA static f32 const lit_5003 = 6.0f / 5.0f; -COMPILER_STRIP_GATE(0x80705BC8, &lit_5003); - -/* 80705BCC-80705BD0 0000D4 0004+00 0/3 0/0 0/0 .rodata @5004 */ -#pragma push -#pragma force_active on -SECTION_RODATA static f32 const lit_5004 = 1.0f / 5.0f; -COMPILER_STRIP_GATE(0x80705BCC, &lit_5004); -#pragma pop - -/* 80705BD0-80705BD4 0000D8 0004+00 0/3 0/0 0/0 .rodata @5005 */ -#pragma push -#pragma force_active on -SECTION_RODATA static f32 const lit_5005 = 70.0f; -COMPILER_STRIP_GATE(0x80705BD0, &lit_5005); -#pragma pop - -/* 80705BD4-80705BD8 0000DC 0004+00 0/1 0/0 0/0 .rodata @5006 */ -#pragma push -#pragma force_active on -SECTION_RODATA static f32 const lit_5006 = 180.0f; -COMPILER_STRIP_GATE(0x80705BD4, &lit_5006); -#pragma pop - -/* 80705BD8-80705BDC 0000E0 0004+00 0/1 0/0 0/0 .rodata @5007 */ -#pragma push -#pragma force_active on -SECTION_RODATA static f32 const lit_5007 = 19.0f / 20.0f; -COMPILER_STRIP_GATE(0x80705BD8, &lit_5007); -#pragma pop - -/* 80705BDC-80705BE0 0000E4 0004+00 0/3 0/0 0/0 .rodata @5008 */ -#pragma push -#pragma force_active on -SECTION_RODATA static f32 const lit_5008 = 2.0f / 5.0f; -COMPILER_STRIP_GATE(0x80705BDC, &lit_5008); -#pragma pop - -/* 80705BE0-80705BE4 0000E8 0004+00 0/1 0/0 0/0 .rodata @5009 */ -#pragma push -#pragma force_active on -SECTION_RODATA static f32 const lit_5009 = 250.0f; -COMPILER_STRIP_GATE(0x80705BE0, &lit_5009); -#pragma pop - -/* 80705BE4-80705BE8 0000EC 0004+00 0/1 0/0 0/0 .rodata @5010 */ -#pragma push -#pragma force_active on -SECTION_RODATA static f32 const lit_5010 = -100.0f; -COMPILER_STRIP_GATE(0x80705BE4, &lit_5010); -#pragma pop - /* 80701CF4-807025B8 002434 08C4+00 1/1 0/0 0/0 .text e_kr_horse_move__FP10e_kr_class */ -static void e_kr_horse_move(e_kr_class* param_0) { - // NONMATCHING -} +static void e_kr_horse_move(e_kr_class* i_this) { + fopAc_ac_c* actor = &i_this->enemy; + fopAc_ac_c* player = dComIfGp_getPlayer(0); + cXyz unkXyz1; + cXyz unkXyz2; -/* ############################################################################################## */ -/* 80705D1C-80705D74 -00001 0058+00 1/1 0/0 0/0 .data @5114 */ -SECTION_DATA static void* lit_5114[22] = { - (void*)(((char*)e_kr_wait_move__FP10e_kr_class) + 0xA4), - (void*)(((char*)e_kr_wait_move__FP10e_kr_class) + 0xE0), - (void*)(((char*)e_kr_wait_move__FP10e_kr_class) + 0x108), - (void*)(((char*)e_kr_wait_move__FP10e_kr_class) + 0x1EC), - (void*)(((char*)e_kr_wait_move__FP10e_kr_class) + 0x238), - (void*)(((char*)e_kr_wait_move__FP10e_kr_class) + 0x614), - (void*)(((char*)e_kr_wait_move__FP10e_kr_class) + 0x614), - (void*)(((char*)e_kr_wait_move__FP10e_kr_class) + 0x614), - (void*)(((char*)e_kr_wait_move__FP10e_kr_class) + 0x614), - (void*)(((char*)e_kr_wait_move__FP10e_kr_class) + 0x614), - (void*)(((char*)e_kr_wait_move__FP10e_kr_class) + 0x614), - (void*)(((char*)e_kr_wait_move__FP10e_kr_class) + 0x2FC), - (void*)(((char*)e_kr_wait_move__FP10e_kr_class) + 0x2FC), - (void*)(((char*)e_kr_wait_move__FP10e_kr_class) + 0x2FC), - (void*)(((char*)e_kr_wait_move__FP10e_kr_class) + 0x614), - (void*)(((char*)e_kr_wait_move__FP10e_kr_class) + 0x614), - (void*)(((char*)e_kr_wait_move__FP10e_kr_class) + 0x614), - (void*)(((char*)e_kr_wait_move__FP10e_kr_class) + 0x614), - (void*)(((char*)e_kr_wait_move__FP10e_kr_class) + 0x614), - (void*)(((char*)e_kr_wait_move__FP10e_kr_class) + 0x614), - (void*)(((char*)e_kr_wait_move__FP10e_kr_class) + 0x614), - (void*)(((char*)e_kr_wait_move__FP10e_kr_class) + 0x50C), -}; + i_this->field_0xe8c = 1; + + s32 frame = i_this->mpMorf->getFrame(); + f32 speed = dComIfGp_getHorseActor()->speedF; + if (speed > 60.0f) { + speed = 60.0f; + } else if (speed < 30.0f) { + speed = 30.0f; + } + + s8 bVar2 = false; + + switch (i_this->field_0x672) { + case 0: { + i_this->field_0x672 = 2; + i_this->field_0x68c = i_this->field_0x690 = 0.0f; + anm_init(i_this, 8, 5.0f, 2, cM_rndF(0.2f) + 1.2f); + i_this->field_0x69c[1] = cM_rndF(100.0f) + 60.0f; + i_this->field_0x6bc = player->shape_angle.y; + i_this->field_0x69c[0] = 0; + i_this->field_0x69c[2] = 0; + i_this->field_0x69c[3] = 0; + } + case 1: { + if (i_this->field_0x69c[1] == 0) { + anm_init(i_this, 8, 5.0f, 2, cM_rndF(0.2f) + 1.0f); + + i_this->field_0x672 = 2; + i_this->field_0x69c[1] = cM_rndF(150.0f) + 70.0f; + } + + goto FROM_CASE_1; + } + case 2: { + if (i_this->field_0x69c[1] == 0) { + anm_init(i_this, 13, 10.0f, 2, 1.0f); + + i_this->field_0x672 = 1; + i_this->field_0x69c[1] = cM_rndF(150.0f) + 70.0f; + } + + FROM_CASE_1: + cLib_addCalcAngleS2(&i_this->field_0x6bc, player->shape_angle.y, 4, 0x200); + + if (i_this->field_0x69c[0] == 0) { + i_this->field_0x6b4 = cM_rndFX(400.0f); + i_this->field_0x6b8 = cM_rndF(180.0f) + 100.0f; + i_this->field_0x69c[0] = cM_rndF(70.0f) + 20.0f; + } + + f32 unkFloat1 = cM_ssin(i_this->field_0x6d6 * (KREG_S(7) + 200)) * 20.0f; + cMtx_YrotS(*calc_mtx, i_this->field_0x6bc); + unkXyz1.x = i_this->field_0x6b4; + unkXyz1.y = i_this->field_0x6b8; + unkXyz1.z = (speed - 30.0f) * (unkFloat1 + 30.0f); + MtxPosition(&unkXyz1, &unkXyz2); + i_this->field_0x678 = player->current.pos + unkXyz2; + unkXyz2 = i_this->field_0x678 - actor->current.pos; + unkFloat1 = unkXyz2.abs(); + if (i_this->field_0x69c[2] == 0) { + i_this->field_0x69c[2] = cM_rndF(30.0f) + 20.0f; + + if (unkFloat1 < 300.0f) { + speed *= 0.95f; + i_this->field_0x694 = 400.0f + NREG_F(3); + } else { + speed *= 1.2f; + i_this->field_0x694 = 600.0f + NREG_F(4); + } + + i_this->field_0x684 = speed; + i_this->field_0x688 = NREG_F(2) + 0.4f; + + if (i_this->field_0x684 - actor->speedF > 10.0f) { + if (i_this->field_0x672 == 1) { + i_this->field_0x672 = 2; + + anm_init(i_this, 8, 5.0f, 2, cM_rndF(0.2f) + 1.2f); + + i_this->field_0x69c[1] = cM_rndF(100.0f) + 60.0f; + } else { + i_this->mpMorf->setPlaySpeed(cM_rndF(0.2f) + 1.2f); + } + } + } + + if ((i_this->field_0x6d6 & 0x3f) == 0 && cM_rndF(1.0f) < 0.5f) { + kuti_open(i_this, 25, Z2SE_EN_KR_V_NAKU); + } + + if (i_this->field_0x69c[3] == 0) { + unkXyz1 = player->eyePos - actor->current.pos; + if (unkXyz1.abs() < JREG_F(0) + 250.0f) { + i_this->field_0x672 = 3; + + anm_init(i_this, 10, 5.0f, 2, cM_rndF(0.1f) + 1.0f); + + i_this->mSound.startCreatureVoice(Z2SE_EN_KR_V_ATTACK2, -1); + + i_this->field_0x69c[0] = JREG_S(1) + 0x14; + } + } + + break; + } + case 3: { + bVar2 = true; + + if (i_this->field_0x69c[0] == 0) { + anm_init(i_this, 9, 3.0f, 0, 1.0f); + + i_this->field_0x672 = 4; + } + + break; + } + case 4: { + bVar2 = true; + + speed = JREG_F(1) + 30.0f; + + cMtx_YrotS(*calc_mtx, (player->shape_angle).y); + + unkXyz1.x = 0.0f; + unkXyz1.y = 0.0f; + unkXyz1.z = JREG_F(7) + -100.0f; + + MtxPosition(&unkXyz1, &unkXyz2); + cLib_addCalc2(&actor->current.pos.x, player->eyePos.x + unkXyz2.x, 0.5f, speed); + cLib_addCalc2(&actor->current.pos.y, player->eyePos.y, 0.5f, speed); + cLib_addCalc2(&actor->current.pos.z, player->eyePos.z + unkXyz2.z, 0.5f, speed); + + if (frame >= 10) { + i_this->mSphere1.SetC(i_this->field_0xe64[0]); + dComIfG_Ccsp()->Set(&i_this->mSphere1); + } else { + i_this->mSphere1.ClrAtHit(); + } + + if (i_this->mpMorf->isStop() && JREG_S(3) == 0) { + i_this->field_0x672 = 2; + i_this->field_0x69c[1] = 0; + i_this->field_0x69c[3] = cM_rndF(100.0f) + 60.0f; + } + + break; + } + } + + if (bVar2) { + cLib_addCalcAngleS2(&i_this->field_0x6bc, player->shape_angle.y, 2, 0x2000); + cMtx_YrotS(*calc_mtx, i_this->field_0x6bc); + + unkXyz1.x = 0.0f; + unkXyz1.y = 200.0f; + unkXyz1.z = 100.0f; + MtxPosition(&unkXyz1, &unkXyz2); + + i_this->field_0x678 = player->current.pos + unkXyz2; + + i_this->field_0x694 = 1000.0f + NREG_F(4); + } + e_kr_pos_move(i_this); + if ((i_this->field_0x6d6 & 0x3f) == 0 && !pl_horse_check(i_this)) { + i_this->mCurAction = 3; + i_this->field_0x672 = 0; + } +} /* 807025B8-80702C08 002CF8 0650+00 2/1 0/0 0/0 .text e_kr_wait_move__FP10e_kr_class */ -static void e_kr_wait_move(e_kr_class* param_0) { - // NONMATCHING -} +static void e_kr_wait_move(e_kr_class* i_this) { + fopAc_ac_c* playerActor = dComIfGp_getPlayer(0); + daPy_py_c* player = (daPy_py_c*)playerActor; + fopAc_ac_c* actor = &i_this->enemy; -/* ############################################################################################## */ -/* 80705D74-80705DCC -00001 0058+00 1/1 0/0 0/0 .data @5210 */ -SECTION_DATA static void* lit_5210[22] = { - (void*)(((char*)e_kr_su_wait_move__FP10e_kr_class) + 0xA4), - (void*)(((char*)e_kr_su_wait_move__FP10e_kr_class) + 0xE0), - (void*)(((char*)e_kr_su_wait_move__FP10e_kr_class) + 0x108), - (void*)(((char*)e_kr_su_wait_move__FP10e_kr_class) + 0x1EC), - (void*)(((char*)e_kr_su_wait_move__FP10e_kr_class) + 0x238), - (void*)(((char*)e_kr_su_wait_move__FP10e_kr_class) + 0x5C8), - (void*)(((char*)e_kr_su_wait_move__FP10e_kr_class) + 0x5C8), - (void*)(((char*)e_kr_su_wait_move__FP10e_kr_class) + 0x5C8), - (void*)(((char*)e_kr_su_wait_move__FP10e_kr_class) + 0x5C8), - (void*)(((char*)e_kr_su_wait_move__FP10e_kr_class) + 0x5C8), - (void*)(((char*)e_kr_su_wait_move__FP10e_kr_class) + 0x5C8), - (void*)(((char*)e_kr_su_wait_move__FP10e_kr_class) + 0x2FC), - (void*)(((char*)e_kr_su_wait_move__FP10e_kr_class) + 0x2FC), - (void*)(((char*)e_kr_su_wait_move__FP10e_kr_class) + 0x2FC), - (void*)(((char*)e_kr_su_wait_move__FP10e_kr_class) + 0x5C8), - (void*)(((char*)e_kr_su_wait_move__FP10e_kr_class) + 0x5C8), - (void*)(((char*)e_kr_su_wait_move__FP10e_kr_class) + 0x5C8), - (void*)(((char*)e_kr_su_wait_move__FP10e_kr_class) + 0x5C8), - (void*)(((char*)e_kr_su_wait_move__FP10e_kr_class) + 0x5C8), - (void*)(((char*)e_kr_su_wait_move__FP10e_kr_class) + 0x5C8), - (void*)(((char*)e_kr_su_wait_move__FP10e_kr_class) + 0x5C8), - (void*)(((char*)e_kr_su_wait_move__FP10e_kr_class) + 0x4C0), -}; + cXyz unkXyz1; + cXyz unkXyz2; + + s8 unkByte1 = -1; + f32 speedX = fabsf(actor->speed.x); + if (speedX < 5.0f) { + speedX = 5.0f; + } + f32 speedZ = fabsf(actor->speed.z); + if (speedZ < 5.0f) { + speedZ = 5.0f; + } + + i_this->field_0xe8c = 2; + + switch (i_this->field_0x672) { + case -1: + i_this->field_0x91c = true; + + if (!i_this->mpMorf->isStop()) { + break; + } + + i_this->field_0x672 = 0; + case 0: + anm_init(i_this, 21, 1.0f, 2, 1.0f); + + i_this->field_0x672 = 1; + i_this->field_0x69c[0] = 100; + case 1: + i_this->field_0x91c = true; + + cLib_addCalcAngleS2(&actor->current.angle.y, actor->home.angle.y, 5, 0x300); + cLib_addCalcAngleS2(&actor->current.angle.x, 0, 5, 0x800); + cLib_addCalcAngleS2(&actor->current.angle.z, 0, 5, 0x800); + + cLib_addCalc2(&actor->current.pos.x, actor->home.pos.x, 0.2f, speedX); + cLib_addCalc2(&actor->current.pos.z, actor->home.pos.z, 0.2f, speedZ); + actor->current.pos.y = actor->home.pos.y; + + if (i_this->field_0x69c[0] == 0 && e_kr_player_view_check(i_this)) { + i_this->field_0x672 = 2; + i_this->field_0x69c[0] = 0x1e; + + anm_init(i_this, 7, 5.0f, 0, 1.0f); + + i_this->mSound.startCreatureVoice(Z2SE_EN_KR_V_FIND, -1); + } + + break; + case 2: + i_this->field_0xe8c = 1; + + if (i_this->field_0x69c[0] != 0) { + break; + } + + i_this->field_0x672 = 3; + + anm_init(i_this, 8, 5.0f, 2, l_e_krHIO.field_0x28 * 1.5f); + + i_this->field_0x69c[0] = TREG_S(0) + 0x46; + case 3: + i_this->field_0xe8c = 1; + cLib_addCalcAngleS2(&actor->current.angle.y, i_this->field_0x6c0, 10, 0x200); + unkXyz1.x = 0.0f; + unkXyz1.y = TREG_F(0) * 10.0f + 300.0f; + unkXyz1.z = TREG_F(1) * 10.0f + 300.0f; + cMtx_YrotS(*calc_mtx, actor->current.angle.y); + MtxPosition(&unkXyz1, &unkXyz2); + cLib_addCalc2(&actor->current.pos.x, actor->home.pos.x + unkXyz2.x, 0.1f, 10.0f); + cLib_addCalc2(&actor->current.pos.y, actor->home.pos.y + unkXyz2.y, 0.1f, 10.0f); + cLib_addCalc2(&actor->current.pos.z, actor->home.pos.z + unkXyz2.z, 0.1f, 10.0f); + if (i_this->field_0x69c[0] == 0) { + i_this->mCurAction = 3; + i_this->field_0x672 = 0; + } + break; + case 10: + case 11: + case 12: { + unkByte1 = 0; + i_this->field_0xe8c = 0; + + unkXyz1.x = 0.0f; + unkXyz1.y = 0.0f; + unkXyz1.z = 0.0f; + + cMtx_YrotS(*calc_mtx, actor->current.angle.y); + MtxPosition(&unkXyz1, &unkXyz2); + + speedX = 80.0f; + if (i_this->field_0x672 == 10) { + speedX = 300.0f; + } + + i_this->field_0x678.x = actor->home.pos.x + unkXyz2.x; + i_this->field_0x678.y = actor->home.pos.y + speedX; + i_this->field_0x678.z = actor->home.pos.z + unkXyz2.z; + + i_this->field_0x684 = 20.0f; + i_this->field_0x688 = 5.0f; + i_this->field_0x694 = 2000.0f; + + f32 diffX = i_this->field_0x678.x - actor->current.pos.x; + f32 diffY = i_this->field_0x678.y - actor->current.pos.y; + f32 diffZ = i_this->field_0x678.z - actor->current.pos.z; + f32 diff = JMAFastSqrt(diffX * diffX + diffY * diffY + diffZ * diffZ); + + if (i_this->field_0x672 == 10) { + if (diff < 2000.0f) { + i_this->field_0x672 = 0xb; + } else { + if (e_kr_player_view_check(i_this)) { + i_this->mCurAction = 3; + i_this->field_0x672 = 0; + i_this->mSound.startCreatureVoice(Z2SE_EN_KR_V_FIND, -1); + } + } + } else if (i_this->field_0x672 == 0xb) { + if (diff < l_e_krHIO.field_0x50) { + i_this->field_0x672 = 12; + + anm_init(i_this, 11, 10.0f, 0, 1.0f); + } + } else if (i_this->field_0x672 == 12) { + i_this->field_0xea8 = KREG_F(0xb) + 1000.0f; + if (diff < 10.0f * TREG_F(9) + 300.0f) { + i_this->field_0x672 = 0x14; + + anm_init(i_this, 15, 5.0f, 2, l_e_krHIO.field_0x44); + + i_this->field_0x670 = 10; + actor->speed.y = 0.0f; + i_this->field_0x6d8 = 0; + unkByte1 = -1; + } + } + break; + } + case 20: { + i_this->field_0x91c = true; + i_this->field_0xe8c = 0; + s32 unkInt1 = i_this->field_0x6d8; + i_this->field_0x6d8++; + + cLib_addCalc2(&actor->current.pos.x, actor->home.pos.x, 0.1f, speedX); + cLib_addCalc2(&actor->current.pos.z, actor->home.pos.z, 0.1f, speedZ); + actor->current.pos.y = actor->current.pos.y + actor->speed.y; + + if (unkInt1 > l_e_krHIO.field_0x40) { + actor->speed.y = actor->speed.y - (TREG_F(7) + 0.8f); + } + + cLib_addCalcAngleS2(&actor->current.angle.x, 0, 5, 0x800); + cLib_addCalcAngleS2(&actor->current.angle.y, actor->home.angle.y, 5, 0x300); + cLib_addCalcAngleS2(&actor->current.angle.z, 0, 5, 0x800); + + if (actor->current.pos.y <= actor->home.pos.y) { + actor->current.pos.y = actor->home.pos.y; + actor->speed.y = -0.5f; + if (unkInt1 > l_e_krHIO.field_0x40) { + anm_init(i_this, 19, 5.0f, 0, l_e_krHIO.field_0x48); + i_this->field_0x672 = -1; + } + } + + break; + } + } + + switch (unkByte1) { + case 0: + e_kr_pos_move(i_this); + break; + } +} /* 80702C08-8070320C 003348 0604+00 2/1 0/0 0/0 .text e_kr_su_wait_move__FP10e_kr_class */ -static void e_kr_su_wait_move(e_kr_class* param_0) { - // NONMATCHING +static void e_kr_su_wait_move(e_kr_class* i_this) { + fopAc_ac_c* playerActor = dComIfGp_getPlayer(0); + daPy_py_c* player = (daPy_py_c*)playerActor; + fopAc_ac_c* actor = &i_this->enemy; + + cXyz unkXyz1; + cXyz unkXyz2; + + s8 unkByte1 = -1; + + f32 unkFloat1 = fabsf(actor->speed.x); + if (unkFloat1 < 5.0f) { + unkFloat1 = 5.0f; + } + + f32 unkFloat2 = fabsf(actor->speed.z); + if (unkFloat2 < 5.0f) { + unkFloat2 = 5.0f; + } + + i_this->field_0xe8c = 2; + + switch (i_this->field_0x672) { + case -1: + i_this->field_0x91c = true; + + if (!i_this->mpMorf->isStop()) { + break; + } + + i_this->field_0x672 = 0; + case 0: + anm_init(i_this, 21, 1.0f, 2, 1.0f); + + i_this->field_0x672 = 1; + i_this->field_0x69c[0] = 100; + case 1: + i_this->field_0x91c = true; + + cLib_addCalcAngleS2(&actor->current.angle.y, actor->home.angle.y, 5, 0x300); + cLib_addCalcAngleS2(&actor->current.angle.x, 0, 5, 0x800); + cLib_addCalcAngleS2(&actor->current.angle.z, 0, 5, 0x800); + + cLib_addCalc2(&actor->current.pos.x, actor->home.pos.x, 0.2f, unkFloat1); + cLib_addCalc2(&actor->current.pos.z, actor->home.pos.z, 0.2f, unkFloat2); + + actor->current.pos.y = actor->home.pos.y; + + if (i_this->field_0x69c[0] == 0 && e_kr_player_view_check(i_this)) { + i_this->field_0x672 = 2; + i_this->field_0x69c[0] = 30; + + anm_init(i_this, 7, 5.0f, 0, 1.0f); + + i_this->mSound.startCreatureVoice(Z2SE_EN_KR_V_FIND, -1); + } + + break; + case 2: + i_this->field_0xe8c = 1; + if (i_this->field_0x69c[0] != 0) { + break; + } + + i_this->field_0x672 = 3; + + anm_init(i_this, 8, 5.0f, 2, l_e_krHIO.field_0x28 * 1.5f); + + i_this->field_0x69c[0] = 70 + TREG_S(0); + case 3: + i_this->field_0xe8c = 1; + + cLib_addCalcAngleS2(&actor->current.angle.y, i_this->field_0x6c0, 10, 0x200); + + unkXyz1.x = 0.0f; + unkXyz1.y = 10.0f * TREG_F(0) + 300.0f; + unkXyz1.z = 10.0f * TREG_F(1) + 300.0f; + + cMtx_YrotS(*calc_mtx, actor->current.angle.y); + + MtxPosition(&unkXyz1, &unkXyz2); + + cLib_addCalc2(&actor->current.pos.x, actor->home.pos.x + unkXyz2.x, 0.1f, 10.0f); + cLib_addCalc2(&actor->current.pos.y, actor->home.pos.y + unkXyz2.y, 0.1f, 10.0f); + cLib_addCalc2(&actor->current.pos.z, actor->home.pos.z + unkXyz2.z, 0.1f, 10.0f); + + if (i_this->field_0x69c[0] == 0) { + i_this->mCurAction = 3; + i_this->field_0x672 = 0; + } + + break; + case 10: + case 11: + case 12: { + unkByte1 = 0; + i_this->field_0xe8c = 0; + + unkXyz1.x = 0.0f; + unkXyz1.y = 0.0f; + unkXyz1.z = 0.0f; + + cMtx_YrotS(*calc_mtx, actor->current.angle.y); + MtxPosition(&unkXyz1, &unkXyz2); + + unkFloat1 = 80.0f; + if (i_this->field_0x672 == 10) { + unkFloat1 = 300.0f; + } + i_this->field_0x678.x = actor->home.pos.x + unkXyz2.x; + i_this->field_0x678.y = actor->home.pos.y + unkFloat1; + i_this->field_0x678.z = actor->home.pos.z + unkXyz2.z; + + i_this->field_0x684 = 20.0f; + i_this->field_0x688 = 5.0f; + i_this->field_0x694 = 2000.0f; + + f32 diffX = i_this->field_0x678.x - actor->current.pos.x; + f32 diffY = i_this->field_0x678.y - actor->current.pos.y; + f32 diffZ = i_this->field_0x678.z - actor->current.pos.z; + + f32 diff = JMAFastSqrt(diffX * diffX + diffY * diffY + diffZ * diffZ); + if (i_this->field_0x672 == 10) { + if (diff < 2000.0f) { + i_this->field_0x672 = 11; + } + } else if (i_this->field_0x672 == 0xb) { + if (diff < l_e_krHIO.field_0x50) { + i_this->field_0x672 = 12; + + anm_init(i_this, 11, 10.0f, 0, 1.0f); + } + } else if (i_this->field_0x672 == 12) { + i_this->field_0xea8 = KREG_F(0xb) + 1000.0f; + + if (diff < TREG_F(9) * 10.0f + 300.0f) { + i_this->field_0x672 = 0x14; + + anm_init(i_this, 15, 5.0f, 2, l_e_krHIO.field_0x44); + + i_this->field_0x670 = 10; + actor->speed.y = 0.0f; + i_this->field_0x6d8 = 0; + unkByte1 = -1; + } + } + break; + } + case 20: { + i_this->field_0x91c = 1; + i_this->field_0xe8c = 0; + + s32 unkInt1 = (s32)i_this->field_0x6d8; + i_this->field_0x6d8++; + + cLib_addCalc2(&actor->current.pos.x, actor->home.pos.x, 0.1f, unkFloat1); + cLib_addCalc2(&actor->current.pos.z, actor->home.pos.z, 0.1f, unkFloat2); + + actor->current.pos.y = actor->current.pos.y + actor->speed.y; + + if (unkInt1 > l_e_krHIO.field_0x40) { + actor->speed.y = actor->speed.y - (TREG_F(7) + 0.8f); + } + + cLib_addCalcAngleS2(&actor->current.angle.x, 0, 5, 0x800); + cLib_addCalcAngleS2(&actor->current.angle.y, actor->home.angle.y, 5, 0x300); + cLib_addCalcAngleS2(&actor->current.angle.z, 0, 5, 0x800); + + if (actor->current.pos.y <= actor->home.pos.y) { + actor->current.pos.y = actor->home.pos.y; + actor->speed.y = -0.5f; + + if (unkInt1 > l_e_krHIO.field_0x40) { + anm_init(i_this, 19, 5.0f, 0, l_e_krHIO.field_0x48); + + i_this->field_0x672 = -1; + } + } + break; + } + } + + switch (unkByte1) { + case 0: + e_kr_pos_move(i_this); + break; + } } /* 8070320C-8070329C 00394C 0090+00 1/1 0/0 0/0 .text body_smoke_set__FP10e_kr_class */ -static void body_smoke_set(e_kr_class* param_0) { - // NONMATCHING +static void body_smoke_set(e_kr_class* i_this) { + cXyz unkXyz1; + cXyz unkXyz2; + + MTXCopy(i_this->mpMorf->getModel()->getAnmMtx(1), *calc_mtx); + unkXyz1.set(0.0f, 0.0f, 0.0f); + MtxPosition(&unkXyz1, &unkXyz2); + + fopAcM_effSmokeSet1(&i_this->field_0xec4[0], &i_this->field_0xed8[0], &unkXyz2, NULL, + 1.2f + XREG_F(4), &i_this->enemy.tevStr, 1); } -/* ############################################################################################## */ -/* 80705BE8-80705BEC 0000F0 0004+00 0/2 0/0 0/0 .rodata @5111 */ -#pragma push -#pragma force_active on -SECTION_RODATA static f32 const lit_5111 = 1.5f; -COMPILER_STRIP_GATE(0x80705BE8, &lit_5111); -#pragma pop - -/* 80705BEC-80705BF0 0000F4 0004+00 0/0 0/0 0/0 .rodata @5112 */ -#pragma push -#pragma force_active on -SECTION_RODATA static f32 const lit_5112 = 80.0f; -COMPILER_STRIP_GATE(0x80705BEC, &lit_5112); -#pragma pop - -/* 80705BF0-80705BF4 0000F8 0004+00 0/0 0/0 0/0 .rodata @5113 */ -#pragma push -#pragma force_active on -SECTION_RODATA static f32 const lit_5113 = 4.0f / 5.0f; -COMPILER_STRIP_GATE(0x80705BF0, &lit_5113); -#pragma pop - -/* 80705BF4-80705BF8 0000FC 0004+00 0/1 0/0 0/0 .rodata @5267 */ -#pragma push -#pragma force_active on -SECTION_RODATA static f32 const lit_5267 = -50.0f; -COMPILER_STRIP_GATE(0x80705BF4, &lit_5267); -#pragma pop - -/* 80705DCC-80705DDC 000178 0010+00 1/1 0/0 0/0 .data wing_j$5235 */ -SECTION_DATA static u8 wing_j[16] = { - 0x00, 0x00, 0x00, 0x0C, 0x00, 0x00, 0x00, 0x0D, 0x00, 0x00, 0x00, 0x11, 0x00, 0x00, 0x00, 0x12, -}; - /* 8070329C-8070338C 0039DC 00F0+00 1/1 0/0 0/0 .text wing_smoke_set__FP10e_kr_class */ -static void wing_smoke_set(e_kr_class* param_0) { - // NONMATCHING +static void wing_smoke_set(e_kr_class* i_this) { + static int wing_j[4] = {0x0C, 0x0D, 0x11, 0x12}; + + cXyz unkXyz1; + cXyz unkXyz2; + + for (s32 i = 0; i <= 3; i++) { + MTXCopy(i_this->mpMorf->getModel()->getAnmMtx(wing_j[i]), *calc_mtx); + if (i <= 1) { + unkXyz1.set(0.0f, 0.0f, 50.0f); + } else { + unkXyz1.set(0.0f, 0.0f, -50.0f); + } + MtxPosition(&unkXyz1, &unkXyz2); + + fopAcM_effSmokeSet2(&i_this->field_0xec4[i + 1], &i_this->field_0xed8[i + 1], &unkXyz2, 0, + 1.5f + XREG_F(3), &i_this->enemy.tevStr); + } } -/* ############################################################################################## */ -/* 80705BF8-80705BFC 000100 0004+00 0/1 0/0 0/0 .rodata @5342 */ -#pragma push -#pragma force_active on -SECTION_RODATA static f32 const lit_5342 = -3.0f; -COMPILER_STRIP_GATE(0x80705BF8, &lit_5342); -#pragma pop - -/* 80705BFC-80705C00 000104 0004+00 0/1 0/0 0/0 .rodata @5343 */ -#pragma push -#pragma force_active on -SECTION_RODATA static f32 const lit_5343 = 24.0f / 25.0f; -COMPILER_STRIP_GATE(0x80705BFC, &lit_5343); -#pragma pop - -/* 80705C00-80705C04 000108 0004+00 0/2 0/0 0/0 .rodata @5344 */ -#pragma push -#pragma force_active on -SECTION_RODATA static f32 const lit_5344 = 8000.0f; -COMPILER_STRIP_GATE(0x80705C00, &lit_5344); -#pragma pop - -/* 80705C04-80705C08 00010C 0004+00 0/1 0/0 0/0 .rodata @5345 */ -#pragma push -#pragma force_active on -SECTION_RODATA static f32 const lit_5345 = 15.0f; -COMPILER_STRIP_GATE(0x80705C04, &lit_5345); -#pragma pop - -/* 80705C08-80705C0C 000110 0004+00 0/1 0/0 0/0 .rodata @5346 */ -#pragma push -#pragma force_active on -SECTION_RODATA static f32 const lit_5346 = -30.0f; -COMPILER_STRIP_GATE(0x80705C08, &lit_5346); -#pragma pop - /* 8070338C-80703990 003ACC 0604+00 1/1 0/0 0/0 .text e_kr_damage__FP10e_kr_class */ -static void e_kr_damage(e_kr_class* param_0) { - // NONMATCHING +static s8 e_kr_damage(e_kr_class* i_this) { + fopAc_ac_c* actor = &i_this->enemy; + fopEn_enemy_c* enemy = (fopEn_enemy_c*)actor; + cXyz unkXyz1; + s32 unkInt1 = 0; + + i_this->field_0xe8c = 0; + i_this->field_0x6c8 = 10; + actor->speedF = 0.0f; + cLib_addCalcAngleS2(&actor->current.angle.x, 0, 1, 0x800); + + if (enemy->checkCutDownHitFlg()) { + enemy->offCutDownHitFlg(); + i_this->field_0x672 = 3; + i_this->field_0xefc = 1; + i_this->field_0x69c[0] = 0x46; + + i_this->mSound.startCreatureVoice(Z2SE_EN_KR_V_DEATH2, -1); + + enemy->offDownFlg(); + + i_this->field_0xea8 = 5000.0f + KREG_F(17); + i_this->field_0xeae = i_this->field_0xeb0 = 0; + i_this->field_0xeb2 = cM_rndF(400.0f); + i_this->field_0xeb4 = cM_rndF(400.0f); + i_this->field_0xebe = 15 + TREG_S(7); + actor->health = 0; + } + + s8 retVal = 1; + + switch (i_this->field_0x672) { + case 0: { + anm_init(i_this, 6, 0.0f, 0, 1.0f); + i_this->field_0x672 = 1; + unkXyz1.x = 0.0f; + unkXyz1.y = 30.0f + BREG_F(4) + cM_rndF(10.0f); + unkXyz1.z = -i_this->field_0x6d0; + cMtx_YrotS(*calc_mtx, i_this->field_0x6ca); + MtxPosition(&unkXyz1, &actor->speed); + i_this->field_0xeb6 = 8000; + i_this->field_0x69c[1] = 90; + } + case 1: { + actor->current.pos += actor->speed; + actor->speed.y += -3.0f; + + if (actor->speed.y < 0.0f) { + actor->speed.x *= 0.96f; + actor->speed.z *= 0.96f; + cLib_addCalcAngleS2(&i_this->field_0x6ea.x, -0x4000, 4, (BREG_S(7) + 0x180)); + } + + i_this->field_0xea8 = KREG_F(14) + 3000.0f; + actor->current.angle.y = actor->current.angle.y + i_this->field_0x6d4; + + if (i_this->mAcch.ChkGroundHit()) { + i_this->field_0x672 = 2; + i_this->field_0xea8 = 5000.0f + KREG_F(17); + i_this->field_0xeb8 = 8000.0f + KREG_F(19); + actor->speed.y = 15.0f + BREG_F(8); + actor->speed.x *= 0.4f; + actor->speed.z *= 0.4f; + actor->current.pos += actor->speed; + + body_smoke_set(i_this); + + if (actor->health > 0) { + enemy->onDownFlg(); + } + } + + break; + } + case 2: { + actor->current.pos += actor->speed; + actor->speed.y += -3.0f; + + if (i_this->mAcch.ChkGroundHit()) { + actor->speed.x = 0.0f; + actor->speed.z = 0.0f; + i_this->field_0x6d0 = 0; + i_this->field_0x672 = 3; + i_this->field_0x69c[0] = 0x50; + i_this->field_0xea8 = KREG_F(0x11) + 5000.0f; + i_this->field_0xeb2 = cM_rndF(200.0f); + i_this->field_0xeb4 = cM_rndF(200.0f); + + body_smoke_set(i_this); + } + + cLib_addCalcAngleS2(&i_this->field_0x6ea.x, -0x4000, 1, 0x800); + + break; + } + case 3: { + if (actor->health > 0) { + i_this->mSound.startCreatureSoundLevel(Z2SE_EN_KR_V_DOWN, 0, -1); + } else { + retVal = 0; + } + + if (i_this->field_0x69c[0] == (s16)(70 + XREG_S(0))) { + wing_smoke_set(i_this); + } + + cLib_addCalcAngleS2(&i_this->field_0x6ea.x, -0x4000, 1, 0x800); + cLib_addCalcAngleS2(&i_this->field_0xeb6, 0, 8, 200); + cLib_addCalcAngleS2(&i_this->field_0xeae, 8000, 0x10, i_this->field_0xeb2); + cLib_addCalcAngleS2(&i_this->field_0xeb0, 8000, 0x10, i_this->field_0xeb4); + + if (actor->health <= 0 && i_this->field_0x69c[0] == 0x14) { + unkInt1 = 1; + } + + if (i_this->field_0x69c[0] == 0) { + i_this->field_0xeae = i_this->field_0xeb0 = 0; + i_this->mCurAction = 3; + i_this->field_0x672 = 0; + i_this->field_0x69c[1] = 0; + + i_this->field_0x69c[1] = + l_e_krHIO.field_0x1c + cM_rndF(l_e_krHIO.field_0x1e - l_e_krHIO.field_0x1c); + i_this->field_0x6e1 = 0; + i_this->field_0xec0 = 1; + actor->current.angle.x = -0x3000; + + i_this->mSound.startCreatureVoice(Z2SE_EN_KR_V_AWAKE, -1); + + enemy->offDownFlg(); + } + } + } + + if (actor->speed.y < -30.0f) { + actor->speed.y = -30.0f; + } + + if (enemy->checkDownFlg()) { + enemy->setDownPos(&actor->current.pos); + } + + if (i_this->field_0xebe != 0) { + i_this->field_0xebe--; + i_this->field_0xebc = + (100.0f + TREG_F(5)) * + (i_this->field_0xebe * cM_ssin(i_this->field_0xebe * (0x3800 + TREG_S(9)))); + } + + if (actor->health <= 0 && i_this->field_0x69c[1] == 0 || unkInt1 != 0) { + fopAcM_createDisappear(actor, &actor->current.pos, 0xf, 0, 10); + fopAcM_delete(actor); + + if (i_this->field_0x667 != 0xff) { + dComIfGs_onSwitch(i_this->field_0x667, fopAcM_GetRoomNo(actor)); + } + } + + return retVal; } /* 80703990-80703D74 0040D0 03E4+00 1/1 0/0 0/0 .text damage_check__FP10e_kr_class */ -static void damage_check(e_kr_class* param_0) { - // NONMATCHING +static void damage_check(e_kr_class* i_this) { + fopAc_ac_c* player = dComIfGp_getPlayer(0); + fopAc_ac_c* actor = &i_this->enemy; + + i_this->mStts.Move(); + + if ((i_this->mSphere3.ChkTgHit() || i_this->mSphere2.ChkTgHit()) && i_this->field_0x6c8 == 0) { + if (i_this->mSphere3.ChkTgHit()) { + i_this->mAtInfo.mpCollider = i_this->mSphere3.GetTgHitObj(); + } else if (i_this->mSphere2.ChkTgHit()) { + i_this->mAtInfo.mpCollider = i_this->mSphere2.GetTgHitObj(); + s16 health = actor->health; // debug match + } + + if (i_this->mAtInfo.mpCollider->ChkAtType(0xd8000000)) { + i_this->field_0x6c8 = 20; + } else { + i_this->field_0x6c8 = 10; + } + + i_this->mAtInfo.mpActor = cc_at_check(actor, &i_this->mAtInfo); + if (i_this->field_0x66b != 0) { + dBomb_c* bomb = (dBomb_c*)fopAcM_SearchByID(i_this->mBombId); + + if (bomb != NULL) { + bomb->setCargoBombExplode(); + } + + i_this->field_0x66b = 0; + i_this->field_0xf00 = -1; + i_this->field_0xf04 = 0; + i_this->field_0x6ca = actor->shape_angle.y; + i_this->field_0x6cc = 0; + i_this->mCurAction = 9; + i_this->field_0x672 = 0; + i_this->field_0x6d0 = l_e_krHIO.field_0x58; + + if (cM_rndF(1.0f) < 0.5f) { + i_this->field_0x6d4 = cM_rndF(1000.0f) + 1000.0f; + } else { + i_this->field_0x6d4 = -(cM_rndF(1000.0f) + 1000.0f); + } + i_this->mSound.startCreatureVoice(Z2SE_EN_KR_V_DEATH, -1); + i_this->field_0xefc = 1; + actor->health = 0; + } else { + dKy_Sound_set(actor->current.pos, 100, fopAcM_GetID(i_this), 5); + if (i_this->mAtInfo.mAttackPower == 0) { + i_this->mCurAction = 3; + i_this->field_0x672 = 10; + i_this->field_0x69c[0] = l_e_krHIO.field_0x34; + + anm_init(i_this, 16, 0.0f, 0, l_e_krHIO.field_0x38); + + i_this->field_0x684 = TREG_F(7); + i_this->field_0x688 = 1.0f; + actor->speedF = -20.0f; + i_this->mSound.startCreatureVoice(Z2SE_EN_KR_V_DAMAGE_S, -1); + } else { + if (i_this->mAtInfo.mHitType == 1) { + i_this->field_0x6ca = i_this->field_0x6c0; + i_this->field_0x6cc = i_this->field_0x6c2; + } else { + i_this->field_0x6ca = i_this->mAtInfo.mHitDirection.y; + i_this->field_0x6cc = 0; + } + + i_this->mCurAction = 9; + i_this->field_0x672 = 0; + + if (i_this->mAtInfo.mHitStatus != 0) { + i_this->field_0x6d0 = l_e_krHIO.field_0x58; + } else { + i_this->field_0x6d0 = l_e_krHIO.field_0x5c; + } + + if (cM_rndF(1.0f) < 0.5f) { + i_this->field_0x6d4 = cM_rndF(1000.0f) + 1000.0f; + } else { + i_this->field_0x6d4 = -(cM_rndF(1000.0f) + 1000.0f); + } + + if (actor->health <= 0) { + i_this->mSound.startCreatureVoice(Z2SE_EN_KR_V_DEATH, -1); + i_this->field_0xefc = 1; + } else { + i_this->mSound.startCreatureVoice(Z2SE_EN_KR_V_DAMAGE, -1); + } + } + } + } } -/* ############################################################################################## */ -/* 80705C0C-80705C10 000114 0004+00 0/1 0/0 0/0 .rodata @5493 */ -#pragma push -#pragma force_active on -SECTION_RODATA static f32 const lit_5493 = -1000000000.0f; -COMPILER_STRIP_GATE(0x80705C0C, &lit_5493); -#pragma pop - -/* 80705C10-80705C14 000118 0004+00 0/1 0/0 0/0 .rodata @5494 */ -#pragma push -#pragma force_active on -SECTION_RODATA static f32 const lit_5494 = 75.0f; -COMPILER_STRIP_GATE(0x80705C10, &lit_5494); -#pragma pop - /* 80703D74-807040B0 0044B4 033C+00 1/1 0/0 0/0 .text ground_angle_set__FP10e_kr_class */ -static void ground_angle_set(e_kr_class* param_0) { - // NONMATCHING +static void ground_angle_set(e_kr_class* i_this) { + fopAc_ac_c* actor = &i_this->enemy; + + cXyz unkXyz1; + cXyz unkXyz2; + + Vec unkVec1; + + s16 unkShort1 = 0; + s16 unkShort2 = 0; + + f32 unkFloat1; + f32 diffY; + f32 diffZ; + + if (i_this->field_0x6ea.x <= -0x1000) { + J3DModel* model; + cXyz unkXyz3; + cXyz unkXyz4; + dBgS_GndChk gndChk; + + unkFloat1 = 75.0f; + + MTXCopy(i_this->mpMorf->getModel()->getAnmMtx(0), *calc_mtx); + unkXyz1.set(0.0f, 0.0f, 0.0f); + MtxPosition(&unkXyz1, &unkXyz3); + unkXyz3.y += 100.0f; + unkXyz3.y += 100.0f; + gndChk.SetPos(&unkXyz3); + unkXyz3.y = dComIfG_Bgsp().GroundCross(&gndChk); + if (unkXyz3.y != -1e+09f) { + unkVec1.x = unkXyz3.x; + unkVec1.y = unkXyz3.y + 100.0f; + unkVec1.z = unkXyz3.z + unkFloat1; + gndChk.SetPos(&unkVec1); + unkVec1.y = dComIfG_Bgsp().GroundCross(&gndChk); + if (unkVec1.y != -1e+09f) { + diffY = unkVec1.y - unkXyz3.y; + diffZ = unkVec1.z - unkXyz3.z; + unkShort2 = -cM_atan2s(diffY, diffZ); + if (unkShort2 > 0x3000 || unkShort2 < -0x3000) { + unkShort2 = 0; + } + } + + unkVec1.x = unkXyz3.x + unkFloat1; + unkVec1.y = unkXyz3.y + 100.0f; + unkVec1.z = unkXyz3.z; + gndChk.SetPos(&unkVec1); + unkVec1.y = dComIfG_Bgsp().GroundCross(&gndChk); + if (unkVec1.y != -1e+09f) { + diffY = unkVec1.y - unkXyz3.y; + diffZ = unkVec1.x - unkXyz3.x; + unkShort1 = (s16)cM_atan2s(diffY, diffZ); + if (unkShort1 > 0x3000 || unkShort1 < -0x3000) { + unkShort1 = 0; + } + } + } + + dBgS_LinChk linChk; + cXyz unkXyz5; + cXyz unkXyz6; + cXyz unkXyz7; + + unkXyz6 = actor->current.pos; + unkXyz6.y += JREG_F(5) + 30.0f; + + model = i_this->mpMorf->getModel(); + + unkXyz5.set(0.0f, 0.0f, 0.0f); + MTXCopy(model->getAnmMtx(5), *calc_mtx); + MtxPosition(&unkXyz5, &unkXyz7); + unkXyz7.y += JREG_F(6) + 30.0f; + linChk.Set(&unkXyz6, &unkXyz7, actor); + + if (dComIfG_Bgsp().LineCross(&linChk)) { + unkXyz5 = unkXyz6 - unkXyz7; + cMtx_YrotS(*calc_mtx, cM_atan2s(unkXyz5.x, unkXyz5.z)); + unkXyz5.x = 0.0f; + unkXyz5.y = 0.0f; + unkXyz5.z = 50.0f + TREG_F(11); + MtxPosition(&unkXyz5, &unkXyz2); + actor->current.pos += unkXyz2; + } + } + + cLib_addCalcAngleS2(&i_this->field_0x6f0.x, unkShort2, 1, 0x400); + cLib_addCalcAngleS2(&i_this->field_0x6f0.z, unkShort1, 1, 0x400); } -/* ############################################################################################## */ -/* 80705C14-80705C18 00011C 0004+00 1/1 0/0 0/0 .rodata @5527 */ -SECTION_RODATA static f32 const lit_5527 = 13.0f / 10.0f; -COMPILER_STRIP_GATE(0x80705C14, &lit_5527); - -/* 80705DDC-80705E08 -00001 002C+00 1/1 0/0 0/0 .data @5528 */ -SECTION_DATA static void* lit_5528[11] = { - (void*)(((char*)action__FP10e_kr_class) + 0x50), - (void*)(((char*)action__FP10e_kr_class) + 0xB0), - (void*)(((char*)action__FP10e_kr_class) + 0xB0), - (void*)(((char*)action__FP10e_kr_class) + 0x80), - (void*)(((char*)action__FP10e_kr_class) + 0x8C), - (void*)(((char*)action__FP10e_kr_class) + 0xB0), - (void*)(((char*)action__FP10e_kr_class) + 0xB0), - (void*)(((char*)action__FP10e_kr_class) + 0x94), - (void*)(((char*)action__FP10e_kr_class) + 0x6C), - (void*)(((char*)action__FP10e_kr_class) + 0x5C), - (void*)(((char*)action__FP10e_kr_class) + 0x9C), -}; - /* 807040B0-80704208 0047F0 0158+00 2/1 0/0 0/0 .text action__FP10e_kr_class */ -static void action(e_kr_class* param_0) { - // NONMATCHING +static void action(e_kr_class* i_this) { + fopEn_enemy_c* enemy = (fopEn_enemy_c*)&i_this->enemy; + + fopAc_ac_c* playerActor = dComIfGp_getPlayer(0); + daPy_py_c* player = (daPy_py_c*)playerActor; + + cXyz unkXyz1; + cXyz unkXyz2; + + enemy->attention_info.distances[fopAc_attn_BATTLE_e] = 3; + + s8 unkByte1 = 0; + s8 unkByte2 = 1; + s8 unkByte3 = 1; + + switch (i_this->mCurAction) { + case 0: + e_kr_auto_move(i_this); + unkByte1 = 1; + break; + case 9: + unkByte2 = e_kr_damage(i_this); + unkByte3 = 0; + break; + case 8: + enemy->attention_info.distances[fopAc_attn_BATTLE_e] = 22; + e_kr_horse_move(i_this); + unkByte1 = 1; + break; + case 3: + e_kr_atack_move(i_this); + unkByte1 = 1; + break; + case 4: + e_kr_wait_move(i_this); + break; + case 7: + e_kr_su_wait_move(i_this); + break; + case 10: + enemy->attention_info.distances[fopAc_attn_BATTLE_e] = 22; + unkByte2 = e_kr_path_move(i_this); + unkByte1 = 1; + } + + if (unkByte1) { + i_this->mSound.setLinkSearch(true); + } else { + i_this->mSound.setLinkSearch(false); + } + + if (unkByte2) { + fopAcM_OnStatus(enemy, 0); + enemy->attention_info.flags = 4; + } else { + fopAcM_OffStatus(enemy, 0); + enemy->attention_info.flags = 0; + } + + if (unkByte3) { + cLib_addCalcAngleS2(&i_this->field_0x6ea.x, 0, 4, 0x800); + } + + cXyz unkXyz3(1.3f, 1.3f, 1.3f); + setMidnaBindEffect(enemy, &i_this->mSound, &enemy->eyePos, &unkXyz3); } -/* ############################################################################################## */ -/* 80705C18-80705C1C 000120 0004+00 0/1 0/0 0/0 .rodata @5725 */ -#pragma push -#pragma force_active on -SECTION_RODATA static f32 const lit_5725 = 27.0f; -COMPILER_STRIP_GATE(0x80705C18, &lit_5725); -#pragma pop - -/* 80705C1C-80705C20 000124 0004+00 0/1 0/0 0/0 .rodata @5726 */ -#pragma push -#pragma force_active on -SECTION_RODATA static f32 const lit_5726 = 11.0f; -COMPILER_STRIP_GATE(0x80705C1C, &lit_5726); -#pragma pop - -/* 80705C20-80705C24 000128 0004+00 0/2 0/0 0/0 .rodata @5727 */ -#pragma push -#pragma force_active on -SECTION_RODATA static f32 const lit_5727 = 10000.0f; -COMPILER_STRIP_GATE(0x80705C20, &lit_5727); -#pragma pop - -/* 80705C24-80705C28 00012C 0004+00 0/1 0/0 0/0 .rodata @5728 */ -#pragma push -#pragma force_active on -SECTION_RODATA static f32 const lit_5728 = 200000.0f; -COMPILER_STRIP_GATE(0x80705C24, &lit_5728); -#pragma pop - -/* 80705C28-80705C2C 000130 0004+00 0/1 0/0 0/0 .rodata @5729 */ -#pragma push -#pragma force_active on -SECTION_RODATA static f32 const lit_5729 = 3.0f / 10.0f; -COMPILER_STRIP_GATE(0x80705C28, &lit_5729); -#pragma pop - /* 80704208-80704B5C 004948 0954+00 2/1 0/0 0/0 .text daE_Kr_Execute__FP10e_kr_class */ -static void daE_Kr_Execute(e_kr_class* param_0) { - // NONMATCHING +static int daE_Kr_Execute(e_kr_class* i_this) { + fopAc_ac_c* actor = &i_this->enemy; + + s16 unkShort1; + s16 unkShort2; + + fopAc_ac_c* playerActor = dComIfGp_getPlayer(0); + daPy_py_c* player = (daPy_py_c*)playerActor; + + cXyz unkXyz1; + cXyz unkXyz2; + f32 diffX = player->current.pos.x - actor->current.pos.x; + f32 diffY = player->eyePos.y - actor->current.pos.y; + f32 diffZ = player->current.pos.z - actor->current.pos.z; + + i_this->field_0x6c4 = JMAFastSqrt(diffX * diffX + diffZ * diffZ); + i_this->field_0x6c0 = cM_atan2s(diffX, diffZ); + i_this->field_0x6c2 = -cM_atan2s(diffY, i_this->field_0x6c4); + i_this->field_0x6d6++; + + for (s32 i = 0; i < 6; i++) { + if ((&i_this->field_0x69c[0])[i] != 0) { + i_this->field_0x69c[i]--; + } + } + + if (i_this->field_0x6aa != 0) { + i_this->field_0x6aa--; + } + if (i_this->field_0x6c8 != 0) { + i_this->field_0x6c8--; + } + + action(i_this); + + i_this->mpMorf->play(0, dComIfGp_getReverb(fopAcM_GetRoomNo(actor))); + + if (i_this->field_0x5b8 == 0xd) { + i_this->mSound.startCreatureSoundLevel(0x7002f, 0, -1); + } else { + if (i_this->mpMorf->checkFrame(27.0f) && i_this->field_0x5b8 == 8) { + i_this->mSound.startCreatureSound(Z2SE_EN_KR_WING, 0, -1); + } else if (i_this->mpMorf->checkFrame(11.0f) && i_this->field_0x5b8 == 15) { + i_this->mSound.startCreatureSound(Z2SE_EN_KR_WING, 0, -1); + } else if (i_this->mpMorf->checkFrame(12.0f) && i_this->field_0x5b8 == 17) { + i_this->mSound.startCreatureSound(Z2SE_EN_KR_WING, 0, -1); + } + } + + actor->shape_angle = actor->current.angle + i_this->field_0x6ea; + + ground_angle_set(i_this); + + MtxTrans(actor->current.pos.x, + actor->current.pos.y, + actor->current.pos.z, 0); + cMtx_XrotM(*calc_mtx, i_this->field_0x6f0.x); + cMtx_ZrotM(*calc_mtx, i_this->field_0x6f0.z); + cMtx_YrotM(*calc_mtx, actor->shape_angle.y); + cMtx_XrotM(*calc_mtx, actor->shape_angle.x); + cMtx_ZrotM(*calc_mtx, actor->shape_angle.z); + MtxScale(l_e_krHIO.field_0x14, l_e_krHIO.field_0x14, + l_e_krHIO.field_0x14, 1); + + J3DModel* model = i_this->mpMorf->getModel(); + model->setBaseScale(actor->scale); + model->setBaseTRMtx(*calc_mtx); + + i_this->mpMorf->modelCalc(); + MTXCopy(model->getAnmMtx(6), *calc_mtx); + unkXyz1.set(0.0f, 0.0f, 0.0f); + MtxPosition(&unkXyz1, &actor->eyePos); + + actor->attention_info.position = actor->eyePos; + actor->attention_info.position.y += 10.0f * TREG_F(8) + 50.0f; + + MTXCopy(model->getAnmMtx(22), *calc_mtx); + MtxPosition(&unkXyz1, i_this->field_0xe64); + + MTXCopy(model->getAnmMtx(27), *calc_mtx); + MtxPosition(&unkXyz1, &i_this->field_0xe64[1]); + + if ((i_this->field_0x66b != 0)) { + fopAc_ac_c* bomb = fopAcM_SearchByID(i_this->mBombId); + if (bomb != NULL && i_this->field_0x66b != 0) + { + bomb->current.pos = i_this->field_0xe64[0] + (i_this->field_0xe64[1] - i_this->field_0xe64[0]) / 2.0f; + bomb->current.pos.y += l_e_krHIO.field_0x78; + bomb->current.angle = actor->current.angle; + bomb->speedF = 0.0f; + } + } + if (i_this->field_0x6c8 != 0) { + cXyz unkXyz3(actor->eyePos.x - 10000.0f, 10000.0f, 200000.0f); + i_this->mSphere2.SetC(unkXyz3); + i_this->mSphere3.SetC(unkXyz3); + i_this->mSphere4.SetC(unkXyz3); + } else { + i_this->mSphere2.SetC(actor->eyePos); + i_this->mSphere3.SetC(actor->current.pos); + i_this->mSphere4.SetC(actor->current.pos); + } + + dComIfG_Ccsp()->Set(&i_this->mSphere2); + dComIfG_Ccsp()->Set(&i_this->mSphere3); + dComIfG_Ccsp()->Set(&i_this->mSphere4); + + f32 unkFloat1; + cXyz* unkXyzP1 = i_this->mStts.GetCCMoveP(); + if (unkXyzP1 != NULL) { + unkFloat1 = 0.3f + TREG_F(0x13); + actor->current.pos.x += unkXyzP1->x * unkFloat1; + actor->current.pos.y += unkXyzP1->y * unkFloat1; + actor->current.pos.z += unkXyzP1->z * unkFloat1; + } + + if (i_this->field_0x91c == 0) { + unkFloat1 = 70.0f + TREG_F(15); + if (i_this->mCurAction == 9) { + unkFloat1 = 5.0f + TREG_F(14); + } + +#if VERSION == VERSION_SHIELD_DEBUG + actor->current.pos.y = actor->current.pos.y - unkFloat1; + actor->old.pos.y = actor->old.pos.y - unkFloat1; + i_this->mAcch.CrrPos(dComIfG_Bgsp()); + actor->current.pos.y = actor->current.pos.y + unkFloat1; + actor->old.pos.y = actor->old.pos.y + unkFloat1; +#else + + cLib_addCalc2(&i_this->field_0x920, unkFloat1, 1.0f, 2.0f); + + actor->current.pos.y = actor->current.pos.y - i_this->field_0x920; + actor->old.pos.y = actor->old.pos.y - i_this->field_0x920; + i_this->mAcch.CrrPos(dComIfG_Bgsp()); + actor->current.pos.y = actor->current.pos.y + i_this->field_0x920; + actor->old.pos.y = actor->old.pos.y + i_this->field_0x920; +#endif + } + + i_this->field_0x91c = false; + + damage_check(i_this); + + s16 unkShort3 = 0x800; + if (i_this->field_0xe8c != 0) { + if (i_this->field_0xe8c == 1) { + diffX = player->current.pos.x - actor->current.pos.x; + diffZ = player->current.pos.z - actor->current.pos.z; + s16 diff = cM_atan2s(diffX, diffZ); + i_this->field_0xe7e = actor->current.angle.y - diff; + if (i_this->field_0xe7e > 0x2710) { + i_this->field_0xe7e = 10000; + } else { + if (i_this->field_0xe7e < -10000) { + i_this->field_0xe7e = 0xd8f0; + } + } + } else if (i_this->field_0xe8c == 2) { + unkShort3 = 0x200; + if ((i_this->field_0x6d6 & 0x1f) == 0 && cM_rndF(1.0f) < 0.5f) { + i_this->field_0xe7e = cM_rndFX(10000.0f); + } + if ((i_this->field_0x6d6 & 0x3f) == 0 && cM_rndF(1.0f) < 0.5f) { + kuti_open(i_this, 0x19, 0x7002b); + } + } + i_this->field_0xe8c = 0; + } else { + i_this->field_0xe7e = 0; + } + + cLib_addCalcAngleS2(&i_this->field_0xe7c, -(i_this->field_0xe7e / 2), 2, unkShort3); + s16 unkShort4 = 0; + if (i_this->field_0xe82 != 0) { + i_this->field_0xe82--; + unkShort4 = 10000; + if (i_this->field_0xe82 == i_this->field_0xe84 && i_this->field_0xe88 != 0) + { + i_this->mSound.startCreatureVoice(i_this->field_0xe88, -1); + } + } + + cLib_addCalcAngleS2(&i_this->field_0xe80, unkShort4, 2, 2000); + for (s32 i = 0; i <= 8; i++) { + i_this->field_0xe8e[i] = (i_this->field_0xea8 * cM_ssin(i_this->field_0x6d6 * (7000 + KREG_S(2)) + i * (11000 + KREG_S(3)))); + } + + cLib_addCalc0(&i_this->field_0xea8, 1.0f, TREG_F(0x12) + 200.0f); + if (i_this->field_0x6d0 > 0.01f) { + s16 unkShort5 = (s16)i_this->field_0x6ca - actor->shape_angle.y; + if (i_this->field_0x6ea.x <= -0x1000) { + unkShort5 = 0; + } + unkShort2 = -unkShort5 + 0x4000; + if (unkShort2 > 0x3a98) { + unkShort2 = 15000; + } else if (unkShort2 < -15000) { + unkShort2 = -15000; + } + unkShort1 = unkShort5 + 0x4000; + if (unkShort1 > 0x3a98) { + unkShort1 = 15000; + } else if (unkShort1 < -15000) { + unkShort1 = -15000; + } + } else { + unkShort2 = unkShort1 = 0; + } + + cLib_addCalcAngleS2(&i_this->field_0xe8e[9], unkShort2, 4, 0x800); + cLib_addCalcAngleS2(&i_this->field_0xe8e[10], unkShort1, 4, 0x800); + i_this->field_0xeac = i_this->field_0xeb8 * cM_ssin(i_this->field_0x6d6 * (NREG_S(2) + 7000)); + cLib_addCalc0(&i_this->field_0xeb8, 1.0f, NREG_F(0x12) + 300.0f); + if (i_this->field_0xefc != 0) { + cLib_addCalc2(&i_this->field_0xef8, -20.0f, 1.0f, 0.4f); + } + + return 1; } /* 80704B5C-80704B64 00529C 0008+00 1/0 0/0 0/0 .text daE_Kr_IsDelete__FP10e_kr_class */ -static bool daE_Kr_IsDelete(e_kr_class* param_0) { - return true; +static int daE_Kr_IsDelete(e_kr_class* i_this) { + return 1; } /* 80704B64-80704BB4 0052A4 0050+00 1/0 0/0 0/0 .text daE_Kr_Delete__FP10e_kr_class */ -static void daE_Kr_Delete(e_kr_class* param_0) { - // NONMATCHING +static int daE_Kr_Delete(e_kr_class* i_this) { + dComIfG_resDelete(&i_this->mPhase, "E_kr"); + fopEn_enemy_c* enemy = &i_this->enemy; +#if DEBUG + //l_e_krHIO.removeHIO(*enemy); //TODO: several missing inline functions +#endif + if (enemy->heap != NULL) { + i_this->mpMorf->stopZelAnime(); + } + return 1; } /* 80704BB4-80704CF0 0052F4 013C+00 1/1 0/0 0/0 .text useHeapInit__FP10fopAc_ac_c */ -static void useHeapInit(fopAc_ac_c* param_0) { - // NONMATCHING +static int useHeapInit(fopAc_ac_c* i_this) { + e_kr_class* kr = (e_kr_class*)i_this; + + kr->mpMorf = new mDoExt_McaMorfSO((J3DModelData*)dComIfG_getObjectRes("E_kr", 24), NULL, NULL, + (J3DAnmTransform*)dComIfG_getObjectRes("E_kr", 13), 2, 1.0f, + 0, -1, &((e_kr_class*)i_this)->mSound, 0x80000, 0x11000084); + if (kr->mpMorf == NULL || kr->mpMorf->getModel() == NULL) { + return 0; + } + + J3DModel* model = kr->mpMorf->getModel(); + model->setUserArea((int)kr); + + for (u16 i = 0; i < model->getModelData()->getJointNum(); i++) { + if (i != 0) { + model->getModelData()->getJointNodePointer(i)->setCallBack(nodeCallBack); + } + } + + return 1; } -/* ############################################################################################## */ -/* 80705C2C-80705C30 000134 0004+00 0/1 0/0 0/0 .rodata @5872 */ -#pragma push -#pragma force_active on -SECTION_RODATA static f32 const lit_5872 = -300.0f; -COMPILER_STRIP_GATE(0x80705C2C, &lit_5872); -#pragma pop - -/* 80705C30-80705C34 000138 0004+00 0/1 0/0 0/0 .rodata @5873 */ -#pragma push -#pragma force_active on -SECTION_RODATA static f32 const lit_5873 = -200.0f; -COMPILER_STRIP_GATE(0x80705C30, &lit_5873); -#pragma pop - -/* 80705E08-80705E48 0001B4 0040+00 0/1 0/0 0/0 .data at_sph_src$5807 */ -#pragma push -#pragma force_active on -static dCcD_SrcSph at_sph_src = { - { - {0x0, {{AT_TYPE_CSTATUE_SWING, 0x1, 0xd}, {0x0, 0x0}, 0x0}}, // mObj - {dCcD_SE_METAL, 0x0, 0x0, 0x0, 0x1}, // mGObjAt - {dCcD_SE_HARD_BODY, 0x0, 0x0, 0x0, 0x0}, // mGObjTg - {0x0}, // mGObjCo - }, // mObjInf - { - {{0.0f, 0.0f, 0.0f}, 25.0f} // mSph - } // mSphAttr -}; -#pragma pop - -/* 80705E48-80705E88 0001F4 0040+00 0/1 0/0 0/0 .data head_tg_sph_src$5808 */ -#pragma push -#pragma force_active on -static dCcD_SrcSph head_tg_sph_src = { - { - {0x0, {{0x0, 0x1, 0x0}, {0xd8fbfdff, 0x3}, 0x0}}, // 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}, 62.5f} // mSph - } // mSphAttr -}; -#pragma pop - -/* 80705E88-80705EC8 000234 0040+00 0/1 0/0 0/0 .data body_tg_sph_src$5809 */ -#pragma push -#pragma force_active on -static dCcD_SrcSph body_tg_sph_src = { - { - {0x0, {{0x0, 0x1, 0x0}, {0xd8fbfdff, 0x3}, 0x0}}, // 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}, 65.0f} // mSph - } // mSphAttr -}; -#pragma pop - -/* 80705EC8-80705F08 000274 0040+00 0/1 0/0 0/0 .data body_co_sph_src$5810 */ -#pragma push -#pragma force_active on -static dCcD_SrcSph body_co_sph_src = { - { - {0x0, {{0x0, 0x1, 0x0}, {0x0, 0x0}, 0x75}}, // mObj - {dCcD_SE_NONE, 0x0, 0x0, 0x0, 0x0}, // mGObjAt - {dCcD_SE_NONE, 0x0, 0x0, 0x0, 0x0}, // mGObjTg - {0x0}, // mGObjCo - }, // mObjInf - { - {{0.0f, 0.0f, 0.0f}, 80.0f} // mSph - } // mSphAttr -}; -#pragma pop - /* 80704CF0-80705004 005430 0314+00 1/0 0/0 0/0 .text daE_Kr_Create__FP10fopAc_ac_c */ -static void daE_Kr_Create(fopAc_ac_c* param_0) { - // NONMATCHING +static int daE_Kr_Create(fopAc_ac_c* i_this) { + static dCcD_SrcSph at_sph_src = { + { + {0x0, {{AT_TYPE_CSTATUE_SWING, 0x1, 0xd}, {0x0, 0x0}, 0x0}}, // mObj + {dCcD_SE_METAL, 0x0, 0x0, 0x0, 0x1}, // mGObjAt + {dCcD_SE_HARD_BODY, 0x0, 0x0, 0x0, 0x0}, // mGObjTg + {0x0}, // mGObjCo + }, // mObjInf + { + {{0.0f, 0.0f, 0.0f}, 25.0f} // mSph + } // mSphAttr + }; + static dCcD_SrcSph head_tg_sph_src = { + { + {0x0, {{0x0, 0x1, 0x0}, {(s32)0xd8fbfdff, 0x3}, 0x0}}, // 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}, 62.5f} // mSph + } // mSphAttr + }; + + static dCcD_SrcSph body_tg_sph_src = { + { + {0x0, {{0x0, 0x1, 0x0}, {(s32)0xd8fbfdff, 0x3}, 0x0}}, // 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}, 65.0f} // mSph + } // mSphAttr + }; + static dCcD_SrcSph body_co_sph_src = { + { + {0x0, {{0x0, 0x1, 0x0}, {0x0, 0x0}, 0x75}}, // mObj + {dCcD_SE_NONE, 0x0, 0x0, 0x0, 0x0}, // mGObjAt + {dCcD_SE_NONE, 0x0, 0x0, 0x0, 0x0}, // mGObjTg + {0x0}, // mGObjCo + }, // mObjInf + { + {{0.0f, 0.0f, 0.0f}, 80.0f} // mSph + } // mSphAttr + }; + + e_kr_class* kr = (e_kr_class*)i_this; + + s32 loadResult = dComIfG_resLoad(&kr->mPhase, "E_kr"); + fopAcM_SetupActor(i_this, e_kr_class); + + if (loadResult == cPhs_COMPLEATE_e) { + OS_REPORT("PARAM %x\n", fopAcM_GetParam(i_this)); + + kr->field_0x664 = (u8)fopAcM_GetParam(i_this); + if (kr->field_0x664 == 0xff) { + kr->field_0x664 = 0; + } + + kr->mCurAction = kr->field_0x664; + + kr->field_0x665 = (u8)(fopAcM_GetParam(i_this) >> 8); + kr->field_0x666 = (u8)(fopAcM_GetParam(i_this) >> 16); + kr->field_0x667 = kr->enemy.home.angle.z; + i_this->current.angle.z = 0; + + if (kr->field_0x667 != 0xff) { + if (dComIfGs_isSwitch(kr->field_0x667, fopAcM_GetRoomNo(&kr->enemy))) { + // "I'm not going to reset it because I've been defeated" + OS_REPORT("E_KR やられ後なので再セットしません\n"); + + return cPhs_ERROR_e; + } + } + + if (fopAcM_entrySolidHeap(i_this, useHeapInit, 0x21c0) == 0) { + return cPhs_ERROR_e; + } + + i_this->current.pos.y += 70.0f + TREG_F(5); + i_this->home.pos = i_this->current.pos; + if (kr->field_0x666 != 0xff) { + kr->field_0x6e4 = dPath_GetRoomPath(kr->field_0x666, fopAcM_GetRoomNo(i_this)); + if (kr->field_0x6e4 == NULL) { + return 5; + } + + kr->field_0x6e1 = kr->field_0x666 + 1; + kr->field_0x6e3 = 1; + kr->mCurAction = 10; + kr->field_0x672 = -10; + kr->field_0x674 = 0x01; + i_this->health = 0x28; + } else { + i_this->field_0x560 = i_this->health = 0x28; + } + kr->field_0xf00 = -1; + + OS_REPORT(""); + + fopAcM_SetMtx(i_this, kr->mpMorf->getModel()->getBaseTRMtx()); + + fopAcM_SetMin(i_this, -300.0f, -200.0f, -300.0f); + fopAcM_SetMax(i_this, 300.0f, 200.0f, 300.0f); + + kr->mAcch.Set(fopAcM_GetPosition_p(i_this), fopAcM_GetOldPosition_p(i_this), i_this, 1, + &kr->mAcchCir, fopAcM_GetSpeed_p(i_this), NULL, NULL); + + kr->mAcchCir.SetWall(100.0f, 100.0f); + + kr->mStts.Init(100, 0xff, i_this); + + kr->mSphere1.Set(at_sph_src); + kr->mSphere2.Set(head_tg_sph_src); + kr->mSphere3.Set(body_tg_sph_src); + kr->mSphere4.Set(body_co_sph_src); + + kr->mSphere1.SetStts(&kr->mStts); + kr->mSphere2.SetStts(&kr->mStts); + kr->mSphere3.SetStts(&kr->mStts); + kr->mSphere4.SetStts(&kr->mStts); + + kr->field_0x69c[3] = 300.0f + cM_rndF(200.0f); + kr->field_0x6d6 = cM_rndF(10000.0f); + i_this->attention_info.distances[fopAc_attn_BATTLE_e] = 22; + + kr->mSound.init(&i_this->current.pos, &i_this->eyePos, 3, 1); + kr->mSound.setEnemyName("E_kr"); + kr->mAtInfo.mpSound = &kr->mSound; + kr->mAtInfo.mPowerType = 1; + fopAcM_OnStatus(i_this, 0); + daE_Kr_Execute(kr); + } + return loadResult; +} + +e_kr_class::e_kr_class() { } /* ############################################################################################## */ /* 80705F08-80705F28 -00001 0020+00 1/0 0/0 0/0 .data l_daE_Kr_Method */ static actor_method_class l_daE_Kr_Method = { - (process_method_func)daE_Kr_Create__FP10fopAc_ac_c, - (process_method_func)daE_Kr_Delete__FP10e_kr_class, - (process_method_func)daE_Kr_Execute__FP10e_kr_class, - (process_method_func)daE_Kr_IsDelete__FP10e_kr_class, - (process_method_func)daE_Kr_Draw__FP10e_kr_class, + (process_method_func)daE_Kr_Create, (process_method_func)daE_Kr_Delete, + (process_method_func)daE_Kr_Execute, (process_method_func)daE_Kr_IsDelete, + (process_method_func)daE_Kr_Draw, }; /* 80705F28-80705F58 -00001 0030+00 0/0 0/0 1/0 .data g_profile_E_KR */ extern actor_process_profile_definition g_profile_E_KR = { - fpcLy_CURRENT_e, // mLayerID - 7, // mListID - fpcPi_CURRENT_e, // mListPrio - PROC_E_KR, // mProcName - &g_fpcLf_Method.base, // sub_method - sizeof(e_kr_class), // mSize - 0, // mSizeOther - 0, // mParameters - &g_fopAc_Method.base, // sub_method - 186, // mPriority - &l_daE_Kr_Method, // sub_method - 0x10040120, // mStatus - fopAc_ENEMY_e, // mActorType - fopAc_CULLBOX_CUSTOM_e, // cullType + fpcLy_CURRENT_e, // mLayerID + 7, // mListID + fpcPi_CURRENT_e, // mListPrio + PROC_E_KR, // mProcName + &g_fpcLf_Method.base, // sub_method + sizeof(e_kr_class), // mSize + 0, // mSizeOther + 0, // mParameters + &g_fopAc_Method.base, // sub_method + 186, // mPriority + &l_daE_Kr_Method, // sub_method + 0x10040120, // mStatus + fopAc_ENEMY_e, // mActorType + fopAc_CULLBOX_CUSTOM_e, // cullType }; - -/* 80705F58-80705F64 000304 000C+00 1/1 0/0 0/0 .data __vt__12dBgS_AcchCir */ -SECTION_DATA extern void* __vt__12dBgS_AcchCir[3] = { - (void*)NULL /* RTTI */, - (void*)NULL, - (void*)__dt__12dBgS_AcchCirFv, -}; - -/* 80705F64-80705F70 000310 000C+00 2/2 0/0 0/0 .data __vt__10cCcD_GStts */ -SECTION_DATA extern void* __vt__10cCcD_GStts[3] = { - (void*)NULL /* RTTI */, - (void*)NULL, - (void*)__dt__10cCcD_GSttsFv, -}; - -/* 80705F70-80705F7C 00031C 000C+00 1/1 0/0 0/0 .data __vt__10dCcD_GStts */ -SECTION_DATA extern void* __vt__10dCcD_GStts[3] = { - (void*)NULL /* RTTI */, - (void*)NULL, - (void*)__dt__10dCcD_GSttsFv, -}; - -/* 80705F7C-80705F88 000328 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, -}; - -/* 80705F88-80705F94 000334 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, -}; - -/* 80705F94-80705FB8 000340 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_8070568C, - (void*)NULL, - (void*)NULL, - (void*)func_80705684, -}; - -/* 80705004-80705220 005744 021C+00 1/1 0/0 0/0 .text __ct__10e_kr_classFv */ -e_kr_class::e_kr_class() { - // NONMATCHING -} - -/* 80705220-80705224 005960 0004+00 1/1 0/0 0/0 .text __ct__4cXyzFv */ -// cXyz::cXyz() { -extern "C" void __ct__4cXyzFv() { - /* empty function */ -} - -/* 80705224-8070526C 005964 0048+00 1/0 0/0 0/0 .text __dt__8cM3dGSphFv */ -// cM3dGSph::~cM3dGSph() { -extern "C" void __dt__8cM3dGSphFv() { - // NONMATCHING -} - -/* 8070526C-807052B4 0059AC 0048+00 1/0 0/0 0/0 .text __dt__8cM3dGAabFv */ -// cM3dGAab::~cM3dGAab() { -extern "C" void __dt__8cM3dGAabFv() { - // NONMATCHING -} - -/* 807052B4-80705310 0059F4 005C+00 1/0 0/0 0/0 .text __dt__10dCcD_GSttsFv */ -// dCcD_GStts::~dCcD_GStts() { -extern "C" void __dt__10dCcD_GSttsFv() { - // NONMATCHING -} - -/* 80705310-80705380 005A50 0070+00 3/2 0/0 0/0 .text __dt__12dBgS_ObjAcchFv */ -// dBgS_ObjAcch::~dBgS_ObjAcch() { -extern "C" void __dt__12dBgS_ObjAcchFv() { - // NONMATCHING -} - -/* 80705380-807053F0 005AC0 0070+00 1/0 0/0 0/0 .text __dt__12dBgS_AcchCirFv */ -// dBgS_AcchCir::~dBgS_AcchCir() { -extern "C" void __dt__12dBgS_AcchCirFv() { - // NONMATCHING -} - -/* 807053F0-80705438 005B30 0048+00 1/0 0/0 0/0 .text __dt__10cCcD_GSttsFv */ -// cCcD_GStts::~cCcD_GStts() { -extern "C" void __dt__10cCcD_GSttsFv() { - // NONMATCHING -} - -/* ############################################################################################## */ -/* 80705C34-80705C38 00013C 0004+00 0/1 0/0 0/0 .rodata @6045 */ -#pragma push -#pragma force_active on -SECTION_RODATA static f32 const lit_6045 = 2500.0f; -COMPILER_STRIP_GATE(0x80705C34, &lit_6045); -#pragma pop - -/* 80705C38-80705C3C 000140 0004+00 0/1 0/0 0/0 .rodata @6046 */ -#pragma push -#pragma force_active on -SECTION_RODATA static f32 const lit_6046 = 7.0f / 20.0f; -COMPILER_STRIP_GATE(0x80705C38, &lit_6046); -#pragma pop - -/* 80705C3C-80705C40 000144 0004+00 0/1 0/0 0/0 .rodata @6047 */ -#pragma push -#pragma force_active on -SECTION_RODATA static f32 const lit_6047 = 3.5f; -COMPILER_STRIP_GATE(0x80705C3C, &lit_6047); -#pragma pop - -/* 80705C40-80705C44 000148 0004+00 0/1 0/0 0/0 .rodata @6048 */ -#pragma push -#pragma force_active on -SECTION_RODATA static f32 const lit_6048 = 40.0f; -COMPILER_STRIP_GATE(0x80705C40, &lit_6048); -#pragma pop - -/* 80705C44-80705C48 00014C 0004+00 0/1 0/0 0/0 .rodata @6049 */ -#pragma push -#pragma force_active on -SECTION_RODATA static f32 const lit_6049 = 1500.0f; -COMPILER_STRIP_GATE(0x80705C44, &lit_6049); -#pragma pop - -/* 80705C48-80705C4C 000150 0004+00 0/1 0/0 0/0 .rodata @6050 */ -#pragma push -#pragma force_active on -SECTION_RODATA static f32 const lit_6050 = -40.0f; -COMPILER_STRIP_GATE(0x80705C48, &lit_6050); -#pragma pop - -/* 80705FB8-80705FC4 000364 000C+00 2/2 0/0 0/0 .data __vt__9e_krHIO_c */ -SECTION_DATA extern void* __vt__9e_krHIO_c[3] = { - (void*)NULL /* RTTI */, - (void*)NULL, - (void*)__dt__9e_krHIO_cFv, -}; - -/* 80705FC4-80705FD0 000370 000C+00 3/3 0/0 0/0 .data __vt__18fOpAcm_HIO_entry_c */ -SECTION_DATA extern void* __vt__18fOpAcm_HIO_entry_c[3] = { - (void*)NULL /* RTTI */, - (void*)NULL, - (void*)__dt__18fOpAcm_HIO_entry_cFv, -}; - -/* 80705FD0-80705FDC 00037C 000C+00 4/4 0/0 0/0 .data __vt__14mDoHIO_entry_c */ -SECTION_DATA extern void* __vt__14mDoHIO_entry_c[3] = { - (void*)NULL /* RTTI */, - (void*)NULL, - (void*)__dt__14mDoHIO_entry_cFv, -}; - -/* 80705438-80705574 005B78 013C+00 0/0 1/0 0/0 .text __sinit_d_a_e_kr_cpp */ -void __sinit_d_a_e_kr_cpp() { - // NONMATCHING -} - -#pragma push -#pragma force_active on -REGISTER_CTORS(0x80705438, __sinit_d_a_e_kr_cpp); -#pragma pop - -/* 80705574-807055E0 005CB4 006C+00 2/1 0/0 0/0 .text __dt__9e_krHIO_cFv */ -e_krHIO_c::~e_krHIO_c() { - // NONMATCHING -} - -/* 807055E0-8070563C 005D20 005C+00 1/0 0/0 0/0 .text __dt__18fOpAcm_HIO_entry_cFv */ -// fOpAcm_HIO_entry_c::~fOpAcm_HIO_entry_c() { -extern "C" void __dt__18fOpAcm_HIO_entry_cFv() { - // NONMATCHING -} - -/* 8070563C-80705684 005D7C 0048+00 1/0 0/0 0/0 .text __dt__14mDoHIO_entry_cFv */ -// mDoHIO_entry_c::~mDoHIO_entry_c() { -extern "C" void __dt__14mDoHIO_entry_cFv() { - // NONMATCHING -} - -/* 80705684-8070568C 005DC4 0008+00 1/0 0/0 0/0 .text @36@__dt__12dBgS_ObjAcchFv */ -static void func_80705684() { - // NONMATCHING -} - -/* 8070568C-80705694 005DCC 0008+00 1/0 0/0 0/0 .text @20@__dt__12dBgS_ObjAcchFv */ -static void func_8070568C() { - // NONMATCHING -} - -/* 80705AA8-80705AE4 0061E8 003C+00 1/1 0/0 0/0 .text __dt__4cXyzFv */ -// cXyz::~cXyz() { -extern "C" void __dt__4cXyzFv() { - // NONMATCHING -} - -/* 80705C4C-80705C4C 000154 0000+00 0/0 0/0 0/0 .rodata @stringBase0 */ diff --git a/src/d/actor/d_a_e_ymb.cpp b/src/d/actor/d_a_e_ymb.cpp index 25e2f9abb06..0523adad32d 100644 --- a/src/d/actor/d_a_e_ymb.cpp +++ b/src/d/actor/d_a_e_ymb.cpp @@ -4,599 +4,3312 @@ */ #include "d/actor/d_a_e_ymb.h" -#include "dol2asm.h" +#include "d/actor/d_a_midna.h" +#include "d/actor/d_a_obj_drop.h" +#include "d/actor/d_a_player.h" +#include "d/d_com_inf_game.h" +#include +#include "Z2AudioLib/Z2Instances.h" -// -// Forward References: -// +enum E_YB_RES_File_ID { + /* BCK */ + /* 0x06 */ BCK_YB_ATTACK_A = 0x6, + /* 0x07 */ BCK_YB_ATTACK_B, + /* 0x08 */ BCK_YB_ATTACK_C, + /* 0x09 */ BCK_YB_CRY, + /* 0x0A */ BCK_YB_DAMAGE, + /* 0x0B */ BCK_YB_DAMAGE_DAWN, + /* 0x0C */ BCK_YB_DAWN_DAMAGE, + /* 0x0D */ BCK_YB_DAWN_IN, + /* 0x0E */ BCK_YB_DAWN_WAIT, + /* 0x0F */ BCK_YB_DEATH, + /* 0x10 */ BCK_YB_DROP, + /* 0x11 */ BCK_YB_FLY_WAIT, + /* 0x12 */ BCK_YB_GUARD, + /* 0x13 */ BCK_YB_RISE, + /* 0x14 */ BCK_YB_SIM_IN, + /* 0x15 */ BCK_YB_SIM_OUT, + /* 0x16 */ BCK_YB_SIM_TO_FLY, -extern "C" void __ct__13daE_YMB_HIO_cFv(); -extern "C" void ctrlJoint__9daE_YMB_cFP8J3DJointP8J3DModel(); -extern "C" void __dt__4cXyzFv(); -extern "C" void JointCallBack__9daE_YMB_cFP8J3DJointi(); -extern "C" static void rideCallBack__FP4dBgWP10fopAc_ac_cP10fopAc_ac_c(); -extern "C" void draw__9daE_YMB_cFv(); -extern "C" static void daE_YMB_Draw__FP9daE_YMB_c(); -extern "C" void setBck__9daE_YMB_cFiUcff(); -extern "C" void checkBck__9daE_YMB_cFi(); -extern "C" void setActionMode__9daE_YMB_cFii(); -extern "C" void setLastDamage__9daE_YMB_cFv(); -extern "C" void damage_check__9daE_YMB_cFv(); -extern "C" void setCameraSwitch__9daE_YMB_cFv(); -extern "C" void checkWaterPos__9daE_YMB_cFv(); -extern "C" void checkGroundPos__9daE_YMB_cFv(); -extern "C" void setFlyWaitVoice__9daE_YMB_cFv(); -extern "C" void setDownWaitVoice__9daE_YMB_cFv(); -extern "C" void setHitBoardSe__9daE_YMB_cFv(); -extern "C" void setElecEffect1__9daE_YMB_cFv(); -extern "C" void setElecEffect2__9daE_YMB_cFv(); -extern "C" void setWaterEffect1__9daE_YMB_cFv(); -extern "C" void setWaterEffect2__9daE_YMB_cFv(); -extern "C" void setBoilEffect__9daE_YMB_cFi(); -extern "C" void setDamageEffect__9daE_YMB_cFi(); -extern "C" void setDownHamonEffect__9daE_YMB_cFv(); -extern "C" void setFlyBlurEffect__9daE_YMB_cFv(); -extern "C" void setRockDamageEffect__9daE_YMB_cFv(); -extern "C" void setDeathEffect__9daE_YMB_cFv(); -extern "C" static void search_drop__FPvPv(); -extern "C" void executeWait__9daE_YMB_cFv(); -extern "C" void setBitePos__9daE_YMB_cFi(); -extern "C" void setInclination__9daE_YMB_cFv(); -extern "C" void setBodyAngle__9daE_YMB_cFv(); -extern "C" void checkWolfLockIn__9daE_YMB_cFv(); -extern "C" void executeFly__9daE_YMB_cFv(); -extern "C" void executeFlyAttack__9daE_YMB_cFv(); -extern "C" void executeRunAway__9daE_YMB_cFv(); -extern "C" void executeGuard__9daE_YMB_cFv(); -extern "C" void executeSwim__9daE_YMB_cFv(); -extern "C" void executeWaterJump__9daE_YMB_cFv(); -extern "C" void getNearDownPos__9daE_YMB_cFv(); -extern "C" void executeDamage__9daE_YMB_cFv(); -extern "C" void setMidnaBindInit__9daE_YMB_cFP4cXyz(); -extern "C" void setMidnaBindLevel__9daE_YMB_cFi(); -extern "C" void setWolfLockEffect__9daE_YMB_cFv(); -extern "C" void initDownToWater__9daE_YMB_cFv(); -extern "C" void calcDownToWater__9daE_YMB_cFv(); -extern "C" void executeDown__9daE_YMB_cFv(); -extern "C" void setCreateDrop__9daE_YMB_cFv(); -extern "C" void executeDeath__9daE_YMB_cFv(); -extern "C" void demo_skip__9daE_YMB_cFi(); -extern "C" void DemoSkipCallBack__9daE_YMB_cFPvi(); -extern "C" void calcLakeDemoPlayerPos__9daE_YMB_cFv(); -extern "C" void executeLakeDemo__9daE_YMB_cFv(); -extern "C" void executeStartDemo__9daE_YMB_cFv(); -extern "C" void checkStartBattleDemo__9daE_YMB_cFv(); -extern "C" void executeBattleDemo__9daE_YMB_cFv(); -extern "C" void action__9daE_YMB_cFv(); -extern "C" void mtx_set__9daE_YMB_cFv(); -extern "C" void getBellyBitePos__9daE_YMB_cFP4cXyz(); -extern "C" void getDownLockPoint__9daE_YMB_cFv(); -extern "C" void setAttentionPos__9daE_YMB_cFv(); -extern "C" void cc_set__9daE_YMB_cFv(); -extern "C" void execute__9daE_YMB_cFv(); -extern "C" static void daE_YMB_Execute__FP9daE_YMB_c(); -extern "C" static bool daE_YMB_IsDelete__FP9daE_YMB_c(); -extern "C" void _delete__9daE_YMB_cFv(); -extern "C" static void daE_YMB_Delete__FP9daE_YMB_c(); -extern "C" void CreateHeap__9daE_YMB_cFv(); -extern "C" void __dt__12J3DFrameCtrlFv(); -extern "C" static void useHeapInit__FP10fopAc_ac_c(); -extern "C" void create__9daE_YMB_cFv(); -extern "C" void __dt__8cM3dGSphFv(); -extern "C" void __dt__8cM3dGAabFv(); -extern "C" void __dt__8dCcD_SphFv(); -extern "C" void __ct__8dCcD_SphFv(); -extern "C" void __dt__10dCcD_GSttsFv(); -extern "C" static void daE_YMB_Create__FP9daE_YMB_c(); -extern "C" void __dt__10cCcD_GSttsFv(); -extern "C" void __dt__13daE_YMB_HIO_cFv(); -extern "C" void __sinit_d_a_e_ymb_cpp(); -extern "C" void setPos__11daObjDrop_cF4cXyz(); -extern "C" extern char const* const d_a_e_ymb__stringBase0; + /* BMDR */ + /* 0x19 */ BMDR_YB_TW = 0x19, -// -// External References: -// + /* BRK */ + /* 0x1C */ BRK_YB_WAIT = 0x1C, -extern "C" void mDoMtx_ZXYrotM__FPA4_fsss(); -extern "C" void mDoMtx_XrotM__FPA4_fs(); -extern "C" void mDoMtx_MtxToRot__FPA4_CfP5csXyz(); -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_brkAnmFP16J3DMaterialTableP15J3DAnmTevRegKeyiifss(); -extern "C" void entry__13mDoExt_brkAnmFP16J3DMaterialTablef(); -extern "C" void create__21mDoExt_invisibleModelFP8J3DModelUc(); -extern "C" void entryDL__21mDoExt_invisibleModelFP4cXyz(); -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 __ct__10fopAc_ac_cFv(); -extern "C" void fopAc_IsActor__FPv(); -extern "C" void fopAcM_delete__FP10fopAc_ac_c(); -extern "C" void fopAcM_entrySolidHeap__FP10fopAc_ac_cPFP10fopAc_ac_c_iUl(); -extern "C" void fopAcM_SetMin__FP10fopAc_ac_cfff(); -extern "C" void fopAcM_SetMax__FP10fopAc_ac_cfff(); -extern "C" void fopAcM_posMoveF__FP10fopAc_ac_cPC4cXyz(); -extern "C" void fopAcM_searchActorAngleY__FPC10fopAc_ac_cPC10fopAc_ac_c(); -extern "C" void fopAcM_orderPotentialEvent__FP10fopAc_ac_cUsUsUs(); -extern "C" void fpcEx_Search__FPFPvPv_PvPv(); -extern "C" void fpcM_IsCreating__FUi(); -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 dComIfGs_onOneZoneSwitch__Fii(); -extern "C" void dComIfGs_offOneZoneSwitch__Fii(); -extern "C" void -dComIfGd_setShadow__FUlScP8J3DModelP4cXyzffffR13cBgS_PolyInfoP12dKy_tevstr_csfP9_GXTexObj(); -extern "C" void onSwitch__12dSv_memBit_cFi(); -extern "C" void isSwitch__12dSv_memBit_cCFi(); -extern "C" void onEventBit__11dSv_event_cFUs(); -extern "C" void isEventBit__11dSv_event_cCFUs(); -extern "C" void onSwitch__10dSv_info_cFii(); -extern "C" void offSwitch__10dSv_info_cFii(); -extern "C" void isSwitch__10dSv_info_cCFii(); -extern "C" void getRes__14dRes_control_cFPCclP11dRes_info_ci(); -extern "C" void reset__14dEvt_control_cFv(); -extern "C" void setSkipProc__14dEvt_control_cFPvPFPvi_ii(); -extern "C" void setPtT__14dEvt_control_cFPv(); -extern "C" void getEmitter__Q213dPa_control_c7level_cFUl(); -extern "C" void setHitMark__13dPa_control_cFUsP10fopAc_ac_cPC4cXyzPC5csXyzPC4cXyzUl(); -extern "C" void -set__13dPa_control_cFUcUsPC4cXyzPC12dKy_tevstr_cPC5csXyzPC4cXyzUcP18dPa_levelEcallBackScPC8_GXColorPC8_GXColorPC4cXyzf(); -extern "C" void -set__13dPa_control_cFUlUcUsPC4cXyzPC12dKy_tevstr_cPC5csXyzPC4cXyzUcP18dPa_levelEcallBackScPC8_GXColorPC8_GXColorPC4cXyzf(); -extern "C" void StartShock__12dVibration_cFii4cXyz(); -extern "C" void StartQuake__12dVibration_cFii4cXyz(); -extern "C" void StartQuake__12dVibration_cFPCUcii4cXyz(); -extern "C" void StopQuake__12dVibration_cFi(); -extern "C" void LockonTarget__12dAttention_cFl(); -extern "C" void LockonTruth__12dAttention_cFv(); -extern "C" void Release__4cBgSFP9dBgW_Base(); -extern "C" void GroundCross__4cBgSFP11cBgS_GndChk(); -extern "C" void Regist__4dBgSFP9dBgW_BaseP10fopAc_ac_c(); -extern "C" void dBgS_MoveBGProc_Typical__FP4dBgWPvRC13cBgS_PolyInfobP4cXyzP5csXyzP5csXyz(); -extern "C" void __ct__11dBgS_GndChkFv(); -extern "C" void __ct__18dBgS_ObjGndChk_SplFv(); -extern "C" void __dt__18dBgS_ObjGndChk_SplFv(); -extern "C" void Set__4cBgWFP6cBgD_tUlPA3_A4_f(); -extern "C" void __ct__4dBgWFv(); -extern "C" void Move__4dBgWFv(); -extern "C" void __ct__10dCcD_GSttsFv(); -extern "C" void Init__9dCcD_SttsFiiP10fopAc_ac_c(); -extern "C" void __ct__12dCcD_GObjInfFv(); -extern "C" void __dt__12dCcD_GObjInfFv(); -extern "C" void ChkAtHit__12dCcD_GObjInfFv(); -extern "C" void GetAtHitObj__12dCcD_GObjInfFv(); -extern "C" void ChkTgHit__12dCcD_GObjInfFv(); -extern "C" void ResetTgHit__12dCcD_GObjInfFv(); -extern "C" void GetTgHitObj__12dCcD_GObjInfFv(); -extern "C" void Set__8dCcD_SphFRC11dCcD_SrcSph(); -extern "C" void cc_at_check__FP10fopAc_ac_cP11dCcU_AtInfo(); -extern "C" void checkNowWolfEyeUp__9daPy_py_cFv(); -extern "C" void Start__9dCamera_cFv(); -extern "C" void Stop__9dCamera_cFv(); -extern "C" void SetTrimSize__9dCamera_cFl(); -extern "C" void Set__9dCamera_cF4cXyz4cXyzfs(); -extern "C" void Reset__9dCamera_cF4cXyz4cXyz(); -extern "C" void Eye__9dCamera_cFv(); -extern "C" void Center__9dCamera_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 GetAc__8cCcD_ObjFv(); -extern "C" void Set__4cCcSFP8cCcD_Obj(); -extern "C" void __pl__4cXyzCFRC3Vec(); -extern "C" void __mi__4cXyzCFRC3Vec(); -extern "C" void __ml__4cXyzCFf(); -extern "C" void cM_atan2s__Fff(); -extern "C" void cM_rnd__Fv(); -extern "C" void cM_rndF__Ff(); -extern "C" void cM_rndFX__Ff(); -extern "C" void SetPos__11cBgS_GndChkFPC3Vec(); -extern "C" void SetPos__11cBgS_GndChkFPC4cXyz(); -extern "C" void ChkUsed__9cBgW_BgIdCFv(); -extern "C" void SetC__8cM3dGSphFRC4cXyz(); -extern "C" void SetR__8cM3dGSphFf(); -extern "C" void cLib_addCalc__FPfffff(); -extern "C" void cLib_addCalcAngleS__FPsssss(); -extern "C" void cLib_chaseF__FPfff(); -extern "C" void cLib_chasePos__FP4cXyzRC4cXyzf(); -extern "C" void cLib_chasePosXZ__FP4cXyzRC4cXyzf(); -extern "C" void cLib_chaseAngleS__FPsss(); -extern "C" void cLib_targetAngleY__FPC3VecPC3Vec(); -extern "C" void cLib_targetAngleX__FPC4cXyzPC4cXyz(); -extern "C" void cLib_offsetPos__FP4cXyzPC4cXyzsPC4cXyz(); -extern "C" void func_80280808(); -extern "C" void seStart__7Z2SeMgrF10JAISoundIDPC3VecUlScffffUc(); -extern "C" void seStartLevel__7Z2SeMgrF10JAISoundIDPC3VecUlScffffUc(); -extern "C" void subBgmStart__8Z2SeqMgrFUl(); -extern "C" void subBgmStop__8Z2SeqMgrFv(); -extern "C" void changeSubBgmStatus__8Z2SeqMgrFl(); -extern "C" void setBattleBgmOff__8Z2SeqMgrFb(); -extern "C" void setForceBattleArea__13Z2SoundObjMgrFbUsUsUs(); -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 init__12J3DFrameCtrlFs(); -extern "C" void checkPass__12J3DFrameCtrlFf(); -extern "C" void __construct_array(); -extern "C" void _savegpr_22(); -extern "C" void _savegpr_23(); -extern "C" void _savegpr_24(); -extern "C" void _savegpr_25(); -extern "C" void _savegpr_26(); -extern "C" void _savegpr_27(); -extern "C" void _savegpr_28(); -extern "C" void _savegpr_29(); -extern "C" void _restgpr_22(); -extern "C" void _restgpr_23(); -extern "C" void _restgpr_24(); -extern "C" void _restgpr_25(); -extern "C" void _restgpr_26(); -extern "C" void _restgpr_27(); -extern "C" void _restgpr_28(); -extern "C" void _restgpr_29(); -extern "C" u8 saveBitLabels__16dSv_event_flag_c[1644 + 4 /* padding */]; -extern "C" extern void* __vt__8dCcD_Sph[36]; -extern "C" extern void* __vt__9dCcD_Stts[11]; -extern "C" extern void* __vt__12cCcD_SphAttr[25]; -extern "C" extern void* __vt__14cCcD_ShapeAttr[22]; -extern "C" extern void* __vt__9cCcD_Stts[8]; -extern "C" u8 now__14mDoMtx_stack_c[48]; -extern "C" extern u8 g_dComIfG_gameInfo[122384]; -extern "C" u8 mSimpleTexObj__21dDlst_shadowControl_c[32]; -extern "C" u8 mCurrentMtx__6J3DSys[48]; -extern "C" extern u8 j3dZModeTable[96]; -extern "C" u8 sincosTable___5JMath[65536]; -extern "C" u8 m_midnaActor__9daPy_py_c[4]; -extern "C" u8 mAudioMgrPtr__10Z2AudioMgr[4 + 4 /* padding */]; -extern "C" void __register_global_object(); - -// -// Declarations: -// - -/* ############################################################################################## */ -/* 808218AC-808218B0 000000 0004+00 49/49 0/0 0/0 .rodata @3791 */ -SECTION_RODATA static f32 const lit_3791 = 1.0f; -COMPILER_STRIP_GATE(0x808218AC, &lit_3791); - -/* 808218B0-808218B4 000004 0004+00 0/4 0/0 0/0 .rodata @3792 */ -#pragma push -#pragma force_active on -SECTION_RODATA static f32 const lit_3792 = 10.0f; -COMPILER_STRIP_GATE(0x808218B0, &lit_3792); -#pragma pop - -/* 808218B4-808218B8 000008 0004+00 0/2 0/0 0/0 .rodata @3793 */ -#pragma push -#pragma force_active on -SECTION_RODATA static f32 const lit_3793 = 70.0f; -COMPILER_STRIP_GATE(0x808218B4, &lit_3793); -#pragma pop - -/* 808218B8-808218BC 00000C 0004+00 0/4 0/0 0/0 .rodata @3794 */ -#pragma push -#pragma force_active on -SECTION_RODATA static f32 const lit_3794 = 40.0f; -COMPILER_STRIP_GATE(0x808218B8, &lit_3794); -#pragma pop - -/* 808218BC-808218C0 000010 0004+00 0/1 0/0 0/0 .rodata @3795 */ -#pragma push -#pragma force_active on -SECTION_RODATA static f32 const lit_3795 = 750.0f; -COMPILER_STRIP_GATE(0x808218BC, &lit_3795); -#pragma pop - -/* 808218C0-808218C4 000014 0004+00 0/2 0/0 0/0 .rodata @3796 */ -#pragma push -#pragma force_active on -SECTION_RODATA static f32 const lit_3796 = 400.0f; -COMPILER_STRIP_GATE(0x808218C0, &lit_3796); -#pragma pop - -/* 80821B10-80821B1C 000000 000C+00 2/2 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, + /* DZB */ + /* 0x1F */ DZB_YB = 0x1F, }; -/* 80821B1C-80821B30 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 - -/* 80821B30-80821B70 000020 0040+00 0/1 0/0 0/0 .data cc_ymb_src__23@unnamed@d_a_e_ymb_cpp@ */ -#pragma push -#pragma force_active on -SECTION_DATA static u8 data_80821B30[64] = { - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x04, 0x00, 0x02, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x0D, - 0xD8, 0xFB, 0xFD, 0xFF, 0x00, 0x00, 0x00, 0x03, 0x00, 0x00, 0x00, 0x75, 0x09, 0x00, 0x01, 0x07, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x06, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x42, 0x20, 0x00, 0x00, -}; -#pragma pop - -/* 80821B70-80821BB0 000060 0040+00 0/1 0/0 0/0 .data cc_ymb_at_src__23@unnamed@d_a_e_ymb_cpp@ */ -#pragma push -#pragma force_active on -SECTION_DATA static u8 data_80821B70[64] = { - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x04, 0x00, 0x02, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x0D, - 0xD8, 0xFB, 0xFD, 0xFF, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x09, 0x00, 0x01, 0x07, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x02, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x42, 0x20, 0x00, 0x00, -}; -#pragma pop - -/* 80821BB0-80821BF0 0000A0 0040+00 0/1 0/0 0/0 .data cc_ymb_eye_src__23@unnamed@d_a_e_ymb_cpp@ */ -#pragma push -#pragma force_active on -SECTION_DATA static u8 data_80821BB0[64] = { - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x80, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x03, 0x00, 0x00, 0x00, 0x00, 0x09, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x02, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x42, 0x20, 0x00, 0x00, -}; -#pragma pop - -/* 80821BF0-80821C30 0000E0 0040+00 0/1 0/0 0/0 .data cc_ymb_tube_src__23@unnamed@d_a_e_ymb_cpp@ - */ -#pragma push -#pragma force_active on -SECTION_DATA static u8 data_80821BF0[64] = { - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0xD8, 0xFB, 0xFD, 0xFF, 0x00, 0x00, 0x00, 0x02, 0x00, 0x00, 0x00, 0x75, 0x09, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x07, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x42, 0x20, 0x00, 0x00, -}; -#pragma pop - -/* 80821C30-80821C48 000120 0018+00 3/4 0/0 0/0 .data YMB_DOWN_ATT_JNT__23@unnamed@d_a_e_ymb_cpp@ - */ -SECTION_DATA static u8 data_80821C30[24] = { - 0x00, 0x00, 0x00, 0x14, 0x00, 0x00, 0x00, 0x1C, 0x00, 0x00, 0x00, 0x1A, - 0x00, 0x00, 0x00, 0x16, 0x00, 0x00, 0x00, 0x18, 0x00, 0x00, 0x00, 0x1E, +enum Action { + /* 0x0 */ ACTION_WAIT, + /* 0x1 */ ACTION_FLY, + /* 0x2 */ ACTION_FLY_ATTACK, + /* 0x3 */ ACTION_RUN_AWAY, + /* 0x4 */ ACTION_GUARD, + /* 0x5 */ ACTION_SWIM, + /* 0x6 */ ACTION_WATER_JUMP, + /* 0x7 */ ACTION_DAMAGE, + /* 0x8 */ ACTION_DOWN, + /* 0x9 */ ACTION_DEATH, + /* 0xA */ ACTION_LAKE_DEMO, + /* 0xB */ ACTION_START_DEMO, + /* 0xC */ ACTION_BATTLE_DEMO, }; -/* 80821C48-80821C54 000138 000C+00 0/0 0/0 0/0 .data YMB_DROP_JNT__23@unnamed@d_a_e_ymb_cpp@ */ -#pragma push -#pragma force_active on -SECTION_DATA static u8 data_80821C48[12] = { - 0x00, 0x00, 0x00, 0x14, 0x00, 0x00, 0x00, 0x1C, 0x00, 0x00, 0x00, 0x01, -}; -#pragma pop - -/* 80821C54-80821C5C 000144 0008+00 1/1 0/0 0/0 .data w_eff_id$4417 */ -SECTION_DATA static u8 w_eff_id_4417[8] = { - 0x86, 0x30, 0x86, 0x31, 0x86, 0x32, 0x86, 0x33, +enum Joint { + /* 0x00 */ JNT_WORLD_ROOT, + /* 0x01 */ JNT_BODY1, + /* 0x02 */ JNT_ARM_LB1, + /* 0x03 */ JNT_ARM_LB2, + /* 0x04 */ JNT_ARM_LB3, + /* 0x05 */ JNT_ARM_LC1, + /* 0x06 */ JNT_ARM_LC2, + /* 0x07 */ JNT_ARM_LC3, + /* 0x08 */ JNT_ARM_RB1, + /* 0x09 */ JNT_ARM_RB2, + /* 0x0A */ JNT_ARM_RB3, + /* 0x0B */ JNT_ARM_RC1, + /* 0x0C */ JNT_ARM_RC2, + /* 0x0D */ JNT_ARM_RC3, + /* 0x0E */ JNT_BODY2, + /* 0x0F */ JNT_BODY3, + /* 0x10 */ JNT_BODY4, + /* 0x11 */ JNT_TAIL1, + /* 0x12 */ JNT_TAIL2, + /* 0x13 */ JNT_TUBE_LC1, + /* 0x14 */ JNT_TUBE_LC2, + /* 0x15 */ JNT_TUBE_RC1, + /* 0x16 */ JNT_TUBE_RC2, + /* 0x17 */ JNT_TUBE_LA1, + /* 0x18 */ JNT_TUBE_LA2, + /* 0x19 */ JNT_TUBE_LB1, + /* 0x1A */ JNT_TUBE_LB2, + /* 0x1B */ JNT_TUBE_RA1, + /* 0x1C */ JNT_TUBE_RA2, + /* 0x1D */ JNT_TUBE_RB1, + /* 0x1E */ JNT_TUBE_RB2, + /* 0x1F */ JNT_WING_LA, + /* 0x20 */ JNT_WING_LB1, + /* 0x21 */ JNT_WING_LB2, + /* 0x22 */ JNT_WING_LC1, + /* 0x23 */ JNT_WING_LC2, + /* 0x24 */ JNT_WING_RA, + /* 0x25 */ JNT_WING_RB1, + /* 0x26 */ JNT_WING_RB2, + /* 0x27 */ JNT_WING_RC1, + /* 0x28 */ JNT_WING_RC2, + /* 0x29 */ JNT_BUST, + /* 0x2A */ JNT_ARM_LA1, + /* 0x2B */ JNT_ARM_LA2, + /* 0x2C */ JNT_ARM_LA3, + /* 0x2D */ JNT_ARM_LA4, + /* 0x2E */ JNT_ARM_RA1, + /* 0x2F */ JNT_ARM_RA2, + /* 0x30 */ JNT_ARM_RA3, + /* 0x31 */ JNT_ARM_RA4, + /* 0x32 */ JNT_HEAD, + /* 0x33 */ JNT_JAW_L, + /* 0x34 */ JNT_JAW_R, }; -/* 80821C5C-80821C68 00014C 000C+00 1/1 0/0 0/0 .data w_eff_id$4497 */ -SECTION_DATA static u8 w_eff_id_4497[12] = { - 0x86, 0x36, 0x86, 0x37, 0x86, 0x38, 0x86, 0x39, 0x86, 0x3A, 0x86, 0x3B, +enum Particle { + /* 0x029D */ ZL2_MIDONAHAIR03_1 = 0x29D, + /* 0x029E */ ZL2_MIDONAHAIR03_2, + /* 0x029F */ ZL2_MIDONAHAIR01, + /* 0x8650 */ ZL2_SAND00_IA_1 = 0x8650, + /* 0x8651 */ ZL2_MIZUTAMA02, + /* 0x8652 */ ZL2_HAMON_1, + /* 0x8653 */ ZL2_FIRE_1, + /* 0x8654 */ ZL2_SAND00_IA_2, + /* 0x8655 */ ZL2_HAMON_2, + /* 0x8656 */ ZL2_BOIL, + /* 0x865D */ ZL2_POLYGON_IA8 = 0x865D, + /* 0x865E */ ZL2_YAMIMOYOU01, + /* 0x8630 */ ZL2_ELEC_1 = 0x8630, + /* 0x8631 */ ZL2_ELECY_1, + /* 0x8632 */ ZL2_ELECY_2, + /* 0x8633 */ ZL2_GLOW02, + /* 0x8634 */ ZL2_HAMON_3, + /* 0x8635 */ ZL2_HAMON_4, + /* 0x865F */ ZL2_HANEBLUR64I4_1 = 0x865F, + /* 0x8660 */ ZL2_HANEBLUR64I4_2, + /* 0x8636 */ ZL2_FIRE_2 = 0x8636, + /* 0x8637 */ ZL2_HAMON_5, + /* 0x8638 */ ZL2_WATER_EFFECT_1, + /* 0x8639 */ ZL2_WATER_EFFECT_2, + /* 0x863A */ ZL2_SMASH_KARI_1, + /* 0x863B */ ZL2_MIZUTAMA_IA, + /* 0x863C */ ZL2_FIRE_3, + /* 0x863D */ ZL2_SMASH_KARI_2, + /* 0x863E */ ZL2_SMASH_KARI_3, + /* 0x863F */ ZL2_SMASH_KARI_4, + /* 0x8640 */ ZL2_WATER_EFFECT_3, + /* 0x8641 */ ZL2_WATER_EFFECT_4, + /* 0x8642 */ ZL2_WATER_EFFECT_5, + /* 0x8661 */ ZL2_LIQUIDANIM_1 = 0x8661, + /* 0x8643 */ ZL2_LIQUIDANIM_2 = 0x8643, + /* 0x8646 */ ZL2_LIQUIDANIM_3 = 0x8646, }; -/* 80821C68-80821C78 000158 000E+02 1/1 0/0 0/0 .data w_eff_id$4533 */ -SECTION_DATA static u8 w_eff_id_4533[14 + 2 /* padding */] = { - 0x86, - 0x3C, - 0x86, - 0x3D, - 0x86, - 0x3E, - 0x86, - 0x3F, - 0x86, - 0x40, - 0x86, - 0x41, - 0x86, - 0x42, - /* padding */ - 0x00, - 0x00, -}; +UNK_REL_DATA; -/* 80821C78-80821C88 000168 000E+02 1/1 0/0 0/0 .data w_eff_id$4569 */ -SECTION_DATA static u8 w_eff_id_4569[14 + 2 /* padding */] = { - 0x86, - 0x52, - 0x86, - 0x53, - 0x86, - 0x54, - 0x86, - 0x55, - 0x86, - 0x56, - 0x86, - 0x50, - 0x86, - 0x51, - /* padding */ - 0x00, - 0x00, -}; +namespace { + /* 80821B30-80821B70 000020 0040+00 0/1 0/0 0/0 .data cc_ymb_src__23@unnamed@d_a_e_ymb_cpp@ */ + static dCcD_SrcSph cc_ymb_src = { + {{0x0, {{AT_TYPE_CSTATUE_SWING, 0x2, 0xD}, {0xD8FBFDFF, 0x3}, 0x75}}, // mObj + {dCcD_SE_METAL, 0x0, 0x1, 0x7, 0x0}, // mGObjAt + {dCcD_SE_NONE, 0x0, 0x0, 0x0, 0x6}, // mGObjTg + {0x0}, // mGObjCo + }, // mObjInf + { + {{0.0f, 0.0f, 0.0f}, 40.0f} // mSph + } // mSphAttr + }; -/* 80821C88-80821C8C 000178 0004+00 1/1 0/0 0/0 .data w_eff_id$4611 */ -SECTION_DATA static u8 w_eff_id_4611[4] = { - 0x86, - 0x43, - 0x86, - 0x46, -}; + /* 80821B70-80821BB0 000060 0040+00 0/1 0/0 0/0 .data cc_ymb_at_src__23@unnamed@d_a_e_ymb_cpp@ */ + static dCcD_SrcSph cc_ymb_at_src = { + {{0x0, {{AT_TYPE_CSTATUE_SWING, 0x2, 0xD}, {0xD8FBFDFF, 0x0}, 0x0}}, // mObj + {dCcD_SE_METAL, 0x0, 0x1, 0x7, 0x0}, // mGObjAt + {dCcD_SE_NONE, 0x0, 0x0, 0x0, 0x2}, // mGObjTg + {0x0}, // mGObjCo + }, // mObjInf + { + {{0.0f, 0.0f, 0.0f}, 40.0f}, // mSph + } // mSphAttr + }; -/* 80821C8C-80821C90 00017C 0004+00 1/1 0/0 0/0 .data w_eff_id$4637 */ -SECTION_DATA static u8 w_eff_id_4637[4] = { - 0x86, - 0x34, - 0x86, - 0x35, -}; + /* 80821BB0-80821BF0 0000A0 0040+00 0/1 0/0 0/0 .data cc_ymb_eye_src__23@unnamed@d_a_e_ymb_cpp@ */ + static dCcD_SrcSph cc_ymb_eye_src = { + {{0x0, {{AT_TYPE_0, 0x0, 0x0}, {0x80000000, 0x3}, 0x0}}, // mObj + {dCcD_SE_METAL, 0x0, 0x0, 0x0, 0x0}, // mGObjAt + {dCcD_SE_NONE, 0x0, 0x0, 0x0, 0x2}, // mGObjTg + {0x0}, // mGObjCo + }, // mObjInf + { + {{0.0f, 0.0f, 0.0f}, 40.0f}, // mSph + } // mSphAttr + }; -/* 80821C90-80821C94 000180 0004+00 1/1 0/0 0/0 .data w_eff_id$4677 */ -SECTION_DATA static u8 w_eff_id_4677[4] = { - 0x86, - 0x5F, - 0x86, - 0x60, -}; + /* 80821BF0-80821C30 0000E0 0040+00 0/1 0/0 0/0 .data cc_ymb_tube_src__23@unnamed@d_a_e_ymb_cpp@ */ + static dCcD_SrcSph cc_ymb_tube_src = { + {{0x0, {{AT_TYPE_0, 0x0, 0x0}, {0xD8FBFDFF, 0x2}, 0x75}}, // mObj + {dCcD_SE_METAL, 0x0, 0x0, 0x0, 0x0}, // mGObjAt + {dCcD_SE_NONE, 0x0, 0x0, 0x0, 0x7}, // mGObjTg + }, // mObjInf + { + {{0.0f, 0.0f, 0.0f}, 40.0f}, // mSph + } // mSphAttr + }; -/* 80821C94-80821C98 000184 0004+00 1/1 0/0 0/0 .data w_eff_id$4777 */ -SECTION_DATA static u8 w_eff_id_4777[4] = { - 0x86, - 0x5D, - 0x86, - 0x5E, -}; + /* 80821C30-80821C48 000120 0018+00 3/4 0/0 0/0 .data YMB_DOWN_ATT_JNT__23@unnamed@d_a_e_ymb_cpp@ */ + static int YMB_DOWN_ATT_JNT[6] = { + JNT_TUBE_LC2, JNT_TUBE_RA2, JNT_TUBE_LB2, JNT_TUBE_RC2, JNT_TUBE_LA2, JNT_TUBE_RB2, + }; -/* 80821C98-80821CA0 000188 0006+02 1/1 0/0 0/0 .data ymb_chance_time$5424 */ -SECTION_DATA static u8 ymb_chance_time[6 + 2 /* padding */] = { - 0x00, - 0x6E, - 0x00, - 0x50, - 0x00, - 0x32, - /* padding */ - 0x00, - 0x00, -}; + /* 80821C48-80821C54 000138 000C+00 0/0 0/0 0/0 .data YMB_DROP_JNT__23@unnamed@d_a_e_ymb_cpp@ */ + static int YMB_DROP_JNT[3] = { + JNT_TUBE_LC2, JNT_TUBE_RA2, JNT_BODY1, + }; +} -/* 80821CA0-80821CD0 -00001 0030+00 1/1 0/0 0/0 .data @5575 */ -SECTION_DATA static void* lit_5575[12] = { - (void*)(((char*)executeFlyAttack__9daE_YMB_cFv) + 0x84), - (void*)(((char*)executeFlyAttack__9daE_YMB_cFv) + 0x148), - (void*)(((char*)executeFlyAttack__9daE_YMB_cFv) + 0x1D8), - (void*)(((char*)executeFlyAttack__9daE_YMB_cFv) + 0x9A8), - (void*)(((char*)executeFlyAttack__9daE_YMB_cFv) + 0x5CC), - (void*)(((char*)executeFlyAttack__9daE_YMB_cFv) + 0x684), - (void*)(((char*)executeFlyAttack__9daE_YMB_cFv) + 0x9A8), - (void*)(((char*)executeFlyAttack__9daE_YMB_cFv) + 0x9A8), - (void*)(((char*)executeFlyAttack__9daE_YMB_cFv) + 0x9A8), - (void*)(((char*)executeFlyAttack__9daE_YMB_cFv) + 0x7C8), - (void*)(((char*)executeFlyAttack__9daE_YMB_cFv) + 0x7C8), - (void*)(((char*)executeFlyAttack__9daE_YMB_cFv) + 0x980), -}; +/* 8081610C-8081615C 0000EC 0050+00 1/1 0/0 0/0 .text __ct__13daE_YMB_HIO_cFv */ +daE_YMB_HIO_c::daE_YMB_HIO_c() { + field_0x4 = -1; + model_size = 1.0f; + fly_movement_speed = 10.0f; + swim_attack_speed = 70.0f; + fly_attack_speed = 40.0f; + rollover_time = 750.0f; + fly_height_adjust = 400.0f; +} -/* 80821CD0-80821CF8 -00001 0028+00 1/1 0/0 0/0 .data @6089 */ -SECTION_DATA static void* lit_6089[10] = { - (void*)(((char*)executeSwim__9daE_YMB_cFv) + 0x90), - (void*)(((char*)executeSwim__9daE_YMB_cFv) + 0xB8), - (void*)(((char*)executeSwim__9daE_YMB_cFv) + 0x14C), - (void*)(((char*)executeSwim__9daE_YMB_cFv) + 0x398), - (void*)(((char*)executeSwim__9daE_YMB_cFv) + 0x398), - (void*)(((char*)executeSwim__9daE_YMB_cFv) + 0x894), - (void*)(((char*)executeSwim__9daE_YMB_cFv) + 0x894), - (void*)(((char*)executeSwim__9daE_YMB_cFv) + 0xA5C), - (void*)(((char*)executeSwim__9daE_YMB_cFv) + 0xCAC), - (void*)(((char*)executeSwim__9daE_YMB_cFv) + 0xDB4), -}; +/* 8081615C-808164B4 00013C 0358+00 1/1 0/0 0/0 .text ctrlJoint__9daE_YMB_cFP8J3DJointP8J3DModel */ +int daE_YMB_c::ctrlJoint(J3DJoint* i_joint, J3DModel* i_model) { + int jntNo = i_joint->getJntNo(); + cXyz sp54, sp60; + csXyz local_8c, local_94; -/* 80821CF8-80821CFC 0001E8 0004+00 1/1 0/0 0/0 .data e_prim$6362 */ -SECTION_DATA static u8 e_prim_6362[4] = { - 0xFF, - 0x64, - 0x78, - 0x00, -}; + mDoMtx_stack_c::copy(i_model->getAnmMtx(jntNo)); -/* 80821CFC-80821D00 0001EC 0004+00 1/1 0/0 0/0 .data e_env$6363 */ -SECTION_DATA static u8 e_env_6363[4] = { - 0x3C, - 0x1E, - 0x1E, - 0x00, -}; + switch (jntNo) { + case 0x13: + case 0x14: + case 0x15: + case 0x16: + case 0x17: + case 0x18: + case 0x19: + case 0x1A: + case 0x1B: + case 0x1C: + case 0x1D: + case 0x1E: { + int iVar1 = (jntNo - 0x13) / 2; + if (field_0x668[iVar1] != 0.0f) { + if (((u16)jntNo & 1) != 0) { + mDoMtx_stack_c::multVecZero(&sp54); + mDoMtx_MtxToRot(mDoMtx_stack_c::get(), &local_8c); + s16 sVar1 = (s16)(0x4000 - local_8c.z) * field_0x668[iVar1]; + mDoMtx_stack_c::transS(sp54); + mDoMtx_stack_c::ZXYrotM(local_8c.x, local_8c.y, local_8c.z + sVar1); + mDoMtx_stack_c::scaleM(1.0f, 1.0f, 1.0f); + } else { + mDoMtx_stack_c::multVecZero(&sp54); + mDoMtx_MtxToRot(mDoMtx_stack_c::get(), &local_8c); + mDoMtx_stack_c::copy(i_model->getAnmMtx(jntNo - 1)); + mDoMtx_stack_c::transM(-100.0f, 0.0f, 0.0f); + mDoMtx_stack_c::multVecZero(&sp60); -/* 80821D00-80821D04 0001F0 0004+00 0/1 0/0 0/0 .data e_prim$6449 */ -#pragma push -#pragma force_active on -SECTION_DATA static u8 e_prim_6449[4] = { - 0xFF, - 0x64, - 0x78, - 0x00, -}; -#pragma pop + mDoMtx_MtxToRot(mDoMtx_stack_c::get(), &local_94); + sp54 = ((sp54 * (1.0f - field_0x668[iVar1])) + (sp60 * field_0x668[iVar1])); + local_8c.set(local_8c.x * (1.0f - field_0x668[iVar1]) + local_94.x * field_0x668[iVar1], + local_8c.y * (1.0f - field_0x668[iVar1]) + local_94.y * field_0x668[iVar1], + local_8c.z * (1.0f - field_0x668[iVar1]) + local_94.z * field_0x668[iVar1]); + mDoMtx_stack_c::transS(sp54); + mDoMtx_stack_c::ZXYrotM(local_8c); + mDoMtx_stack_c::scaleM(1.0f, 1.0f, 1.0f); + } + } -/* 80821D04-80821D08 0001F4 0004+00 0/1 0/0 0/0 .data e_env$6450 */ -#pragma push -#pragma force_active on -SECTION_DATA static u8 e_env_6450[4] = { - 0x3C, - 0x1E, - 0x1E, - 0x00, -}; -#pragma pop + break; + } + } -/* 80821D08-80821D10 0001F8 0006+02 0/1 0/0 0/0 .data eff_id$6451 */ -#pragma push -#pragma force_active on -SECTION_DATA static u8 eff_id[6 + 2 /* padding */] = { - 0x02, - 0x9D, - 0x02, - 0x9E, - 0x02, - 0x9F, - /* padding */ - 0x00, - 0x00, -}; -#pragma pop + i_model->setAnmMtx(jntNo, mDoMtx_stack_c::get()); + MTXCopy(mDoMtx_stack_c::get(), J3DSys::mCurrentMtx); + return 1; +} -/* 80821D10-80821D40 -00001 0030+00 1/1 0/0 0/0 .data @7505 */ -SECTION_DATA static void* lit_7505[12] = { - (void*)(((char*)executeStartDemo__9daE_YMB_cFv) + 0x64), - (void*)(((char*)executeStartDemo__9daE_YMB_cFv) + 0x1C0), - (void*)(((char*)executeStartDemo__9daE_YMB_cFv) + 0x434), - (void*)(((char*)executeStartDemo__9daE_YMB_cFv) + 0x514), - (void*)(((char*)executeStartDemo__9daE_YMB_cFv) + 0x5D0), - (void*)(((char*)executeStartDemo__9daE_YMB_cFv) + 0xB2C), - (void*)(((char*)executeStartDemo__9daE_YMB_cFv) + 0xB2C), - (void*)(((char*)executeStartDemo__9daE_YMB_cFv) + 0xB2C), - (void*)(((char*)executeStartDemo__9daE_YMB_cFv) + 0x6E0), - (void*)(((char*)executeStartDemo__9daE_YMB_cFv) + 0x86C), - (void*)(((char*)executeStartDemo__9daE_YMB_cFv) + 0x928), - (void*)(((char*)executeStartDemo__9daE_YMB_cFv) + 0xA24), -}; +/* 808164F0-8081653C 0004D0 004C+00 1/1 0/0 0/0 .text JointCallBack__9daE_YMB_cFP8J3DJointi */ +int daE_YMB_c::JointCallBack(J3DJoint* i_joint, int param_2) { + if (param_2 == 0) { + J3DModel* model = j3dSys.getModel(); + daE_YMB_c* i_this = (daE_YMB_c*)model->getUserArea(); + if (i_this != NULL) { + i_this->ctrlJoint(i_joint, model); + } + } -/* 80821D40-80821D74 -00001 0034+00 1/1 0/0 0/0 .data @7867 */ -SECTION_DATA static void* lit_7867[13] = { - (void*)(((char*)action__9daE_YMB_cFv) + 0x1AC), (void*)(((char*)action__9daE_YMB_cFv) + 0x1B8), - (void*)(((char*)action__9daE_YMB_cFv) + 0x1C4), (void*)(((char*)action__9daE_YMB_cFv) + 0x1D0), - (void*)(((char*)action__9daE_YMB_cFv) + 0x1DC), (void*)(((char*)action__9daE_YMB_cFv) + 0x1E8), - (void*)(((char*)action__9daE_YMB_cFv) + 0x1F4), (void*)(((char*)action__9daE_YMB_cFv) + 0x200), - (void*)(((char*)action__9daE_YMB_cFv) + 0x20C), (void*)(((char*)action__9daE_YMB_cFv) + 0x218), - (void*)(((char*)action__9daE_YMB_cFv) + 0x224), (void*)(((char*)action__9daE_YMB_cFv) + 0x230), - (void*)(((char*)action__9daE_YMB_cFv) + 0x23C), -}; + return 1; +} + +/* 8081653C-80816554 00051C 0018+00 1/1 0/0 0/0 .text rideCallBack__FP4dBgWP10fopAc_ac_cP10fopAc_ac_c */ +static void rideCallBack(dBgW* param_1, fopAc_ac_c* aActor_p, fopAc_ac_c* param_3) { + if (fopAcM_GetName(param_3) == PROC_ALINK) { + ((daE_YMB_c*)aActor_p)->field_0x724 = 20; + } +} + +/* 80816554-8081695C 000534 0408+00 1/1 0/0 0/0 .text draw__9daE_YMB_cFv */ +int daE_YMB_c::draw() { + g_env_light.settingTevStruct(6, ¤t.pos, &tevStr); + + if (!field_0x6d8 || field_0x710 != 0) { + return 1; + } + + J3DModel* model = mpModelMorf->getModel(); + J3DShape* shape = model->getModelData()->getMaterialNodePointer(4)->getShape(); + if (shape != NULL) { + if (field_0x717 != 0) { + shape->show(); + } else { + shape->hide(); + } + } + + g_env_light.setLightTevColorType_MAJI(model, &tevStr); + J3DModelData* modelData = model->getModelData(); + for (u16 i = 0; i < modelData->getMaterialNum(); i++) { + J3DMaterial* matNodeP = modelData->getMaterialNodePointer(i); + if (i == 4) { + matNodeP->getTevKColor(3)->a = field_0x6dc; + } else if (i == 3) { + matNodeP->getTevKColor(3)->a = field_0x6d8; + } else if (field_0x6d8 >= 255.0f) { + matNodeP->setMaterialMode(1); + matNodeP->getZMode()->setUpdateEnable(1); + matNodeP->getBlend()->setType(0); + } else { + matNodeP->setMaterialMode(4); + matNodeP->getZMode()->setUpdateEnable(0); + matNodeP->getBlend()->setType(1); + matNodeP->getTevKColor(3)->a = field_0x6d8; + } + + if (i == 0 || i == 1) { + matNodeP->getTevColor(0)->r = field_0x6e0; + matNodeP->getTevColor(0)->b = field_0x6e0; + matNodeP->getTevColor(0)->g = field_0x6e0; + } + } + + mpBrkAnm->entry(model->getModelData()); + + if (field_0x6d8 >= 255.0f) { + dComIfGd_setListDark(); + mpModelMorf->entryDL(); + dComIfGd_setList(); + } else { + mInvisModel.entryDL(NULL); + } + + cXyz sp58; + sp58.set(current.pos.x, current.pos.y + 100.0f, current.pos.z); + tevStr.field_0x344 = (tevStr.field_0x344 * field_0x6d8) / 255.0f; + mShadowKey = dComIfGd_setShadow(mShadowKey, 0, model, &sp58, 2500.0f, 0.0f, + current.pos.y, field_0x6d4, mGndChk, &tevStr, 0, + 1.0f, dDlst_shadowControl_c::getSimpleTex()); + + return 1; +} + +/* 8081695C-8081697C 00093C 0020+00 1/0 0/0 0/0 .text daE_YMB_Draw__FP9daE_YMB_c */ +static int daE_YMB_Draw(daE_YMB_c* i_this) { + return i_this->draw(); +} + +/* 8081697C-80816A20 00095C 00A4+00 14/14 0/0 0/0 .text setBck__9daE_YMB_cFiUcff */ +void daE_YMB_c::setBck(int i_index, u8 i_attr, f32 i_morf, f32 i_rate) { + mpModelMorf->setAnm((J3DAnmTransform*)dComIfG_getObjectRes("E_YB", i_index), i_attr, i_morf, i_rate, 0.0f, -1.0f); +} + +/* 80816A20-80816A7C 000A00 005C+00 5/5 0/0 0/0 .text checkBck__9daE_YMB_cFi */ +bool daE_YMB_c::checkBck(int i_index) { + if (mpModelMorf->getAnm() == (J3DAnmTransform*)dComIfG_getObjectRes("E_YB", i_index)) { + return true; + } else { + return false; + } +} + +/* 80816A7C-80816A88 000A5C 000C+00 15/15 0/0 0/0 .text setActionMode__9daE_YMB_cFii */ +void daE_YMB_c::setActionMode(int i_action, int i_mode) { + mAction = i_action; + mMode = i_mode; +} + +/* 80816A88-80816B7C 000A68 00F4+00 1/1 0/0 0/0 .text setLastDamage__9daE_YMB_cFv */ +void daE_YMB_c::setLastDamage() { + setRockDamageEffect(); + + field_0x6f4++; + if (field_0x6f4 > 6) { + health = 0; + } + + mSound.startCollisionSE(Z2SE_HIT_WOLFBITE, 0x20); + dComIfGp_setHitMark(3, this, &eyePos, NULL, NULL, 0); + field_0x6f8 = 3; + setBck(BCK_YB_DAWN_DAMAGE, 0, 3.0f, 1.0f); + dComIfGp_getVibration().StartShock(3, 31, cXyz(0.0f, 1.0f, 0.0f)); +} + +/* 80816B7C-80816E78 000B5C 02FC+00 1/1 0/0 0/0 .text damage_check__9daE_YMB_cFv */ +void daE_YMB_c::damage_check() { + cCcD_Obj* tgHitObj; + daPy_py_c* player = daPy_getPlayerActorClass(); + + if (field_0x6f8 == 0) { + if (field_0xa9c.ChkTgHit() && field_0x704 == 0) { + mAtInfo.mpCollider = field_0xa9c.GetTgHitObj(); + health = 100; + cc_at_check(this, &mAtInfo); + if (mAtInfo.mpCollider->ChkAtType(AT_TYPE_UNK)) { + field_0x6f8 = 20; + } else { + field_0x6f8 = 10; + } + + if (mAtInfo.mAttackPower <= 1) { + field_0x6f8 = 10; + } + + if (mAction != 8 && player->getCutType() != daPy_py_c::CUT_TYPE_WOLF_B_LEFT && player->getCutType() != daPy_py_c::CUT_TYPE_WOLF_B_RIGHT && + mAtInfo.mpCollider->ChkAtType(AT_TYPE_WOLF_ATTACK) && player->onWolfEnemyHangBite(this)) { + setActionMode(7, 0); + return; + } + } + + tgHitObj = NULL; + if (field_0x82c[0].ChkTgShield() && field_0x82c[0].ChkTgHit()) { + tgHitObj = field_0x82c[0].GetTgHitObj(); + } + + if (field_0x82c[1].ChkTgShield() && field_0x82c[1].ChkTgHit()) { + tgHitObj = field_0x82c[1].GetTgHitObj(); + } + + if (field_0xa9c.ChkTgShield() && field_0xa9c.ChkTgHit()) { + tgHitObj = field_0xa9c.GetTgHitObj(); + } + + if (tgHitObj != NULL && (mAction == 1 || mAction == 2 || mAction == 4)) { + setActionMode(4, 0); + } + } + + int iVar1 = 0; + for (int i = 0; i < 6; i++) { + if (field_0xbd4[i].ChkTgHit()) { + tgHitObj = field_0xbd4[i].GetTgHitObj(); + if (!tgHitObj->ChkAtType(AT_TYPE_MIDNA_LOCK)) { + mAtInfo.mpCollider = field_0xbd4[i].GetTgHitObj(); + health = 100; + mAtInfo.field_0x18 = 30; + cc_at_check(this, &mAtInfo); + + cXyz sp28; + mDoMtx_stack_c::copy(mpModelMorf->getModel()->getAnmMtx(i * 2 + 20)); + mDoMtx_stack_c::multVecZero(&sp28); + dComIfGp_setHitMark(1, this, &sp28, NULL, NULL, 0); + + field_0x680[i] = 30; + + if (tgHitObj->ChkAtType(AT_TYPE_WOLF_CUT_TURN)) { + iVar1++; + field_0x698 = 30; + } + + field_0xbd4[i].ResetTgHit(); + if (iVar1 >= 4) { + return; + } + } + } + } +} + +/* 80816E78-80817064 000E58 01EC+00 1/1 0/0 0/0 .text setCameraSwitch__9daE_YMB_cFv */ +void daE_YMB_c::setCameraSwitch() { + field_0x713 = 0; + daPy_py_c* player = daPy_getPlayerActorClass(); + + if (field_0x69c.absXZ(player->current.pos) < 3000.0f) { + field_0x713 = 1; + } + + if (field_0x713 != 0) { + dComIfGs_onSwitch(5, fopAcM_GetRoomNo(this)); + } else { + dComIfGs_offSwitch(5, fopAcM_GetRoomNo(this)); + } + + if (field_0x714 != 0) { + dComIfGs_onOneZoneSwitch(15, fopAcM_GetRoomNo(this)); + } else { + dComIfGs_offOneZoneSwitch(15, fopAcM_GetRoomNo(this)); + } +} + +UNK_REL_BSS; + +/* 80821E54-80821E58 -00001 0004+00 2/2 0/0 0/0 .bss None */ +static u8 l_initHIO; + +/* 80821E64-80821E84 000054 0020+00 12/20 0/0 0/0 .bss l_HIO */ +static daE_YMB_HIO_c l_HIO; + +/* 80817064-80817164 001044 0100+00 1/1 0/0 0/0 .text checkWaterPos__9daE_YMB_cFv */ +void daE_YMB_c::checkWaterPos() { + Vec pos = current.pos; + pos.y += 1000.0f; + + dBgS_ObjGndChk_Spl wtr_chk; + wtr_chk.SetPos(&pos); + f32 wtr_pos = dComIfG_Bgsp().GroundCross(&wtr_chk); + if (wtr_pos != -1000000000.0f) { + field_0x6cc = wtr_pos; + field_0x69c.y = wtr_pos + 1000.0f + l_HIO.fly_height_adjust; + + std::fabsf(field_0x6cc - current.pos.y); + if (current.pos.y < (200.0f + field_0x6cc)) { + if (field_0x715 == 0) { + setWaterEffect1(); + } + + field_0x715 = 1; + } else { + field_0x715 = 0; + } + } +} + +/* 80817164-80817200 001144 009C+00 1/1 0/0 0/0 .text checkGroundPos__9daE_YMB_cFv */ +void daE_YMB_c::checkGroundPos() { + cXyz pos(current.pos); + pos.y += 500.0f; + field_0x6d0 = field_0x6cc; + mGndChk.SetPos(&pos); + f32 fVar1 = dComIfG_Bgsp().GroundCross(&mGndChk); + field_0x6d4 = fVar1; + if (fVar1 != -1000000000.0f && field_0x6d0 < fVar1) { + field_0x6d0 = fVar1; + } +} + +/* 80817200-8081727C 0011E0 007C+00 6/6 0/0 0/0 .text setFlyWaitVoice__9daE_YMB_cFv */ +void daE_YMB_c::setFlyWaitVoice() { + if ((u8)checkBck(BCK_YB_FLY_WAIT) && mpModelMorf->checkFrame(0.0f)) { + mSound.startCreatureVoice(Z2SE_EN_YB_V_FLY_WAIT, -1); + } +} + +/* 8081727C-808172F8 00125C 007C+00 1/1 0/0 0/0 .text setDownWaitVoice__9daE_YMB_cFv */ +void daE_YMB_c::setDownWaitVoice() { + if ((u8)checkBck(BCK_YB_DAWN_WAIT) && mpModelMorf->checkFrame(0.0f)) { + mSound.startCreatureVoice(Z2SE_EN_YB_V_DOWN_WAIT, -1); + } +} + +/* 808172F8-808173B0 0012D8 00B8+00 0/0 0/0 1/1 .text setHitBoardSe__9daE_YMB_cFv */ +void daE_YMB_c::setHitBoardSe() { + if (field_0x722 == 0 && mAction == 5 && mMode >= 3 && mMode <= 7) { + if (current.pos.y > field_0x6cc - 150.0f - 200.0f) { + mSound.startCreatureSound(Z2SE_EN_YB_HIT_FLOATBOARD, 0, -1); + field_0x722 = 1; + field_0x723 = 10; + } + } +} + +/* 808173B0-8081756C 001390 01BC+00 4/4 0/0 0/0 .text setElecEffect1__9daE_YMB_cFv */ +void daE_YMB_c::setElecEffect1() { + MtxP mtx = mpModelMorf->getModel()->getAnmMtx(15); + cXyz sp28(mtx[0][3], mtx[1][3], mtx[2][3]); + cXyz sp34(l_HIO.model_size, l_HIO.model_size, l_HIO.model_size); + + mElecParticles[0] = dComIfGp_particle_set(mElecParticles[0], ZL2_ELEC_1, &sp28, &tevStr, &shape_angle, &sp34, 0xFF, NULL, -1, NULL, NULL, NULL); + JPABaseEmitter* emitter = dComIfGp_particle_getEmitter(mElecParticles[0]); + if (emitter != NULL) { + emitter->setRate(0.2f); + emitter->setGlobalAlpha(field_0x6c4); + } + + mElecParticles[1] = dComIfGp_particle_set(mElecParticles[1], ZL2_ELECY_1, &sp28, &tevStr, &shape_angle, &sp34, 0xFF, NULL, -1, NULL, NULL, NULL); + emitter = dComIfGp_particle_getEmitter(mElecParticles[1]); + if (emitter != NULL) { + emitter->setRate(20.0f); + emitter->setGlobalAlpha(field_0x6c4); + } + + mSound.startCreatureSoundLevel(Z2SE_EN_YB_ELECTRIC, 0, -1); +} + +/* 8081756C-80817744 00154C 01D8+00 6/6 0/0 0/0 .text setElecEffect2__9daE_YMB_cFv */ +void daE_YMB_c::setElecEffect2() { + static u16 w_eff_id[4] = { + ZL2_ELEC_1, ZL2_ELECY_1, ZL2_ELECY_2, ZL2_GLOW02, + }; + + field_0x1324.OnAtSetBit(); + field_0x82c[0].OnAtSetBit(); + field_0x82c[1].OnAtSetBit(); + + MtxP mtx = mpModelMorf->getModel()->getAnmMtx(15); + cXyz sp34(mtx[0][3], mtx[1][3], mtx[2][3]); + cXyz sp40(l_HIO.model_size, l_HIO.model_size, l_HIO.model_size); + + for (int i = 0; i < 4; i++) { + mElecParticles[i] = dComIfGp_particle_set(mElecParticles[i], w_eff_id[i], &sp34, &tevStr, &shape_angle, &sp40, 0xFF, NULL, -1, NULL, NULL, NULL); + JPABaseEmitter* emitter = dComIfGp_particle_getEmitter(mElecParticles[i]); + if (emitter != NULL) { + emitter->setGlobalAlpha(field_0x6c4); + if (i == 0) { + emitter->setRate(2.0f); + } else if (i == 1) { + emitter->setRate(60.0f); + } + } + } + + if (field_0x6c1 == 1) { + mSound.startCreatureSoundLevel(Z2SE_EN_YB_ELECTRIC_LOOP_WTR, 0, -1); + } else { + mSound.startCreatureSoundLevel(Z2SE_EN_YB_ELECTRIC_LOOP, 0, -1); + } +} + +namespace { + /* 80821F38-80821FEC 000128 00B4+00 4/5 0/0 0/0 .bss YMB_DOWN_POS__23@unnamed@d_a_e_ymb_cpp@ */ + static cXyz YMB_DOWN_POS[15] = { + cXyz(-88457.0f, -18786.0f, 42166.0f), + cXyz(-89307.0f, -18786.0f, 41366.0f), + cXyz(-89389.0f, -18785.0f, 37267.0f), + cXyz(-88442.0f, -18753.0f, 38460.0f), + cXyz(-87864.0f, -18753.0f, 37112.0f), + cXyz(-87639.0f, -18764.0f, 41016.0f), + cXyz(-88977.0f, -18764.0f, 40658.0f), + cXyz(-86467.0f, -18758.0f, 39379.0f), + cXyz(-87372.0f, -18758.0f, 40362.0f), + cXyz(-86980.0f, -18758.0f, 37583.0f), + cXyz(-90195.0f, -18754.0f, 39893.0f), + cXyz(-88342.0f, -18754.0f, 39785.0f), + cXyz(-90200.0f, -18754.0f, 38100.0f), + cXyz(-88442.0f, -18753.0f, 38460.0f), + cXyz(-88442.0f, -18753.0f, 38460.0f), + }; +} + +/* 80817744-8081785C 001724 0118+00 4/4 0/0 0/0 .text setWaterEffect1__9daE_YMB_cFv */ +void daE_YMB_c::setWaterEffect1() { + cXyz sp28(current.pos.x, field_0x6cc, current.pos.z); + static cXyz sc(l_HIO.model_size, l_HIO.model_size, l_HIO.model_size); + static u16 w_eff_id[6] = { + ZL2_FIRE_2, ZL2_HAMON_5, ZL2_WATER_EFFECT_1, ZL2_WATER_EFFECT_2, ZL2_SMASH_KARI_1, ZL2_MIZUTAMA_IA, + }; + + for (int i = 0; i < 6; i++) { + mWaterParticles1[i] = dComIfGp_particle_set(mWaterParticles1[i], w_eff_id[i], &sp28, &tevStr, NULL, &sc, 0xFF, NULL, -1, NULL, NULL, NULL); + } +} + +/* 8081785C-80817974 00183C 0118+00 2/2 0/0 0/0 .text setWaterEffect2__9daE_YMB_cFv */ +void daE_YMB_c::setWaterEffect2() { + cXyz sp28(current.pos.x, field_0x6cc, current.pos.z); + static cXyz sc(l_HIO.model_size, l_HIO.model_size, l_HIO.model_size); + static u16 w_eff_id[7] = { + ZL2_FIRE_3, ZL2_SMASH_KARI_2, ZL2_SMASH_KARI_3, ZL2_SMASH_KARI_4, ZL2_WATER_EFFECT_3, ZL2_WATER_EFFECT_4, ZL2_WATER_EFFECT_5, + }; + + for (int i = 0; i < 7; i++) { + mWaterParticles2[i] = dComIfGp_particle_set(mWaterParticles2[i], w_eff_id[i], &sp28, &tevStr, &shape_angle, &sc, 0xFF, NULL, -1, NULL, NULL, NULL); + } +} + +/* 80817974-80817AEC 001954 0178+00 1/1 0/0 0/0 .text setBoilEffect__9daE_YMB_cFi */ +void daE_YMB_c::setBoilEffect(int param_1) { + cXyz sp30(current.pos.x, field_0x6cc, current.pos.z); + static cXyz sc(l_HIO.model_size, l_HIO.model_size, l_HIO.model_size); + static u16 w_eff_id[7] = { + ZL2_HAMON_1, ZL2_FIRE_1, ZL2_SAND00_IA_2, ZL2_HAMON_2, ZL2_BOIL, ZL2_SAND00_IA_1, ZL2_MIZUTAMA02, + }; + int iVar1 = param_1 == 0 ? 7 : 5; + + for (int i = 0; i < iVar1; i++) { + mWaterParticles2[i] = dComIfGp_particle_set(mWaterParticles2[i], w_eff_id[i], &sp30, &tevStr, NULL, &sc, 0xFF, NULL, -1, NULL, NULL, NULL); + } + + Z2GetAudioMgr()->seStartLevel(Z2SE_EN_YB_ABUKU, &sp30, 0, 0, 1.0f, 1.0f, -1.0f, -1.0f, 0); +} + +/* 80817AEC-80817BD8 001ACC 00EC+00 1/1 0/0 0/0 .text setDamageEffect__9daE_YMB_cFi */ +void daE_YMB_c::setDamageEffect(int param_1) { + static cXyz sc(l_HIO.model_size, l_HIO.model_size, l_HIO.model_size); + static u16 w_eff_id[2] = { + ZL2_LIQUIDANIM_2, ZL2_LIQUIDANIM_3, + }; + cXyz pos; + getBellyBitePos(&pos); + mDamageParticle = dComIfGp_particle_set(mDamageParticle, w_eff_id[param_1], &pos, &tevStr, &shape_angle, &sc, 0xFF, NULL, -1, NULL, NULL, NULL); +} + +/* 80817BD8-80817CF0 001BB8 0118+00 2/2 0/0 0/0 .text setDownHamonEffect__9daE_YMB_cFv */ +void daE_YMB_c::setDownHamonEffect() { + cXyz pos(current.pos.x, field_0x6cc, current.pos.z); + static cXyz sc(l_HIO.model_size, l_HIO.model_size, l_HIO.model_size); + static u16 w_eff_id[2] = { + ZL2_HAMON_3, ZL2_HAMON_4, + }; + for (int i = 0; i < 2; i++) { + mDownHamonParticles[i] = dComIfGp_particle_set(mDownHamonParticles[i], w_eff_id[i], &pos, &tevStr, NULL, &sc, 0xFF, NULL, -1, NULL, NULL, NULL); + } +} + +/* 80817CF0-80817E7C 001CD0 018C+00 1/1 0/0 0/0 .text setFlyBlurEffect__9daE_YMB_cFv */ +void daE_YMB_c::setFlyBlurEffect() { + static u16 w_eff_id[2] = { + ZL2_HANEBLUR64I4_1, ZL2_HANEBLUR64I4_2, + }; + + if (field_0x717 == 0 || !field_0x6dc) { + return; + } + + if (!field_0x6d8 || field_0x710) { + return; + } + + J3DModel* model = mpModelMorf->getModel(); + cXyz pos; + mDoMtx_stack_c::copy(model->getAnmMtx(1)); + mDoMtx_stack_c::multVecZero(&pos); + if (pos.y < field_0x6cc) { + return; + } + + for (int i = 0; i < 2; i++) { + mBlurParticles[i] = dComIfGp_particle_set(mBlurParticles[i], w_eff_id[i], &pos, &tevStr); + JPABaseEmitter* emitter = dComIfGp_particle_getEmitter(mBlurParticles[i]); + if (emitter != NULL) { + emitter->setGlobalSRTMatrix(model->getAnmMtx(1)); + } + } +} + +/* 80817E7C-80817FDC 001E5C 0160+00 1/1 0/0 0/0 .text setRockDamageEffect__9daE_YMB_cFv */ +void daE_YMB_c::setRockDamageEffect() { + cXyz pos; + int iVar1 = field_0x6f4 - 1; + if (iVar1 < 0) { + iVar1 = 0; + } + + if (iVar1 > 5) { + iVar1 = 5; + } + + mDoMtx_stack_c::copy(mpModelMorf->getModel()->getAnmMtx(YMB_DOWN_ATT_JNT[iVar1])); + mDoMtx_stack_c::multVecZero(&pos); + static cXyz sc(l_HIO.model_size, l_HIO.model_size, l_HIO.model_size); + + dComIfGp_particle_set(ZL2_LIQUIDANIM_1, &pos, &tevStr, NULL, &sc, 0xFF, NULL, -1, NULL, NULL, NULL); + mSound.startCreatureVoice(Z2SE_EN_YB_V_DOWN_DAMAGE, -1); +} + +/* 80817FDC-80818158 001FBC 017C+00 1/1 0/0 0/0 .text setDeathEffect__9daE_YMB_cFv */ +void daE_YMB_c::setDeathEffect() { + cXyz pos; + mDoMtx_stack_c::copy(mpModelMorf->getModel()->getAnmMtx(15)); + mDoMtx_stack_c::multVecZero(&pos); + static cXyz sc(l_HIO.model_size, l_HIO.model_size, l_HIO.model_size); + static u16 w_eff_id[2] = { + ZL2_POLYGON_IA8, ZL2_YAMIMOYOU01, + }; + for (int i = 0; i < 2; i++) { + dComIfGp_particle_set(w_eff_id[i], &pos, &tevStr, NULL, &sc, 0xFF, NULL, -1, NULL, NULL, NULL); + } + fopAcM_seStart(this, Z2SE_DARK_VANISH, 0); +} + +/* 80818158-808181F4 002138 009C+00 1/1 0/0 0/0 .text search_drop__FPvPv */ +static void* search_drop(void* i_actor, void* i_data) { + if (fopAc_IsActor(i_actor) && fopAcM_GetName(i_actor) == PROC_Obj_Drop) { + if (!fpcM_IsCreating(fopAcM_GetID(i_actor))) { + u8 switchBit = ((daE_YMB_c*)i_data)->getSwitchBit(); + if (switchBit == 0xFF) { + return NULL; + } + + if (((daObjDrop_c*)i_actor)->getYmSwbit() == switchBit) { + return i_actor; + } + } + } + + return NULL; +} + +/* 808181F4-80818328 0021D4 0134+00 1/1 0/0 0/0 .text executeWait__9daE_YMB_cFv */ +void daE_YMB_c::executeWait() { + switch (mMode) { + case 0: + setActionMode(1, 0); + field_0x70c = cM_rndF(150.0f) + 300.0f; + field_0x708 = cM_rndF(100.0f) + 150.0f; + break; + + case 1: + if (field_0x6fc == 0) { + field_0x6fc = 30; + mMode = 2; + } + break; + + case 2: + setElecEffect1(); + if (field_0x6fc == 0) { + field_0x6fc = 60; + mMode = 3; + } + break; + + case 3: + setElecEffect2(); + if (field_0x6fc == 0) { + mMode = 1; + field_0x6fc = (s16)(cM_rndF(300.0f) + 300.0f); + } + break; + } +} + +/* 80818328-80818370 002308 0048+00 1/1 0/0 0/0 .text setBitePos__9daE_YMB_cFi */ +void daE_YMB_c::setBitePos(int param_1) { + cXyz pos; + getBellyBitePos(&pos); + mDownPos = pos; +} + +/* 80818370-80818518 002350 01A8+00 1/1 0/0 0/0 .text setInclination__9daE_YMB_cFv */ +void daE_YMB_c::setInclination() { + s16 sVar1 = cM_atan2s(speedF, speed.y) - 0x4000; + f32 fVar1 = speed.abs(); + if (fVar1 > 50.0f) { + fVar1 = 50.0f; + } + + s16 sVar2 = sVar1 * (fVar1 / 50.0f); + if (sVar2 < -6000) { + sVar2 = -6000; + } + + if (sVar2 > 6000) { + sVar2 = 6000; + } + + cLib_chaseAngleS(&field_0x6ea, sVar2, 0x180); +} + +/* 80818518-80818930 0024F8 0418+00 3/3 0/0 0/0 .text setBodyAngle__9daE_YMB_cFv */ +void daE_YMB_c::setBodyAngle() { + s16 sVar1 = current.angle.y - shape_angle.y; + cLib_chaseAngleS(&shape_angle.z, std::abs(cM_scos(current.angle.x)) * (speed.abs() * -32.0f * cM_ssin(sVar1)), 0x100); + + f32 fVar1 = std::abs(cM_ssin(current.angle.x)); + f32 fVar2 = std::abs(cM_scos(current.angle.x)); + if (fVar2 >= fVar1) { + cLib_chaseAngleS(&field_0x6ea, std::abs(cM_scos(current.angle.x)) * (speed.abs() * 48.0f * cM_scos(sVar1)), 0x200); + } else { + cLib_chaseAngleS(&field_0x6ea, speed.abs() * 48.0f * std::abs(cM_ssin(current.angle.x)), 0x200); + } +} + +/* 80818930-80818AE8 002910 01B8+00 3/3 0/0 0/0 .text checkWolfLockIn__9daE_YMB_cFv */ +bool daE_YMB_c::checkWolfLockIn() { + daPy_py_c* player = daPy_getPlayerActorClass(); + if (field_0x764 != 0 && dComIfGp_checkPlayerStatus1(0, 0x800000)) { + f32 fVar1 = player->getSearchBallScale() + 100.0f; + if (player->current.pos.absXZ(current.pos) < fVar1) { + return true; + } + } + + return false; +} + +/* 80818AE8-80819610 002AC8 0B28+00 1/1 0/0 0/0 .text executeFly__9daE_YMB_cFv */ +void daE_YMB_c::executeFly() { + daPy_py_c* player = daPy_getPlayerActorClass(); + cXyz sp44(player->current.pos); + s16 adj_angle; + s16 playerAngleY = fopAcM_searchPlayerAngleY(this); + cXyz sp50; + + mSound.startCreatureSoundLevel(Z2SE_EN_YB_FLY, 0, -1); + setFlyWaitVoice(); + + f32 fVar1; + if (!checkStartBattleDemo()) { + field_0x712 = 1; + switch (mMode) { + case 1: + field_0x82c[0].OnTgSetBit(); + field_0x82c[1].OnTgSetBit(); + field_0xa9c.OnTgSetBit(); + + if (field_0x70c < 60) { + field_0x70c = 60; + } + // fallthrough + case 0: + if (!checkBck(BCK_YB_FLY_WAIT)) { + setBck(BCK_YB_FLY_WAIT, 2, 5.0f, 1.0f); + } + + mMode = 2; + // fallthrough + case 2: + fVar1 = current.pos.absXZ(field_0x69c); + if (sp44.absXZ(field_0x69c) > 3000.0f || fVar1 > 3000.0f) { + field_0x6a8 = field_0x69c; + } else { + if (fVar1 > 2200.0f) { + adj_angle = cLib_targetAngleY(¤t.pos, &field_0x69c); + } else { + if (fVar1 > 1800.0f) { + adj_angle = playerAngleY + 0x8000 + cM_rndFX(2048.0f); + if ((s16)(cLib_targetAngleY(¤t.pos, &field_0x69c) - playerAngleY) > 0) { + adj_angle -= (s16) 0x1800; + } else { + adj_angle += (s16) 0x1800; + } + } else { + adj_angle = playerAngleY + 0x8000 + cM_rndFX(2048.0f); + if (cM_rnd() < 0.5f) { + adj_angle += (s16) 0x1800; + } else { + adj_angle -= (s16) 0x1800; + } + } + } + + sp50.set(0.0f, 0.0f, 1000.0f); + cLib_offsetPos(&field_0x6a8, &sp44, adj_angle, &sp50); + field_0x6a8.y = field_0x69c.y; + } + + current.angle.y = cLib_targetAngleY(¤t.pos, &field_0x6a8); + current.angle.x = cLib_targetAngleX(¤t.pos, &field_0x6a8); + speedF = speed.y = 0.0f; + field_0x6c8 = 0.0f; + field_0x6fc = 30; + mMode = 3; + + if (std::abs(field_0x69c.y - current.pos.y) < 200.0f) { + field_0x6f0 = 0; + } else { + field_0x6f0 = 1; + } + break; + + case 3: + current.angle.y = cLib_targetAngleY(¤t.pos, &field_0x6a8); + current.angle.x = cLib_targetAngleX(¤t.pos, &field_0x6a8); + + if (field_0x6f0 == 0) { + cLib_chaseF(&field_0x6c8, l_HIO.fly_movement_speed, 1.0f); + } else { + cLib_chaseF(&field_0x6c8, l_HIO.fly_movement_speed + 10.0f, 1.0f); + } + + cLib_chaseF(&speedF, field_0x6c8 * std::abs(cM_scos(current.angle.x)), 1.0f); + cLib_chaseAngleS(&shape_angle.y, cLib_targetAngleY(¤t.pos, &sp44), 0x400); + cLib_chaseF(&speed.y, field_0x6c8 * cM_ssin(current.angle.x), 1.0f); + setBodyAngle(); + + if (std::abs(current.pos.y - field_0x6a8.y) < 50.0f) { + if (field_0x6a8.absXZ(current.pos) < 100.0f || field_0x6fc == 0) { + field_0x6fc = 30; + mMode = 4; + } + } + break; + + case 4: + if (current.pos.y < field_0x6d0 + 650.0f) { + current.pos.y = field_0x6d0 + 650.0f; + } + + cLib_chaseAngleS(&shape_angle.y, cLib_targetAngleY(¤t.pos, &sp44), 0x800); + cLib_chaseAngleS(&field_0x6ea, 0, 0x400); + cLib_chaseAngleS(&shape_angle.z, 0, 0x400); + cLib_chaseF(&speedF, 0.0f, 1.0f); + cLib_chaseF(&speed.y, 0.0f, 1.0f); + + if (current.pos.y < field_0x6cc) { + current.pos.y = field_0x6cc; + } + + if (checkWolfLockIn()) { + setActionMode(3, 0); + break; + } + + if (field_0x6fc == 0) { + speedF = speed.y = 0.0f; + mMode = 2; + } + + if (field_0x764 == 0) { + break; + } + + if (field_0x70c != 0) { + break; + } + + if (sp44.absXZ(field_0x69c) < 2000.0f) { + if (sp44.absXZ(current.pos) > 700.0f) { + if (std::abs(field_0x69c.y - current.pos.y) < 200.0f) { + speedF = speed.y = 0.0f; + setActionMode(2, 0); + return; + } + } + } + break; + } + } +} + +/* 80819610-80819FD0 0035F0 09C0+00 2/1 0/0 0/0 .text executeFlyAttack__9daE_YMB_cFv */ +void daE_YMB_c::executeFlyAttack() { + daPy_py_c* player = daPy_getPlayerActorClass(); + cXyz sp28; + mSound.startCreatureSoundLevel(Z2SE_EN_YB_FLY, 0, -1); + setFlyWaitVoice(); + + s16 sVar1; + fopAc_ac_c* actor; + switch (mMode) { + case 0: + field_0x70c = cM_rndF(150.0f) + 300.0f; + field_0x6e4 = 0; + mSound.startCreatureVoice(Z2SE_EN_YB_V_ATTACK, -1); + setBck(BCK_YB_ATTACK_A, 0, 5.0f, 1.0f); + mMode = 1; + field_0x6a8 = player->current.pos; + field_0x6a8.y = field_0x6d0 + 650.0f - 100.0f; + + sVar1 = fopAcM_searchPlayerAngleY(this); + shape_angle.y = sVar1; + current.angle.y= sVar1; + speed.y = 15.0f; + speedF = -15.0f; + // fallthrough + case 1: + setElecEffect1(); + cLib_chaseAngleS(&field_0x6ea, 0, 0x400); + cLib_chaseAngleS(&shape_angle.z, 0, 0x400); + + sVar1 = fopAcM_searchPlayerAngleY(this); + shape_angle.y = sVar1; + current.angle.y = sVar1; + + cLib_chaseF(&speed.y, 0.0f, 1.0f); + cLib_chaseF(&speedF, 0.0f, 1.0f); + + if (mpModelMorf->checkFrame(15.0f)) { + mMode = 2; + setElecEffect2(); + field_0x6fc = 10; + } + break; + + case 2: + if (mpModelMorf->isStop()) { + setBck(BCK_YB_ATTACK_B, 2, 0.0f, 1.0f); + } + + setElecEffect2(); + field_0x704 = 3; + sp28 = field_0x6a8 - current.pos; + cLib_chaseAngleS(&shape_angle.y, cLib_targetAngleY(¤t.pos, &field_0x6a8), 0x800); + current.angle.y = shape_angle.y; + sVar1 = (s16) cM_atan2s(sp28.absXZ(), sp28.y); + cLib_chaseF(&speedF, l_HIO.fly_attack_speed * (cM_ssin(sVar1)), 3.0f); + cLib_chaseF(&speed.y, l_HIO.fly_attack_speed * cM_scos(sVar1), 5.0f); + + if (field_0x6fc != 0) { + speed.y += 5.0f; + } + + if (current.pos.y < field_0x6d0 + 650.0f - 200.0f) { + current.pos.y += 15.0f; + if (speed.y < 0.0f) { + cLib_chaseF(&speed.y, 0.0f, 7.0f); + } + } + + if (field_0x1324.ChkAtHit()) { + actor = dCc_GetAc(field_0x1324.GetAtHitObj()->GetAc()); + if (fopAcM_GetName(actor) == PROC_ALINK) { + field_0x6fc = 30; + speed.y = 0.0f; + speedF = 0.0f; + mMode = 5; + setBck(BCK_YB_ATTACK_C, 0, 5.0f, 1.0f); + current.angle.y = cLib_targetAngleY(¤t.pos, &field_0x69c); + field_0x6ea = 0; + return; + } + } + + if (sp28.abs() < 100.0f) { + mMode = 4; + field_0x6fc = 10; + } + + setInclination(); + break; + + case 4: + setElecEffect2(); + field_0x704 = 3; + cLib_chaseF(&speed.y, 0.0f, 3.0f); + cLib_chaseF(&speedF, 10.0f, 3.0f); + + if (current.pos.y < field_0x6d0 + 650.0f - 150.0f) { + current.pos.y += 15.0f; + if (speed.y < 0.0f) { + cLib_chaseF(&speed.y, 0.0f, 7.0f); + } + } + + if (field_0x6fc == 0) { + setBck(BCK_YB_ATTACK_C, 0, 5.0f, 1.0f); + mMode = 5; + field_0x6fc = 30; + } + + setInclination(); + break; + + case 5: + setElecEffect2(); + field_0x704 = 3; + field_0x712 = 1; + field_0x6e4 += 0x800; + cLib_chaseF(&speed.y, 0.0f, 3.0f); + cLib_chaseF(&speedF, 0.0f, 3.0f); + + if (current.pos.y < field_0x6d0 + 650.0f) { + current.pos.y += 15.0f; + if (speed.y < 0.0f) { + cLib_chaseF(&speed.y, 0.0f, 7.0f); + } + } + + if (checkBck(BCK_YB_ATTACK_C)) { + if (mpModelMorf->isStop()) { + setBck(BCK_YB_FLY_WAIT, 2, 5.0f, 1.0f); + } + } else { + cLib_chaseAngleS(&shape_angle.y, fopAcM_searchPlayerAngleY(this), 0x400); + } + + static s16 ymb_chance_time[3] = { + 110, 80, 50, + }; + if (field_0x6fc == 0) { + mMode = 9; + speedF = 0.0f; + speed.y = 0.0f; + field_0x6fc = ymb_chance_time[field_0x6ec]; + } + + setInclination(); + break; + + case 9: + case 10: + field_0x712 = 1; + if (checkWolfLockIn()) { + setActionMode(3, 0); + } else { + sVar1 = fopAcM_searchPlayerAngleY(this); + cLib_addCalcAngleS(¤t.angle.y, sVar1 + 0x8000, 4, 0x1000, 0x100); + cLib_addCalcAngleS(&shape_angle.y, sVar1, 8, 0x400, 0x80); + + if (mMode == 9) { + cLib_chaseF(&speed.y, 0.0f, 1.0f); + cLib_chaseF(&speedF, 0.0f, 1.0f); + } else { + cLib_chaseF(&speed.y, 30.0f, 1.0f); + cLib_chaseF(&speedF, 10.0f, 1.0f); + } + + if (current.pos.y < field_0x6d0 + 650.0f) { + current.pos.y += 10.0f; + if (speed.y < 0.0f) { + cLib_chaseF(&speed.y, 0.0f, 5.0f); + } + } + + setInclination(); + + if (checkBck(BCK_YB_ATTACK_C) && mpModelMorf->isStop()) { + setBck(BCK_YB_FLY_WAIT, 2, 5.0f, 1.0f); + } + + if (mMode == 9) { + if (field_0x6fc == 0) { + mMode = 10; + } + } else if (std::abs(field_0x69c.y - current.pos.y) < 100.0f) { + mMode = 11; + } + } + break; + + case 11: + if (cLib_chaseF(&speed.y, 0.0f, 1.0f) != 0) { + setActionMode(1, 0); + } + break; + } +} + +/* 80819FD0-8081A718 003FB0 0748+00 1/1 0/0 0/0 .text executeRunAway__9daE_YMB_cFv */ +void daE_YMB_c::executeRunAway() { + daPy_py_c* player = daPy_getPlayerActorClass(); + cXyz sp34(player->current.pos); + s16 playerAngleY = fopAcM_searchPlayerAngleY(this); + cXyz sp40; + + mSound.startCreatureSoundLevel(Z2SE_EN_YB_FLY, 0, -1); + setFlyWaitVoice(); + field_0x712 = 1; + + switch (mMode) { + case 0: + setBck(BCK_YB_FLY_WAIT, 2, 5.0f, 1.0f); + mMode = 1; + // fallthrough + case 1: { + s16 adj_angle; + if (current.pos.absXZ(field_0x69c) > 2200.0f) { + adj_angle = cLib_targetAngleY(¤t.pos, &field_0x69c); + } else if (current.pos.absXZ(field_0x69c) > 1800.0f) { + adj_angle = playerAngleY + 0x8000 + cM_rndFX(2048.0f); + if ((s16)(cLib_targetAngleY(¤t.pos, &field_0x69c) - playerAngleY) > 0) { + adj_angle -= 0x1800; + } else { + adj_angle += 0x1800; + } + } else { + adj_angle = playerAngleY + 0x8000 + cM_rndFX(2048.0f); + if (cM_rnd() < 0.5f) { + adj_angle += 0x1800; + } else { + adj_angle -= 0x1800; + } + } + + sp40.set(0.0f, 0.0f, 1300.0f); + cLib_offsetPos(&field_0x6a8, &sp34, adj_angle, &sp40); + field_0x6a8.y = field_0x69c.y; + current.angle.y = cLib_targetAngleY(¤t.pos, &field_0x6a8); + current.angle.x = cLib_targetAngleX(¤t.pos, &field_0x6a8); + speed.y = 0.0f; + speedF = 0.0f; + field_0x6c8 = 0.0f; + field_0x6fc = 30; + mMode = 2; + break; + } + + case 2: + current.angle.y = cLib_targetAngleY(¤t.pos, &field_0x6a8); + current.angle.x = cLib_targetAngleX(¤t.pos, &field_0x6a8); + cLib_chaseF(&field_0x6c8, l_HIO.fly_attack_speed, 5.0f); + cLib_chaseF(&speedF, field_0x6c8 * std::abs(cM_scos(current.angle.x)), 5.0f); + cLib_chaseAngleS(&shape_angle.y, cLib_targetAngleY(¤t.pos, &sp34), 0x400); + cLib_chaseF(&speed.y, field_0x6c8 * cM_ssin(current.angle.x), 5.0f); + setBodyAngle(); + + if (field_0x6a8.absXZ(current.pos) < 100.0f || field_0x6fc == 0) { + mMode = 3; + field_0x6fc = 30; + } + break; + + case 3: + if (current.pos.y < field_0x6d0 + 650.0f) { + current.pos.y = field_0x6d0 + 650.0f; + } + + cLib_chaseAngleS(&shape_angle.y, cLib_targetAngleY(¤t.pos, &sp34), 0x800); + cLib_chaseAngleS(&field_0x6ea, 0, 0x400); + cLib_chaseAngleS(&shape_angle.z, 0, 0x400); + cLib_chaseF(&speedF, 0.0f, 3.0f); + cLib_chaseF(&speed.y, 0.0f, 3.0f); + + if (current.pos.y < field_0x6cc) { + current.pos.y = field_0x6cc; + } + + if (checkWolfLockIn()) { + mMode = 1; + } + + if (field_0x6fc == 0) { + setActionMode(1, 0); + } + break; + } +} + +/* 8081A718-8081A88C 0046F8 0174+00 1/1 0/0 0/0 .text executeGuard__9daE_YMB_cFv */ +void daE_YMB_c::executeGuard() { + mSound.startCreatureSoundLevel(Z2SE_EN_YB_FLY, 0, -1); + + switch (mMode) { + case 0: + mSound.startCreatureVoice(Z2SE_EN_YB_V_GUARD, -1); + setBck(BCK_YB_GUARD, 0, 3.0f, 1.0f); + current.angle.y = fopAcM_searchPlayerAngleY(this) - 0x8000; + speedF = 10.0f; + speed.y = 10.0f; + mMode = 1; + // fallthrough + case 1: + cLib_chaseF(&speedF, 0.0f, 0.3f); + cLib_chaseF(&speed.y, 0.0f, 0.3f); + cLib_chaseAngleS(&shape_angle.y, fopAcM_searchPlayerAngleY(this), 0x400); + + if (mpModelMorf->isStop()) { + setActionMode(1, 0); + } + break; + } +} + +/* 8081A88C-8081B78C 00486C 0F00+00 2/1 0/0 0/0 .text executeSwim__9daE_YMB_cFv */ +void daE_YMB_c::executeSwim() { + camera_class* camera = dComIfGp_getCamera(dComIfGp_getPlayerCameraID(0)); + s16 camAngleY = (s16) fopCamM_GetAngleY(camera); + s16 cam_ply_ang_diff = camAngleY - fopAcM_searchPlayerAngleY(this); + daPy_py_c* player = daPy_getPlayerActorClass(); + cXyz player_pos(player->current.pos); + cXyz sp40; + + switch (mMode) { + case 0: + setBck(BCK_YB_SIM_IN, 2, 5.0f, 1.0f); + mMode = 1; + field_0x6fc = 60; + // fallthrough + case 1: + mSound.startCreatureSoundLevel(Z2SE_EN_YB_MOVE_UNDERWATER, 0, -1); + cLib_addCalcAngleS(&field_0x6ea, 0, 8, 0x800, 0x100); + cLib_chaseF(&speedF, 0.0f, 1.0f); + cLib_chaseF(&speed.y, 0.0f, 1.0f); + + if (field_0x6fc == 0 && abs(field_0x6ea) < 0x1000) { + mMode = 2; + speedF = 0.0f; + } + break; + + case 2: + mSound.startCreatureSoundLevel(Z2SE_EN_YB_MOVE_UNDERWATER, 0, -1); + setElecEffect1(); + cLib_chaseF(&speedF, l_HIO.swim_attack_speed, 5.0f); + cLib_chaseF(&speed.y, 0.0f, 1.0f); + cLib_addCalcAngleS(&shape_angle.y, fopAcM_searchPlayerAngleY(this) + 0x8000, 8, 0x1000, 0x100); + current.angle.y = shape_angle.y; + + if (player_pos.absXZ(current.pos) < 500.0f) { + field_0x6fc = 30; + } else if (field_0x6fc == 0) { + mMode = 3; + field_0x700 = 150; + field_0x6fc = 0; + field_0x6f0 = 0; + field_0x6e6 = cM_rndF(8192.0f) + 16384.0f; + field_0x6e4 = field_0x6e6 + fopAcM_searchPlayerAngleY(this); + field_0x6e8 = cM_rndF(1536.0f) + 512.0f; + } + break; + + case 3: + case 4: + field_0x71f = 1; + setElecEffect2(); + + if (field_0x6f0 == 0) { + mSound.startCreatureSoundLevel(Z2SE_EN_YB_MOVE_UNDERWATER, 0, -1); + cLib_chaseF(&speed.y, 10.0f, 1.0f); + + if (current.pos.y > field_0x6cc - 150.0f) { + field_0x6f0 = 1; + setBck(BCK_YB_SIM_OUT, 2, 5.0f, 1.0f); + } + } else { + mSound.startCreatureSoundLevel(Z2SE_EN_YB_FLY, 0, -1); + mSound.startCreatureSoundLevel(Z2SE_EN_YB_MOVE_ONWATER, 0, -1); + setWaterEffect2(); + cLib_chaseF(&speed.y, -10.0f, 1.0f); + + if (current.pos.y < field_0x6cc - 150.0f) { + speed.y = 0.0f; + cLib_chaseF(¤t.pos.y, field_0x6cc - 150.0f, 2.0f); + } + } + + cLib_chaseF(&speedF, l_HIO.swim_attack_speed, 5.0f); + sp40.set(0.0f, 0.0f, 1000.0f); + cLib_offsetPos(&field_0x6a8, &player_pos, field_0x6e4, &sp40); + + if (mMode == 3) { + cLib_addCalcAngleS(&shape_angle.y, cLib_targetAngleY(¤t.pos, &field_0x6a8), 8, field_0x6e8, 0x40); + current.angle.y = shape_angle.y; + + if (abs((s16)(shape_angle.y - cLib_targetAngleY(¤t.pos, &field_0x6a8))) > 0x3000) { + field_0x6e4 = field_0x6e6 + fopAcM_searchPlayerAngleY(this); + } + + if (current.pos.absXZ(field_0x6a8) < 500.0f) { + mMode = 4; + field_0x6fc = 30; + } + } else if (mMode == 4 && field_0x6fc == 0 && current.pos.absXZ(field_0x6a8) > 500.0f) { + if (field_0x700 != 0) { + mMode = 3; + field_0x6e6 = cM_rndF(8192.0f) + 16384.0f; + field_0x6e4 = field_0x6e6 + fopAcM_searchPlayerAngleY(this); + field_0x6e8 = cM_rndF(1536.0f) + 512.0f; + } else { + mMode = 5; + field_0x6fc = 30; + field_0x6e4 = fopAcM_searchPlayerAngleY(this) + 0x7000; + } + } + break; + + case 5: + case 6: + mSound.startCreatureSoundLevel(Z2SE_EN_YB_MOVE_ONWATER, 0, -1); + setWaterEffect2(); + setElecEffect2(); + if (abs( s16(field_0x6e4 - s16(fopAcM_searchPlayerAngleY(this) - 0x8000)) ) < 0x1000) { + field_0x6e4 -= 0x180; + } + + if (mMode == 5) { + sp40.set(0.0f, 0.0f, 3000.0f); + } else { + sp40.set(0.0f, 0.0f, 4000.0f); + } + + cLib_offsetPos(&field_0x6a8, &player_pos, field_0x6e4, &sp40); + cLib_chaseF(&speedF, l_HIO.swim_attack_speed, 5.0f); + cLib_addCalcAngleS(&shape_angle.y, cLib_targetAngleY(¤t.pos, &field_0x6a8), 8, 0x800, 0x100); + current.angle.y = shape_angle.y; + + if (mMode == 5) { + if (field_0x6fc == 0) { + bool bVar1 = false; + if (dComIfGp_getAttention()->LockonTruth()) { + if (dComIfGp_getAttention()->LockonTarget(0) == this) { + bVar1 = true; + } + } + + if (bVar1 || abs(cam_ply_ang_diff) > 0x5800) { + mMode = 6; + field_0x6fc = 45; + } + } + } else if (field_0x6fc == 0) { + mMode = 7; + field_0x6a8 = player_pos; + setBck(BCK_YB_ATTACK_A, 0, 10.0f, 1.0f); + } + break; + + case 7: + mSound.startCreatureSoundLevel(Z2SE_EN_YB_FLY, 0, -1); + if (mpModelMorf->isStop()) { + setBck(BCK_YB_ATTACK_B, 2, 3.0f, 1.0f); + } + + mSound.startCreatureSoundLevel(Z2SE_EN_YB_MOVE_ONWATER, 0, -1); + setWaterEffect2(); + setElecEffect2(); + cLib_chaseF(&speedF, l_HIO.swim_attack_speed, 5.0f); + cLib_chaseF(¤t.pos.y, field_0x6d0 + 650.0f, 10.0f); + cLib_addCalcAngleS(&shape_angle.y, cLib_targetAngleY(¤t.pos, &field_0x6a8), 8, 0x800, 0x40); + current.angle.y = shape_angle.y; + + if (current.pos.absXZ(field_0x6a8) < 500.0f) { + mMode = 8; + field_0x6fc = 10; + field_0x6e4 = 0; + } + break; + + case 8: + mSound.startCreatureSoundLevel(Z2SE_EN_YB_FLY, 0, -1); + setElecEffect2(); + cLib_chaseF(¤t.pos.y, field_0x6d0 + 650.0f, 10.0f); + field_0x6c8 = l_HIO.swim_attack_speed; + cLib_chaseF(&speedF, field_0x6c8 * std::abs(cM_scos(field_0x6e4)), 1.0f); + cLib_chaseF(&speed.y, field_0x6c8 * cM_ssin(field_0x6e4), 1.0f); + cLib_chaseAngleS(&field_0x6e4, 0x4000, 0x400); + + if (field_0x6fc == 0) { + mMode = 9; + setBck(BCK_YB_FLY_WAIT, 2, 5.0f, 1.0f); + field_0x6c8 = l_HIO.swim_attack_speed; + field_0x714 = 0; + } + break; + + case 9: + mSound.startCreatureSoundLevel(Z2SE_EN_YB_FLY, 0, -1); + setFlyWaitVoice(); + + if (current.pos.y < field_0x69c.y - 500.0f) { + cLib_chaseF(&field_0x6c8, l_HIO.fly_movement_speed, 3.0f); + } else { + cLib_chaseF(&field_0x6c8, 0.0f, 3.0f); + } + + cLib_chaseAngleS(&field_0x6e4, 0x4000, 0x400); + cLib_chaseF(&speedF, field_0x6c8 * std::abs(cM_scos(field_0x6e4)), 3.0f); + cLib_chaseF(&speed.y, field_0x6c8 * cM_ssin(field_0x6e4), 3.0f); + cLib_addCalcAngleS(&shape_angle.y, fopAcM_searchPlayerAngleY(this), 8, 0x1000, 0x100); + + if (!speedF && !speed.y) { + setActionMode(1, 1); + } + break; + } +} + +/* 8081B78C-8081BC10 00576C 0484+00 1/1 0/0 0/0 .text executeWaterJump__9daE_YMB_cFv */ +void daE_YMB_c::executeWaterJump() { + switch (mMode) { + case 0: + setBck(BCK_YB_SIM_IN, 2, 5.0f, 1.0f); + mMode = 1; + shape_angle.y += 0x100; + field_0x6a8 = current.pos; + // fallthrough + case 1: + mSound.startCreatureSoundLevel(Z2SE_EN_YB_MOVE_UNDERWATER, 0, -1); + cLib_addCalcAngleS(&field_0x6ea, 0x4000, 8, 0x400, 0x100); + cLib_chaseF(&speed.y, -50.0f, 5.0f); + + if (current.pos.y < field_0x6cc - 1000.0f - 500.0f) { + mMode = 2; + field_0x6fc = 60; + speedF = 0.0f; + } + break; + + case 2: + mSound.startCreatureSoundLevel(Z2SE_EN_YB_MOVE_UNDERWATER, 0, -1); + cLib_addCalcAngleS(&field_0x6ea, -0x4000, 8, 0x400, 0x100); + cLib_addCalcAngleS(&shape_angle.y, fopAcM_searchPlayerAngleY(this), 8, 0x1000, 0x100); + current.angle.y = shape_angle.y; + cLib_chaseF(&speed.y, 80.0f, 5.0f); + + if (field_0x6fc < 30) { + setElecEffect1(); + } + + if (current.pos.y > field_0x6cc - 1000.0f) { + shape_angle.y = fopAcM_searchPlayerAngleY(this); + current.angle.y = shape_angle.y; + field_0x6ea = 0; + mMode = 3; + speed.y = 80.0f; + field_0x6f0 = 0; + field_0x6fc = 25; + setBck(BCK_YB_RISE, 2, 0.0f, 1.0f); + } + break; + + case 3: + setElecEffect2(); + if (field_0x6f0 == 0 && current.pos.y > field_0x6cc - 500.0f) { + field_0x6f0 = 1; + setWaterEffect1(); + mSound.startCreatureSound(Z2SE_EN_YB_SPLASH, 0, -1); + mSound.startCreatureVoice(Z2SE_EN_YB_V_RISE, -1); + field_0x714 = 0; + } + + if (field_0x715 != 0) { + mSound.startCreatureSoundLevel(Z2SE_EN_YB_MOVE_UNDERWATER, 0, -1); + } else { + mSound.startCreatureSoundLevel(Z2SE_EN_YB_FLY, 0, -1); + if (field_0x6fc == 0) { + cLib_chaseF(&speed.y, -30.0f, 3.0f); + if (speed.y <= 24.0f) { + setBck(BCK_YB_SIM_TO_FLY, 0, 3.0f, 1.0f); + mMode = 4; + } + } + } + break; + + case 4: + mSound.startCreatureSoundLevel(Z2SE_EN_YB_FLY, 0, -1); + if (cLib_chaseF(&speed.y, -30.0f, 3.0f) != 0) { + field_0x6fc = 10; + mMode = 5; + } + break; + + case 5: + mSound.startCreatureSoundLevel(Z2SE_EN_YB_FLY, 0, -1); + + if (field_0x6fc == 0 && cLib_chaseF(&speed.y, 0.0f, 3.0f) != 0 && mpModelMorf->isStop()) { + setActionMode(1, 1); + } + break; + } +} + +/* 8081BC10-8081BEE8 005BF0 02D8+00 1/1 0/0 0/0 .text getNearDownPos__9daE_YMB_cFv */ +void daE_YMB_c::getNearDownPos() { + s16 sVar2; + int iVar2; + f32 fVar2; + s16 sVar1[3]; + f32 fVar1[3]; + int iVar1[3]; + + fVar1[2] = 1500.0f; + fVar1[1] = 1500.0f; + fVar1[0] = 1500.0f; + iVar1[2] = -1; + iVar1[1] = -1; + iVar1[0] = -1; + + for (iVar2 = 0; iVar2 < 15; iVar2++) { + sVar2 = abs((s16)(shape_angle.y + 0x8000 - cLib_targetAngleY(¤t.pos, &YMB_DOWN_POS[iVar2]))); + fVar2 = current.pos.absXZ(YMB_DOWN_POS[iVar2]); + + if (sVar2 < 0x3000) { + if (fVar2 < fVar1[0]) { + fVar1[2] = fVar1[1]; + sVar1[2] = sVar1[1]; + iVar1[2] = iVar1[1]; + fVar1[1] = fVar1[0]; + sVar1[1] = sVar1[0]; + iVar1[1] = iVar1[0]; + fVar1[0] = fVar2; + sVar1[1] = sVar2; + iVar1[0] = iVar2; + } else if (fVar2 < fVar1[1]) { + fVar1[2] = fVar1[1]; + sVar1[2] = sVar1[1]; + iVar1[2] = iVar1[1]; + fVar1[1] = fVar2; + sVar1[1] = sVar2; + iVar1[1] = iVar2; + } else if (fVar2 < fVar1[2]) { + fVar1[2] = fVar2; + sVar1[2] = sVar2; + iVar1[2] = iVar2; + } + } + } + + for (int i = 0; i < 3; i++) { + if (iVar1[i] != -1 && fVar1[i] < 1000.0f && sVar1[i] < 0x3000) { + field_0x711 = iVar1[i]; + return; + } + } + + if (iVar1[0] != -1) { + field_0x711 = iVar1[0]; + } else { + field_0x711 = 0; + } +} + +/* 8081BEE8-8081C4EC 005EC8 0604+00 1/2 0/0 0/0 .text executeDamage__9daE_YMB_cFv */ +void daE_YMB_c::executeDamage() { + daPy_py_c* player = daPy_getPlayerActorClass(); + setFlyWaitVoice(); + + switch (mMode) { + case 0: + mSound.startCollisionSE(Z2SE_HIT_WOLFBITE, 31); + setBck(BCK_YB_DAMAGE, 0, 3.0f, 1.0f); + mSound.startCreatureVoice(Z2SE_EN_YB_V_DAMAGE, -1); + mSound.startCreatureSound(Z2SE_EN_YB_SHIRU, 0, -1); + mMode = 1; + field_0x6f0 = 0; + field_0x6fc = 20; + speed.y = 0.0f; + speedF = 0.0f; + getNearDownPos(); + dComIfGp_getVibration().StartShock(3, 31, cXyz(0.0f, 1.0f, 0.0f)); + // fallthrough + case 1: + mSound.startCreatureSoundLevel(Z2SE_EN_YB_FLY, 0, -1); + field_0x82c[0].OffCoSetBit(); + field_0x82c[1].OffCoSetBit(); + field_0x82c[0].OffTgShield(); + field_0x82c[1].OffTgShield(); + + if (mpModelMorf->isStop()) { + setBck(BCK_YB_FLY_WAIT, 2, 3.0f, 1.0f); + } + + if (!(u8)checkBck(BCK_YB_FLY_WAIT)) { + cLib_addCalcAngleS(&shape_angle.y, cLib_targetAngleY(¤t.pos, &YMB_DOWN_POS[field_0x711]) + 0x8000, 8, 0x200, 0x80); + } + + if (field_0x6fc == 0) { + cLib_chaseF(&speed.y, 0.0f, 5.0f); + } + + cLib_addCalcAngleS(&field_0x6ea, 0, 8, 0x1000, 0x10); + + if (!field_0x6d8) { + player->offWolfEnemyHangBite(); + setActionMode(1, 1); + break; + } + + player->setWolfEnemyHangBiteAngle(shape_angle.y - 0x8000); + + if (checkWolfBiteDamage()) { + dComIfGp_getVibration().StartShock(3, 31, cXyz(0.0f, 1.0f, 0.0f)); + offWolfBiteDamage(); + field_0x6f0++; + + if (field_0x6f0 >= 5) { + field_0x6ec++; + player->offWolfEnemyHangBite(); + mSound.startCollisionSE(Z2SE_HIT_WOLFBITE, 0x20); + mSound.startCreatureVoice(Z2SE_EN_YB_V_DAMAGE, -1); + + if (field_0x6ec >= 3) { + setActionMode(8, 0); + break; + } + + mMode = 5; + break; + } + + setBck(BCK_YB_DAMAGE, 0, 3.0f, 1.0f); + mSound.startCreatureVoice(Z2SE_EN_YB_V_DAMAGE, -1); + speed.y = 20.0f; + mSound.startCollisionSE(Z2SE_HIT_WOLFBITE, 30); + mSound.startCreatureSound(Z2SE_EN_YB_SHIRU, 0, -1); + } else { + if (field_0x720 == 22) { + setDamageEffect(1); + } else { + setDamageEffect(0); + } + } + + if (player->checkWolfEnemyHangBiteOwn(this)) { + break; + } + + setActionMode(1, 1); + break; + + case 5: + mMode = 6; + initDownToWater(); + // fallthrough + case 6: + calcDownToWater(); + + if (current.pos.y < field_0x6cc && field_0x714 == 0) { + mSound.startCreatureSound(Z2SE_EN_YB_SPLASH, 0, -1); + field_0x714 = 1; + } + + if (current.pos.y < field_0x6cc - 1000.0f) { + if (speed.y < -20.0f) { + speed.y = -20.0f; + } + + mMode = 7; + field_0x6fc = 10; + } + break; + + case 7: + if (mpModelMorf->isStop()) { + setBck(BCK_YB_DROP, 2, 3.0f, 1.0f); + } + + cLib_addCalcAngleS(&field_0x6ea, -0x8000, 8, 0x1000, 0x10); + cLib_chaseF(&speedF, 0.0f, 1.0f); + cLib_chaseF(&speed.y, -10.0f, 5.0f); + + if (field_0x6fc != 0) { + break; + } + + setActionMode(5, 0); + break; + } +} + +/* 8081C4EC-8081C7D0 0064CC 02E4+00 1/1 0/0 0/0 .text setMidnaBindInit__9daE_YMB_cFP4cXyz */ +void daE_YMB_c::setMidnaBindInit(cXyz* i_pos) { + cXyz i_scale(1.0f, 1.0f, 1.0f); + csXyz angle; + cXyz sp30; + MtxP mtx = mDoMtx_stack_c::get(); + daMidna_c* midna = daPy_py_c::getMidnaActor(); + MtxP mtxHairTop = midna->getMtxHairTop(); + + MTXCopy(mtxHairTop, mtx); + mDoMtx_stack_c::multVecZero(&sp30); + cXyz sp3c = sp30 - *i_pos; + angle.y = cM_atan2s(sp3c.x, sp3c.z); + angle.x = -cM_atan2s(sp3c.y, JMAFastSqrt(sp3c.x * sp3c.x + sp3c.z * sp3c.z)); + angle.z = 0; + + static GXColor e_prim = {0xFF, 0x64, 0x78, 0x00}; + static GXColor e_env = {0x3C, 0x1E, 0x1E, 0x00}; + JPABaseEmitter* emitter = dComIfGp_particle_set(0x29B, i_pos, &tevStr, &angle, &i_scale, 0xFF, NULL, fopAcM_GetRoomNo(this), &e_prim, &e_env, NULL); + if (emitter != NULL) { + emitter->setGlobalParticleHeightScale(0.01f * sp3c.abs()); + } + + dComIfGp_particle_set(0x29C, i_pos, &tevStr, &shape_angle, &i_scale, 0xFF, NULL, fopAcM_GetRoomNo(this), &e_prim, &e_env, NULL); + mSound.startCreatureSound(Z2SE_MIDNA_BIND_LOCK_ON, 0, -1); +} + +/* 8081C7D0-8081C908 0067B0 0138+00 1/1 0/0 0/0 .text setMidnaBindLevel__9daE_YMB_cFi */ +void daE_YMB_c::setMidnaBindLevel(int i_index) { + cXyz i_scale(1.0f, 1.0f, 1.0f); + cXyz i_pos; + mDoMtx_stack_c::copy(mpModelMorf->getModel()->getAnmMtx(YMB_DOWN_ATT_JNT[i_index])); + mDoMtx_stack_c::multVecZero(&i_pos); + + static GXColor e_prim = {0xFF, 0x64, 0x78, 0x00}; + static GXColor e_env = {0x3C, 0x1E, 0x1E, 0x00}; + static u16 eff_id[3] = { + ZL2_MIDONAHAIR03_1, ZL2_MIDONAHAIR03_2, ZL2_MIDONAHAIR01, + }; + int iVar1 = i_index * 3; + for (int i = 0; i < 3; i++) { + mMidnaBindParticles[iVar1 + i] = dComIfGp_particle_set(mMidnaBindParticles[iVar1 + i], eff_id[i], &i_pos, &tevStr, &shape_angle, &i_scale, 0xFF, 0, fopAcM_GetRoomNo(this), &e_prim, &e_env, NULL); + } +} + +/* 8081C908-8081CC14 0068E8 030C+00 1/1 0/0 0/0 .text setWolfLockEffect__9daE_YMB_cFv */ +void daE_YMB_c::setWolfLockEffect() { + daPy_py_c* player = daPy_getPlayerActorClass(); + cXyz i_pos; + + if (!player->checkWolfLock(this)) { + field_0x6f0 = 0; + field_0x700 = 0; + field_0x718 = 0; + } else { + int iVar1 = 0; + f32 fVar1 = 3000.0f; + f32 fVarTemp; + + if (field_0x700 == 0 && field_0x6f0 < 6) { + for (int i = 0; i < 6; i++) { + if ((field_0x718 & 1 << i) == 0) { + mDoMtx_stack_c::copy(mpModelMorf->getModel()->getAnmMtx(YMB_DOWN_ATT_JNT[i])); + mDoMtx_stack_c::multVecZero(&i_pos); + + fVarTemp = i_pos.abs(player->current.pos); + if (fVarTemp < fVar1) { + iVar1 = i; + fVar1 = fVarTemp; + } + } + } + + field_0x718 |= 1 << iVar1; + mDoMtx_stack_c::copy(mpModelMorf->getModel()->getAnmMtx(YMB_DOWN_ATT_JNT[iVar1])); + mDoMtx_stack_c::multVecZero(&i_pos); + setMidnaBindInit(&i_pos); + field_0x700 = 3; + field_0x6f0++; + } + + for (int i = 0; i < 6; i++) { + if ((field_0x718 & 1 << i) != 0) { + setMidnaBindLevel(i); + } + } + + if (field_0x718 != 0) { + mSound.startCreatureSoundLevel(Z2SE_MIDNA_BIND_LOCK_SUS, 0, -1); + } + } +} + +/* 8081CC14-8081CD00 006BF4 00EC+00 2/2 0/0 0/0 .text initDownToWater__9daE_YMB_cFv */ +void daE_YMB_c::initDownToWater() { + speed.y = 40.0f; + speedF = 40.0f; + shape_angle.y = cLib_targetAngleY(¤t.pos, &YMB_DOWN_POS[field_0x711]) + 0x8000; + current.angle.y = shape_angle.y + 0x8000; + setBck(BCK_YB_DAMAGE_DAWN, 0, 3.0f, 1.0f); + mSound.startCreatureVoice(Z2SE_EN_YB_V_DAMAGE_DOWN, -1); + field_0x6fc = (s16)((current.pos.y - field_0x6cc) / 50.0f + 16.0f); +} + +/* 8081CD00-8081CE6C 006CE0 016C+00 2/2 0/0 0/0 .text calcDownToWater__9daE_YMB_cFv */ +void daE_YMB_c::calcDownToWater() { + if (mpModelMorf->isStop()) { + setBck(BCK_YB_DROP, 2, 3.0f, 1.0f); + } + + cLib_addCalcAngleS(&field_0x6ea, -0x7800, 8, 0x1000, 0x10); + + if (field_0x6fc != 0) { + current.pos.absXZ(YMB_DOWN_POS[field_0x711]); + } + + f32 fVarTemp = current.pos.y; + cXyz sp48 = YMB_DOWN_POS[field_0x711]; + cLib_chasePosXZ(¤t.pos, sp48, 40.0f); + current.pos.y = fVarTemp; + cLib_chaseF(&speed.y, -60.0f, 5.0f); +} + +/* 8081CE6C-8081D4D8 006E4C 066C+00 1/1 0/0 0/0 .text executeDown__9daE_YMB_cFv */ +void daE_YMB_c::executeDown() { + daPy_py_c* player = daPy_getPlayerActorClass(); + + setDownWaitVoice(); + + switch (mMode) { + case 0: + mMode = 1; + initDownToWater(); + // fallthrough + case 1: + calcDownToWater(); + + if (current.pos.y < field_0x6cc - 50.0f) { + mSound.startCreatureSound(Z2SE_EN_YB_SPLASH, 0, -1); + field_0x714 = 1; + speedF = 0.0f; + mMode = 2; + mSound.startCreatureVoice(Z2SE_EN_YB_V_DOWN_WAIT, -1); + setBck(BCK_YB_DAWN_WAIT, 2, 3.0f, 1.0f); + field_0x717 = 0; + } + break; + + case 2: + if (mpBgW != NULL && !mpBgW->ChkUsed()) { + dComIfG_Bgsp().Regist(mpBgW, this); + } + + cLib_chaseF(&speed.y, 20.0f, 3.0f); + + if (current.pos.y > field_0x6cc - 50.0f) { + current.pos.y = field_0x6cc - 50.0f; + speed.y = 0.0f; + speedF = 0.0f; + mMode = 3; + field_0x6fc = l_HIO.rollover_time; + field_0x6f4 = 1; + field_0x6f0 = 0; + field_0x700 = 0; + field_0x718 = 0; + dComIfGs_onOneZoneSwitch(1, fopAcM_GetRoomNo(this)); + } + break; + + case 3: + if (field_0x724 != 0) { + field_0x716 = 1; + } else { + field_0x716 = 0; + } + + setWolfLockEffect(); + setDownHamonEffect(); + field_0x82c[0].OffCoSetBit(); + field_0x82c[1].OffCoSetBit(); + field_0x82c[0].OffTgSetBit(); + field_0x82c[1].OffTgSetBit(); + + for (int i = 0; i < 6; i++) { + field_0xbd4[i].OnCoSetBit(); + + if (field_0x680[i] != 0 || field_0x698 != 0) { + field_0xbd4[i].OffTgSetBit(); + } else { + field_0xbd4[i].OnTgSetBit(); + } + + if (player->checkWolfLock(this)) { + field_0xbd4[i].OffTgShield(); + } + } + + if (mpBgW != NULL && !mpBgW->ChkUsed()) { + dComIfG_Bgsp().Regist(mpBgW, this); + } + + cLib_addCalcAngleS(&field_0x6ea, -0x8000, 8, 0x1000, 0x10); + + if (field_0x6fc == 0 && !player->checkWolfLock(this)) { + if (mpBgW != NULL) { + dComIfG_Bgsp().Release(mpBgW); + } + + for (int i = 0; i < 6; i++) { + field_0xbd4[i].OffTgSetBit(); + field_0xbd4[i].OffCoSetBit(); + } + + setActionMode(6, 0); + field_0x6ec = 2; + field_0x716 = 0; + field_0x6f4 = 0; + field_0x717 = 1; + dComIfGs_offOneZoneSwitch(1, fopAcM_GetRoomNo(this)); + } + + if (player->getCutType() == daPy_py_c::CUT_TYPE_WOLF_LOCK) { + mMode = 4; + field_0x6fc = 0; + } + break; + + case 4: + setDownHamonEffect(); + field_0x82c[0].OffCoSetBit(); + field_0x82c[1].OffCoSetBit(); + field_0x82c[0].OffTgSetBit(); + field_0x82c[1].OffTgSetBit(); + field_0x82c[0].OffTgShield(); + field_0x82c[1].OffTgShield(); + + for (int i = 0; i < 6; i++) { + field_0xbd4[i].OffTgSetBit(); + field_0xbd4[i].OffTgShield(); + field_0xbd4[i].OffCoSetBit(); + } + + if (mpBgW != NULL && mpBgW->ChkUsed()) { + dComIfG_Bgsp().Release(mpBgW); + } + + if (field_0x6fc == 0) { + cXyz sp40; + mDoMtx_stack_c::copy(mpModelMorf->getModel()->getAnmMtx(getDownLockPoint())); + mDoMtx_stack_c::multVecZero(&sp40); + if (sp40.absXZ(player->current.pos) < 150.0f) { + setLastDamage(); + field_0x6fc = 3; + } + } + + if (player->getCutType() != daPy_py_c::CUT_TYPE_WOLF_LOCK) { + setActionMode(9, 0); + dComIfGs_offOneZoneSwitch(1, fopAcM_GetRoomNo(this)); + } + break; + } +} + +/* 8081D4D8-8081D594 0074B8 00BC+00 1/1 0/0 0/0 .text setCreateDrop__9daE_YMB_cFv */ +void daE_YMB_c::setCreateDrop() { + daObjDrop_c* drop = (daObjDrop_c*)fpcM_Search(search_drop, this); + if (drop != NULL) { + cXyz sp1c; + mDoMtx_stack_c::copy(mpModelMorf->getModel()->getAnmMtx(15)); + mDoMtx_stack_c::multVecZero(&sp1c); + drop->setPos(sp1c); + drop->setAppear(); + fopAcM_OnStatus(drop, fopAcM_STATUS_UNK_004000); + } + + field_0x721 = 1; +} + +/* 8081D594-8081DBD0 007574 063C+00 1/1 0/0 0/0 .text executeDeath__9daE_YMB_cFv */ +void daE_YMB_c::executeDeath() { + camera_class* camera = dComIfGp_getCamera(dComIfGp_getPlayerCameraID(0)); + daPy_py_c* player = daPy_getPlayerActorClass(); + cXyz sp24, pos; + + switch (mMode) { + case 0: + setDownHamonEffect(); + if (!eventInfo.checkCommandDemoAccrpt()) { + fopAcM_orderPotentialEvent(this, 2, 0xFFFF, 0); + eventInfo.onCondition(dEvtCnd_CANDEMO_e); + return; + } + + mSound.startCreatureVoice(Z2SE_EN_YB_V_DEATH, -1); + setBck(BCK_YB_DEATH, 0, 3.0f, 1.0f); + attention_info.flags = 0; + + camera->mCamera.Stop(); + camera->mCamera.SetTrimSize(3); + + current.pos.set(-88400.0f, field_0x6cc, 39000.0f); + shape_angle.y = 0x800; + pos.set(-87900.0f, -18800.0f, 38050.0f); + player->setPlayerPosAndAngle(&pos, 0x6500, 0); + + mDoMtx_stack_c::copy(mpModelMorf->getModel()->getAnmMtx(15)); + mDoMtx_stack_c::multVecZero(&mDemoCamCenter); + field_0x760 = 0x6F00; + field_0x75c = 1800.0f; + sp24.set(0.0f, 100.0f, field_0x75c); + cLib_offsetPos(&mDemoCamEye, ¤t.pos, field_0x760, &sp24); + mDemoCamFovy = 60.0f; + camera->mCamera.Set(mDemoCamCenter, mDemoCamEye, mDemoCamFovy, 0); + field_0x6e6 = 0x6500; + field_0x762 = 40; + field_0x6fc = 270; + mMode = 2; + Z2GetAudioMgr()->setBattleBgmOff(true); + break; + + case 1: + case 2: + setDownHamonEffect(); + cLib_addCalcAngleS(&field_0x6e6, -0x1C00, 8, 0x200, 0x80); + player->setPlayerPosAndAngle(&player->current.pos, field_0x6e6, 0); + mDoMtx_stack_c::copy(mpModelMorf->getModel()->getAnmMtx(15)); + mDoMtx_stack_c::multVecZero(&mDemoCamCenter); + + if (field_0x6fc == 0) { + cLib_chaseAngleS(&field_0x762, 0, 4); + } + + field_0x760 += field_0x762; + cLib_chaseF(&field_0x75c, 1300.0f, 5.0f); + sp24.set(0.0f, 100.0f, field_0x75c); + cLib_offsetPos(&mDemoCamEye, ¤t.pos, field_0x760, &sp24); + mDemoCamFovy = 60.0f; + + if (mMode == 2) { + if (mpModelMorf->checkFrame(263.0f)) { + setWaterEffect1(); + mSound.startCreatureSound(Z2SE_EN_YB_SPLASH, 0, -1); + } + + if (mpModelMorf->checkFrame(280.0f)) { + mMode = 3; + field_0x6fc = 60; + mDemoCamCenter = current.pos; + mDemoCamEye.set(-87893.0f, -18731.0f, 37578.0f); + field_0x75c = 30.0f; + } + } + + camera->mCamera.Set(mDemoCamCenter, mDemoCamEye, mDemoCamFovy, 0); + break; + + case 3: + setDownHamonEffect(); + current.pos.y -= 2.0f; + cLib_chaseF(&field_0x6e0, -100.0f, 2.0f); + + if ( ((field_0x6fc == 0) & mpModelMorf->isStop()) != 0) { + field_0x710 = 1; + mMode = 4; + field_0x6fc = 90; + setCreateDrop(); + setDeathEffect(); + } + break; + + case 4: + cLib_chaseF(&field_0x75c, -5.0f, 1.0f); + mDemoCamCenter.y += field_0x75c; + + camera->mCamera.Set(mDemoCamCenter, mDemoCamEye, mDemoCamFovy, 0); + + if (field_0x6fc == 0) { + if (mSwitchBit != 0xFF && !dComIfGs_isSwitch(mSwitchBit, fopAcM_GetRoomNo(this))) { + dComIfGs_onSwitch(mSwitchBit, fopAcM_GetRoomNo(this)); + } + + camera->mCamera.Reset(mDemoCamCenter, mDemoCamEye); + camera->mCamera.Start(); + camera->mCamera.SetTrimSize(0); + dComIfGp_event_reset(); + dComIfGs_offSwitch(5, fopAcM_GetRoomNo(this)); + dComIfGs_offOneZoneSwitch(15, fopAcM_GetRoomNo(this)); + fopAcM_delete(this); + } + break; + } +} + +/* 8081DBD0-8081DDE0 007BB0 0210+00 1/1 0/0 0/0 .text demo_skip__9daE_YMB_cFi */ +void daE_YMB_c::demo_skip(int param_1) { + switch (param_1) { + case 0: + setActionMode(11, 0); + Z2GetAudioMgr()->setBattleBgmOff(true); + break; + + case 1: + dComIfGp_getVibration().StopQuake(31); + setActionMode(1, 1); + Z2GetAudioMgr()->subBgmStop(); + Z2GetAudioMgr()->setBattleBgmOff(false); + Z2GetAudioMgr()->setForceBattleArea(true, 3000, 4000, 6000); + current.pos.y = field_0x69c.y; + speedF = 0.0f; + speed.y = 0.0f; + shape_angle.y = cLib_targetAngleY(¤t.pos, &daPy_getPlayerActorClass()->current.pos); + break; + + case 3: + dComIfGp_getVibration().StopQuake(31); + // fallthrough + case 2: + attention_info.flags &= 0xFFBFFFFF; + setActionMode(1, 1); + field_0x764 = 1; + speedF = 0.0f; + speed.y = 0.0f; + shape_angle.y = cLib_targetAngleY(¤t.pos, &daPy_getPlayerActorClass()->current.pos); + break; + } + + camera_class* camera = dComIfGp_getCamera(dComIfGp_getPlayerCameraID(0)); + camera->mCamera.Reset(mDemoCamCenter, mDemoCamEye); + camera->mCamera.Start(); + camera->mCamera.SetTrimSize(0); + dComIfGp_event_reset(); +} + +/* 8081DDE0-8081DE14 007DC0 0034+00 3/3 0/0 0/0 .text DemoSkipCallBack__9daE_YMB_cFPvi */ +int daE_YMB_c::DemoSkipCallBack(void* i_this, int param_2) { + if (i_this) { + static_cast(i_this)->demo_skip(param_2); + return 1; + } + + return 0; +} + +/* 8081DE14-8081DE84 007DF4 0070+00 1/1 0/0 0/0 .text calcLakeDemoPlayerPos__9daE_YMB_cFv */ +void daE_YMB_c::calcLakeDemoPlayerPos() { + cXyz sp1c(field_0x69c.x, 0.0f, field_0x69c.z); + cXyz sp28(0.0f, field_0x6cc + field_0x75c, 2000.0f); + cLib_offsetPos(¤t.pos, &sp1c, field_0x6e4, &sp28); +} + +/* 8081DE84-8081E5B4 007E64 0730+00 1/1 0/0 0/0 .text executeLakeDemo__9daE_YMB_cFv */ +void daE_YMB_c::executeLakeDemo() { + camera_class* camera = dComIfGp_getCamera(dComIfGp_getPlayerCameraID(0)); + daPy_py_c* player = daPy_getPlayerActorClass(); + cXyz sp24; + + switch (mMode) { + case 0: + field_0x710 = 1; + field_0x82c[0].OffTgSetBit(); + field_0x82c[1].OffTgSetBit(); + field_0xa9c.OffTgSetBit(); + + if (!dComIfGs_isEventBit(dSv_event_flag_c::saveBitLabels[9])) { + return; + } + + if (dComIfGs_isSaveSwitch(17)) { + field_0x710 = 0; + setActionMode(1, 1); + field_0x764 = 1; + Z2GetAudioMgr()->setBattleBgmOff(false); + Z2GetAudioMgr()->setForceBattleArea(true, 3000, 4000, 6000); + field_0x765 = 1; + return; + } + + if (dComIfGs_isSaveSwitch(16)) { + field_0x710 = 0; + setActionMode(1, 1); + Z2GetAudioMgr()->setBattleBgmOff(false); + Z2GetAudioMgr()->setForceBattleArea(true, 3000, 4000, 6000); + return; + } + + if (dComIfGs_isSaveSwitch(15)) { + field_0x710 = 0; + setActionMode(11, 0); + Z2GetAudioMgr()->setBattleBgmOff(true); + return; + } + + field_0x6f0 = 0; + mMode = 1; + field_0x715 = 1; + field_0x75c = -300.0f; + field_0x6c4 = 0.0f; + break; + + case 1: + if (!eventInfo.checkCommandDemoAccrpt()) { + fopAcM_orderPotentialEvent(this, 2, 0xFFFF, 0); + eventInfo.onCondition(dEvtCnd_CANDEMO_e); + return; + } + + camera->mCamera.Stop(); + camera->mCamera.SetTrimSize(3); + mDemoCamCenter.set(-81000.0f, -17000.0f, 33000.0f); + mDemoCamFovy = 50.0f; + field_0x760 = 0x7000; + field_0x762 = -0x30; + sp24.set(0.0f, 0.0f, 1000.0f); + cLib_offsetPos(&mDemoCamEye, &mDemoCamCenter, field_0x760, &sp24); + mMode = 2; + field_0x6e4 = 0x7FFF; + field_0x710 = 0; + dComIfGs_onSaveSwitch(15); + dComIfGs_onEventBit(dSv_event_flag_c::saveBitLabels[0x77]); + break; + + case 2: + dComIfGp_getEvent().setSkipProc(this, DemoSkipCallBack, 0); + field_0x760 += field_0x762; + mDemoCamCenter.set(-81000.0f, -17000.0f, 33000.0f); + sp24.set(0.0f, 0.0f, 1000.0f); + cLib_offsetPos(&mDemoCamEye, &mDemoCamCenter, field_0x760, &sp24); + mDemoCamFovy = 50.0f; + + if (field_0x760 < 0x6800) { + cLib_chaseF(&field_0x75c, 300.0f, 10.0f); + } + + if (field_0x760 < 0x6000) { + mMode = 3; + field_0x6fc = 90; + } + break; + + case 3: + dComIfGp_getEvent().setSkipProc(this, DemoSkipCallBack, 0); + cLib_chaseF(&field_0x75c, 300.0f, 10.0f); + cLib_chaseAngleS(&field_0x762, 0, 0x10); + field_0x760 += field_0x762; + sp24.set(0.0f, 0.0f, 1000.0f); + cLib_offsetPos(&mDemoCamEye, &mDemoCamCenter, field_0x760, &sp24); + cLib_chasePos(&mDemoCamCenter, current.pos, 40.0f); + cLib_chasePos(&mDemoCamEye, current.pos, 40.0f); + mDemoCamFovy = 50.0f; + + if (field_0x6fc == 0) { + field_0x6e4 = 0; + calcLakeDemoPlayerPos(); + mDemoCamCenter = current.pos; + sp24.set(0.0f, -700.0f, 3000.0f); + cLib_offsetPos(&mDemoCamEye, &field_0x69c, 0x6000, &sp24); + mDemoCamFovy = 50.0f; + mMode = 5; + field_0x6fc = 70; + field_0x700 = 170; + } + break; + + case 5: + dComIfGp_getEvent().setSkipProc(this, DemoSkipCallBack, 0); + + if (field_0x6fc != 0) { + cXyz sp30(mDemoCamCenter); + mDemoCamCenter = current.pos; + sp24.set(0.0f, -700.0f, 3500.0f); + cLib_offsetPos(&mDemoCamEye, &field_0x69c, 0x6000, &sp24); + mDemoCamFovy = 50.0f; + field_0x740 = mDemoCamCenter - sp30; + } else { + field_0x6f0 = 1; + mDemoCamCenter += field_0x740; + cLib_chasePos(&field_0x740, cXyz(0.0f, 0.0f, 0.0f), 5.0f); + cLib_chaseF(&field_0x75c, 0.0f, 5.0f); + } + + if (field_0x700 == 0) { + camera->mCamera.Start(); + camera->mCamera.SetTrimSize(0); + dComIfGp_event_reset(); + Z2GetAudioMgr()->setBattleBgmOff(true); + setActionMode(11, 0); + return; + } + break; + } + + camera->mCamera.Set(mDemoCamCenter, mDemoCamEye, mDemoCamFovy, 0); + + if (field_0x6f0 == 0) { + if (field_0x75c >= 200.0f) { + mSound.startCreatureSoundLevel(Z2SE_EN_YB_MOVE_ONWATER, 0, -1); + setWaterEffect2(); + } + + setElecEffect2(); + field_0x6a8 = current.pos; + field_0x6e8 = -0x300; + field_0x6e4 += field_0x6e8; + calcLakeDemoPlayerPos(); + speed.y = 0.0f; + speedF = 0.0f; + shape_angle.y = cLib_targetAngleY(&field_0x6a8, ¤t.pos); + } +} + +/* 8081E5B4-8081F140 008594 0B8C+00 2/1 0/0 0/0 .text executeStartDemo__9daE_YMB_cFv */ +void daE_YMB_c::executeStartDemo() { + camera_class* camera = dComIfGp_getCamera(dComIfGp_getPlayerCameraID(0)); + daPy_py_c* player = daPy_getPlayerActorClass(); + cXyz sp28, sp34; + + switch (mMode) { + case 0: + field_0x710 = 1; + if (player->current.pos.absXZ(field_0x69c) > 2500.0f) { + return; + } + + if (dComIfGp_checkPlayerStatus0(0, 0x100000) || dComIfGp_checkPlayerStatus0(0, 0x100)) { + return; + } + + mMode = 1; + break; + + case 1: + if (!eventInfo.checkCommandDemoAccrpt()) { + fopAcM_orderPotentialEvent(this, 2, 0xFFFF, 0); + eventInfo.onCondition(dEvtCnd_CANDEMO_e); + return; + } + + camera->mCamera.Stop(); + camera->mCamera.SetTrimSize(3); + sp34.set(-89100.0f, -18800.0f, 39410.0f); + player->setPlayerPosAndAngle(&sp34, 0x5400, 0); + player->changeDemoMode(4, 1, 0, 0); + speed.y = 0.0f; + speedF = 0.0f; + current.pos.set(-88463.0f, field_0x6cc - 1500.0f, 38868.0f); + field_0x715 = 1; + field_0x710 = 0; + mDemoCamCenter.set(-88660.0f, -18918.0f, 38981.0f); + mDemoCamEye.set(-89144.0f, -18551.0f, 39753.0f); + mDemoCamFovy = 50.0f; + mMode = 2; + field_0x6fc = 60; + field_0x75c = mDemoCamEye.absXZ(current.pos); + field_0x760 = cLib_targetAngleY(¤t.pos, &mDemoCamEye); + dComIfGs_onSaveSwitch(16); + Z2GetAudioMgr()->subBgmStart(Z2BGM_YAMIMUSHI_B_D01); + break; + + case 2: + dComIfGp_getEvent().setSkipProc(this, DemoSkipCallBack, 1); + setBoilEffect(0); + sp34.set(-89100.0f, player->current.pos.y, 39410.0f); + player->setPlayerPosAndAngle(&sp34, 0x5400, 0); + + if (field_0x6fc == 0) { + player->changeOriginalDemo(); + player->changeDemoMode(0x17, 0, 0, 0); + mMode = 3; + field_0x6fc = 360; + field_0x762 = 16; + u8 uVar1[6] = {0, 32, 1, 0, 32, 4}; + dComIfGp_getVibration().StartQuake(uVar1, 1, 1, cXyz(0.0f, 1.0f, 0.0f)); + } + break; + + case 3: + dComIfGp_getEvent().setSkipProc(this, DemoSkipCallBack, 1); + setBoilEffect(0); + sp34.set(current.pos.x, field_0x6cc - 120.0f, current.pos.z); + cLib_chasePos(&mDemoCamCenter, sp34, 1.5f); + sp34.set(-88800.0f, -18266.0f, 39412.0f); + cLib_chasePos(&mDemoCamEye, sp34, 1.7f); + cLib_chaseF(¤t.pos.y, field_0x6cc - 300.0f, 2.2f); + setElecEffect2(); + + if (field_0x6fc == 0) { + mMode = 4; + field_0x6fc = 120; + } + break; + + case 4: + dComIfGp_getEvent().setSkipProc(this, DemoSkipCallBack, 1); + + if (field_0x6fc >= 95) { + setBoilEffect(1); + + if (field_0x6fc == 95) { + dComIfGp_getVibration().StopQuake(31); + } + } + + sp34.set(current.pos.x, field_0x6cc - 120.0f, current.pos.z); + cLib_chasePos(&mDemoCamCenter, sp34, 1.5f); + sp34.set(-88800.0f, -18266.0f, 39412.0f); + cLib_chasePos(&mDemoCamEye, sp34, 1.7f); + cLib_chaseF(¤t.pos.y, field_0x6cc - 300.0f, 2.2f); + + if (field_0x6fc == 0) { + shape_angle.y = fopAcM_searchPlayerAngleY(this); + mMode = 8; + speed.y = 80.0f; + field_0x6fc = 15; + setBck(BCK_YB_RISE, 2, 0.0f, 1.0f); + field_0x6f0 = 0; + } + break; + + case 8: + dComIfGp_getEvent().setSkipProc(this, DemoSkipCallBack, 1); + + if (field_0x6f0 == 0) { + if (current.pos.y >= field_0x6cc) { + setWaterEffect1(); + mSound.startCreatureSound(Z2SE_EN_YB_SPLASH, 0, -1); + field_0x6f0 = 1; + dComIfGp_getVibration().StartShock(6, 31, cXyz(0.0f, 1.0f, 0.0f)); + } + } else { + mSound.startCreatureSoundLevel(Z2SE_EN_YB_FLY, 0, -1); + } + + mDemoCamCenter.set(current.pos.x, current.pos.y - 200.0f, current.pos.z); + + if (mDemoCamCenter.y < field_0x6cc - 120.0f) { + mDemoCamCenter.y = field_0x6cc - 120.0f; + } + + sp34.set(-89000.0f, -18583.0f, 39350.0f); + cLib_chasePos(&mDemoCamEye, sp34, 10.0f); + setElecEffect2(); + + if (field_0x6fc == 0) { + cLib_chaseF(&speed.y, -30.0f, 3.0f); + if (speed.y <= 24.0f) { + setBck(BCK_YB_SIM_TO_FLY, 0, 3.0f, 1.0f); + mMode = 9; + } + } + break; + + case 9: + dComIfGp_getEvent().setSkipProc(this, DemoSkipCallBack, 1); + mSound.startCreatureSoundLevel(Z2SE_EN_YB_FLY, 0, -1); + sp34.set(-89000.0f, -18583.0f, 39350.0f); + cLib_chasePos(&mDemoCamEye, sp34, 10.0f); + mDemoCamCenter.set(current.pos.x, current.pos.y - 200.0f, current.pos.z); + setElecEffect2(); + + if (cLib_chaseF(&speed.y, -30.0f, 3.0f) != 0) { + field_0x6fc = 10; + mMode = 10; + } + break; + + case 10: + dComIfGp_getEvent().setSkipProc(this, DemoSkipCallBack, 1); + mSound.startCreatureSoundLevel(Z2SE_EN_YB_FLY, 0, -1); + sp34.set(-89260.0f, -18650.0f, 39500.0f); + cLib_chasePos(&mDemoCamEye, sp34, 10.0f); + mDemoCamCenter.set(current.pos.x, current.pos.y - 200.0f, current.pos.z); + setElecEffect2(); + + if (field_0x6fc == 0 && cLib_chaseF(&speed.y, 0.0f, 3.0f) != 0 && mpModelMorf->isStop()) { + mMode = 11; + field_0x6fc = 30; + } + break; + + case 11: + dComIfGp_getEvent().setSkipProc(this, DemoSkipCallBack, 1); + mSound.startCreatureSoundLevel(Z2SE_EN_YB_FLY, 0, -1); + setElecEffect2(); + + if (field_0x6fc == 0) { + camera->mCamera.Reset(mDemoCamCenter, mDemoCamEye); + camera->mCamera.Start(); + camera->mCamera.SetTrimSize(0); + dComIfGp_event_reset(); + setActionMode(1, 1); + Z2GetAudioMgr()->setBattleBgmOff(false); + Z2GetAudioMgr()->setForceBattleArea(true, 3000, 4000, 6000); + return; + } + break; + } + + camera->mCamera.Set(mDemoCamCenter, mDemoCamEye, mDemoCamFovy, 0); +} + +/* 8081F140-8081F2E0 009120 01A0+00 1/1 0/0 0/0 .text checkStartBattleDemo__9daE_YMB_cFv */ +bool daE_YMB_c::checkStartBattleDemo() { + if (field_0x764 == 0 && daPy_getPlayerActorClass()->checkNowWolfEyeUp()) { + if (daPy_getPlayerActorClass()->current.pos.absXZ(field_0x69c) < 2500.0f) { + setActionMode(12, 0); + return true; + } + } + + return false; +} + +/* 8081F2E0-8081FAC8 0092C0 07E8+00 1/1 0/0 0/0 .text executeBattleDemo__9daE_YMB_cFv */ +void daE_YMB_c::executeBattleDemo() { + camera_class* camera = dComIfGp_getCamera(dComIfGp_getPlayerCameraID(0)); + daPy_py_c* player = daPy_getPlayerActorClass(); + cXyz sp1c(player->current.pos); + cXyz sp28, sp34; + s16 sVar1; + + mSound.startCreatureSoundLevel(Z2SE_EN_YB_FLY, 0, -1); + setFlyWaitVoice(); + + switch (mMode) { + case 0: + mMode = 1; + attention_info.flags |= 0x400000; + // fallthrough + case 1: + if (!eventInfo.checkCommandDemoAccrpt()) { + fopAcM_orderPotentialEvent(this, 2, 0xFFFF, 0); + eventInfo.onCondition(dEvtCnd_CANDEMO_e); + return; + } + + dComIfGp_event_setTalkPartner(this); + camera->mCamera.Stop(); + camera->mCamera.SetTrimSize(3); + mDemoCamCenter = camera->mCamera.Center(); + mDemoCamEye = camera->mCamera.Eye(); + mDemoCamFovy = camera->mCamera.Fovy(); + player->setPlayerPosAndAngle(&sp1c, fopCamM_GetAngleY(camera), 0); + sp28.set(0.0f, 1000.0f, 2000.0f); + cLib_offsetPos(¤t.pos, &sp1c, fopCamM_GetAngleY(camera), &sp28); + shape_angle.y = fopAcM_searchPlayerAngleY(this); + speedF = 0.0f; + speed.y = 0.0f; + setBck(BCK_YB_CRY, 0, 3.0f, 1.0f); + mSound.startCreatureSound(Z2SE_EN_YB_V_CRY, 0, -1); + mMode = 2; + dComIfGp_getVibration().StartQuake(8, 31, cXyz(0.0f, 1.0f, 0.0f)); + dComIfGs_onSaveSwitch(17); + field_0x765 = 1; + break; + + case 2: + dComIfGp_getEvent().setSkipProc(this, DemoSkipCallBack, 3); + + if (mpModelMorf->checkFrame(30.0f)) { + dComIfGp_getVibration().StopQuake(31); + } + + sp34.set(current.pos.x, current.pos.y - 70.0f, current.pos.z); + cLib_chasePos(&mDemoCamCenter, sp34, 200.0f); + sp28.set(0.0f, -200.0f, 500.0f); + cLib_offsetPos(&sp34, ¤t.pos, shape_angle.y, &sp28); + cLib_chasePos(&mDemoCamEye, sp34, 150.0f); + cLib_chaseF(&mDemoCamFovy, 50.0f, 2.0f); + + if (mpModelMorf->isStop()) { + speed.y = 0.0f; + speedF = 0.0f; + field_0x6c8 = 0.0f; + field_0x74c.set(current.pos.x, field_0x69c.y, current.pos.z); + field_0x760 = shape_angle.y; + field_0x6f0 = 0; + setBck(BCK_YB_FLY_WAIT, 2, 5.0f, 1.0f); + mMode = 3; + } + break; + + case 3: + sp28.set(0.0f, 0.0f, 600.0f); + + if (field_0x6f0 != 1) { + sVar1 = field_0x760 + 0x5800; + } else { + sVar1 = field_0x760 - 0x5800; + } + + cLib_offsetPos(&field_0x6a8, ¤t.pos, sVar1, &sp28); + field_0x6a8.y = field_0x69c.y; + mMode = 4; + field_0x6f0++; + field_0x6fc = 110; + // fallthrough + case 4: + case 5: + dComIfGp_getEvent().setSkipProc(this, DemoSkipCallBack, 2); + cLib_chaseF(&mDemoCamCenter.y, current.pos.y - 200.0f, 3.0f); + sp34.set(current.pos.x, mDemoCamCenter.y, current.pos.z); + cLib_chasePosXZ(&mDemoCamCenter, sp34, 5.0f); + cLib_chaseF(&mDemoCamEye.y, current.pos.y - 500.0f, 1.0f); + current.angle.y = cLib_targetAngleY(¤t.pos, &field_0x6a8); + current.angle.x = cLib_targetAngleX(¤t.pos, &field_0x6a8); + cLib_chaseF(&speedF, field_0x6c8 * std::abs(cM_scos(current.angle.x)), 1.0f); + cLib_chaseAngleS(&shape_angle.y, cLib_targetAngleY(¤t.pos, &sp1c), 0x400); + cLib_chaseF(&speed.y, field_0x6c8 * cM_ssin(current.angle.x), 1.0f); + + if (mMode == 4) { + cLib_chaseF(&field_0x6c8, l_HIO.fly_movement_speed, 1.0f); + } else { + cLib_chaseF(&field_0x6c8, 0.0f, 1.0f); + } + + setBodyAngle(); + + if (mMode == 4) { + if (field_0x6a8.absXZ(current.pos) < 200.0f) { + mMode = 5; + } + } else if (!field_0x6c8) { + if (field_0x6f0 < 2) { + mMode = 3; + } else if (field_0x6fc == 0) { + camera->mCamera.Reset(mDemoCamCenter, mDemoCamEye); + camera->mCamera.Start(); + camera->mCamera.SetTrimSize(0); + dComIfGp_event_reset(); + attention_info.flags &= 0xFFBFFFFF; + setActionMode(1, 1); + field_0x764 = 1; + } + } + break; + } + + camera->mCamera.Set(mDemoCamCenter, mDemoCamEye, mDemoCamFovy, 0); +} + +/* 8081FAC8-8081FF88 009AA8 04C0+00 2/1 0/0 0/0 .text action__9daE_YMB_cFv */ +void daE_YMB_c::action() { + daPy_py_c* player = daPy_getPlayerActorClass(); + + field_0x1324.OffAtSetBit(); + field_0x82c[0].OffAtSetBit(); + field_0x82c[1].OffAtSetBit(); + field_0x82c[0].OnCoSetBit(); + field_0x82c[1].OnCoSetBit(); + + if ((field_0x712 != 0 && player->getCutType() == daPy_py_c::CUT_TYPE_WOLF_JUMP) || !field_0x6d8) { + field_0x82c[0].OffTgShield(); + field_0x82c[1].OffTgShield(); + field_0xa9c.OffTgShield(); + } else { + field_0x82c[0].OnTgShield(); + field_0x82c[1].OnTgShield(); + field_0xa9c.OnTgShield(); + } + + checkWaterPos(); + checkGroundPos(); + damage_check(); + setCameraSwitch(); + + if (field_0x716 == 0) { + if (player->checkWolfLock(this)) { + player->cancelWolfLock(this); + } + + onWolfNoLock(); + } else { + offWolfNoLock(); + } + + if (mAction != 5) { + attention_info.distances[2] = 24; + } else { + attention_info.distances[2] = 25; + } + + field_0x712 = 0; + field_0x71f = 0; + + switch (mAction) { + case ACTION_WAIT: + executeWait(); + break; + + case ACTION_FLY: + executeFly(); + break; + + case ACTION_FLY_ATTACK: + executeFlyAttack(); + break; + + case ACTION_RUN_AWAY: + executeRunAway(); + break; + + case ACTION_GUARD: + executeGuard(); + break; + + case ACTION_SWIM: + executeSwim(); + break; + + case ACTION_WATER_JUMP: + executeWaterJump(); + break; + + case ACTION_DAMAGE: + executeDamage(); + break; + + case ACTION_DOWN: + executeDown(); + break; + + case ACTION_DEATH: + executeDeath(); + break; + + case ACTION_LAKE_DEMO: + executeLakeDemo(); + break; + + case ACTION_START_DEMO: + executeStartDemo(); + break; + + case ACTION_BATTLE_DEMO: + executeBattleDemo(); + break; + } + + mSound.setLinkSearch(false); + fopAcM_posMoveF(this, NULL); + + if (mAction != 10 || mMode != 0) { + if (player->current.pos.absXZ(field_0x69c) < 3000.0f) { + player->onBossRoomWait(); + } + + if (mAction != 9) { + mSound.startCreatureSoundLevel(Z2SE_EN_YM_NEAR, 0, -1); + } + + if (field_0x765 != 0) { + Z2GetAudioMgr()->changeSubBgmStatus(3); + } + + f32 fVar1 = mpModelMorf->getModel()->getAnmMtx(15)[1][3] - field_0x6cc; + if (fVar1 > 0.0f) { + cLib_chaseF(&field_0x6c4, 255.0f, 10.0f); + field_0x6c1 = 0; + } else { + fVar1 = fVar1 / 40.0f + 50.0f; + + if (fVar1 < 10.0f) { + fVar1 = 10.0f; + } + + cLib_chaseF(&field_0x6c4, fVar1, 10.0f); + field_0x6c1 = 1; + } + + setFlyBlurEffect(); + } + + mpModelMorf->play(0, dComIfGp_getReverb(fopAcM_GetRoomNo(this))); + mpBrkAnm->play(); +} + +/* 8081FF88-808200A0 009F68 0118+00 1/1 0/0 0/0 .text mtx_set__9daE_YMB_cFv */ +void daE_YMB_c::mtx_set() { + mDoMtx_stack_c::transS(current.pos.x, current.pos.y, current.pos.z); + mDoMtx_stack_c::ZXYrotM(shape_angle); + mDoMtx_stack_c::scaleM(l_HIO.model_size, l_HIO.model_size, l_HIO.model_size); + mDoMtx_stack_c::transM(0.0f, 0.0f, -250.0f); + mDoMtx_stack_c::XrotM(field_0x6ea); + mDoMtx_stack_c::transM(0.0f, 0.0f, 250.0f); + mpModelMorf->getModel()->setBaseTRMtx(mDoMtx_stack_c::get()); + mpModelMorf->modelCalc(); + mDoMtx_stack_c::copy(mpModelMorf->getModel()->getAnmMtx(1)); + mDoMtx_stack_c::ZXYrotM(0, -0x4000, 0); + MTXCopy(mDoMtx_stack_c::get(), field_0x768); + + if (mpBgW != NULL) { + mpBgW->Move(); + } +} + +/* 808200A0-80820128 00A080 0088+00 3/3 0/0 0/0 .text getBellyBitePos__9daE_YMB_cFP4cXyz */ +void daE_YMB_c::getBellyBitePos(cXyz* i_pos) { + mDoMtx_stack_c::copy(mpModelMorf->getModel()->getAnmMtx(16)); + mDoMtx_stack_c::transM(80.0f, -120.0f, 0.0f); + mDoMtx_stack_c::multVecZero(i_pos); +} + +/* 80820128-808203D8 00A108 02B0+00 2/2 0/0 0/0 .text getDownLockPoint__9daE_YMB_cFv */ +int daE_YMB_c::getDownLockPoint() { + // NONMATCHING + if (field_0x6f4 >= 7) { + return 1; + } + + daPy_py_c* player = daPy_getPlayerActorClass(); + cXyz sp54; + int uVar1 = field_0x6f4 - 1; + int var_r26 = 0; + f32 fVar1 = 3000.0f; + s16 sVar1 = 0x4000; + f32 fVar2; + + if (player->getCutType() != daPy_py_c::CUT_TYPE_WOLF_LOCK && field_0x718 == 0) { + for (int i = 0; i < 6; i++) { + mDoMtx_stack_c::copy(mpModelMorf->getModel()->getAnmMtx(YMB_DOWN_ATT_JNT[i])); + mDoMtx_stack_c::multVecZero(&sp54); + fVar2 = sp54.abs(player->current.pos); + + if (fVar2 < fVar1 || fVar2 < 300.0f) { + fVar1 = fVar2; + if (fVar1 < 500.0f) { + fVar1 = 500.0f; + s16 spd_0x8 = abs((s16)(cLib_targetAngleY(&player->current.pos, &sp54) - player->shape_angle.y)); + if (spd_0x8 >= sVar1) { + continue; + } + + sVar1 = spd_0x8; + var_r26 = i; + } else { + var_r26 = i; + } + } + } + + if (dComIfGp_getAttention()->LockonTruth()) { + if (dComIfGp_getAttention()->LockonTarget(0) == this) { + var_r26 = field_0x725; + } + } + + field_0x725 = var_r26; + uVar1 = var_r26; + } + + if (uVar1 >= 6) { + uVar1 = 5; + } + + return YMB_DOWN_ATT_JNT[uVar1]; +} + +/* 808203D8-80820668 00A3B8 0290+00 1/1 0/0 0/0 .text setAttentionPos__9daE_YMB_cFv */ +void daE_YMB_c::setAttentionPos() { + cXyz sp2c; + cXyz sp38(daPy_getPlayerActorClass()->current.pos); + J3DModel* model = mpModelMorf->getModel(); + + if (getMaxLockAttack() <= field_0x6f4) { + attention_info.flags = 0; + } + + if (field_0x6f4 == 0) { + mDoMtx_stack_c::copy(model->getAnmMtx(1)); + + if (daPy_getPlayerActorClass()->getCutType() == daPy_py_c::CUT_TYPE_WOLF_JUMP || mAction == 7) { + mDoMtx_stack_c::transM(200.0f, 50.0f, 0.0f); + } else { + mDoMtx_stack_c::transM(100.0f, 50.0f, 0.0f); + } + + mDoMtx_stack_c::multVecZero(&attention_info.position); + attention_info.position.y += 50.0f; + field_0x720 = 16; + getBellyBitePos(&sp2c); + field_0xa9c.SetC(sp2c); + field_0xa9c.SetR(100.0f); + dComIfG_Ccsp()->Set(&field_0xa9c); + eyePos = sp2c; + } else { + if (field_0x6f4 >= 7) { + mDoMtx_stack_c::copy(model->getAnmMtx(1)); + } else { + mDoMtx_stack_c::copy(model->getAnmMtx(getDownLockPoint())); + } + + mDoMtx_stack_c::multVecZero(&eyePos); + attention_info.position = eyePos; + attention_info.position.y += 50.0f; + + for (int i = 0; i < 6; i++) { + mDoMtx_stack_c::copy(model->getAnmMtx(i * 2 + 20)); + mDoMtx_stack_c::multVecZero(&sp2c); + field_0xbd4[i].SetC(sp2c); + field_0xbd4[i].SetR(50.0f); + dComIfG_Ccsp()->Set(&field_0xbd4[i]); + } + } + + setBitePos(16); +} + +/* 80820668-808207AC 00A648 0144+00 1/1 0/0 0/0 .text cc_set__9daE_YMB_cFv */ +void daE_YMB_c::cc_set() { + cXyz sp28; + J3DModel* model = mpModelMorf->getModel(); + + setAttentionPos(); + mDoMtx_stack_c::copy(model->getAnmMtx(1)); + mDoMtx_stack_c::multVecZero(&sp28); + field_0x82c[0].SetC(sp28); + field_0x82c[0].SetR(l_HIO.model_size * 180.0f); + dComIfG_Ccsp()->Set(&field_0x82c[0]); + + mDoMtx_stack_c::copy(model->getAnmMtx(15)); + mDoMtx_stack_c::multVecZero(&sp28); + field_0x82c[1].SetC(sp28); + field_0x82c[1].SetR(l_HIO.model_size * 240.0f); + dComIfG_Ccsp()->Set(&field_0x82c[1]); + + field_0x1324.SetC(sp28); + field_0x1324.SetR(l_HIO.model_size * 360.0f); + dComIfG_Ccsp()->Set(&field_0x1324); +} + +/* 808207AC-80820A18 00A78C 026C+00 1/1 0/0 0/0 .text execute__9daE_YMB_cFv */ +int daE_YMB_c::execute() { + BOOL bVar1 = FALSE; + if (mAction == 9 || ((mAction == 8 && mMode >= 3) || daPy_py_c::checkNowWolfEyeUp())) { + bVar1 = TRUE; + } + + if (bVar1) { + cLib_chaseF(&field_0x6d8, 255.0f, 8.0f); + cLib_chaseF(&field_0x6dc, 150.0f, 6.0f); + } else { + cLib_chaseF(&field_0x6d8, 0.0f, 20.0f); + cLib_chaseF(&field_0x6dc, 0.0f, 15.0f); + } + + if (dComIfGp_event_runCheck() && !eventInfo.checkCommandDemoAccrpt()) { + return 1; + } + + if (field_0x6fc != 0) { + field_0x6fc--; + } + + if (field_0x700 != 0) { + field_0x700--; + } + + if (field_0x6f8 != 0) { + field_0x6f8--; + } + + if (field_0x704 != 0) { + field_0x704--; + } + + if (field_0x708 != 0) { + field_0x708--; + } + + if (field_0x70c != 0) { + field_0x70c--; + } + + if (field_0x723 != 0) { + field_0x723--; + if (field_0x723 == 0) { + field_0x722 = 0; + } + } + + for (int i = 0; i < 6; i++) { + if (field_0x680[i] != 0) { + field_0x680[i]--; + cLib_addCalc(&field_0x668[i], 1.0f, 0.5f, 0.3f, 0.01f); + } else { + cLib_addCalc(&field_0x668[i], 0.0f, 0.5f, 0.3f, 0.01f); + } + } + + if (field_0x698 != 0) { + field_0x698--; + } + + if (field_0x724 != 0) { + field_0x724--; + } + + if (field_0x764 == 0 || !field_0x6d8 || mAction == 9) { + attention_info.flags &= 0xfffffffb; + } else { + attention_info.flags |= 4; + } + + action(); + mtx_set(); + cc_set(); + + return 1; +} + +/* 80820A18-80820A38 00A9F8 0020+00 2/1 0/0 0/0 .text daE_YMB_Execute__FP9daE_YMB_c */ +static int daE_YMB_Execute(daE_YMB_c* i_this) { + return i_this->execute(); +} + +/* 80820A38-80820A40 00AA18 0008+00 1/0 0/0 0/0 .text daE_YMB_IsDelete__FP9daE_YMB_c */ +static int daE_YMB_IsDelete(daE_YMB_c* i_this) { + return 1; +} + +/* 80820A40-80820AD0 00AA20 0090+00 1/1 0/0 0/0 .text _delete__9daE_YMB_cFv */ +int daE_YMB_c::_delete() { + dComIfG_resDelete(&mPhase, "E_YB"); + + if (field_0x1520 != 0) { + l_initHIO = 0; + } + + if (heap != NULL) { + mSound.deleteObject(); + } + + if (mpBgW != NULL) { + dComIfG_Bgsp().Release(mpBgW); + } + + return 1; +} + +/* 80820AD0-80820AF0 00AAB0 0020+00 1/0 0/0 0/0 .text daE_YMB_Delete__FP9daE_YMB_c */ +static int daE_YMB_Delete(daE_YMB_c* i_this) { + return i_this->_delete(); +} + +/* 80820AF0-80820D68 00AAD0 0278+00 1/1 0/0 0/0 .text CreateHeap__9daE_YMB_cFv */ +int daE_YMB_c::CreateHeap() { + J3DModelData* modelData = (J3DModelData*)dComIfG_getObjectRes("E_YB", BMDR_YB_TW); + JUT_ASSERT(4196, modelData != 0); + mpModelMorf = new mDoExt_McaMorfSO(modelData, NULL, NULL, (J3DAnmTransform*)dComIfG_getObjectRes("E_YB", BCK_YB_FLY_WAIT), + 2, 1.0f, 0, -1, &mSound, 0x80000, 0x31000084); + if (mpModelMorf == NULL || mpModelMorf->getModel() == NULL) { + return 0; + } + + if (mInvisModel.create(mpModelMorf->getModel(), 1) == 0) { + return 0; + } + + J3DModel* model = mpModelMorf->getModel(); + model->setUserArea((u32)this); + for (u16 i = 1; i < model->getModelData()->getJointNum(); i++) { + model->getModelData()->getJointNodePointer(i)->setCallBack(JointCallBack); + } + + mpBrkAnm = new mDoExt_brkAnm(); + if (mpBrkAnm == NULL) { + return 0; + } + + if (mpBrkAnm->init(mpModelMorf->getModel()->getModelData(), (J3DAnmTevRegKey*)dComIfG_getObjectRes("E_YB", BRK_YB_WAIT), 1, 2, 1.0f, 0, -1) == 0) { + return 0; + } + + mpBgW = new dBgW(); + if (mpBgW == NULL) { + return 0; + } + + if (mpBgW->Set((cBgD_t*)dComIfG_getObjectRes("E_YB", DZB_YB), 1, &field_0x768) == 1) { + return 0; + } + + mpBgW->SetCrrFunc(dBgS_MoveBGProc_Typical); + + return 1; +} + +/* 80820DB0-80820DD0 00AD90 0020+00 1/1 0/0 0/0 .text useHeapInit__FP10fopAc_ac_c */ +static int useHeapInit(fopAc_ac_c* a_this) { + daE_YMB_c* i_this = (daE_YMB_c*)a_this; + return i_this->CreateHeap(); +} + +/* 80820DD0-808211BC 00ADB0 03EC+00 1/1 0/0 0/0 .text create__9daE_YMB_cFv */ +cPhs__Step daE_YMB_c::create() { + fopAcM_SetupActor(this, daE_YMB_c); + + mSwitchBit = fopAcM_GetParam(this); + if (mSwitchBit != 0xFF) { + if (dComIfGs_isSwitch(mSwitchBit, fopAcM_GetRoomNo(this))) { + // E_YMB I'm not going to reset it because I've been defeated\n + OS_REPORT("E_YMB やられ後なので再セットしません\n"); + return cPhs_ERROR_e; + } + } + + cPhs__Step phase = (cPhs__Step)dComIfG_resLoad(&mPhase, "E_YB"); + if (phase == cPhs_COMPLEATE_e) { + OS_REPORT("E_YMB PARAM %x\n", fopAcM_GetParam(this)); + if (!fopAcM_entrySolidHeap(this, useHeapInit, 0x5200)) { + return cPhs_ERROR_e; + } + + if (mpBgW != NULL) { + if (dComIfG_Bgsp().Regist(mpBgW, this)) { + return cPhs_ERROR_e; + } + } + + mpBgW->SetRideCallback(rideCallBack); + + if (l_initHIO == 0) { + l_initHIO = 1; + field_0x1520 = 1; + l_HIO.field_0x4 = -1; + } + + attention_info.flags = 4; + attention_info.field_0xa = 0x50; + fopAcM_SetMtx(this, mpModelMorf->getModel()->getBaseTRMtx()); + fopAcM_SetMin(this, -400.0f, -400.0f, -400.0f); + fopAcM_SetMax(this, 400.0f, 400.0f, 400.0f); + health = 100; + field_0x560 = 100; + + mStts.Init(0xFF, 0, this); + field_0x82c[0].Set(cc_ymb_src); + field_0x82c[0].SetStts(&mStts); + field_0x82c[1].Set(cc_ymb_src); + field_0x82c[1].SetStts(&mStts); + field_0x1324.Set(cc_ymb_at_src); + field_0x1324.SetStts(&mStts); + field_0xa9c.Set(cc_ymb_eye_src); + field_0xa9c.SetStts(&mStts); + + for (int i = 0; i < 6; i++) { + field_0xbd4[i].Set(cc_ymb_tube_src); + field_0xbd4[i].SetStts(&mStts); + } + + mSound.init(¤t.pos, &eyePos, 5, 1); + mSound.setEnemyName("E_ymb"); + mAtInfo.mpSound = &mSound; + mAtInfo.mPowerType = 1; + gravity = 0.0f; + field_0x69c = home.pos; + field_0x717 = 1; + mAction = 10; + + if (mpBgW != NULL) { + dComIfG_Bgsp().Release(mpBgW); + } + + daE_YMB_Execute(this); + } + + return phase; +} + +/* 808213F8-80821418 00B3D8 0020+00 1/0 0/0 0/0 .text daE_YMB_Create__FP9daE_YMB_c */ +static int daE_YMB_Create(daE_YMB_c* i_this) { + return i_this->create(); +} + +AUDIO_INSTANCES; /* 80821D74-80821D94 -00001 0020+00 1/0 0/0 0/0 .data l_daE_YMB_Method */ static actor_method_class l_daE_YMB_Method = { - (process_method_func)daE_YMB_Create__FP9daE_YMB_c, - (process_method_func)daE_YMB_Delete__FP9daE_YMB_c, - (process_method_func)daE_YMB_Execute__FP9daE_YMB_c, - (process_method_func)daE_YMB_IsDelete__FP9daE_YMB_c, - (process_method_func)daE_YMB_Draw__FP9daE_YMB_c, + (process_method_func)daE_YMB_Create, + (process_method_func)daE_YMB_Delete, + (process_method_func)daE_YMB_Execute, + (process_method_func)daE_YMB_IsDelete, + (process_method_func)daE_YMB_Draw, }; /* 80821D94-80821DC4 -00001 0030+00 0/0 0/0 1/0 .data g_profile_E_YMB */ @@ -616,1951 +3329,3 @@ extern actor_process_profile_definition g_profile_E_YMB = { fopAc_ENEMY_e, // mActorType fopAc_CULLBOX_CUSTOM_e, // cullType }; - -/* 80821DC4-80821DD0 0002B4 000C+00 2/2 0/0 0/0 .data __vt__10cCcD_GStts */ -SECTION_DATA extern void* __vt__10cCcD_GStts[3] = { - (void*)NULL /* RTTI */, - (void*)NULL, - (void*)__dt__10cCcD_GSttsFv, -}; - -/* 80821DD0-80821DDC 0002C0 000C+00 1/1 0/0 0/0 .data __vt__10dCcD_GStts */ -SECTION_DATA extern void* __vt__10dCcD_GStts[3] = { - (void*)NULL /* RTTI */, - (void*)NULL, - (void*)__dt__10dCcD_GSttsFv, -}; - -/* 80821DDC-80821DE8 0002CC 000C+00 4/4 0/0 0/0 .data __vt__8cM3dGSph */ -SECTION_DATA extern void* __vt__8cM3dGSph[3] = { - (void*)NULL /* RTTI */, - (void*)NULL, - (void*)__dt__8cM3dGSphFv, -}; - -/* 80821DE8-80821DF4 0002D8 000C+00 4/4 0/0 0/0 .data __vt__8cM3dGAab */ -SECTION_DATA extern void* __vt__8cM3dGAab[3] = { - (void*)NULL /* RTTI */, - (void*)NULL, - (void*)__dt__8cM3dGAabFv, -}; - -/* 80821DF4-80821E00 0002E4 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, -}; - -/* 80821E00-80821E0C 0002F0 000C+00 2/2 0/0 0/0 .data __vt__13daE_YMB_HIO_c */ -SECTION_DATA extern void* __vt__13daE_YMB_HIO_c[3] = { - (void*)NULL /* RTTI */, - (void*)NULL, - (void*)__dt__13daE_YMB_HIO_cFv, -}; - -/* 8081610C-8081615C 0000EC 0050+00 1/1 0/0 0/0 .text __ct__13daE_YMB_HIO_cFv */ -daE_YMB_HIO_c::daE_YMB_HIO_c() { - // NONMATCHING -} - -/* ############################################################################################## */ -/* 808218C4-808218C8 000018 0004+00 6/37 0/0 0/0 .rodata @3910 */ -SECTION_RODATA static u8 const lit_3910[4] = { - 0x00, - 0x00, - 0x00, - 0x00, -}; -COMPILER_STRIP_GATE(0x808218C4, &lit_3910); - -/* 808218C8-808218CC 00001C 0004+00 0/2 0/0 0/0 .rodata @3911 */ -#pragma push -#pragma force_active on -SECTION_RODATA static f32 const lit_3911 = -100.0f; -COMPILER_STRIP_GATE(0x808218C8, &lit_3911); -#pragma pop - -/* 808218CC-808218D4 000020 0008+00 0/4 0/0 0/0 .rodata @3913 */ -#pragma push -#pragma force_active on -SECTION_RODATA static u8 const lit_3913[8] = { - 0x43, 0x30, 0x00, 0x00, 0x80, 0x00, 0x00, 0x00, -}; -COMPILER_STRIP_GATE(0x808218CC, &lit_3913); -#pragma pop - -/* 8081615C-808164B4 00013C 0358+00 1/1 0/0 0/0 .text ctrlJoint__9daE_YMB_cFP8J3DJointP8J3DModel - */ -void daE_YMB_c::ctrlJoint(J3DJoint* param_0, J3DModel* param_1) { - // NONMATCHING -} - -/* 808164B4-808164F0 000494 003C+00 8/8 0/0 0/1 .text __dt__4cXyzFv */ -// cXyz::~cXyz() { -extern "C" void __dt__4cXyzFv(void) { - // NONMATCHING -} - -/* 808164F0-8081653C 0004D0 004C+00 1/1 0/0 0/0 .text JointCallBack__9daE_YMB_cFP8J3DJointi */ -void daE_YMB_c::JointCallBack(J3DJoint* param_0, int param_1) { - // NONMATCHING -} - -/* 8081653C-80816554 00051C 0018+00 1/1 0/0 0/0 .text - * rideCallBack__FP4dBgWP10fopAc_ac_cP10fopAc_ac_c */ -static void rideCallBack(dBgW* param_0, fopAc_ac_c* param_1, fopAc_ac_c* param_2) { - // NONMATCHING -} - -/* ############################################################################################## */ -/* 808218D4-808218D8 000028 0004+00 0/2 0/0 0/0 .rodata @4064 */ -#pragma push -#pragma force_active on -SECTION_RODATA static f32 const lit_4064 = 255.0f; -COMPILER_STRIP_GATE(0x808218D4, &lit_4064); -#pragma pop - -/* 808218D8-808218DC 00002C 0004+00 0/8 0/0 0/0 .rodata @4065 */ -#pragma push -#pragma force_active on -SECTION_RODATA static f32 const lit_4065 = 100.0f; -COMPILER_STRIP_GATE(0x808218D8, &lit_4065); -#pragma pop - -/* 808218DC-808218E0 000030 0004+00 0/3 0/0 0/0 .rodata @4066 */ -#pragma push -#pragma force_active on -SECTION_RODATA static f32 const lit_4066 = 2500.0f; -COMPILER_STRIP_GATE(0x808218DC, &lit_4066); -#pragma pop - -/* 80816554-8081695C 000534 0408+00 1/1 0/0 0/0 .text draw__9daE_YMB_cFv */ -void daE_YMB_c::draw() { - // NONMATCHING -} - -/* 8081695C-8081697C 00093C 0020+00 1/0 0/0 0/0 .text daE_YMB_Draw__FP9daE_YMB_c */ -static void daE_YMB_Draw(daE_YMB_c* param_0) { - // NONMATCHING -} - -/* ############################################################################################## */ -/* 808218E0-808218E4 000034 0004+00 3/3 0/0 0/0 .rodata @4083 */ -SECTION_RODATA static f32 const lit_4083 = -1.0f; -COMPILER_STRIP_GATE(0x808218E0, &lit_4083); - -/* 80821B04-80821B04 000258 0000+00 0/0 0/0 0/0 .rodata @stringBase0 */ -#pragma push -#pragma force_active on -SECTION_DEAD static char const* const stringBase_80821B04 = "E_YB"; -#pragma pop - -/* 8081697C-80816A20 00095C 00A4+00 14/14 0/0 0/0 .text setBck__9daE_YMB_cFiUcff */ -void daE_YMB_c::setBck(int param_0, u8 param_1, f32 param_2, f32 param_3) { - // NONMATCHING -} - -/* 80816A20-80816A7C 000A00 005C+00 5/5 0/0 0/0 .text checkBck__9daE_YMB_cFi */ -void daE_YMB_c::checkBck(int param_0) { - // NONMATCHING -} - -/* 80816A7C-80816A88 000A5C 000C+00 15/15 0/0 0/0 .text setActionMode__9daE_YMB_cFii */ -void daE_YMB_c::setActionMode(int param_0, int param_1) { - // NONMATCHING -} - -/* ############################################################################################## */ -/* 808218E4-808218EC 000038 0004+04 0/10 0/0 0/0 .rodata @4111 */ -#pragma push -#pragma force_active on -SECTION_RODATA static f32 const lit_4111[1 + 1 /* padding */] = { - 3.0f, - /* padding */ - 0.0f, -}; -COMPILER_STRIP_GATE(0x808218E4, &lit_4111); -#pragma pop - -/* 80816A88-80816B7C 000A68 00F4+00 1/1 0/0 0/0 .text setLastDamage__9daE_YMB_cFv */ -void daE_YMB_c::setLastDamage() { - // NONMATCHING -} - -/* 80816B7C-80816E78 000B5C 02FC+00 1/1 0/0 0/0 .text damage_check__9daE_YMB_cFv */ -void daE_YMB_c::damage_check() { - // NONMATCHING -} - -/* ############################################################################################## */ -/* 808218EC-808218F4 000040 0008+00 0/14 0/0 0/0 .rodata @4268 */ -#pragma push -#pragma force_active on -SECTION_RODATA static u8 const lit_4268[8] = { - 0x3F, 0xE0, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, -}; -COMPILER_STRIP_GATE(0x808218EC, &lit_4268); -#pragma pop - -/* 808218F4-808218FC 000048 0008+00 0/14 0/0 0/0 .rodata @4269 */ -#pragma push -#pragma force_active on -SECTION_RODATA static u8 const lit_4269[8] = { - 0x40, 0x08, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, -}; -COMPILER_STRIP_GATE(0x808218F4, &lit_4269); -#pragma pop - -/* 808218FC-80821904 000050 0008+00 0/15 0/0 0/0 .rodata @4270 */ -#pragma push -#pragma force_active on -SECTION_RODATA static u8 const lit_4270[8] = { - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, -}; -COMPILER_STRIP_GATE(0x808218FC, &lit_4270); -#pragma pop - -/* 80821904-80821908 000058 0004+00 0/5 0/0 0/0 .rodata @4271 */ -#pragma push -#pragma force_active on -SECTION_RODATA static f32 const lit_4271 = 3000.0f; -COMPILER_STRIP_GATE(0x80821904, &lit_4271); -#pragma pop - -/* 80816E78-80817064 000E58 01EC+00 1/1 0/0 0/0 .text setCameraSwitch__9daE_YMB_cFv */ -void daE_YMB_c::setCameraSwitch() { - // NONMATCHING -} - -/* ############################################################################################## */ -/* 80821908-8082190C 00005C 0004+00 0/7 0/0 0/0 .rodata @4289 */ -#pragma push -#pragma force_active on -SECTION_RODATA static f32 const lit_4289 = 1000.0f; -COMPILER_STRIP_GATE(0x80821908, &lit_4289); -#pragma pop - -/* 8082190C-80821910 000060 0004+00 1/2 0/0 0/0 .rodata @4290 */ -SECTION_RODATA static f32 const lit_4290 = -1000000000.0f; -COMPILER_STRIP_GATE(0x8082190C, &lit_4290); - -/* 80821910-80821914 000064 0004+00 1/6 0/0 0/0 .rodata @4291 */ -SECTION_RODATA static f32 const lit_4291 = 200.0f; -COMPILER_STRIP_GATE(0x80821910, &lit_4291); - -/* 80821E18-80821E1C 000008 0001+03 8/8 0/0 0/0 .bss @1109 */ -static u8 lit_1109[1 + 3 /* padding */]; - -/* 80821E1C-80821E20 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 - -/* 80821E20-80821E24 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 - -/* 80821E24-80821E28 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 - -/* 80821E28-80821E2C 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 - -/* 80821E2C-80821E30 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 - -/* 80821E30-80821E34 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 - -/* 80821E34-80821E38 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 - -/* 80821E38-80821E3C 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 - -/* 80821E3C-80821E40 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 - -/* 80821E40-80821E44 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 - -/* 80821E44-80821E48 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 - -/* 80821E48-80821E4C 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 - -/* 80821E4C-80821E50 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 - -/* 80821E50-80821E54 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 - -/* 80821E54-80821E58 -00001 0004+00 2/2 0/0 0/0 .bss None */ -/* 80821E54 0001+00 data_80821E54 @1009 */ -/* 80821E55 0003+00 data_80821E55 None */ -static u8 struct_80821E54[4]; - -/* 80821E58-80821E64 000048 000C+00 0/1 0/0 0/0 .bss @3786 */ -#pragma push -#pragma force_active on -static u8 lit_3786[12]; -#pragma pop - -/* 80821E64-80821E84 000054 0020+00 12/20 0/0 0/0 .bss l_HIO */ -static u8 l_HIO[32]; - -/* 80817064-80817164 001044 0100+00 1/1 0/0 0/0 .text checkWaterPos__9daE_YMB_cFv */ -void daE_YMB_c::checkWaterPos() { - // NONMATCHING -} - -/* ############################################################################################## */ -/* 80821914-80821918 000068 0004+00 1/4 0/0 0/0 .rodata @4304 */ -SECTION_RODATA static f32 const lit_4304 = 500.0f; -COMPILER_STRIP_GATE(0x80821914, &lit_4304); - -/* 80817164-80817200 001144 009C+00 1/1 0/0 0/0 .text checkGroundPos__9daE_YMB_cFv */ -void daE_YMB_c::checkGroundPos() { - // NONMATCHING -} - -/* 80817200-8081727C 0011E0 007C+00 6/6 0/0 0/0 .text setFlyWaitVoice__9daE_YMB_cFv */ -void daE_YMB_c::setFlyWaitVoice() { - // NONMATCHING -} - -/* 8081727C-808172F8 00125C 007C+00 1/1 0/0 0/0 .text setDownWaitVoice__9daE_YMB_cFv */ -void daE_YMB_c::setDownWaitVoice() { - // NONMATCHING -} - -/* ############################################################################################## */ -/* 80821918-8082191C 00006C 0004+00 1/6 0/0 0/0 .rodata @4343 */ -SECTION_RODATA static f32 const lit_4343 = 150.0f; -COMPILER_STRIP_GATE(0x80821918, &lit_4343); - -/* 808172F8-808173B0 0012D8 00B8+00 0/0 0/0 1/1 .text setHitBoardSe__9daE_YMB_cFv */ -void daE_YMB_c::setHitBoardSe() { - // NONMATCHING -} - -/* ############################################################################################## */ -/* 8082191C-80821920 000070 0004+00 0/1 0/0 0/0 .rodata @4411 */ -#pragma push -#pragma force_active on -SECTION_RODATA static f32 const lit_4411 = 1.0f / 5.0f; -COMPILER_STRIP_GATE(0x8082191C, &lit_4411); -#pragma pop - -/* 80821920-80821924 000074 0004+00 0/4 0/0 0/0 .rodata @4412 */ -#pragma push -#pragma force_active on -SECTION_RODATA static f32 const lit_4412 = 20.0f; -COMPILER_STRIP_GATE(0x80821920, &lit_4412); -#pragma pop - -/* 808173B0-8081756C 001390 01BC+00 4/4 0/0 0/0 .text setElecEffect1__9daE_YMB_cFv */ -void daE_YMB_c::setElecEffect1() { - // NONMATCHING -} - -/* ############################################################################################## */ -/* 80821924-80821928 000078 0004+00 0/3 0/0 0/0 .rodata @4487 */ -#pragma push -#pragma force_active on -SECTION_RODATA static f32 const lit_4487 = 2.0f; -COMPILER_STRIP_GATE(0x80821924, &lit_4487); -#pragma pop - -/* 80821928-8082192C 00007C 0004+00 0/2 0/0 0/0 .rodata @4488 */ -#pragma push -#pragma force_active on -SECTION_RODATA static f32 const lit_4488 = 60.0f; -COMPILER_STRIP_GATE(0x80821928, &lit_4488); -#pragma pop - -/* 8081756C-80817744 00154C 01D8+00 6/6 0/0 0/0 .text setElecEffect2__9daE_YMB_cFv */ -void daE_YMB_c::setElecEffect2() { - // NONMATCHING -} - -/* ############################################################################################## */ -/* 80821E84-80821E90 000074 000C+00 0/1 0/0 0/0 .bss @3797 */ -#pragma push -#pragma force_active on -static u8 lit_3797[12]; -#pragma pop - -/* 80821E90-80821E9C 000080 000C+00 0/1 0/0 0/0 .bss @3798 */ -#pragma push -#pragma force_active on -static u8 lit_3798[12]; -#pragma pop - -/* 80821E9C-80821EA8 00008C 000C+00 0/1 0/0 0/0 .bss @3799 */ -#pragma push -#pragma force_active on -static u8 lit_3799[12]; -#pragma pop - -/* 80821EA8-80821EB4 000098 000C+00 0/1 0/0 0/0 .bss @3800 */ -#pragma push -#pragma force_active on -static u8 lit_3800[12]; -#pragma pop - -/* 80821EB4-80821EC0 0000A4 000C+00 0/1 0/0 0/0 .bss @3801 */ -#pragma push -#pragma force_active on -static u8 lit_3801[12]; -#pragma pop - -/* 80821EC0-80821ECC 0000B0 000C+00 0/1 0/0 0/0 .bss @3802 */ -#pragma push -#pragma force_active on -static u8 lit_3802[12]; -#pragma pop - -/* 80821ECC-80821ED8 0000BC 000C+00 0/1 0/0 0/0 .bss @3803 */ -#pragma push -#pragma force_active on -static u8 lit_3803[12]; -#pragma pop - -/* 80821ED8-80821EE4 0000C8 000C+00 0/1 0/0 0/0 .bss @3804 */ -#pragma push -#pragma force_active on -static u8 lit_3804[12]; -#pragma pop - -/* 80821EE4-80821EF0 0000D4 000C+00 0/1 0/0 0/0 .bss @3805 */ -#pragma push -#pragma force_active on -static u8 lit_3805[12]; -#pragma pop - -/* 80821EF0-80821EFC 0000E0 000C+00 0/1 0/0 0/0 .bss @3806 */ -#pragma push -#pragma force_active on -static u8 lit_3806[12]; -#pragma pop - -/* 80821EFC-80821F08 0000EC 000C+00 0/1 0/0 0/0 .bss @3807 */ -#pragma push -#pragma force_active on -static u8 lit_3807[12]; -#pragma pop - -/* 80821F08-80821F14 0000F8 000C+00 0/1 0/0 0/0 .bss @3808 */ -#pragma push -#pragma force_active on -static u8 lit_3808[12]; -#pragma pop - -/* 80821F14-80821F20 000104 000C+00 0/1 0/0 0/0 .bss @3809 */ -#pragma push -#pragma force_active on -static u8 lit_3809[12]; -#pragma pop - -/* 80821F20-80821F2C 000110 000C+00 0/1 0/0 0/0 .bss @3810 */ -#pragma push -#pragma force_active on -static u8 lit_3810[12]; -#pragma pop - -/* 80821F2C-80821F38 00011C 000C+00 0/1 0/0 0/0 .bss @3811 */ -#pragma push -#pragma force_active on -static u8 lit_3811[12]; -#pragma pop - -/* 80821F38-80821FEC 000128 00B4+00 4/5 0/0 0/0 .bss YMB_DOWN_POS__23@unnamed@d_a_e_ymb_cpp@ */ -static u8 data_80821F38[180]; - -/* 80821FEC-80821FFC 0001DC 000C+04 0/1 0/0 0/0 .bss @4494 */ -#pragma push -#pragma force_active on -static u8 lit_4494[12 + 4 /* padding */]; -#pragma pop - -/* 80821FFC-80822008 0001EC 000C+00 0/1 0/0 0/0 .bss sc$4493 */ -#pragma push -#pragma force_active on -static u8 sc_4493[12]; -#pragma pop - -/* 80817744-8081785C 001724 0118+00 4/4 0/0 0/0 .text setWaterEffect1__9daE_YMB_cFv */ -void daE_YMB_c::setWaterEffect1() { - // NONMATCHING -} - -/* ############################################################################################## */ -/* 80822008-80822018 0001F8 000C+04 0/1 0/0 0/0 .bss @4530 */ -#pragma push -#pragma force_active on -static u8 lit_4530[12 + 4 /* padding */]; -#pragma pop - -/* 80822018-80822024 000208 000C+00 0/1 0/0 0/0 .bss sc$4529 */ -#pragma push -#pragma force_active on -static u8 sc_4529[12]; -#pragma pop - -/* 8081785C-80817974 00183C 0118+00 2/2 0/0 0/0 .text setWaterEffect2__9daE_YMB_cFv */ -void daE_YMB_c::setWaterEffect2() { - // NONMATCHING -} - -/* ############################################################################################## */ -/* 80822024-80822034 000214 000C+04 0/1 0/0 0/0 .bss @4566 */ -#pragma push -#pragma force_active on -static u8 lit_4566[12 + 4 /* padding */]; -#pragma pop - -/* 80822034-80822040 000224 000C+00 0/1 0/0 0/0 .bss sc$4565 */ -#pragma push -#pragma force_active on -static u8 sc_4565[12]; -#pragma pop - -/* 80817974-80817AEC 001954 0178+00 1/1 0/0 0/0 .text setBoilEffect__9daE_YMB_cFi */ -void daE_YMB_c::setBoilEffect(int param_0) { - // NONMATCHING -} - -/* ############################################################################################## */ -/* 80822040-80822050 000230 000C+04 0/1 0/0 0/0 .bss @4608 */ -#pragma push -#pragma force_active on -static u8 lit_4608[12 + 4 /* padding */]; -#pragma pop - -/* 80822050-8082205C 000240 000C+00 0/1 0/0 0/0 .bss sc$4607 */ -#pragma push -#pragma force_active on -static u8 sc_4607[12]; -#pragma pop - -/* 80817AEC-80817BD8 001ACC 00EC+00 1/1 0/0 0/0 .text setDamageEffect__9daE_YMB_cFi */ -void daE_YMB_c::setDamageEffect(int param_0) { - // NONMATCHING -} - -/* ############################################################################################## */ -/* 8082205C-8082206C 00024C 000C+04 0/1 0/0 0/0 .bss @4634 */ -#pragma push -#pragma force_active on -static u8 lit_4634[12 + 4 /* padding */]; -#pragma pop - -/* 8082206C-80822078 00025C 000C+00 0/1 0/0 0/0 .bss sc$4633 */ -#pragma push -#pragma force_active on -static u8 sc_4633[12]; -#pragma pop - -/* 80817BD8-80817CF0 001BB8 0118+00 2/2 0/0 0/0 .text setDownHamonEffect__9daE_YMB_cFv */ -void daE_YMB_c::setDownHamonEffect() { - // NONMATCHING -} - -/* 80817CF0-80817E7C 001CD0 018C+00 1/1 0/0 0/0 .text setFlyBlurEffect__9daE_YMB_cFv */ -void daE_YMB_c::setFlyBlurEffect() { - // NONMATCHING -} - -/* ############################################################################################## */ -/* 80822078-80822088 000268 000C+04 0/1 0/0 0/0 .bss @4736 */ -#pragma push -#pragma force_active on -static u8 lit_4736[12 + 4 /* padding */]; -#pragma pop - -/* 80822088-80822094 000278 000C+00 0/1 0/0 0/0 .bss sc$4735 */ -#pragma push -#pragma force_active on -static u8 sc_4735[12]; -#pragma pop - -/* 80817E7C-80817FDC 001E5C 0160+00 1/1 0/0 0/0 .text setRockDamageEffect__9daE_YMB_cFv - */ -void daE_YMB_c::setRockDamageEffect() { - // NONMATCHING -} - -/* ############################################################################################## */ -/* 80822094-808220A4 000284 000C+04 0/1 0/0 0/0 .bss @4774 */ -#pragma push -#pragma force_active on -static u8 lit_4774[12 + 4 /* padding */]; -#pragma pop - -/* 808220A4-808220B0 000294 000C+00 0/1 0/0 0/0 .bss sc$4773 */ -#pragma push -#pragma force_active on -static u8 sc_4773[12]; -#pragma pop - -/* 80817FDC-80818158 001FBC 017C+00 1/1 0/0 0/0 .text setDeathEffect__9daE_YMB_cFv */ -void daE_YMB_c::setDeathEffect() { - // NONMATCHING -} - -/* 80818158-808181F4 002138 009C+00 1/1 0/0 0/0 .text search_drop__FPvPv */ -static void search_drop(void* param_0, void* param_1) { - // NONMATCHING -} - -/* ############################################################################################## */ -/* 8082192C-80821930 000080 0004+00 0/4 0/0 0/0 .rodata @4858 */ -#pragma push -#pragma force_active on -SECTION_RODATA static f32 const lit_4858 = 300.0f; -COMPILER_STRIP_GATE(0x8082192C, &lit_4858); -#pragma pop - -/* 808181F4-80818328 0021D4 0134+00 1/1 0/0 0/0 .text executeWait__9daE_YMB_cFv */ -void daE_YMB_c::executeWait() { - // NONMATCHING -} - -/* 80818328-80818370 002308 0048+00 1/1 0/0 0/0 .text setBitePos__9daE_YMB_cFi */ -void daE_YMB_c::setBitePos(int param_0) { - // NONMATCHING -} - -/* ############################################################################################## */ -/* 80821930-80821934 000084 0004+00 0/7 0/0 0/0 .rodata @4904 */ -#pragma push -#pragma force_active on -SECTION_RODATA static f32 const lit_4904 = 50.0f; -COMPILER_STRIP_GATE(0x80821930, &lit_4904); -#pragma pop - -/* 80818370-80818518 002350 01A8+00 1/1 0/0 0/0 .text setInclination__9daE_YMB_cFv */ -void daE_YMB_c::setInclination() { - // NONMATCHING -} - -/* ############################################################################################## */ -/* 80821934-80821938 000088 0004+00 0/1 0/0 0/0 .rodata @5021 */ -#pragma push -#pragma force_active on -SECTION_RODATA static f32 const lit_5021 = -32.0f; -COMPILER_STRIP_GATE(0x80821934, &lit_5021); -#pragma pop - -/* 80821938-8082193C 00008C 0004+00 0/1 0/0 0/0 .rodata @5022 */ -#pragma push -#pragma force_active on -SECTION_RODATA static f32 const lit_5022 = 48.0f; -COMPILER_STRIP_GATE(0x80821938, &lit_5022); -#pragma pop - -/* 80818518-80818930 0024F8 0418+00 3/3 0/0 0/0 .text setBodyAngle__9daE_YMB_cFv */ -void daE_YMB_c::setBodyAngle() { - // NONMATCHING -} - -/* 80818930-80818AE8 002910 01B8+00 3/3 0/0 0/0 .text checkWolfLockIn__9daE_YMB_cFv */ -void daE_YMB_c::checkWolfLockIn() { - // NONMATCHING -} - -/* ############################################################################################## */ -/* 8082193C-80821940 000090 0004+00 0/10 0/0 0/0 .rodata @5372 */ -#pragma push -#pragma force_active on -SECTION_RODATA static f32 const lit_5372 = 5.0f; -COMPILER_STRIP_GATE(0x8082193C, &lit_5372); -#pragma pop - -/* 80821940-80821944 000094 0004+00 0/2 0/0 0/0 .rodata @5373 */ -#pragma push -#pragma force_active on -SECTION_RODATA static f32 const lit_5373 = 2200.0f; -COMPILER_STRIP_GATE(0x80821940, &lit_5373); -#pragma pop - -/* 80821944-80821948 000098 0004+00 0/3 0/0 0/0 .rodata @5374 */ -#pragma push -#pragma force_active on -SECTION_RODATA static f32 const lit_5374 = 1800.0f; -COMPILER_STRIP_GATE(0x80821944, &lit_5374); -#pragma pop - -/* 80821948-8082194C 00009C 0004+00 0/2 0/0 0/0 .rodata @5375 */ -#pragma push -#pragma force_active on -SECTION_RODATA static f32 const lit_5375 = 2048.0f; -COMPILER_STRIP_GATE(0x80821948, &lit_5375); -#pragma pop - -/* 8082194C-80821950 0000A0 0004+00 0/3 0/0 0/0 .rodata @5376 */ -#pragma push -#pragma force_active on -SECTION_RODATA static f32 const lit_5376 = 0.5f; -COMPILER_STRIP_GATE(0x8082194C, &lit_5376); -#pragma pop - -/* 80821950-80821954 0000A4 0004+00 0/3 0/0 0/0 .rodata @5377 */ -#pragma push -#pragma force_active on -SECTION_RODATA static f32 const lit_5377 = 650.0f; -COMPILER_STRIP_GATE(0x80821950, &lit_5377); -#pragma pop - -/* 80821954-80821958 0000A8 0004+00 1/3 0/0 0/0 .rodata @5378 */ -SECTION_RODATA static f32 const lit_5378 = 2000.0f; -COMPILER_STRIP_GATE(0x80821954, &lit_5378); - -/* 80821958-8082195C 0000AC 0004+00 0/1 0/0 0/0 .rodata @5379 */ -#pragma push -#pragma force_active on -SECTION_RODATA static f32 const lit_5379 = 700.0f; -COMPILER_STRIP_GATE(0x80821958, &lit_5379); -#pragma pop - -/* 80818AE8-80819610 002AC8 0B28+00 1/1 0/0 0/0 .text executeFly__9daE_YMB_cFv */ -void daE_YMB_c::executeFly() { - // NONMATCHING -} - -/* ############################################################################################## */ -/* 8082195C-80821960 0000B0 0004+00 0/2 0/0 0/0 .rodata @5571 */ -#pragma push -#pragma force_active on -SECTION_RODATA static f32 const lit_5571 = 15.0f; -COMPILER_STRIP_GATE(0x8082195C, &lit_5571); -#pragma pop - -/* 80821960-80821964 0000B4 0004+00 0/1 0/0 0/0 .rodata @5572 */ -#pragma push -#pragma force_active on -SECTION_RODATA static f32 const lit_5572 = -15.0f; -COMPILER_STRIP_GATE(0x80821960, &lit_5572); -#pragma pop - -/* 80819610-80819FD0 0035F0 09C0+00 2/1 0/0 0/0 .text executeFlyAttack__9daE_YMB_cFv */ -void daE_YMB_c::executeFlyAttack() { - // NONMATCHING -} - -/* ############################################################################################## */ -/* 80821964-80821968 0000B8 0004+00 0/0 0/0 0/0 .rodata @5573 */ -#pragma push -#pragma force_active on -SECTION_RODATA static f32 const lit_5573 = 7.0f; -COMPILER_STRIP_GATE(0x80821964, &lit_5573); -#pragma pop - -/* 80821968-8082196C 0000BC 0004+00 0/2 0/0 0/0 .rodata @5574 */ -#pragma push -#pragma force_active on -SECTION_RODATA static f32 const lit_5574 = 30.0f; -COMPILER_STRIP_GATE(0x80821968, &lit_5574); -#pragma pop - -/* 8082196C-80821970 0000C0 0004+00 0/2 0/0 0/0 .rodata @5744 */ -#pragma push -#pragma force_active on -SECTION_RODATA static f32 const lit_5744 = 1300.0f; -COMPILER_STRIP_GATE(0x8082196C, &lit_5744); -#pragma pop - -/* 80819FD0-8081A718 003FB0 0748+00 1/1 0/0 0/0 .text executeRunAway__9daE_YMB_cFv */ -void daE_YMB_c::executeRunAway() { - // NONMATCHING -} - -/* ############################################################################################## */ -/* 80821970-80821974 0000C4 0004+00 0/2 0/0 0/0 .rodata @5772 */ -#pragma push -#pragma force_active on -SECTION_RODATA static f32 const lit_5772 = 3.0f / 10.0f; -COMPILER_STRIP_GATE(0x80821970, &lit_5772); -#pragma pop - -/* 8081A718-8081A88C 0046F8 0174+00 1/1 0/0 0/0 .text executeGuard__9daE_YMB_cFv */ -void daE_YMB_c::executeGuard() { - // NONMATCHING -} - -/* 8081A88C-8081B78C 00486C 0F00+00 2/1 0/0 0/0 .text executeSwim__9daE_YMB_cFv */ -void daE_YMB_c::executeSwim() { - // NONMATCHING -} - -/* ############################################################################################## */ -/* 80821974-80821978 0000C8 0004+00 0/0 0/0 0/0 .rodata @6083 */ -#pragma push -#pragma force_active on -SECTION_RODATA static f32 const lit_6083 = 16384.0f; -COMPILER_STRIP_GATE(0x80821974, &lit_6083); -#pragma pop - -/* 80821978-8082197C 0000CC 0004+00 0/0 0/0 0/0 .rodata @6084 */ -#pragma push -#pragma force_active on -SECTION_RODATA static f32 const lit_6084 = 8192.0f; -COMPILER_STRIP_GATE(0x80821978, &lit_6084); -#pragma pop - -/* 8082197C-80821980 0000D0 0004+00 0/0 0/0 0/0 .rodata @6085 */ -#pragma push -#pragma force_active on -SECTION_RODATA static f32 const lit_6085 = 512.0f; -COMPILER_STRIP_GATE(0x8082197C, &lit_6085); -#pragma pop - -/* 80821980-80821984 0000D4 0004+00 0/0 0/0 0/0 .rodata @6086 */ -#pragma push -#pragma force_active on -SECTION_RODATA static f32 const lit_6086 = 1536.0f; -COMPILER_STRIP_GATE(0x80821980, &lit_6086); -#pragma pop - -/* 80821984-80821988 0000D8 0004+00 0/1 0/0 0/0 .rodata @6087 */ -#pragma push -#pragma force_active on -SECTION_RODATA static f32 const lit_6087 = -10.0f; -COMPILER_STRIP_GATE(0x80821984, &lit_6087); -#pragma pop - -/* 80821988-8082198C 0000DC 0004+00 0/0 0/0 0/0 .rodata @6088 */ -#pragma push -#pragma force_active on -SECTION_RODATA static f32 const lit_6088 = 4000.0f; -COMPILER_STRIP_GATE(0x80821988, &lit_6088); -#pragma pop - -/* 8082198C-80821990 0000E0 0004+00 0/1 0/0 0/0 .rodata @6162 */ -#pragma push -#pragma force_active on -SECTION_RODATA static f32 const lit_6162 = -50.0f; -COMPILER_STRIP_GATE(0x8082198C, &lit_6162); -#pragma pop - -/* 80821990-80821994 0000E4 0004+00 0/2 0/0 0/0 .rodata @6163 */ -#pragma push -#pragma force_active on -SECTION_RODATA static f32 const lit_6163 = 80.0f; -COMPILER_STRIP_GATE(0x80821990, &lit_6163); -#pragma pop - -/* 80821994-80821998 0000E8 0004+00 0/1 0/0 0/0 .rodata @6164 */ -#pragma push -#pragma force_active on -SECTION_RODATA static f32 const lit_6164 = -30.0f; -COMPILER_STRIP_GATE(0x80821994, &lit_6164); -#pragma pop - -/* 80821998-8082199C 0000EC 0004+00 0/1 0/0 0/0 .rodata @6165 */ -#pragma push -#pragma force_active on -SECTION_RODATA static f32 const lit_6165 = 24.0f; -COMPILER_STRIP_GATE(0x80821998, &lit_6165); -#pragma pop - -/* 8081B78C-8081BC10 00576C 0484+00 1/1 0/0 0/0 .text executeWaterJump__9daE_YMB_cFv */ -void daE_YMB_c::executeWaterJump() { - // NONMATCHING -} - -/* ############################################################################################## */ -/* 8082199C-808219A0 0000F0 0004+00 0/1 0/0 0/0 .rodata @6254 */ -#pragma push -#pragma force_active on -SECTION_RODATA static f32 const lit_6254 = 1500.0f; -COMPILER_STRIP_GATE(0x8082199C, &lit_6254); -#pragma pop - -/* 8081BC10-8081BEE8 005BF0 02D8+00 1/1 0/0 0/0 .text getNearDownPos__9daE_YMB_cFv */ -void daE_YMB_c::getNearDownPos() { - // NONMATCHING -} - -/* ############################################################################################## */ -/* 808219A0-808219A4 0000F4 0004+00 0/1 0/0 0/0 .rodata @6356 */ -#pragma push -#pragma force_active on -SECTION_RODATA static f32 const lit_6356 = -20.0f; -COMPILER_STRIP_GATE(0x808219A0, &lit_6356); -#pragma pop - -/* 8081BEE8-8081C4EC 005EC8 0604+00 1/2 0/0 0/0 .text executeDamage__9daE_YMB_cFv */ -void daE_YMB_c::executeDamage() { - // NONMATCHING -} - -/* ############################################################################################## */ -/* 808219A4-808219A8 0000F8 0004+00 0/2 0/0 0/0 .rodata @6445 */ -#pragma push -#pragma force_active on -SECTION_RODATA static f32 const lit_6445 = 1.0f / 100.0f; -COMPILER_STRIP_GATE(0x808219A4, &lit_6445); -#pragma pop - -/* 8081C4EC-8081C7D0 0064CC 02E4+00 1/1 0/0 0/0 .text setMidnaBindInit__9daE_YMB_cFP4cXyz - */ -void daE_YMB_c::setMidnaBindInit(cXyz* param_0) { - // NONMATCHING -} - -/* 8081C7D0-8081C908 0067B0 0138+00 1/1 0/0 0/0 .text setMidnaBindLevel__9daE_YMB_cFi */ -void daE_YMB_c::setMidnaBindLevel(int param_0) { - // NONMATCHING -} - -/* 8081C908-8081CC14 0068E8 030C+00 1/1 0/0 0/0 .text setWolfLockEffect__9daE_YMB_cFv */ -void daE_YMB_c::setWolfLockEffect() { - // NONMATCHING -} - -/* ############################################################################################## */ -/* 808219A8-808219AC 0000FC 0004+00 0/1 0/0 0/0 .rodata @6596 */ -#pragma push -#pragma force_active on -SECTION_RODATA static f32 const lit_6596 = 16.0f; -COMPILER_STRIP_GATE(0x808219A8, &lit_6596); -#pragma pop - -/* 8081CC14-8081CD00 006BF4 00EC+00 2/2 0/0 0/0 .text initDownToWater__9daE_YMB_cFv */ -void daE_YMB_c::initDownToWater() { - // NONMATCHING -} - -/* ############################################################################################## */ -/* 808219AC-808219B0 000100 0004+00 0/1 0/0 0/0 .rodata @6654 */ -#pragma push -#pragma force_active on -SECTION_RODATA static f32 const lit_6654 = -60.0f; -COMPILER_STRIP_GATE(0x808219AC, &lit_6654); -#pragma pop - -/* 8081CD00-8081CE6C 006CE0 016C+00 2/2 0/0 0/0 .text calcDownToWater__9daE_YMB_cFv */ -void daE_YMB_c::calcDownToWater() { - // NONMATCHING -} - -/* 8081CE6C-8081D4D8 006E4C 066C+00 1/1 0/0 0/0 .text executeDown__9daE_YMB_cFv */ -void daE_YMB_c::executeDown() { - // NONMATCHING -} - -/* 8081D4D8-8081D594 0074B8 00BC+00 1/1 0/0 0/0 .text setCreateDrop__9daE_YMB_cFv */ -void daE_YMB_c::setCreateDrop() { - // NONMATCHING -} - -/* ############################################################################################## */ -/* 808219B0-808219B4 000104 0004+00 0/1 0/0 0/0 .rodata @7019 */ -#pragma push -#pragma force_active on -SECTION_RODATA static f32 const lit_7019 = -88400.0f; -COMPILER_STRIP_GATE(0x808219B0, &lit_7019); -#pragma pop - -/* 808219B4-808219B8 000108 0004+00 0/1 0/0 0/0 .rodata @7020 */ -#pragma push -#pragma force_active on -SECTION_RODATA static f32 const lit_7020 = 39000.0f; -COMPILER_STRIP_GATE(0x808219B4, &lit_7020); -#pragma pop - -/* 808219B8-808219BC 00010C 0004+00 0/1 0/0 0/0 .rodata @7021 */ -#pragma push -#pragma force_active on -SECTION_RODATA static f32 const lit_7021 = -87900.0f; -COMPILER_STRIP_GATE(0x808219B8, &lit_7021); -#pragma pop - -/* 808219BC-808219C0 000110 0004+00 0/1 0/0 0/0 .rodata @7022 */ -#pragma push -#pragma force_active on -SECTION_RODATA static f32 const lit_7022 = -18800.0f; -COMPILER_STRIP_GATE(0x808219BC, &lit_7022); -#pragma pop - -/* 808219C0-808219C4 000114 0004+00 0/1 0/0 0/0 .rodata @7023 */ -#pragma push -#pragma force_active on -SECTION_RODATA static f32 const lit_7023 = 38050.0f; -COMPILER_STRIP_GATE(0x808219C0, &lit_7023); -#pragma pop - -/* 808219C4-808219C8 000118 0004+00 0/1 0/0 0/0 .rodata @7024 */ -#pragma push -#pragma force_active on -SECTION_RODATA static f32 const lit_7024 = 263.0f; -COMPILER_STRIP_GATE(0x808219C4, &lit_7024); -#pragma pop - -/* 808219C8-808219CC 00011C 0004+00 0/1 0/0 0/0 .rodata @7025 */ -#pragma push -#pragma force_active on -SECTION_RODATA static f32 const lit_7025 = 280.0f; -COMPILER_STRIP_GATE(0x808219C8, &lit_7025); -#pragma pop - -/* 808219CC-808219D0 000120 0004+00 0/1 0/0 0/0 .rodata @7026 */ -#pragma push -#pragma force_active on -SECTION_RODATA static f32 const lit_7026 = -87893.0f; -COMPILER_STRIP_GATE(0x808219CC, &lit_7026); -#pragma pop - -/* 808219D0-808219D4 000124 0004+00 0/1 0/0 0/0 .rodata @7027 */ -#pragma push -#pragma force_active on -SECTION_RODATA static f32 const lit_7027 = -18731.0f; -COMPILER_STRIP_GATE(0x808219D0, &lit_7027); -#pragma pop - -/* 808219D4-808219D8 000128 0004+00 0/1 0/0 0/0 .rodata @7028 */ -#pragma push -#pragma force_active on -SECTION_RODATA static f32 const lit_7028 = 37578.0f; -COMPILER_STRIP_GATE(0x808219D4, &lit_7028); -#pragma pop - -/* 808219D8-808219DC 00012C 0004+00 0/1 0/0 0/0 .rodata @7029 */ -#pragma push -#pragma force_active on -SECTION_RODATA static f32 const lit_7029 = -5.0f; -COMPILER_STRIP_GATE(0x808219D8, &lit_7029); -#pragma pop - -/* 8081D594-8081DBD0 007574 063C+00 1/1 0/0 0/0 .text executeDeath__9daE_YMB_cFv */ -void daE_YMB_c::executeDeath() { - // NONMATCHING -} - -/* 8081DBD0-8081DDE0 007BB0 0210+00 1/1 0/0 0/0 .text demo_skip__9daE_YMB_cFi */ -void daE_YMB_c::demo_skip(int param_0) { - // NONMATCHING -} - -/* 8081DDE0-8081DE14 007DC0 0034+00 3/3 0/0 0/0 .text DemoSkipCallBack__9daE_YMB_cFPvi */ -void daE_YMB_c::DemoSkipCallBack(void* param_0, int param_1) { - // NONMATCHING -} - -/* 8081DE14-8081DE84 007DF4 0070+00 1/1 0/0 0/0 .text calcLakeDemoPlayerPos__9daE_YMB_cFv - */ -void daE_YMB_c::calcLakeDemoPlayerPos() { - // NONMATCHING -} - -/* ############################################################################################## */ -/* 808219DC-808219E0 000130 0004+00 0/1 0/0 0/0 .rodata @7205 */ -#pragma push -#pragma force_active on -SECTION_RODATA static f32 const lit_7205 = -300.0f; -COMPILER_STRIP_GATE(0x808219DC, &lit_7205); -#pragma pop - -/* 808219E0-808219E4 000134 0004+00 0/1 0/0 0/0 .rodata @7206 */ -#pragma push -#pragma force_active on -SECTION_RODATA static f32 const lit_7206 = -81000.0f; -COMPILER_STRIP_GATE(0x808219E0, &lit_7206); -#pragma pop - -/* 808219E4-808219E8 000138 0004+00 0/1 0/0 0/0 .rodata @7207 */ -#pragma push -#pragma force_active on -SECTION_RODATA static f32 const lit_7207 = -17000.0f; -COMPILER_STRIP_GATE(0x808219E4, &lit_7207); -#pragma pop - -/* 808219E8-808219EC 00013C 0004+00 0/1 0/0 0/0 .rodata @7208 */ -#pragma push -#pragma force_active on -SECTION_RODATA static f32 const lit_7208 = 33000.0f; -COMPILER_STRIP_GATE(0x808219E8, &lit_7208); -#pragma pop - -/* 808219EC-808219F0 000140 0004+00 0/1 0/0 0/0 .rodata @7209 */ -#pragma push -#pragma force_active on -SECTION_RODATA static f32 const lit_7209 = -700.0f; -COMPILER_STRIP_GATE(0x808219EC, &lit_7209); -#pragma pop - -/* 808219F0-808219F4 000144 0004+00 0/1 0/0 0/0 .rodata @7210 */ -#pragma push -#pragma force_active on -SECTION_RODATA static f32 const lit_7210 = 3500.0f; -COMPILER_STRIP_GATE(0x808219F0, &lit_7210); -#pragma pop - -/* 8081DE84-8081E5B4 007E64 0730+00 1/1 0/0 0/0 .text executeLakeDemo__9daE_YMB_cFv */ -void daE_YMB_c::executeLakeDemo() { - // NONMATCHING -} - -/* 8081E5B4-8081F140 008594 0B8C+00 2/1 0/0 0/0 .text executeStartDemo__9daE_YMB_cFv */ -void daE_YMB_c::executeStartDemo() { - // NONMATCHING -} - -/* 8081F140-8081F2E0 009120 01A0+00 1/1 0/0 0/0 .text checkStartBattleDemo__9daE_YMB_cFv - */ -void daE_YMB_c::checkStartBattleDemo() { - // NONMATCHING -} - -/* ############################################################################################## */ -/* 808219F4-808219FC 000148 0006+02 0/0 0/0 0/0 .rodata @7228 */ -#pragma push -#pragma force_active on -SECTION_RODATA static u8 const lit_7228[6 + 2 /* padding */] = { - 0x00, - 0x20, - 0x01, - 0x00, - 0x20, - 0x04, - /* padding */ - 0x00, - 0x00, -}; -COMPILER_STRIP_GATE(0x808219F4, &lit_7228); -#pragma pop - -/* 808219FC-80821A00 000150 0004+00 0/0 0/0 0/0 .rodata @7482 */ -#pragma push -#pragma force_active on -SECTION_RODATA static f32 const lit_7482 = -89100.0f; -COMPILER_STRIP_GATE(0x808219FC, &lit_7482); -#pragma pop - -/* 80821A00-80821A04 000154 0004+00 0/0 0/0 0/0 .rodata @7483 */ -#pragma push -#pragma force_active on -SECTION_RODATA static f32 const lit_7483 = 39410.0f; -COMPILER_STRIP_GATE(0x80821A00, &lit_7483); -#pragma pop - -/* 80821A04-80821A08 000158 0004+00 0/0 0/0 0/0 .rodata @7484 */ -#pragma push -#pragma force_active on -SECTION_RODATA static f32 const lit_7484 = -88463.0f; -COMPILER_STRIP_GATE(0x80821A04, &lit_7484); -#pragma pop - -/* 80821A08-80821A0C 00015C 0004+00 0/0 0/0 0/0 .rodata @7485 */ -#pragma push -#pragma force_active on -SECTION_RODATA static f32 const lit_7485 = 38868.0f; -COMPILER_STRIP_GATE(0x80821A08, &lit_7485); -#pragma pop - -/* 80821A0C-80821A10 000160 0004+00 0/0 0/0 0/0 .rodata @7486 */ -#pragma push -#pragma force_active on -SECTION_RODATA static f32 const lit_7486 = -88660.0f; -COMPILER_STRIP_GATE(0x80821A0C, &lit_7486); -#pragma pop - -/* 80821A10-80821A14 000164 0004+00 0/0 0/0 0/0 .rodata @7487 */ -#pragma push -#pragma force_active on -SECTION_RODATA static f32 const lit_7487 = -18918.0f; -COMPILER_STRIP_GATE(0x80821A10, &lit_7487); -#pragma pop - -/* 80821A14-80821A18 000168 0004+00 0/0 0/0 0/0 .rodata @7488 */ -#pragma push -#pragma force_active on -SECTION_RODATA static f32 const lit_7488 = 38981.0f; -COMPILER_STRIP_GATE(0x80821A14, &lit_7488); -#pragma pop - -/* 80821A18-80821A1C 00016C 0004+00 0/0 0/0 0/0 .rodata @7489 */ -#pragma push -#pragma force_active on -SECTION_RODATA static f32 const lit_7489 = -89144.0f; -COMPILER_STRIP_GATE(0x80821A18, &lit_7489); -#pragma pop - -/* 80821A1C-80821A20 000170 0004+00 0/0 0/0 0/0 .rodata @7490 */ -#pragma push -#pragma force_active on -SECTION_RODATA static f32 const lit_7490 = -18551.0f; -COMPILER_STRIP_GATE(0x80821A1C, &lit_7490); -#pragma pop - -/* 80821A20-80821A24 000174 0004+00 0/0 0/0 0/0 .rodata @7491 */ -#pragma push -#pragma force_active on -SECTION_RODATA static f32 const lit_7491 = 39753.0f; -COMPILER_STRIP_GATE(0x80821A20, &lit_7491); -#pragma pop - -/* 80821A24-80821A28 000178 0004+00 0/0 0/0 0/0 .rodata @7492 */ -#pragma push -#pragma force_active on -SECTION_RODATA static f32 const lit_7492 = 120.0f; -COMPILER_STRIP_GATE(0x80821A24, &lit_7492); -#pragma pop - -/* 80821A28-80821A2C 00017C 0004+00 0/0 0/0 0/0 .rodata @7493 */ -#pragma push -#pragma force_active on -SECTION_RODATA static f32 const lit_7493 = 1.5f; -COMPILER_STRIP_GATE(0x80821A28, &lit_7493); -#pragma pop - -/* 80821A2C-80821A30 000180 0004+00 0/0 0/0 0/0 .rodata @7494 */ -#pragma push -#pragma force_active on -SECTION_RODATA static f32 const lit_7494 = -88800.0f; -COMPILER_STRIP_GATE(0x80821A2C, &lit_7494); -#pragma pop - -/* 80821A30-80821A34 000184 0004+00 0/0 0/0 0/0 .rodata @7495 */ -#pragma push -#pragma force_active on -SECTION_RODATA static f32 const lit_7495 = -18266.0f; -COMPILER_STRIP_GATE(0x80821A30, &lit_7495); -#pragma pop - -/* 80821A34-80821A38 000188 0004+00 0/0 0/0 0/0 .rodata @7496 */ -#pragma push -#pragma force_active on -SECTION_RODATA static f32 const lit_7496 = 39412.0f; -COMPILER_STRIP_GATE(0x80821A34, &lit_7496); -#pragma pop - -/* 80821A38-80821A3C 00018C 0004+00 0/0 0/0 0/0 .rodata @7497 */ -#pragma push -#pragma force_active on -SECTION_RODATA static f32 const lit_7497 = 17.0f / 10.0f; -COMPILER_STRIP_GATE(0x80821A38, &lit_7497); -#pragma pop - -/* 80821A3C-80821A40 000190 0004+00 0/0 0/0 0/0 .rodata @7498 */ -#pragma push -#pragma force_active on -SECTION_RODATA static f32 const lit_7498 = 11.0f / 5.0f; -COMPILER_STRIP_GATE(0x80821A3C, &lit_7498); -#pragma pop - -/* 80821A40-80821A44 000194 0004+00 0/0 0/0 0/0 .rodata @7499 */ -#pragma push -#pragma force_active on -SECTION_RODATA static f32 const lit_7499 = -89000.0f; -COMPILER_STRIP_GATE(0x80821A40, &lit_7499); -#pragma pop - -/* 80821A44-80821A48 000198 0004+00 0/0 0/0 0/0 .rodata @7500 */ -#pragma push -#pragma force_active on -SECTION_RODATA static f32 const lit_7500 = -18583.0f; -COMPILER_STRIP_GATE(0x80821A44, &lit_7500); -#pragma pop - -/* 80821A48-80821A4C 00019C 0004+00 0/0 0/0 0/0 .rodata @7501 */ -#pragma push -#pragma force_active on -SECTION_RODATA static f32 const lit_7501 = 39350.0f; -COMPILER_STRIP_GATE(0x80821A48, &lit_7501); -#pragma pop - -/* 80821A4C-80821A50 0001A0 0004+00 0/0 0/0 0/0 .rodata @7502 */ -#pragma push -#pragma force_active on -SECTION_RODATA static f32 const lit_7502 = -89260.0f; -COMPILER_STRIP_GATE(0x80821A4C, &lit_7502); -#pragma pop - -/* 80821A50-80821A54 0001A4 0004+00 0/0 0/0 0/0 .rodata @7503 */ -#pragma push -#pragma force_active on -SECTION_RODATA static f32 const lit_7503 = -18650.0f; -COMPILER_STRIP_GATE(0x80821A50, &lit_7503); -#pragma pop - -/* 80821A54-80821A58 0001A8 0004+00 0/0 0/0 0/0 .rodata @7504 */ -#pragma push -#pragma force_active on -SECTION_RODATA static f32 const lit_7504 = 39500.0f; -COMPILER_STRIP_GATE(0x80821A54, &lit_7504); -#pragma pop - -/* 80821A58-80821A5C 0001AC 0004+00 0/1 0/0 0/0 .rodata @7738 */ -#pragma push -#pragma force_active on -SECTION_RODATA static f32 const lit_7738 = -200.0f; -COMPILER_STRIP_GATE(0x80821A58, &lit_7738); -#pragma pop - -/* 80821A5C-80821A60 0001B0 0004+00 0/1 0/0 0/0 .rodata @7739 */ -#pragma push -#pragma force_active on -SECTION_RODATA static f32 const lit_7739 = 600.0f; -COMPILER_STRIP_GATE(0x80821A5C, &lit_7739); -#pragma pop - -/* 8081F2E0-8081FAC8 0092C0 07E8+00 1/1 0/0 0/0 .text executeBattleDemo__9daE_YMB_cFv */ -void daE_YMB_c::executeBattleDemo() { - // NONMATCHING -} - -/* 8081FAC8-8081FF88 009AA8 04C0+00 2/1 0/0 0/0 .text action__9daE_YMB_cFv */ -void daE_YMB_c::action() { - // NONMATCHING -} - -/* ############################################################################################## */ -/* 80821A60-80821A64 0001B4 0004+00 0/1 0/0 0/0 .rodata @7903 */ -#pragma push -#pragma force_active on -SECTION_RODATA static f32 const lit_7903 = -250.0f; -COMPILER_STRIP_GATE(0x80821A60, &lit_7903); -#pragma pop - -/* 80821A64-80821A68 0001B8 0004+00 0/1 0/0 0/0 .rodata @7904 */ -#pragma push -#pragma force_active on -SECTION_RODATA static f32 const lit_7904 = 250.0f; -COMPILER_STRIP_GATE(0x80821A64, &lit_7904); -#pragma pop - -/* 8081FF88-808200A0 009F68 0118+00 1/1 0/0 0/0 .text mtx_set__9daE_YMB_cFv */ -void daE_YMB_c::mtx_set() { - // NONMATCHING -} - -/* ############################################################################################## */ -/* 80821A68-80821A6C 0001BC 0004+00 0/1 0/0 0/0 .rodata @7922 */ -#pragma push -#pragma force_active on -SECTION_RODATA static f32 const lit_7922 = -120.0f; -COMPILER_STRIP_GATE(0x80821A68, &lit_7922); -#pragma pop - -/* 808200A0-80820128 00A080 0088+00 3/3 0/0 0/0 .text getBellyBitePos__9daE_YMB_cFP4cXyz - */ -void daE_YMB_c::getBellyBitePos(cXyz* param_0) { - // NONMATCHING -} - -/* 80820128-808203D8 00A108 02B0+00 2/2 0/0 0/0 .text getDownLockPoint__9daE_YMB_cFv */ -void daE_YMB_c::getDownLockPoint() { - // NONMATCHING -} - -/* 808203D8-80820668 00A3B8 0290+00 1/1 0/0 0/0 .text setAttentionPos__9daE_YMB_cFv */ -void daE_YMB_c::setAttentionPos() { - // NONMATCHING -} - -/* ############################################################################################## */ -/* 80821A6C-80821A70 0001C0 0004+00 0/1 0/0 0/0 .rodata @8122 */ -#pragma push -#pragma force_active on -SECTION_RODATA static f32 const lit_8122 = 180.0f; -COMPILER_STRIP_GATE(0x80821A6C, &lit_8122); -#pragma pop - -/* 80821A70-80821A74 0001C4 0004+00 0/1 0/0 0/0 .rodata @8123 */ -#pragma push -#pragma force_active on -SECTION_RODATA static f32 const lit_8123 = 240.0f; -COMPILER_STRIP_GATE(0x80821A70, &lit_8123); -#pragma pop - -/* 80821A74-80821A78 0001C8 0004+00 0/1 0/0 0/0 .rodata @8124 */ -#pragma push -#pragma force_active on -SECTION_RODATA static f32 const lit_8124 = 360.0f; -COMPILER_STRIP_GATE(0x80821A74, &lit_8124); -#pragma pop - -/* 80820668-808207AC 00A648 0144+00 1/1 0/0 0/0 .text cc_set__9daE_YMB_cFv */ -void daE_YMB_c::cc_set() { - // NONMATCHING -} - -/* ############################################################################################## */ -/* 80821A78-80821A7C 0001CC 0004+00 0/1 0/0 0/0 .rodata @8180 */ -#pragma push -#pragma force_active on -SECTION_RODATA static f32 const lit_8180 = 8.0f; -COMPILER_STRIP_GATE(0x80821A78, &lit_8180); -#pragma pop - -/* 80821A7C-80821A80 0001D0 0004+00 0/1 0/0 0/0 .rodata @8181 */ -#pragma push -#pragma force_active on -SECTION_RODATA static f32 const lit_8181 = 6.0f; -COMPILER_STRIP_GATE(0x80821A7C, &lit_8181); -#pragma pop - -/* 808207AC-80820A18 00A78C 026C+00 1/1 0/0 0/0 .text execute__9daE_YMB_cFv */ -void daE_YMB_c::execute() { - // NONMATCHING -} - -/* 80820A18-80820A38 00A9F8 0020+00 2/1 0/0 0/0 .text daE_YMB_Execute__FP9daE_YMB_c */ -static void daE_YMB_Execute(daE_YMB_c* param_0) { - // NONMATCHING -} - -/* 80820A38-80820A40 00AA18 0008+00 1/0 0/0 0/0 .text daE_YMB_IsDelete__FP9daE_YMB_c */ -static bool daE_YMB_IsDelete(daE_YMB_c* param_0) { - return true; -} - -/* 80820A40-80820AD0 00AA20 0090+00 1/1 0/0 0/0 .text _delete__9daE_YMB_cFv */ -void daE_YMB_c::_delete() { - // NONMATCHING -} - -/* 80820AD0-80820AF0 00AAB0 0020+00 1/0 0/0 0/0 .text daE_YMB_Delete__FP9daE_YMB_c */ -static void daE_YMB_Delete(daE_YMB_c* param_0) { - // NONMATCHING -} - -/* 80820AF0-80820D68 00AAD0 0278+00 1/1 0/0 0/0 .text CreateHeap__9daE_YMB_cFv */ -void daE_YMB_c::CreateHeap() { - // NONMATCHING -} - -/* 80820D68-80820DB0 00AD48 0048+00 1/0 0/0 0/0 .text __dt__12J3DFrameCtrlFv */ -// J3DFrameCtrl::~J3DFrameCtrl() { -extern "C" void __dt__12J3DFrameCtrlFv() { - // NONMATCHING -} - -/* 80820DB0-80820DD0 00AD90 0020+00 1/1 0/0 0/0 .text useHeapInit__FP10fopAc_ac_c */ -static void useHeapInit(fopAc_ac_c* param_0) { - // NONMATCHING -} - -/* ############################################################################################## */ -/* 80821A80-80821A84 0001D4 0004+00 0/1 0/0 0/0 .rodata @8436 */ -#pragma push -#pragma force_active on -SECTION_RODATA static f32 const lit_8436 = -400.0f; -COMPILER_STRIP_GATE(0x80821A80, &lit_8436); -#pragma pop - -/* 80821B04-80821B04 000258 0000+00 0/0 0/0 0/0 .rodata @stringBase0 */ -#pragma push -#pragma force_active on -SECTION_DEAD static char const* const stringBase_80821B09 = "E_ymb"; -#pragma pop - -/* 80820DD0-808211BC 00ADB0 03EC+00 1/1 0/0 0/0 .text create__9daE_YMB_cFv */ -void daE_YMB_c::create() { - // NONMATCHING -} - -/* 808211BC-80821204 00B19C 0048+00 1/0 0/0 0/0 .text __dt__8cM3dGSphFv */ -// cM3dGSph::~cM3dGSph() { -extern "C" void __dt__8cM3dGSphFv() { - // NONMATCHING -} - -/* 80821204-8082124C 00B1E4 0048+00 1/0 0/0 0/0 .text __dt__8cM3dGAabFv */ -// cM3dGAab::~cM3dGAab() { -extern "C" void __dt__8cM3dGAabFv() { - // NONMATCHING -} - -/* 8082124C-80821318 00B22C 00CC+00 1/1 0/0 0/0 .text __dt__8dCcD_SphFv */ -// dCcD_Sph::~dCcD_Sph() { -extern "C" void __dt__8dCcD_SphFv() { - // NONMATCHING -} - -/* 80821318-8082139C 00B2F8 0084+00 1/1 0/0 0/0 .text __ct__8dCcD_SphFv */ -// dCcD_Sph::dCcD_Sph() { -extern "C" void __ct__8dCcD_SphFv() { - // NONMATCHING -} - -/* 8082139C-808213F8 00B37C 005C+00 1/0 0/0 0/0 .text __dt__10dCcD_GSttsFv */ -// dCcD_GStts::~dCcD_GStts() { -extern "C" void __dt__10dCcD_GSttsFv() { - // NONMATCHING -} - -/* 808213F8-80821418 00B3D8 0020+00 1/0 0/0 0/0 .text daE_YMB_Create__FP9daE_YMB_c */ -static void daE_YMB_Create(daE_YMB_c* param_0) { - // NONMATCHING -} - -/* 80821418-80821460 00B3F8 0048+00 1/0 0/0 0/0 .text __dt__10cCcD_GSttsFv */ -// cCcD_GStts::~cCcD_GStts() { -extern "C" void __dt__10cCcD_GSttsFv() { - // NONMATCHING -} - -/* 80821460-808214A8 00B440 0048+00 2/1 0/0 0/0 .text __dt__13daE_YMB_HIO_cFv */ -daE_YMB_HIO_c::~daE_YMB_HIO_c() { - // NONMATCHING -} - -/* ############################################################################################## */ -/* 80821A84-80821A88 0001D8 0004+00 0/1 0/0 0/0 .rodata @8657 */ -#pragma push -#pragma force_active on -SECTION_RODATA static f32 const lit_8657 = -88457.0f; -COMPILER_STRIP_GATE(0x80821A84, &lit_8657); -#pragma pop - -/* 80821A88-80821A8C 0001DC 0004+00 0/1 0/0 0/0 .rodata @8658 */ -#pragma push -#pragma force_active on -SECTION_RODATA static f32 const lit_8658 = -18786.0f; -COMPILER_STRIP_GATE(0x80821A88, &lit_8658); -#pragma pop - -/* 80821A8C-80821A90 0001E0 0004+00 0/1 0/0 0/0 .rodata @8659 */ -#pragma push -#pragma force_active on -SECTION_RODATA static f32 const lit_8659 = 42166.0f; -COMPILER_STRIP_GATE(0x80821A8C, &lit_8659); -#pragma pop - -/* 80821A90-80821A94 0001E4 0004+00 0/1 0/0 0/0 .rodata @8660 */ -#pragma push -#pragma force_active on -SECTION_RODATA static f32 const lit_8660 = -89307.0f; -COMPILER_STRIP_GATE(0x80821A90, &lit_8660); -#pragma pop - -/* 80821A94-80821A98 0001E8 0004+00 0/1 0/0 0/0 .rodata @8661 */ -#pragma push -#pragma force_active on -SECTION_RODATA static f32 const lit_8661 = 41366.0f; -COMPILER_STRIP_GATE(0x80821A94, &lit_8661); -#pragma pop - -/* 80821A98-80821A9C 0001EC 0004+00 0/1 0/0 0/0 .rodata @8662 */ -#pragma push -#pragma force_active on -SECTION_RODATA static f32 const lit_8662 = -89389.0f; -COMPILER_STRIP_GATE(0x80821A98, &lit_8662); -#pragma pop - -/* 80821A9C-80821AA0 0001F0 0004+00 0/1 0/0 0/0 .rodata @8663 */ -#pragma push -#pragma force_active on -SECTION_RODATA static f32 const lit_8663 = -18785.0f; -COMPILER_STRIP_GATE(0x80821A9C, &lit_8663); -#pragma pop - -/* 80821AA0-80821AA4 0001F4 0004+00 0/1 0/0 0/0 .rodata @8664 */ -#pragma push -#pragma force_active on -SECTION_RODATA static f32 const lit_8664 = 37267.0f; -COMPILER_STRIP_GATE(0x80821AA0, &lit_8664); -#pragma pop - -/* 80821AA4-80821AA8 0001F8 0004+00 0/1 0/0 0/0 .rodata @8665 */ -#pragma push -#pragma force_active on -SECTION_RODATA static f32 const lit_8665 = -88442.0f; -COMPILER_STRIP_GATE(0x80821AA4, &lit_8665); -#pragma pop - -/* 80821AA8-80821AAC 0001FC 0004+00 0/1 0/0 0/0 .rodata @8666 */ -#pragma push -#pragma force_active on -SECTION_RODATA static f32 const lit_8666 = -18753.0f; -COMPILER_STRIP_GATE(0x80821AA8, &lit_8666); -#pragma pop - -/* 80821AAC-80821AB0 000200 0004+00 0/1 0/0 0/0 .rodata @8667 */ -#pragma push -#pragma force_active on -SECTION_RODATA static f32 const lit_8667 = 38460.0f; -COMPILER_STRIP_GATE(0x80821AAC, &lit_8667); -#pragma pop - -/* 80821AB0-80821AB4 000204 0004+00 0/1 0/0 0/0 .rodata @8668 */ -#pragma push -#pragma force_active on -SECTION_RODATA static f32 const lit_8668 = -87864.0f; -COMPILER_STRIP_GATE(0x80821AB0, &lit_8668); -#pragma pop - -/* 80821AB4-80821AB8 000208 0004+00 0/1 0/0 0/0 .rodata @8669 */ -#pragma push -#pragma force_active on -SECTION_RODATA static f32 const lit_8669 = 37112.0f; -COMPILER_STRIP_GATE(0x80821AB4, &lit_8669); -#pragma pop - -/* 80821AB8-80821ABC 00020C 0004+00 0/1 0/0 0/0 .rodata @8670 */ -#pragma push -#pragma force_active on -SECTION_RODATA static f32 const lit_8670 = -87639.0f; -COMPILER_STRIP_GATE(0x80821AB8, &lit_8670); -#pragma pop - -/* 80821ABC-80821AC0 000210 0004+00 0/1 0/0 0/0 .rodata @8671 */ -#pragma push -#pragma force_active on -SECTION_RODATA static f32 const lit_8671 = -18764.0f; -COMPILER_STRIP_GATE(0x80821ABC, &lit_8671); -#pragma pop - -/* 80821AC0-80821AC4 000214 0004+00 0/1 0/0 0/0 .rodata @8672 */ -#pragma push -#pragma force_active on -SECTION_RODATA static f32 const lit_8672 = 41016.0f; -COMPILER_STRIP_GATE(0x80821AC0, &lit_8672); -#pragma pop - -/* 80821AC4-80821AC8 000218 0004+00 0/1 0/0 0/0 .rodata @8673 */ -#pragma push -#pragma force_active on -SECTION_RODATA static f32 const lit_8673 = -88977.0f; -COMPILER_STRIP_GATE(0x80821AC4, &lit_8673); -#pragma pop - -/* 80821AC8-80821ACC 00021C 0004+00 0/1 0/0 0/0 .rodata @8674 */ -#pragma push -#pragma force_active on -SECTION_RODATA static f32 const lit_8674 = 40658.0f; -COMPILER_STRIP_GATE(0x80821AC8, &lit_8674); -#pragma pop - -/* 80821ACC-80821AD0 000220 0004+00 0/1 0/0 0/0 .rodata @8675 */ -#pragma push -#pragma force_active on -SECTION_RODATA static f32 const lit_8675 = -86467.0f; -COMPILER_STRIP_GATE(0x80821ACC, &lit_8675); -#pragma pop - -/* 80821AD0-80821AD4 000224 0004+00 0/1 0/0 0/0 .rodata @8676 */ -#pragma push -#pragma force_active on -SECTION_RODATA static f32 const lit_8676 = -18758.0f; -COMPILER_STRIP_GATE(0x80821AD0, &lit_8676); -#pragma pop - -/* 80821AD4-80821AD8 000228 0004+00 0/1 0/0 0/0 .rodata @8677 */ -#pragma push -#pragma force_active on -SECTION_RODATA static f32 const lit_8677 = 39379.0f; -COMPILER_STRIP_GATE(0x80821AD4, &lit_8677); -#pragma pop - -/* 80821AD8-80821ADC 00022C 0004+00 0/1 0/0 0/0 .rodata @8678 */ -#pragma push -#pragma force_active on -SECTION_RODATA static f32 const lit_8678 = -87372.0f; -COMPILER_STRIP_GATE(0x80821AD8, &lit_8678); -#pragma pop - -/* 80821ADC-80821AE0 000230 0004+00 0/1 0/0 0/0 .rodata @8679 */ -#pragma push -#pragma force_active on -SECTION_RODATA static f32 const lit_8679 = 40362.0f; -COMPILER_STRIP_GATE(0x80821ADC, &lit_8679); -#pragma pop - -/* 80821AE0-80821AE4 000234 0004+00 0/1 0/0 0/0 .rodata @8680 */ -#pragma push -#pragma force_active on -SECTION_RODATA static f32 const lit_8680 = -86980.0f; -COMPILER_STRIP_GATE(0x80821AE0, &lit_8680); -#pragma pop - -/* 80821AE4-80821AE8 000238 0004+00 0/1 0/0 0/0 .rodata @8681 */ -#pragma push -#pragma force_active on -SECTION_RODATA static f32 const lit_8681 = 37583.0f; -COMPILER_STRIP_GATE(0x80821AE4, &lit_8681); -#pragma pop - -/* 80821AE8-80821AEC 00023C 0004+00 0/1 0/0 0/0 .rodata @8682 */ -#pragma push -#pragma force_active on -SECTION_RODATA static f32 const lit_8682 = -90195.0f; -COMPILER_STRIP_GATE(0x80821AE8, &lit_8682); -#pragma pop - -/* 80821AEC-80821AF0 000240 0004+00 0/1 0/0 0/0 .rodata @8683 */ -#pragma push -#pragma force_active on -SECTION_RODATA static f32 const lit_8683 = -18754.0f; -COMPILER_STRIP_GATE(0x80821AEC, &lit_8683); -#pragma pop - -/* 80821AF0-80821AF4 000244 0004+00 0/1 0/0 0/0 .rodata @8684 */ -#pragma push -#pragma force_active on -SECTION_RODATA static f32 const lit_8684 = 39893.0f; -COMPILER_STRIP_GATE(0x80821AF0, &lit_8684); -#pragma pop - -/* 80821AF4-80821AF8 000248 0004+00 0/1 0/0 0/0 .rodata @8685 */ -#pragma push -#pragma force_active on -SECTION_RODATA static f32 const lit_8685 = -88342.0f; -COMPILER_STRIP_GATE(0x80821AF4, &lit_8685); -#pragma pop - -/* 80821AF8-80821AFC 00024C 0004+00 0/1 0/0 0/0 .rodata @8686 */ -#pragma push -#pragma force_active on -SECTION_RODATA static f32 const lit_8686 = 39785.0f; -COMPILER_STRIP_GATE(0x80821AF8, &lit_8686); -#pragma pop - -/* 80821AFC-80821B00 000250 0004+00 0/1 0/0 0/0 .rodata @8687 */ -#pragma push -#pragma force_active on -SECTION_RODATA static f32 const lit_8687 = -90200.0f; -COMPILER_STRIP_GATE(0x80821AFC, &lit_8687); -#pragma pop - -/* 80821B00-80821B04 000254 0004+00 0/1 0/0 0/0 .rodata @8688 */ -#pragma push -#pragma force_active on -SECTION_RODATA static f32 const lit_8688 = 38100.0f; -COMPILER_STRIP_GATE(0x80821B00, &lit_8688); -#pragma pop - -/* 808214A8-8082187C 00B488 03D4+00 0/0 1/0 0/0 .text __sinit_d_a_e_ymb_cpp */ -void __sinit_d_a_e_ymb_cpp() { - // NONMATCHING -} - -#pragma push -#pragma force_active on -REGISTER_CTORS(0x808214A8, __sinit_d_a_e_ymb_cpp); -#pragma pop - -/* 8082187C-80821898 00B85C 001C+00 1/1 0/0 0/0 .text setPos__11daObjDrop_cF4cXyz */ -// void daObjDrop_c::setPos(cXyz param_0) { -extern "C" void setPos__11daObjDrop_cF4cXyz() { - // NONMATCHING -} - -/* ############################################################################################## */ -/* 808220B0-808220B4 0002A0 0004+00 0/0 0/0 0/0 .bss - * sInstance__40JASGlobalInstance<19JASDefaultBankTable> */ -#pragma push -#pragma force_active on -static u8 data_808220B0[4]; -#pragma pop - -/* 808220B4-808220B8 0002A4 0004+00 0/0 0/0 0/0 .bss - * sInstance__35JASGlobalInstance<14JASAudioThread> */ -#pragma push -#pragma force_active on -static u8 data_808220B4[4]; -#pragma pop - -/* 808220B8-808220BC 0002A8 0004+00 0/0 0/0 0/0 .bss sInstance__27JASGlobalInstance<7Z2SeMgr> */ -#pragma push -#pragma force_active on -static u8 data_808220B8[4]; -#pragma pop - -/* 808220BC-808220C0 0002AC 0004+00 0/0 0/0 0/0 .bss sInstance__28JASGlobalInstance<8Z2SeqMgr> */ -#pragma push -#pragma force_active on -static u8 data_808220BC[4]; -#pragma pop - -/* 808220C0-808220C4 0002B0 0004+00 0/0 0/0 0/0 .bss sInstance__31JASGlobalInstance<10Z2SceneMgr> - */ -#pragma push -#pragma force_active on -static u8 data_808220C0[4]; -#pragma pop - -/* 808220C4-808220C8 0002B4 0004+00 0/0 0/0 0/0 .bss sInstance__32JASGlobalInstance<11Z2StatusMgr> - */ -#pragma push -#pragma force_active on -static u8 data_808220C4[4]; -#pragma pop - -/* 808220C8-808220CC 0002B8 0004+00 0/0 0/0 0/0 .bss sInstance__31JASGlobalInstance<10Z2DebugSys> - */ -#pragma push -#pragma force_active on -static u8 data_808220C8[4]; -#pragma pop - -/* 808220CC-808220D0 0002BC 0004+00 0/0 0/0 0/0 .bss - * sInstance__36JASGlobalInstance<15JAISoundStarter> */ -#pragma push -#pragma force_active on -static u8 data_808220CC[4]; -#pragma pop - -/* 808220D0-808220D4 0002C0 0004+00 0/0 0/0 0/0 .bss - * sInstance__35JASGlobalInstance<14Z2SoundStarter> */ -#pragma push -#pragma force_active on -static u8 data_808220D0[4]; -#pragma pop - -/* 808220D4-808220D8 0002C4 0004+00 0/0 0/0 0/0 .bss - * sInstance__33JASGlobalInstance<12Z2SpeechMgr2> */ -#pragma push -#pragma force_active on -static u8 data_808220D4[4]; -#pragma pop - -/* 808220D8-808220DC 0002C8 0004+00 0/0 0/0 0/0 .bss sInstance__28JASGlobalInstance<8JAISeMgr> */ -#pragma push -#pragma force_active on -static u8 data_808220D8[4]; -#pragma pop - -/* 808220DC-808220E0 0002CC 0004+00 0/0 0/0 0/0 .bss sInstance__29JASGlobalInstance<9JAISeqMgr> */ -#pragma push -#pragma force_active on -static u8 data_808220DC[4]; -#pragma pop - -/* 808220E0-808220E4 0002D0 0004+00 0/0 0/0 0/0 .bss - * sInstance__33JASGlobalInstance<12JAIStreamMgr> */ -#pragma push -#pragma force_active on -static u8 data_808220E0[4]; -#pragma pop - -/* 808220E4-808220E8 0002D4 0004+00 0/0 0/0 0/0 .bss sInstance__31JASGlobalInstance<10Z2SoundMgr> - */ -#pragma push -#pragma force_active on -static u8 data_808220E4[4]; -#pragma pop - -/* 808220E8-808220EC 0002D8 0004+00 0/0 0/0 0/0 .bss - * sInstance__33JASGlobalInstance<12JAISoundInfo> */ -#pragma push -#pragma force_active on -static u8 data_808220E8[4]; -#pragma pop - -/* 808220EC-808220F0 0002DC 0004+00 0/0 0/0 0/0 .bss - * sInstance__34JASGlobalInstance<13JAUSoundTable> */ -#pragma push -#pragma force_active on -static u8 data_808220EC[4]; -#pragma pop - -/* 808220F0-808220F4 0002E0 0004+00 0/0 0/0 0/0 .bss - * sInstance__38JASGlobalInstance<17JAUSoundNameTable> */ -#pragma push -#pragma force_active on -static u8 data_808220F0[4]; -#pragma pop - -/* 808220F4-808220F8 0002E4 0004+00 0/0 0/0 0/0 .bss - * sInstance__33JASGlobalInstance<12JAUSoundInfo> */ -#pragma push -#pragma force_active on -static u8 data_808220F4[4]; -#pragma pop - -/* 808220F8-808220FC 0002E8 0004+00 0/0 0/0 0/0 .bss sInstance__32JASGlobalInstance<11Z2SoundInfo> - */ -#pragma push -#pragma force_active on -static u8 data_808220F8[4]; -#pragma pop - -/* 808220FC-80822100 0002EC 0004+00 0/0 0/0 0/0 .bss - * sInstance__34JASGlobalInstance<13Z2SoundObjMgr> */ -#pragma push -#pragma force_active on -static u8 data_808220FC[4]; -#pragma pop - -/* 80822100-80822104 0002F0 0004+00 0/0 0/0 0/0 .bss sInstance__31JASGlobalInstance<10Z2Audience> - */ -#pragma push -#pragma force_active on -static u8 data_80822100[4]; -#pragma pop - -/* 80822104-80822108 0002F4 0004+00 0/0 0/0 0/0 .bss sInstance__32JASGlobalInstance<11Z2FxLineMgr> - */ -#pragma push -#pragma force_active on -static u8 data_80822104[4]; -#pragma pop - -/* 80822108-8082210C 0002F8 0004+00 0/0 0/0 0/0 .bss sInstance__31JASGlobalInstance<10Z2EnvSeMgr> - */ -#pragma push -#pragma force_active on -static u8 data_80822108[4]; -#pragma pop - -/* 8082210C-80822110 0002FC 0004+00 0/0 0/0 0/0 .bss sInstance__32JASGlobalInstance<11Z2SpeechMgr> - */ -#pragma push -#pragma force_active on -static u8 data_8082210C[4]; -#pragma pop - -/* 80822110-80822114 000300 0004+00 0/0 0/0 0/0 .bss - * sInstance__34JASGlobalInstance<13Z2WolfHowlMgr> */ -#pragma push -#pragma force_active on -static u8 data_80822110[4]; -#pragma pop - -/* 80821B04-80821B04 000258 0000+00 0/0 0/0 0/0 .rodata @stringBase0 */ diff --git a/src/d/actor/d_a_e_zh.cpp b/src/d/actor/d_a_e_zh.cpp index ca5faf58949..3bbd0249cef 100644 --- a/src/d/actor/d_a_e_zh.cpp +++ b/src/d/actor/d_a_e_zh.cpp @@ -4,383 +4,2363 @@ */ #include "d/actor/d_a_e_zh.h" -#include "dol2asm.h" +#include "d/actor/d_a_obj_carry.h" +#include "d/d_com_inf_game.h" +#include "d/d_s_play.h" #include "d/d_camera.h" +#include "Z2AudioLib/Z2Instances.h" +#include "d/d_debug_viewer.h" +enum E_ZH_RES_File_ID { + /* BCK */ + /* 0x05 */ BCK_ZH_ACT01 = 0x5, + /* 0x06 */ BCK_ZH_CATCH01, + /* 0x07 */ BCK_ZH_CATCH02, + /* 0x08 */ BCK_ZH_CATCHDAMAGE, + /* 0x09 */ BCK_ZH_CATCHDROP, + /* 0x0A */ BCK_ZH_CATCHMOVE, + /* 0x0B */ BCK_ZH_OPEN, + /* 0x0C */ BCK_ZH_PIYO2, + /* 0x0D */ BCK_ZH_SERCH, + /* 0x0E */ BCK_ZH_START, + /* 0x0F */ BCK_ZH_WAIT01, + /* 0x10 */ BCK_ZH_WAKEUP, + /* BMDV */ + /* 0x13 */ BMDV_ZH = 0x13, + /* 0x14 */ BMDV_ZH_ENTRANCE, - -// -// Forward References: -// - -extern "C" void __ct__12daE_ZH_HIO_cFv(); -extern "C" void draw__8daE_ZH_cFv(); -extern "C" void __dt__4cXyzFv(); -extern "C" static void daE_ZH_Draw__FP8daE_ZH_c(); -extern "C" void setBck__8daE_ZH_cFiUcff(); -extern "C" void setActionMode__8daE_ZH_cFii(); -extern "C" static void s_BallSearch__FPvPv(); -extern "C" static void s_BallSearch_Tag__FPvPv(); -extern "C" void startDemoCheck__8daE_ZH_cFv(); -extern "C" void mBallBGCheck__8daE_ZH_cFv(); -extern "C" void mGateOpen__8daE_ZH_cFv(); -extern "C" void mColorSet__8daE_ZH_cFbff(); -extern "C" void mReturnLineMove__8daE_ZH_cFv(); -extern "C" void mBallBgLineCheck__8daE_ZH_cFv(); -extern "C" void mSearchMove__8daE_ZH_cFUc(); -extern "C" void mStartParticleSet__8daE_ZH_cFv(); -extern "C" void mCutTypeCheck__8daE_ZH_cFv(); -extern "C" void damage_check__8daE_ZH_cFv(); -extern "C" void executeStartDemo__8daE_ZH_cFv(); -extern "C" void executeWait__8daE_ZH_cFv(); -extern "C" void executeBallWait__8daE_ZH_cFv(); -extern "C" void executeOpenStart__8daE_ZH_cFv(); -extern "C" void executeSearchMove__8daE_ZH_cFv(); -extern "C" void executeBgHitSHMove__8daE_ZH_cFv(); -extern "C" void executeCatchMove__8daE_ZH_cFv(); -extern "C" void executeCatchFlyMove__8daE_ZH_cFv(); -extern "C" void executeReturnDemo__8daE_ZH_cFv(); -extern "C" void executeFlyDelete__8daE_ZH_cFv(); -extern "C" void executeDamage__8daE_ZH_cFv(); -extern "C" void executeDeadStop__8daE_ZH_cFv(); -extern "C" void executeEntryCheck__8daE_ZH_cFv(); -extern "C" void tagAction__8daE_ZH_cFv(); -extern "C" void action__8daE_ZH_cFv(); -extern "C" void mtx_set__8daE_ZH_cFv(); -extern "C" void cc_set__8daE_ZH_cFv(); -extern "C" void execute__8daE_ZH_cFv(); -extern "C" static void daE_ZH_Execute__FP8daE_ZH_c(); -extern "C" static bool daE_ZH_IsDelete__FP8daE_ZH_c(); -extern "C" void _delete__8daE_ZH_cFv(); -extern "C" static void daE_ZH_Delete__FP8daE_ZH_c(); -extern "C" void CreateHeap__8daE_ZH_cFv(); -extern "C" void __dt__12J3DFrameCtrlFv(); -extern "C" static void useHeapInit__FP10fopAc_ac_c(); -extern "C" void create__8daE_ZH_cFv(); -extern "C" void __ct__8daE_ZH_cFv(); -extern "C" void __dt__8cM3dGCylFv(); -extern "C" void __dt__8cM3dGSphFv(); -extern "C" void __dt__8cM3dGAabFv(); -extern "C" void __dt__10dCcD_GSttsFv(); -extern "C" void __dt__12dBgS_ObjAcchFv(); -extern "C" void __dt__12dBgS_AcchCirFv(); -extern "C" void __ct__4cXyzFv(); -extern "C" static void daE_ZH_Create__FP8daE_ZH_c(); -extern "C" void __dt__10cCcD_GSttsFv(); -extern "C" void __dt__12daE_ZH_HIO_cFv(); -extern "C" void __sinit_d_a_e_zh_cpp(); -extern "C" static void func_8082F1E4(); -extern "C" static void func_8082F1EC(); -extern "C" extern char const* const d_a_e_zh__stringBase0; - -// -// External References: -// - -extern "C" void mDoMtx_YrotS__FPA4_fs(); -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 mDoExt_modelUpdateDL__FP8J3DModel(); -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 mDoExt_J3DModel__create__FP12J3DModelDataUlUl(); -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_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_searchActorAngleY__FPC10fopAc_ac_cPC10fopAc_ac_c(); -extern "C" void fopAcM_orderPotentialEvent__FP10fopAc_ac_cUsUsUs(); -extern "C" void fopAcM_setCarryNow__FP10fopAc_ac_ci(); -extern "C" void fopAcM_cancelCarryNow__FP10fopAc_ac_c(); -extern "C" void fopAcM_setEffectMtx__FPC10fopAc_ac_cPC12J3DModelData(); -extern "C" void roofCheck__11fopAcM_rc_cFPC4cXyz(); -extern "C" void fpcEx_Search__FPFPvPv_PvPv(); -extern "C" void dStage_changeScene__FifUlScsi(); -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 dComIfGs_onOneZoneSwitch__Fii(); -extern "C" void dComIfGs_offOneZoneSwitch__Fii(); -extern "C" void -dComIfGd_setShadow__FUlScP8J3DModelP4cXyzffffR13cBgS_PolyInfoP12dKy_tevstr_csfP9_GXTexObj(); -extern "C" void offEventBit__11dSv_event_cFUs(); -extern "C" void onSwitch__12dSv_danBit_cFi(); -extern "C" void onSwitch__10dSv_info_cFii(); -extern "C" void offSwitch__10dSv_info_cFii(); -extern "C" void isSwitch__10dSv_info_cCFii(); -extern "C" void getRes__14dRes_control_cFPCclP11dRes_info_ci(); -extern "C" void reset__14dEvt_control_cFv(); -extern "C" void dEv_noFinishSkipProc__FPvi(); -extern "C" void setSkipProc__14dEvt_control_cFPvPFPvi_ii(); -extern "C" void setHitMark__13dPa_control_cFUsP10fopAc_ac_cPC4cXyzPC5csXyzPC4cXyzUl(); -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 -setPoly__13dPa_control_cFUlUsR13cBgS_PolyInfoPC4cXyzPC12dKy_tevstr_cPC5csXyzPC4cXyziP18dPa_levelEcallBackScPC4cXyz(); -extern "C" void StartShock__12dVibration_cFii4cXyz(); -extern "C" void LineCross__4cBgSFP11cBgS_LinChk(); -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 SetGroundUpY__9dBgS_AcchFf(); -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 getHitSeID__12dCcD_GObjInfFUci(); -extern "C" void Set__8dCcD_CylFRC11dCcD_SrcCyl(); -extern "C" void Set__8dCcD_SphFRC11dCcD_SrcSph(); -extern "C" void cc_at_check__FP10fopAc_ac_cP11dCcU_AtInfo(); -extern "C" void Start__9dCamera_cFv(); -extern "C" void Stop__9dCamera_cFv(); -extern "C" void SetTrimSize__9dCamera_cFl(); -extern "C" void Set__9dCamera_cF4cXyz4cXyz(); -extern "C" void Set__9dCamera_cF4cXyz4cXyzfs(); -extern "C" void Reset__9dCamera_cF4cXyz4cXyz(); -extern "C" void StartBlure__9dCamera_cFiP10fopAc_ac_cff(); -extern "C" void ResetBlure__9dCamera_cFv(); -extern "C" void dCam_getBody__Fv(); -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 __pl__4cXyzCFRC3Vec(); -extern "C" void __mi__4cXyzCFRC3Vec(); -extern "C" void atan2sX_Z__4cXyzCFv(); -extern "C" void cM_rndF__Ff(); -extern "C" void cM_rndFX__Ff(); -extern "C" void __dt__13cBgS_PolyInfoFv(); -extern "C" void __dt__8cM3dGCirFv(); -extern "C" void SetC__8cM3dGCylFRC4cXyz(); -extern "C" void SetH__8cM3dGCylFf(); -extern "C" void SetR__8cM3dGCylFf(); -extern "C" void SetC__8cM3dGSphFRC4cXyz(); -extern "C" void SetR__8cM3dGSphFf(); -extern "C" void cLib_addCalc2__FPffff(); -extern "C" void cLib_addCalc0__FPfff(); -extern "C" void cLib_addCalcPos__FP4cXyzRC4cXyzfff(); -extern "C" void cLib_addCalcAngleS2__FPssss(); -extern "C" void MtxPosition__FP4cXyzP4cXyz(); -extern "C" void func_80280808(); -extern "C" void changeBgmStatus__8Z2SeqMgrFl(); -extern "C" void __ct__15Z2CreatureEnemyFv(); -extern "C" void init__15Z2CreatureEnemyFP3VecP3VecUcUc(); -extern "C" void* __nw__FUl(); -extern "C" void __dl__FPv(); -extern "C" void init__12J3DFrameCtrlFs(); -extern "C" void __construct_array(); -extern "C" void _savegpr_23(); -extern "C" void _savegpr_24(); -extern "C" void _savegpr_25(); -extern "C" void _savegpr_26(); -extern "C" void _savegpr_27(); -extern "C" void _savegpr_28(); -extern "C" void _savegpr_29(); -extern "C" void _restgpr_23(); -extern "C" void _restgpr_24(); -extern "C" void _restgpr_25(); -extern "C" void _restgpr_26(); -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__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 sincosTable___5JMath[65536]; -extern "C" f32 mRoofY__11fopAcM_rc_c; -extern "C" u8 mAudioMgrPtr__10Z2AudioMgr[4 + 4 /* padding */]; -extern "C" void __register_global_object(); - -// -// Declarations: -// - -/* ############################################################################################## */ -/* 8082F208-8082F20C 000000 0004+00 26/26 0/0 0/0 .rodata @3778 */ -SECTION_RODATA static f32 const lit_3778 = 1.0f; -COMPILER_STRIP_GATE(0x8082F208, &lit_3778); - -/* 8082F20C-8082F210 000004 0004+00 0/9 0/0 0/0 .rodata @3779 */ -#pragma push -#pragma force_active on -SECTION_RODATA static f32 const lit_3779 = 10.0f; -COMPILER_STRIP_GATE(0x8082F20C, &lit_3779); -#pragma pop - -/* 8082F210-8082F214 000008 0004+00 0/2 0/0 0/0 .rodata @3780 */ -#pragma push -#pragma force_active on -SECTION_RODATA static f32 const lit_3780 = 500.0f; -COMPILER_STRIP_GATE(0x8082F210, &lit_3780); -#pragma pop - -/* 8082F420-8082F42C 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, + /* BTK */ + /* 0x17 */ BTK_ZH_LOOP = 0x17, }; -/* 8082F42C-8082F440 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, +enum Action { + /* 0x00 */ ACTION_EXECUTE_START_DEMO, + /* 0x01 */ ACTION_EXECUTE_WAIT, + /* 0x02 */ ACTION_EXECUTE_BALL_WAIT, + /* 0x03 */ ACTION_EXECUTE_OPEN_START, + /* 0x04 */ ACTION_EXECUTE_SEARCH_MOVE, + /* 0x05 */ ACTION_EXECUTE_BG_HIT_SH_MOVE, + /* 0x06 */ ACTION_EXECUTE_CATCH_MOVE, + /* 0x07 */ ACTION_EXECUTE_CATCH_FLY_MOVE, + /* 0x08 */ ACTION_EXECUTE_FLY_DELETE, + /* 0x09 */ ACTION_EXECUTE_RETURN_DEMO, + /* 0x0A */ ACTION_EXECUTE_DAMAGE, + /* 0x0B */ ACTION_EXECUTE_DEAD_STOP, + /* 0x0C */ UNK_ACTION }; -#pragma pop + +enum Particle { + /* 0x8A62 */ ZL2_HAHEN_1 = 0x8A62, + /* 0x8A63 */ ZL2_SMOKE00_1, + /* 0x8A64 */ ZL2_HAHEN_2, + /* 0x8A65 */ ZL2_SMOKE00_2, + /* 0x8A66 */ ZL2_HAHEN_3, + /* 0x8A67 */ ZL2_SMOKE00_3, + /* 0x8A68 */ ZL2_HAHEN_4, + /* 0x8A69 */ ZL2_SMOKE00_4, + /* 0x8A6A */ ZL2_SMOKE00_5, + /* 0x8A6B */ ZL2_HAHEN_5, + /* 0x8A6C */ ZL2_SMOKE00_6, + /* 0x8A6D */ ZL2_RING_HALO02, + /* 0x8A6E */ ZL2_KAITENGIRI128, + /* 0x8A6F */ ZL2_SHOCK01, + /* 0x8A70 */ ZL2_SMOKE00_7, +}; + +UNK_REL_DATA; /* 8082F440-8082F480 000020 0040+00 0/1 0/0 0/0 .data cc_zhSph_src__22@unnamed@d_a_e_zh_cpp@ */ -#pragma push -#pragma force_active on -SECTION_DATA static u8 data_8082F440[64] = { - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0xD8, 0x48, 0x60, 0xBA, 0x00, 0x00, 0x00, 0x03, 0x00, 0x00, 0x00, 0x15, 0x09, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x09, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x03, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x42, 0x20, 0x00, 0x00, -}; -#pragma pop +namespace { + static dCcD_SrcSph cc_zhSph_src = { + { + {0, {{AT_TYPE_0, 0, 0}, {0xD84860BA, 3}, 0x15}}, + {dCcD_SE_METAL, 0, 0, 0, 0}, + {dCcD_SE_METAL, 1, 0, 0, 3}, + {0} + }, + { + {{0.0f, 0.0f, 0.0f}, 40.0f}, + } + }; -/* 8082F480-8082F4C4 000060 0044+00 0/1 0/0 0/0 .data cc_zhCyl_src__22@unnamed@d_a_e_zh_cpp@ */ -#pragma push -#pragma force_active on -SECTION_DATA static u8 data_8082F480[68] = { - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0xD8, 0x48, 0x60, 0xBA, 0x00, 0x00, 0x00, 0x03, 0x00, 0x00, 0x00, 0x15, - 0x09, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x09, 0x01, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x03, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x42, 0x48, 0x00, 0x00, 0x43, 0x96, 0x00, 0x00, -}; -#pragma pop + /* 8082F480-8082F4C4 000060 0044+00 0/1 0/0 0/0 .data cc_zhCyl_src__22@unnamed@d_a_e_zh_cpp@ */ + static dCcD_SrcCyl cc_zhCyl_src = { + { + {0, {{AT_TYPE_0, 0, 0}, {0xD84860BA, 3}, 0x15}}, + {dCcD_SE_METAL, 0, 0, 0, 0}, + {dCcD_SE_METAL, 1, 0, 0, 3}, + {0} + }, + { + {0.0f, 0.0f, 0.0f}, 50.0f, 300.0f, + } + }; -/* 8082F4C4-8082F508 0000A4 0044+00 0/1 0/0 0/0 .data cc_zhCyl_at_src__22@unnamed@d_a_e_zh_cpp@ */ -#pragma push -#pragma force_active on -SECTION_DATA static u8 data_8082F4C4[68] = { - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x04, 0x00, 0x04, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x0D, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x09, 0x00, 0x02, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x02, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x42, 0x48, 0x00, 0x00, 0x43, 0x96, 0x00, 0x00, -}; -#pragma pop + /* 8082F4C4-8082F508 0000A4 0044+00 0/1 0/0 0/0 .data cc_zhCyl_at_src__22@unnamed@d_a_e_zh_cpp@ */ + static dCcD_SrcCyl cc_zhCyl_at_src = { + { + {0, {{AT_TYPE_CSTATUE_SWING, 4, 0xD}, {0, 0}, 0}}, + {dCcD_SE_METAL, 0, 2, 0, 0}, + {dCcD_SE_NONE, 1, 0, 0, 2}, + {0}, + }, + { + {0.0f, 0.0f, 0.0f}, 50.0f, 300.0f, + } + }; +} -/* 8082F508-8082F55C -00001 0054+00 1/1 0/0 0/0 .data @4709 */ -SECTION_DATA static void* lit_4709[21] = { - (void*)(((char*)executeBallWait__8daE_ZH_cFv) + 0x68), - (void*)(((char*)executeBallWait__8daE_ZH_cFv) + 0x1F0), - (void*)(((char*)executeBallWait__8daE_ZH_cFv) + 0x240), - (void*)(((char*)executeBallWait__8daE_ZH_cFv) + 0x488), - (void*)(((char*)executeBallWait__8daE_ZH_cFv) + 0x488), - (void*)(((char*)executeBallWait__8daE_ZH_cFv) + 0x488), - (void*)(((char*)executeBallWait__8daE_ZH_cFv) + 0x488), - (void*)(((char*)executeBallWait__8daE_ZH_cFv) + 0x488), - (void*)(((char*)executeBallWait__8daE_ZH_cFv) + 0x488), - (void*)(((char*)executeBallWait__8daE_ZH_cFv) + 0x488), - (void*)(((char*)executeBallWait__8daE_ZH_cFv) + 0x290), - (void*)(((char*)executeBallWait__8daE_ZH_cFv) + 0x2B4), - (void*)(((char*)executeBallWait__8daE_ZH_cFv) + 0x340), - (void*)(((char*)executeBallWait__8daE_ZH_cFv) + 0x488), - (void*)(((char*)executeBallWait__8daE_ZH_cFv) + 0x488), - (void*)(((char*)executeBallWait__8daE_ZH_cFv) + 0x488), - (void*)(((char*)executeBallWait__8daE_ZH_cFv) + 0x488), - (void*)(((char*)executeBallWait__8daE_ZH_cFv) + 0x488), - (void*)(((char*)executeBallWait__8daE_ZH_cFv) + 0x488), - (void*)(((char*)executeBallWait__8daE_ZH_cFv) + 0x488), - (void*)(((char*)executeBallWait__8daE_ZH_cFv) + 0x38C), +/* 8082902C-8082907C 0000EC 0050+00 1/1 0/0 0/0 .text __ct__12daE_ZH_HIO_cFv */ +daE_ZH_HIO_c::daE_ZH_HIO_c() { + field_0x4 = -1; + model_size = 1.0f; + ascent_rate = 10.0f; + wandering_area = 500.0f; + wait_time = 100; + piyori_time = 300; + dungeon_bit_check = 0; +} + +UNK_REL_BSS; + +/* 8082F725 0003+00 data_8082F725 None */ +static u8 l_initHIO; + +/* 8082F734-8082F750 000054 001C+00 8/9 0/0 0/0 .bss l_HIO */ +static daE_ZH_HIO_c l_HIO; + +/* 8082F750-8082F754 000070 0004+00 4/5 0/0 0/0 .bss mStartFlag */ +static int mStartFlag; + +/* 8082907C-8082934C 00013C 02D0+00 1/1 0/0 0/0 .text draw__8daE_ZH_cFv */ +int daE_ZH_c::draw() { + GXColor i_color, i_color2; + if (WREG_S(0) != 0) { + cXyz i_pos = home.pos; + i_color.r = 0x82; + i_color.g = 0x82; + i_color.b = 0xFF; + i_color.a = 0xFA; + + if (arg0 == 2) { + i_pos.y += 10.0f; + dDbVw_drawCircleXlu(i_pos, field_0x778, i_color, 1, 12); + } + + if (mActionMode == ACTION_EXECUTE_BG_HIT_SH_MOVE && (field_0x6bc.x || field_0x6bc.y || field_0x6bc.z)) { + i_color2.r = 0x1E; + i_color2.g = 0x46; + i_color2.b = 0x9B; + i_color2.a = 0xFA; + dDbVw_drawCircleXlu(field_0x6bc, l_HIO.wandering_area, i_color2, 1, 12); + } + + if (mS_Ball != NULL) { + i_color.r = 0x82; + i_color.g = 0x82; + i_color.b = 0xFF; + i_color.a = 0xFA; + i_pos.set(mS_Ball->current.pos); + i_pos.y += 50.0f; + + for (int i = 0; i < 8; i++) { + if (field_0x6f8[i].x || field_0x6f8[i].z) { + i_color.r = (u8)i * 20 + 100; + + if (i > 3) { + i_color.b = (u8)i * 20 + 100; + } + + i_color.a = field_0x758[i]; + dDbVw_drawLineXlu(i_pos, field_0x6f8[i], i_color, 1, 12); + } + } + } + + if (WREG_S(1) != 0) { + i_color.r = 0x82; + i_color.g = 0x82; + i_color.b = 0xFF; + i_color.a = 0xFA; + dDbVw_drawLineXlu(current.pos, field_0x680, i_color, 1, 12); + } + + if (WREG_S(2) != 0) { + i_color.r = 0xFA; + i_color.g = 0x82; + i_color.b = 0x82; + i_color.a = 0xFA; + i_pos.set(current.pos); + i_pos.y += 10.0f; + dDbVw_drawLineXlu(i_pos, field_0x68c, i_color, 1, 12); + } + + if (WREG_S(3) != 0) { + i_color.r = 0x7D; + i_color.g = 0xFF; + i_color.b = 0x7D; + i_color.a = 0xFA; + if (mRetrunStartLine.x || mRetrunStartLine.z) { + dDbVw_drawLineXlu(mRetrunStartLine, mRetrunEndLine, i_color, 1, 12); + } + } + + if (WREG_S(4) != 0 && mS_Ball != NULL) { + cXyz i_end = mS_Ball->current.pos + mBallHosei; + i_color.r = 0xFF; + i_color.g = 0x14; + i_color.b = 0x14; + i_color.a = 0xFA; + + for (int i = 0; i < 3; i++) { + dDbVw_drawLineXlu(field_0x6c8[i], i_end, i_color, 1, 12); + } + } + } + + J3DModelData* modelData; + J3DMaterial* matNodeP; + + if (arg0 == 2) { + return 1; + } + + if (field_0x7ae != 0) { + return 1; + } + + #ifdef DEBUG + mBgc.DrawWall(dComIfG_Bgsp()); + #endif + + if (arg0 == 1) { + g_env_light.settingTevStruct(8, ¤t.pos, &tevStr); + g_env_light.setLightTevColorType_MAJI(mEntranceModel, &tevStr); + + modelData = mEntranceModel->getModelData(); + for (u16 i = 0; i < modelData->getMaterialNum(); i++) { + matNodeP = modelData->getMaterialNodePointer(i); + if (matNodeP != NULL) { + matNodeP->getTevKColor(3)->a = field_0x77c; + } + } + + mDoExt_modelUpdateDL(mEntranceModel); + + if (mStartFlag == 0) { + return 1; + } + } + + if ((mActionMode == ACTION_EXECUTE_BALL_WAIT && mMoveMode < 2) || (mActionMode == ACTION_EXECUTE_DEAD_STOP && mMoveMode == 10)) { + return 1; + } + + J3DModel* model = mpModelMorf->getModel(); + + g_env_light.settingTevStruct(8, ¤t.pos, &tevStr); + g_env_light.setLightTevColorType_MAJI(model, &tevStr); + + modelData = model->getModelData(); + for (u16 i = 0; i < modelData->getMaterialNum(); i++) { + matNodeP = modelData->getMaterialNodePointer(i); + if (matNodeP != NULL) { + matNodeP->getTevColor(1)->r = (int)field_0x764[0] & 0xFF; + matNodeP->getTevColor(1)->g = (int)field_0x764[1] & 0xFF; + matNodeP->getTevColor(1)->b = (int)field_0x764[2] & 0xFF; + } + } + + mpBtkAnm->entry(model->getModelData()); + fopAcM_setEffectMtx(this, model->getModelData()); + mpModelMorf->entryDL(); + + cXyz sp68; + sp68.set(current.pos.x, current.pos.y + 10.0f, current.pos.z); + mShadowKey = dComIfGd_setShadow(mShadowKey, 0, model, &sp68, BREG_F(18) + 1200.0f, BREG_F(19) + 0.0f, + current.pos.y, mBgc.GetGroundH(), mBgc.m_gnd, + &tevStr, 0, 1.0f, dDlst_shadowControl_c::getSimpleTex()); + + return 1; +} + +/* 80829388-808293A8 000448 0020+00 1/0 0/0 0/0 .text daE_ZH_Draw__FP8daE_ZH_c */ +static int daE_ZH_Draw(daE_ZH_c* i_this) { + return i_this->draw(); +} + +/* 808293A8-80829454 000468 00AC+00 10/10 0/0 0/0 .text setBck__8daE_ZH_cFiUcff */ +void daE_ZH_c::setBck(int i_anm, u8 i_attr, f32 i_morf, f32 i_rate) { + mpModelMorf->setAnm((J3DAnmTransform*)dComIfG_getObjectRes("E_ZH", i_anm), i_attr, i_morf, + i_rate, 0.0f, -1.0f); + mAnm = i_anm; +} + +/* 80829454-80829460 000514 000C+00 14/14 0/0 0/0 .text setActionMode__8daE_ZH_cFii */ +void daE_ZH_c::setActionMode(int i_action, int i_mode) { + mActionMode = i_action; + mMoveMode = i_mode; +} + +/* 80829460-80829500 000520 00A0+00 3/3 0/0 0/0 .text s_BallSearch__FPvPv */ +static void* s_BallSearch(void* i_actor, void* i_data) { + if (fopAcM_IsActor(i_actor) && fopAcM_GetName(i_actor) == PROC_Obj_Carry && ((daObjCarry_c*)i_actor)->prm_chk_type_lightball() && + ((((daE_ZH_c*)i_data)->bitSw == 16 && ((daObjCarry_c*)i_actor)->getType() == 8) || (((daE_ZH_c*)i_data)->bitSw == 17 && ((daObjCarry_c*)i_actor)->getType() == 9))) { + return i_actor; + } + + return NULL; +} + +/* 80829500-80829570 0005C0 0070+00 2/2 0/0 0/0 .text s_BallSearch_Tag__FPvPv */ +static void* s_BallSearch_Tag(void* i_actor, void* i_data) { + if (fopAcM_IsActor(i_actor) && fopAcM_GetName(i_actor) == PROC_Obj_Carry && ((daObjCarry_c*)i_actor)->prm_chk_type_lightball()) { + return i_actor; + } + + return NULL; +} + +/* 80829570-80829658 000630 00E8+00 4/4 0/0 0/0 .text startDemoCheck__8daE_ZH_cFv */ +bool daE_ZH_c::startDemoCheck() { + camera_class* camera = dComIfGp_getCamera(dComIfGp_getPlayerCameraID(0)); + camera_class* camera2 = dComIfGp_getCamera(0); + + if (!eventInfo.checkCommandDemoAccrpt()) { + fopAcM_orderPotentialEvent(this, 2, 0xFFFF, 0); + eventInfo.onCondition(dEvtCnd_CANDEMO_e); + mDemoCamEye = camera2->lookat.eye; + mDemoCamCenter = camera2->lookat.center; + return false; + } + + camera->mCamera.Stop(); + camera->mCamera.SetTrimSize(3); + daPy_getPlayerActorClass()->changeOriginalDemo(); + return true; +} + +/* 80829658-808298BC 000718 0264+00 2/2 0/0 0/0 .text mBallBGCheck__8daE_ZH_cFv */ +void daE_ZH_c::mBallBGCheck() { + // NONMATCHING + mBallHosei.zero(); + + if (mS_Ball != NULL) { + s16 sVar1 = 0; + cXyz spa4, spb0, start; + dBgS_LinChk lin_chk; + + start.set(mS_Ball->current.pos); + start.y += 50.0f; + + for (int i = 0; i < 8; i++) { + cMtx_YrotS(*calc_mtx, sVar1); + spa4.x = 0.0f; + spa4.y = 100.0f; + spa4.z = BREG_F(10) + 180.0f; + MtxPosition(&spa4, &spb0); + field_0x6f8[i] = spb0 + mS_Ball->current.pos; + lin_chk.Set(&start, &field_0x6f8[i], this); + + if (dComIfG_Bgsp().LineCross(&lin_chk)) { + field_0x758[i] ^= 0xFF; + cMtx_YrotS(*calc_mtx, sVar1 + 0x8000); + spa4.x = 0.0f; + spa4.y = 100.0f; + spa4.z = BREG_F(10) + 180.0f; + MtxPosition(&spa4, &spb0); + + if (fabsf(mBallHosei.x) < fabsf(spb0.x)) { + mBallHosei.x = spb0.x; + } + + if (fabsf(mBallHosei.z) < fabsf(spb0.z)) { + mBallHosei.z = spb0.z; + } + } else { + field_0x758[i] = 0xFF; + } + + if (i != 3) { + sVar1 += 0x4000; + } else if (i == 3) { + if (mBallHosei.x || mBallHosei.z) { + return; + } + + sVar1 = 0x2000; + } + } + } +} + +/* 808298BC-808299F8 00097C 013C+00 3/3 0/0 0/0 .text mGateOpen__8daE_ZH_cFv */ +void daE_ZH_c::mGateOpen() { + // NONMATCHING + switch (field_0x794[2]) { + case 0: + field_0x77c = 0.0f; + mSound.startCreatureSound(Z2SE_EN_ZH_MV_WALL, 0, -1); + field_0x794[2]++; + // fallthrough + case 1: + cLib_addCalc2(&field_0x77c, 255.0f, NREG_F(4) + 0.5f, NREG_F(5) + 10.0f); + break; + + case 2: + field_0x7a4 += NREG_F(6) + 5.0f; + cLib_addCalc2(&field_0x77c, NREG_F(7) + 80.0f + (cM_ssin((s16)(field_0x7a4 << 8)) * 40.0f), NREG_F(4) + 0.5f, NREG_F(5) + 10.0f); + break; + + case 3: + cLib_addCalc0(&field_0x77c, NREG_F(4) + 0.5f, NREG_F(5) + 10.0f); + break; + } +} + +/* 808299F8-80829AD8 000AB8 00E0+00 4/4 0/0 0/0 .text mColorSet__8daE_ZH_cFbff */ +bool daE_ZH_c::mColorSet(bool param_1, f32 param_2, f32 param_3) { + bool rv; + + if (!param_1) { + cLib_addCalc0(&field_0x764[0], 0.8f, param_2); + cLib_addCalc0(&field_0x764[2], 0.8f, param_3); + + return field_0x764[0] < 1.0f; + } + + cLib_addCalc2(&field_0x764[0], 255.0f, 0.8f, param_2); + cLib_addCalc2(&field_0x764[2], 50.0f, 0.8f, param_3); + + if (field_0x764[0] > 253.0f) { + field_0x764[0] = 255.0f; + field_0x764[2] = 50.0f; + return true; + } + + return false; +} + +/* 80829AD8-80829E44 000B98 036C+00 2/2 0/0 0/0 .text mReturnLineMove__8daE_ZH_cFv */ +bool daE_ZH_c::mReturnLineMove() { + // NONMATCHING + if (mS_Ball == NULL) { + setActionMode(ACTION_EXECUTE_FLY_DELETE, 0); + return false; + } + + static cXyz mRoomLine_dt[6] = { + cXyz(-3950.0f, -500.0f, 7612.0f), + cXyz(-3950.0f, -725.0f, 253.0f), + cXyz(3950.0f, -500.0f, 7442.0f), + cXyz(3950.0f, -725.0f, 352.0f), + cXyz(3950.0f, -725.0f, 352.0f), + cXyz(3950.0f, -725.0f, 352.0f), + }; + + u32 uVar1 = 0; + cXyz sp2c; + + switch (fopAcM_GetRoomNo(this)) { + case 1: + break; + + case 2: + uVar1 = 1; + break; + + case 4: + uVar1 = 2; + break; + + case 5: + uVar1 = 3; + break; + + } + + if (arg0 == 0) { + mRetrunEndLine.set(home.pos); + mRetrunStartLine.set(0.0f, 0.0f, -800.0f); + } else { + mRetrunEndLine.set(mRoomLine_dt[uVar1]); + mRetrunEndLine.z = mRoomLine_dt[uVar1 ^ 1].z; + mRetrunStartLine.set(mRoomLine_dt[uVar1]); + } + + mRetrunStartLine.y = current.pos.y; + cLib_addCalc2(¤t.pos.x, mRetrunStartLine.x, 0.7f, 5.0f); + sp2c = mRetrunStartLine - current.pos; + sp2c.z = 0.0f; + cLib_addCalcAngleS2(&mRollAngle, 0x400, 8, 0x40); + cLib_addCalcAngleS2(¤t.angle.y, (s16)sp2c.atan2sX_Z(), 8, mRollAngle); + cLib_addCalcAngleS2(&shape_angle.y, current.angle.y, 8, mRollAngle); + + if (fabsf(current.pos.x - mRetrunStartLine.x) < 20.0f) { + return true; + } + + return false; +} + +/* 80829E44-8082A01C 000F04 01D8+00 2/2 0/0 0/0 .text mBallBgLineCheck__8daE_ZH_cFv */ +bool daE_ZH_c::mBallBgLineCheck() { + dBgS_LinChk lin_chk; + cXyz sp9c, end; + s16 sVar1 = end.atan2sX_Z(); + s16 sVar2 = 0; + int iVar1 = 0; + + for (int i = 0; i < 3; i++) { + cMtx_YrotS(*calc_mtx, sVar1 + sVar2); + sp9c.x = 0.0f; + sp9c.y = 100.0f; + sp9c.z = BREG_F(12) + 170.0f; + MtxPosition(&sp9c, &field_0x6c8[i]); + field_0x6c8[i] += current.pos; + end.set(current.pos); + + if (mS_Ball != NULL) { + end = mS_Ball->current.pos + mBallHosei; + } + + end.y += 100.0f; + lin_chk.Set(&field_0x6c8[i], &end, this); + field_0x6ec[iVar1] = 0; + + if (dComIfG_Bgsp().LineCross(&lin_chk)) { + field_0x6ec[iVar1] = 1; + iVar1++; + } + + if (i != 0) { + sVar2 = -0x4000; + } else { + sVar2 = 0x4000; + } + } + + if (iVar1 != 0) { + return true; + } + + return false; +} + +/* 8082A01C-8082A390 0010DC 0374+00 2/2 0/0 0/0 .text mSearchMove__8daE_ZH_cFUc */ +bool daE_ZH_c::mSearchMove(u8 param_1) { + if (mS_Ball == NULL) { + setActionMode(ACTION_EXECUTE_FLY_DELETE, 0); + return NULL; + } + + cXyz sp50, sp5c; + bool rv = false; + + mBallBGCheck(); + + if (param_1 != 0 || (!mBallHosei.x && !mBallHosei.z)) { + cMtx_YrotS(*calc_mtx, current.angle.y); + sp50.x = 0.0f; + sp50.y = 0.0f; + sp50.z = field_0x774; + MtxPosition(&sp50, &sp5c); + + if (param_1 == 0) { + sp5c += mS_Ball->current.pos; + + if (mBgc.GetGroundH() != -1000000000.0f && mBgc.GetGroundH() > mS_Ball->current.pos.y) { + sp5c.y = mBgc.GetGroundH(); + } + } else { + sp5c += home.pos; + + if (param_1 == 2) { + sp5c.y -= 600.0f; + } + } + } else if (mBallHosei.x || mBallHosei.z) { + sp5c = mS_Ball->current.pos + mBallHosei; + } + + sp5c.y = current.pos.y; + f32 suu = cLib_addCalcPos(¤t.pos, sp5c, 0.7f, 5.0f, 1.0f); + sp50 = sp5c - current.pos; + cLib_addCalcAngleS2(&mRollAngle, BREG_S(5) + 0x400, 8, BREG_S(6) + 0x40); + + if (mBallHosei.x || mBallHosei.z) { + field_0x7af = 1; + } else { + field_0x7af = 0; + } + + s16 angle; + if (param_1 == 0) { + angle = fopAcM_searchActorAngleY(this, mS_Ball); + Z2GetAudioMgr()->changeBgmStatus(suu + 100.0f); + } else { + angle = (s16)sp50.atan2sX_Z(); + Z2GetAudioMgr()->changeBgmStatus(99); + } + + cLib_addCalcAngleS2(&shape_angle.y, angle, 8, mRollAngle); + current.angle.y = shape_angle.y; + + if (NREG_S(0) != 0) { + OS_REPORT("suu %f\n", suu); + OS_REPORT("angle %x\n", angle); + OS_REPORT("mRollAngle %x\n", mRollAngle); + OS_REPORT("mBallHosei.x %f\n", mBallHosei.x); + OS_REPORT("mBallHosei.z %f\n", mBallHosei.z); + OS_REPORT("アングル %x\n", abs((s16)(shape_angle.y - angle))); // Angle %x\n + OS_REPORT("\n"); + } + + if (param_1 != 1) { + if (suu <= BREG_F(13) + 8.0f && abs((s16)(shape_angle.y - angle)) < 0x1000) { + rv = true; + } + } else if (suu <= BREG_F(14) + 100.0f && abs((s16)(shape_angle.y - angle)) < 0x2000) { + rv = true; + } + + if (mBallBgLineCheck()) { + if (mBgc.ChkWallHit() && mActionMode != ACTION_EXECUTE_CATCH_FLY_MOVE) { + mRollAngle = 0; + setActionMode(ACTION_EXECUTE_BG_HIT_SH_MOVE, 0); + rv = false; + } + } else if (mBgc.ChkWallHit() && suu <= BREG_F(15) + 170.0f) { + field_0x7af = 1; + rv = true; + } + + return rv; +} + +struct eff_dt { + /* 0x0 */ u16 field_0x0; + /* 0x2 */ s16 field_0x2; + /* 0x4 */ int field_0x4; }; -/* 8082F55C-8082F5A0 -00001 0044+00 1/1 0/0 0/0 .data @4883 */ -SECTION_DATA static void* lit_4883[17] = { - (void*)(((char*)executeOpenStart__8daE_ZH_cFv) + 0x6C), - (void*)(((char*)executeOpenStart__8daE_ZH_cFv) + 0xDC), - (void*)(((char*)executeOpenStart__8daE_ZH_cFv) + 0x1D8), - (void*)(((char*)executeOpenStart__8daE_ZH_cFv) + 0x214), - (void*)(((char*)executeOpenStart__8daE_ZH_cFv) + 0x584), - (void*)(((char*)executeOpenStart__8daE_ZH_cFv) + 0x584), - (void*)(((char*)executeOpenStart__8daE_ZH_cFv) + 0x584), - (void*)(((char*)executeOpenStart__8daE_ZH_cFv) + 0x584), - (void*)(((char*)executeOpenStart__8daE_ZH_cFv) + 0x584), - (void*)(((char*)executeOpenStart__8daE_ZH_cFv) + 0x584), - (void*)(((char*)executeOpenStart__8daE_ZH_cFv) + 0x258), - (void*)(((char*)executeOpenStart__8daE_ZH_cFv) + 0x2D4), - (void*)(((char*)executeOpenStart__8daE_ZH_cFv) + 0x368), - (void*)(((char*)executeOpenStart__8daE_ZH_cFv) + 0x398), - (void*)(((char*)executeOpenStart__8daE_ZH_cFv) + 0x4AC), - (void*)(((char*)executeOpenStart__8daE_ZH_cFv) + 0x4CC), - (void*)(((char*)executeOpenStart__8daE_ZH_cFv) + 0x550), -}; +/* 8082A390-8082A4C8 001450 0138+00 1/1 0/0 0/0 .text mStartParticleSet__8daE_ZH_cFv */ +void daE_ZH_c::mStartParticleSet() { + static eff_dt const START_EFF_DT[11] = { + {ZL2_HAHEN_1, 0, 7}, {ZL2_SMOKE00_1, 0, 7}, {ZL2_HAHEN_2, 0, 9}, {ZL2_SMOKE00_2, 0, 9}, + {ZL2_HAHEN_3, 0, 16}, {ZL2_SMOKE00_3, 0, 16}, {ZL2_HAHEN_4, 0, 4}, {ZL2_SMOKE00_4, 0, 4}, + {ZL2_SMOKE00_5, 0, 5}, {ZL2_HAHEN_5, 0, 5}, {ZL2_SMOKE00_6, 0, 5}, + }; -/* 8082F5A0-8082F5A8 000180 0008+00 1/1 0/0 0/0 .data effId$5059 */ -SECTION_DATA static u8 effId[8] = { - 0x8A, 0x6D, 0x8A, 0x6E, 0x8A, 0x6F, 0x8A, 0x70, -}; + for (int i = 0; i < 11; i++) { + JPABaseEmitter* emitter = dComIfGp_particle_set(START_EFF_DT[i].field_0x0, ¤t.pos, NULL, NULL); + if (emitter != NULL) { + emitter->setGlobalSRTMatrix(mpModelMorf->getModel()->getAnmMtx(START_EFF_DT[i].field_0x4)); + } + } -/* 8082F5A8-8082F5DC -00001 0034+00 1/1 0/0 0/0 .data @5390 */ -SECTION_DATA static void* lit_5390[13] = { - (void*)(((char*)executeCatchFlyMove__8daE_ZH_cFv) + 0x150), - (void*)(((char*)executeCatchFlyMove__8daE_ZH_cFv) + 0x1A8), - (void*)(((char*)executeCatchFlyMove__8daE_ZH_cFv) + 0x214), - (void*)(((char*)executeCatchFlyMove__8daE_ZH_cFv) + 0x23C), - (void*)(((char*)executeCatchFlyMove__8daE_ZH_cFv) + 0x288), - (void*)(((char*)executeCatchFlyMove__8daE_ZH_cFv) + 0x3A8), - (void*)(((char*)executeCatchFlyMove__8daE_ZH_cFv) + 0x690), - (void*)(((char*)executeCatchFlyMove__8daE_ZH_cFv) + 0x690), - (void*)(((char*)executeCatchFlyMove__8daE_ZH_cFv) + 0x690), - (void*)(((char*)executeCatchFlyMove__8daE_ZH_cFv) + 0x690), - (void*)(((char*)executeCatchFlyMove__8daE_ZH_cFv) + 0x504), - (void*)(((char*)executeCatchFlyMove__8daE_ZH_cFv) + 0x528), - (void*)(((char*)executeCatchFlyMove__8daE_ZH_cFv) + 0x3D4), -}; + fopAcM_OnStatus(this, 0); + attention_info.flags |= 4; + mSound.startCreatureSound(Z2SE_EN_ZH_START, 0, -1); + setBck(BCK_ZH_START, 0, 3.0f, 1.0f); +} -/* 8082F5DC-8082F60C -00001 0030+00 1/1 0/0 0/0 .data @5782 */ -SECTION_DATA static void* lit_5782[12] = { - (void*)(((char*)action__8daE_ZH_cFv) + 0xA8), (void*)(((char*)action__8daE_ZH_cFv) + 0xB4), - (void*)(((char*)action__8daE_ZH_cFv) + 0xC0), (void*)(((char*)action__8daE_ZH_cFv) + 0xCC), - (void*)(((char*)action__8daE_ZH_cFv) + 0xD8), (void*)(((char*)action__8daE_ZH_cFv) + 0xE4), - (void*)(((char*)action__8daE_ZH_cFv) + 0xF0), (void*)(((char*)action__8daE_ZH_cFv) + 0xFC), - (void*)(((char*)action__8daE_ZH_cFv) + 0x108), (void*)(((char*)action__8daE_ZH_cFv) + 0x114), - (void*)(((char*)action__8daE_ZH_cFv) + 0x120), (void*)(((char*)action__8daE_ZH_cFv) + 0x12C), -}; +/* 8082A4C8-8082A534 001588 006C+00 1/1 0/0 0/0 .text mCutTypeCheck__8daE_ZH_cFv */ +bool daE_ZH_c::mCutTypeCheck() { + daPy_py_c* player = (daPy_py_c*)dComIfGp_getPlayer(0); + + if (player->getCutType() == daPy_py_c::CUT_TYPE_LARGE_JUMP || player->getCutType() == daPy_py_c::CUT_TYPE_LARGE_JUMP_FINISH || + player->getCutType() == daPy_py_c::CUT_TYPE_LARGE_TURN_LEFT || player->getCutType() == daPy_py_c::CUT_TYPE_LARGE_TURN_RIGHT || + player->getCutType() == daPy_py_c::CUT_TYPE_MORTAL_DRAW_A || player->getCutType() == daPy_py_c::CUT_TYPE_MORTAL_DRAW_B) { + return true; + } + + if (player->getCutType() == daPy_py_c::CUT_TYPE_HEAD_JUMP || player->getCutType() == daPy_py_c::CUT_TYPE_TWIRL) { + return true; + } + + return false; +} + +/* 8082A534-8082A88C 0015F4 0358+00 1/1 0/0 0/0 .text damage_check__8daE_ZH_cFv */ +void daE_ZH_c::damage_check() { + if (field_0x7a8 != 0 || mActionMode == ACTION_EXECUTE_BALL_WAIT || mActionMode == ACTION_EXECUTE_RETURN_DEMO) { + return; + } + + if ((l_HIO.dungeon_bit_check == 0 && strcmp(dComIfGp_getStartStageName(), "T_ENE02") != 0 && + ((bitSw == 16 && !fopAcM_isSwitch(this, 20)) || (bitSw == 17 && !fopAcM_isSwitch(this, 21))))) { + return; + } + + if (field_0xa08.ChkTgHit() || field_0xb40.ChkTgHit()) { + csXyz local_28; + cXyz sp20; + + field_0x7a8 = 8; + + if (field_0xa08.ChkTgHit()) { + mAtInfo.mpCollider = field_0xa08.GetTgHitObj(); + sp20.set(*field_0xa08.GetTgHitPosP()); + } else { + mAtInfo.mpCollider = field_0xb40.GetTgHitObj(); + sp20.set(*field_0xb40.GetTgHitPosP()); + } + + local_28.x = 0; + local_28.y = sp20.atan2sX_Z(); + local_28.z = 0; + + if (mActionMode != ACTION_EXECUTE_DEAD_STOP && mActionMode != ACTION_EXECUTE_DAMAGE && mActionMode != ACTION_EXECUTE_OPEN_START && + !mAtInfo.mpCollider->ChkAtType(AT_TYPE_SLINGSHOT) && mAnm != BCK_ZH_OPEN && mAnm != BCK_ZH_START) { + dComIfGp_setHitMark(1, this, &sp20, &local_28, NULL, 0); + cc_at_check(this, &mAtInfo); + health = 1000; + field_0x560 = 1000; + field_0xa08.ClrTgHit(); + field_0xb40.ClrTgHit(); + + if (mActionMode == ACTION_EXECUTE_WAIT) { + setActionMode(ACTION_EXECUTE_OPEN_START, 0); + } else { + if (mCutTypeCheck()) { + field_0x78c = 2; + } + + dComIfGs_offOneZoneSwitch(5, fopAcM_GetRoomNo(this)); + + if (mS_Ball != NULL) { + mS_Ball->offCarryHookOK(); + } + + setActionMode(ACTION_EXECUTE_DAMAGE, 0); + } + } else { + dCcD_GObjInf* tgHitObj; + if (!field_0xa08.ChkTgHit()) { + tgHitObj = (dCcD_GObjInf*)field_0xb40.GetTgHitObj(); + } else { + tgHitObj = (dCcD_GObjInf*)field_0xa08.GetTgHitObj(); + } + + dComIfGp_setHitMark(2, this, &sp20, &local_28, NULL, 0); + + if (!mAtInfo.mpCollider->ChkAtType(AT_TYPE_SLINGSHOT)) { + mSound.startCollisionSE(tgHitObj->getHitSeID(tgHitObj->GetAtSe(), 0), 0x28); + } else { + mSound.startCollisionSE(Z2SE_HIT_PACHINKO, 0x2D); + } + } + } + + mStts.Move(); +} + +/* 8082A88C-8082ABDC 00194C 0350+00 1/1 0/0 0/0 .text executeStartDemo__8daE_ZH_cFv */ +void daE_ZH_c::executeStartDemo() { + camera_class* camera = dComIfGp_getCamera(dComIfGp_getPlayerCameraID(0)); + cXyz sp48; + f32 fVar1, fVar2; + + switch (mMoveMode) { + case 0: + if (startDemoCheck()) { + dComIfGp_getEvent().startCheckSkipEdge(this); + mDemoCamCenter.set(-30.0f, 650.0f, 1955.0f); + mDemoCamEye.set(-25.0f, 720.0f, 2330.0f); + field_0x794[0] = 60; + mMoveMode++; + } + break; + + case 1: + if (field_0x794[0] != 0) { + if (field_0x794[0] == 30) { + mDemoCamCenter.set(-25.0f, 435.0f, -3355.0f); + mDemoCamEye.set(-30.0f, 505.0f, -3140.0f); + } + break; + } + + sp48.set(-10.0f, 280.0f, -3835.0f); + fVar1 = cLib_addCalcPos(&mDemoCamCenter, sp48, 0.7f, ZREG_F(10) + 10.0f, ZREG_F(11) + 2.0f); + sp48.set(-15.0f, 350.0f, -3620.0f); + fVar2 = cLib_addCalcPos(&mDemoCamEye, sp48, 0.7f, ZREG_F(10) + 10.0f, ZREG_F(11) + 2.0f); + + if (fVar1 > 4.0f || fVar2 > 4.0f) { + break; + } + + field_0x794[0] = 30; + mMoveMode++; + // fallthrough + case 2: + if (field_0x794[0] == 0) { + mDemoCamCenter.set(-5.0f, 590.0f, 2130.0f); + mDemoCamEye.set(-10.0f, 680.0f, 2340.0f); + camera->mCamera.Reset(mDemoCamCenter, mDemoCamEye); + camera->mCamera.Start(); + camera->mCamera.SetTrimSize(0); + dComIfGp_event_reset(); + fopAcM_onSwitch(this, 0x12); + fopAcM_OffStatus(this , fopAcM_STATUS_UNK_004000); + setActionMode(ACTION_EXECUTE_WAIT, 1); + } + break; + } + + if (mMoveMode != 0 && mActionMode != ACTION_EXECUTE_WAIT) { + if (dComIfGp_getEvent().checkSkipEdge()) { + fopAcM_onSwitch(this, 0x12); + dStage_changeScene(2, 0.0f, 0, fopAcM_GetRoomNo(this), 0, -1); + } + } + + if (mMoveMode != 0) { + camera->mCamera.Set(mDemoCamCenter, mDemoCamEye); + } +} + +/* 8082ABDC-8082ACA8 001C9C 00CC+00 1/1 0/0 0/0 .text executeWait__8daE_ZH_cFv */ +void daE_ZH_c::executeWait() { + if (mS_Ball != NULL) { + mS_Ball->current.pos.set(field_0x668); + } + + switch (mMoveMode) { + case 0: + attention_info.distances[2] = 3; + fopAcM_OnStatus(this, 0); + attention_info.flags |= 4; + setBck(BCK_ZH_WAIT01, 0, 3.0f, 1.0f); + field_0x78c = 0; + mMoveMode = 1; + break; + + case 1: + break; + } + + cLib_addCalcPos(¤t.pos, home.pos, 0.7f, 5.0f, 1.0f); +} + +/* 8082ACA8-8082B284 001D68 05DC+00 2/1 0/0 0/0 .text executeBallWait__8daE_ZH_cFv */ +void daE_ZH_c::executeBallWait() { + dBgS_LinChk lin_chk; + camera_class* camera = dComIfGp_getCamera(dComIfGp_getPlayerCameraID(0)); + cXyz spa4, spb0; + + switch (mMoveMode) { + case 0: + cMtx_YrotS(*calc_mtx, shape_angle.y); + spa4.x = 0.0f; + spa4.y = 0.0f; + spa4.z = WREG_F(1) + 2000.0f; + MtxPosition(&spa4, &spb0); + field_0x680 = spb0 + current.pos; + lin_chk.onBackFlag(); + lin_chk.Set(¤t.pos, &field_0x680, this); + + if (dComIfG_Bgsp().LineCross(&lin_chk)) { + cMtx_YrotS(*calc_mtx, shape_angle.y); + spa4.x = 0.0f; + spa4.y = 0.0f; + spa4.z = WREG_F(2) + 5.0f; + MtxPosition(&spa4, &spb0); + field_0x68c = lin_chk.GetCross() + spb0; + + cMtx_YrotS(*calc_mtx, shape_angle.y); + spa4.x = 0.0f; + spa4.y = 0.0f; + spa4.z = -(WREG_F(3) + 300.0f); + MtxPosition(&spa4, &spb0); + current.pos = lin_chk.GetCross() + spb0; + home.pos.x = current.pos.x; + home.pos.z = current.pos.z; + } + + setBck(BCK_ZH_SERCH, 2, 20.0f, 1.0f); + mMoveMode++; + break; + + case 1: + if (bitSw != 0xFF && fopAcM_isSwitch(this, bitSw) && mStartFlag != 0) { + fopAcM_OnStatus(this, 0); + attention_info.flags |= 4; + attention_info.distances[2] = 3; + mMoveMode = 10; + } + break; + + case 2: + mGateOpen(); + mSound.startCreatureSoundLevel(Z2SE_EN_ZH_MV, 0, -1); + + if (field_0x77c < 254.0f) break; + + mMoveMode = 20; + break; + + case 10: + if (!startDemoCheck()) break; + + field_0x794[0] = 20; + mMoveMode++; + // fallthrough + case 11: + mSound.startCreatureSoundLevel(Z2SE_EN_ZH_MV, 0, -1); + + if (field_0x794[0] != 0 || field_0x77c < 254.0f) { + break; + } + + dCam_getBody()->StartBlure(100, this, 0.8f, 1.4f); + dComIfGp_getEvent().startCheckSkipEdge(this); + mMoveMode++; + // fallthrough + case 12: + if (dComIfGp_getEvent().checkSkipEdge()) { + dCam_getBody()->ResetBlure(); + field_0x794[2] = 2; + camera->mCamera.Start(); + camera->mCamera.SetTrimSize(0); + dComIfGp_event_reset(); + mMoveMode = 20; + } + // fallthrough + case 20: + mSound.startCreatureSoundLevel(Z2SE_EN_ZH_MV, 0, -1); + cMtx_YrotS(*calc_mtx, shape_angle.y); + spa4.x = 0.0f; + spa4.y = 0.0f; + spa4.z = WREG_F(3) + 200.0f; + MtxPosition(&spa4, &spb0); + spb0 += field_0x68c; + + if (cLib_addCalcPos(¤t.pos, spb0, 0.8f, WREG_F(4) + 3.0f, WREG_F(5) + 1.0f) <= WREG_F(6) + 20.0f) { + if (mMoveMode == 20) { + field_0x794[2] = 2; + setActionMode(ACTION_EXECUTE_SEARCH_MOVE, 0); + } else { + field_0x794[2] = 2; + camera->mCamera.Start(); + camera->mCamera.SetTrimSize(0); + dComIfGp_event_reset(); + setActionMode(ACTION_EXECUTE_SEARCH_MOVE, 0); + } + } + break; + } + + if (mMoveMode >= 11 && mMoveMode <= 12 || mMoveMode == 20) { + mGateOpen(); + } + + if (mMoveMode == 11) { + cMtx_YrotS(*calc_mtx, shape_angle.y); + spa4.x = ZREG_F(0); + spa4.y = ZREG_F(1) + 20.0f; + spa4.z = ZREG_F(2); + MtxPosition(&spa4, &spb0); + spb0 += field_0x68c; + mDemoCamCenter.set(spb0); + + cMtx_YrotS(*calc_mtx, shape_angle.y); + spa4.x = ZREG_F(3) + -200.0f; + spa4.y = ZREG_F(4) + -200.0f; + spa4.z = ZREG_F(5) + 600.0f; + MtxPosition(&spa4, &spb0); + spb0 += field_0x68c; + mDemoCamEye.set(spb0); + + camera->mCamera.Set(mDemoCamCenter, mDemoCamEye, 62.0f, 0); + } +} + +/* 8082B284-8082B820 002344 059C+00 2/1 0/0 0/0 .text executeOpenStart__8daE_ZH_cFv */ +void daE_ZH_c::executeOpenStart() { + camera_class* camera = dComIfGp_getCamera(dComIfGp_getPlayerCameraID(0)); + cXyz sp28, sp34; + + field_0xb40.OnCoSPrmBit(0x40); + + switch (mMoveMode) { + case 0: + setBck(BCK_ZH_OPEN, 0, 3.0f, 1.0f); + + if (mS_Ball != NULL) { + fopAcM_cancelCarryNow(mS_Ball); + + if (bitSw != 0xFF) { + fopAcM_onSwitch(this, bitSw); + } + } else { + setActionMode(ACTION_EXECUTE_FLY_DELETE, 0); + break; + } + + field_0x794[0] = BREG_S(8) + 6 & 0xFF; + mMoveMode = 1; + break; + + case 1: + if (!mpModelMorf->isStop()) { + if (field_0x794[0] != 0) { + mColorSet(true, 42.5f, 8.333333f); + break; + } + + mColorSet(false, 42.5f, 8.333333f); + break; + } + + if (mStartFlag == 0 && ((fopAcM_GetRoomNo(this) == 51 && !fopAcM_isSwitch(this, 0x5A)) || fopAcM_GetRoomNo(this) == 52 && !fopAcM_isSwitch(this, 0x5B))) { + mMoveMode = 10; + break; + } + + field_0x794[0] = l_HIO.wait_time & 0xFF; + mMoveMode = 2; + // fallthrough + case 2: + if (field_0x794[0] == 0 && mColorSet(true, 10.0f, 10.0f)) { + mStartParticleSet(); + mMoveMode = 3; + } + break; + + case 3: + if (mpModelMorf->isStop()) { + setActionMode(ACTION_EXECUTE_SEARCH_MOVE, 0); + } + break; + + case 10: + if (mStartFlag == 0) { + break; + } + + if (!startDemoCheck()) { + break; + } + + if (fopAcM_GetRoomNo(this) == 51) { + fopAcM_onSwitch(this, 0x5A); + } else { + fopAcM_onSwitch(this, 0x5B); + } + + mStartFlag = 2; + field_0x794[0] = 20; + mMoveMode++; + // fallthrough + case 11: + mDemoCamCenter.set(-60.0f, 180.0f, -3875.0f); + mDemoCamEye.set(-250.0f, 50.0f, -3515.0f); + camera->mCamera.Set(mDemoCamCenter, mDemoCamEye, 40.0f, 0); + + if (field_0x794[0] == 0) { + mMoveMode++; + } + break; + + case 12: + if (mColorSet(true, 10.0f, 10.0f)) { + mStartParticleSet(); + mMoveMode++; + } + break; + + case 13: + if ((int)mpModelMorf->getFrame() < 84) { + break; + } + + if ((int)mpModelMorf->getFrame() == 84) { + dCam_getBody()->StartBlure(50, this, 0.8f, 1.2f); + } + + mDemoCamCenter.set(-60.0f, 180.0f, -3875.0f); + sp34.set(-280.0f, 30.0f, -3460.0f); + cLib_addCalcPos(&mDemoCamEye, sp34, 0.7f, 30.0f, 10.0f); + camera->mCamera.Set(mDemoCamCenter, mDemoCamEye, 40.0f, 0); + + if (!mpModelMorf->isStop()) { + break; + } + + #ifdef DEBUG + if (ZREG_S(0) == 0) { + break; + } + #endif + + field_0x794[0] = 20; + mMoveMode++; + // fallthrough + case 14: + if (field_0x794[0] != 0) { + break; + } + + field_0x794[0] = 50; + mMoveMode++; + // fallthrough + case 15: + sp34.y = mS_Ball->current.pos.y + 600.0f; + if (mBgc.GetGroundH() != -1000000000.0f) { + sp34.y = mBgc.GetGroundH() + 600.0f; + } + + cLib_addCalc2(¤t.pos.y, sp34.y, 0.7f, 10.0f); + mSound.startCreatureSoundLevel(Z2SE_EN_ZH_MV, 0, -1); + + if (field_0x794[0] != 0) { + break; + } + + mMoveMode++; + // fallthrough + case 16: + camera->mCamera.Start(); + camera->mCamera.SetTrimSize(0); + dComIfGp_event_reset(); + setActionMode(ACTION_EXECUTE_SEARCH_MOVE, 0); + break; + } +} + +/* 8082B820-8082BA18 0028E0 01F8+00 1/1 0/0 0/0 .text executeSearchMove__8daE_ZH_cFv */ +void daE_ZH_c::executeSearchMove() { + if (mS_Ball == NULL) { + setActionMode(ACTION_EXECUTE_FLY_DELETE, 0); + return; + } + + cXyz ato; + + ato.y = mS_Ball->current.pos.y + 600.0f; + + if (mBgc.GetGroundH() != -1000000000.0f && mBgc.GetGroundH() + 500.0f > ato.y) { + ato.y = mBgc.GetGroundH() + 500.0f; + } + + if (mBgc.GetRoofHeight() != 1000000000.0f && ato.y > mBgc.GetRoofHeight()) { + ato.y = mBgc.GetRoofHeight() - 150.0f; + } + + switch (mMoveMode) { + case 0: + cLib_addCalc2(¤t.pos.y, ato.y, 0.7f, 10.0f); + + if (XREG_S(0) != 0) { + OS_REPORT("mBgc.GetRoofHeight() %f\n", mBgc.GetRoofHeight()); + OS_REPORT("ato.y %f\n", ato.y); + OS_REPORT("mBgc.ChkRoofHit() %d\n", mBgc.ChkRoofHit()); + } + + if (fabsf(current.pos.y - ato.y) < 50.0f || mBgc.ChkRoofHit()) { + if (mAnm != BCK_ZH_SERCH) { + setBck(BCK_ZH_SERCH, 2, 20.0f, 1.0f); + field_0x794[0] = 20; + } + + mRollAngle = 0; + field_0xb40.OffCoSPrmBit(0x40); + field_0x774 = BREG_F(5) + -150.0f; + mMoveMode = 1; + } + break; + + case 1: + if (fabsf(current.pos.y - ato.y) > 20.0f) { + cLib_addCalc2(¤t.pos.y, ato.y, 0.7f, 10.0f); + } + break; + } + + mSound.startCreatureSoundLevel(Z2SE_EN_ZH_MV, 0, -1); + + if (mMoveMode != 0 && field_0x794[0] == 0 && mSearchMove(0)) { + setActionMode(ACTION_EXECUTE_CATCH_MOVE, 0); + } +} + +/* 8082BA18-8082BE20 002AD8 0408+00 1/1 0/0 0/0 .text executeBgHitSHMove__8daE_ZH_cFv */ +void daE_ZH_c::executeBgHitSHMove() { + if (mS_Ball == NULL) { + setActionMode(ACTION_EXECUTE_FLY_DELETE, 0); + return; + } + + dBgS_LinChk lin_chk; + cXyz spa8, spb4, spc0; + + mBallBGCheck(); + + if (NREG_S(0) != 0) { + OS_REPORT("mRetrunStartLine.x %f\n", mRetrunStartLine.x); + OS_REPORT("mRetrunEndLine.x %f\n". mRetrunEndLine.x); + OS_REPORT("mRetrunStartLine.z %f\n", mRetrunStartLine.z); + OS_REPORT("mRetrunEndLine.z %f\n", mRetrunEndLine.z); + OS_REPORT("\n"); + } + + switch (mMoveMode) { + case 0: + field_0x6bc.zero(); + + if (!mReturnLineMove()) break; + + field_0x6bc.set(current.pos); + mMoveMode++; + // fallthrough + case 1: + field_0x794[0] = cM_rndF(100.0f) + 100.0f; + spa8 = field_0x6bc - current.pos; + + if (spa8.abs() < l_HIO.wandering_area) { + field_0x7b2 = shape_angle.y + cM_rndFX(16384.0f); + } else { + field_0x794[0] = 20; + field_0x7b2 = spa8.atan2sX_Z(); + } + + cMtx_YrotS(*calc_mtx, field_0x7b2); + spb4.x = 0.0f; + spb4.y = 0.0f; + spb4.z = l_HIO.wandering_area - 50.0f; + MtxPosition(&spb4, &spc0); + spc0 += field_0x6bc; + spb4 = spc0 - current.pos; + field_0x7b2 = spb4.atan2sX_Z(); + mRollAngle = 0; + mMoveMode++; + // fallthrough + case 2: + if (field_0x794[0] == 0) { + mMoveMode = 1; + } else { + cLib_addCalcAngleS2(&mRollAngle, 0x400, 8, 0x40); + cLib_addCalcAngleS2(¤t.angle.y, field_0x7b2, 8, mRollAngle); + cLib_addCalcAngleS2(&shape_angle.y, current.angle.y, 8, mRollAngle); + + if (abs((s16)(shape_angle.y - field_0x7b2)) <= 0x200) { + cMtx_YrotS(*calc_mtx, shape_angle.y); + spb4.x = 0.0f; + spb4.y = 0.0f; + spb4.z = l_HIO.wandering_area - 50.0f; + MtxPosition(&spb4, &spc0); + spc0 += field_0x6bc; + cLib_addCalcPos(¤t.pos, spc0, 0.7f, 5.0f, 1.0f); + } + } + break; + } + + if (!mBallBgLineCheck()) { + setActionMode(ACTION_EXECUTE_SEARCH_MOVE, 0); + } +} + +/* 8082BE20-8082C670 002EE0 0850+00 1/1 0/0 0/0 .text executeCatchMove__8daE_ZH_cFv */ +void daE_ZH_c::executeCatchMove() { + if (mS_Ball == NULL) { + setActionMode(ACTION_EXECUTE_FLY_DELETE, 0); + return; + } + + cXyz sp3c, sp48; + f32 fVar1 = 150.0f; + + sp48 = mS_Ball->current.pos - current.pos; + sp48.y = 0.0f; + f32 fVar2 = sp48.abs(); + Z2GetAudioMgr()->changeBgmStatus(fVar2 + 100.0f); + + switch (mMoveMode) { + case 0: + field_0x794[0] = (int)JREG_S(1) + 11 & 0xFF; + field_0x794[1] = (int)JREG_S(1) + 11 & 0xFF; + field_0x7ad = (int)JREG_S(1) + 11; + setBck(BCK_ZH_ACT01, 0, 3.0f, 1.0f); + mSound.startCreatureSound(Z2SE_EN_ZH_ATK_PRE, 0, -1); + mMoveMode++; + break; + + case 1: + if (!mpModelMorf->isStop()) { + if (field_0x794[0] != 0) { + mColorSet(false, 31.875f, 6.25f); + + if (field_0x794[0] == 1) { + field_0x794[1] = field_0x7ad; + } + } else if (field_0x794[1] != 0) { + mColorSet(true, 31.875f, 6.25f); + if (field_0x794[1] == 1) { + field_0x7ad -= 2; + + if (field_0x7ad < 2) { + field_0x7ad = 2; + } + + field_0x794[0] = field_0x7ad; + } + } + } else { + field_0x764[0] = 255.0f; + field_0x764[2] = 50.0f; + field_0x760 = 40.0f; + setBck(BCK_ZH_CATCH01, 0, 3.0f, 1.0f); + mSound.startCreatureSound(Z2SE_EN_ZH_ATK, 0, -1); + mMoveMode++; + } + break; + + case 2: + gravity = -5.0f; + if (mBgc.GetGroundH() + 100.0f > current.pos.y) { + mMoveMode++; + } + break; + + case 3: + if (mAnm == BCK_ZH_CATCH02) { + Z2GetAudioMgr()->changeBgmStatus(99); + } + + if (mBgc.ChkGroundHit()) { + gravity = 0.0f; + speed.y = 0.0f; + dComIfGp_getVibration().StartShock(5, 31, cXyz(0.0f, 1.0f, 0.0f)); + cXyz sp54(l_HIO.model_size, l_HIO.model_size, l_HIO.model_size); + + static u16 effId[4] = {ZL2_RING_HALO02, ZL2_KAITENGIRI128, ZL2_SHOCK01, ZL2_SMOKE00_7}; + for (int i = 0; i < 3; i++) { + field_0xddc[i] = dComIfGp_particle_set(field_0xddc[i], effId[i], &field_0x668, NULL, NULL); + } + + field_0xde8 = dComIfGp_particle_setPolyColor(field_0xde8, effId[3], mBgc.m_gnd, &field_0x668, &tevStr, + &shape_angle, &sp54, 0, NULL, -1, NULL); + + if (mAnm == BCK_ZH_CATCH02) { + dComIfGs_onOneZoneSwitch(5, fopAcM_GetRoomNo(this)); + mMoveMode++; + } else { + field_0x794[0] = 30; + mMoveMode = 5; + setBck(BCK_ZH_CATCH02, 0, 3.0f, 1.0f); + mSound.startCreatureSound(Z2SE_EN_ZH_FALL, 0, -1); + } + } + break; + + case 4: + Z2GetAudioMgr()->changeBgmStatus(99); + mS_Ball->current.pos.set(field_0x668); + field_0x794[0] = 30; + setActionMode(ACTION_EXECUTE_CATCH_FLY_MOVE, 0); + break; + + case 5: + if (field_0x794[0] == 0) { + setBck(BCK_ZH_SERCH, 2, 10.0f, 1.0f); + setActionMode(ACTION_EXECUTE_SEARCH_MOVE, 0); + } + break; + } + + if (mMoveMode == 2 || mMoveMode == 3) { + sp48 = eyePos; + sp48.y = current.pos.y; + sp3c = mS_Ball->current.pos - sp48; + + if (field_0x7af != 0) { + fVar1 = 270.0f; + } + + if (sp3c.abs() < fVar1) { + if (mAnm != BCK_ZH_CATCH02 && fopAcM_checkCarryNow(mS_Ball)) { + fopAcM_cancelCarryNow(mS_Ball); + } else if (mAnm != BCK_ZH_CATCH02) { + setBck(BCK_ZH_CATCH02, 0, 3.0f, 1.0f); + mSound.startCreatureSound(Z2SE_EN_ZH_FALL, 0, -1); + fopAcM_setCarryNow(mS_Ball, 0); + Z2GetAudioMgr()->changeBgmStatus(99); + + if (bitSw != 0xFF && fopAcM_isSwitch(this, bitSw)) { + fopAcM_offSwitch(this, bitSw); + } + } else { + mS_Ball->current.pos.set(field_0x668); + } + } + } +} + +/* 8082C670-8082CD34 003730 06C4+00 2/1 0/0 0/0 .text executeCatchFlyMove__8daE_ZH_cFv */ +void daE_ZH_c::executeCatchFlyMove() { + if (mS_Ball == NULL) { + setActionMode(ACTION_EXECUTE_FLY_DELETE, 0); + return; + } + + if (mS_Ball->checkRecover()) { + dComIfGs_offOneZoneSwitch(5, fopAcM_GetRoomNo(this)); + mS_Ball->offCarryHookOK(); + field_0x78c = 2; + setActionMode(ACTION_EXECUTE_DAMAGE, 0); + return; + } + + cXyz sp30, sp3c; + + if (mMoveMode != 5) { + pmRoofPos = home.pos.y; + + if (arg0 == 0) { + if (mBgc.GetGroundH() != -1000000000.0f) { + pmRoofPos = mBgc.GetGroundH() + 600.0f; + } else { + pmRoofPos = home.pos.y + 600.0f; + } + } + + if (mBgc.GetRoofHeight() != 1000000000.0f && pmRoofPos > mBgc.GetRoofHeight()) { + pmRoofPos = mBgc.GetRoofHeight() - 150.0f; + } + + f32 fVar1 = l_HIO.ascent_rate; + + if (mMoveMode > 1) { + fVar1 = l_HIO.ascent_rate * 0.1f; + } + + cLib_addCalc2(¤t.pos.y, pmRoofPos, 0.7f, fVar1); + } + + switch (mMoveMode) { + case 0: + mS_Ball->onCarryHookOK(); + field_0xa08.SetTgType(0xd84820ba); + field_0xb40.SetTgType(0xd84820ba); + + if (field_0x794[0] != 0) break; + + gravity = 0.0f; + speed.y = 0.0f; + setBck(BCK_ZH_CATCHMOVE, 2, 20.0f, 1.0f); + mMoveMode++; + // fallthrough + case 1: + if (XREG_S(0) != 0) { + OS_REPORT("mBgc.GetRoofHeight() %f\n", mBgc.GetRoofHeight()); + OS_REPORT("pmRoofPos %f\n", pmRoofPos); + OS_REPORT("mBgc.ChkRoofHit() %d\n", mBgc.ChkRoofHit()); + } + + if (current.pos.y >= pmRoofPos - 20.0f) { + if (arg0 != 0) { + mRollAngle = 0; + field_0x794[0] = 20; + mReturnLineMove(); + mMoveMode = 10; + } else { + mRollAngle = 0; + field_0x794[0] = 20; + mMoveMode++; + } + } + break; + + case 2: + if (field_0x794[0] != 0 || !mReturnLineMove()) break; + + mMoveMode++; + // fallthrough + case 3: + field_0x774 = BREG_F(7); + + if (mSearchMove(1)) { + field_0x760 = 5.0f; + setBck(BCK_ZH_OPEN, 0, 30.0f, -1.0f); + mMoveMode++; + } + break; + + case 4: + cMtx_YrotS(*calc_mtx, current.angle.y); + sp30.x = 0.0f; + sp30.y = 0.0f; + sp30.z = field_0x774; + MtxPosition(&sp30, &sp3c); + sp3c += home.pos; + cLib_addCalcPos(¤t.pos, sp3c, 0.8f, 10.0f, 5.0f); + cLib_addCalcAngleS2(&shape_angle.y, home.angle.y, 4, BREG_S(5) + 0x400); + current.angle.y = shape_angle.y; + + if (mBgc.ChkGroundHit()) { + dComIfGp_getVibration().StartShock(5, 31, cXyz(0.0f, 1.0f, 0.0f)); + field_0x760 = 0.0f; + current.angle.y = home.angle.y; + current.pos.set(home.pos); + field_0x774 = BREG_F(5) + -150.0f; + mSound.startCreatureSound(JA_SE_OBJ_BLOCK_FALL_NORMAL, 0, -1); + mMoveMode++; + } + break; + + case 5: + if (!mColorSet(false, 5.0f, 5.0f)) break; + + setActionMode(ACTION_EXECUTE_WAIT, 0); + // fallthrough + case 12: + fopAcM_OffStatus(this, 0); + attention_info.flags &= 0xFFFFFFFB; + attention_info.distances[2] = 0; + + for (int i = 0; i < 3; i++) { + field_0x764[i] = 0.0f; + } + + dComIfGs_offOneZoneSwitch(5, fopAcM_GetRoomNo(this)); + + if (bitSw == 16) { + dComIfGs_offEventBit(0x2640); + dComIfGs_offEventBit(0x2610); + dComIfGs_offEventBit(0x2604); + dComIfGs_offEventBit(0x2601); + dComIfGs_offEventBit(0x2740); + } else { + dComIfGs_offEventBit(0x2620); + dComIfGs_offEventBit(0x2608); + dComIfGs_offEventBit(0x2602); + dComIfGs_offEventBit(0x2780); + dComIfGs_offEventBit(0x2720); + } + + field_0xa08.SetTgType(0xd84860ba); + field_0xb40.SetTgType(0xd84860ba); + mS_Ball->offCarryHookOK(); + + if (mMoveMode == 12) { + fopAcM_delete(mS_Ball); + setActionMode(ACTION_EXECUTE_DEAD_STOP, 10); + } + break; + + case 10: + if (!mReturnLineMove()) break; + + mRollAngle = 0; + mMoveMode++; + // fallthrough + case 11: + field_0x774 = 0.0f; + mSearchMove(2); + sp3c = field_0x68c - current.pos; + + if (sp3c.abs() < 400.0f) { + dComIfGs_onOneZoneSwitch(6, fopAcM_GetRoomNo(this)); + dComIfGs_onSaveDunSwitch(0x28); + setActionMode(ACTION_EXECUTE_RETURN_DEMO, 0); + } + } + + mS_Ball->current.pos.set(field_0x668); +} + +/* 8082CD34-8082D154 003DF4 0420+00 1/1 0/0 0/0 .text executeReturnDemo__8daE_ZH_cFv */ +void daE_ZH_c::executeReturnDemo() { + camera_class* camera = dComIfGp_getCamera(dComIfGp_getPlayerCameraID(0)); + cXyz sp1c, sp28; + s16 sVar1; + + switch (mMoveMode) { + case 0: + sVar1 = home.angle.y + 0x8000; + current.angle.y = sVar1; + shape_angle.y = sVar1; + cMtx_YrotS(*calc_mtx, shape_angle.y + 0x8000); + sp1c.x = ZREG_F(0); + sp1c.y = ZREG_F(1); + sp1c.z = ZREG_F(2) + 200.0f; + MtxPosition(&sp1c, &sp28); + current.pos = field_0x68c + sp28; + field_0x794[2] = 0; + + if (!startDemoCheck()) break; + + mMoveMode++; + // fallthrough + case 1: + cMtx_YrotS(*calc_mtx, shape_angle.y + 0x8000); + sp1c.x = ZREG_F(0); + sp1c.y = ZREG_F(1) + 20.0f; + sp1c.z = ZREG_F(2); + MtxPosition(&sp1c, &sp28); + sp28 += field_0x68c; + mDemoCamCenter.set(sp28); + + cMtx_YrotS(*calc_mtx, shape_angle.y + 0x8000); + sp1c.x = ZREG_F(3) + 300.0f; + sp1c.y = ZREG_F(4) + 200.0f; + sp1c.z = ZREG_F(5) + 420.0f; + MtxPosition(&sp1c, &sp28); + sp28 += field_0x68c; + mDemoCamEye.set(sp28); + + camera->mCamera.Set(mDemoCamCenter, mDemoCamEye, 62.0f, 0); + + cLib_addCalcPos(¤t.pos, home.pos, 0.8f, WREG_F(4) + 3.0f, WREG_F(5) + 1.0f); + sp28 = field_0x68c - current.pos; + + if (sp28.abs() > 5.0f || ZREG_S(0) != 0) break; + + field_0x794[0] = 70; + mMoveMode++; + // fallthrough + case 2: + cLib_addCalcPos(¤t.pos, home.pos, 0.8f, WREG_F(4) + 3.0f, WREG_F(5) + 1.0f); + + if (field_0x794[0] == 0) { + field_0x794[2] = 3; + if (field_0x77c > 2.0f) { + break; + } + + camera->mCamera.Start(); + camera->mCamera.SetTrimSize(0); + dComIfGp_event_reset(); + setActionMode(ACTION_EXECUTE_CATCH_FLY_MOVE, 12); + } + break; + } + + mGateOpen(); + + if (mS_Ball != NULL) { + mS_Ball->current.pos.set(field_0x668); + } +} + +/* 8082D154-8082D2F0 004214 019C+00 1/1 0/0 0/0 .text executeFlyDelete__8daE_ZH_cFv */ +void daE_ZH_c::executeFlyDelete() { + switch (mMoveMode) { + case 0: + fopAcM_OffStatus(this, 0); + attention_info.flags &= 0xFFFFFFFB; + attention_info.distances[2] = 0; + + if (bitSw != 0xFF && fopAcM_isSwitch(this, bitSw)) { + fopAcM_offSwitch(this, bitSw); + } + + gravity = 0.0f; + speed.y = 0.0f; + + if (mAnm != BCK_ZH_SERCH) { + setBck(BCK_ZH_SERCH, 2, 10.0f, 1.0f); + } + + mMoveMode = 1; + break; + + case 1: + if (fopAcM_rc_c::roofCheck(¤t.pos)) { + cLib_addCalc2(¤t.pos.y, fopAcM_rc_c::getRoofY() + 200.0f, 0.7f, 10.0f); + + if (fabsf(current.pos.y - (fopAcM_rc_c::getRoofY() + 200.0f)) < 20.0f) { + fopAcM_OffStatus(this, 0); + attention_info.flags &= 0xFFFFFFFB; + attention_info.distances[2] = 0; + + if (arg0 == 0) { + setActionMode(ACTION_EXECUTE_WAIT, 0); + } else { + setActionMode(ACTION_EXECUTE_BALL_WAIT, 0); + } + } + } + break; + } +} + +/* 8082D2F0-8082D97C 0043B0 068C+00 1/1 0/0 0/0 .text executeDamage__8daE_ZH_cFv */ +void daE_ZH_c::executeDamage() { + cXyz sp2c, sp38; + + switch (mMoveMode) { + case 0: + gravity = 0.0f; + speed.y = 0.0f; + field_0xa08.SetTgType(0xd84860ba); + field_0xb40.SetTgType(0xd84860ba); + + if (field_0x78c == 2) { + setBck(BCK_ZH_CATCHDROP, 0, 3.0f, 1.0f); + mSound.startCreatureSound(Z2SE_EN_ZH_DROP, 0, -1); + + if (current.pos.y < mBgc.GetGroundH() + 400.0f) { + speedF = -40.0f; + } + } else { + setBck(BCK_ZH_CATCHDAMAGE, 0, 3.0f, 1.0f); + mSound.startCreatureSound(Z2SE_EN_ZH_DMG, 0, -1); + } + + field_0x794[0] = (int)BREG_S(8) + 8 & 0xFF; + mMoveMode++; + return; + + case 1: + if (field_0x78c == 2) { + if (mS_Ball != NULL) { + if ((int)mpModelMorf->getFrame() == 1 && bitSw != 0xFF && !fopAcM_isSwitch(this, bitSw)) { + fopAcM_cancelCarryNow(mS_Ball); + fopAcM_onSwitch(this, bitSw); + } + } + + if ((int)mpModelMorf->getFrame() >= 1) { + if ((int)mpModelMorf->getFrame() <= 6 && current.pos.y < mBgc.GetGroundH() + 300.0f) { + cLib_addCalc2(¤t.pos.y, mBgc.GetGroundH() + 300.0f, 0.7f, 30.0f); + } + } + + cLib_addCalc0(&speedF, 0.8f, 4.0f); + } else if (bitSw != 0xFF && !fopAcM_isSwitch(this, bitSw) && mS_Ball != NULL) { + mS_Ball->current.pos.set(field_0x668); + } + + if (!mpModelMorf->isStop()) { + if (field_0x794[0] != 0) { + mColorSet(false, 31.875f, 6.25f); + return; + } + + mColorSet(true, 31.875f, 6.25f); + return; + } + + if (mS_Ball != NULL) { + field_0x78c++; + + if (field_0x78c < 3) { + if (bitSw != 0xFF && !fopAcM_isSwitch(this, bitSw)) { + field_0x794[0] = 0; + setActionMode(ACTION_EXECUTE_CATCH_FLY_MOVE, 0); + return; + } + + gravity = 0.0f; + speed.y = 0.0f; + setActionMode(ACTION_EXECUTE_SEARCH_MOVE, 0); + return; + } + + setBck(BCK_ZH_PIYO2, 2, 3.0f, 1.0f); + field_0x794[0] = l_HIO.piyori_time; + mMoveMode++; + } else { + field_0x78c = 0; + setActionMode(ACTION_EXECUTE_FLY_DELETE, 0); + } + return; + + case 2: + if (field_0x794[0] != 0) { + if (field_0x794[0] > l_HIO.piyori_time / 3.0f) { + mColorSet(false, 10.0f, 10.0f); + return; + } + + if (field_0x794[0] == l_HIO.piyori_time / 3.0f) { + mSound.startCreatureSound(Z2SE_EN_ZH_BLINK, 0, -1); + } + + if ((field_0x794[0] & 16) == 0) { + mColorSet(true, 10.0f, 10.0f); + return; + } + + mColorSet(false, 10.0f, 10.0f); + return; + } + + mColorSet(true, 10.0f, 10.0f); + + if (!mColorSet(true, 10.0f, 10.0f)) { + return; + } + + mMoveMode++; + // fallthrough + case 3: + cLib_addCalc2(&field_0x764[0], 255.0f, 0.8f, 10.0f); + cLib_addCalc2(&field_0x764[1], 255.0f, 0.8f, 10.0f); + cLib_addCalc2(&field_0x764[2], 255.0f, 0.8f, 10.0f); + + if (field_0x764[1] > 254.0f) { + return; + } + + field_0x764[2] = 255.0f; + field_0x764[1] = 255.0f; + field_0x764[0] = 255.0f; + setBck(BCK_ZH_WAKEUP, 0, 3.0f, 1.0f); + mSound.startCreatureSound(Z2SE_EN_ZH_WAKEUP, 0, -1); + mMoveMode++; + // fallthrough + case 4: + if (!mpModelMorf->isStop()) { + cLib_addCalc2(&field_0x764[0], 255.0f, 0.8f, 10.0f); + cLib_addCalc0(&field_0x764[1], 0.8f, 10.0f); + cLib_addCalc2(&field_0x764[2], 50.0f, 0.8f, 10.0f); + return; + } + + mMoveMode++; + // fallthrough + case 5: + cLib_addCalc2(&field_0x764[0], 255.0f, 0.8f, 10.0f); + cLib_addCalc0(&field_0x764[1], 0.8f, 10.0f); + cLib_addCalc2(&field_0x764[2], 50.0f, 0.8f, 10.0f); + + if (field_0x764[1] > 2.0f) { + return; + } + + field_0x764[0] = 255.0f; + field_0x764[1] = 0.0f; + field_0x764[2] = 50.0f; + field_0x78c = 0; + setActionMode(ACTION_EXECUTE_SEARCH_MOVE, 0); + } +} + +/* 8082D97C-8082D9B0 004A3C 0034+00 1/1 0/0 0/0 .text executeDeadStop__8daE_ZH_cFv */ +void daE_ZH_c::executeDeadStop() { + switch (mMoveMode) { + case 0: + mMoveMode++; + break; + + case 1: + break; + + case 10: + break; + } +} + +/* 8082D9B0-8082DB64 004A70 01B4+00 1/1 0/0 0/0 .text executeEntryCheck__8daE_ZH_cFv */ +void daE_ZH_c::executeEntryCheck() { + daObjCarry_c* s_Ball = (daObjCarry_c *)fpcM_Search(s_BallSearch_Tag, this); + if (s_Ball != NULL) { + cXyz sp1c; + + switch (mMoveMode) { + case 0: + mMoveMode++; + // fallthrough + case 1: + sp1c = s_Ball->current.pos - current.pos; + sp1c.y = 0.0f; + + if (sp1c.abs() < field_0x778 && mStartFlag == 0) { + mStartFlag = 1; + } + break; + } + } +} + +/* 8082DB64-8082DB84 004C24 0020+00 1/1 0/0 0/0 .text tagAction__8daE_ZH_cFv */ +void daE_ZH_c::tagAction() { + executeEntryCheck(); +} + +/* 8082DB84-8082DE18 004C44 0294+00 2/1 0/0 0/0 .text action__8daE_ZH_cFv */ +void daE_ZH_c::action() { + mS_Ball = (daObjCarry_c*)fpcM_Search(s_BallSearch, this); + damage_check(); + mBallHosei.zero(); + + for (int i = 0; i < 8; i++) { + field_0x6f8[i].zero(); + } + + if (field_0x794[2] == 2) { + mGateOpen(); + } + + switch (mActionMode) { + case ACTION_EXECUTE_START_DEMO: + executeStartDemo(); + break; + + case ACTION_EXECUTE_WAIT: + executeWait(); + break; + + case ACTION_EXECUTE_BALL_WAIT: + executeBallWait(); + break; + + case ACTION_EXECUTE_OPEN_START: + executeOpenStart(); + break; + + case ACTION_EXECUTE_SEARCH_MOVE: + executeSearchMove(); + break; + + case ACTION_EXECUTE_BG_HIT_SH_MOVE: + executeBgHitSHMove(); + break; + + case ACTION_EXECUTE_CATCH_MOVE: + executeCatchMove(); + break; + + case ACTION_EXECUTE_CATCH_FLY_MOVE: + executeCatchFlyMove(); + break; + + case ACTION_EXECUTE_FLY_DELETE: + executeFlyDelete(); + break; + + case ACTION_EXECUTE_RETURN_DEMO: + executeReturnDemo(); + break; + + case ACTION_EXECUTE_DAMAGE: + executeDamage(); + break; + + case ACTION_EXECUTE_DEAD_STOP: + executeDeadStop(); + break; + } + + if (mActionMode != ACTION_EXECUTE_SEARCH_MOVE && mActionMode != ACTION_EXECUTE_CATCH_MOVE && mActionMode != ACTION_EXECUTE_CATCH_FLY_MOVE) { + Z2GetAudioMgr()->changeBgmStatus(99); + } + + if (NREG_S(0) != 0) { + OS_REPORT("\n\n\n"); + OS_REPORT("mActionMode %d\n", mActionMode); + OS_REPORT("mMoveMode %d\n", mMoveMode); + OS_REPORT("\n\n\n"); + } + + if ((mAnm == BCK_ZH_SERCH && mActionMode != ACTION_EXECUTE_BALL_WAIT || mAnm == BCK_ZH_CATCHMOVE) && mActionMode != ACTION_EXECUTE_DEAD_STOP) { + mSound.startCreatureSoundLevel(Z2SE_EN_ZH_MV, 0, -1); + } + + if (mAnm == BCK_ZH_PIYO2) { + mSound.startCreatureSoundLevel(Z2SE_EN_ZH_PIYO, 0, -1); + } + + fopAcM_posMoveF(this, mStts.GetCCMoveP()); + + if (mActionMode != ACTION_EXECUTE_BALL_WAIT) { + if (mActionMode != ACTION_EXECUTE_BALL_WAIT && mActionMode != ACTION_EXECUTE_RETURN_DEMO && mActionMode != ACTION_EXECUTE_FLY_DELETE) { + mBgc.SetRoofCrrHeight(BREG_F(2) + 100.0f); + mAcchCir.SetWall(100.0f, BREG_F(1) + 150.0f); + mBgc.SetGroundUpY(field_0x760 + BREG_F(0)); + mBgc.CrrPos(dComIfG_Bgsp()); + } + + mpBtkAnm->play(); + mpModelMorf->play(0, dComIfGp_getReverb(fopAcM_GetRoomNo(this))); + } +} + +/* 8082DE18-8082DF44 004ED8 012C+00 1/1 0/0 0/0 .text mtx_set__8daE_ZH_cFv */ +void daE_ZH_c::mtx_set() { + mDoMtx_stack_c::transS(current.pos.x, current.pos.y, current.pos.z); + mDoMtx_stack_c::ZXYrotM(shape_angle); + mDoMtx_stack_c::transM(0.0f, 0.0f, BREG_F(4) + -100.0f); + mDoMtx_stack_c::scaleM(l_HIO.model_size, l_HIO.model_size, l_HIO.model_size); + J3DModel* model = mpModelMorf->getModel(); + model->setBaseTRMtx(mDoMtx_stack_c::get()); + mpModelMorf->modelCalc(); + mDoMtx_stack_c::copy(model->getAnmMtx(5)); + + cXyz sp28; + sp28.set(JREG_F(0) + 20.0f, JREG_F(1) + -105.0f, JREG_F(2)); + mDoMtx_stack_c::multVec(&sp28, &field_0x668); + + if (arg0 == 1) { + mDoMtx_stack_c::transS(field_0x68c.x, field_0x68c.y, field_0x68c.z); + mDoMtx_stack_c::scaleM(l_HIO.model_size, l_HIO.model_size, l_HIO.model_size); + mEntranceModel->setBaseTRMtx(mDoMtx_stack_c::get()); + } +} + +/* 8082DF44-8082E2FC 005004 03B8+00 1/1 0/0 0/0 .text cc_set__8daE_ZH_cFv */ +void daE_ZH_c::cc_set() { + cXyz sp24, sp30; + J3DModel* model = mpModelMorf->getModel(); + + mDoMtx_stack_c::copy(model->getAnmMtx(0)); + + if (mActionMode == ACTION_EXECUTE_WAIT) { + sp24.set(200.0f, -100.0f, 0.0f); + } else if (mActionMode == ACTION_EXECUTE_OPEN_START || mAnm == BCK_ZH_OPEN || mAnm == BCK_ZH_START) { + sp24.set(250.0f, 0.0f, 0.0f); + } else { + sp24.set(150.0f, 50.0f, 0.0f); + } + + mDoMtx_stack_c::multVec(&sp24, &eyePos); + attention_info.position = eyePos; + attention_info.position.y += 25.0f; + + if (mActionMode == ACTION_EXECUTE_CATCH_FLY_MOVE && mS_Ball != NULL) { + cXyz sp3c, sp48; + + cMtx_YrotS(*calc_mtx, shape_angle.y); + sp3c.x = 0.0f; + sp3c.y = 0.0f; + sp3c.z = ZREG_F(17) + 30.0f; + MtxPosition(&sp3c, &sp48); + sp48 += mS_Ball->current.pos; + eyePos.set(sp48); + attention_info.position = eyePos; + attention_info.position.y += ZREG_F(18) + 100.0f; + } + + mDoMtx_stack_c::copy(model->getAnmMtx(0)); + + if (mActionMode == ACTION_EXECUTE_WAIT || mActionMode == ACTION_EXECUTE_DEAD_STOP || field_0x78c >= 3) { + sp24.set(140.0f, -90.0f, 0.0f); + mDoMtx_stack_c::multVec(&sp24, &sp30); + field_0xa08.SetC(sp30); + field_0xa08.SetR(120.0f); + dComIfG_Ccsp()->Set(&field_0xa08); + } else if (mActionMode == ACTION_EXECUTE_OPEN_START || mAnm == BCK_ZH_OPEN || mAnm == BCK_ZH_START) { + mDoMtx_stack_c::multVecZero(&sp30); + field_0xb40.SetC(sp30); + field_0xb40.SetH(250.0f); + field_0xb40.SetR(55.0f); + dComIfG_Ccsp()->Set(&field_0xb40); + } else { + sp24.set(170.0f, -20.0f, 0.0f); + mDoMtx_stack_c::multVec(&sp24, &sp30); + field_0xb40.SetC(sp30); + field_0xb40.SetH(100.0f); + field_0xb40.SetR(170.0f); + dComIfG_Ccsp()->Set(&field_0xb40); + } + + if (mActionMode == ACTION_EXECUTE_WAIT || mActionMode == ACTION_EXECUTE_OPEN_START) { + return; + } + + sp24.set(BREG_F(10) + 170.0f, BREG_F(11) + -20.0f, BREG_F(12)); + mDoMtx_stack_c::multVec(&sp24, &sp30); + field_0xc7c.SetC(sp30); + field_0xc7c.SetH(BREG_F(13) + 100.0f); + + if (field_0x7af != 0) { + field_0xc7c.SetR(BREG_F(14) + 150.0f); + } else { + field_0xc7c.SetR(BREG_F(14) + 130.0f); + } + + if (gravity) { + dComIfG_Ccsp()->Set(&field_0xc7c); + } +} + +/* 8082E2FC-8082E3C0 0053BC 00C4+00 1/1 0/0 0/0 .text execute__8daE_ZH_cFv */ +int daE_ZH_c::execute() { + if (field_0x7ae != 0) { + return 1; + } + + for (int i = 0; i < 2; i++) { + if (field_0x794[i]) { + field_0x794[i]--; + } + } + + if (field_0x7a8 != 0) { + field_0x7a8--; + } + + if (field_0x7a0 != 0) { + field_0x7a0--; + } + + if (arg0 == 2) { + tagAction(); + } else { + action(); + mtx_set(); + cc_set(); + } + + return 1; +} + +/* 8082E3C0-8082E3E0 005480 0020+00 2/1 0/0 0/0 .text daE_ZH_Execute__FP8daE_ZH_c */ +static int daE_ZH_Execute(daE_ZH_c* i_this) { + return i_this->execute(); +} + +/* 8082E3E0-8082E3E8 0054A0 0008+00 1/0 0/0 0/0 .text daE_ZH_IsDelete__FP8daE_ZH_c */ +static int daE_ZH_IsDelete(daE_ZH_c* i_this) { + return 1; +} + +/* 8082E3E8-8082E4C4 0054A8 00DC+00 1/1 0/0 0/0 .text _delete__8daE_ZH_cFv */ +int daE_ZH_c::_delete() { + dComIfG_resDelete(&mPhase, "E_ZH"); + + if (arg0 == 2) { + return 1; + } + + if (mActionMode == ACTION_EXECUTE_CATCH_FLY_MOVE && bitSw != 0xFF && !fopAcM_isSwitch(this, bitSw)) { + daObjCarry_c* s_Ball = (daObjCarry_c*)fpcM_Search(s_BallSearch, this); + if (s_Ball != NULL) { + s_Ball->reset(); + } + } + + if (field_0xe04 != 0) { + l_initHIO = 0; + } + + if (heap != NULL) { + mSound.deleteObject(); + } + + return 1; +} + +/* 8082E4C4-8082E4E4 005584 0020+00 1/0 0/0 0/0 .text daE_ZH_Delete__FP8daE_ZH_c */ +static int daE_ZH_Delete(daE_ZH_c* i_this) { + return i_this->_delete(); +} + +/* 8082E4E4-8082E6C8 0055A4 01E4+00 1/1 0/0 0/0 .text CreateHeap__8daE_ZH_cFv */ +int daE_ZH_c::CreateHeap() { + J3DModelData* modelData = (J3DModelData*)dComIfG_getObjectRes("E_ZH", BMDV_ZH); + JUT_ASSERT(3305, modelData != 0); + + mpModelMorf = new mDoExt_McaMorfSO(modelData, NULL, NULL, (J3DAnmTransform*)dComIfG_getObjectRes("E_ZH", BCK_ZH_WAIT01), + 2, 1.0f, 0, -1, &mSound, 0, 0x31000284); + if (mpModelMorf == NULL || mpModelMorf->getModel() == NULL) { + return 0; + } + + mpBtkAnm = new mDoExt_btkAnm(); + if (mpBtkAnm == NULL) { + return 0; + } + + if (!mpBtkAnm->init(mpModelMorf->getModel()->getModelData(), + (J3DAnmTextureSRTKey*)dComIfG_getObjectRes("E_ZH", BTK_ZH_LOOP), 1, 2, + 1.0f, 0, -1)) { + return 0; + } + + if (arg0 == 1) { + modelData = (J3DModelData*)dComIfG_getObjectRes("E_ZH", BMDV_ZH_ENTRANCE); + JUT_ASSERT(3342, modelData != 0); + + mEntranceModel = mDoExt_J3DModel__create(modelData, 0, 0x11020203); + if (mEntranceModel == NULL) { + return 0; + } + } + + return 1; +} + +/* 8082E710-8082E730 0057D0 0020+00 1/1 0/0 0/0 .text useHeapInit__FP10fopAc_ac_c */ +static int useHeapInit(fopAc_ac_c* a_this) { + daE_ZH_c* i_this = (daE_ZH_c*)a_this; + return i_this->CreateHeap(); +} + +/* 8082E730-8082ECEC 0057F0 05BC+00 1/1 0/0 0/0 .text create__8daE_ZH_cFv */ +cPhs__Step daE_ZH_c::create() { + fopAcM_SetupActor(this, daE_ZH_c); + + cPhs__Step phase = (cPhs__Step)dComIfG_resLoad(&mPhase, "E_ZH"); + if (phase == cPhs_COMPLEATE_e) { + OS_REPORT("E_ZH PARAM %x\n", fopAcM_GetParam(this)); + arg0 = fopAcM_GetParam(this); + bitSw = fopAcM_GetParam(this) >> 8; + bitSwEnd = fopAcM_GetParam(this) >> 16; + field_0x7ac = fopAcM_GetParam(this) >> 24; + + if (bitSwEnd != 0xFF && fopAcM_isSwitch(this, bitSwEnd)) { + return cPhs_ERROR_e; + } + + if (arg0 == 0xFF) { + arg0 = 0; + } + + OS_REPORT("arg0 %d\n", arg0); + OS_REPORT("bitSw %d\n", bitSw); + OS_REPORT("bitSwEnd %d\n", bitSwEnd); + + if (arg0 == 2) { + fopAcM_OffStatus(this, 0); + attention_info.flags &= 0xFFFFFFFB; + attention_info.distances[2] = 0; + fopAcM_SetGroup(this, 0); + fopAcM_SetMin(this, -2000.0f, -2000.0f, -2000.0f); + fopAcM_SetMax(this, 2000.0f, 2000.0f, 2000.0f); + + if (field_0x7ac == 0xFF || field_0x7ac == 0) { + field_0x778 = 100.0f; + } else { + field_0x778 = field_0x7ac * 10.0f; + } + + mS_Ball = (daObjCarry_c*)fpcM_Search(s_BallSearch_Tag, this); + if (mS_Ball == NULL) { + return cPhs_ERROR_e; + } + + setActionMode(UNK_ACTION, 0); + } else { + u32 i_size = 0x17C0; + if (arg0 == 1) { + i_size = 0x2500; + } + + if (!fopAcM_entrySolidHeap(this, useHeapInit, i_size)) { + return cPhs_ERROR_e; + } + + if (l_initHIO == 0) { + l_initHIO = 1; + field_0xe04 = 1; + l_HIO.field_0x4 = -1; + } + + attention_info.flags = 4; + fopAcM_SetMtx(this, mpModelMorf->getModel()->getBaseTRMtx()); + fopAcM_SetMin(this, -20000.0f, -20000.0f, -20000.0f); + fopAcM_SetMax(this, 20000.0f, 20000.0f, 20000.0f); + mBgc.Set(fopAcM_GetPosition_p(this), fopAcM_GetOldPosition_p(this), this, 1, &mAcchCir, fopAcM_GetSpeed_p(this), NULL, NULL); + mBgc.ClrRoofNone(); + mBgc.SetRoofCrrHeight(100.0f); + mAcchCir.SetWall(100.0f, 150.0f); + mStts.Init(0xFF, 0, this); + health = 1000; + field_0x560 = 1000; + field_0x774 = -150.0f; + + field_0xa08.Set(cc_zhSph_src); + field_0xa08.SetStts(&mStts); + field_0xb40.Set(cc_zhCyl_src); + field_0xb40.SetStts(&mStts); + field_0xc7c.Set(cc_zhCyl_at_src); + field_0xc7c.SetStts(&mStts); + + mSound.init(¤t.pos, &eyePos, 3, 1); + mAtInfo.mpSound = &mSound; + mAtInfo.mPowerType = 1; + gravity = 0.0f; + + for (int i = 0; i < 3; i++) { + field_0x764[i] = 0.0f; + } + + shape_angle.z = 0; + shape_angle.x = 0; + attention_info.distances[2] = 3; + fopAcM_OffStatus(this, 0); + attention_info.flags &= 0xFFFFFFFB; + + for (int i = 0; i < 8; i++) { + field_0x758[i] = 0xFF; + } + + for (int i = 0; i < 3; i++) { + field_0x6c8[i].set(current.pos); + } + + field_0xa08.OnTgNoHitMark(); + field_0xb40.OnTgNoHitMark(); + onWolfNoLock(); + + if (arg0 == 0) { + mS_Ball = (daObjCarry_c*)fpcM_Search(s_BallSearch, this); + if (mS_Ball != NULL) { + if (!fopAcM_checkCarryNow(mS_Ball)) { + mS_Ball->current.pos.set(current.pos); + mS_Ball->current.pos.y += 100.0f; + mS_Ball->current.pos.z += 90.0f; + fopAcM_setCarryNow(mS_Ball, 0); + mStartFlag = 0; + + setBck(BCK_ZH_WAIT01, 0, 3.0f, 1.0f); + field_0x78c = 0; + attention_info.distances[2] = 3; + fopAcM_OffStatus(this, 0); + attention_info.flags &= 0xFFFFFFFB; + + if (fopAcM_GetRoomNo(this) == 0x33 && !fopAcM_isSwitch(this, 18)) { + fopAcM_OnStatus(this, fopAcM_STATUS_UNK_004000); + setActionMode(ACTION_EXECUTE_START_DEMO, 0); + } else { + setActionMode(ACTION_EXECUTE_WAIT, 1); + } + } else { + setActionMode(ACTION_EXECUTE_SEARCH_MOVE, 0); + } + } else { + setActionMode(ACTION_EXECUTE_DEAD_STOP, 0); + } + } else { + attention_info.distances[2] = 0; + field_0x764[0] = 255.0f; + field_0x764[2] = 50.0f; + mStartFlag = 0; + setActionMode(ACTION_EXECUTE_BALL_WAIT, 0); + } + } + + daE_ZH_Execute(this); + + if (arg0 == 0 && mS_Ball != NULL) { + mS_Ball->current.pos.set(field_0x668); + } + } + + return phase; +} + +/* 8082F0F8-8082F118 0061B8 0020+00 1/0 0/0 0/0 .text daE_ZH_Create__FP8daE_ZH_c */ +static int daE_ZH_Create(daE_ZH_c* i_this) { + return i_this->create(); +} + +AUDIO_INSTANCES; /* 8082F60C-8082F62C -00001 0020+00 1/0 0/0 0/0 .data l_daE_ZH_Method */ static actor_method_class l_daE_ZH_Method = { - (process_method_func)daE_ZH_Create__FP8daE_ZH_c, - (process_method_func)daE_ZH_Delete__FP8daE_ZH_c, - (process_method_func)daE_ZH_Execute__FP8daE_ZH_c, - (process_method_func)daE_ZH_IsDelete__FP8daE_ZH_c, - (process_method_func)daE_ZH_Draw__FP8daE_ZH_c, + (process_method_func)daE_ZH_Create, + (process_method_func)daE_ZH_Delete, + (process_method_func)daE_ZH_Execute, + (process_method_func)daE_ZH_IsDelete, + (process_method_func)daE_ZH_Draw, }; /* 8082F62C-8082F65C -00001 0030+00 0/0 0/0 1/0 .data g_profile_E_ZH */ @@ -400,1447 +2380,3 @@ extern actor_process_profile_definition g_profile_E_ZH = { fopAc_ENV_e, // mActorType fopAc_CULLBOX_CUSTOM_e, // cullType }; - -/* 8082F65C-8082F668 00023C 000C+00 1/1 0/0 0/0 .data __vt__12dBgS_AcchCir */ -SECTION_DATA extern void* __vt__12dBgS_AcchCir[3] = { - (void*)NULL /* RTTI */, - (void*)NULL, - (void*)__dt__12dBgS_AcchCirFv, -}; - -/* 8082F668-8082F674 000248 000C+00 2/2 0/0 0/0 .data __vt__10cCcD_GStts */ -SECTION_DATA extern void* __vt__10cCcD_GStts[3] = { - (void*)NULL /* RTTI */, - (void*)NULL, - (void*)__dt__10cCcD_GSttsFv, -}; - -/* 8082F674-8082F680 000254 000C+00 1/1 0/0 0/0 .data __vt__10dCcD_GStts */ -SECTION_DATA extern void* __vt__10dCcD_GStts[3] = { - (void*)NULL /* RTTI */, - (void*)NULL, - (void*)__dt__10dCcD_GSttsFv, -}; - -/* 8082F680-8082F68C 000260 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, -}; - -/* 8082F68C-8082F698 00026C 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, -}; - -/* 8082F698-8082F6A4 000278 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, -}; - -/* 8082F6A4-8082F6C8 000284 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_8082F1EC, - (void*)NULL, - (void*)NULL, - (void*)func_8082F1E4, -}; - -/* 8082F6C8-8082F6D4 0002A8 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, -}; - -/* 8082F6D4-8082F6E0 0002B4 000C+00 2/2 0/0 0/0 .data __vt__12daE_ZH_HIO_c */ -SECTION_DATA extern void* __vt__12daE_ZH_HIO_c[3] = { - (void*)NULL /* RTTI */, - (void*)NULL, - (void*)__dt__12daE_ZH_HIO_cFv, -}; - -/* 8082902C-8082907C 0000EC 0050+00 1/1 0/0 0/0 .text __ct__12daE_ZH_HIO_cFv */ -daE_ZH_HIO_c::daE_ZH_HIO_c() { - // NONMATCHING -} - -/* ############################################################################################## */ -/* 8082F214-8082F218 00000C 0004+00 0/1 0/0 0/0 .rodata @3866 */ -#pragma push -#pragma force_active on -SECTION_RODATA static f32 const lit_3866 = 1200.0f; -COMPILER_STRIP_GATE(0x8082F214, &lit_3866); -#pragma pop - -/* 8082F218-8082F21C 000010 0004+00 1/20 0/0 0/0 .rodata @3867 */ -SECTION_RODATA static u8 const lit_3867[4] = { - 0x00, - 0x00, - 0x00, - 0x00, -}; -COMPILER_STRIP_GATE(0x8082F218, &lit_3867); - -/* 8082F6E8-8082F6EC 000008 0001+03 2/2 0/0 0/0 .bss @1109 */ -static u8 lit_1109[1 + 3 /* padding */]; - -/* 8082F6EC-8082F6F0 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 - -/* 8082F6F0-8082F6F4 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 - -/* 8082F6F4-8082F6F8 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 - -/* 8082F6F8-8082F6FC 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 - -/* 8082F6FC-8082F700 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 - -/* 8082F700-8082F704 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 - -/* 8082F704-8082F708 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 - -/* 8082F708-8082F70C 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 - -/* 8082F70C-8082F710 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 - -/* 8082F710-8082F714 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 - -/* 8082F714-8082F718 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 - -/* 8082F718-8082F71C 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 - -/* 8082F71C-8082F720 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 - -/* 8082F720-8082F724 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 - -/* 8082F724-8082F728 -00001 0004+00 1/2 0/0 0/0 .bss None */ -/* 8082F724 0001+00 data_8082F724 @1009 */ -/* 8082F725 0003+00 data_8082F725 None */ -static u8 struct_8082F724[4]; - -/* 8082F728-8082F734 000048 000C+00 1/1 0/0 0/0 .bss @3773 */ -static u8 lit_3773[12]; - -/* 8082F734-8082F750 000054 001C+00 8/9 0/0 0/0 .bss l_HIO */ -static u8 l_HIO[28]; - -/* 8082F750-8082F754 000070 0004+00 4/5 0/0 0/0 .bss mStartFlag */ -static u8 mStartFlag[4]; - -/* 8082907C-8082934C 00013C 02D0+00 1/1 0/0 0/0 .text draw__8daE_ZH_cFv */ -void daE_ZH_c::draw() { - // NONMATCHING -} - -/* 8082934C-80829388 00040C 003C+00 2/2 0/0 0/0 .text __dt__4cXyzFv */ -// cXyz::~cXyz() { -extern "C" void __dt__4cXyzFv() { - // NONMATCHING -} - -/* 80829388-808293A8 000448 0020+00 1/0 0/0 0/0 .text daE_ZH_Draw__FP8daE_ZH_c */ -static void daE_ZH_Draw(daE_ZH_c* param_0) { - // NONMATCHING -} - -/* ############################################################################################## */ -/* 8082F21C-8082F220 000014 0004+00 1/1 0/0 0/0 .rodata @3884 */ -SECTION_RODATA static f32 const lit_3884 = -1.0f; -COMPILER_STRIP_GATE(0x8082F21C, &lit_3884); - -/* 8082F410-8082F410 000208 0000+00 0/0 0/0 0/0 .rodata @stringBase0 */ -#pragma push -#pragma force_active on -SECTION_DEAD static char const* const stringBase_8082F410 = "E_ZH"; -#pragma pop - -/* 808293A8-80829454 000468 00AC+00 10/10 0/0 0/0 .text setBck__8daE_ZH_cFiUcff */ -void daE_ZH_c::setBck(int param_0, u8 param_1, f32 param_2, f32 param_3) { - // NONMATCHING -} - -/* 80829454-80829460 000514 000C+00 14/14 0/0 0/0 .text setActionMode__8daE_ZH_cFii */ -void daE_ZH_c::setActionMode(int param_0, int param_1) { - // NONMATCHING -} - -/* 80829460-80829500 000520 00A0+00 3/3 0/0 0/0 .text s_BallSearch__FPvPv */ -static void s_BallSearch(void* param_0, void* param_1) { - // NONMATCHING -} - -/* 80829500-80829570 0005C0 0070+00 2/2 0/0 0/0 .text s_BallSearch_Tag__FPvPv */ -static void s_BallSearch_Tag(void* param_0, void* param_1) { - // NONMATCHING -} - -/* 80829570-80829658 000630 00E8+00 4/4 0/0 0/0 .text startDemoCheck__8daE_ZH_cFv */ -void daE_ZH_c::startDemoCheck() { - // NONMATCHING -} - -/* ############################################################################################## */ -/* 8082F220-8082F224 000018 0004+00 0/8 0/0 0/0 .rodata @4031 */ -#pragma push -#pragma force_active on -SECTION_RODATA static f32 const lit_4031 = 50.0f; -COMPILER_STRIP_GATE(0x8082F220, &lit_4031); -#pragma pop - -/* 8082F224-8082F228 00001C 0004+00 0/7 0/0 0/0 .rodata @4032 */ -#pragma push -#pragma force_active on -SECTION_RODATA static f32 const lit_4032 = 100.0f; -COMPILER_STRIP_GATE(0x8082F224, &lit_4032); -#pragma pop - -/* 8082F228-8082F22C 000020 0004+00 0/1 0/0 0/0 .rodata @4033 */ -#pragma push -#pragma force_active on -SECTION_RODATA static f32 const lit_4033 = 180.0f; -COMPILER_STRIP_GATE(0x8082F228, &lit_4033); -#pragma pop - -/* 80829658-808298BC 000718 0264+00 2/2 0/0 0/0 .text mBallBGCheck__8daE_ZH_cFv */ -void daE_ZH_c::mBallBGCheck() { - // NONMATCHING -} - -/* ############################################################################################## */ -/* 8082F22C-8082F230 000024 0004+00 0/5 0/0 0/0 .rodata @4053 */ -#pragma push -#pragma force_active on -SECTION_RODATA static f32 const lit_4053 = 255.0f; -COMPILER_STRIP_GATE(0x8082F22C, &lit_4053); -#pragma pop - -/* 8082F230-8082F234 000028 0004+00 0/1 0/0 0/0 .rodata @4054 */ -#pragma push -#pragma force_active on -SECTION_RODATA static f32 const lit_4054 = 0.5f; -COMPILER_STRIP_GATE(0x8082F230, &lit_4054); -#pragma pop - -/* 8082F234-8082F238 00002C 0004+00 0/7 0/0 0/0 .rodata @4055 */ -#pragma push -#pragma force_active on -SECTION_RODATA static f32 const lit_4055 = 5.0f; -COMPILER_STRIP_GATE(0x8082F234, &lit_4055); -#pragma pop - -/* 8082F238-8082F23C 000030 0004+00 0/1 0/0 0/0 .rodata @4056 */ -#pragma push -#pragma force_active on -SECTION_RODATA static f32 const lit_4056 = 80.0f; -COMPILER_STRIP_GATE(0x8082F238, &lit_4056); -#pragma pop - -/* 8082F23C-8082F240 000034 0004+00 0/2 0/0 0/0 .rodata @4057 */ -#pragma push -#pragma force_active on -SECTION_RODATA static f32 const lit_4057 = 40.0f; -COMPILER_STRIP_GATE(0x8082F23C, &lit_4057); -#pragma pop - -/* 8082F240-8082F248 000038 0008+00 0/3 0/0 0/0 .rodata @4059 */ -#pragma push -#pragma force_active on -SECTION_RODATA static u8 const lit_4059[8] = { - 0x43, 0x30, 0x00, 0x00, 0x80, 0x00, 0x00, 0x00, -}; -COMPILER_STRIP_GATE(0x8082F240, &lit_4059); -#pragma pop - -/* 808298BC-808299F8 00097C 013C+00 3/3 0/0 0/0 .text mGateOpen__8daE_ZH_cFv */ -void daE_ZH_c::mGateOpen() { - // NONMATCHING -} - -/* ############################################################################################## */ -/* 8082F248-8082F24C 000040 0004+00 0/3 0/0 0/0 .rodata @4071 */ -#pragma push -#pragma force_active on -SECTION_RODATA static f32 const lit_4071 = 4.0f / 5.0f; -COMPILER_STRIP_GATE(0x8082F248, &lit_4071); -#pragma pop - -/* 8082F24C-8082F250 000044 0004+00 0/2 0/0 0/0 .rodata @4072 */ -#pragma push -#pragma force_active on -SECTION_RODATA static f32 const lit_4072 = 253.0f; -COMPILER_STRIP_GATE(0x8082F24C, &lit_4072); -#pragma pop - -/* 808299F8-80829AD8 000AB8 00E0+00 4/4 0/0 0/0 .text mColorSet__8daE_ZH_cFbff */ -void daE_ZH_c::mColorSet(bool param_0, f32 param_1, f32 param_2) { - // NONMATCHING -} - -/* ############################################################################################## */ -/* 8082F250-8082F254 000048 0004+00 0/1 0/0 0/0 .rodata @4172 */ -#pragma push -#pragma force_active on -SECTION_RODATA static f32 const lit_4172 = -3950.0f; -COMPILER_STRIP_GATE(0x8082F250, &lit_4172); -#pragma pop - -/* 8082F254-8082F258 00004C 0004+00 0/1 0/0 0/0 .rodata @4173 */ -#pragma push -#pragma force_active on -SECTION_RODATA static f32 const lit_4173 = -500.0f; -COMPILER_STRIP_GATE(0x8082F254, &lit_4173); -#pragma pop - -/* 8082F258-8082F25C 000050 0004+00 0/1 0/0 0/0 .rodata @4174 */ -#pragma push -#pragma force_active on -SECTION_RODATA static f32 const lit_4174 = 7612.0f; -COMPILER_STRIP_GATE(0x8082F258, &lit_4174); -#pragma pop - -/* 8082F25C-8082F260 000054 0004+00 0/1 0/0 0/0 .rodata @4175 */ -#pragma push -#pragma force_active on -SECTION_RODATA static f32 const lit_4175 = -725.0f; -COMPILER_STRIP_GATE(0x8082F25C, &lit_4175); -#pragma pop - -/* 8082F260-8082F264 000058 0004+00 0/1 0/0 0/0 .rodata @4176 */ -#pragma push -#pragma force_active on -SECTION_RODATA static f32 const lit_4176 = 3950.0f; -COMPILER_STRIP_GATE(0x8082F260, &lit_4176); -#pragma pop - -/* 8082F264-8082F268 00005C 0004+00 0/1 0/0 0/0 .rodata @4177 */ -#pragma push -#pragma force_active on -SECTION_RODATA static f32 const lit_4177 = 7442.0f; -COMPILER_STRIP_GATE(0x8082F264, &lit_4177); -#pragma pop - -/* 8082F268-8082F26C 000060 0004+00 0/1 0/0 0/0 .rodata @4178 */ -#pragma push -#pragma force_active on -SECTION_RODATA static f32 const lit_4178 = 352.0f; -COMPILER_STRIP_GATE(0x8082F268, &lit_4178); -#pragma pop - -/* 8082F26C-8082F270 000064 0004+00 0/1 0/0 0/0 .rodata @4179 */ -#pragma push -#pragma force_active on -SECTION_RODATA static f32 const lit_4179 = -800.0f; -COMPILER_STRIP_GATE(0x8082F26C, &lit_4179); -#pragma pop - -/* 8082F270-8082F274 000068 0004+00 0/9 0/0 0/0 .rodata @4180 */ -#pragma push -#pragma force_active on -SECTION_RODATA static f32 const lit_4180 = 7.0f / 10.0f; -COMPILER_STRIP_GATE(0x8082F270, &lit_4180); -#pragma pop - -/* 8082F274-8082F278 00006C 0004+00 0/7 0/0 0/0 .rodata @4181 */ -#pragma push -#pragma force_active on -SECTION_RODATA static f32 const lit_4181 = 20.0f; -COMPILER_STRIP_GATE(0x8082F274, &lit_4181); -#pragma pop - -/* 8082F754-8082F764 000074 000C+04 0/1 0/0 0/0 .bss @4079 */ -#pragma push -#pragma force_active on -static u8 lit_4079[12 + 4 /* padding */]; -#pragma pop - -/* 8082F764-8082F770 000084 000C+00 0/1 0/0 0/0 .bss @4082 */ -#pragma push -#pragma force_active on -static u8 lit_4082[12]; -#pragma pop - -/* 8082F770-8082F77C 000090 000C+00 0/1 0/0 0/0 .bss @4083 */ -#pragma push -#pragma force_active on -static u8 lit_4083[12]; -#pragma pop - -/* 8082F77C-8082F788 00009C 000C+00 0/1 0/0 0/0 .bss @4084 */ -#pragma push -#pragma force_active on -static u8 lit_4084[12]; -#pragma pop - -/* 8082F788-8082F794 0000A8 000C+00 0/1 0/0 0/0 .bss @4085 */ -#pragma push -#pragma force_active on -static u8 lit_4085[12]; -#pragma pop - -/* 8082F794-8082F7A0 0000B4 000C+00 0/1 0/0 0/0 .bss @4086 */ -#pragma push -#pragma force_active on -static u8 lit_4086[12]; -#pragma pop - -/* 8082F7A0-8082F7E8 0000C0 0048+00 0/1 0/0 0/0 .bss mRoomLine_dt$4078 */ -#pragma push -#pragma force_active on -static u8 mRoomLine_dt[72]; -#pragma pop - -/* 80829AD8-80829E44 000B98 036C+00 2/2 0/0 0/0 .text mReturnLineMove__8daE_ZH_cFv */ -void daE_ZH_c::mReturnLineMove() { - // NONMATCHING -} - -/* ############################################################################################## */ -/* 8082F278-8082F27C 000070 0004+00 0/3 0/0 0/0 .rodata @4232 */ -#pragma push -#pragma force_active on -SECTION_RODATA static f32 const lit_4232 = 170.0f; -COMPILER_STRIP_GATE(0x8082F278, &lit_4232); -#pragma pop - -/* 80829E44-8082A01C 000F04 01D8+00 2/2 0/0 0/0 .text mBallBgLineCheck__8daE_ZH_cFv */ -void daE_ZH_c::mBallBgLineCheck() { - // NONMATCHING -} - -/* ############################################################################################## */ -/* 8082F27C-8082F280 000074 0004+00 0/3 0/0 0/0 .rodata @4317 */ -#pragma push -#pragma force_active on -SECTION_RODATA static f32 const lit_4317 = -1000000000.0f; -COMPILER_STRIP_GATE(0x8082F27C, &lit_4317); -#pragma pop - -/* 8082F280-8082F284 000078 0004+00 0/3 0/0 0/0 .rodata @4318 */ -#pragma push -#pragma force_active on -SECTION_RODATA static f32 const lit_4318 = 600.0f; -COMPILER_STRIP_GATE(0x8082F280, &lit_4318); -#pragma pop - -/* 8082F284-8082F288 00007C 0004+00 0/1 0/0 0/0 .rodata @4319 */ -#pragma push -#pragma force_active on -SECTION_RODATA static f32 const lit_4319 = 8.0f; -COMPILER_STRIP_GATE(0x8082F284, &lit_4319); -#pragma pop - -/* 8082A01C-8082A390 0010DC 0374+00 2/2 0/0 0/0 .text mSearchMove__8daE_ZH_cFUc */ -void daE_ZH_c::mSearchMove(u8 param_0) { - // NONMATCHING -} - -/* ############################################################################################## */ -/* 8082F288-8082F2E0 000080 0058+00 0/1 0/0 0/0 .rodata START_EFF_DT$4324 */ -#pragma push -#pragma force_active on -SECTION_RODATA static u8 const START_EFF_DT[88] = { - 0x8A, 0x62, 0x00, 0x00, 0x00, 0x00, 0x00, 0x07, 0x8A, 0x63, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x07, 0x8A, 0x64, 0x00, 0x00, 0x00, 0x00, 0x00, 0x09, 0x8A, 0x65, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x09, 0x8A, 0x66, 0x00, 0x00, 0x00, 0x00, 0x00, 0x10, 0x8A, 0x67, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x10, 0x8A, 0x68, 0x00, 0x00, 0x00, 0x00, 0x00, 0x04, 0x8A, 0x69, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x04, 0x8A, 0x6A, 0x00, 0x00, 0x00, 0x00, 0x00, 0x05, 0x8A, 0x6B, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x05, 0x8A, 0x6C, 0x00, 0x00, 0x00, 0x00, 0x00, 0x05, -}; -COMPILER_STRIP_GATE(0x8082F288, &START_EFF_DT); -#pragma pop - -/* 8082F2E0-8082F2E4 0000D8 0004+00 0/7 0/0 0/0 .rodata @4360 */ -#pragma push -#pragma force_active on -SECTION_RODATA static f32 const lit_4360 = 3.0f; -COMPILER_STRIP_GATE(0x8082F2E0, &lit_4360); -#pragma pop - -/* 8082A390-8082A4C8 001450 0138+00 1/1 0/0 0/0 .text mStartParticleSet__8daE_ZH_cFv */ -void daE_ZH_c::mStartParticleSet() { - // NONMATCHING -} - -/* 8082A4C8-8082A534 001588 006C+00 1/1 0/0 0/0 .text mCutTypeCheck__8daE_ZH_cFv */ -void daE_ZH_c::mCutTypeCheck() { - // NONMATCHING -} - -/* ############################################################################################## */ -/* 8082F410-8082F410 000208 0000+00 0/0 0/0 0/0 .rodata @stringBase0 */ -#pragma push -#pragma force_active on -SECTION_DEAD static char const* const stringBase_8082F415 = "T_ENE02"; -#pragma pop - -/* 8082A534-8082A88C 0015F4 0358+00 1/1 0/0 0/0 .text damage_check__8daE_ZH_cFv */ -void daE_ZH_c::damage_check() { - // NONMATCHING -} - -/* ############################################################################################## */ -/* 8082F2E4-8082F2E8 0000DC 0004+00 0/1 0/0 0/0 .rodata @4539 */ -#pragma push -#pragma force_active on -SECTION_RODATA static f32 const lit_4539 = -30.0f; -COMPILER_STRIP_GATE(0x8082F2E4, &lit_4539); -#pragma pop - -/* 8082F2E8-8082F2EC 0000E0 0004+00 0/1 0/0 0/0 .rodata @4540 */ -#pragma push -#pragma force_active on -SECTION_RODATA static f32 const lit_4540 = 650.0f; -COMPILER_STRIP_GATE(0x8082F2E8, &lit_4540); -#pragma pop - -/* 8082F2EC-8082F2F0 0000E4 0004+00 0/1 0/0 0/0 .rodata @4541 */ -#pragma push -#pragma force_active on -SECTION_RODATA static f32 const lit_4541 = 1955.0f; -COMPILER_STRIP_GATE(0x8082F2EC, &lit_4541); -#pragma pop - -/* 8082F2F0-8082F2F4 0000E8 0004+00 0/1 0/0 0/0 .rodata @4542 */ -#pragma push -#pragma force_active on -SECTION_RODATA static f32 const lit_4542 = -25.0f; -COMPILER_STRIP_GATE(0x8082F2F0, &lit_4542); -#pragma pop - -/* 8082F2F4-8082F2F8 0000EC 0004+00 0/1 0/0 0/0 .rodata @4543 */ -#pragma push -#pragma force_active on -SECTION_RODATA static f32 const lit_4543 = 720.0f; -COMPILER_STRIP_GATE(0x8082F2F4, &lit_4543); -#pragma pop - -/* 8082F2F8-8082F2FC 0000F0 0004+00 0/1 0/0 0/0 .rodata @4544 */ -#pragma push -#pragma force_active on -SECTION_RODATA static f32 const lit_4544 = 2330.0f; -COMPILER_STRIP_GATE(0x8082F2F8, &lit_4544); -#pragma pop - -/* 8082F2FC-8082F300 0000F4 0004+00 0/1 0/0 0/0 .rodata @4545 */ -#pragma push -#pragma force_active on -SECTION_RODATA static f32 const lit_4545 = 435.0f; -COMPILER_STRIP_GATE(0x8082F2FC, &lit_4545); -#pragma pop - -/* 8082F300-8082F304 0000F8 0004+00 0/1 0/0 0/0 .rodata @4546 */ -#pragma push -#pragma force_active on -SECTION_RODATA static f32 const lit_4546 = -3355.0f; -COMPILER_STRIP_GATE(0x8082F300, &lit_4546); -#pragma pop - -/* 8082F304-8082F308 0000FC 0004+00 0/1 0/0 0/0 .rodata @4547 */ -#pragma push -#pragma force_active on -SECTION_RODATA static f32 const lit_4547 = 505.0f; -COMPILER_STRIP_GATE(0x8082F304, &lit_4547); -#pragma pop - -/* 8082F308-8082F30C 000100 0004+00 0/1 0/0 0/0 .rodata @4548 */ -#pragma push -#pragma force_active on -SECTION_RODATA static f32 const lit_4548 = -3140.0f; -COMPILER_STRIP_GATE(0x8082F308, &lit_4548); -#pragma pop - -/* 8082F30C-8082F310 000104 0004+00 0/1 0/0 0/0 .rodata @4549 */ -#pragma push -#pragma force_active on -SECTION_RODATA static f32 const lit_4549 = -10.0f; -COMPILER_STRIP_GATE(0x8082F30C, &lit_4549); -#pragma pop - -/* 8082F310-8082F314 000108 0004+00 0/1 0/0 0/0 .rodata @4550 */ -#pragma push -#pragma force_active on -SECTION_RODATA static f32 const lit_4550 = 280.0f; -COMPILER_STRIP_GATE(0x8082F310, &lit_4550); -#pragma pop - -/* 8082F314-8082F318 00010C 0004+00 0/1 0/0 0/0 .rodata @4551 */ -#pragma push -#pragma force_active on -SECTION_RODATA static f32 const lit_4551 = -3835.0f; -COMPILER_STRIP_GATE(0x8082F314, &lit_4551); -#pragma pop - -/* 8082F318-8082F31C 000110 0004+00 0/3 0/0 0/0 .rodata @4552 */ -#pragma push -#pragma force_active on -SECTION_RODATA static f32 const lit_4552 = 2.0f; -COMPILER_STRIP_GATE(0x8082F318, &lit_4552); -#pragma pop - -/* 8082F31C-8082F320 000114 0004+00 0/1 0/0 0/0 .rodata @4553 */ -#pragma push -#pragma force_active on -SECTION_RODATA static f32 const lit_4553 = -15.0f; -COMPILER_STRIP_GATE(0x8082F31C, &lit_4553); -#pragma pop - -/* 8082F320-8082F324 000118 0004+00 0/1 0/0 0/0 .rodata @4554 */ -#pragma push -#pragma force_active on -SECTION_RODATA static f32 const lit_4554 = 350.0f; -COMPILER_STRIP_GATE(0x8082F320, &lit_4554); -#pragma pop - -/* 8082F324-8082F328 00011C 0004+00 0/1 0/0 0/0 .rodata @4555 */ -#pragma push -#pragma force_active on -SECTION_RODATA static f32 const lit_4555 = -3620.0f; -COMPILER_STRIP_GATE(0x8082F324, &lit_4555); -#pragma pop - -/* 8082F328-8082F32C 000120 0004+00 0/2 0/0 0/0 .rodata @4556 */ -#pragma push -#pragma force_active on -SECTION_RODATA static f32 const lit_4556 = 4.0f; -COMPILER_STRIP_GATE(0x8082F328, &lit_4556); -#pragma pop - -/* 8082F32C-8082F330 000124 0004+00 0/2 0/0 0/0 .rodata @4557 */ -#pragma push -#pragma force_active on -SECTION_RODATA static f32 const lit_4557 = -5.0f; -COMPILER_STRIP_GATE(0x8082F32C, &lit_4557); -#pragma pop - -/* 8082F330-8082F334 000128 0004+00 0/1 0/0 0/0 .rodata @4558 */ -#pragma push -#pragma force_active on -SECTION_RODATA static f32 const lit_4558 = 590.0f; -COMPILER_STRIP_GATE(0x8082F330, &lit_4558); -#pragma pop - -/* 8082F334-8082F338 00012C 0004+00 0/1 0/0 0/0 .rodata @4559 */ -#pragma push -#pragma force_active on -SECTION_RODATA static f32 const lit_4559 = 2130.0f; -COMPILER_STRIP_GATE(0x8082F334, &lit_4559); -#pragma pop - -/* 8082F338-8082F33C 000130 0004+00 0/1 0/0 0/0 .rodata @4560 */ -#pragma push -#pragma force_active on -SECTION_RODATA static f32 const lit_4560 = 680.0f; -COMPILER_STRIP_GATE(0x8082F338, &lit_4560); -#pragma pop - -/* 8082F33C-8082F340 000134 0004+00 0/1 0/0 0/0 .rodata @4561 */ -#pragma push -#pragma force_active on -SECTION_RODATA static f32 const lit_4561 = 2340.0f; -COMPILER_STRIP_GATE(0x8082F33C, &lit_4561); -#pragma pop - -/* 8082A88C-8082ABDC 00194C 0350+00 1/1 0/0 0/0 .text executeStartDemo__8daE_ZH_cFv */ -void daE_ZH_c::executeStartDemo() { - // NONMATCHING -} - -/* 8082ABDC-8082ACA8 001C9C 00CC+00 1/1 0/0 0/0 .text executeWait__8daE_ZH_cFv */ -void daE_ZH_c::executeWait() { - // NONMATCHING -} - -/* ############################################################################################## */ -/* 8082F340-8082F344 000138 0004+00 0/2 0/0 0/0 .rodata @4702 */ -#pragma push -#pragma force_active on -SECTION_RODATA static f32 const lit_4702 = 2000.0f; -COMPILER_STRIP_GATE(0x8082F340, &lit_4702); -#pragma pop - -/* 8082F344-8082F348 00013C 0004+00 0/1 0/0 0/0 .rodata @4703 */ -#pragma push -#pragma force_active on -SECTION_RODATA static f32 const lit_4703 = -300.0f; -COMPILER_STRIP_GATE(0x8082F344, &lit_4703); -#pragma pop - -/* 8082ACA8-8082B284 001D68 05DC+00 2/1 0/0 0/0 .text executeBallWait__8daE_ZH_cFv */ -void daE_ZH_c::executeBallWait() { - // NONMATCHING -} - -/* 8082B284-8082B820 002344 059C+00 2/1 0/0 0/0 .text executeOpenStart__8daE_ZH_cFv */ -void daE_ZH_c::executeOpenStart() { - // NONMATCHING -} - -/* ############################################################################################## */ -/* 8082F348-8082F34C 000140 0004+00 0/1 0/0 0/0 .rodata @4704 */ -#pragma push -#pragma force_active on -SECTION_RODATA static f32 const lit_4704 = 254.0f; -COMPILER_STRIP_GATE(0x8082F348, &lit_4704); -#pragma pop - -/* 8082F34C-8082F350 000144 0004+00 0/0 0/0 0/0 .rodata @4705 */ -#pragma push -#pragma force_active on -SECTION_RODATA static f32 const lit_4705 = 7.0f / 5.0f; -COMPILER_STRIP_GATE(0x8082F34C, &lit_4705); -#pragma pop - -/* 8082F350-8082F354 000148 0004+00 0/3 0/0 0/0 .rodata @4706 */ -#pragma push -#pragma force_active on -SECTION_RODATA static f32 const lit_4706 = 200.0f; -COMPILER_STRIP_GATE(0x8082F350, &lit_4706); -#pragma pop - -/* 8082F354-8082F358 00014C 0004+00 0/0 0/0 0/0 .rodata @4707 */ -#pragma push -#pragma force_active on -SECTION_RODATA static f32 const lit_4707 = -200.0f; -COMPILER_STRIP_GATE(0x8082F354, &lit_4707); -#pragma pop - -/* 8082F358-8082F35C 000150 0004+00 0/1 0/0 0/0 .rodata @4708 */ -#pragma push -#pragma force_active on -SECTION_RODATA static f32 const lit_4708 = 62.0f; -COMPILER_STRIP_GATE(0x8082F358, &lit_4708); -#pragma pop - -/* 8082F35C-8082F360 000154 0004+00 0/0 0/0 0/0 .rodata @4873 */ -#pragma push -#pragma force_active on -SECTION_RODATA static f32 const lit_4873 = 42.5f; -COMPILER_STRIP_GATE(0x8082F35C, &lit_4873); -#pragma pop - -/* 8082F360-8082F364 000158 0004+00 0/0 0/0 0/0 .rodata @4874 */ -#pragma push -#pragma force_active on -SECTION_RODATA static f32 const lit_4874 = 25.0f / 3.0f; -COMPILER_STRIP_GATE(0x8082F360, &lit_4874); -#pragma pop - -/* 8082F364-8082F368 00015C 0004+00 0/0 0/0 0/0 .rodata @4875 */ -#pragma push -#pragma force_active on -SECTION_RODATA static f32 const lit_4875 = -60.0f; -COMPILER_STRIP_GATE(0x8082F364, &lit_4875); -#pragma pop - -/* 8082F368-8082F36C 000160 0004+00 0/0 0/0 0/0 .rodata @4876 */ -#pragma push -#pragma force_active on -SECTION_RODATA static f32 const lit_4876 = -3875.0f; -COMPILER_STRIP_GATE(0x8082F368, &lit_4876); -#pragma pop - -/* 8082F36C-8082F370 000164 0004+00 0/0 0/0 0/0 .rodata @4877 */ -#pragma push -#pragma force_active on -SECTION_RODATA static f32 const lit_4877 = -250.0f; -COMPILER_STRIP_GATE(0x8082F36C, &lit_4877); -#pragma pop - -/* 8082F370-8082F374 000168 0004+00 0/0 0/0 0/0 .rodata @4878 */ -#pragma push -#pragma force_active on -SECTION_RODATA static f32 const lit_4878 = -3515.0f; -COMPILER_STRIP_GATE(0x8082F370, &lit_4878); -#pragma pop - -/* 8082F374-8082F378 00016C 0004+00 0/0 0/0 0/0 .rodata @4879 */ -#pragma push -#pragma force_active on -SECTION_RODATA static f32 const lit_4879 = 6.0f / 5.0f; -COMPILER_STRIP_GATE(0x8082F374, &lit_4879); -#pragma pop - -/* 8082F378-8082F37C 000170 0004+00 0/0 0/0 0/0 .rodata @4880 */ -#pragma push -#pragma force_active on -SECTION_RODATA static f32 const lit_4880 = -280.0f; -COMPILER_STRIP_GATE(0x8082F378, &lit_4880); -#pragma pop - -/* 8082F37C-8082F380 000174 0004+00 0/2 0/0 0/0 .rodata @4881 */ -#pragma push -#pragma force_active on -SECTION_RODATA static f32 const lit_4881 = 30.0f; -COMPILER_STRIP_GATE(0x8082F37C, &lit_4881); -#pragma pop - -/* 8082F380-8082F384 000178 0004+00 0/0 0/0 0/0 .rodata @4882 */ -#pragma push -#pragma force_active on -SECTION_RODATA static f32 const lit_4882 = -3460.0f; -COMPILER_STRIP_GATE(0x8082F380, &lit_4882); -#pragma pop - -/* 8082F384-8082F388 00017C 0004+00 0/2 0/0 0/0 .rodata @4943 */ -#pragma push -#pragma force_active on -SECTION_RODATA static f32 const lit_4943 = 1000000000.0f; -COMPILER_STRIP_GATE(0x8082F384, &lit_4943); -#pragma pop - -/* 8082F388-8082F38C 000180 0004+00 0/5 0/0 0/0 .rodata @4944 */ -#pragma push -#pragma force_active on -SECTION_RODATA static f32 const lit_4944 = 150.0f; -COMPILER_STRIP_GATE(0x8082F388, &lit_4944); -#pragma pop - -/* 8082F38C-8082F390 000184 0004+00 0/2 0/0 0/0 .rodata @4945 */ -#pragma push -#pragma force_active on -SECTION_RODATA static f32 const lit_4945 = -150.0f; -COMPILER_STRIP_GATE(0x8082F38C, &lit_4945); -#pragma pop - -/* 8082B820-8082BA18 0028E0 01F8+00 1/1 0/0 0/0 .text executeSearchMove__8daE_ZH_cFv */ -void daE_ZH_c::executeSearchMove() { - // NONMATCHING -} - -/* ############################################################################################## */ -/* 8082F390-8082F398 000188 0008+00 0/4 0/0 0/0 .rodata @5024 */ -#pragma push -#pragma force_active on -SECTION_RODATA static u8 const lit_5024[8] = { - 0x3F, 0xE0, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, -}; -COMPILER_STRIP_GATE(0x8082F390, &lit_5024); -#pragma pop - -/* 8082F398-8082F3A0 000190 0008+00 0/4 0/0 0/0 .rodata @5025 */ -#pragma push -#pragma force_active on -SECTION_RODATA static u8 const lit_5025[8] = { - 0x40, 0x08, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, -}; -COMPILER_STRIP_GATE(0x8082F398, &lit_5025); -#pragma pop - -/* 8082F3A0-8082F3A8 000198 0008+00 0/4 0/0 0/0 .rodata @5026 */ -#pragma push -#pragma force_active on -SECTION_RODATA static u8 const lit_5026[8] = { - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, -}; -COMPILER_STRIP_GATE(0x8082F3A0, &lit_5026); -#pragma pop - -/* 8082F3A8-8082F3AC 0001A0 0004+00 0/1 0/0 0/0 .rodata @5027 */ -#pragma push -#pragma force_active on -SECTION_RODATA static f32 const lit_5027 = 16384.0f; -COMPILER_STRIP_GATE(0x8082F3A8, &lit_5027); -#pragma pop - -/* 8082BA18-8082BE20 002AD8 0408+00 1/1 0/0 0/0 .text executeBgHitSHMove__8daE_ZH_cFv */ -void daE_ZH_c::executeBgHitSHMove() { - // NONMATCHING -} - -/* ############################################################################################## */ -/* 8082F3AC-8082F3B0 0001A4 0004+00 0/2 0/0 0/0 .rodata @5222 */ -#pragma push -#pragma force_active on -SECTION_RODATA static u32 const lit_5222 = 0x41FF0000; -COMPILER_STRIP_GATE(0x8082F3AC, &lit_5222); -#pragma pop - -/* 8082F3B0-8082F3B4 0001A8 0004+00 0/2 0/0 0/0 .rodata @5223 */ -#pragma push -#pragma force_active on -SECTION_RODATA static f32 const lit_5223 = 6.25f; -COMPILER_STRIP_GATE(0x8082F3B0, &lit_5223); -#pragma pop - -/* 8082F3B4-8082F3B8 0001AC 0004+00 0/1 0/0 0/0 .rodata @5224 */ -#pragma push -#pragma force_active on -SECTION_RODATA static f32 const lit_5224 = 270.0f; -COMPILER_STRIP_GATE(0x8082F3B4, &lit_5224); -#pragma pop - -/* 8082BE20-8082C670 002EE0 0850+00 1/1 0/0 0/0 .text executeCatchMove__8daE_ZH_cFv */ -void daE_ZH_c::executeCatchMove() { - // NONMATCHING -} - -/* ############################################################################################## */ -/* 8082F3B8-8082F3BC 0001B0 0004+00 0/1 0/0 0/0 .rodata @5388 */ -#pragma push -#pragma force_active on -SECTION_RODATA static f32 const lit_5388 = 1.0f / 10.0f; -COMPILER_STRIP_GATE(0x8082F3B8, &lit_5388); -#pragma pop - -/* 8082C670-8082CD34 003730 06C4+00 2/1 0/0 0/0 .text executeCatchFlyMove__8daE_ZH_cFv */ -void daE_ZH_c::executeCatchFlyMove() { - // NONMATCHING -} - -/* ############################################################################################## */ -/* 8082F3BC-8082F3C0 0001B4 0004+00 0/1 0/0 0/0 .rodata @5389 */ -#pragma push -#pragma force_active on -SECTION_RODATA static f32 const lit_5389 = 400.0f; -COMPILER_STRIP_GATE(0x8082F3BC, &lit_5389); -#pragma pop - -/* 8082F3C0-8082F3C4 0001B8 0004+00 0/2 0/0 0/0 .rodata @5482 */ -#pragma push -#pragma force_active on -SECTION_RODATA static f32 const lit_5482 = 300.0f; -COMPILER_STRIP_GATE(0x8082F3C0, &lit_5482); -#pragma pop - -/* 8082F3C4-8082F3C8 0001BC 0004+00 0/1 0/0 0/0 .rodata @5483 */ -#pragma push -#pragma force_active on -SECTION_RODATA static f32 const lit_5483 = 420.0f; -COMPILER_STRIP_GATE(0x8082F3C4, &lit_5483); -#pragma pop - -/* 8082CD34-8082D154 003DF4 0420+00 1/1 0/0 0/0 .text executeReturnDemo__8daE_ZH_cFv */ -void daE_ZH_c::executeReturnDemo() { - // NONMATCHING -} - -/* 8082D154-8082D2F0 004214 019C+00 1/1 0/0 0/0 .text executeFlyDelete__8daE_ZH_cFv */ -void daE_ZH_c::executeFlyDelete() { - // NONMATCHING -} - -/* ############################################################################################## */ -/* 8082F3C8-8082F3CC 0001C0 0004+00 0/1 0/0 0/0 .rodata @5661 */ -#pragma push -#pragma force_active on -SECTION_RODATA static f32 const lit_5661 = -40.0f; -COMPILER_STRIP_GATE(0x8082F3C8, &lit_5661); -#pragma pop - -/* 8082D2F0-8082D97C 0043B0 068C+00 1/1 0/0 0/0 .text executeDamage__8daE_ZH_cFv */ -void daE_ZH_c::executeDamage() { - // NONMATCHING -} - -/* 8082D97C-8082D9B0 004A3C 0034+00 1/1 0/0 0/0 .text executeDeadStop__8daE_ZH_cFv */ -void daE_ZH_c::executeDeadStop() { - // NONMATCHING -} - -/* 8082D9B0-8082DB64 004A70 01B4+00 1/1 0/0 0/0 .text executeEntryCheck__8daE_ZH_cFv */ -void daE_ZH_c::executeEntryCheck() { - // NONMATCHING -} - -/* 8082DB64-8082DB84 004C24 0020+00 1/1 0/0 0/0 .text tagAction__8daE_ZH_cFv */ -void daE_ZH_c::tagAction() { - // NONMATCHING -} - -/* 8082DB84-8082DE18 004C44 0294+00 2/1 0/0 0/0 .text action__8daE_ZH_cFv */ -void daE_ZH_c::action() { - // NONMATCHING -} - -/* ############################################################################################## */ -/* 8082F3CC-8082F3D0 0001C4 0004+00 0/2 0/0 0/0 .rodata @5819 */ -#pragma push -#pragma force_active on -SECTION_RODATA static f32 const lit_5819 = -100.0f; -COMPILER_STRIP_GATE(0x8082F3CC, &lit_5819); -#pragma pop - -/* 8082F3D0-8082F3D4 0001C8 0004+00 0/1 0/0 0/0 .rodata @5820 */ -#pragma push -#pragma force_active on -SECTION_RODATA static f32 const lit_5820 = -105.0f; -COMPILER_STRIP_GATE(0x8082F3D0, &lit_5820); -#pragma pop - -/* 8082DE18-8082DF44 004ED8 012C+00 1/1 0/0 0/0 .text mtx_set__8daE_ZH_cFv */ -void daE_ZH_c::mtx_set() { - // NONMATCHING -} - -/* ############################################################################################## */ -/* 8082F3D4-8082F3D8 0001CC 0004+00 0/1 0/0 0/0 .rodata @5913 */ -#pragma push -#pragma force_active on -SECTION_RODATA static f32 const lit_5913 = 250.0f; -COMPILER_STRIP_GATE(0x8082F3D4, &lit_5913); -#pragma pop - -/* 8082F3D8-8082F3DC 0001D0 0004+00 0/1 0/0 0/0 .rodata @5914 */ -#pragma push -#pragma force_active on -SECTION_RODATA static f32 const lit_5914 = 25.0f; -COMPILER_STRIP_GATE(0x8082F3D8, &lit_5914); -#pragma pop - -/* 8082F3DC-8082F3E0 0001D4 0004+00 0/1 0/0 0/0 .rodata @5915 */ -#pragma push -#pragma force_active on -SECTION_RODATA static f32 const lit_5915 = 140.0f; -COMPILER_STRIP_GATE(0x8082F3DC, &lit_5915); -#pragma pop - -/* 8082F3E0-8082F3E4 0001D8 0004+00 0/1 0/0 0/0 .rodata @5916 */ -#pragma push -#pragma force_active on -SECTION_RODATA static f32 const lit_5916 = -90.0f; -COMPILER_STRIP_GATE(0x8082F3E0, &lit_5916); -#pragma pop - -/* 8082F3E4-8082F3E8 0001DC 0004+00 0/1 0/0 0/0 .rodata @5917 */ -#pragma push -#pragma force_active on -SECTION_RODATA static f32 const lit_5917 = 120.0f; -COMPILER_STRIP_GATE(0x8082F3E4, &lit_5917); -#pragma pop - -/* 8082F3E8-8082F3EC 0001E0 0004+00 0/1 0/0 0/0 .rodata @5918 */ -#pragma push -#pragma force_active on -SECTION_RODATA static f32 const lit_5918 = 55.0f; -COMPILER_STRIP_GATE(0x8082F3E8, &lit_5918); -#pragma pop - -/* 8082F3EC-8082F3F0 0001E4 0004+00 0/1 0/0 0/0 .rodata @5919 */ -#pragma push -#pragma force_active on -SECTION_RODATA static f32 const lit_5919 = -20.0f; -COMPILER_STRIP_GATE(0x8082F3EC, &lit_5919); -#pragma pop - -/* 8082F3F0-8082F3F4 0001E8 0004+00 0/1 0/0 0/0 .rodata @5920 */ -#pragma push -#pragma force_active on -SECTION_RODATA static f32 const lit_5920 = 130.0f; -COMPILER_STRIP_GATE(0x8082F3F0, &lit_5920); -#pragma pop - -/* 8082DF44-8082E2FC 005004 03B8+00 1/1 0/0 0/0 .text cc_set__8daE_ZH_cFv */ -void daE_ZH_c::cc_set() { - // NONMATCHING -} - -/* 8082E2FC-8082E3C0 0053BC 00C4+00 1/1 0/0 0/0 .text execute__8daE_ZH_cFv */ -void daE_ZH_c::execute() { - // NONMATCHING -} - -/* 8082E3C0-8082E3E0 005480 0020+00 2/1 0/0 0/0 .text daE_ZH_Execute__FP8daE_ZH_c */ -static void daE_ZH_Execute(daE_ZH_c* param_0) { - // NONMATCHING -} - -/* 8082E3E0-8082E3E8 0054A0 0008+00 1/0 0/0 0/0 .text daE_ZH_IsDelete__FP8daE_ZH_c */ -static bool daE_ZH_IsDelete(daE_ZH_c* param_0) { - return true; -} - -/* 8082E3E8-8082E4C4 0054A8 00DC+00 1/1 0/0 0/0 .text _delete__8daE_ZH_cFv */ -void daE_ZH_c::_delete() { - // NONMATCHING -} - -/* 8082E4C4-8082E4E4 005584 0020+00 1/0 0/0 0/0 .text daE_ZH_Delete__FP8daE_ZH_c */ -static void daE_ZH_Delete(daE_ZH_c* param_0) { - // NONMATCHING -} - -/* 8082E4E4-8082E6C8 0055A4 01E4+00 1/1 0/0 0/0 .text CreateHeap__8daE_ZH_cFv */ -void daE_ZH_c::CreateHeap() { - // NONMATCHING -} - -/* 8082E6C8-8082E710 005788 0048+00 1/0 0/0 0/0 .text __dt__12J3DFrameCtrlFv */ -// J3DFrameCtrl::~J3DFrameCtrl() { -extern "C" void __dt__12J3DFrameCtrlFv() { - // NONMATCHING -} - -/* 8082E710-8082E730 0057D0 0020+00 1/1 0/0 0/0 .text useHeapInit__FP10fopAc_ac_c */ -static void useHeapInit(fopAc_ac_c* param_0) { - // NONMATCHING -} - -/* ############################################################################################## */ -/* 8082F3F4-8082F3F8 0001EC 0004+00 0/1 0/0 0/0 .rodata @6222 */ -#pragma push -#pragma force_active on -SECTION_RODATA static f32 const lit_6222 = -2000.0f; -COMPILER_STRIP_GATE(0x8082F3F4, &lit_6222); -#pragma pop - -/* 8082F3F8-8082F3FC 0001F0 0004+00 0/1 0/0 0/0 .rodata @6223 */ -#pragma push -#pragma force_active on -SECTION_RODATA static f32 const lit_6223 = -20000.0f; -COMPILER_STRIP_GATE(0x8082F3F8, &lit_6223); -#pragma pop - -/* 8082F3FC-8082F400 0001F4 0004+00 0/1 0/0 0/0 .rodata @6224 */ -#pragma push -#pragma force_active on -SECTION_RODATA static f32 const lit_6224 = 20000.0f; -COMPILER_STRIP_GATE(0x8082F3FC, &lit_6224); -#pragma pop - -/* 8082F400-8082F408 0001F8 0004+04 0/1 0/0 0/0 .rodata @6225 */ -#pragma push -#pragma force_active on -SECTION_RODATA static f32 const lit_6225[1 + 1 /* padding */] = { - 90.0f, - /* padding */ - 0.0f, -}; -COMPILER_STRIP_GATE(0x8082F400, &lit_6225); -#pragma pop - -/* 8082F408-8082F410 000200 0008+00 0/1 0/0 0/0 .rodata @6227 */ -#pragma push -#pragma force_active on -SECTION_RODATA static u8 const lit_6227[8] = { - 0x43, 0x30, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, -}; -COMPILER_STRIP_GATE(0x8082F408, &lit_6227); -#pragma pop - -/* 8082E730-8082ECEC 0057F0 05BC+00 1/1 0/0 0/0 .text create__8daE_ZH_cFv */ -void daE_ZH_c::create() { - // NONMATCHING -} - -/* 8082ECEC-8082EEE0 005DAC 01F4+00 1/1 0/0 0/0 .text __ct__8daE_ZH_cFv */ -daE_ZH_c::daE_ZH_c() { - // NONMATCHING -} - -/* 8082EEE0-8082EF28 005FA0 0048+00 1/0 0/0 0/0 .text __dt__8cM3dGCylFv */ -// cM3dGCyl::~cM3dGCyl() { -extern "C" void __dt__8cM3dGCylFv() { - // NONMATCHING -} - -/* 8082EF28-8082EF70 005FE8 0048+00 1/0 0/0 0/0 .text __dt__8cM3dGSphFv */ -// cM3dGSph::~cM3dGSph() { -extern "C" void __dt__8cM3dGSphFv() { - // NONMATCHING -} - -/* 8082EF70-8082EFB8 006030 0048+00 1/0 0/0 0/0 .text __dt__8cM3dGAabFv */ -// cM3dGAab::~cM3dGAab() { -extern "C" void __dt__8cM3dGAabFv() { - // NONMATCHING -} - -/* 8082EFB8-8082F014 006078 005C+00 1/0 0/0 0/0 .text __dt__10dCcD_GSttsFv */ -// dCcD_GStts::~dCcD_GStts() { -extern "C" void __dt__10dCcD_GSttsFv() { - // NONMATCHING -} - -/* 8082F014-8082F084 0060D4 0070+00 3/2 0/0 0/0 .text __dt__12dBgS_ObjAcchFv */ -// dBgS_ObjAcch::~dBgS_ObjAcch() { -extern "C" void __dt__12dBgS_ObjAcchFv() { - // NONMATCHING -} - -/* 8082F084-8082F0F4 006144 0070+00 1/0 0/0 0/0 .text __dt__12dBgS_AcchCirFv */ -// dBgS_AcchCir::~dBgS_AcchCir() { -extern "C" void __dt__12dBgS_AcchCirFv() { - // NONMATCHING -} - -/* 8082F0F4-8082F0F8 0061B4 0004+00 1/1 0/0 0/0 .text __ct__4cXyzFv */ -// cXyz::cXyz() { -extern "C" void __ct__4cXyzFv() { - /* empty function */ -} - -/* 8082F0F8-8082F118 0061B8 0020+00 1/0 0/0 0/0 .text daE_ZH_Create__FP8daE_ZH_c */ -static void daE_ZH_Create(daE_ZH_c* param_0) { - // NONMATCHING -} - -/* 8082F118-8082F160 0061D8 0048+00 1/0 0/0 0/0 .text __dt__10cCcD_GSttsFv */ -// cCcD_GStts::~cCcD_GStts() { -extern "C" void __dt__10cCcD_GSttsFv() { - // NONMATCHING -} - -/* 8082F160-8082F1A8 006220 0048+00 2/1 0/0 0/0 .text __dt__12daE_ZH_HIO_cFv */ -daE_ZH_HIO_c::~daE_ZH_HIO_c() { - // NONMATCHING -} - -/* 8082F1A8-8082F1E4 006268 003C+00 0/0 1/0 0/0 .text __sinit_d_a_e_zh_cpp */ -void __sinit_d_a_e_zh_cpp() { - // NONMATCHING -} - -#pragma push -#pragma force_active on -REGISTER_CTORS(0x8082F1A8, __sinit_d_a_e_zh_cpp); -#pragma pop - -/* 8082F1E4-8082F1EC 0062A4 0008+00 1/0 0/0 0/0 .text @36@__dt__12dBgS_ObjAcchFv */ -static void func_8082F1E4() { - // NONMATCHING -} - -/* 8082F1EC-8082F1F4 0062AC 0008+00 1/0 0/0 0/0 .text @20@__dt__12dBgS_ObjAcchFv */ -static void func_8082F1EC() { - // NONMATCHING -} - -/* ############################################################################################## */ -/* 8082F7E8-8082F7EC 000108 0004+00 0/0 0/0 0/0 .bss - * sInstance__40JASGlobalInstance<19JASDefaultBankTable> */ -#pragma push -#pragma force_active on -static u8 data_8082F7E8[4]; -#pragma pop - -/* 8082F7EC-8082F7F0 00010C 0004+00 0/0 0/0 0/0 .bss - * sInstance__35JASGlobalInstance<14JASAudioThread> */ -#pragma push -#pragma force_active on -static u8 data_8082F7EC[4]; -#pragma pop - -/* 8082F7F0-8082F7F4 000110 0004+00 0/0 0/0 0/0 .bss sInstance__27JASGlobalInstance<7Z2SeMgr> */ -#pragma push -#pragma force_active on -static u8 data_8082F7F0[4]; -#pragma pop - -/* 8082F7F4-8082F7F8 000114 0004+00 0/0 0/0 0/0 .bss sInstance__28JASGlobalInstance<8Z2SeqMgr> */ -#pragma push -#pragma force_active on -static u8 data_8082F7F4[4]; -#pragma pop - -/* 8082F7F8-8082F7FC 000118 0004+00 0/0 0/0 0/0 .bss sInstance__31JASGlobalInstance<10Z2SceneMgr> - */ -#pragma push -#pragma force_active on -static u8 data_8082F7F8[4]; -#pragma pop - -/* 8082F7FC-8082F800 00011C 0004+00 0/0 0/0 0/0 .bss sInstance__32JASGlobalInstance<11Z2StatusMgr> - */ -#pragma push -#pragma force_active on -static u8 data_8082F7FC[4]; -#pragma pop - -/* 8082F800-8082F804 000120 0004+00 0/0 0/0 0/0 .bss sInstance__31JASGlobalInstance<10Z2DebugSys> - */ -#pragma push -#pragma force_active on -static u8 data_8082F800[4]; -#pragma pop - -/* 8082F804-8082F808 000124 0004+00 0/0 0/0 0/0 .bss - * sInstance__36JASGlobalInstance<15JAISoundStarter> */ -#pragma push -#pragma force_active on -static u8 data_8082F804[4]; -#pragma pop - -/* 8082F808-8082F80C 000128 0004+00 0/0 0/0 0/0 .bss - * sInstance__35JASGlobalInstance<14Z2SoundStarter> */ -#pragma push -#pragma force_active on -static u8 data_8082F808[4]; -#pragma pop - -/* 8082F80C-8082F810 00012C 0004+00 0/0 0/0 0/0 .bss - * sInstance__33JASGlobalInstance<12Z2SpeechMgr2> */ -#pragma push -#pragma force_active on -static u8 data_8082F80C[4]; -#pragma pop - -/* 8082F810-8082F814 000130 0004+00 0/0 0/0 0/0 .bss sInstance__28JASGlobalInstance<8JAISeMgr> */ -#pragma push -#pragma force_active on -static u8 data_8082F810[4]; -#pragma pop - -/* 8082F814-8082F818 000134 0004+00 0/0 0/0 0/0 .bss sInstance__29JASGlobalInstance<9JAISeqMgr> */ -#pragma push -#pragma force_active on -static u8 data_8082F814[4]; -#pragma pop - -/* 8082F818-8082F81C 000138 0004+00 0/0 0/0 0/0 .bss - * sInstance__33JASGlobalInstance<12JAIStreamMgr> */ -#pragma push -#pragma force_active on -static u8 data_8082F818[4]; -#pragma pop - -/* 8082F81C-8082F820 00013C 0004+00 0/0 0/0 0/0 .bss sInstance__31JASGlobalInstance<10Z2SoundMgr> - */ -#pragma push -#pragma force_active on -static u8 data_8082F81C[4]; -#pragma pop - -/* 8082F820-8082F824 000140 0004+00 0/0 0/0 0/0 .bss - * sInstance__33JASGlobalInstance<12JAISoundInfo> */ -#pragma push -#pragma force_active on -static u8 data_8082F820[4]; -#pragma pop - -/* 8082F824-8082F828 000144 0004+00 0/0 0/0 0/0 .bss - * sInstance__34JASGlobalInstance<13JAUSoundTable> */ -#pragma push -#pragma force_active on -static u8 data_8082F824[4]; -#pragma pop - -/* 8082F828-8082F82C 000148 0004+00 0/0 0/0 0/0 .bss - * sInstance__38JASGlobalInstance<17JAUSoundNameTable> */ -#pragma push -#pragma force_active on -static u8 data_8082F828[4]; -#pragma pop - -/* 8082F82C-8082F830 00014C 0004+00 0/0 0/0 0/0 .bss - * sInstance__33JASGlobalInstance<12JAUSoundInfo> */ -#pragma push -#pragma force_active on -static u8 data_8082F82C[4]; -#pragma pop - -/* 8082F830-8082F834 000150 0004+00 0/0 0/0 0/0 .bss sInstance__32JASGlobalInstance<11Z2SoundInfo> - */ -#pragma push -#pragma force_active on -static u8 data_8082F830[4]; -#pragma pop - -/* 8082F834-8082F838 000154 0004+00 0/0 0/0 0/0 .bss - * sInstance__34JASGlobalInstance<13Z2SoundObjMgr> */ -#pragma push -#pragma force_active on -static u8 data_8082F834[4]; -#pragma pop - -/* 8082F838-8082F83C 000158 0004+00 0/0 0/0 0/0 .bss sInstance__31JASGlobalInstance<10Z2Audience> - */ -#pragma push -#pragma force_active on -static u8 data_8082F838[4]; -#pragma pop - -/* 8082F83C-8082F840 00015C 0004+00 0/0 0/0 0/0 .bss sInstance__32JASGlobalInstance<11Z2FxLineMgr> - */ -#pragma push -#pragma force_active on -static u8 data_8082F83C[4]; -#pragma pop - -/* 8082F840-8082F844 000160 0004+00 0/0 0/0 0/0 .bss sInstance__31JASGlobalInstance<10Z2EnvSeMgr> - */ -#pragma push -#pragma force_active on -static u8 data_8082F840[4]; -#pragma pop - -/* 8082F844-8082F848 000164 0004+00 0/0 0/0 0/0 .bss sInstance__32JASGlobalInstance<11Z2SpeechMgr> - */ -#pragma push -#pragma force_active on -static u8 data_8082F844[4]; -#pragma pop - -/* 8082F848-8082F84C 000168 0004+00 0/0 0/0 0/0 .bss - * sInstance__34JASGlobalInstance<13Z2WolfHowlMgr> */ -#pragma push -#pragma force_active on -static u8 data_8082F848[4]; -#pragma pop - -/* 8082F410-8082F410 000208 0000+00 0/0 0/0 0/0 .rodata @stringBase0 */ diff --git a/src/d/actor/d_a_fr.cpp b/src/d/actor/d_a_fr.cpp index be99fd6dad5..4a2d003e81c 100644 --- a/src/d/actor/d_a_fr.cpp +++ b/src/d/actor/d_a_fr.cpp @@ -4,13 +4,15 @@ */ #include "d/actor/d_a_fr.h" -#include "d/d_com_inf_game.h" -#include "f_op/f_op_kankyo_mng.h" -#include "d/actor/d_a_player.h" #include "SSystem/SComponent/c_lib.h" #include "c/c_damagereaction.h" +#include "d/actor/d_a_mg_fish.h" #include "d/actor/d_a_obj_lp.h" +#include "d/actor/d_a_player.h" +#include "d/d_com_inf_game.h" +#include "d/d_s_play.h" #include "dol2asm.h" +#include "f_op/f_op_kankyo_mng.h" /* 805198EC-8051994C 0000EC 0060+00 1/1 0/0 0/0 .text __ct__10daFr_HIO_cFv */ daFr_HIO_c::daFr_HIO_c() { @@ -34,18 +36,20 @@ static void anm_init(fr_class* i_this, int i_index, f32 i_morf, u8 i_mode, f32 i /* 805199F4-80519AB8 0001F4 00C4+00 1/0 0/0 0/0 .text daFr_Draw__FP8fr_class */ static int daFr_Draw(fr_class* i_this) { + fopAc_ac_c* actor = i_this; + J3DModel* model = i_this->mMorf->getModel(); - g_env_light.settingTevStruct(0, &i_this->current.pos, &i_this->tevStr); - g_env_light.setLightTevColorType_MAJI(model, &i_this->tevStr); + g_env_light.settingTevStruct(0, &actor->current.pos, &actor->tevStr); + g_env_light.setLightTevColorType_MAJI(model, &actor->tevStr); - J3DModelData* modelData = model->getModelData(); - i_this->mBtkAnm->entry(modelData); + i_this->mBtkAnm->entry(model->getModelData()); i_this->mMorf->entryDL(); if (!i_this->field_0x5ec) { - dComIfGd_setSimpleShadow(&i_this->current.pos, i_this->mAcch.m_ground_h, i_this->scale.x * 10.0f, - i_this->mAcch.m_gnd, 0, 1.0f, dDlst_shadowControl_c::getSimpleTex()); + dComIfGd_setSimpleShadow(&actor->current.pos, i_this->mAcch.GetGroundH(), + (10.0f + TREG_F(8)) * actor->scale.x, i_this->mAcch.m_gnd, 0, 1.0f, + dDlst_shadowControl_c::getSimpleTex()); } return 1; @@ -53,14 +57,17 @@ static int daFr_Draw(fr_class* i_this) { /* 80519AB8-80519B14 0002B8 005C+00 1/1 0/0 0/0 .text sibuki_set__FP8fr_class */ static void sibuki_set(fr_class* i_this) { - cXyz sp18 = i_this->current.pos; + fopAc_ac_c* actor = i_this; + + cXyz sp18 = actor->current.pos; sp18.y = i_this->field_0x5f0; - fopKyM_createWpillar(&sp18, i_this->scale.x * 0.3f, 0); + fopKyM_createWpillar(&sp18, actor->scale.x * 0.3f, 0); } /* 80519B14-80519B60 000314 004C+00 1/1 0/0 0/0 .text s_wd_sub__FPvPv */ static void* s_wd_sub(void* param_1, void* param_2) { - if (fopAc_IsActor(param_1) && fopAcM_GetName(param_1) == PROC_OBJ_LP) { + (void)param_2; + if (fopAcM_IsActor(param_1) && fopAcM_GetName(param_1) == PROC_OBJ_LP) { return param_1; } @@ -69,12 +76,15 @@ static void* s_wd_sub(void* param_1, void* param_2) { /* 80519B60-80519D28 000360 01C8+00 1/1 0/0 0/0 .text wd_check__FP8fr_class */ static wd_ss* wd_check(fr_class* i_this) { + fopAc_ac_c* actor = i_this; + obj_lp_class* mLilyPad = (obj_lp_class*)fpcM_Search(s_wd_sub, i_this); if (mLilyPad) { wd_ss* mWdSs = mLilyPad->mWdSs; + cXyz unkXyz1; for (int i = 0; i < mLilyPad->field_0xad98; i++, mWdSs++) { - cXyz sp48 = mWdSs->field_0x10 - i_this->current.pos; - if (sp48.abs() < mWdSs->field_0x3c * 22.0f) { + unkXyz1 = mWdSs->field_0x10 - actor->current.pos; + if (unkXyz1.abs() < mWdSs->field_0x3c * (22.0f + KREG_F(11))) { return mWdSs; } } @@ -84,34 +94,35 @@ static wd_ss* wd_check(fr_class* i_this) { } /* 80519D28-80519E24 000528 00FC+00 4/4 0/0 0/0 .text way_bg_check__FP8fr_class */ -static bool way_bg_check(fr_class* i_this) { +static BOOL way_bg_check(fr_class* i_this) { // NONMATCHING + cXyz sp24; + cXyz sp18; + cXyz sp0c; - cXyz sp90 = i_this->current.pos; - sp90.y += 20.0f; + sp24 = i_this->current.pos; + sp24.y += 20.0f; cMtx_YrotS(*calc_mtx, i_this->shape_angle.y); - cXyz sp9c; - cXyz spa8(0.0f, 0.0f, 50.0f); - MtxPosition(&spa8, &sp9c); - sp9c += sp90; + sp0c.x = 0.0f; + sp0c.y = 0.0f; + sp0c.z = 50.0f; + MtxPosition(&sp0c, &sp18); + sp18 += sp24; dBgS_LinChk dStack_84; - dStack_84.Set(&sp90, &sp90, i_this); + dStack_84.Set(&sp24, &sp18, i_this); if (dComIfG_Bgsp().LineCross(&dStack_84)) { - return true; + return TRUE; } else { - return false; + return FALSE; } } /* 8051BC10-8051BC14 000008 0004+00 2/2 0/0 0/0 .bss None */ -static u8 data_8051BC10[4]; - -/* 8051BC14-8051BC20 00000C 000C+00 1/1 0/0 0/0 .bss @3644 */ -static u8 lit_3644[12]; +static bool l_initHIO; /* 8051BC20-8051BC4C 000018 002C+00 9/9 0/0 0/0 .bss l_HIO */ static daFr_HIO_c l_HIO; @@ -119,16 +130,20 @@ static daFr_HIO_c l_HIO; /* 80519E24-8051A0D8 000624 02B4+00 1/2 0/0 0/0 .text fr_normal__FP8fr_class */ static void fr_normal(fr_class* i_this) { // NONMATCHING - switch (i_this->field_0x5d2) { + fopAc_ac_c* actor = i_this; + fopAc_ac_c* player = dComIfGp_getPlayer(0); + + cXyz sp18; + cXyz sp0c; + switch (i_this->field_0x5d4) { case 0: - i_this->field_0x5d4 = 1; + i_this->field_0x5d4 += (s16)1; anm_init(i_this, 11, 5.0f, 2, cM_rndF(0.3f) + 0.8f); i_this->field_0x5dc[0] = cM_rndF(50.0f) + 20.0f; i_this->speedF = 0.0f; - break; case 1: if (!i_this->field_0x5dc[0]) { - if (i_this->mMorf->getFrame() == 14) { + if ((int)i_this->mMorf->getFrame() == 14) { i_this->field_0x5d4++; anm_init(i_this, 7, 5.0f, 0, 2.0f); } @@ -141,13 +156,12 @@ static void fr_normal(fr_class* i_this) { i_this->speed.y = l_HIO.field_0xc + cM_rndFX(l_HIO.field_0xc * 0.5f); if (way_bg_check(i_this)) { - i_this->field_0x5e8 = l_HIO.field_0x14; + i_this->current.angle.y += 0x8000; } else { - i_this->current.angle.y += -0x8000; - cLib_addCalcAngleS2(&i_this->current.angle.y, - cM_atan2s((i_this->home.pos.x + cM_rndFX(i_this->field_0x5e8)) - i_this->current.pos.x, - (i_this->home.pos.z + cM_rndFX(i_this->field_0x5e8) - i_this->current.pos.z)), - 1, 0x2000); + i_this->field_0x5e8 = l_HIO.field_0x14; + f32 x = i_this->home.pos.x + cM_rndFX(i_this->field_0x5e8) - i_this->current.pos.x; + f32 z = i_this->home.pos.z + cM_rndFX(i_this->field_0x5e8) - i_this->current.pos.z; + cLib_addCalcAngleS2(&i_this->current.angle.y, cM_atan2s(x, z), 1, 0x2000 + TREG_S(2)); } i_this->field_0x5d4++; @@ -169,10 +183,14 @@ static void fr_normal(fr_class* i_this) { /* 8051A0D8-8051A318 0008D8 0240+00 1/2 0/0 0/0 .text fr_away__FP8fr_class */ static void fr_away(fr_class* i_this) { - // NONMATCHING + fopAc_ac_c* actor = i_this; + fopAc_ac_c* player = dComIfGp_getPlayer(0); + + cXyz sp14; + cXyz sp08; switch (i_this->field_0x5d4) { case 0: - i_this->field_0x5d4 = 1; + i_this->field_0x5d4 += (s16)1; i_this->speedF = 0.0f; anm_init(i_this, 7, 3.0f, 0, 4.0f); break; @@ -183,11 +201,11 @@ static void fr_away(fr_class* i_this) { i_this->speed.y = l_HIO.field_0x20 + cM_rndFX(l_HIO.field_0x20 * 0.5f); if (way_bg_check(i_this)) { - i_this->current.angle.y += -0x8000; + i_this->current.angle.y += 0x8000; } else { cLib_addCalcAngleS2(&i_this->current.angle.y, - fopAcM_searchPlayerAngleY(i_this) + cM_rndFX(8000.0f) + -0x8000, 1, - 0x2000); + fopAcM_searchPlayerAngleY(i_this) + 0x8000 + (s16)cM_rndFX(8000.0f), 1, + 0x2000 + TREG_S(2)); } i_this->field_0x5d4++; @@ -203,7 +221,7 @@ static void fr_away(fr_class* i_this) { case 3: if (i_this->mMorf->isStop()) { i_this->field_0x5d4 = 0; - if ((l_HIO.field_0x18 + 200.0f) < i_this->field_0x5d8) { + if (i_this->field_0x5d8 > (l_HIO.field_0x18 + 200.0f)) { i_this->field_0x5d2 = 0; } } @@ -212,40 +230,42 @@ static void fr_away(fr_class* i_this) { /* 8051A318-8051A558 000B18 0240+00 1/1 0/0 0/0 .text fr_s_normal__FP8fr_class */ static void fr_s_normal(fr_class* i_this) { - // NONMATCHING + fopAc_ac_c* actor = i_this; + fopAc_ac_c* player = dComIfGp_getPlayer(0); + + cXyz sp18; + cXyz sp0c; switch (i_this->field_0x5d4) { case 0: i_this->field_0x5d4++; anm_init(i_this, 10, 5.0f, 2, cM_rndF(0.3f) + 1.5f); i_this->field_0x5cc = 0; i_this->field_0x5dc[0] = cM_rndF(100.0f) + 50.0f; - if (l_HIO.field_0x24 < i_this->speedF) { + if (i_this->speedF > l_HIO.field_0x24) { i_this->speedF = l_HIO.field_0x24; } break; case 1: - if (i_this->mMorf->getFrame() > 9) { - if (i_this->mMorf->getFrame() < 0x1a) { + if ((int)i_this->mMorf->getFrame() >= 10) { + if ((int)i_this->mMorf->getFrame() <= 25) { cLib_addCalc2(&i_this->speedF, l_HIO.field_0x24, 1.0f, l_HIO.field_0x24 * 0.2f); - if (i_this->mMorf->getFrame() > 9) { - if (i_this->mMorf->getFrame() < 16 && i_this->field_0x5cc == 0) { + if ((int)i_this->mMorf->getFrame() >= 10) { + if ((int)i_this->mMorf->getFrame() <= 15 && (s8)i_this->field_0x5cc == 0) { if (way_bg_check(i_this)) { - i_this->current.angle.y += -0x8000; + i_this->current.angle.y += 0x8000; } else { i_this->field_0x5e8 = l_HIO.field_0x14; - cXyz sp28; - sp28.x = i_this->home.pos.x + cM_rndFX(i_this->field_0x5e8) - i_this->current.pos.x; - sp28.z = i_this->home.pos.z + cM_rndFX(i_this->field_0x5e8) - i_this->current.pos.z; - s16 sVar2 = cM_atan2s(sp28.x, sp28.z); - cLib_addCalcAngleS2(&i_this->current.angle.y, sVar2, 1, 0x2000); + sp0c.x = i_this->home.pos.x + cM_rndFX(i_this->field_0x5e8) - i_this->current.pos.x; + sp0c.z = i_this->home.pos.z + cM_rndFX(i_this->field_0x5e8) - i_this->current.pos.z; + cLib_addCalcAngleS2(&i_this->current.angle.y, cM_atan2s(sp0c.x, sp0c.z), 1, 0x2000 + TREG_S(2)); } i_this->field_0x5cc = 1; } } - if (i_this->mMorf->getFrame() < 20) { + if ((int)i_this->mMorf->getFrame() < 20) { return; } i_this->field_0x5cc = 0; @@ -263,7 +283,11 @@ static void fr_s_normal(fr_class* i_this) { /* 8051A558-8051A620 000D58 00C8+00 1/1 0/0 0/0 .text fr_s_wait__FP8fr_class */ static void fr_s_wait(fr_class* i_this) { - // NONMATCHING + fopAc_ac_c* actor = i_this; + fopAc_ac_c* player = dComIfGp_getPlayer(0); + + cXyz sp14; + cXyz sp08; switch (i_this->field_0x5d4) { case 0: i_this->field_0x5d4++; @@ -283,6 +307,11 @@ static void fr_s_wait(fr_class* i_this) { /* 8051A620-8051A820 000E20 0200+00 1/1 0/0 0/0 .text fr_s_away__FP8fr_class */ static void fr_s_away(fr_class* i_this) { // NONMATCHING + fopAc_ac_c* actor = i_this; + fopAc_ac_c* player = dComIfGp_getPlayer(0); + + cXyz sp14; + cXyz sp08; switch (i_this->field_0x5d4) { case 0: i_this->field_0x5d4++; @@ -290,20 +319,20 @@ static void fr_s_away(fr_class* i_this) { i_this->field_0x5cc = 0; break; case 1: - if (i_this->mMorf->getFrame() > 9) { - if (i_this->mMorf->getFrame() > 0x1a) { + if ((int)i_this->mMorf->getFrame() >= 10) { + if ((int)i_this->mMorf->getFrame() >= 25) { cLib_addCalc2(&i_this->speedF, l_HIO.field_0x28, 1.0f, l_HIO.field_0x28 * 0.2f); - if (i_this->mMorf->getFrame() > 9) { - if (i_this->mMorf->getFrame() < 16 && i_this->field_0x5cc == 0) { + if ((int)i_this->mMorf->getFrame() >= 10) { + if ((int)i_this->mMorf->getFrame() <= 15 && (s8)i_this->field_0x5cc == 0) { if (way_bg_check(i_this)) { - i_this->current.angle.y += -0x8000; + i_this->current.angle.y += 0x8000; } else { cLib_addCalcAngleS2(&i_this->current.angle.y, - (fopAcM_searchPlayerAngleY(i_this) + cM_rndFX(8000.0f)) + -0x8000, - 1, 0x2000); + (s16)(fopAcM_searchPlayerAngleY(i_this) + (s16)cM_rndFX(8000.0f)) + 0x8000, + 1, 0x2000 + TREG_S(2)); } - if (l_HIO.field_0x18 + 200.0f < i_this->field_0x5d8) { + if (i_this->field_0x5d8 > l_HIO.field_0x18 + 200.0f) { i_this->field_0x5d2 = 20; i_this->field_0x5d4 = 0; } @@ -312,7 +341,7 @@ static void fr_s_away(fr_class* i_this) { } } - if (i_this->mMorf->getFrame() < 20) { + if ((int)i_this->mMorf->getFrame() < 20) { return; } @@ -327,29 +356,34 @@ static void fr_s_away(fr_class* i_this) { /* 8051A820-8051A904 001020 00E4+00 1/1 0/0 0/0 .text fr_eat__FP8fr_class */ static void fr_eat(fr_class* i_this) { - // NONMATCHING + fopAc_ac_c* this_actor = i_this; + fopAc_ac_c* player = dComIfGp_getPlayer(0); + + cXyz sp14; + cXyz sp08; fopAc_ac_c* actor = fopAcM_SearchByID(i_this->field_0x5f8); if (!actor) { fopAcM_delete(i_this); } else { switch (i_this->field_0x5d4) { - case 0: - i_this->field_0x5d4++; - anm_init(i_this, 10, 20.0f, 2, 0.0f); - i_this->field_0x5dc[0] = 20; - case 1: - i_this->mMorf->setFrame(0.0f); + case 0: + i_this->field_0x5d4++; + anm_init(i_this, 10, 20.0f, 2, 0.0f); + i_this->field_0x5dc[0] = 20; + case 1: + i_this->mMorf->setFrame(0.0f); + // not sure if this cast is right + i_this->current.pos = ((mg_fish_class*)actor)->field_0x638; - if (i_this->field_0x5dc[0] == 0) { - fopAcM_delete(i_this); - } + if (i_this->field_0x5dc[0] == 0) { + fopAcM_delete(i_this); + } } } } /* 8051A904-8051AA9C 001104 0198+00 2/2 0/0 0/0 .text swim_on__FP8fr_class */ static void swim_on(fr_class* i_this) { - // NONMATCHING if (i_this->field_0x5ec == 0) { i_this->field_0x5d2 = 0; i_this->field_0x5d4 = 0; @@ -358,21 +392,20 @@ static void swim_on(fr_class* i_this) { i_this->gravity = 0.0f; i_this->speed.y = 0.0f; - f32 fVar3 = 0.5f * cM_ssin(i_this->field_0x5d0 * 0x5dc) - i_this->scale.x * 10.0f * 1.33f; + f32 fVar3 = (0.5f + BREG_F(6)) * cM_ssin(i_this->field_0x5d0 * (1500 + BREG_S(5))) - i_this->scale.x * 10.0f * 1.33f; s16 sVar2; if (i_this->field_0x5d2 == 0x1e) { - sVar2 = -(5000 + 700 * cM_ssin(i_this->field_0x5d0 * 700)); - fVar3 -= 3.0f * i_this->scale.x * 1.33f; + sVar2 = (cM_ssin(i_this->field_0x5d0 * (700 + BREG_S(3))) * (700 + BREG_S(4)) + -(5000 + BREG_S(7))); + fVar3 -= (3.0f + BREG_F(4)) * i_this->scale.x * 1.33f; } else { sVar2 = 0; } cLib_addCalc2(&i_this->field_0x5f4, fVar3, 0.1f, 1.0f); cLib_addCalcAngleS2(&i_this->shape_angle.x, sVar2, 16, 0x100); - fVar3 = cM_ssin(i_this->field_0x5d0 * 600); - i_this->shape_angle.z = 500 * fVar3; + i_this->shape_angle.z = cM_ssin(i_this->field_0x5d0 * (600 + BREG_S(1))) * (500 + BREG_S(2)); if (((i_this->field_0x994 == -1 || !daPy_py_c::checkNowWolf()) && i_this->field_0x5d2 != 0x28) && i_this->field_0x5d8 < l_HIO.field_0x18) { @@ -384,14 +417,15 @@ static void swim_on(fr_class* i_this) { /* 8051AA9C-8051AC2C 00129C 0190+00 1/1 0/0 0/0 .text swim_off__FP8fr_class */ static void swim_off(fr_class* i_this) { - // NONMATCHING + fopAc_ac_c* this_actor = i_this; + cLib_addCalc0(&i_this->field_0x5f4, 0.1f, 1.0f); i_this->shape_angle.z = 0; if (i_this->mAcch.ChkGroundHit() || i_this->field_0x5ce != 0) { i_this->shape_angle.x = 0; } else { - i_this->shape_angle.x = i_this->speed.y * -500.0f; + i_this->shape_angle.x = i_this->speed.y * (-500.0f + TREG_F(9)); if (i_this->shape_angle.x > 0x1000) { i_this->shape_angle.x = 0x1000; } else if (i_this->shape_angle.x < -0x2000) { @@ -414,11 +448,11 @@ static void swim_off(fr_class* i_this) { /* 8051AC2C-8051AD04 00142C 00D8+00 1/1 0/0 0/0 .text fr_message__FP8fr_class */ static void fr_message(fr_class* i_this) { - // NONMATCHING - s16 sVar1 = i_this->field_0x5d4; + fopAc_ac_c* this_actor = i_this; + switch (i_this->field_0x5d4) { case 0: - anm_init(i_this, 11, 400.0f, 2, cM_rndF(0.3f) + 0.8f); + anm_init(i_this, 11, 5.0f, 2, cM_rndF(0.3f) + 0.8f); i_this->field_0x5d4++; case 1: default: @@ -435,40 +469,46 @@ static void fr_message(fr_class* i_this) { /* 8051AD04-8051B04C 001504 0348+00 2/1 0/0 0/0 .text action__FP8fr_class */ static void action(fr_class* i_this) { // NONMATCHING + fopAc_ac_c* this_actor = i_this; + + cXyz sp30; + cXyz sp24; + char cVar4 = 0; i_this->gravity = l_HIO.field_0x10; i_this->field_0x991 = 0; switch (i_this->field_0x5d2) { - case 0: - fr_normal(i_this); - i_this->field_0x991 = 1; - break; - case 5: - fr_away(i_this); - i_this->field_0x991 = 1; - break; - case 10: - fr_message(i_this); - i_this->field_0x991 = 2; - break; - case 15: - cVar4 = -1; - break; - case 20: - fr_s_normal(i_this); - cVar4 = 1; - break; - case 30: - fr_s_wait(i_this); - cVar4 = 1; - break; - case 40: - fr_s_away(i_this); - cVar4 = 1; - break; - case 50: - fr_eat(i_this); - cVar4 = -2; + case 0: + fr_normal(i_this); + i_this->field_0x991 = 1; + break; + case 5: + fr_away(i_this); + i_this->field_0x991 = 1; + break; + case 10: + fr_message(i_this); + i_this->field_0x991 = 2; + break; + case 20: + fr_s_normal(i_this); + cVar4 = 1; + break; + case 30: + fr_s_wait(i_this); + cVar4 = 1; + break; + case 40: + fr_s_away(i_this); + cVar4 = 1; + break; + case 50: + fr_eat(i_this); + cVar4 = -2; + break; + case 15: + cVar4 = -1; + break; } if (((i_this->field_0x991 == 1 && i_this->field_0x994 != -1) && daPy_py_c::checkNowWolf()) && i_this->field_0x5d8 < 300.0f) { @@ -479,11 +519,12 @@ static void action(fr_class* i_this) { if (cVar4 != -2) { cLib_addCalcAngleS2(&i_this->shape_angle.y, i_this->current.angle.y, 2, 0x4000); cMtx_YrotS(*calc_mtx, i_this->current.angle.y); - cXyz sp90; - cXyz sp84(0.0f, 0.0f, i_this->speedF); - MtxPosition(&sp84, &sp90); - i_this->speed.x = sp90.x; - i_this->speed.z = sp90.z; + sp24.x = 0.0f; + sp24.y = 0.0f; + sp24.z = i_this->speedF; + MtxPosition(&sp24, &sp30); + i_this->speed.x = sp30.x; + i_this->speed.z = sp30.z; i_this->speed.y += i_this->gravity; i_this->current.pos += (i_this->speed * i_this->scale.x) * 1.33f; @@ -492,8 +533,8 @@ static void action(fr_class* i_this) { i_this->speed.y = -80.0f; } - sp84 = i_this->current.pos; - sp84.y += 200.0f; + sp24 = i_this->current.pos; + sp24.y += 200.0f; f32 fVar6 = i_this->mAcch.GetGroundH(); dBgS_ObjGndChk_Spl(cStack_78); i_this->field_0x5ec = 0; @@ -502,12 +543,11 @@ static void action(fr_class* i_this) { if (wd_check(i_this)) { bVar2 = true; } else { - cStack_78.SetPos(&sp84); - f32 fVar5 = dComIfG_Bgsp().GroundCross(&cStack_78); - i_this->field_0x5f0 = fVar5; + cStack_78.SetPos(&sp24); + i_this->field_0x5f0 = dComIfG_Bgsp().GroundCross(&cStack_78); - if (fVar6 < fVar5 && i_this->current.pos.y <= fVar5) { - i_this->current.pos.y = i_this->field_0x5f0; + if (fVar6 < i_this->field_0x5f0 && i_this->current.pos.y <= i_this->field_0x5f0 + YREG_F(0)) { + i_this->current.pos.y = i_this->field_0x5f0 + YREG_F(0); i_this->field_0x5ec = 1; } } @@ -521,8 +561,8 @@ static void action(fr_class* i_this) { i_this->mAcch.CrrPos(dComIfG_Bgsp()); i_this->field_0x5ce = 0; - if ((bVar2 && i_this->speed.y <= 0.0f) && i_this->current.pos.y <= i_this->field_0x5f0 + i_this->scale.x * 5.0f) { - i_this->current.pos.y = i_this->field_0x5f0 + i_this->scale.x * 5.0f; + if ((bVar2 && i_this->speed.y <= 0.0f) && i_this->current.pos.y <= i_this->field_0x5f0 + i_this->scale.x * (5.0f + YREG_F(11))) { + i_this->current.pos.y = i_this->field_0x5f0 + i_this->scale.x * (5.0f + YREG_F(11)); i_this->speed.y = 0.0f; i_this->field_0x5ce = 1; } @@ -531,7 +571,6 @@ static void action(fr_class* i_this) { /* 8051B04C-8051B170 00184C 0124+00 1/1 0/0 0/0 .text message__FP8fr_class */ static int message(fr_class* i_this) { - // NONMATCHING if (i_this->field_0x992) { i_this->field_0x5e4 = 10; if (i_this->mMsgFlow.doFlow(i_this, NULL, 0)) { @@ -553,20 +592,23 @@ static int message(fr_class* i_this) { i_this->eventInfo.onCondition(1); } else { fopAcM_OffStatus(i_this, 0); - cLib_offBit(i_this->attention_info.flags, 1); +#if DEBUG + cLib_offBit(i_this->attention_info.flags, 0x42); +#else + cLib_offBit(i_this->attention_info.flags, 0xa); +#endif } return 0; - } /* 8051B170-8051B354 001970 01E4+00 2/1 0/0 0/0 .text daFr_Execute__FP8fr_class */ static int daFr_Execute(fr_class* i_this) { - // NONMATCHING if (cDmrNowMidnaTalk()) { return 1; } + cXyz sp18(0.0f, 0.0f, 0.0f); i_this->field_0x5d8 = fopAcM_searchPlayerDistance(i_this); i_this->field_0x5d0++; for (int i = 0; i < 4; i++) { @@ -582,8 +624,8 @@ static int daFr_Execute(fr_class* i_this) { action(i_this); mDoMtx_stack_c::transS(i_this->current.pos.x, i_this->current.pos.y + i_this->field_0x5f4, i_this->current.pos.z); - mDoMtx_stack_c::YrotM(i_this->shape_angle.y); - mDoMtx_stack_c::XrotM(i_this->shape_angle.x); + mDoMtx_stack_c::YrotM((s16)i_this->shape_angle.y); + mDoMtx_stack_c::XrotM((s16)i_this->shape_angle.x); mDoMtx_stack_c::ZrotM(i_this->shape_angle.z); mDoMtx_stack_c::scaleM(i_this->scale.x, i_this->scale.x, i_this->scale.x); @@ -609,11 +651,15 @@ static int daFr_IsDelete(fr_class* i_this) { /* 8051B35C-8051B3B0 001B5C 0054+00 1/0 0/0 0/0 .text daFr_Delete__FP8fr_class */ static int daFr_Delete(fr_class* i_this) { + fpc_ProcID id = fopAcM_GetID(i_this); + dComIfG_resDelete(&i_this->mPhase, "Fr"); if (i_this->field_0x9e4) { - data_8051BC10[0] = 0; + l_initHIO = false; } + mDoHIO_DELETE_CHILD(l_HIO.field_0x4); + return 1; } @@ -666,9 +712,9 @@ static int daFr_Create(fopAc_ac_c* a_this) { OS_REPORT("//////////////FR SET 2 !!\n"); - if (data_8051BC10[0] == 0) { + if (!l_initHIO) { i_this->field_0x9e4 = 1; - data_8051BC10[0] = 1; + l_initHIO = true; l_HIO.field_0x4 = -1; } @@ -698,21 +744,6 @@ static int daFr_Create(fopAc_ac_c* a_this) { return phase_state; } -// /* 8051B920-8051B968 002120 0048+00 2/1 0/0 0/0 .text __dt__10daFr_HIO_cFv */ -// daFr_HIO_c::~daFr_HIO_c() { -// // NONMATCHING -// } - -/* 8051B968-8051B9A4 002168 003C+00 0/0 1/0 0/0 .text __sinit_d_a_fr_cpp */ -void __sinit_d_a_fr_cpp() { - // NONMATCHING -} - -#pragma push -#pragma force_active on -REGISTER_CTORS(0x8051B968, __sinit_d_a_fr_cpp); -#pragma pop - /* 8051BB60-8051BB80 -00001 0020+00 1/0 0/0 0/0 .data l_daFr_Method */ static actor_method_class l_daFr_Method = { (process_method_func)daFr_Create, diff --git a/src/d/actor/d_a_kago.cpp b/src/d/actor/d_a_kago.cpp index c6131c3ac74..7c25ce7eaf1 100644 --- a/src/d/actor/d_a_kago.cpp +++ b/src/d/actor/d_a_kago.cpp @@ -4,1862 +4,3954 @@ */ #include "d/actor/d_a_kago.h" -#include "dol2asm.h" #include "d/d_camera.h" +#include "d/d_com_inf_game.h" +#include "d/d_msg_object.h" -// -// Forward References: -// +#include -extern "C" void __ct__12daKago_HIO_cFv(); -extern "C" void getBckName__8daKago_cFi(); -extern "C" void setBck__8daKago_cFiUcff(); -extern "C" void checkBck__8daKago_cFi(); -extern "C" void draw__8daKago_cFv(); -extern "C" void __dt__4cXyzFv(); -extern "C" static void daKago_Draw__FP8daKago_c(); -extern "C" void executeBalloonMenu__8daKago_cFv(); -extern "C" void checkGroundHeight__8daKago_cF4cXyzPf(); -extern "C" void checkRoofHeight__8daKago_cF4cXyz(); -extern "C" void checkMoveHeight__8daKago_cFv(); -extern "C" void checkSizeBg__8daKago_cFv(); -extern "C" void __dt__8cM3dGPlaFv(); -extern "C" bool getBeforeGroundHeight__8daKago_cFUc(); -extern "C" void demo_skip__8daKago_cFi(); -extern "C" void DemoSkipCallBack__8daKago_cFPvi(); -extern "C" void setActionMode__8daKago_cFii(); -extern "C" void setMidnaTagPos__8daKago_cFv(); -extern "C" void setMidnaRideOn__8daKago_cFv(); -extern "C" void setPlayerRideOn__8daKago_cFv(); -extern "C" void setRideOff__8daKago_cFv(); -extern "C" void searchNearPassPoint__8daKago_cFv(); -extern "C" void setSceneChange__8daKago_cFi(); -extern "C" void createBalloonScore__8daKago_cFv(); -extern "C" void startBalloonScore__8daKago_cFv(); -extern "C" void endBalloonScore__8daKago_cFv(); -extern "C" void checkNextPath__8daKago_cF4cXyz(); -extern "C" void checkHeight__8daKago_cFv(); -extern "C" void checkYaguraPos__8daKago_cF4cXyz(); -extern "C" void checkWallHitFall__8daKago_cFi(); -extern "C" void checkAttackStart__8daKago_cFv(); -extern "C" void getValueY__8daKago_cFf(); -extern "C" void getValueX__8daKago_cFf(); -extern "C" void getValueAbsX__8daKago_cFf(); -extern "C" void flySpeedCalcLockOn__8daKago_cFv(); -extern "C" void flySpeedCalc__8daKago_cFsi(); -extern "C" void checkFlySceneChange__8daKago_cFv(); -extern "C" void setFlyAway__8daKago_cFv(); -extern "C" void setFlyAnime__8daKago_cFv(); -extern "C" void executeFly__8daKago_cFv(); -extern "C" void executeStagger__8daKago_cFv(); -extern "C" void executeWait__8daKago_cFv(); -extern "C" void calcAttackMove__8daKago_cFi(); -extern "C" void executeAttack__8daKago_cFv(); -extern "C" void calcCircleCamera__8daKago_cFi(); -extern "C" void executeEvent__8daKago_cFv(); -extern "C" void initPerchDemo__8daKago_cFv(); -extern "C" void executePerchDemo__8daKago_cFv(); -extern "C" void PerchDemoAwayForward__8daKago_cFv(); -extern "C" void executePerch__8daKago_cFv(); -extern "C" void executeEvent2__8daKago_cFv(); -extern "C" void initFirstDemo__8daKago_cFv(); -extern "C" void executeFirstDemo__8daKago_cFv(); -extern "C" void executePerch2__8daKago_cFv(); -extern "C" void executeLandingLakeHairia__8daKago_cFv(); -extern "C" void executeLandingBoartHouse__8daKago_cFv(); -extern "C" void executeLanding__8daKago_cFv(); -extern "C" void moveDemoFly__8daKago_cFv(); -extern "C" void setFlyEffect__8daKago_cFv(); -extern "C" void setDashEffect__8daKago_cFv(); -extern "C" void setDamageEffect__8daKago_cFv(); -extern "C" void setDashBlurEffect__8daKago_cFi(); -extern "C" void setWallHitEffect__8daKago_cF4cXyzi(); -extern "C" void setSibukiEffect__8daKago_cFv(); -extern "C" void setDashSibukiEffect__8daKago_cFv(); -extern "C" void setWaterFallEffect__8daKago_cFv(); -extern "C" static void s_waterfall__FPvPv(); -extern "C" void setFlySound__8daKago_cFv(); -extern "C" void action__8daKago_cFv(); -extern "C" void mtx_set__8daKago_cFv(); -extern "C" void cc_set__8daKago_cFv(); -extern "C" void execute__8daKago_cFv(); -extern "C" static void daKago_Execute__FP8daKago_c(); -extern "C" static bool daKago_IsDelete__FP8daKago_c(); -extern "C" void _delete__8daKago_cFv(); -extern "C" static void daKago_Delete__FP8daKago_c(); -extern "C" void ctrlJoint__8daKago_cFP8J3DJointP8J3DModel(); -extern "C" void JointCallBack__8daKago_cFP8J3DJointi(); -extern "C" void CreateHeap__8daKago_cFv(); -extern "C" static void useHeapInit__FP10fopAc_ac_c(); -extern "C" void create__8daKago_cFv(); -extern "C" void __dt__8cM3dGSphFv(); -extern "C" void __dt__8cM3dGAabFv(); -extern "C" void __dt__12dBgS_ObjAcchFv(); -extern "C" void __ct__4cXyzFv(); -extern "C" static void daKago_Create__FP8daKago_c(); -extern "C" void __dt__12daKago_HIO_cFv(); -extern "C" void __sinit_d_a_kago_cpp(); -extern "C" static void func_80854AD0(); -extern "C" static void func_80854AD8(); -extern "C" void getMidnaActor__9daPy_py_cFv(); -extern "C" extern char const* const d_a_kago__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 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 -__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 __ct__10fopAc_ac_cFv(); -extern "C" void fopAc_IsActor__FPv(); -extern "C" void fopAcM_SearchByID__FUiPP10fopAc_ac_c(); -extern "C" void fopAcM_SearchByName__FsPP10fopAc_ac_c(); -extern "C" void fopAcM_create__FsUlPC4cXyziPC5csXyzPC4cXyzSc(); -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_orderPotentialEvent__FP10fopAc_ac_cUsUsUs(); -extern "C" void fopAcM_setEffectMtx__FPC10fopAc_ac_cPC12J3DModelData(); -extern "C" void fopOvlpM_IsPeek__Fv(); -extern "C" void fpcEx_Search__FPFPvPv_PvPv(); -extern "C" void fpcM_IsCreating__FUi(); -extern "C" void dStage_changeScene__FifUlScsi(); -extern "C" void getLayerNo__14dComIfG_play_cFi(); -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_setNextStage__FPCcsScScfUliScsii(); -extern "C" void -dComIfGd_setShadow__FUlScP8J3DModelP4cXyzffffR13cBgS_PolyInfoP12dKy_tevstr_csfP9_GXTexObj(); -extern "C" void onSwitch__12dSv_memBit_cFi(); -extern "C" void isSwitch__12dSv_memBit_cCFi(); -extern "C" void onEventBit__11dSv_event_cFUs(); -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 getEmitter__Q213dPa_control_c7level_cFUl(); -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 dPath_GetPnt__FPC5dPathi(); -extern "C" void dPath_GetRoomPath__Fii(); -extern "C" void StartShock__12dVibration_cFii4cXyz(); -extern "C" void StartQuake__12dVibration_cFii4cXyz(); -extern "C" void StopQuake__12dVibration_cFi(); -extern "C" void LockonTarget__12dAttention_cFl(); -extern "C" void LockonTruth__12dAttention_cFv(); -extern "C" void LineCross__4cBgSFP11cBgS_LinChk(); -extern "C" void GroundCross__4cBgSFP11cBgS_GndChk(); -extern "C" void GetActorPointer__4cBgSCFi(); -extern "C" void GetTriPla__4cBgSCFRC13cBgS_PolyInfoP8cM3dGPla(); -extern "C" void GetSpecialCode__4dBgSFRC13cBgS_PolyInfo(); -extern "C" void RoofChk__4dBgSFP12dBgS_RoofChk(); -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__18dBgS_ObjGndChk_SplFv(); -extern "C" void __dt__18dBgS_ObjGndChk_SplFv(); -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__12dBgS_RoofChkFv(); -extern "C" void __dt__12dBgS_RoofChkFv(); -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 setPlayerDamage__9daPy_py_cFii(); -extern "C" void Start__9dCamera_cFv(); -extern "C" void Stop__9dCamera_cFv(); -extern "C" void SetTrimSize__9dCamera_cFl(); -extern "C" void SetTrimTypeForce__9dCamera_cFl(); -extern "C" void ModeFix__9dCamera_cFl(); -extern "C" void Set__9dCamera_cF4cXyz4cXyzfs(); -extern "C" void Reset__9dCamera_cF4cXyz4cXyz(); -extern "C" void Reset__9dCamera_cFv(); -extern "C" void dCam_getBody__Fv(); -extern "C" void Eye__9dCamera_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 getSelectCursorPos__12dMsgObject_cFv(); -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 remove__10dMsgFlow_cFv(); -extern "C" void getNowMsgNo__10dMsgFlow_cFv(); -extern "C" void Set__4cCcSFP8cCcD_Obj(); -extern "C" void __pl__4cXyzCFRC3Vec(); -extern "C" void __mi__4cXyzCFRC3Vec(); -extern "C" void __ml__4cXyzCFf(); -extern "C" void __ct__5csXyzFsss(); -extern "C" void cM_rnd__Fv(); -extern "C" void SetPos__11cBgS_GndChkFPC4cXyz(); -extern "C" void SetC__8cM3dGSphFRC4cXyz(); -extern "C" void SetR__8cM3dGSphFf(); -extern "C" void cLib_addCalcPos__FP4cXyzRC4cXyzfff(); -extern "C" void cLib_addCalcAngleS__FPsssss(); -extern "C" void cLib_chaseUC__FPUcUcUc(); -extern "C" void cLib_chaseF__FPfff(); -extern "C" void cLib_chasePos__FP4cXyzRC4cXyzf(); -extern "C" void cLib_chaseAngleS__FPsss(); -extern "C" void cLib_targetAngleY__FPC3VecPC3Vec(); -extern "C" void cLib_targetAngleX__FPC4cXyzPC4cXyz(); -extern "C" void cLib_offsetPos__FP4cXyzPC4cXyzsPC4cXyz(); -extern "C" void func_80280808(); -extern "C" void setDemoName__11Z2StatusMgrFPc(); -extern "C" void __ct__15Z2CreatureEnemyFv(); -extern "C" void init__15Z2CreatureEnemyFP3VecP3VecUcUc(); -extern "C" void* __nw__FUl(); -extern "C" void __dl__FPv(); -extern "C" void checkPass__12J3DFrameCtrlFf(); -extern "C" void __construct_array(); -extern "C" void _savegpr_24(); -extern "C" void _savegpr_25(); -extern "C" void _savegpr_26(); -extern "C" void _savegpr_27(); -extern "C" void _savegpr_28(); -extern "C" void _savegpr_29(); -extern "C" void _restgpr_24(); -extern "C" void _restgpr_25(); -extern "C" void _restgpr_26(); -extern "C" void _restgpr_27(); -extern "C" void _restgpr_28(); -extern "C" void _restgpr_29(); -extern "C" u8 saveBitLabels__16dSv_event_flag_c[1644 + 4 /* padding */]; -extern "C" extern void* __vt__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 m_cpadInfo__8mDoCPd_c[256]; -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" u8 m_midnaActor__9daPy_py_c[4]; -extern "C" u8 mAudioMgrPtr__10Z2AudioMgr[4 + 4 /* padding */]; -extern "C" void setScoreCount__13daBalloon2D_cFUl(); -extern "C" void setLockByCargo__8daE_YM_cFv(); -extern "C" void __register_global_object(); -extern "C" void saveBestScore__15daObj_Balloon_cFv(); -extern "C" void checkHitWaterFall__16daTagWaterFall_cF4cXyz(); - -// -// Declarations: -// - -/* ############################################################################################## */ -/* 80854B04-80854B08 000000 0004+00 27/27 0/0 0/0 .rodata @3929 */ -SECTION_RODATA static f32 const lit_3929 = 1024.0f; -COMPILER_STRIP_GATE(0x80854B04, &lit_3929); - -/* 80854B08-80854B0C 000004 0004+00 0/1 0/0 0/0 .rodata @3930 */ -#pragma push -#pragma force_active on -SECTION_RODATA static f32 const lit_3930 = 512.0f; -COMPILER_STRIP_GATE(0x80854B08, &lit_3930); -#pragma pop - -/* 80854B0C-80854B10 000008 0004+00 0/1 0/0 0/0 .rodata @3931 */ -#pragma push -#pragma force_active on -SECTION_RODATA static f32 const lit_3931 = 256.0f; -COMPILER_STRIP_GATE(0x80854B0C, &lit_3931); -#pragma pop - -/* 80854B10-80854B14 00000C 0004+00 11/25 0/0 0/0 .rodata @3932 */ -SECTION_RODATA static f32 const lit_3932 = 1.0f; -COMPILER_STRIP_GATE(0x80854B10, &lit_3932); - -/* 80854B14-80854B18 000010 0004+00 0/6 0/0 0/0 .rodata @3933 */ -#pragma push -#pragma force_active on -SECTION_RODATA static f32 const lit_3933 = 50.0f; -COMPILER_STRIP_GATE(0x80854B14, &lit_3933); -#pragma pop - -/* 80854B18-80854B1C 000014 0004+00 0/7 0/0 0/0 .rodata @3934 */ -#pragma push -#pragma force_active on -SECTION_RODATA static f32 const lit_3934 = 70.0f; -COMPILER_STRIP_GATE(0x80854B18, &lit_3934); -#pragma pop - -/* 80854B1C-80854B20 000018 0004+00 0/1 0/0 0/0 .rodata @3935 */ -#pragma push -#pragma force_active on -SECTION_RODATA static f32 const lit_3935 = 90.0f; -COMPILER_STRIP_GATE(0x80854B1C, &lit_3935); -#pragma pop - -/* 80854B20-80854B24 00001C 0004+00 0/6 0/0 0/0 .rodata @3936 */ -#pragma push -#pragma force_active on -SECTION_RODATA static f32 const lit_3936 = 5.0f; -COMPILER_STRIP_GATE(0x80854B20, &lit_3936); -#pragma pop - -/* 80854B24-80854B28 000020 0004+00 0/5 0/0 0/0 .rodata @3937 */ -#pragma push -#pragma force_active on -SECTION_RODATA static f32 const lit_3937 = 300.0f; -COMPILER_STRIP_GATE(0x80854B24, &lit_3937); -#pragma pop - -/* 80854B28-80854B2C 000024 0004+00 0/6 0/0 0/0 .rodata @3938 */ -#pragma push -#pragma force_active on -SECTION_RODATA static f32 const lit_3938 = 3.0f; -COMPILER_STRIP_GATE(0x80854B28, &lit_3938); -#pragma pop - -/* 80854B2C-80854B30 000028 0004+00 0/1 0/0 0/0 .rodata @3939 */ -#pragma push -#pragma force_active on -SECTION_RODATA static f32 const lit_3939 = 85.0f; -COMPILER_STRIP_GATE(0x80854B2C, &lit_3939); -#pragma pop - -/* 80854B30-80854B34 00002C 0004+00 0/2 0/0 0/0 .rodata @3940 */ -#pragma push -#pragma force_active on -SECTION_RODATA static f32 const lit_3940 = 700.0f; -COMPILER_STRIP_GATE(0x80854B30, &lit_3940); -#pragma pop - -/* 80854B34-80854B38 000030 0004+00 1/7 0/0 0/0 .rodata @3941 */ -SECTION_RODATA static f32 const lit_3941 = 200.0f; -COMPILER_STRIP_GATE(0x80854B34, &lit_3941); - -/* 80854B38-80854B3C 000034 0004+00 4/27 0/0 0/0 .rodata @3942 */ -SECTION_RODATA static u8 const lit_3942[4] = { - 0x00, - 0x00, - 0x00, - 0x00, -}; -COMPILER_STRIP_GATE(0x80854B38, &lit_3942); - -/* 80854B3C-80854B40 000038 0004+00 2/13 0/0 0/0 .rodata @3943 */ -SECTION_RODATA static f32 const lit_3943 = 10.0f; -COMPILER_STRIP_GATE(0x80854B3C, &lit_3943); +#include "d/actor/d_a_balloon_2D.h" +#include "d/actor/d_a_e_ym.h" +#include "d/actor/d_a_midna.h" +#include "d/actor/d_a_obj_balloon.h" +#include "d/actor/d_a_obj_riverrock.h" +#include "d/actor/d_a_player.h" +#include "d/actor/d_a_tag_waterfall.h" +#include "f_op/f_op_overlap_mng.h" /* 80854D4C-80854D8C 000000 0040+00 1/1 0/0 0/0 .data cc_sph_src__22@unnamed@d_a_kago_cpp@ */ -SECTION_DATA static u8 data_80854D4C[64] = { - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x08, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x12, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x09, 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, 0x42, 0xA0, 0x00, 0x00, -}; - -/* 80854D8C-80854DC8 -00001 003C+00 1/1 0/0 0/0 .data @3969 */ -SECTION_DATA static void* lit_3969[15] = { - (void*)(((char*)getBckName__8daKago_cFi) + 0x38), - (void*)(((char*)getBckName__8daKago_cFi) + 0x40), - (void*)(((char*)getBckName__8daKago_cFi) + 0x48), - (void*)(((char*)getBckName__8daKago_cFi) + 0x50), - (void*)(((char*)getBckName__8daKago_cFi) + 0x58), - (void*)(((char*)getBckName__8daKago_cFi) + 0x60), - (void*)(((char*)getBckName__8daKago_cFi) + 0x68), - (void*)(((char*)getBckName__8daKago_cFi) + 0x70), - (void*)(((char*)getBckName__8daKago_cFi) + 0x78), - (void*)(((char*)getBckName__8daKago_cFi) + 0x88), - (void*)(((char*)getBckName__8daKago_cFi) + 0x88), - (void*)(((char*)getBckName__8daKago_cFi) + 0x88), - (void*)(((char*)getBckName__8daKago_cFi) + 0x88), - (void*)(((char*)getBckName__8daKago_cFi) + 0x88), - (void*)(((char*)getBckName__8daKago_cFi) + 0x80), -}; - -/* 80854DC8-80854DF4 -00001 002C+00 1/1 0/0 0/0 .data @4496 */ -SECTION_DATA static void* lit_4496[11] = { - (void*)(((char*)demo_skip__8daKago_cFi) + 0x4C), - (void*)(((char*)demo_skip__8daKago_cFi) + 0x60), - (void*)(((char*)demo_skip__8daKago_cFi) + 0x74), - (void*)(((char*)demo_skip__8daKago_cFi) + 0x6C), - (void*)(((char*)demo_skip__8daKago_cFi) + 0xC0), - (void*)(((char*)demo_skip__8daKago_cFi) + 0xD8), - (void*)(((char*)demo_skip__8daKago_cFi) + 0xD8), - (void*)(((char*)demo_skip__8daKago_cFi) + 0x114), - (void*)(((char*)demo_skip__8daKago_cFi) + 0x11C), - (void*)(((char*)demo_skip__8daKago_cFi) + 0x240), - (void*)(((char*)demo_skip__8daKago_cFi) + 0x248), -}; - -/* 80854DF4-80854E10 -00001 001C+00 1/1 0/0 0/0 .data @6166 */ -SECTION_DATA static void* lit_6166[7] = { - (void*)(((char*)executePerchDemo__8daKago_cFv) + 0xAC), - (void*)(((char*)executePerchDemo__8daKago_cFv) + 0x3B8), - (void*)(((char*)executePerchDemo__8daKago_cFv) + 0x5A8), - (void*)(((char*)executePerchDemo__8daKago_cFv) + 0xA7C), - (void*)(((char*)executePerchDemo__8daKago_cFv) + 0xC2C), - (void*)(((char*)executePerchDemo__8daKago_cFv) + 0xCA8), - (void*)(((char*)executePerchDemo__8daKago_cFv) + 0xD9C), -}; - -/* 80854E10-80854E34 -00001 0024+00 1/1 0/0 0/0 .data @6560 */ -SECTION_DATA static void* lit_6560[9] = { - (void*)(((char*)initFirstDemo__8daKago_cFv) + 0x98), - (void*)(((char*)initFirstDemo__8daKago_cFv) + 0x2A0), - (void*)(((char*)initFirstDemo__8daKago_cFv) + 0x390), - (void*)(((char*)initFirstDemo__8daKago_cFv) + 0x3B4), - (void*)(((char*)initFirstDemo__8daKago_cFv) + 0x4C8), - (void*)(((char*)initFirstDemo__8daKago_cFv) + 0x53C), - (void*)(((char*)initFirstDemo__8daKago_cFv) + 0x598), - (void*)(((char*)initFirstDemo__8daKago_cFv) + 0x5F4), - (void*)(((char*)initFirstDemo__8daKago_cFv) + 0x5FC), -}; - -/* 80854E34-80854E5C -00001 0028+00 1/1 0/0 0/0 .data @6924 */ -SECTION_DATA static void* lit_6924[10] = { - (void*)(((char*)executeFirstDemo__8daKago_cFv) + 0x9C), - (void*)(((char*)executeFirstDemo__8daKago_cFv) + 0x1E0), - (void*)(((char*)executeFirstDemo__8daKago_cFv) + 0x3F4), - (void*)(((char*)executeFirstDemo__8daKago_cFv) + 0x50C), - (void*)(((char*)executeFirstDemo__8daKago_cFv) + 0x5C8), - (void*)(((char*)executeFirstDemo__8daKago_cFv) + 0x920), - (void*)(((char*)executeFirstDemo__8daKago_cFv) + 0xBF4), - (void*)(((char*)executeFirstDemo__8daKago_cFv) + 0xE24), - (void*)(((char*)executeFirstDemo__8daKago_cFv) + 0xE24), - (void*)(((char*)executeFirstDemo__8daKago_cFv) + 0xF28), -}; - -/* 80854E5C-80854E78 -00001 001C+00 1/1 0/0 0/0 .data @7130 */ -SECTION_DATA static void* lit_7130[7] = { - (void*)(((char*)executeLandingLakeHairia__8daKago_cFv) + 0x64), - (void*)(((char*)executeLandingLakeHairia__8daKago_cFv) + 0x188), - (void*)(((char*)executeLandingLakeHairia__8daKago_cFv) + 0x1A8), - (void*)(((char*)executeLandingLakeHairia__8daKago_cFv) + 0x2F4), - (void*)(((char*)executeLandingLakeHairia__8daKago_cFv) + 0x3E0), - (void*)(((char*)executeLandingLakeHairia__8daKago_cFv) + 0x480), - (void*)(((char*)executeLandingLakeHairia__8daKago_cFv) + 0x56C), -}; - -/* 80854E78-80854E84 00012C 000C+00 1/1 0/0 0/0 .data kago_wall_hit_id$7718 */ -SECTION_DATA static u8 kago_wall_hit_id[12] = { - 0x86, 0x58, 0x86, 0xF9, 0x86, 0xFA, 0x86, 0x59, 0x86, 0xFB, 0x86, 0xFC, -}; - -/* 80854E84-80854E8C 000138 0006+02 1/1 0/0 0/0 .data kago_wave_id$7737 */ -SECTION_DATA static u8 kago_wave_id_7737[6 + 2 /* padding */] = { - 0x86, - 0x5A, - 0x86, - 0x5B, - 0x86, - 0x5C, - /* padding */ - 0x00, - 0x00, -}; - -/* 80854E8C-80854E90 000140 0004+00 1/1 0/0 0/0 .data kago_wave_id$7791 */ -SECTION_DATA static u8 kago_wave_id_7791[4] = { - 0x86, - 0x5B, - 0x86, - 0x5C, -}; - -/* 80854E90-80854EBC -00001 002C+00 1/1 0/0 0/0 .data @7982 */ -SECTION_DATA static void* lit_7982[11] = { - (void*)(((char*)action__8daKago_cFv) + 0x13C), (void*)(((char*)action__8daKago_cFv) + 0x148), - (void*)(((char*)action__8daKago_cFv) + 0x154), (void*)(((char*)action__8daKago_cFv) + 0x160), - (void*)(((char*)action__8daKago_cFv) + 0x16C), (void*)(((char*)action__8daKago_cFv) + 0x178), - (void*)(((char*)action__8daKago_cFv) + 0x184), (void*)(((char*)action__8daKago_cFv) + 0x190), - (void*)(((char*)action__8daKago_cFv) + 0x19C), (void*)(((char*)action__8daKago_cFv) + 0x1A8), - (void*)(((char*)action__8daKago_cFv) + 0x1B4), -}; - -/* 80854EBC-80854EDC -00001 0020+00 1/0 0/0 0/0 .data l_daKago_Method */ -static actor_method_class l_daKago_Method = { - (process_method_func)daKago_Create__FP8daKago_c, - (process_method_func)daKago_Delete__FP8daKago_c, - (process_method_func)daKago_Execute__FP8daKago_c, - (process_method_func)daKago_IsDelete__FP8daKago_c, - (process_method_func)daKago_Draw__FP8daKago_c, -}; - -/* 80854EDC-80854F0C -00001 0030+00 0/0 0/0 1/0 .data g_profile_KAGO */ -extern actor_process_profile_definition g_profile_KAGO = { - fpcLy_CURRENT_e, // mLayerID - 4, // mListID - fpcPi_CURRENT_e, // mListPrio - PROC_KAGO, // mProcName - &g_fpcLf_Method.base, // sub_method - sizeof(daKago_c), // mSize - 0, // mSizeOther - 0, // mParameters - &g_fopAc_Method.base, // sub_method - 693, // mPriority - &l_daKago_Method, // sub_method - 0x00044000, // mStatus - fopAc_NPC_e, // mActorType - fopAc_CULLBOX_CUSTOM_e, // cullType -}; - -/* 80854F0C-80854F18 0001C0 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, -}; - -/* 80854F18-80854F24 0001CC 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, -}; - -/* 80854F24-80854F48 0001D8 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_80854AD8, - (void*)NULL, - (void*)NULL, - (void*)func_80854AD0, -}; - -/* 80854F48-80854F54 0001FC 000C+00 2/2 0/0 0/0 .data __vt__8cM3dGPla */ -SECTION_DATA extern void* __vt__8cM3dGPla[3] = { - (void*)NULL /* RTTI */, - (void*)NULL, - (void*)__dt__8cM3dGPlaFv, -}; - -/* 80854F54-80854F60 000208 000C+00 2/2 0/0 0/0 .data __vt__12daKago_HIO_c */ -SECTION_DATA extern void* __vt__12daKago_HIO_c[3] = { - (void*)NULL /* RTTI */, - (void*)NULL, - (void*)__dt__12daKago_HIO_cFv, +static dCcD_SrcSph cc_sph_src = { + { + {0x0, {{0x8, 0x0, 0x12}, {0x0, 0x0}, 0x0}}, // mObj + {dCcD_SE_METAL, 0x0, 0x0, 0x0, 0x0}, // mGObjAt + {dCcD_SE_NONE, 0x0, 0x0, 0x0, 0x0}, // mGObjTg + {0x0}, // mGObjCo + }, // mObjInf + { + {{0.0f, 0.0f, 0.0f}, 80.0f} // mSph + } // mSphAttr }; /* 808495AC-80849660 0000EC 00B4+00 1/1 0/0 0/0 .text __ct__12daKago_HIO_cFv */ daKago_HIO_c::daKago_HIO_c() { - // NONMATCHING + mChild = -1; + mRevoconUpDown = 1024.0f; + mRevoconUpDownMax = 512.0f; + mRevoconLeftRight = 256.0f; + mRevoconLeftRightMax = 256.0f; + mBasicSize = 1.0f; + mFlightSpeed = 50.0f; + mDashTime = 70.0f; + mDashTimeMultiplier = 1.0f; + mWallHitInvulnTime = 90.0f; + mDescentRateIncrement = 5.0f; + mAscentRateDecel = 5.0f; + mFlightGroundAltitude = 300.0f; + mFlightCeilingAltitude = 300.0f; + mShadowDensity = 3.0f; + mDashCooldownTime = 85.0f; + mZOffset = 700.0f; + mZOffsetHori = 200.0f; + mAngleTrackingMode = 1; + mYOffsetFromWaterSurface = 0.0f; + mWaterSplashTime = 5.0f; + mSplashGenTimeDuringDash = 10.0f; } +#if DEBUG +void daKago_HIO_c::genMessage(JORMContext* ctx) { + // friendly Kargarok (literally, "Kargarok (good guy)") + ctx->genLabel("カーゴロック(いい奴)", 0x80000001, 0, NULL, 0xffff, 0xffff, 512, 24); + ctx->genLabel(" ", 0x80000001, 0, NULL, 0xffff, 0xffff, 512, 24); + ctx->genLabel(" ", 0x80000001, 0, NULL, 0xffff, 0xffff, 512, 24); + ctx->genLabel(" ", 0x80000001, 0, NULL, 0xffff, 0xffff, 512, 24); + // Revocon processing (Revolution controller?) + ctx->genLabel("レボコン処理", 0x80000001, 0, NULL, 0xffff, 0xffff, 512, 24); + ctx->genLabel(" ", 0x80000001, 0, NULL, 0xffff, 0xffff, 512, 24); + ctx->genSlider("レボコン上下", &mRevoconUpDown, 0.0f, 10000.0f, 0, NULL, 0xffff, 0xffff, 512, 24); + ctx->genSlider("レボコン上下Max", &mRevoconUpDownMax, 0.0f, 10000.0f, 0, NULL, 0xffff, 0xffff, 512, 24); + ctx->genSlider("レボコン左右", &mRevoconLeftRight, 0.0f, 10000.0f, 0, NULL, 0xffff, 0xffff, 512, 24); + ctx->genSlider("レボコン左右Max", &mRevoconLeftRightMax, 0.0f, 10000.0f, 0, NULL, 0xffff, 0xffff, 512, 24); + ctx->genLabel(" ", 0x80000001, 0, NULL, 0xffff, 0xffff, 512, 24); + ctx->genLabel(" ", 0x80000001, 0, NULL, 0xffff, 0xffff, 512, 24); + ctx->genLabel(" ", 0x80000001, 0, NULL, 0xffff, 0xffff, 512, 24); + ctx->genSlider("基本サイズ", &mBasicSize, 0.0f, 5.0f, 0, NULL, 0xffff, 0xffff, 512, 24); + ctx->genSlider("飛行速度", &mFlightSpeed, 0.0f, 100.0f, 0, NULL, 0xffff, 0xffff, 512, 24); + ctx->genSlider("飛行地面高度", &mFlightGroundAltitude, 0.0f, 20000.0f, 0, NULL, 0xffff, 0xffff, 512, 24); + ctx->genSlider("飛行天井高度", &mFlightCeilingAltitude, 0.0f, 20000.0f, 0, NULL, 0xffff, 0xffff, 512, 24); + ctx->genSlider("下降速度加算値", &mDescentRateIncrement, 0.0f, 100.0f, 0, NULL, 0xffff, 0xffff, 512, 24); + ctx->genSlider("上昇速度減速値", &mAscentRateDecel, 0.0f, 100.0f, 0, NULL, 0xffff, 0xffff, 512, 24); + ctx->genSlider("影の濃さ", &mShadowDensity, 0.0f, 10.0f, 0, NULL, 0xffff, 0xffff, 512, 24); + ctx->genSlider("壁かすり後無敵時間", &mWallHitInvulnTime, 0.0f, 100.0f, 0, NULL, 0xffff, 0xffff, 512, 24); + ctx->genSlider("ダッシュ時間", &mDashTime, 0.0f, 100.0f, 0, NULL, 0xffff, 0xffff, 512, 24); + ctx->genSlider("ダッシュ溜め時間(当社比X倍)", &mDashTimeMultiplier, 0.0f, 10.0f, 0, NULL, 0xffff, 0xffff, 512, 24); + ctx->genSlider("ダッシュ無効時間", &mDashCooldownTime, 0.0f, 1000.0f, 0, NULL, 0xffff, 0xffff, 512, 24); + ctx->genLabel("-", 0x80000001, 0, NULL, 0xffff, 0xffff, 512, 24); + ctx->genLabel("---------------------------------------", 0x80000001, 0, NULL, 0xffff, 0xffff, 512, 24); + // "Below this are experimental parameters" + ctx->genLabel("これより下は効果線エフェクト実験パラメータ", 0x80000001, 0, NULL, 0xffff, 0xffff, 512, 24); + ctx->genLabel("-", 0x80000001, 0, NULL, 0xffff, 0xffff, 512, 24); + ctx->genSlider("Zオフセット", &mZOffset, 0.0f, 10000.0f, 0, NULL, 0xffff, 0xffff, 512, 24); + ctx->genSlider("Zオフセット(横)", &mZOffsetHori, 0.0f, 10000.0f, 0, NULL, 0xffff, 0xffff, 512, 24); + ctx->genCheckBox("角度追従モード", &mAngleTrackingMode, 1, 0, NULL, 0xffff, 0xffff, 512, 24); + // check OFF to track camera speed + ctx->genLabel(".....チェックOFFでカメラの速度追従", 0x80000001, 0, NULL, 0xffff, 0xffff, 512, 24); + // check ON to track Kargarok angle + ctx->genLabel(".....チェックONでカーゴの角度追従", 0x80000001, 0, NULL, 0xffff, 0xffff, 512, 24); + ctx->genLabel("-", 0x80000001, 0, NULL, 0xffff, 0xffff, 512, 24); + // "Secret ripple effect parameters" + ctx->genLabel("こっそりさざ波エフェクトパラメータ", 0x80000001, 0, NULL, 0xffff, 0xffff, 512, 24); + ctx->genLabel("-", 0x80000001, 0, NULL, 0xffff, 0xffff, 512, 24); + ctx->genSlider("水面からのYオフセット", &mYOffsetFromWaterSurface, -1000.0f, 1000.0f, 0, NULL, 0xffff, 0xffff, 512, 24); + ctx->genSlider("着水時飛沫発生時間", &mWaterSplashTime, 0.0f, 100.0f, 0, NULL, 0xffff, 0xffff, 512, 24); + ctx->genSlider("ダッシュ時飛沫発生時間", &mSplashGenTimeDuringDash, 0.0f, 100.0f, 0, NULL, 0xffff, 0xffff, 512, 24); +} +#endif + /* 80849660-808496F0 0001A0 0090+00 4/3 0/0 0/0 .text getBckName__8daKago_cFi */ -void daKago_c::getBckName(int param_0) { - // NONMATCHING -} +int daKago_c::getBckName(int param_0) { + if (field_0x6e7 == 0) { + return param_0; + } -/* ############################################################################################## */ -/* 80854B40-80854B44 00003C 0004+00 1/1 0/0 0/0 .rodata @3978 */ -SECTION_RODATA static f32 const lit_3978 = -1.0f; -COMPILER_STRIP_GATE(0x80854B40, &lit_3978); + switch (param_0) { + case 7: + return 4; + case 8: + return 5; + case 9: + return 6; + case 10: + return 7; + case 11: + return 8; + case 12: + return 9; + case 13: + return 10; + case 14: + return 11; + case 15: + return 12; + case 21: + return 13; + default: + return 6; + } +} /* 808496F0-80849798 000230 00A8+00 13/13 0/0 0/0 .text setBck__8daKago_cFiUcff */ void daKago_c::setBck(int param_0, u8 param_1, f32 param_2, f32 param_3) { - // NONMATCHING + mpMorf->setAnm((J3DAnmTransform*)dComIfG_getObjectRes(field_0x75c, getBckName(param_0)), + param_1, param_2, param_3, 0.0f, -1.0f); } /* 80849798-808497F8 0002D8 0060+00 6/6 0/0 0/0 .text checkBck__8daKago_cFi */ -void daKago_c::checkBck(int param_0) { - // NONMATCHING +bool daKago_c::checkBck(int param_0) { + if (mpMorf->getAnm() == dComIfG_getObjectRes(field_0x75c, getBckName(param_0))) { + return true; + } else { + return false; + } } -/* ############################################################################################## */ -/* 80854B44-80854B48 000040 0004+00 1/9 0/0 0/0 .rodata @4033 */ -SECTION_RODATA static f32 const lit_4033 = 100.0f; -COMPILER_STRIP_GATE(0x80854B44, &lit_4033); - -/* 80854B48-80854B4C 000044 0004+00 0/1 0/0 0/0 .rodata @4034 */ -#pragma push -#pragma force_active on -SECTION_RODATA static f32 const lit_4034 = 3500.0f; -COMPILER_STRIP_GATE(0x80854B48, &lit_4034); -#pragma pop - /* 808497F8-80849924 000338 012C+00 1/1 0/0 0/0 .text draw__8daKago_cFv */ -void daKago_c::draw() { - // NONMATCHING -} +int daKago_c::draw() { + if (field_0x6de == NULL) { + return 1; + } -/* 80849924-80849960 000464 003C+00 1/1 0/0 0/0 .text __dt__4cXyzFv */ -// cXyz::~cXyz() { -extern "C" void __dt__4cXyzFv() { - // NONMATCHING + g_env_light.settingTevStruct(2, ¤t.pos, &tevStr); + J3DModel* model = mpMorf->getModel(); + g_env_light.setLightTevColorType_MAJI(model, &tevStr); + fopAcM_setEffectMtx(this, model->getModelData()); + dComIfGd_setListDark(); + mpMorf->entryDL(); + dComIfGd_setList(); + cXyz unkXyz1; + unkXyz1.set(current.pos.x, current.pos.y + 100.0f, current.pos.z); + field_0x764 = + dComIfGd_setShadow(field_0x764, 0, model, &unkXyz1, 3500.0f, 0.0f, current.pos.y, + mObjAcch.GetGroundH(), mObjAcch.m_gnd, &tevStr, 0, 1.0f, + dDlst_shadowControl_c::getSimpleTex()); + + return 1; } /* 80849960-80849980 0004A0 0020+00 1/0 0/0 0/0 .text daKago_Draw__FP8daKago_c */ -static void daKago_Draw(daKago_c* param_0) { - // NONMATCHING +static int daKago_Draw(daKago_c* i_this) { + return i_this->draw(); } -/* ############################################################################################## */ -/* 80854D14-80854D14 000210 0000+00 0/0 0/0 0/0 .rodata @stringBase0 */ -#pragma push -#pragma force_active on -SECTION_DEAD static char const* const stringBase_80854D14 = "F_SP112"; -#pragma pop - /* 80849980-80849BA8 0004C0 0228+00 1/1 0/0 0/0 .text executeBalloonMenu__8daKago_cFv */ -void daKago_c::executeBalloonMenu() { - // NONMATCHING +int daKago_c::executeBalloonMenu() { + dCamera_c* camera = dCam_getBody(); + + switch (field_0x6eb) { + case 0: + if (field_0x6e7 == 1 && (mCurrentAction == 0 || mCurrentAction == 5) && + dComIfGp_event_runCheck() == 0 && mDoCPd_c::getTrigB(0)) + { + field_0x6eb = 1; + return 1; + } + + return 0; + case 1: + if (eventInfo.checkCommandDemoAccrpt() == 0) { + fopAcM_orderPotentialEvent(this, 1, 0xffff, 0); + eventInfo.onCondition(2); + + break; + } + + mMsgFlow.init(this, 0x457, 0, NULL); + + camera->Stop(); + camera->SetTrimSize(3); + + field_0x6eb = 0x2; + + break; + case 2: + if (mMsgFlow.doFlow(this, NULL, 0)) { + if (dMsgObject_getSelectCursorPos() == 0) { + field_0x6eb = 0; + + camera->Start(); + camera->SetTrimSize(0); + + dComIfGp_event_reset(); + + return 1; + } + + if (dMsgObject_getSelectCursorPos() == 1) { + field_0x6eb = 3; + dComIfGp_setNextStage("F_SP112", 0, dComIfGp_roomControl_getStayNo(), + dComIfG_play_c::getLayerNo(0), 0.0f, 10, 1, 0, 0, 1, 0); + } else { + field_0x6eb = 3; + dStage_changeScene(3, 0.0f, 0, fopAcM_GetRoomNo(this), 0, -1); + } + } + + break; + } + + return 1; } -/* ############################################################################################## */ -/* 80854B4C-80854B54 000048 0008+00 0/6 0/0 0/0 .rodata @4201 */ -#pragma push -#pragma force_active on -SECTION_RODATA static u8 const lit_4201[8] = { - 0x3F, 0xE0, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, -}; -COMPILER_STRIP_GATE(0x80854B4C, &lit_4201); -#pragma pop - -/* 80854B54-80854B5C 000050 0008+00 0/5 0/0 0/0 .rodata @4202 */ -#pragma push -#pragma force_active on -SECTION_RODATA static u8 const lit_4202[8] = { - 0x40, 0x08, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, -}; -COMPILER_STRIP_GATE(0x80854B54, &lit_4202); -#pragma pop - -/* 80854B5C-80854B64 000058 0008+00 0/5 0/0 0/0 .rodata @4203 */ -#pragma push -#pragma force_active on -SECTION_RODATA static u8 const lit_4203[8] = { - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, -}; -COMPILER_STRIP_GATE(0x80854B5C, &lit_4203); -#pragma pop - -/* 80854B64-80854B68 000060 0004+00 0/5 0/0 0/0 .rodata @4204 */ -#pragma push -#pragma force_active on -SECTION_RODATA static f32 const lit_4204 = 500.0f; -COMPILER_STRIP_GATE(0x80854B64, &lit_4204); -#pragma pop - -/* 80854B68-80854B6C 000064 0004+00 0/1 0/0 0/0 .rodata @4205 */ -#pragma push -#pragma force_active on -SECTION_RODATA static f32 const lit_4205 = -1000000000.0f; -COMPILER_STRIP_GATE(0x80854B68, &lit_4205); -#pragma pop - -/* 80854B6C-80854B70 000068 0004+00 0/1 0/0 0/0 .rodata @4206 */ -#pragma push -#pragma force_active on -SECTION_RODATA static f32 const lit_4206 = 80.0f; -COMPILER_STRIP_GATE(0x80854B6C, &lit_4206); -#pragma pop - -/* 80854F68-80854F6C 000008 0004+00 2/2 0/0 0/0 .bss None */ -static u8 data_80854F68[4]; - -/* 80854F6C-80854F78 00000C 000C+00 1/1 0/0 0/0 .bss @3924 */ -static u8 lit_3924[12]; - -/* 80854F78-80854FD4 000018 005C+00 14/14 0/0 0/0 .bss l_HIO */ -static u8 l_HIO[92]; +static u8 l_HIOInit; +static daKago_HIO_c l_HIO; /* 80849BA8-8084A070 0006E8 04C8+00 4/4 0/0 0/0 .text checkGroundHeight__8daKago_cF4cXyzPf */ -void daKago_c::checkGroundHeight(cXyz param_0, f32* param_1) { - // NONMATCHING +// NONMATCHING - regalloc +f32 daKago_c::checkGroundHeight(cXyz i_pos, f32* o_step) { + f32 retVal; + + retVal = mGroundHeight; + + if (mpPath1 != NULL) { + cXyz pointPos1; + cXyz pointPos2; + cXyz cStack_140; + + pointPos1 = dPath_GetPnt(mpPath1, mPathIdx)->m_position; + + int pointIdx2 = (int)mPathIdx - (int)mPathIdxOffset; + if (pointIdx2 >= mpPath1->m_num || pointIdx2 < 0) { + pointIdx2 = mPathIdx; + } + pointPos2 = dPath_GetPnt(mpPath1, pointIdx2)->m_position; + + s16 targetAngleY = cLib_targetAngleY(&pointPos2, &pointPos1); + + mDoMtx_stack_c::YrotS(-targetAngleY); + mDoMtx_stack_c::transM(-i_pos.x, -i_pos.y, -i_pos.z); + mDoMtx_stack_c::multVec(&pointPos2, &cStack_140); + + f32 var_f29 = -cStack_140.z; + if (var_f29 < 0.0f) { + var_f29 = 0.0f; + } + + mDoMtx_stack_c::YrotS(-targetAngleY); + mDoMtx_stack_c::transM(-i_pos.x, -i_pos.y, -i_pos.z); + mDoMtx_stack_c::multVec(&pointPos1, &cStack_140); + + f32 var_f28 = cStack_140.z; + if (var_f28 < 0.0f) { + var_f28 = 0.0f; + } + + f32 var_f27 = var_f29 / (var_f29 + var_f28); + retVal = pointPos1.y * var_f27 + pointPos2.y * (1.0f - var_f27); + + if (o_step != NULL) { + f32 pointLatDist = pointPos1.absXZ(pointPos2); + f32 pointVertDist = std::abs(pointPos1.y - pointPos2.y); + *o_step = pointVertDist * l_HIO.mFlightSpeed / pointLatDist + 5.0f; + } + } + + field_0x6e0 = 0; + + dBgS_GndChk gndChk; + cXyz gndChkPos(i_pos.x, i_pos.y + 500.0f, i_pos.z); + gndChk.SetPos(&gndChkPos); + field_0x700 = dComIfG_Bgsp().GroundCross(&gndChk); + + field_0x738 = 0; + + if (field_0x700 != -1e+09f) { + field_0x738 = dComIfG_Bgsp().GetSpecialCode(gndChk); + field_0x700 += l_HIO.mFlightGroundAltitude; + if (retVal < field_0x700) { + retVal = field_0x700; + if (current.pos.y < retVal) { + mGroundHeight = current.pos.y; + } else { + mGroundHeight = field_0x700; + } + + if (o_step != NULL) { + *o_step = 80.0f; + } + } + } + + BOOL unkFlag1 = FALSE; + + dBgS_ObjGndChk_Spl gndChkSpl; + gndChkSpl.SetPos(&gndChkPos); + f32 gndCrossMag = dComIfG_Bgsp().GroundCross(&gndChkSpl); + if (gndCrossMag != -1e+09f) { + field_0x70c = gndCrossMag; + gndCrossMag += l_HIO.mFlightGroundAltitude; + if (current.pos.y < gndCrossMag + 50.0f) { + unkFlag1 = TRUE; + } + + if (retVal < gndCrossMag) { + field_0x700 = gndCrossMag; + retVal = gndCrossMag; + field_0x6e0 = 1; + + if (current.pos.y < gndCrossMag) { + mGroundHeight = current.pos.y; + } else { + mGroundHeight = field_0x700; + } + + if (o_step != NULL) { + *o_step = 80.0f; + } + } + } + + if (unkFlag1) { + if (field_0x6e6 == 0) { + field_0x6e6 = 1; + } + } else { + field_0x71c = 0; + field_0x6e6 = 0; + } + + return retVal; } -/* ############################################################################################## */ -/* 80854B70-80854B74 00006C 0004+00 0/1 0/0 0/0 .rodata @4255 */ -#pragma push -#pragma force_active on -SECTION_RODATA static f32 const lit_4255 = 1000000000.0f; -COMPILER_STRIP_GATE(0x80854B70, &lit_4255); -#pragma pop - -/* 80854B74-80854B78 000070 0004+00 0/1 0/0 0/0 .rodata @4256 */ -#pragma push -#pragma force_active on -SECTION_RODATA static f32 const lit_4256 = 310.0f; -COMPILER_STRIP_GATE(0x80854B74, &lit_4256); -#pragma pop - /* 8084A070-8084A210 000BB0 01A0+00 4/4 0/0 0/0 .text checkRoofHeight__8daKago_cF4cXyz */ -void daKago_c::checkRoofHeight(cXyz param_0) { - // NONMATCHING -} +// NONMATCHING - regalloc +f32 daKago_c::checkRoofHeight(cXyz param_0) { + f32 roofChkYVal = mRoofHeight; + BOOL unkFlag1 = FALSE; -/* ############################################################################################## */ -/* 80854B78-80854B7C 000074 0004+00 2/9 0/0 0/0 .rodata @4270 */ -SECTION_RODATA static f32 const lit_4270 = 30.0f; -COMPILER_STRIP_GATE(0x80854B78, &lit_4270); + field_0x6e5 = 0; + + dBgS_RoofChk roofChk; + cXyz unkXyz1(param_0.x, param_0.y - 500.0f, param_0.z); + roofChk.SetPos(unkXyz1); + + roofChkYVal = dComIfG_Bgsp().RoofChk(&roofChk); + if (roofChkYVal != 1e9f) { + roofChkYVal -= l_HIO.mFlightCeilingAltitude; + if (current.pos.y > roofChkYVal) { + mRoofHeight = current.pos.y; + } else { + mRoofHeight = roofChkYVal; + } + + if (dComIfG_Bgsp().GetSpecialCode(roofChk) == 1) { + unkFlag1 = TRUE; + } + + if (std::abs(current.pos.y - roofChkYVal) < 310.0f) { + fopAc_ac_c* actor = dComIfG_Bgsp().GetActorPointer(roofChk); + if (actor != NULL && fopAcM_GetName(actor) == PROC_Obj_RIVERROCK) { + daObjRIVERROCK_c* riverRock = (daObjRIVERROCK_c*)actor; + if (riverRock->mBreakSubAction == daObjRIVERROCK_c::BREAK_MOVE) { + field_0x6e5 = 1; + } + } + } + } else { + mRoofHeight = 1e9f; + } + + if (!unkFlag1 && current.pos.y >= mRoofHeight - 100.0f) { + if (field_0x6e3 == 0) { + field_0x6e3 = 1; + } + } else { + field_0x6e3 = 0; + } + + return roofChkYVal; +} /* 8084A210-8084A2A8 000D50 0098+00 1/1 0/0 0/0 .text checkMoveHeight__8daKago_cFv */ void daKago_c::checkMoveHeight() { - // NONMATCHING + f32 step = 100.0f; + f32 target = checkGroundHeight(current.pos, &step); + cLib_chaseF(&mGroundHeight, target, step); + cLib_chaseF(&mRoofHeight, checkRoofHeight(current.pos), 30.0f); } -/* ############################################################################################## */ -/* 80854B7C-80854B80 000078 0004+00 0/1 0/0 0/0 .rodata @4415 */ -#pragma push -#pragma force_active on -SECTION_RODATA static f32 const lit_4415 = 9.0f / 10.0f; -COMPILER_STRIP_GATE(0x80854B7C, &lit_4415); -#pragma pop - /* 8084A2A8-8084A694 000DE8 03EC+00 1/1 0/0 0/0 .text checkSizeBg__8daKago_cFv */ void daKago_c::checkSizeBg() { - // NONMATCHING -} + dBgS_LinChk linChk; + cXyz unkXyz1; + cXyz unkXyz2; + cM3dGPla plane; -/* 8084A694-8084A6DC 0011D4 0048+00 1/0 0/0 0/0 .text __dt__8cM3dGPlaFv */ -// cM3dGPla::~cM3dGPla() { -extern "C" void __dt__8cM3dGPlaFv() { - // NONMATCHING + J3DModel* model = mpMorf->getModel(); + + field_0x6d9 = 0; + + if (mCurrentAction == 4) { + return; + } + + mDoMtx_stack_c::copy(model->getAnmMtx(10)); + mDoMtx_stack_c::multVecZero(&unkXyz1); + mDoMtx_stack_c::copy(model->getAnmMtx(14)); + mDoMtx_stack_c::multVecZero(&unkXyz2); + unkXyz2 = unkXyz1 + (unkXyz2 - unkXyz1) * 0.9f; + linChk.Set(&unkXyz1, &unkXyz2, NULL); + if (dComIfG_Bgsp().LineCross(&linChk)) { + dComIfG_Bgsp().GetTriPla(linChk, &plane); + if (dComIfG_Bgsp().GetSpecialCode(linChk) == 1) { + field_0x6d9 |= (u8)1; + field_0x650[0] = linChk.GetCross(); + } + } + + mDoMtx_stack_c::copy(model->getAnmMtx(15)); + mDoMtx_stack_c::multVecZero(&unkXyz1); + mDoMtx_stack_c::copy(model->getAnmMtx(19)); + mDoMtx_stack_c::multVecZero(&unkXyz2); + unkXyz2 = (unkXyz1 + (unkXyz2 - unkXyz1) * 0.9f); + linChk.Set(&unkXyz1, &unkXyz2, NULL); + if (dComIfG_Bgsp().LineCross(&linChk)) { + dComIfG_Bgsp().GetTriPla(linChk, &plane); + if (dComIfG_Bgsp().GetSpecialCode(linChk) == 1) { + field_0x6d9 |= (u8)0x2; + field_0x650[1] = linChk.GetCross(); + } + } + + unkXyz1 = current.pos; + mDoMtx_stack_c::copy(model->getAnmMtx(1)); + mDoMtx_stack_c::multVecZero(&unkXyz1); + mDoMtx_stack_c::transM(300.0f, 0.0f, 0.0f); + mDoMtx_stack_c::multVecZero(&unkXyz2); + linChk.Set(&unkXyz1, &unkXyz2, NULL); + if (dComIfG_Bgsp().LineCross(&linChk)) { + dComIfG_Bgsp().GetTriPla(linChk, &plane); + if (dComIfG_Bgsp().GetSpecialCode(linChk) == 1) { + if (!checkYaguraPos(linChk.GetCross())) { + field_0x6d9 |= (u8)4; + this->field_0x650[2] = linChk.GetCross(); + } + } + } } /* 8084A6DC-8084A6E4 00121C 0008+00 1/1 0/0 0/0 .text getBeforeGroundHeight__8daKago_cFUc */ -bool daKago_c::getBeforeGroundHeight(u8 param_0) { - return false; +s16 daKago_c::getBeforeGroundHeight(u8 param_0) { + return 0; } /* 8084A6E4-8084AA64 001224 0380+00 2/1 0/0 0/0 .text demo_skip__8daKago_cFi */ void daKago_c::demo_skip(int param_0) { - // NONMATCHING + dCamera_c* camera = dCam_getBody(); + + switch (param_0) { + case 0: + field_0x748 = 2; + field_0x74c = NULL; + break; + case 1: + field_0x728 = 0; + break; + case 3: + mMsgFlow.remove(); + case 2: + setMidnaRideOn(); + setPlayerRideOn(); + field_0x718 = field_0x71a = 0; + dComIfGs_onEventBit((u16)dSv_event_flag_c::saveBitLabels[84]); + field_0x748 = 7; + field_0x74c = NULL; + break; + case 4: + setSceneChange(0); + field_0x6e4 = 1; + break; + case 5: + case 6: + if (setSceneChange(3)) { + if (param_0 == 5) { + field_0x748 = 6; + } else { + field_0x748 = 5; + field_0x6cc = 1.0f; + } + } + break; + case 7: + setRideOff(); + case 8: { + field_0x68c.set(-77875.0f, -18287.0f, 42000.0f); + field_0x698.set(-77275.0f, -18500.0f, 41090.0f); + field_0x6a4.set(-77615.0f, -18640.0f, 41400.0f); + daPy_getPlayerActorClass()->setPlayerPosAndAngle(&field_0x6a4, 0, 0); + field_0x6de = 0; + speed.y = speedF = 0.0f; + setActionMode(4, 0); + camera->Set(field_0x68c, field_0x698, 70.0f, 0); + camera->Reset(); + camera->Start(); + camera->SetTrimSize(0); + dComIfGp_event_reset(); + Z2GetAudioMgr()->setDemoName(NULL); + break; + } + case 9: + setRideOff(); + case 10: + field_0x68c.set(3703.0f, 337.0f, 863.0f); + field_0x698.set(3726.0f, 272.0f, 1196.0f); + field_0x6a4.set(3782.0f, 222.0f, 690.0f); + daPy_getPlayerActorClass()->setPlayerPosAndAngle(&field_0x6a4, 0, 0); + field_0x6de = 0; + speed.y = speedF = 0.0f; + setActionMode(4, 0); + camera->Set(field_0x68c, field_0x698, 70.0f, 0); + camera->Reset(); + camera->Start(); + camera->SetTrimSize(0); + dComIfGp_event_reset(); + Z2GetAudioMgr()->setDemoName(NULL); + } } /* 8084AA64-8084AA98 0015A4 0034+00 4/4 0/0 0/0 .text DemoSkipCallBack__8daKago_cFPvi */ -void daKago_c::DemoSkipCallBack(void* param_0, int param_1) { - // NONMATCHING +int daKago_c::DemoSkipCallBack(void* param_0, int param_1) { + if (param_0 != NULL) { + ((daKago_c*)param_0)->demo_skip(param_1); + return 1; + } + return 0; } /* 8084AA98-8084AAAC 0015D8 0014+00 17/17 0/0 0/0 .text setActionMode__8daKago_cFii */ void daKago_c::setActionMode(int param_0, int param_1) { - // NONMATCHING + mIsFlying = false; + mCurrentAction = param_0; + field_0x744 = param_1; } /* 8084AAAC-8084AB40 0015EC 0094+00 2/2 0/0 0/0 .text setMidnaTagPos__8daKago_cFv */ void daKago_c::setMidnaTagPos() { - // NONMATCHING + cXyz unkXyz1; + daMidna_c* midna = daPy_getPlayerActorClass()->getMidnaActor(); + if (midna != NULL) { + mDoMtx_stack_c::copy(getMidnaLocaterMtx()); + mDoMtx_stack_c::multVecZero(&unkXyz1); + midna->onTagWaitPos(&unkXyz1); + } } /* 8084AB40-8084AB8C 001680 004C+00 5/5 0/0 0/0 .text setMidnaRideOn__8daKago_cFv */ void daKago_c::setMidnaRideOn() { - // NONMATCHING + daMidna_c* midna = daPy_getPlayerActorClass()->getMidnaActor(); + if (midna != NULL) { + midna->offTagWaitPos(); + midna->setCargoActor(this); + } } /* 8084AB8C-8084ABC8 0016CC 003C+00 7/7 0/0 0/0 .text setPlayerRideOn__8daKago_cFv */ void daKago_c::setPlayerRideOn() { - // NONMATCHING + daPy_getPlayerActorClass()->setCargoCarry(this); } /* 8084ABC8-8084AC2C 001708 0064+00 5/5 0/0 0/0 .text setRideOff__8daKago_cFv */ void daKago_c::setRideOff() { - // NONMATCHING + daMidna_c* midna = daPy_getPlayerActorClass()->getMidnaActor(); + if (midna != NULL) { + midna->offTagWaitPos(); + midna->offCargoActor(); + } + daPy_getPlayerActorClass()->offCargoCarry(); } -/* ############################################################################################## */ -/* 80854B80-80854B84 00007C 0004+00 0/0 0/0 0/0 .rodata @4478 */ -#pragma push -#pragma force_active on -SECTION_RODATA static f32 const lit_4478 = -77875.0f; -COMPILER_STRIP_GATE(0x80854B80, &lit_4478); -#pragma pop - -/* 80854B84-80854B88 000080 0004+00 0/0 0/0 0/0 .rodata @4479 */ -#pragma push -#pragma force_active on -SECTION_RODATA static f32 const lit_4479 = -18287.0f; -COMPILER_STRIP_GATE(0x80854B84, &lit_4479); -#pragma pop - -/* 80854B88-80854B8C 000084 0004+00 0/0 0/0 0/0 .rodata @4480 */ -#pragma push -#pragma force_active on -SECTION_RODATA static f32 const lit_4480 = 42000.0f; -COMPILER_STRIP_GATE(0x80854B88, &lit_4480); -#pragma pop - -/* 80854B8C-80854B90 000088 0004+00 0/0 0/0 0/0 .rodata @4481 */ -#pragma push -#pragma force_active on -SECTION_RODATA static f32 const lit_4481 = -77275.0f; -COMPILER_STRIP_GATE(0x80854B8C, &lit_4481); -#pragma pop - -/* 80854B90-80854B94 00008C 0004+00 0/1 0/0 0/0 .rodata @4482 */ -#pragma push -#pragma force_active on -SECTION_RODATA static f32 const lit_4482 = -18500.0f; -COMPILER_STRIP_GATE(0x80854B90, &lit_4482); -#pragma pop - -/* 80854B94-80854B98 000090 0004+00 0/0 0/0 0/0 .rodata @4483 */ -#pragma push -#pragma force_active on -SECTION_RODATA static f32 const lit_4483 = 41090.0f; -COMPILER_STRIP_GATE(0x80854B94, &lit_4483); -#pragma pop - -/* 80854B98-80854B9C 000094 0004+00 0/1 0/0 0/0 .rodata @4484 */ -#pragma push -#pragma force_active on -SECTION_RODATA static f32 const lit_4484 = -77615.0f; -COMPILER_STRIP_GATE(0x80854B98, &lit_4484); -#pragma pop - -/* 80854B9C-80854BA0 000098 0004+00 0/0 0/0 0/0 .rodata @4485 */ -#pragma push -#pragma force_active on -SECTION_RODATA static f32 const lit_4485 = -18640.0f; -COMPILER_STRIP_GATE(0x80854B9C, &lit_4485); -#pragma pop - -/* 80854BA0-80854BA4 00009C 0004+00 0/1 0/0 0/0 .rodata @4486 */ -#pragma push -#pragma force_active on -SECTION_RODATA static f32 const lit_4486 = 41400.0f; -COMPILER_STRIP_GATE(0x80854BA0, &lit_4486); -#pragma pop - -/* 80854BA4-80854BA8 0000A0 0004+00 0/0 0/0 0/0 .rodata @4487 */ -#pragma push -#pragma force_active on -SECTION_RODATA static f32 const lit_4487 = 3703.0f; -COMPILER_STRIP_GATE(0x80854BA4, &lit_4487); -#pragma pop - -/* 80854BA8-80854BAC 0000A4 0004+00 0/0 0/0 0/0 .rodata @4488 */ -#pragma push -#pragma force_active on -SECTION_RODATA static f32 const lit_4488 = 337.0f; -COMPILER_STRIP_GATE(0x80854BA8, &lit_4488); -#pragma pop - -/* 80854BAC-80854BB0 0000A8 0004+00 0/0 0/0 0/0 .rodata @4489 */ -#pragma push -#pragma force_active on -SECTION_RODATA static f32 const lit_4489 = 863.0f; -COMPILER_STRIP_GATE(0x80854BAC, &lit_4489); -#pragma pop - -/* 80854BB0-80854BB4 0000AC 0004+00 0/0 0/0 0/0 .rodata @4490 */ -#pragma push -#pragma force_active on -SECTION_RODATA static f32 const lit_4490 = 3726.0f; -COMPILER_STRIP_GATE(0x80854BB0, &lit_4490); -#pragma pop - -/* 80854BB4-80854BB8 0000B0 0004+00 0/0 0/0 0/0 .rodata @4491 */ -#pragma push -#pragma force_active on -SECTION_RODATA static f32 const lit_4491 = 272.0f; -COMPILER_STRIP_GATE(0x80854BB4, &lit_4491); -#pragma pop - -/* 80854BB8-80854BBC 0000B4 0004+00 0/0 0/0 0/0 .rodata @4492 */ -#pragma push -#pragma force_active on -SECTION_RODATA static f32 const lit_4492 = 1196.0f; -COMPILER_STRIP_GATE(0x80854BB8, &lit_4492); -#pragma pop - -/* 80854BBC-80854BC0 0000B8 0004+00 0/0 0/0 0/0 .rodata @4493 */ -#pragma push -#pragma force_active on -SECTION_RODATA static f32 const lit_4493 = 3782.0f; -COMPILER_STRIP_GATE(0x80854BBC, &lit_4493); -#pragma pop - -/* 80854BC0-80854BC4 0000BC 0004+00 0/0 0/0 0/0 .rodata @4494 */ -#pragma push -#pragma force_active on -SECTION_RODATA static f32 const lit_4494 = 222.0f; -COMPILER_STRIP_GATE(0x80854BC0, &lit_4494); -#pragma pop - -/* 80854BC4-80854BC8 0000C0 0004+00 0/0 0/0 0/0 .rodata @4495 */ -#pragma push -#pragma force_active on -SECTION_RODATA static f32 const lit_4495 = 690.0f; -COMPILER_STRIP_GATE(0x80854BC4, &lit_4495); -#pragma pop - -/* 80854BC8-80854BCC 0000C4 0004+00 0/1 0/0 0/0 .rodata @4657 */ -#pragma push -#pragma force_active on -SECTION_RODATA static f32 const lit_4657 = 100000.0f; -COMPILER_STRIP_GATE(0x80854BC8, &lit_4657); -#pragma pop - /* 8084AC2C-8084AE78 00176C 024C+00 1/1 0/0 0/0 .text searchNearPassPoint__8daKago_cFv */ -void daKago_c::searchNearPassPoint() { - // NONMATCHING +s8 daKago_c::searchNearPassPoint() { + cXyz pointPos; + + cXyz playerPos(daPy_getPlayerActorClass()->current.pos); + f32 unkFloat1; + f32 unkFloat2 = unkFloat1 = 100000.0f; + int pointIdx1; + for (int i = 0; i < mpPath1->m_num; i++) { + pointPos = dPath_GetPnt(mpPath1,i)->m_position; + + f32 playerLatDist = playerPos.absXZ(pointPos); + if (playerLatDist < unkFloat2) { + unkFloat1 = unkFloat2; + unkFloat2 = playerLatDist; + pointIdx1 = i; + } else if (playerLatDist < unkFloat1) { + unkFloat1 = playerLatDist; + } + } + + int pointIdx2 = pointIdx1 + mPathIdxOffset; + if (pointIdx2 < 0) { + pointIdx2 = 1; + } else if (pointIdx2 >= mpPath1->m_num) { + pointIdx2 = mpPath1->m_num - 1; + } + + return pointIdx2; } /* 8084AE78-8084AF40 0019B8 00C8+00 4/4 0/0 0/0 .text setSceneChange__8daKago_cFi */ -void daKago_c::setSceneChange(int param_0) { - // NONMATCHING +int daKago_c::setSceneChange(int param_0) { + int unkInt1 = 0; + switch (param_0) { + case 0: + if (field_0x6e7 == 0) { + unkInt1 = 1; + } else { + unkInt1 = 6; + } + + break; + case 1: + unkInt1 = 0; + + endBalloonScore(); + + break; + case 2: + if (field_0x6e7 == 0) { + unkInt1 = 3; + } else { + unkInt1 = 0; + } + + endBalloonScore(); + + break; + case 3: + unkInt1 = 3; + + break; + } + + return dStage_changeScene(unkInt1, 0.0f, 10, fopAcM_GetRoomNo(this), 0, -1); } /* 8084AF40-8084AFB0 001A80 0070+00 1/1 0/0 0/0 .text createBalloonScore__8daKago_cFv */ void daKago_c::createBalloonScore() { - // NONMATCHING + if (field_0x6e7 != 0 && mBalloon2DId == fpcM_ERROR_PROCESS_ID_e) { + mBalloon2DId = fopAcM_create(PROC_BALLOON2D, 0, 0, 0xffffffff, 0, 0, 0xffffffff); + field_0x6e9 = 1; + } } /* 8084AFB0-8084B024 001AF0 0074+00 1/1 0/0 0/0 .text startBalloonScore__8daKago_cFv */ void daKago_c::startBalloonScore() { - // NONMATCHING + fopAc_ac_c* balloon_actor; + if (field_0x6e7 != 0 && field_0x6e9 == 1) { + fopAcM_SearchByID(mBalloon2DId, &balloon_actor); + if (balloon_actor != NULL) { + ((daBalloon2D_c*)balloon_actor)->show(); + ((daBalloon2D_c*)balloon_actor)->setScoreCount(0); + field_0x6e9 = 2; + } + } } /* 8084B024-8084B088 001B64 0064+00 1/1 0/0 0/0 .text endBalloonScore__8daKago_cFv */ void daKago_c::endBalloonScore() { - // NONMATCHING + fopAc_ac_c* balloon2D; + fopAc_ac_c *balloonObj; + + if (field_0x6e7 != 0) { + fopAcM_SearchByID(mBalloon2DId, &balloon2D); + if (balloon2D != NULL) { + ((daBalloon2D_c*)balloon2D)->hide(); + } + + fopAcM_SearchByName(PROC_OBJ_BALLOON, &balloonObj); + if (balloonObj != NULL) { + ((daObj_Balloon_c*)balloonObj)->saveBestScore(); + } + } } /* 8084B088-8084B108 001BC8 0080+00 3/3 0/0 1/1 .text checkNextPath__8daKago_cF4cXyz */ f32 daKago_c::checkNextPath(cXyz param_0) { - // NONMATCHING + cXyz cStack_14; + mDoMtx_stack_c::YrotS(-field_0x714); + mDoMtx_stack_c::transM(-current.pos.x, -current.pos.y, -current.pos.z); + mDoMtx_stack_c::multVec(¶m_0, &cStack_14); + return cStack_14.z; } /* 8084B108-8084B134 001C48 002C+00 4/4 0/0 0/0 .text checkHeight__8daKago_cFv */ void daKago_c::checkHeight() { - // NONMATCHING + if (current.pos.y > mRoofHeight) { + current.pos.y = mRoofHeight; + } else if (current.pos.y < mGroundHeight) { + current.pos.y = mGroundHeight; + } } -/* ############################################################################################## */ -/* 80854BCC-80854BD0 0000C8 0004+00 0/1 0/0 0/0 .rodata @4759 */ -#pragma push -#pragma force_active on -SECTION_RODATA static f32 const lit_4759 = -22984.0f; -COMPILER_STRIP_GATE(0x80854BCC, &lit_4759); -#pragma pop - -/* 80854BD0-80854BD4 0000CC 0004+00 0/1 0/0 0/0 .rodata @4760 */ -#pragma push -#pragma force_active on -SECTION_RODATA static f32 const lit_4760 = 7455.0f; -COMPILER_STRIP_GATE(0x80854BD0, &lit_4760); -#pragma pop - /* 8084B134-8084B1E0 001C74 00AC+00 2/2 0/0 0/0 .text checkYaguraPos__8daKago_cF4cXyz */ -void daKago_c::checkYaguraPos(cXyz param_0) { - // NONMATCHING +bool daKago_c::checkYaguraPos(cXyz param_0) { + cXyz local_18(-22984.0f, 0.0f, 7455.0f); + cXyz cStack_24; + s16 temp = -0x770; + mDoMtx_stack_c::YrotS(-temp); + mDoMtx_stack_c::transM(-local_18.x, -local_18.y, -local_18.z); + mDoMtx_stack_c::multVec(¶m_0, &cStack_24); + if (std::abs(cStack_24.z) < 700.0f) { + return true; + } else { + return false; + } } /* 8084B1E0-8084B56C 001D20 038C+00 3/3 0/0 0/0 .text checkWallHitFall__8daKago_cFi */ -void daKago_c::checkWallHitFall(int param_0) { - // NONMATCHING +bool daKago_c::checkWallHitFall(int param_0) { + if (field_0x6e5 != 0) { + cXyz unkXyz1; + setActionMode(1, 3); + dComIfGp_getVibration().StartShock(8, 0x1f, cXyz(0.0f, 1.0f, 0.0f)); + unkXyz1 = current.pos; + unkXyz1.y += 200.0f; + setWallHitEffect(unkXyz1, 0); + return true; + } + + if (mObjAcch.ChkWallHit()) { + field_0x6da = mAcchCir.GetWallAngleY(); + s16 unkInt1 = shape_angle.y - field_0x6da; + if (!checkYaguraPos(current.pos)) { + if (abs(unkInt1) > 0x7000) { + field_0x6d9 |= (u8)0x4; + field_0x650[2].set(current.pos.x + cM_ssin(shape_angle.y) * 200.0f, current.pos.y, current.pos.z + cM_scos(shape_angle.y) * 200.0f); + } + } + + if (unkInt1 > 0) { + field_0x6d9 |= (u8)0x1; + field_0x650[0].set(current.pos.x + cM_ssin(shape_angle.y + 0x4000) * 200.0f, current.pos.y, + current.pos.z + cM_scos(shape_angle.y + 0x4000) * 200.0f); + } else { + field_0x6d9 |= (u8)0x2; + field_0x650[1].set(current.pos.x + cM_ssin(shape_angle.y + -0x4000) * 200.0f, + current.pos.y, + current.pos.z + cM_scos(shape_angle.y + -0x4000) * 200.0f); + } + } + + if ((field_0x6d9 & 0x4) != 0) { + setActionMode(1, 0); + dComIfGp_getVibration().StartShock(8, 0x1f, cXyz(0.0f, 1.0f, 0.0f)); + setWallHitEffect(field_0x650[2], 0); + return true; + } + + if (param_0 != 0 && field_0x720 == 0 && (field_0x6d9 & 0x3) != 0) { + dComIfGp_getVibration().StartShock(2, 0x1f, cXyz(0.0f, 1.0f, 0.0f)); + if ((field_0x6d9 & 0x1) != 0) { + setActionMode(1, 1); + setWallHitEffect(field_0x650[0], 1); + } else { + setActionMode(1, 2); + setWallHitEffect(field_0x650[1], 1); + } + return true; + } + + return false; } /* 8084B56C-8084B5DC 0020AC 0070+00 1/1 0/0 0/0 .text checkAttackStart__8daKago_cFv */ -void daKago_c::checkAttackStart() { - // NONMATCHING +bool daKago_c::checkAttackStart() { + if (mDashCooldownTime != 0) { + return false; + } + + if (mDoCPd_c::getTrigA(0)) { + setActionMode(5, 0); + mIsFlying = true; + return true; + } else { + return false; + } } -/* ############################################################################################## */ -/* 80854BD4-80854BDC 0000D0 0008+00 2/3 0/0 0/0 .rodata @4923 */ -SECTION_RODATA static u8 const lit_4923[8] = { - 0x43, 0x30, 0x00, 0x00, 0x80, 0x00, 0x00, 0x00, -}; -COMPILER_STRIP_GATE(0x80854BD4, &lit_4923); +#define MIN(a, b) ((a) < (b) ? (a) : (b)) +#define MAX(a, b) ((a) > (b) ? (a) : (b)) /* 8084B5DC-8084B6F4 00211C 0118+00 1/1 0/0 0/0 .text getValueY__8daKago_cFf */ -void daKago_c::getValueY(f32 param_0) { - // NONMATCHING +s16 daKago_c::getValueY(f32 param_0) { + s16 valueY = field_0x6f4 * param_0; + f32 var_f31; + if (valueY < 0) { + if (current.pos.y > mRoofHeight - 200.0f) { + var_f31 = current.pos.y - (mRoofHeight - 200.0f); + if (var_f31 > 200.0f) { + var_f31 = 200.0f; + } + var_f31 = ((200.0f - var_f31) / 200.0f); + valueY *= var_f31; + } + } else if (valueY > 0 && current.pos.y < mGroundHeight + 200.0f) { + var_f31 = mGroundHeight + 200.0f - current.pos.y; + if (var_f31 > 200.0f) { + var_f31 = 200.0f; + } + var_f31 = ((200.0f - var_f31) / 200.0f); + valueY = valueY * var_f31; + } + + return valueY; } /* 8084B6F4-8084B718 002234 0024+00 1/1 0/0 0/0 .text getValueX__8daKago_cFf */ -void daKago_c::getValueX(f32 param_0) { - // NONMATCHING +s16 daKago_c::getValueX(f32 param_0) { + return -field_0x6f0 * param_0; } /* 8084B718-8084B744 002258 002C+00 1/1 0/0 0/0 .text getValueAbsX__8daKago_cFf */ -void daKago_c::getValueAbsX(f32 param_0) { - // NONMATCHING +s16 daKago_c::getValueAbsX(f32 param_0) { + return std::abs(-field_0x6f0 * param_0); } /* 8084B744-8084B96C 002284 0228+00 1/1 0/0 0/0 .text flySpeedCalcLockOn__8daKago_cFv */ void daKago_c::flySpeedCalcLockOn() { - // NONMATCHING + s16 angleX; + s16 angleY; + + angleX = -cLib_targetAngleX(¤t.pos, &mpLockActor->current.pos); + angleY = cLib_targetAngleY(¤t.pos, &mpLockActor->current.pos); + + if (current.pos.absXZ(mpLockActor->current.pos) < BREG_F(0) + 200.0f) { + angleY = mpLockActor->current.angle.y; + } + + cLib_addCalcAngleS(¤t.angle.x, angleX, 8, 0x100, 0x10); + shape_angle.x = current.angle.x; + s16 angleX2 = current.angle.y; + cLib_addCalcAngleS(¤t.angle.y, angleY, 8, 0x100, 0x10); + shape_angle.y = current.angle.y; + cLib_addCalcAngleS(&shape_angle.z, ((angleX2 - current.angle.y) * 0x20), 8, 0x400, 0x10); + + if (shape_angle.z > 0x3000) { + shape_angle.z = 0x3000; + } + + if (shape_angle.z < -0x3000) { + shape_angle.z = -0x3000; + } } -/* ############################################################################################## */ -/* 80854BDC-80854BE0 0000D8 0004+00 0/3 0/0 0/0 .rodata @5091 */ -#pragma push -#pragma force_active on -SECTION_RODATA static f32 const lit_5091 = 40.0f; -COMPILER_STRIP_GATE(0x80854BDC, &lit_5091); -#pragma pop - -/* 80854BE0-80854BE4 0000DC 0004+00 0/5 0/0 0/0 .rodata @5092 */ -#pragma push -#pragma force_active on -SECTION_RODATA static f32 const lit_5092 = 20.0f; -COMPILER_STRIP_GATE(0x80854BE0, &lit_5092); -#pragma pop - /* 8084B96C-8084C078 0024AC 070C+00 2/2 0/0 0/0 .text flySpeedCalc__8daKago_cFsi */ void daKago_c::flySpeedCalc(s16 param_0, int param_1) { - // NONMATCHING + s16 var_r29; + s16 var_r28; + s16 var_r27; + + s16 sp_8; + if (param_1 == 0) { + sp_8 = 0x2000; + } else if (param_1 == 1) { + sp_8 = 0x1000; + } else if (param_1 == 2) { + sp_8 = 0x2aaa; + } + + var_r28 = getValueY(sp_8); + if (mpLockActor != NULL) { + var_r28 = -cLib_targetAngleX(¤t.pos, &mpLockActor->current.pos); + } + + if (var_r28 != 0) { + field_0x710 += getValueY(40.0f); + + var_r29 = 0x200; + if (param_1 == 2) { + var_r29 = 0x400; + } + if (field_0x710 > var_r29) { + field_0x710 = var_r29; + } + if (field_0x710 < -var_r29) { + field_0x710 = -var_r29; + } + + if (field_0x6f4 > 0.0f) { + if (current.angle.x < var_r28) { + current.angle.x += field_0x710; + } else { + cLib_addCalcAngleS(&field_0x710, 0, 8, 0x20, 0x10); + cLib_addCalcAngleS(¤t.angle.x, var_r28, 8, 0x100, 0x40); + } + } else { + if (current.angle.x > var_r28) { + current.angle.x += field_0x710; + } else { + cLib_addCalcAngleS(&field_0x710, 0, 8, 0x20, 0x10); + cLib_addCalcAngleS(¤t.angle.x, var_r28, 8, 0x100, 0x40); + } + } + } else { + field_0x710 = 0; + + if (current.pos.y < mGroundHeight) { + var_r28 = getBeforeGroundHeight(0); + } + if (current.pos.y > mRoofHeight) { + var_r28 = getBeforeGroundHeight(1); + } + + if (var_r28 != 0) { + cLib_addCalcAngleS(¤t.angle.x, var_r28, 8, 0x100, 0x10); + } else { + cLib_addCalcAngleS(¤t.angle.x, var_r28, 8, 0x100, 0x10); + } + current.angle.x += field_0x710; + } + if (current.angle.x > 0x2aaa) { + current.angle.x = 0x2aaa; + } + if (current.angle.x < -0x2aaa) { + current.angle.x = -0x2aaa; + } + shape_angle.x = current.angle.x; + + var_r27 = 0x2000; + if (param_1 == 1) { + var_r27 = 0x1000; + } else if (param_1 == 2) { + var_r27 = 0x2aaa; + } + + f32 unkFloat1 = 20.0f; + var_r29 = 0x100; + if (param_1 == 2) { + unkFloat1 = 30.0f; + var_r29 = 0x200; + } + + var_r28 = param_0 + getValueX(var_r27); + if (mpLockActor != NULL) { + var_r28 = cLib_targetAngleY((Vec*)¤t, (Vec*)&mpLockActor->current); + } + + int always_zero = 0; + if (!always_zero) { + if (abs((s16)(current.angle.y - param_0)) < var_r27) { + if (field_0x6f0) { + field_0x712 += getValueX(unkFloat1); + if (field_0x712 > getValueAbsX(var_r29)) { + field_0x712 = getValueAbsX(var_r29); + } + if (field_0x712 < -getValueAbsX(var_r29)) { + field_0x712 = -getValueAbsX(var_r29); + } + } else { + cLib_addCalcAngleS(&field_0x712, 0, 8, 0x20, 0x10); + } + current.angle.y += field_0x712; + } else { + int sp_14 = 0; + if (field_0x6f0 < 0.0f) { + if ((s16)(current.angle.y - param_0) < var_r27) { + sp_14 = 1; + } + } else { + if (field_0x6f0 > 0.0f && (s16)(current.angle.y - param_0) > var_r27) { + sp_14 = 1; + } + } + if (sp_14 != 0) { + field_0x712 += getValueX(unkFloat1); + if (field_0x712 > getValueAbsX(var_r29)) { + field_0x712 = getValueAbsX(var_r29); + } + if (field_0x712 < -getValueAbsX(var_r29)) { + field_0x712 = -getValueAbsX(var_r29); + } + current.angle.y += field_0x712; + } else { + cLib_addCalcAngleS(&field_0x712, 0, 8, 0x20, 0x10); + cLib_addCalcAngleS(¤t.angle.y, var_r28, 8, 0x40, 0x10); + } + } + } + shape_angle.y = current.angle.y; + cLib_addCalcAngleS(&shape_angle.z, -field_0x712 * 0x20, 8, 0x400, 0x10); + if (shape_angle.z > 0x3000) { + shape_angle.z = 0x3000; + } + if (shape_angle.z < -0x3000) { + shape_angle.z = -0x3000; + } + + if (field_0x6e3 == 1) { + field_0x6e3 = 2; + if (field_0x6e7 == 1) { + mSound.startCreatureVoice(Z2SE_EN_KC_V_NAKU, -1); + } else { + mSound.startCreatureVoice(Z2SE_EN_YC_V_NAKU, -1); + } + } + + if (field_0x6e6 == 1) { + field_0x6e6 = 2; + if (mCurrentAction == 5) { + field_0x71c = l_HIO.mSplashGenTimeDuringDash; + } else { + field_0x71c = l_HIO.mWaterSplashTime; + } + } } /* 8084C078-8084C178 002BB8 0100+00 3/3 0/0 0/0 .text checkFlySceneChange__8daKago_cFv */ -void daKago_c::checkFlySceneChange() { - // NONMATCHING +bool daKago_c::checkFlySceneChange() { + if ((mPathIdxOffset > 0 && mPathIdx >= mpPath1->m_num - 1 || + mPathIdxOffset < 0 && mPathIdx < 1) && + field_0x73c == 1 && fopOvlpM_IsPeek() == 0) + { + setActionMode(0, 4); + field_0x728 = 300; + + if (checkBck(9) == 0) { + setBck(9, 2, 10.0f, 1.0f); + } + + if (mPathIdxOffset > 0) { + setSceneChange(1); + } else { + setSceneChange(2); + } + + return true; + } else { + return false; + } } /* 8084C178-8084C204 002CB8 008C+00 1/1 0/0 0/0 .text setFlyAway__8daKago_cFv */ void daKago_c::setFlyAway() { - // NONMATCHING + current.angle.y = shape_angle.y; + setActionMode(0, 3); + field_0x728 = 90; + if (!checkBck(9)) { + setBck(9, 2, 10.0f, 1.0f); + } + dComIfGp_getVibration().StopQuake(0x1f); } /* 8084C204-8084C2CC 002D44 00C8+00 3/3 0/0 0/0 .text setFlyAnime__8daKago_cFv */ void daKago_c::setFlyAnime() { - // NONMATCHING -} + if (cM_rnd() < 0.5) { + if (checkBck(15) == 0) { + setBck(15, 2, 10.0f, 1.0f); + } else { + setBck(13, 2, 10.0f, 1.0f); + } + } else { + if (!checkBck(13)) { + setBck(13, 2, 10.0f, 1.0f); + } + } -/* ############################################################################################## */ -/* 80854BE4-80854BE8 0000E0 0004+00 0/3 0/0 0/0 .rodata @5329 */ -#pragma push -#pragma force_active on -SECTION_RODATA static f32 const lit_5329 = 2.0f; -COMPILER_STRIP_GATE(0x80854BE4, &lit_5329); -#pragma pop + field_0x728 = 150; +} /* 8084C2CC-8084C8FC 002E0C 0630+00 1/1 0/0 0/0 .text executeFly__8daKago_cFv */ void daKago_c::executeFly() { - // NONMATCHING + s16 unkInt1; + s16 unkInt2; + f32 unkFloat1; + cXyz unkXyz1; + cXyz unkXyz2; + cXyz unkXyz3; + + startBalloonScore(); + + if (field_0x744 < 3) { + if (mDashCooldownTime == 0) { + dComIfGp_setDoStatusForce(0x4b, 0); + } + if (field_0x6e7 == 1) { + dComIfGp_setAStatusForce(0x2a, 0); + } else { + dComIfGp_setAStatusForce(0x27, 0); + } + } + + if (field_0x6e6 != 0) { + setSibukiEffect(); + } + + checkHeight(); + mIsFlying = true; + + switch (field_0x744) { + case 0: + shape_angle.y = current.angle.y; + mGroundHeight = checkGroundHeight(current.pos, NULL); + mRoofHeight = checkRoofHeight(current.pos); + setPlayerRideOn(); + case 1: + setFlyAnime(); + field_0x710 = field_0x712 = 0; + field_0x744 = 2; + break; + case 2: + unkXyz1 = dPath_GetPnt(mpPath1, mPathIdx)->m_position; + unkXyz2 = dPath_GetPnt(mpPath1, mPathIdx - mPathIdxOffset)->m_position; + unkInt1 = cLib_targetAngleY(&unkXyz2, &unkXyz1); + field_0x714 = unkInt1; + flySpeedCalc(unkInt1, 0); + if (checkBck(11)) { + if (mpMorf->isStop()) { + setFlyAnime(); + } + } else { + if (field_0x710 < 0) { + if (!checkBck(15)) { + setBck(15, 2, 10.0f, 1.0f); + } + field_0x728 = 10; + } else if (field_0x710 > 0) { + if (!checkBck(13)) { + setBck(13, 2, 10.0f, 1.0f); + } + field_0x728 = 90; + } else { + if (field_0x728 == 0) { + setFlyAnime(); + } + } + } + if (cM_ssin(current.angle.x) > 0.0f) { + unkFloat1 = l_HIO.mFlightSpeed + l_HIO.mDescentRateIncrement * cM_ssin(current.angle.x); + } else { + unkFloat1 = l_HIO.mFlightSpeed + l_HIO.mAscentRateDecel * cM_ssin(current.angle.x); + } + if (std::abs(field_0x6f8 - unkFloat1) > 10.0f) { + cLib_chaseF(&field_0x6f8, unkFloat1, 2.0f); + } else { + cLib_chaseF(&field_0x6f8, unkFloat1, 1.0f); + } + speedF = field_0x6f8 * std::abs(cM_scos(current.angle.x)); + speed.y = -field_0x6f8 * cM_ssin(current.angle.x); + unkXyz3.z = checkNextPath(unkXyz1); + if (unkXyz3.z < 0.0f) { + if (abs((s16)(unkInt1 - cLib_targetAngleY(&unkXyz2, ¤t.pos))) < 0x4000) { + mPathIdx += mPathIdxOffset; + if (checkFlySceneChange()) { + return; + } + } + } + break; + case 3: + case 4: + if (mPathIdx >= mpPath1->m_num) { + unkInt1 = current.angle.y; + unkInt2 = 0; + } else { + unkXyz1 = dPath_GetPnt(mpPath1, mPathIdx)->m_position; + unkXyz2 = dPath_GetPnt(mpPath1, mPathIdx - mPathIdxOffset)->m_position; + unkInt1 = cLib_targetAngleY(&unkXyz2, &unkXyz1); + unkInt2 = -cLib_targetAngleX(&unkXyz2, &unkXyz1); + } + if (field_0x744 == 3) { + cLib_chaseUC(&field_0x6de, 0, 4); + cLib_addCalcAngleS(¤t.angle.x, 0xffffe000, 8, 0x100, 0x10); + } else { + cLib_addCalcAngleS(¤t.angle.x, unkInt2, 8, 0x100, 0x10); + } + shape_angle.x = current.angle.x; + cLib_addCalcAngleS(¤t.angle.y, unkInt1, 8, 0x400, 0x10); + shape_angle.y = current.angle.y; + cLib_addCalcAngleS(&shape_angle.z, 0, 8, 0x400, 0x10); + unkFloat1 = l_HIO.mFlightSpeed + 20.0f; + if (std::abs(field_0x6f8 - unkFloat1) > 10.0f) { + cLib_chaseF(&field_0x6f8, unkFloat1, 2.0f); + } else { + cLib_chaseF(&field_0x6f8, unkFloat1, 1.0f); + } + speedF = field_0x6f8 * std::abs(cM_scos(current.angle.x)); + speed.y = -field_0x6f8 * cM_ssin(current.angle.x); + if (field_0x728 == 0) { + setActionMode(4, 0); + } + return; + } + + if (!checkWallHitFall(1) && checkAttackStart()) { + return; + } } -/* ############################################################################################## */ -/* 80854BE8-80854BEC 0000E4 0004+00 0/1 0/0 0/0 .rodata @5478 */ -#pragma push -#pragma force_active on -SECTION_RODATA static f32 const lit_5478 = -30.0f; -COMPILER_STRIP_GATE(0x80854BE8, &lit_5478); -#pragma pop - -/* 80854BEC-80854BF0 0000E8 0004+00 0/1 0/0 0/0 .rodata @5479 */ -#pragma push -#pragma force_active on -SECTION_RODATA static f32 const lit_5479 = -50.0f; -COMPILER_STRIP_GATE(0x80854BEC, &lit_5479); -#pragma pop - -/* 80854BF0-80854BF4 0000EC 0004+00 0/1 0/0 0/0 .rodata @5480 */ -#pragma push -#pragma force_active on -SECTION_RODATA static f32 const lit_5480 = 22.0f; -COMPILER_STRIP_GATE(0x80854BF0, &lit_5480); -#pragma pop - -/* 80854BF4-80854BF8 0000F0 0004+00 1/5 0/0 0/0 .rodata @5481 */ -SECTION_RODATA static f32 const lit_5481 = 0.5f; -COMPILER_STRIP_GATE(0x80854BF4, &lit_5481); - -/* 80854BF8-80854BFC 0000F4 0004+00 0/1 0/0 0/0 .rodata @5482 */ -#pragma push -#pragma force_active on -SECTION_RODATA static f32 const lit_5482 = -10.0f; -COMPILER_STRIP_GATE(0x80854BF8, &lit_5482); -#pragma pop - /* 8084C8FC-8084D108 00343C 080C+00 1/1 0/0 0/0 .text executeStagger__8daKago_cFv */ void daKago_c::executeStagger() { - // NONMATCHING + dCamera_c* camera = dCam_getBody(); + + cXyz cStack_94 = dPath_GetPnt(mpPath1, mPathIdx)->m_position; + cXyz cStack_a0 = dPath_GetPnt(mpPath1, mPathIdx - mPathIdxOffset)->m_position; + + field_0x714 = cLib_targetAngleY(&cStack_a0, &cStack_94); + + if (field_0x6e7 == 1) { + dComIfGp_setAStatusForce(0x2a, 0); + } else { + dComIfGp_setAStatusForce(0x27, 0); + } + + checkHeight(); + + mIsFlying = true; + + switch (field_0x744) { + case 0: + mSph.OffAtSetBit(); + + daPy_getPlayerActorClass()->setPlayerDamage(0, 1); + + mDoMtx_stack_c::copy(mpMorf->getModel()->getAnmMtx(6)); + mDoMtx_stack_c::multVecZero(&field_0x674); + + if (field_0x6e7 == 0) { + mSound.startCreatureSound(Z2SE_EN_YC_CRASH, 0, -1); + mSound.startCreatureVoice(Z2SE_EN_YC_V_HANGED, -1); + } else { + mSound.startCreatureSound(Z2SE_EN_KC_CRASH, 0, -1); + mSound.startCreatureVoice(Z2SE_EN_KC_V_CRASH, -1); + } + + setBck(7, 0, 10.0f, 1.0f); + + field_0x728 = 60; + speedF = 30.0f; + + if (current.pos.y < cStack_94.y) { + speed.y = 30.0f; + } else { + speed.y = -30.0f; + } + + current.angle.y = field_0x6da - (s16)(current.angle.y - field_0x6da) + 0x8000; + + field_0x744 = 4; + + break; + case 1: + case 2: + mSph.OffAtSetBit(); + + daPy_getPlayerActorClass()->setPlayerDamage(0, 1); + + setBck(15, 2, 10.0f, 1.0f); + + field_0x728 = 10; + field_0x720 = (int)l_HIO.mWallHitInvulnTime; + speedF = 40.0f; + + if (field_0x744 == 1) { + shape_angle.z = 0x3000; + current.angle.y += (s16)-0x2000; + if (abs((s16)(current.angle.y - field_0x714)) > 0x2000) { + current.angle.y = field_0x714 + -0x2000; + } + } else { + shape_angle.z = -0x3000; + current.angle.y += (s16)0x2000; + if (abs((s16)(current.angle.y - field_0x714)) > 0x2000) { + current.angle.y = field_0x714 + 0x2000; + } + } + + mSound.startCreatureSound(Z2SE_EN_YC_HIT_SIDE, 0, -1); + dComIfGp_getVibration().StartQuake(1, 0x1f, cXyz(0.0f, 1.0f, 0.0f)); + + field_0x744 = 5; + + break; + case 3: + daPy_getPlayerActorClass()->setPlayerDamage(2, 1); + + mSph.OffAtSetBit(); + + mDoMtx_stack_c::copy(mpMorf->getModel()->getAnmMtx(6)); + mDoMtx_stack_c::multVecZero(&field_0x674); + + if (field_0x6e7 == 0) { + mSound.startCreatureSound(Z2SE_EN_YC_CRASH, 0, -1); + mSound.startCreatureVoice(Z2SE_EN_YC_V_HANGED, -1); + } else { + mSound.startCreatureSound(Z2SE_EN_KC_CRASH, 0, -1); + mSound.startCreatureVoice(Z2SE_EN_KC_V_CRASH, -1); + } + + setBck(7, 0, 10.0f, 1.0f); + + field_0x728 = 0x3c; + speedF = 30.0f; + speed.y = -50.0f; + + field_0x744 = 6; + + break; + case 5: + cLib_addCalcAngleS(&shape_angle.y, current.angle.y, 8, 0x400, 0x40); + cLib_chaseF(&speed.y, 0.0f, 1.0f); + cLib_addCalcAngleS(¤t.angle.x, 0, 8, 0x400, 0x10); + cLib_addCalcAngleS(&shape_angle.x, 0, 8, 0x400, 0x10); + cLib_addCalcAngleS(&shape_angle.z, 0, 8, 0x400, 0x40); + + if (checkWallHitFall(0)) { + dComIfGp_getVibration().StopQuake(0x1f); + break; + } + + if (field_0x728 != 0) { + break; + } + + shape_angle.y = current.angle.y; + field_0x6f8 = 40.0f; + + setActionMode(0, 1); + + dComIfGp_getVibration().StopQuake(0x1f); + + break; + case 4: + case 6: + if (checkBck(7)) { + cXyz cStack_ac; + mDoMtx_stack_c::copy(mLegR3Mtx); + mDoMtx_stack_c::multVecZero(&cStack_ac); + cStack_ac.y -= 20.0f; + + cXyz cStack_b8 = current.pos; + cStack_b8.y += 50.0f; + + dBgS_LinChk dStack_88; + dStack_88.Set(&cStack_b8, &cStack_ac, NULL); + + if (dComIfG_Bgsp().LineCross(&dStack_88)) { + current.pos.y += 5.0f; + } + + setDamageEffect(); + + field_0x728 = 60; + + if (mpMorf->checkFrame(22.0f)) { + setRideOff(); + setBck(8, 2, 10.0f, 1.0f); + } + } + + if (field_0x744 == 4) { + cLib_addCalcAngleS(&shape_angle.y, current.angle.y + 0x8000, 8, 0x100, 0x10); + } else { + cLib_addCalcAngleS(&shape_angle.y, current.angle.y, 8, 0x100, 0x10); + } + + cLib_chaseF(&speedF, 0.0f, 0.5f); + cLib_chaseF(&speed.y, 0.0f, 1.0f); + + cLib_addCalcAngleS(¤t.angle.x, 0, 8, 0x400, 0x10); + cLib_addCalcAngleS(&shape_angle.x, 0, 8, 0x400, 0x10); + cLib_addCalcAngleS(&shape_angle.z, 0, 8, 0x400, 0x40); + + if (field_0x728 == 0) { + setFlyAway(); + field_0x6f8 = -10.0f; + } + + break; + } } /* 8084D108-8084D354 003C48 024C+00 1/1 0/0 0/0 .text executeWait__8daKago_cFv */ void daKago_c::executeWait() { - // NONMATCHING + daPy_py_c* player = (daPy_py_c*)daPy_getPlayerActorClass()->getMidnaActor(); + if (field_0x728 == 0) { + cLib_chaseUC(&field_0x6de, 0, 4); + } + + if (field_0x6df == 0) { + if (player->checkWolfCargoCarrySceneChange()) { + if (field_0x73c == 1) { + createBalloonScore(); + if (dComIfGp_getStartStagePoint() == 0) { + mPathIdxOffset = 1; + mPathIdx = 0; + mPathDir = 1; + } else { + mPathIdxOffset = -1; + mPathIdx = mpPath1->m_num + -1; + mPathDir = -1; + } + + old.pos = dPath_GetPnt(mpPath1, mPathIdx)->m_position; + current.pos = old.pos; + mPathIdx += mPathIdxOffset; + field_0x6a4 = dPath_GetPnt(mpPath1, mPathIdx)->m_position; + + current.angle.y = shape_angle.y = cLib_targetAngleY((Vec*)¤t, &field_0x6a4); + if (player != NULL) { + setMidnaRideOn(); + setPlayerRideOn(); + + field_0x6dc = 0; + field_0x6de = 0xff; + field_0x6df = 1; + + if (mPathDir == 1 && field_0x6e7 == 0 && dComIfGs_isSaveSwitch(9) == 0) { + setActionMode(9, 0); + } else { + setActionMode(10, 0); + } + + setFlyAnime(); + moveDemoFly(); + } + } else if (field_0x73c == 0 || field_0x73c == 2) { + setMidnaRideOn(); + setPlayerRideOn(); + + field_0x6dc = 0; + field_0x6de = 0xff; + field_0x6df = 1; + + setActionMode(8, 0); + executeLanding(); + } + + } + + return; + } + +#if DEBUG + mPathDir = 1; + + if (mDoCPd_c::getHoldL(0) && mDoCPd_c::getHoldR(0) && + mDoCPd_c::getTrigB(0)) + { + setActionMode(2, 0); + + if (field_0x73c == 2) { + setKagoPath(1); + } else { + setKagoPath(5); + + if (field_0x73c == 1) { + createBalloonScore(); + } + } + } +#endif } /* 8084D354-8084D50C 003E94 01B8+00 1/1 0/0 0/0 .text calcAttackMove__8daKago_cFi */ -void daKago_c::calcAttackMove(int param_0) { - // NONMATCHING +bool daKago_c::calcAttackMove(int param_0) { + cXyz acStack_20; + cXyz cStack_2c; + cXyz cStack_38; + + acStack_20 = dPath_GetPnt(mpPath1, mPathIdx)->m_position; + cStack_2c = dPath_GetPnt(mpPath1, mPathIdx - mPathIdxOffset)->m_position; + + s16 targetAngleY = cLib_targetAngleY(&cStack_2c, &acStack_20); + field_0x714 = targetAngleY; + + if (mpLockActor != NULL) { + flySpeedCalcLockOn(); + } else { + if (param_0 == 0) { + flySpeedCalc(targetAngleY, 1); + } else { + flySpeedCalc(targetAngleY, 2); + } + } + + speedF = field_0x6f8 * std::abs(cM_scos(current.angle.x)); + speed.y = -field_0x6f8 * cM_ssin(current.angle.x); + + cStack_38.z = checkNextPath(acStack_20); + if (cStack_38.z < 0.0f) { + if (abs((s16)(targetAngleY - cLib_targetAngleY(&cStack_2c, ¤t.pos))) < 0x4000) { + mPathIdx += mPathIdxOffset; + if (checkFlySceneChange()) { + return true; + } + } + } + return false; } -/* ############################################################################################## */ -/* 80854BFC-80854C00 0000F8 0004+00 0/2 0/0 0/0 .rodata @5671 */ -#pragma push -#pragma force_active on -SECTION_RODATA static f32 const lit_5671 = 9.0f; -COMPILER_STRIP_GATE(0x80854BFC, &lit_5671); -#pragma pop - -/* 80854C00-80854C04 0000FC 0004+00 0/2 0/0 0/0 .rodata @5672 */ -#pragma push -#pragma force_active on -SECTION_RODATA static f32 const lit_5672 = 12.0f; -COMPILER_STRIP_GATE(0x80854C00, &lit_5672); -#pragma pop - -/* 80854C04-80854C08 000100 0004+00 0/2 0/0 0/0 .rodata @5673 */ -#pragma push -#pragma force_active on -SECTION_RODATA static f32 const lit_5673 = 35.0f; -COMPILER_STRIP_GATE(0x80854C04, &lit_5673); -#pragma pop - -/* 80854C08-80854C0C 000104 0004+00 0/1 0/0 0/0 .rodata @5674 */ -#pragma push -#pragma force_active on -SECTION_RODATA static f32 const lit_5674 = 23.0f; -COMPILER_STRIP_GATE(0x80854C08, &lit_5674); -#pragma pop - -/* 80854C0C-80854C10 000108 0004+00 0/2 0/0 0/0 .rodata @5675 */ -#pragma push -#pragma force_active on -SECTION_RODATA static f32 const lit_5675 = 8000.0f; -COMPILER_STRIP_GATE(0x80854C0C, &lit_5675); -#pragma pop - /* 8084D50C-8084DA18 00404C 050C+00 1/1 0/0 0/0 .text executeAttack__8daKago_cFv */ void daKago_c::executeAttack() { - // NONMATCHING + field_0x6dd = 1; + + if (field_0x6e7 == 1) { + dComIfGp_setAStatusForce(0x2a, 0); + } else { + dComIfGp_setAStatusForce(0x27, 0); + } + + checkHeight(); + + mIsFlying = true; + + if (field_0x6e6 != 0) { + setSibukiEffect(); + setDashSibukiEffect(); + } + + switch (field_0x744) { + case 0: + mDashCooldownTime = l_HIO.mDashCooldownTime; + mDashTime = l_HIO.mDashTime; + + field_0x744 = 1; + + setDashBlurEffect(0); + setBck(11, 0, 5.0f, l_HIO.mDashTimeMultiplier); + + dComIfGp_getVibration().StartShock(1, 0x1f, cXyz(0.0f, 1.0f, 0.0f)); + + mpLockActor = NULL; + if (dComIfGp_getAttention()->LockonTruth()) { + fopAc_ac_c* ym = dComIfGp_getAttention()->LockonTarget(0); + if (fopAcM_GetName(ym) != PROC_E_YM) { + break; + } + + mpLockActor = ym; + ((daE_YM_c*)ym)->setLockByCargo(); + } + break; + case 1: + setDashEffect(); + if (calcAttackMove(0) == 0) { + cLib_chaseF(&field_0x6f8, 30.0f, l_HIO.mDashTimeMultiplier * 3.0f); + if (mpMorf->checkFrame(9.0f)) { + if (field_0x6e7 == 0) { + mSound.startCreatureSound(Z2SE_EN_YC_DASH, 0, -1); + } else { + mSound.startCreatureSound(Z2SE_EN_KC_DASH, 0, -1); + } + } + if (mpMorf->checkFrame(12.0f)) { + field_0x744 = 2; + field_0x728 = 0x14; + + dComIfGp_getVibration().StartShock(2, 0x1f, cXyz(0.0f, 1.0f, 0.0f)); + dComIfGp_getVibration().StartQuake(1, 0x1f, cXyz(0.0f, 1.0f, 0.0f)); + + mDashTime = l_HIO.mDashTime - 35.0f; + + field_0x6e6 = 0; + } + } + break; + case 2: + setDashEffect(); + + if (mpMorf->checkFrame(23.0f)) { + mSph.OnAtSetBit(); + } + + if (calcAttackMove(1) == 0) { + cLib_chaseF(&field_0x6f8, 100.0f, 5.0f); + + if (field_0x728 == 0) { + field_0x744 = 3; + } + + if (field_0x728 < 10 && checkWallHitFall(0)) { + dComIfGp_getVibration().StopQuake(0x1f); + mpLockActor = NULL; + } else { + mDashTime--; + if (mDashTime < 1) { + mDashTime = 1; + } + } + } + break; + case 3: + setDashEffect(); + if (calcAttackMove(1) == 0) { + cLib_chaseF(&field_0x6f8, 100.0f, 3.0f); + if (checkWallHitFall(0)) { + dComIfGp_getVibration().StopQuake(0x1f); + + mpLockActor = NULL; + } else { + mDashTime--; + if (mDashTime == 0) { + field_0x744 = 4; + + dComIfGp_getVibration().StopQuake(0x1f); + } + } + } + break; + case 4: + setDashEffect(); + case 5: + if (calcAttackMove(0) == 0) { + cLib_chaseF(&field_0x6f8, l_HIO.mFlightSpeed, 5.0f); + if (field_0x6f8 <= l_HIO.mFlightSpeed) { + mpLockActor = NULL; + + mSph.OffAtSetBit(); + + setActionMode(0, 2); + + field_0x6c8 = 0; + field_0x6c4 = 8000.0f; + field_0x710 = field_0x712 = 0; + } + } + break; + } } -/* ############################################################################################## */ -/* 80854C10-80854C14 00010C 0004+00 0/1 0/0 0/0 .rodata @5722 */ -#pragma push -#pragma force_active on -SECTION_RODATA static f32 const lit_5722 = 1500.0f; -COMPILER_STRIP_GATE(0x80854C10, &lit_5722); -#pragma pop - -/* 80854C14-80854C18 000110 0004+00 0/2 0/0 0/0 .rodata @5723 */ -#pragma push -#pragma force_active on -SECTION_RODATA static f32 const lit_5723 = 1.0f / 10.0f; -COMPILER_STRIP_GATE(0x80854C14, &lit_5723); -#pragma pop - -/* 80854C18-80854C1C 000114 0004+00 0/3 0/0 0/0 .rodata @5724 */ -#pragma push -#pragma force_active on -SECTION_RODATA static f32 const lit_5724 = -1000.0f; -COMPILER_STRIP_GATE(0x80854C18, &lit_5724); -#pragma pop - -/* 80854C1C-80854C20 000118 0004+00 0/1 0/0 0/0 .rodata @5725 */ -#pragma push -#pragma force_active on -SECTION_RODATA static f32 const lit_5725 = 60.0f; -COMPILER_STRIP_GATE(0x80854C1C, &lit_5725); -#pragma pop - /* 8084DA18-8084DBFC 004558 01E4+00 2/2 0/0 0/0 .text calcCircleCamera__8daKago_cFi */ void daKago_c::calcCircleCamera(int param_0) { - // NONMATCHING + cXyz cStack_20; + + mDoMtx_stack_c::transS(current.pos); + mDoMtx_stack_c::YrotM(shape_angle.y); + mDoMtx_stack_c::XrotM(shape_angle.x); + mDoMtx_stack_c::transM(0.0f, 0.0f, 1500.0f); + mDoMtx_stack_c::multVecZero(&cStack_20); + + if (param_0 == 0) { + field_0x68c = cStack_20; + } else if (param_0 == 1) { + cLib_addCalcPos(&field_0x68c, cStack_20, 0.1f, field_0x6f8 + 100.0f, + 10.0f); + } else { + cLib_addCalcPos(&field_0x68c, cStack_20, 0.5f, field_0x6f8 + 30.0f, + 10.0f); + } + mDoMtx_stack_c::transM(0.0f, 0.0f, -1000.0f); + mDoMtx_stack_c::multVecZero(&cStack_20); + + if (param_0 == 0) { + field_0x698 = cStack_20; + } else if (param_0 == 1) { + cLib_addCalcPos(&field_0x698, cStack_20, 0.1f, field_0x6f8 + 100.0f, + 10.0f); + } else { + cLib_addCalcPos(&field_0x698, cStack_20, 0.5f, field_0x6f8 + 30.0f, 10.0f); + } + + field_0x6d4 = 60.0f; + dCam_getBody()->Set(field_0x68c, field_0x698, field_0x6d4, 0); } /* 8084DBFC-8084DD18 00473C 011C+00 1/1 0/0 0/0 .text executeEvent__8daKago_cFv */ void daKago_c::executeEvent() { - // NONMATCHING + dCamera_c* camera = dCam_getBody(); + daPy_py_c* unusedPlayer = daPy_getPlayerActorClass(); + + if ((field_0x73c == 0) && dComIfG_play_c::getLayerNo(0) == 13 && dComIfGs_isSaveSwitch(0x10)) { + dComIfGs_onSaveSwitch(0x1a); + setActionMode(4, 0); + } else { + if (!eventInfo.checkCommandDemoAccrpt()) { + fopAcM_orderPotentialEvent(this, 2, 0xffff, 3); + eventInfo.onCondition(2); + } else { + camera->Stop(); + camera->SetTrimSize(3); + field_0x748 = 0; + field_0x74c = 0; + setActionMode(3, 0); + field_0x6dc = 1; + field_0x6de = 0xff; + dComIfGs_onSaveSwitch(8); + } + } } -/* ############################################################################################## */ -/* 80854C20-80854C24 00011C 0004+00 0/1 0/0 0/0 .rodata @5852 */ -#pragma push -#pragma force_active on -SECTION_RODATA static f32 const lit_5852 = -90000.0f; -COMPILER_STRIP_GATE(0x80854C20, &lit_5852); -#pragma pop - -/* 80854C24-80854C28 000120 0004+00 0/1 0/0 0/0 .rodata @5853 */ -#pragma push -#pragma force_active on -SECTION_RODATA static f32 const lit_5853 = 1000.0f; -COMPILER_STRIP_GATE(0x80854C24, &lit_5853); -#pragma pop - -/* 80854C28-80854C2C 000124 0004+00 0/3 0/0 0/0 .rodata @5854 */ -#pragma push -#pragma force_active on -SECTION_RODATA static f32 const lit_5854 = -300.0f; -COMPILER_STRIP_GATE(0x80854C28, &lit_5854); -#pragma pop - -/* 80854C2C-80854C30 000128 0004+00 0/2 0/0 0/0 .rodata @5855 */ -#pragma push -#pragma force_active on -SECTION_RODATA static f32 const lit_5855 = -100.0f; -COMPILER_STRIP_GATE(0x80854C2C, &lit_5855); -#pragma pop - -/* 80854C30-80854C34 00012C 0004+00 0/1 0/0 0/0 .rodata @5856 */ -#pragma push -#pragma force_active on -SECTION_RODATA static f32 const lit_5856 = -16000.0f; -COMPILER_STRIP_GATE(0x80854C30, &lit_5856); -#pragma pop - -/* 80854C34-80854C38 000130 0004+00 0/1 0/0 0/0 .rodata @5857 */ -#pragma push -#pragma force_active on -SECTION_RODATA static f32 const lit_5857 = 40000.0f; -COMPILER_STRIP_GATE(0x80854C34, &lit_5857); -#pragma pop - /* 8084DD18-8084E2D4 004858 05BC+00 1/1 0/0 0/0 .text initPerchDemo__8daKago_cFv */ void daKago_c::initPerchDemo() { - // NONMATCHING + s16 angleY = daPy_getPlayerActorClass()->shape_angle.y; + cXyz playerPos = daPy_getPlayerActorClass()->current.pos; + + cXyz midnaPos; + fopAc_ac_c* midna = daPy_getPlayerActorClass()->getMidnaActor(); + if (midna != 0) { + midnaPos = midna->current.pos; + } + + switch (field_0x748) { + case 0: { + Z2GetAudioMgr()->setDemoName(field_0x760); + + field_0x771 = 0; + current.pos = dPath_GetPnt(mpPath2, field_0x771)->m_position; + field_0x771++; + if (field_0x771 >= mpPath2->m_num) { + field_0x771 = 0; + } + + cXyz cStack_48 = dPath_GetPnt(mpPath2, field_0x771)->m_position; + s16 sVar5 = cLib_targetAngleY(¤t.pos, &cStack_48); + int local_80 = 2; + if (local_80 >= (int)mpPath2->m_num) { + local_80 = mpPath2->m_num - 1; + } + + cXyz cStack_54 = dPath_GetPnt(mpPath2, local_80)->m_position; + s16 temp = (s16)sVar5 - cLib_targetAngleY(¤t.pos, &cStack_48); + sVar5 = temp < 0 ? (s16)((s16)sVar5 - 0x1000) : (s16)((s16)sVar5 + 0x1000); // fakematch + shape_angle.y = current.angle.y = sVar5; + shape_angle.x = shape_angle.z = 0; + + speed.y = 0.0f; + speedF = 20.0f; + + field_0x72c = 0xb4; + field_0x728 = field_0x72c + 90; + field_0x6e8 = 0; + + if ((field_0x73c == 0) && dComIfG_play_c::getLayerNo(0) == 13 && (playerPos.x > -90000.0f)) + { + field_0x6e8 = 1; + } + + calcCircleCamera(0); + field_0x6e4 = 0; + + break; + } + case 1: { + field_0x728 = 90; + field_0x6f8 = 20.0f; + break; + } + case 2: { + if (field_0x73c != 0) { + mPathIdx = searchNearPassPoint(); + } + + field_0x758 = 1; + + if (mPathIdxOffset < 0) { + angleY = angleY + 0x8000; + + daPy_getPlayerActorClass()->setPlayerPosAndAngle(&playerPos, angleY, 0); + + field_0x758 = 0xffffffff; + } + + mDoMtx_stack_c::transS(midnaPos); + mDoMtx_stack_c::YrotM(angleY); + mDoMtx_stack_c::transM(0.0f, 1000.0f, -1000.0f); + mDoMtx_stack_c::multVecZero((Vec*)¤t); + + setBck(0xc, 2, 0.0f, 1.0f); + + mDoMtx_stack_c::transS(midnaPos); + mDoMtx_stack_c::YrotM(angleY); + mDoMtx_stack_c::transM(0.0f, 300.0f, -300.0f); + mDoMtx_stack_c::multVecZero(&field_0x6a4); + current.angle.y = cLib_targetAngleY(¤t.pos, &field_0x6a4); + current.angle.x = -cLib_targetAngleX(¤t.pos, &field_0x6a4); + + field_0x6f8 = 20.0f; + + speedF = field_0x6f8 * std::abs(cM_scos(current.angle.x)); + speed.y = -field_0x6f8 * cM_ssin(current.angle.x); + + shape_angle.x = current.angle.x; + shape_angle.y = current.angle.y; + shape_angle.z = 0; + + mDoMtx_stack_c::transS(playerPos); + mDoMtx_stack_c::YrotM(angleY); + mDoMtx_stack_c::transM(-100.0f, 100.0f, -300.0f); + mDoMtx_stack_c::multVecZero(&field_0x68c); + mDoMtx_stack_c::transM(100.0f, -100.0f, 300.0f); + mDoMtx_stack_c::transM(100.0f, 30.0f, 300.0f); + mDoMtx_stack_c::multVecZero(&field_0x698); + + field_0x6d4 = 70.0f; + + dCam_getBody()->Set(field_0x68c, field_0x698, field_0x6d4, 0); + + field_0x728 = 10; + + break; + } + case 3: { + setBck(9, 2, 10.0f, 1.0f); + + setMidnaTagPos(); + + speedF = speed.y = 0.0f; + + field_0x728 = 30; + + break; + } + case 4: { + setBck(0xf, 2, 10.0f, 1.0f); + + if (field_0x73c == 0) { + field_0x6a4.set(-90000.0f, -16000.0f, 40000.0f); + } else { + field_0x6a4 = dPath_GetPnt(mpPath1, mPathIdx)->m_position; + } + + setMidnaRideOn(); + setPlayerRideOn(); + + dComIfGp_getVibration().StartShock(2, 0x1f, cXyz(0.0f, 1.0f, 0.0f)); + + field_0x744 = 1; + field_0x728 = 30; + + break; + } + } + + field_0x74c = 1; + field_0x744 = 0; } -/* ############################################################################################## */ -/* 80854C38-80854C3C 000134 0004+00 0/1 0/0 0/0 .rodata @6160 */ -#pragma push -#pragma force_active on -SECTION_RODATA static f32 const lit_6160 = 3.0f / 10.0f; -COMPILER_STRIP_GATE(0x80854C38, &lit_6160); -#pragma pop - -/* 80854C3C-80854C40 000138 0004+00 0/1 0/0 0/0 .rodata @6161 */ -#pragma push -#pragma force_active on -SECTION_RODATA static f32 const lit_6161 = -3.0f; -COMPILER_STRIP_GATE(0x80854C3C, &lit_6161); -#pragma pop - /* 8084E2D4-8084F09C 004E14 0DC8+00 2/1 0/0 0/0 .text executePerchDemo__8daKago_cFv */ -void daKago_c::executePerchDemo() { - // NONMATCHING +bool daKago_c::executePerchDemo() { + cXyz playerPos = daPy_getPlayerActorClass()->current.pos; + s16 playerYaw = daPy_getPlayerActorClass()->shape_angle.y; + cXyz unkXyz1; + cXyz midnaPos; + + daMidna_c* midna = daPy_getPlayerActorClass()->getMidnaActor(); + s16 midnaYaw; + if (midna != 0) { + midnaPos = midna->current.pos; + midnaYaw = midna->shape_angle.y; + } + + field_0x750++; + + switch (field_0x748) { + case 0: { + calcCircleCamera(1); + if ((field_0x750 & 0x20) != 0) { + cLib_chaseF(&field_0x6fc, 3.0f, 0.3f); + } else { + cLib_chaseF(&field_0x6fc, -3.0f, 0.3f); + } + + current.pos.y = current.pos.y + field_0x6fc; + + if (field_0x72c != 0) { + cXyz cStack_64 = dPath_GetPnt(mpPath2, field_0x771)->m_position; + cLib_addCalcAngleS(¤t.angle.y, cLib_targetAngleY(¤t.pos, &cStack_64), 0x20, 0x100, 0x40); + if (current.pos.abs(cStack_64) < 200.0f) { + field_0x771++; + if (field_0x771 >= mpPath2->m_num) { + field_0x771 = 0; + } + } + cLib_addCalcAngleS(&shape_angle.y, current.angle.y, 0x20, 0x100, 0x40); + } else { + if (field_0x754 == 0) { + if (field_0x6e7 == 1) { + mSound.startCreatureVoice(Z2SE_EN_KC_V_NAKU, -1); + } else { + mSound.startCreatureVoice(Z2SE_EN_YC_V_NAKU, -1); + } + field_0x754 = 1; + } + + cLib_addCalcAngleS(&shape_angle.y, cLib_targetAngleY(¤t.pos, &playerPos), 8, 0x200, 0x40); + cLib_addCalcAngleS(&shape_angle.x, -cLib_targetAngleX(¤t.pos, &playerPos), 4, 0x200, 0x10); + cLib_addCalcAngleS(¤t.angle.y, cLib_targetAngleY(¤t.pos, &playerPos), 8, 0x100, 0x10); + } + + if (field_0x728 == 0) { + field_0x748 = 1; + return true; + } + + dComIfGp_getEvent().setSkipProc(this, DemoSkipCallBack, 0); + + break; + } + case 1: { + calcCircleCamera(2); + + cLib_addCalcAngleS(&shape_angle.x, -cLib_targetAngleX(¤t.pos, &playerPos), 4, 0x400, 0x40); + cLib_addCalcAngleS(&shape_angle.y, cLib_targetAngleY((Vec*)¤t, &playerPos), 4, 0x200, 0x40); + + current.angle.y = shape_angle.y; + current.angle.x = shape_angle.x; + + cLib_chaseF(&field_0x6f8, 60.0f, 1.0f); + + speedF = field_0x6f8 * std::abs(cM_scos(current.angle.x)); + speed.y = -field_0x6f8 * cM_ssin(current.angle.x); + + if (current.pos.abs(playerPos) < 2000.0f) { + field_0x748 = 2; + return true; + } + + dComIfGp_getEvent().setSkipProc(this, DemoSkipCallBack, 0); + + break; + } + case 2: { + if (field_0x6e4 == 0) { + if (field_0x73c == 0) { + dComIfGp_getEvent().setSkipProc(this, DemoSkipCallBack, 4); + } else if (field_0x73c == 2) { + dComIfGp_getEvent().setSkipProc(this, DemoSkipCallBack, 5); + } + } + + if (field_0x744 == 0) { + current.angle.y = cLib_targetAngleY(¤t.pos, &field_0x6a4); + current.angle.x = -cLib_targetAngleX(¤t.pos, &field_0x6a4); + + speedF = field_0x6f8 * std::abs(cM_scos(current.angle.x)); + speed.y = -field_0x6f8 * cM_ssin(current.angle.x); + + if (field_0x728 != 0) { + shape_angle.x = current.angle.x; + if (field_0x728 == 1) { + if (field_0x6e7 == 1) { + mSound.startCreatureVoice(Z2SE_EN_KC_V_NAKU, -1); + } else { + mSound.startCreatureVoice(Z2SE_EN_YC_V_NAKU, -1); + } + } + } else { + cLib_addCalcAngleS(&shape_angle.x, 0, 4, 0x100, 0x80); + } + + shape_angle.y = current.angle.y; + if (field_0x6a4.abs(current.pos) < 300.0f) { + field_0x744 = 1; + + setBck(0x15, 2, 10.0f, 1.0f); + + field_0x728 = 60; + + mDoMtx_stack_c::transS(midnaPos); + mDoMtx_stack_c::YrotM(playerYaw); + mDoMtx_stack_c::transM(0.0f, 300.0f, -100.0f); + mDoMtx_stack_c::multVecZero(&field_0x6a4); + } + } else { + cLib_chaseF(&field_0x6f8, 0.0f, 1.0f); + cLib_addCalcAngleS(¤t.angle.y, cLib_targetAngleY(¤t.pos, &field_0x6a4), 4, 0x400, 0x100); + cLib_addCalcAngleS(¤t.angle.x, 0, 4, 0x100, 0x80); + cLib_addCalcAngleS(&shape_angle.x, 0, 4, 0x100, 0x80); + + shape_angle.y = current.angle.y; + speedF = field_0x6f8 * std::abs(cM_scos(current.angle.x)); + speed.y = -field_0x6f8 * cM_ssin(current.angle.x); + if (!field_0x6f8 && field_0x728 == 0) { + field_0x748 = 3; + return true; + } + } + + mDoMtx_stack_c::transS(playerPos); + mDoMtx_stack_c::YrotM(playerYaw); + mDoMtx_stack_c::transM(0.0f, 400.0f, -300.0f); + mDoMtx_stack_c::multVecZero(&unkXyz1); + cLib_addCalcPos(&field_0x68c, unkXyz1, 0.5f, 5.0f, 5.0f); + + mDoMtx_stack_c::transS(playerPos); + mDoMtx_stack_c::YrotM(playerYaw); + mDoMtx_stack_c::transM(100.0f, 30.0f, 300.0f); + mDoMtx_stack_c::multVecZero(&unkXyz1); + cLib_addCalcPos(&field_0x698, unkXyz1, 0.5f, 20.0f, 10.0f); + + dCam_getBody()->Set(field_0x68c, field_0x698, field_0x6d4, 0); + + break; + } + case 3: { + if (field_0x6e4 == 0) { + if (field_0x73c == 0) { + dComIfGp_getEvent().setSkipProc(this, DemoSkipCallBack, 4); + } else if (field_0x73c == 2) { + dComIfGp_getEvent().setSkipProc(this, DemoSkipCallBack, 5); + } + } + + mDoMtx_stack_c::transS(midnaPos); + mDoMtx_stack_c::YrotM(playerYaw); + mDoMtx_stack_c::transM(0.0f, 100.0f, 0.0f); + mDoMtx_stack_c::multVecZero(&unkXyz1); + cLib_addCalcPos(&field_0x68c, unkXyz1, 0.5f, 20.0f, 10.0f); + + mDoMtx_stack_c::transS(current.pos); + mDoMtx_stack_c::YrotM(playerYaw); + mDoMtx_stack_c::transM(300.0f, 50.0f, 500.0f); + mDoMtx_stack_c::multVecZero(&unkXyz1); + cLib_addCalcPos(&field_0x698, unkXyz1, 0.5f, 20.0f, 10.0f); + + cLib_chaseF(&field_0x6d4, 70.0f, 1.0f); + + dCam_getBody()->Set(field_0x68c, field_0x698, field_0x6d4, 0); + + cLib_addCalcAngleS(¤t.angle.x, 0, 4, 0x400, 0x100); + + shape_angle.x = current.angle.x; + + if (field_0x728 == 0) { + field_0x748 = 4; + return true; + } + + break; + } + case 4: { + if (field_0x6e4 == 0) { + if (field_0x73c == 0) { + dComIfGp_getEvent().setSkipProc(this, DemoSkipCallBack, 4); + } else if (field_0x73c == 2) { + dComIfGp_getEvent().setSkipProc(this, DemoSkipCallBack, 6); + } + } + + if (PerchDemoAwayForward()) { + return true; + } + + break; + } + case 5: { + f32 maxStep = field_0x6cc * 50.0f; + f32 minStep = field_0x6cc * 10.0f; + cLib_chaseF(&field_0x6cc, 0.0f, 0.05f); + cLib_addCalcPos(&field_0x68c, midnaPos, 0.5f, maxStep, minStep); + mDoMtx_stack_c::transS(current.pos); + mDoMtx_stack_c::YrotM(playerYaw); + mDoMtx_stack_c::transM(0.0f, 50.0f, -800.0f); + mDoMtx_stack_c::multVecZero(&unkXyz1); + cLib_addCalcPos(&field_0x698, unkXyz1, 0.5f, maxStep, minStep); + cLib_chaseF(&field_0x6d4, 70.0f, 1.0f); + dCam_getBody()->Set(field_0x68c, field_0x698, field_0x6d4, 0); + + break; + } + case 6: + break; + } + + return false; } -/* ############################################################################################## */ -/* 80854C40-80854C44 00013C 0004+00 0/0 0/0 0/0 .rodata @6162 */ -#pragma push -#pragma force_active on -SECTION_RODATA static f32 const lit_6162 = 2000.0f; -COMPILER_STRIP_GATE(0x80854C40, &lit_6162); -#pragma pop - -/* 80854C44-80854C48 000140 0004+00 0/3 0/0 0/0 .rodata @6163 */ -#pragma push -#pragma force_active on -SECTION_RODATA static f32 const lit_6163 = 400.0f; -COMPILER_STRIP_GATE(0x80854C44, &lit_6163); -#pragma pop - -/* 80854C48-80854C4C 000144 0004+00 0/0 0/0 0/0 .rodata @6164 */ -#pragma push -#pragma force_active on -SECTION_RODATA static f32 const lit_6164 = 1.0f / 20.0f; -COMPILER_STRIP_GATE(0x80854C48, &lit_6164); -#pragma pop - -/* 80854C4C-80854C50 000148 0004+00 0/1 0/0 0/0 .rodata @6165 */ -#pragma push -#pragma force_active on -SECTION_RODATA static f32 const lit_6165 = -800.0f; -COMPILER_STRIP_GATE(0x80854C4C, &lit_6165); -#pragma pop - -/* 80854C50-80854C54 00014C 0004+00 0/3 0/0 0/0 .rodata @6372 */ -#pragma push -#pragma force_active on -SECTION_RODATA static f32 const lit_6372 = -200.0f; -COMPILER_STRIP_GATE(0x80854C50, &lit_6372); -#pragma pop - -/* 80854C54-80854C58 000150 0004+00 0/1 0/0 0/0 .rodata @6373 */ -#pragma push -#pragma force_active on -SECTION_RODATA static f32 const lit_6373 = -500.0f; -COMPILER_STRIP_GATE(0x80854C54, &lit_6373); -#pragma pop - /* 8084F09C-8084FA58 005BDC 09BC+00 1/1 0/0 0/0 .text PerchDemoAwayForward__8daKago_cFv */ -void daKago_c::PerchDemoAwayForward() { - // NONMATCHING +bool daKago_c::PerchDemoAwayForward() { + + cXyz playerPos = daPy_getPlayerActorClass()->current.pos; + s16 playerYaw = daPy_getPlayerActorClass()->shape_angle.y; + + dCamera_c* camera = dCam_getBody(); + + cXyz unkXyz1; + cXyz midnaPos; + + daMidna_c* midna = daPy_getPlayerActorClass()->getMidnaActor(); + s16 midnaYaw; + if (midna != NULL) { + midnaPos = midna->current.pos; + midnaYaw = midna->shape_angle.y; + } + + switch (field_0x744) { + case 0: + case 1: { + f32 unusedFloat1 = 20.0f; + f32 unusedFloat2 = 10.0f; + + field_0x68c += speed; + field_0x698 += speed; + + mDoMtx_stack_c::transS(midnaPos); + mDoMtx_stack_c::YrotM(playerYaw); + if (field_0x744 == 0) { + mDoMtx_stack_c::transM(0.0f, 100.0f, 0.0f); + } else { + mDoMtx_stack_c::transM(0.0f, -200.0f, 0.0f); + } + mDoMtx_stack_c::multVecZero(&unkXyz1); + cLib_addCalcPos(&field_0x68c, unkXyz1, 0.5f, 10.0f, 5.0f); + + mDoMtx_stack_c::transS(current.pos); + mDoMtx_stack_c::YrotM(playerYaw); + if (field_0x744 == 0) { + mDoMtx_stack_c::transM(300.0f, 50.0f, 500.0f); + } else { + mDoMtx_stack_c::transM(500.0f, 50.0f, 0.0f); + } + mDoMtx_stack_c::multVecZero(&unkXyz1); + cLib_addCalcPos(&field_0x698, unkXyz1, 0.5f, 10.0f, 5.0f); + + cLib_chaseF(&field_0x6d4, 70.0f, 1.0f); + + camera->Set(field_0x68c, field_0x698, field_0x6d4, 0); + + mGroundHeight = checkGroundHeight(current.pos, NULL); + mRoofHeight = checkRoofHeight(current.pos); + + cLib_chaseF(&field_0x6f8, 30.0f, 1.0f); + + cLib_addCalcAngleS(¤t.angle.x, 0, 8, 0x200, 0x80); + shape_angle.x = current.angle.x; + shape_angle.y = current.angle.y; + + speedF = field_0x6f8 * std::abs(cM_scos(current.angle.x)); + speed.y = -field_0x6f8 * cM_ssin(current.angle.x); + if (field_0x744 == 0) { + cLib_addCalcAngleS(&shape_angle.x, 0x2000, 8, 0x200, 0x40); + } else { + cLib_addCalcAngleS(&shape_angle.x, 0, 8, 0x200, 0x40); + } + + if (field_0x728 == 0x14 && field_0x744 == 0) { + if (field_0x6e7 == 1) { + mSound.startCreatureVoice(Z2SE_EN_KC_V_NAKU, -1); + } else { + mSound.startCreatureVoice(Z2SE_EN_YC_V_NAKU, -1); + } + } + + if (field_0x728 == 0) { + if (field_0x744 == 0) { + field_0x744 = 1; + field_0x728 = 0x1e; + + setPlayerRideOn(); + + dComIfGp_getVibration().StartShock(2, 0x1f, cXyz(0.0f, 1.0f, 0.0f)); + } else if (field_0x73c != 0) { + field_0x728 = 60; + field_0x744 = 2; + } else { + field_0x728 = 90; + field_0x744 = 3; + field_0x6cc = 1.0f; + } + } + + break; + } + case 2: { + if (field_0x728 > 10) { + field_0x68c += speed; + field_0x698 += speed; + + s16 targetYaw = cLib_targetAngleY(&field_0x698, &field_0x68c); + if (abs((s16)(midnaYaw - targetYaw)) < 0x2000) { + cLib_addCalcPos(&field_0x68c, midnaPos, 0.5f, 5.0f, 10.0f); + + mDoMtx_stack_c::transS(current.pos); + mDoMtx_stack_c::YrotM(playerYaw); + mDoMtx_stack_c::transM(0.0f, 50.0f, -800.0f); + mDoMtx_stack_c::multVecZero(&unkXyz1); + cLib_addCalcPos(&field_0x698, unkXyz1, 0.5f, 20.0f, 10.0f); + } else { + cLib_addCalcPos(&field_0x68c, midnaPos, 0.5f, 5.0f, 10.0f); + + mDoMtx_stack_c::transS(current.pos); + mDoMtx_stack_c::YrotM(playerYaw); + mDoMtx_stack_c::transM(300.0f, 50.0f, -500.0f); + mDoMtx_stack_c::multVecZero(&unkXyz1); + cLib_addCalcPos(&field_0x698, unkXyz1, 0.5f, 20.0f, 10.0f); + } + } else { + cLib_addCalcPos(&field_0x68c, midnaPos, 0.5f, 50.0f, 10.0f); + + mDoMtx_stack_c::transS(current.pos); + mDoMtx_stack_c::YrotM(playerYaw); + mDoMtx_stack_c::transM(0.0f, 50.0f, -800.0f); + mDoMtx_stack_c::multVecZero(&unkXyz1); + cLib_addCalcPos(&field_0x698, unkXyz1, 0.5f, 50.0f, 10.0f); + } + + cLib_chaseF(&field_0x6d4, 70.0f, 1.0f); + camera->Set(field_0x68c, field_0x698, field_0x6d4, 0); + + mGroundHeight = checkGroundHeight(current.pos, NULL); + mRoofHeight = checkRoofHeight(current.pos); + + cLib_chaseF(&field_0x6f8, l_HIO.mFlightSpeed, 2.0f); + + if (field_0x728 < 30) { + cLib_addCalcAngleS(¤t.angle.x, 0, 8, 0x100, 0x40); + } else { + cLib_addCalcAngleS(¤t.angle.x, 0xffffe000, 8, 0x100, 0x40); + } + + shape_angle.x = current.angle.x; + shape_angle.y = current.angle.y; + + speedF = field_0x6f8 * std::abs(cM_scos(current.angle.x)); + speed.y = -field_0x6f8 * cM_ssin(current.angle.x); + + if (field_0x728 == 0) { + if (field_0x73c == 2) { + if (setSceneChange(3)) { + field_0x748 = 5; + field_0x6cc = 1.0f; + } + } else { + field_0x6dc = 0; + + setActionMode(0, 0); + + camera->Reset(field_0x68c, field_0x698); + camera->Start(); + camera->SetTrimSize(0); + + dComIfGp_event_reset(); + + Z2GetAudioMgr()->setDemoName(NULL); + } + } + + break; + } + case 3: { + cLib_chaseF(&field_0x6cc, 0.0f, 0.1f); + + field_0x68c += speed; + field_0x698 += speed * field_0x6cc; + + unkXyz1.set(playerPos.x, playerPos.y + 100.0f, playerPos.z); + cLib_addCalcPos(&field_0x68c, unkXyz1, 0.5f, 10.0f, 3.0f); + + field_0x6d4 = 70.0f; + + camera->Set(field_0x68c, field_0x698, field_0x6d4, 0); + + cLib_chaseF(&field_0x6f8, 30.0f, 1.0f); + + cLib_addCalcAngleS(¤t.angle.x, 0xffffe000, 8, 0x100, 0x40); + shape_angle.x = current.angle.x; + shape_angle.y = current.angle.y; + + speedF = field_0x6f8 * std::abs(cM_scos(current.angle.x)); + speed.y = -field_0x6f8 * cM_ssin(current.angle.x); + + if (field_0x728 == 0) { + setActionMode(7, 0); + field_0x748 = 8; + return true; + } + + break; + } + } + + return false; } /* 8084FA58-8084FAA8 006598 0050+00 1/1 0/0 0/0 .text executePerch__8daKago_cFv */ void daKago_c::executePerch() { - // NONMATCHING + if (field_0x74c == 0) { + initPerchDemo(); + } + + if (executePerchDemo()) { + field_0x74c = 0; + } } /* 8084FAA8-8084FB50 0065E8 00A8+00 1/1 0/0 0/0 .text executeEvent2__8daKago_cFv */ void daKago_c::executeEvent2() { - // NONMATCHING + dCamera_c* camera = dCam_getBody(); + if (!eventInfo.checkCommandDemoAccrpt()) { + fopAcM_orderPotentialEvent(this,2,0xffff,3); + eventInfo.onCondition(2); + } else { + camera->Stop(); + camera->SetTrimSize(3); + field_0x748 = 0; + field_0x74c = 0; + setActionMode(7,0); + field_0x6dc = 1; + field_0x6de = 0xff; + } } -/* ############################################################################################## */ -/* 80854C58-80854C5C 000154 0004+00 0/1 0/0 0/0 .rodata @6544 */ -#pragma push -#pragma force_active on -SECTION_RODATA static f32 const lit_6544 = -103292.0f; -COMPILER_STRIP_GATE(0x80854C58, &lit_6544); -#pragma pop - -/* 80854C5C-80854C60 000158 0004+00 0/1 0/0 0/0 .rodata @6545 */ -#pragma push -#pragma force_active on -SECTION_RODATA static f32 const lit_6545 = -23437.0f; -COMPILER_STRIP_GATE(0x80854C5C, &lit_6545); -#pragma pop - -/* 80854C60-80854C64 00015C 0004+00 0/1 0/0 0/0 .rodata @6546 */ -#pragma push -#pragma force_active on -SECTION_RODATA static f32 const lit_6546 = 39925.0f; -COMPILER_STRIP_GATE(0x80854C60, &lit_6546); -#pragma pop - -/* 80854C64-80854C68 000160 0004+00 0/1 0/0 0/0 .rodata @6547 */ -#pragma push -#pragma force_active on -SECTION_RODATA static f32 const lit_6547 = -60000.0f; -COMPILER_STRIP_GATE(0x80854C64, &lit_6547); -#pragma pop - -/* 80854C68-80854C6C 000164 0004+00 0/1 0/0 0/0 .rodata @6548 */ -#pragma push -#pragma force_active on -SECTION_RODATA static f32 const lit_6548 = -11000.0f; -COMPILER_STRIP_GATE(0x80854C68, &lit_6548); -#pragma pop - -/* 80854C6C-80854C70 000168 0004+00 0/1 0/0 0/0 .rodata @6549 */ -#pragma push -#pragma force_active on -SECTION_RODATA static f32 const lit_6549 = 28000.0f; -COMPILER_STRIP_GATE(0x80854C6C, &lit_6549); -#pragma pop - /* 8084FB50-80850384 006690 0834+00 2/1 0/0 0/0 .text initFirstDemo__8daKago_cFv */ void daKago_c::initFirstDemo() { - // NONMATCHING + dCamera_c* camera = dCam_getBody(); + cXyz acStack_28; + cXyz cStack_34; + daPy_py_c* player = daPy_getPlayerActorClass(); + s16 playerYaw = player->shape_angle.y; + cXyz playerPos = player->current.pos; + daMidna_c* midna = daPy_py_c::getMidnaActor(); + cXyz midnaPos; + if (midna != 0) { + midnaPos = midna->current.pos; + } + + s16 targetYaw; + switch (field_0x748) { + case 0: { + Z2GetAudioMgr()->setDemoName(field_0x760); + field_0x718 = -0x800; + player->changeOriginalDemo(); + player->changeDemoMode(0x17, 0, 0, 0); + playerPos.set(-103292.0f, -23437.0f, 39925.0f); + field_0x6a4.set(-60000.0f, -11000.0f, 28000.0f); + shape_angle.y = current.angle.y = cLib_targetAngleY(&playerPos, &field_0x6a4); + cStack_34.set(-300.0f, 400.0f, -1000.0f); + cLib_offsetPos(¤t.pos, &playerPos, shape_angle.y, &cStack_34); + targetYaw = cLib_targetAngleY(&playerPos, ¤t.pos); + player->setPlayerPosAndAngle(&playerPos, targetYaw, 0); + if (midna != NULL) { + midna->current.pos = playerPos; + midnaPos = midna->current.pos; + } + field_0x680.set(0.0f, 0.0f, 0.0f); + field_0x68c = current.pos; + field_0x6bc = 0x3000; + field_0x6cc = 500.0f; + field_0x6d0 = 400.0f; + cStack_34.set(0.0f, field_0x6d0, field_0x6cc); + cLib_offsetPos(&field_0x698, ¤t.pos, shape_angle.y + field_0x6bc, + &cStack_34); + field_0x6d4 = 70.0f; + camera->Set(field_0x68c, field_0x698, field_0x6d4, 0); + field_0x728 = 0xa0; + setBck(15, 2, 10.0f, 1.0f); + field_0x6e4 = 0; + + break; + } + case 1: { + if (midna != NULL) { + midna->current.pos = playerPos; + midnaPos = midna->current.pos; + } + field_0x68c = current.pos; + field_0x6bc = 0x800; + field_0x6cc = 700.0f; + cStack_34.set(0.0f, 0.0f, field_0x6cc); + cLib_offsetPos(&field_0x698, ¤t.pos, shape_angle.y + field_0x6bc, + &cStack_34); + field_0x6d4 = 70.0f; + camera->Set(field_0x68c, field_0x698, field_0x6d4, 0); + field_0x728 = 0x50; + + break; + } + case 2: { + field_0x728 = 60; + mMsgFlow.init(this, 0x7d3, 0, NULL); + + break; + } + case 3: { + field_0x718 = cLib_targetAngleX(¤t.pos, &playerPos) / 4; + targetYaw = cLib_targetAngleY(¤t.pos, &playerPos) - shape_angle.y; + field_0x71a = targetYaw / 4; + cStack_34.set(50.0f, 150.0f, -200.0f); + cLib_offsetPos(&field_0x698, &midnaPos, shape_angle.y, &cStack_34); + cStack_34.set(50.0f, 0.0f, 50.0f); + cLib_offsetPos(&field_0x68c, &midnaPos, shape_angle.y, &cStack_34); + field_0x6d4 = 70.0f; + camera->Set(field_0x68c, field_0x698, field_0x6d4, 0); + targetYaw = cLib_targetAngleY(&playerPos, (Vec*)¤t); + player->setPlayerPosAndAngle(&playerPos, targetYaw, 0); + + break; + } + case 4: { + setMidnaRideOn(); + field_0x6cc = -500.0f; + field_0x6bc = cLib_targetAngleY(¤t.pos, &playerPos); + mDoMtx_stack_c::transS(playerPos); + mDoMtx_stack_c::YrotM(field_0x6bc); + mDoMtx_stack_c::transM(0.0f, 300.0f, field_0x6cc); + mDoMtx_stack_c::multVecZero(&field_0x6a4); + field_0x6f8 = 0.0f; + + break; + } + case 5: { + field_0x6bc = cLib_targetAngleY(¤t.pos, &playerPos); + mDoMtx_stack_c::transS(playerPos); + mDoMtx_stack_c::YrotM(field_0x6bc); + mDoMtx_stack_c::transM(0.0f, 300.0f, 200.0f); + mDoMtx_stack_c::multVecZero(&field_0x6a4); + + break; + } + case 6: { + player->cancelOriginalDemo(); + setPlayerRideOn(); + dComIfGp_getVibration().StartShock(2, 0x1f, cXyz(0.0f, 1.0f, 0.0f)); + field_0x728 = 0x96; + field_0x6cc = 1.0f; + + break; + } + case 7: { + field_0x6e8 = 0; + } + case 8: { + setBck(15, 2, 10.0f, 1.0f); + if (field_0x6e8 != 0) { + mpMorf->setFrame(0.0f); + field_0x6a4.set(-67000.0f, -13000.0f, 28000.0f); + current.pos.set(-76600.0f, -15500.0f, 37340.0f); + shape_angle.y = current.angle.y = -0x8000; + shape_angle.x = current.angle.x = -0x1000; + field_0x6f8 = 50.0f; + field_0x698.set(-75232.0f, -14685.0f, 34417.0f); + field_0x68c.set(current.pos.x, current.pos.y + 100.0f, current.pos.z); + field_0x6d4 = 70.0f; + camera->Set(field_0x68c, field_0x698, field_0x6d4, 0); + field_0x728 = 200; + } else { + field_0x6a4.set(-60000.0f, -11000.0f, 28000.0f); + current.pos.set(-90000.0f, -16000.0f, 40000.0f); + shape_angle.y = current.angle.y = cLib_targetAngleY(¤t.pos, &field_0x6a4); + shape_angle.x = current.angle.x = -0x2000; + field_0x6f8 = 50.0f; + cStack_34.set(-500.0f, 1000.0f, 5000.0f); + cLib_offsetPos(&field_0x698, ¤t.pos, shape_angle.y, &cStack_34); + field_0x68c.set(current.pos.x, current.pos.y + 100.0f, current.pos.z); + field_0x6d4 = 70.0f; + camera->Set(field_0x68c, field_0x698, field_0x6d4, 0); + field_0x728 = 200; + } + + break; + } + } + + field_0x74c = 1; + field_0x744 = 0; } -/* ############################################################################################## */ -/* 80854C70-80854C74 00016C 0004+00 1/2 0/0 0/0 .rodata @6550 */ -SECTION_RODATA static f32 const lit_6550 = 150.0f; -COMPILER_STRIP_GATE(0x80854C70, &lit_6550); - -/* 80854C74-80854C78 000170 0004+00 0/0 0/0 0/0 .rodata @6551 */ -#pragma push -#pragma force_active on -SECTION_RODATA static f32 const lit_6551 = -67000.0f; -COMPILER_STRIP_GATE(0x80854C74, &lit_6551); -#pragma pop - -/* 80854C78-80854C7C 000174 0004+00 0/1 0/0 0/0 .rodata @6552 */ -#pragma push -#pragma force_active on -SECTION_RODATA static f32 const lit_6552 = -13000.0f; -COMPILER_STRIP_GATE(0x80854C78, &lit_6552); -#pragma pop - -/* 80854C7C-80854C80 000178 0004+00 0/0 0/0 0/0 .rodata @6553 */ -#pragma push -#pragma force_active on -SECTION_RODATA static f32 const lit_6553 = -76600.0f; -COMPILER_STRIP_GATE(0x80854C7C, &lit_6553); -#pragma pop - -/* 80854C80-80854C84 00017C 0004+00 0/0 0/0 0/0 .rodata @6554 */ -#pragma push -#pragma force_active on -SECTION_RODATA static f32 const lit_6554 = -15500.0f; -COMPILER_STRIP_GATE(0x80854C80, &lit_6554); -#pragma pop - -/* 80854C84-80854C88 000180 0004+00 0/0 0/0 0/0 .rodata @6555 */ -#pragma push -#pragma force_active on -SECTION_RODATA static f32 const lit_6555 = 37340.0f; -COMPILER_STRIP_GATE(0x80854C84, &lit_6555); -#pragma pop - -/* 80854C88-80854C8C 000184 0004+00 0/0 0/0 0/0 .rodata @6556 */ -#pragma push -#pragma force_active on -SECTION_RODATA static f32 const lit_6556 = -75232.0f; -COMPILER_STRIP_GATE(0x80854C88, &lit_6556); -#pragma pop - -/* 80854C8C-80854C90 000188 0004+00 0/0 0/0 0/0 .rodata @6557 */ -#pragma push -#pragma force_active on -SECTION_RODATA static f32 const lit_6557 = -14685.0f; -COMPILER_STRIP_GATE(0x80854C8C, &lit_6557); -#pragma pop - -/* 80854C90-80854C94 00018C 0004+00 0/0 0/0 0/0 .rodata @6558 */ -#pragma push -#pragma force_active on -SECTION_RODATA static f32 const lit_6558 = 34417.0f; -COMPILER_STRIP_GATE(0x80854C90, &lit_6558); -#pragma pop - -/* 80854C94-80854C98 000190 0004+00 0/0 0/0 0/0 .rodata @6559 */ -#pragma push -#pragma force_active on -SECTION_RODATA static f32 const lit_6559 = 5000.0f; -COMPILER_STRIP_GATE(0x80854C94, &lit_6559); -#pragma pop - -/* 80854C98-80854C9C 000194 0004+00 0/1 0/0 0/0 .rodata @6917 */ -#pragma push -#pragma force_active on -SECTION_RODATA static f32 const lit_6917 = 1250.0f; -COMPILER_STRIP_GATE(0x80854C98, &lit_6917); -#pragma pop - -/* 80854C9C-80854CA0 000198 0004+00 0/1 0/0 0/0 .rodata @6918 */ -#pragma push -#pragma force_active on -SECTION_RODATA static f32 const lit_6918 = 67.0f / 10.0f; -COMPILER_STRIP_GATE(0x80854C9C, &lit_6918); -#pragma pop - -/* 80854CA0-80854CA4 00019C 0004+00 0/1 0/0 0/0 .rodata @6919 */ -#pragma push -#pragma force_active on -SECTION_RODATA static f32 const lit_6919 = -400.0f; -COMPILER_STRIP_GATE(0x80854CA0, &lit_6919); -#pragma pop - -/* 80854CA4-80854CA8 0001A0 0004+00 0/1 0/0 0/0 .rodata @6920 */ -#pragma push -#pragma force_active on -SECTION_RODATA static f32 const lit_6920 = 71.0f / 10.0f; -COMPILER_STRIP_GATE(0x80854CA4, &lit_6920); -#pragma pop - -/* 80854CA8-80854CAC 0001A4 0004+00 0/1 0/0 0/0 .rodata @6921 */ -#pragma push -#pragma force_active on -SECTION_RODATA static f32 const lit_6921 = 4.0f; -COMPILER_STRIP_GATE(0x80854CA8, &lit_6921); -#pragma pop - /* 80850384-808513E4 006EC4 1060+00 2/1 0/0 0/0 .text executeFirstDemo__8daKago_cFv */ -void daKago_c::executeFirstDemo() { - // NONMATCHING +bool daKago_c::executeFirstDemo() { + dCamera_c* camera = dCam_getBody(); + + cXyz unkXyz1; + cXyz unkXyz2; + + cXyz midnaPos; + daPy_py_c* player = daPy_getPlayerActorClass(); + + daMidna_c* midna = daPy_py_c::getMidnaActor(); + if (midna != 0) { + midnaPos = midna->current.pos; + } + + s16 playerYaw = player->shape_angle.y; + cXyz playerPos = player->current.pos; + + int unkFlag1; + int switchVal = field_0x748; + switch (switchVal) { + case 0: + dComIfGp_getEvent().setSkipProc(this, DemoSkipCallBack, 2); + + cLib_chaseAngleS(&field_0x6bc, 0x1400, 0x40); + cLib_chaseF(&field_0x6cc, 1250.0f, 6.7f); + cLib_chaseF(&field_0x6d0, -400.0f, 7.1f); + + unkXyz2.set(0.0f, field_0x6d0, field_0x6cc); + cLib_offsetPos(&field_0x698, ¤t.pos, shape_angle.y + field_0x6bc, &unkXyz2); + + unkXyz1.set(0.0f, -200.0f, 400.0f); + cLib_chasePos(&field_0x680, unkXyz1, 4.0f); + cLib_offsetPos(&field_0x68c, ¤t.pos, shape_angle.y, &field_0x680); + + field_0x6d4 = 70.0f; + + camera->Set(field_0x68c, field_0x698, field_0x6d4, 0); + + if (field_0x728 < 10) { + setMidnaTagPos(); + if (field_0x728 == 0) { + field_0x748 = 1; + return 1; + } + } + + break; + case 1: + dComIfGp_getEvent().setSkipProc(this, DemoSkipCallBack, 2); + + cLib_chaseAngleS(&field_0x6bc, 0x1000, 0x20); + + unkXyz2.set(0.0f, 0.0f, field_0x6cc); + cLib_offsetPos(&field_0x698, ¤t.pos, shape_angle.y + field_0x6bc, &unkXyz2); + + if (field_0x728 < 0x46) { + cLib_addCalcPos(&field_0x68c, midnaPos, 0.5f, 10.0f, 10.0f); + } else { + field_0x68c = current.pos; + } + + camera->Set(field_0x68c, field_0x698, field_0x6d4, 0); + setMidnaTagPos(); + + if (field_0x728 == 30) { + setBck(0x14, 0x02, 10.0f, 1.0f); + } + + if (field_0x728 > 30) { + cLib_chaseF(&field_0x6cc, 350.0f, 4.0f); + cLib_addCalcAngleS(&field_0x718, 0xfffff800, 8, 0x100, 0x10); + } else { + cLib_chaseF(&field_0x6cc, 350.0f, 6.0f); + cLib_addCalcAngleS(&field_0x718, 0x400, 8, 0x200, 0x10); + + if (field_0x728 == 30) { + setMidnaRideOn(); + } + + if (field_0x728 == 0x14) { + if (field_0x6e7 == 1) { + mSound.startCreatureVoice(Z2SE_EN_KC_V_NAKU, -1); + } else { + mSound.startCreatureVoice(Z2SE_EN_YC_V_NAKU, -1); + } + } + + if (field_0x728 == 0) { + field_0x748 = 2; + + return true; + } + } + break; + case 2: + dComIfGp_getEvent().setSkipProc(this, DemoSkipCallBack, 3); + + setMidnaTagPos(); + cLib_addCalcPos(&field_0x68c, midnaPos, 0.5f, 10.0f, 10.0f); + camera->Set(field_0x68c, field_0x698, field_0x6d4, 0); + + mMsgFlow.doFlow(this, NULL, 0); + + if (field_0x728 != 0) { + if (field_0x728 == 1) { + setBck(0xf, 0x02, 20.0f, 1.0f); + } + + if (mMsgFlow.getNowMsgNo() == 0x1774) { + setBck(0xf, 0x02, 20.0f, 1.0f); + field_0x728 = 0; + } + } + + if (mMsgFlow.getNowMsgNo() == 0x1775) { + field_0x748 = 3; + + return true; + } + + break; + case 3: + dComIfGp_getEvent().setSkipProc(this, DemoSkipCallBack, 3); + + setMidnaTagPos(); + cLib_addCalcAngleS( + &field_0x718, cLib_targetAngleX(¤t.pos, &playerPos) / 4, + 8, 0x100, 0x10); + + // adding braces to the switch case for this decl regresses debug match + s16 targetYaw = cLib_targetAngleY(¤t.pos, &playerPos) - shape_angle.y; + cLib_addCalcAngleS( + &field_0x71a, targetYaw / 4, + 8, 0x100, 0x10); + + if (mMsgFlow.doFlow(this, NULL, 0)) { + field_0x748 = 4; + + return true; + } + + break; + case 4: + dComIfGp_getEvent().setSkipProc(this, DemoSkipCallBack, 2); + + cLib_addCalcAngleS(&field_0x718, 0, 8, 0x100, 0x10); + cLib_addCalcAngleS(&field_0x71a, 0, 8, 0x100, 0x10); + + cLib_chaseF(&field_0x6cc, -300.0f, 10.0f); + + mDoMtx_stack_c::transS(playerPos); + mDoMtx_stack_c::YrotM(field_0x6bc); + mDoMtx_stack_c::transM(0.0f, 300.0f, field_0x6cc); + mDoMtx_stack_c::multVecZero(&field_0x6a4); + + cLib_addCalcAngleS(¤t.angle.y, cLib_targetAngleY(¤t.pos, &field_0x6a4), 4, 0x800, 0x100); + cLib_addCalcAngleS(¤t.angle.x, -cLib_targetAngleX(¤t.pos, &field_0x6a4), 4, 0x1000, 0x100); + shape_angle.y = current.angle.y; + shape_angle.x = current.angle.x; + + cLib_chaseF(&field_0x6f8, 20.0f, 1.0f); + + speedF = field_0x6f8 * std::abs(cM_scos(current.angle.x)); + speed.y = -field_0x6f8 * cM_ssin(current.angle.x); + field_0x68c += speed; + field_0x698 += speed; + + unkXyz2.set(0.0f, 200.0f, -500.0f); + cLib_offsetPos(&unkXyz1, &midnaPos, shape_angle.y, &unkXyz2); + cLib_addCalcPos(&field_0x698, unkXyz1, 0.5f, 10.0f, 3.0f); + unkXyz2.set(0.0f, 0.0f, 0.0f); + + cLib_offsetPos(&unkXyz1, &midnaPos, shape_angle.y, &unkXyz2); + cLib_addCalcPos(&field_0x68c, unkXyz1, 0.5f, 10.0f, 3.0f); + + field_0x6d4 = 70.0f; + + camera->Set(field_0x68c, field_0x698, field_0x6d4, 0); + + if (field_0x6a4.abs(current.pos) < 100.0f) { + field_0x748 = 5; + return true; + } + + break; + case 5: + dComIfGp_getEvent().setSkipProc(this, DemoSkipCallBack, 2); + + cLib_addCalcAngleS(¤t.angle.y, cLib_targetAngleY(¤t.pos, &field_0x6a4), 4, 0x800, 0x100); + cLib_addCalcAngleS(¤t.angle.x, -cLib_targetAngleX(¤t.pos, &field_0x6a4), 4, 0x400, 0x100); + shape_angle.y = current.angle.y; + shape_angle.x = current.angle.x; + + cLib_chaseF(&field_0x6f8, 20.0f, 1.0f); + speedF = field_0x6f8 * std::abs(cM_scos(current.angle.x)); + + speed.y = -field_0x6f8 * cM_ssin(current.angle.x); + field_0x68c += speed; + field_0x698 += speed; + + unkXyz2.set(400.0f, 50.0f, -300.0f); + cLib_offsetPos(&unkXyz1, &midnaPos, shape_angle.y, &unkXyz2); + cLib_addCalcPos(&field_0x698, unkXyz1, 0.5f, 10.0f, 3.0f); + + unkXyz2.set(0.0f, 50.0f, 0.0f); + cLib_offsetPos(&unkXyz1, &midnaPos, shape_angle.y, &unkXyz2); + cLib_addCalcPos(&field_0x68c, unkXyz1, 0.5f, 10.0f, 3.0f); + + field_0x6d4 = 70.0f; + + camera->Set(field_0x68c, field_0x698, field_0x6d4, 0); + + if (field_0x6a4.abs(current.pos) < 100.0f) { + field_0x748 = 6; + + return true; + } + break; + case 6: + dComIfGp_getEvent().setSkipProc(this, DemoSkipCallBack, 2); + + cLib_addCalcAngleS(¤t.angle.x, 0xffffe000, 8, 0x100, 0x40); + shape_angle.x = current.angle.x; + shape_angle.y = current.angle.y; + + speedF = field_0x6f8 * std::abs(cM_scos(current.angle.x)); + speed.y = -field_0x6f8 * cM_ssin(current.angle.x); + + if (field_0x728 > 120) { + field_0x68c += speed; + field_0x698 += speed; + + unkXyz2.set(400.0f, 100.0f, -300.0f); + cLib_offsetPos(&unkXyz1, &midnaPos, shape_angle.y, &unkXyz2); + cLib_addCalcPos(&field_0x698, unkXyz1, 0.5f, 10.0f, 3.0f); + + unkXyz2.set(0.0f, 100.0f, 0.0f); + cLib_offsetPos(&unkXyz1, &playerPos, shape_angle.y, &unkXyz2); + cLib_addCalcPos(&field_0x68c, unkXyz1, 0.5f, 10.0f, 3.0f); + } else { + cLib_chaseF(&field_0x6cc, 0.0f, 0.1f); + + field_0x68c += speed; + field_0x698 += speed * field_0x6cc; + + unkXyz2.set(0.0f, 100.0f, 0.0f); + cLib_offsetPos(&unkXyz1, &playerPos, shape_angle.y, &unkXyz2); + cLib_addCalcPos(&field_0x68c, unkXyz1, 0.5f, 10.0f, 3.0f); + } + + field_0x6d4 = 70.0f; + + camera->Set(field_0x68c, field_0x698, field_0x6d4, 0); + if (field_0x728 == 0) { + field_0x748 = 7; + + return true; + } + + break; + case 7: + case 8: + unkFlag1 = 0; + + if (switchVal == 7 || field_0x6e8 == 0) { + if (field_0x728 == 110) { + unkFlag1 = 1; + } + } else if (switchVal == 8 && field_0x728 == 140) { + unkFlag1 = 1; + } + + if (unkFlag1 != 0) { + if (field_0x6e7 == 1) { + mSound.startCreatureVoice(Z2SE_EN_KC_V_NAKU, -1); + } else { + mSound.startCreatureVoice(Z2SE_EN_YC_V_NAKU, -1); + } + } + + if (field_0x728 != 0) { + dComIfGp_getEvent().setSkipProc(this, DemoSkipCallBack, 1); + } else { + if (field_0x73c == 0 && setSceneChange(0)) { + field_0x748 = 9; + } + } + case 9: + cLib_addCalcAngleS(¤t.angle.y, cLib_targetAngleY(¤t.pos, &field_0x6a4), 0x10, 0x100, 0x80); + cLib_addCalcAngleS(¤t.angle.x, -cLib_targetAngleX(¤t.pos, &field_0x6a4), 0x10, 0x200, 0x80); + shape_angle.y = current.angle.y; + shape_angle.x = current.angle.x; + + speedF = field_0x6f8 * std::abs(cM_scos(current.angle.x)); + speed.y = -field_0x6f8 * cM_ssin(current.angle.x); + + unkXyz2.set(0.0f, 100.0f, 0.0f); + cLib_offsetPos(&field_0x68c, ¤t.pos, shape_angle.y, &unkXyz2); + + field_0x6d4 = 70.0f; + + camera->Set(field_0x68c, field_0x698, field_0x6d4, 0); + + break; + } + + return false; } /* 808513E4-80851434 007F24 0050+00 1/1 0/0 0/0 .text executePerch2__8daKago_cFv */ void daKago_c::executePerch2() { - // NONMATCHING + if (field_0x74c == 0) { + initFirstDemo(); + } + + if (executeFirstDemo()) { + field_0x74c = 0; + } } -/* ############################################################################################## */ -/* 80854CAC-80854CB0 0001A8 0004+00 0/0 0/0 0/0 .rodata @6922 */ -#pragma push -#pragma force_active on -SECTION_RODATA static f32 const lit_6922 = 350.0f; -COMPILER_STRIP_GATE(0x80854CAC, &lit_6922); -#pragma pop - -/* 80854CB0-80854CB4 0001AC 0004+00 0/0 0/0 0/0 .rodata @6923 */ -#pragma push -#pragma force_active on -SECTION_RODATA static f32 const lit_6923 = 6.0f; -COMPILER_STRIP_GATE(0x80854CB0, &lit_6923); -#pragma pop - -/* 80854CB4-80854CB8 0001B0 0004+00 0/1 0/0 0/0 .rodata @7121 */ -#pragma push -#pragma force_active on -SECTION_RODATA static f32 const lit_7121 = -700.0f; -COMPILER_STRIP_GATE(0x80854CB4, &lit_7121); -#pragma pop - -/* 80854CB8-80854CBC 0001B4 0004+00 0/1 0/0 0/0 .rodata @7122 */ -#pragma push -#pragma force_active on -SECTION_RODATA static f32 const lit_7122 = -74500.0f; -COMPILER_STRIP_GATE(0x80854CB8, &lit_7122); -#pragma pop - -/* 80854CBC-80854CC0 0001B8 0004+00 0/1 0/0 0/0 .rodata @7123 */ -#pragma push -#pragma force_active on -SECTION_RODATA static f32 const lit_7123 = -12775.0f; -COMPILER_STRIP_GATE(0x80854CBC, &lit_7123); -#pragma pop - -/* 80854CC0-80854CC4 0001BC 0004+00 0/1 0/0 0/0 .rodata @7124 */ -#pragma push -#pragma force_active on -SECTION_RODATA static f32 const lit_7124 = 31400.0f; -COMPILER_STRIP_GATE(0x80854CC0, &lit_7124); -#pragma pop - -/* 80854CC4-80854CC8 0001C0 0004+00 0/1 0/0 0/0 .rodata @7125 */ -#pragma push -#pragma force_active on -SECTION_RODATA static f32 const lit_7125 = -79460.0f; -COMPILER_STRIP_GATE(0x80854CC4, &lit_7125); -#pragma pop - -/* 80854CC8-80854CCC 0001C4 0004+00 0/1 0/0 0/0 .rodata @7126 */ -#pragma push -#pragma force_active on -SECTION_RODATA static f32 const lit_7126 = 34200.0f; -COMPILER_STRIP_GATE(0x80854CC8, &lit_7126); -#pragma pop - /* 80851434-80851DEC 007F74 09B8+00 2/1 0/0 0/0 .text executeLandingLakeHairia__8daKago_cFv */ void daKago_c::executeLandingLakeHairia() { - // NONMATCHING + dCamera_c* camera = dCam_getBody(); + cXyz unkXyz1; + cXyz unkXyz2(-700.0f, 0.0f, -300.0f); + + switch (field_0x744) { + case 0: + current.pos.set(-74500.0f, -12775.0f, 31400.0f); + + if (!eventInfo.checkCommandDemoAccrpt()) { + fopAcM_orderPotentialEvent(this, 2, 0xffff, 3); + eventInfo.onCondition(2); + return; + } + + camera->Stop(); + camera->SetTrimSize(3); + + current.pos.set(-74500.0f, -12775.0f, 31400.0f); + field_0x698.set(-79460.0f, -13000.0f, 34200.0f); + field_0x68c = current.pos; + + field_0x6d4 = 70.0f; + + current.angle.x = 0; + shape_angle.x = 0; + shape_angle.y = current.angle.y = cLib_targetAngleY(¤t.pos, &field_0x698); + field_0x716 = shape_angle.y + 0x2000; + + field_0x6a4.set(-77615.0f, -18500.0f, 41400.0f); + field_0x6a4 += unkXyz2; + + field_0x744 = 1; + field_0x712 = 0; + field_0x728 = 150; + field_0x6f8 = 50.0f; + + break; + case 1: + Z2GetAudioMgr()->setDemoName(field_0x760); + field_0x744 = 2; + case 2: + if (field_0x728 == 0x8c) { + if (field_0x6e7 == 0x01) { + mSound.startCreatureVoice(Z2SE_EN_KC_V_NAKU, -1); + } else { + mSound.startCreatureVoice(Z2SE_EN_YC_V_NAKU, -1); + } + } + + field_0x68c = current.pos; + + cLib_chaseAngleS(&field_0x712, 0x80, 4); + + cLib_chaseAngleS(&shape_angle.y, field_0x716, field_0x712); + current.angle.y = shape_angle.y; + cLib_chaseAngleS(&shape_angle.x, 0x1000, 0x20); + current.angle.x = shape_angle.x; + + field_0x6f8 = 50.0f; + + speedF = field_0x6f8 * std::abs(cM_scos(current.angle.x)); + speed.y = -field_0x6f8 * cM_ssin(current.angle.x); + + if (field_0x728 == 0) { + field_0x744 = 3; + } + + dComIfGp_getEvent().setSkipProc(this, DemoSkipCallBack, 7); + + break; + case 3: + current.pos.set(-76600.0f, -15500.0f, 37340.0f); + current.pos += unkXyz2; + + field_0x6a4.set(-77615.0f, -18500.0f, 41400.0f); + field_0x6a4 += unkXyz2; + + field_0x698.set(-76900.0f, -18550.0f, 41660.0f); + field_0x698 += unkXyz2; + + field_0x68c = current.pos; + + field_0x6d4 = 70.0f; + + shape_angle.x = current.angle.x = -cLib_targetAngleX(¤t.pos, &field_0x6a4); + shape_angle.y = current.angle.y = cLib_targetAngleY(¤t.pos, &field_0x6a4); + + field_0x744 = 4; + field_0x728 = 60; + + setBck(13, 2, 10.0f, 1.0f); + case 4: + field_0x68c = current.pos; + speedF = field_0x6f8 * std::abs(cM_scos(current.angle.x)); + speed.y = -field_0x6f8 * cM_ssin(current.angle.x); + if (field_0x728 == 0) { + field_0x744 = 5; + field_0x728 = 0x28; + } + + dComIfGp_getEvent().setSkipProc(this, DemoSkipCallBack, 7); + + break; + case 5: + field_0x68c = current.pos; + + speedF = field_0x6f8 * std::abs(cM_scos(current.angle.x)); + speed.y = -field_0x6f8 * cM_ssin(current.angle.x); + + cLib_chaseAngleS(&shape_angle.x, 0, 0x80); + current.angle.x = shape_angle.x; + + if (field_0x728 == 0) { + setRideOff(); + + field_0x744 = 6; + field_0x728 = 100; + + setBck(0xf, 0x02, 10.0f, 1.0f); + } else { + dComIfGp_getEvent().setSkipProc(this, DemoSkipCallBack, 7); + } + + field_0x6cc = 50.0f; + field_0x6d0 = 20.0f; + break; + case 6: + unkXyz1.set(-77875.0f, -18287.0f, 42000.0f); + unkXyz1 += unkXyz2; + cLib_chasePos(&field_0x68c, unkXyz1, field_0x6cc); + if (field_0x68c.abs(unkXyz1) < 500.0f) { + cLib_chaseF(&field_0x6cc, 0.0f, 3.0f); + } + + unkXyz1.set(-77275.0f, -18500.0f, 41090.0f); + unkXyz1 += unkXyz2; + cLib_chasePos(&field_0x698, unkXyz1, field_0x6d0); + if (field_0x698.abs(unkXyz1) < 200.0f) { + cLib_chaseF(&field_0x6d0, 0.0f, 1.0f); + } else { + cLib_chaseF(&field_0x6d0, 20.0f, 1.0f); + } + + speedF = field_0x6f8 * std::abs(cM_scos(current.angle.x)); + speed.y = -field_0x6f8 * cM_ssin(current.angle.x); + + cLib_chaseAngleS(&shape_angle.x, 0xffffe000, 0x100); + current.angle.x = shape_angle.x; + + if (field_0x728 == 90) { + if (field_0x6e7 == 0x01) { + mSound.startCreatureVoice(Z2SE_EN_KC_V_NAKU, -1); + } else { + mSound.startCreatureVoice(Z2SE_EN_YC_V_NAKU, -1); + } + } + + if (field_0x728 == 0) { + setActionMode(4, 0); + + camera->Reset(); + camera->Start(); + camera->SetTrimSize(0); + + dComIfGp_event_reset(); + + Z2GetAudioMgr()->setDemoName(NULL); + + return; + } + + dComIfGp_getEvent().setSkipProc(this, DemoSkipCallBack, 8); + } + + camera->Set(field_0x68c, field_0x698, field_0x6d4, 0); } -/* ############################################################################################## */ -/* 80854CCC-80854CD0 0001C8 0004+00 0/0 0/0 0/0 .rodata @7127 */ -#pragma push -#pragma force_active on -SECTION_RODATA static f32 const lit_7127 = -76900.0f; -COMPILER_STRIP_GATE(0x80854CCC, &lit_7127); -#pragma pop - -/* 80854CD0-80854CD4 0001CC 0004+00 0/0 0/0 0/0 .rodata @7128 */ -#pragma push -#pragma force_active on -SECTION_RODATA static f32 const lit_7128 = -18550.0f; -COMPILER_STRIP_GATE(0x80854CD0, &lit_7128); -#pragma pop - -/* 80854CD4-80854CD8 0001D0 0004+00 0/0 0/0 0/0 .rodata @7129 */ -#pragma push -#pragma force_active on -SECTION_RODATA static f32 const lit_7129 = 41660.0f; -COMPILER_STRIP_GATE(0x80854CD4, &lit_7129); -#pragma pop - -/* 80854CD8-80854CDC 0001D4 0004+00 0/1 0/0 0/0 .rodata @7286 */ -#pragma push -#pragma force_active on -SECTION_RODATA static f32 const lit_7286 = 5750.0f; -COMPILER_STRIP_GATE(0x80854CD8, &lit_7286); -#pragma pop - -/* 80854CDC-80854CE0 0001D8 0004+00 0/1 0/0 0/0 .rodata @7287 */ -#pragma push -#pragma force_active on -SECTION_RODATA static f32 const lit_7287 = 1600.0f; -COMPILER_STRIP_GATE(0x80854CDC, &lit_7287); -#pragma pop - -/* 80854CE0-80854CE4 0001DC 0004+00 0/1 0/0 0/0 .rodata @7288 */ -#pragma push -#pragma force_active on -SECTION_RODATA static f32 const lit_7288 = 6100.0f; -COMPILER_STRIP_GATE(0x80854CE0, &lit_7288); -#pragma pop - -/* 80854CE4-80854CE8 0001E0 0004+00 0/1 0/0 0/0 .rodata @7289 */ -#pragma push -#pragma force_active on -SECTION_RODATA static f32 const lit_7289 = 2900.0f; -COMPILER_STRIP_GATE(0x80854CE4, &lit_7289); -#pragma pop - -/* 80854CE8-80854CEC 0001E4 0004+00 0/1 0/0 0/0 .rodata @7290 */ -#pragma push -#pragma force_active on -SECTION_RODATA static f32 const lit_7290 = 3630.0f; -COMPILER_STRIP_GATE(0x80854CE8, &lit_7290); -#pragma pop - -/* 80854CEC-80854CF0 0001E8 0004+00 0/1 0/0 0/0 .rodata @7291 */ -#pragma push -#pragma force_active on -SECTION_RODATA static f32 const lit_7291 = 600.0f; -COMPILER_STRIP_GATE(0x80854CEC, &lit_7291); -#pragma pop - -/* 80854CF0-80854CF4 0001EC 0004+00 0/1 0/0 0/0 .rodata @7292 */ -#pragma push -#pragma force_active on -SECTION_RODATA static f32 const lit_7292 = 15.0f; -COMPILER_STRIP_GATE(0x80854CF0, &lit_7292); -#pragma pop - -/* 80854CF4-80854CF8 0001F0 0004+00 0/1 0/0 0/0 .rodata @7293 */ -#pragma push -#pragma force_active on -SECTION_RODATA static f32 const lit_7293 = 3440.0f; -COMPILER_STRIP_GATE(0x80854CF4, &lit_7293); -#pragma pop - -/* 80854CF8-80854CFC 0001F4 0004+00 0/1 0/0 0/0 .rodata @7294 */ -#pragma push -#pragma force_active on -SECTION_RODATA static f32 const lit_7294 = 3584.0f; -COMPILER_STRIP_GATE(0x80854CF8, &lit_7294); -#pragma pop - -/* 80854CFC-80854D00 0001F8 0004+00 0/1 0/0 0/0 .rodata @7295 */ -#pragma push -#pragma force_active on -SECTION_RODATA static f32 const lit_7295 = 270.0f; -COMPILER_STRIP_GATE(0x80854CFC, &lit_7295); -#pragma pop - -/* 80854D00-80854D04 0001FC 0004+00 0/1 0/0 0/0 .rodata @7296 */ -#pragma push -#pragma force_active on -SECTION_RODATA static f32 const lit_7296 = 1007.0f; -COMPILER_STRIP_GATE(0x80854D00, &lit_7296); -#pragma pop - /* 80851DEC-808525B0 00892C 07C4+00 1/1 0/0 0/0 .text executeLandingBoartHouse__8daKago_cFv */ void daKago_c::executeLandingBoartHouse() { - // NONMATCHING + dCamera_c* camera = dCam_getBody(); + cXyz unkXyz1; + + switch (field_0x744) { + case 0: { + current.pos.set(5750.0f, 1600.0f, 6100.0f); + + if (!eventInfo.checkCommandDemoAccrpt()) { + fopAcM_orderPotentialEvent(this, 2, 0xffff, 3); + eventInfo.onCondition(2); + + return; + } + + camera->Stop(); + camera->SetTrimSize(3); + + field_0x744 = 10; + + break; + } + case 10: { + Z2GetAudioMgr()->setDemoName(field_0x760); + + current.pos.set(5750.0f, 1600.0f, 6100.0f); + setBck(0xf, 0x02, 10.0f, 1.0f); + field_0x698.set(2900.0f, 300.0f, 500.0f); + field_0x68c = current.pos; + field_0x6d4 = 70.0f; + field_0x6a4.set(3630.0f, 300.0f, 600.0f); + + shape_angle.x = current.angle.x = -cLib_targetAngleX(¤t.pos, &field_0x6a4); + shape_angle.y = current.angle.y = cLib_targetAngleY(¤t.pos, &field_0x6a4); + + field_0x744 = 1; + field_0x712 = 0; + field_0x728 = 0x50; + field_0x6f8 = 50.0f; + } + case 1: { + if (field_0x728 == 0x46) { + if (field_0x6e7 == 0x01) { + mSound.startCreatureVoice(Z2SE_EN_KC_V_NAKU, -1); + } else { + mSound.startCreatureVoice(Z2SE_EN_YC_V_NAKU, -1); + } + } + + field_0x68c = current.pos; + + speedF = field_0x6f8 * std::abs(cM_scos(current.angle.x)); + speed.y = -field_0x6f8 * cM_ssin(current.angle.x); + + if (field_0x728 == 0) { + field_0x744 = 2; + field_0x728 = 0x28; + } + + dComIfGp_getEvent().setSkipProc(this, DemoSkipCallBack, 9); + + break; + } + case 2: { + field_0x68c = current.pos; + + speedF = field_0x6f8 * std::abs(cM_scos(current.angle.x)); + speed.y = -field_0x6f8 * cM_ssin(current.angle.x); + + cLib_chaseAngleS(&shape_angle.x, 0, 0x80); + current.angle.x = shape_angle.x; + + if (field_0x728 == 0) { + setRideOff(); + field_0x744 = 3; + field_0x728 = 90; + } else { + dComIfGp_getEvent().setSkipProc(this, DemoSkipCallBack, 9); + } + + field_0x6cc = 40.0f; + field_0x6d0 = 15.0f; + + break; + } + case 3: { + unkXyz1.set(3440.0f, 500.0f, 400.0f); + cLib_chasePos(&field_0x68c, unkXyz1, field_0x6cc); + if (field_0x68c.abs(unkXyz1) < 500.0f) { + cLib_chaseF(&field_0x6cc, 0.0f, 3.0f); + } + + unkXyz1.set(3584.0f, 270.0f, 1007.0f); + cLib_chasePos(&field_0x698, unkXyz1, field_0x6d0); + if (field_0x698.abs(unkXyz1) < 200.0f) { + cLib_chaseF(&field_0x6d0, 0.0f, 1.0f); + } else { + cLib_chaseF(&field_0x6d0, 15.0f, 1.0f); + } + + speedF = field_0x6f8 * std::abs(cM_scos(current.angle.x)); + speed.y = -field_0x6f8 * cM_ssin(current.angle.x); + + cLib_chaseAngleS(&shape_angle.x, 0xffffe000, 0x100); + current.angle.x = shape_angle.x; + + if (field_0x728 == 0x50) { + if (field_0x6e7 == 0x01) { + mSound.startCreatureVoice(Z2SE_EN_KC_V_NAKU, -1); + } else { + mSound.startCreatureVoice(Z2SE_EN_YC_V_NAKU, -1); + } + } + + if (field_0x728 == 0) { + setActionMode(4, 0); + + if (field_0x6e7 == 0x01) { + field_0x728 = 0x78; + } + + camera->Reset(); + camera->Start(); + camera->SetTrimSize(0); + + dComIfGp_event_reset(); + + Z2GetAudioMgr()->setDemoName(NULL); + + return; + } + + dComIfGp_getEvent().setSkipProc(this, DemoSkipCallBack, 10); + + break; + } + } + + camera->Set(field_0x68c, field_0x698, field_0x6d4, 0); } /* 808525B0-80852610 0090F0 0060+00 2/2 0/0 0/0 .text executeLanding__8daKago_cFv */ void daKago_c::executeLanding() { - // NONMATCHING + if (this->field_0x73c == 0) { + executeLandingLakeHairia(); + } else if (this->field_0x73c == 2) { + executeLandingBoartHouse(); + } else { + setRideOff(); + setActionMode(4, 0); + } } /* 80852610-80852D90 009150 0780+00 2/2 0/0 0/0 .text moveDemoFly__8daKago_cFv */ void daKago_c::moveDemoFly() { - // NONMATCHING + if (field_0x744 == 0) { + cLib_chaseF(&field_0x6f8, l_HIO.mFlightSpeed, 2.0f); + if (!eventInfo.checkCommandDemoAccrpt()) { + fopAcM_orderPotentialEvent(this, 2, 0xffff, 3); + eventInfo.onCondition(2); + } else { + setPlayerRideOn(); + + mDashCooldownTime = (int)l_HIO.mDashCooldownTime; + mDashTime = (int)l_HIO.mDashTime; + field_0x744 = 1; + setDashBlurEffect(0); + setBck(11, 0, 5.0f, l_HIO.mDashTimeMultiplier); + dComIfGp_getVibration().StartShock(1, 0x1f, cXyz(0.0f, 1.0f, 0.0f)); + + mpLockActor = NULL; + + mGroundHeight = checkGroundHeight(current.pos, NULL); + mRoofHeight = checkRoofHeight(current.pos); + + if (mCurrentAction == 9) { + dComIfGs_onSaveSwitch(9); + + mMsgFlow.init(this, 0xbbf, 0, NULL); + } + } + } else { + checkHeight(); + + mIsFlying = true; + + if (mCurrentAction == 9) { + mMsgFlow.doFlow(this, NULL, 0); + } + if (field_0x744 < 6) { + setDashEffect(); + + field_0x6dd = 0x01; + + dComIfGp_setAStatusForce(0x27, 0); + } + + switch (field_0x744) { + case 1: { + Z2GetAudioMgr()->setDemoName(field_0x760); + + field_0x744 = 2; + } + case 2: { + cLib_chaseF(&field_0x6f8, 30.0f, l_HIO.mDashTimeMultiplier * 3.0f); + if (mpMorf->checkFrame(9.0f)) { + if (field_0x6e7 == 0) { + mSound.startCreatureSound(Z2SE_EN_YC_DASH, 0, -1); + } else { + mSound.startCreatureSound(Z2SE_EN_KC_DASH, 0, -1); + } + } + if (mpMorf->checkFrame(12.0f)) { + field_0x744 = 3; + field_0x728 = 0x14; + + dComIfGp_getVibration().StartShock(2, 0x1f, cXyz(0.0f, 1.0f, 0.0f)); + dComIfGp_getVibration().StartQuake(1, 0x1f, cXyz(0.0f, 1.0f, 0.0f)); + + field_0x6e6 = 0; + } + + break; + } + case 3: + case 4: { + cLib_chaseF(&field_0x6f8, 100.0f, 5.0f); + if (field_0x728 == 0) { + if (field_0x744 == 3) { + field_0x744 = 4; + field_0x728 = 0xf; + } else { + field_0x744 = 5; + dComIfGp_getVibration().StopQuake(0x1f); + } + } + + break; + } + case 5: { + cLib_chaseF(&field_0x6f8, l_HIO.mFlightSpeed, 5.0f); + if (field_0x6f8 <= l_HIO.mFlightSpeed) { + field_0x6c8 = 0; + field_0x6c4 = 8000.0f; + field_0x710 = field_0x712 = 0; + + if (dComIfGp_getStartStagePoint() == 0) { + field_0x72c = 30; + } else { + field_0x72c = 60 + nREG_S(1); + } + + shape_angle.y = current.angle.y; + + mGroundHeight = checkGroundHeight(current.pos, NULL); + mRoofHeight = checkRoofHeight(current.pos); + + setFlyAnime(); + + field_0x710 = field_0x712 = 0; + field_0x744 = 6; + } + + break; + } + case 6: { + if (field_0x728 == 0) { + setFlyAnime(); + } + + f32 fVar11 = 0.0f; + if (cM_ssin(current.angle.x) > 0.0f) { + fVar11 = + l_HIO.mFlightSpeed + l_HIO.mDescentRateIncrement * cM_ssin(current.angle.x); + } else { + fVar11 = l_HIO.mFlightSpeed + l_HIO.mAscentRateDecel * cM_ssin(current.angle.x); + } + + if (std::abs(field_0x6f8 - fVar11) > 10.0f) { + cLib_chaseF(&field_0x6f8, fVar11, 2.0f); + } else { + cLib_chaseF(&field_0x6f8, fVar11, 1.0f); + } + + if (field_0x72c == 0) { + setActionMode(0, 0); + dComIfGp_event_reset(); + Z2GetAudioMgr()->setDemoName(NULL); + return; + } + + break; + } + } + } + + cXyz unkXyz1 = dPath_GetPnt(mpPath1, mPathIdx)->m_position; + cXyz unkXyz2 = dPath_GetPnt(mpPath1, mPathIdx - mPathIdxOffset)->m_position; + s16 targetYaw = field_0x714 = cLib_targetAngleY(&unkXyz2, &unkXyz1); + + if (dComIfGp_getStartStagePoint() == 0) { + cLib_addCalcAngleS(¤t.angle.x, cLib_targetAngleX(&unkXyz2, &unkXyz1), 8, 0x100, + 0x10); + } else { + cLib_addCalcAngleS(¤t.angle.x, 0x1400 + nREG_S(0), 8, 0x100, 0x10); + } + + shape_angle.x = current.angle.x; + cLib_addCalcAngleS(¤t.angle.y, cLib_targetAngleY(&unkXyz2, &unkXyz1), 8, 0x40, 0x10); + shape_angle.y = current.angle.y; + + speedF = field_0x6f8 * std::abs(cM_scos(current.angle.x)); + speed.y = -field_0x6f8 * cM_ssin(current.angle.x); + + f32 nextPath = checkNextPath(unkXyz1); + if (nextPath < 0.0f) { + if (abs((s16)(targetYaw - cLib_targetAngleY(&unkXyz2, ¤t.pos))) < 0x4000) { + mPathIdx += this->mPathIdxOffset; + if (checkFlySceneChange()) { + return; + } + } + } } /* 80852D90-80852F14 0098D0 0184+00 1/1 0/0 0/0 .text setFlyEffect__8daKago_cFv */ void daKago_c::setFlyEffect() { - // NONMATCHING + if (field_0x6e7 == 1) { + return; + } + + J3DModel* model = mpMorf->getModel(); + JPABaseEmitter* emitter; + + field_0xb30 = dComIfGp_particle_set(field_0xb30, 0x8607, ¤t.pos, &tevStr); + emitter = dComIfGp_particle_getEmitter(field_0xb30); + if (emitter != NULL) { + emitter->setGlobalSRTMatrix(model->getAnmMtx(13)); + } + + field_0xb34 = dComIfGp_particle_set(field_0xb34, 0x8607, ¤t.pos, &tevStr); + emitter = dComIfGp_particle_getEmitter(field_0xb34); + if (emitter != NULL) { + emitter->setGlobalSRTMatrix(model->getAnmMtx(18)); + } } /* 80852F14-808530A4 009A54 0190+00 2/2 0/0 0/0 .text setDashEffect__8daKago_cFv */ void daKago_c::setDashEffect() { - // NONMATCHING + J3DModel* model = mpMorf->getModel(); + JPABaseEmitter* emitter; + + if (field_0x6e7 == 0) { + field_0xb38 = dComIfGp_particle_set(field_0xb38, 0x8609, ¤t.pos, &tevStr); + emitter = dComIfGp_particle_getEmitter(this->field_0xb38); + if (emitter != NULL) { + emitter->setGlobalSRTMatrix(model->getAnmMtx(13)); + } + + field_0xb3c = dComIfGp_particle_set(field_0xb3c, 0x860a, ¤t.pos, &tevStr); + emitter = dComIfGp_particle_getEmitter(field_0xb3c); + if (emitter != NULL) { + emitter->setGlobalSRTMatrix(model->getAnmMtx(18)); + } + } + + setDashBlurEffect(1); } /* 808530A4-80853228 009BE4 0184+00 1/1 0/0 0/0 .text setDamageEffect__8daKago_cFv */ void daKago_c::setDamageEffect() { - // NONMATCHING + J3DModel* model = mpMorf->getModel(); + JPABaseEmitter* emitter; + + if (field_0x6e7 != 1) { + field_0xb38 = dComIfGp_particle_set(field_0xb38, 0x8603, ¤t.pos, &tevStr); + emitter = dComIfGp_particle_getEmitter(this->field_0xb38); + if (emitter != NULL) { + emitter->setGlobalSRTMatrix(model->getAnmMtx(13)); + } + + field_0xb3c = dComIfGp_particle_set(field_0xb3c, 0x8603, ¤t.pos, &tevStr); + emitter = dComIfGp_particle_getEmitter(field_0xb3c); + if (emitter != NULL) { + emitter->setGlobalSRTMatrix(model->getAnmMtx(18)); + } + } } /* 80853228-80853460 009D68 0238+00 3/3 0/0 0/0 .text setDashBlurEffect__8daKago_cFi */ void daKago_c::setDashBlurEffect(int param_0) { - // NONMATCHING + camera_class* camera = dComIfGp_getCamera(dComIfGp_getPlayerCameraID(0)); + cXyz cameraEye = dCam_getBody()->Eye(); + cXyz cameraEyeOffset; + cXyz local_78; + csXyz cStack_8c; + csXyz local_94; + + s16 sVar4 = shape_angle.y - fopCamM_GetAngleY(camera); + f32 fVar6 = std::abs(cM_ssin(sVar4)) * l_HIO.mZOffsetHori + cM_scos(sVar4) * l_HIO.mZOffset; + f32 fVar7 = fVar6 * cM_scos(fopCamM_GetAngleX(camera)); + + local_78.y = fVar6 * cM_ssin(-fopCamM_GetAngleX(camera)); + local_78.x = fVar7 * cM_ssin(fopCamM_GetAngleY(camera)); + local_78.z = fVar7 * cM_scos(fopCamM_GetAngleY(camera)); + + cameraEyeOffset = cameraEye + local_78; + + local_94.set((s16)cLib_targetAngleX(&field_0x6b0, &cameraEye), (s16)cLib_targetAngleY(&field_0x6b0, &cameraEye), 0); + if (l_HIO.mAngleTrackingMode == 0) { + field_0x6be.x = -local_94.x; + field_0x6be.y = local_94.y; + field_0x6be.z = 0; + } else { + field_0x6be.x = shape_angle.x * (0.5f + XREG_F(0x13)); + field_0x6be.y = shape_angle.y; + field_0x6be.z = 0; + } + field_0xb40 = dComIfGp_particle_set(field_0xb40, 0x860f, &cameraEyeOffset, &tevStr, &field_0x6be, 0, 0xff, 0, 0xffffffff, 0, 0, 0); } /* 80853460-8085350C 009FA0 00AC+00 1/1 0/0 0/0 .text setWallHitEffect__8daKago_cF4cXyzi */ void daKago_c::setWallHitEffect(cXyz param_0, int param_1) { - // NONMATCHING + // might be a 2D array? + static u16 kago_wall_hit_id[6] = { + 0x8658, + 0x86F9, + 0x86FA, + 0x8659, + 0x86FB, + 0x86FC, + }; + + for (int i = 0; i < 3; i++) { + dComIfGp_particle_set(kago_wall_hit_id[i + param_1 * 3], ¶m_0, &tevStr, 0, 0); + } } /* 8085350C-8085366C 00A04C 0160+00 2/2 0/0 0/0 .text setSibukiEffect__8daKago_cFv */ void daKago_c::setSibukiEffect() { - // NONMATCHING + static u16 kago_wave_id[3] = { + 0x865A, + 0x865B, + 0x865C, + }; + + cXyz acStack_28(current.pos.x, field_0x70c + l_HIO.mYOffsetFromWaterSurface, current.pos.z); + csXyz cStack_30(0, shape_angle.y, 0); + for (int i = 0; i < 3; i++) { + field_0xb44[i] = + dComIfGp_particle_set(field_0xb44[i], kago_wave_id[i], &acStack_28, &tevStr, &cStack_30, + 0, 0xff, 0, 0xffffffff, 0, 0, 0); + } + + if (field_0x6e7 == 0) { + mSound.startCreatureSoundLevel(Z2SE_EN_YC_SPLASH, 0, -1); + } else { + mSound.startCreatureSoundLevel(Z2SE_EN_KC_SPLASH, 0, -1); + } } /* 8085366C-80853730 00A1AC 00C4+00 1/1 0/0 0/0 .text setDashSibukiEffect__8daKago_cFv */ void daKago_c::setDashSibukiEffect() { - // NONMATCHING + cXyz acStack_20(current.pos.x, field_0x70c + l_HIO.mYOffsetFromWaterSurface, current.pos.z); + csXyz cStack_28(0, shape_angle.y, 0); + field_0xb50 = dComIfGp_particle_set(field_0xb50, 0x86fe, &acStack_20, &tevStr, &cStack_28, 0, + 0xff, 0, 0xffffffff, 0, 0, 0); } /* 80853730-80853880 00A270 0150+00 1/1 0/0 0/0 .text setWaterFallEffect__8daKago_cFv */ void daKago_c::setWaterFallEffect() { - // NONMATCHING + static u16 kago_wave_id[2] = { + 0x865B, + 0x865C, + }; + + cXyz acStack_28(current.pos.x, current.pos.y, current.pos.z); + csXyz cStack_30(0, shape_angle.y, 0); + for (int i = 0; i < 2; i++) { + field_0xb44[i] = + dComIfGp_particle_set(field_0xb44[i], kago_wave_id[i], &acStack_28, &tevStr, &cStack_30, + 0, 0xff, 0, 0xffffffff, 0, 0, 0); + } + if (field_0x6e7 == 0) { + mSound.startCreatureSoundLevel(Z2SE_EN_YC_SPLASH, 0, -1); + } else { + mSound.startCreatureSoundLevel(Z2SE_EN_KC_SPLASH, 0, -1); + } } /* 80853880-8085392C 00A3C0 00AC+00 1/1 0/0 0/0 .text s_waterfall__FPvPv */ -static void s_waterfall(void* param_0, void* param_1) { - // NONMATCHING +static void* s_waterfall(void* param_0, void* param_1) { + if (fopAcM_IsActor(param_0) && fopAcM_GetName(param_0) == PROC_Tag_WaterFall) { + if (!fpcM_IsCreating(fopAcM_GetID(param_0))) { + if (((daTagWaterFall_c*)param_0) + ->checkHitWaterFall(((fopAc_ac_c*)param_1)->current.pos)) + { + ((daKago_c*)param_1)->onWaterFall(); + return param_0; + } + } + } + + return NULL; } -/* ############################################################################################## */ -/* 80854D04-80854D08 000200 0004+00 0/1 0/0 0/0 .rodata @7910 */ -#pragma push -#pragma force_active on -SECTION_RODATA static f32 const lit_7910 = 27.0f; -COMPILER_STRIP_GATE(0x80854D04, &lit_7910); -#pragma pop - -/* 80854D08-80854D0C 000204 0004+00 0/1 0/0 0/0 .rodata @7911 */ -#pragma push -#pragma force_active on -SECTION_RODATA static f32 const lit_7911 = 29.0f; -COMPILER_STRIP_GATE(0x80854D08, &lit_7911); -#pragma pop - -/* 80854D0C-80854D10 000208 0004+00 0/1 0/0 0/0 .rodata @7912 */ -#pragma push -#pragma force_active on -SECTION_RODATA static f32 const lit_7912 = 26.0f; -COMPILER_STRIP_GATE(0x80854D0C, &lit_7912); -#pragma pop - /* 8085392C-80853BCC 00A46C 02A0+00 1/1 0/0 0/0 .text setFlySound__8daKago_cFv */ void daKago_c::setFlySound() { - // NONMATCHING -} + if (field_0x6de != 0) { + BOOL unkFlag1 = FALSE; + if (checkBck(9) || checkBck(15)) { + if (field_0x6e7 == 0) { + if (mpMorf->checkFrame(27.0f)) { + unkFlag1 = TRUE; + } + } else { + if (mpMorf->checkFrame(29.0f)) { + unkFlag1 = TRUE; + } + } + } else if (checkBck(21)) { + if (mpMorf->checkFrame(10.0f)) { + unkFlag1 = TRUE; + } + } else if (checkBck(6)) { + if (mpMorf->checkFrame(26.0f)) { + unkFlag1 = TRUE; + } + } else if (checkBck(5)) { + if (mpMorf->checkFrame(10.0f)) { + unkFlag1 = TRUE; + } + } else if (checkBck(4)) { + if (mpMorf->checkFrame(10.0f) || mpMorf->checkFrame(35.0f)) { + unkFlag1 = TRUE; + } + } else if (checkBck(12) || checkBck(13)) { + if (field_0x6e7 == 0) { + mSound.startCreatureSoundLevel(Z2SE_EN_YC_GLIDE, 0, -1); + } else { + mSound.startCreatureSoundLevel(Z2SE_EN_KC_GLIDE, 0, -1); + } + } -/* ############################################################################################## */ -/* 80854D10-80854D14 00020C 0004+00 0/1 0/0 0/0 .rodata @7981 */ -#pragma push -#pragma force_active on -SECTION_RODATA static f32 const lit_7981 = 1.5f; -COMPILER_STRIP_GATE(0x80854D10, &lit_7981); -#pragma pop + if (unkFlag1) { + if (field_0x6e7 == 0) { + mSound.startCreatureSound(Z2SE_EN_YC_WING, 0, -1); + } else { + mSound.startCreatureSound(Z2SE_EN_KC_WING, 0, -1); + } + } + } +} /* 80853BCC-80853EF0 00A70C 0324+00 2/1 0/0 0/0 .text action__8daKago_cFv */ void daKago_c::action() { - // NONMATCHING + checkMoveHeight(); + checkSizeBg(); + setFlyEffect(); + + field_0x6f0 = mDoCPd_c::getStickX3D(0); + field_0x6f4 = mDoCPd_c::getStickY(0); + + u32 unkInt1 = field_0x6ea; + field_0x6ea = 0; + fpcM_Search(s_waterfall, this); + + if (field_0x6ea != 0) { + if (unkInt1 == 0) { + current.angle.x = 0x1000; + dComIfGp_getVibration().StartQuake(3, 0x1f, cXyz(0.0f, 1.0f, 0.0f)); + } + + field_0x6f0 = field_0x6f0 * 0.5f; + + if (field_0x6f4 < 0.0f) { + field_0x6f4 = field_0x6f4 * 0.5f; + } else { + field_0x6f4 = field_0x6f4 * 1.5f; + } + + setWaterFallEffect(); + } else if (unkInt1 != 0) { + dComIfGp_getVibration().StopQuake(0x1f); + } + + field_0x6dd = 0; + + switch (mCurrentAction) { + case 0: + executeFly(); + break; + case 1: + executeStagger(); + break; + case 2: + executeEvent(); + break; + case 3: + executePerch(); + break; + case 4: + executeWait(); + break; + case 5: + executeAttack(); + break; + case 6: + executeEvent2(); + break; + case 7: + executePerch2(); + break; + case 8: + executeLanding(); + break; + case 9: + moveDemoFly(); + break; + case 10: + moveDemoFly(); + break; + } + + if (field_0x6e7 == 1 && (mCurrentAction == 0 || mCurrentAction == 5)) { + mSph.OnAtSetBit(); + } + + setFlySound(); + + if (daPy_getPlayerActorClass()->checkCargoCarry()) { + if (mCurrentAction == 9 || mCurrentAction == 10) { + dCam_getBody()->SetTrimTypeForce(2); + } else if (isAttack()) { + dCam_getBody()->SetTrimTypeForce(0); + dCam_getBody()->ModeFix(5); + } + } + + fopAcM_posMoveF(this, 0); + if (field_0x6dc == 0) { + mObjAcch.CrrPos(dComIfG_Bgsp()); + } + + if (mpMorf != NULL) { + mpMorf->play(0, dComIfGp_getReverb(fopAcM_GetRoomNo(this))); + } + + field_0x674 = current.pos; + + if (cLib_chaseF(&field_0x6c4, 0.0f, 60.0f) == 0) { + field_0x6c8 = field_0x6c8 + 0x800; + } + + field_0x6ca = field_0x6c4 * cM_ssin(field_0x6c8); } /* 80853EF0-80853FB0 00AA30 00C0+00 2/2 0/0 0/0 .text mtx_set__8daKago_cFv */ void daKago_c::mtx_set() { - // NONMATCHING + mDoMtx_stack_c::transS(current.pos.x,current.pos.y,current.pos.z); + mDoMtx_stack_c::ZXYrotM(shape_angle); + mDoMtx_stack_c::scaleM(l_HIO.mBasicSize,l_HIO.mBasicSize,l_HIO.mBasicSize); + + J3DModel* model = mpMorf->getModel(); + model->setBaseTRMtx(mDoMtx_stack_c::get()); + mpMorf->modelCalc(); + + mDoMtx_stack_c::copy(mpMorf->getModel()->getAnmMtx(0x1c)); + mDoMtx_stack_c::ZrotM(field_0x6ca); + cMtx_copy(mDoMtx_stack_c::get(), mLegR3Mtx); } /* 80853FB0-80854058 00AAF0 00A8+00 1/1 0/0 0/0 .text cc_set__8daKago_cFv */ void daKago_c::cc_set() { - // NONMATCHING + if (field_0x6de != 0) { + eyePos = current.pos; + + attention_info.position = eyePos; + attention_info.position.y += 30.0f; + + mSph.SetC(eyePos); + mSph.SetR(150.0f); + + dComIfG_Ccsp()->Set(&mSph); + } } /* 80854058-80854168 00AB98 0110+00 1/1 0/0 0/0 .text execute__8daKago_cFv */ -void daKago_c::execute() { - // NONMATCHING +int daKago_c::execute() { + if (executeBalloonMenu()) { +#if VERSION != VERSION_SHIELD_DEBUG + dComIfGp_setAStatusForce(0x27, 0); +#endif + return 1; + } + + if (field_0x728 != 0) { + field_0x728--; + } + + if (field_0x72c != 0) { + field_0x72c--; + } + + if (field_0x720 != 0) { + field_0x720--; + } + if (mDashCooldownTime != 0) { + mDashCooldownTime--; + } + if (field_0x71c != 0) { + field_0x71c--; + } + if (field_0x6ed != 0) { + field_0x6ed--; + } + + action(); + mtx_set(); + cc_set(); + + field_0x6b0 = dCam_getBody()->Eye(); + + return 1; } /* 80854168-80854188 00ACA8 0020+00 2/1 0/0 0/0 .text daKago_Execute__FP8daKago_c */ -static void daKago_Execute(daKago_c* param_0) { - // NONMATCHING +static int daKago_Execute(daKago_c* i_this) { + return i_this->execute(); } /* 80854188-80854190 00ACC8 0008+00 1/0 0/0 0/0 .text daKago_IsDelete__FP8daKago_c */ -static bool daKago_IsDelete(daKago_c* param_0) { - return true; +static int daKago_IsDelete(daKago_c* i_this) { + return 1; } /* 80854190-80854200 00ACD0 0070+00 1/1 0/0 0/0 .text _delete__8daKago_cFv */ -void daKago_c::_delete() { - // NONMATCHING +int daKago_c::_delete() { + dComIfG_resDelete(&mPhase, field_0x75c); + + if (field_0xb54 != 0) { + l_HIOInit = false; + mDoHIO_DELETE_CHILD(l_HIO.mChild); + } + + if (heap != NULL) { + mSound.deleteObject(); + } + + return 1; } /* 80854200-80854220 00AD40 0020+00 1/0 0/0 0/0 .text daKago_Delete__FP8daKago_c */ -static void daKago_Delete(daKago_c* param_0) { - // NONMATCHING +static int daKago_Delete(daKago_c* i_this) { + fpc_ProcID id = fopAcM_GetID(i_this); + return i_this->_delete(); } /* 80854220-808542DC 00AD60 00BC+00 1/1 0/0 0/0 .text ctrlJoint__8daKago_cFP8J3DJointP8J3DModel */ -void daKago_c::ctrlJoint(J3DJoint* param_0, J3DModel* param_1) { - // NONMATCHING +int daKago_c::ctrlJoint(J3DJoint* param_0, J3DModel* param_1) { + J3DJoint* joint = param_0; + int jointNo = joint->getJntNo(); + + mDoMtx_stack_c::copy(param_1->getAnmMtx(jointNo)); + if (jointNo == 3 || jointNo == 5 || jointNo == 6) { + mDoMtx_stack_c::YrotM(field_0x71a); + mDoMtx_stack_c::ZrotM(field_0x718); + } + + param_1->setAnmMtx(jointNo,mDoMtx_stack_c::get()); + cMtx_copy(mDoMtx_stack_c::get(),J3DSys::mCurrentMtx); + + return 1; } /* 808542DC-80854328 00AE1C 004C+00 1/1 0/0 0/0 .text JointCallBack__8daKago_cFP8J3DJointi */ -void daKago_c::JointCallBack(J3DJoint* param_0, int param_1) { - // NONMATCHING +int daKago_c::JointCallBack(J3DJoint* param_0, int param_1) { + if (param_1 == NULL) { + J3DModel* model = j3dSys.getModel(); + daKago_c* kago = (daKago_c*)model->getUserArea(); + if (kago != NULL) { + kago->ctrlJoint(param_0, model); + } + } + return 1; } /* 80854328-808544B8 00AE68 0190+00 1/1 0/0 0/0 .text CreateHeap__8daKago_cFv */ -void daKago_c::CreateHeap() { - // NONMATCHING +int daKago_c::CreateHeap() { + J3DModelData* modelData; + + if (field_0x6e7 == 0) { + modelData = (J3DModelData*)dComIfG_getObjectRes(field_0x75c, 0x18); + } else { + modelData = (J3DModelData*)dComIfG_getObjectRes(field_0x75c, 0x10); + } + JUT_ASSERT(0x139f, modelData != 0); + + mpMorf = new mDoExt_McaMorfSO( + modelData, NULL, NULL, + (J3DAnmTransform*)dComIfG_getObjectRes(field_0x75c, getBckName(9)), 2, 1.0f, 0, -1, &this->mSound, 0x80000, 0x11000084); + + if (mpMorf == NULL || mpMorf->getModel() == NULL) { + return 0; + } + + J3DModel* model = mpMorf->getModel(); + model->setUserArea((u32)this); + + for (u16 i = 1; i < model->getModelData()->getJointNum(); i++) { + if (i == 3 || i == 5 || i == 6) { + model->getModelData()->getJointNodePointer(i)->setCallBack(JointCallBack); + } + } + return 1; } /* 808544B8-808544D8 00AFF8 0020+00 1/1 0/0 0/0 .text useHeapInit__FP10fopAc_ac_c */ -static void useHeapInit(fopAc_ac_c* param_0) { - // NONMATCHING +static int useHeapInit(fopAc_ac_c* param_0) { + daKago_c* kago = (daKago_c*)param_0; + return kago->CreateHeap(); } -/* ############################################################################################## */ -/* 80854D14-80854D14 000210 0000+00 0/0 0/0 0/0 .rodata @stringBase0 */ -#pragma push -#pragma force_active on -SECTION_DEAD static char const* const stringBase_80854D1C = "E_YC"; -SECTION_DEAD static char const* const stringBase_80854D21 = "KAGO_YAMI"; -SECTION_DEAD static char const* const stringBase_80854D2B = "E_KC"; -SECTION_DEAD static char const* const stringBase_80854D30 = "KAGO_HIKARI"; -SECTION_DEAD static char const* const stringBase_80854D3C = "F_SP115"; -SECTION_DEAD static char const* const stringBase_80854D44 = "F_SP126"; -#pragma pop - /* 808544D8-80854928 00B018 0450+00 1/1 0/0 0/0 .text create__8daKago_cFv */ -void daKago_c::create() { - // NONMATCHING -} +int daKago_c::create() { + fopAcM_SetupActor(this, daKago_c); -/* 80854928-80854970 00B468 0048+00 1/0 0/0 0/0 .text __dt__8cM3dGSphFv */ -// cM3dGSph::~cM3dGSph() { -extern "C" void __dt__8cM3dGSphFv() { - // NONMATCHING -} + u32 param = (u8)fopAcM_GetParam(this); + if ((param & 0xff) != 0xff) { + mpPath1 = dPath_GetRoomPath(param & 0xff, fopAcM_GetRoomNo(this)); + if (mpPath1 == NULL) { + OS_REPORT("KAGO ......NONONONONONO PATH !!!!\n"); + return 5; + } + } -/* 80854970-808549B8 00B4B0 0048+00 1/0 0/0 0/0 .text __dt__8cM3dGAabFv */ -// cM3dGAab::~cM3dGAab() { -extern "C" void __dt__8cM3dGAabFv() { - // NONMATCHING -} + field_0x6e7 = (fopAcM_GetParam(this) >> 16) & 0xff; + if (field_0x6e7 == 0xff) { + field_0x6e7 = 0; + } + if (field_0x6e7 == 0) { + field_0x75c = "E_YC"; + field_0x760 = "KAGO_YAMI"; + } else { + field_0x75c = "E_KC"; + field_0x760 = "KAGO_HIKARI"; + } -/* 808549B8-80854A28 00B4F8 0070+00 3/2 0/0 0/0 .text __dt__12dBgS_ObjAcchFv */ -// dBgS_ObjAcch::~dBgS_ObjAcch() { -extern "C" void __dt__12dBgS_ObjAcchFv() { - // NONMATCHING -} + int phase_state = dComIfG_resLoad(&mPhase, field_0x75c); + if (phase_state == cPhs_COMPLEATE_e) { + OS_REPORT("Kago PARAM %x \n", fopAcM_GetParam(this)); -/* 80854A28-80854A2C 00B568 0004+00 1/1 0/0 0/0 .text __ct__4cXyzFv */ -// cXyz::cXyz() { -extern "C" void __ct__4cXyzFv() { - /* empty function */ + if (fopAcM_entrySolidHeap(this, useHeapInit, 0x23a0) == 0) { + return cPhs_ERROR_e; + } + + if (l_HIOInit == 0) { + field_0xb54 = 1; + l_HIOInit = 1; + l_HIO.mChild = mDoHIO_CREATE_CHILD("", &l_HIO); + } + + attention_info.flags = 0; + + fopAcM_SetMtx(this, mpMorf->getModel()->getBaseTRMtx()); + fopAcM_SetMin(this, -200.0f, -200.0f, -200.0f); + fopAcM_SetMax(this, 200.0f, 200.0f, 200.0f); + + mObjAcch.Set(fopAcM_GetPosition_p(this), fopAcM_GetOldPosition_p(this), this, 1, + &mAcchCir, fopAcM_GetSpeed_p(this), NULL, NULL); + mAcchCir.SetWall(100.0f, 200.0f); + mObjAcch.ClrRoofNone(); + mObjAcch.SetRoofCrrHeight(150.0f); + + field_0x560 = health = 100; + + mStts.Init(0xff, 0, this); + mSph.Set(cc_sph_src); + mSph.SetStts(&mStts); + + field_0x674 = current.pos; + + mSound.init(¤t.pos, &eyePos, 3, 1); + mAtInfo.mpSound = &mSound; + + maxFallSpeed = -100.0f; + gravity = 0.0f; + mPathIdxOffset = 0x01; + + setActionMode(4, 0); + +#if DEBUG + if (mDoCPd_c::getHoldL(0) && mDoCPd_c::getHoldR(0)) { + dComIfGs_offSwitch(0x2d, fopAcM_GetRoomNo(this)); + dComIfGs_offSwitch(0x32, fopAcM_GetRoomNo(this)); + + setActionMode(8, 0); + setMidnaRideOn(); + setPlayerRideOn(); + + field_0x6dc = 0; + field_0x6de = 0xff; + field_0x6df = 1; + } +#endif + + field_0x73c = 3; + if (strcmp("F_SP115", dComIfGp_getStartStageName()) == 0) { + if (dComIfGp_getStartStageRoomNo() == 0) { + field_0x73c = 0; + } + } else if (strcmp("F_SP112", dComIfGp_getStartStageName()) == 0) { + if (dComIfGp_getStartStageRoomNo() == 1) { + field_0x73c = 1; + } + } else if (strcmp("F_SP126", dComIfGp_getStartStageName()) == 0 && + dComIfGp_getStartStageRoomNo() == 0) + { + field_0x73c = 2; + } + + mBalloon2DId = fpcM_ERROR_PROCESS_ID_e; + + mtx_set(); + + daKago_Execute(this); + } + + return phase_state; } /* 80854A2C-80854A4C 00B56C 0020+00 1/0 0/0 0/0 .text daKago_Create__FP8daKago_c */ -static void daKago_Create(daKago_c* param_0) { - // NONMATCHING +static int daKago_Create(daKago_c* param_0) { + return param_0->create(); } -/* 80854A4C-80854A94 00B58C 0048+00 2/1 0/0 0/0 .text __dt__12daKago_HIO_cFv */ -daKago_HIO_c::~daKago_HIO_c() { - // NONMATCHING -} +/* 80854EBC-80854EDC -00001 0020+00 1/0 0/0 0/0 .data l_daKago_Method */ +static actor_method_class l_daKago_Method = { + (process_method_func)daKago_Create, + (process_method_func)daKago_Delete, + (process_method_func)daKago_Execute, + (process_method_func)daKago_IsDelete, + (process_method_func)daKago_Draw, +}; -/* 80854A94-80854AD0 00B5D4 003C+00 0/0 1/0 0/0 .text __sinit_d_a_kago_cpp */ -void __sinit_d_a_kago_cpp() { - // NONMATCHING -} - -#pragma push -#pragma force_active on -REGISTER_CTORS(0x80854A94, __sinit_d_a_kago_cpp); -#pragma pop - -/* 80854AD0-80854AD8 00B610 0008+00 1/0 0/0 0/0 .text @36@__dt__12dBgS_ObjAcchFv */ -static void func_80854AD0() { - // NONMATCHING -} - -/* 80854AD8-80854AE0 00B618 0008+00 1/0 0/0 0/0 .text @20@__dt__12dBgS_ObjAcchFv */ -static void func_80854AD8() { - // NONMATCHING -} - -/* 80854AE0-80854AF0 00B620 0010+00 7/7 0/0 0/0 .text getMidnaActor__9daPy_py_cFv */ -// void daPy_py_c::getMidnaActor() { -extern "C" void getMidnaActor__9daPy_py_cFv() { - // NONMATCHING -} - -/* 80854D14-80854D14 000210 0000+00 0/0 0/0 0/0 .rodata @stringBase0 */ +/* 80854EDC-80854F0C -00001 0030+00 0/0 0/0 1/0 .data g_profile_KAGO */ +extern actor_process_profile_definition g_profile_KAGO = { + fpcLy_CURRENT_e, // mLayerID + 4, // mListID + fpcPi_CURRENT_e, // mListPrio + PROC_KAGO, // mProcName + &g_fpcLf_Method.base, // sub_method + sizeof(daKago_c), // mSize + 0, // mSizeOther + 0, // mParameters + &g_fopAc_Method.base, // sub_method + 693, // mPriority + &l_daKago_Method, // sub_method + 0x00044000, // mStatus + fopAc_NPC_e, // mActorType + fopAc_CULLBOX_CUSTOM_e, // cullType +}; diff --git a/src/d/actor/d_a_obj_ari.cpp b/src/d/actor/d_a_obj_ari.cpp index a6d3dcc22c3..7104407584b 100644 --- a/src/d/actor/d_a_obj_ari.cpp +++ b/src/d/actor/d_a_obj_ari.cpp @@ -24,7 +24,7 @@ daObj_AriHIO_c::daObj_AriHIO_c() { } /* 80BA5410-80BA5414 000008 0002+02 1/2 0/0 0/0 .rodata l_ari_itemno */ -static u8 const l_ari_itemno[2] = {0xD4, 0xD5}; +static u8 const l_ari_itemno[2] = {fpcNm_ITEM_M_ANT, fpcNm_ITEM_F_ANT}; /* 80BA26BC-80BA2728 00011C 006C+00 1/1 0/0 0/0 .text InitCcSph__10daObjARI_cFv */ void daObjARI_c::InitCcSph() { diff --git a/src/d/actor/d_a_obj_brg.cpp b/src/d/actor/d_a_obj_brg.cpp index f47dcb84f06..6b0cd65a069 100644 --- a/src/d/actor/d_a_obj_brg.cpp +++ b/src/d/actor/d_a_obj_brg.cpp @@ -105,9 +105,9 @@ static int daObj_Brg_Draw(obj_brg_class* i_this) { br_s* br_p = i_this->mBr; + f32 var_f32, var_f31, var_f30, var_f29, var_f28; for (int i = 0; i < i_this->field_0xb1ea; i++, br_p++) { g_env_light.setLightTevColorType_MAJI(br_p->mpBridgeModel, &a_this->tevStr); - dComIfGd_setListBG(); mDoExt_modelUpdateDL(br_p->mpBridgeModel); dComIfGd_setList(); @@ -135,8 +135,8 @@ static int daObj_Brg_Draw(obj_brg_class* i_this) { sp8C = br_p->field_0x074[0] - br_p->field_0x074[1]; sp98 = br_p->field_0x050[0] - br_p->field_0x050[1]; + cXyz *spF4, *spF8; if (!(i_this->mType & 1)) { - f32 var_f30; if (i_this->mType & 8) { var_f30 = 5.0f; } else { @@ -154,17 +154,16 @@ static int daObj_Brg_Draw(obj_brg_class* i_this) { sp100++; } } else { - cXyz* spF4 = br_p->field_0x014.getPos(0); - cXyz* spF8 = br_p->field_0x014.getPos(2); + spF4 = br_p->field_0x014.getPos(0); + spF8 = br_p->field_0x014.getPos(2); sp8C.x *= 0.25f; sp8C.y *= 0.25f; sp8C.z *= 0.25f; - f32 var_f29 = br_p->field_0x0fe[0] * cM_ssin(i_this->field_0xaf1e * 5); + var_f29 = br_p->field_0x0fe[0] * cM_ssin(i_this->field_0xaf1e * 5); for (int j = 0; j < 5; j++) { *spFC = var_f30; - f32 var_f31; if (j == 2) { var_f31 = 1.0f; @@ -207,17 +206,16 @@ static int daObj_Brg_Draw(obj_brg_class* i_this) { sp100++; } } else { - cXyz* spF4 = br_p->field_0x014.getPos(1); - cXyz* spF8 = br_p->field_0x014.getPos(3); + spF4 = br_p->field_0x014.getPos(1); + spF8 = br_p->field_0x014.getPos(3); sp98.x *= 0.25f; sp98.y *= 0.25f; sp98.z *= 0.25f; - f32 var_f29 = br_p->field_0x0fe[1] * cM_ssin(i_this->field_0xaf1e * 5); + var_f29 = br_p->field_0x0fe[1] * cM_ssin(i_this->field_0xaf1e * 5); for (int j = 0; j < 5; j++) { *spFC = var_f30; - f32 var_f31; if (j == 2) { var_f31 = 1.0f; @@ -338,7 +336,6 @@ static int daObj_Brg_Draw(obj_brg_class* i_this) { sp114->y = i_this->mEndPos.y + spB0.y; sp114->z = i_this->mEndPos.z + spB0.z; - f32 var_f28; if (i_this->mType & 8) { var_f28 = 10.0f; } else if (i_this->field_0xb1ed == 1) { @@ -357,97 +354,7 @@ static int daObj_Brg_Draw(obj_brg_class* i_this) { return 1; } -/* 80BC24E8-80BC24EC 000008 0001+03 1/1 0/0 0/0 .bss @1109 */ -static u8 lit_1109[1 + 3 /* padding */]; - -/* 80BC24EC-80BC24F0 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 - -/* 80BC24F0-80BC24F4 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 - -/* 80BC24F4-80BC24F8 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 - -/* 80BC24F8-80BC24FC 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 - -/* 80BC24FC-80BC2500 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 - -/* 80BC2500-80BC2504 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 - -/* 80BC2504-80BC2508 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 - -/* 80BC2508-80BC250C 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 - -/* 80BC250C-80BC2510 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 - -/* 80BC2510-80BC2514 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 - -/* 80BC2514-80BC2518 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 - -/* 80BC2518-80BC251C 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 - -/* 80BC251C-80BC2520 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 - -/* 80BC2520-80BC2524 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 - -/* 80BC2524-80BC2528 -00001 0004+00 5/5 0/0 0/0 .bss None */ -/* 80BC2524 0001+01 data_80BC2524 @1009 */ - -static u8 struct_80BC2524[2]; +UNK_REL_BSS; /* 80BC2526 0002+00 data_80BC2526 wy */ static s16 wy; @@ -530,15 +437,16 @@ static void control2(obj_brg_class* i_this, br_s* i_part) { sp68.y = 0.0f; sp68.z = i_this->field_0xaedc * 50.0f; - for (int i = 0; i < i_this->field_0xb1ea - 1; i++, i_part--) { - f32 var_f28 = (i_part->field_0x0e8 * 0.5f) + (((i_part->field_0x0ec * i_part->field_0x0e0) * 0.5f) + i_part->field_0x0b0.y); - f32 var_f29 = var_f28 - i_part[1].field_0x0b0.y; - f32 var_f31 = i_part->field_0x0b0.x - i_part[1].field_0x0b0.x; - f32 var_f30 = i_part->field_0x0b0.z - i_part[1].field_0x0b0.z; + f32 x_var, atan_lhs, y_var, var_f28; + for (int i = 0; i < i_this->field_0xb1ea - 1; ++i, i_part--) { + var_f28 = (i_part->field_0x0e8 * 0.5f) + (i_part->field_0x0ec * i_part->field_0x0e0 * 0.5f + i_part->field_0x0b0.y); + atan_lhs = var_f28 - i_part[1].field_0x0b0.y; + x_var = i_part->field_0x0b0.x - i_part[1].field_0x0b0.x; + y_var = i_part->field_0x0b0.z - i_part[1].field_0x0b0.z; s16 spC6, spC8; - spC8 = (s16)cM_atan2s(var_f31, var_f30); - spC6 = -cM_atan2s(var_f29, JMAFastSqrt(var_f31 * var_f31 + var_f30 * var_f30)); + spC8 = (s16)cM_atan2s(x_var, y_var); + spC6 = -cM_atan2s(atan_lhs, JMAFastSqrt(x_var * x_var + y_var * y_var)); i_part[1].field_0x0d4.y = spC8; i_part[1].field_0x0d4.x = spC6; @@ -566,15 +474,15 @@ static void control3(obj_brg_class* i_this, br_s* i_part) { /* 80BBDCE8-80BBE008 0014C8 0320+00 1/1 0/0 0/0 .text cut_control1__FP13obj_brg_classP4br_s */ static void cut_control1(obj_brg_class* i_this, br_s* i_part) { + fopAc_ac_c* a_this = i_this; cXyz sp7C; cXyz sp88; - i_part++; + ++i_part; cXyz sp94; cMtx_YrotS(*calc_mtx, i_this->home.angle.y); - sp7C.x = 0.0f; sp7C.y = 0.0f; sp7C.z = 1.0f; @@ -582,38 +490,40 @@ static void cut_control1(obj_brg_class* i_this, br_s* i_part) { cXyz spA0(0.0f, 0.0f, 0.0f); - if (fopAcM_GetRoomNo(i_this) == 4 && !dComIfGp_event_runCheck()) { + if (fopAcM_GetRoomNo(a_this) == 4 && !dComIfGp_event_runCheck()) { cMtx_YrotS(*calc_mtx, wy); sp7C.x = 0.0f; sp7C.y = 0.0f; - sp7C.z = i_this->field_0xaf30 * ((cM_ssin(i_this->field_0xaf1e) * 0.1f) + (TREG_F(7) + 0.05f)); + sp7C.z = i_this->field_0xaf30 * ((cM_ssin((s16) i_this->field_0xaf1e) * 0.1f) + (TREG_F(7) + 0.05f)); MtxPosition(&sp7C, &spA0); - i_this->field_0xaef4 = i_this->field_0xaf30 * 3000.0f; + i_this->field_0xaef4 = (3000.0f + TREG_F(15)) * i_this->field_0xaf30; } sp7C.z = i_this->field_0xaedc * 50.0f; + f32 var_f31, var_f30, var_f29, var_f28; for (int i = 1; i < i_this->field_0xaed0; i++, i_part++) { - f32 var_f29 = i_part->field_0x0b0.y + i_part->field_0x0ec; + var_f29 = i_part->field_0x0b0.y + i_part->field_0x0ec; if (var_f29 < i_part->field_0x0dc + 30.0f) { var_f29 = i_part->field_0x0dc + 30.0f; i_part->field_0x707++; } - f32 var_f28 = var_f29 - i_part[-1].field_0x0b0.y; - f32 var_f31 = (sp94.x + (i_part->field_0x0b0.x - i_part[-1].field_0x0b0.x)) + (spA0.x * (f32)(i - 1)); - f32 var_f30 = (sp94.z + (i_part->field_0x0b0.z - i_part[-1].field_0x0b0.z)) + (spA0.z * (f32)(i - 1)); + var_f28 = var_f29 - i_part[-1].field_0x0b0.y; + var_f31 = (sp94.x + (i_part->field_0x0b0.x - i_part[-1].field_0x0b0.x)) + (spA0.x * (f32)(i - 1)); + var_f30 = (sp94.z + (i_part->field_0x0b0.z - i_part[-1].field_0x0b0.z)) + (spA0.z * (f32)(i - 1)); - s16 var_r26 = (s16)cM_atan2s(var_f31, var_f30); - s16 var_r27 = -cM_atan2s(var_f28, JMAFastSqrt(var_f31 * var_f31 + var_f30 * var_f30)); + s16 var_r27, var_r26; + var_r26 = (s16)cM_atan2s(var_f31, var_f30); + var_r27 = -cM_atan2s(var_f28, JMAFastSqrt(var_f31 * var_f31 + var_f30 * var_f30)); i_part[-1].field_0x0d4.y = var_r26 + 0x8000; i_part[-1].field_0x0d4.x = -var_r27; if (i == i_this->field_0xaed0 - 1) { i_part->field_0x0d4.y = var_r26 + 0x8000; - i_part->field_0x0d4.x = var_r27; + i_part->field_0x0d4.x = -var_r27; } cMtx_YrotS(*calc_mtx, var_r26); @@ -639,7 +549,7 @@ static void cut_control2(obj_brg_class* i_this, br_s* i_part) { sp7C.x = 0.0f; sp7C.y = 0.0f; - sp7C.z = 1.0f; + sp7C.z = -1.0f; MtxPosition(&sp7C, &sp94); cXyz spA0(0.0f, 0.0f, 0.0f); @@ -693,10 +603,10 @@ static void himo_cut_control1(obj_brg_class* i_this, cXyz* param_1, f32 param_2) cXyz sp74; cXyz sp80; cXyz sp8C; - + sp74.x = 0.0f; sp74.y = 0.0f; - sp74.z = i_this->field_0xaf30 * 3.0f; + sp74.z = i_this->field_0xaf30 * (3.0f + NREG_F(7)); cMtx_YrotS(*calc_mtx, wy); MtxPosition(&sp74, &sp8C); @@ -704,27 +614,29 @@ static void himo_cut_control1(obj_brg_class* i_this, cXyz* param_1, f32 param_2) sp74.y = 0.0f; sp74.z = param_2; - cXyz* var_r28 = param_1 + 1; - cXyz* temp_r27 = var_r28; + int i, temp_r27 = (int) ++param_1; + f32 var_f31, var_f30, var_f29, var_f28, var_f27; + for (i = 1; i < 5; i++, param_1++) { + var_f28 = i_this->field_0xaf30 * cM_ssin( (i_this->field_0xaf20 * 6000) + (NREG_S(3) - 10000) * (temp_r27 + i) ) + * (NREG_F(11) + 7.0f); + var_f27 = i_this->field_0xaf30 * cM_ssin( (i_this->field_0xaf20 * 6000) + (NREG_S(4) - 12000) * (temp_r27 + i) ) + * (NREG_F(11) + 7.0f); - for (int i = 1; i < 5; i++, var_r28++) { - f32 var_f28 = (i_this->field_0xaf30 * cM_ssin((i_this->field_0xaf20 * 6000) + ((NREG_S(3) - 10000) * ((int)temp_r27 + i))) ) * (NREG_F(11) + 7.0f); - f32 var_f27 = (i_this->field_0xaf30 * cM_ssin((i_this->field_0xaf20 * 6000) + ((NREG_S(4) - 12000) * ((int)temp_r27 + i))) ) * (NREG_F(11) + 7.0f); + var_f31 = var_f28 + (sp8C.x + (param_1->x - param_1[-1].x)); + var_f29 = (param_1->y - param_1[-1].y) - 10.0f; + var_f30 = var_f27 + (sp8C.z + (param_1->z - param_1[-1].z)); - f32 var_f31 = var_f28 + (sp8C.x + (var_r28->x - var_r28[-1].x)); - f32 var_f29 = (var_r28->y - var_r28[-1].y) - 10.0f; - f32 var_f30 = var_f27 + (sp8C.z + (var_r28->z - var_r28[-1].z)); - - s16 sp94 = (s16)cM_atan2s(var_f31, var_f30); - s16 sp92 = -cM_atan2s(var_f29, JMAFastSqrt(var_f31 * var_f31 + var_f30 * var_f30)); + s16 sp92, sp94; + sp94 = (s16)cM_atan2s(var_f31, var_f30); + sp92 = -cM_atan2s(var_f29, JMAFastSqrt(var_f31 * var_f31 + var_f30 * var_f30)); cMtx_YrotS(*calc_mtx, sp94); cMtx_XrotM(*calc_mtx, sp92); MtxPosition(&sp74, &sp80); - var_r28->x = var_r28[-1].x + sp80.x; - var_r28->y = var_r28[-1].y + sp80.y; - var_r28->z = var_r28[-1].z + sp80.z; + param_1->x = param_1[-1].x + sp80.x; + param_1->y = param_1[-1].y + sp80.y; + param_1->z = param_1[-1].z + sp80.z; } } @@ -747,51 +659,54 @@ static f32 ita_z_p[] = { static void obj_brg_move(obj_brg_class* i_this) { fopAc_ac_c* a_this = (fopAc_ac_c*)i_this; fopAc_ac_c* player = dComIfGp_getPlayer(0); + daPy_py_c* ply_p = (daPy_py_c*) player; cXyz spD0; cXyz spDC; cXyz spE8; br_s* part = i_this->mBr; + s16 my_tgt; + int i, j; + f32 var_f31, var_f30, var_f29, var_f28, var_f27, var_f26, var_f25; switch (i_this->field_0xaf1c) { case 0: i_this->field_0xb1e9 = 0; i_this->field_0xaf1c = 2; /* fallthrough */ case 2: - for (int i = 0; i < i_this->field_0xb1ea; i++) { + for (i = 0; i < i_this->field_0xb1ea; i++) { if ((i_this->mType & 1) == 1) { i_this->mBr[i].field_0x0e0 = 1.0f; } else { - i_this->mBr[i].field_0x0e0 = fabsf(sinf((i / (i_this->field_0xb1ea - 1)) * M_PI)); + var_f27 = ( f32(i) / (i_this->field_0xb1ea - 1)) * M_PI; + i_this->mBr[i].field_0x0e0 = fabsf(sin(var_f27)); } - i_this->mBr[i].field_0x705 = 3; - i_this->mBr[i].field_0x704 = 3; + i_this->mBr[i].field_0x704 = i_this->mBr[i].field_0x705 = 3; } i_this->field_0xaf1c = 3; /* fallthrough */ - case 3: - i_this->field_0xaf1e += 3000; + case 3: { + i_this->field_0xaf1e += (s16) 3000; part->field_0x0b0 = a_this->home.pos; if ((i_this->mType & 1) == 1) { cMtx_YrotS(*calc_mtx, i_this->home.angle.y); - spD0.x = (i_this->field_0xaeec * cM_scos(i_this->field_0xaf22)) * -2.0f; - spD0.y = 0.0f; - spD0.z = 0.0f; + spD0.x = (i_this->field_0xaeec * cM_scos((s16) i_this->field_0xaf22)) * -2.0f; + spD0.y = spD0.z = 0.0f; MtxPosition(&spD0, &spDC); part->field_0x0b0 += spDC; } control1(i_this, part); - part[i_this->field_0xb1ea - 1].field_0x0b0 = i_this->mEndPos; + (*(part + i_this->field_0xb1ea - 1)).field_0x0b0 = i_this->mEndPos; if ((i_this->mType & 1) == 1) { - part[i_this->field_0xb1ea - 1].field_0x0b0 -= spDC; + (*(part + i_this->field_0xb1ea - 1)).field_0x0b0 -= spDC; } control2(i_this, part); @@ -801,26 +716,27 @@ static void obj_brg_move(obj_brg_class* i_this) { a_this->current.pos = part->field_0x0b0; a_this->current.angle = part->field_0x0d4; - for (int i = 0; i < i_this->field_0xb1ea; i++, part++) { + for (i = 0; i < i_this->field_0xb1ea; i++, part++) { part->field_0x0bc = part->field_0x0b0; - f32 var_f30 = ((f32)(i_this->field_0xb1ea - i) / (f32)i_this->field_0xb1ea) * 0.75f; + var_f30 = ((f32)(i_this->field_0xb1ea - i) / (f32)i_this->field_0xb1ea) * 0.75f; part->field_0x0bc.x += spE8.x * var_f30; part->field_0x0bc.y += spE8.y * var_f30; part->field_0x0bc.z += spE8.z * var_f30; if (part->field_0x706) { - for (int j = -5; j < 6; j++) { - if (i + j > -1 && i + j < i_this->field_0xb1ea) { - cLib_addCalcAngleS2(&part[j].field_0x0f4, (f32)part->field_0x0f2 * ita_z_p[j + 5] * part[j].field_0x0e0, 4, 0x800); + for (j = -5; j <= 5; j++) { + if (i + j >= 0 && i + j < i_this->field_0xb1ea) { + my_tgt = (f32)part->field_0x0f2 * ita_z_p[j + 5] * part[j].field_0x0e0; + cLib_addCalcAngleS2(&part[j].field_0x0f4, my_tgt, 4, 0x800); cLib_addCalc2(&part[j].field_0x0e8, part->field_0x0e4 * ita_z_p[j + 5], 1.0f, 10.0f); } } } if (part->field_0x708 & 4 && (part->field_0x708 & 3) != 3) { - f32 var_f31 = 0.0f; - f32 var_f29 = -80.0f; + var_f31 = 0.0f; + var_f29 = -80.0f; if ((part->field_0x708 & 3) == 1) { var_f31 = 7000.0f; @@ -830,13 +746,16 @@ static void obj_brg_move(obj_brg_class* i_this) { var_f29 = -30.0f; } - for (int j = -5; j < 6; j++) { - if (i + j > -1 && i + j < i_this->field_0xb1ea) { - cLib_addCalcAngleS2(&part[j].field_0x0f6, var_f31 * ita_z_p[j + 5] * part[j].field_0x0e0, 4, 0x800); - cLib_addCalc2(&part[j].field_0x0e8, var_f29 * ita_z_p[j + 5], 1.0f, 15.0f); + for (j = -5; j <= 5; j++) { + if (i + j < 0 || i + j >= i_this->field_0xb1ea) { + continue; } - if ((part->field_0x708 & 3) == 0 && (i_this->mType & 4) == 0 && j > -3 && j < 3 && part[j].field_0x706 != 0) { + my_tgt = var_f31 * ita_z_p[j + 5] * part[j].field_0x0e0; + cLib_addCalcAngleS2(&part[j].field_0x0f6, my_tgt, 4, 0x800); + cLib_addCalc2(&part[j].field_0x0e8, var_f29 * ita_z_p[j + 5], 1.0f, 15.0f); + + if ((part->field_0x708 & 3) == 0 && (i_this->mType & 4) == 0 && j >= -2 && j <= 2 && part[j].field_0x706 != 0) { if (dComIfGp_event_runCheck()) { i_this->field_0xaed4 = 0; } else { @@ -863,12 +782,12 @@ static void obj_brg_move(obj_brg_class* i_this) { } if ((part->field_0x708 & 4) != 0 && (part->field_0x0fe[0] != 0 || part->field_0x0fe[1] != 0)) { - f32 var_f26 = (f32)(part->field_0x0fe[0] | part->field_0x0fe[1]) * 150.0f; - f32 var_f31 = var_f26 * cM_ssin(i_this->field_0xaf26 * 4); - - for (int j = -5; j < 6; j++) { - if (i + j > -1 && i + j < i_this->field_0xb1ea) { - part[j].field_0x0f6 += (var_f31 * ita_z_p[j + 5]) * part[j].field_0x0e0; + var_f26 = (f32)(part->field_0x0fe[0] | part->field_0x0fe[1]) * 150.0f; + var_f31 = var_f26 * cM_ssin(i_this->field_0xaf1e * 4); + for (j = -5; j <= 5; j++) { + if (i + j >= 0 && i + j < i_this->field_0xb1ea) { + my_tgt = var_f31 * ita_z_p[j + 5] * part[j].field_0x0e0; + part[j].field_0x0f6 += my_tgt; } } } @@ -878,7 +797,7 @@ static void obj_brg_move(obj_brg_class* i_this) { } part->field_0x0f2 = 0; - part->field_0x0d4.y = part->field_0x0f4 + part->field_0x0f6; + part->field_0x0d4.z = part->field_0x0f4 + part->field_0x0f6; s16 sp138 = 0; if (i_this->field_0xb1ec) { @@ -907,12 +826,13 @@ static void obj_brg_move(obj_brg_class* i_this) { i_this->field_0xaf28 = 3000; i_this->field_0xaf26 = 1400; - f32 var_f28 = i_this->field_0xaf30 * 3.0f; + var_f28 = i_this->field_0xaf30 * 3.0f; cLib_addCalc2(&i_this->field_0xaee0, var_f28, 0.1f, 0.1f); cLib_addCalc2(&i_this->field_0xaee4, var_f28 * 0.3f, 0.1f, 0.05f); break; + } case 4: - for (int i = 0; i < i_this->field_0xb1ea; i++, part++) { + for (i = 0; i < i_this->field_0xb1ea; i++, part++) { part->field_0x0ec = 0.0f; } @@ -923,48 +843,51 @@ static void obj_brg_move(obj_brg_class* i_this) { mDoAud_seStart(JA_SE_OBJ_BREAK_WOOD_L, NULL, 0, 0); if (fopAcM_GetRoomNo(a_this) != 4) { - int sw = fopAcM_GetParam(a_this) >> 0x18; + int sw = (fopAcM_GetParam(a_this) & 0xFF000000) >> 0x18; if (sw != 0xFF) { dComIfGs_onSwitch(sw, fopAcM_GetRoomNo(a_this)); } } /* fallthrough */ case 5: - br_s* var_r24 = i_this->mBr; + part = i_this->mBr; if (i_this->field_0xaf2c != 0) { i_this->field_0xaf2c--; } i_this->field_0xaf1e += 4000; - var_r24->field_0x0b0 = a_this->home.pos; + part->field_0x0b0 = a_this->home.pos; - cut_control1(i_this, var_r24); - var_r24[i_this->field_0xb1ea - 1].field_0x0b0 = i_this->mEndPos; - cut_control2(i_this, var_r24); + cut_control1(i_this, part); + (*(part + i_this->field_0xb1ea - 1)).field_0x0b0 = i_this->mEndPos; + cut_control2(i_this, part); if (i_this->field_0xb1ed) { - u32 sp11C = (u32)(i_this->field_0xaf30 * 110.0f) - 10; - if (sp11C > 0x7F) { - sp11C = 0x7F; + var_f25 = i_this->field_0xaf30; + u32 dbg_0x24 = var_f25 * 110.0f; + dbg_0x24 -= 10; + if (dbg_0x24 > 0x7F) { + dbg_0x24 = 0x7F; } - Z2GetAudioMgr()->seStartLevel(Z2SE_OBJ_BROKENBRIDGE, &a_this->home.pos, sp11C, 0, 1.0f, 1.0f, -1.0f, -1.0f, 0); - Z2GetAudioMgr()->seStartLevel(Z2SE_OBJ_BROKENBRIDGE, &i_this->mEndPos, sp11C, 0, 1.0f, 1.0f, -1.0f, -1.0f, 0); + Z2GetAudioMgr()->seStartLevel(Z2SE_OBJ_BROKENBRIDGE, &a_this->home.pos, dbg_0x24, 0, 1.0f, 1.0f, -1.0f, -1.0f, 0); + Z2GetAudioMgr()->seStartLevel(Z2SE_OBJ_BROKENBRIDGE, &i_this->mEndPos, dbg_0x24, 0, 1.0f, 1.0f, -1.0f, -1.0f, 0); } - for (int i = 0; i < i_this->field_0xb1ea; i++, var_r24++) { - var_r24->field_0x0bc = var_r24->field_0x0b0; - cLib_addCalc2(&var_r24->field_0x0ec, -50.0f, 1.0f, 5.0f); - var_r24->field_0x0dc = -10000.0f; + for (i = 0; i < i_this->field_0xb1ea; i++, part++) { + part->field_0x0bc = part->field_0x0b0; + cLib_addCalc2(&part->field_0x0ec, -50.0f, 1.0f, 5.0f); + part->field_0x0dc = -10000.0f; - if (i_this->field_0xb1f1 == 0 || (i < i_this->field_0xaed0 && i_this->field_0xb1f1 == 2) || (i >= i_this->field_0xaed0 && i_this->field_0xb1f1 == 1)) { - cLib_addCalcAngleS2(&var_r24->field_0x0d4.z, i_this->field_0xaef4 * cM_ssin(i_this->field_0xaf2e + (i * 10000)), 4, 0x800); + if (i_this->field_0xb1f1 == 0 || (i < i_this->field_0xaed0 && i_this->field_0xb1f1 == 2) + || (i >= i_this->field_0xaed0 && i_this->field_0xb1f1 == 1)) { + cLib_addCalcAngleS2(&part->field_0x0d4.z, i_this->field_0xaef4 * cM_ssin(i_this->field_0xaf2e + (i * 10000)), 4, 0x800); } } cLib_addCalc0(&i_this->field_0xaef4, 0.05f, 80.0f); - i_this->field_0xaf2e += 4500; + i_this->field_0xaf2e += (s16) 4500; if (i_this->field_0xb1ec) { spDC = i_this->mEndPos; @@ -975,23 +898,23 @@ static void obj_brg_move(obj_brg_class* i_this) { spDC.y = 3200.0f; i_this->mCyl[1].SetC(spDC); - for (int i = 0; i < 2; i++) { - i_this->mCyl[i].SetR(60.0f); - dComIfG_Ccsp()->Set(&i_this->mCyl[i]); + for (int idx = 0; idx < 2; idx++) { + i_this->mCyl[idx].SetR(60.0f); + dComIfG_Ccsp()->Set(&i_this->mCyl[idx]); - if (i_this->field_0xb1f2[i] != 0) { - i_this->field_0xb1f2[i]--; + if (i_this->field_0xb1f2[idx] != 0) { + i_this->field_0xb1f2[idx]--; } - if (i_this->field_0xb1f2[i] == 0 && i_this->mCyl[i].ChkTgHit()) { - i_this->field_0xb1f2[i] = 10; - i_this->field_0xb1f1 = i + 1; + if (i_this->field_0xb1f2[idx] == 0 && i_this->mCyl[idx].ChkTgHit()) { + i_this->field_0xb1f2[idx] = 10; + i_this->field_0xb1f1 = idx + 1; dCcU_AtInfo spC4; - spC4.mpCollider = i_this->mCyl[i].GetTgHitObj(); + spC4.mpCollider = i_this->mCyl[idx].GetTgHitObj(); at_power_check(&spC4); - if (spC4.mAttackPower > 3) { + if (spC4.mAttackPower >= 3) { i_this->field_0xaef4 = 3000.0f; } else { i_this->field_0xaef4 = 1600.0f; @@ -1005,14 +928,15 @@ static void obj_brg_move(obj_brg_class* i_this) { /* 80BBF21C-80BC0834 0029FC 1618+00 2/1 0/0 0/0 .text daObj_Brg_Execute__FP13obj_brg_class */ static int daObj_Brg_Execute(obj_brg_class* i_this) { fopAc_ac_c* a_this = (fopAc_ac_c*)i_this; - daPy_py_c* player = (daPy_py_c*)dComIfGp_getPlayer(0); + fopAc_ac_c* ply = dComIfGp_getPlayer(0); + daPy_py_c* player = (daPy_py_c*) ply; cXyz spC4; cXyz spD0; cXyz spDC; cXyz spE8; - camera_class* camera = dComIfGp_getCamera(0); + camera_class* camera = (camera_class*) dComIfGp_getCamera(0); spC4 = a_this->current.pos - camera->lookat.eye; if (i_this->field_0xb1ef != 0) { @@ -1031,7 +955,8 @@ static int daObj_Brg_Execute(obj_brg_class* i_this) { if (spC4.abs() > sp1BC) { spD0 = camera->lookat.center - camera->lookat.eye; - cMtx_YrotS(*calc_mtx, -cM_atan2s(spD0.x, spD0.z)); + s16 atan_res = cM_atan2s(spD0.x, spD0.z); + cMtx_YrotS(*calc_mtx, -atan_res); MtxPosition(&spC4, &spD0); if (spD0.z < 0.0f) { @@ -1041,7 +966,6 @@ static int daObj_Brg_Execute(obj_brg_class* i_this) { } i_this->field_0xb1f0 = 0; - cXyz spF4; cXyz sp100 = a_this->current.pos + ((i_this->mEndPos - a_this->current.pos) * 0.5f); @@ -1062,30 +986,34 @@ static int daObj_Brg_Execute(obj_brg_class* i_this) { i_this->field_0xaed8 = 0; br_s* part = i_this->mBr; - cXyz sp10C; bool var_r25 = 0; if (player->getBokoFlamePos(&sp10C)) { var_r25 = 1; } - f32 var_f26 = 0.0f; - f32 var_f29; + f32 var_f31, var_f30, var_f29, var_f28, var_f27, var_f26; + var_f26 = 0.0f; if (i_this->mType & 1) { var_f29 = 1000.0f; } else if (i_this->field_0xb1ed == 1) { - var_f29 = 250.0f; + var_f29 = 250.0f + WREG_F(12); } else if (i_this->field_0xb1ed == 2) { - var_f29 = 600.0f; + var_f29 = 600.0f + WREG_F(14); } else { var_f29 = 200.0f; } + var_f31 = 2.0f + TREG_F(17); + + f32 dbg_0x5c; for (int i = 0; i < i_this->field_0xb1ea; i++, part++) { if (i_this->field_0xb1ed == 2) { - var_f26 = -300.0f * sinf(((f32)i / (f32)(i_this->field_0xb1ea - 1)) * M_PI); + dbg_0x5c = f32(i) / f32(i_this->field_0xb1ea - 1) * M_PI; + var_f26 = (-300.0f + WREG_F(15)) * f32(sin(dbg_0x5c)); } else if (i_this->field_0xb1ed == 1) { - var_f26 = -100.0f * sinf(((f32)i / (f32)(i_this->field_0xb1ea - 1)) * M_PI); + dbg_0x5c = f32(i) / f32(i_this->field_0xb1ea - 1) * M_PI; + var_f26 = (-100.0f + WREG_F(13)) * f32(sin(dbg_0x5c)); } MtxTrans(part->field_0x0bc.x, part->field_0x0bc.y, part->field_0x0bc.z, 0); @@ -1095,7 +1023,7 @@ static int daObj_Brg_Execute(obj_brg_class* i_this) { if (i_this->field_0xaed0 != 0) { f32 sp1CC; - if (i_this->field_0xaed0 < i) { + if (i > i_this->field_0xaed0) { sp1CC = 30.0f; } else { sp1CC = -30.0f; @@ -1105,14 +1033,14 @@ static int daObj_Brg_Execute(obj_brg_class* i_this) { } spC4.x = part->field_0x0c8.x * 99.0f; - spC4.y = 5.0f; + spC4.y = 5.0f + WREG_F(2); spC4.z = 0.0f; MtxPosition(&spC4, &part->field_0x074[1]); spC4.x *= -1.0f; MtxPosition(&spC4, &part->field_0x050[1]); - spC4.y = -30.0f; + spC4.y = -30.0f + TREG_F(4); MtxPosition(&spC4, &part->field_0x050[2]); spC4.x *= -1.0f; @@ -1140,25 +1068,25 @@ static int daObj_Brg_Execute(obj_brg_class* i_this) { MtxTrans(part->field_0x074[0].x, part->field_0x074[0].y, part->field_0x074[0].z, 0); cMtx_YrotM(*calc_mtx, a_this->current.angle.y); - MtxScale(2.0f, 2.0f, 2.0f, 1); + MtxScale(var_f31, var_f31, var_f31, 1); part->mpKnotModels[0]->setBaseTRMtx(*calc_mtx); MtxTrans(part->field_0x050[0].x, part->field_0x050[0].y, part->field_0x050[0].z, 0); cMtx_YrotM(*calc_mtx, a_this->current.angle.y); - MtxScale(2.0f, 2.0f, 2.0f, 1); + MtxScale(var_f31, var_f31, var_f31, 1); part->mpKnotModels[1]->setBaseTRMtx(*calc_mtx); MtxPull(); } - if (i > 0 && i < i_this->field_0xb1ea - 2) { - f32 var_f30 = (part[1].field_0x074[0].y + part[-1].field_0x074[0].y) * 0.5f; - if (var_f30 < part->field_0x074[0].y) { + if (i >= 1 && i <= i_this->field_0xb1ea - 2) { + var_f30 = (part[-1].field_0x074[0].y - part[1].field_0x074[0].y) * 0.5f + part[1].field_0x074[0].y; + if (part->field_0x074[0].y > var_f30) { part->field_0x074[0].y = var_f30; } - var_f30 = (part[1].field_0x050[0].y + part[-1].field_0x050[0].y) * 0.5f; - if (var_f30 < part->field_0x050[0].y) { + var_f30 = (part[-1].field_0x050[0].y - part[1].field_0x050[0].y) * 0.5f + part[1].field_0x050[0].y; + if (part->field_0x050[0].y > var_f30) { part->field_0x050[0].y = var_f30; } } @@ -1173,7 +1101,7 @@ static int daObj_Brg_Execute(obj_brg_class* i_this) { dCcU_AtInfo spB8; if (i_this->field_0xaed0 != 0) { - part->field_0x708 &= 0x1C; + part->field_0x708 &= (u8) 0x1C; } if (part->mCyl[0].ChkTgHit() && part->field_0x0fe[0] < 10) { @@ -1188,10 +1116,11 @@ static int daObj_Brg_Execute(obj_brg_class* i_this) { } part->field_0x704 -= spB8.mAttackPower; - if (part->field_0x704 < 1) { - part->field_0x708 &= 0x1E; + if (part->field_0x704 <= 0) { + part->field_0x708 &= (u8) 0x1E; - Z2GetAudioMgr()->seStartLevel(Z2SE_HIT_ROPE_CUT, &part->field_0x074[0], 0, dComIfGp_getReverb(fopAcM_GetRoomNo(a_this)), 1.0f, 1.0f, -1.0f, -1.0f, 0); + Z2GetAudioMgr()->seStart(Z2SE_HIT_ROPE_CUT, &part->field_0x074[0], 0, + dComIfGp_getReverb(fopAcM_GetRoomNo(a_this)), 1.0f, 1.0f, -1.0f, -1.0f, 0); if (fopAcM_GetRoomNo(a_this) == 4) { i_this->field_0xaf1c = 4; i_this->field_0xaed0 = 10; @@ -1211,17 +1140,16 @@ static int daObj_Brg_Execute(obj_brg_class* i_this) { } part->field_0x705 -= spB8.mAttackPower; - if (part->field_0x705 < 1) { - part->field_0x708 &= 0x1D; + if (part->field_0x705 <= 0) { + part->field_0x708 &= (u8) 0x1D; - Z2GetAudioMgr()->seStartLevel(Z2SE_HIT_ROPE_CUT, &part->field_0x050[0], 0, dComIfGp_getReverb(fopAcM_GetRoomNo(a_this)), 1.0f, 1.0f, -1.0f, -1.0f, 0); + Z2GetAudioMgr()->seStart(Z2SE_HIT_ROPE_CUT, &part->field_0x050[0], 0, + dComIfGp_getReverb(fopAcM_GetRoomNo(a_this)), 1.0f, 1.0f, -1.0f, -1.0f, 0); } } } else { cXyz sp118; - sp118.z = 2.0f; - sp118.y = 2.0f; - sp118.x = 2.0f; + sp118.x = sp118.y = sp118.z = 2.0f; if (part->mCyl[0].ChkTgHit() && part->field_0x0fe[0] < 10) { part->mCyl[0].OnTgNoConHit(); @@ -1232,7 +1160,8 @@ static int daObj_Brg_Execute(obj_brg_class* i_this) { part->field_0x0fe[0] = 15; } - Z2GetAudioMgr()->seStartLevel(JA_SE_CM_MAGBALL_BOUND, &part->field_0x074[0], 0, dComIfGp_getReverb(fopAcM_GetRoomNo(a_this)), 1.0f, 1.0f, -1.0f, -1.0f, 0); + Z2GetAudioMgr()->seStart(JA_SE_CM_MAGBALL_BOUND, &part->field_0x074[0], 0, + dComIfGp_getReverb(fopAcM_GetRoomNo(a_this)), 1.0f, 1.0f, -1.0f, -1.0f, 0); } if (part->mCyl[1].ChkTgHit() && part->field_0x0fe[1] < 10) { @@ -1244,7 +1173,8 @@ static int daObj_Brg_Execute(obj_brg_class* i_this) { part->field_0x0fe[1] = 15; } - Z2GetAudioMgr()->seStartLevel(JA_SE_CM_MAGBALL_BOUND, &part->field_0x050[0], 0, dComIfGp_getReverb(fopAcM_GetRoomNo(a_this)), 1.0f, 1.0f, -1.0f, -1.0f, 0); + Z2GetAudioMgr()->seStart(JA_SE_CM_MAGBALL_BOUND, &part->field_0x050[0], 0, + dComIfGp_getReverb(fopAcM_GetRoomNo(a_this)), 1.0f, 1.0f, -1.0f, -1.0f, 0); } } @@ -1269,7 +1199,7 @@ static int daObj_Brg_Execute(obj_brg_class* i_this) { } if (part->field_0x0fa == 0) { - part->field_0x708 &= 0x1E; + part->field_0x708 &= (u8) 0x1E; } } else if (var_r25) { cXyz sp130; @@ -1307,7 +1237,7 @@ static int daObj_Brg_Execute(obj_brg_class* i_this) { } if (part->field_0x0fc == 0) { - part->field_0x708 &= 0x1D; + part->field_0x708 &= (u8) 0x1D; } } else if (var_r25) { cXyz sp13C; @@ -1336,47 +1266,45 @@ static int daObj_Brg_Execute(obj_brg_class* i_this) { cMtx_YrotM(*calc_mtx, part->field_0x0f0); - if (i_this->field_0xb1eb <= i) { - part->field_0x0c8.z = 0.0f; - part->field_0x0c8.y = 0.0f; - part->field_0x0c8.x = 0.0f; - + if (i >= i_this->field_0xb1eb) { + part->field_0x0c8.x = part->field_0x0c8.y = part->field_0x0c8.z = 0.0f; part->mpBridgeModel->setBaseScale(part->field_0x0c8); part->field_0x708 = 0; } - MtxTrans(0.0f, part->field_0x0c8.y * -3.0f, 0.0f, 1); + MtxTrans(0.0f, (-3.0f + oREG_F(9)) * part->field_0x0c8.y, 0.0f, 1); part->mpBridgeModel->setBaseTRMtx(*calc_mtx); if (!(i_this->mType & 4) && !(i_this->mType & 1) && (part->field_0x708 & 4)) { cXyz* sp1D4 = i_this->field_0xae90.getPos(0); cXyz* sp1D8 = i_this->field_0xae90.getPos(1); + cXyz *sp1DC, *sp1E0; int sp1E4 = i_this->field_0xaed8 + 1; cXyz sp148; spC4.x = 0.0f; spC4.y = 0.0f; + s16 dbg_0xa = (i_this->field_0xb1e9 * 1500); spC4.z = i_this->field_0xaf30; - spC4.z *= (cM_ssin((i_this->field_0xb1e9 * 1500) + (i_this->field_0xaf20 * 1400)) * 2.0f + 5.0f) * 0.15f; + spC4.z = spC4.z * (cM_ssin(dbg_0xa + (i_this->field_0xaf20 * 1400)) * 2.0f + 5.0f) * 0.15f; cMtx_YrotS(*calc_mtx, wy); MtxPosition(&spC4, &sp148); + f32 dbg_0x38; if (part->field_0x708 & 1) { sp1D4[sp1E4] = part->field_0x074[0]; } else { - cXyz sp154 = sp1D4[sp1E4 - 1] - sp1D4[sp1E4 + 1]; - f32 sp1E8 = (f32)part->field_0x0fe[0] * cM_ssin(i_this->field_0xaf1e * 6); + cXyz sp154 = *(sp1D4 + sp1E4 - 1) - *(sp1D4 + sp1E4 + 1); + dbg_0x38 = (f32)part->field_0x0fe[0] * cM_ssin(i_this->field_0xaf1e * 6); - sp1D4[sp1E4].x = sp148.x + sp154.x * 0.5f + sp1D4[sp1E4 + 1].x; - sp1D4[sp1E4].y = sp1E8 + sp154.y * 0.5f + sp1D4[sp1E4 + 1].y; - sp1D4[sp1E4].z = sp148.z + sp154.z * 0.5f + sp1D4[sp1E4 + 1].z; + sp1D4[sp1E4].x = sp154.x * 0.5f + (*(sp1D4 + sp1E4 + 1)).x + sp148.x; + sp1D4[sp1E4].y = sp154.y * 0.5f + (*(sp1D4 + sp1E4 + 1)).y + dbg_0x38 - 1.0f + AREG_F(0); + sp1D4[sp1E4].z = sp154.z * 0.5f + (*(sp1D4 + sp1E4 + 1)).z + sp148.z; - cXyz* sp1DC = part->field_0x014.getPos(0); - cXyz* sp1E0 = part->field_0x014.getPos(2); + sp1DC = part->field_0x014.getPos(0); + sp1E0 = part->field_0x014.getPos(2); - f32 var_f28; - f32 var_f27; if (part->field_0x708 & 0x10) { var_f28 = 0.0f; var_f27 = i_this->field_0xaedc * 25.0f; @@ -1395,18 +1323,16 @@ static int daObj_Brg_Execute(obj_brg_class* i_this) { if (part->field_0x708 & 2) { sp1D8[sp1E4] = part->field_0x050[0]; } else { - cXyz sp160 = sp1D8[sp1E4 - 1] - sp1D8[sp1E4 + 1]; - f32 sp1E8 = (f32)part->field_0x0fe[1] * cM_ssin(i_this->field_0xaf1e * 6); + cXyz sp160 = *(sp1D8 + sp1E4 - 1) - *(sp1D8 + sp1E4 + 1); + dbg_0x38 = (f32)part->field_0x0fe[1] * cM_ssin(i_this->field_0xaf1e * 6); - sp1D8[sp1E4].x = sp148.x + sp160.x * 0.5f + sp1D8[sp1E4 + 1].x; - sp1D8[sp1E4].y = sp1E8 + sp160.y * 0.5f + sp1D8[sp1E4 + 1].y; - sp1D8[sp1E4].z = sp148.z + sp160.z * 0.5f + sp1D8[sp1E4 + 1].z; + sp1D8[sp1E4].x = sp160.x * 0.5f + (*(sp1D8 + sp1E4 + 1)).x + sp148.x; + sp1D8[sp1E4].y = sp160.y * 0.5f + (*(sp1D8 + sp1E4 + 1)).y + dbg_0x38 - 1.0f + AREG_F(0); + sp1D8[sp1E4].z = sp160.z * 0.5f + (*(sp1D8 + sp1E4 + 1)).z + sp148.z; - cXyz* sp1DC = part->field_0x014.getPos(1); - cXyz* sp1E0 = part->field_0x014.getPos(3); + sp1DC = part->field_0x014.getPos(1); + sp1E0 = part->field_0x014.getPos(3); - f32 var_f28; - f32 var_f27; if (part->field_0x708 & 0x10) { var_f28 = 0.0f; var_f27 = i_this->field_0xaedc * 25.0f; @@ -1415,12 +1341,14 @@ static int daObj_Brg_Execute(obj_brg_class* i_this) { var_f28 = var_f27; } - *sp1DC = sp1D8[sp1E4]; + *sp1DC = *(sp1D8 + sp1E4); himo_cut_control1(i_this, sp1DC, var_f28); *sp1E0 = part->field_0x050[1]; himo_cut_control1(i_this, sp1E0, var_f27); } + + ++i_this->field_0xaed8; } } @@ -1428,32 +1356,35 @@ static int daObj_Brg_Execute(obj_brg_class* i_this) { Vec* vtx_tbl = (Vec*)i_this->mpBgW->GetVtxTbl(); + int dbg_0x30; + int temp; int sp1F8 = 0; for (int i = 0; i < i_this->mpBgW->GetVtxNum(); i++) { - int temp = i >> 2; + dbg_0x30 = i & 3; + temp = i >> 2; - if (i < i_this->field_0xb1eb) { - switch (i & 3) { + if (temp < i_this->field_0xb1eb) { + part = &i_this->mBr[temp]; + switch (dbg_0x30) { case 0: - vtx_tbl[i] = i_this->mBr[temp].field_0x074[2]; + vtx_tbl[i] = part->field_0x074[2]; break; case 1: - vtx_tbl[i] = i_this->mBr[temp].field_0x050[2]; + vtx_tbl[i] = part->field_0x050[2]; break; case 2: - vtx_tbl[i] = i_this->mBr[temp].field_0x074[1]; + vtx_tbl[i] = part->field_0x074[1]; break; case 3: - vtx_tbl[i] = i_this->mBr[temp].field_0x050[1]; + vtx_tbl[i] = part->field_0x050[1]; break; } if (temp == 0 || temp == i_this->field_0xb1eb - 1) { - cMtx_YrotS(*calc_mtx, i_this->mBr[temp].field_0x0d4.y); - cMtx_XrotM(*calc_mtx, i_this->mBr[temp].field_0x0d4.x); + cMtx_YrotS(*calc_mtx, part->field_0x0d4.y); + cMtx_XrotM(*calc_mtx, part->field_0x0d4.x); - spC4.y = 0.0f; - spC4.x = 0.0f; + spC4.x = spC4.y = 0.0f; if (temp == 0) { spC4.z = 50.0f; @@ -1473,7 +1404,7 @@ static int daObj_Brg_Execute(obj_brg_class* i_this) { vtx_tbl[i] = vtx_tbl[sp1F8]; } - if (i_this->field_0xaf1c > 3) { + if (i_this->field_0xaf1c >= 4) { vtx_tbl[i].y = 10000.0f; } } @@ -1718,158 +1649,33 @@ static int CallbackCreateHeap(fopAc_ac_c* i_this) { return 1; } -/* 80BC2528-80BC2538 000048 000C+04 0/1 0/0 0/0 .bss @5786 */ -#pragma push -#pragma force_active on -static u8 lit_5786[12 + 4 /* padding */]; -#pragma pop - -/* 80BC2538-80BC2544 000058 000C+00 0/1 0/0 0/0 .bss @5789 */ -#pragma push -#pragma force_active on -static u8 lit_5789[12]; -#pragma pop - -/* 80BC2544-80BC2550 000064 000C+00 0/1 0/0 0/0 .bss @5790 */ -#pragma push -#pragma force_active on -static u8 lit_5790[12]; -#pragma pop - -/* 80BC2550-80BC255C 000070 000C+00 0/1 0/0 0/0 .bss @5791 */ -#pragma push -#pragma force_active on -static u8 lit_5791[12]; -#pragma pop - -/* 80BC255C-80BC2568 00007C 000C+00 0/1 0/0 0/0 .bss @5792 */ -#pragma push -#pragma force_active on -static u8 lit_5792[12]; -#pragma pop - -/* 80BC2568-80BC2574 000088 000C+00 0/1 0/0 0/0 .bss @5793 */ -#pragma push -#pragma force_active on -static u8 lit_5793[12]; -#pragma pop - -/* 80BC2574-80BC2580 000094 000C+00 0/1 0/0 0/0 .bss @5794 */ -#pragma push -#pragma force_active on -static u8 lit_5794[12]; -#pragma pop - -/* 80BC2580-80BC258C 0000A0 000C+00 0/1 0/0 0/0 .bss @5795 */ -#pragma push -#pragma force_active on -static u8 lit_5795[12]; -#pragma pop - -/* 80BC258C-80BC2598 0000AC 000C+00 0/1 0/0 0/0 .bss @5796 */ -#pragma push -#pragma force_active on -static u8 lit_5796[12]; -#pragma pop - -/* 80BC2598-80BC25A4 0000B8 000C+00 0/1 0/0 0/0 .bss @5797 */ -#pragma push -#pragma force_active on -static u8 lit_5797[12]; -#pragma pop - -/* 80BC25A4-80BC25B0 0000C4 000C+00 0/1 0/0 0/0 .bss @5798 */ -#pragma push -#pragma force_active on -static u8 lit_5798[12]; -#pragma pop - -/* 80BC25B0-80BC25BC 0000D0 000C+00 0/1 0/0 0/0 .bss @5799 */ -#pragma push -#pragma force_active on -static u8 lit_5799[12]; -#pragma pop - -/* 80BC25BC-80BC25C8 0000DC 000C+00 0/1 0/0 0/0 .bss @5800 */ -#pragma push -#pragma force_active on -static u8 lit_5800[12]; -#pragma pop - -/* 80BC25C8-80BC25D4 0000E8 000C+00 0/1 0/0 0/0 .bss @5801 */ -#pragma push -#pragma force_active on -static u8 lit_5801[12]; -#pragma pop - -/* 80BC25D4-80BC25E0 0000F4 000C+00 0/1 0/0 0/0 .bss @5802 */ -#pragma push -#pragma force_active on -static u8 lit_5802[12]; -#pragma pop - -/* 80BC25E0-80BC25EC 000100 000C+00 0/1 0/0 0/0 .bss @5803 */ -#pragma push -#pragma force_active on -static u8 lit_5803[12]; -#pragma pop - -/* 80BC25EC-80BC25F8 00010C 000C+00 0/1 0/0 0/0 .bss @5804 */ -#pragma push -#pragma force_active on -static u8 lit_5804[12]; -#pragma pop - -/* 80BC25F8-80BC2604 000118 000C+00 0/1 0/0 0/0 .bss @5805 */ -#pragma push -#pragma force_active on -static u8 lit_5805[12]; -#pragma pop - -/* 80BC2604-80BC2610 000124 000C+00 0/1 0/0 0/0 .bss @5806 */ -#pragma push -#pragma force_active on -static u8 lit_5806[12]; -#pragma pop - -/* 80BC2610-80BC261C 000130 000C+00 0/1 0/0 0/0 .bss @5807 */ -#pragma push -#pragma force_active on -static u8 lit_5807[12]; -#pragma pop - -/* 80BC261C-80BC2628 00013C 000C+00 0/1 0/0 0/0 .bss @5808 */ -#pragma push -#pragma force_active on -static u8 lit_5808[12]; -#pragma pop - -/* 80BC2628-80BC2634 000148 000C+00 0/1 0/0 0/0 .bss @5809 */ -#pragma push -#pragma force_active on -static u8 lit_5809[12]; -#pragma pop - /* 80BC1050-80BC1D74 004830 0D24+00 1/0 0/0 0/0 .text daObj_Brg_Create__FP10fopAc_ac_c */ static int daObj_Brg_Create(fopAc_ac_c* i_this) { obj_brg_class* a_this = (obj_brg_class*)i_this; + int phase_state; + dPath* path; + dPnt* pnt; + int sp54; + br_s* part; + int loop, sp60, brno, iter; + int fop_id = fopAcM_GetID(i_this); fopAcM_SetupActor(i_this, obj_brg_class); - int phase_state = dComIfG_resLoad(&a_this->mPhase, "Obj_brg"); + phase_state = dComIfG_resLoad(&a_this->mPhase, "Obj_brg"); if (phase_state == cPhs_COMPLEATE_e) { a_this->mType = fopAcM_GetParam(i_this); a_this->mType = 0; - a_this->field_0xb1e9 = fopAcM_GetParam(i_this) >> 8; + a_this->field_0xb1e9 = (fopAcM_GetParam(i_this) & 0xFF00) >> 8; OS_REPORT("OBJ_BRG SET %x\n", fopAcM_GetParam(i_this)); - u8 path_id = fopAcM_GetParam(i_this) >> 0x10; + u8 path_id = (fopAcM_GetParam(i_this) & 0xFF0000) >> 0x10; a_this->field_0xaedc = 1.5f; if (strcmp(dComIfGp_getStartStageName(), "F_SP104") == 0) { a_this->mType = 8; a_this->field_0xb1ed = 2; - a_this->field_0xaedc *= 3.0f; + a_this->field_0xaedc *= (3.0f + NREG_F(12)); } if (path_id == 0xFF) { @@ -1889,22 +1695,23 @@ static int daObj_Brg_Create(fopAc_ac_c* i_this) { i_this->home.pos.set(0.0f, 3285.0f, 3425.0f); a_this->mEndPos.set(0.0f, 3270.0f, 1095.0f); - a_this->field_0xaedc *= 1.5f; + a_this->field_0xaedc *= (1.5f + YREG_F(5)); a_this->field_0xb1ed = 1; } else { return cPhs_ERROR_e; } } } else { - dPath* path = dPath_GetRoomPath(path_id, fopAcM_GetRoomNo(i_this)); + path = dPath_GetRoomPath(path_id, fopAcM_GetRoomNo(i_this)); if (path != NULL) { - i_this->home.pos.x = path->m_points[0].m_position.x; - i_this->home.pos.y = path->m_points[0].m_position.y; - i_this->home.pos.z = path->m_points[0].m_position.z; + pnt = &path->m_points[0]; + i_this->home.pos.x = pnt->m_position.x; + i_this->home.pos.y = pnt->m_position.y; + i_this->home.pos.z = pnt->m_position.z; - a_this->mEndPos.x = path->m_points[1].m_position.x; - a_this->mEndPos.y = path->m_points[1].m_position.y; - a_this->mEndPos.z = path->m_points[1].m_position.z; + a_this->mEndPos.x = (pnt+1)->m_position.x; + a_this->mEndPos.y = (pnt+1)->m_position.y; + a_this->mEndPos.z = (pnt+1)->m_position.z; } else { OS_REPORT("NON PATH !!!!!!!!! %d!\n", path_id); return cPhs_ERROR_e; @@ -1912,7 +1719,7 @@ static int daObj_Brg_Create(fopAc_ac_c* i_this) { } cXyz sp40 = a_this->mEndPos - i_this->home.pos; - i_this->home.angle.y = cM_atan2s(sp40.x, sp40.z); + i_this->home.angle.y = (s16) cM_atan2s(sp40.x, sp40.z); i_this->home.angle.x = -cM_atan2s(sp40.y, JMAFastSqrt(sp40.x * sp40.x + sp40.z * sp40.z)); f32 var_f31 = TREG_F(14) + 3.0f; @@ -1928,9 +1735,9 @@ static int daObj_Brg_Create(fopAc_ac_c* i_this) { var_f31 = 0.0f; } - a_this->field_0xb1ea = (sp40.abs() / var_f31 + 47.0f) * a_this->field_0xaedc; + a_this->field_0xb1ea = sp40.abs() / ((var_f31 + 47.0f) * a_this->field_0xaedc); - if (a_this->field_0xb1ea > 24) { + if (a_this->field_0xb1ea >= 24) { OS_REPORT("TOO MANY BIRIDGE !!!! %d!\n", a_this->field_0xb1ea); return cPhs_ERROR_e; } @@ -1941,10 +1748,10 @@ static int daObj_Brg_Create(fopAc_ac_c* i_this) { return cPhs_ERROR_e; } - CreateInit(a_this); + CreateInit(i_this); if (a_this->mpBgW != NULL) { - if (dComIfG_Bgsp().Regist(a_this->mpBgW, i_this)) { + if (dComIfG_Bgsp().Regist(a_this->mpBgW, a_this)) { return cPhs_ERROR_e; } } @@ -1963,16 +1770,19 @@ static int daObj_Brg_Create(fopAc_ac_c* i_this) { OS_REPORT("OBJ_BRG SET END \n"); - int sp54 = fopAcM_GetParam(i_this) >> 0x18; - bool sp78 = sp54 != 0xFF && dComIfGs_isSwitch(sp54, fopAcM_GetRoomNo(i_this)); + sp54 = (fopAcM_GetParam(i_this) & 0xFF000000) >> 0x18; + s8 sp78 = 0; + if (sp54 != 0xFF && dComIfGs_isSwitch(sp54, fopAcM_GetRoomNo(i_this))) { + sp78 = 1; + } - br_s* part = a_this->mBr; - for (int i = 0; i < a_this->field_0xb1ea; i++, part++) { + part = a_this->mBr; + for (loop = 0; loop < a_this->field_0xb1ea; loop++, part++) { part->field_0x074[0].y = i_this->home.pos.y + 350.0f; part->field_0x050[0].y = i_this->home.pos.y + 350.0f; } - int sp60 = 10; + sp60 = 10; if (a_this->field_0xb1ed == 2) { sp60 = 2; @@ -2001,17 +1811,17 @@ static int daObj_Brg_Create(fopAc_ac_c* i_this) { cXyz(334.0f, 216.0f, -16485.0f), }; - for (int i = 0; i < a_this->field_0xb1ea; i++) { - a_this->mBr[i].field_0x098[2] = brg_init_pos[i]; + for (brno = 0; brno < a_this->field_0xb1ea; brno++) { + a_this->mBr[brno].field_0x098[2] = brg_init_pos[brno]; } } - for (int i = 0; i < sp60; i++) { - if (i == 5 && sp78) { + for (iter = 0; iter < sp60; iter++) { + if (iter == 5 && sp78) { if (a_this->field_0xb1ec != 0) { a_this->field_0xaf1c = 5; a_this->field_0xaed0 = 7; - } else if (a_this->field_0xb1ec == 1) { + } else if (a_this->field_0xb1ed == 1) { a_this->field_0xaf1c = 5; a_this->field_0xaed0 = 10; a_this->mType = 4; diff --git a/src/d/actor/d_a_obj_cho.cpp b/src/d/actor/d_a_obj_cho.cpp index efe8e21006f..bc4e02ec1db 100644 --- a/src/d/actor/d_a_obj_cho.cpp +++ b/src/d/actor/d_a_obj_cho.cpp @@ -292,7 +292,7 @@ void daObjCHO_c::Insect_Release() { } /* 80BCC630-80BCC634 0000B8 0002+02 1/2 0/0 0/0 .rodata l_cho_itemno */ -static u8 const l_cho_itemno[2] = {0xC2, 0xC3}; +static u8 const l_cho_itemno[2] = {fpcNm_ITEM_M_BUTTERFLY, fpcNm_ITEM_F_BUTTERFLY}; // Some unused function went here. // This fake function is here in its place to make the literals match diff --git a/src/d/actor/d_a_obj_dan.cpp b/src/d/actor/d_a_obj_dan.cpp index e7460db9ef2..e933e876f72 100644 --- a/src/d/actor/d_a_obj_dan.cpp +++ b/src/d/actor/d_a_obj_dan.cpp @@ -274,7 +274,7 @@ void daObjDAN_c::Insect_Release() { } /* 80BDC42C-80BDC430 00007C 0002+02 1/2 0/0 0/0 .rodata l_dan_itemno */ -static u8 const l_dan_itemno[2] = {0xCA, 0xCB}; +static u8 const l_dan_itemno[2] = {fpcNm_ITEM_M_DANGOMUSHI, fpcNm_ITEM_F_DANGOMUSHI}; /* 80BDB0E8-80BDB264 000C48 017C+00 1/1 0/0 0/0 .text Z_BufferChk__10daObjDAN_cFv */ void daObjDAN_c::Z_BufferChk() { diff --git a/src/d/actor/d_a_obj_fchain.cpp b/src/d/actor/d_a_obj_fchain.cpp index 1ecf2eb3440..a0ed6318e0b 100644 --- a/src/d/actor/d_a_obj_fchain.cpp +++ b/src/d/actor/d_a_obj_fchain.cpp @@ -140,123 +140,114 @@ int daObjFchain_c::execute() { } else { field_0x588 = 0; } - cXyz* local_148 = ¤t.pos; - cXyz local_54; - cXyz cStack_60; + cXyz* sp_38 = ¤t.pos; + cXyz sp_12c; + cXyz sp_120; if (field_0x586 != 0) { field_0x586--; } - cXyz* pcVar12 = field_0x694; - cXyz* local_150 = field_0x79c; + int i; + cXyz* var_r28 = field_0x694; + cXyz* sp_30 = field_0x79c; u32 isWolf = daPy_py_c::checkNowWolf(); daPy_py_c* player = daPy_getLinkPlayerActorClass(); - for (int i = 0; i < 22; i++) { - local_54 = (*pcVar12 - *local_148) + *local_150; - local_54.y += -1.5f; + for (i = 0; i < 22; i++, var_r28++, sp_30++) { + sp_12c = (*var_r28 - *sp_38) + *sp_30; + sp_12c.y += -1.5f; if (dComIfGs_isEventBit(0x510)) { if (isWolf) { - checkPlayerFoot(pcVar12, player->getLeftHandPosP(), &local_54); - checkPlayerFoot(pcVar12, player->getRightHandPosP(), &local_54); + checkPlayerFoot(var_r28, player->getLeftHandPosP(), &sp_12c); + checkPlayerFoot(var_r28, player->getRightHandPosP(), &sp_12c); } - checkPlayerFoot(pcVar12, player->getLeftFootPosP(), &local_54); - checkPlayerFoot(pcVar12, player->getRightFootPosP(), &local_54); + checkPlayerFoot(var_r28, player->getLeftFootPosP(), &sp_12c); + checkPlayerFoot(var_r28, player->getRightFootPosP(), &sp_12c); } - cStack_60 = local_54; - local_54.normalizeZP(); - *pcVar12 = *local_148 + (local_54 * 9.0f); - if (pcVar12->y < current.pos.y) { - setGroundVec(&cStack_60, current.pos.y - pcVar12->y); - *pcVar12 = *local_148 + (cStack_60 * 9.0f); + sp_120 = sp_12c; + sp_12c.normalizeZP(); + *var_r28 = *sp_38 + (sp_12c * 9.0f); + if (var_r28->y < current.pos.y) { + setGroundVec(&sp_120, current.pos.y - var_r28->y); + *var_r28 = *sp_38 + (sp_120 * 9.0f); } - local_150++; - local_148 = pcVar12; - pcVar12++; + sp_38 = var_r28; } if (isWolf && !dComIfGs_isEventBit(0x510)) { mDoMtx_multVec( player->getModelJointMtx(17), &wolfChainBaseOffset, &field_0x694[21]); - cXyz diff = (field_0x694[21] - current.pos); - f32 dVar13 = diff.abs(); + sp_12c = (field_0x694[21] - current.pos); + f32 dVar13 = sp_12c.abs(); if (dVar13 > 198.0f) { - s16 sVar10 = cM_atan2s(-local_54.x, -local_54.z); - player->setOutPower(dVar13 - 198.0f, sVar10, 0); + player->setOutPower(dVar13 - 198.0f, cM_atan2s(-sp_12c.x, -sp_12c.z), 0); player->onWolfFchainPull(); - cXyz* pcVar8 = field_0x694; - local_148 = ¤t.pos; - local_54 *= 9.0f / dVar13; - for (int i = 0; pcVar12 = pcVar8, i < 22; i++) { - *pcVar8 = *local_148 + local_54; - local_148 = pcVar8; - pcVar8++; + var_r28 = field_0x694; + sp_38 = ¤t.pos; + sp_12c *= 9.0f / dVar13; + for (i = 0; i < 22; i++, var_r28++) { + *var_r28 = *sp_38 + sp_12c; + sp_38 = var_r28; } field_0x584 = 0; } else { - cXyz* pcVar8 = &field_0x694[20]; - local_150 = &field_0x79c[20]; - local_148 = pcVar8 + 1; - for (int i = 20; i >= 0; i--) { - local_54 = (*pcVar8 - *local_148) + *local_150; - local_54.y += -1.5f; - cStack_60 = local_54; - local_54.normalizeZP(); - *pcVar8 = *local_148 + (local_54 * 9.0f); - if (pcVar8->y < current.pos.y) { - setGroundVec(&cStack_60, current.pos.y - pcVar8->y); - *pcVar8 = *local_148 + (cStack_60 * 9.0f); + var_r28 = &field_0x694[20]; + sp_30 = &field_0x79c[20]; + sp_38 = var_r28 + 1; + for (i = 20; i >= 0; i--, var_r28--, sp_30--) { + sp_12c = (*var_r28 - *sp_38) + *sp_30; + sp_12c.y += -1.5f; + sp_120 = sp_12c; + sp_12c.normalizeZP(); + *var_r28 = *sp_38 + (sp_12c * 9.0f); + if (var_r28->y < current.pos.y) { + setGroundVec(&sp_120, current.pos.y - var_r28->y); + *var_r28 = *sp_38 + (sp_120 * 9.0f); } - local_150--; - local_148 = pcVar8; - pcVar8--; + sp_38 = var_r28; } } } - local_148 = ¤t.pos; - local_150 = field_0x694; - cXyz* pcVar8 = field_0x79c; - csXyz* local_15c = field_0x8a4; - cXyz* local_160 = field_0x58c; - s16 local_178 = 0; - for (int i = 0; i < 22; i++) { - *local_150 = (*pcVar8 - *local_160) * 0.3f; - *local_160 = *pcVar8; - local_54 = *local_148 - *pcVar8; - local_15c->x = local_54.atan2sY_XZ(); - if (!(local_54.absXZ() < 3.5f)) { - local_15c->y = local_54.atan2sX_Z(); + sp_38 = ¤t.pos; + var_r28 = field_0x694; + sp_30 = field_0x79c; + csXyz* sp_24 = field_0x8a4; + cXyz* sp_20 = field_0x58c; + s16 sp_08 = 0; + for (i = 0; i < 22; i++, var_r28++, sp_30++, sp_24++, sp_20++) { + *sp_30 = (*var_r28 - *sp_20) * 0.3f; + *sp_20 = *var_r28; + sp_12c = *sp_38 - *var_r28; + sp_24->x = sp_12c.atan2sY_XZ(); + if (!(sp_12c.absXZ() < 3.5f)) { + sp_24->y = sp_12c.atan2sX_Z(); } - if (local_150->abs2() > 3.0f && field_0x586 == 0) { + if (sp_30->abs2() > 3.0f && field_0x586 == 0) { f32 fVar1; if (cM_rnd() < 0.5f) { fVar1 = 1.0f; } else { fVar1 = -1.0f; } - local_15c->z = local_178 + 0x4000 + + sp_24->z = sp_08 + 0x4000 + (fVar1 * (cM_rndF(4096.0f) + 1536.0f)); - if (pcVar8->y <= current.pos.y + 2.0f) { - if ((local_15c->z >= 0 && local_15c->z < 0x4000) || - (local_15c->z > -0x7fff && local_15c->z < -0x4000)) + if (var_r28->y <= current.pos.y + 2.0f) { + if ((sp_24->z >= 0 && sp_24->z < 0x4000) || + (sp_24->z > -0x7fff && sp_24->z < -0x4000)) { - local_15c->z = cM_rndFX(2048.0f) + 4096.0f; + sp_24->z = cM_rndFX(2048.0f) + 4096.0f; } else { - local_15c->z = cM_rndFX(2048.0f) + -4096.0f; + sp_24->z = cM_rndFX(2048.0f) + -4096.0f; } } } - local_178 = local_15c->z; - local_150++; - local_15c++; - local_160++; - local_148 = pcVar8; - pcVar8++; + sp_08 = sp_24->z; + sp_38 = var_r28; } if (field_0x584 == 0) { field_0x584 = 1; - local_150 = field_0x79c; + sp_30 = field_0x79c; for (int i = 0; i < 22; i++) { - *local_150 = cXyz::Zero; - local_150++; + *sp_30 = cXyz::Zero; + sp_30++; } field_0x586 = 5; } diff --git a/src/d/actor/d_a_obj_kabuto.cpp b/src/d/actor/d_a_obj_kabuto.cpp index 35691d4cfde..937539f2220 100644 --- a/src/d/actor/d_a_obj_kabuto.cpp +++ b/src/d/actor/d_a_obj_kabuto.cpp @@ -512,7 +512,7 @@ void daObjKABUTO_c::Insect_Release() { } /* 80C2E1E0-80C2E1E4 0000D0 0002+02 1/2 0/0 0/0 .rodata l_kab_itemno */ -static u8 const l_kab_itemno[2] = {0xC0, 0xC1}; +static u8 const l_kab_itemno[2] = {fpcNm_ITEM_M_BEETLE, fpcNm_ITEM_F_BEETLE}; // Some unused function went here. // This fake function is here in its place to make the literals match diff --git a/src/d/actor/d_a_obj_kamakiri.cpp b/src/d/actor/d_a_obj_kamakiri.cpp index 229e4acf8b6..592ddfefa5c 100644 --- a/src/d/actor/d_a_obj_kamakiri.cpp +++ b/src/d/actor/d_a_obj_kamakiri.cpp @@ -520,7 +520,7 @@ void daObjKAM_c::Insect_Release() { field_0x980 = 1; } -static u8 const l_kam_itemno[2] = {0xCC, 0xCD}; +static u8 const l_kam_itemno[2] = {fpcNm_ITEM_M_MANTIS, fpcNm_ITEM_F_MANTIS}; f32 floatDummy() { return -9.0f; diff --git a/src/d/actor/d_a_obj_kuwagata.cpp b/src/d/actor/d_a_obj_kuwagata.cpp index 9f391cec6b1..614afc4dcc3 100644 --- a/src/d/actor/d_a_obj_kuwagata.cpp +++ b/src/d/actor/d_a_obj_kuwagata.cpp @@ -6,6 +6,7 @@ #include "d/actor/d_a_obj_kuwagata.h" #include "d/d_cc_d.h" #include "dol2asm.h" +#include "f_pc/f_pc_name.h" @@ -550,12 +551,9 @@ void daObjKUW_c::Insect_Release() { /* ############################################################################################## */ /* 80C4D548-80C4D54C 0000B8 0002+02 1/2 0/0 0/0 .rodata l_kuw_itemno */ -SECTION_RODATA static u16 const l_kuw_itemno[1 + 1 /* padding */] = { - 0xC4C5, - /* padding */ - 0x0000, +static u8 const l_kuw_itemno[2] = { + fpcNm_ITEM_M_STAG_BEETLE, fpcNm_ITEM_F_STAG_BEETLE, }; -COMPILER_STRIP_GATE(0x80C4D548, &l_kuw_itemno); /* 80C4D54C-80C4D550 0000BC 0004+00 0/0 0/0 0/0 .rodata @4438 */ #pragma push diff --git a/src/d/actor/d_a_obj_lv6bemos.cpp b/src/d/actor/d_a_obj_lv6bemos.cpp index 0cd94d3f972..37d25ae2773 100644 --- a/src/d/actor/d_a_obj_lv6bemos.cpp +++ b/src/d/actor/d_a_obj_lv6bemos.cpp @@ -21,7 +21,7 @@ enum Obj_lv6bm_RES_File_ID { /* BTK */ /* 0x11 */ BTK_EF_BIMOBEAM = 0x11, - /* 0x12 */ BTK_EF_BIMOBEAM_0FF, + /* 0x12 */ BTK_EF_BIMOBEAM_OFF, /* 0x13 */ BTK_EF_BIMOBEAM_ON, /* DZB */ @@ -194,12 +194,12 @@ int daObjL6Bm_c::CreateHeap() { } #ifdef DEBUG - pbtk = (J3DAnmTextureSRTKey*)dComIfG_getObjectRes(l_arcName, BTK_EF_BIMOBEAM_OFF); + pbtk = (J3DAnmTextureSRTKey*)dComIfG_getObjectRes(l_arcName, BTK_EF_BIMOBEAM_0FF); JUT_ASSERT(660, pbtk != 0); #endif pbtk = (J3DAnmTextureSRTKey*)dComIfG_getObjectRes(l_arcName, BTK_EF_BIMOBEAM); - JUT_ASSERT(0x29A, pbtk != 0); + JUT_ASSERT(666, pbtk != 0); mpBtkAnm2 = new mDoExt_btkAnm(); if (mpBtkAnm2 == NULL || mpBtkAnm2->init(modelData, pbtk, 1, 2, 1.0f, 0, -1) == 0) { return 0; @@ -328,7 +328,7 @@ void daObjL6Bm_c::actionFindPlayer() { setAction(0); if (field_0x891 != 0) { - mpBtkAnm->init(mBeamEffectModel->getModelData(), (J3DAnmTextureSRTKey*)dComIfG_getObjectRes(l_arcName, BTK_EF_BIMOBEAM_0FF), + mpBtkAnm->init(mBeamEffectModel->getModelData(), (J3DAnmTextureSRTKey*)dComIfG_getObjectRes(l_arcName, BTK_EF_BIMOBEAM_OFF), 1, 0, 1.0f, 0, -1); field_0x891 = 0; } diff --git a/src/d/actor/d_a_obj_lv6bemos2.cpp b/src/d/actor/d_a_obj_lv6bemos2.cpp index aa49f08c939..1b8de32e263 100644 --- a/src/d/actor/d_a_obj_lv6bemos2.cpp +++ b/src/d/actor/d_a_obj_lv6bemos2.cpp @@ -220,7 +220,7 @@ int daObjLv6Bm_c::Create() { #ifdef DEBUG if (mEyeMaterial == NULL) { - OS_REPORT("Lv6ビーモス:目のマテリアル<%s>がありません\n", l_eye_matName) // Lv6 Beamos: Eye material <%s> is not available. + OS_REPORT("Lv6ビーモス:目のマテリアル<%s>がありません\n", l_eye_matName); // Lv6 Beamos: Eye material <%s> is not available. return 0; } #endif diff --git a/src/d/actor/d_a_obj_nan.cpp b/src/d/actor/d_a_obj_nan.cpp index 81cf43917c8..d57827be52f 100644 --- a/src/d/actor/d_a_obj_nan.cpp +++ b/src/d/actor/d_a_obj_nan.cpp @@ -552,7 +552,7 @@ void daObjNAN_c::action() { /* ############################################################################################## */ /* 80CA3270-80CA3274 0000B4 0002+02 0/1 0/0 0/0 .rodata l_nan_itemno */ static u8 const l_nan_itemno[2] = { - 0xC8, 0xC9, + fpcNm_ITEM_M_NANAFUSHI, fpcNm_ITEM_F_NANAFUSHI, }; /* 80CA276C-80CA2904 0022AC 0198+00 1/1 0/0 0/0 .text execute__10daObjNAN_cFv */ diff --git a/src/d/actor/d_a_obj_poFire.cpp b/src/d/actor/d_a_obj_poFire.cpp index 1d738bc726e..13697aa1779 100644 --- a/src/d/actor/d_a_obj_poFire.cpp +++ b/src/d/actor/d_a_obj_poFire.cpp @@ -1,602 +1,418 @@ /** * @file d_a_obj_poFire.cpp - * -*/ + * + */ #include "d/actor/d_a_obj_poFire.h" -#include "dol2asm.h" - -// -// Forward References: -// - -extern "C" void __ct__14daPoFire_HIO_cFv(); -extern "C" void __dt__14mDoHIO_entry_cFv(); -extern "C" void setBaseMtx__10daPoFire_cFv(); -extern "C" void create__10daPoFire_cFv(); -extern "C" void Execute__10daPoFire_cFv(); -extern "C" void procMain__10daPoFire_cFv(); -extern "C" void setFire__10daPoFire_cFv(); -extern "C" void searchCandle__10daPoFire_cFPvPv(); -extern "C" void searchFireTag__10daPoFire_cFPvPv(); -extern "C" void init_modeInitMove__10daPoFire_cFv(); -extern "C" void modeInitMove__10daPoFire_cFv(); -extern "C" void modeWait__10daPoFire_cFv(); -extern "C" void init_modeWaitSetEffect__10daPoFire_cFv(); -extern "C" void modeWaitSetEffect__10daPoFire_cFv(); -extern "C" void init_modeMoveOut__10daPoFire_cFv(); -extern "C" void modeMoveOut__10daPoFire_cFv(); -extern "C" void init_modeMove__10daPoFire_cFv(); -extern "C" void modeMove__10daPoFire_cFv(); -extern "C" void init_modeMoveWait__10daPoFire_cFv(); -extern "C" void modeMoveWait__10daPoFire_cFv(); -extern "C" void modeNoMove__10daPoFire_cFv(); -extern "C" void init_modeOnFire__10daPoFire_cFv(); -extern "C" void modeOnFire__10daPoFire_cFv(); -extern "C" void init_modeFireEnd__10daPoFire_cFv(); -extern "C" void modeFireEnd__10daPoFire_cFv(); -extern "C" void eventStart__10daPoFire_cFv(); -extern "C" void eventRun__10daPoFire_cFv(); -extern "C" bool eventEnd__10daPoFire_cFv(); -extern "C" bool Draw__10daPoFire_cFv(); -extern "C" void Delete__10daPoFire_cFv(); -extern "C" static void daPoFire_Draw__FP10daPoFire_c(); -extern "C" static void daPoFire_Execute__FP10daPoFire_c(); -extern "C" static void daPoFire_Delete__FP10daPoFire_c(); -extern "C" static void daPoFire_Create__FP10fopAc_ac_c(); -extern "C" void __dt__14daPoFire_HIO_cFv(); -extern "C" void __sinit_d_a_obj_poFire_cpp(); -extern "C" static void func_80CB3DBC(); -extern "C" static void func_80CB3DC4(); -extern "C" static void func_80CB3DCC(); -extern "C" static void func_80CB3DD4(); -extern "C" void __dt__17dEvLib_callback_cFv(); -extern "C" bool eventStart__17dEvLib_callback_cFv(); -extern "C" bool eventRun__17dEvLib_callback_cFv(); -extern "C" bool eventEnd__17dEvLib_callback_cFv(); -extern "C" void getFirePos__12daPoCandle_cFv(); -extern "C" void __dt__10daPoFire_cFv(); -extern "C" extern char const* const d_a_obj_poFire__stringBase0; - -// -// External References: -// - -extern "C" void mDoMtx_ZXYrotM__FPA4_fsss(); -extern "C" void transM__14mDoMtx_stack_cFfff(); -extern "C" void __ct__10fopAc_ac_cFv(); -extern "C" void __dt__10fopAc_ac_cFv(); -extern "C" void fopAc_IsActor__FPv(); -extern "C" void fopAcIt_Judge__FPFPvPv_PvPv(); -extern "C" void fopAcM_setRoomLayer__FPvi(); -extern "C" void fopAcM_delete__FP10fopAc_ac_c(); -extern "C" void dComIfG_resLoad__FP30request_of_phase_process_classPCc(); -extern "C" void dComIfG_resDelete__FP30request_of_phase_process_classPCc(); -extern "C" void offFirstBit__21dSv_player_get_item_cFUc(); -extern "C" void setPtT__14dEvt_control_cFPv(); -extern "C" void getMyStaffId__16dEvent_manager_cFPCcP10fopAc_ac_ci(); -extern "C" void getMyActIdx__16dEvent_manager_cFiPCPCciii(); -extern "C" void cutEnd__16dEvent_manager_cFi(); -extern "C" void eventUpdate__17dEvLib_callback_cFv(); -extern "C" void orderEvent__17dEvLib_callback_cFiii(); -extern "C" void forceOnEventMove__Q213dPa_control_c7level_cFUl(); -extern "C" void getEmitter__Q213dPa_control_c7level_cFUl(); -extern "C" void -set__13dPa_control_cFUlUcUsPC4cXyzPC12dKy_tevstr_cPC5csXyzPC4cXyzUcP18dPa_levelEcallBackScPC8_GXColorPC8_GXColorPC4cXyzf(); -extern "C" void request__11dAttCatch_cFP10fopAc_ac_cUcfffsi(); -extern "C" void GroundCross__4cBgSFP11cBgS_GndChk(); -extern "C" void __ct__11dBgS_GndChkFv(); -extern "C" void __dt__11dBgS_GndChkFv(); -extern "C" void __pl__4cXyzCFRC3Vec(); -extern "C" void __mi__4cXyzCFRC3Vec(); -extern "C" void __ml__4cXyzCFf(); -extern "C" void SetPos__11cBgS_GndChkFPC4cXyz(); -extern "C" void cLib_addCalc__FPfffff(); -extern "C" void cLib_addCalcPos__FP4cXyzRC4cXyzfff(); -extern "C" void deleteAllParticle__14JPABaseEmitterFv(); -extern "C" void func_802807E0(); -extern "C" void __dl__FPv(); -extern "C" void __ptmf_scall(); -extern "C" void _savegpr_26(); -extern "C" void _savegpr_27(); -extern "C" void _restgpr_26(); -extern "C" void _restgpr_27(); -extern "C" u8 now__14mDoMtx_stack_c[48]; -extern "C" extern u8 g_dComIfG_gameInfo[122384]; -extern "C" u8 sincosTable___5JMath[65536]; -extern "C" u8 mParticleTracePCB__13dPa_control_c[4 + 4 /* padding */]; -extern "C" void __register_global_object(); - -// -// Declarations: -// +UNK_REL_DATA /* ############################################################################################## */ -/* 80CB3EEC-80CB3EF0 000000 0004+00 9/9 0/0 0/0 .rodata @3662 */ -SECTION_RODATA static f32 const lit_3662 = 1.0f; -COMPILER_STRIP_GATE(0x80CB3EEC, &lit_3662); -/* 80CB3EF0-80CB3EF4 000004 0004+00 0/1 0/0 0/0 .rodata @3663 */ -#pragma push -#pragma force_active on -SECTION_RODATA static f32 const lit_3663 = 10.0f; -COMPILER_STRIP_GATE(0x80CB3EF0, &lit_3663); -#pragma pop - -/* 80CB3EF4-80CB3EF8 000008 0004+00 0/1 0/0 0/0 .rodata @3664 */ -#pragma push -#pragma force_active on -SECTION_RODATA static f32 const lit_3664 = 5.0f; -COMPILER_STRIP_GATE(0x80CB3EF4, &lit_3664); -#pragma pop - -/* 80CB3EF8-80CB3EFC 00000C 0004+00 0/3 0/0 0/0 .rodata @3665 */ -#pragma push -#pragma force_active on -SECTION_RODATA static f32 const lit_3665 = 1.0f / 5.0f; -COMPILER_STRIP_GATE(0x80CB3EF8, &lit_3665); -#pragma pop - -/* 80CB3EFC-80CB3F00 000010 0004+00 0/1 0/0 0/0 .rodata @3666 */ -#pragma push -#pragma force_active on -SECTION_RODATA static f32 const lit_3666 = 6.0f; -COMPILER_STRIP_GATE(0x80CB3EFC, &lit_3666); -#pragma pop - -/* 80CB3F00-80CB3F04 000014 0004+00 0/1 0/0 0/0 .rodata @3667 */ -#pragma push -#pragma force_active on -SECTION_RODATA static f32 const lit_3667 = 40.0f; -COMPILER_STRIP_GATE(0x80CB3F00, &lit_3667); -#pragma pop - -/* 80CB3F04-80CB3F08 000018 0004+00 0/1 0/0 0/0 .rodata @3668 */ -#pragma push -#pragma force_active on -SECTION_RODATA static f32 const lit_3668 = 150.0f; -COMPILER_STRIP_GATE(0x80CB3F04, &lit_3668); -#pragma pop - -/* 80CB3F3C-80CB3F3C 000050 0000+00 0/0 0/0 0/0 .rodata @stringBase0 */ -#pragma push -#pragma force_active on -SECTION_DEAD static char const* const stringBase_80CB3F3C = "poFire"; -SECTION_DEAD static char const* const stringBase_80CB3F43 = "pofire"; -SECTION_DEAD static char const* const stringBase_80CB3F4A = "MOVE_END"; -#pragma pop - -/* 80CB3F54-80CB3F60 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, -}; - -/* 80CB3F60-80CB3F74 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 - -/* 80CB3F74-80CB3F80 -00001 000C+00 0/1 0/0 0/0 .data @3740 */ -#pragma push -#pragma force_active on -SECTION_DATA static void* lit_3740[3] = { - (void*)NULL, - (void*)0xFFFFFFFF, - (void*)modeInitMove__10daPoFire_cFv, -}; -#pragma pop - -/* 80CB3F80-80CB3F8C -00001 000C+00 0/1 0/0 0/0 .data @3741 */ -#pragma push -#pragma force_active on -SECTION_DATA static void* lit_3741[3] = { - (void*)NULL, - (void*)0xFFFFFFFF, - (void*)modeWait__10daPoFire_cFv, -}; -#pragma pop - -/* 80CB3F8C-80CB3F98 -00001 000C+00 0/1 0/0 0/0 .data @3742 */ -#pragma push -#pragma force_active on -SECTION_DATA static void* lit_3742[3] = { - (void*)NULL, - (void*)0xFFFFFFFF, - (void*)modeWaitSetEffect__10daPoFire_cFv, -}; -#pragma pop - -/* 80CB3F98-80CB3FA4 -00001 000C+00 0/1 0/0 0/0 .data @3743 */ -#pragma push -#pragma force_active on -SECTION_DATA static void* lit_3743[3] = { - (void*)NULL, - (void*)0xFFFFFFFF, - (void*)modeMoveOut__10daPoFire_cFv, -}; -#pragma pop - -/* 80CB3FA4-80CB3FB0 -00001 000C+00 0/1 0/0 0/0 .data @3744 */ -#pragma push -#pragma force_active on -SECTION_DATA static void* lit_3744[3] = { - (void*)NULL, - (void*)0xFFFFFFFF, - (void*)modeMove__10daPoFire_cFv, -}; -#pragma pop - -/* 80CB3FB0-80CB3FBC -00001 000C+00 0/1 0/0 0/0 .data @3745 */ -#pragma push -#pragma force_active on -SECTION_DATA static void* lit_3745[3] = { - (void*)NULL, - (void*)0xFFFFFFFF, - (void*)modeNoMove__10daPoFire_cFv, -}; -#pragma pop - -/* 80CB3FBC-80CB3FC8 -00001 000C+00 0/1 0/0 0/0 .data @3746 */ -#pragma push -#pragma force_active on -SECTION_DATA static void* lit_3746[3] = { - (void*)NULL, - (void*)0xFFFFFFFF, - (void*)modeMoveWait__10daPoFire_cFv, -}; -#pragma pop - -/* 80CB3FC8-80CB3FD4 -00001 000C+00 0/1 0/0 0/0 .data @3747 */ -#pragma push -#pragma force_active on -SECTION_DATA static void* lit_3747[3] = { - (void*)NULL, - (void*)0xFFFFFFFF, - (void*)modeOnFire__10daPoFire_cFv, -}; -#pragma pop - -/* 80CB3FD4-80CB3FE0 -00001 000C+00 0/1 0/0 0/0 .data @3748 */ -#pragma push -#pragma force_active on -SECTION_DATA static void* lit_3748[3] = { - (void*)NULL, - (void*)0xFFFFFFFF, - (void*)modeFireEnd__10daPoFire_cFv, -}; -#pragma pop - -/* 80CB3FE0-80CB404C 00008C 006C+00 0/1 0/0 0/0 .data mode_proc$3739 */ -#pragma push -#pragma force_active on -SECTION_DATA static u8 mode_proc[108] = { - 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 - -/* 80CB404C-80CB4050 -00001 0004+00 1/1 0/0 0/0 .data action_table$4176 */ -SECTION_DATA static void* action_table = (void*)(((char*)&d_a_obj_poFire__stringBase0) + 0xE); - -/* 80CB4050-80CB4070 -00001 0020+00 1/0 0/0 0/0 .data l_daPoFire_Method */ -static actor_method_class l_daPoFire_Method = { - (process_method_func)daPoFire_Create__FP10fopAc_ac_c, - (process_method_func)daPoFire_Delete__FP10daPoFire_c, - (process_method_func)daPoFire_Execute__FP10daPoFire_c, - 0, - (process_method_func)daPoFire_Draw__FP10daPoFire_c, -}; - -/* 80CB4070-80CB40A0 -00001 0030+00 0/0 0/0 1/0 .data g_profile_Obj_poFire */ -extern actor_process_profile_definition g_profile_Obj_poFire = { - fpcLy_CURRENT_e, // mLayerID - 7, // mListID - fpcPi_CURRENT_e, // mListPrio - PROC_Tag_Lv4Candle, // mProcName - &g_fpcLf_Method.base, // sub_method - sizeof(daPoFire_c), // mSize - 0, // mSizeOther - 0, // mParameters - &g_fopAc_Method.base, // sub_method - 540, // mPriority - &l_daPoFire_Method, // sub_method - 0x00044000, // mStatus - fopAc_ACTOR_e, // mActorType - fopAc_CULLBOX_CUSTOM_e, // cullType -}; - -/* 80CB40A0-80CB40D0 00014C 0030+00 2/2 0/0 0/0 .data __vt__10daPoFire_c */ -SECTION_DATA extern void* __vt__10daPoFire_c[12] = { - (void*)NULL /* RTTI */, - (void*)NULL, - (void*)NULL, - (void*)NULL, - (void*)func_80CB3DD4, - (void*)func_80CB3DCC, - (void*)func_80CB3DC4, - (void*)func_80CB3DBC, - (void*)__dt__10daPoFire_cFv, - (void*)eventStart__10daPoFire_cFv, - (void*)eventRun__10daPoFire_cFv, - (void*)eventEnd__10daPoFire_cFv, -}; - -/* 80CB40D0-80CB40E8 00017C 0018+00 3/3 0/0 0/0 .data __vt__17dEvLib_callback_c */ -SECTION_DATA extern void* __vt__17dEvLib_callback_c[6] = { - (void*)NULL /* RTTI */, - (void*)NULL, - (void*)__dt__17dEvLib_callback_cFv, - (void*)eventStart__17dEvLib_callback_cFv, - (void*)eventRun__17dEvLib_callback_cFv, - (void*)eventEnd__17dEvLib_callback_cFv, -}; - -/* 80CB40E8-80CB40F4 000194 000C+00 2/2 0/0 0/0 .data __vt__14daPoFire_HIO_c */ -SECTION_DATA extern void* __vt__14daPoFire_HIO_c[3] = { - (void*)NULL /* RTTI */, - (void*)NULL, - (void*)__dt__14daPoFire_HIO_cFv, -}; - -/* 80CB40F4-80CB4100 0001A0 000C+00 3/3 0/0 0/0 .data __vt__14mDoHIO_entry_c */ -SECTION_DATA extern void* __vt__14mDoHIO_entry_c[3] = { - (void*)NULL /* RTTI */, - (void*)NULL, - (void*)__dt__14mDoHIO_entry_cFv, -}; +/* 80CB4114-80CB4148 000014 0034+00 5/5 0/0 0/0 .bss l_HIO */ +static daPoFire_HIO_c l_HIO; /* 80CB294C-80CB29C4 0000EC 0078+00 1/1 0/0 0/0 .text __ct__14daPoFire_HIO_cFv */ daPoFire_HIO_c::daPoFire_HIO_c() { - // NONMATCHING + unk6 = 0x3C; + mWaitPeriod = 1.0f; + mWaitVertRange = 10.0f; + mWaitVertSpeed = 5.0f; + mMovePeriod1 = 0.2f; + mMoveSwingSpeed1 = 10.0f; + mMoveSpeed = 6.0f; + mMovePeriod2 = 1.0f; + mMoveSwingSpeed2 = 5.0f; + mMoveSwingRange = 40.0f; + mPickupRange = 150.0f; + mFireWaitTime = 20; } - -/* 80CB29C4-80CB2A0C 000164 0048+00 1/0 0/0 0/0 .text __dt__14mDoHIO_entry_cFv */ -// mDoHIO_entry_c::~mDoHIO_entry_c() { -extern "C" void __dt__14mDoHIO_entry_cFv() { - // NONMATCHING +#ifdef DEBUG +/* daPoFire_HIO_c::genMessage (JORMContext *) */ +void daPoFire_HIO_c::genMessage(JORMContext* mctx) { + mctx->genSlider("捕まえ範囲", &mPickupRange, 0.0f, 1000.0f, 0, NULL, 0xFFFF, 0xFFFF, 0x200, 24); + mctx->genLabel("\n", 0, 0, NULL, 0xFFFF, 0xFFFF, 0x200, 24); + mctx->genSlider("周期", &mWaitPeriod, 0.1f, 100.0f, 0, NULL, 0xFFFF, 0xFFFF, 0x200, 24); + mctx->genSlider("上下幅", &mWaitVertRange, 0.0f, 100.0f, 0, NULL, 0xFFFF, 0xFFFF, 0x200, 24); + mctx->genSlider("上下速度", &mWaitVertSpeed, 0.0f, 100.0f, 0, NULL, 0xFFFF, 0xFFFF, 0x200, 24); + mctx->genLabel("\n", 0, 0, NULL, 0xFFFF, 0xFFFF, 0x200, 24); + mctx->genSlider("周期", &mMovePeriod1, 0.1f, 100.0f, 0, NULL, 0xFFFF, 0xFFFF, 0x200, 24); + mctx->genSlider("移動速度", &mMoveSpeed, 0.0f, 100.0f, 0, NULL, 0xFFFF, 0xFFFF, 0x200, 24); + mctx->genSlider("揺らぎ速度", &mMoveSwingSpeed1, 0.0f, 100.0f, 0, NULL, 0xFFFF, 0xFFFF, 0x200, + 24); + mctx->genLabel("\n", 0, 0, NULL, 0xFFFF, 0xFFFF, 0x200, 24); + mctx->genSlider("周期", &mMovePeriod2, 0.1f, 100.0f, 0, NULL, 0xFFFF, 0xFFFF, 0x200, 24); + mctx->genSlider("揺らぎ速度", &mMoveSwingSpeed2, 0.0f, 100.0f, 0, NULL, 0xFFFF, 0xFFFF, 0x200, + 24); + mctx->genSlider("揺らぎ幅", &mMoveSwingRange, 0.0f, 100.0f, 0, NULL, 0xFFFF, 0xFFFF, 0x200, 24); + mctx->genLabel("\n", 0, 0, NULL, 0xFFFF, 0xFFFF, 0x200, 24); + mctx->genSlider("Fire Wait", &mFireWaitTime, 0, 0xFFU, 0, NULL, 0xFFFF, 0xFFFF, 0x200, 24); } +#endif /* 80CB2A0C-80CB2A74 0001AC 0068+00 2/2 0/0 0/0 .text setBaseMtx__10daPoFire_cFv */ void daPoFire_c::setBaseMtx() { - // NONMATCHING + mDoMtx_stack_c::transS(current.pos.x, current.pos.y, current.pos.z); + mDoMtx_stack_c::ZXYrotM(shape_angle.x, shape_angle.y, shape_angle.z); + mDoMtx_stack_c::transM(unk5F8.x, unk5F8.y, unk5F8.z); } /* ############################################################################################## */ -/* 80CB3F08-80CB3F0C 00001C 0004+00 1/2 0/0 0/0 .rodata itemNo */ -SECTION_RODATA static u32 const itemNo = 0xEFF0F1F2; -COMPILER_STRIP_GATE(0x80CB3F08, &itemNo); -/* 80CB3F0C-80CB3F10 000020 0004+00 4/9 0/0 0/0 .rodata @3726 */ -SECTION_RODATA static u8 const lit_3726[4] = { - 0x00, - 0x00, - 0x00, - 0x00, -}; -COMPILER_STRIP_GATE(0x80CB3F0C, &lit_3726); +/* 80CB3F08-80CB3F0C 00001C 0004+00 1/2 0/0 0/0 .rodata itemNo */ +static u8 const itemNo[4] = {fpcNm_ITEM_POU_FIRE1, fpcNm_ITEM_POU_FIRE2, fpcNm_ITEM_POU_FIRE3, + fpcNm_ITEM_POU_FIRE4}; /* 80CB2A74-80CB2BB8 000214 0144+00 1/1 0/0 0/0 .text create__10daPoFire_cFv */ -void daPoFire_c::create() { - // NONMATCHING +int daPoFire_c::create() { + fopAcM_SetupActor(this, daPoFire_c); + + int phase = dComIfG_resLoad(&mPhase, "poFire"); + if (phase != cPhs_COMPLEATE_e) { + return cPhs_INIT_e; + } + fopAcM_setRoomLayer(this, fopAcM_GetRoomNo(this)); + mActorID = getID(); + if (mActorID > 3 && mActorID != 0xFF) { + OS_REPORT("=== ポウ炎:IDが無効な値です ===\n"); + mActorID &= (u8)0x03; + } + dComIfGs_offItemFirstBit(itemNo[mActorID]); + unk5F4 = 0.0f; + unk5F8.x = 0.0f; + unk5F8.y = 0.0f; + unk5F8.z = 0.0f; + unk604 = 0; + unk590 = -1; + mMoveEnd = 0; + setBaseMtx(); + if (mActorID != 0xFF) { + init_modeInitMove(); + } else { + init_modeOnFire(); + } + +#ifdef DEBUG + l_HIO.entryHIO("ポウ炎"); +#endif + + return cPhs_COMPLEATE_e; } /* 80CB2BB8-80CB2BFC 000358 0044+00 1/1 0/0 0/0 .text Execute__10daPoFire_cFv */ -void daPoFire_c::Execute() { - // NONMATCHING +int daPoFire_c::Execute() { + eventUpdate(); + procMain(); + setBaseMtx(); + return 1; } /* ############################################################################################## */ -/* 80CB3F10-80CB3F14 000024 0004+00 1/1 0/0 0/0 .rodata @3756 */ -SECTION_RODATA static f32 const lit_3756 = 20.0f; -COMPILER_STRIP_GATE(0x80CB3F10, &lit_3756); - -/* 80CB4108-80CB4114 000008 000C+00 1/1 0/0 0/0 .bss @3656 */ -static u8 lit_3656[12]; - -/* 80CB4114-80CB4148 000014 0034+00 5/5 0/0 0/0 .bss l_HIO */ -static u8 l_HIO[52]; - -/* 80CB4148-80CB414C 000048 0004+00 1/1 0/0 0/0 .bss None */ -static u8 data_80CB4148[4]; - /* 80CB2BFC-80CB2D84 00039C 0188+00 1/1 0/0 0/0 .text procMain__10daPoFire_cFv */ void daPoFire_c::procMain() { - // NONMATCHING + static const daPoFire_c::modeProc mode_proc[9] = { + &daPoFire_c::modeInitMove, &daPoFire_c::modeWait, &daPoFire_c::modeWaitSetEffect, + &daPoFire_c::modeMoveOut, &daPoFire_c::modeMove, &daPoFire_c::modeNoMove, + &daPoFire_c::modeMoveWait, &daPoFire_c::modeOnFire, &daPoFire_c::modeFireEnd, + }; + + if (unk5C4) { + setFire(); + } + (this->*(mode_proc[mMode]))(); + attention_info.position = current.pos; + attention_info.position.y += 20.0f; } /* ############################################################################################## */ -/* 80CB3F14-80CB3F18 000028 0004+00 0/5 0/0 0/0 .rodata @3821 */ -#pragma push -#pragma force_active on -SECTION_RODATA static f32 const lit_3821 = 0.5f; -COMPILER_STRIP_GATE(0x80CB3F14, &lit_3821); -#pragma pop /* 80CB2D84-80CB2F68 000524 01E4+00 1/1 0/0 0/0 .text setFire__10daPoFire_cFv */ void daPoFire_c::setFire() { - // NONMATCHING + cXyz temp_r1(0.0f, 0.0f, 0.0f); + mDoMtx_stack_c::transS(unk5F8.x, unk5F8.y, unk5F8.z); + mDoMtx_stack_c::multVec(&temp_r1, &temp_r1); + + cXyz temp_r2 = current.pos + temp_r1; + unk5A0 = (temp_r2 - unk5AC) * 0.5f; + mParticleKeys[0] = dComIfGp_particle_set(mParticleKeys[0], 0x866D, &temp_r2, NULL, NULL); + mParticleKeys[1] = dComIfGp_particle_set(mParticleKeys[1], 0x869B, &temp_r2, NULL, NULL); + for (int i = 0; i < 2; i++) { + JPABaseEmitter* emitter = dComIfGp_particle_getEmitter(mParticleKeys[i]); + if (emitter != NULL) { + emitter->setParticleCallBackPtr(dPa_control_c::getParticleTracePCB()); + emitter->setUserWork((u32)&unk5A0); + } + } + unk5AC = temp_r2; } /* 80CB2F68-80CB2FD4 000708 006C+00 1/1 0/0 0/0 .text searchCandle__10daPoFire_cFPvPv */ -void daPoFire_c::searchCandle(void* param_0, void* param_1) { - // NONMATCHING +void* daPoFire_c::searchCandle(void* i_actor, void* i_this) { + daPoFire_c* _this = static_cast(i_this); + daPoCandle_c* _actor = static_cast(i_actor); + if (_actor != NULL && fopAcM_IsActor(_actor) && + fopAcM_GetProfName(_actor) == PROC_Obj_poCandle && + _this->mActorID == ((daPoCandle_c*)_actor)->getIDNum()) + { + return _actor; + } + return NULL; } /* 80CB2FD4-80CB3024 000774 0050+00 1/1 0/0 0/0 .text searchFireTag__10daPoFire_cFPvPv */ -void daPoFire_c::searchFireTag(void* param_0, void* param_1) { - // NONMATCHING +void* daPoFire_c::searchFireTag(void* i_actor, void* i_this) { + daPoFire_c* _this = static_cast(i_this); + daTagPoFire_c* _actor = static_cast(i_actor); + if (_actor != NULL && fopAcM_IsActor(_actor) && fopAcM_GetProfName(_actor) == PROC_Tag_poFire) { + return _actor; + } + return NULL; } /* 80CB3024-80CB30FC 0007C4 00D8+00 1/1 0/0 0/0 .text init_modeInitMove__10daPoFire_cFv */ void daPoFire_c::init_modeInitMove() { - // NONMATCHING + dBgS_GndChk gndchk; + gndchk.SetPos(¤t.pos); + mGroundY = dComIfG_Bgsp().GroundCross(&gndchk); + cXyz sp14(0.0f, 0.0f, 0.0f); + mDoMtx_stack_c::transS(unk5F8.x, unk5F8.y, unk5F8.z); + mDoMtx_stack_c::multVec(&sp14, &sp14); + unk5AC = current.pos + sp14; + unk5C4 = 1; + mMode = MODE_INIT_MOVE; } /* ############################################################################################## */ -/* 80CB3F18-80CB3F1C 00002C 0004+00 0/2 0/0 0/0 .rodata @3883 */ -#pragma push -#pragma force_active on -SECTION_RODATA static f32 const lit_3883 = 70.0f; -COMPILER_STRIP_GATE(0x80CB3F18, &lit_3883); -#pragma pop - -/* 80CB3F1C-80CB3F20 000030 0004+00 0/2 0/0 0/0 .rodata @3884 */ -#pragma push -#pragma force_active on -SECTION_RODATA static f32 const lit_3884 = 2.0f; -COMPILER_STRIP_GATE(0x80CB3F1C, &lit_3884); -#pragma pop /* 80CB30FC-80CB31FC 00089C 0100+00 1/0 0/0 0/0 .text modeInitMove__10daPoFire_cFv */ void daPoFire_c::modeInitMove() { - // NONMATCHING + f32 calc_res = cLib_addCalc(¤t.pos.y, mGroundY + 70.0f, 0.5f, 2.0f, 0.5f); + if (calc_res == 0.0f) { + unk5D4 = current.pos.y; + mpPoCandle = (daPoCandle_c*)fopAcM_Search((fopAcIt_JudgeFunc)searchCandle, this); + mpTagPoFire = (daTagPoFire_c*)fopAcM_Search((fopAcIt_JudgeFunc)searchFireTag, this); + if (mpPoCandle == NULL && mpTagPoFire == NULL) { + init_modeMoveOut(); + return; + } + if (mpTagPoFire != NULL) { + init_modeMoveOut(); + return; + } + if (mpPoCandle != NULL) { + if (unk590 != -1) { + orderEvent(0xFF, unk590, 1); + return; + } + init_modeMove(); + } + } +} + +// needed for .rodata ordering +static f32 dummy1() { + return -1.0f; } /* ############################################################################################## */ -/* 80CB3F20-80CB3F24 000034 0004+00 0/0 0/0 0/0 .rodata @3889 */ -#pragma push -#pragma force_active on -SECTION_RODATA static f32 const lit_3889 = -1.0f; -COMPILER_STRIP_GATE(0x80CB3F20, &lit_3889); -#pragma pop - -/* 80CB3F24-80CB3F28 000038 0004+00 0/1 0/0 0/0 .rodata @3915 */ -#pragma push -#pragma force_active on -SECTION_RODATA static f32 const lit_3915 = -70.0f; -COMPILER_STRIP_GATE(0x80CB3F24, &lit_3915); -#pragma pop - -/* 80CB3F28-80CB3F2C 00003C 0004+00 0/3 0/0 0/0 .rodata @3916 */ -#pragma push -#pragma force_active on -SECTION_RODATA static u32 const lit_3916 = 0x43360B61; -COMPILER_STRIP_GATE(0x80CB3F28, &lit_3916); -#pragma pop /* 80CB31FC-80CB32EC 00099C 00F0+00 1/0 0/0 0/0 .text modeWait__10daPoFire_cFv */ void daPoFire_c::modeWait() { - // NONMATCHING + if (eventInfo.checkCommandCatch()) { + init_modeWaitSetEffect(); + } else { + dComIfGp_att_CatchRequest(this, itemNo[mActorID], l_HIO.mPickupRange, 70.0f, -70.0f, 0x5000, + 1); + eventInfo.onCondition(dEvtCnd_40_e); + } + current.pos.y = unk5D4 + l_HIO.mWaitVertRange * cM_ssin(cM_deg2s(unk5D8 * l_HIO.mWaitPeriod)); + unk5D8 += l_HIO.mWaitVertSpeed; } /* 80CB32EC-80CB3380 000A8C 0094+00 1/1 0/0 0/0 .text init_modeWaitSetEffect__10daPoFire_cFv */ void daPoFire_c::init_modeWaitSetEffect() { - // NONMATCHING + for (int i = 0; i < 2; i++) { + JPABaseEmitter* emitter = dComIfGp_particle_getEmitter(mParticleKeys[i]); + if (emitter != NULL) { + emitter->deleteAllParticle(); + emitter->becomeInvalidEmitter(); + } + } + unk5C4 = 0; + mMode = MODE_WAIT_SET_EFFECT; } /* 80CB3380-80CB3540 000B20 01C0+00 1/0 0/0 0/0 .text modeWaitSetEffect__10daPoFire_cFv */ void daPoFire_c::modeWaitSetEffect() { - // NONMATCHING + JPABaseEmitter* emitter; + if (!daPy_getLinkPlayerActorClass()->getBottleMtx()) { + for (int i = 0; i < 2; i++) { + emitter = dComIfGp_particle_getEmitter(mParticleKeys[i]); + if (emitter != NULL) { + emitter->deleteAllParticle(); + emitter->becomeInvalidEmitter(); + } + } + fopAcM_delete(this); + return; + } + + mParticleKeys[0] = dComIfGp_particle_set(mParticleKeys[0], 0x866F, ¤t.pos, NULL, NULL); + mParticleKeys[1] = dComIfGp_particle_set(mParticleKeys[1], 0x866E, ¤t.pos, NULL, NULL); + + for (int i = 0; i < 2; i++) { + emitter = dComIfGp_particle_getEmitter(mParticleKeys[i]); + if (emitter != NULL) { + emitter->setGlobalRTMatrix(daPy_getLinkPlayerActorClass()->getBottleMtx()); + } + } } /* 80CB3540-80CB355C 000CE0 001C+00 1/1 0/0 0/0 .text init_modeMoveOut__10daPoFire_cFv */ void daPoFire_c::init_modeMoveOut() { - // NONMATCHING + unk5EC = 0.0f; + unk5F0 = 0.0f; + mMode = MODE_MOVE_OUT; } /* ############################################################################################## */ -/* 80CB3F2C-80CB3F30 000040 0004+00 0/2 0/0 0/0 .rodata @4039 */ -#pragma push -#pragma force_active on -SECTION_RODATA static f32 const lit_4039 = 100.0f; -COMPILER_STRIP_GATE(0x80CB3F2C, &lit_4039); -#pragma pop - -/* 80CB3F30-80CB3F34 000044 0004+00 0/2 0/0 0/0 .rodata @4040 */ -#pragma push -#pragma force_active on -SECTION_RODATA static f32 const lit_4040 = 1.0f / 100.0f; -COMPILER_STRIP_GATE(0x80CB3F30, &lit_4040); -#pragma pop /* 80CB355C-80CB3714 000CFC 01B8+00 1/0 0/0 0/0 .text modeMoveOut__10daPoFire_cFv */ void daPoFire_c::modeMoveOut() { - // NONMATCHING + unk5E8 = 1.0f + cM_ssin(cM_deg2s(unk5EC * l_HIO.mMovePeriod1)); + f32 temp_f31 = cLib_addCalcPos(¤t.pos, mpTagPoFire->current.pos, 1.0f, + l_HIO.mMoveSpeed * unk5E8, 0.5f); + unk5EC += l_HIO.mMoveSwingSpeed1; + if (temp_f31 < 100.0f) { + cLib_addCalc(&unk608, 0.0f, 0.5f, 0.2f, 0.01f); + } else { + unk608 = 1.0f; + } + unk5F8.x = l_HIO.mMoveSwingRange * unk608 * cM_ssin(cM_deg2s(unk5F0 * l_HIO.mMovePeriod2)); + unk5F8.y = l_HIO.mMoveSwingRange * unk608 * cM_ssin(cM_deg2s(unk5F0 * l_HIO.mMovePeriod2)); + unk5F0 += l_HIO.mMoveSwingSpeed2; + if (0.0f == temp_f31) { + mpTagPoFire->setFireFlag(1); + mMoveEnd = true; + unk5C4 = 0; + init_modeFireEnd(); + } } /* 80CB3714-80CB3730 000EB4 001C+00 2/2 0/0 0/0 .text init_modeMove__10daPoFire_cFv */ void daPoFire_c::init_modeMove() { - // NONMATCHING + unk5EC = 0.0f; + unk5F0 = 0.0f; + mMode = MODE_MOVE; } /* 80CB3730-80CB38EC 000ED0 01BC+00 1/0 0/0 0/0 .text modeMove__10daPoFire_cFv */ void daPoFire_c::modeMove() { - // NONMATCHING + unk5E8 = 1.0f + cM_ssin(cM_deg2s(unk5EC * l_HIO.mMovePeriod1)); + f32 temp_f31 = cLib_addCalcPos(¤t.pos, mpPoCandle->getFirePos(), 1.0f, + l_HIO.mMoveSpeed * unk5E8, 0.5f); + unk5EC += l_HIO.mMoveSwingSpeed1; + if (temp_f31 < 100.0f) { + cLib_addCalc(&unk608, 0.0f, 0.5f, 0.2f, 0.01f); + } else { + unk608 = 1.0f; + } + unk5F8.x = l_HIO.mMoveSwingRange * unk608 * cM_ssin(cM_deg2s(unk5F0 * l_HIO.mMovePeriod2)); + unk5F8.y = l_HIO.mMoveSwingRange * unk608 * cM_ssin(cM_deg2s(unk5F0 * l_HIO.mMovePeriod2)); + unk5F0 += l_HIO.mMoveSwingSpeed2; + if (0.0f == temp_f31) { + unk5F8.x = 0.0f; + unk5F8.y = 0.0f; + init_modeMoveWait(); + } } /* 80CB38EC-80CB3918 00108C 002C+00 1/1 0/0 0/0 .text init_modeMoveWait__10daPoFire_cFv */ void daPoFire_c::init_modeMoveWait() { - // NONMATCHING + mWaitTimer = l_HIO.mFireWaitTime; + mMoveEnd = true; + mpPoCandle->setFireFlag(1); + mMode = MODE_MOVE_WAIT; } /* 80CB3918-80CB3958 0010B8 0040+00 1/0 0/0 0/0 .text modeMoveWait__10daPoFire_cFv */ void daPoFire_c::modeMoveWait() { - // NONMATCHING + if (mWaitTimer != 0) { + mWaitTimer--; + return; + } + unk5C4 = 0; + init_modeFireEnd(); } /* ############################################################################################## */ -/* 80CB3F34-80CB3F38 000048 0004+00 0/1 0/0 0/0 .rodata @4107 */ -#pragma push -#pragma force_active on -SECTION_RODATA static f32 const lit_4107 = 300.0f; -COMPILER_STRIP_GATE(0x80CB3F34, &lit_4107); -#pragma pop /* 80CB3958-80CB39CC 0010F8 0074+00 1/0 0/0 0/0 .text modeNoMove__10daPoFire_cFv */ void daPoFire_c::modeNoMove() { - // NONMATCHING + f32 calc_res = cLib_addCalc(¤t.pos.y, mGroundY + 300.0f, 0.5f, 2.0f, 0.5f); + if (calc_res == 0.0f) { + unk5C4 = 0; + init_modeFireEnd(); + } } /* 80CB39CC-80CB39E0 00116C 0014+00 1/1 0/0 0/0 .text init_modeOnFire__10daPoFire_cFv */ void daPoFire_c::init_modeOnFire() { - // NONMATCHING + unk5C4 = 0; + mMode = MODE_ON_FIRE; } /* ############################################################################################## */ -/* 80CB3F38-80CB3F3C 00004C 0004+00 1/1 0/0 0/0 .rodata @4134 */ -SECTION_RODATA static f32 const lit_4134 = 3.5f; -COMPILER_STRIP_GATE(0x80CB3F38, &lit_4134); /* 80CB39E0-80CB3ADC 001180 00FC+00 1/0 0/0 0/0 .text modeOnFire__10daPoFire_cFv */ void daPoFire_c::modeOnFire() { - // NONMATCHING + cXyz sp8(3.5f, 3.5f, 3.5f); + mParticleKeys[0] = dComIfGp_particle_set(mParticleKeys[0], 0x8670, ¤t.pos, NULL, &sp8); + mParticleKeys[1] = dComIfGp_particle_set(mParticleKeys[1], 0x8671, ¤t.pos, NULL, &sp8); } /* 80CB3ADC-80CB3AE8 00127C 000C+00 3/3 0/0 0/0 .text init_modeFireEnd__10daPoFire_cFv */ void daPoFire_c::init_modeFireEnd() { - // NONMATCHING + mMode = MODE_FIRE_END; } /* 80CB3AE8-80CB3B70 001288 0088+00 1/0 0/0 0/0 .text modeFireEnd__10daPoFire_cFv */ void daPoFire_c::modeFireEnd() { - // NONMATCHING + for (int i = 0; i < 2; i++) { + JPABaseEmitter* emitter = dComIfGp_particle_getEmitter(mParticleKeys[i]); + if (emitter != NULL) { + emitter->deleteAllParticle(); + dComIfGp_particle_levelEmitterOnEventMove(mParticleKeys[i]); + } + } + fopAcM_delete(this); } /* 80CB3B70-80CB3BE0 001310 0070+00 2/1 0/0 0/0 .text eventStart__10daPoFire_cFv */ -void daPoFire_c::eventStart() { - // NONMATCHING +bool daPoFire_c::eventStart() { + mStaffID = dComIfGp_evmng_getMyStaffId("pofire", NULL, 0); + dComIfGp_event_setTalkPartner(mpPoCandle); + init_modeMove(); + return true; } /* 80CB3BE0-80CB3C64 001380 0084+00 2/1 0/0 0/0 .text eventRun__10daPoFire_cFv */ -void daPoFire_c::eventRun() { - // NONMATCHING +bool daPoFire_c::eventRun() { + static char* action_table[1] = { + "MOVE_END", + }; + + int staff_id = dComIfGp_evmng_getMyActIdx(mStaffID, action_table, 1, 0, 0); + switch (staff_id) { + case 0: + if (mMoveEnd) { + dComIfGp_evmng_cutEnd(mStaffID); + } + } + return true; } /* 80CB3C64-80CB3C6C 001404 0008+00 2/1 0/0 0/0 .text eventEnd__10daPoFire_cFv */ @@ -605,103 +421,85 @@ bool daPoFire_c::eventEnd() { } /* 80CB3C6C-80CB3C74 00140C 0008+00 1/1 0/0 0/0 .text Draw__10daPoFire_cFv */ -bool daPoFire_c::Draw() { - return true; +int daPoFire_c::Draw() { + return 1; } /* 80CB3C74-80CB3CA4 001414 0030+00 1/1 0/0 0/0 .text Delete__10daPoFire_cFv */ -void daPoFire_c::Delete() { - // NONMATCHING +int daPoFire_c::Delete() { + dComIfG_resDelete(&mPhase, "poFire"); + +#ifdef DEBUG + l_HIO.removeHIO(); +#endif + + return 1; } /* 80CB3CA4-80CB3CC4 001444 0020+00 1/0 0/0 0/0 .text daPoFire_Draw__FP10daPoFire_c */ -static void daPoFire_Draw(daPoFire_c* param_0) { - // NONMATCHING +static int daPoFire_Draw(daPoFire_c* i_this) { + return static_cast(i_this)->Draw(); } /* 80CB3CC4-80CB3CE4 001464 0020+00 1/0 0/0 0/0 .text daPoFire_Execute__FP10daPoFire_c */ -static void daPoFire_Execute(daPoFire_c* param_0) { - // NONMATCHING +static int daPoFire_Execute(daPoFire_c* i_this) { + return static_cast(i_this)->Execute(); } /* 80CB3CE4-80CB3D04 001484 0020+00 1/0 0/0 0/0 .text daPoFire_Delete__FP10daPoFire_c */ -static void daPoFire_Delete(daPoFire_c* param_0) { - // NONMATCHING +static int daPoFire_Delete(daPoFire_c* i_this) { + fopAcM_RegisterDeleteID(i_this, "daPoFire"); + return static_cast(i_this)->Delete(); } /* 80CB3D04-80CB3D24 0014A4 0020+00 1/0 0/0 0/0 .text daPoFire_Create__FP10fopAc_ac_c */ -static void daPoFire_Create(fopAc_ac_c* param_0) { - // NONMATCHING -} - -/* 80CB3D24-80CB3D80 0014C4 005C+00 2/1 0/0 0/0 .text __dt__14daPoFire_HIO_cFv */ -daPoFire_HIO_c::~daPoFire_HIO_c() { - // NONMATCHING -} - -/* 80CB3D80-80CB3DBC 001520 003C+00 0/0 1/0 0/0 .text __sinit_d_a_obj_poFire_cpp */ -void __sinit_d_a_obj_poFire_cpp() { - // NONMATCHING -} - -#pragma push -#pragma force_active on -REGISTER_CTORS(0x80CB3D80, __sinit_d_a_obj_poFire_cpp); -#pragma pop - -/* 80CB3DBC-80CB3DC4 00155C 0008+00 1/0 0/0 0/0 .text @1392@eventEnd__10daPoFire_cFv */ -static void func_80CB3DBC() { - // NONMATCHING -} - -/* 80CB3DC4-80CB3DCC 001564 0008+00 1/0 0/0 0/0 .text @1392@eventRun__10daPoFire_cFv */ -static void func_80CB3DC4() { - // NONMATCHING -} - -/* 80CB3DCC-80CB3DD4 00156C 0008+00 1/0 0/0 0/0 .text @1392@eventStart__10daPoFire_cFv */ -static void func_80CB3DCC() { - // NONMATCHING -} - -/* 80CB3DD4-80CB3DDC 001574 0008+00 1/0 0/0 0/0 .text @1392@__dt__10daPoFire_cFv */ -static void func_80CB3DD4() { - // NONMATCHING -} - -/* 80CB3DDC-80CB3E24 00157C 0048+00 1/0 0/0 0/0 .text __dt__17dEvLib_callback_cFv */ -// dEvLib_callback_c::~dEvLib_callback_c() { -extern "C" void __dt__17dEvLib_callback_cFv() { - // NONMATCHING -} - -/* 80CB3E24-80CB3E2C 0015C4 0008+00 1/0 0/0 0/0 .text eventStart__17dEvLib_callback_cFv - */ -// bool dEvLib_callback_c::eventStart() { -extern "C" bool eventStart__17dEvLib_callback_cFv() { - return true; -} - -/* 80CB3E2C-80CB3E34 0015CC 0008+00 1/0 0/0 0/0 .text eventRun__17dEvLib_callback_cFv */ -// bool dEvLib_callback_c::eventRun() { -extern "C" bool eventRun__17dEvLib_callback_cFv() { - return true; -} - -/* 80CB3E34-80CB3E3C 0015D4 0008+00 1/0 0/0 0/0 .text eventEnd__17dEvLib_callback_cFv */ -// bool dEvLib_callback_c::eventEnd() { -extern "C" bool eventEnd__17dEvLib_callback_cFv() { - return true; +static int daPoFire_Create(fopAc_ac_c* i_this) { + fopAcM_RegisterCreateID(daPoFire_c, i_this, "daPoFire"); + return a_this->create(); } /* 80CB3E3C-80CB3E58 0015DC 001C+00 1/1 0/0 0/0 .text getFirePos__12daPoCandle_cFv */ -void daPoCandle_c::getFirePos() { - // NONMATCHING +cXyz daPoCandle_c::getFirePos() { + return static_cast(mFirePos); } -/* 80CB3E58-80CB3ED8 0015F8 0080+00 2/1 0/0 0/0 .text __dt__10daPoFire_cFv */ -daPoFire_c::~daPoFire_c() { - // NONMATCHING -} +// Used to match data on debug, instead of UNK_REL_DATA +// #ifdef DEBUG +// const u8 cNullVec__6Z2Calc[12] = { \ +// 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, \ +// }; +// const u32 lit_1787[1 + 6 /* padding */] = { \ +// 0x02000201, \ +// 0x00000000, \ +// 0x7FF7FFFF, \ +// 0xFFFFFFFF, \ +// 0x7FF7FFFF, \ +// 0xFFFFFFFF, \ +// 0x7FBFFFFF, \ +// }; +// #endif -/* 80CB3F3C-80CB3F3C 000050 0000+00 0/0 0/0 0/0 .rodata @stringBase0 */ +/* 80CB4050-80CB4070 -00001 0020+00 1/0 0/0 0/0 .data l_daPoFire_Method */ +static actor_method_class l_daPoFire_Method = { + (process_method_func)daPoFire_Create, (process_method_func)daPoFire_Delete, + (process_method_func)daPoFire_Execute, NULL, + (process_method_func)daPoFire_Draw, +}; + +/* 80CB4070-80CB40A0 -00001 0030+00 0/0 0/0 1/0 .data g_profile_Obj_poFire */ +extern actor_process_profile_definition g_profile_Obj_poFire = { + fpcLy_CURRENT_e, // mLayerID + 7, // mListID + fpcPi_CURRENT_e, // mListPrio + PROC_Tag_Lv4Candle, // mProcName + &g_fpcLf_Method.base, // sub_method + sizeof(daPoFire_c), // mSize + 0, // mSizeOther + 0, // mParameters + &g_fopAc_Method.base, // sub_method + 540, // mPriority + &l_daPoFire_Method, // sub_method + 0x00044000, // mStatus + fopAc_ACTOR_e, // mActorType + fopAc_CULLBOX_CUSTOM_e, // cullType +}; diff --git a/src/d/actor/d_a_obj_timer.cpp b/src/d/actor/d_a_obj_timer.cpp index 9d649451c4c..5a0b2ed53b5 100644 --- a/src/d/actor/d_a_obj_timer.cpp +++ b/src/d/actor/d_a_obj_timer.cpp @@ -89,7 +89,7 @@ void daObjTimer::Act_c::mode_count() { } /* 804854BC-804855A4 00039C 00E8+00 1/1 0/0 0/0 .text _execute__Q210daObjTimer5Act_cFv */ -int daObjTimer::Act_c::_execute() { +bool daObjTimer::Act_c::_execute() { static daObjTimer::Act_c::modeProc const mode_proc[2] = { &daObjTimer::Act_c::mode_wait, &daObjTimer::Act_c::mode_count, @@ -97,10 +97,10 @@ int daObjTimer::Act_c::_execute() { if (fopAcM_isSwitch(this, prm_get_sw2Save())) { fopAcM_delete(this); - return 1; + return true; } else { (this->*mode_proc[field_0x568])(); - return 1; + return true; } } @@ -136,8 +136,8 @@ namespace { (process_method_func)Mthd_Create, (process_method_func)Mthd_Delete, (process_method_func)Mthd_Execute, - (process_method_func)Mthd_Draw, (process_method_func)Mthd_IsDelete, + (process_method_func)Mthd_Draw, }; } diff --git a/src/d/actor/d_a_obj_tobyhouse.cpp b/src/d/actor/d_a_obj_tobyhouse.cpp index 8a21e2b4f3f..1ce49ad76ed 100644 --- a/src/d/actor/d_a_obj_tobyhouse.cpp +++ b/src/d/actor/d_a_obj_tobyhouse.cpp @@ -4,400 +4,642 @@ */ #include "d/actor/d_a_obj_tobyhouse.h" -#include "dol2asm.h" +#include "d/actor/d_a_obj_carry.h" +#include "d/d_bg_w.h" +#include "d/d_com_inf_game.h" +#include "d/d_bomb.h" +#include "Z2AudioLib\Z2Instances.h" +#ifdef DEBUG +daObjTobyHouse_HIO_c l_HIO; +daObjTobyHouse_HIO_c::daObjTobyHouse_HIO_c() { + mShakingCycle = 800; + mShakingAmplitude = 20.0f; + mLODDistance = 20000.0f; + field_0x07 = 0; + mHawkeyeMediumLOD = 0; + mDrawCollision = 0; +} -// -// Forward References: -// +void daObjTobyHouse_HIO_c::genMessage(JORMContext* ctx) { + // Toby's Cannon Shed + ctx->genLabel("トビー大砲小屋", 0, 0, NULL, 0xffff, 0xffff, 0x200, 0x18); + ctx->genSlider("揺れ周期", &mShakingCycle, 0, 8000, 0, NULL, 0xffff, 0xffff, 0x200, 0x18); + ctx->genSlider("揺れ振幅", &mShakingAmplitude, 0.0f, 500.0f, 0, NULL, 0xffff, 0xffff, 0x200, + 0x18); + ctx->genSlider("LOD距離", &mLODDistance, 0.0f, 100000.0f, 0, NULL, 0xffff, 0xffff, 0x200, + 0x18); + ctx->genCheckBox("ホークアイ中LOD", &mHawkeyeMediumLOD, 1, 0, NULL, 0xffff, 0xffff, + 0x200, 0x18); + ctx->genCheckBox("コリジョン描画", &mDrawCollision, 1, 0, NULL, 0xffff, 0xffff, 0x200, + 0x18); +} +#endif -extern "C" static void s_b_sub__FPvPv(); -extern "C" static void nodeCallBack__FP8J3DJointi(); -extern "C" static void eventCallBack__FPvi(); -extern "C" void initBaseMtx__16daObjTobyHouse_cFv(); -extern "C" void setBaseMtx__16daObjTobyHouse_cFv(); -extern "C" void Create__16daObjTobyHouse_cFv(); -extern "C" void CreateHeap__16daObjTobyHouse_cFv(); -extern "C" void __dt__12J3DFrameCtrlFv(); -extern "C" void create1st__16daObjTobyHouse_cFv(); -extern "C" void Execute__16daObjTobyHouse_cFPPA3_A4_f(); -extern "C" void action__16daObjTobyHouse_cFv(); -extern "C" void actionWait__16daObjTobyHouse_cFv(); -extern "C" void actionOrderEvent__16daObjTobyHouse_cFv(); -extern "C" void actionEvent__16daObjTobyHouse_cFv(); -extern "C" void actionDead__16daObjTobyHouse_cFv(); -extern "C" void demoProc__16daObjTobyHouse_cFv(); -extern "C" void sceneChange__16daObjTobyHouse_cFv(); -extern "C" void Draw__16daObjTobyHouse_cFv(); -extern "C" void checkLODModel__16daObjTobyHouse_cFv(); -extern "C" void Delete__16daObjTobyHouse_cFv(); -extern "C" static void daObjTobyHouse_create1st__FP16daObjTobyHouse_c(); -extern "C" static void daObjTobyHouse_MoveBGDelete__FP16daObjTobyHouse_c(); -extern "C" static void daObjTobyHouse_MoveBGExecute__FP16daObjTobyHouse_c(); -extern "C" static void daObjTobyHouse_MoveBGDraw__FP16daObjTobyHouse_c(); -extern "C" void func_80D176E4(void* _this, u8*); -extern "C" void __dt__4cXyzFv(); -extern "C" extern char const* const d_a_obj_tobyhouse__stringBase0; - -// -// External References: -// - -extern "C" void mDoMtx_YrotS__FPA4_fs(); -extern "C" void mDoMtx_YrotM__FPA4_fs(); -extern "C" void mDoMtx_MtxToRot__FPA4_CfP5csXyz(); -extern "C" void ZXYrotM__14mDoMtx_stack_cFRC5csXyz(); -extern "C" void play__14mDoExt_baseAnmFv(); -extern "C" void init__13mDoExt_bckAnmFP15J3DAnmTransformiifssb(); -extern "C" void entry__13mDoExt_bckAnmFP12J3DModelDataf(); -extern "C" void mDoExt_modelUpdateDL__FP8J3DModel(); -extern "C" void mDoExt_setupShareTexture__FP12J3DModelDataP12J3DModelData(); -extern "C" void mDoExt_J3DModel__create__FP12J3DModelDataUlUl(); -extern "C" void fopAc_IsActor__FPv(); -extern "C" void fopAcIt_Judge__FPFPvPv_PvPv(); -extern "C" void fopAcM_delete__FP10fopAc_ac_c(); -extern "C" void fopAcM_setCullSizeBox2__FP10fopAc_ac_cP12J3DModelData(); -extern "C" void fopAcM_orderOtherEventId__FP10fopAc_ac_csUcUsUsUs(); -extern "C" void waterCheck__11fopAcM_wt_cFPC4cXyz(); -extern "C" void fpcEx_Search__FPFPvPv_PvPv(); -extern "C" void fpcSch_JudgeForPName__FPvPv(); -extern "C" void dStage_changeScene__FifUlScsi(); -extern "C" void getLayerNo__14dComIfG_play_cFi(); -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 dComIfGs_offOneZoneSwitch__Fii(); -extern "C" void dComIfGs_isOneZoneSwitch__Fii(); -extern "C" void onEventBit__11dSv_event_cFUs(); -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 getEventIdx__16dEvent_manager_cFP10fopAc_ac_cPCcUc(); -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 -set__13dPa_control_cFUcUsPC4cXyzPC12dKy_tevstr_cPC5csXyzPC4cXyzUcP18dPa_levelEcallBackScPC8_GXColorPC8_GXColorPC4cXyzf(); -extern "C" void StartShock__12dVibration_cFii4cXyz(); -extern "C" void StartQuake__12dVibration_cFii4cXyz(); -extern "C" void StopQuake__12dVibration_cFi(); -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 dCam_getAngleY__FP12camera_class(); -extern "C" void dCam_getAngleX__FP12camera_class(); -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__5csXyzFsss(); -extern "C" void cLib_addCalcAngleS__FPsssss(); -extern "C" void JPAGetXYZRotateMtx__FsssPA4_f(); -extern "C" void func_802807E0(); -extern "C" void seStart__7Z2SeMgrF10JAISoundIDPC3VecUlScffffUc(); -extern "C" void bgmStreamPrepare__8Z2SeqMgrFUl(); -extern "C" void bgmStreamPlay__8Z2SeqMgrFv(); -extern "C" void bgmStreamStop__8Z2SeqMgrFUl(); -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_22(); -extern "C" void _savegpr_23(); -extern "C" void _savegpr_26(); -extern "C" void _savegpr_29(); -extern "C" void _restgpr_22(); -extern "C" void _restgpr_23(); -extern "C" void _restgpr_26(); -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" u8 mCurrentMtx__6J3DSys[48]; -extern "C" u8 sincosTable___5JMath[65536]; -extern "C" f32 mWaterY__11fopAcM_wt_c[1 + 1 /* padding */]; -extern "C" u8 mAudioMgrPtr__10Z2AudioMgr[4 + 4 /* padding */]; -extern "C" void __register_global_object(); - -// -// Declarations: -// - -/* ############################################################################################## */ /* 80D1774C-80D17754 000000 0008+00 4/4 0/0 0/0 .rodata l_bmd */ -SECTION_RODATA static u8 const l_bmd[8] = { - 0x00, 0x00, 0x00, 0x0B, 0x00, 0x00, 0x00, 0x05, +static int const l_bmd[2] = { + 11, 5, }; -COMPILER_STRIP_GATE(0x80D1774C, &l_bmd); /* 80D17754-80D1775C 000008 0008+00 1/1 0/0 0/0 .rodata l_dzb */ -SECTION_RODATA static u8 const l_dzb[8] = { - 0x00, 0x00, 0x00, 0x0F, 0x00, 0x00, 0x00, 0x08, +static int const l_dzb[2] = { + 15, 8, }; -COMPILER_STRIP_GATE(0x80D17754, &l_dzb); /* 80D1775C-80D17764 000010 0008+00 0/1 0/0 0/0 .rodata l_LodBmd */ -#pragma push -#pragma force_active on -SECTION_RODATA static u8 const l_LodBmd[8] = { - 0x00, 0x00, 0x00, 0x0C, 0x00, 0x00, 0x00, 0x04, +static int const l_LodBmd[2] = { + 12, 4, }; -COMPILER_STRIP_GATE(0x80D1775C, &l_LodBmd); -#pragma pop /* 80D17764-80D17770 000018 000C+00 0/1 0/0 0/0 .rodata l_bck */ -#pragma push -#pragma force_active on -SECTION_RODATA static u8 const l_bck[12] = { - 0x00, 0x00, 0x00, 0x06, 0x00, 0x00, 0x00, 0x07, 0x00, 0x00, 0x00, 0x08, +static int const l_bck[3] = { + 6, 7, 8, }; -COMPILER_STRIP_GATE(0x80D17764, &l_bck); -#pragma pop - -/* 80D17770-80D17774 000024 0004+00 1/4 0/0 0/0 .rodata @4046 */ -SECTION_RODATA static u8 const lit_4046[4] = { - 0x00, - 0x00, - 0x00, - 0x00, -}; -COMPILER_STRIP_GATE(0x80D17770, &lit_4046); - -/* 80D17774-80D1777C 000028 0008+00 0/2 0/0 0/0 .rodata @4047 */ -#pragma push -#pragma force_active on -SECTION_RODATA static u8 const lit_4047[8] = { - 0x3F, 0xE0, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, -}; -COMPILER_STRIP_GATE(0x80D17774, &lit_4047); -#pragma pop - -/* 80D1777C-80D17784 000030 0008+00 0/2 0/0 0/0 .rodata @4048 */ -#pragma push -#pragma force_active on -SECTION_RODATA static u8 const lit_4048[8] = { - 0x40, 0x08, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, -}; -COMPILER_STRIP_GATE(0x80D1777C, &lit_4048); -#pragma pop - -/* 80D17784-80D1778C 000038 0008+00 0/2 0/0 0/0 .rodata @4049 */ -#pragma push -#pragma force_active on -SECTION_RODATA static u8 const lit_4049[8] = { - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, -}; -COMPILER_STRIP_GATE(0x80D17784, &lit_4049); -#pragma pop - -/* 80D1778C-80D17790 000040 0004+00 0/1 0/0 0/0 .rodata @4050 */ -#pragma push -#pragma force_active on -SECTION_RODATA static f32 const lit_4050 = 1000.0f; -COMPILER_STRIP_GATE(0x80D1778C, &lit_4050); -#pragma pop /* 80D15AAC-80D15DA8 0000EC 02FC+00 1/1 0/0 0/0 .text s_b_sub__FPvPv */ -static void s_b_sub(void* param_0, void* param_1) { - // NONMATCHING +static void* s_b_sub(void* i_actor, void* i_data) { + if (fopAcM_IsActor(i_actor)) { + fopAc_ac_c* data = (fopAc_ac_c*)i_data; + if (dBomb_c::checkBombActor((fopAc_ac_c*)i_actor)) { + dBomb_c* bomb = (dBomb_c*)i_actor; + if (bomb != NULL && data != NULL && + bomb->current.pos.absXZ((data)->current.pos) < 1000.0f) + { + bomb->deleteBombAndEffect(); + } + } else { + if (fopAcM_GetName(i_actor) == PROC_Obj_Carry) { + daObjCarry_c* carry = (daObjCarry_c*)i_actor; + if (carry != NULL && data != NULL && + carry->getType() == 2 && carry->current.pos.absXZ(data->current.pos) < 1000.0f) + { + fopAcM_delete(carry); + } + } + } + } + return NULL; } /* 80D15DA8-80D15E98 0003E8 00F0+00 1/1 0/0 0/0 .text nodeCallBack__FP8J3DJointi */ -static void nodeCallBack(J3DJoint* param_0, int param_1) { - // NONMATCHING +static int nodeCallBack(J3DJoint* i_joint, int i_jointNo) { + if (i_jointNo == 0) { + int jnt = i_joint->getJntNo(); + J3DModel* model = j3dSys.getModel(); + daObjTobyHouse_c* tobyHouse = (daObjTobyHouse_c*)model->getUserArea(); + if (jnt == tobyHouse->mBirlPJnt) { + cXyz local_40; + mDoMtx_multVecZero(model->getAnmMtx(jnt), &local_40); + mDoMtx_stack_c::YrotS(tobyHouse->field_0x5e0); + mDoMtx_stack_c::concat(model->getAnmMtx(jnt)); + mDoMtx_stack_c::get()[0][3] = local_40.x; + mDoMtx_stack_c::get()[1][3] = local_40.y; + mDoMtx_stack_c::get()[2][3] = local_40.z; + model->setAnmMtx(jnt, mDoMtx_stack_c::get()); + mDoMtx_copy(mDoMtx_stack_c::get(), J3DSys::mCurrentMtx); + } + } + return 1; } /* 80D15E98-80D15F0C 0004D8 0074+00 1/1 0/0 0/0 .text eventCallBack__FPvi */ -static void eventCallBack(void* param_0, int param_1) { - // NONMATCHING +static int eventCallBack(void* param_1, int param_2) { + if (param_1 != NULL) { + ((daObjTobyHouse_c*)param_1)->sceneChange(); + if (((daObjTobyHouse_c*)param_1)->field_0x5e4 == 0) { + dComIfGp_getVibration().StopQuake(0x1f); + Z2GetAudioMgr()->bgmStreamStop(0x1e); + ((daObjTobyHouse_c*)param_1)->field_0x5e4 = 1; + } + } + return 1; } /* 80D15F0C-80D15F48 00054C 003C+00 1/1 0/0 0/0 .text initBaseMtx__16daObjTobyHouse_cFv */ void daObjTobyHouse_c::initBaseMtx() { - // NONMATCHING + mModel->setBaseScale(scale); + setBaseMtx(); } /* 80D15F48-80D15FE0 000588 0098+00 2/2 0/0 0/0 .text setBaseMtx__16daObjTobyHouse_cFv */ void daObjTobyHouse_c::setBaseMtx() { - // NONMATCHING + mDoMtx_stack_c::transS(current.pos.x, + current.pos.y + mHeightOffset, + current.pos.z); + mDoMtx_stack_c::ZXYrotM(home.angle); + mModel->setBaseTRMtx(mDoMtx_stack_c::get()); + mLODModel->setBaseTRMtx(mDoMtx_stack_c::get()); + mDoMtx_stack_c::YrotM(field_0x5e0); + MTXCopy(mDoMtx_stack_c::get(), mBgMtx); } -/* ############################################################################################## */ -/* 80D17790-80D17794 000044 0004+00 1/1 0/0 0/0 .rodata @4193 */ -SECTION_RODATA static f32 const lit_4193 = 10.0f; -COMPILER_STRIP_GATE(0x80D17790, &lit_4193); - -/* 80D17794-80D17798 000048 0004+00 1/1 0/0 0/0 .rodata @4194 */ -SECTION_RODATA static f32 const lit_4194 = 200.0f; -COMPILER_STRIP_GATE(0x80D17794, &lit_4194); - -/* 80D177C0-80D177C0 000074 0000+00 0/0 0/0 0/0 .rodata @stringBase0 */ -#pragma push -#pragma force_active on -SECTION_DEAD static char const* const stringBase_80D177C0 = "M_THouse"; -SECTION_DEAD static char const* const stringBase_80D177C9 = "U_THouse"; -SECTION_DEAD static char const* const stringBase_80D177D2 = "thouse"; -SECTION_DEAD static char const* const stringBase_80D177D9 = "TOBY_HOUSE_FIRE_TO_RAKKA"; -SECTION_DEAD static char const* const stringBase_80D177F2 = "TOBY_HOUSE_FIRE_TO_DESERT"; -SECTION_DEAD static char const* const stringBase_80D1780C = "Birl_P"; -SECTION_DEAD static char const* const stringBase_80D17813 = "Birl_Cannon"; -#pragma pop - -/* 80D17858-80D17864 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, -}; - -/* 80D17864-80D17878 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 /* 80D17878-80D17880 -00001 0008+00 4/4 0/0 0/0 .data l_arcName */ -SECTION_DATA static void* l_arcName[2] = { - (void*)&d_a_obj_tobyhouse__stringBase0, - (void*)(((char*)&d_a_obj_tobyhouse__stringBase0) + 0x9), +static char* l_arcName[2] = { + "M_THouse", + "U_THouse", }; - /* 80D17880-80D17884 -00001 0004+00 1/1 0/0 0/0 .data l_staff_name */ -SECTION_DATA static void* l_staff_name = (void*)(((char*)&d_a_obj_tobyhouse__stringBase0) + 0x12); +static char* l_staff_name = "thouse"; /* 80D17884-80D1788C -00001 0008+00 1/1 0/0 0/0 .data l_event_name */ -SECTION_DATA static void* l_event_name[2] = { - (void*)(((char*)&d_a_obj_tobyhouse__stringBase0) + 0x19), - (void*)(((char*)&d_a_obj_tobyhouse__stringBase0) + 0x32), +static char* l_event_name[2] = { + "TOBY_HOUSE_FIRE_TO_RAKKA", + "TOBY_HOUSE_FIRE_TO_DESERT", }; /* 80D15FE0-80D161A4 000620 01C4+00 1/0 0/0 0/0 .text Create__16daObjTobyHouse_cFv */ -void daObjTobyHouse_c::Create() { - // NONMATCHING +int daObjTobyHouse_c::Create() { + fopAcM_setCullSizeFar(this, 10.0f); + cXyz cStack_24(current.pos); + cStack_24.y += 200.0f; + if (fopAcM_wt_c::waterCheck(&cStack_24)) { + current.pos.y = fopAcM_wt_c::getWaterY(); + } + fopAcM_SetMtx(this, mModel->getBaseTRMtx()); + fopAcM_setCullSizeBox2(this, mModel->getModelData()); + if (mType == TYPE_0) { + eventInfo.setArchiveName(l_arcName[mType]); + for (int i = 0; i < 2; i++) { + mEventIds[i] = (s16)dComIfGp_getEventManager().getEventIdx(this, l_event_name[i], 0xff); + + #ifdef DEBUG + if (mEventIds[i] == -1) { + // Cannon shed - failure to obtain event + OS_REPORT_ERROR("大砲小屋:イベント取得失敗\n"); + return 0; + } + #endif + } + JUTNameTab* nameTab = mModel->getModelData()->getJointTree().getJointName(); + mBirlPJnt = 0xffff; + mBirlCannonJnt = 0xffff; + for (u16 i = 0; i < mModel->getModelData()->getJointNum(); i++) { + if (strcmp(nameTab->getName(i), "Birl_P") == 0) { + mBirlPJnt = i; + } + if (strcmp(nameTab->getName(i), "Birl_Cannon") == 0) { + mBirlCannonJnt = i; + } + } + J3DJoint* jnt = mModel->getModelData()->getJointNodePointer(mBirlPJnt); + JUT_ASSERT(398, jnt != 0); + jnt->setCallBack(nodeCallBack); + mModel->setUserArea((u32)this); + + jnt = mModel->getModelData()->getJointNodePointer(mBirlCannonJnt); + JUT_ASSERT(406, jnt != 0); + } + initBaseMtx(); + return 1; } -/* ############################################################################################## */ -/* 80D17798-80D1779C 00004C 0004+00 0/1 0/0 0/0 .rodata @4251 */ -#pragma push -#pragma force_active on -SECTION_RODATA static f32 const lit_4251 = 1.0f; -COMPILER_STRIP_GATE(0x80D17798, &lit_4251); -#pragma pop +/* 80D161A4-80D163A8 0007E4 0204+00 1/0 0/0 0/0 .text CreateHeap__16daObjTobyHouse_cFv */ +int daObjTobyHouse_c::CreateHeap() { + J3DModelData* modelData = (J3DModelData*)dComIfG_getObjectRes(l_arcName[mType], l_bmd[mType]); + JUT_ASSERT(430, modelData != 0); + mModel = mDoExt_J3DModel__create(modelData, 0x80000, 0x11000084); + if (mModel == NULL) { + return 0; + } + if (mType == TYPE_0) { + for (int i = 0; i < 3; i++) { + J3DAnmTransform* pbck = + (J3DAnmTransform*)dComIfG_getObjectRes(l_arcName[mType], l_bck[i]); + JUT_ASSERT(447, pbck != 0); + mBcks[i] = new mDoExt_bckAnm(); + if (mBcks[i] == NULL || !mBcks[i]->init(pbck, 1, 0, 1.0, 0, -1, false)) { + return 0; + } + mBcks[i]->setPlaySpeed(0.0f); + } + } + modelData = (J3DModelData*)dComIfG_getObjectRes(l_arcName[mType], l_LodBmd[mType]); + JUT_ASSERT(462, modelData != 0); + J3DModelData* shareModelData = (J3DModelData*)dComIfG_getObjectRes(l_arcName[mType], l_bmd[mType]); + JUT_ASSERT(469, shareModelData != 0); + mDoExt_setupShareTexture(modelData, shareModelData); + mLODModel = mDoExt_J3DModel__create(modelData, 0x80000, 0x11000084); + if (mLODModel == NULL) { + return 0; + } -/* 80D177C0-80D177C0 000074 0000+00 0/0 0/0 0/0 .rodata @stringBase0 */ -#pragma push -#pragma force_active on -SECTION_DEAD static char const* const stringBase_80D1781F = "WAIT"; -SECTION_DEAD static char const* const stringBase_80D17824 = "CLOSE"; -SECTION_DEAD static char const* const stringBase_80D1782A = "CHANGE"; -SECTION_DEAD static char const* const stringBase_80D17831 = "HLIGHT"; -SECTION_DEAD static char const* const stringBase_80D17838 = "ROTATE"; -SECTION_DEAD static char const* const stringBase_80D1783F = "SCENE_CHG"; -SECTION_DEAD static char const* const stringBase_80D17849 = "EFF_LINE"; -#pragma pop + return 1; +} -/* 80D1788C-80D17898 -00001 000C+00 0/1 0/0 0/0 .data @4292 */ -#pragma push -#pragma force_active on -SECTION_DATA static void* lit_4292[3] = { - (void*)NULL, - (void*)0xFFFFFFFF, - (void*)actionWait__16daObjTobyHouse_cFv, -}; -#pragma pop +/* 80D163F0-80D164C0 000A30 00D0+00 1/1 0/0 0/0 .text create1st__16daObjTobyHouse_cFv */ +int daObjTobyHouse_c::create1st() { + if (dComIfG_play_c::getLayerNo(0) == 13) { + mType = TYPE_1; + } else { + mType = TYPE_0; + } + int rv = dComIfG_resLoad(&mPhase, l_arcName[mType]); + if (rv == cPhs_COMPLEATE_e) { + int heapSize; + if (mType == TYPE_0) { + heapSize = 0x12820; + } else { + heapSize = 0x10270; + } + rv = MoveBGCreate(l_arcName[mType], l_dzb[mType], dBgS_MoveBGProc_TypicalRotY, + heapSize, NULL); + if (rv == cPhs_ERROR_e) { + return rv; + } -/* 80D17898-80D178A4 -00001 000C+00 0/1 0/0 0/0 .data @4293 */ -#pragma push -#pragma force_active on -SECTION_DATA static void* lit_4293[3] = { - (void*)NULL, - (void*)0xFFFFFFFF, - (void*)actionOrderEvent__16daObjTobyHouse_cFv, -}; -#pragma pop + #ifdef DEBUG + // Toby's Cannon Shack + l_HIO.entryHIO("トビーの大砲小屋"); + #endif + } + return rv; +} -/* 80D178A4-80D178B0 -00001 000C+00 0/1 0/0 0/0 .data @4294 */ -#pragma push -#pragma force_active on -SECTION_DATA static void* lit_4294[3] = { - (void*)NULL, - (void*)0xFFFFFFFF, - (void*)actionEvent__16daObjTobyHouse_cFv, -}; -#pragma pop +/* 80D164C0-80D16560 000B00 00A0+00 1/0 0/0 0/0 .text Execute__16daObjTobyHouse_cFPPA3_A4_f */ +int daObjTobyHouse_c::Execute(Mtx** i_mtx) { + field_0x5c8++; + action(); + *i_mtx = &mBgMtx; + setBaseMtx(); + if (checkWater()) { + mHeightOffset = 20.0f * cM_scos(field_0x5c8 * 0x320); + } + shape_angle.y = home.angle.y + field_0x5e0; + return 1; +} -/* 80D178B0-80D178BC -00001 000C+00 0/1 0/0 0/0 .data @4295 */ -#pragma push -#pragma force_active on -SECTION_DATA static void* lit_4295[3] = { - (void*)NULL, - (void*)0xFFFFFFFF, - (void*)actionDead__16daObjTobyHouse_cFv, -}; -#pragma pop +UNK_REL_BSS -/* 80D178BC-80D178EC 000064 0030+00 0/1 0/0 0/0 .data l_func$4291 */ -#pragma push -#pragma force_active on -SECTION_DATA static u8 l_func[48] = { - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, -}; -#pragma pop +/* 80D16560-80D1661C 000BA0 00BC+00 1/1 0/0 0/0 .text action__16daObjTobyHouse_cFv */ +void daObjTobyHouse_c::action() { + static daObjTobyHouse_c::actionFunc l_func[4] = { + &daObjTobyHouse_c::actionWait, + &daObjTobyHouse_c::actionOrderEvent, + &daObjTobyHouse_c::actionEvent, + &daObjTobyHouse_c::actionDead, + }; -/* 80D178EC-80D17908 -00001 001C+00 1/1 0/0 0/0 .data action_table$4349 */ -SECTION_DATA static void* action_table[7] = { - (void*)(((char*)&d_a_obj_tobyhouse__stringBase0) + 0x5F), - (void*)(((char*)&d_a_obj_tobyhouse__stringBase0) + 0x64), - (void*)(((char*)&d_a_obj_tobyhouse__stringBase0) + 0x6A), - (void*)(((char*)&d_a_obj_tobyhouse__stringBase0) + 0x71), - (void*)(((char*)&d_a_obj_tobyhouse__stringBase0) + 0x78), - (void*)(((char*)&d_a_obj_tobyhouse__stringBase0) + 0x7F), - (void*)(((char*)&d_a_obj_tobyhouse__stringBase0) + 0x89), -}; + (this->*l_func[mAction])(); +} -/* 80D17908-80D17914 0000B0 000C+00 0/0 0/0 0/0 .data l_shotSmokeOffset$4354 */ -#pragma push -#pragma force_active on -SECTION_DATA static u8 l_shotSmokeOffset[12] = { - 0x00, 0x00, 0x00, 0x00, 0x45, 0x1C, 0x40, 0x00, 0xC4, 0x16, 0x00, 0x00, -}; -#pragma pop +/* 80D1661C-80D166E0 000C5C 00C4+00 1/0 0/0 0/0 .text actionWait__16daObjTobyHouse_cFv */ +void daObjTobyHouse_c::actionWait() { + if (dComIfGs_isOneZoneSwitch(5, 0xffffffff)) { + field_0x5e2 = 1; + } else { + if (dComIfGs_isOneZoneSwitch(6, 0xffffffff)) { + field_0x5e2 = 2; + } else { + field_0x5e2 = 0; + } + } + if (field_0x5e2 != 0) { + mEventIdIdx = field_0x5e2 - 1; + fopAcM_orderOtherEventId( + this, mEventIds[mEventIdIdx], 0xff, 0xffff, 0, 1); + eventInfo.onCondition(dEvtCnd_CANDEMO_e); + setAction(ACTION_ORDER_EVENT); + } +} -/* 80D17914-80D17930 -00001 001C+00 1/1 0/0 0/0 .data @4774 */ -SECTION_DATA static void* lit_4774[7] = { - (void*)(((char*)demoProc__16daObjTobyHouse_cFv) + 0x150), - (void*)(((char*)demoProc__16daObjTobyHouse_cFv) + 0x18C), - (void*)(((char*)demoProc__16daObjTobyHouse_cFv) + 0x21C), - (void*)(((char*)demoProc__16daObjTobyHouse_cFv) + 0x28C), - (void*)(((char*)demoProc__16daObjTobyHouse_cFv) + 0x4D0), - (void*)(((char*)demoProc__16daObjTobyHouse_cFv) + 0x4B8), - (void*)(((char*)demoProc__16daObjTobyHouse_cFv) + 0x4D0), -}; +/* 80D166E0-80D167BC 000D20 00DC+00 1/0 0/0 0/0 .text actionOrderEvent__16daObjTobyHouse_cFv */ +void daObjTobyHouse_c::actionOrderEvent() { + if (eventInfo.checkCommandDemoAccrpt()) { + fpcM_Search(s_b_sub, this); + Z2GetAudioMgr()->bgmStreamPrepare(0x2000023); + Z2GetAudioMgr()->bgmStreamPlay(); + mStaffId = dComIfGp_evmng_getMyStaffId(l_staff_name, 0, 0); + setAction(ACTION_EVENT); + } else { + fopAcM_orderOtherEventId(this, mEventIds[mEventIdIdx], 0xff, 0xffff, 0, 1); + eventInfo.onCondition(dEvtCnd_CANDEMO_e); + } +} + +/* 80D167BC-80D16860 000DFC 00A4+00 1/0 0/0 0/0 .text actionEvent__16daObjTobyHouse_cFv + */ +void daObjTobyHouse_c::actionEvent() { + if (dComIfGp_evmng_endCheck(mEventIds[mEventIdIdx])) { + dComIfGp_event_reset(); + dComIfGs_offOneZoneSwitch(5, 0xffffffff); + dComIfGs_offOneZoneSwitch(6, 0xffffffff); + setAction(ACTION_WAIT); + } else { + dComIfGp_getEvent().setSkipProc(this, eventCallBack, 0); + demoProc(); + } +} + +/* 80D16860-80D16864 000EA0 0004+00 1/0 0/0 0/0 .text actionDead__16daObjTobyHouse_cFv */ +void daObjTobyHouse_c::actionDead() {} + +/* 80D16864-80D171C0 000EA4 095C+00 2/1 0/0 0/0 .text demoProc__16daObjTobyHouse_cFv */ +void daObjTobyHouse_c::demoProc() { + static const char* action_table[7] = { + "WAIT", + "CLOSE", + "CHANGE", + "HLIGHT", + "ROTATE", + "SCENE_CHG", + "EFF_LINE", + }; + + daPy_py_c* player = daPy_getPlayerActorClass(); + static cXyz l_shotSmokeScale(8.0f, 8.0f, 8.0f); + static Vec l_shotSmokeOffset = {0.0f, 2500.0f, -600.0f}; + cXyz cStack_24; + csXyz cStack_98; + fopAcM_SearchByName(PROC_NPC_TOBY); + cXyz cStack_30(-600.0f, 70.0f, 380.0f); + camera_class* camera = dComIfGp_getCamera(dComIfGp_getPlayerCameraID(0)); + cXyz* pCamEye = fopCamM_GetEye_p(camera); + csXyz local_a0(dCam_getAngleX(camera), dCam_getAngleY(camera), 0); + int actIdx = dComIfGp_evmng_getMyActIdx(mStaffId, (char**)action_table, 7, 0, 0); + if (dComIfGp_evmng_getIsAddvance(mStaffId)) { + mDemoTimer = 0; + switch (actIdx) { + case 0: { + int* pTimer = dComIfGp_evmng_getMyIntegerP(mStaffId, "Timer"); + if (pTimer == NULL) { + field_0x5de = 1; + } else { + field_0x5de = *pTimer; + } + break; + } + case 1: + field_0x5e3 = 0; + mActiveBck = mBcks[0]; + mActiveBck->setPlaySpeed(1.0f); + mActiveBck->setFrame(0.0f); + fopAcM_seStart(this, Z2SE_OBJ_THOUSE_CLOSE, 0); + dComIfGs_onEventBit(dSv_event_flag_c::saveBitLabels[161]); + break; + case 2: + mActiveBck = mBcks[1]; + mActiveBck->setPlaySpeed(1.0f); + mActiveBck->setFrame(0.0f); + fopAcM_seStart(this, Z2SE_OBJ_THOUSE_CHANGE, 0); + break; + case 3: + mActiveBck = mBcks[2]; + mActiveBck->setPlaySpeed(1.0f); + mActiveBck->setFrame(0.0f); + fopAcM_seStart(this, Z2SE_OBJ_THOUSE_HLIGHT, 0); + mDoMtx_stack_c::copy(mModel->getAnmMtx(mBirlCannonJnt)); + mDoMtx_stack_c::multVecZero(&cStack_24); + mDoMtx_MtxToRot(mModel->getAnmMtx(mBirlCannonJnt), &cStack_98); + field_0x5f0 = dComIfGp_particle_set(0x86f7, &cStack_24, &cStack_98, &l_shotSmokeScale); + field_0x5f8 = dComIfGp_particle_set(0x8735, &cStack_24, &cStack_98, &l_shotSmokeScale); + cStack_98 = home.angle; + cStack_98.y += field_0x5e0; + field_0x5f4 = dComIfGp_particle_set(0x86f8, &cStack_24, &cStack_98, &l_shotSmokeScale); + if (field_0x5f0 != NULL) { + field_0x5f0->becomeImmortalEmitter(); + } + if (field_0x5f4 != NULL) { + field_0x5f4->becomeImmortalEmitter(); + } + if (field_0x5f8 != NULL) { + field_0x5f8->becomeImmortalEmitter(); + } + break; + case 4: + break; + case 5: + player->offPlayerNoDraw(); + player->offPlayerShadowNoDraw(); + break; + case 6: + break; + } + } + mDemoTimer++; + + switch (actIdx) { + case 0: + if (cLib_calcTimer(&field_0x5de) == 0) { + dComIfGp_evmng_cutEnd(mStaffId); + } + break; + case 1: + mActiveBck->play(); + if (mDemoTimer == 0x17) { + player->onPlayerNoDraw(); + player->onPlayerShadowNoDraw(); + dComIfGp_getVibration().StartShock(5, 1, cXyz(0.0f, 1.0f, 0.0f)); + } + + if (mDemoTimer == 0x50) { + mActiveBck->setFrame(mActiveBck->getEndFrame()); + dComIfGp_evmng_cutEnd(mStaffId); + } + break; + case 2: + if (mActiveBck->play()) { + dComIfGp_evmng_cutEnd(mStaffId); + } + + if (field_0x5e2 == 2) { + cLib_addCalcAngleS(&field_0x5e0, 0x6000, 0xfa, 200, 0x46); + } + + if (mDemoTimer == 9) { + dComIfGp_getVibration().StartShock(5, 1, cXyz(0.0f, 1.0f, 0.0f)); + } else if (mDemoTimer == 0x122) { + dComIfGp_getVibration().StartShock(3, 1, cXyz(0.0f, 1.0f, 0.0f)); + } else if (mDemoTimer == 0x41) { + dComIfGp_getVibration().StartQuake(1, 1, cXyz(0.0f, 1.0f, 0.0f)); + } else if (mDemoTimer == 0x96) { + dComIfGp_getVibration().StartQuake(2, 1, cXyz(0.0f, 1.0f, 0.0f)); + } else if (mDemoTimer == 0xd0) { + dComIfGp_getVibration().StartShock(5, 1, cXyz(0.0f, 1.0f, 0.0f)); + } else if (mDemoTimer == 0xd7) { + dComIfGp_getVibration().StartQuake(2, 1, cXyz(0.0f, 1.0f, 0.0f)); + } else if (mDemoTimer == 0x113) { + dComIfGp_getVibration().StopQuake(0x1f); + } + break; + case 3: + mActiveBck->play(); + if (mDemoTimer == 0xf) { + field_0x5fc = dComIfGp_particle_set(0x874e, pCamEye, &tevStr, &local_a0, 0); + mDoAud_seStart(Z2SE_AL_V_CANON_JUMP, 0, 0, 0); + OS_REPORT("集中線エフェクトセット!\n"); + } else if (mDemoTimer == 8) { + dComIfGp_getVibration().StartShock(8, 0x1f, cXyz(0.0f, 1.0f, 0.0f)); + } else if (mDemoTimer > 45) { + sceneChange(); + } + break; + case 5: + sceneChange(); + break; + case 4: + dComIfGp_evmng_cutEnd(mStaffId); + break; + default: + dComIfGp_evmng_cutEnd(mStaffId); + break; + } + + if (field_0x5f0 != NULL) { + field_0x5f0->setGlobalRTMatrix(mModel->getAnmMtx(mBirlCannonJnt)); + } + + if (field_0x5f4 != NULL) { + field_0x5f4->setGlobalRTMatrix(mModel->getAnmMtx(mBirlCannonJnt)); + } + + if (field_0x5f8 != NULL) { + field_0x5f8->setGlobalRTMatrix(mModel->getAnmMtx(mBirlCannonJnt)); + } + if (field_0x5fc != NULL) { + JGeometry::TVec3 aTStack_a8; + aTStack_a8.x = local_a0.x; + aTStack_a8.y = local_a0.y; + aTStack_a8.z = local_a0.z; + field_0x5fc->setGlobalTranslation(pCamEye->x, pCamEye->y, pCamEye->z); + field_0x5fc->setGlobalRotation(aTStack_a8); + } +} + +/* 80D171C0-80D17230 001800 0070+00 2/2 0/0 0/0 .text sceneChange__16daObjTobyHouse_cFv + */ +void daObjTobyHouse_c::sceneChange() { + u8 exitId = 3; + switch (field_0x5e2) { + case 1: + exitId = 0; + break; + case 2: + exitId = 3; + break; + default: + JUT_PANIC(936, "0"); + } + + dStage_changeScene(exitId, 0.0f, 0, fopAcM_GetRoomNo(this), 0, -1); +} + +/* 80D17230-80D17374 001870 0144+00 1/0 0/0 0/0 .text Draw__16daObjTobyHouse_cFv */ +int daObjTobyHouse_c::Draw() { + g_env_light.settingTevStruct(0x10, ¤t.pos, &tevStr); + if (checkLODModel()) { + g_env_light.setLightTevColorType_MAJI(mLODModel, &tevStr); + dComIfGd_setListBG(); + mDoExt_modelUpdateDL(mLODModel); + dComIfGd_setList(); + } else { + g_env_light.setLightTevColorType_MAJI(mModel, &tevStr); + if (mActiveBck != NULL) { + mActiveBck->entry(mModel->getModelData()); + } + dComIfGd_setListBG(); + mDoExt_modelUpdateDL(mModel); + dComIfGd_setList(); + mDoExt_bckAnmRemove(mModel->getModelData()); + } + + #ifdef DEBUG + if (l_HIO.mDrawCollision) { + mpBgW->CalcPlane(); + } + #endif + + return 1; +} + +/* 80D17374-80D174F8 0019B4 0184+00 1/1 0/0 0/0 .text checkLODModel__16daObjTobyHouse_cFv + */ +BOOL daObjTobyHouse_c::checkLODModel() { + if (dComIfGp_event_runCheck()) { + return FALSE; + } + + if (dComIfGp_checkPlayerStatus0(0, 0x200000)) { + return FALSE; + } + + camera_class* camera = dComIfGp_getCamera(dComIfGp_getPlayerCameraID(0)); + if (camera != NULL && fopCamM_GetEye_p(camera)->abs(current.pos) > 20000.0f) { + return TRUE; + } + + return FALSE; +} + +/* 80D174F8-80D17618 001B38 0120+00 1/0 0/0 0/0 .text Delete__16daObjTobyHouse_cFv */ +int daObjTobyHouse_c::Delete() { + if (field_0x5f0 != NULL) { + field_0x5f0->becomeInvalidEmitter(); + field_0x5f0->quitImmortalEmitter(); + field_0x5f0 = NULL; + } + + if (field_0x5f4 != NULL) { + field_0x5f4->becomeInvalidEmitter(); + field_0x5f4->quitImmortalEmitter(); + field_0x5f4 = NULL; + } + + if (field_0x5f8 != NULL) { + field_0x5f8->becomeInvalidEmitter(); + field_0x5f8->quitImmortalEmitter(); + field_0x5f8 = NULL; + } + + if (field_0x5fc != NULL) { + field_0x5fc->becomeInvalidEmitter(); + field_0x5fc->quitImmortalEmitter(); + field_0x5fc = NULL; + } + + dComIfG_resDelete(&mPhase, l_arcName[mType]); + + #ifdef DEBUG + l_HIO.removeHIO(); + #endif + return 1; +} + +/* 80D17618-80D17678 001C58 0060+00 1/0 0/0 0/0 .text + * daObjTobyHouse_create1st__FP16daObjTobyHouse_c */ +static int daObjTobyHouse_create1st(daObjTobyHouse_c* i_this) { + fopAcM_SetupActor(i_this, daObjTobyHouse_c); + return i_this->create1st(); +} + +/* 80D17678-80D17698 001CB8 0020+00 1/0 0/0 0/0 .text + * daObjTobyHouse_MoveBGDelete__FP16daObjTobyHouse_c */ +static int daObjTobyHouse_MoveBGDelete(daObjTobyHouse_c* i_this) { + return i_this->MoveBGDelete(); +} + +/* 80D17698-80D176B8 001CD8 0020+00 1/0 0/0 0/0 .text + * daObjTobyHouse_MoveBGExecute__FP16daObjTobyHouse_c */ +static int daObjTobyHouse_MoveBGExecute(daObjTobyHouse_c* i_this) { + return i_this->MoveBGExecute(); +} + +/* 80D176B8-80D176E4 001CF8 002C+00 1/0 0/0 0/0 .text + * daObjTobyHouse_MoveBGDraw__FP16daObjTobyHouse_c */ +static int daObjTobyHouse_MoveBGDraw(daObjTobyHouse_c* i_this) { + return i_this->MoveBGDraw(); +} /* 80D17930-80D17950 -00001 0020+00 1/0 0/0 0/0 .data daObjTobyHouse_METHODS */ static actor_method_class daObjTobyHouse_METHODS = { - (process_method_func)daObjTobyHouse_create1st__FP16daObjTobyHouse_c, - (process_method_func)daObjTobyHouse_MoveBGDelete__FP16daObjTobyHouse_c, - (process_method_func)daObjTobyHouse_MoveBGExecute__FP16daObjTobyHouse_c, - 0, - (process_method_func)daObjTobyHouse_MoveBGDraw__FP16daObjTobyHouse_c, + (process_method_func)daObjTobyHouse_create1st, + (process_method_func)daObjTobyHouse_MoveBGDelete, + (process_method_func)daObjTobyHouse_MoveBGExecute, + NULL, + (process_method_func)daObjTobyHouse_MoveBGDraw, }; /* 80D17950-80D17980 -00001 0030+00 0/0 0/0 1/0 .data g_profile_Obj_TobyHouse */ @@ -418,476 +660,6 @@ extern actor_process_profile_definition g_profile_Obj_TobyHouse = { fopAc_CULLBOX_CUSTOM_e, // cullType }; -/* 80D17980-80D1798C 000128 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, -}; - -/* 80D161A4-80D163A8 0007E4 0204+00 1/0 0/0 0/0 .text CreateHeap__16daObjTobyHouse_cFv */ -void daObjTobyHouse_c::CreateHeap() { - // NONMATCHING -} - -/* 80D163A8-80D163F0 0009E8 0048+00 1/0 0/0 0/0 .text __dt__12J3DFrameCtrlFv */ -// J3DFrameCtrl::~J3DFrameCtrl() { -extern "C" void __dt__12J3DFrameCtrlFv() { - // NONMATCHING -} - -/* 80D163F0-80D164C0 000A30 00D0+00 1/1 0/0 0/0 .text create1st__16daObjTobyHouse_cFv */ -void daObjTobyHouse_c::create1st() { - // NONMATCHING -} - -/* ############################################################################################## */ -/* 80D1779C-80D177A0 000050 0004+00 1/1 0/0 0/0 .rodata @4287 */ -SECTION_RODATA static f32 const lit_4287 = 20.0f; -COMPILER_STRIP_GATE(0x80D1779C, &lit_4287); - -/* 80D164C0-80D16560 000B00 00A0+00 1/0 0/0 0/0 .text Execute__16daObjTobyHouse_cFPPA3_A4_f */ -void daObjTobyHouse_c::Execute(f32 (**param_0)[3][4]) { - // NONMATCHING -} - -/* ############################################################################################## */ -/* 80D179C0-80D179C4 000008 0001+03 1/1 0/0 0/0 .bss @1109 */ -static u8 lit_1109[1 + 3 /* padding */]; - -/* 80D179C4-80D179C8 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 - -/* 80D179C8-80D179CC 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 - -/* 80D179CC-80D179D0 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 - -/* 80D179D0-80D179D4 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 - -/* 80D179D4-80D179D8 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 - -/* 80D179D8-80D179DC 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 - -/* 80D179DC-80D179E0 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 - -/* 80D179E0-80D179E4 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 - -/* 80D179E4-80D179E8 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 - -/* 80D179E8-80D179EC 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 - -/* 80D179EC-80D179F0 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 - -/* 80D179F0-80D179F4 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 - -/* 80D179F4-80D179F8 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 - -/* 80D179F8-80D179FC 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 - -/* 80D179FC-80D17A00 -00001 0004+00 1/1 0/0 0/0 .bss None */ -/* 80D179FC 0001+00 data_80D179FC @1009 */ -/* 80D179FD 0003+00 data_80D179FD None */ -static u8 struct_80D179FC[4]; - -/* 80D16560-80D1661C 000BA0 00BC+00 1/1 0/0 0/0 .text action__16daObjTobyHouse_cFv */ -void daObjTobyHouse_c::action() { - // NONMATCHING -} - -/* 80D1661C-80D166E0 000C5C 00C4+00 1/0 0/0 0/0 .text actionWait__16daObjTobyHouse_cFv */ -void daObjTobyHouse_c::actionWait() { - // NONMATCHING -} - -/* 80D166E0-80D167BC 000D20 00DC+00 1/0 0/0 0/0 .text actionOrderEvent__16daObjTobyHouse_cFv */ -void daObjTobyHouse_c::actionOrderEvent() { - // NONMATCHING -} - -/* 80D167BC-80D16860 000DFC 00A4+00 1/0 0/0 0/0 .text actionEvent__16daObjTobyHouse_cFv - */ -void daObjTobyHouse_c::actionEvent() { - // NONMATCHING -} - -/* 80D16860-80D16864 000EA0 0004+00 1/0 0/0 0/0 .text actionDead__16daObjTobyHouse_cFv */ -void daObjTobyHouse_c::actionDead() { - /* empty function */ -} - -/* ############################################################################################## */ -/* 80D177A0-80D177A4 000054 0004+00 0/1 0/0 0/0 .rodata @4769 */ -#pragma push -#pragma force_active on -SECTION_RODATA static f32 const lit_4769 = 8.0f; -COMPILER_STRIP_GATE(0x80D177A0, &lit_4769); -#pragma pop - -/* 80D177A4-80D177A8 000058 0004+00 0/1 0/0 0/0 .rodata @4770 */ -#pragma push -#pragma force_active on -SECTION_RODATA static f32 const lit_4770 = -600.0f; -COMPILER_STRIP_GATE(0x80D177A4, &lit_4770); -#pragma pop - -/* 80D177A8-80D177AC 00005C 0004+00 0/1 0/0 0/0 .rodata @4771 */ -#pragma push -#pragma force_active on -SECTION_RODATA static f32 const lit_4771 = 70.0f; -COMPILER_STRIP_GATE(0x80D177A8, &lit_4771); -#pragma pop - -/* 80D177AC-80D177B0 000060 0004+00 0/1 0/0 0/0 .rodata @4772 */ -#pragma push -#pragma force_active on -SECTION_RODATA static f32 const lit_4772 = 380.0f; -COMPILER_STRIP_GATE(0x80D177AC, &lit_4772); -#pragma pop - -/* 80D177C0-80D177C0 000074 0000+00 0/0 0/0 0/0 .rodata @stringBase0 */ -#pragma push -#pragma force_active on -SECTION_DEAD static char const* const stringBase_80D17852 = "Timer"; -#pragma pop - -/* 80D17A00-80D17A10 000048 000C+04 0/1 0/0 0/0 .bss @4351 */ -#pragma push -#pragma force_active on -static u8 lit_4351[12 + 4 /* padding */]; -#pragma pop - -/* 80D17A10-80D17A1C 000058 000C+00 0/1 0/0 0/0 .bss l_shotSmokeScale$4350 */ -#pragma push -#pragma force_active on -static u8 l_shotSmokeScale[12]; -#pragma pop - -/* 80D16864-80D171C0 000EA4 095C+00 2/1 0/0 0/0 .text demoProc__16daObjTobyHouse_cFv */ -void daObjTobyHouse_c::demoProc() { - // NONMATCHING -} - -/* 80D171C0-80D17230 001800 0070+00 2/2 0/0 0/0 .text sceneChange__16daObjTobyHouse_cFv - */ -void daObjTobyHouse_c::sceneChange() { - // NONMATCHING -} - -/* 80D17230-80D17374 001870 0144+00 1/0 0/0 0/0 .text Draw__16daObjTobyHouse_cFv */ -void daObjTobyHouse_c::Draw() { - // NONMATCHING -} - -/* ############################################################################################## */ -/* 80D177B0-80D177B4 000064 0004+00 0/0 0/0 0/0 .rodata @4773 */ -#pragma push -#pragma force_active on -SECTION_RODATA static f32 const lit_4773 = -1.0f; -COMPILER_STRIP_GATE(0x80D177B0, &lit_4773); -#pragma pop - -/* 80D177B4-80D177BC 000068 0008+00 0/0 0/0 0/0 .rodata @4776 */ -#pragma push -#pragma force_active on -SECTION_RODATA static u8 const lit_4776[8] = { - 0x43, 0x30, 0x00, 0x00, 0x80, 0x00, 0x00, 0x00, -}; -COMPILER_STRIP_GATE(0x80D177B4, &lit_4776); -#pragma pop - -/* 80D177BC-80D177C0 000070 0004+00 0/1 0/0 0/0 .rodata @4905 */ -#pragma push -#pragma force_active on -SECTION_RODATA static f32 const lit_4905 = 20000.0f; -COMPILER_STRIP_GATE(0x80D177BC, &lit_4905); -#pragma pop - -/* 80D17374-80D174F8 0019B4 0184+00 1/1 0/0 0/0 .text checkLODModel__16daObjTobyHouse_cFv - */ -void daObjTobyHouse_c::checkLODModel() { - // NONMATCHING -} - -/* 80D174F8-80D17618 001B38 0120+00 1/0 0/0 0/0 .text Delete__16daObjTobyHouse_cFv */ -void daObjTobyHouse_c::Delete() { - // NONMATCHING -} - -/* ############################################################################################## */ -/* 80D1798C-80D179B4 000134 0028+00 1/1 0/0 0/0 .data __vt__16daObjTobyHouse_c */ -SECTION_DATA extern void* __vt__16daObjTobyHouse_c[10] = { - (void*)NULL /* RTTI */, - (void*)NULL, - (void*)CreateHeap__16daObjTobyHouse_cFv, - (void*)Create__16daObjTobyHouse_cFv, - (void*)Execute__16daObjTobyHouse_cFPPA3_A4_f, - (void*)Draw__16daObjTobyHouse_cFv, - (void*)Delete__16daObjTobyHouse_cFv, - (void*)IsDelete__16dBgS_MoveBgActorFv, - (void*)ToFore__16dBgS_MoveBgActorFv, - (void*)ToBack__16dBgS_MoveBgActorFv, -}; - -/* 80D17618-80D17678 001C58 0060+00 1/0 0/0 0/0 .text - * daObjTobyHouse_create1st__FP16daObjTobyHouse_c */ -static void daObjTobyHouse_create1st(daObjTobyHouse_c* param_0) { - // NONMATCHING -} - -/* 80D17678-80D17698 001CB8 0020+00 1/0 0/0 0/0 .text - * daObjTobyHouse_MoveBGDelete__FP16daObjTobyHouse_c */ -static void daObjTobyHouse_MoveBGDelete(daObjTobyHouse_c* param_0) { - // NONMATCHING -} - -/* 80D17698-80D176B8 001CD8 0020+00 1/0 0/0 0/0 .text - * daObjTobyHouse_MoveBGExecute__FP16daObjTobyHouse_c */ -static void daObjTobyHouse_MoveBGExecute(daObjTobyHouse_c* param_0) { - // NONMATCHING -} - -/* 80D176B8-80D176E4 001CF8 002C+00 1/0 0/0 0/0 .text - * daObjTobyHouse_MoveBGDraw__FP16daObjTobyHouse_c */ -static void daObjTobyHouse_MoveBGDraw(daObjTobyHouse_c* param_0) { - // NONMATCHING -} - -/* 80D176E4-80D17700 001D24 001C+00 1/1 0/0 0/0 .text cLib_calcTimer__FPUc */ -extern "C" void func_80D176E4(void* _this, u8* param_0) { - // NONMATCHING -} - -/* 80D17700-80D1773C 001D40 003C+00 1/1 0/0 0/0 .text __dt__4cXyzFv */ -// cXyz::~cXyz() { -extern "C" void __dt__4cXyzFv() { - // NONMATCHING -} - -/* ############################################################################################## */ -/* 80D17A1C-80D17A20 000064 0004+00 0/0 0/0 0/0 .bss - * sInstance__40JASGlobalInstance<19JASDefaultBankTable> */ -#pragma push -#pragma force_active on -static u8 data_80D17A1C[4]; -#pragma pop - -/* 80D17A20-80D17A24 000068 0004+00 0/0 0/0 0/0 .bss - * sInstance__35JASGlobalInstance<14JASAudioThread> */ -#pragma push -#pragma force_active on -static u8 data_80D17A20[4]; -#pragma pop - -/* 80D17A24-80D17A28 00006C 0004+00 0/0 0/0 0/0 .bss sInstance__27JASGlobalInstance<7Z2SeMgr> */ -#pragma push -#pragma force_active on -static u8 data_80D17A24[4]; -#pragma pop - -/* 80D17A28-80D17A2C 000070 0004+00 0/0 0/0 0/0 .bss sInstance__28JASGlobalInstance<8Z2SeqMgr> */ -#pragma push -#pragma force_active on -static u8 data_80D17A28[4]; -#pragma pop - -/* 80D17A2C-80D17A30 000074 0004+00 0/0 0/0 0/0 .bss sInstance__31JASGlobalInstance<10Z2SceneMgr> - */ -#pragma push -#pragma force_active on -static u8 data_80D17A2C[4]; -#pragma pop - -/* 80D17A30-80D17A34 000078 0004+00 0/0 0/0 0/0 .bss sInstance__32JASGlobalInstance<11Z2StatusMgr> - */ -#pragma push -#pragma force_active on -static u8 data_80D17A30[4]; -#pragma pop - -/* 80D17A34-80D17A38 00007C 0004+00 0/0 0/0 0/0 .bss sInstance__31JASGlobalInstance<10Z2DebugSys> - */ -#pragma push -#pragma force_active on -static u8 data_80D17A34[4]; -#pragma pop - -/* 80D17A38-80D17A3C 000080 0004+00 0/0 0/0 0/0 .bss - * sInstance__36JASGlobalInstance<15JAISoundStarter> */ -#pragma push -#pragma force_active on -static u8 data_80D17A38[4]; -#pragma pop - -/* 80D17A3C-80D17A40 000084 0004+00 0/0 0/0 0/0 .bss - * sInstance__35JASGlobalInstance<14Z2SoundStarter> */ -#pragma push -#pragma force_active on -static u8 data_80D17A3C[4]; -#pragma pop - -/* 80D17A40-80D17A44 000088 0004+00 0/0 0/0 0/0 .bss - * sInstance__33JASGlobalInstance<12Z2SpeechMgr2> */ -#pragma push -#pragma force_active on -static u8 data_80D17A40[4]; -#pragma pop - -/* 80D17A44-80D17A48 00008C 0004+00 0/0 0/0 0/0 .bss sInstance__28JASGlobalInstance<8JAISeMgr> */ -#pragma push -#pragma force_active on -static u8 data_80D17A44[4]; -#pragma pop - -/* 80D17A48-80D17A4C 000090 0004+00 0/0 0/0 0/0 .bss sInstance__29JASGlobalInstance<9JAISeqMgr> */ -#pragma push -#pragma force_active on -static u8 data_80D17A48[4]; -#pragma pop - -/* 80D17A4C-80D17A50 000094 0004+00 0/0 0/0 0/0 .bss - * sInstance__33JASGlobalInstance<12JAIStreamMgr> */ -#pragma push -#pragma force_active on -static u8 data_80D17A4C[4]; -#pragma pop - -/* 80D17A50-80D17A54 000098 0004+00 0/0 0/0 0/0 .bss sInstance__31JASGlobalInstance<10Z2SoundMgr> - */ -#pragma push -#pragma force_active on -static u8 data_80D17A50[4]; -#pragma pop - -/* 80D17A54-80D17A58 00009C 0004+00 0/0 0/0 0/0 .bss - * sInstance__33JASGlobalInstance<12JAISoundInfo> */ -#pragma push -#pragma force_active on -static u8 data_80D17A54[4]; -#pragma pop - -/* 80D17A58-80D17A5C 0000A0 0004+00 0/0 0/0 0/0 .bss - * sInstance__34JASGlobalInstance<13JAUSoundTable> */ -#pragma push -#pragma force_active on -static u8 data_80D17A58[4]; -#pragma pop - -/* 80D17A5C-80D17A60 0000A4 0004+00 0/0 0/0 0/0 .bss - * sInstance__38JASGlobalInstance<17JAUSoundNameTable> */ -#pragma push -#pragma force_active on -static u8 data_80D17A5C[4]; -#pragma pop - -/* 80D17A60-80D17A64 0000A8 0004+00 0/0 0/0 0/0 .bss - * sInstance__33JASGlobalInstance<12JAUSoundInfo> */ -#pragma push -#pragma force_active on -static u8 data_80D17A60[4]; -#pragma pop - -/* 80D17A64-80D17A68 0000AC 0004+00 0/0 0/0 0/0 .bss sInstance__32JASGlobalInstance<11Z2SoundInfo> - */ -#pragma push -#pragma force_active on -static u8 data_80D17A64[4]; -#pragma pop - -/* 80D17A68-80D17A6C 0000B0 0004+00 0/0 0/0 0/0 .bss - * sInstance__34JASGlobalInstance<13Z2SoundObjMgr> */ -#pragma push -#pragma force_active on -static u8 data_80D17A68[4]; -#pragma pop - -/* 80D17A6C-80D17A70 0000B4 0004+00 0/0 0/0 0/0 .bss sInstance__31JASGlobalInstance<10Z2Audience> - */ -#pragma push -#pragma force_active on -static u8 data_80D17A6C[4]; -#pragma pop - -/* 80D17A70-80D17A74 0000B8 0004+00 0/0 0/0 0/0 .bss sInstance__32JASGlobalInstance<11Z2FxLineMgr> - */ -#pragma push -#pragma force_active on -static u8 data_80D17A70[4]; -#pragma pop - -/* 80D17A74-80D17A78 0000BC 0004+00 0/0 0/0 0/0 .bss sInstance__31JASGlobalInstance<10Z2EnvSeMgr> - */ -#pragma push -#pragma force_active on -static u8 data_80D17A74[4]; -#pragma pop - -/* 80D17A78-80D17A7C 0000C0 0004+00 0/0 0/0 0/0 .bss sInstance__32JASGlobalInstance<11Z2SpeechMgr> - */ -#pragma push -#pragma force_active on -static u8 data_80D17A78[4]; -#pragma pop - -/* 80D17A7C-80D17A80 0000C4 0004+00 0/0 0/0 0/0 .bss - * sInstance__34JASGlobalInstance<13Z2WolfHowlMgr> */ -#pragma push -#pragma force_active on -static u8 data_80D17A7C[4]; -#pragma pop +AUDIO_INSTANCES; /* 80D177C0-80D177C0 000074 0000+00 0/0 0/0 0/0 .rodata @stringBase0 */ diff --git a/src/d/actor/d_a_obj_togeTrap.cpp b/src/d/actor/d_a_obj_togeTrap.cpp index 335452c6a7a..cae00fa615c 100644 --- a/src/d/actor/d_a_obj_togeTrap.cpp +++ b/src/d/actor/d_a_obj_togeTrap.cpp @@ -4,244 +4,333 @@ */ #include "d/actor/d_a_obj_togeTrap.h" -#include "dol2asm.h" +#include "d/actor/d_a_player.h" +#include "d/d_bg_w.h" +#include "d/d_com_inf_game.h" +UNK_REL_DATA +/* 80D17B6C-80D17BD0 0000EC 0064+00 1/1 0/0 0/0 .text __ct__16daTogeTrap_HIO_cFv */ +daTogeTrap_HIO_c::daTogeTrap_HIO_c() { + mInitialSpeed = 0.0f; + mMaxSpeed = 250.0f; + mInitialDownSpeed = 0.0f; + mMaxDownSpeed = 10.0f; + mSpinnerSpeed = 20.0f; + mVibration = 3; + mRange = 500.0f; +} -// -// Forward References: -// - -extern "C" void __ct__16daTogeTrap_HIO_cFv(); -extern "C" void __dt__18fOpAcm_HIO_entry_cFv(); -extern "C" void __dt__14mDoHIO_entry_cFv(); -extern "C" void setBaseMtx__12daTogeTrap_cFv(); -extern "C" void CreateHeap__12daTogeTrap_cFv(); -extern "C" void create__12daTogeTrap_cFv(); -extern "C" void __dt__8dCcD_CylFv(); -extern "C" void __ct__8dCcD_CylFv(); -extern "C" void __dt__8cM3dGCylFv(); -extern "C" void __dt__8cM3dGAabFv(); -extern "C" void __dt__10dCcD_GSttsFv(); -extern "C" void rideCallBack__12daTogeTrap_cFP4dBgWP10fopAc_ac_cP10fopAc_ac_c(); -extern "C" void Execute__12daTogeTrap_cFPPA3_A4_f(); -extern "C" void moveMain__12daTogeTrap_cFv(); -extern "C" void playerAreaCheck__12daTogeTrap_cFv(); -extern "C" void init_modeWait__12daTogeTrap_cFv(); -extern "C" void modeWait__12daTogeTrap_cFv(); -extern "C" void init_modeMoveUp__12daTogeTrap_cFv(); -extern "C" void modeMoveUp__12daTogeTrap_cFv(); -extern "C" void init_modeMoveDown__12daTogeTrap_cFv(); -extern "C" void modeMoveDown__12daTogeTrap_cFv(); -extern "C" void init_modeBreak__12daTogeTrap_cFv(); -extern "C" void modeBreak__12daTogeTrap_cFv(); -extern "C" void Draw__12daTogeTrap_cFv(); -extern "C" void Delete__12daTogeTrap_cFv(); -extern "C" static void daTogeTrap_Draw__FP12daTogeTrap_c(); -extern "C" static void daTogeTrap_Execute__FP12daTogeTrap_c(); -extern "C" static void daTogeTrap_Delete__FP12daTogeTrap_c(); -extern "C" static void daTogeTrap_Create__FP10fopAc_ac_c(); -extern "C" void __dt__10cCcD_GSttsFv(); -extern "C" void __dt__16daTogeTrap_HIO_cFv(); -extern "C" void __sinit_d_a_obj_togeTrap_cpp(); -extern "C" u8 const mCcDObjInfo__12daTogeTrap_c[48]; -extern "C" extern char const* const d_a_obj_togeTrap__stringBase0; -extern "C" u8 mCcDCyl__12daTogeTrap_c[68]; - -// -// External References: -// - -extern "C" void mDoMtx_ZXYrotS__FPA4_fsss(); -extern "C" void mDoMtx_ZXYrotM__FPA4_fsss(); -extern "C" void mDoMtx_YrotS__FPA4_fs(); -extern "C" void mDoExt_modelUpdateDL__FP8J3DModel(); -extern "C" void mDoExt_J3DModel__create__FP12J3DModelDataUlUl(); -extern "C" void fopAcM_delete__FP10fopAc_ac_c(); -extern "C" void fopAcM_setCullSizeBox2__FP10fopAc_ac_cP12J3DModelData(); -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 dComIfGs_wolfeye_effect_check__Fv(); -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 StartShock__12dVibration_cFii4cXyz(); -extern "C" void Release__4cBgSFP9dBgW_Base(); -extern "C" void dBgS_MoveBGProc_TypicalRotY__FP4dBgWPvRC13cBgS_PolyInfobP4cXyzP5csXyzP5csXyz(); -extern "C" void __ct__16dBgS_MoveBgActorFv(); -extern "C" bool Create__16dBgS_MoveBgActorFv(); -extern "C" bool IsDelete__16dBgS_MoveBgActorFv(); -extern "C" bool ToFore__16dBgS_MoveBgActorFv(); -extern "C" bool ToBack__16dBgS_MoveBgActorFv(); -extern "C" void -MoveBGCreate__16dBgS_MoveBgActorFPCciPFP4dBgWPvRC13cBgS_PolyInfobP4cXyzP5csXyzP5csXyz_vUlPA3_A4_f(); -extern "C" void MoveBGDelete__16dBgS_MoveBgActorFv(); -extern "C" void MoveBGExecute__16dBgS_MoveBgActorFv(); -extern "C" void __ct__10dCcD_GSttsFv(); -extern "C" void Init__9dCcD_SttsFiiP10fopAc_ac_c(); -extern "C" void __ct__12dCcD_GObjInfFv(); -extern "C" void __dt__12dCcD_GObjInfFv(); -extern "C" void ChkTgHit__12dCcD_GObjInfFv(); -extern "C" void GetTgHitGObj__12dCcD_GObjInfFv(); -extern "C" void Set__8dCcD_CylFRC11dCcD_SrcCyl(); -extern "C" void getSpinnerRideSpeed__9daPy_py_cCFv(); -extern "C" void checkSpinnerReflectEffect__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 SetC__8cM3dGCylFRC4cXyz(); -extern "C" void SetH__8cM3dGCylFf(); -extern "C" void SetR__8cM3dGCylFf(); -extern "C" void cLib_addCalc__FPfffff(); -extern "C" void cLib_chaseF__FPfff(); -extern "C" void seStart__7Z2SeMgrF10JAISoundIDPC3VecUlScffffUc(); -extern "C" void __dl__FPv(); -extern "C" void __construct_array(); -extern "C" void __ptmf_scall(); -extern "C" void _savegpr_22(); -extern "C" void _savegpr_25(); -extern "C" void _restgpr_22(); -extern "C" void _restgpr_25(); -extern "C" extern void* __vt__8dCcD_Cyl[36]; -extern "C" extern void* __vt__9dCcD_Stts[11]; -extern "C" extern void* __vt__12cCcD_CylAttr[25]; -extern "C" extern void* __vt__14cCcD_ShapeAttr[22]; -extern "C" extern void* __vt__9cCcD_Stts[8]; -extern "C" u8 now__14mDoMtx_stack_c[48]; -extern "C" extern u8 g_dComIfG_gameInfo[122384]; -extern "C" u8 mAudioMgrPtr__10Z2AudioMgr[4 + 4 /* padding */]; -extern "C" void __register_global_object(); - -// -// Declarations: -// - -/* ############################################################################################## */ -/* 80D18E98-80D18E9C 000000 0004+00 4/4 0/0 0/0 .rodata @3655 */ -SECTION_RODATA static u8 const lit_3655[4] = { - 0x00, - 0x00, - 0x00, - 0x00, -}; -COMPILER_STRIP_GATE(0x80D18E98, &lit_3655); - -/* 80D18E9C-80D18EA0 000004 0004+00 0/1 0/0 0/0 .rodata @3656 */ -#pragma push -#pragma force_active on -SECTION_RODATA static f32 const lit_3656 = 250.0f; -COMPILER_STRIP_GATE(0x80D18E9C, &lit_3656); -#pragma pop - -/* 80D18EA0-80D18EA4 000008 0004+00 0/1 0/0 0/0 .rodata @3657 */ -#pragma push -#pragma force_active on -SECTION_RODATA static f32 const lit_3657 = 10.0f; -COMPILER_STRIP_GATE(0x80D18EA0, &lit_3657); -#pragma pop - -/* 80D18EA4-80D18EA8 00000C 0004+00 0/1 0/0 0/0 .rodata @3658 */ -#pragma push -#pragma force_active on -SECTION_RODATA static f32 const lit_3658 = 20.0f; -COMPILER_STRIP_GATE(0x80D18EA4, &lit_3658); -#pragma pop - -/* 80D18EA8-80D18EAC 000010 0004+00 0/2 0/0 0/0 .rodata @3659 */ -#pragma push -#pragma force_active on -SECTION_RODATA static f32 const lit_3659 = 500.0f; -COMPILER_STRIP_GATE(0x80D18EA8, &lit_3659); -#pragma pop - -/* 80D18F10-80D18F1C 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, -}; - -/* 80D18F1C-80D18F30 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 +/* 80D190B4-80D190D4 000014 0020+00 8/8 0/0 0/0 .bss l_HIO */ +static daTogeTrap_HIO_c l_HIO; /* 80D18F30-80D18F74 000020 0044+00 2/2 0/0 0/0 .data mCcDCyl__12daTogeTrap_c */ -SECTION_DATA u8 daTogeTrap_c::mCcDCyl[68] = { - 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, +const dCcD_SrcGObjInf daTogeTrap_c::mCcDObjInfo = { + {0, {{2, 1, 0x1D}, {0x480028, 0x11}, {0}}}, + {dCcD_SE_SWORD, 0, 0, 0, 0}, + {dCcD_SE_STONE, 0, 0, 0, 0}, + {0}, }; -/* 80D18F74-80D18F80 -00001 000C+00 0/1 0/0 0/0 .data @3883 */ -#pragma push -#pragma force_active on -SECTION_DATA static void* lit_3883[3] = { - (void*)NULL, - (void*)0xFFFFFFFF, - (void*)modeWait__12daTogeTrap_cFv, +/* 80CA9C38-80CA9C7C 000020 0044+00 2/2 0/0 0/0 .data mCcDCyl__11daOnsTaru_c */ +dCcD_SrcCyl daTogeTrap_c::mCcDCyl = { + daTogeTrap_c::mCcDObjInfo, + { + {0.0f, 0.0f, 0.0f}, // mCenter + 0.0f, // mRadius + 0.0f // mHeight + } // mCyl }; -#pragma pop -/* 80D18F80-80D18F8C -00001 000C+00 0/1 0/0 0/0 .data @3884 */ -#pragma push -#pragma force_active on -SECTION_DATA static void* lit_3884[3] = { - (void*)NULL, - (void*)0xFFFFFFFF, - (void*)modeMoveUp__12daTogeTrap_cFv, -}; -#pragma pop +/* 80D17C74-80D17D5C 0001F4 00E8+00 2/2 0/0 0/0 .text setBaseMtx__12daTogeTrap_cFv */ +void daTogeTrap_c::setBaseMtx() { + mDoMtx_stack_c::transS(current.pos.x, current.pos.y, current.pos.z); + mDoMtx_stack_c::ZXYrotM(shape_angle.x, shape_angle.y, shape_angle.z); + mModel->setBaseScale(scale); + mModel->setBaseTRMtx(mDoMtx_stack_c::get()); + mDoMtx_stack_c::transS(home.pos.x, home.pos.y, home.pos.z); + mDoMtx_stack_c::ZXYrotM(shape_angle.x, shape_angle.y, shape_angle.z); + mWolfEyeModel->setBaseScale(scale); + mWolfEyeModel->setBaseTRMtx(mDoMtx_stack_c::get()); +} -/* 80D18F8C-80D18F98 -00001 000C+00 0/1 0/0 0/0 .data @3885 */ -#pragma push -#pragma force_active on -SECTION_DATA static void* lit_3885[3] = { - (void*)NULL, - (void*)0xFFFFFFFF, - (void*)modeMoveDown__12daTogeTrap_cFv, -}; -#pragma pop +/* 80D17D5C-80D17E14 0002DC 00B8+00 1/0 0/0 0/0 .text CreateHeap__12daTogeTrap_cFv */ +int daTogeTrap_c::CreateHeap() { + J3DModelData* modelData = (J3DModelData*)dComIfG_getObjectRes("P_Toge", 4); + JUT_ASSERT(251, modelData != 0); + mModel = mDoExt_J3DModel__create(modelData, 0x80000, 0x11000084); + if (mModel == NULL) { + return 0; + } + modelData = (J3DModelData*)dComIfG_getObjectRes("P_Toge", 5); + JUT_ASSERT(262, modelData != 0); + mWolfEyeModel = mDoExt_J3DModel__create(modelData, 0x80000, 0x11000084); + if (mWolfEyeModel == NULL) { + return 0; + } -/* 80D18F98-80D18FA4 -00001 000C+00 0/1 0/0 0/0 .data @3886 */ -#pragma push -#pragma force_active on -SECTION_DATA static void* lit_3886[3] = { - (void*)NULL, - (void*)0xFFFFFFFF, - (void*)modeBreak__12daTogeTrap_cFv, -}; -#pragma pop + return 1; +} -/* 80D18FA4-80D18FD4 000094 0030+00 0/1 0/0 0/0 .data mode_proc$3882 */ -#pragma push -#pragma force_active on -SECTION_DATA static u8 mode_proc[48] = { - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, -}; -#pragma pop +/* 80D17E14-80D18008 000394 01F4+00 1/1 0/0 0/0 .text create__12daTogeTrap_cFv */ +int daTogeTrap_c::create() { + fopAcM_SetupActor(this, daTogeTrap_c); + mSwBit = getSwBit(); + if (mSwBit != 0xff && + fopAcM_isSwitch(this, mSwBit)) + { + return cPhs_ERROR_e; + } + int phase = dComIfG_resLoad(&mPhase, "P_Toge"); + if (phase == 4) { + if (MoveBGCreate("P_Toge", 8, dBgS_MoveBGProc_TypicalRotY, 0x4000, NULL) == cPhs_ERROR_e) { + return cPhs_ERROR_e; + } + + fopAcM_SetMtx(this, mModel->getBaseTRMtx()); + fopAcM_setCullSizeBox2(this, mModel->getModelData()); + mpBgW->SetRideCallback(rideCallBack); + mStts.Init(0xff, 0xff, this); + for (int i = 0; i < 4; i++) { + mCyls[i].Set(mCcDCyl); + mCyls[i].SetStts(&mStts); + mCyls[i].OnTgSetBit(); + } + current.pos.y -= 300.0f; + mIsPlayerInArea = playerAreaCheck(); + mIsWolfEye = 0; + init_modeWait(); + setBaseMtx(); + + #ifdef DEBUG + // Spike traps + l_HIO.entryHIO("トゲトラップ"); + #endif + } + return phase; +} + +/* 80D18244-80D1825C 0007C4 0018+00 1/1 0/0 0/0 .text + * rideCallBack__12daTogeTrap_cFP4dBgWP10fopAc_ac_cP10fopAc_ac_c */ +void daTogeTrap_c::rideCallBack(dBgW* param_1, fopAc_ac_c* param_2, fopAc_ac_c* param_3) { + if (fopAcM_GetName(param_3) == PROC_Obj_Movebox) { + ((daTogeTrap_c*)param_2)->field_0xadd = 1; + } +} + +/* 80D1825C-80D182C8 0007DC 006C+00 1/0 0/0 0/0 .text Execute__12daTogeTrap_cFPPA3_A4_f + */ +int daTogeTrap_c::Execute(Mtx** i_mtx) { + moveMain(); + *i_mtx = &mModel->getBaseTRMtx(); + setBaseMtx(); + if (!dComIfGs_wolfeye_effect_check()) { + mIsWolfEye = false; + } + field_0xadd = 0; + return 1; +} + +/* 80D182C8-80D185DC 000848 0314+00 1/1 0/0 0/0 .text moveMain__12daTogeTrap_cFv */ +void daTogeTrap_c::moveMain() { + static daTogeTrap_c::modeFunc mode_proc[4] = { + &daTogeTrap_c::modeWait, + &daTogeTrap_c::modeMoveUp, + &daTogeTrap_c::modeMoveDown, + &daTogeTrap_c::modeBreak, + }; + + int areaCheck = playerAreaCheck(); + if (areaCheck != mIsPlayerInArea) { + if (areaCheck == 1) { + init_modeMoveUp(); + } else { + init_modeMoveDown(); + } + mIsPlayerInArea = areaCheck; + } + for (int i = 0; i < 4; i++) { + if (mCyls[i].ChkTgHit()) { + cCcD_ObjHitInf* hitObj = mCyls[i].GetTgHitGObj(); + if (hitObj->GetAtType() & (AT_TYPE_IRON_BALL | AT_TYPE_BOMB)) { + init_modeBreak(); + break; + } + daPy_py_c* player = (daPy_py_c*)dComIfGp_getLinkPlayer(); + if (player->checkSpinnerRide() && (player->getSpinnerRideSpeed() >= l_HIO.mSpinnerSpeed || + player->checkSpinnerReflectEffect())) + { + init_modeBreak(); + break; + } + } + } + + for (int i = 0; i < 4; i++) { + mCyls[i].SetR(60.0f); + mCyls[i].SetH(290.0f); + cXyz local_30(0.0f, 0.0f, 0.0f); + local_30.x = (i * 100.0f) - 150.0f; + mDoMtx_stack_c::ZXYrotS(shape_angle.x, shape_angle.y, shape_angle.z); + mDoMtx_stack_c::multVec(&local_30, &local_30); + cXyz cStack_3c = current.pos; + cStack_3c += local_30; + mCyls[i].SetC(cStack_3c); + dComIfG_Ccsp()->Set(&mCyls[i]); + } + if (field_0xadd != 0) { + init_modeBreak(); + } + (this->*mode_proc[mMode])(); +} + +/* 80D185DC-80D186B0 000B5C 00D4+00 2/2 0/0 0/0 .text playerAreaCheck__12daTogeTrap_cFv + */ +BOOL daTogeTrap_c::playerAreaCheck() { + fopAc_ac_c* player = dComIfGp_getPlayer(0); + cXyz local_48 = current.pos - player->current.pos; + mDoMtx_stack_c::YrotS(-current.angle.y); + mDoMtx_stack_c::multVec(&local_48, &local_48); + f32 absZ = fabsf(local_48.z); + f32 absX = fabsf(local_48.x); + BOOL rv = FALSE; + if (absZ <= l_HIO.mRange && absX <= 225.0f) { + rv = TRUE; + } + return rv; +} + +/* 80D186B0-80D186BC 000C30 000C+00 3/3 0/0 0/0 .text init_modeWait__12daTogeTrap_cFv */ +void daTogeTrap_c::init_modeWait() { + mMode = MODE_WAIT; +} + +/* 80D186BC-80D186C0 000C3C 0004+00 1/0 0/0 0/0 .text modeWait__12daTogeTrap_cFv */ +void daTogeTrap_c::modeWait() {} + +/* 80D186C0-80D18784 000C40 00C4+00 1/1 0/0 0/0 .text init_modeMoveUp__12daTogeTrap_cFv + */ +void daTogeTrap_c::init_modeMoveUp() { + fopAcM_SetSpeedF(this, l_HIO.mInitialSpeed); + mDoAud_seStart(Z2SE_OBJ_SWD_FENCE_POP, &home.pos, 0, dComIfGp_getReverb(fopAcM_GetRoomNo(this))); + for (int i = 0; i < 4; i++) { + mCyls[i].OnAtSetBit(); + mCyls[i].OnTgSetBit(); + } + this->mMode = MODE_MOVE_UP; +} + +/* 80D18784-80D188C0 000D04 013C+00 1/0 0/0 0/0 .text modeMoveUp__12daTogeTrap_cFv */ +void daTogeTrap_c::modeMoveUp() { + cLib_chaseF(&speedF, l_HIO.mMaxSpeed, l_HIO.mMaxSpeed / 30.0f); + if (cLib_addCalc(¤t.pos.y, home.pos.y, 1.0f, fopAcM_GetSpeedF(this), 1.0f) == 0.0f) { + dComIfGp_getVibration().StartShock(l_HIO.mVibration, 0xf, cXyz(0.0f, 1.0f, 0.0f)); + dComIfGp_particle_set(0x8ad9, ¤t.pos, &shape_angle, 0); + for (int i = 0; i < 4; i++) { + mCyls[i].OffAtSetBit(); + } + if (dComIfGs_wolfeye_effect_check()) { + mIsWolfEye = true; + } + init_modeWait(); + } +} + +/* 80D188C0-80D188DC 000E40 001C+00 1/1 0/0 0/0 .text init_modeMoveDown__12daTogeTrap_cFv + */ +void daTogeTrap_c::init_modeMoveDown() { + fopAcM_SetSpeedF(this, l_HIO.mInitialDownSpeed); + this->mMode = MODE_MOVE_DOWN; +} + +/* 80D188DC-80D18994 000E5C 00B8+00 1/0 0/0 0/0 .text modeMoveDown__12daTogeTrap_cFv */ +void daTogeTrap_c::modeMoveDown() { + cLib_chaseF(&speedF, l_HIO.mMaxDownSpeed, l_HIO.mMaxDownSpeed / 30.0f); + if (cLib_addCalc(¤t.pos.y, home.pos.y - 300.0f, 1.0f, fopAcM_GetSpeedF(this), 1.0f) == 0.0f) { + for (int i = 0; i < 4; i++) { + mCyls[i].OffTgSetBit(); + mCyls[i].OffAtSetBit(); + } + init_modeWait(); + } +} + +/* 80D18994-80D18A5C 000F14 00C8+00 1/1 0/0 0/0 .text init_modeBreak__12daTogeTrap_cFv */ +void daTogeTrap_c::init_modeBreak() { + daPy_py_c* player = dComIfGp_getLinkPlayer(); + if (player->getSpinnerRideSpeed() >= l_HIO.mSpinnerSpeed && mpBgW != NULL) { + dComIfG_Bgsp().Release(mpBgW); + } + mDoAud_seStart(Z2SE_OBJ_TRAP_BREAK_STN, ¤t.pos, 0, dComIfGp_getReverb(fopAcM_GetRoomNo(this))); + this->mMode = MODE_BREAK; +} + +/* 80D18A5C-80D18BEC 000FDC 0190+00 1/0 0/0 0/0 .text modeBreak__12daTogeTrap_cFv */ +void daTogeTrap_c::modeBreak() { + dComIfGp_particle_set(0x8ada, ¤t.pos, &shape_angle, 0); + dComIfGp_particle_set(0x8adb, ¤t.pos, &shape_angle, 0); + dComIfGp_particle_set(0x8adc, ¤t.pos, &shape_angle, 0); + dComIfGp_particle_set(0x8add, ¤t.pos, &shape_angle, 0); + if (mSwBit != 0xff) { + fopAcM_onSwitch(this, mSwBit); + } + fopAcM_delete(this); +} + +/* 80D18BEC-80D18CA4 00116C 00B8+00 1/0 0/0 0/0 .text Draw__12daTogeTrap_cFv */ +int daTogeTrap_c::Draw() { + g_env_light.settingTevStruct(0x10, ¤t.pos, &tevStr); + g_env_light.setLightTevColorType_MAJI(mModel, &tevStr); + dComIfGd_setListBG(); + mDoExt_modelUpdateDL(mModel); + if (mIsWolfEye) { + mDoExt_modelUpdateDL(mWolfEyeModel); + } + dComIfGd_setList(); + return 1; +} + +/* 80D18CA4-80D18CD4 001224 0030+00 1/0 0/0 0/0 .text Delete__12daTogeTrap_cFv */ +int daTogeTrap_c::Delete() { + dComIfG_resDelete(&mPhase, "P_Toge"); + + #ifdef DEBUG + l_HIO.removeHIO(); + #endif + + return 1; +} + +/* 80D18CD4-80D18D00 001254 002C+00 1/0 0/0 0/0 .text daTogeTrap_Draw__FP12daTogeTrap_c + */ +static int daTogeTrap_Draw(daTogeTrap_c* i_this) { + return i_this->Draw(); +} + +/* 80D18D00-80D18D20 001280 0020+00 1/0 0/0 0/0 .text daTogeTrap_Execute__FP12daTogeTrap_c */ +static int daTogeTrap_Execute(daTogeTrap_c* i_this) { + return i_this->MoveBGExecute(); +} + +/* 80D18D20-80D18D40 0012A0 0020+00 1/0 0/0 0/0 .text daTogeTrap_Delete__FP12daTogeTrap_c + */ +static int daTogeTrap_Delete(daTogeTrap_c* i_this) { + return i_this->MoveBGDelete(); +} + +/* 80D18D40-80D18D60 0012C0 0020+00 1/0 0/0 0/0 .text daTogeTrap_Create__FP10fopAc_ac_c + */ +static int daTogeTrap_Create(fopAc_ac_c* i_this) { + return ((daTogeTrap_c*)i_this)->create(); +} /* 80D18FD4-80D18FF4 -00001 0020+00 1/0 0/0 0/0 .data l_daTogeTrap_Method */ static actor_method_class l_daTogeTrap_Method = { - (process_method_func)daTogeTrap_Create__FP10fopAc_ac_c, - (process_method_func)daTogeTrap_Delete__FP12daTogeTrap_c, - (process_method_func)daTogeTrap_Execute__FP12daTogeTrap_c, + (process_method_func)daTogeTrap_Create, + (process_method_func)daTogeTrap_Delete, + (process_method_func)daTogeTrap_Execute, 0, - (process_method_func)daTogeTrap_Draw__FP12daTogeTrap_c, + (process_method_func)daTogeTrap_Draw, }; /* 80D18FF4-80D19024 -00001 0030+00 0/0 0/0 1/0 .data g_profile_Obj_TogeTrap */ @@ -262,337 +351,4 @@ extern actor_process_profile_definition g_profile_Obj_TogeTrap = { fopAc_CULLBOX_CUSTOM_e, // cullType }; -/* 80D19024-80D19030 000114 000C+00 2/2 0/0 0/0 .data __vt__10cCcD_GStts */ -SECTION_DATA extern void* __vt__10cCcD_GStts[3] = { - (void*)NULL /* RTTI */, - (void*)NULL, - (void*)__dt__10cCcD_GSttsFv, -}; - -/* 80D19030-80D1903C 000120 000C+00 1/1 0/0 0/0 .data __vt__10dCcD_GStts */ -SECTION_DATA extern void* __vt__10dCcD_GStts[3] = { - (void*)NULL /* RTTI */, - (void*)NULL, - (void*)__dt__10dCcD_GSttsFv, -}; - -/* 80D1903C-80D19048 00012C 000C+00 3/3 0/0 0/0 .data __vt__8cM3dGAab */ -SECTION_DATA extern void* __vt__8cM3dGAab[3] = { - (void*)NULL /* RTTI */, - (void*)NULL, - (void*)__dt__8cM3dGAabFv, -}; - -/* 80D19048-80D19054 000138 000C+00 3/3 0/0 0/0 .data __vt__8cM3dGCyl */ -SECTION_DATA extern void* __vt__8cM3dGCyl[3] = { - (void*)NULL /* RTTI */, - (void*)NULL, - (void*)__dt__8cM3dGCylFv, -}; - -/* 80D19054-80D1907C 000144 0028+00 1/1 0/0 0/0 .data __vt__12daTogeTrap_c */ -SECTION_DATA extern void* __vt__12daTogeTrap_c[10] = { - (void*)NULL /* RTTI */, - (void*)NULL, - (void*)CreateHeap__12daTogeTrap_cFv, - (void*)Create__16dBgS_MoveBgActorFv, - (void*)Execute__12daTogeTrap_cFPPA3_A4_f, - (void*)Draw__12daTogeTrap_cFv, - (void*)Delete__12daTogeTrap_cFv, - (void*)IsDelete__16dBgS_MoveBgActorFv, - (void*)ToFore__16dBgS_MoveBgActorFv, - (void*)ToBack__16dBgS_MoveBgActorFv, -}; - -/* 80D1907C-80D19088 00016C 000C+00 2/2 0/0 0/0 .data __vt__16daTogeTrap_HIO_c */ -SECTION_DATA extern void* __vt__16daTogeTrap_HIO_c[3] = { - (void*)NULL /* RTTI */, - (void*)NULL, - (void*)__dt__16daTogeTrap_HIO_cFv, -}; - -/* 80D19088-80D19094 000178 000C+00 3/3 0/0 0/0 .data __vt__18fOpAcm_HIO_entry_c */ -SECTION_DATA extern void* __vt__18fOpAcm_HIO_entry_c[3] = { - (void*)NULL /* RTTI */, - (void*)NULL, - (void*)__dt__18fOpAcm_HIO_entry_cFv, -}; - -/* 80D19094-80D190A0 000184 000C+00 4/4 0/0 0/0 .data __vt__14mDoHIO_entry_c */ -SECTION_DATA extern void* __vt__14mDoHIO_entry_c[3] = { - (void*)NULL /* RTTI */, - (void*)NULL, - (void*)__dt__14mDoHIO_entry_cFv, -}; - -/* 80D17B6C-80D17BD0 0000EC 0064+00 1/1 0/0 0/0 .text __ct__16daTogeTrap_HIO_cFv */ -daTogeTrap_HIO_c::daTogeTrap_HIO_c() { - // NONMATCHING -} - -/* 80D17BD0-80D17C2C 000150 005C+00 1/0 0/0 0/0 .text __dt__18fOpAcm_HIO_entry_cFv */ -// fOpAcm_HIO_entry_c::~fOpAcm_HIO_entry_c() { -extern "C" void __dt__18fOpAcm_HIO_entry_cFv() { - // NONMATCHING -} - -/* 80D17C2C-80D17C74 0001AC 0048+00 1/0 0/0 0/0 .text __dt__14mDoHIO_entry_cFv */ -// mDoHIO_entry_c::~mDoHIO_entry_c() { -extern "C" void __dt__14mDoHIO_entry_cFv() { - // NONMATCHING -} - -/* 80D17C74-80D17D5C 0001F4 00E8+00 2/2 0/0 0/0 .text setBaseMtx__12daTogeTrap_cFv */ -void daTogeTrap_c::setBaseMtx() { - // NONMATCHING -} - -/* ############################################################################################## */ -/* 80D18F08-80D18F08 000070 0000+00 0/0 0/0 0/0 .rodata @stringBase0 */ -#pragma push -#pragma force_active on -SECTION_DEAD static char const* const stringBase_80D18F08 = "P_Toge"; -#pragma pop - -/* 80D17D5C-80D17E14 0002DC 00B8+00 1/0 0/0 0/0 .text CreateHeap__12daTogeTrap_cFv */ -void daTogeTrap_c::CreateHeap() { - // NONMATCHING -} - -/* ############################################################################################## */ -/* 80D18EAC-80D18EDC 000014 0030+00 1/1 0/0 0/0 .rodata mCcDObjInfo__12daTogeTrap_c */ -SECTION_RODATA u8 const daTogeTrap_c::mCcDObjInfo[48] = { - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x02, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x1D, - 0x00, 0x48, 0x00, 0x28, 0x00, 0x00, 0x00, 0x11, 0x00, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x0A, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, -}; -COMPILER_STRIP_GATE(0x80D18EAC, &daTogeTrap_c::mCcDObjInfo); - -/* 80D18EDC-80D18EE0 000044 0004+00 1/2 0/0 0/0 .rodata @3780 */ -SECTION_RODATA static f32 const lit_3780 = 300.0f; -COMPILER_STRIP_GATE(0x80D18EDC, &lit_3780); - -/* 80D17E14-80D18008 000394 01F4+00 1/1 0/0 0/0 .text create__12daTogeTrap_cFv */ -void daTogeTrap_c::create() { - // NONMATCHING -} - -/* 80D18008-80D180D4 000588 00CC+00 1/1 0/0 0/0 .text __dt__8dCcD_CylFv */ -// dCcD_Cyl::~dCcD_Cyl() { -extern "C" void __dt__8dCcD_CylFv() { - // NONMATCHING -} - -/* 80D180D4-80D18158 000654 0084+00 1/1 0/0 0/0 .text __ct__8dCcD_CylFv */ -// dCcD_Cyl::dCcD_Cyl() { -extern "C" void __ct__8dCcD_CylFv() { - // NONMATCHING -} - -/* 80D18158-80D181A0 0006D8 0048+00 1/0 0/0 0/0 .text __dt__8cM3dGCylFv */ -// cM3dGCyl::~cM3dGCyl() { -extern "C" void __dt__8cM3dGCylFv() { - // NONMATCHING -} - -/* 80D181A0-80D181E8 000720 0048+00 1/0 0/0 0/0 .text __dt__8cM3dGAabFv */ -// cM3dGAab::~cM3dGAab() { -extern "C" void __dt__8cM3dGAabFv() { - // NONMATCHING -} - -/* 80D181E8-80D18244 000768 005C+00 1/0 0/0 0/0 .text __dt__10dCcD_GSttsFv */ -// dCcD_GStts::~dCcD_GStts() { -extern "C" void __dt__10dCcD_GSttsFv() { - // NONMATCHING -} - -/* 80D18244-80D1825C 0007C4 0018+00 1/1 0/0 0/0 .text - * rideCallBack__12daTogeTrap_cFP4dBgWP10fopAc_ac_cP10fopAc_ac_c */ -void daTogeTrap_c::rideCallBack(dBgW* param_0, fopAc_ac_c* param_1, fopAc_ac_c* param_2) { - // NONMATCHING -} - -/* 80D1825C-80D182C8 0007DC 006C+00 1/0 0/0 0/0 .text Execute__12daTogeTrap_cFPPA3_A4_f - */ -void daTogeTrap_c::Execute(f32 (**param_0)[3][4]) { - // NONMATCHING -} - -/* ############################################################################################## */ -/* 80D18EE0-80D18EE4 000048 0004+00 0/1 0/0 0/0 .rodata @3940 */ -#pragma push -#pragma force_active on -SECTION_RODATA static f32 const lit_3940 = 60.0f; -COMPILER_STRIP_GATE(0x80D18EE0, &lit_3940); -#pragma pop - -/* 80D18EE4-80D18EE8 00004C 0004+00 0/1 0/0 0/0 .rodata @3941 */ -#pragma push -#pragma force_active on -SECTION_RODATA static f32 const lit_3941 = 290.0f; -COMPILER_STRIP_GATE(0x80D18EE4, &lit_3941); -#pragma pop - -/* 80D18EE8-80D18EEC 000050 0004+00 0/1 0/0 0/0 .rodata @3942 */ -#pragma push -#pragma force_active on -SECTION_RODATA static f32 const lit_3942 = 100.0f; -COMPILER_STRIP_GATE(0x80D18EE8, &lit_3942); -#pragma pop - -/* 80D18EEC-80D18EF0 000054 0004+00 0/1 0/0 0/0 .rodata @3943 */ -#pragma push -#pragma force_active on -SECTION_RODATA static f32 const lit_3943 = 150.0f; -COMPILER_STRIP_GATE(0x80D18EEC, &lit_3943); -#pragma pop - -/* 80D18EF0-80D18EF8 000058 0008+00 0/1 0/0 0/0 .rodata @3945 */ -#pragma push -#pragma force_active on -SECTION_RODATA static u8 const lit_3945[8] = { - 0x43, 0x30, 0x00, 0x00, 0x80, 0x00, 0x00, 0x00, -}; -COMPILER_STRIP_GATE(0x80D18EF0, &lit_3945); -#pragma pop - -/* 80D190A8-80D190B4 000008 000C+00 1/1 0/0 0/0 .bss @3647 */ -static u8 lit_3647[12]; - -/* 80D190B4-80D190D4 000014 0020+00 8/8 0/0 0/0 .bss l_HIO */ -static u8 l_HIO[32]; - -/* 80D190D4-80D190D8 000034 0004+00 1/1 0/0 0/0 .bss None */ -static u8 data_80D190D4[4]; - -/* 80D182C8-80D185DC 000848 0314+00 1/1 0/0 0/0 .text moveMain__12daTogeTrap_cFv */ -void daTogeTrap_c::moveMain() { - // NONMATCHING -} - -/* ############################################################################################## */ -/* 80D18EF8-80D18EFC 000060 0004+00 1/1 0/0 0/0 .rodata @3975 */ -SECTION_RODATA static f32 const lit_3975 = 225.0f; -COMPILER_STRIP_GATE(0x80D18EF8, &lit_3975); - -/* 80D185DC-80D186B0 000B5C 00D4+00 2/2 0/0 0/0 .text playerAreaCheck__12daTogeTrap_cFv - */ -void daTogeTrap_c::playerAreaCheck() { - // NONMATCHING -} - -/* 80D186B0-80D186BC 000C30 000C+00 3/3 0/0 0/0 .text init_modeWait__12daTogeTrap_cFv */ -void daTogeTrap_c::init_modeWait() { - // NONMATCHING -} - -/* 80D186BC-80D186C0 000C3C 0004+00 1/0 0/0 0/0 .text modeWait__12daTogeTrap_cFv */ -void daTogeTrap_c::modeWait() { - /* empty function */ -} - -/* ############################################################################################## */ -/* 80D18EFC-80D18F00 000064 0004+00 3/5 0/0 0/0 .rodata @4006 */ -SECTION_RODATA static f32 const lit_4006 = 1.0f; -COMPILER_STRIP_GATE(0x80D18EFC, &lit_4006); - -/* 80D18F00-80D18F04 000068 0004+00 2/2 0/0 0/0 .rodata @4007 */ -SECTION_RODATA static f32 const lit_4007 = -1.0f; -COMPILER_STRIP_GATE(0x80D18F00, &lit_4007); - -/* 80D186C0-80D18784 000C40 00C4+00 1/1 0/0 0/0 .text init_modeMoveUp__12daTogeTrap_cFv - */ -void daTogeTrap_c::init_modeMoveUp() { - // NONMATCHING -} - -/* ############################################################################################## */ -/* 80D18F04-80D18F08 00006C 0004+00 0/2 0/0 0/0 .rodata @4036 */ -#pragma push -#pragma force_active on -SECTION_RODATA static f32 const lit_4036 = 30.0f; -COMPILER_STRIP_GATE(0x80D18F04, &lit_4036); -#pragma pop - -/* 80D18784-80D188C0 000D04 013C+00 1/0 0/0 0/0 .text modeMoveUp__12daTogeTrap_cFv */ -void daTogeTrap_c::modeMoveUp() { - // NONMATCHING -} - -/* 80D188C0-80D188DC 000E40 001C+00 1/1 0/0 0/0 .text init_modeMoveDown__12daTogeTrap_cFv - */ -void daTogeTrap_c::init_modeMoveDown() { - // NONMATCHING -} - -/* 80D188DC-80D18994 000E5C 00B8+00 1/0 0/0 0/0 .text modeMoveDown__12daTogeTrap_cFv */ -void daTogeTrap_c::modeMoveDown() { - // NONMATCHING -} - -/* 80D18994-80D18A5C 000F14 00C8+00 1/1 0/0 0/0 .text init_modeBreak__12daTogeTrap_cFv */ -void daTogeTrap_c::init_modeBreak() { - // NONMATCHING -} - -/* 80D18A5C-80D18BEC 000FDC 0190+00 1/0 0/0 0/0 .text modeBreak__12daTogeTrap_cFv */ -void daTogeTrap_c::modeBreak() { - // NONMATCHING -} - -/* 80D18BEC-80D18CA4 00116C 00B8+00 1/0 0/0 0/0 .text Draw__12daTogeTrap_cFv */ -void daTogeTrap_c::Draw() { - // NONMATCHING -} - -/* 80D18CA4-80D18CD4 001224 0030+00 1/0 0/0 0/0 .text Delete__12daTogeTrap_cFv */ -void daTogeTrap_c::Delete() { - // NONMATCHING -} - -/* 80D18CD4-80D18D00 001254 002C+00 1/0 0/0 0/0 .text daTogeTrap_Draw__FP12daTogeTrap_c - */ -static void daTogeTrap_Draw(daTogeTrap_c* param_0) { - // NONMATCHING -} - -/* 80D18D00-80D18D20 001280 0020+00 1/0 0/0 0/0 .text daTogeTrap_Execute__FP12daTogeTrap_c */ -static void daTogeTrap_Execute(daTogeTrap_c* param_0) { - // NONMATCHING -} - -/* 80D18D20-80D18D40 0012A0 0020+00 1/0 0/0 0/0 .text daTogeTrap_Delete__FP12daTogeTrap_c - */ -static void daTogeTrap_Delete(daTogeTrap_c* param_0) { - // NONMATCHING -} - -/* 80D18D40-80D18D60 0012C0 0020+00 1/0 0/0 0/0 .text daTogeTrap_Create__FP10fopAc_ac_c - */ -static void daTogeTrap_Create(fopAc_ac_c* param_0) { - // NONMATCHING -} - -/* 80D18D60-80D18DA8 0012E0 0048+00 1/0 0/0 0/0 .text __dt__10cCcD_GSttsFv */ -// cCcD_GStts::~cCcD_GStts() { -extern "C" void __dt__10cCcD_GSttsFv() { - // NONMATCHING -} - -/* 80D18DA8-80D18E14 001328 006C+00 2/1 0/0 0/0 .text __dt__16daTogeTrap_HIO_cFv */ -daTogeTrap_HIO_c::~daTogeTrap_HIO_c() { - // NONMATCHING -} - -/* 80D18E14-80D18E84 001394 0070+00 0/0 1/0 0/0 .text __sinit_d_a_obj_togeTrap_cpp */ -void __sinit_d_a_obj_togeTrap_cpp() { - // NONMATCHING -} - -#pragma push -#pragma force_active on -REGISTER_CTORS(0x80D18E14, __sinit_d_a_obj_togeTrap_cpp); -#pragma pop - /* 80D18F08-80D18F08 000070 0000+00 0/0 0/0 0/0 .rodata @stringBase0 */ diff --git a/src/d/actor/d_a_obj_tombo.cpp b/src/d/actor/d_a_obj_tombo.cpp index f9f7672e986..e814c61871a 100644 --- a/src/d/actor/d_a_obj_tombo.cpp +++ b/src/d/actor/d_a_obj_tombo.cpp @@ -4,183 +4,716 @@ */ #include "d/actor/d_a_obj_tombo.h" +#include "d/actor/d_a_player.h" +#include "d/d_menu_insect.h" #include "d/d_cc_d.h" -#include "dol2asm.h" +#include "d/d_com_inf_game.h" +#include "f_pc/f_pc_name.h" +#include "m_Do/m_Do_lib.h" +class daObj_TomHIO_c : public JORReflexible { +public: + /* 80D191CC */ daObj_TomHIO_c(); + /* 80D1B618 */ virtual ~daObj_TomHIO_c() {} + #ifdef DEBUG + void genMessage(JORMContext* context) { + // Golden dragonfly + context->genLabel("黄金蟲(トンボ)", 0x80000001, 0, NULL, 0xffff, 0xffff, 0x200, 0x18); + // Model Scale (male) + context->genSlider("モデルスケール(オス)", &mFemaleModelScale, 0.1f, 4.0f, 0, NULL, 0xffff, 0xffff, + 0x200, 0x18); + // Model Scale (female) + context->genSlider("モデルスケール(メス)", &mMaleModelScale, 0.1f, 4.0f, 0, NULL, 0xffff, 0xffff, + 0x200, 0x18); + // btk speed + context->genSlider("btkスピード", &mBtkSpeed, 0.0f, 4.0f, 0, NULL, 0xffff, 0xffff, 0x200, + 0x18); + } + #endif -// -// Forward References: -// + /* 0x04 */ s8 mId; + /* 0x08 */ f32 mFemaleModelScale; + /* 0x0C */ f32 mMaleModelScale; + /* 0x10 */ f32 mBtkSpeed; +}; -extern "C" void __ct__14daObj_TomHIO_cFv(); -extern "C" void InitCcSph__12daObjTOMBO_cFv(); -extern "C" void SetCcSph__12daObjTOMBO_cFv(); -extern "C" static void useHeapInit__FP10fopAc_ac_c(); -extern "C" void CreateHeap__12daObjTOMBO_cFv(); -extern "C" void __dt__12J3DFrameCtrlFv(); -extern "C" static void daObjTOMBO_Create__FP10fopAc_ac_c(); -extern "C" static void daObjTOMBO_Delete__FP12daObjTOMBO_c(); -extern "C" void WaitAction__12daObjTOMBO_cFv(); -extern "C" void SpeedSet__12daObjTOMBO_cFv(); -extern "C" void CheckWater__12daObjTOMBO_cFv(); -extern "C" void __dt__14dBgS_ObjGndChkFv(); -extern "C" void CheckGround__12daObjTOMBO_cFv(); -extern "C" void CheckWall__12daObjTOMBO_cFv(); -extern "C" void SearchLink__12daObjTOMBO_cFv(); -extern "C" void LinkAction__12daObjTOMBO_cFv(); -extern "C" void MoveAction__12daObjTOMBO_cFv(); -extern "C" void Action__12daObjTOMBO_cFv(); -extern "C" void ShopAction__12daObjTOMBO_cFv(); -extern "C" void Insect_Release__12daObjTOMBO_cFv(); -extern "C" void ParticleSet__12daObjTOMBO_cFv(); -extern "C" void BoomChk__12daObjTOMBO_cFv(); -extern "C" void __dt__8cM3dGPlaFv(); -extern "C" void Execute__12daObjTOMBO_cFv(); -extern "C" void ObjHit__12daObjTOMBO_cFv(); -extern "C" void Z_BufferChk__12daObjTOMBO_cFv(); -extern "C" void Delete__12daObjTOMBO_cFv(); -extern "C" void setBaseMtx__12daObjTOMBO_cFv(); -extern "C" static void daObjTOMBO_Draw__FP12daObjTOMBO_c(); -extern "C" static void daObjTOMBO_Execute__FP12daObjTOMBO_c(); -extern "C" void CreateChk__12daObjTOMBO_cFv(); -extern "C" void create__12daObjTOMBO_cFv(); -extern "C" void __dt__12dBgS_ObjAcchFv(); -extern "C" void __dt__8cM3dGSphFv(); -extern "C" void __dt__8cM3dGAabFv(); -extern "C" static bool daObjTOMBO_IsDelete__FP12daObjTOMBO_c(); -extern "C" void __dt__14daObj_TomHIO_cFv(); -extern "C" void __sinit_d_a_obj_tombo_cpp(); -extern "C" static void func_80D1B69C(); -extern "C" static void func_80D1B6A4(); -extern "C" static void func_80D1B6AC(); -extern "C" static void func_80D1B6B4(); -extern "C" static void func_80D1B6BC(); -extern "C" extern char const* const d_a_obj_tombo__stringBase0; - -// -// External References: -// - -extern "C" void mDoMtx_YrotS__FPA4_fs(); -extern "C" void transS__14mDoMtx_stack_cFRC4cXyz(); -extern "C" void scaleM__14mDoMtx_stack_cFRC4cXyz(); -extern "C" void ZXYrotM__14mDoMtx_stack_cFRC5csXyz(); -extern "C" void 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 -__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 mDoLib_project__FP3VecP3Vec(); -extern "C" void mDoLib_pos2camera__FP3VecP3Vec(); -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 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_setSimpleShadow__FP4cXyzffR13cBgS_PolyInfosfP9_GXTexObj(); -extern "C" void isEventBit__11dSv_event_cCFUs(); -extern "C" void getRes__14dRes_control_cFPCclP11dRes_info_ci(); -extern "C" void getEmitter__Q213dPa_control_c7level_cFUl(); -extern "C" void -set__13dPa_control_cFUlUcUsPC4cXyzPC12dKy_tevstr_cPC5csXyzPC4cXyzUcP18dPa_levelEcallBackScPC8_GXColorPC8_GXColorPC4cXyzf(); -extern "C" void newData__13dDlst_peekZ_cFssPUl(); -extern "C" void LineCross__4cBgSFP11cBgS_LinChk(); -extern "C" void GroundCross__4cBgSFP11cBgS_GndChk(); -extern "C" void GetTriPla__4cBgSCFRC13cBgS_PolyInfoP8cM3dGPla(); -extern "C" void GetPolyAtt0__4dBgSFRC13cBgS_PolyInfo(); -extern "C" void __ct__12dBgS_AcchCirFv(); -extern "C" void SetWall__12dBgS_AcchCirFff(); -extern "C" void __dt__9dBgS_AcchFv(); -extern "C" void __ct__9dBgS_AcchFv(); -extern "C" void Set__9dBgS_AcchFP4cXyzP4cXyzP10fopAc_ac_ciP12dBgS_AcchCirP4cXyzP5csXyzP5csXyz(); -extern "C" void CrrPos__9dBgS_AcchFR4dBgS(); -extern "C" void __ct__11dBgS_GndChkFv(); -extern "C" void __dt__11dBgS_GndChkFv(); -extern "C" void __dt__18dBgS_ObjGndChk_AllFv(); -extern "C" void __ct__11dBgS_LinChkFv(); -extern "C" void __dt__11dBgS_LinChkFv(); -extern "C" void Set__11dBgS_LinChkFPC4cXyzPC4cXyzPC10fopAc_ac_c(); -extern "C" void SetObj__16dBgS_PolyPassChkFv(); -extern "C" void __ct__10dCcD_GSttsFv(); -extern "C" void Init__9dCcD_SttsFiiP10fopAc_ac_c(); -extern "C" void __ct__12dCcD_GObjInfFv(); -extern "C" void ChkTgHit__12dCcD_GObjInfFv(); -extern "C" void GetTgHitObj__12dCcD_GObjInfFv(); -extern "C" void GetTgHitGObj__12dCcD_GObjInfFv(); -extern "C" void Set__8dCcD_SphFRC11dCcD_SrcSph(); -extern "C" void __ct__9dInsect_cFv(); -extern "C" void Insect_GetDemoMain__9dInsect_cFv(); -extern "C" void initOffset__20daPy_boomerangMove_cFPC4cXyz(); -extern "C" void posMove__20daPy_boomerangMove_cFP4cXyzPsP10fopAc_ac_cs(); -extern "C" void bgCheckAfterOffset__20daPy_boomerangMove_cFPC4cXyz(); -extern "C" void settingTevStruct__18dScnKy_env_light_cFiP4cXyzP12dKy_tevstr_c(); -extern "C" void setLightTevColorType_MAJI__18dScnKy_env_light_cFP12J3DModelDataP12dKy_tevstr_c(); -extern "C" void isCatchNotGiveInsect__14dMenu_Insect_cFUc(); -extern "C" void Set__4cCcSFP8cCcD_Obj(); -extern "C" void __mi__4cXyzCFRC3Vec(); -extern "C" void cM_atan2s__Fff(); -extern "C" void cM_rndF__Ff(); -extern "C" void cM_rndFX__Ff(); -extern "C" void SetPos__11cBgS_GndChkFPC4cXyz(); -extern "C" void SetC__8cM3dGSphFRC4cXyz(); -extern "C" void SetR__8cM3dGSphFf(); -extern "C" void cLib_addCalc2__FPffff(); -extern "C" void cLib_addCalcPos__FP4cXyzRC4cXyzfff(); -extern "C" void cLib_addCalcAngleS2__FPssss(); -extern "C" void cLib_chasePos__FP4cXyzRC4cXyzf(); -extern "C" void cLib_targetAngleY__FPC3VecPC3Vec(); -extern "C" void MtxPosition__FP4cXyzP4cXyz(); -extern "C" void __ct__10Z2CreatureFv(); -extern "C" void init__10Z2CreatureFP3VecP3VecUcUc(); -extern "C" void* __nw__FUl(); -extern "C" void __dl__FPv(); -extern "C" void init__12J3DFrameCtrlFs(); -extern "C" void _savegpr_28(); -extern "C" void _savegpr_29(); -extern "C" void _restgpr_28(); -extern "C" void _restgpr_29(); -extern "C" u8 saveBitLabels__16dSv_event_flag_c[1644 + 4 /* padding */]; -extern "C" extern void* __vt__18dBgS_ObjGndChk_All[12]; -extern "C" extern void* __vt__8dCcD_Sph[36]; -extern "C" extern void* __vt__9dCcD_Stts[11]; -extern "C" extern void* __vt__12cCcD_SphAttr[25]; -extern "C" extern void* __vt__14cCcD_ShapeAttr[22]; -extern "C" extern void* __vt__9cCcD_Stts[8]; -extern "C" u8 now__14mDoMtx_stack_c[48]; -extern "C" extern u8 g_dComIfG_gameInfo[122384]; -extern "C" u8 mSimpleTexObj__21dDlst_shadowControl_c[32]; -extern "C" extern void* calc_mtx[1 + 1 /* padding */]; -extern "C" void __register_global_object(); - -// -// Declarations: -// +/* 80D191CC-80D19200 0000EC 0034+00 1/1 0/0 0/0 .text __ct__14daObj_TomHIO_cFv */ +daObj_TomHIO_c::daObj_TomHIO_c() { + mId = -1; + mMaleModelScale = 0.9f; + mFemaleModelScale = 0.9f; + mBtkSpeed = 1.0f; +} /* ############################################################################################## */ -/* 80D1B6D8-80D1B6DC 000000 0004+00 14/14 0/0 0/0 .rodata @3775 */ -SECTION_RODATA static f32 const lit_3775 = 9.0f / 10.0f; -COMPILER_STRIP_GATE(0x80D1B6D8, &lit_3775); +/* 80D1B6E0-80D1B6E4 000008 0002+02 1/2 0/0 0/0 .rodata l_tom_itemno */ +static u8 const l_tom_itemno[2] = { + fpcNm_ITEM_M_DRAGONFLY, fpcNm_ITEM_F_DRAGONFLY, +}; -/* 80D1B6DC-80D1B6E0 000004 0004+00 3/8 0/0 0/0 .rodata @3776 */ -SECTION_RODATA static f32 const lit_3776 = 1.0f; -COMPILER_STRIP_GATE(0x80D1B6DC, &lit_3776); +/* 80D19200-80D1926C 000120 006C+00 1/1 0/0 0/0 .text InitCcSph__12daObjTOMBO_cFv */ +void daObjTOMBO_c::InitCcSph() { + const static dCcD_SrcSph ccSphSrc = { + { + {0x0, {{0x0, 0x0, 0x0}, {0x14002, 0x11}, 0x0}}, // mObj + {dCcD_SE_STONE, 0x0, 0x0, 0x0, 0x0}, // mGObjAt + {dCcD_SE_NONE, 0x0, 0x0, 0x0, 0x0}, // mGObjTg + {0x0}, // mGObjCo + }, // mObjInf + { + {{0.0f, 0.0f, 0.0f}, 40.0f} // mSph + } // mSphAttr + }; + + mStts.Init(1, 0, this); + mSph.Set(ccSphSrc); + mSph.SetStts(&mStts); + mSph.SetC(current.pos); + mSph.OnTgNoHitMark(); +} + +/* 80D1926C-80D192C4 00018C 0058+00 1/1 0/0 0/0 .text SetCcSph__12daObjTOMBO_cFv */ +void daObjTOMBO_c::SetCcSph() { + mSph.SetC(current.pos); + mSph.SetR(20.0f); + dComIfG_Ccsp()->Set(&mSph); +} + +/* 80D192C4-80D192E4 0001E4 0020+00 1/1 0/0 0/0 .text useHeapInit__FP10fopAc_ac_c */ +static int useHeapInit(fopAc_ac_c* i_this) { + return ((daObjTOMBO_c*)i_this)->CreateHeap(); +} + +/* 80D192E4-80D195CC 000204 02E8+00 1/1 0/0 0/0 .text CreateHeap__12daObjTOMBO_cFv */ +int daObjTOMBO_c::CreateHeap() { + J3DModelData* modelData = (J3DModelData*)dComIfG_getObjectRes("Tombo", 9); + JUT_ASSERT(259, modelData != 0); + mpMorf = new mDoExt_McaMorfSO(modelData, NULL, NULL, + (J3DAnmTransform*)dComIfG_getObjectRes("Tombo", 6), 2, 1.0, 0, -1, + &mCreature, 0, 0x11000284); + if (mpMorf == NULL || mpMorf->getModel() == NULL) { + return 0; + } + + J3DModel* morfModel = mpMorf->getModel(); + mBrk = new mDoExt_brkAnm(); + if (mBrk == NULL) { + return 0; + } + + if (mSex == SEX_FEMALE) { + if (!mBrk->init(morfModel->getModelData(), (J3DAnmTevRegKey*)dComIfG_getObjectRes("Tombo", 12), 1, 2, 1.0f, 0, -1)) { + return 0; + } + } else { + if (!mBrk->init(morfModel->getModelData(), (J3DAnmTevRegKey*)dComIfG_getObjectRes("Tombo", 13), 1, 2, 1.0f, 0, -1)) { + return 0; + } + } + mBtk = new mDoExt_btkAnm(); + if (mBtk == NULL) { + return 0; + } + + if (mSex == SEX_FEMALE) { + if (!mBtk->init(morfModel->getModelData(), (J3DAnmTextureSRTKey*)dComIfG_getObjectRes("Tombo", 16), 1, 2, 1.0f, 0, -1)) { + return 0; + } + } else { + if (!mBtk->init(morfModel->getModelData(), (J3DAnmTextureSRTKey*)dComIfG_getObjectRes("Tombo", 17), 1, 2, 1.0f, 0, -1)) { + return 0; + } + } + return 1; +} + +/* 80D19614-80D19634 000534 0020+00 1/0 0/0 0/0 .text daObjTOMBO_Create__FP10fopAc_ac_c + */ +static int daObjTOMBO_Create(fopAc_ac_c* i_this) { + return ((daObjTOMBO_c*)i_this)->create(); +} + +/* 80D19634-80D19658 000554 0024+00 1/0 0/0 0/0 .text daObjTOMBO_Delete__FP12daObjTOMBO_c + */ +static int daObjTOMBO_Delete(daObjTOMBO_c* i_this) { + i_this->Delete(); + return 1; +} + +/* 80D19658-80D19744 000578 00EC+00 2/2 0/0 0/0 .text WaitAction__12daObjTOMBO_cFv */ +void daObjTOMBO_c::WaitAction() { + cXyz cStack_28; + switch (field_0x712) { + case 0: + field_0x71c = field_0x71c * 0.2f; + field_0x720 = 1.0f * field_0x720; + field_0x714[0] = cM_rndF(10.0f) + 20.0f; + field_0x712++; + break; + case 1: + if (field_0x714[0] == 0) { + mAction = ACTION_MOVE; + field_0x712 = 0; + field_0x714[0] = cM_rndF(10.0f) + 10.0f; + if (field_0x714[1] == 0) { + SearchLink(); + } + } + break; + } + SpeedSet(); +} + +/* 80D19744-80D19834 000664 00F0+00 2/2 0/0 0/0 .text SpeedSet__12daObjTOMBO_cFv */ +void daObjTOMBO_c::SpeedSet() { + current.pos.y += speed.y; + cXyz cStack_1c(0.0f, 0.0f, speedF); + cXyz local_28(0.0f, 0.0f, 0.0f); + mDoMtx_stack_c::YrotS(current.angle.y); + mDoMtx_stack_c::multVec(&cStack_1c, &local_28); + current.pos.x += local_28.x; + current.pos.z += local_28.z; + cLib_addCalc2(&speedF, field_0x71c, 0.1f, 10.0f); + cLib_addCalc2(&speed.y, field_0x720, 0.1f, 10.0f); + cLib_addCalcAngleS2(¤t.angle.y, field_0x724, 0x10, 0x1000); + shape_angle.y = current.angle.y; +} + +/* 80D19834-80D1997C 000754 0148+00 1/1 0/0 0/0 .text CheckWater__12daObjTOMBO_cFv */ +bool daObjTOMBO_c::CheckWater() { + dBgS_ObjGndChk_All adStack_6c; + cXyz gndPos(current.pos.x, current.pos.y + 100.0f, current.pos.z); + adStack_6c.SetPos(&gndPos); + gndPos.y = dComIfG_Bgsp().GroundCross(&adStack_6c); + if (gndPos.y != -1e9f) { + if (dComIfG_Bgsp().GetPolyAtt0(adStack_6c) == 7 && current.pos.y - gndPos.y < 50.0f) { + return TRUE; + } + } + return FALSE; +} + +/* 80D199F4-80D19B48 000914 0154+00 1/1 0/0 0/0 .text CheckGround__12daObjTOMBO_cFv */ +void daObjTOMBO_c::CheckGround() { + dBgS_ObjGndChk_All adStack_6c; + cXyz gndPos(current.pos.x, current.pos.y + 100.0f, current.pos.z); + adStack_6c.SetPos(&gndPos); + gndPos.y = dComIfG_Bgsp().GroundCross(&adStack_6c); + if (gndPos.y != -1e9f) { + if (current.pos.y - gndPos.y < 100.0f) { + field_0x720 = 3.0f; + } else if (current.pos.y - gndPos.y > 300.0f) { + field_0x720 = -3.0f; + } + + if (current.pos.y - gndPos.y < 10.0f) { + speed.y = 0.0f; + } + } +} + +/* 80D19B48-80D19C34 000A68 00EC+00 1/1 0/0 0/0 .text CheckWall__12daObjTOMBO_cFv */ +void daObjTOMBO_c::CheckWall() { + dBgS_LinChk linChk; + cXyz cStack_8c(0.0f, 0.0f, 200.0f); + cXyz cStack_98; + cMtx_YrotS(*calc_mtx, current.angle.y); + MtxPosition(&cStack_8c, &cStack_98); + cStack_98 += current.pos; + linChk.Set(¤t.pos, &cStack_98, this); + if (dComIfG_Bgsp().LineCross(&linChk)) { + field_0x724 += 0x1000; + field_0x714[0] = cM_rndF(10.0f) + 10.0f; + } +} + +/* 80D19C34-80D19E48 000B54 0214+00 1/1 0/0 0/0 .text SearchLink__12daObjTOMBO_cFv */ +void daObjTOMBO_c::SearchLink() { + daPy_py_c* player = daPy_getPlayerActorClass(); + cXyz& playerPos = fopAcM_GetPosition(player); + if (current.pos.absXZ(playerPos) < 400.0f && current.pos.y - playerPos.y < 150.0f && + fopAcM_GetSpeedF(player) == 0.0f && player->checkItemSwordEquip()) + { + mAction = ACTION_LINK; + field_0x712 = 0; + cXyz cStack_28(30.0f, 70.0f, 0.0f); + MTXCopy(daPy_getLinkPlayerActorClass()->getModelJointMtx(9), *calc_mtx); + MtxPosition(&cStack_28, &field_0x73c); + } +} + +/* 80D19E48-80D1A138 000D68 02F0+00 2/2 0/0 0/0 .text LinkAction__12daObjTOMBO_cFv */ +void daObjTOMBO_c::LinkAction() { + daPy_py_c* player = daPy_getPlayerActorClass(); + fopAcM_GetPosition(player); + cXyz cStack_1c(30.0f, 70.0f, 0.0f); + cXyz cStack_28; + MTXCopy(daPy_getLinkPlayerActorClass()->getModelJointMtx(9), *calc_mtx); + MtxPosition(&cStack_1c, &cStack_28); + switch (field_0x712) { + case 0: + if (cLib_addCalcPos(¤t.pos, cStack_28, 0.05f, 5.0f, 0.0f) < 10.0f) { + field_0x712++; + field_0x714[0] = 200; + mpMorf->setPlaySpeed(0.0f); + } + field_0x724 = cLib_targetAngleY(¤t.pos, &cStack_28); + cLib_addCalcAngleS2(¤t.angle.y, field_0x724, 8, 0x1000); + shape_angle.y = current.angle.y; + break; + case 1: + cLib_chasePos(¤t.pos, cStack_28, 3.0f); + if (field_0x714[0] == 0) { + mAction = ACTION_WAIT; + field_0x712 = 1; + field_0x714[1] = 100; + speedF = 0.0f; + speed.y = 0.0f; + field_0x714[0] = 0; + mpMorf->setPlaySpeed(1.0f); + } + break; + } + + if ((!player->checkItemSwordEquip() || cStack_28.abs(field_0x73c) > 2.0f) && + !player->checkCutCharge()) + { + mAction = ACTION_WAIT; + field_0x712 = 1; + field_0x714[1] = 100; + speedF = 0.0f; + speed.y = 0.0f; + field_0x714[0] = 0; + mpMorf->setPlaySpeed(1.0f); + } + field_0x73c = cStack_28; +} + +/* 80D1A138-80D1A280 001058 0148+00 2/2 0/0 0/0 .text MoveAction__12daObjTOMBO_cFv */ +void daObjTOMBO_c::MoveAction() { + cXyz local_1c; + daPy_py_c* player = daPy_getPlayerActorClass(); + switch (field_0x712) { + case 0: { + field_0x71c = cM_rndF(10.0f) + 4.0f; + field_0x720 = cM_rndFX(3.0f); + speedF = 4.0f; + cXyz local_1c = home.pos - current.pos; + local_1c.x += cM_rndFX(1000.0f); + local_1c.z += cM_rndFX(1000.0f); + field_0x724 = cM_atan2s(local_1c.x, local_1c.z); + CheckGround(); + field_0x712++; + break; + } + case 1: + SpeedSet(); + cXyz* flamePos = player->getKandelaarFlamePos(); + if (flamePos != NULL) { + field_0x724 = cLib_targetAngleY(¤t.pos, flamePos); + } + if (field_0x714[0] == 0) { + mAction = ACTION_WAIT; + field_0x712 = 0; + CheckWall(); + } + break; + } +} + +/* 80D1A280-80D1A3EC 0011A0 016C+00 1/1 0/0 0/0 .text Action__12daObjTOMBO_cFv */ +void daObjTOMBO_c::Action() { + if (fopAcM_checkHookCarryNow(this)) { + if (CheckWater()) { + fopAcM_cancelHookCarryNow(this); + } + home.pos = current.pos; + } + for (int i = 0; i < 3; i++) { + field_0x714[i]--; + if (field_0x714[i] <= 0) { + field_0x714[i] = 0; + } + } + + switch (mAction) { + case ACTION_WAIT: + WaitAction(); + break; + case ACTION_MOVE: { + MoveAction(); + cLib_addCalcAngleS2( + &shape_angle.x, + cM_atan2s(field_0x720, JMAFastSqrt(speed.x * speed.x + speed.z * speed.z)) * -0.001f, 2, + 0x600); + break; + } + case ACTION_LINK: + LinkAction(); + break; + } + + Insect_GetDemoMain(); +} + +/* 80D1A3EC-80D1A514 00130C 0128+00 1/1 0/0 0/0 .text ShopAction__12daObjTOMBO_cFv */ +void daObjTOMBO_c::ShopAction() { + for (int i = 0; i < 3; i++) { + field_0x714[i]--; + if (field_0x714[i] <= 0) { + field_0x714[i] = 0; + } + } + switch (mAction) { + case ACTION_WAIT: + WaitAction(); + break; + case ACTION_MOVE: { + MoveAction(); + cLib_addCalcAngleS2( + &shape_angle.x, + cM_atan2s(field_0x720, JMAFastSqrt(speed.x * speed.x + speed.z * speed.z)) * -0.001f, 2, + 0x600); + break; + } + case ACTION_LINK: + LinkAction(); + break; + } +} + +/* 80D1A514-80D1A524 001434 0010+00 1/0 0/0 0/0 .text Insect_Release__12daObjTOMBO_cFv */ +void daObjTOMBO_c::Insect_Release() { + field_0x56c = 1; + mAction = ACTION_MOVE; +} + +static f32 dummyLiteral1() { return 3.5f; } +static f32 dummyLiteral2() { return 12000.0f; } +static f32 dummyLiteral3() { return 4096.0f; } +static f32 dummyLiteral4() { return 0.5f; } +static f32 dummyLiteral5() { return 0.7f; } +static f32 dummyLiteral6() { return 0.25f; } + +/* 80D1A524-80D1A648 001444 0124+00 1/1 0/0 0/0 .text ParticleSet__12daObjTOMBO_cFv */ +void daObjTOMBO_c::ParticleSet() { + if (field_0x750 > field_0x754) { + cLib_addCalc2(&mParticleScale, 0.0f, 1.0f, 1.0f); + } else { + cLib_addCalc2(&mParticleScale, 1.0f, 1.0f, 1.0f); + } + mParticleKey1 = dComIfGp_particle_set(mParticleKey1, 0xa1b, ¤t.pos, &tevStr, &shape_angle, + 0, 0xff, 0, -1, 0, 0, 0); + f32 scale = mParticleScale; + JPABaseEmitter* pEmitter = dComIfGp_particle_getEmitter(mParticleKey1); + if (pEmitter != NULL) { + pEmitter->setGlobalParticleScale(scale, scale); + } +} + +/* 80D1A648-80D1A8BC 001568 0274+00 1/1 0/0 0/0 .text BoomChk__12daObjTOMBO_cFv */ +void daObjTOMBO_c::BoomChk() { + daPy_py_c* player = daPy_getPlayerActorClass(); + if (mIsHitByBoomerang) { + cXyz& playerPos = fopAcM_GetPosition(player); + cXyz cStack_a8(playerPos); + cStack_a8.y += 100.0f; + if (mBoomerangMove.posMove(¤t.pos, &shape_angle.y, NULL, 0x1c00)) { + mBoomerangMove.bgCheckAfterOffset(¤t.pos); + current.pos.y += 0.5f; + } else { + dBgS_LinChk linChk; + linChk.Set(&cStack_a8, ¤t.pos, NULL); + if (dComIfG_Bgsp().LineCross(&linChk)) { + cM3dGPla pla; + dComIfG_Bgsp().GetTriPla(linChk, &pla); + current.pos = old.pos = linChk.GetCross(); + mAction = ACTION_MOVE; + field_0x712 = 0; + speedF = 5.0f; + field_0x71c = 5.0f; + mIsHitByBoomerang = false; + field_0x718 = 100; + mpMorf->setAnm((J3DAnmTransform*)dComIfG_getObjectRes("Tombo", 6), 2, 5.0f, 1.0f, + 0.0f, -1.0f); + home.pos = current.pos; + } else { + home.pos = current.pos; + mAction = ACTION_MOVE; + field_0x712 = 0; + mIsHitByBoomerang = false; + speedF = 5.0f; + field_0x71c = 5.0f; + field_0x718 = 100; + mpMorf->setAnm((J3DAnmTransform*)dComIfG_getObjectRes("Tombo", 6), 2, 5.0f, 1.0f, + 0.0f, -1.0f); + current.pos.y = old.pos.y = playerPos.y + 100.0f; + } + } + } +} + +/* 80D1B8F0-80D1B8F4 000008 0004+00 2/2 0/0 0/0 .bss None */ +static bool l_HIOInit; + +/* 80D1B900-80D1B914 000018 0014+00 3/3 0/0 0/0 .bss l_HIO */ +static daObj_TomHIO_c l_HIO; + +/* 80D1A904-80D1AB20 001824 021C+00 1/1 0/0 0/0 .text Execute__12daObjTOMBO_cFv */ +int daObjTOMBO_c::Execute() { + if (ChkGetDemo()) { + field_0x750 = field_0x754 + 10000.0f; + mCreature.startCreatureSoundLevel(Z2SE_INSCT_KIRA, 0, -1); + Insect_GetDemoMain(); + ParticleSet(); + return 1; + } + + attention_info.position = current.pos; + eyePos = current.pos; + eyePos.y += 10.0f; + switch (field_0x75c) { + case 0: + Action(); + mParticleKey2 = dComIfGp_particle_set(mParticleKey2, 0xa1c, + ¤t.pos, &tevStr, &shape_angle, 0, + 0xff, 0, -1, 0, 0, 0); + SetCcSph(); + ObjHit(); + BoomChk(); + ParticleSet(); + break; + case 1: + ShopAction(); + break; + } + + mCreature.startCreatureSoundLevel(Z2SE_INSCT_KIRA, 0, -1); + mAcch.CrrPos(dComIfG_Bgsp()); + mpMorf->play(0, dComIfGp_getReverb(fopAcM_GetRoomNo(this))); + mBtk->setPlaySpeed(l_HIO.mBtkSpeed); + mBtk->play(); + mBrk->play(); + setBaseMtx(); + return 1; +} + +/* 80D1AB20-80D1AC84 001A40 0164+00 1/1 0/0 0/0 .text ObjHit__12daObjTOMBO_cFv */ +void daObjTOMBO_c::ObjHit() { + if (mSph.ChkTgHit()) { + cCcD_Obj* tgHitObj = mSph.GetTgHitObj(); + if (tgHitObj->ChkAtType(AT_TYPE_BOOMERANG)) { + if (!mIsHitByBoomerang) { + mIsHitByBoomerang = true; + dCcD_GObjInf* tgHitObj = (dCcD_GObjInf*)mSph.GetTgHitGObj(); + mBoomerangMove.initOffset(¤t.pos, tgHitObj); + } + } else if (!tgHitObj->ChkAtType(AT_TYPE_NORMAL_SWORD) && + tgHitObj->ChkAtType(AT_TYPE_HOOKSHOT)) + { + cXyz cStack_28(0.0f, 0.0f, 0.0f); + daPy_getPlayerActorClass()->setHookshotCarryOffset(fopAcM_GetID(this), &cStack_28); + mAction = ACTION_MOVE; + field_0x712 = 0; + mIsHitByBoomerang = false; + mpMorf->setAnm((J3DAnmTransform*)dComIfG_getObjectRes("Tombo", 6), 2, 5.0f, 1.0f, 0.0f, + -1.0f); + speedF = 8.0f; + field_0x71c = cM_rndF(5.0f) + 8.0f; + } + mSph.ClrTgHit(); + } +} + +/* 80D1AC84-80D1AE00 001BA4 017C+00 1/1 0/0 0/0 .text Z_BufferChk__12daObjTOMBO_cFv */ +void daObjTOMBO_c::Z_BufferChk() { + cXyz local_5c; + cXyz cStack_68; + cStack_68 = current.pos; + cStack_68.y += 20.0f; + mDoLib_project(&cStack_68, &local_5c); + camera_class* pCamera = dComIfGp_getCamera(0); + f32 trimHeight; + if (pCamera != NULL) { + trimHeight = pCamera->mCamera.TrimHeight(); + } else { + trimHeight = 0.0f; + } + if (local_5c.x > 0.0f && local_5c.x < 608.0f && local_5c.y > trimHeight && + local_5c.y < 448.0f - trimHeight) + { + dComIfGd_peekZ(local_5c.x, local_5c.y, &field_0x754); + } + f32 near = dComIfGd_getView()->near; + f32 far = dComIfGd_getView()->far; + mDoLib_pos2camera(&cStack_68, &local_5c); + local_5c.z += 50.0f; + if (local_5c.z > 0.0f) { + local_5c.z = 0.0f; + } + field_0x750 = + ((near + ((far * near) / local_5c.z)) / (far - near) + 1.0f) * 16777215.0f; +} + +/* 80D1AE00-80D1AE68 001D20 0068+00 1/1 0/0 0/0 .text Delete__12daObjTOMBO_cFv */ +int daObjTOMBO_c::Delete() { + dComIfG_resDelete(&mPhase, "Tombo"); + if (mIsHIOOwner) { + l_HIOInit = false; + mDoHIO_DELETE_CHILD(l_HIO.mId); + } + if (heap != NULL) { + mpMorf->stopZelAnime(); + } + return 1; +} + +/* 80D1AE68-80D1AEC8 001D88 0060+00 1/1 0/0 0/0 .text setBaseMtx__12daObjTOMBO_cFv */ +void daObjTOMBO_c::setBaseMtx() { + mDoMtx_stack_c::transS(current.pos); + mDoMtx_stack_c::ZXYrotM(shape_angle); + mDoMtx_stack_c::scaleM(scale); + mpMorf->getModel()->setBaseTRMtx(mDoMtx_stack_c::get()); + mpMorf->modelCalc(); +} + +inline int daObjTOMBO_c::Draw() { + if (mDraw) { + Z_BufferChk(); + J3DModel* morfModel = mpMorf->getModel(); + g_env_light.settingTevStruct(0x10, ¤t.pos, &tevStr); + g_env_light.setLightTevColorType_MAJI(morfModel, &tevStr); + mBtk->entry(morfModel->getModelData()); + mBrk->entry(morfModel->getModelData()); + mpMorf->entryDL(); + if (!field_0x75c) { + dComIfGd_setSimpleShadow(¤t.pos, mAcch.GetGroundH(), 15.0f, mAcch.m_gnd, 0, -0.6f, + dDlst_shadowControl_c::getSimpleTex()); + } + } + return 1; +} + +/* 80D1AEC8-80D1AFA8 001DE8 00E0+00 1/0 0/0 0/0 .text daObjTOMBO_Draw__FP12daObjTOMBO_c + */ +static int daObjTOMBO_Draw(daObjTOMBO_c* i_this) { + return i_this->Draw(); +} + +/* 80D1AFA8-80D1AFC8 001EC8 0020+00 2/1 0/0 0/0 .text daObjTOMBO_Execute__FP12daObjTOMBO_c */ +static int daObjTOMBO_Execute(daObjTOMBO_c* i_this) { + return i_this->Execute(); +} + +/* 80D1B7E0-80D1B7E4 000108 0004+00 1/2 0/0 0/0 .rodata l_musiya_num */ +static u16 const l_musiya_num[2] = {0x01A3, 0x01A4}; + +/* 80D1AFC8-80D1B174 001EE8 01AC+00 1/1 0/0 0/0 .text CreateChk__12daObjTOMBO_cFv */ +bool daObjTOMBO_c::CreateChk() { + u8 uVar4 = (fopAcM_GetParam(this) & 0xf00) >> 8; + if (uVar4 == 0xf) { + uVar4 = 0; + } + + if (field_0x75c != 2) { + if (uVar4 != 0) { + if (!dComIfGs_isEventBit(dSv_event_flag_c::saveBitLabels[l_musiya_num[0]]) || !dComIfGs_isEventBit(dSv_event_flag_c::saveBitLabels[l_musiya_num[1]])) { + return 0; + } + } else if (strcmp("R_SP160", dComIfGp_getStartStageName()) == 0 && + dComIfGp_getStartStageRoomNo() == 3) + { + if (dMenu_Insect_c::isCatchNotGiveInsect(l_tom_itemno[mSex])) { + return 0; + } + + if ((mSex == SEX_MALE && + !dComIfGs_isEventBit(dSv_event_flag_c::saveBitLabels[l_musiya_num[mSex]])) || + (mSex == SEX_FEMALE && + !dComIfGs_isEventBit(dSv_event_flag_c::saveBitLabels[l_musiya_num[mSex]]))) + { + return 0; + } + } + } + return 1; +} + +/* 80D1B174-80D1B510 002094 039C+00 1/1 0/0 0/0 .text create__12daObjTOMBO_cFv */ +int daObjTOMBO_c::create() { + fopAcM_SetupActor(this, daObjTOMBO_c); + int phase = dComIfG_resLoad(&mPhase, "Tombo"); + if (phase == cPhs_COMPLEATE_e) { + OS_REPORT("TOMBO PARAM %x\n", fopAcM_GetParam(this)); + field_0x75c = fopAcM_GetParam(this) & 0xf; + if (field_0x75c == 2) { + field_0x56c = 0; + shape_angle.x -= 0x2000; + fopAcM_OnStatus(this, fopAcM_STATUS_UNK_004000); + } else { + mDraw = true; + } + attention_info.distances[fopAc_attn_CARRY_e] = 0x5d; + mSex = (fopAcM_GetParam(this) & 0x10) >> 4; + setItemNo(l_tom_itemno[mSex]); + setSaveBitNo(l_musiya_num[mSex]); + if (mSex == SEX_FEMALE) { + scale.set(l_HIO.mFemaleModelScale, l_HIO.mFemaleModelScale, l_HIO.mFemaleModelScale); + } else if (mSex == SEX_MALE) { + scale.set(l_HIO.mMaleModelScale, l_HIO.mMaleModelScale, l_HIO.mMaleModelScale); + } + if (!CreateChk()) { + return cPhs_ERROR_e; + } + if (!fopAcM_entrySolidHeap(this, useHeapInit, 0xaa0)) { + return cPhs_ERROR_e; + } + if (!l_HIOInit) { + l_HIOInit = true; + mIsHIOOwner = true; + // Golden Dragonfly + l_HIO.mId = mDoHIO_CREATE_CHILD("黄金蟲(トンボ)", &l_HIO); + } + mAcchCir.SetWall(30.0f, 50.0f); + mAcch.Set(fopAcM_GetPosition_p(this), fopAcM_GetOldPosition_p(this), this, 1, &mAcchCir, + fopAcM_GetSpeed_p(this), NULL, NULL); + mAcch.ClrWaterNone(); + if (field_0x75c == 0) { + attention_info.flags = 0; + InitCcSph(); + } + if (field_0x75c == 2) { + if (strcmp("R_SP160", dComIfGp_getStartStageName()) == 0 && + dComIfGp_getStartStageRoomNo() == 3) + { + field_0x75c = 3; + } + } + mAction = ACTION_WAIT; + field_0x712 = 0; + gravity = 0.0f; + fopAcM_SetMtx(this, mpMorf->getModel()->getBaseTRMtx()); + fopAcM_SetMin(this, -50.0f, -50.0f, -50.0f); + fopAcM_SetMax(this, 50.0f, 50.0f, 50.0f); + mCreature.init(¤t.pos, &eyePos, 3, 1); + daObjTOMBO_Execute(this); + } + return phase; +} + +/* 80D1B610-80D1B618 002530 0008+00 1/0 0/0 0/0 .text daObjTOMBO_IsDelete__FP12daObjTOMBO_c */ +static int daObjTOMBO_IsDelete(daObjTOMBO_c* param_0) { + return 1; +} /* 80D1B7F8-80D1B818 -00001 0020+00 1/0 0/0 0/0 .data l_daObjTOMBO_Method */ static actor_method_class l_daObjTOMBO_Method = { - (process_method_func)daObjTOMBO_Create__FP10fopAc_ac_c, - (process_method_func)daObjTOMBO_Delete__FP12daObjTOMBO_c, - (process_method_func)daObjTOMBO_Execute__FP12daObjTOMBO_c, - (process_method_func)daObjTOMBO_IsDelete__FP12daObjTOMBO_c, - (process_method_func)daObjTOMBO_Draw__FP12daObjTOMBO_c, + (process_method_func)daObjTOMBO_Create, + (process_method_func)daObjTOMBO_Delete, + (process_method_func)daObjTOMBO_Execute, + (process_method_func)daObjTOMBO_IsDelete, + (process_method_func)daObjTOMBO_Draw, }; /* 80D1B818-80D1B848 -00001 0030+00 0/0 0/0 1/0 .data g_profile_Obj_Tombo */ @@ -201,662 +734,4 @@ extern actor_process_profile_definition g_profile_Obj_Tombo = { fopAc_CULLBOX_CUSTOM_e, // cullType }; -/* 80D1B848-80D1B86C 000050 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_80D1B6BC, - (void*)NULL, - (void*)NULL, - (void*)func_80D1B6B4, -}; - -/* 80D1B86C-80D1B878 000074 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, -}; - -/* 80D1B878-80D1B884 000080 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, -}; - -/* 80D1B884-80D1B890 00008C 000C+00 2/2 0/0 0/0 .data __vt__8cM3dGPla */ -SECTION_DATA extern void* __vt__8cM3dGPla[3] = { - (void*)NULL /* RTTI */, - (void*)NULL, - (void*)__dt__8cM3dGPlaFv, -}; - -/* 80D1B890-80D1B89C 000098 000C+00 1/1 0/0 0/0 .data __vt__12daObjTOMBO_c */ -SECTION_DATA extern void* __vt__12daObjTOMBO_c[3] = { - (void*)NULL /* RTTI */, - (void*)NULL, - (void*)Insect_Release__12daObjTOMBO_cFv, -}; - -/* 80D1B89C-80D1B8CC 0000A4 0030+00 3/3 0/0 0/0 .data __vt__14dBgS_ObjGndChk */ -SECTION_DATA extern void* __vt__14dBgS_ObjGndChk[12] = { - (void*)NULL /* RTTI */, - (void*)NULL, - (void*)__dt__14dBgS_ObjGndChkFv, - (void*)NULL, - (void*)NULL, - (void*)func_80D1B69C, - (void*)NULL, - (void*)NULL, - (void*)func_80D1B6AC, - (void*)NULL, - (void*)NULL, - (void*)func_80D1B6A4, -}; - -/* 80D1B8CC-80D1B8D8 0000D4 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, -}; - -/* 80D1B8D8-80D1B8E4 0000E0 000C+00 2/2 0/0 0/0 .data __vt__14daObj_TomHIO_c */ -SECTION_DATA extern void* __vt__14daObj_TomHIO_c[3] = { - (void*)NULL /* RTTI */, - (void*)NULL, - (void*)__dt__14daObj_TomHIO_cFv, -}; - -/* 80D191CC-80D19200 0000EC 0034+00 1/1 0/0 0/0 .text __ct__14daObj_TomHIO_cFv */ -daObj_TomHIO_c::daObj_TomHIO_c() { - // NONMATCHING -} - -/* ############################################################################################## */ -/* 80D1B6E0-80D1B6E4 000008 0002+02 1/2 0/0 0/0 .rodata l_tom_itemno */ -SECTION_RODATA static u16 const l_tom_itemno[1 + 1 /* padding */] = { - 0xD2D3, - /* padding */ - 0x0000, -}; -COMPILER_STRIP_GATE(0x80D1B6E0, &l_tom_itemno); - -/* 80D1B6E4-80D1B724 00000C 0040+00 1/1 0/0 0/0 .rodata ccSphSrc$3780 */ -const static dCcD_SrcSph ccSphSrc = { - { - {0x0, {{0x0, 0x0, 0x0}, {0x14002, 0x11}, 0x0}}, // mObj - {dCcD_SE_STONE, 0x0, 0x0, 0x0, 0x0}, // mGObjAt - {dCcD_SE_NONE, 0x0, 0x0, 0x0, 0x0}, // mGObjTg - {0x0}, // mGObjCo - }, // mObjInf - { - {{0.0f, 0.0f, 0.0f}, 40.0f} // mSph - } // mSphAttr -}; - -/* 80D19200-80D1926C 000120 006C+00 1/1 0/0 0/0 .text InitCcSph__12daObjTOMBO_cFv */ -void daObjTOMBO_c::InitCcSph() { - // NONMATCHING -} - -/* ############################################################################################## */ -/* 80D1B724-80D1B728 00004C 0004+00 1/3 0/0 0/0 .rodata @3789 */ -SECTION_RODATA static f32 const lit_3789 = 20.0f; -COMPILER_STRIP_GATE(0x80D1B724, &lit_3789); - -/* 80D1926C-80D192C4 00018C 0058+00 1/1 0/0 0/0 .text SetCcSph__12daObjTOMBO_cFv */ -void daObjTOMBO_c::SetCcSph() { - // NONMATCHING -} - -/* 80D192C4-80D192E4 0001E4 0020+00 1/1 0/0 0/0 .text useHeapInit__FP10fopAc_ac_c */ -static void useHeapInit(fopAc_ac_c* param_0) { - // NONMATCHING -} - -/* ############################################################################################## */ -/* 80D1B7E8-80D1B7E8 000110 0000+00 0/0 0/0 0/0 .rodata @stringBase0 */ -#pragma push -#pragma force_active on -SECTION_DEAD static char const* const stringBase_80D1B7E8 = "Tombo"; -#pragma pop - -/* 80D192E4-80D195CC 000204 02E8+00 1/1 0/0 0/0 .text CreateHeap__12daObjTOMBO_cFv */ -void daObjTOMBO_c::CreateHeap() { - // NONMATCHING -} - -/* 80D195CC-80D19614 0004EC 0048+00 1/0 0/0 0/0 .text __dt__12J3DFrameCtrlFv */ -// J3DFrameCtrl::~J3DFrameCtrl() { -extern "C" void __dt__12J3DFrameCtrlFv() { - // NONMATCHING -} - -/* 80D19614-80D19634 000534 0020+00 1/0 0/0 0/0 .text daObjTOMBO_Create__FP10fopAc_ac_c - */ -static void daObjTOMBO_Create(fopAc_ac_c* param_0) { - // NONMATCHING -} - -/* 80D19634-80D19658 000554 0024+00 1/0 0/0 0/0 .text daObjTOMBO_Delete__FP12daObjTOMBO_c - */ -static void daObjTOMBO_Delete(daObjTOMBO_c* param_0) { - // NONMATCHING -} - -/* ############################################################################################## */ -/* 80D1B728-80D1B72C 000050 0004+00 0/1 0/0 0/0 .rodata @3922 */ -#pragma push -#pragma force_active on -SECTION_RODATA static f32 const lit_3922 = 1.0f / 5.0f; -COMPILER_STRIP_GATE(0x80D1B728, &lit_3922); -#pragma pop - -/* 80D1B72C-80D1B730 000054 0004+00 0/7 0/0 0/0 .rodata @3923 */ -#pragma push -#pragma force_active on -SECTION_RODATA static f32 const lit_3923 = 10.0f; -COMPILER_STRIP_GATE(0x80D1B72C, &lit_3923); -#pragma pop - -/* 80D19658-80D19744 000578 00EC+00 2/2 0/0 0/0 .text WaitAction__12daObjTOMBO_cFv */ -void daObjTOMBO_c::WaitAction() { - // NONMATCHING -} - -/* ############################################################################################## */ -/* 80D1B730-80D1B734 000058 0004+00 3/12 0/0 0/0 .rodata @3942 */ -SECTION_RODATA static u8 const lit_3942[4] = { - 0x00, - 0x00, - 0x00, - 0x00, -}; -COMPILER_STRIP_GATE(0x80D1B730, &lit_3942); - -/* 80D1B734-80D1B738 00005C 0004+00 0/1 0/0 0/0 .rodata @3943 */ -#pragma push -#pragma force_active on -SECTION_RODATA static f32 const lit_3943 = 1.0f / 10.0f; -COMPILER_STRIP_GATE(0x80D1B734, &lit_3943); -#pragma pop - -/* 80D19744-80D19834 000664 00F0+00 2/2 0/0 0/0 .text SpeedSet__12daObjTOMBO_cFv */ -void daObjTOMBO_c::SpeedSet() { - // NONMATCHING -} - -/* ############################################################################################## */ -/* 80D1B738-80D1B73C 000060 0004+00 0/3 0/0 0/0 .rodata @3971 */ -#pragma push -#pragma force_active on -SECTION_RODATA static f32 const lit_3971 = 100.0f; -COMPILER_STRIP_GATE(0x80D1B738, &lit_3971); -#pragma pop - -/* 80D1B73C-80D1B740 000064 0004+00 0/2 0/0 0/0 .rodata @3972 */ -#pragma push -#pragma force_active on -SECTION_RODATA static f32 const lit_3972 = -1000000000.0f; -COMPILER_STRIP_GATE(0x80D1B73C, &lit_3972); -#pragma pop - -/* 80D1B740-80D1B744 000068 0004+00 0/3 0/0 0/0 .rodata @3973 */ -#pragma push -#pragma force_active on -SECTION_RODATA static f32 const lit_3973 = 50.0f; -COMPILER_STRIP_GATE(0x80D1B740, &lit_3973); -#pragma pop - -/* 80D19834-80D1997C 000754 0148+00 1/1 0/0 0/0 .text CheckWater__12daObjTOMBO_cFv */ -void daObjTOMBO_c::CheckWater() { - // NONMATCHING -} - -/* 80D1997C-80D199F4 00089C 0078+00 4/3 0/0 0/0 .text __dt__14dBgS_ObjGndChkFv */ -// dBgS_ObjGndChk::~dBgS_ObjGndChk() { -extern "C" void __dt__14dBgS_ObjGndChkFv() { - // NONMATCHING -} - -/* ############################################################################################## */ -/* 80D1B744-80D1B748 00006C 0004+00 0/3 0/0 0/0 .rodata @4003 */ -#pragma push -#pragma force_active on -SECTION_RODATA static f32 const lit_4003 = 3.0f; -COMPILER_STRIP_GATE(0x80D1B744, &lit_4003); -#pragma pop - -/* 80D1B748-80D1B74C 000070 0004+00 0/1 0/0 0/0 .rodata @4004 */ -#pragma push -#pragma force_active on -SECTION_RODATA static f32 const lit_4004 = 300.0f; -COMPILER_STRIP_GATE(0x80D1B748, &lit_4004); -#pragma pop - -/* 80D1B74C-80D1B750 000074 0004+00 0/1 0/0 0/0 .rodata @4005 */ -#pragma push -#pragma force_active on -SECTION_RODATA static f32 const lit_4005 = -3.0f; -COMPILER_STRIP_GATE(0x80D1B74C, &lit_4005); -#pragma pop - -/* 80D199F4-80D19B48 000914 0154+00 1/1 0/0 0/0 .text CheckGround__12daObjTOMBO_cFv */ -void daObjTOMBO_c::CheckGround() { - // NONMATCHING -} - -/* ############################################################################################## */ -/* 80D1B750-80D1B758 000078 0004+04 0/1 0/0 0/0 .rodata @4022 */ -#pragma push -#pragma force_active on -SECTION_RODATA static f32 const lit_4022[1 + 1 /* padding */] = { - 200.0f, - /* padding */ - 0.0f, -}; -COMPILER_STRIP_GATE(0x80D1B750, &lit_4022); -#pragma pop - -/* 80D19B48-80D19C34 000A68 00EC+00 1/1 0/0 0/0 .text CheckWall__12daObjTOMBO_cFv */ -void daObjTOMBO_c::CheckWall() { - // NONMATCHING -} - -/* ############################################################################################## */ -/* 80D1B758-80D1B760 000080 0008+00 0/2 0/0 0/0 .rodata @4079 */ -#pragma push -#pragma force_active on -SECTION_RODATA static u8 const lit_4079[8] = { - 0x3F, 0xE0, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, -}; -COMPILER_STRIP_GATE(0x80D1B758, &lit_4079); -#pragma pop - -/* 80D1B760-80D1B768 000088 0008+00 0/2 0/0 0/0 .rodata @4080 */ -#pragma push -#pragma force_active on -SECTION_RODATA static u8 const lit_4080[8] = { - 0x40, 0x08, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, -}; -COMPILER_STRIP_GATE(0x80D1B760, &lit_4080); -#pragma pop - -/* 80D1B768-80D1B770 000090 0008+00 0/2 0/0 0/0 .rodata @4081 */ -#pragma push -#pragma force_active on -SECTION_RODATA static u8 const lit_4081[8] = { - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, -}; -COMPILER_STRIP_GATE(0x80D1B768, &lit_4081); -#pragma pop - -/* 80D1B770-80D1B774 000098 0004+00 0/1 0/0 0/0 .rodata @4082 */ -#pragma push -#pragma force_active on -SECTION_RODATA static f32 const lit_4082 = 400.0f; -COMPILER_STRIP_GATE(0x80D1B770, &lit_4082); -#pragma pop - -/* 80D1B774-80D1B778 00009C 0004+00 0/1 0/0 0/0 .rodata @4083 */ -#pragma push -#pragma force_active on -SECTION_RODATA static f32 const lit_4083 = 150.0f; -COMPILER_STRIP_GATE(0x80D1B774, &lit_4083); -#pragma pop - -/* 80D1B778-80D1B77C 0000A0 0004+00 0/3 0/0 0/0 .rodata @4084 */ -#pragma push -#pragma force_active on -SECTION_RODATA static f32 const lit_4084 = 30.0f; -COMPILER_STRIP_GATE(0x80D1B778, &lit_4084); -#pragma pop - -/* 80D1B77C-80D1B780 0000A4 0004+00 0/2 0/0 0/0 .rodata @4085 */ -#pragma push -#pragma force_active on -SECTION_RODATA static f32 const lit_4085 = 70.0f; -COMPILER_STRIP_GATE(0x80D1B77C, &lit_4085); -#pragma pop - -/* 80D19C34-80D19E48 000B54 0214+00 1/1 0/0 0/0 .text SearchLink__12daObjTOMBO_cFv */ -void daObjTOMBO_c::SearchLink() { - // NONMATCHING -} - -/* ############################################################################################## */ -/* 80D1B780-80D1B784 0000A8 0004+00 0/1 0/0 0/0 .rodata @4149 */ -#pragma push -#pragma force_active on -SECTION_RODATA static f32 const lit_4149 = 1.0f / 20.0f; -COMPILER_STRIP_GATE(0x80D1B780, &lit_4149); -#pragma pop - -/* 80D1B784-80D1B788 0000AC 0004+00 0/3 0/0 0/0 .rodata @4150 */ -#pragma push -#pragma force_active on -SECTION_RODATA static f32 const lit_4150 = 5.0f; -COMPILER_STRIP_GATE(0x80D1B784, &lit_4150); -#pragma pop - -/* 80D1B788-80D1B78C 0000B0 0004+00 0/1 0/0 0/0 .rodata @4151 */ -#pragma push -#pragma force_active on -SECTION_RODATA static f32 const lit_4151 = 2.0f; -COMPILER_STRIP_GATE(0x80D1B788, &lit_4151); -#pragma pop - -/* 80D19E48-80D1A138 000D68 02F0+00 2/2 0/0 0/0 .text LinkAction__12daObjTOMBO_cFv */ -void daObjTOMBO_c::LinkAction() { - // NONMATCHING -} - -/* ############################################################################################## */ -/* 80D1B78C-80D1B790 0000B4 0004+00 0/1 0/0 0/0 .rodata @4175 */ -#pragma push -#pragma force_active on -SECTION_RODATA static f32 const lit_4175 = 4.0f; -COMPILER_STRIP_GATE(0x80D1B78C, &lit_4175); -#pragma pop - -/* 80D1B790-80D1B794 0000B8 0004+00 0/1 0/0 0/0 .rodata @4176 */ -#pragma push -#pragma force_active on -SECTION_RODATA static f32 const lit_4176 = 1000.0f; -COMPILER_STRIP_GATE(0x80D1B790, &lit_4176); -#pragma pop - -/* 80D1A138-80D1A280 001058 0148+00 2/2 0/0 0/0 .text MoveAction__12daObjTOMBO_cFv */ -void daObjTOMBO_c::MoveAction() { - // NONMATCHING -} - -/* ############################################################################################## */ -/* 80D1B794-80D1B798 0000BC 0004+00 2/2 0/0 0/0 .rodata @4210 */ -SECTION_RODATA static u32 const lit_4210 = 0xBA83126F; -COMPILER_STRIP_GATE(0x80D1B794, &lit_4210); - -/* 80D1B798-80D1B7A0 0000C0 0008+00 2/2 0/0 0/0 .rodata @4212 */ -SECTION_RODATA static u8 const lit_4212[8] = { - 0x43, 0x30, 0x00, 0x00, 0x80, 0x00, 0x00, 0x00, -}; -COMPILER_STRIP_GATE(0x80D1B798, &lit_4212); - -/* 80D1A280-80D1A3EC 0011A0 016C+00 1/1 0/0 0/0 .text Action__12daObjTOMBO_cFv */ -void daObjTOMBO_c::Action() { - // NONMATCHING -} - -/* 80D1A3EC-80D1A514 00130C 0128+00 1/1 0/0 0/0 .text ShopAction__12daObjTOMBO_cFv */ -void daObjTOMBO_c::ShopAction() { - // NONMATCHING -} - -/* 80D1A514-80D1A524 001434 0010+00 1/0 0/0 0/0 .text Insect_Release__12daObjTOMBO_cFv */ -void daObjTOMBO_c::Insect_Release() { - // NONMATCHING -} - -/* ############################################################################################## */ -/* 80D1B7A0-80D1B7A4 0000C8 0004+00 0/0 0/0 0/0 .rodata @4311 */ -#pragma push -#pragma force_active on -SECTION_RODATA static f32 const lit_4311 = 3.5f; -COMPILER_STRIP_GATE(0x80D1B7A0, &lit_4311); -#pragma pop - -/* 80D1B7A4-80D1B7A8 0000CC 0004+00 0/0 0/0 0/0 .rodata @4312 */ -#pragma push -#pragma force_active on -SECTION_RODATA static f32 const lit_4312 = 12000.0f; -COMPILER_STRIP_GATE(0x80D1B7A4, &lit_4312); -#pragma pop - -/* 80D1B7A8-80D1B7AC 0000D0 0004+00 0/0 0/0 0/0 .rodata @4313 */ -#pragma push -#pragma force_active on -SECTION_RODATA static f32 const lit_4313 = 4096.0f; -COMPILER_STRIP_GATE(0x80D1B7A8, &lit_4313); -#pragma pop - -/* 80D1B7AC-80D1B7B0 0000D4 0004+00 0/1 0/0 0/0 .rodata @4314 */ -#pragma push -#pragma force_active on -SECTION_RODATA static f32 const lit_4314 = 0.5f; -COMPILER_STRIP_GATE(0x80D1B7AC, &lit_4314); -#pragma pop - -/* 80D1B7B0-80D1B7B4 0000D8 0004+00 0/0 0/0 0/0 .rodata @4315 */ -#pragma push -#pragma force_active on -SECTION_RODATA static f32 const lit_4315 = 7.0f / 10.0f; -COMPILER_STRIP_GATE(0x80D1B7B0, &lit_4315); -#pragma pop - -/* 80D1B7B4-80D1B7B8 0000DC 0004+00 0/0 0/0 0/0 .rodata @4316 */ -#pragma push -#pragma force_active on -SECTION_RODATA static f32 const lit_4316 = 0.25f; -COMPILER_STRIP_GATE(0x80D1B7B4, &lit_4316); -#pragma pop - -/* 80D1B7B8-80D1B7C0 0000E0 0008+00 1/2 0/0 0/0 .rodata @4347 */ -SECTION_RODATA static u8 const lit_4347[8] = { - 0x43, 0x30, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, -}; -COMPILER_STRIP_GATE(0x80D1B7B8, &lit_4347); - -/* 80D1A524-80D1A648 001444 0124+00 1/1 0/0 0/0 .text ParticleSet__12daObjTOMBO_cFv */ -void daObjTOMBO_c::ParticleSet() { - // NONMATCHING -} - -/* ############################################################################################## */ -/* 80D1B7C0-80D1B7C4 0000E8 0004+00 0/2 0/0 0/0 .rodata @4420 */ -#pragma push -#pragma force_active on -SECTION_RODATA static f32 const lit_4420 = -1.0f; -COMPILER_STRIP_GATE(0x80D1B7C0, &lit_4420); -#pragma pop - -/* 80D1A648-80D1A8BC 001568 0274+00 1/1 0/0 0/0 .text BoomChk__12daObjTOMBO_cFv */ -void daObjTOMBO_c::BoomChk() { - // NONMATCHING -} - -/* 80D1A8BC-80D1A904 0017DC 0048+00 1/0 0/0 0/0 .text __dt__8cM3dGPlaFv */ -// cM3dGPla::~cM3dGPla() { -extern "C" void __dt__8cM3dGPlaFv() { - // NONMATCHING -} - -/* ############################################################################################## */ -/* 80D1B7C4-80D1B7C8 0000EC 0004+00 0/1 0/0 0/0 .rodata @4454 */ -#pragma push -#pragma force_active on -SECTION_RODATA static f32 const lit_4454 = 10000.0f; -COMPILER_STRIP_GATE(0x80D1B7C4, &lit_4454); -#pragma pop - -/* 80D1B8F0-80D1B8F4 000008 0004+00 2/2 0/0 0/0 .bss None */ -static u8 data_80D1B8F0[4]; - -/* 80D1B8F4-80D1B900 00000C 000C+00 1/1 0/0 0/0 .bss @3770 */ -static u8 lit_3770[12]; - -/* 80D1B900-80D1B914 000018 0014+00 3/3 0/0 0/0 .bss l_HIO */ -static u8 l_HIO[20]; - -/* 80D1A904-80D1AB20 001824 021C+00 1/1 0/0 0/0 .text Execute__12daObjTOMBO_cFv */ -void daObjTOMBO_c::Execute() { - // NONMATCHING -} - -/* ############################################################################################## */ -/* 80D1B7C8-80D1B7CC 0000F0 0004+00 0/1 0/0 0/0 .rodata @4485 */ -#pragma push -#pragma force_active on -SECTION_RODATA static f32 const lit_4485 = 8.0f; -COMPILER_STRIP_GATE(0x80D1B7C8, &lit_4485); -#pragma pop - -/* 80D1AB20-80D1AC84 001A40 0164+00 1/1 0/0 0/0 .text ObjHit__12daObjTOMBO_cFv */ -void daObjTOMBO_c::ObjHit() { - // NONMATCHING -} - -/* ############################################################################################## */ -/* 80D1B7CC-80D1B7D0 0000F4 0004+00 0/1 0/0 0/0 .rodata @4523 */ -#pragma push -#pragma force_active on -SECTION_RODATA static f32 const lit_4523 = 608.0f; -COMPILER_STRIP_GATE(0x80D1B7CC, &lit_4523); -#pragma pop - -/* 80D1B7D0-80D1B7D4 0000F8 0004+00 0/1 0/0 0/0 .rodata @4524 */ -#pragma push -#pragma force_active on -SECTION_RODATA static f32 const lit_4524 = 448.0f; -COMPILER_STRIP_GATE(0x80D1B7D0, &lit_4524); -#pragma pop - -/* 80D1B7D4-80D1B7D8 0000FC 0004+00 0/1 0/0 0/0 .rodata @4525 */ -#pragma push -#pragma force_active on -SECTION_RODATA static f32 const lit_4525 = 16777215.0f; -COMPILER_STRIP_GATE(0x80D1B7D4, &lit_4525); -#pragma pop - -/* 80D1AC84-80D1AE00 001BA4 017C+00 1/1 0/0 0/0 .text Z_BufferChk__12daObjTOMBO_cFv */ -void daObjTOMBO_c::Z_BufferChk() { - // NONMATCHING -} - -/* 80D1AE00-80D1AE68 001D20 0068+00 1/1 0/0 0/0 .text Delete__12daObjTOMBO_cFv */ -void daObjTOMBO_c::Delete() { - // NONMATCHING -} - -/* 80D1AE68-80D1AEC8 001D88 0060+00 1/1 0/0 0/0 .text setBaseMtx__12daObjTOMBO_cFv */ -void daObjTOMBO_c::setBaseMtx() { - // NONMATCHING -} - -/* ############################################################################################## */ -/* 80D1B7D8-80D1B7DC 000100 0004+00 1/1 0/0 0/0 .rodata @4590 */ -SECTION_RODATA static f32 const lit_4590 = 15.0f; -COMPILER_STRIP_GATE(0x80D1B7D8, &lit_4590); - -/* 80D1B7DC-80D1B7E0 000104 0004+00 1/1 0/0 0/0 .rodata @4591 */ -SECTION_RODATA static f32 const lit_4591 = -3.0f / 5.0f; -COMPILER_STRIP_GATE(0x80D1B7DC, &lit_4591); - -/* 80D1AEC8-80D1AFA8 001DE8 00E0+00 1/0 0/0 0/0 .text daObjTOMBO_Draw__FP12daObjTOMBO_c - */ -static void daObjTOMBO_Draw(daObjTOMBO_c* param_0) { - // NONMATCHING -} - -/* 80D1AFA8-80D1AFC8 001EC8 0020+00 2/1 0/0 0/0 .text daObjTOMBO_Execute__FP12daObjTOMBO_c */ -static void daObjTOMBO_Execute(daObjTOMBO_c* param_0) { - // NONMATCHING -} - -/* ############################################################################################## */ -/* 80D1B7E0-80D1B7E4 000108 0004+00 1/2 0/0 0/0 .rodata l_musiya_num */ -SECTION_RODATA static u32 const l_musiya_num = 0x01A301A4; -COMPILER_STRIP_GATE(0x80D1B7E0, &l_musiya_num); - -/* 80D1B7E8-80D1B7E8 000110 0000+00 0/0 0/0 0/0 .rodata @stringBase0 */ -#pragma push -#pragma force_active on -SECTION_DEAD static char const* const stringBase_80D1B7EE = "R_SP160"; -#pragma pop - -/* 80D1AFC8-80D1B174 001EE8 01AC+00 1/1 0/0 0/0 .text CreateChk__12daObjTOMBO_cFv */ -void daObjTOMBO_c::CreateChk() { - // NONMATCHING -} - -/* ############################################################################################## */ -/* 80D1B7E4-80D1B7E8 00010C 0004+00 0/1 0/0 0/0 .rodata @4744 */ -#pragma push -#pragma force_active on -SECTION_RODATA static f32 const lit_4744 = -50.0f; -COMPILER_STRIP_GATE(0x80D1B7E4, &lit_4744); -#pragma pop - -/* 80D1B174-80D1B510 002094 039C+00 1/1 0/0 0/0 .text create__12daObjTOMBO_cFv */ -void daObjTOMBO_c::create() { - // NONMATCHING -} - -/* 80D1B510-80D1B580 002430 0070+00 3/2 0/0 0/0 .text __dt__12dBgS_ObjAcchFv */ -// dBgS_ObjAcch::~dBgS_ObjAcch() { -extern "C" void __dt__12dBgS_ObjAcchFv() { - // NONMATCHING -} - -/* 80D1B580-80D1B5C8 0024A0 0048+00 1/0 0/0 0/0 .text __dt__8cM3dGSphFv */ -// cM3dGSph::~cM3dGSph() { -extern "C" void __dt__8cM3dGSphFv() { - // NONMATCHING -} - -/* 80D1B5C8-80D1B610 0024E8 0048+00 1/0 0/0 0/0 .text __dt__8cM3dGAabFv */ -// cM3dGAab::~cM3dGAab() { -extern "C" void __dt__8cM3dGAabFv() { - // NONMATCHING -} - -/* 80D1B610-80D1B618 002530 0008+00 1/0 0/0 0/0 .text daObjTOMBO_IsDelete__FP12daObjTOMBO_c */ -static bool daObjTOMBO_IsDelete(daObjTOMBO_c* param_0) { - return true; -} - -/* 80D1B618-80D1B660 002538 0048+00 2/1 0/0 0/0 .text __dt__14daObj_TomHIO_cFv */ -daObj_TomHIO_c::~daObj_TomHIO_c() { - // NONMATCHING -} - -/* 80D1B660-80D1B69C 002580 003C+00 0/0 1/0 0/0 .text __sinit_d_a_obj_tombo_cpp */ -void __sinit_d_a_obj_tombo_cpp() { - // NONMATCHING -} - -#pragma push -#pragma force_active on -REGISTER_CTORS(0x80D1B660, __sinit_d_a_obj_tombo_cpp); -#pragma pop - -/* 80D1B69C-80D1B6A4 0025BC 0008+00 1/0 0/0 0/0 .text @20@__dt__14dBgS_ObjGndChkFv */ -static void func_80D1B69C() { - // NONMATCHING -} - -/* 80D1B6A4-80D1B6AC 0025C4 0008+00 1/0 0/0 0/0 .text @76@__dt__14dBgS_ObjGndChkFv */ -static void func_80D1B6A4() { - // NONMATCHING -} - -/* 80D1B6AC-80D1B6B4 0025CC 0008+00 1/0 0/0 0/0 .text @60@__dt__14dBgS_ObjGndChkFv */ -static void func_80D1B6AC() { - // NONMATCHING -} - -/* 80D1B6B4-80D1B6BC 0025D4 0008+00 1/0 0/0 0/0 .text @36@__dt__12dBgS_ObjAcchFv */ -static void func_80D1B6B4() { - // NONMATCHING -} - -/* 80D1B6BC-80D1B6C4 0025DC 0008+00 1/0 0/0 0/0 .text @20@__dt__12dBgS_ObjAcchFv */ -static void func_80D1B6BC() { - // NONMATCHING -} - /* 80D1B7E8-80D1B7E8 000110 0000+00 0/0 0/0 0/0 .rodata @stringBase0 */ diff --git a/src/d/actor/d_a_tag_wljump.cpp b/src/d/actor/d_a_tag_wljump.cpp index 95404dd9148..a6f59dc4d3d 100644 --- a/src/d/actor/d_a_tag_wljump.cpp +++ b/src/d/actor/d_a_tag_wljump.cpp @@ -83,7 +83,7 @@ int daTagWljump_c::execute() { if (!midna->checkShadowModeTalkWait()) { if (shape_angle.x != 0 && (field_0x571 == 0xff || !fopAcM_isSwitch(this, field_0x571))) { if (field_0x56f == 0) { - mMsgFlow.init(this, shape_angle.x & 0xFFFF, 0, NULL); + mMsgFlow.init(this, (u16)shape_angle.x, 0, NULL); field_0x56f = 1; mDoAud_seStart(Z2SE_NAVI_TALK_START, NULL, 0, 0); } else { @@ -207,7 +207,11 @@ int daTagWljump_c::execute() { field_0x570 = field_0x568; field_0x568 = -1; } else { +#if DEBUG + attention_info.flags |= 0x801; +#else attention_info.flags |= 0x81; +#endif } } else { field_0x572 = 0; diff --git a/tools/utilities/greg_calc.py b/tools/utilities/greg_calc.py new file mode 100644 index 00000000000..40e10049076 --- /dev/null +++ b/tools/utilities/greg_calc.py @@ -0,0 +1,104 @@ +import sys + +REG_F = { + "TREG_F": 0x00c, + "DREG_F": 0x09c, + "IREG_F": 0x12c, + "SREG_F": 0x1bc, + "UREG_F": 0x24c, + "OREG_F": 0x2dc, + "YREG_F": 0x36c, + "KREG_F": 0x3fc, + "BREG_F": 0x48c, + "MREG_F": 0x51c, + "AREG_F": 0x5ac, + "PREG_F": 0x63c, + "NREG_F": 0x6cc, + "WREG_F": 0x75c, + "JREG_F": 0x7ec, + "HREG_F": 0x87c, + "VREG_F": 0x90c, + "XREG_F": 0x99c, + "ZREG_F": 0xa2c, + "nREG_F": 0xabc, + "kREG_F": 0xb4c, + "oREG_F": 0xbdc, + "yREG_F": 0xc6c, + "aREG_F": 0xcfc, + "hREG_F": 0xd8c, + "tREG_F": 0xe1c +} + +REG_S = { + "TREG_S": 0x084, + "DREG_S": 0x114, + "IREG_S": 0x1a4, + "SREG_S": 0x234, + "UREG_S": 0x2c4, + "OREG_S": 0x354, + "YREG_S": 0x3e4, + "KREG_S": 0x474, + "BREG_S": 0x504, + "MREG_S": 0x594, + "AREG_S": 0x624, + "PREG_S": 0x6b4, + "NREG_S": 0x744, + "WREG_S": 0x7d4, + "JREG_S": 0x864, + "HREG_S": 0x8f4, + "VREG_S": 0x984, + "XREG_S": 0xa14, + "ZREG_S": 0xaa4, + "nREG_S": 0xb34, + "kREG_S": 0xbc4, + "oREG_S": 0xc54, + "yREG_S": 0xce4, + "aREG_S": 0xd74, + "hREG_S": 0xe04, + "tREG_S": 0xe94 +} + + +def find_register(hex_val, reg_map, step): + best_match = None + best_base = -1 + + for name, base in reg_map.items(): + if base <= hex_val and base > best_base: + best_match = name + best_base = base + + if best_match is not None: + index = (hex_val - best_base) // step + expected = best_base + index * step + if expected == hex_val: + return f"{best_match}({index})" + + raise ValueError("No matching register found.") + + +def main(): + if len(sys.argv) != 3: + print("Usage: greg_calc.py [s|f] [hex_val]") + return + + mode = sys.argv[1].lower() + try: + hex_val = int(sys.argv[2], 16) + except ValueError: + print("Invalid hex value. Use format like 0x75c") + return + + if mode == 'f': + result = find_register(hex_val, REG_F, 4) + elif mode == 's': + result = find_register(hex_val, REG_S, 2) + else: + print("Invalid mode. Use 's' for short or 'f' for float.") + return + + print(result) + + +if __name__ == "__main__": + main()