diff --git a/config/SOUE01/rels/d_a_b_girahimu2NP/symbols.txt b/config/SOUE01/rels/d_a_b_girahimu2NP/symbols.txt index 526b93180..4ef9bc78b 100644 --- a/config/SOUE01/rels/d_a_b_girahimu2NP/symbols.txt +++ b/config/SOUE01/rels/d_a_b_girahimu2NP/symbols.txt @@ -4,166 +4,166 @@ _unresolved = .text:0x00000060; // type:function size:0x4 scope:global __register_global_object = .text:0x00000070; // type:function size:0x1C scope:global __destroy_global_chain = .text:0x00000090; // type:function size:0x54 scope:global dAcGirahimu2_c_classInit__Fv = .text:0x000000F0; // type:function size:0x414 -__dt__27sFState_c<14dAcGirahimu2_c>Fv = .text:0x00000510; // type:function size:0x58 -__dt__30sFStateFct_c<14dAcGirahimu2_c>Fv = .text:0x00000570; // type:function size:0x6C -__dt__83sStateMgr_c<14dAcGirahimu2_c,20sStateMethodUsr_FI_c,12sFStateFct_c,13sStateIDChk_c>Fv = .text:0x000005E0; // type:function size:0xA0 -__dt__53sFStateMgr_c<14dAcGirahimu2_c,20sStateMethodUsr_FI_c>Fv = .text:0x00000680; // type:function size:0xA4 -fn_228_730 = .text:0x00000730; // type:function size:0x3C -fn_228_770 = .text:0x00000770; // type:function size:0x40 -fn_228_7B0 = .text:0x000007B0; // type:function size:0x4 -fn_228_7C0 = .text:0x000007C0; // type:function size:0x40 -fn_228_800 = .text:0x00000800; // type:function size:0x58 -fn_228_860 = .text:0x00000860; // type:function size:0x84 -fn_228_8F0 = .text:0x000008F0; // type:function size:0x58 -fn_228_950 = .text:0x00000950; // type:function size:0x90 -fn_228_9E0 = .text:0x000009E0; // type:function size:0xCC -fn_228_AB0 = .text:0x00000AB0; // type:function size:0x90 -fn_228_B40 = .text:0x00000B40; // type:function size:0x90 -fn_228_BD0 = .text:0x00000BD0; // type:function size:0x14 -fn_228_BF0 = .text:0x00000BF0; // type:function size:0x58 -fn_228_C50 = .text:0x00000C50; // type:function size:0xB0 -fn_228_D00 = .text:0x00000D00; // type:function size:0x2EC -changeState__83sStateMgr_c<14dAcGirahimu2_c,20sStateMethodUsr_FI_c,12sFStateFct_c,13sStateIDChk_c>FRC12sStateIDIf_c = .text:0x00000FF0; // type:function size:0x10 -fn_228_1000 = .text:0x00001000; // type:function size:0x4 -fn_228_1010 = .text:0x00001010; // type:function size:0x88 -fn_228_10A0 = .text:0x000010A0; // type:function size:0x234 -fn_228_12E0 = .text:0x000012E0; // type:function size:0x4 -fn_228_12F0 = .text:0x000012F0; // type:function size:0x1AC -fn_228_14A0 = .text:0x000014A0; // type:function size:0x380 -fn_228_1820 = .text:0x00001820; // type:function size:0x4 -fn_228_1830 = .text:0x00001830; // type:function size:0x6C -fn_228_18A0 = .text:0x000018A0; // type:function size:0x1F0 -fn_228_1A90 = .text:0x00001A90; // type:function size:0x4 -fn_228_1AA0 = .text:0x00001AA0; // type:function size:0xA4 -fn_228_1B50 = .text:0x00001B50; // type:function size:0xC0 -fn_228_1C10 = .text:0x00001C10; // type:function size:0xC -fn_228_1C20 = .text:0x00001C20; // type:function size:0xB0 -fn_228_1CD0 = .text:0x00001CD0; // type:function size:0xC4 -fn_228_1DA0 = .text:0x00001DA0; // type:function size:0xC -fn_228_1DB0 = .text:0x00001DB0; // type:function size:0x178 -fn_228_1F30 = .text:0x00001F30; // type:function size:0xE8 -fn_228_2020 = .text:0x00002020; // type:function size:0x4 -fn_228_2030 = .text:0x00002030; // type:function size:0x190 -fn_228_21C0 = .text:0x000021C0; // type:function size:0x7EC -fn_228_29B0 = .text:0x000029B0; // type:function size:0x18 -fn_228_29D0 = .text:0x000029D0; // type:function size:0xA4 -fn_228_2A80 = .text:0x00002A80; // type:function size:0x128 -fn_228_2BB0 = .text:0x00002BB0; // type:function size:0x4C -fn_228_2C00 = .text:0x00002C00; // type:function size:0xC -fn_228_2C10 = .text:0x00002C10; // type:function size:0x90 -fn_228_2CA0 = .text:0x00002CA0; // type:function size:0x2DC -fn_228_2F80 = .text:0x00002F80; // type:function size:0x18 -fn_228_2FA0 = .text:0x00002FA0; // type:function size:0x190 -fn_228_3130 = .text:0x00003130; // type:function size:0x244 -fn_228_3380 = .text:0x00003380; // type:function size:0x7C -fn_228_3400 = .text:0x00003400; // type:function size:0x1F8 -fn_228_3600 = .text:0x00003600; // type:function size:0x114 -fn_228_3720 = .text:0x00003720; // type:function size:0x28 -fn_228_3750 = .text:0x00003750; // type:function size:0x7C -fn_228_37D0 = .text:0x000037D0; // type:function size:0xB4 -fn_228_3890 = .text:0x00003890; // type:function size:0x28 -fn_228_38C0 = .text:0x000038C0; // type:function size:0x80 -fn_228_3940 = .text:0x00003940; // type:function size:0x1A8 -fn_228_3AF0 = .text:0x00003AF0; // type:function size:0x34 -fn_228_3B30 = .text:0x00003B30; // type:function size:0xCC -fn_228_3C00 = .text:0x00003C00; // type:function size:0xD8 -fn_228_3CE0 = .text:0x00003CE0; // type:function size:0xC -fn_228_3CF0 = .text:0x00003CF0; // type:function size:0xD0 -fn_228_3DC0 = .text:0x00003DC0; // type:function size:0x76C -fn_228_4530 = .text:0x00004530; // type:function size:0x18 -fn_228_4550 = .text:0x00004550; // type:function size:0x2A0 -fn_228_47F0 = .text:0x000047F0; // type:function size:0x100 -fn_228_48F0 = .text:0x000048F0; // type:function size:0x98 -fn_228_4990 = .text:0x00004990; // type:function size:0x7C -fn_228_4A10 = .text:0x00004A10; // type:function size:0x18 -fn_228_4A30 = .text:0x00004A30; // type:function size:0x1A0 -fn_228_4BD0 = .text:0x00004BD0; // type:function size:0x48 -fn_228_4C20 = .text:0x00004C20; // type:function size:0xA4 -fn_228_4CD0 = .text:0x00004CD0; // type:function size:0xC8 -fn_228_4DA0 = .text:0x00004DA0; // type:function size:0x354 -getStateID__83sStateMgr_c<14dAcGirahimu2_c,20sStateMethodUsr_FI_c,12sFStateFct_c,13sStateIDChk_c>CFv = .text:0x00005100; // type:function size:0x10 -fn_228_5110 = .text:0x00005110; // type:function size:0x2E4 -fn_228_5400 = .text:0x00005400; // type:function size:0x340 -fn_228_5740 = .text:0x00005740; // type:function size:0x24 -fn_228_5770 = .text:0x00005770; // type:function size:0x720 -fn_228_5E90 = .text:0x00005E90; // type:function size:0x28 -fn_228_5EC0 = .text:0x00005EC0; // type:function size:0x28 -fn_228_5EF0 = .text:0x00005EF0; // type:function size:0x9C -fn_228_5F90 = .text:0x00005F90; // type:function size:0x324 -fn_228_62C0 = .text:0x000062C0; // type:function size:0x3C -fn_228_6300 = .text:0x00006300; // type:function size:0x334 -fn_228_6640 = .text:0x00006640; // type:function size:0x158 -fn_228_67A0 = .text:0x000067A0; // type:function size:0x8 -fn_228_67B0 = .text:0x000067B0; // type:function size:0x8 -fn_228_67C0 = .text:0x000067C0; // type:function size:0x184 -fn_228_6950 = .text:0x00006950; // type:function size:0x764 -executeState__83sStateMgr_c<14dAcGirahimu2_c,20sStateMethodUsr_FI_c,12sFStateFct_c,13sStateIDChk_c>Fv = .text:0x000070C0; // type:function size:0x10 -fn_228_70D0 = .text:0x000070D0; // type:function size:0xD0 -fn_228_71A0 = .text:0x000071A0; // type:function size:0x334 -fn_228_74E0 = .text:0x000074E0; // type:function size:0x4 -fn_228_74F0 = .text:0x000074F0; // type:function size:0xC0 -fn_228_75B0 = .text:0x000075B0; // type:function size:0x110 -fn_228_76C0 = .text:0x000076C0; // type:function size:0x14 -fn_228_76E0 = .text:0x000076E0; // type:function size:0x90 -fn_228_7770 = .text:0x00007770; // type:function size:0xE4 -fn_228_7860 = .text:0x00007860; // type:function size:0x18 -fn_228_7880 = .text:0x00007880; // type:function size:0x58 -fn_228_78E0 = .text:0x000078E0; // type:function size:0x194 -fn_228_7A80 = .text:0x00007A80; // type:function size:0x4 -fn_228_7A90 = .text:0x00007A90; // type:function size:0x148 -fn_228_7BE0 = .text:0x00007BE0; // type:function size:0x42C -fn_228_8010 = .text:0x00008010; // type:function size:0x90 -fn_228_80A0 = .text:0x000080A0; // type:function size:0x38 -fn_228_80E0 = .text:0x000080E0; // type:function size:0x1DC -fn_228_82C0 = .text:0x000082C0; // type:function size:0x61C -fn_228_88E0 = .text:0x000088E0; // type:function size:0x70 -fn_228_8950 = .text:0x00008950; // type:function size:0x38 -fn_228_8990 = .text:0x00008990; // type:function size:0x18 -fn_228_89B0 = .text:0x000089B0; // type:function size:0xF4 -fn_228_8AB0 = .text:0x00008AB0; // type:function size:0x18 -fn_228_8AD0 = .text:0x00008AD0; // type:function size:0x6C -fn_228_8B40 = .text:0x00008B40; // type:function size:0x5C -fn_228_8BA0 = .text:0x00008BA0; // type:function size:0xF4 -fn_228_8CA0 = .text:0x00008CA0; // type:function size:0x28 -fn_228_8CD0 = .text:0x00008CD0; // type:function size:0x250 -fn_228_8F20 = .text:0x00008F20; // type:function size:0x8 -fn_228_8F30 = .text:0x00008F30; // type:function size:0x4 -fn_228_8F40 = .text:0x00008F40; // type:function size:0x4 -fn_228_8F50 = .text:0x00008F50; // type:function size:0x8 -fn_228_8F60 = .text:0x00008F60; // type:function size:0x28 +__dt__30sFState_c<17dAcGirahimuBase_c>Fv = .text:0x00000510; // type:function size:0x58 +__dt__33sFStateFct_c<17dAcGirahimuBase_c>Fv = .text:0x00000570; // type:function size:0x6C +__dt__86sStateMgr_c<17dAcGirahimuBase_c,20sStateMethodUsr_FI_c,12sFStateFct_c,13sStateIDChk_c>Fv = .text:0x000005E0; // type:function size:0xA0 +__dt__56sFStateMgr_c<17dAcGirahimuBase_c,20sStateMethodUsr_FI_c>Fv = .text:0x00000680; // type:function size:0xA4 +__ct__Q23m3d8anmChr_cFv = .text:0x00000730; // type:function size:0x3C +__dt__Q34nw4r3g3d15IScnObjCallbackFv = .text:0x00000770; // type:function size:0x40 +__ct__7mVec2_cFv = .text:0x000007B0; // type:function size:0x4 +__dt__7mVec2_cFv = .text:0x000007C0; // type:function size:0x40 +__dt__15dShadowCircle_cFv = .text:0x00000800; // type:function size:0x58 +__dt__26dSwordSwingEffectProcMgr_cFv = .text:0x00000860; // type:function size:0x84 +__ct__22dCcD_Linked<8dCcD_Cps>Fv = .text:0x000008F0; // type:function size:0x58 +__dt__22dCcD_Linked<8dCcD_Cps>Fv = .text:0x00000950; // type:function size:0x90 +__dt__16dEnemySwordMdl_cFv = .text:0x000009E0; // type:function size:0xCC +__dt__22dCcD_Linked<8dCcD_Cyl>Fv = .text:0x00000AB0; // type:function size:0x90 +__dt__22dCcD_Linked<8dCcD_Sph>Fv = .text:0x00000B40; // type:function size:0x90 +__ct__33dAcRef_c<21dAcObjGirahimuKnife_c>Fv = .text:0x00000BD0; // type:function size:0x14 +__dt__33dAcRef_c<21dAcObjGirahimuKnife_c>Fv = .text:0x00000BF0; // type:function size:0x58 +initializeState_G_SwordWait__14dAcGirahimu2_cFv = .text:0x00000C50; // type:function size:0xB0 +executeState_G_SwordWait__14dAcGirahimu2_cFv = .text:0x00000D00; // type:function size:0x2EC +changeState__86sStateMgr_c<17dAcGirahimuBase_c,20sStateMethodUsr_FI_c,12sFStateFct_c,13sStateIDChk_c>FRC12sStateIDIf_c = .text:0x00000FF0; // type:function size:0x10 +finalizeState_G_SwordWait__14dAcGirahimu2_cFv = .text:0x00001000; // type:function size:0x4 +initializeState_CreateKnife__14dAcGirahimu2_cFv = .text:0x00001010; // type:function size:0x88 +executeState_CreateKnife__14dAcGirahimu2_cFv = .text:0x000010A0; // type:function size:0x234 +finalizeState_CreateKnife__14dAcGirahimu2_cFv = .text:0x000012E0; // type:function size:0x4 +initializeState_KnifePreAttack__14dAcGirahimu2_cFv = .text:0x000012F0; // type:function size:0x1AC +executeState_KnifePreAttack__14dAcGirahimu2_cFv = .text:0x000014A0; // type:function size:0x380 +finalizeState_KnifePreAttack__14dAcGirahimu2_cFv = .text:0x00001820; // type:function size:0x4 +initializeState_KnifeAttack__14dAcGirahimu2_cFv = .text:0x00001830; // type:function size:0x6C +executeState_KnifeAttack__14dAcGirahimu2_cFv = .text:0x000018A0; // type:function size:0x1F0 +finalizeState_KnifeAttack__14dAcGirahimu2_cFv = .text:0x00001A90; // type:function size:0x4 +initializeState_HitAction__14dAcGirahimu2_cFv = .text:0x00001AA0; // type:function size:0xA4 +executeState_HitAction__14dAcGirahimu2_cFv = .text:0x00001B50; // type:function size:0xC0 +finalizeState_HitAction__14dAcGirahimu2_cFv = .text:0x00001C10; // type:function size:0xC +initializeState_ComeOn__14dAcGirahimu2_cFv = .text:0x00001C20; // type:function size:0xB0 +executeState_ComeOn__14dAcGirahimu2_cFv = .text:0x00001CD0; // type:function size:0xC4 +finalizeState_ComeOn__14dAcGirahimu2_cFv = .text:0x00001DA0; // type:function size:0xC +initializeState_ComeOnGuard__14dAcGirahimu2_cFv = .text:0x00001DB0; // type:function size:0x178 +executeState_ComeOnGuard__14dAcGirahimu2_cFv = .text:0x00001F30; // type:function size:0xE8 +finalizeState_ComeOnGuard__14dAcGirahimu2_cFv = .text:0x00002020; // type:function size:0x4 +initializeState_G_SwordDemo__14dAcGirahimu2_cFv = .text:0x00002030; // type:function size:0x190 +executeState_G_SwordDemo__14dAcGirahimu2_cFv = .text:0x000021C0; // type:function size:0x7EC +finalizeState_G_SwordDemo__14dAcGirahimu2_cFv = .text:0x000029B0; // type:function size:0x18 +initializeState_G_SwordDamage__14dAcGirahimu2_cFv = .text:0x000029D0; // type:function size:0xA4 +executeState_G_SwordDamage__14dAcGirahimu2_cFv = .text:0x00002A80; // type:function size:0x128 +ChkTgHit__8cCcD_ObjFv = .text:0x00002BB0; // type:function size:0x4C +finalizeState_G_SwordDamage__14dAcGirahimu2_cFv = .text:0x00002C00; // type:function size:0xC +initializeState_UpWarp__14dAcGirahimu2_cFv = .text:0x00002C10; // type:function size:0x90 +executeState_UpWarp__14dAcGirahimu2_cFv = .text:0x00002CA0; // type:function size:0x2DC +finalizeState_UpWarp__14dAcGirahimu2_cFv = .text:0x00002F80; // type:function size:0x18 +initializeState_UpAttack__14dAcGirahimu2_cFv = .text:0x00002FA0; // type:function size:0x190 +executeState_UpAttack__14dAcGirahimu2_cFv = .text:0x00003130; // type:function size:0x244 +finalizeState_UpAttack__14dAcGirahimu2_cFv = .text:0x00003380; // type:function size:0x7C +initializeState_Counter__14dAcGirahimu2_cFv = .text:0x00003400; // type:function size:0x1F8 +executeState_Counter__14dAcGirahimu2_cFv = .text:0x00003600; // type:function size:0x114 +finalizeState_Counter__14dAcGirahimu2_cFv = .text:0x00003720; // type:function size:0x28 +initializeState_GuardJustCounter__14dAcGirahimu2_cFv = .text:0x00003750; // type:function size:0x7C +executeState_GuardJustCounter__14dAcGirahimu2_cFv = .text:0x000037D0; // type:function size:0xB4 +finalizeState_GuardJustCounter__14dAcGirahimu2_cFv = .text:0x00003890; // type:function size:0x28 +initializeState_TwoSwordAttack__14dAcGirahimu2_cFv = .text:0x000038C0; // type:function size:0x80 +executeState_TwoSwordAttack__14dAcGirahimu2_cFv = .text:0x00003940; // type:function size:0x1A8 +finalizeState_TwoSwordAttack__14dAcGirahimu2_cFv = .text:0x00003AF0; // type:function size:0x34 +initializeState_G_SwordPiyori__14dAcGirahimu2_cFv = .text:0x00003B30; // type:function size:0xCC +executeState_G_SwordPiyori__14dAcGirahimu2_cFv = .text:0x00003C00; // type:function size:0xD8 +finalizeState_G_SwordPiyori__14dAcGirahimu2_cFv = .text:0x00003CE0; // type:function size:0xC +initializeState_Death__14dAcGirahimu2_cFv = .text:0x00003CF0; // type:function size:0xD0 +executeState_Death__14dAcGirahimu2_cFv = .text:0x00003DC0; // type:function size:0x76C +finalizeState_Death__14dAcGirahimu2_cFv = .text:0x00004530; // type:function size:0x18 +fn_228_4550__14dAcGirahimu2_cFii = .text:0x00004550; // type:function size:0x2A0 +fn_228_47F0__14dAcGirahimu2_cFb = .text:0x000047F0; // type:function size:0x100 +initializeState_DeathMiniGame__14dAcGirahimu2_cFv = .text:0x000048F0; // type:function size:0x98 +executeState_DeathMiniGame__14dAcGirahimu2_cFv = .text:0x00004990; // type:function size:0x7C +finalizeState_DeathMiniGame__14dAcGirahimu2_cFv = .text:0x00004A10; // type:function size:0x18 +fn_228_4A30__14dAcGirahimu2_cFv = .text:0x00004A30; // type:function size:0x1A0 +ChkAtHit__8cCcD_ObjFv = .text:0x00004BD0; // type:function size:0x48 +fn_228_4C20__14dAcGirahimu2_cFv = .text:0x00004C20; // type:function size:0xA4 +fn_228_4CD0__14dAcGirahimu2_cFl = .text:0x00004CD0; // type:function size:0xC8 +vt_0x220__14dAcGirahimu2_cFv = .text:0x00004DA0; // type:function size:0x354 +getStateID__86sStateMgr_c<17dAcGirahimuBase_c,20sStateMethodUsr_FI_c,12sFStateFct_c,13sStateIDChk_c>CFv = .text:0x00005100; // type:function size:0x10 +fn_228_5110__14dAcGirahimu2_cFv = .text:0x00005110; // type:function size:0x2E4 +fn_228_5400__14dAcGirahimu2_cFv = .text:0x00005400; // type:function size:0x340 +fn_228_5740__14dAcGirahimu2_cFv = .text:0x00005740; // type:function size:0x24 +fn_228_5770__14dAcGirahimu2_cFl = .text:0x00005770; // type:function size:0x720 +fn_228_5E90__14dAcGirahimu2_cFv = .text:0x00005E90; // type:function size:0x28 +fn_228_5EC0__14dAcGirahimu2_cFv = .text:0x00005EC0; // type:function size:0x28 +vt_0x1F4__14dAcGirahimu2_cFv = .text:0x00005EF0; // type:function size:0x9C +vt_0x1F8__14dAcGirahimu2_cFv = .text:0x00005F90; // type:function size:0x324 +vt_0x20C__14dAcGirahimu2_cFv = .text:0x000062C0; // type:function size:0x3C +createHeap__14dAcGirahimu2_cFv = .text:0x00006300; // type:function size:0x334 +actorCreate__14dAcGirahimu2_cFv = .text:0x00006640; // type:function size:0x158 +checkInBossRush__15MinigameManagerFv = .text:0x000067A0; // type:function size:0x8 +doDelete__14dAcGirahimu2_cFv = .text:0x000067B0; // type:function size:0x8 +vt_0x1DC__14dAcGirahimu2_cFv = .text:0x000067C0; // type:function size:0x184 +actorExecute__14dAcGirahimu2_cFv = .text:0x00006950; // type:function size:0x764 +executeState__86sStateMgr_c<17dAcGirahimuBase_c,20sStateMethodUsr_FI_c,12sFStateFct_c,13sStateIDChk_c>Fv = .text:0x000070C0; // type:function size:0x10 +initializeState_Walk__14dAcGirahimu2_cFv = .text:0x000070D0; // type:function size:0xD0 +executeState_Walk__14dAcGirahimu2_cFv = .text:0x000071A0; // type:function size:0x334 +finalizeState_Walk__14dAcGirahimu2_cFv = .text:0x000074E0; // type:function size:0x4 +initializeState_CreateSpinKnife__14dAcGirahimu2_cFv = .text:0x000074F0; // type:function size:0xC0 +executeState_CreateSpinKnife__14dAcGirahimu2_cFv = .text:0x000075B0; // type:function size:0x110 +finalizeState_CreateSpinKnife__14dAcGirahimu2_cFv = .text:0x000076C0; // type:function size:0x14 +initializeState_CatchDamage__14dAcGirahimu2_cFv = .text:0x000076E0; // type:function size:0x90 +executeState_CatchDamage__14dAcGirahimu2_cFv = .text:0x00007770; // type:function size:0xE4 +finalizeState_CatchDamage__14dAcGirahimu2_cFv = .text:0x00007860; // type:function size:0x18 +initializeState_WaitKnifeAttack__14dAcGirahimu2_cFv = .text:0x00007880; // type:function size:0x58 +executeState_WaitKnifeAttack__14dAcGirahimu2_cFv = .text:0x000078E0; // type:function size:0x194 +finalizeState_WaitKnifeAttack__14dAcGirahimu2_cFv = .text:0x00007A80; // type:function size:0x4 +initializeState_Catch__14dAcGirahimu2_cFv = .text:0x00007A90; // type:function size:0x148 +executeState_Catch__14dAcGirahimu2_cFv = .text:0x00007BE0; // type:function size:0x42C +finalizeState_Catch__14dAcGirahimu2_cFv = .text:0x00008010; // type:function size:0x90 +fn_228_80A0__14dAcGirahimu2_cFv = .text:0x000080A0; // type:function size:0x38 +fn_228_80E0__14dAcGirahimu2_cFv = .text:0x000080E0; // type:function size:0x1DC +fn_228_82C0__14dAcGirahimu2_cFv = .text:0x000082C0; // type:function size:0x61C +vt_0x1FC__14dAcGirahimu2_cFv = .text:0x000088E0; // type:function size:0x70 +vt_0x200__14dAcGirahimu2_cFv = .text:0x00008950; // type:function size:0x38 +vt_0x204__14dAcGirahimu2_cFv = .text:0x00008990; // type:function size:0x18 +vt_0x228__14dAcGirahimu2_cFv = .text:0x000089B0; // type:function size:0xF4 +vt_0x22C__14dAcGirahimu2_cFv = .text:0x00008AB0; // type:function size:0x18 +vt_0x210__14dAcGirahimu2_cFv = .text:0x00008AD0; // type:function size:0x6C +vt_0x230__14dAcGirahimu2_cFv = .text:0x00008B40; // type:function size:0x5C +vt_0x214__14dAcGirahimu2_cFv = .text:0x00008BA0; // type:function size:0xF4 +vt_0x218__14dAcGirahimu2_cFv = .text:0x00008CA0; // type:function size:0x28 +vt_0x234__14dAcGirahimu2_cFv = .text:0x00008CD0; // type:function size:0x250 +vt_0x88__11dAcEnBase_cFi = .text:0x00008F20; // type:function size:0x8 +vt_0x84__11dAcEnBase_cFv = .text:0x00008F30; // type:function size:0x4 +vt_0x80__11dAcEnBase_cFv = .text:0x00008F40; // type:function size:0x4 +getObjectListEntry__11dAcEnBase_cFv = .text:0x00008F50; // type:function size:0x8 +vt_0x224__14dAcGirahimu2_cFv = .text:0x00008F60; // type:function size:0x28 __dt__14dAcGirahimu2_cFv = .text:0x00008F90; // type:function size:0x74 -fn_228_9010 = .text:0x00009010; // type:function size:0x4 -fn_228_9020 = .text:0x00009020; // type:function size:0x4 -fn_228_9030 = .text:0x00009030; // type:function size:0x4 -fn_228_9040 = .text:0x00009040; // type:function size:0x4 -fn_228_9050 = .text:0x00009050; // type:function size:0x4 -build__30sFStateFct_c<14dAcGirahimu2_c>FRC12sStateIDIf_c = .text:0x00009060; // type:function size:0x60 -dispose__30sFStateFct_c<14dAcGirahimu2_c>FRP10sStateIf_c = .text:0x000090C0; // type:function size:0xC -initialize__27sFState_c<14dAcGirahimu2_c>Fv = .text:0x000090D0; // type:function size:0x1C -execute__27sFState_c<14dAcGirahimu2_c>Fv = .text:0x000090F0; // type:function size:0x1C -finalize__27sFState_c<14dAcGirahimu2_c>Fv = .text:0x00009110; // type:function size:0x1C -initializeState__83sStateMgr_c<14dAcGirahimu2_c,20sStateMethodUsr_FI_c,12sFStateFct_c,13sStateIDChk_c>Fv = .text:0x00009130; // type:function size:0x10 -finalizeState__83sStateMgr_c<14dAcGirahimu2_c,20sStateMethodUsr_FI_c,12sFStateFct_c,13sStateIDChk_c>Fv = .text:0x00009140; // type:function size:0x10 -refreshState__83sStateMgr_c<14dAcGirahimu2_c,20sStateMethodUsr_FI_c,12sFStateFct_c,13sStateIDChk_c>Fv = .text:0x00009150; // type:function size:0x10 -getState__83sStateMgr_c<14dAcGirahimu2_c,20sStateMethodUsr_FI_c,12sFStateFct_c,13sStateIDChk_c>CFv = .text:0x00009160; // type:function size:0x10 -getNewStateID__83sStateMgr_c<14dAcGirahimu2_c,20sStateMethodUsr_FI_c,12sFStateFct_c,13sStateIDChk_c>CFv = .text:0x00009170; // type:function size:0x10 -getOldStateID__83sStateMgr_c<14dAcGirahimu2_c,20sStateMethodUsr_FI_c,12sFStateFct_c,13sStateIDChk_c>CFv = .text:0x00009180; // type:function size:0x10 +ExecCallback_DRAW_XLU__Q34nw4r3g3d15IScnObjCallbackFQ44nw4r3g3d6ScnObj6TimingPQ34nw4r3g3d6ScnObjUlPv = .text:0x00009010; // type:function size:0x4 +ExecCallback_DRAW_OPA__Q34nw4r3g3d15IScnObjCallbackFQ44nw4r3g3d6ScnObj6TimingPQ34nw4r3g3d6ScnObjUlPv = .text:0x00009020; // type:function size:0x4 +ExecCallback_CALC_MAT__Q34nw4r3g3d15IScnObjCallbackFQ44nw4r3g3d6ScnObj6TimingPQ34nw4r3g3d6ScnObjUlPv = .text:0x00009030; // type:function size:0x4 +ExecCallback_CALC_WORLD__Q34nw4r3g3d15IScnObjCallbackFQ44nw4r3g3d6ScnObj6TimingPQ34nw4r3g3d6ScnObjUlPv = .text:0x00009040; // type:function size:0x4 +ExecCallback_CALC_VIEW__Q34nw4r3g3d15IScnObjCallbackFQ44nw4r3g3d6ScnObj6TimingPQ34nw4r3g3d6ScnObjUlPv = .text:0x00009050; // type:function size:0x4 +build__33sFStateFct_c<17dAcGirahimuBase_c>FRC12sStateIDIf_c = .text:0x00009060; // type:function size:0x60 +dispose__33sFStateFct_c<17dAcGirahimuBase_c>FRP10sStateIf_c = .text:0x000090C0; // type:function size:0xC +initialize__30sFState_c<17dAcGirahimuBase_c>Fv = .text:0x000090D0; // type:function size:0x1C +execute__30sFState_c<17dAcGirahimuBase_c>Fv = .text:0x000090F0; // type:function size:0x1C +finalize__30sFState_c<17dAcGirahimuBase_c>Fv = .text:0x00009110; // type:function size:0x1C +initializeState__86sStateMgr_c<17dAcGirahimuBase_c,20sStateMethodUsr_FI_c,12sFStateFct_c,13sStateIDChk_c>Fv = .text:0x00009130; // type:function size:0x10 +finalizeState__86sStateMgr_c<17dAcGirahimuBase_c,20sStateMethodUsr_FI_c,12sFStateFct_c,13sStateIDChk_c>Fv = .text:0x00009140; // type:function size:0x10 +refreshState__86sStateMgr_c<17dAcGirahimuBase_c,20sStateMethodUsr_FI_c,12sFStateFct_c,13sStateIDChk_c>Fv = .text:0x00009150; // type:function size:0x10 +getState__86sStateMgr_c<17dAcGirahimuBase_c,20sStateMethodUsr_FI_c,12sFStateFct_c,13sStateIDChk_c>CFv = .text:0x00009160; // type:function size:0x10 +getNewStateID__86sStateMgr_c<17dAcGirahimuBase_c,20sStateMethodUsr_FI_c,12sFStateFct_c,13sStateIDChk_c>CFv = .text:0x00009170; // type:function size:0x10 +getOldStateID__86sStateMgr_c<17dAcGirahimuBase_c,20sStateMethodUsr_FI_c,12sFStateFct_c,13sStateIDChk_c>CFv = .text:0x00009180; // type:function size:0x10 __sinit_\d_a_b_girahimu2_cpp = .text:0x00009190; // type:function size:0x10BC scope:local __dt__29sFStateID_c<14dAcGirahimu2_c>Fv = .text:0x0000A250; // type:function size:0x58 -fn_228_A2B0 = .text:0x0000A2B0; // type:function size:0x5C -fn_228_A310 = .text:0x0000A310; // type:function size:0xC -fn_228_A320 = .text:0x0000A320; // type:function size:0xC -fn_228_A330 = .text:0x0000A330; // type:function size:0xC -fn_228_A340 = .text:0x0000A340; // type:function size:0xC -fn_228_A350 = .text:0x0000A350; // type:function size:0xDC -fn_228_A430 = .text:0x0000A430; // type:function size:0xE0 +__dt__36sFStateVirtualID_c<14dAcGirahimu2_c>Fv = .text:0x0000A2B0; // type:function size:0x5C +baseID_Catch<17dAcGirahimuBase_c>__Fv_RC12sStateIDIf_c = .text:0x0000A310; // type:function size:0xC +baseID_Counter<17dAcGirahimuBase_c>__Fv_RC12sStateIDIf_c = .text:0x0000A320; // type:function size:0xC +baseID_Walk<17dAcGirahimuBase_c>__Fv_RC12sStateIDIf_c = .text:0x0000A330; // type:function size:0xC +baseID_CatchDamage<17dAcGirahimuBase_c>__Fv_RC12sStateIDIf_c = .text:0x0000A340; // type:function size:0xC +number__36sFStateVirtualID_c<14dAcGirahimu2_c>CFv = .text:0x0000A350; // type:function size:0xDC +superID__36sFStateVirtualID_c<14dAcGirahimu2_c>CFv = .text:0x0000A430; // type:function size:0xE0 isSameName__29sFStateID_c<14dAcGirahimu2_c>CFPCc = .text:0x0000A510; // type:function size:0x88 initializeState__29sFStateID_c<14dAcGirahimu2_c>CFR14dAcGirahimu2_c = .text:0x0000A5A0; // type:function size:0x30 executeState__29sFStateID_c<14dAcGirahimu2_c>CFR14dAcGirahimu2_c = .text:0x0000A5D0; // type:function size:0x30 finalizeState__29sFStateID_c<14dAcGirahimu2_c>CFR14dAcGirahimu2_c = .text:0x0000A600; // type:function size:0x30 -fn_228_A630 = .text:0x0000A630; // type:function size:0x8 -fn_228_A640 = .text:0x0000A640; // type:function size:0x8 -fn_228_A650 = .text:0x0000A650; // type:function size:0x8 +@272@__dt__22dCcD_Linked<8dCcD_Cps>Fv = .text:0x0000A630; // type:function size:0x8 +@272@__dt__22dCcD_Linked<8dCcD_Sph>Fv = .text:0x0000A640; // type:function size:0x8 +@272@__dt__22dCcD_Linked<8dCcD_Cyl>Fv = .text:0x0000A650; // type:function size:0x8 _ctors = .ctors:0x00000000; // type:label scope:global _dtors = .dtors:0x00000000; // type:label scope:global __destroy_global_chain_reference = .dtors:0x00000000; // type:object size:0x4 scope:global @@ -208,33 +208,41 @@ lbl_228_data_35C = .data:0x0000035C; // type:object size:0xA data:string lbl_228_data_368 = .data:0x00000368; // type:object size:0xC data:4byte lbl_228_data_374 = .data:0x00000374; // type:object size:0x34 data:4byte lbl_228_data_3A8 = .data:0x000003A8; // type:object size:0x30 -lbl_228_data_3D8 = .data:0x000003D8; // type:object size:0x238 -lbl_228_data_610 = .data:0x00000610; // type:object size:0x70 -lbl_228_data_680 = .data:0x00000680; // type:object size:0x30 -lbl_228_data_6B0 = .data:0x000006B0; // type:object size:0x30 -lbl_228_data_6E0 = .data:0x000006E0; // type:object size:0x18 -lbl_228_data_6F8 = .data:0x000006F8; // type:object size:0x18 -lbl_228_data_710 = .data:0x00000710; // type:object size:0x70 -lbl_228_data_780 = .data:0x00000780; // type:object size:0x10 -lbl_228_data_790 = .data:0x00000790; // type:object size:0x70 -lbl_228_data_800 = .data:0x00000800; // type:object size:0xC -lbl_228_data_80C = .data:0x0000080C; // type:object size:0x668 +__vt__14dAcGirahimu2_c = .data:0x000003D8; // type:object size:0x238 +__vt__22dCcD_Linked<8dCcD_Cyl> = .data:0x00000610; // type:object size:0x70 +__vt__56sFStateMgr_c<17dAcGirahimuBase_c,20sStateMethodUsr_FI_c> = .data:0x00000680; // type:object size:0x30 +__vt__86sStateMgr_c<17dAcGirahimuBase_c,20sStateMethodUsr_FI_c,12sFStateFct_c,13sStateIDChk_c> = .data:0x000006B0; // type:object size:0x30 +__vt__33sFStateFct_c<17dAcGirahimuBase_c> = .data:0x000006E0; // type:object size:0x18 +__vt__30sFState_c<17dAcGirahimuBase_c> = .data:0x000006F8; // type:object size:0x18 +__vt__22dCcD_Linked<8dCcD_Sph> = .data:0x00000710; // type:object size:0x70 +__vt__16dEnemySwordMdl_c = .data:0x00000780; // type:object size:0x10 +__vt__22dCcD_Linked<8dCcD_Cps> = .data:0x00000790; // type:object size:0x70 +__vt__26dSwordSwingEffectProcMgr_c = .data:0x00000800; // type:object size:0xC +__vt__15dShadowCircle_c = .data:0x0000080C; // type:object size:0x668 lbl_228_data_E74 = .data:0x00000E74; // type:object size:0x34 lbl_228_data_EA8 = .data:0x00000EA8; // type:object size:0x34 lbl_228_data_EDC = .data:0x00000EDC; // type:object size:0x7 data:string __global_destructor_chain = .bss:0x00000000; // type:object size:0x4 scope:global lbl_228_bss_8 = .bss:0x00000008; // type:object size:0x10 data:4byte -lbl_228_bss_18 = .bss:0x00000018; // type:object size:0x40 data:4byte -lbl_228_bss_58 = .bss:0x00000058; // type:object size:0x40 data:4byte -lbl_228_bss_98 = .bss:0x00000098; // type:object size:0x40 data:4byte -lbl_228_bss_D8 = .bss:0x000000D8; // type:object size:0xBC data:4byte -lbl_228_bss_194 = .bss:0x00000194; // type:object size:0x84 data:4byte -lbl_228_bss_218 = .bss:0x00000218; // type:object size:0x40 data:4byte -lbl_228_bss_258 = .bss:0x00000258; // type:object size:0x40 data:4byte -lbl_228_bss_298 = .bss:0x00000298; // type:object size:0x40 data:4byte -lbl_228_bss_2D8 = .bss:0x000002D8; // type:object size:0x40 data:4byte -lbl_228_bss_318 = .bss:0x00000318; // type:object size:0x40 data:4byte -lbl_228_bss_358 = .bss:0x00000358; // type:object size:0x80 data:4byte -lbl_228_bss_3D8 = .bss:0x000003D8; // type:object size:0x80 data:4byte -lbl_228_bss_458 = .bss:0x00000458; // type:object size:0xFC data:4byte -lbl_228_bss_554 = .bss:0x00000554; // type:object size:0x34 data:4byte +StateID_CreateSpinKnife__14dAcGirahimu2_c = .bss:0x00000018; // type:object size:0x30 data:4byte +StateID_WaitKnifeAttack__14dAcGirahimu2_c = .bss:0x00000058; // type:object size:0x30 data:4byte +StateID_KnifeAttack__14dAcGirahimu2_c = .bss:0x00000098; // type:object size:0x30 data:4byte +StateID_KnifePreAttack__14dAcGirahimu2_c = .bss:0x000000D8; // type:object size:0x30 data:4byte +StateID_CatchDamage__14dAcGirahimu2_c = .bss:0x00000114; // type:object size:0x34 data:4byte +StateID_Walk__14dAcGirahimu2_c = .bss:0x00000154; // type:object size:0x34 data:4byte +StateID_Counter__14dAcGirahimu2_c = .bss:0x00000194; // type:object size:0x34 data:4byte +StateID_G_SwordDemo__14dAcGirahimu2_c = .bss:0x000001D8; // type:object size:0x30 data:4byte +StateID_G_SwordWait__14dAcGirahimu2_c = .bss:0x00000218; // type:object size:0x30 data:4byte +StateID_G_SwordPiyori__14dAcGirahimu2_c = .bss:0x00000258; // type:object size:0x30 data:4byte +StateID_Death__14dAcGirahimu2_c = .bss:0x00000298; // type:object size:0x30 data:4byte +StateID_DeathMiniGame__14dAcGirahimu2_c = .bss:0x000002D8; // type:object size:0x30 data:4byte +StateID_UpWarp__14dAcGirahimu2_c = .bss:0x00000318; // type:object size:0x30 data:4byte +StateID_UpAttack__14dAcGirahimu2_c = .bss:0x00000358; // type:object size:0x30 data:4byte +StateID_CreateKnife__14dAcGirahimu2_c = .bss:0x00000398; // type:object size:0x30 data:4byte +StateID_ComeOn__14dAcGirahimu2_c = .bss:0x000003D8; // type:object size:0x30 data:4byte +StateID_ComeOnGuard__14dAcGirahimu2_c = .bss:0x00000418; // type:object size:0x30 data:4byte +StateID_GuardJustCounter__14dAcGirahimu2_c = .bss:0x00000458; // type:object size:0x30 data:4byte +StateID_G_SwordDamage__14dAcGirahimu2_c = .bss:0x00000498; // type:object size:0x30 data:4byte +StateID_TwoSwordAttack__14dAcGirahimu2_c = .bss:0x000004D8; // type:object size:0x30 data:4byte +StateID_HitAction__14dAcGirahimu2_c = .bss:0x00000518; // type:object size:0x30 data:4byte +StateID_Catch__14dAcGirahimu2_c = .bss:0x00000554; // type:object size:0x34 data:4byte diff --git a/config/SOUE01/rels/d_a_b_girahimuNP/symbols.txt b/config/SOUE01/rels/d_a_b_girahimuNP/symbols.txt index e1284dda5..98acfe101 100644 --- a/config/SOUE01/rels/d_a_b_girahimuNP/symbols.txt +++ b/config/SOUE01/rels/d_a_b_girahimuNP/symbols.txt @@ -4,106 +4,106 @@ _unresolved = .text:0x00000060; // type:function size:0x4 scope:global __register_global_object = .text:0x00000070; // type:function size:0x1C scope:global __destroy_global_chain = .text:0x00000090; // type:function size:0x54 scope:global dAcGirahimu_c_classInit__Fv = .text:0x000000F0; // type:function size:0x414 -__dt__26sFState_c<13dAcGirahimu_c>Fv = .text:0x00000510; // type:function size:0x58 -__dt__29sFStateFct_c<13dAcGirahimu_c>Fv = .text:0x00000570; // type:function size:0x6C -__dt__82sStateMgr_c<13dAcGirahimu_c,20sStateMethodUsr_FI_c,12sFStateFct_c,13sStateIDChk_c>Fv = .text:0x000005E0; // type:function size:0xA0 -__dt__52sFStateMgr_c<13dAcGirahimu_c,20sStateMethodUsr_FI_c>Fv = .text:0x00000680; // type:function size:0xA4 -fn_227_730 = .text:0x00000730; // type:function size:0x3C -fn_227_770 = .text:0x00000770; // type:function size:0x40 -fn_227_7B0 = .text:0x000007B0; // type:function size:0x4 -fn_227_7C0 = .text:0x000007C0; // type:function size:0x40 -fn_227_800 = .text:0x00000800; // type:function size:0x58 -fn_227_860 = .text:0x00000860; // type:function size:0x84 -fn_227_8F0 = .text:0x000008F0; // type:function size:0x58 -fn_227_950 = .text:0x00000950; // type:function size:0x90 -fn_227_9E0 = .text:0x000009E0; // type:function size:0xCC -fn_227_AB0 = .text:0x00000AB0; // type:function size:0x90 -fn_227_B40 = .text:0x00000B40; // type:function size:0x90 -fn_227_BD0 = .text:0x00000BD0; // type:function size:0x14 -fn_227_BF0 = .text:0x00000BF0; // type:function size:0x58 -AcGirahimu__stateSwordDemoEnter = .text:0x00000C50; // type:function size:0x13C -AcGirahimuBase__stateSwordDemoUpdate = .text:0x00000D90; // type:function size:0x718 -changeState__82sStateMgr_c<13dAcGirahimu_c,20sStateMethodUsr_FI_c,12sFStateFct_c,13sStateIDChk_c>FRC12sStateIDIf_c = .text:0x000014B0; // type:function size:0x10 -AcGirahimu__stateSwordDemoLeave = .text:0x000014C0; // type:function size:0x18 -AcGirahimu__stateSwordWaitEnter = .text:0x000014E0; // type:function size:0xCC -AcGirahimu__stateSwordWaitUpdate = .text:0x000015B0; // type:function size:0x1C4 -fn_227_1780 = .text:0x00001780; // type:function size:0x4 -AcGirahimu__damageHit = .text:0x00001790; // type:function size:0x90 -AcGirahimu__changeStateAfterDamageHitMaybe = .text:0x00001820; // type:function size:0x168 -fn_227_1990 = .text:0x00001990; // type:function size:0xC -AcGirahimu__stateSwordPiyoriEnter = .text:0x000019A0; // type:function size:0xA8 -AcGirahimu__stateSwordPiyoriUpdate = .text:0x00001A50; // type:function size:0xE0 -AcGirahimu__stateSwordPiyoriLeave = .text:0x00001B30; // type:function size:0xC -AcGirahimu__pickNextMove = .text:0x00001B40; // type:function size:0x350 -getStateID__82sStateMgr_c<13dAcGirahimu_c,20sStateMethodUsr_FI_c,12sFStateFct_c,13sStateIDChk_c>CFv = .text:0x00001E90; // type:function size:0x10 -fn_227_1EA0 = .text:0x00001EA0; // type:function size:0x14C -fn_227_1FF0 = .text:0x00001FF0; // type:function size:0x48 -fn_227_2040 = .text:0x00002040; // type:function size:0x4C -AcGirahimu__stateKnifeAttackEnter = .text:0x00002090; // type:function size:0x6C -AcGirahimu__stateKnifeAttackUpdate = .text:0x00002100; // type:function size:0x164 -fn_227_2270 = .text:0x00002270; // type:function size:0x4 -AcGirahimu__stateKnifeEnter = .text:0x00002280; // type:function size:0x168 -AcGirahimu__stateKnifeUpdate = .text:0x000023F0; // type:function size:0x404 -fn_227_2800 = .text:0x00002800; // type:function size:0x4 -AcGirahimu__stateDeathEnter = .text:0x00002810; // type:function size:0x8C -AcGirahimu__stateDeathUpdate = .text:0x000028A0; // type:function size:0x728 -AcGirahimu__stateDeathLeave = .text:0x00002FD0; // type:function size:0x18 -AcGirahimu__stateDeathMiniGameEnter = .text:0x00002FF0; // type:function size:0xA0 -AcGirahimu__stateDeathMiniGameUpdate = .text:0x00003090; // type:function size:0x7C -AcGirahimu__stateDeathMiniGameLeave = .text:0x00003110; // type:function size:0x18 -AcGirahimuBase__initModels = .text:0x00003130; // type:function size:0x4 -AcGirahimu__init = .text:0x00003140; // type:function size:0x104 -AcGirahimu__isInBossRush = .text:0x00003250; // type:function size:0x8 -fn_227_3260 = .text:0x00003260; // type:function size:0x8 -AcGirahimu__setStateDeath/DeathMiniGame = .text:0x00003270; // type:function size:0x154 -AcGirahimu__update = .text:0x000033D0; // type:function size:0x804 -executeState__82sStateMgr_c<13dAcGirahimu_c,20sStateMethodUsr_FI_c,12sFStateFct_c,13sStateIDChk_c>Fv = .text:0x00003BE0; // type:function size:0x10 -AcGirahimu__damage = .text:0x00003BF0; // type:function size:0x94 -AcGirahimu__changeStateAfterDamageMaybe = .text:0x00003C90; // type:function size:0xF4 -fn_227_3D90 = .text:0x00003D90; // type:function size:0x18 -fn_227_3DB0 = .text:0x00003DB0; // type:function size:0x38 -AcGirahimu__moveAfterTakingDamageMaybe = .text:0x00003DF0; // type:function size:0x18C -AcGirahimu__changeMove = .text:0x00003F80; // type:function size:0x280 -AcGirahimu__health<121AndSomethingElse = .text:0x00004200; // type:function size:0x28 -fn_227_4230 = .text:0x00004230; // type:function size:0x8 -fn_227_4240 = .text:0x00004240; // type:function size:0x4 -fn_227_4250 = .text:0x00004250; // type:function size:0x4 -AcGirahimu__getEnemyLink = .text:0x00004260; // type:function size:0x8 -AcGirahimu__walkWithSword = .text:0x00004270; // type:function size:0x24 -AcGirahimu__poseWithSwordHigh = .text:0x000042A0; // type:function size:0x28 -fn_227_42D0 = .text:0x000042D0; // type:function size:0x8 -fn_227_42E0 = .text:0x000042E0; // type:function size:0x4 +__dt__30sFState_c<17dAcGirahimuBase_c>Fv = .text:0x00000510; // type:function size:0x58 +__dt__33sFStateFct_c<17dAcGirahimuBase_c>Fv = .text:0x00000570; // type:function size:0x6C +__dt__86sStateMgr_c<17dAcGirahimuBase_c,20sStateMethodUsr_FI_c,12sFStateFct_c,13sStateIDChk_c>Fv = .text:0x000005E0; // type:function size:0xA0 +__dt__56sFStateMgr_c<17dAcGirahimuBase_c,20sStateMethodUsr_FI_c>Fv = .text:0x00000680; // type:function size:0xA4 +__ct__Q23m3d8anmChr_cFv = .text:0x00000730; // type:function size:0x3C +__dt__Q34nw4r3g3d15IScnObjCallbackFv = .text:0x00000770; // type:function size:0x40 +__ct__7mVec2_cFv = .text:0x000007B0; // type:function size:0x4 +__dt__7mVec2_cFv = .text:0x000007C0; // type:function size:0x40 +__dt__15dShadowCircle_cFv = .text:0x00000800; // type:function size:0x58 +__dt__26dSwordSwingEffectProcMgr_cFv = .text:0x00000860; // type:function size:0x84 +__ct__22dCcD_Linked<8dCcD_Cps>Fv = .text:0x000008F0; // type:function size:0x58 +__dt__22dCcD_Linked<8dCcD_Cps>Fv = .text:0x00000950; // type:function size:0x90 +__dt__16dEnemySwordMdl_cFv = .text:0x000009E0; // type:function size:0xCC +__dt__22dCcD_Linked<8dCcD_Cyl>Fv = .text:0x00000AB0; // type:function size:0x90 +__dt__22dCcD_Linked<8dCcD_Sph>Fv = .text:0x00000B40; // type:function size:0x90 +__ct__33dAcRef_c<21dAcObjGirahimuKnife_c>Fv = .text:0x00000BD0; // type:function size:0x14 +__dt__33dAcRef_c<21dAcObjGirahimuKnife_c>Fv = .text:0x00000BF0; // type:function size:0x58 +initializeState_G_SwordDemo__13dAcGirahimu_cFv = .text:0x00000C50; // type:function size:0x13C +executeState_G_SwordDemo__13dAcGirahimu_cFv = .text:0x00000D90; // type:function size:0x718 +changeState__86sStateMgr_c<17dAcGirahimuBase_c,20sStateMethodUsr_FI_c,12sFStateFct_c,13sStateIDChk_c>FRC12sStateIDIf_c = .text:0x000014B0; // type:function size:0x10 +finalizeState_G_SwordDemo__13dAcGirahimu_cFv = .text:0x000014C0; // type:function size:0x18 +initializeState_G_SwordWait__13dAcGirahimu_cFv = .text:0x000014E0; // type:function size:0xCC +executeState_G_SwordWait__13dAcGirahimu_cFv = .text:0x000015B0; // type:function size:0x1C4 +finalizeState_G_SwordWait__13dAcGirahimu_cFv = .text:0x00001780; // type:function size:0x4 +initializeState_G_SwordDamage__13dAcGirahimu_cFv = .text:0x00001790; // type:function size:0x90 +executeState_G_SwordDamage__13dAcGirahimu_cFv = .text:0x00001820; // type:function size:0x168 +finalizeState_G_SwordDamage__13dAcGirahimu_cFv = .text:0x00001990; // type:function size:0xC +initializeState_G_SwordPiyori__13dAcGirahimu_cFv = .text:0x000019A0; // type:function size:0xA8 +executeState_G_SwordPiyori__13dAcGirahimu_cFv = .text:0x00001A50; // type:function size:0xE0 +finalizeState_G_SwordPiyori__13dAcGirahimu_cFv = .text:0x00001B30; // type:function size:0xC +determineNextMove__13dAcGirahimu_cFv = .text:0x00001B40; // type:function size:0x350 +getStateID__86sStateMgr_c<17dAcGirahimuBase_c,20sStateMethodUsr_FI_c,12sFStateFct_c,13sStateIDChk_c>CFv = .text:0x00001E90; // type:function size:0x10 +fn_227_1EA0__13dAcGirahimu_cFv = .text:0x00001EA0; // type:function size:0x14C +ChkAtHit__8cCcD_ObjFv = .text:0x00001FF0; // type:function size:0x48 +ChkTgHit__8cCcD_ObjFv = .text:0x00002040; // type:function size:0x4C +initializeState_KnifeAttack__13dAcGirahimu_cFv = .text:0x00002090; // type:function size:0x6C +executeState_KnifeAttack__13dAcGirahimu_cFv = .text:0x00002100; // type:function size:0x164 +finalizeState_KnifeAttack__13dAcGirahimu_cFv = .text:0x00002270; // type:function size:0x4 +initializeState_Knife__13dAcGirahimu_cFv = .text:0x00002280; // type:function size:0x168 +executeState_Knife__13dAcGirahimu_cFv = .text:0x000023F0; // type:function size:0x404 +finalizeState_Knife__13dAcGirahimu_cFv = .text:0x00002800; // type:function size:0x4 +initializeState_Death__13dAcGirahimu_cFv = .text:0x00002810; // type:function size:0x8C +executeState_Death__13dAcGirahimu_cFv = .text:0x000028A0; // type:function size:0x728 +finalizeState_Death__13dAcGirahimu_cFv = .text:0x00002FD0; // type:function size:0x18 +initializeState_DeathMiniGame__13dAcGirahimu_cFv = .text:0x00002FF0; // type:function size:0xA0 +executeState_DeathMiniGame__13dAcGirahimu_cFv = .text:0x00003090; // type:function size:0x7C +finalizeState_DeathMiniGame__13dAcGirahimu_cFv = .text:0x00003110; // type:function size:0x18 +createHeap__13dAcGirahimu_cFv = .text:0x00003130; // type:function size:0x4 +actorCreate__13dAcGirahimu_cFv = .text:0x00003140; // type:function size:0x104 +checkInBossRush__15MinigameManagerFv = .text:0x00003250; // type:function size:0x8 +doDelete__13dAcGirahimu_cFv = .text:0x00003260; // type:function size:0x8 +vt_0x1DC__13dAcGirahimu_cFv = .text:0x00003270; // type:function size:0x154 +actorExecute__13dAcGirahimu_cFv = .text:0x000033D0; // type:function size:0x804 +executeState__86sStateMgr_c<17dAcGirahimuBase_c,20sStateMethodUsr_FI_c,12sFStateFct_c,13sStateIDChk_c>Fv = .text:0x00003BE0; // type:function size:0x10 +initializeState_CatchDamage__13dAcGirahimu_cFv = .text:0x00003BF0; // type:function size:0x94 +executeState_CatchDamage__13dAcGirahimu_cFv = .text:0x00003C90; // type:function size:0xF4 +finalizeState_CatchDamage__13dAcGirahimu_cFv = .text:0x00003D90; // type:function size:0x18 +fn_227_3DB0__13dAcGirahimu_cFv = .text:0x00003DB0; // type:function size:0x38 +fn_227_3DF0__13dAcGirahimu_cFv = .text:0x00003DF0; // type:function size:0x18C +vt_0x220__13dAcGirahimu_cFv = .text:0x00003F80; // type:function size:0x280 +vt_0x218__13dAcGirahimu_cFv = .text:0x00004200; // type:function size:0x28 +vt_0x88__11dAcEnBase_cFi = .text:0x00004230; // type:function size:0x8 +vt_0x84__11dAcEnBase_cFv = .text:0x00004240; // type:function size:0x4 +vt_0x80__11dAcEnBase_cFv = .text:0x00004250; // type:function size:0x4 +getObjectListEntry__11dAcEnBase_cFv = .text:0x00004260; // type:function size:0x8 +vt_0x230__17dAcGirahimuBase_cFv = .text:0x00004270; // type:function size:0x24 +vt_0x224__17dAcGirahimuBase_cFv = .text:0x000042A0; // type:function size:0x28 +vt_0x210__17dAcGirahimuBase_cFv = .text:0x000042D0; // type:function size:0x8 +vt_0x1FC__17dAcGirahimuBase_cFv = .text:0x000042E0; // type:function size:0x4 __dt__13dAcGirahimu_cFv = .text:0x000042F0; // type:function size:0x74 -fn_227_4370 = .text:0x00004370; // type:function size:0x4 -fn_227_4380 = .text:0x00004380; // type:function size:0x4 -fn_227_4390 = .text:0x00004390; // type:function size:0x4 -fn_227_43A0 = .text:0x000043A0; // type:function size:0x4 -fn_227_43B0 = .text:0x000043B0; // type:function size:0x4 -build__29sFStateFct_c<13dAcGirahimu_c>FRC12sStateIDIf_c = .text:0x000043C0; // type:function size:0x60 -dispose__29sFStateFct_c<13dAcGirahimu_c>FRP10sStateIf_c = .text:0x00004420; // type:function size:0xC -initialize__26sFState_c<13dAcGirahimu_c>Fv = .text:0x00004430; // type:function size:0x1C -execute__26sFState_c<13dAcGirahimu_c>Fv = .text:0x00004450; // type:function size:0x1C -finalize__26sFState_c<13dAcGirahimu_c>Fv = .text:0x00004470; // type:function size:0x1C -initializeState__82sStateMgr_c<13dAcGirahimu_c,20sStateMethodUsr_FI_c,12sFStateFct_c,13sStateIDChk_c>Fv = .text:0x00004490; // type:function size:0x10 -finalizeState__82sStateMgr_c<13dAcGirahimu_c,20sStateMethodUsr_FI_c,12sFStateFct_c,13sStateIDChk_c>Fv = .text:0x000044A0; // type:function size:0x10 -refreshState__82sStateMgr_c<13dAcGirahimu_c,20sStateMethodUsr_FI_c,12sFStateFct_c,13sStateIDChk_c>Fv = .text:0x000044B0; // type:function size:0x10 -getState__82sStateMgr_c<13dAcGirahimu_c,20sStateMethodUsr_FI_c,12sFStateFct_c,13sStateIDChk_c>CFv = .text:0x000044C0; // type:function size:0x10 -getNewStateID__82sStateMgr_c<13dAcGirahimu_c,20sStateMethodUsr_FI_c,12sFStateFct_c,13sStateIDChk_c>CFv = .text:0x000044D0; // type:function size:0x10 -getOldStateID__82sStateMgr_c<13dAcGirahimu_c,20sStateMethodUsr_FI_c,12sFStateFct_c,13sStateIDChk_c>CFv = .text:0x000044E0; // type:function size:0x10 +ExecCallback_DRAW_XLU__Q34nw4r3g3d15IScnObjCallbackFQ44nw4r3g3d6ScnObj6TimingPQ34nw4r3g3d6ScnObjUlPv = .text:0x00004370; // type:function size:0x4 +ExecCallback_DRAW_OPA__Q34nw4r3g3d15IScnObjCallbackFQ44nw4r3g3d6ScnObj6TimingPQ34nw4r3g3d6ScnObjUlPv = .text:0x00004380; // type:function size:0x4 +ExecCallback_CALC_MAT__Q34nw4r3g3d15IScnObjCallbackFQ44nw4r3g3d6ScnObj6TimingPQ34nw4r3g3d6ScnObjUlPv = .text:0x00004390; // type:function size:0x4 +ExecCallback_CALC_WORLD__Q34nw4r3g3d15IScnObjCallbackFQ44nw4r3g3d6ScnObj6TimingPQ34nw4r3g3d6ScnObjUlPv = .text:0x000043A0; // type:function size:0x4 +ExecCallback_CALC_VIEW__Q34nw4r3g3d15IScnObjCallbackFQ44nw4r3g3d6ScnObj6TimingPQ34nw4r3g3d6ScnObjUlPv = .text:0x000043B0; // type:function size:0x4 +build__33sFStateFct_c<17dAcGirahimuBase_c>FRC12sStateIDIf_c = .text:0x000043C0; // type:function size:0x60 +dispose__33sFStateFct_c<17dAcGirahimuBase_c>FRP10sStateIf_c = .text:0x00004420; // type:function size:0xC +initialize__30sFState_c<17dAcGirahimuBase_c>Fv = .text:0x00004430; // type:function size:0x1C +execute__30sFState_c<17dAcGirahimuBase_c>Fv = .text:0x00004450; // type:function size:0x1C +finalize__30sFState_c<17dAcGirahimuBase_c>Fv = .text:0x00004470; // type:function size:0x1C +initializeState__86sStateMgr_c<17dAcGirahimuBase_c,20sStateMethodUsr_FI_c,12sFStateFct_c,13sStateIDChk_c>Fv = .text:0x00004490; // type:function size:0x10 +finalizeState__86sStateMgr_c<17dAcGirahimuBase_c,20sStateMethodUsr_FI_c,12sFStateFct_c,13sStateIDChk_c>Fv = .text:0x000044A0; // type:function size:0x10 +refreshState__86sStateMgr_c<17dAcGirahimuBase_c,20sStateMethodUsr_FI_c,12sFStateFct_c,13sStateIDChk_c>Fv = .text:0x000044B0; // type:function size:0x10 +getState__86sStateMgr_c<17dAcGirahimuBase_c,20sStateMethodUsr_FI_c,12sFStateFct_c,13sStateIDChk_c>CFv = .text:0x000044C0; // type:function size:0x10 +getNewStateID__86sStateMgr_c<17dAcGirahimuBase_c,20sStateMethodUsr_FI_c,12sFStateFct_c,13sStateIDChk_c>CFv = .text:0x000044D0; // type:function size:0x10 +getOldStateID__86sStateMgr_c<17dAcGirahimuBase_c,20sStateMethodUsr_FI_c,12sFStateFct_c,13sStateIDChk_c>CFv = .text:0x000044E0; // type:function size:0x10 __sinit_\d_a_b_girahimu_cpp = .text:0x000044F0; // type:function size:0x710 scope:local __dt__28sFStateID_c<13dAcGirahimu_c>Fv = .text:0x00004C00; // type:function size:0x58 -fn_227_4C60 = .text:0x00004C60; // type:function size:0x5C -fn_227_4CC0 = .text:0x00004CC0; // type:function size:0xC -fn_227_4CD0 = .text:0x00004CD0; // type:function size:0xC -fn_227_4CE0 = .text:0x00004CE0; // type:function size:0xDC -fn_227_4DC0 = .text:0x00004DC0; // type:function size:0xE0 +__dt__35sFStateVirtualID_c<13dAcGirahimu_c>Fv = .text:0x00004C60; // type:function size:0x5C +baseID_CatchDamage<17dAcGirahimuBase_c>__Fv_RC12sStateIDIf_c = .text:0x00004CC0; // type:function size:0xC +baseID_G_SwordDamage<17dAcGirahimuBase_c>__Fv_RC12sStateIDIf_c = .text:0x00004CD0; // type:function size:0xC +number__35sFStateVirtualID_c<13dAcGirahimu_c>CFv = .text:0x00004CE0; // type:function size:0xDC +superID__35sFStateVirtualID_c<13dAcGirahimu_c>CFv = .text:0x00004DC0; // type:function size:0xE0 isSameName__28sFStateID_c<13dAcGirahimu_c>CFPCc = .text:0x00004EA0; // type:function size:0x88 initializeState__28sFStateID_c<13dAcGirahimu_c>CFR13dAcGirahimu_c = .text:0x00004F30; // type:function size:0x30 executeState__28sFStateID_c<13dAcGirahimu_c>CFR13dAcGirahimu_c = .text:0x00004F60; // type:function size:0x30 finalizeState__28sFStateID_c<13dAcGirahimu_c>CFR13dAcGirahimu_c = .text:0x00004F90; // type:function size:0x30 -fn_227_4FC0 = .text:0x00004FC0; // type:function size:0x8 -fn_227_4FD0 = .text:0x00004FD0; // type:function size:0x8 -fn_227_4FE0 = .text:0x00004FE0; // type:function size:0x8 +@272@__dt__22dCcD_Linked<8dCcD_Cps>Fv = .text:0x00004FC0; // type:function size:0x8 +@272@__dt__22dCcD_Linked<8dCcD_Sph>Fv = .text:0x00004FD0; // type:function size:0x8 +@272@__dt__22dCcD_Linked<8dCcD_Cyl>Fv = .text:0x00004FE0; // type:function size:0x8 _ctors = .ctors:0x00000000; // type:label scope:global _dtors = .dtors:0x00000000; // type:label scope:global __destroy_global_chain_reference = .dtors:0x00000000; // type:object size:0x4 scope:global @@ -128,18 +128,18 @@ lbl_227_data_13C = .data:0x0000013C; // type:object size:0x40 lbl_227_data_17C = .data:0x0000017C; // type:object size:0x7 data:string lbl_227_data_184 = .data:0x00000184; // type:object size:0xC data:4byte lbl_227_data_190 = .data:0x00000190; // type:object size:0xC data:4byte -jumptable_227_data_19C = .data:0x0000019C; // type:object size:0x24 scope:local -AcGirahimu__vtable = .data:0x000001C0; // type:object size:0x238 -lbl_227_data_3F8 = .data:0x000003F8; // type:object size:0x70 -lbl_227_data_468 = .data:0x00000468; // type:object size:0x30 -lbl_227_data_498 = .data:0x00000498; // type:object size:0x30 -lbl_227_data_4C8 = .data:0x000004C8; // type:object size:0x18 -lbl_227_data_4E0 = .data:0x000004E0; // type:object size:0x18 -lbl_227_data_4F8 = .data:0x000004F8; // type:object size:0x70 -lbl_227_data_568 = .data:0x00000568; // type:object size:0x10 -lbl_227_data_578 = .data:0x00000578; // type:object size:0x70 -lbl_227_data_5E8 = .data:0x000005E8; // type:object size:0xC -lbl_227_data_5F4 = .data:0x000005F4; // type:object size:0x2B8 +@33792 = .data:0x0000019C; // type:object size:0x24 scope:local +__vt__13dAcGirahimu_c = .data:0x000001C0; // type:object size:0x238 +__vt__22dCcD_Linked<8dCcD_Cyl> = .data:0x000003F8; // type:object size:0x70 +__vt__56sFStateMgr_c<17dAcGirahimuBase_c,20sStateMethodUsr_FI_c> = .data:0x00000468; // type:object size:0x30 +__vt__86sStateMgr_c<17dAcGirahimuBase_c,20sStateMethodUsr_FI_c,12sFStateFct_c,13sStateIDChk_c> = .data:0x00000498; // type:object size:0x30 +__vt__33sFStateFct_c<17dAcGirahimuBase_c> = .data:0x000004C8; // type:object size:0x18 +__vt__30sFState_c<17dAcGirahimuBase_c> = .data:0x000004E0; // type:object size:0x18 +__vt__22dCcD_Linked<8dCcD_Sph> = .data:0x000004F8; // type:object size:0x70 +__vt__16dEnemySwordMdl_c = .data:0x00000568; // type:object size:0x10 +__vt__22dCcD_Linked<8dCcD_Cps> = .data:0x00000578; // type:object size:0x70 +__vt__26dSwordSwingEffectProcMgr_c = .data:0x000005E8; // type:object size:0xC +__vt__15dShadowCircle_c = .data:0x000005F4; // type:object size:0x2B8 lbl_227_data_8AC = .data:0x000008AC; // type:object size:0x34 lbl_227_data_8E0 = .data:0x000008E0; // type:object size:0x34 lbl_227_data_914 = .data:0x00000914; // type:object size:0x6 data:string diff --git a/config/SOUE01/rels/d_a_b_girahimu_baseNP/symbols.txt b/config/SOUE01/rels/d_a_b_girahimu_baseNP/symbols.txt index 6eaf98225..982a61dec 100644 --- a/config/SOUE01/rels/d_a_b_girahimu_baseNP/symbols.txt +++ b/config/SOUE01/rels/d_a_b_girahimu_baseNP/symbols.txt @@ -3,244 +3,244 @@ _epilog = .text:0x00000030; // type:function size:0x2C scope:global _unresolved = .text:0x00000060; // type:function size:0x4 scope:global __register_global_object = .text:0x00000070; // type:function size:0x1C scope:global __destroy_global_chain = .text:0x00000090; // type:function size:0x54 scope:global -fn_226_F0 = .text:0x000000F0; // type:function size:0xC -fn_226_100 = .text:0x00000100; // type:function size:0xC -fn_226_110 = .text:0x00000110; // type:function size:0xC -fn_226_120 = .text:0x00000120; // type:function size:0xC -fn_226_130 = .text:0x00000130; // type:function size:0xC -fn_226_140 = .text:0x00000140; // type:function size:0xC -fn_226_150 = .text:0x00000150; // type:function size:0xC -fn_226_160 = .text:0x00000160; // type:function size:0xC -fn_226_170 = .text:0x00000170; // type:function size:0xC -fn_226_180 = .text:0x00000180; // type:function size:0xC -fn_226_190 = .text:0x00000190; // type:function size:0xC -fn_226_1A0 = .text:0x000001A0; // type:function size:0xC -fn_226_1B0 = .text:0x000001B0; // type:function size:0xC -fn_226_1C0 = .text:0x000001C0; // type:function size:0xC -fn_226_1D0 = .text:0x000001D0; // type:function size:0xC -fn_226_1E0 = .text:0x000001E0; // type:function size:0xC -fn_226_1F0 = .text:0x000001F0; // type:function size:0xC -fn_226_200 = .text:0x00000200; // type:function size:0xC -fn_226_210 = .text:0x00000210; // type:function size:0xC -fn_226_220 = .text:0x00000220; // type:function size:0xC -fn_226_230 = .text:0x00000230; // type:function size:0xC -fn_226_240 = .text:0x00000240; // type:function size:0xC -fn_226_250 = .text:0x00000250; // type:function size:0xC -fn_226_260 = .text:0x00000260; // type:function size:0xC -fn_226_270 = .text:0x00000270; // type:function size:0xC -fn_226_280 = .text:0x00000280; // type:function size:0xC -fn_226_290 = .text:0x00000290; // type:function size:0xC -fn_226_2A0 = .text:0x000002A0; // type:function size:0xC +baseID_Wait<10sStateID_c>__Fv_RC12sStateIDIf_c = .text:0x000000F0; // type:function size:0xC +baseID_Walk<10sStateID_c>__Fv_RC12sStateIDIf_c = .text:0x00000100; // type:function size:0xC +baseID_Panch<10sStateID_c>__Fv_RC12sStateIDIf_c = .text:0x00000110; // type:function size:0xC +baseID_Catch<10sStateID_c>__Fv_RC12sStateIDIf_c = .text:0x00000120; // type:function size:0xC +baseID_CatchDamage<10sStateID_c>__Fv_RC12sStateIDIf_c = .text:0x00000130; // type:function size:0xC +baseID_GetSword<10sStateID_c>__Fv_RC12sStateIDIf_c = .text:0x00000140; // type:function size:0xC +baseID_Link_SwordWait<10sStateID_c>__Fv_RC12sStateIDIf_c = .text:0x00000150; // type:function size:0xC +baseID_Link_SwordWalk<10sStateID_c>__Fv_RC12sStateIDIf_c = .text:0x00000160; // type:function size:0xC +baseID_Link_SwordAttack<10sStateID_c>__Fv_RC12sStateIDIf_c = .text:0x00000170; // type:function size:0xC +baseID_ReturnSword<10sStateID_c>__Fv_RC12sStateIDIf_c = .text:0x00000180; // type:function size:0xC +baseID_LinkSwordGuardJust<10sStateID_c>__Fv_RC12sStateIDIf_c = .text:0x00000190; // type:function size:0xC +baseID_SearchSword<10sStateID_c>__Fv_RC12sStateIDIf_c = .text:0x000001A0; // type:function size:0xC +baseID_HomeWarp<10sStateID_c>__Fv_RC12sStateIDIf_c = .text:0x000001B0; // type:function size:0xC +baseID_PickUpSword<10sStateID_c>__Fv_RC12sStateIDIf_c = .text:0x000001C0; // type:function size:0xC +baseID_ReleaseSword<10sStateID_c>__Fv_RC12sStateIDIf_c = .text:0x000001D0; // type:function size:0xC +baseID_BackStep<10sStateID_c>__Fv_RC12sStateIDIf_c = .text:0x000001E0; // type:function size:0xC +baseID_Escape<10sStateID_c>__Fv_RC12sStateIDIf_c = .text:0x000001F0; // type:function size:0xC +baseID_EscapeBack<10sStateID_c>__Fv_RC12sStateIDIf_c = .text:0x00000200; // type:function size:0xC +baseID_FrontWarp<10sStateID_c>__Fv_RC12sStateIDIf_c = .text:0x00000210; // type:function size:0xC +baseID_FrontAttack<10sStateID_c>__Fv_RC12sStateIDIf_c = .text:0x00000220; // type:function size:0xC +baseID_BackWarp<10sStateID_c>__Fv_RC12sStateIDIf_c = .text:0x00000230; // type:function size:0xC +baseID_BackAttack<10sStateID_c>__Fv_RC12sStateIDIf_c = .text:0x00000240; // type:function size:0xC +baseID_Counter<10sStateID_c>__Fv_RC12sStateIDIf_c = .text:0x00000250; // type:function size:0xC +baseID_Run<10sStateID_c>__Fv_RC12sStateIDIf_c = .text:0x00000260; // type:function size:0xC +baseID_RunAttack<10sStateID_c>__Fv_RC12sStateIDIf_c = .text:0x00000270; // type:function size:0xC +baseID_BackWalk<10sStateID_c>__Fv_RC12sStateIDIf_c = .text:0x00000280; // type:function size:0xC +baseID_G_SwordDamage<10sStateID_c>__Fv_RC12sStateIDIf_c = .text:0x00000290; // type:function size:0xC +baseID_KnifeDamage<10sStateID_c>__Fv_RC12sStateIDIf_c = .text:0x000002A0; // type:function size:0xC dAcGirahimuBase_c_classInit__Fv = .text:0x000002B0; // type:function size:0x3E4 __dt__30sFState_c<17dAcGirahimuBase_c>Fv = .text:0x000006A0; // type:function size:0x58 __dt__33sFStateFct_c<17dAcGirahimuBase_c>Fv = .text:0x00000700; // type:function size:0x6C __dt__86sStateMgr_c<17dAcGirahimuBase_c,20sStateMethodUsr_FI_c,12sFStateFct_c,13sStateIDChk_c>Fv = .text:0x00000770; // type:function size:0xA0 __dt__56sFStateMgr_c<17dAcGirahimuBase_c,20sStateMethodUsr_FI_c>Fv = .text:0x00000810; // type:function size:0xA4 -fn_226_8C0 = .text:0x000008C0; // type:function size:0x3C -fn_226_900 = .text:0x00000900; // type:function size:0x40 -fn_226_940 = .text:0x00000940; // type:function size:0x4 -fn_226_950 = .text:0x00000950; // type:function size:0x40 -fn_226_990 = .text:0x00000990; // type:function size:0x58 -fn_226_9F0 = .text:0x000009F0; // type:function size:0x58 -fn_226_A50 = .text:0x00000A50; // type:function size:0x84 -fn_226_AE0 = .text:0x00000AE0; // type:function size:0x58 -fn_226_B40 = .text:0x00000B40; // type:function size:0x90 -fn_226_BD0 = .text:0x00000BD0; // type:function size:0xCC -fn_226_CA0 = .text:0x00000CA0; // type:function size:0x90 -fn_226_D30 = .text:0x00000D30; // type:function size:0x90 -fn_226_DC0 = .text:0x00000DC0; // type:function size:0xBC -fn_226_E80 = .text:0x00000E80; // type:function size:0x2E0 -fn_226_1160 = .text:0x00001160; // type:function size:0x360 -fn_226_14C0 = .text:0x000014C0; // type:function size:0xB8 -fn_226_1580 = .text:0x00001580; // type:function size:0x5D4 -fn_226_1B60 = .text:0x00001B60; // type:function size:0x270 -fn_226_1DD0 = .text:0x00001DD0; // type:function size:0x710 -fn_226_24E0 = .text:0x000024E0; // type:function size:0x4 -fn_226_24F0 = .text:0x000024F0; // type:function size:0x48C -fn_226_2980 = .text:0x00002980; // type:function size:0x648 -fn_226_2FD0 = .text:0x00002FD0; // type:function size:0xA4 -fn_226_3080 = .text:0x00003080; // type:function size:0xA4 -fn_226_3130 = .text:0x00003130; // type:function size:0x14 -fn_226_3150 = .text:0x00003150; // type:function size:0x1C0 -AcGirahimuBase__wait = .text:0x00003310; // type:function size:0xD4 -AcGirahimuBase__swordRelatedUpdateStuffMaybe = .text:0x000033F0; // type:function size:0x3F0 +__ct__Q23m3d8anmChr_cFv = .text:0x000008C0; // type:function size:0x3C +__dt__Q34nw4r3g3d15IScnObjCallbackFv = .text:0x00000900; // type:function size:0x40 +__ct__7mVec2_cFv = .text:0x00000940; // type:function size:0x4 +__dt__7mVec2_cFv = .text:0x00000950; // type:function size:0x40 +__dt__Q217dAcGirahimuBase_c10callback_cFv = .text:0x00000990; // type:function size:0x58 +__dt__15dShadowCircle_cFv = .text:0x000009F0; // type:function size:0x58 +__dt__26dSwordSwingEffectProcMgr_cFv = .text:0x00000A50; // type:function size:0x84 +__ct__22dCcD_Linked<8dCcD_Cps>Fv = .text:0x00000AE0; // type:function size:0x58 +__dt__22dCcD_Linked<8dCcD_Cps>Fv = .text:0x00000B40; // type:function size:0x90 +__dt__16dEnemySwordMdl_cFv = .text:0x00000BD0; // type:function size:0xCC +__dt__22dCcD_Linked<8dCcD_Cyl>Fv = .text:0x00000CA0; // type:function size:0x90 +__dt__22dCcD_Linked<8dCcD_Sph>Fv = .text:0x00000D30; // type:function size:0x90 +fn_226_DC0__Q217dAcGirahimuBase_c10callback_cFR6mMtx_cRC7mAng3_c4mAng = .text:0x00000DC0; // type:function size:0xBC +fn_226_E80__Q217dAcGirahimuBase_c10callback_cFv = .text:0x00000E80; // type:function size:0x2E0 +fn_226_1160__Q217dAcGirahimuBase_c10callback_cFv = .text:0x00001160; // type:function size:0x360 +init__Q217dAcGirahimuBase_c10callback_cFP17dAcGirahimuBase_c = .text:0x000014C0; // type:function size:0xB8 +fn_226_1580__Q217dAcGirahimuBase_c10callback_cFUlPQ34nw4r3g3d13WorldMtxManipQ34nw4r3g3d6ResMdl = .text:0x00001580; // type:function size:0x5D4 +fn_226_1B60__Q217dAcGirahimuBase_c10callback_cFR7mVec3_c = .text:0x00001B60; // type:function size:0x270 +fn_226_1DD0__Q217dAcGirahimuBase_c10callback_cFv = .text:0x00001DD0; // type:function size:0x710 +fn_226_24E0__Q217dAcGirahimuBase_c10callback_cFv = .text:0x000024E0; // type:function size:0x4 +fn_226_24F0__Q217dAcGirahimuBase_c10callback_cFv = .text:0x000024F0; // type:function size:0x48C +timingB__Q217dAcGirahimuBase_c10callback_cFUlPQ34nw4r3g3d13WorldMtxManipQ34nw4r3g3d6ResMdl = .text:0x00002980; // type:function size:0x648 +fn_226_2FD0__Q217dAcGirahimuBase_c10callback_cFv = .text:0x00002FD0; // type:function size:0xA4 +fn_226_3080__Q217dAcGirahimuBase_c10callback_cFv = .text:0x00003080; // type:function size:0xA4 +fn_226_3130__Q217dAcGirahimuBase_c10callback_cFv = .text:0x00003130; // type:function size:0x14 +fn_226_3150__Q217dAcGirahimuBase_c10callback_cFR6mMtx_c = .text:0x00003150; // type:function size:0x1C0 +initializeState_Wait__17dAcGirahimuBase_cFv = .text:0x00003310; // type:function size:0xD4 +executeState_Wait__17dAcGirahimuBase_cFv = .text:0x000033F0; // type:function size:0x3F0 changeState__86sStateMgr_c<17dAcGirahimuBase_c,20sStateMethodUsr_FI_c,12sFStateFct_c,13sStateIDChk_c>FRC12sStateIDIf_c = .text:0x000037E0; // type:function size:0x10 -fn_226_37F0 = .text:0x000037F0; // type:function size:0x8 -fn_226_3800 = .text:0x00003800; // type:function size:0x1C -AcGirahimuBase__walk = .text:0x00003820; // type:function size:0x100 -AcGirahimuBase__handleSomeSwordStuff = .text:0x00003920; // type:function size:0x164 -fn_226_3A90 = .text:0x00003A90; // type:function size:0x4 -AcGirahimuBase__slapPlayer = .text:0x00003AA0; // type:function size:0x6C -AcGirahimuBase__someAtCollisionFlags = .text:0x00003B10; // type:function size:0x100 -AcGirahimuBase__resetSomeAtColliderFlagsMaybe = .text:0x00003C10; // type:function size:0x6C -AcGirahimuBase__failToTakePlayerSwordMaybe = .text:0x00003C80; // type:function size:0x180 -fn_226_3E00 = .text:0x00003E00; // type:function size:0x4 -AcGirahimuBase__handleStruggleOverPlayerSword = .text:0x00003E10; // type:function size:0x1F0 -fn_226_4000 = .text:0x00004000; // type:function size:0x70 -AcGirahimuBase__somethingDefenderColliderTgFlagsMaybe = .text:0x00004070; // type:function size:0x44 -AcGirahimuBase__moreDefenderColliderStuff = .text:0x000040C0; // type:function size:0xA0 -AcGirahimuBase__evenMoreDefenderColliderTgStuff = .text:0x00004160; // type:function size:0x18 -fn_226_4180 = .text:0x00004180; // type:function size:0x4 -fn_226_4190 = .text:0x00004190; // type:function size:0x4 -fn_226_41A0 = .text:0x000041A0; // type:function size:0x4 -AcGirahimuBase__hurtFromDarts = .text:0x000041B0; // type:function size:0xC8 -AcGirahimuBase__backflipIfTooCloseMaybe = .text:0x00004280; // type:function size:0x90 -fn_226_4310 = .text:0x00004310; // type:function size:0xC -fn_226_4320 = .text:0x00004320; // type:function size:0x4 -fn_226_4330 = .text:0x00004330; // type:function size:0x4 -fn_226_4340 = .text:0x00004340; // type:function size:0x4 -AcGirahimuBase__guardWithSword = .text:0x00004350; // type:function size:0x114 -AcGirahimuBase__trySetStateSearchSword = .text:0x00004470; // type:function size:0x54 -fn_226_44D0 = .text:0x000044D0; // type:function size:0x4 -AcGirahimuBase__takeSwordFromPlayer = .text:0x000044E0; // type:function size:0xBC -fn_226_45A0 = .text:0x000045A0; // type:function size:0x294 -fn_226_4840 = .text:0x00004840; // type:function size:0x10 -AcGirahimuBase__walkAndUpdateColliderMaybe = .text:0x00004850; // type:function size:0x64 -AcGirahimuBase__somePlayerSwordStuff = .text:0x000048C0; // type:function size:0x288 -AcGirahimuBase__setDefenderColliderFlagsMaybe = .text:0x00004B50; // type:function size:0x28 -AcGirahimuBase__hairFlickPose = .text:0x00004B80; // type:function size:0x70 -fn_226_4BF0 = .text:0x00004BF0; // type:function size:0x28C -fn_226_4E80 = .text:0x00004E80; // type:function size:0x10 -AcGirahimuBase__pickUpPlayerSwordMaybe = .text:0x00004E90; // type:function size:0x74 -fn_226_4F10 = .text:0x00004F10; // type:function size:0xC0 -fn_226_4FD0 = .text:0x00004FD0; // type:function size:0x4 -AcGirahimuBase__admireLinkSwordEventMaybe = .text:0x00004FE0; // type:function size:0xEC -AcGirahimuBase__swordStateChangesMaybe = .text:0x000050D0; // type:function size:0x120 -fn_226_51F0 = .text:0x000051F0; // type:function size:0xC -AcGirahimuBase__walkAtPlayerWithSword = .text:0x00005200; // type:function size:0x6C -fn_226_5270 = .text:0x00005270; // type:function size:0x190 -AcGirahimuBase__setSpeedToZero = .text:0x00005400; // type:function size:0x14 -AcGirahimuBase__attackPlayerWithSword = .text:0x00005420; // type:function size:0xC0 -fn_226_54E0 = .text:0x000054E0; // type:function size:0x100 -fn_226_55E0 = .text:0x000055E0; // type:function size:0x18 -AcGirahimuBase__throwPlayerSwordBack = .text:0x00005600; // type:function size:0x84 -AcGirahimuBase__afterThrowPlayerSwordBackMaybe = .text:0x00005690; // type:function size:0x174 -fn_226_5810 = .text:0x00005810; // type:function size:0x4 -AcGirahimuBase__startJumpBack = .text:0x00005820; // type:function size:0xE4 -AcGirahimuBase__updateJumpBack = .text:0x00005910; // type:function size:0x288 -fn_226_5BA0 = .text:0x00005BA0; // type:function size:0x30 -AcGirahimuBase__endJumpBack = .text:0x00005BD0; // type:function size:0xB4 -fn_226_5C90 = .text:0x00005C90; // type:function size:0x104 -fn_226_5DA0 = .text:0x00005DA0; // type:function size:0x38 -AcGirahimuBase__someWaitMaybe = .text:0x00005DE0; // type:function size:0xDC -fn_226_5EC0 = .text:0x00005EC0; // type:function size:0x6C -fn_226_5F30 = .text:0x00005F30; // type:function size:0x28 -AcGirahimuBase__hairFlickMaybe = .text:0x00005F60; // type:function size:0x78 -fn_226_5FE0 = .text:0x00005FE0; // type:function size:0x2C8 -fn_226_62B0 = .text:0x000062B0; // type:function size:0x44 -fn_226_6300 = .text:0x00006300; // type:function size:0x74 -fn_226_6380 = .text:0x00006380; // type:function size:0x8 -AcGirahimuBase__closeToPlayerWithSwordMaybe = .text:0x00006390; // type:function size:0x164 -fn_226_6500 = .text:0x00006500; // type:function size:0x4 -AcGirahimuBase__moreHairFlickMaybe = .text:0x00006510; // type:function size:0x84 -fn_226_65A0 = .text:0x000065A0; // type:function size:0x2D8 -fn_226_6880 = .text:0x00006880; // type:function size:0x44 -fn_226_68D0 = .text:0x000068D0; // type:function size:0x60 -AcGirahimuBase__poseWithSwordUpHigh = .text:0x00006930; // type:function size:0x28 -fn_226_6960 = .text:0x00006960; // type:function size:0x11C -fn_226_6A80 = .text:0x00006A80; // type:function size:0x4 -AcGirahimuBase__attackFromPose = .text:0x00006A90; // type:function size:0x198 -fn_226_6C30 = .text:0x00006C30; // type:function size:0xE4 -fn_226_6D20 = .text:0x00006D20; // type:function size:0x20 -AcGirahimuBase__poseBeforeRunAttack = .text:0x00006D40; // type:function size:0xB4 -AcGirahimuBase__runAtPlayerForAttack = .text:0x00006E00; // type:function size:0x658 -fn_226_7460 = .text:0x00007460; // type:function size:0x18 -AcGirahimuBase__attackAfterRun = .text:0x00007480; // type:function size:0xB0 -fn_226_7530 = .text:0x00007530; // type:function size:0xE0 -fn_226_7610 = .text:0x00007610; // type:function size:0x1C -fn_226_7630 = .text:0x00007630; // type:function size:0x8C -AcGirahimuBase__trySetStateWait = .text:0x000076C0; // type:function size:0x28 -fn_226_76F0 = .text:0x000076F0; // type:function size:0x4 +vt_0x210__17dAcGirahimuBase_cFv = .text:0x000037F0; // type:function size:0x8 +finalizeState_Wait__17dAcGirahimuBase_cFv = .text:0x00003800; // type:function size:0x1C +initializeState_Walk__17dAcGirahimuBase_cFv = .text:0x00003820; // type:function size:0x100 +executeState_Walk__17dAcGirahimuBase_cFv = .text:0x00003920; // type:function size:0x164 +finalizeState_Walk__17dAcGirahimuBase_cFv = .text:0x00003A90; // type:function size:0x4 +initializeState_Panch__17dAcGirahimuBase_cFv = .text:0x00003AA0; // type:function size:0x6C +executeState_Panch__17dAcGirahimuBase_cFv = .text:0x00003B10; // type:function size:0x100 +finalizeState_Panch__17dAcGirahimuBase_cFv = .text:0x00003C10; // type:function size:0x6C +initializeState_Catch__17dAcGirahimuBase_cFv = .text:0x00003C80; // type:function size:0x180 +vt_0x1FC__17dAcGirahimuBase_cFv = .text:0x00003E00; // type:function size:0x4 +executeState_Catch__17dAcGirahimuBase_cFv = .text:0x00003E10; // type:function size:0x1F0 +finalizeState_Catch__17dAcGirahimuBase_cFv = .text:0x00004000; // type:function size:0x70 +initializeState_ReleaseSword__17dAcGirahimuBase_cFv = .text:0x00004070; // type:function size:0x44 +executeState_ReleaseSword__17dAcGirahimuBase_cFv = .text:0x000040C0; // type:function size:0xA0 +finalizeState_ReleaseSword__17dAcGirahimuBase_cFv = .text:0x00004160; // type:function size:0x18 +initializeState_G_SwordDamage__17dAcGirahimuBase_cFv = .text:0x00004180; // type:function size:0x4 +executeState_G_SwordDamage__17dAcGirahimuBase_cFv = .text:0x00004190; // type:function size:0x4 +finalizeState_G_SwordDamage__17dAcGirahimuBase_cFv = .text:0x000041A0; // type:function size:0x4 +initializeState_KnifeDamage__17dAcGirahimuBase_cFv = .text:0x000041B0; // type:function size:0xC8 +executeState_KnifeDamage__17dAcGirahimuBase_cFv = .text:0x00004280; // type:function size:0x90 +finalizeState_KnifeDamage__17dAcGirahimuBase_cFv = .text:0x00004310; // type:function size:0xC +initializeState_CatchDamage__17dAcGirahimuBase_cFv = .text:0x00004320; // type:function size:0x4 +executeState_CatchDamage__17dAcGirahimuBase_cFv = .text:0x00004330; // type:function size:0x4 +finalizeState_CatchDamage__17dAcGirahimuBase_cFv = .text:0x00004340; // type:function size:0x4 +initializeState_LinkSwordGuardJust__17dAcGirahimuBase_cFv = .text:0x00004350; // type:function size:0x114 +executeState_LinkSwordGuardJust__17dAcGirahimuBase_cFv = .text:0x00004470; // type:function size:0x54 +finalizeState_LinkSwordGuardJust__17dAcGirahimuBase_cFv = .text:0x000044D0; // type:function size:0x4 +initializeState_GetSword__17dAcGirahimuBase_cFv = .text:0x000044E0; // type:function size:0xBC +executeState_GetSword__17dAcGirahimuBase_cFv = .text:0x000045A0; // type:function size:0x294 +finalizeState_GetSword__17dAcGirahimuBase_cFv = .text:0x00004840; // type:function size:0x10 +initializeState_SearchSword__17dAcGirahimuBase_cFv = .text:0x00004850; // type:function size:0x64 +executeState_SearchSword__17dAcGirahimuBase_cFv = .text:0x000048C0; // type:function size:0x288 +finalizeState_SearchSword__17dAcGirahimuBase_cFv = .text:0x00004B50; // type:function size:0x28 +initializeState_HomeWarp__17dAcGirahimuBase_cFv = .text:0x00004B80; // type:function size:0x70 +executeState_HomeWarp__17dAcGirahimuBase_cFv = .text:0x00004BF0; // type:function size:0x28C +finalizeState_HomeWarp__17dAcGirahimuBase_cFv = .text:0x00004E80; // type:function size:0x10 +initializeState_PickUpSword__17dAcGirahimuBase_cFv = .text:0x00004E90; // type:function size:0x74 +executeState_PickUpSword__17dAcGirahimuBase_cFv = .text:0x00004F10; // type:function size:0xC0 +finalizeState_PickUpSword__17dAcGirahimuBase_cFv = .text:0x00004FD0; // type:function size:0x4 +initializeState_Link_SwordWait__17dAcGirahimuBase_cFv = .text:0x00004FE0; // type:function size:0xEC +executeState_Link_SwordWait__17dAcGirahimuBase_cFv = .text:0x000050D0; // type:function size:0x120 +finalizeState_Link_SwordWait__17dAcGirahimuBase_cFv = .text:0x000051F0; // type:function size:0xC +initializeState_Link_SwordWalk__17dAcGirahimuBase_cFv = .text:0x00005200; // type:function size:0x6C +executeState_Link_SwordWalk__17dAcGirahimuBase_cFv = .text:0x00005270; // type:function size:0x190 +finalizeState_Link_SwordWalk__17dAcGirahimuBase_cFv = .text:0x00005400; // type:function size:0x14 +initializeState_Link_SwordAttack__17dAcGirahimuBase_cFv = .text:0x00005420; // type:function size:0xC0 +executeState_Link_SwordAttack__17dAcGirahimuBase_cFv = .text:0x000054E0; // type:function size:0x100 +finalizeState_Link_SwordAttack__17dAcGirahimuBase_cFv = .text:0x000055E0; // type:function size:0x18 +initializeState_ReturnSword__17dAcGirahimuBase_cFv = .text:0x00005600; // type:function size:0x84 +executeState_ReturnSword__17dAcGirahimuBase_cFv = .text:0x00005690; // type:function size:0x174 +finalizeState_ReturnSword__17dAcGirahimuBase_cFv = .text:0x00005810; // type:function size:0x4 +initializeState_BackStep__17dAcGirahimuBase_cFv = .text:0x00005820; // type:function size:0xE4 +executeState_BackStep__17dAcGirahimuBase_cFv = .text:0x00005910; // type:function size:0x288 +finalizeState_BackStep__17dAcGirahimuBase_cFv = .text:0x00005BA0; // type:function size:0x30 +initializeState_Escape__17dAcGirahimuBase_cFv = .text:0x00005BD0; // type:function size:0xB4 +executeState_Escape__17dAcGirahimuBase_cFv = .text:0x00005C90; // type:function size:0x104 +finalizeState_Escape__17dAcGirahimuBase_cFv = .text:0x00005DA0; // type:function size:0x38 +initializeState_EscapeBack__17dAcGirahimuBase_cFv = .text:0x00005DE0; // type:function size:0xDC +executeState_EscapeBack__17dAcGirahimuBase_cFv = .text:0x00005EC0; // type:function size:0x6C +finalizeState_EscapeBack__17dAcGirahimuBase_cFv = .text:0x00005F30; // type:function size:0x28 +initializeState_FrontWarp__17dAcGirahimuBase_cFv = .text:0x00005F60; // type:function size:0x78 +executeState_FrontWarp__17dAcGirahimuBase_cFv = .text:0x00005FE0; // type:function size:0x2C8 +finalizeState_FrontWarp__17dAcGirahimuBase_cFv = .text:0x000062B0; // type:function size:0x44 +initializeState_FrontAttack__17dAcGirahimuBase_cFv = .text:0x00006300; // type:function size:0x74 +vt_0x218__17dAcGirahimuBase_cFv = .text:0x00006380; // type:function size:0x8 +executeState_FrontAttack__17dAcGirahimuBase_cFv = .text:0x00006390; // type:function size:0x164 +finalizeState_FrontAttack__17dAcGirahimuBase_cFv = .text:0x00006500; // type:function size:0x4 +initializeState_BackWarp__17dAcGirahimuBase_cFv = .text:0x00006510; // type:function size:0x84 +executeState_BackWarp__17dAcGirahimuBase_cFv = .text:0x000065A0; // type:function size:0x2D8 +finalizeState_BackWarp__17dAcGirahimuBase_cFv = .text:0x00006880; // type:function size:0x44 +initializeState_BackAttack__17dAcGirahimuBase_cFv = .text:0x000068D0; // type:function size:0x60 +vt_0x224__17dAcGirahimuBase_cFv = .text:0x00006930; // type:function size:0x28 +executeState_BackAttack__17dAcGirahimuBase_cFv = .text:0x00006960; // type:function size:0x11C +finalizeState_BackAttack__17dAcGirahimuBase_cFv = .text:0x00006A80; // type:function size:0x4 +initializeState_Counter__17dAcGirahimuBase_cFv = .text:0x00006A90; // type:function size:0x198 +executeState_Counter__17dAcGirahimuBase_cFv = .text:0x00006C30; // type:function size:0xE4 +finalizeState_Counter__17dAcGirahimuBase_cFv = .text:0x00006D20; // type:function size:0x20 +initializeState_Run__17dAcGirahimuBase_cFv = .text:0x00006D40; // type:function size:0xB4 +executeState_Run__17dAcGirahimuBase_cFv = .text:0x00006E00; // type:function size:0x658 +finalizeState_Run__17dAcGirahimuBase_cFv = .text:0x00007460; // type:function size:0x18 +initializeState_RunAttack__17dAcGirahimuBase_cFv = .text:0x00007480; // type:function size:0xB0 +executeState_RunAttack__17dAcGirahimuBase_cFv = .text:0x00007530; // type:function size:0xE0 +finalizeState_RunAttack__17dAcGirahimuBase_cFv = .text:0x00007610; // type:function size:0x1C +initializeState_BackWalk__17dAcGirahimuBase_cFv = .text:0x00007630; // type:function size:0x8C +executeState_BackWalk__17dAcGirahimuBase_cFv = .text:0x000076C0; // type:function size:0x28 +finalizeState_BackWalk__17dAcGirahimuBase_cFv = .text:0x000076F0; // type:function size:0x4 __dt__17dAcGirahimuBase_cFv = .text:0x00007700; // type:function size:0x42C -AcGirahimuBase__initResNodes = .text:0x00007B30; // type:function size:0x4D4 -AcGirahimuBase__initModels2 = .text:0x00008010; // type:function size:0x328 -AcGirahimu__initCollisionStuff = .text:0x00008340; // type:function size:0x22C -AcGirahimuBase__init = .text:0x00008570; // type:function size:0xB0 -fn_226_8620 = .text:0x00008620; // type:function size:0x8 -AcGirahimuBase__preUpdate = .text:0x00008630; // type:function size:0x80 -AcGirahimuBase__somePosRelativeToPlayerStuff = .text:0x000086B0; // type:function size:0x4B0 -getLinksEquippedSword = .text:0x00008B60; // type:function size:0xC -fn_226_8B70 = .text:0x00008B70; // type:function size:0x118 -fn_226_8C90 = .text:0x00008C90; // type:function size:0x124 -fn_226_8DC0 = .text:0x00008DC0; // type:function size:0x108 -fn_226_8ED0 = .text:0x00008ED0; // type:function size:0x11C -fn_226_8FF0 = .text:0x00008FF0; // type:function size:0xC4 -fn_226_90C0 = .text:0x000090C0; // type:function size:0xCC -fn_226_9190 = .text:0x00009190; // type:function size:0xCC -fn_226_9260 = .text:0x00009260; // type:function size:0xC4 -fn_226_9330 = .text:0x00009330; // type:function size:0x74 -fn_226_93B0 = .text:0x000093B0; // type:function size:0xCC -fn_226_9480 = .text:0x00009480; // type:function size:0xA0 -AcGirahimuBase__G3dProc__ShoulderRMaybe = .text:0x00009520; // type:function size:0x74 -fn_226_95A0 = .text:0x000095A0; // type:function size:0x74 -fn_226_9620 = .text:0x00009620; // type:function size:0x70 -AcGirahimuBase__somethingResNodeHair1 = .text:0x00009690; // type:function size:0x360 -fn_226_99F0 = .text:0x000099F0; // type:function size:0x298 -fn_226_9C90 = .text:0x00009C90; // type:function size:0x3E0 -fn_226_A070 = .text:0x0000A070; // type:function size:0xB0 -fn_226_A120 = .text:0x0000A120; // type:function size:0x160 -fn_226_A280 = .text:0x0000A280; // type:function size:0x8C -AcGirahimuBase__handleTurn = .text:0x0000A310; // type:function size:0xE4 -fn_226_A400 = .text:0x0000A400; // type:function size:0x16C -fn_226_A570 = .text:0x0000A570; // type:function size:0x34C -fn_226_A8C0 = .text:0x0000A8C0; // type:function size:0x64 -AcGirahimuBase__somethingResNodeEarring = .text:0x0000A930; // type:function size:0x198 -fn_226_AAD0 = .text:0x0000AAD0; // type:function size:0x144 -AcGirahimuBase__draw = .text:0x0000AC20; // type:function size:0x198 -fn_226_ADC0 = .text:0x0000ADC0; // type:function size:0x100 -fn_226_AEC0 = .text:0x0000AEC0; // type:function size:0xEC -fn_226_AFB0 = .text:0x0000AFB0; // type:function size:0xC4 -AcGirahimuBase__moveAfterTakingDamageMaybe = .text:0x0000B080; // type:function size:0x378 -fn_226_B400 = .text:0x0000B400; // type:function size:0x4C +initNodeData__17dAcGirahimuBase_cFv = .text:0x00007B30; // type:function size:0x4D4 +createHeap__17dAcGirahimuBase_cFv = .text:0x00008010; // type:function size:0x328 +createCollision__17dAcGirahimuBase_cFv = .text:0x00008340; // type:function size:0x22C +actorPostCreate__17dAcGirahimuBase_cFv = .text:0x00008570; // type:function size:0xB0 +doDelete__17dAcGirahimuBase_cFv = .text:0x00008620; // type:function size:0x8 +preExecute__17dAcGirahimuBase_cFv = .text:0x00008630; // type:function size:0x80 +vt_0x1DC__17dAcGirahimuBase_cFv = .text:0x000086B0; // type:function size:0x4B0 +getPlayerSwordType__17dAcGirahimuBase_cFv = .text:0x00008B60; // type:function size:0xC +setAnm__17dAcGirahimuBase_cFPCclPCcQ23m3d10playMode_eff = .text:0x00008B70; // type:function size:0x118 +setAnm__17dAcGirahimuBase_cFPCclPCclPCclQ23m3d10playMode_eff = .text:0x00008C90; // type:function size:0x124 +setAnm__17dAcGirahimuBase_cFPCclQ23m3d10playMode_eff = .text:0x00008DC0; // type:function size:0x108 +setAnmBody__17dAcGirahimuBase_cFPCclQ23m3d10playMode_eff = .text:0x00008ED0; // type:function size:0x11C +setAnmHip__17dAcGirahimuBase_cFPCclQ23m3d10playMode_eff = .text:0x00008FF0; // type:function size:0xC4 +setAnmShoulderR__17dAcGirahimuBase_cFPCclQ23m3d10playMode_eff = .text:0x000090C0; // type:function size:0xCC +setAnmShoulderL__17dAcGirahimuBase_cFPCclQ23m3d10playMode_eff = .text:0x00009190; // type:function size:0xCC +setAnmHead__17dAcGirahimuBase_cFPCclQ23m3d10playMode_eff = .text:0x00009260; // type:function size:0xC4 +bindAnmHead__17dAcGirahimuBase_cFv = .text:0x00009330; // type:function size:0x74 +bindAnmBody__17dAcGirahimuBase_cFv = .text:0x000093B0; // type:function size:0xCC +bindAnmHip__17dAcGirahimuBase_cFv = .text:0x00009480; // type:function size:0xA0 +bindAnmShoulderR__17dAcGirahimuBase_cFv = .text:0x00009520; // type:function size:0x74 +bindAnmShoulderL__17dAcGirahimuBase_cFv = .text:0x000095A0; // type:function size:0x74 +fn_226_9620__17dAcGirahimuBase_cFv = .text:0x00009620; // type:function size:0x70 +fn_226_9690__17dAcGirahimuBase_cFv = .text:0x00009690; // type:function size:0x360 +fn_256_99F0__17dAcGirahimuBase_cFv = .text:0x000099F0; // type:function size:0x298 +fn_256_9C90__17dAcGirahimuBase_cFv = .text:0x00009C90; // type:function size:0x3E0 +fn_226_A070__17dAcGirahimuBase_cF4mAng = .text:0x0000A070; // type:function size:0xB0 +fn_226_A120__17dAcGirahimuBase_cF4mAngf = .text:0x0000A120; // type:function size:0x160 +fn_226_A280__17dAcGirahimuBase_cF4mAng = .text:0x0000A280; // type:function size:0x8C +turn__17dAcGirahimuBase_cF4mAng = .text:0x0000A310; // type:function size:0xE4 +fn_226_A400__17dAcGirahimuBase_cFP8cCcD_Obj = .text:0x0000A400; // type:function size:0x16C +fn_226_A570__17dAcGirahimuBase_cFv = .text:0x0000A570; // type:function size:0x34C +getPlayerHeadOffset__17dAcGirahimuBase_cFv = .text:0x0000A8C0; // type:function size:0x64 +executeEarringTransform__17dAcGirahimuBase_cFv = .text:0x0000A930; // type:function size:0x198 +calcJumpMovement__17dAcGirahimuBase_cFff = .text:0x0000AAD0; // type:function size:0x144 +draw__17dAcGirahimuBase_cFv = .text:0x0000AC20; // type:function size:0x198 +fn_226_ADC0__17dAcGirahimuBase_cFP8cCcD_Obj = .text:0x0000ADC0; // type:function size:0x100 +setSwordLinkTransform__17dAcGirahimuBase_cFv = .text:0x0000AEC0; // type:function size:0xEC +setSwordLinkTransformPlayer__17dAcGirahimuBase_cFv = .text:0x0000AFB0; // type:function size:0xC4 +vt_0x1E0__17dAcGirahimuBase_cFv = .text:0x0000B080; // type:function size:0x378 +ChkTgHit__8cCcD_ObjFv = .text:0x0000B400; // type:function size:0x4C getStateID__86sStateMgr_c<17dAcGirahimuBase_c,20sStateMethodUsr_FI_c,12sFStateFct_c,13sStateIDChk_c>CFv = .text:0x0000B450; // type:function size:0x10 -fn_226_B460 = .text:0x0000B460; // type:function size:0x214 -fn_226_B680 = .text:0x0000B680; // type:function size:0x4 -fn_226_B690 = .text:0x0000B690; // type:function size:0x114 -fn_226_B7B0 = .text:0x0000B7B0; // type:function size:0x48 -AcGirahimuBase__takeDamageMaybe = .text:0x0000B800; // type:function size:0x160 -fn_226_B960 = .text:0x0000B960; // type:function size:0x158 -fn_226_BAC0 = .text:0x0000BAC0; // type:function size:0x134 -AcGirahimuBase__healthAndPlayerSwordPosRelated = .text:0x0000BC00; // type:function size:0x200 -fn_226_BE00 = .text:0x0000BE00; // type:function size:0x90 -fn_226_BE90 = .text:0x0000BE90; // type:function size:0xF4 -fn_226_BF90 = .text:0x0000BF90; // type:function size:0xD0 -fn_226_C060 = .text:0x0000C060; // type:function size:0x158 -fn_226_C1C0 = .text:0x0000C1C0; // type:function size:0x160 -fn_226_C320 = .text:0x0000C320; // type:function size:0x238 -fn_226_C560 = .text:0x0000C560; // type:function size:0x134 -fn_226_C6A0 = .text:0x0000C6A0; // type:function size:0xEC -fn_226_C790 = .text:0x0000C790; // type:function size:0x1F4 -fn_226_C990 = .text:0x0000C990; // type:function size:0x7C -AcGirahimuBase__poseWithSwordRelativeToPlayerMaybe = .text:0x0000CA10; // type:function size:0x224 -fn_226_CC40 = .text:0x0000CC40; // type:function size:0x10 -fn_226_CC50 = .text:0x0000CC50; // type:function size:0x10 -AcGirahimuBase__setStateWait = .text:0x0000CC60; // type:function size:0x18 -fn_226_CC80 = .text:0x0000CC80; // type:function size:0x28 -AcGirahimuBase__readOarcModelResFile = .text:0x0000CCB0; // type:function size:0x38 -AcGirahimuBase__setStatePanch = .text:0x0000CCF0; // type:function size:0x24 -AcGirahimuBase__poseWithSword = .text:0x0000CD20; // type:function size:0x7C -fn_226_CDA0 = .text:0x0000CDA0; // type:function size:0x58 -fn_226_CE00 = .text:0x0000CE00; // type:function size:0x58 -AcGirahimuBase__struggleOverPlayerSword = .text:0x0000CE60; // type:function size:0x1D0 -AcGirahimuBase__setStateFrontAttack = .text:0x0000D030; // type:function size:0x18 -AcGirahimuBase__setStateGetSword = .text:0x0000D050; // type:function size:0x18 -fn_226_D070 = .text:0x0000D070; // type:function size:0x18 -AcGirahimuBase__somethingResNodeHip = .text:0x0000D090; // type:function size:0x20C -AcGirahimuBase__setStateEscape = .text:0x0000D2A0; // type:function size:0x18 -fn_226_D2C0 = .text:0x0000D2C0; // type:function size:0x4 -AcGirahimuBase__somethingResNodeHead = .text:0x0000D2D0; // type:function size:0x2C8 -AcGirahimuBase__resetConsecutiveDeathConuterMaybe = .text:0x0000D5A0; // type:function size:0x58 -fn_226_D600 = .text:0x0000D600; // type:function size:0x8 -fn_226_D610 = .text:0x0000D610; // type:function size:0x4 -fn_226_D620 = .text:0x0000D620; // type:function size:0x4 -AcGirahimuBase__getActorList = .text:0x0000D630; // type:function size:0x8 -AcGirahimuBase__walkWithSword = .text:0x0000D640; // type:function size:0x24 +vt_0x1E4__17dAcGirahimuBase_cFv = .text:0x0000B460; // type:function size:0x214 +vt_0x1F0__17dAcGirahimuBase_cFv = .text:0x0000B680; // type:function size:0x4 +vt_0x1E8__17dAcGirahimuBase_cFv = .text:0x0000B690; // type:function size:0x114 +ChkAtHit__8cCcD_ObjFv = .text:0x0000B7B0; // type:function size:0x48 +vt_0x1EC__17dAcGirahimuBase_cFv = .text:0x0000B800; // type:function size:0x160 +fn_226_B960__17dAcGirahimuBase_cFf = .text:0x0000B960; // type:function size:0x158 +vt_0x21C__17dAcGirahimuBase_cFb = .text:0x0000BAC0; // type:function size:0x134 +fn_226_BC00__17dAcGirahimuBase_cFv = .text:0x0000BC00; // type:function size:0x200 +setFrame__17dAcGirahimuBase_cFf = .text:0x0000BE00; // type:function size:0x90 +fn_226_BE90__17dAcGirahimuBase_cFPCc = .text:0x0000BE90; // type:function size:0xF4 +sprintf__15SizedString<64>FPCce = .text:0x0000BF90; // type:function size:0xD0 +fn_226_C060__17dAcGirahimuBase_cFv = .text:0x0000C060; // type:function size:0x158 +fn_226_C1C0__17dAcGirahimuBase_cFv = .text:0x0000C1C0; // type:function size:0x160 +fn_226_C320__17dAcGirahimuBase_cFv = .text:0x0000C320; // type:function size:0x238 +fn_226_C560__17dAcGirahimuBase_cFv = .text:0x0000C560; // type:function size:0x134 +fn_226_C6A0__17dAcGirahimuBase_cFv = .text:0x0000C6A0; // type:function size:0xEC +fn_226_C790__17dAcGirahimuBase_cFR8cCcD_Objs = .text:0x0000C790; // type:function size:0x1F4 +vt_0x1F4__17dAcGirahimuBase_cFv = .text:0x0000C990; // type:function size:0x7C +vt_0x1F8__17dAcGirahimuBase_cFv = .text:0x0000CA10; // type:function size:0x224 +fn_226_CC40__17dAcGirahimuBase_cFv = .text:0x0000CC40; // type:function size:0x10 +fn_226_CC50__17dAcGirahimuBase_cFv = .text:0x0000CC50; // type:function size:0x10 +vt_0x220__17dAcGirahimuBase_cFv = .text:0x0000CC60; // type:function size:0x18 +fn_226_CC80__17dAcGirahimuBase_cFv = .text:0x0000CC80; // type:function size:0x28 +vt_0x200__17dAcGirahimuBase_cFv = .text:0x0000CCB0; // type:function size:0x38 +vt_0x204__17dAcGirahimuBase_cFv = .text:0x0000CCF0; // type:function size:0x24 +vt_0x228__17dAcGirahimuBase_cFv = .text:0x0000CD20; // type:function size:0x7C +fn_226_CDA0__17dAcGirahimuBase_cFv = .text:0x0000CDA0; // type:function size:0x58 +fn_226_CE00__17dAcGirahimuBase_cFv = .text:0x0000CE00; // type:function size:0x58 +vt_0x208__17dAcGirahimuBase_cFv = .text:0x0000CE60; // type:function size:0x1D0 +vt_0x20C__17dAcGirahimuBase_cFv = .text:0x0000D030; // type:function size:0x18 +vt_0x22C__17dAcGirahimuBase_cFv = .text:0x0000D050; // type:function size:0x18 +fn_226_D070__17dAcGirahimuBase_cFv = .text:0x0000D070; // type:function size:0x18 +fn_226_D090__17dAcGirahimuBase_cFv = .text:0x0000D090; // type:function size:0x20C +vt_0x214__17dAcGirahimuBase_cFv = .text:0x0000D2A0; // type:function size:0x18 +fn_226_D2C0__17dAcGirahimuBase_cFv = .text:0x0000D2C0; // type:function size:0x4 +fn_226_D2D0__17dAcGirahimuBase_cFv = .text:0x0000D2D0; // type:function size:0x2C8 +fn_226_D5A0__17dAcGirahimuBase_cFv = .text:0x0000D5A0; // type:function size:0x58 +vt_0x88__11dAcEnBase_cFi = .text:0x0000D600; // type:function size:0x8 +vt_0x84__11dAcEnBase_cFv = .text:0x0000D610; // type:function size:0x4 +vt_0x80__11dAcEnBase_cFv = .text:0x0000D620; // type:function size:0x4 +getObjectListEntry__11dAcEnBase_cFv = .text:0x0000D630; // type:function size:0x8 +vt_0x230__17dAcGirahimuBase_cFv = .text:0x0000D640; // type:function size:0x24 executeState__86sStateMgr_c<17dAcGirahimuBase_c,20sStateMethodUsr_FI_c,12sFStateFct_c,13sStateIDChk_c>Fv = .text:0x0000D670; // type:function size:0x10 -fn_226_D680 = .text:0x0000D680; // type:function size:0x4 -fn_226_D690 = .text:0x0000D690; // type:function size:0x4 -fn_226_D6A0 = .text:0x0000D6A0; // type:function size:0x4 -fn_226_D6B0 = .text:0x0000D6B0; // type:function size:0x4 -fn_226_D6C0 = .text:0x0000D6C0; // type:function size:0x4 +ExecCallback_DRAW_XLU__Q34nw4r3g3d15IScnObjCallbackFQ44nw4r3g3d6ScnObj6TimingPQ34nw4r3g3d6ScnObjUlPv = .text:0x0000D680; // type:function size:0x4 +ExecCallback_DRAW_OPA__Q34nw4r3g3d15IScnObjCallbackFQ44nw4r3g3d6ScnObj6TimingPQ34nw4r3g3d6ScnObjUlPv = .text:0x0000D690; // type:function size:0x4 +ExecCallback_CALC_MAT__Q34nw4r3g3d15IScnObjCallbackFQ44nw4r3g3d6ScnObj6TimingPQ34nw4r3g3d6ScnObjUlPv = .text:0x0000D6A0; // type:function size:0x4 +ExecCallback_CALC_WORLD__Q34nw4r3g3d15IScnObjCallbackFQ44nw4r3g3d6ScnObj6TimingPQ34nw4r3g3d6ScnObjUlPv = .text:0x0000D6B0; // type:function size:0x4 +ExecCallback_CALC_VIEW__Q34nw4r3g3d15IScnObjCallbackFQ44nw4r3g3d6ScnObj6TimingPQ34nw4r3g3d6ScnObjUlPv = .text:0x0000D6C0; // type:function size:0x4 build__33sFStateFct_c<17dAcGirahimuBase_c>FRC12sStateIDIf_c = .text:0x0000D6D0; // type:function size:0x60 dispose__33sFStateFct_c<17dAcGirahimuBase_c>FRP10sStateIf_c = .text:0x0000D730; // type:function size:0xC initialize__30sFState_c<17dAcGirahimuBase_c>Fv = .text:0x0000D740; // type:function size:0x1C @@ -257,13 +257,13 @@ executeState__32sFStateID_c<17dAcGirahimuBase_c>CFR17dAcGirahimuBase_c = .text:0 initializeState__32sFStateID_c<17dAcGirahimuBase_c>CFR17dAcGirahimuBase_c = .text:0x0000D860; // type:function size:0x30 __sinit_\d_a_b_girahimu_base_cpp = .text:0x0000D890; // type:function size:0x1698 scope:local __dt__32sFStateID_c<17dAcGirahimuBase_c>Fv = .text:0x0000EF30; // type:function size:0x58 -fn_226_EF90 = .text:0x0000EF90; // type:function size:0x5C -fn_226_EFF0 = .text:0x0000EFF0; // type:function size:0xDC -fn_226_F0D0 = .text:0x0000F0D0; // type:function size:0xE0 +__dt__39sFStateVirtualID_c<17dAcGirahimuBase_c>Fv = .text:0x0000EF90; // type:function size:0x5C +number__39sFStateVirtualID_c<17dAcGirahimuBase_c>CFv = .text:0x0000EFF0; // type:function size:0xDC +superID__39sFStateVirtualID_c<17dAcGirahimuBase_c>CFv = .text:0x0000F0D0; // type:function size:0xE0 isSameName__32sFStateID_c<17dAcGirahimuBase_c>CFPCc = .text:0x0000F1B0; // type:function size:0x88 -fn_226_F240 = .text:0x0000F240; // type:function size:0x8 -fn_226_F250 = .text:0x0000F250; // type:function size:0x8 -fn_226_F260 = .text:0x0000F260; // type:function size:0x8 +@272@__dt__22dCcD_Linked<8dCcD_Cps>Fv = .text:0x0000F240; // type:function size:0x8 +@272@__dt__22dCcD_Linked<8dCcD_Sph>Fv = .text:0x0000F250; // type:function size:0x8 +@272@__dt__22dCcD_Linked<8dCcD_Cyl>Fv = .text:0x0000F260; // type:function size:0x8 _ctors = .ctors:0x00000000; // type:label scope:global _dtors = .dtors:0x00000000; // type:label scope:global __destroy_global_chain_reference = .dtors:0x00000000; // type:object size:0x4 scope:global @@ -343,45 +343,48 @@ lbl_226_data_41C = .data:0x0000041C; // type:object size:0x9 data:string lbl_226_data_428 = .data:0x00000428; // type:object size:0x3C data:4byte jumptable_226_data_464 = .data:0x00000464; // type:object size:0x40 scope:local lbl_226_data_4A4 = .data:0x000004A4; // type:object size:0x38 -AcGirahimuBase__vtable = .data:0x000004DC; // type:object size:0x234 -lbl_226_data_710 = .data:0x00000710; // type:object size:0x70 -lbl_226_data_780 = .data:0x00000780; // type:object size:0x30 -lbl_226_data_7B0 = .data:0x000007B0; // type:object size:0x30 -lbl_226_data_7E0 = .data:0x000007E0; // type:object size:0x18 -lbl_226_data_7F8 = .data:0x000007F8; // type:object size:0x18 -lbl_226_data_810 = .data:0x00000810; // type:object size:0x18 -lbl_226_data_828 = .data:0x00000828; // type:object size:0x70 -lbl_226_data_898 = .data:0x00000898; // type:object size:0x10 -lbl_226_data_8A8 = .data:0x000008A8; // type:object size:0x70 -lbl_226_data_918 = .data:0x00000918; // type:object size:0xC -lbl_226_data_924 = .data:0x00000924; // type:object size:0x85C +__vt__17dAcGirahimuBase_c = .data:0x000004DC; // type:object size:0x234 +__vt__22dCcD_Linked<8dCcD_Cyl> = .data:0x00000710; // type:object size:0x70 +__vt__56sFStateMgr_c<17dAcGirahimuBase_c,20sStateMethodUsr_FI_c> = .data:0x00000780; // type:object size:0x30 +__vt__86sStateMgr_c<17dAcGirahimuBase_c,20sStateMethodUsr_FI_c,12sFStateFct_c,13sStateIDChk_c> = .data:0x000007B0; // type:object size:0x30 +__vt__33sFStateFct_c<17dAcGirahimuBase_c> = .data:0x000007E0; // type:object size:0x14 +__vt__30sFState_c<17dAcGirahimuBase_c> = .data:0x000007F8; // type:object size:0x18 +__vt__Q217dAcGirahimuBase_c10callback_c = .data:0x00000810; // type:object size:0x18 +__vt__22dCcD_Linked<8dCcD_Sph> = .data:0x00000828; // type:object size:0x70 +__vt__16dEnemySwordMdl_c = .data:0x00000898; // type:object size:0xC +__vt__22dCcD_Linked<8dCcD_Cps> = .data:0x000008A8; // type:object size:0x70 +__vt__26dSwordSwingEffectProcMgr_c = .data:0x00000918; // type:object size:0xC +__vt__15dShadowCircle_c = .data:0x00000924; // type:object size:0x85C lbl_226_data_1180 = .data:0x00001180; // type:object size:0x68 lbl_226_data_11E8 = .data:0x000011E8; // type:object size:0x6 data:string lbl_226_data_11F0 = .data:0x000011F0; // type:object size:0x7 data:string __global_destructor_chain = .bss:0x00000000; // type:object size:0x4 scope:global lbl_226_bss_8 = .bss:0x00000008; // type:object size:0xC data:4byte -AcGirahimuBase__STATE_WAIT = .bss:0x00000014; // type:object size:0x40 data:4byte -AcGirahimuBase__STATE_WALK = .bss:0x00000054; // type:object size:0x40 -AcGirahimuBase__STATE_PANCH = .bss:0x00000094; // type:object size:0x40 data:4byte -AcGirahimuBase__STATE_CATCH = .bss:0x000000D4; // type:object size:0x40 -AcGirahimuBase__STATE_CATCH_DAMAGE = .bss:0x00000114; // type:object size:0x40 -AcGirahimuBase__STATE_GET_SWORD = .bss:0x00000154; // type:object size:0x40 data:4byte -AcGirahimuBase__STATE_LINK_SWORD_WAIT = .bss:0x00000194; // type:object size:0x80 data:4byte -AcGirahimuBase__STATE_LINK_SWORD_ATTACK = .bss:0x00000214; // type:object size:0x40 data:4byte -AcGirahimuBase__STATE_RETURN_SWORD = .bss:0x00000254; // type:object size:0x40 data:4byte -AcGirahimuBase__STATE_LINK_SWORD_GUARD_JUST = .bss:0x00000294; // type:object size:0x40 data:4byte -AcGirahimuBase__STATE_SEARCH_SWORD = .bss:0x000002D4; // type:object size:0x40 data:4byte -AcGirahimuBase__STATE_HOME_WARP = .bss:0x00000314; // type:object size:0x80 -AcGirahimuBase__STATE_RELEASE_SWORD = .bss:0x00000394; // type:object size:0x40 data:4byte -AcGirahimuBase__STATE_BACK_STEP = .bss:0x000003D4; // type:object size:0x40 data:4byte -AcGirahimuBase__STATE_ESCAPE = .bss:0x00000414; // type:object size:0x80 data:4byte -AcGirahimuBase__STATE_FRONT_WARP = .bss:0x00000494; // type:object size:0x40 -AcGirahimuBase__STATE_FRONT_ATTACK = .bss:0x000004D4; // type:object size:0x40 data:4byte -AcGirahimuBase__STATE_BACK_WARP = .bss:0x00000514; // type:object size:0x40 -AcGirahimuBase__STATE_BACK_ATTACK = .bss:0x00000554; // type:object size:0x40 data:4byte -AcGirahimuBase__STATE_COUNTER = .bss:0x00000594; // type:object size:0x40 data:4byte -AcGirahimuBase__STATE_RUN = .bss:0x000005D4; // type:object size:0x40 -AcGirahimuBase__STATE_RUN_ATTACK = .bss:0x00000614; // type:object size:0x40 data:4byte -AcGirahimuBase__STATE_BACK_WALK = .bss:0x00000654; // type:object size:0x40 -AcGirahimuBase__STATE_SWORD_DAMAGE = .bss:0x00000694; // type:object size:0x40 data:4byte -AcGirahimuBase__STATE_KNIFE_DAMAGE = .bss:0x000006D4; // type:object size:0x64 +StateID_Wait__17dAcGirahimuBase_c = .bss:0x00000014; // type:object size:0x40 data:4byte +StateID_Walk__17dAcGirahimuBase_c = .bss:0x00000054; // type:object size:0x40 +StateID_Panch__17dAcGirahimuBase_c = .bss:0x00000094; // type:object size:0x40 data:4byte +StateID_Catch__17dAcGirahimuBase_c = .bss:0x000000D4; // type:object size:0x40 +StateID_CatchDamage__17dAcGirahimuBase_c = .bss:0x00000114; // type:object size:0x40 +StateID_GetSword__17dAcGirahimuBase_c = .bss:0x00000154; // type:object size:0x40 data:4byte +StateID_Link_SwordWait__17dAcGirahimuBase_c = .bss:0x00000194; // type:object size:0x40 data:4byte +StateID_Link_SwordWalk__17dAcGirahimuBase_c = .bss:0x000001D4; // type:object size:0x40 data:4byte +StateID_Link_SwordAttack__17dAcGirahimuBase_c = .bss:0x00000214; // type:object size:0x40 data:4byte +StateID_ReturnSword__17dAcGirahimuBase_c = .bss:0x00000254; // type:object size:0x40 data:4byte +StateID_LinkSwordGuardJust__17dAcGirahimuBase_c = .bss:0x00000294; // type:object size:0x40 data:4byte +StateID_SearchSword__17dAcGirahimuBase_c = .bss:0x000002D4; // type:object size:0x40 data:4byte +StateID_HomeWarp__17dAcGirahimuBase_c = .bss:0x00000314; // type:object size:0x40 +StateID_PickUpSword__17dAcGirahimuBase_c = .bss:0x00000354; // type:object size:0x40 +StateID_ReleaseSword__17dAcGirahimuBase_c = .bss:0x00000394; // type:object size:0x40 data:4byte +StateID_BackStep__17dAcGirahimuBase_c = .bss:0x000003D4; // type:object size:0x40 data:4byte +StateID_Escape__17dAcGirahimuBase_c = .bss:0x00000414; // type:object size:0x40 data:4byte +StateID_EscapeBack__17dAcGirahimuBase_c = .bss:0x00000454; // type:object size:0x40 data:4byte +StateID_FrontWarp__17dAcGirahimuBase_c = .bss:0x00000494; // type:object size:0x40 +StateID_FrontAttack__17dAcGirahimuBase_c = .bss:0x000004D4; // type:object size:0x40 data:4byte +StateID_BackWarp__17dAcGirahimuBase_c = .bss:0x00000514; // type:object size:0x40 +StateID_BackAttack__17dAcGirahimuBase_c = .bss:0x00000554; // type:object size:0x40 data:4byte +StateID_Counter__17dAcGirahimuBase_c = .bss:0x00000594; // type:object size:0x40 data:4byte +StateID_Run__17dAcGirahimuBase_c = .bss:0x000005D4; // type:object size:0x40 +StateID_RunAttack__17dAcGirahimuBase_c = .bss:0x00000614; // type:object size:0x40 data:4byte +StateID_BackWalk__17dAcGirahimuBase_c = .bss:0x00000654; // type:object size:0x40 +StateID_G_SwordDamage__17dAcGirahimuBase_c = .bss:0x00000694; // type:object size:0x40 data:4byte +StateID_KnifeDamage__17dAcGirahimuBase_c = .bss:0x000006D4; // type:object size:0x64 diff --git a/config/SOUE01/symbols.txt b/config/SOUE01/symbols.txt index bb9acc496..6edbaf8ea 100644 --- a/config/SOUE01/symbols.txt +++ b/config/SOUE01/symbols.txt @@ -4282,7 +4282,7 @@ fn_800C3E90 = .text:0x800C3E90; // type:function size:0x24 checkFinished__14dFlowMgrBase_cFv = .text:0x800C3EC0; // type:function size:0x20C vt_0x34__11dFlowBase_cFv = .text:0x800C40D0; // type:function size:0x4 fn_800C40E0 = .text:0x800C40E0; // type:function size:0xC -fn_800C40F0 = .text:0x800C40F0; // type:function size:0xB4 +fn_800C40F0__14dFlowMgrBase_cFv = .text:0x800C40F0; // type:function size:0xB4 fn_800C41B0 = .text:0x800C41B0; // type:function size:0xBC fn_800C4270 = .text:0x800C4270; // type:function size:0x54 fn_800C42D0 = .text:0x800C42D0; // type:function size:0xF8 @@ -15770,7 +15770,7 @@ fn_8029FE90 = .text:0x8029FE90; // type:function size:0x21C fn_802A00B0 = .text:0x802A00B0; // type:function size:0x10 fn_802A00C0 = .text:0x802A00C0; // type:function size:0x10 fn_802A00D0 = .text:0x802A00D0; // type:function size:0x40 -show__17dLytBossCaption_cFPCci = .text:0x802A0110; // type:function size:0x158 +show__17dLytBossCaption_cFPCcPCc = .text:0x802A0110; // type:function size:0x158 fn_802A0270 = .text:0x802A0270; // type:function size:0x9C fn_802A0310 = .text:0x802A0310; // type:function size:0x9C fn_802A03B0 = .text:0x802A03B0; // type:function size:0x4C @@ -18763,13 +18763,13 @@ ClrTgHit__8cCcD_ObjFv = .text:0x80328C00; // type:function size:0x4C ClrCoHit__8cCcD_ObjFv = .text:0x80328C50; // type:function size:0x4C GetAtHitPos__8cCcD_ObjFv = .text:0x80328CA0; // type:function size:0x8 GetAtHitPos__8cCcD_ObjCFv = .text:0x80328CB0; // type:function size:0x8 -GetAtFlag0x2__8cCcD_ObjCFv = .text:0x80328CC0; // type:function size:0xC -GetAtFlag0x4__8cCcD_ObjCFv = .text:0x80328CD0; // type:function size:0xC -GetAtFlag0x8__8cCcD_ObjCFv = .text:0x80328CE0; // type:function size:0xC +ChkAtShieldHit__8cCcD_ObjCFv = .text:0x80328CC0; // type:function size:0xC +ChkAtCutHit__8cCcD_ObjCFv = .text:0x80328CD0; // type:function size:0xC +ChkAtShieldReflect__8cCcD_ObjCFv = .text:0x80328CE0; // type:function size:0xC GetTgHitPos__8cCcD_ObjFv = .text:0x80328CF0; // type:function size:0x8 GetTgHitPos__8cCcD_ObjCFv = .text:0x80328D00; // type:function size:0x8 -GetTgFlag0x4__8cCcD_ObjCFv = .text:0x80328D10; // type:function size:0xC -GetTgFlag0x8__8cCcD_ObjCFv = .text:0x80328D20; // type:function size:0xC +ChkTgCutHit__8cCcD_ObjCFv = .text:0x80328D10; // type:function size:0xC +ChkTgShieldReflect__8cCcD_ObjCFv = .text:0x80328D20; // type:function size:0xC GetGObjInfo__8cCcD_ObjFv = .text:0x80328D30; // type:function size:0x4 ChkAtClawshot__8cCcD_ObjCFv = .text:0x80328D40; // type:function size:0xC ChkAtClawshotDebug__8cCcD_ObjCFv = .text:0x80328D50; // type:function size:0x8 @@ -30049,7 +30049,7 @@ __vt__25dNpcMdlCallbackYXZFixed_c = .data:0x80501EC8; // type:object size:0x24 __vt__20dNpcMdlCallbackYXZ_c = .data:0x80501EEC; // type:object size:0x24 __vt__20dNpcMdlCallbackAng_c = .data:0x80501F10; // type:object size:0x24 __vt__21dNpcMdlCallbackBase_c = .data:0x80501F34; // type:object size:0x1C -lbl_80501F50 = .data:0x80501F50; // type:object size:0x20 +__vt__20dNpcMdlCallbackEye_c = .data:0x80501F50; // type:object size:0x20 lbl_80501F70 = .data:0x80501F70; // type:object size:0x78 __vt__29sFStateVirtualID_c<8dAcNpc_c> = .data:0x80501FE8; // type:object size:0x34 __vt__22sFStateID_c<8dAcNpc_c> = .data:0x8050201C; // type:object size:0x34 diff --git a/include/d/a/b/d_a_b_girahimu.h b/include/d/a/b/d_a_b_girahimu.h index 07c3a2728..a6c1308a4 100644 --- a/include/d/a/b/d_a_b_girahimu.h +++ b/include/d/a/b/d_a_b_girahimu.h @@ -1,16 +1,44 @@ #ifndef D_A_B_GIRAHIMU_H #define D_A_B_GIRAHIMU_H -#include "d/a/e/d_a_en_base.h" +#include "d/a/b/d_a_b_girahimu_base.h" +#include "d/a/d_a_base.h" #include "s/s_State.hpp" -class dAcGirahimu_c : public dAcEnBase_c { +class dAcObjGirahimuKnife_c; + +class dAcGirahimu_c : public dAcGirahimuBase_c { public: - dAcGirahimu_c() : mStateMgr(*this) {} + dAcGirahimu_c() : field_0x220C(false) {} virtual ~dAcGirahimu_c() {} + virtual int doDelete() override; + virtual bool createHeap() override; + virtual int actorCreate() override; + virtual int actorExecute() override; + + STATE_VIRTUAL_OVERRIDE_FUNC_DECLARE(dAcGirahimu_c, dAcGirahimuBase_c, CatchDamage); + STATE_VIRTUAL_OVERRIDE_FUNC_DECLARE(dAcGirahimu_c, dAcGirahimuBase_c, G_SwordDamage); + STATE_FUNC_DECLARE(dAcGirahimu_c, G_SwordDemo); + STATE_FUNC_DECLARE(dAcGirahimu_c, G_SwordWait); + STATE_FUNC_DECLARE(dAcGirahimu_c, G_SwordPiyori); + STATE_FUNC_DECLARE(dAcGirahimu_c, Knife); + STATE_FUNC_DECLARE(dAcGirahimu_c, KnifeAttack); + STATE_FUNC_DECLARE(dAcGirahimu_c, Death); + STATE_FUNC_DECLARE(dAcGirahimu_c, DeathMiniGame); + + virtual void vt_0x1DC() override; + virtual bool vt_0x218() override; + virtual void vt_0x220() override; + + void determineNextMove(); + void fn_227_1EA0(); + void fn_227_3DB0(); + void fn_227_3DF0(); + private: - /* 0x??? */ STATE_MGR_DECLARE(dAcGirahimu_c); + /* 0x220C */ bool field_0x220C; + /* 0x2210 */ dAcRef_c mKnives[5]; }; #endif diff --git a/include/d/a/b/d_a_b_girahimu2.h b/include/d/a/b/d_a_b_girahimu2.h index a825633c5..f1be49d4d 100644 --- a/include/d/a/b/d_a_b_girahimu2.h +++ b/include/d/a/b/d_a_b_girahimu2.h @@ -1,22 +1,95 @@ #ifndef D_A_B_GIRAHIMU2_H #define D_A_B_GIRAHIMU2_H -#include "d/a/e/d_a_en_base.h" +#include "common.h" +#include "d/a/b/d_a_b_girahimu_base.h" +#include "d/a/d_a_base.h" +#include "m/m3d/m_fanm.h" #include "s/s_State.hpp" -class dAcGirahimu2_c : public dAcEnBase_c { +class dAcObjGirahimuKnife_c; + +class dAcGirahimu2_c : public dAcGirahimuBase_c { public: - dAcGirahimu2_c() : mStateMgr(*this) {} + dAcGirahimu2_c() : field_0x221E(false) {} virtual ~dAcGirahimu2_c() {} - void setField_0xD52(u16 val) { - field_0xD52 = val; + virtual int doDelete() override; + virtual bool createHeap() override; + virtual int actorCreate() override; + virtual int actorExecute() override; + + STATE_VIRTUAL_OVERRIDE_FUNC_DECLARE(dAcGirahimu2_c, dAcGirahimuBase_c, Walk); + STATE_VIRTUAL_OVERRIDE_FUNC_DECLARE(dAcGirahimu2_c, dAcGirahimuBase_c, Catch); + STATE_VIRTUAL_OVERRIDE_FUNC_DECLARE(dAcGirahimu2_c, dAcGirahimuBase_c, CatchDamage); + STATE_VIRTUAL_OVERRIDE_FUNC_DECLARE(dAcGirahimu2_c, dAcGirahimuBase_c, Counter); + STATE_FUNC_DECLARE(dAcGirahimu2_c, G_SwordDamage); // Non virtual override?? (still virtual) + + STATE_FUNC_DECLARE(dAcGirahimu2_c, CreateSpinKnife); + STATE_FUNC_DECLARE(dAcGirahimu2_c, WaitKnifeAttack); + STATE_FUNC_DECLARE(dAcGirahimu2_c, KnifeAttack); + STATE_FUNC_DECLARE(dAcGirahimu2_c, KnifePreAttack); + STATE_FUNC_DECLARE(dAcGirahimu2_c, G_SwordDemo); + STATE_FUNC_DECLARE(dAcGirahimu2_c, G_SwordWait); + STATE_FUNC_DECLARE(dAcGirahimu2_c, G_SwordPiyori); + STATE_FUNC_DECLARE(dAcGirahimu2_c, Death); + STATE_FUNC_DECLARE(dAcGirahimu2_c, DeathMiniGame); + STATE_FUNC_DECLARE(dAcGirahimu2_c, UpWarp); + STATE_FUNC_DECLARE(dAcGirahimu2_c, UpAttack); + STATE_FUNC_DECLARE(dAcGirahimu2_c, CreateKnife); + STATE_FUNC_DECLARE(dAcGirahimu2_c, ComeOn); + STATE_FUNC_DECLARE(dAcGirahimu2_c, ComeOnGuard); + STATE_FUNC_DECLARE(dAcGirahimu2_c, GuardJustCounter); + STATE_FUNC_DECLARE(dAcGirahimu2_c, TwoSwordAttack); + STATE_FUNC_DECLARE(dAcGirahimu2_c, HitAction); + + STATE_MGR_DEFINE_UTIL_ISSTATE(dAcGirahimu2_c); + using dAcGirahimuBase_c::isState; + + virtual void vt_0x1DC() override; + virtual void vt_0x1F4() override; + virtual void vt_0x1F8() override; + virtual void vt_0x1FC() override; + virtual void vt_0x200() override; + virtual void vt_0x204() override; + virtual void vt_0x20C() override; + virtual bool vt_0x210() override; + virtual void vt_0x214() override; + virtual bool vt_0x218() override; + virtual void vt_0x220() override; + virtual void vt_0x224() override { + setAnm("PoseLR", ANM_PoseLR, nullptr, m3d::PLAY_MODE_4, 5.0f, 1.0f); } + virtual void vt_0x228() override; + virtual void vt_0x22C() override; + virtual void vt_0x230() override; + virtual void vt_0x234(); -private: - /* 0x??? */ STATE_MGR_DECLARE(dAcGirahimu2_c); + void fn_228_4550(int idxStart, int idxEnd); + void fn_228_47F0(bool); + void fn_228_4A30(); + void fn_228_4C20(); + bool fn_228_4CD0(s32 cutDir); + bool fn_228_5110(); + void fn_228_5400(); + void fn_228_5740(); + bool fn_228_5770(s32 cutDir); + bool fn_228_5E90(); + bool fn_228_5EC0(); + void fn_228_80A0(); + void fn_228_80E0(); + void fn_228_82C0(); - /* 0xD52 */ u16 field_0xD52; +private: + /* 0x220C */ u8 field_0x220C; + /* 0x2210 */ s32 field_0x2210; + /* 0x2214 */ s32 field_0x2214; + /* 0x2218 */ s32 field_0x2218; + /* 0x221C */ bool field_0x221C; + /* 0x221D */ bool field_0x221D; + /* 0x221E */ bool field_0x221E; + /* 0x2220 */ s16 field_0x2220; + /* 0x2224 */ dAcRef_c mKnives[15]; }; #endif diff --git a/include/d/a/b/d_a_b_girahimu_base.h b/include/d/a/b/d_a_b_girahimu_base.h index 1f6a97291..1a4849ca1 100644 --- a/include/d/a/b/d_a_b_girahimu_base.h +++ b/include/d/a/b/d_a_b_girahimu_base.h @@ -1,16 +1,549 @@ #ifndef D_A_B_GIRAHIMU_BASE_H #define D_A_B_GIRAHIMU_BASE_H +#include "common.h" +#include "d/a/d_a_base.h" #include "d/a/e/d_a_en_base.h" +#include "d/a/npc/d_a_npc.h" +#include "d/a/obj/d_a_obj_base.h" +#include "d/col/bg/d_bg_s_acch.h" +#include "d/col/c/c_cc_d.h" +#include "d/col/cc/d_cc_d.h" +#include "d/d_cc.h" +#include "d/d_message.h" +#include "d/d_shadow.h" +#include "d/snd/d_snd_source_if.h" +#include "m/m3d/m_anmchr.h" +#include "m/m3d/m_anmchrblend.h" +#include "m/m3d/m_anmtexpat.h" +#include "m/m3d/m_fanm.h" +#include "m/m3d/m_mdl.h" +#include "m/m3d/m_smdl.h" +#include "m/m_angle.h" +#include "m/m_mtx.h" +#include "m/m_quat.h" +#include "m/m_vec.h" +#include "nw4r/g3d/g3d_calcworld.h" +#include "nw4r/g3d/res/g3d_resanmchr.h" +#include "nw4r/g3d/res/g3d_resfile.h" +#include "nw4r/g3d/res/g3d_resmdl.h" #include "s/s_State.hpp" +#include "toBeSorted/d_emitter.h" +#include "toBeSorted/d_enemy_sword_mdl.h" +#include "toBeSorted/d_flow_mgr.h" +class dAcObjGirahimuSwordLink_c; + +// Needed for ordering +struct LinkSph { + dCcD_Linked mSph; +}; class dAcGirahimuBase_c : public dAcEnBase_c { public: - dAcGirahimuBase_c() : mStateMgr(*this) {} - virtual ~dAcGirahimuBase_c() {} + friend class dAcObjGirahimuSwordLink_c; + friend class dAcObjGirahimuKnife_c; + + dAcGirahimuBase_c() : mStateMgr(*this), mFlowMgr(&mFlow) {} + virtual ~dAcGirahimuBase_c(); + + class callback_c : public m3d::callback_c { + public: + friend class dAcGirahimuBase_c; + + callback_c() {} + virtual ~callback_c() {} + virtual void timingB(u32, nw4r::g3d::WorldMtxManip *, nw4r::g3d::ResMdl) override; + + void fn_226_DC0(mMtx_c &, const mAng3_c &, const mAng); + void fn_226_E80(); + void fn_226_1160(); + void init(dAcGirahimuBase_c *pGhirahim); + void fn_226_1580(u32, nw4r::g3d::WorldMtxManip *, nw4r::g3d::ResMdl); + void fn_226_1B60(mVec3_c &); + void fn_226_1DD0(); + void fn_226_24E0(); + void fn_226_24F0(); + void fn_226_2FD0(); + void fn_226_3080(); + void fn_226_3130(); + void fn_226_3150(mMtx_c &); + + /* 0x004 */ mQuat_c field_0x004; + /* 0x014 */ f32 field_0x014; + /* 0x018 */ u16 mNodeID_ShoulderR; + /* 0x01A */ u16 mNodeID_ShoulderL; + /* 0x01C */ u16 mNodeID_Hip; + /* 0x01E */ u16 mNodeID_ArmR; + /* 0x020 */ u16 mNodeID_ArmL; + /* 0x022 */ u16 mNodeID_ElbowR; + /* 0x024 */ u16 mNodeID_ElbowL; + /* 0x026 */ u16 mNodeID_HandR; + /* 0x028 */ u16 mNodeID_Head; + /* 0x02A */ u16 mNodeID_Neck; + /* 0x02C */ u16 mNodeID_Hair1; + /* 0x02E */ u16 mNodeID_Hair2; + /* 0x030 */ u16 mNodeID_Hair3; + /* 0x032 */ u16 mNodeID_Hair4; + /* 0x034 */ u16 mNodeID_Spine1; + /* 0x036 */ u16 mNodeID_Spine2; + /* 0x038 */ u16 mNodeID_BrowL; + /* 0x03A */ u16 mNodeID_BrowR; + /* 0x03C */ u16 mNodeID_Chin; + /* 0x03E */ u16 mNodeID_MouthL; + /* 0x040 */ u16 mNodeID_MouthR; + /* 0x042 */ u16 mNodeID_Upperjaw; + /* 0x044 */ u16 mNodeID_SklRoot; + /* 0x046 */ u16 mNodeID_LegR; + /* 0x048 */ u16 mNodeID_LegL; + /* 0x04A */ u16 mNodeID_KneeR; + /* 0x04C */ u16 mNodeID_KneeL; + /* 0x04E */ bool field_0x04E; + /* 0x04F */ bool field_0x04F; + /* 0x050 */ bool field_0x050; + /* 0x052 */ mAng field_0x052; + /* 0x054 */ mAng field_0x054; + /* 0x056 */ mAng field_0x056; + /* 0x058 */ mAng field_0x058; + /* 0x05A */ mAng field_0x05A; + /* 0x05C */ mAng field_0x05C; + /* 0x05E */ mAng field_0x05E; + /* 0x060 */ mAng field_0x060; + /* 0x062 */ mAng3_c field_0x062; + /* 0x068 */ mAng field_0x068; + /* 0x06A */ mAng field_0x06A; + /* 0x06C */ mAng field_0x06C; + /* 0x06E */ mAng field_0x06E; + /* 0x070 */ mVec3_c field_0x070; + /* 0x07C */ mAng field_0x07C; + /* 0x07E */ mAng field_0x07E; + /* 0x080 */ mAng field_0x080; + /* 0x082 */ mAng field_0x082; + /* 0x084 */ mAng field_0x084; + + /* 0x086*/ u8 _0x086[0x088 - 0x086]; + + /* 0x088 */ bool field_0x088; + /* 0x08C */ mVec3_c field_0x08C; // Head Translation + /* 0x098 */ f32 field_0x098; + + /* 0x09C*/ u8 _0x09C[0x0A8 - 0x09C]; + + /* 0x0A8 */ mVec3_c field_0x0A8; + /* 0x0B4 */ mAng field_0x0B4; + + /* 0x0B6*/ u8 _0x0B6[0x0E8 - 0x0B6]; + + /* 0x0E8 */ mMtx_c field_0x0E8; // ElbowR Transform + /* 0x118 */ mQuat_c field_0x118; // EbowR Rotation + /* 0x128 */ mVec3_c field_0x128; + + /* 0x134*/ u8 _0x134[0x164 - 0x134]; + + /* 0x164 */ mVec3_c field_0x164; // ElbowR Translation + + /* 0x170*/ u8 _0x170[0x17C - 0x170]; + + /* 0x17C */ mVec3_c field_0x17C; // ElbowR Scale + /* 0x18C */ f32 field_0x188; // ElbowR distance to HandR? + /* 0x18C */ mVec3_c field_0x18C; // ElbowR Translation from ArmR? + /* 0x198 */ bool field_0x198; // ElbowR first Retrieve + /* 0x19C */ mMtx_c field_0x19C; // ArmR Transform + /* 0x1CC */ mQuat_c field_0x1CC; // ArmR Rotation + + /* 0x1DC*/ u8 _0x1DC[0x1E8 - 0x1DC]; + + /* 0x1E8 */ bool field_0x1E8; // ArmR first Retrieve + + /* 0x1E9*/ u8 _0x1E9[0x21C - 0x1E9]; + + /* 0x21C */ mVec3_c field_0x21C; // ArmR Translation + /* 0x228*/ mVec3_c field_0x228; // ArmR Scale + /* 0x234 */ f32 field_0x234; // ArmR Distance to Elbow? + /* 0x238 */ mAng field_0x238; + /* 0x23A */ mAng field_0x23A; + /* 0x23C */ mAng field_0x23C; + /* 0x23E */ mAng field_0x23E; + /* 0x240 */ mAng field_0x240; + /* 0x242 */ mAng field_0x242; + /* 0x244 */ bool field_0x244; + /* 0x244 */ bool field_0x245; + + /* 0x246*/ u8 _0x246[0x254 - 0x246]; + + /* 0x254 */ mVec3_c field_0x254; + /* 0x260 */ mVec3_c field_0x260; // HandR Translation + /* 0x26C */ mVec3_c field_0x26C; + /* 0x278 */ mMtx_c field_0x278; // HandR Transform + /* 0x2A8 */ mQuat_c field_0x2A8; // HandR Rotation + /* 0x2B8 */ bool field_0x2B8; // HandR First Retrieve + /* 0x2BA */ mAng field_0x2BA; // HandR Pitch + /* 0x2BC */ s16 field_0x2BC; + /* 0x2C0 */ nw4r::g3d::WorldMtxManip *field_0x2C0; + /* 0x2C4 */ nw4r::g3d::WorldMtxManip *field_0x2C4; + /* 0x2C8 */ dAcGirahimuBase_c *mpGhirahim; + /* 0x2CC */ f32 field_0x2CC; + /* 0x2D0 */ f32 field_0x2D0; // slerp interpolation + /* 0x2D4 */ f32 field_0x2D4; + /* 0x2D8 */ f32 field_0x2D8; + /* 0x2DC */ f32 field_0x2DC; + /* 0x2E0 */ mVec3_c field_0x2E0; + /* 0x2EC */ mVec3_c field_0x2EC; + }; + + enum AnmID_e { + ANM_NONE = -1, + ANM_WaitA = 0x00, + ANM_Walk = 0x01, + ANM_Catch = 0x02, + ANM_CatchLoop = 0x03, + ANM_Damage = 0x04, + ANM_GetSword = 0x05, + ANM_WaitBtB = 0x06, + ANM_AttackLSwordA = 0x07, + ANM_AttackLSwordB = 0x08, + ANM_GuardLSwordA = 0x09, + ANM_GuardLSwordB = 0x0A, + ANM_MovePose = 0x0B, + + ANM_PickUp02 = 0x0D, + ANM_PullCenter = 0x0E, + ANM_PullUp = 0x0F, + ANM_FreeCenter = 0x10, + ANM_FreeUp = 0x11, + ANM_LookSword = 0x12, + ANM_SwordAppear = 0x13, + ANM_WaitBtC = 0x14, + ANM_AttackPoseL = 0x15, + ANM_AttackLRun = 0x16, + ANM_AttackSwordL = 0x17, + ANM_AttackPoseR = 0x18, + ANM_AttackRRun = 0x19, + ANM_AttackSwordR = 0x1A, + ANM_PoseL = 0x1B, + ANM_PoseR = 0x1C, + ANM_PoseC = 0x1D, + ANM_PoseC2 = 0x1E, + ANM_PoseLR = 0x1F, + ANM_PoseLU = 0x20, + ANM_PoseRU = 0x21, + ANM_PoseUD = 0x22, + ANM_PoseLAttack = 0x23, + ANM_PoseRAttack = 0x24, + ANM_PoseCAttack = 0x25, + ANM_PoseCAttack2 = 0x26, + ANM_PoseLRAttack = 0x27, + ANM_PoseUDAttack = 0x28, + ANM_PoseLUAttack = 0x29, + ANM_PoseRUAttack = 0x2A, + + ANM_DamageHit = 0x2C, + ANM_DamageWait = 0x2D, + + ANM_Call = 0x30, + + ANM_AttackKnife = 0x32, + ANM_FaceTongue = 0x33, + ANM_FaceSmaile = 0x34, + ANM_LSwordReturn = 0x35, + ANM_TurnL = 0x36, + ANM_TurnR = 0x37, + ANM_AttackBinta = 0x38, + ANM_StepStart = 0x39, + ANM_StepLoop = 0x3A, + ANM_StepEnd = 0x3B, + ANM_PoseUpper = 0x3C, + ANM_PoseFree = 0x3D, + ANM_PoseUpperAttack = 0x3E, + ANM_GuardTwoSword = 0x3F, + ANM_EndA = 0x40, + ANM_EndBLoop = 0x41, + ANM_EndC = 0x42, + ANM_EndDLoop = 0x43, + ANM_EndE = 0x44, + ANM_KnifeDamage = 0x45, + }; + + enum AnmIdx_e { + ANMIDX_Body = 0, + ANMIDX_Hip = 1, + ANMIDX_Head = 2, + ANMIDX_ShoulderR = 3, + ANMIDX_ShoulderL = 4, + }; + + virtual int doDelete() override; + virtual int preExecute() override; + virtual int draw() override; + virtual bool createHeap() override; + virtual int actorPostCreate() override; + + /* vt 0x08C-0x094 */ STATE_VIRTUAL_FUNC_DECLARE(dAcGirahimuBase_c, Wait); + /* vt 0x098-0x0A0 */ STATE_VIRTUAL_FUNC_DECLARE(dAcGirahimuBase_c, Walk); + /* vt 0x0A4-0x0AC */ STATE_VIRTUAL_FUNC_DECLARE(dAcGirahimuBase_c, Panch); + /* vt 0x0B0-0x0B8 */ STATE_VIRTUAL_FUNC_DECLARE(dAcGirahimuBase_c, Catch); + /* vt 0x0BC-0x0C4 */ STATE_VIRTUAL_FUNC_DECLARE(dAcGirahimuBase_c, CatchDamage); + /* vt 0x0C8-0x0D0 */ STATE_VIRTUAL_FUNC_DECLARE(dAcGirahimuBase_c, GetSword); + /* vt 0x0D4-0x0DC */ STATE_VIRTUAL_FUNC_DECLARE(dAcGirahimuBase_c, Link_SwordWait); + /* vt 0x0E0-0x0E8 */ STATE_VIRTUAL_FUNC_DECLARE(dAcGirahimuBase_c, Link_SwordWalk); + /* vt 0x0EC-0x0F4 */ STATE_VIRTUAL_FUNC_DECLARE(dAcGirahimuBase_c, Link_SwordAttack); + /* vt 0x0F8-0x100 */ STATE_VIRTUAL_FUNC_DECLARE(dAcGirahimuBase_c, ReturnSword); + /* vt 0x104-0x10C */ STATE_VIRTUAL_FUNC_DECLARE(dAcGirahimuBase_c, LinkSwordGuardJust); + /* vt 0x110-0x118 */ STATE_VIRTUAL_FUNC_DECLARE(dAcGirahimuBase_c, SearchSword); + /* vt 0x11C-0x124 */ STATE_VIRTUAL_FUNC_DECLARE(dAcGirahimuBase_c, HomeWarp); + /* vt 0x128-0x130 */ STATE_VIRTUAL_FUNC_DECLARE(dAcGirahimuBase_c, PickUpSword); + /* vt 0x134-0x13C */ STATE_VIRTUAL_FUNC_DECLARE(dAcGirahimuBase_c, ReleaseSword); + /* vt 0x140-0x148 */ STATE_VIRTUAL_FUNC_DECLARE(dAcGirahimuBase_c, BackStep); + /* vt 0x14C-0x154 */ STATE_VIRTUAL_FUNC_DECLARE(dAcGirahimuBase_c, Escape); + /* vt 0x158-0x160 */ STATE_VIRTUAL_FUNC_DECLARE(dAcGirahimuBase_c, EscapeBack); + /* vt 0x164-0x16C */ STATE_VIRTUAL_FUNC_DECLARE(dAcGirahimuBase_c, FrontWarp); + /* vt 0x170-0x178 */ STATE_VIRTUAL_FUNC_DECLARE(dAcGirahimuBase_c, FrontAttack); + /* vt 0x17C-0x184 */ STATE_VIRTUAL_FUNC_DECLARE(dAcGirahimuBase_c, BackWarp); + /* vt 0x188-0x190 */ STATE_VIRTUAL_FUNC_DECLARE(dAcGirahimuBase_c, BackAttack); + /* vt 0x194-0x19C */ STATE_VIRTUAL_FUNC_DECLARE(dAcGirahimuBase_c, Counter); + /* vt 0x1A0-0x1A8 */ STATE_VIRTUAL_FUNC_DECLARE(dAcGirahimuBase_c, Run); + /* vt 0x1AC-0x1B4 */ STATE_VIRTUAL_FUNC_DECLARE(dAcGirahimuBase_c, RunAttack); + /* vt 0x1B8-0x1C0 */ STATE_VIRTUAL_FUNC_DECLARE(dAcGirahimuBase_c, BackWalk); + /* vt 0x1C4-0x1CC */ STATE_VIRTUAL_FUNC_DECLARE(dAcGirahimuBase_c, G_SwordDamage); + /* vt 0x1D0-0x1D8 */ STATE_VIRTUAL_FUNC_DECLARE(dAcGirahimuBase_c, KnifeDamage); + + STATE_MGR_DEFINE_UTIL_CHANGESTATE(dAcGirahimuBase_c); + STATE_MGR_DEFINE_UTIL_ISSTATE(dAcGirahimuBase_c); + STATE_MGR_DEFINE_UTIL_EXECUTESTATE(dAcGirahimuBase_c); + STATE_MGR_DEFINE_UTIL_GETSTATEID(dAcGirahimuBase_c); + + /* vt 0x1DC */ virtual void vt_0x1DC(); + /* vt 0x1E0 */ virtual bool vt_0x1E0(); + /* vt 0x1E4 */ virtual void vt_0x1E4(); + /* vt 0x1E8 */ virtual void vt_0x1E8(); + /* vt 0x1EC */ virtual void vt_0x1EC(); + /* vt 0x1F0 */ virtual void vt_0x1F0(); + /* vt 0x1F4 */ virtual void vt_0x1F4(); + /* vt 0x1F8 */ virtual void vt_0x1F8(); + /* vt 0x1FC */ virtual void vt_0x1FC() {} + /* vt 0x200 */ virtual void vt_0x200(); + /* vt 0x204 */ virtual void vt_0x204(); + /* vt 0x208 */ virtual bool vt_0x208(); + /* vt 0x20C */ virtual void vt_0x20C(); + /* vt 0x210 */ virtual bool vt_0x210() { + return 0; + } + /* vt 0x214 */ virtual void vt_0x214(); + /* vt 0x218 */ virtual bool vt_0x218() { + return false; + } + /* vt 0x21C */ virtual bool vt_0x21C(bool); + /* vt 0x220 */ virtual void vt_0x220(); + /* vt 0x224 */ virtual void vt_0x224() { + setAnm("PoseC", ANM_PoseC2, nullptr, m3d::PLAY_MODE_4, 5.0f, 1.0f); + } + /* vt 0x228 */ virtual void vt_0x228(); + /* vt 0x22C */ virtual void vt_0x22C(); + /* vt 0x230 */ virtual void vt_0x230() { + setAnmHip("WalkBt", ANM_Walk, m3d::PLAY_MODE_4, 5.0f, 1.0f); + } + + nw4r::g3d::ResAnmChr GetResAnmChr(const char *name) const { + nw4r::g3d::ResAnmChr res = mResAnmChr1.GetResAnmChr(name); + if (!res.IsValid()) { + res = mResAnmChr0.GetResAnmChr(name); + } + + return res; + } + + void setAnmRate(f32 rate) { + for (int i = 0; i < 5; ++i) { + mAnmChrs[i].setRate(rate); + } + } + + void initNodeData(); + void createCollision(); + + static s32 getPlayerSwordType(); + + // Set Anm Functions + bool + setAnm(const char *anmName, s32 anmId, const char *anmNameShoulderL, m3d::playMode_e playMode, f32 f0, f32 rate); + bool setAnm( + const char *anmName, s32 anmId, const char *anmNameHip, s32 anmIdHip, const char *anmNameShoulderL, + s32 anmIdShoulderL, m3d::playMode_e playMode, f32 f0, f32 rate + ); + bool setAnm(const char *anmName, s32 anmId, m3d::playMode_e playMode, f32 f0, f32 rate); + bool setAnmBody(const char *anmName, s32 anmId, m3d::playMode_e playMode, f32 f0, f32 rate); + bool setAnmHip(const char *anmName, s32 anmId, m3d::playMode_e playMode, f32 f0, f32 rate); + bool setAnmShoulderR(const char *anmName, s32 anmId, m3d::playMode_e playMode, f32 f0, f32 rate); + bool setAnmShoulderL(const char *anmName, s32 anmId, m3d::playMode_e playMode, f32 f0, f32 rate); + bool setAnmHead(const char *anmName, s32 anmId, m3d::playMode_e playMode, f32 f0, f32 rate); + + void bindAnmHead(); + void bindAnmBody(); + void bindAnmHip(); + void bindAnmShoulderR(); + void bindAnmShoulderL(); + + void fn_226_9620(); + void fn_226_9690(); // Head/Hair and Attention related + void fn_256_99F0(); + void fn_256_9C90(); + bool fn_226_A070(mAng); + bool fn_226_A120(mAng, f32); + bool fn_226_A280(mAng); + bool turn(mAng); + void fn_226_A400(cCcD_Obj *pObj); + bool fn_226_A570(); + mVec3_c getPlayerHeadOffset(); + void executeEarringTransform(); + void calcJumpMovement(f32, f32); + void fn_226_ADC0(cCcD_Obj *pObj); + void setSwordLinkTransform(); + void setSwordLinkTransformPlayer(); + void fn_226_AFB0(); + + void fn_226_B960(f32); + void fn_226_BC00(); + void setFrame(f32); + + bool fn_226_BE90(const char *soundName); + void fn_226_C060(); + void fn_226_C1C0(); + void fn_226_C320(); + void fn_226_C560(); + void fn_226_C6A0(); + void fn_226_C790(cCcD_Obj &cc, s16 anm); + void fn_226_CC40(); + void fn_226_CC50(); + bool fn_226_CC80(); + void fn_226_CDA0(); + void fn_226_CE00(); + + void fn_226_D070(); + void fn_226_D090(); + void fn_226_D2C0(); + void fn_226_D2D0(); + void fn_226_D5A0(); + +protected: + /* 0x0378 */ STATE_MGR_DECLARE(dAcGirahimuBase_c); + /* 0x03B4 */ m3d::mdl_c mMdlBody; + /* 0x03D8 */ m3d::anmChrBlend_c mAnmChrBlend; + /* 0x0400 */ nw4r::g3d::ResFile mResAnmChr0; + /* 0x0404 */ nw4r::g3d::ResFile mResAnmChr1; + /* 0x0408 */ m3d::anmChr_c mAnmChrs[5]; + /* 0x0520 */ dSoundSourceIf_c *pSoundIface; + /* 0x0524 */ void *mpSoundBrasd; + /* 0x0528 */ m3d::anmTexPat_c mAnmTexPatWink; + /* 0x0554 */ dNpcMdlCallbackEye_c mEyeMdlCallback; + /* 0x0584 */ f32 field_0x584; + /* 0x0588 */ f32 field_0x588; + /* 0x058C */ f32 field_0x58C; + /* 0x0590 */ f32 field_0x590; + /* 0x0594 */ callback_c mCallback; + /* 0x088C */ mVec3_c field_0x88C; + /* 0x0898 */ mVec3_c field_0x898; + /* 0x08A4 */ mVec3_c field_0x8A4; + /* 0x08B0 */ mVec3_c field_0x8B0; + /* 0x08BC */ mVec3_c field_0x8BC; + /* 0x08C8 */ s16 mAnmIDBody; + /* 0x08CA */ s16 mAnmIDHip; + /* 0x08CC */ s16 mAnmIDShoulderR; + /* 0x08CE */ s16 mAnmIDShoulderL; + /* 0x08D0 */ s16 mAnmIDHead; + /* 0x08D4 */ dShadowCircle_c mShadow; + /* 0x08DC */ s32 field_0x8DC; + /* 0x08E0 */ m3d::smdl_c mMdlPias; // Earring + /* 0x08FC */ mMtx_c field_0x8FC; + /* 0x092C */ mVec3_c field_0x92C; + /* 0x0938 */ dBgS_AcchCir mAcchCir; + /* 0x0994 */ dBgS_ObjAcch mAcch; + /* 0x0D44 */ s16 field_0xD44; + /* 0x0D46 */ s16 field_0xD46; + /* 0x0D48 */ s16 field_0xD48; + /* 0x0D4A */ s16 field_0xD4A; + /* 0x0D4C */ s16 field_0xD4C; + /* 0x0D4E */ s16 field_0xD4E; + /* 0x0D50 */ s16 field_0xD50; + /* 0x0D52 */ s16 field_0xD52; + /* 0x0D54 */ s16 field_0xD54; + /* 0x0D56 */ s16 field_0xD56; + /* 0x0D58 */ s16 field_0xD58; + /* 0x0D5A */ s16 field_0xD5A; + /* 0x0D5C */ s16 field_0xD5C; + /* 0x0D5E */ s16 field_0xD5E; + /* 0x0D60 */ s16 field_0xD60; + /* 0x0D62 */ s16 field_0xD62; + /* 0x0D64 */ s16 field_0xD64; + /* 0x0D66 */ s16 field_0xD66; + /* 0x0D68 */ s16 field_0xD68; + /* 0x0D6A */ s16 mBossCaptionTimer; + /* 0x0D6C */ s32 field_0xD6C; + /* 0x0D70 */ bool field_0xD70; + /* 0x0D71 */ bool field_0xD71; + /* 0x0D72 */ bool field_0xD72; + /* 0x0D74 */ s32 field_0xD74; + /* 0x0D78 */ bool field_0xD78; + /* 0x0D79 */ bool mbLinkSwordWaitFirstComplete; + /* 0x0D7A */ bool field_0xD7A; + /* 0x0D7B */ bool field_0xD7B; + /* 0x0D7C */ bool field_0xD7C; + /* 0x0D7D */ bool field_0xD7D; + /* 0x0D7E */ bool field_0xD7E; + + /* 0x0D7F */ u8 _0xD7F; + + /* 0x0D80 */ bool field_0xD80; + /* 0x0D81 */ bool field_0xD81; + /* 0x0D82 */ bool field_0xD82; + /* 0x0D83 */ bool mbShownBossCaption; + /* 0x0D84 */ bool field_0xD84; + /* 0x0D85 */ bool field_0xD85; + /* 0x0D88 */ u32 mPlayerAttackDir; + /* 0x0D8C */ bool field_0xD8C; + /* 0x0D8D */ bool field_0xD8D; + /* 0x0D8E */ s16 field_0xD8E; + /* 0x0D90 */ s32 mPreviousHitCutDir; + /* 0x0D94 */ dEnemySwordMdl_c mMdlSwordA; + /* 0x12D0 */ mVec3_c field_0x12D0; // SwordA Translation + /* 0x12DC */ f32 field_0x12DC; + /* 0x12E0 */ bool field_0x12E0; + /* 0x12E4 */ dEnemySwordMdl_c mMdlSwordB; + /* 0x1820 */ mVec3_c field_0x1820; // SwordB Translation + + /* 0x182C */ u8 _0x182C[0x1830 - 0x182C]; + + /* 0x1830 */ f32 field_0x1830; + /* 0x1834 */ f32 field_0x1834; + /* 0x1838 */ f32 field_0x1838; + /* 0x183C */ mAng field_0x183C; + /* 0x183E */ mAng field_0x183E; + /* 0x1840 */ mVec3_c field_0x1840; + /* 0x184C */ mVec3_c field_0x184C; + /* 0x1858 */ f32 field_0x1858; + /* 0x185C */ mVec3_c field_0x185C; + /* 0x1868 */ f32 field_0x1868; + /* 0x186C */ f32 field_0x186C; + /* 0x1870 */ bool field_0x1870; + /* 0x1871 */ bool field_0x1871; + /* 0x1872 */ bool field_0x1872; + + /* 0x1873 */ u8 _0x1873[0x1878 - 0x1873]; -private: - /* 0x??? */ STATE_MGR_DECLARE(dAcGirahimuBase_c); + /* 0x1878 */ dCcD_Cyl mCyl0; + /* 0x19C8 */ dCcD_Cyl mCyl1; + /* 0x1B18 */ dCcD_Linked mCyl2; + /* 0x1C78 */ dCcD_Linked mSph0; + /* 0x1DD8 */ dCcD_Linked mCps0; + /* 0x1F58 */ dCcD_Linked mCps1; + /* 0x20D8 */ dColliderLinkedList mCollider; + /* 0x20E4 */ f32 field_0x20E4; + /* 0x20E8 */ f32 field_0x20E8; + /* 0x20EC */ mVec3_c field_0x20EC; + /* 0x20F8 */ mVec3_c field_0x20F8; + /* 0x2104 */ dAcObjRef_c mRef0; + /* 0x2110 */ dAcRef_c mSwordLink; + /* 0x211C */ dFlow_c mFlow; + /* 0x2180 */ dFlowMgrBase_c mFlowMgr; + /* 0x21D8 */ dEmitter_c mEmitter; }; #endif diff --git a/include/d/a/e/d_a_e_ks.h b/include/d/a/e/d_a_e_ks.h index d63150e8c..338dd3830 100644 --- a/include/d/a/e/d_a_e_ks.h +++ b/include/d/a/e/d_a_e_ks.h @@ -7,6 +7,7 @@ #include "d/col/bg/d_bg_s_acch.h" #include "d/col/cc/d_cc_d.h" #include "d/d_light_env.h" +#include "d/d_shadow.h" #include "m/m3d/m_anmtexpat.h" #include "m/m_mtx.h" #include "m/m_vec.h" diff --git a/include/d/a/e/d_a_en_base.h b/include/d/a/e/d_a_en_base.h index 88f78f970..2342540b4 100644 --- a/include/d/a/e/d_a_en_base.h +++ b/include/d/a/e/d_a_en_base.h @@ -3,13 +3,14 @@ #include "common.h" #include "d/a/obj/d_a_obj_base.h" -#include "d/a/obj/d_a_obj_bomb.h" #include "d/d_cc.h" #include "f/f_list_mg.h" #include "m/m3d/m_mdl.h" #include "m/m_angle.h" #include "m/m_vec.h" +class dAcBomb_c; + struct dAcEnData { // Unknown Size yet }; @@ -72,6 +73,10 @@ class dAcEnBase_c : public dAcObjBase_c { mFinalBlowPosition = v; } + s32 getHealth() const { + return mHealth; + } + dAcBomb_c *getBombWithinRadius(f32 radius); // fn_8002f700 void playDeathEffect0(const mVec3_c &pos, const mVec3_c *pScale, bool skipKill); diff --git a/include/d/a/npc/d_a_npc.h b/include/d/a/npc/d_a_npc.h index 044d9790a..8be382eea 100644 --- a/include/d/a/npc/d_a_npc.h +++ b/include/d/a/npc/d_a_npc.h @@ -25,6 +25,27 @@ class dAcNpc_c; // NPC-specific mdl callback stuff + +class dNpcMdlCallbackEye_c : public nw4r::g3d::IScnObjCallback { +public: + dNpcMdlCallbackEye_c() {} + virtual ~dNpcMdlCallbackEye_c() {} + + void create(m3d::smdl_c &mdl, u16 eyeMatL, u16 eyeMatR, u8, u8, dAcObjBase_c *); + + virtual void ExecCallback_CALC_MAT( + nw4r::g3d::ScnObj::Timing /* timing */, nw4r::g3d::ScnObj * /* pObj */, u32 /* param */, void * /* pInfo */ + ); // at 0x10 + + /* 0x04 */ u8 mBlendWeight; + /* 0x05 */ u8 mInterpTimer; + /* 0x06 */ u8 nTexCoordMask[2]; + /* 0x08 */ u16 mEyeballMatID[2]; + /* 0x0C */ mVec2_c mTargetOffset[2]; + /* 0x1C */ mVec2_c mCurrentOffset[2]; + /* 0x2C */ dAcObjBase_c *mpOwner; +}; + class dNpcMdlCallbackBase_c { protected: /* 0x00 */ u32 mNodeId; diff --git a/include/d/a/npc/d_a_npc_bee.h b/include/d/a/npc/d_a_npc_bee.h index 2e701b0e8..78dbc79f6 100644 --- a/include/d/a/npc/d_a_npc_bee.h +++ b/include/d/a/npc/d_a_npc_bee.h @@ -8,10 +8,10 @@ #include "d/a/obj/d_a_obj_base.h" #include "d/col/cc/d_cc_d.h" #include "d/d_cc.h" -#include "m/m3d/m_proc.h" #include "m/m_angle.h" #include "m/m_vec.h" #include "nw4r/g3d/res/g3d_resfile.h" +#include "toBeSorted/d_unk_mdl_stuff_2.h" class dAcOSpore_c; diff --git a/include/d/a/obj/d_a_obj_girahimu_knife.h b/include/d/a/obj/d_a_obj_girahimu_knife.h index 9d6ddf8a2..040a78154 100644 --- a/include/d/a/obj/d_a_obj_girahimu_knife.h +++ b/include/d/a/obj/d_a_obj_girahimu_knife.h @@ -16,9 +16,23 @@ class dAcObjGirahimuKnife_c : public dAcEnBase_c { public: + friend class dAcGirahimuBase_c; + friend class dAcGirahimu2_c; + friend class dAcGirahimu_c; + dAcObjGirahimuKnife_c() : mGlowEmitter(this), mTrailEmitter(this), mStateMgr(*this) {} virtual ~dAcObjGirahimuKnife_c() {} + enum Pattern_e { + PATTERN_R_L = 0, // Horizontal + PATTERN_RU_LD = 1, // Diagonal + PATTERN_RD_LU = 2, // Diagonal + PATTERN_U_D = 3, // Vertical + PATTERN_VOLLEY = 4, // Ghirahim 3 Dart attack - 8 darts 1 by 1 + PATTERN_SURROUND_H = 6, // Surround Player Horizontally + PATTERN_SURROUND_V = 7 // Surround Player Vertically + }; + virtual int create() override; virtual int draw() override; virtual bool createHeap() override; @@ -61,6 +75,16 @@ class dAcObjGirahimuKnife_c : public dAcEnBase_c { void getReflectForce(cCcD_Obj &cc, f32 forceMult, mVec3_c &outforce); void adjustVelocity(const mVec3_c &force, f32 yVel, f32 forwardVel); + bool isCirclingPlayer() const { + return mKnifePattern == PATTERN_SURROUND_H || mKnifePattern == PATTERN_SURROUND_V; + } + void setPattern(Pattern_e pattern) { + mKnifePattern = pattern; + } + void setState(s32 state) { + mState = state; + } + private: /* 0x378 */ m3d::smdl_c mMdl; /* 0x394 */ dShadowCircle_c mShadow; @@ -88,7 +112,7 @@ class dAcObjGirahimuKnife_c : public dAcEnBase_c { /* 0x778 */ s16 field_0x778; /* 0x77C */ f32 field_0x77C; /* 0x780 */ mAng field_0x780; - /* 0x784 */ s32 field_0x784; + /* 0x784 */ s32 mKnifePattern; /* 0x788 */ s32 mState; /* 0x78C */ bool field_0x78C; /* 0x78D */ bool field_0x78D; diff --git a/include/d/a/obj/d_a_obj_girahimu_sword_link.h b/include/d/a/obj/d_a_obj_girahimu_sword_link.h index 7dc572149..ab8330394 100644 --- a/include/d/a/obj/d_a_obj_girahimu_sword_link.h +++ b/include/d/a/obj/d_a_obj_girahimu_sword_link.h @@ -14,6 +14,10 @@ class dAcObjGirahimuSwordLink_c : public dAcObjBase_c { public: + friend class dAcGirahimuBase_c; + friend class dAcGirahimu_c; + friend class dAcGirahimu2_c; + dAcObjGirahimuSwordLink_c() : mEmitter(this), mStateMgr(*this) {} virtual ~dAcObjGirahimuSwordLink_c() {} @@ -37,6 +41,17 @@ class dAcObjGirahimuSwordLink_c : public dAcObjBase_c { void reflect(const mVec3_c &rot, f32 gravity, f32, f32 force); bool lineCheck(); + dEnemySwordMdl_c &getMdl() { + return mMdl; + } + + void setAngleCopy(const mAng3_c &ang) { + mAngleCopy.set(ang); + } + void setGhirahimPosition(const mVec3_c &pos) { + mGhirahimPos.set(pos); + } + STATE_FUNC_DECLARE(dAcObjGirahimuSwordLink_c, Hide); STATE_FUNC_DECLARE(dAcObjGirahimuSwordLink_c, Equip); STATE_FUNC_DECLARE(dAcObjGirahimuSwordLink_c, GetSword); diff --git a/include/d/col/c/c_cc_d.h b/include/d/col/c/c_cc_d.h index b6d899ed7..892ede554 100644 --- a/include/d/col/c/c_cc_d.h +++ b/include/d/col/c/c_cc_d.h @@ -628,11 +628,17 @@ class cCcD_ObjTg : public cCcD_GAtTgCoCommonBase { return MskSPrm(1); } - void Set_0x4C(u32 f) { - field_0x4C = f; + void SetShieldType(u32 f) { + mShieldType = f; } - bool Chk_0x4C(u32 f) const { - return field_0x4C & f; + u32 GetShieldType() const { + return mShieldType; + } + void OffShieldType(u32 f) { + mShieldType &= ~f; + } + bool ChkShieldType(u32 f) const { + return mShieldType & f; } u32 MskType(u32 mask) const { @@ -714,7 +720,7 @@ class cCcD_ObjTg : public cCcD_GAtTgCoCommonBase { /* 0x48 */ s16 mShieldRange; /* 0x4A */ u8 field_0x4A; /* 0x4B */ u8 field_0x4B; - /* 0x4C */ u32 field_0x4C; + /* 0x4C */ u32 mShieldType; /* 0x50 */ u32 field_0x50; /* 0x54 */ cCcD_ShieldChkCallback field_0x54; /* 0x58 */ cCcD_SrcGObjAt mAtHitSrc; @@ -799,14 +805,14 @@ class cCcD_Obj { mVec3_c &GetAtHitPosInline() { return mAt.mHitPos; } - bool GetAtFlag0x2() const; - bool GetAtFlag0x4() const; - bool GetAtFlag0x8() const; + bool ChkAtShieldHit() const; + bool ChkAtCutHit() const; + bool ChkAtShieldReflect() const; const mVec3_c &GetTgHitPos() const; mVec3_c &GetTgHitPos(); - bool GetTgFlag0x4() const; - bool GetTgFlag0x8() const; + bool ChkTgCutHit() const; + bool ChkTgShieldReflect() const; bool ChkAtClawshot() const; bool ChkAtClawshotDebug() const; @@ -961,12 +967,17 @@ class cCcD_Obj { void SubtractTgEffCounter() { mTg.SubtractEffCounter(); } void SubtractCoEffCounter() { mCo.SubtractEffCounter(); } - void SetTg_0x4C(u32 f) { - mTg.Set_0x4C(f); + void SetTgShieldType(u32 f) { + mTg.SetShieldType(f); + } + u32 GetTgShieldType() const { + return mTg.GetShieldType(); + } + void OffTgShieldType(u32 f) { + mTg.OffShieldType(f); } - - bool ChkTg_0x4C(u32 f) const { - return mTg.Chk_0x4C(f); + bool ChkTgShieldType(u32 f) const { + return mTg.ChkShieldType(f); } void SetAtCallback(cCcD_HitCallback cb) { @@ -1058,10 +1069,13 @@ class cCcD_Obj { } // Tg - + void OnTgSet() { mTg.OnSPrm(1); } + void OnTg_0x40() { + mTg.OnSPrm(0x40); + } u32 GetTgGrp() const { return mTg.MskSPrm(0x3E); } diff --git a/include/d/lyt/d_lyt_boss_caption.h b/include/d/lyt/d_lyt_boss_caption.h index 5da6ca56f..ead1e5897 100644 --- a/include/d/lyt/d_lyt_boss_caption.h +++ b/include/d/lyt/d_lyt_boss_caption.h @@ -9,13 +9,17 @@ class dLytBossCaption_c { return sInstance; } - void show(const char *label, UNKWORD); + void show(const char *label, const char *); // I believe this is the inline that causes all the Rev0 -> Rev1 pain in RELs... void unk_inline() { field_0x645 = 0; field_0x646 = 0; } + void unk_inline1() { + field_0x645 = 0; + field_0x646 = 1; + } static void unk_inline2() { if (sInstance != nullptr) { diff --git a/include/m/m_angle.h b/include/m/m_angle.h index d5e01d4df..2a7aac537 100644 --- a/include/m/m_angle.h +++ b/include/m/m_angle.h @@ -54,10 +54,11 @@ class mAng { return *this; } - template - bool operator==(const T other) { - return mVal == other; - } + // Commented Out Due to some cases of reg swaps + // template + // bool operator==(const T other) { + // return mVal == other; + // } public: static s32 abs(const mAng b) { diff --git a/include/m/m_mtx.h b/include/m/m_mtx.h index fb18660f3..f1331cfa3 100644 --- a/include/m/m_mtx.h +++ b/include/m/m_mtx.h @@ -183,6 +183,12 @@ class mMtx_c : public EGG::Matrix34f { void fn_802F1C40(s32, s32); void makeRotationFromVecs(const mVec3_c &, const mVec3_c &, f32); + static mMtx_c fromIdentity() { + mMtx_c m; + MTXIdentity(m); + return m; + } + public: static mMtx_c Identity; }; diff --git a/include/nw4r/g3d/res/g3d_resnode.h b/include/nw4r/g3d/res/g3d_resnode.h index d3198e8f3..73fa3ddcf 100644 --- a/include/nw4r/g3d/res/g3d_resnode.h +++ b/include/nw4r/g3d/res/g3d_resnode.h @@ -143,6 +143,9 @@ class ResNode : public ResCommon, public ResNodeDataTypedef { const math::VEC3 &GetTranslate() const { return *(const math::VEC3 *)&ref().translate; } + const math::VEC3 &GetScale() const { + return *(const math::VEC3 *)&ref().scale; + } // not in the dwarf const math::VEC3 &GetBoundsMin() const { diff --git a/include/toBeSorted/d_emitter.h b/include/toBeSorted/d_emitter.h index 8b8ae66f3..b62c0ca25 100644 --- a/include/toBeSorted/d_emitter.h +++ b/include/toBeSorted/d_emitter.h @@ -158,6 +158,10 @@ class dEmitter_c : public dEmitterBase_c { mFlags &= ~flag; } + bool isFadeComplete() const { + return checkFlag(EMITTER_Fading) && mFadeTimer == 0; + } + void realizeAlpha(); bool areAllEmittersDone(); diff --git a/include/toBeSorted/d_enemy_sword_mdl.h b/include/toBeSorted/d_enemy_sword_mdl.h index b640de609..15d117c59 100644 --- a/include/toBeSorted/d_enemy_sword_mdl.h +++ b/include/toBeSorted/d_enemy_sword_mdl.h @@ -70,10 +70,16 @@ class dEnemySwordMdl_c { void setInactive() { mIsActive = false; } + void setProcActive(bool b) { + mProc.setActive(b); + } void disable() { setInactive(); mProc.setActive(false); } + void setField_0x080(const mVec3_c &v) { + field_0x080 = v; + } }; #endif diff --git a/include/toBeSorted/d_flow_mgr.h b/include/toBeSorted/d_flow_mgr.h index 25784a234..df8e33809 100644 --- a/include/toBeSorted/d_flow_mgr.h +++ b/include/toBeSorted/d_flow_mgr.h @@ -12,6 +12,7 @@ class dFlowMgrBase_c { void triggerEntryPoint(s32 labelPart1, s32 labelPart2, u8 p4, u8 p5); bool checkFinished(); + bool fn_800C40F0(); private: /* 0x04 */ dFlow_c *mpFlow; diff --git a/src/REL/d/a/b/d_a_b_girahimu.cpp b/src/REL/d/a/b/d_a_b_girahimu.cpp index 2103812ac..8cf0b1791 100644 --- a/src/REL/d/a/b/d_a_b_girahimu.cpp +++ b/src/REL/d/a/b/d_a_b_girahimu.cpp @@ -1,3 +1,1107 @@ #include "d/a/b/d_a_b_girahimu.h" +#include "c/c_lib.h" +#include "c/c_math.h" +#include "common.h" +#include "d/a/b/d_a_b_girahimu_base.h" +#include "d/a/d_a_player.h" +#include "d/a/obj/d_a_obj_base.h" +#include "d/a/obj/d_a_obj_girahimu_knife.h" +#include "d/a/obj/d_a_obj_girahimu_sword_link.h" +#include "d/col/bg/d_bg_s.h" +#include "d/col/c/c_cc_d.h" +#include "d/d_camera.h" +#include "d/d_light_env.h" +#include "d/d_sc_game.h" +#include "d/flag/dungeonflag_manager.h" +#include "d/flag/sceneflag_manager.h" +#include "d/lyt/d_lyt_boss_caption.h" +#include "d/snd/d_snd_bgm_mgr.h" +#include "d/snd/d_snd_wzsound.h" +#include "d/t/d_t_sword_battle_game.h" +#include "f/f_base.h" +#include "f/f_manager.h" +#include "f/f_profile_name.h" +#include "m/m3d/m_anmchr.h" +#include "m/m3d/m_fanm.h" +#include "m/m_angle.h" +#include "m/m_mtx.h" +#include "m/m_vec.h" +#include "nw4r/g3d/res/g3d_resmdl.h" +#include "s/s_Math.h" +#include "s/s_State.hpp" +#include "toBeSorted/d_emitter.h" +#include "toBeSorted/event.h" +#include "toBeSorted/event_manager.h" +#include "toBeSorted/minigame_mgr.h" + +STATE_DEFINE(dAcGirahimu_c, G_SwordDemo); +STATE_DEFINE(dAcGirahimu_c, G_SwordWait); +STATE_VIRTUAL_DEFINE(dAcGirahimu_c, G_SwordDamage); +STATE_DEFINE(dAcGirahimu_c, G_SwordPiyori); +STATE_DEFINE(dAcGirahimu_c, Knife); +STATE_DEFINE(dAcGirahimu_c, KnifeAttack); +STATE_DEFINE(dAcGirahimu_c, Death); +STATE_DEFINE(dAcGirahimu_c, DeathMiniGame); +STATE_VIRTUAL_DEFINE(dAcGirahimu_c, CatchDamage); + SPECIAL_ACTOR_PROFILE(B_GIRAHIMU, dAcGirahimu_c, fProfile::B_GIRAHIMU, 0x10E, 0, 0); + +struct dAcGirahimu_HIO_c { + f32 field_0x00; + f32 field_0x04; + f32 field_0x08; + f32 field_0x0C; + f32 field_0x10; + f32 field_0x14; + f32 field_0x18; + f32 field_0x1C; + s16 field_0x20; + s16 field_0x22; + s16 field_0x24; + s16 field_0x26; + + static const dAcGirahimu_HIO_c sHIO; +}; + +const dAcGirahimu_HIO_c dAcGirahimu_HIO_c::sHIO = {1.05f, 1.05f, -5.0f, -2.0f, 15.0f, 150.0f, + 3.0f, 50.0f, 1, 0x5DC, 0x14, 0x1000}; + +void dAcGirahimu_c::initializeState_G_SwordDemo() { + if ((s32)getFromParams(0, 0xFF) != 0xFF) { + SceneflagManager::sInstance->setFlag(mRoomID, getFromParams(8, 0xFF)); + } + + mCallback.field_0x2D4 = 1.0f; + field_0xD44 = 0; + mCallback.field_0x2D0 = 1.0f; + mCyl0.SetR(50.0f); + mCyl2.OnTgSet(); + mSph0.ClrTgSet(); + mMdlSwordA.mProc.setColor1(mColor(0, 0, 0, 0xFF)); + mMdlSwordA.mProc.setColor2(mColor(0, 0, 0, 0xFF)); + field_0xD71 = false; + field_0xD70 = true; + mHealth = 200; + field_0x1834 = 0.0f; + mSpeed = 0.0f; + mCallback.field_0x04E = false; + if ((s32)getFromParams(0, 0xFF) != 0xFF) { + SceneflagManager::sInstance->unsetFlag(mRoomID, getFromParams(0, 0xFF) + 1); + } +} +void dAcGirahimu_c::executeState_G_SwordDemo() { + dCamera_c *pCamera = dScGame_c::getCamera(); + mVec3_c v0 = mPosition; + v0.y += 150.f; + mVec3_c v1(0.0f, 200.0f, 300.0f); + v1.rotY(mRotation.y); + v1 += mPosition; + + mMtx_c transform; + mVec3_c headTranslation(0.0f, 0.0f, 0.0f); + nw4r::g3d::ResMdl mdl = mMdlBody.getResMdl(); + mMdlBody.getNodeWorldMtx(mdl.GetResNode("Head").GetID(), transform); + transform.getTranslation(headTranslation); + + mVec3_c handRTranslation; + mMdlBody.getNodeWorldMtx(mdl.GetResNode("HandR").GetID(), transform); + transform.getTranslation(handRTranslation); + + mVec3_c handLTranslation; + mMdlBody.getNodeWorldMtx(mdl.GetResNode("HandL").GetID(), transform); + transform.getTranslation(handLTranslation); + + mVec3_c midpoint = handRTranslation + handLTranslation; + midpoint *= 0.5f; + + switch (field_0xD44) { + case 0: { + { + Event event("GirahimuSwordDemo", 100, 0x100001, nullptr, nullptr); + EventManager::alsoSetAsCurrentEvent(this, &event, nullptr); + } + + if (EventManager::isInEvent(this, "GirahimuSwordDemo")) { + setAnm("WaitA", ANM_WaitA, nullptr, m3d::PLAY_MODE_4, 5.0f, 1.0f); + field_0xD44++; + field_0x20F8.set(headTranslation); + v1.set(0.0f, 0.0f, 150.0f); + v1.rotY(mRotation.y); + v1 += headTranslation; + field_0x20EC.set(v1); + pCamera->setEventCamView(field_0x20F8, field_0x20EC, 70.0f, 0.0f); + field_0xD46 = 30; + } + } break; + case 1: { + mRotation.y = cLib::targetAngleY(mPosition, mStartingPos); + + mVec3_c v(0.0f, 0.0f, 500.0f); + v.rotY(mRotation.y); + v += mPosition; + mAng3_c a(0, mRotation.y + 0x8000, 0); + dAcPy_c::GetLinkM()->setPosRot(&v, &a, false, 0, 0); + + field_0x20F8.set(headTranslation); + v1.set(0.0f, 0.0f, 150.0f); + v1.rotY(mRotation.y); + v1 += headTranslation; + field_0x20EC.set(v1); + + pCamera->setEventCamView(field_0x20F8, field_0x20EC, 35.0f, 0.0f); + if (field_0xD46 <= 0) { + fn_226_D070(); + setAnm("WaitA", ANM_WaitA, "WaitA", ANM_WaitA, "FaceTongue", ANM_NONE, m3d::PLAY_MODE_4, 15.0f, 1.0f); + field_0xD46 = 50; + field_0xD44++; + } + } break; + case 2: { + cLib::addCalcPos2(&field_0x20EC, v1, 0.2f, 100.0f); + cLib::addCalcPos2(&field_0x20F8, midpoint, 0.2f, 10.0f); + if (field_0xD46 <= 0) { + field_0xD44++; + setAnm("SwordAppear", ANM_SwordAppear, nullptr, m3d::PLAY_MODE_4, 5.0f, 1.0f); + } + } break; + case 3: { + cLib::addCalcPos2(&field_0x20EC, v1, 0.2f, 100.0f); + cLib::addCalcPos2(&field_0x20F8, midpoint, 0.2f, 10.0f); + pCamera->setEventCamView(field_0x20F8, field_0x20EC, 35.0f, 0.0f); + if (mAnmChrs[ANMIDX_Body].checkFrame(40.0f)) { + field_0xD7B = true; + field_0xD44++; + } + } break; + case 4: { + cLib::addCalcPos2(&field_0x20EC, v1, 0.2f, 100.0f); + cLib::addCalcPos2(&field_0x20F8, midpoint, 0.2f, 10.0f); + pCamera->setEventCamView(field_0x20F8, field_0x20EC, 35.0f, 0.0f); + + if (sLib::chase(&field_0x12DC, 1.0f, 0.1f) && mAnmChrs[ANMIDX_Body].isStop()) { + setAnm("WaitBtC", ANM_WaitBtC, nullptr, m3d::PLAY_MODE_4, 15.0f, 1.0f); + field_0xD46 = 50; + field_0xD44++; + } + } break; + case 5: { + v1.set(0.0f, 200.0f, 500.0f); + v1.rotY(mRotation.y); + v1 += mPosition; + cLib::addCalcPos2(&field_0x20EC, v1, 0.2f, 10.0f); + cLib::addCalcPos2(&field_0x20F8, midpoint, 0.2f, 10.0f); + pCamera->setEventCamView(field_0x20F8, field_0x20EC, 35.0f, 0.0f); + if (field_0xD46 <= 0) { + pCamera->fn_8019EA70(false); + EventManager::finishEvent(this, nullptr); + changeState(StateID_G_SwordWait); + } + } break; + } +} +void dAcGirahimu_c::finalizeState_G_SwordDemo() { + mCyl2.OnTgSet(); + field_0xD44 = 0; +} + +void dAcGirahimu_c::initializeState_G_SwordWait() { + field_0xD6C = 6; + setAnm("WaitBtC", ANM_WaitBtC, nullptr, m3d::PLAY_MODE_4, 15.0f, 1.0f); + mCallback.field_0x088 = true; + field_0xD46 = 30; + if (vt_0x218()) { + field_0x186C = 75.0f; + field_0xD46 = 5; + } + mSpeed = 0.0f; + field_0x1834 = 0.0f; + if (cM::rndInt(100) > 50) { + field_0xD7E = true; + } else { + field_0xD7E = false; + } +} +void dAcGirahimu_c::executeState_G_SwordWait() { + sLib::chase(&field_0x8B0.x, 1.05f, 0.2f); + if (checkObjectProperty(OBJ_PROP_0x2)) { + return; + } + + if (field_0x1868 >= 1500.0f) { + changeState(StateID_HomeWarp); + return; + } + + if (mAng(field_0x183E - mRotation.y).abs() < 0x3000) { + if (field_0x1838 <= 300.0f && field_0xD7E) { + field_0xD82 = true; + vt_0x1F8(); + changeState(StateID_FrontAttack); + field_0xD46 = 20; + return; + } + + if (field_0xD46 <= 0) { + field_0xD46 = 30; + determineNextMove(); + return; + } + } + + if (field_0x8DC != 4) { + field_0x1834 = 0.0f; + if (!turn(field_0x183E) && mAnmIDHip != ANM_WaitBtC) { + setAnmHip("WaitBtC", ANM_WaitBtC, m3d::PLAY_MODE_4, 15.0f, 1.0f); + } + } else { + field_0x1834 = 5.0f; + setAnm("WalkBt", ANM_Walk, nullptr, m3d::PLAY_MODE_4, 15.0f, 1.0f); + } + + sLib::chaseAngle(mRotation.y.ref(), field_0x183E, 0x500); +} +void dAcGirahimu_c::finalizeState_G_SwordWait() {} + +void dAcGirahimu_c::initializeState_G_SwordDamage() { + mCyl2.OnTgSet(); + setAnm("DamageHit", ANM_DamageHit, nullptr, m3d::PLAY_MODE_4, 5.0f, 1.0f); + mCallback.field_0x088 = false; + field_0xD44 = 0; + field_0xD62 = 50; + mSpeed = 0.0f; + field_0x1834 = 0.0f; + field_0xD6C = 7; + field_0xD8E = 0; +} +void dAcGirahimu_c::executeState_G_SwordDamage() { + field_0xD8D = true; + field_0xD62--; + if (getHealth() != 0) { + if (field_0xD8E > 0) { + changeState(StateID_G_SwordPiyori); + return; + } + + if (mAnmIDBody != ANM_DamageHit) { + if (vt_0x218()) { + changeState(StateID_BackStep); + return; + } + + if (field_0xD62 <= 0 || field_0xD8E >= 4) { + field_0xD8E = 0; + if (field_0x1838 < 500.0f) { + changeState(StateID_BackStep); + return; + } else { + vt_0x220(); + return; + } + } + } + } + + if (mAnmChrs[ANMIDX_Body].isStop()) { + mCallback.field_0x088 = false; + setAnm("DamageWait", ANM_DamageWait, nullptr, m3d::PLAY_MODE_4, 5.0f, 1.0f); + } +} +void dAcGirahimu_c::finalizeState_G_SwordDamage() { + field_0xD8E = 0; +} + +void dAcGirahimu_c::initializeState_G_SwordPiyori() { + mCyl2.OnTgSet(); + setAnm("DamageWait", ANM_DamageWait, nullptr, m3d::PLAY_MODE_4, 5.0f, 1.0f); + mCallback.field_0x088 = false; + field_0xD44 = 0; + field_0xD46 = 30; + + if (field_0xD82) { + field_0xD46 = 30; + field_0xD82 = false; + } + + mSpeed = 0.0f; + field_0x1834 = 0.0f; + + field_0xD6C = 7; + field_0xD8E = 0; +} +void dAcGirahimu_c::executeState_G_SwordPiyori() { + if (getHealth() == 0) { + return; + } + if (field_0xD8E > 0 && vt_0x218()) { + changeState(StateID_BackStep); + return; + } + + if (field_0xD46 <= 0 || field_0xD8E >= 4) { + field_0xD8E = 0; + if (field_0x1838 < 500.0f) { + changeState(StateID_BackStep); + } else { + vt_0x220(); + } + } +} +void dAcGirahimu_c::finalizeState_G_SwordPiyori() { + field_0xD8E = 0; +} + +void dAcGirahimu_c::determineNextMove() { + if (field_0xD84) { + field_0xD84 = false; + changeState(StateID_Run); + return; + } + + if (field_0xD85) { + field_0xD85 = false; + changeState(StateID_Knife); + return; + } + + for (int i = 0; i <= 10; ++i) { + int rnd = cM::rndInt(90); + if (rnd >= 60) { + if (field_0x8DC != 1) { + if (getStateID().isEqual(StateID_BackStep)) { + field_0x8DC = 1; + changeState(StateID_Run); + return; + } + if (field_0x8DC != 1 && field_0x1838 >= 600.0f) { + field_0x8DC = 1; + changeState(StateID_Run); + return; + } + if (!getStateID().isEqual(StateID_BackStep)) { + field_0xD84 = true; + changeState(StateID_BackStep); + return; + } + } + } else if (rnd >= 30) { + if (field_0x8DC != 0) { + field_0x8DC = 0; + if (field_0x1838 <= 300.0f) { + vt_0x1F8(); + changeState(StateID_FrontAttack); + return; + } + if (cM::rndInt(100) > 50) { + changeState(StateID_FrontWarp); + return; + } else { + changeState(StateID_BackWarp); + return; + } + } + } else { + if (field_0x8DC != 3) { + if (!getStateID().isEqual(StateID_BackStep) && field_0x1838 <= 300.0f) { + field_0xD85 = true; + changeState(StateID_BackStep); + return; + } else { + field_0x8DC = 3; + changeState(StateID_Knife); + return; + } + } + } + } + + field_0x8DC = 0; + changeState(StateID_BackWarp); +} + +void dAcGirahimu_c::fn_227_1EA0() { + cCcD_Obj *pCc = mMdlSwordA.mCcList.findAtHit(); + if (pCc != nullptr && pCc->ChkAtShieldReflect()) { + changeState(StateID_G_SwordDamage); + fn_226_D070(); + setAnm("GuardLSwordA", ANM_DamageHit, nullptr, m3d::PLAY_MODE_4, 5.0f, 1.0f); + field_0xD62 = 40; + mCallback.field_0x088 = true; + mRotation.y = field_0x183E; + return; + } + pCc = mCollider.findTgHit(); + if (pCc != nullptr && pCc->GetTgAtHitType() == AT_TYPE_DAMAGE) { + u16 health = getHealth(); + if (health != 0) { + health--; + } + mHealth = health; + changeState(StateID_KnifeDamage); + } +} + +void dAcGirahimu_c::initializeState_KnifeAttack() { + setAnm("AttackKnife", ANM_AttackKnife, nullptr, m3d::PLAY_MODE_4, 5.0f, 1.0f); + mSpeed = 0.0f; + field_0x1834 = 0.0f; + field_0xD6C = 0; +} +void dAcGirahimu_c::executeState_KnifeAttack() { + s32 _weird_zero = 0; + + fn_226_A280(field_0x183E); + sLib::chaseAngle(mRotation.y.ref(), field_0x183E, 0x500); + if (mAnmChrs[ANMIDX_Body].getFrame() < 15.0f) { + mCyl0.ClrTgSet(); + mCyl2.ClrTgSet(); + } else { + mCyl0.OnTgSet(); + field_0xD81 = true; + field_0xD6C = 6; + } + + if (mAnmChrs[ANMIDX_Body].checkFrame(15.0f)) { + for (int i = 0; i < 5; ++i) { + startSound(SE_OGhKf_SHOT); + if (mKnives[i].isLinked()) { + mKnives[i].get()->fn_239_2360(true, false, 50.0f + _weird_zero); + } + } + } + + if (mAnmChrs[ANMIDX_Body].isStop()) { + vt_0x220(); + } +} +void dAcGirahimu_c::finalizeState_KnifeAttack() {} + +void dAcGirahimu_c::initializeState_Knife() { + if (field_0x1838 <= 600.0f) { + setAnm("WalkBt", ANM_Walk, nullptr, m3d::PLAY_MODE_2, 15.0f, 1.0f); + setAnm("Call", ANM_Call, m3d::PLAY_MODE_4, 5.0f, 1.0f); + f32 rate = 1.0f; + setAnmRate(rate); + if (mAnmChrs[ANMIDX_Body].getPlayMode() == m3d::PLAY_MODE_2) { + rate = -rate; + } + if (pSoundIface != nullptr) { + pSoundIface->setRate(rate); + } + mSpeed = 0.0f; + field_0x1834 = -8.0f * mAnmChrs[ANMIDX_Body].getRate(); + } else { + mSpeed = 0.0f; + field_0x1834 = 0.0f; + setAnm("Call", ANM_Call, nullptr, m3d::PLAY_MODE_4, 5.0f, 1.0f); + } + + mCyl2.SetTgShieldType(~AT_TYPE_NONE); + field_0xD6C = 6; + field_0xD44 = 0; +} +void dAcGirahimu_c::executeState_Knife() { + if (mAnmIDHip != ANM_Walk && field_0x1838 <= 700.0f) { + setAnmHip("WalkBt", ANM_Walk, m3d::PLAY_MODE_2, 15.0f, 1.0f); + field_0x1834 = -8.0f * mAnmChrs[ANMIDX_Body].getRate(); + } + if (mAnmIDHip != ANM_Walk) { + fn_226_A280(field_0x183E); + } else { + fn_226_B960(6.0f); + } + + sLib::chaseAngle(mRotation.y.ref(), field_0x183E, 0x500); + mCyl2.ClrTgSet(); + + switch (field_0xD44) { + case 0: { + if (mAnmChrs[ANMIDX_Body].checkFrame(15.0f)) { + startSound(SE_OGhKf_GROUP_APPEAR); + dAcObjGirahimuKnife_c::Pattern_e pattern; + mVec3_c knifeOffset; + mVec3_c spacing; + int rnd = cM::rndInt(90); + f32 baseYOffset = 120.0f; + if (rnd >= 60) { + pattern = dAcObjGirahimuKnife_c::PATTERN_R_L; + knifeOffset.set(-100.0f, baseYOffset, 0.0f); + spacing.set(50.0f, 0.0f, 0.0f); + } else if (rnd >= 30) { + pattern = dAcObjGirahimuKnife_c::PATTERN_U_D; + knifeOffset.set(0.0f, baseYOffset + 100.0f + 10.0f, 0.0f); + spacing.set(0.0f, -50.0f, 0.0f); + } else { + if (cM::rndInt(100) > 50) { + pattern = dAcObjGirahimuKnife_c::PATTERN_RU_LD; + knifeOffset.set(100.0f, baseYOffset + 100.0f, 0.0f); + spacing.set(-50.0f, -50.0f, 0.0f); + } else { + pattern = dAcObjGirahimuKnife_c::PATTERN_RD_LU; + knifeOffset.set(-100.0f, baseYOffset + 100.0f, 0.0f); + spacing.set(50.0f, -50.0f, 0.0f); + } + } + knifeOffset.z = 80.0f; + for (int i = 0; i < 5; ++i) { + mVec3_c spawnPos = mPosition; + mVec3_c adjustedKnifeOffset = knifeOffset; + adjustedKnifeOffset.rotY(mRotation.y); + spawnPos += adjustedKnifeOffset; + dAcObjGirahimuKnife_c *pKnife = static_cast( + create(fProfile::OBJ_GH_KNIFE, mRoomID, 0, &spawnPos, nullptr, nullptr, 0xFFFFFFFF) + ); + mKnives[i].link(pKnife); + if (pKnife != nullptr) { + mKnives[i].get()->setTarget(knifeOffset); + knifeOffset += spacing; + mKnives[i].get()->setPattern(pattern); + } + } + } + if (mAnmChrs[ANMIDX_Body].isStop()) { + field_0xD46 = 25; + field_0xD44++; + } + } break; + case 1: { + if (mAnmIDHip == ANM_Walk) { + setAnm("WalkBt", ANM_Walk, m3d::PLAY_MODE_2, 15.0f, 1.0f); + } + if (mAnmIDHip != ANM_Walk || field_0xD46 <= 0) { + bool waiting = false; + for (int i = 0; i < 5; ++i) { + if (mKnives[i].isLinked() && mKnives[i].get()->isWaiting()) { + waiting = true; + } + } + if (waiting) { + changeState(StateID_KnifeAttack); + } else { + vt_0x220(); + } + } + } break; + } +} +void dAcGirahimu_c::finalizeState_Knife() {} + +void dAcGirahimu_c::initializeState_Death() { + field_0xD44 = 0; + mCallback.field_0x2D4 = 1.0f; + field_0x1834 = 0.0f; + mSpeed = 0.0f; + field_0x1830 = 200.0f; + mCallback.field_0x088 = false; + field_0xD6C = 0; + mCollider.ClrTg(); + mMdlSwordA.setField_0x080(mVec3_c(0.0f, -150.0f, 0.0f)); +} +void dAcGirahimu_c::executeState_Death() { + mCallback.field_0x088 = false; + dCamera_c *pCamera = dScGame_c::getCamera(); + mVec3_c v0(mPosition); + v0.y = 163.0f; + mVec3_c v1(0.0f, 212.0f, -1361.0f); + mVec3_c v2(0.0f, 86.0f, -1000.0f); + mVec3_c v3(0.0f, 131.0f, -3356.0f); + mVec3_c v4(72.0f, 178.0f, -1558.0f); + + mMtx_c headTransform; + mVec3_c headTranslation(0.0f, 0.0f, 0.0f); + mMdlBody.getNodeWorldMtx(mMdlBody.getResMdl().GetResNode("Head").GetID(), headTransform); + headTransform.getTranslation(headTranslation); + headTranslation.y = 118.0f; + + switch (field_0xD44) { + case 0: { + { + Event event("GirahimuDeathDemo", 100, 0x100001, nullptr, nullptr); + EventManager::alsoSetAsCurrentEvent(this, &event, nullptr); + } + if (EventManager::isInEvent(this, "GirahimuDeathDemo")) { + // Well... You put up more of a fight than I would have thought possible out of such a soft boy... + mFlowMgr.triggerEntryPoint(201, 55, 0, 0); + setAnm("End1A", ANM_EndA, nullptr, m3d::PLAY_MODE_4, 5.0f, 1.0f); + field_0xD44++; + v0.set(mStartingPos); + v0.y = 163.0f; + field_0x20F8.set(v0); + field_0x20EC.set(v1); + pCamera->setEventCamView(field_0x20F8, field_0x20EC, 20.0f, 0.0f); + } + } break; + case 1: { + setPosition(mStartingPos); + setOldPosition(mStartingPos); + mRotation.y = 0; + mVec3_c v5(0.0f, 0.0f, 1300.0f); + v5.rotY(mRotation.y); + v5 += mPosition; + mAng3_c a0(0, mRotation.y + 0x8000, 0); + dAcPy_c::GetLinkM()->setPosRot(&v5, &a0, false, 0, 0); + field_0xD44++; + v0.set(mStartingPos); + v0.y = 163.0f; + field_0x20F8 = v0; + pCamera->setEventCamView(field_0x20F8, field_0x20EC, 20.0f, 0.0f); + } break; + case 2: { + cLib::addCalcPos2(&field_0x20F8, headTranslation, 0.2f, 200.0f); + field_0x20EC.set(v1); + if (mAnmChrs[ANMIDX_Body].isStop()) { + field_0x20F8.set(0.0f, 158.0f, -2438.0f); + field_0x20EC.set(0.0f, 192.0f, -1727.0f); + setAnm("End1BLoop", ANM_EndBLoop, nullptr, m3d::PLAY_MODE_4, 5.0f, 1.0f); + field_0xD44++; + } + pCamera->setEventCamView(field_0x20F8, field_0x20EC, 20.0f, 0.0f); + } break; + case 3: { + mFlowMgr.checkFinished(); + if (mFlowMgr.fn_800C40F0()) { + setAnm("End1C", ANM_EndC, nullptr, m3d::PLAY_MODE_4, 5.0f, 1.0f); + field_0xD44++; + } + pCamera->setEventCamView(field_0x20F8, field_0x20EC, 20.0f, 0.0f); + } break; + case 4: { + if (mAnmChrs[ANMIDX_Body].isStop()) { + setAnm("End1DLoop", ANM_EndDLoop, nullptr, m3d::PLAY_MODE_4, 5.0f, 1.0f); + field_0xD46 = 20; + // I fear I spent far too long teasing and toying with you ... + mFlowMgr.triggerEntryPoint(201, 56, 0, 0); + field_0xD44++; + } + pCamera->setEventCamView(field_0x20F8, field_0x20EC, 20.0f, 0.0f); + } break; + case 5: { + if (field_0xD46 <= 0) { + field_0xD44++; + } + pCamera->setEventCamView(field_0x20F8, field_0x20EC, 20.0f, 0.0f); + } break; + case 6: { + mFlowMgr.checkFinished(); + if (mFlowMgr.fn_800C40F0()) { + setAnm("End1C", ANM_EndC, nullptr, m3d::PLAY_MODE_3, 5.0f, 1.0f); + field_0xD44++; + } + pCamera->setEventCamView(field_0x20F8, field_0x20EC, 20.0f, 0.0f); + } break; + case 7: { + cLib::addCalcPos2(&field_0x20F8, headTranslation, 0.2f, 20.0f); + cLib::addCalcPos2(&field_0x20EC, v2, 0.5f, 20.0f); + pCamera->setEventCamView(field_0x20F8, field_0x20EC, 20.0f, 0.0f); + if (mAnmChrs[ANMIDX_Body].isStop()) { + mMdlSwordA.setProcActive(true); + setAnm("End1E", ANM_EndE, nullptr, m3d::PLAY_MODE_4, 5.0f, 1.0f); + field_0xD44++; + } + + } break; + case 8: { + cLib::addCalcPos2(&field_0x20F8, headTranslation, 0.2f, 20.0f); + cLib::addCalcPos2(&field_0x20EC, v2, 0.5f, 20.0f); + pCamera->setEventCamView(field_0x20F8, field_0x20EC, 20.0f, 0.0f); + if (mAnmChrs[ANMIDX_Body].isStop()) { + field_0xD44++; + } + } break; + case 9: { + cLib::addCalcPos2(&field_0x20F8, headTranslation, 0.2f, 20.0f); + cLib::addCalcPos2(&field_0x20EC, v2, 0.5f, 20.0f); + pCamera->setEventCamView(field_0x20F8, field_0x20EC, 20.0f, 0.0f); + if (sLib::chase(&field_0x8B0.x, 0.0f, 0.2f)) { + field_0xD46 = 40; + field_0xD44++; + } + } break; + case 10: { + if (field_0xD46 <= 0) { + field_0xD44++; + } + } break; + case 11: { + if (sLib::chase(&dLightEnv_c::GetInstance().GetOverrideSpf().mRatio, 0.0f, 0.012f)) { + DungeonflagManager::sInstance->setFlag(3); + pCamera->fn_8019EA70(false); + EventManager::finishEvent(this, nullptr); + deleteRequest(); + } + + } break; + } +} +void dAcGirahimu_c::finalizeState_Death() { + mCyl2.OnTgSet(); + field_0xD44 = 0; +} + +void dAcGirahimu_c::initializeState_DeathMiniGame() { + mCollider.ClrTg(); + mCallback.field_0x2D4 = 1.0f; + field_0xD44 = 0; + field_0x1834 = 0.0f; + mSpeed = 0.0f; + field_0x1830 = 200.0f; + mCallback.field_0x088 = false; + fn_226_D5A0(); + setAnm("DamageHit", ANM_DamageHit, nullptr, m3d::PLAY_MODE_4, 5.0f, 1.0f); + field_0xD6C = 0; +} +void dAcGirahimu_c::executeState_DeathMiniGame() { + if (field_0xD44 == 0 && mAnmChrs[ANMIDX_Body].isStop()) { + setAnm("DamageWait", ANM_EndE, nullptr, m3d::PLAY_MODE_4, 5.0f, 1.0f); + field_0xD44++; + } +} +void dAcGirahimu_c::finalizeState_DeathMiniGame() { + mCyl2.OnTgSet(); + field_0xD44 = 0; +} + +bool dAcGirahimu_c::createHeap() { + return dAcGirahimuBase_c::createHeap(); +} + +int dAcGirahimu_c::actorCreate() { + CREATE_ALLOCATOR(dAcGirahimu_c); + if (!MinigameManager::GetInstance()->checkInBossRush()) { + if (DungeonflagManager::sInstance->getCounterOrFlag(3, 8)) { + return FAILED; + } + } + + dLightEnv_c::GetInstance().GetOverrideSpf().mRatio = 1.0f; + createCollision(); + mHealth = 120; + createBase(fProfile::LYT_BOSS_CAPTION, this, 0, OTHER); + changeState(StateID_Wait); + + return SUCCEEDED; +} + +int dAcGirahimu_c::doDelete() { + return SUCCEEDED; +} + +void dAcGirahimu_c::vt_0x1DC() { + dAcGirahimuBase_c::vt_0x1DC(); + + if (!getStateID().isEqual(StateID_Death) && !getStateID().isEqual(StateID_DeathMiniGame)) { + if (field_0xD70 && getHealth() == 0) { + if (MinigameManager::GetInstance()->checkInBossRush()) { + changeState(StateID_DeathMiniGame); + } else { + changeState(StateID_Death); + } + return; + } + } + + if (field_0xD70) { + mCyl2.SetTgType(~AT_TYPE_COMMON0); + mCallback.field_0x04E = false; + mCyl0.OnTgSet(); + mSph0.ClrTgSet(); + mCyl2.OnTgSet(); + } else { + mCyl2.SetTgType(~(AT_TYPE_COMMON0 | AT_TYPE_SWORD)); + } +} + +int dAcGirahimu_c::actorExecute() { + if (MinigameManager::GetInstance()->checkInBossRush()) { + dTgSwordBattleGame_c *pSwordBattleGame = + static_cast(fManager_c::searchBaseByProfName(fProfile::TAG_SWORD_BATTLE_GAME)); + if (!pSwordBattleGame->checkFightStarted()) { + mAcch.CrrPos(*dBgS::GetInstance()); + for (int i = 0; i < 5; ++i) { + mAnmChrs[i].play(); + } + mMdlBody.play(); + + if (pSoundIface != nullptr) { + pSoundIface->setFrame(mAnmChrs[ANMIDX_Body].getFrame()); + } + mWorldMtx.transS(mPosition.x, mPosition.y + getYOffset(), mPosition.z); + mWorldMtx.ZXYrotM(mRotation); + mWorldMtx.scaleM(field_0x8B0.x, field_0x8B0.y, field_0x8B0.z); + mMdlBody.setLocalMtx(mWorldMtx); + mMdlBody.calc(false); + return SUCCEEDED; + } + } else { + if (!mbShownBossCaption) { + mbShownBossCaption = true; + const char *label2 = "BOSS_00_caption"; + const char *label = "BOSS_00"; + dLytBossCaption_c::GetInstance()->show(label, label2); + mBossCaptionTimer = 100; + } + if (mBossCaptionTimer == 1) { + dLytBossCaption_c::GetInstance()->unk_inline(); + } + } + + bool b0 = false; + if (!vt_0x218()) { + b0 = true; + } + vt_0x1DC(); + fn_227_3DF0(); + field_0xD81 = false; + executeState(); + fn_227_3DB0(); + if (field_0xD7C) { + mAngle.y = mRotation.y; + } + + mCallback.field_0x0A8.set(1.0f, 0.0f, 0.0f); + mCallback.field_0x0A8.rotY(mRotation.y); + mCallback.field_0x084 = mRotation.y; + mCallback.fn_226_3130(); + + mSwordLink.get()->setAngleCopy(mRotation); + mSwordLink.get()->setGhirahimPosition(mPosition); + + mVec3_c scale = field_0x8B0; + if (scale.x >= 1.0f) { + scale.x = 1.0f; + } + if (scale.y >= 1.0f) { + scale.y = 1.0f; + } + if (scale.z >= 1.0f) { + scale.z = 1.0f; + } + field_0x8BC.set(scale); + sLib::addCalcScaledDiff(&mSpeed, field_0x1834, field_0x1858, 100.0f); + mVec3_c v0(0.0f, 0.0f, 0.0f); + cLib::chasePos(field_0x185C, v0, 10.0f); + if (field_0xD7D) { + calcVelocity(); + } else { + mVelocity.y += mAcceleration; + } + + mPosition += field_0x185C; + if (mPosition.y <= 0) { + mPosition.y = 0.0f; + } + mPosition += mVelocity; + mPosition += mStts.GetCcMove(); + + mAcch.CrrPos(*dBgS::GetInstance()); + + for (int i = 0; i < 5; ++i) { + mAnmChrs[i].play(); + } + mMdlBody.play(); + + if (pSoundIface != nullptr) { + pSoundIface->setFrame(mAnmChrs[ANMIDX_Body].getFrame()); + } + mWorldMtx.transS(mPosition.x, mPosition.y + getYOffset(), mPosition.z); + mWorldMtx.ZXYrotM(mRotation); + mWorldMtx.scaleM(field_0x8B0.x, field_0x8B0.y, field_0x8B0.z); + mMdlBody.setLocalMtx(mWorldMtx); + mMdlBody.calc(false); + fn_226_D090(); + fn_226_D2D0(); + mAnmTexPatWink.play(); + fn_226_9690(); + fn_226_9620(); + fn_226_D2C0(); + fn_256_9C90(); + if (--field_0xD5A <= 0) { + field_0xD5A = 0; + } + + if (mCallback.field_0x04E || getStateID().isEqual(StateID_Catch) || field_0xD71) { + field_0xD5A = 6; + } else if (field_0xD5A >= 5) { + mEmitter.setFading(5); + } + + if (mEmitter.isFadeComplete()) { + mEmitter.remove(true); + } + + if (field_0xD5A > 0) { + mMtx_c middleR1Transform; + mMdlBody.getNodeWorldMtx(mMdlBody.getResMdl().GetResNode("MiddleR1").GetID(), middleR1Transform); + mEmitter.holdEffect(PARTICLE_RESOURCE_ID_MAPPING_973_, middleR1Transform, nullptr, nullptr); + } + + setSwordLinkTransform(); + fn_256_99F0(); + field_0xD74 = 0; + executeEarringTransform(); + + bool b2 = false; + for (int i = 0; i < 5; ++i) { + if (mKnives[i].isLinked() && mKnives[i].get()->field_0x78D) { + b2 = true; + } + } + + int i0 = 0; + bool playerSound = false; + for (int i = 0; i < 5; ++i) { + if (!mKnives[i].isLinked()) { + break; + } + + if (b2) { + mKnives[i].get()->mSph1.ClrAtSet(); + } + + if (mKnives[i].get()->isWaiting() && mKnives[i].get()->field_0x792) { + i0++; + } + + if (mKnives[i].get()->isCirclingPlayer()) { + playerSound = true; + } + + mKnives[i].get()->field_0x6F0.set(mRotation.x, mRotation.y, mRotation.z); + mKnives[i].get()->field_0x6D8.set(mPosition); + } + + if (i0 > 0) { + if (playerSound) { + dAcPy_c::GetLinkM()->holdSound(SE_OGhKf_GROUP_FLY_LV); + } else { + holdSound(SE_OGhKf_GROUP_FLY_LV); + } + } + + if (b0 && vt_0x218()) { + dSndBgmMgr_c::GetInstance()->fn_80372D70(0); + } + + return true; +} + +void dAcGirahimu_c::initializeState_CatchDamage() { + mCallback.field_0x2D4 = 0.5f; + fn_226_D070(); + setAnm("Damage", ANM_Damage, nullptr, m3d::PLAY_MODE_4, 5.0f, 0.5f); + field_0xD6C = 1; + mCallback.field_0x088 = false; + field_0xD4E++; + mSpeed = 0.0f; + field_0x1834 = 0.0f; + field_0xD66 = 0; +} +void dAcGirahimu_c::executeState_CatchDamage() { + if (field_0xD4E >= 3 || getHealth() <= 60) { + field_0xD81 = true; + } + + mCallback.field_0x04E = false; + sLib::chaseAngle(mRotation.y.ref(), field_0x183E, 0x500); + if (field_0xD81) { + mCyl2.ClrTgSet(); + mSph0.ClrTgSet(); + fn_226_CC40(); + } + + if (mAnmChrs[ANMIDX_Body].isStop()) { + field_0xD58 = 60; + if (getHealth() > 60) { + changeState(StateID_Wait); + } else { + changeState(StateID_BackStep); + } + field_0xD4E = 0; + } +} +void dAcGirahimu_c::finalizeState_CatchDamage() { + field_0xD66 = 0; + field_0xD58 = 0; + mCallback.field_0x2BC = 0; + field_0xD81 = false; +} + +void dAcGirahimu_c::fn_227_3DB0() { + if (field_0xD6C == 6 || field_0xD6C == 8) { + field_0xD81 = true; + } + if (field_0xD6C == 6) { + mCyl2.SetTgType(~(AT_TYPE_COMMON0 | AT_TYPE_SWORD)); + } +} + +void dAcGirahimu_c::fn_227_3DF0() { + if (field_0xD6C == 0) { + return; + } + + if (field_0xD6C == 6 || field_0xD6C == 8) { + field_0xD81 = true; + } + + if (vt_0x1E0()) { + return; + } + + switch (field_0xD6C) { + case 1: vt_0x1E4(); break; + case 2: vt_0x1E8(); break; + case 3: fn_226_C060(); break; + case 4: fn_226_C1C0(); break; + case 5: fn_226_C320(); break; + case 6: fn_227_1EA0(); break; + case 7: vt_0x1EC(); break; + case 8: vt_0x1F0(); break; + } + + if (mMdlSwordA.mCcList.findAtHit() != nullptr) { + field_0xD80 = true; + } else if (mMdlSwordB.mCcList.findAtHit() != nullptr) { + field_0xD80 = true; + } +} + +void dAcGirahimu_c::vt_0x220() { + if (field_0xD70) { + for (int i = 0; i < 5; ++i) { + if (mKnives[i].get() != nullptr && mKnives[i].get()->isWaiting()) { + changeState(StateID_KnifeAttack); + return; + } + } + + mVec3_c v0 = mPosition - mStartingPos; + mVec3_c v1(0.0f, 0.0f, 1.0f); + v1.rotY(mRotation.y); + + if (field_0x1868 >= 1500.0f && v0.dot(v1) < 0.0f && field_0x1838 < 500.0f) { + field_0x8DC = 0; + changeState(StateID_HomeWarp); + return; + } + + if (getStateID().isEqual(StateID_BackStep)) { + determineNextMove(); + } else if (field_0xD80) { + changeState(StateID_BackWalk); + } else { + changeState(StateID_G_SwordWait); + } + } else if (getHealth() > 60) { + changeState(StateID_Wait); + } else if (getStateID().isEqual(StateID_BackStep)) { + changeState(StateID_G_SwordDemo); + } else { + changeState(StateID_BackStep); + } +} + +bool dAcGirahimu_c::vt_0x218() { + const f32 unused[] = {200.0f, 20.0f, 200.0f}; + return field_0xD70 && getHealth() <= 120; +} diff --git a/src/REL/d/a/b/d_a_b_girahimu2.cpp b/src/REL/d/a/b/d_a_b_girahimu2.cpp index 260d84c92..dc54ba950 100644 --- a/src/REL/d/a/b/d_a_b_girahimu2.cpp +++ b/src/REL/d/a/b/d_a_b_girahimu2.cpp @@ -1,3 +1,1649 @@ #include "d/a/b/d_a_b_girahimu2.h" +#include "c/c_lib.h" +#include "c/c_math.h" +#include "common.h" +#include "d/a/b/d_a_b_girahimu_base.h" +#include "d/a/d_a_player.h" +#include "d/a/obj/d_a_obj_base.h" +#include "d/a/obj/d_a_obj_girahimu_knife.h" +#include "d/a/obj/d_a_obj_girahimu_sword_link.h" +#include "d/col/c/c_cc_d.h" +#include "d/d_camera.h" +#include "d/d_sc_game.h" +#include "d/d_stage_mgr.h" +#include "d/flag/dungeonflag_manager.h" +#include "d/flag/sceneflag_manager.h" +#include "d/lyt/d_lyt_boss_caption.h" +#include "d/snd/d_snd_bgm_mgr.h" +#include "d/snd/d_snd_wzsound.h" +#include "d/t/d_t_sword_battle_game.h" +#include "f/f_base.h" +#include "f/f_manager.h" +#include "f/f_profile_name.h" +#include "m/m3d/m_fanm.h" +#include "m/m_angle.h" +#include "m/m_mtx.h" +#include "m/m_vec.h" +#include "nw4r/g3d/res/g3d_resmdl.h" +#include "s/s_Math.h" +#include "s/s_State.hpp" +#include "toBeSorted/d_emitter.h" +#include "toBeSorted/event_manager.h" +#include "toBeSorted/minigame_mgr.h" + +STATE_DEFINE(dAcGirahimu2_c, CreateSpinKnife); +STATE_DEFINE(dAcGirahimu2_c, WaitKnifeAttack); +STATE_DEFINE(dAcGirahimu2_c, KnifeAttack); +STATE_DEFINE(dAcGirahimu2_c, KnifePreAttack); +STATE_VIRTUAL_DEFINE(dAcGirahimu2_c, CatchDamage); +STATE_VIRTUAL_DEFINE(dAcGirahimu2_c, Walk); +STATE_VIRTUAL_DEFINE(dAcGirahimu2_c, Counter); +STATE_DEFINE(dAcGirahimu2_c, G_SwordDemo); +STATE_DEFINE(dAcGirahimu2_c, G_SwordWait); +STATE_DEFINE(dAcGirahimu2_c, G_SwordPiyori); +STATE_DEFINE(dAcGirahimu2_c, Death); +STATE_DEFINE(dAcGirahimu2_c, DeathMiniGame); +STATE_DEFINE(dAcGirahimu2_c, UpWarp); +STATE_DEFINE(dAcGirahimu2_c, UpAttack); +STATE_DEFINE(dAcGirahimu2_c, CreateKnife); +STATE_DEFINE(dAcGirahimu2_c, ComeOn); +STATE_DEFINE(dAcGirahimu2_c, ComeOnGuard); +STATE_DEFINE(dAcGirahimu2_c, GuardJustCounter); +STATE_DEFINE(dAcGirahimu2_c, G_SwordDamage); // Non Virtual Define?? +STATE_DEFINE(dAcGirahimu2_c, TwoSwordAttack); +STATE_DEFINE(dAcGirahimu2_c, HitAction); +STATE_VIRTUAL_DEFINE(dAcGirahimu2_c, Catch); + SPECIAL_ACTOR_PROFILE(B_GIRAHIMU2, dAcGirahimu2_c, fProfile::B_GIRAHIMU2, 0x10F, 0, 0); + +struct dAcGirahimu2_HIO_c { + f32 field_0x00; + f32 field_0x04; + f32 field_0x08; + f32 field_0x0C; + f32 field_0x10; + f32 field_0x14; + f32 field_0x18; + f32 field_0x1C; + s16 field_0x20; + s16 field_0x22; + s16 field_0x24; + s16 field_0x26; + + static const dAcGirahimu2_HIO_c sHIO; +}; + +const dAcGirahimu2_HIO_c dAcGirahimu2_HIO_c::sHIO = {1.05f, 1.05f, -5.0f, -2.0f, 15.0f, 150.0f, + 3.0f, 40.0f, 1, 0x5DC, 0x14, 0x1000}; + +void dAcGirahimu2_c::initializeState_G_SwordWait() { + field_0xD8C = true; + field_0xD6C = 6; + mCyl2.OnTgSet(); + field_0x1834 = 0.0f; + mSpeed = 0.0f; + mCallback.field_0x088 = true; + field_0xD46 = 30; + if (vt_0x218()) { + field_0x186C = 60.0f; + field_0xD46 = 5; + } + if (cM::rndInt(100) > 50) { + field_0xD7E = true; + } else { + field_0xD7E = false; + } +} +void dAcGirahimu2_c::executeState_G_SwordWait() { + sLib::chase(&field_0x8B0.x, 1.05f, 0.2f); + if (checkObjectProperty(OBJ_PROP_0x2)) { + return; + } + + mVec3_c distFromHome = mPosition - mStartingPos; + mVec3_c v0(0.0f, 0.0f, 1.0f); + v0.rotY(mRotation.y); + if (field_0x1868 >= 1500.0f && distFromHome.dot(v0) < 0.0f && field_0x1838 < 500.0f) { + changeState(StateID_HomeWarp); + return; + } + + if (mAng(field_0x183E - mRotation.y).abs() < 0x3000) { + if (field_0x1838 <= 400.0f && field_0xD7E) { + field_0xD82 = true; + vt_0x1F8(); + changeState(StateID_FrontAttack); + return; + } + if (field_0xD46 <= 0) { + field_0xD46 = 60; + if (fn_228_5110()) { + return; + } + } + } + + if (field_0x1838 <= 400.0f && fn_228_5110()) { + return; + } + + mAng diff = field_0x183E - mRotation.y; + if (mAnmIDBody != ANM_WaitA && mRotation.y == field_0x183E && field_0x1838 <= 250.f) { + field_0x1834 = 0.0f; + mSpeed = 0.0f; + setAnm("WaitBtD", ANM_WaitBtC, nullptr, m3d::PLAY_MODE_4, 15.0f, 1.0f); + } else if (field_0x1838 >= 300.0f) { + if (mAnmIDBody != ANM_Walk) { + setAnm("WalkBt", ANM_Walk, nullptr, m3d::PLAY_MODE_4, 15.0f, 1.2f); + } + } else if (mAng(diff).abs() > 0x4000) { + changeState(StateID_BackWalk); + return; + } else { + turn(field_0x183E); + } + + sLib::chaseAngle(mRotation.y.ref(), field_0x183E, 0x500); + fn_226_B960(6.0f); +} +void dAcGirahimu2_c::finalizeState_G_SwordWait() {} + +void dAcGirahimu2_c::initializeState_CreateKnife() { + field_0x1834 = 0.0f; + mSpeed = 0.0f; + setAnm("WaitBtD", ANM_WaitBtC, nullptr, m3d::PLAY_MODE_4, 15.0f, 1.0f); + field_0xD46 = 15; + mCallback.field_0x088 = true; + mCyl2.SetTgShieldType(~AT_TYPE_DAMAGE); + field_0xD6C = 6; + field_0x2220 = 0; + field_0xD44 = 0; +} +void dAcGirahimu2_c::executeState_CreateKnife() { + mCyl0.SetR(150.0f); + switch (field_0xD44) { + case 0: { + if (field_0xD46 <= 0) { + if (!turn(field_0x183E)) { + vt_0x228(); + } + field_0xD6C = 0; + if (field_0x1838 <= 1000.0f) { + setAnm("CallWalk", ANM_Call, nullptr, m3d::PLAY_MODE_4, 5.0f, 1.0f); + setAnmHip("Walk", ANM_Walk, m3d::PLAY_MODE_2, 15.0f, 1.2f); + field_0x1834 = -5.0f; + } else { + mSpeed = 0.0f; + field_0x1834 = 0.0f; + setAnm("Call", ANM_Call, nullptr, m3d::PLAY_MODE_4, 5.0f, 1.5f); + } + field_0xD44++; + } + } break; + case 1: { + if (mAnmChrs[ANMIDX_Body].checkFrame(15.0f)) { + int rnd = cM::rndInt(100); + if (rnd >= 60) { + startSound(SE_OGhKf_GROUP_APPEAR); + field_0x2214 = 2; + fn_228_4550(0, 5); + fn_228_4550(5, 10); + fn_228_4550(10, 15); + } else if (rnd >= 30) { + field_0x2214 = 3; + fn_228_47F0(false); + } else { + field_0x2214 = 3; + fn_228_47F0(true); + } + } + if (mAnmChrs[ANMIDX_Body].isStop()) { + changeState(StateID_KnifePreAttack); + return; + } + } break; + } + + sLib::chaseAngle(mRotation.y.ref(), field_0x183E, 0x500); + fn_226_B960(6.0f); +} +void dAcGirahimu2_c::finalizeState_CreateKnife() {} + +void dAcGirahimu2_c::initializeState_KnifePreAttack() { + mCallback.field_0x088 = true; + fn_226_D070(); + if (field_0x1838 <= 1000.0f) { + setAnm("CallWalk", ANM_Call, nullptr, m3d::PLAY_MODE_4, 5.0f, 1.5f); + setAnmHip("Walk", ANM_Walk, m3d::PLAY_MODE_2, 15.0f, 1.2f); + field_0x1834 = -5.0f; + } else { + mSpeed = 0.0f; + field_0x1834 = 0.0f; + setAnm("CallWalk", ANM_Call, m3d::PLAY_MODE_4, 5.0f, 1.5f); + } + + field_0xD44 = 0; + field_0xD6C = 6; + if (field_0x2218 > 10) { + field_0x2218 = 0; + } + + for (int i = field_0x2218; i < field_0x2218 + 5; ++i) { + if (mKnives[i].isLinked() && mKnives[i].get()->isWaiting()) { + return; + } + } + field_0x2218 += 5; + if (field_0x2218 > 10) { + field_0x2218 = 0; + } + for (int i = field_0x2218; i < field_0x2218 + 5; ++i) { + if (mKnives[i].isLinked() && mKnives[i].get()->isWaiting()) { + return; + } + } + field_0x2218 += 5; + if (field_0x2218 > 10) { + field_0x2218 = 0; + } + field_0xD44 = 0; +} +void dAcGirahimu2_c::executeState_KnifePreAttack() { + if (mAnmIDHip != ANM_Walk && field_0x1838 <= 1000.0f) { + setAnmHip("Walk", ANM_Walk, m3d::PLAY_MODE_2, 15.0f, 1.2f); + field_0x1834 = -5.0f; + } + if (mAnmIDHip != ANM_Walk) { + fn_226_A280(field_0x183E); + } else { + fn_226_B960(6.0f); + } + + mCyl0.SetR(150.0f); + + bool hasKnife = false; + for (int i = 0; i < 15; ++i) { + if (mKnives[i].isLinked()) { + hasKnife = true; + } + } + + if (!hasKnife) { + vt_0x220(); + return; + } + switch (field_0xD44) { + case 0: { + if (mAnmChrs[ANMIDX_Body].checkFrame(15.0f)) { + if (field_0x2214 == 3) { + for (int i = 0; i < 15; ++i) { + if (mKnives[i].isLinked()) { + mKnives[i].get()->field_0x792 = false; + } + } + } else { + if (field_0x2218 > 10) { + field_0x2218 = 0; + } + for (int i = field_0x2218; i < field_0x2218 + 5; i++) { + if (mKnives[i].isLinked() && mKnives[i].get()->isWaiting()) { + mKnives[i].get()->setWait(); + } + } + } + } + if (mAnmChrs[ANMIDX_Body].checkFrame(16.0f)) { + startSound(SE_OGhKf_GROUP_DIVIDE); + } + if (mAnmIDBody == ANM_Call && mAnmChrs[ANMIDX_Body].isStop()) { + field_0xD46 = 20; + field_0xD44++; + } + } break; + case 1: { + if (mAnmIDHip == ANM_Walk) { + setAnm("WalkBt", ANM_Walk, m3d::PLAY_MODE_2, 15.0f, 1.0f); + } + if (mAnmIDHip != ANM_Walk || field_0xD46 <= 0) { + if (field_0x2214 == 3) { + for (int i = 0; i < 15; ++i) { + if (mKnives[i].isLinked() && !mKnives[i].get()->isWaiting()) { + vt_0x220(); + return; + } + } + } + changeState(StateID_KnifeAttack); + return; + } + } break; + } + + sLib::chaseAngle(mRotation.y.ref(), field_0x183E, 0x500); +} +void dAcGirahimu2_c::finalizeState_KnifePreAttack() {} + +void dAcGirahimu2_c::initializeState_KnifeAttack() { + mSpeed = 0.0f; + field_0x1834 = 0.0f; + field_0xD6C = 6; + setAnm("AttackKnife", ANM_AttackKnife, nullptr, m3d::PLAY_MODE_4, 5.0f, 1.5f); + mCallback.field_0x088 = true; +} +void dAcGirahimu2_c::executeState_KnifeAttack() { + mCyl0.SetR(150.0f); + mSpeed = 0.0f; + field_0x1834 = 0.0f; + sLib::chaseAngle(mRotation.y.ref(), field_0x183E, 0x500); + + if (mAnmChrs[ANMIDX_Body].checkFrame(15.0f)) { + if (field_0x2214 == 3) { + startSound(SE_OGhKf_GROUP_SHOT); + for (int i = 0; i < 15; ++i) { + if (mKnives[i].isLinked()) { + mKnives[i].get()->fn_239_2460(true, true, 40.0f); + } + } + } else { + for (int i = field_0x2218; i < field_0x2218 + 5; ++i) { + if (mKnives[i].isLinked()) { + startSound(SE_OGhKf_SHOT); + mKnives[i].get()->fn_239_2360(true, true, 50.0f); + } + } + field_0x2218 += 5; + } + field_0xD6C = 6; + } + + if (mAnmChrs[ANMIDX_Body].isStop()) { + if (field_0x2214 == 3) { + vt_0x220(); + return; + } + if (field_0x2218 >= 15) { + vt_0x220(); + return; + } + for (int i = 0; i < 15; ++i) { + if (mKnives[i].isLinked() && mKnives[i].get()->isWaiting()) { + changeState(StateID_KnifePreAttack); + return; + } + } + vt_0x220(); + return; + } +} +void dAcGirahimu2_c::finalizeState_KnifeAttack() {} + +void dAcGirahimu2_c::initializeState_HitAction() { + field_0xD80 = false; + field_0x1834 = 0.0f; + mSpeed = 0.0f; + setAnm("WalkBt", ANM_Walk, nullptr, m3d::PLAY_MODE_4, 15.0f, 1.0f); + setAnm("PoseFree", ANM_PoseFree, m3d::PLAY_MODE_4, 5.0f, 1.0f); + field_0xD6C = 9; + mCallback.field_0x088 = false; + field_0x221C = false; +} +void dAcGirahimu2_c::executeState_HitAction() { + mCallback.field_0x088 = false; + sLib::chase(&field_0x8B0.x, 1.05f, 0.2f); + sLib::chaseAngle(mRotation.y.ref(), field_0x183E, 0x500); + fn_226_B960(5.0f); + if (mAnmChrs[ANMIDX_Body].isStop()) { + if (field_0x1838 < 300.0f) { + changeState(StateID_Counter); + } else { + vt_0x220(); + } + } +} +void dAcGirahimu2_c::finalizeState_HitAction() { + mCallback.field_0x088 = true; +} + +void dAcGirahimu2_c::initializeState_ComeOn() { + field_0x221C = false; + field_0x1834 = 0.0f; + mSpeed = 0.0f; + fn_226_D070(); + setAnm("WalkBt", ANM_Walk, nullptr, m3d::PLAY_MODE_4, 15.0f, 1.0f); + setAnm("PoseFree", ANM_PoseFree, m3d::PLAY_MODE_4, 5.0f, 1.0f); + field_0xD6C = 9; + mCallback.field_0x088 = false; + field_0xD46 = 60; +} +void dAcGirahimu2_c::executeState_ComeOn() { + mCallback.field_0x088 = false; + sLib::chase(&field_0x8B0.x, 1.05f, 0.2f); + sLib::chaseAngle(mRotation.y.ref(), field_0x183E, 0x500); + fn_226_B960(5.0f); + if (mAnmChrs[ANMIDX_Body].isStop()) { + if (field_0x1838 <= 400.0f) { + changeState(StateID_Counter); + } else { + vt_0x220(); + } + } +} +void dAcGirahimu2_c::finalizeState_ComeOn() { + mCallback.field_0x088 = true; +} + +void dAcGirahimu2_c::initializeState_ComeOnGuard() { + if (vt_0x218()) { + field_0xD46 = 30; + } else { + field_0xD46 = 50; + } + field_0xD48 = 5; + field_0xD6C = 9; + f32 f0 = 1.0f; + setAnmHead("RarmU", ANM_PoseC, m3d::PLAY_MODE_4, f0, 1.0f); + setAnmBody("RarmU", ANM_PoseC, m3d::PLAY_MODE_4, f0, 1.0f); + if (!fn_228_5E90()) { + setAnmShoulderR("WaitBtD", ANM_WaitBtC, m3d::PLAY_MODE_4, f0, 1.0f); + } else if (!fn_228_5EC0()) { + setAnmShoulderL("WaitBtD", ANM_WaitBtC, m3d::PLAY_MODE_4, f0, 1.0f); + } + setAnmHip("WalkBt", ANM_Walk, m3d::PLAY_MODE_4, 5.0f, 1.0f); + mMdlBody.play(); + if (fn_228_5E90()) { + fn_228_5EC0(); + } +} +void dAcGirahimu2_c::executeState_ComeOnGuard() { + sLib::chase(&field_0x8B0.x, 1.05f, 0.2f); + if (field_0xD46 <= 0) { + if (field_0x1838 <= 350.0f) { + changeState(StateID_Counter); + return; + } else { + vt_0x220(); + return; + } + } else if (field_0x1838 >= 300.0f) { + vt_0x220(); + return; + } + sLib::chaseAngle(mRotation.y.ref(), field_0x183E, 0x500); + fn_226_B960(5.0f); +} +void dAcGirahimu2_c::finalizeState_ComeOnGuard() {} + +void dAcGirahimu2_c::initializeState_G_SwordDemo() { + if ((s32)getFromParams(0, 0xFF) != 0xFF) { + SceneflagManager::sInstance->setFlag(mRoomID, getFromParams(8, 0xFF)); + } + + mCallback.field_0x2D4 = 1.0f; + field_0xD44 = 0; + mCallback.field_0x2D0 = 1.0f; + mCyl0.SetR(30.0f); + mCyl2.OnTgSet(); + mSph0.ClrTgSet(); + mMdlSwordA.mProc.setColor1(mColor(0, 0, 0, 0xFF)); + mMdlSwordA.mProc.setColor2(mColor(0, 0, 0, 0xFF)); + mMdlSwordB.mProc.setColor1(mColor(0, 0, 0, 0xFF)); + mMdlSwordB.mProc.setColor2(mColor(0, 0, 0, 0xFF)); + field_0xD71 = false; + field_0xD70 = true; + mHealth = 600; + field_0x1834 = 0.0f; + mSpeed = 0.0f; + mCallback.field_0x04E = false; + vt_0x1FC(); + if ((s32)getFromParams(0, 0xFF) != 0xFF) { + SceneflagManager::sInstance->unsetFlag(mRoomID, getFromParams(0, 0xFF) + 1); + } +} +void dAcGirahimu2_c::executeState_G_SwordDemo() { + dCamera_c *pCamera = dScGame_c::getCamera(); + mVec3_c v0 = mPosition; + v0.y += 150.f; + mVec3_c v1(0.0f, 200.0f, 300.0f); + v1.rotY(mRotation.y); + v1 += mPosition; + + mMtx_c transform; + mVec3_c headTranslation(0.0f, 0.0f, 0.0f); + nw4r::g3d::ResMdl mdl = mMdlBody.getResMdl(); + mMdlBody.getNodeWorldMtx(mdl.GetResNode("Head").GetID(), transform); + transform.getTranslation(headTranslation); + + mVec3_c handRTranslation; + mMdlBody.getNodeWorldMtx(mdl.GetResNode("HandR").GetID(), transform); + transform.getTranslation(handRTranslation); + + mVec3_c handLTranslation; + mMdlBody.getNodeWorldMtx(mdl.GetResNode("HandL").GetID(), transform); + transform.getTranslation(handLTranslation); + + mVec3_c midpoint = handRTranslation + handLTranslation; + midpoint *= 0.5f; + + switch (field_0xD44) { + case 0: { + { + Event event("GirahimuSwordDemo", 100, 0x100001, nullptr, nullptr); + EventManager::alsoSetAsCurrentEvent(this, &event, nullptr); + } + + if (EventManager::isInEvent(this, "GirahimuSwordDemo")) { + setAnm("WaitA", ANM_WaitA, nullptr, m3d::PLAY_MODE_4, 5.0f, 1.0f); + field_0xD44++; + field_0x20F8.set(headTranslation); + v1.set(0.0f, 0.0f, 150.0f); + v1.rotY(mRotation.y); + v1 += headTranslation; + field_0x20EC.set(v1); + pCamera->setEventCamView(field_0x20F8, field_0x20EC, 70.0f, 0.0f); + field_0xD46 = 30; + } + } break; + case 1: { + mRotation.y = cLib::targetAngleY(mPosition, mStartingPos); + + mVec3_c v(0.0f, 0.0f, 500.0f); + v.rotY(mRotation.y); + v += mPosition; + mAng3_c a(0, mRotation.y + 0x8000, 0); + dAcPy_c::GetLinkM()->setPosRot(&v, &a, false, 0, 0); + + field_0x20F8.set(headTranslation); + v1.set(0.0f, 0.0f, 150.0f); + v1.rotY(mRotation.y); + v1 += headTranslation; + field_0x20EC.set(v1); + + pCamera->setEventCamView(field_0x20F8, field_0x20EC, 35.0f, 0.0f); + if (field_0xD46 <= 0) { + mAnmIDBody = ANM_NONE; + setAnm( + "WaitA", ANM_WaitA, "WaitA", ANM_WaitA, "FaceTongue", ANM_FaceTongue, m3d::PLAY_MODE_4, 15.0f, 1.0f + ); + field_0xD46 = 50; + field_0xD44++; + } + } break; + case 2: { + cLib::addCalcPos2(&field_0x20EC, v1, 0.2f, 100.0f); + cLib::addCalcPos2(&field_0x20F8, midpoint, 0.2f, 10.0f); + if (field_0xD46 <= 0) { + field_0xD44++; + setAnm("TwoSwordAppear", ANM_SwordAppear, nullptr, m3d::PLAY_MODE_4, 5.0f, 1.0f); + } + } break; + case 3: { + cLib::addCalcPos2(&field_0x20EC, v1, 0.2f, 100.0f); + cLib::addCalcPos2(&field_0x20F8, midpoint, 0.2f, 10.0f); + pCamera->setEventCamView(field_0x20F8, field_0x20EC, 35.0f, 0.0f); + if (mAnmChrs[ANMIDX_Body].checkFrame(40.0f)) { + field_0xD7B = true; + field_0x12E0 = true; + field_0xD44++; + } + } break; + case 4: { + sLib::chase(&field_0x12DC, 1.0f, 0.1f); + cLib::addCalcPos2(&field_0x20EC, v1, 0.2f, 100.0f); + cLib::addCalcPos2(&field_0x20F8, midpoint, 0.2f, 10.0f); + pCamera->setEventCamView(field_0x20F8, field_0x20EC, 35.0f, 0.0f); + if (mAnmChrs[ANMIDX_Body].checkFrame(53.0f)) { + field_0xD44++; + } + } break; + case 5: { + v1.set(0.0f, 200.0f, 500.0f); + v1.rotY(mRotation.y); + v1 += mPosition; + cLib::addCalcPos2(&field_0x20F8, midpoint, 0.2f, 10.0f); + cLib::addCalcPos2(&field_0x20EC, v1, 0.2f, 100.0f); + pCamera->setEventCamView(field_0x20F8, field_0x20EC, 35.0f, 0.0f); + if (sLib::chase(&field_0x12DC, 1.0f, 0.1f) && mAnmChrs[ANMIDX_Body].isStop()) { + setAnm("WaitBtC", ANM_WaitBtC, nullptr, m3d::PLAY_MODE_4, 15.0f, 1.0f); + field_0xD46 = 50; + field_0xD44++; + } + } break; + case 6: { + v1.set(0.0f, 200.0f, 500.0f); + v1.rotY(mRotation.y); + v1 += mPosition; + cLib::addCalcPos2(&field_0x20EC, v1, 0.2f, 10.0f); + cLib::addCalcPos2(&field_0x20F8, midpoint, 0.2f, 100.0f); + pCamera->setEventCamView(field_0x20F8, field_0x20EC, 35.0f, 0.0f); + if (field_0xD46 <= 0) { + pCamera->fn_8019EA70(false); + EventManager::finishEvent(this, nullptr); + changeState(StateID_G_SwordWait); + } + } break; + } +} +void dAcGirahimu2_c::finalizeState_G_SwordDemo() { + mCyl2.OnTgSet(); + field_0xD44 = 0; +} + +void dAcGirahimu2_c::initializeState_G_SwordDamage() { + mCyl2.OnTgSet(); + setAnm("DamageHit", ANM_DamageHit, nullptr, m3d::PLAY_MODE_4, 5.0f, 1.0f); + mCallback.field_0x088 = false; + field_0xD44 = 0; + field_0xD62 = 150; + mSpeed = 0.0f; + field_0x1834 = 0.0f; + field_0xD6C = 7; + field_0xD8E = 0; + vt_0x1FC(); +} +void dAcGirahimu2_c::executeState_G_SwordDamage() { + field_0xD8D = true; + if (--field_0xD62 <= 0) { + field_0xD8E = 0; + if (field_0x1838 < 500.0f) { + changeState(StateID_BackStep); + } else { + vt_0x220(); + } + return; + } + + if (mAnmChrs[ANMIDX_Body].isStop()) { + setAnm("DamageWait", ANM_DamageWait, nullptr, m3d::PLAY_MODE_4, 5.0f, 1.0f); + } + + if (mCyl2.ChkTgHit() && mCyl2.GetTgAtHitType() == AT_TYPE_SWORD) { + changeState(StateID_G_SwordPiyori); + } +} +void dAcGirahimu2_c::finalizeState_G_SwordDamage() { + field_0xD8E = 0; +} + +void dAcGirahimu2_c::initializeState_UpWarp() { + setAnm("Jump", ANM_StepStart, nullptr, m3d::PLAY_MODE_4, 2.0f, 1.0f); + setFrame(6.0f); + field_0xD46 = 3; + mCallback.field_0x088 = true; + field_0xD44 = 0; + mSpeed = 0.0f; + field_0x1834 = 0.0f; + field_0xD6C = 0; + field_0xD7E = 0; +} +void dAcGirahimu2_c::executeState_UpWarp() { + mCyl2.ClrTgSet(); + switch (field_0xD44) { + case 0: { + if (mAnmChrs[ANMIDX_Body].isStop() && sLib::chase(&field_0x8B0.x, 0.0f, 0.5f)) { + mMtx_c hipTransform; + nw4r::g3d::ResMdl mdl = mMdlBody.getResMdl(); + mMdlBody.getNodeWorldMtx(mdl.GetResNode("Hip").GetID(), hipTransform); + mVec3_c hipPos; + hipTransform.multVec(hipPos, hipPos); + hipPos.y += 100.0f; + if (field_0xD70 && getHealth() == 0) { + startSound(SE_Girahim_MAGIC_DISAPPEAR_STAGE); + } else { + startSound(SE_Girahim_MAGIC_DISAPPEAR); + } + dJEffManager_c::spawnEffect( + PARTICLE_RESOURCE_ID_MAPPING_684_, hipPos, nullptr, nullptr, nullptr, nullptr, 0, 0 + ); + field_0xD44++; + + field_0x8B0.set(0.0f, 0.0f, 0.0f); + mVec3_c position = dAcPy_c::GetLink()->mPosition; + mVec3_c adj(0.0f, 600.0f, 50.0f); + adj.rotY(dAcPy_c::GetLink()->mRotation.y); + position += adj; + setPosition(position); + setOldPosition(position); + mRotation.y = cLib::targetAngleY(mPosition, dAcPy_c::GetLink()->mPosition); + field_0xD46 = 40; + setAnm("PoseUpper", ANM_PoseUpper, nullptr, m3d::PLAY_MODE_4, 15.0f, 1.0f); + } + } break; + case 1: { + if (dAcPy_c::GetLink()->checkCurrentAction(98 /* BACKFLIP */) || + dAcPy_c::GetLink()->checkFlags0x350(0x80000)) { + if (!field_0xD7E) { + field_0x1840.set(dAcPy_c::GetLink()->mPosition); + field_0xD7E = true; + } + } + mVelocity.set(0.0f, 0.0f, 0.0f); + if (field_0xD46 <= 0) { + field_0x8B0.set(0.0f, 1.05f, 1.05f); + field_0xD44++; + changeState(StateID_UpAttack); + return; + } + } break; + } + sLib::chaseAngle(mRotation.y.ref(), field_0x183E, 0x500); +} +void dAcGirahimu2_c::finalizeState_UpWarp() { + field_0xD44 = 0; + mCyl2.OnTgSet(); +} + +void dAcGirahimu2_c::initializeState_UpAttack() { + field_0xD44 = 0; + setAnm("PoseUpper", ANM_PoseUpper, nullptr, m3d::PLAY_MODE_4, 5.0f, 1.0f); + field_0xD7D = false; + mVec3_c pos = dAcPy_c::GetLink()->mPosition; + if (field_0xD7E) { + pos.set(field_0x1840); + } + mVec3_c adj(0.0f, 600.0f, 0.0f); + adj.rotY(dAcPy_c::GetLink()->mRotation.y); + pos += adj; + setPosition(pos); + setOldPosition(pos); + mRotation.y = cLib::targetAngleY(mPosition, dAcPy_c::GetLink()->mPosition); + field_0xD6C = 6; + mCyl2.ClrTgSet(); + mSph0.ClrTgSet(); + mCallback.field_0x04E = false; + mCallback.field_0x088 = false; + field_0xD46 = 2; + mAcceleration = -8.0f; + mSpeed = 0.0f; + field_0x1834 = 0.0f; + mMdlSwordA.fn_8006B7A0(0x210000); + mMdlSwordB.fn_8006B7A0(0x210000); +} +void dAcGirahimu2_c::executeState_UpAttack() { + field_0xD8D = true; + sLib::chase(&field_0x8B0.x, 1.05f, 0.2f); + switch (field_0xD44) { + case 0: { + if (field_0xD46 > 0) { + mRotation.y = cLib::targetAngleY(mPosition, dAcPy_c::GetLink()->mPosition); + } + if (dAcPy_c::GetLink()->checkCurrentAction(98 /* BACKFLIP */) || + dAcPy_c::GetLink()->checkFlags0x350(0x80000) || dAcPy_c::GetLink()->mSpeed >= 24.0f) { + field_0xD7E = true; + } + if (!field_0xD7E) { + sLib::chase(&mPosition.x, dAcPy_c::GetLink()->mPosition.x, 20.0f); + sLib::chase(&mPosition.z, dAcPy_c::GetLink()->mPosition.z, 20.0f); + } + mMdlSwordA.enable(); + mMdlSwordB.enable(); + mCyl2.ClrTgSet(); + mSph0.ClrTgSet(); + field_0xD7D = false; + if (mAcch.ChkGndHit()) { + mVelocity.set(0.0f, 0.0f, 0.0f); + setAnm("PoseUpperAttack", ANM_PoseUpperAttack, nullptr, m3d::PLAY_MODE_4, 1.0f, 1.0f); + field_0xD6C = 5; + field_0xD44++; + } + } break; + case 1: { + if (mAnmChrs[ANMIDX_Body].checkFrame(40.0f)) { + mCallback.field_0x088 = true; + } + + if (mAnmChrs[ANMIDX_Body].getFrame() >= 60.0f) { + field_0xD6C = 6; + mCyl2.OnTgSet(); + mCyl0.OnTgSet(); + } else { + mCyl2.OnTgSet(); + mCyl0.ClrTgSet(); + } + mMdlSwordA.disable(); + mMdlSwordB.disable(); + if (mAnmChrs[ANMIDX_Body].isStop()) { + vt_0x220(); + } + } break; + } +} +void dAcGirahimu2_c::finalizeState_UpAttack() { + mMdlSwordA.disable(); + mMdlSwordB.disable(); + mAcceleration = -6.0f; + field_0xD44 = 0; + mSpeed = 0.0f; + field_0x1834 = 0.0f; + field_0xD7C = true; + mMdlSwordA.fn_8006B7A0(0x10000); + mMdlSwordB.fn_8006B7A0(0x10000); +} + +void dAcGirahimu2_c::initializeState_Counter() { + field_0xD7E = false; + if (mAnmIDShoulderL == ANM_PoseL && mAnmIDShoulderR == ANM_PoseR) { + setAnm("PoseLRAttack", ANM_PoseLRAttack, nullptr, m3d::PLAY_MODE_4, 5.0f, 1.0f); + } else if (mAnmIDShoulderL == ANM_PoseC2 && mAnmIDShoulderR == ANM_PoseC) { + setAnm("PoseUDAttack", ANM_PoseUDAttack, nullptr, m3d::PLAY_MODE_4, 5.0f, 1.0f); + } else if (mAnmIDShoulderL == ANM_PoseL && mAnmIDShoulderR == ANM_PoseC) { + setAnm("PoseLUAttack", ANM_PoseLUAttack, nullptr, m3d::PLAY_MODE_4, 5.0f, 1.0f); + } else if (mAnmIDShoulderL == ANM_PoseC && mAnmIDShoulderR == ANM_PoseR) { + setAnm("PoseRUAttack", ANM_PoseRUAttack, nullptr, m3d::PLAY_MODE_4, 5.0f, 1.0f); + } else { + field_0xD6C = 6; + int rnd = cM::rndInt(100); + if (rnd >= 75) { + setAnm("PoseLRAttack", ANM_PoseLRAttack, nullptr, m3d::PLAY_MODE_4, 5.0f, 1.0f); + + } else if (rnd >= 50) { + setAnm("PoseUDAttack", ANM_PoseUDAttack, nullptr, m3d::PLAY_MODE_4, 5.0f, 1.0f); + + } else if (rnd >= 25) { + setAnm("PoseLUAttack", ANM_PoseLUAttack, nullptr, m3d::PLAY_MODE_4, 5.0f, 1.0f); + + } else { + setAnm("PoseRUAttack", ANM_PoseRUAttack, nullptr, m3d::PLAY_MODE_4, 5.0f, 1.0f); + } + } + field_0x1834 = 0.0f; + mSpeed = 0.0f; + mCallback.field_0x088 = true; +} +void dAcGirahimu2_c::executeState_Counter() { + sLib::chase(&field_0x8B0.x, 1.05f, 0.2f); + sLib::chaseAngle(mRotation.y.ref(), field_0x183E, 0x500); + if (mAnmChrs[ANMIDX_Body].getFrame() >= 16.0f && mAnmChrs[ANMIDX_Body].getFrame() <= 20.0f) { + mMdlSwordA.enable(); + mMdlSwordB.enable(); + } else { + mMdlSwordA.disable(); + mMdlSwordB.disable(); + } + + if (mAnmChrs[ANMIDX_Body].getFrame() <= 20.0f) { + field_0xD6C = 5; + } else { + field_0xD6C = 6; + } + if (mAnmChrs[ANMIDX_Body].isStop()) { + vt_0x220(); + } +} +void dAcGirahimu2_c::finalizeState_Counter() { + mMdlSwordA.disable(); + mMdlSwordB.disable(); + mCyl2.OnTgSet(); + field_0xD82 = false; +} + +void dAcGirahimu2_c::initializeState_GuardJustCounter() {} +void dAcGirahimu2_c::executeState_GuardJustCounter() {} +void dAcGirahimu2_c::finalizeState_GuardJustCounter() {} + +void dAcGirahimu2_c::initializeState_TwoSwordAttack() {} +void dAcGirahimu2_c::executeState_TwoSwordAttack() {} +void dAcGirahimu2_c::finalizeState_TwoSwordAttack() {} + +void dAcGirahimu2_c::initializeState_G_SwordPiyori() {} +void dAcGirahimu2_c::executeState_G_SwordPiyori() {} +void dAcGirahimu2_c::finalizeState_G_SwordPiyori() {} + +void dAcGirahimu2_c::initializeState_Death() {} +void dAcGirahimu2_c::executeState_Death() { + mCallback.field_0x088 = false; + dCamera_c *pCamera = dScGame_c::getCamera(); + mVec3_c v0(mPosition); + v0.y = 116.0f; + mVec3_c v1(0.0f, 148.0f, 506.0f); + mVec3_c v2(0.0f, 77.0f, 600.0f); + + mMtx_c headTransform; + mVec3_c headTranslation(0.0f, 0.0f, 0.0f); + mMdlBody.getNodeWorldMtx(mMdlBody.getResMdl().GetResNode("Head").GetID(), headTransform); + headTransform.getTranslation(headTranslation); + headTranslation.y = 135.0f; + + switch (field_0xD44) { + case 0: { + { + Event event("GirahimuDeathDemo", 100, 0x100001, nullptr, nullptr); + EventManager::alsoSetAsCurrentEvent(this, &event, nullptr); + } + if (EventManager::isInEvent(this, "GirahimuDeathDemo")) { + // ...Enough of this foolishness... + mFlowMgr.triggerEntryPoint(304, 19, 0, 0); + setAnm("End2A", ANM_EndA, nullptr, m3d::PLAY_MODE_4, 5.0f, 1.0f); + field_0xD44++; + + v0.set(mStartingPos); + v0.y = 163.0f; + field_0x20F8.set(v0); + field_0x20EC.set(v1); + pCamera->setEventCamView(field_0x20F8, field_0x20EC, 20.0f, 0.0f); + } + } break; + case 1: { + setPosition(mStartingPos); + setOldPosition(mStartingPos); + mRotation.y = 0; + mVec3_c v5(0.0f, 0.0f, 1300.0f); + v5.rotY(mRotation.y); + v5 += mPosition; + mAng3_c a0(0, mRotation.y + 0x8000, 0); + dAcPy_c::GetLinkM()->setPosRot(&v5, &a0, false, 0, 0); + field_0xD44++; + v0.set(mStartingPos); + v0.y = 163.0f; + field_0x20F8 = v0; + pCamera->setEventCamView(field_0x20F8, field_0x20EC, 20.0f, 0.0f); + } break; + case 2: { + cLib::addCalcPos2(&field_0x20F8, headTranslation, 0.2f, 200.0f); + field_0x20EC.set(v1); + if (mAnmChrs[ANMIDX_Body].isStop()) { + field_0x20F8.set(109.0f, 124.0f, -637.0f); + field_0x20EC.set(-54.0f, 155.0f, 50.0f); + setAnm("End2BLoop", ANM_EndBLoop, nullptr, m3d::PLAY_MODE_4, 5.0f, 1.0f); + field_0xD44++; + } + pCamera->setEventCamView(field_0x20F8, field_0x20EC, 20.0f, 0.0f); + } break; + case 3: { + mFlowMgr.checkFinished(); + if (mFlowMgr.fn_800C40F0()) { + setAnm("End2C", ANM_EndC, nullptr, m3d::PLAY_MODE_4, 5.0f, 1.0f); + field_0x20F8.set(0.0f, 131.0f, -359.0f); + field_0x20EC.set(0.0f, 153.0f, 92.0f); + dStageMgr_c::GetInstance()->procfn_800192F0(0xDC, mMtx_c::fromIdentity(), 0x82); + field_0xD44++; + } + pCamera->setEventCamView(field_0x20F8, field_0x20EC, 20.0f, 0.0f); + } break; + case 4: { + if (mAnmChrs[ANMIDX_Body].isStop()) { + setAnm("End2DLoop", ANM_EndDLoop, nullptr, m3d::PLAY_MODE_4, 5.0f, 1.0f); + // It shouldn't matter how powerful your sword is, you are still nothing... + mFlowMgr.triggerEntryPoint(304, 20, 0, 0); + field_0xD44++; + } + pCamera->setEventCamView(field_0x20F8, field_0x20EC, 20.0f, 0.0f); + } break; + case 5: { + pCamera->setEventCamView(field_0x20F8, field_0x20EC, 20.0f, 0.0f); + mFlowMgr.checkFinished(); + if (mFlowMgr.fn_800C40F0()) { + // You filthy scamp! You have awakened a wrath that will burn for eons! ... + mFlowMgr.triggerEntryPoint(304, 21, 0, 0); + field_0xD44++; + } + } break; + case 6: { + mFlowMgr.checkFinished(); + if (mFlowMgr.fn_800C40F0()) { + field_0xD44++; + setAnm("End2E", ANM_EndE, nullptr, m3d::PLAY_MODE_4, 5.0f, 1.0f); + } + } break; + case 7: { + if (mAnmChrs[ANMIDX_Body].checkFrame(35.0f)) { + mMdlSwordB.setProcActive(true); + } + cLib::addCalcPos2(&field_0x20F8, headTranslation, 0.2f, 20.0f); + cLib::addCalcPos2(&field_0x20EC, v2, 0.5f, 20.0f); + pCamera->setEventCamView(field_0x20F8, field_0x20EC, 20.0f, 0.0f); + if (mAnmChrs[ANMIDX_Body].getFrame() >= 90.0f) { + sLib::chase(&field_0x8B0.x, 0.0f, 0.2); + } + if (mAnmChrs[ANMIDX_Body].isStop() && field_0x8B0.x <= 0.0f) { + mMdlSwordB.setProcActive(false); + field_0xD44++; + field_0xD46 = 40; + } + + } break; + case 8: { + cLib::addCalcPos2(&field_0x20F8, headTranslation, 0.2f, 20.0f); + cLib::addCalcPos2(&field_0x20EC, v2, 0.5f, 20.0f); + pCamera->setEventCamView(field_0x20F8, field_0x20EC, 20.0f, 0.0f); + if (field_0xD46 <= 0) { + field_0xD44++; + } + } break; + case 9: { + cLib::addCalcPos2(&field_0x20F8, headTranslation, 0.2f, 20.0f); + cLib::addCalcPos2(&field_0x20EC, v2, 0.5f, 20.0f); + pCamera->setEventCamView(field_0x20F8, field_0x20EC, 20.0f, 0.0f); + if (sLib::chase(&dLightEnv_c::GetInstance().GetOverrideSpf().mRatio, 0.0f, 0.012f)) { + DungeonflagManager::sInstance->setFlag(3); + pCamera->fn_8019EA70(false); + EventManager::finishEvent(this, nullptr); + deleteRequest(); + } + } break; + } +} +void dAcGirahimu2_c::finalizeState_Death() {} + +void dAcGirahimu2_c::fn_228_4550(int idxStart, int idxEnd) {} + +void dAcGirahimu2_c::fn_228_47F0(bool) {} + +void dAcGirahimu2_c::initializeState_DeathMiniGame() {} +void dAcGirahimu2_c::executeState_DeathMiniGame() {} +void dAcGirahimu2_c::finalizeState_DeathMiniGame() {} + +void dAcGirahimu2_c::fn_228_4A30() { + mMdlSwordA.mCcList.findAtHit(); +} + +void dAcGirahimu2_c::fn_228_4C20() {} + +bool dAcGirahimu2_c::fn_228_4CD0(s32 cutDir) {} + +void dAcGirahimu2_c::vt_0x220() { + field_0x221D = false; + if (field_0xD70) { + for (int i = 0; i < 15; ++i) { + if (mKnives[i].isLinked() && mKnives[i].get()->isCircleWait()) { + changeState(StateID_KnifeAttack); + return; + } + if (mKnives[i].isLinked() && mKnives[i].get()->isWaiting()) { + changeState(StateID_KnifePreAttack); + return; + } + } + + if (getStateID().isEqual(StateID_BackStep)) { + changeState(StateID_G_SwordWait); + return; + } + + if (field_0xD80 && cM::rndInt(100) > 80) { + changeState(StateID_HitAction); + return; + } else { + changeState(StateID_G_SwordWait); + return; + } + } else if (getHealth() > 0) { + u16 waitingCount = 0; + for (int i = 0; i < 15; ++i) { + if (mKnives[i].isLinked() && mKnives[i].get()->isWaiting()) { + waitingCount++; + } + } + + if (getStateID().isEqual(StateID_BackStep)) { + if (waitingCount != 0) { + changeState(StateID_WaitKnifeAttack); + return; + } else { + changeState(StateID_Walk); + field_0xD46 = 0; + return; + } + } else { + if ((waitingCount == 2 && field_0x220C == 0) || (waitingCount == 4 && field_0x220C == 1)) { + changeState(StateID_Wait); + return; + } + if (getStateID().isEqual(StateID_Catch)) { + field_0xD52 = 20; + changeState(StateID_Wait); + return; + } else { + changeState(StateID_CreateSpinKnife); + } + } + } else { + if (getStateID().isEqual(StateID_BackStep)) { + changeState(StateID_G_SwordDemo); + return; + } else { + changeState(StateID_BackStep); + return; + } + } +} + +bool dAcGirahimu2_c::fn_228_5110() {} + +void dAcGirahimu2_c::fn_228_5400() {} + +void dAcGirahimu2_c::fn_228_5740() {} + +bool dAcGirahimu2_c::fn_228_5770(s32 cutDir) { + bool bRightArm = false; + f32 rate = 1.0f; + switch (cutDir) { + case CUT_DIR_U: + if (mAnmIDShoulderR == ANM_PoseC || mAnmIDShoulderL == ANM_PoseC) { + return false; + } + if (!fn_228_5E90()) { + bRightArm = true; + setAnmShoulderR("RarmU", ANM_PoseC, m3d::PLAY_MODE_4, rate, rate); + mAnmChrs[ANMIDX_ShoulderR].play(); + } else { + setAnmShoulderL("LarmU", ANM_PoseC, m3d::PLAY_MODE_4, rate, rate); + mAnmChrs[ANMIDX_ShoulderL].play(); + } + break; + case CUT_DIR_D: + if (mAnmIDShoulderR == ANM_PoseC2 || mAnmIDShoulderL == ANM_PoseC2) { + return false; + } + if (!fn_228_5E90()) { + bRightArm = true; + setAnmShoulderR("RarmD", ANM_PoseC2, m3d::PLAY_MODE_4, rate, rate); + mAnmChrs[ANMIDX_ShoulderR].play(); + } else { + setAnmShoulderL("LarmD", ANM_PoseC2, m3d::PLAY_MODE_4, rate, rate); + mAnmChrs[ANMIDX_ShoulderL].play(); + } + break; + case CUT_DIR_LU: + if (mAnmIDShoulderR == ANM_PoseC || mAnmIDShoulderL == ANM_PoseC) { + return false; + } + if (mAnmIDShoulderR == ANM_PoseR || mAnmIDShoulderL == ANM_PoseR) { + return false; + } + if (!fn_228_5E90()) { + bRightArm = true; + setAnmShoulderR("RarmR", ANM_PoseR, m3d::PLAY_MODE_4, rate, rate); + mAnmChrs[ANMIDX_ShoulderR].play(); + } else { + setAnmShoulderL("LarmR", ANM_PoseR, m3d::PLAY_MODE_4, rate, rate); + mAnmChrs[ANMIDX_ShoulderL].play(); + } + break; + case CUT_DIR_RD: + if (mAnmIDShoulderR == ANM_PoseC2 || mAnmIDShoulderL == ANM_PoseC2) { + return false; + } + if (mAnmIDShoulderR == ANM_PoseL || mAnmIDShoulderL == ANM_PoseL) { + return false; + } + if (!fn_228_5E90()) { + setAnmShoulderL("RarmL", ANM_PoseL, m3d::PLAY_MODE_4, rate, rate); + mAnmChrs[ANMIDX_ShoulderL].play(); + } else { + setAnmShoulderR("LarmL", ANM_PoseL, m3d::PLAY_MODE_4, rate, rate); + mAnmChrs[ANMIDX_ShoulderR].play(); + } + break; + case CUT_DIR_L: + if (mAnmIDShoulderR == ANM_PoseR || mAnmIDShoulderL == ANM_PoseR) { + return false; + } + if (!fn_228_5E90()) { + bRightArm = true; + setAnmShoulderR("RarmR", ANM_PoseR, m3d::PLAY_MODE_4, rate, rate); + mAnmChrs[ANMIDX_ShoulderR].play(); + } else { + setAnmShoulderL("LarmR", ANM_PoseR, m3d::PLAY_MODE_4, rate, rate); + mAnmChrs[ANMIDX_ShoulderL].play(); + } + break; + case CUT_DIR_R: + if (mAnmIDShoulderR == ANM_PoseL || mAnmIDShoulderL == ANM_PoseL) { + return false; + } + if (!fn_228_5E90()) { + setAnmShoulderL("RarmL", ANM_PoseL, m3d::PLAY_MODE_4, rate, rate); + mAnmChrs[ANMIDX_ShoulderL].play(); + } else { + setAnmShoulderR("LarmL", ANM_PoseL, m3d::PLAY_MODE_4, rate, rate); + mAnmChrs[ANMIDX_ShoulderR].play(); + } + break; + case CUT_DIR_LD: + if (mAnmIDShoulderR == ANM_PoseC2 || mAnmIDShoulderL == ANM_PoseC2) { + return false; + } + if (mAnmIDShoulderR == ANM_PoseR || mAnmIDShoulderL == ANM_PoseR) { + return false; + } + if (!fn_228_5E90()) { + bRightArm = true; + setAnmShoulderR("RarmR", ANM_PoseR, m3d::PLAY_MODE_4, rate, rate); + mAnmChrs[ANMIDX_ShoulderR].play(); + } else { + setAnmShoulderL("LarmR", ANM_PoseR, m3d::PLAY_MODE_4, rate, rate); + mAnmChrs[ANMIDX_ShoulderL].play(); + } + break; + case CUT_DIR_RU: + if (mAnmIDShoulderR == ANM_PoseC || mAnmIDShoulderL == ANM_PoseC) { + return false; + } + if (mAnmIDShoulderR == ANM_PoseL || mAnmIDShoulderL == ANM_PoseL) { + return false; + } + if (!fn_228_5E90()) { + setAnmShoulderL("RarmL", ANM_PoseL, m3d::PLAY_MODE_4, rate, rate); + mAnmChrs[ANMIDX_ShoulderL].play(); + } else { + setAnmShoulderR("LarmL", ANM_PoseL, m3d::PLAY_MODE_4, rate, rate); + mAnmChrs[ANMIDX_ShoulderR].play(); + } + break; + } + + if (bRightArm) { + switch (mAnmIDShoulderR) { + case ANM_PoseC: + mCallback.field_0x245 = true; + mCallback.field_0x23C = mAng(0x1000); + mCallback.field_0x240 = 0; + break; + case ANM_PoseL: + mCallback.field_0x245 = true; + mCallback.field_0x23C = mAng(0x1000); + mCallback.field_0x240 = 0; + break; + case ANM_PoseR: + mCallback.field_0x245 = false; + mCallback.field_0x23C = mAng(0x1000); + mCallback.field_0x240 = 0; + break; + case ANM_PoseC2: + mCallback.field_0x245 = true; + mCallback.field_0x23C = mAng(0x1000); + mCallback.field_0x240 = 0; + break; + } + } else { + switch (mAnmIDShoulderL) { + case ANM_PoseC: + mCallback.field_0x244 = true; + mCallback.field_0x23E = -0x1000; + mCallback.field_0x242 = 0; + break; + case ANM_PoseL: + + mCallback.field_0x244 = false; + mCallback.field_0x23E = -0x1000; + mCallback.field_0x242 = 0; + break; + case ANM_PoseR: + + mCallback.field_0x244 = true; + mCallback.field_0x23E = -0x1000; + mCallback.field_0x242 = 0; + break; + case ANM_PoseC2: + + mCallback.field_0x244 = true; + mCallback.field_0x23E = -0x1000; + mCallback.field_0x242 = 0; + break; + } + } + mMdlBody.play(); + + return true; +} + +bool dAcGirahimu2_c::fn_228_5E90() {} + +bool dAcGirahimu2_c::fn_228_5EC0() {} + +void dAcGirahimu2_c::vt_0x1F4() {} + +void dAcGirahimu2_c::vt_0x1F8() {} + +void dAcGirahimu2_c::vt_0x20C() {} + +bool dAcGirahimu2_c::createHeap() {} + +int dAcGirahimu2_c::actorCreate() { + MinigameManager::GetInstance()->checkInBossRush(); +} + +int dAcGirahimu2_c::doDelete() {} + +void dAcGirahimu2_c::vt_0x1DC() {} + +int dAcGirahimu2_c::actorExecute() { + if (MinigameManager::GetInstance()->checkInBossRush()) { + dTgSwordBattleGame_c *pSwordBattleGame = + static_cast(fManager_c::searchBaseByProfName(fProfile::TAG_SWORD_BATTLE_GAME)); + if (!pSwordBattleGame->checkFightStarted()) { + field_0x88C.set(getPlayerHeadOffset()); + mAcch.CrrPos(*dBgS::GetInstance()); + for (int i = 0; i < 5; ++i) { + mAnmChrs[i].play(); + } + mMdlBody.play(); + if (pSoundIface != nullptr) { + pSoundIface->setFrame(mAnmChrs[ANMIDX_Body].getFrame()); + } + mWorldMtx.transS(mPosition.x, mPosition.y + getYOffset(), mPosition.z); + mWorldMtx.ZXYrotM(mRotation); + mWorldMtx.scaleM(field_0x8B0.x, field_0x8B0.y, field_0x8B0.z); + mMdlBody.setLocalMtx(mWorldMtx); + mMdlBody.calc(false); + return SUCCEEDED; + } + } else { + if (!mbShownBossCaption) { + mbShownBossCaption = true; + const char *label2 = "BOSS_06_caption"; + const char *label = "BOSS_06"; + dLytBossCaption_c::GetInstance()->show(label, label2); + mBossCaptionTimer = 100; + } + if (mBossCaptionTimer == 1) { + dLytBossCaption_c::GetInstance()->unk_inline(); + } + } + + bool b0 = false; + if (!vt_0x218()) { + b0 = true; + } + vt_0x1DC(); + fn_228_80E0(); + field_0xD81 = false; + executeState(); + fn_228_80A0(); + if (field_0xD7C) { + mAngle.y = mRotation.y; + } + + mCallback.field_0x0A8.set(1.0f, 0.0f, 0.0f); + mCallback.field_0x0A8.rotY(mRotation.y); + mCallback.field_0x084 = mRotation.y; + mCallback.fn_226_3130(); + + mSwordLink.get()->setAngleCopy(mRotation); + mSwordLink.get()->setGhirahimPosition(mPosition); + + field_0x8BC.set(field_0x8B0); + sLib::addCalcScaledDiff(&mSpeed, field_0x1834, field_0x1858, 100.0f); + mVec3_c v0(0.0f, 0.0f, 0.0f); + cLib::chasePos(field_0x185C, v0, 10.0f); + if (field_0xD7D) { + calcVelocity(); + } else { + mVelocity.y += mAcceleration; + } + + mPosition += field_0x185C; + mPosition += mVelocity; + mPosition += mStts.GetCcMove(); + + mAcch.CrrPos(*dBgS::GetInstance()); + + mWorldMtx.transS(mPosition.x, mPosition.y, mPosition.z); + mWorldMtx.ZXYrotM(mRotation); + mWorldMtx.scaleM(field_0x8B0.x, field_0x8B0.y, field_0x8B0.z); + mMdlBody.setLocalMtx(mWorldMtx); + for (int i = 0; i < 5; ++i) { + mAnmChrs[i].play(); + } + mMdlBody.play(); + + if (pSoundIface != nullptr) { + pSoundIface->setFrame(mAnmChrs[ANMIDX_Body].getFrame()); + } + mMdlBody.calc(false); + if (!isState(StateID_UpWarp)) { + fn_226_D090(); + } + fn_226_D2D0(); + mAnmTexPatWink.play(); + fn_226_9690(); + fn_226_9620(); + fn_256_9C90(); + if (--field_0xD5A <= 0) { + field_0xD5A = 0; + } + + if (mCallback.field_0x04E || field_0xD71 || getStateID().isEqual(StateID_Catch)) { + field_0xD5A = 6; + } else if (field_0xD5A >= 5) { + mEmitter.setFading(5); + } + + if (mEmitter.isFadeComplete()) { + mEmitter.remove(true); + } + + if (field_0xD5A > 0) { + mMtx_c middleR1Transform; + mMdlBody.getNodeWorldMtx(mMdlBody.getResMdl().GetResNode("MiddleR1").GetID(), middleR1Transform); + mEmitter.holdEffect(PARTICLE_RESOURCE_ID_MAPPING_973_, middleR1Transform, nullptr, nullptr); + } + + setSwordLinkTransform(); + fn_256_99F0(); + field_0xD74 = 0; + executeEarringTransform(); + + int i0 = 0; + bool playerSound0 = false; + bool playerSound1 = false; + for (int i = 0; i < 15; ++i) { + if (!mKnives[i].isLinked()) { + continue; + } + + mKnives[i].get()->field_0x6F0.set(mRotation.x, mRotation.y, mRotation.z); + mKnives[i].get()->field_0x6D8.set(mPosition); + mKnives[i].get()->field_0x6E4.set(mCallback.field_0x260); + + if (mKnives[i].get()->isWaiting()) { + playerSound1 = true; + i0++; + } + + if (mKnives[i].get()->isCirclingPlayer()) { + playerSound0 = true; + } + } + + if (i0 > 0) { + if (playerSound0) { + if (playerSound1) { + dAcPy_c::GetLinkM()->holdSoundWithParams(SE_OGhKf_GROUP_FLY_LV, 1280.0f, i0); + } else { + dAcPy_c::GetLinkM()->holdSoundWithParams(SE_OGhKf_GROUP_FLY_LV, 0.0f, i0); + } + } else { + holdSound(SE_OGhKf_GROUP_FLY_LV); + } + } + if (b0 && vt_0x218()) { + dSndBgmMgr_c::GetInstance()->fn_80372D70(0); + } + + return SUCCEEDED; +} + +void dAcGirahimu2_c::initializeState_Walk() {} +void dAcGirahimu2_c::executeState_Walk() {} +void dAcGirahimu2_c::finalizeState_Walk() {} + +void dAcGirahimu2_c::initializeState_CreateSpinKnife() {} +void dAcGirahimu2_c::executeState_CreateSpinKnife() {} +void dAcGirahimu2_c::finalizeState_CreateSpinKnife() {} + +void dAcGirahimu2_c::initializeState_CatchDamage() {} +void dAcGirahimu2_c::executeState_CatchDamage() {} +void dAcGirahimu2_c::finalizeState_CatchDamage() {} + +void dAcGirahimu2_c::initializeState_WaitKnifeAttack() {} +void dAcGirahimu2_c::executeState_WaitKnifeAttack() {} +void dAcGirahimu2_c::finalizeState_WaitKnifeAttack() {} + +void dAcGirahimu2_c::initializeState_Catch() {} +void dAcGirahimu2_c::executeState_Catch() {} +void dAcGirahimu2_c::finalizeState_Catch() {} + +void dAcGirahimu2_c::fn_228_80A0() {} + +void dAcGirahimu2_c::fn_228_80E0() {} + +void dAcGirahimu2_c::fn_228_82C0() { + mVec3_c v0 = mPosition; + mVec3_c v1(0.0f, 100.0f, 200.0f); + v1.rotY(mRotation.y); + v0 += v1; + v0.y = mCallback.field_0x21C.y; + + int rnd = cM::rndInt(90); + mAng a0; + mAng a1; + mVec3_c spacing(0.0f, 0.0f, 0.0f); + dAcObjGirahimuKnife_c::Pattern_e pattern; + switch (field_0x220C) { + case 0: { + mAng a0; + a1 = 0x8000; + if (rnd >= 60 && field_0x2214 == 2) { + a0 = 0; + spacing.set(100.0f, 65.0f, 0.0f); + pattern = dAcObjGirahimuKnife_c::PATTERN_U_D; + field_0x2210 = 8; + field_0x2214 = 2; + } else if (rnd >= 30 && field_0x2214 == 1) { + if (cM::rndInt(100) >= 50) { + a0 = 0x2000; + spacing.set(100.0f, 65.0f, 0.0f); + pattern = dAcObjGirahimuKnife_c::PATTERN_RD_LU; + field_0x2210 = 4; + } else { + a0 = -0x2000; + spacing.set(100.0f, 65.0f, 0.0f); + pattern = dAcObjGirahimuKnife_c::PATTERN_RU_LD; + field_0x2210 = 2; + } + field_0x2214 = 1; + } else if (field_0x2214 != 0) { + a0 = 0x4000; + spacing.set(100.0f, 65.0f, 0.0f); + pattern = dAcObjGirahimuKnife_c::PATTERN_R_L; + field_0x2210 = 1; + field_0x2214 = 0; + } else { + a0 = 0; + spacing.set(100.0f, 65.0f, 0.0f); + pattern = dAcObjGirahimuKnife_c::PATTERN_U_D; + field_0x2210 = 8; + field_0x2214 = 2; + } + startSound(SE_Girahim_MAGIC_KNIFE_APPEAR); + + for (int i = 0; i < 2; ++i) { + mVec3_c spawnPos = v0; + mVec3_c adjustedSpacing = spacing; + adjustedSpacing.rotZ(a0 + i * a1); + mVec3_c adjustedSpacing1 = adjustedSpacing; + adjustedSpacing1.rotY(mRotation.y); + spawnPos += adjustedSpacing1; + + dAcObjGirahimuKnife_c *pKnife; + if (mKnives[i].isLinked() && mKnives[i].get()->isWaiting()) { + pKnife = mKnives[i].get(); + } else { + spawnPos.x = mPosition.x; + spawnPos.z = mPosition.z; + pKnife = static_cast( + create(fProfile::OBJ_GH_KNIFE, mRoomID, 0, &spawnPos, nullptr, nullptr, 0xFFFFFFFF) + ); + mKnives[i].link(pKnife); + } + + if (pKnife != nullptr) { + spawnPos.y += v0.y; + mKnives[i].get()->setTarget(spawnPos); + pKnife->setState(4); + } + } + } break; + case 1: { + mAng a0, a1; + a1 = 0x4000; + if (rnd >= 50 && field_0x2214 != 2) { + field_0x2210 = 9; + a0 = 0; + spacing.set(0.0f, 65.0f, 100.0f); + field_0x2214 = 2; + } else if (field_0x2214 != 1) { + field_0x2210 = 6; + a0 = 0x2000; + spacing.set(0.0f, 65.0f, 100.0f); + field_0x2214 = 1; + } else { + field_0x2210 = 9; + a0 = 0; + spacing.set(0.0f, 65.0f, 100.0f); + field_0x2214 = 2; + } + startSound(SE_Girahim_MAGIC_KNIFE_APPEAR); + + for (int i = 0; i < 4; ++i) { + mVec3_c spawnPos = v0; + mVec3_c adjustedSpacing = spacing; + + adjustedSpacing.rotZ(a0 + a1 * i); + spawnPos += adjustedSpacing; + spawnPos.x = mPosition.x; + spawnPos.z = mPosition.z; + dAcObjGirahimuKnife_c *pKnife; + if (mKnives[i].isLinked() && mKnives[i].get()->isWaiting()) { + pKnife = mKnives[i].get(); + } else { + pKnife = static_cast( + create(fProfile::OBJ_GH_KNIFE, mRoomID, 0, &spawnPos, nullptr, nullptr, 0xFFFFFFFF) + ); + mKnives[i].link(pKnife); + } + + if (pKnife != nullptr) { + spawnPos.y += v0.y; + mKnives[i].get()->setTarget(spawnPos); + if (field_0x2214 != 1) { + if (i % 2 == 0) { + pKnife->setPattern(dAcObjGirahimuKnife_c::PATTERN_U_D); + } else { + pKnife->setPattern(dAcObjGirahimuKnife_c::PATTERN_R_L); + } + } else { + if (i % 2 == 0) { + pKnife->setPattern(dAcObjGirahimuKnife_c::PATTERN_RU_LD); + } else { + pKnife->setPattern(dAcObjGirahimuKnife_c::PATTERN_RD_LU); + } + } + pKnife->setState(4); + } + } + } break; + } +} + +void dAcGirahimu2_c::vt_0x1FC() {} + +void dAcGirahimu2_c::vt_0x200() {} + +void dAcGirahimu2_c::vt_0x204() {} + +void dAcGirahimu2_c::vt_0x228() {} + +void dAcGirahimu2_c::vt_0x22C() {} + +bool dAcGirahimu2_c::vt_0x210() {} + +void dAcGirahimu2_c::vt_0x230() {} + +void dAcGirahimu2_c::vt_0x214() {} + +bool dAcGirahimu2_c::vt_0x218() {} + +void dAcGirahimu2_c::vt_0x234() {} diff --git a/src/REL/d/a/b/d_a_b_girahimu_base.cpp b/src/REL/d/a/b/d_a_b_girahimu_base.cpp index ba8a3b2c7..11db84824 100644 --- a/src/REL/d/a/b/d_a_b_girahimu_base.cpp +++ b/src/REL/d/a/b/d_a_b_girahimu_base.cpp @@ -1,3 +1,3706 @@ #include "d/a/b/d_a_b_girahimu_base.h" +#include "c/c_lib.h" +#include "c/c_math.h" +#include "common.h" +#include "d/a/d_a_player.h" +#include "d/a/e/d_a_en_base.h" +#include "d/a/obj/d_a_obj_base.h" +#include "d/a/obj/d_a_obj_girahimu_sword_link.h" +#include "d/col/bg/d_bg_s_lin_chk.h" +#include "d/col/c/c_cc_d.h" +#include "d/col/cc/d_cc_d.h" +#include "d/d_cc.h" +#include "d/d_stage_mgr.h" +#include "d/d_vec.h" +#include "d/flag/sceneflag_manager.h" +#include "d/flag/storyflag_manager.h" +#include "d/lyt/d_lyt_boss_caption.h" +#include "d/lyt/msg_window/d_lyt_msg_window.h" +#include "d/snd/d_snd_wzsound.h" +#include "d/t/d_t_sword_battle_game.h" +#include "f/f_base.h" +#include "f/f_manager.h" +#include "f/f_profile_name.h" +#include "m/m3d/m3d.h" +#include "m/m3d/m_anmchr.h" +#include "m/m3d/m_fanm.h" +#include "m/m3d/m_shadow.h" +#include "m/m_angle.h" +#include "m/m_mtx.h" +#include "m/m_quat.h" +#include "m/m_sphere.h" +#include "m/m_vec.h" +#include "nw4r/g3d/g3d_anmchr.h" +#include "nw4r/g3d/res/g3d_resanmchr.h" +#include "nw4r/g3d/res/g3d_resanmtexpat.h" +#include "nw4r/g3d/res/g3d_resfile.h" +#include "nw4r/g3d/res/g3d_resmdl.h" +#include "nw4r/math/math_arithmetic.h" +#include "nw4r/math/math_types.h" +#include "rvl/MTX/mtx.h" +#include "rvl/VI/vi.h" +#include "s/s_Math.h" +#include "sized_string.h" +#include "toBeSorted/attention.h" +#include "toBeSorted/d_emitter.h" + +#include + +inline s32 angleDiff(s16 a, s16 b) { + return a - b; +} + +STATE_VIRTUAL_DEFINE(dAcGirahimuBase_c, Wait); +STATE_VIRTUAL_DEFINE(dAcGirahimuBase_c, Walk); +STATE_VIRTUAL_DEFINE(dAcGirahimuBase_c, Panch); +STATE_VIRTUAL_DEFINE(dAcGirahimuBase_c, Catch); +STATE_VIRTUAL_DEFINE(dAcGirahimuBase_c, CatchDamage); +STATE_VIRTUAL_DEFINE(dAcGirahimuBase_c, GetSword); +STATE_VIRTUAL_DEFINE(dAcGirahimuBase_c, Link_SwordWait); +STATE_VIRTUAL_DEFINE(dAcGirahimuBase_c, Link_SwordWalk); +STATE_VIRTUAL_DEFINE(dAcGirahimuBase_c, Link_SwordAttack); +STATE_VIRTUAL_DEFINE(dAcGirahimuBase_c, ReturnSword); +STATE_VIRTUAL_DEFINE(dAcGirahimuBase_c, LinkSwordGuardJust); +STATE_VIRTUAL_DEFINE(dAcGirahimuBase_c, SearchSword); +STATE_VIRTUAL_DEFINE(dAcGirahimuBase_c, HomeWarp); +STATE_VIRTUAL_DEFINE(dAcGirahimuBase_c, PickUpSword); +STATE_VIRTUAL_DEFINE(dAcGirahimuBase_c, ReleaseSword); +STATE_VIRTUAL_DEFINE(dAcGirahimuBase_c, BackStep); +STATE_VIRTUAL_DEFINE(dAcGirahimuBase_c, Escape); +STATE_VIRTUAL_DEFINE(dAcGirahimuBase_c, EscapeBack); +STATE_VIRTUAL_DEFINE(dAcGirahimuBase_c, FrontWarp); +STATE_VIRTUAL_DEFINE(dAcGirahimuBase_c, FrontAttack); +STATE_VIRTUAL_DEFINE(dAcGirahimuBase_c, BackWarp); +STATE_VIRTUAL_DEFINE(dAcGirahimuBase_c, BackAttack); +STATE_VIRTUAL_DEFINE(dAcGirahimuBase_c, Counter); +STATE_VIRTUAL_DEFINE(dAcGirahimuBase_c, Run); +STATE_VIRTUAL_DEFINE(dAcGirahimuBase_c, RunAttack); +STATE_VIRTUAL_DEFINE(dAcGirahimuBase_c, BackWalk); +STATE_VIRTUAL_DEFINE(dAcGirahimuBase_c, G_SwordDamage); +STATE_VIRTUAL_DEFINE(dAcGirahimuBase_c, KnifeDamage); + SPECIAL_ACTOR_PROFILE(B_GIRAHIMU_BASE, dAcGirahimuBase_c, fProfile::B_GIRAHIMU_BASE, 0x10D, 0, 0); + +static dCcD_SrcCps sSrcCps = { + { + {AT_TYPE_DAMAGE, 0x3E, {0, 0, 0}, 4, 0, 0, 0, CUT_DIR_NONE, 0}, + {~(AT_TYPE_COMMON0), 0x102, {0, 0, 0x40F}, 0, CUT_DIR_NONE}, + {0xE5}, + }, + {30.0f}, +}; + +static dCcD_SrcCyl sSrcCyl = { + { + {AT_TYPE_DAMAGE, 0x3E, {0, 0, 1}, 2, 0, 0, 0, CUT_DIR_NONE, 0}, + {~(AT_TYPE_COMMON0 & ~AT_TYPE_WIND), 0x102, {0, 0, 0x44F}, 8, CUT_DIR_NONE}, + {0xE5}, + }, + { + 120.0f, 220.f, + } +}; +static dCcD_SrcSph sSrcSph = { + { + {AT_TYPE_DAMAGE, 0x3E, {0, 0, 0}, 4, 0, 0, 0, CUT_DIR_NONE, 0}, + {AT_TYPE_SWORD, 0x103, {0, 1, 0x44F}, 0, CUT_DIR_NONE}, + {0xE5}, + }, + {40.f} +}; + +struct dAcGirahimuBase_HIO_c { + f32 field_0x00; + f32 field_0x04; + f32 field_0x08; + f32 field_0x0C; + f32 field_0x10; + f32 field_0x14; + f32 field_0x18; + f32 field_0x1C; + s16 field_0x20; + s16 field_0x22; + s16 field_0x24; + s16 field_0x26; + s16 field_0x28; + s16 field_0x2A; + f32 field_0x2C; + f32 field_0x30; + f32 field_0x34; + f32 field_0x38; + f32 field_0x3C; + f32 field_0x40; + f32 field_0x44; + f32 field_0x48; + f32 field_0x4C; + s16 feld_0x050; + + static const dAcGirahimuBase_HIO_c sHIO; +}; + +const dAcGirahimuBase_HIO_c dAcGirahimuBase_HIO_c::sHIO = { + 1.05f, 1.05f, -5.0f, -2.0f, 15.0f, 150.0f, 30.0f, 40.0f, 0x1, 0x5DC, 0x14, 0x1000, + 0x2000, 0xE000, 1.2f, 8.0f, 1.2f, 8.0f, 0.0f, 0.5f, 1.0f, 0.5f, 1.0f, 0x5A, + +}; + +void float_ordering0() { + 1.0f; + 10.0f; +} + +void dAcGirahimuBase_c::callback_c::fn_226_DC0(mMtx_c &out, const mAng3_c &rot, const mAng yRot) { + mVec3_c translation; + mMtx_c transform; + out.getTranslation(translation); + transform.YrotS(yRot); + transform.YrotM(rot.y); + transform.XrotM(rot.x); + transform.YrotM(-yRot); + MTXConcat(transform, out, out); + out.setTranslation(translation); +} + +void dAcGirahimuBase_c::callback_c::fn_226_E80() { + mVec3_c v0 = field_0x164; + + mVec3_c v1 = v0 - field_0x21C; + v1.normalizeRS(); + + mVec3_c v2 = field_0x260 - v0; + v2.normalizeRS(); + + mVec3_c v3 = field_0x21C - v0; + v3.normalizeRS(); + + mVec3_c v4; + vecCross(v4, v2, v3); + v4.normalizeRS(); + + mVec3_c v5; + vecCross(v5, v4, v1); + v5.normalizeRS(); + + mVec3_c v6 = v5; + v5.set(-v4); + v4.set(-v6); + + mMtx_c m0; + m0.setBase(0, v1); + m0.setBase(1, v4); + m0.setBase(2, v5); + + mQuat_c q0; + m0.toQuat(q0); + field_0x1CC.slerpTo(q0, 1.0f, field_0x1CC); + field_0x19C.fromQuat(field_0x1CC); + field_0x19C.setTranslation(field_0x21C); + + field_0x19C.scaleM(mpGhirahim->field_0x8BC); +} + +void dAcGirahimuBase_c::callback_c::fn_226_1160() { + mVec3_c v0 = field_0x164; + + mVec3_c v1 = field_0x260 - v0; + v1.normalizeRS(); + + mVec3_c v2 = field_0x260 - v0; + v2.normalizeRS(); + + mVec3_c v3; + v3 = field_0x21C - v0; + v3.normalizeRS(); + + mVec3_c v4; + vecCross(v4, v2, v3); + v4.normalizeRS(); + + mVec3_c v5; + vecCross(v5, v4, v1); + v5.normalizeRS(); + + mVec3_c v6 = v5; + v5.set(-v4); + v4.set(-v6); + + mMtx_c m0; + m0.setBase(0, v1); + m0.setBase(1, v4); + m0.setBase(2, v5); + + mQuat_c q0; + m0.toQuat(q0); + field_0x118.slerpTo(q0, 1.0f, field_0x118); + field_0x0E8.fromQuat(field_0x118); + + if (mpGhirahim != nullptr && mpGhirahim->field_0xD71) { + mVec3_c diff = field_0x260 - field_0x21C; + mAng ang = (s32)diff.atan2sX_Z(); + ang = ang - field_0x084; + if (ang > 0) { + field_0x0E8.XrotM(-ang); + } + } + field_0x0E8.setTranslation(field_0x164); + field_0x0E8.scaleM(mpGhirahim->field_0x8BC); +} + +void dAcGirahimuBase_c::callback_c::init(dAcGirahimuBase_c *pGhirahim) { + field_0x014 = 1.0f; + mMtx_c m0; + MTXIdentity(m0); + (void)mVec3_c(1.0f, 0.0f, 0.0f); + (void)mVec3_c(0.0f, 0.0f, -1.0f); + (void)mVec3_c(0.0f, 1.0f, 0.0f); + m0.toQuat(field_0x004); + m0.toQuat(field_0x118); + m0.toQuat(field_0x1CC); + mpGhirahim = pGhirahim; + field_0x2D4 = 1.0f; + field_0x2D0 = 1.0f; +} + +void dAcGirahimuBase_c::callback_c::fn_226_1580(u32 node, nw4r::g3d::WorldMtxManip *result, nw4r::g3d::ResMdl) { + if (node == mNodeID_ArmR) { + field_0x2C0 = result; + result->GetMtx(field_0x19C); + field_0x19C.getTranslation(field_0x21C); + mVec3_c v0(-40.0f, -20.0f, -15.0f); + v0.rotY(field_0x084); + v0 += field_0x21C; + field_0x18C.set(v0); + if (!field_0x1E8) { + field_0x1E8 = true; + } else { + if (field_0x04E) { + fn_226_1DD0(); + fn_226_24F0(); + fn_226_24E0(); + fn_226_1160(); + fn_226_E80(); + } else { + field_0x2BA = 0; + sLib::chaseAngle(field_0x0B4.ref(), 0, 0x1000); + mQuat_c q0; + field_0x19C.toQuat(q0); + field_0x1CC.slerpTo(q0, field_0x2D0, field_0x1CC); + if (field_0x2D0 < 1.0f) { + mMtx_c m0; + field_0x19C.fromQuat(field_0x1CC); + m0.scaleS(mpGhirahim->field_0x8BC); + MTXConcat(m0, field_0x19C, field_0x19C); + field_0x19C.setTranslation(field_0x21C); + } + } + result->SetMtx(field_0x19C); + } + } else if (node == mNodeID_ElbowR) { + field_0x2C4 = result; + if (!field_0x198) { + result->GetMtx(field_0x0E8); + field_0x0E8.getTranslation(field_0x164); + field_0x128.set(1.0f, 0.0f, 0.0f); + field_0x198 = true; + field_0x0E8.getTranslation(field_0x18C); + } + + if (!field_0x04E) { + mMtx_c m0; + mQuat_c q0; + result->GetMtx(m0); + m0.toQuat(q0); + + if (field_0x2D0 < 1.0f) { + field_0x118.slerpTo(q0, field_0x2D0, field_0x118); + field_0x0E8.fromQuat(field_0x118); + mMtx_c m1; + m1.scaleS(mpGhirahim->field_0x8BC); + MTXConcat(m1, field_0x0E8, field_0x0E8); + mVec3_c v0(field_0x234, 0.0f, 0.0f); + field_0x19C.multVec(v0, v0); + field_0x164.set(v0); + field_0x0E8.setTranslation(field_0x164); + } else { + field_0x118.slerpTo(q0, field_0x2D0, field_0x118); + result->GetMtx(field_0x0E8); + field_0x0E8.getTranslation(field_0x164); + } + } + result->SetMtx(field_0x0E8); + } else if (node == mNodeID_HandR) { + if (!field_0x2B8) { + field_0x2B8 = true; + result->GetMtx(field_0x278); + } + if (field_0x04E) { + if (mpGhirahim && !mpGhirahim->field_0xD71) { + mMtx_c m0; + result->GetMtx(m0); + m0.setTranslation(field_0x260); + sLib::chaseAngle(field_0x2BA.ref(), 0x2000, 0x200); + m0.YrotM(field_0x2BA); + mQuat_c q0; + m0.toQuat(q0); + field_0x2A8.slerpTo(q0, field_0x2D0, field_0x2A8); + field_0x278.fromQuat(field_0x2A8); + field_0x278.setTranslation(field_0x260); + } + } else { + field_0x2BA = 0; + if (field_0x2D0 < 1.0f) { + mMtx_c m0; + mQuat_c q0; + result->GetMtx(m0); + m0.toQuat(q0); + field_0x2A8.slerpTo(q0, 1.0f, field_0x2A8); + field_0x278.fromQuat(field_0x2A8); + + mMtx_c scale; + scale.scaleS(mpGhirahim->field_0x8BC); + MTXConcat(scale, field_0x278, field_0x278); + mVec3_c v0(field_0x188, 0.0f, 0.0f); + field_0x0E8.multVec(v0, v0); + field_0x260.set(v0); + field_0x278.setTranslation(field_0x260); + } else { + result->GetMtx(field_0x278); + field_0x278.getTranslation(field_0x260); + field_0x278.toQuat(field_0x2A8); + } + + if (mpGhirahim) { + field_0x254 = field_0x260 - field_0x21C; + field_0x254.rotY(-mpGhirahim->mRotation.y); + } + } + result->SetMtx(field_0x278); + } +} + +void dAcGirahimuBase_c::callback_c::fn_226_1B60(mVec3_c &out) { + mMtx_c swordMtx; + dAcPy_c::GetLinkM()->getSwordModelMatrix(&swordMtx); + swordMtx.m[0][3] = 0.0f; + swordMtx.m[1][3] = 0.0f; + swordMtx.m[2][3] = 0.0f; + + mVec3_c v0(-1.0f, 0.0f, 0.0f); + mVec3_c v1(0.0f, -1.0f, 0.0f); + mVec3_c v2(0.0f, 0.0f, -1.0f); + swordMtx.multVec(v0, v0); + swordMtx.multVec(v1, v1); + swordMtx.multVec(v2, v2); + + (void)v2.atan2sX_Z(); + + mVec3_c v4(-5.0f, -2.0f, 15.0f); + if (mpGhirahim != nullptr && !mpGhirahim->field_0xD71) { + v4.z = 0.0f; + } + swordMtx.multVec(v4, v4); + + mVec3_c v5 = dAcPy_c::GetLinkM()->getSwordPos() - dAcPy_c::GetLinkM()->vt_0x278(); + if (mpGhirahim != nullptr && !mpGhirahim->field_0xD71) { + v5 *= 1.0f; + } else { + v5 *= 0.9f; + } + const mVec3_c &vt278 = dAcPy_c::GetLinkM()->vt_0x278(); + + v5 += vt278; + v5 += v4; + if (mpGhirahim != nullptr && !mpGhirahim->field_0xD71) { + v5.y -= 5.0f; + } + + out.set(v5); +} + +void dAcGirahimuBase_c::callback_c::fn_226_1DD0() { + 0.5f; // float ordering + mMtx_c swordMtx; + dAcPy_c::GetLinkM()->getSwordModelMatrix(&swordMtx); + swordMtx.m[0][3] = 0.0f; + swordMtx.m[1][3] = 0.0f; + swordMtx.m[2][3] = 0.0f; + + mVec3_c v0(-1.0f, 0.0f, 0.0f); + mVec3_c v1(0.0f, -1.0f, 0.0f); + mVec3_c v2(0.0f, 0.0f, -1.0f); + swordMtx.multVec(v0, v0); + swordMtx.multVec(v1, v1); + swordMtx.multVec(v2, v2); + + mVec3_c v3; + fn_226_1B60(v3); + + mVec3_c v4 = v3; + mVec3_c v5; + v5 = v3 - field_0x21C; + + if (v5.mag() >= (field_0x234 + field_0x188) * 0.9f) { + field_0x050 = true; + } else { + field_0x050 = false; + } + field_0x0B4.set(0); + if (mpGhirahim != nullptr && !mpGhirahim->field_0xD71) { + if (field_0x050) { + v3 -= field_0x21C; + v3.normalizeRS(); + v3 *= (field_0x234 + field_0x188) * 0.9f; + v3 += field_0x21C; + } + mVec3_c v6 = v3 - field_0x21C; + + dAcGirahimuBase_c *pAc = mpGhirahim; + mAng ang = mAng((s32)v6.atan2sX_Z()); + ang = ang - pAc->mRotation.y; + mAng a; + switch (ang) { + case 0x2000 ... INT32_MAX: { + a = 0x2000 - ang; + v6.rotY(a); + v6 += field_0x21C; + v3 = v6; + } break; + case -0x1FFF ... 0x1FFF: { + // Do Nothing + } break; + default: { + a = -0x2000 - ang; + v6.rotY(a); + v6 += field_0x21C; + v3 = v6; + } break; + } + + mVec3_c v7 = v3 - field_0x21C; + v7.rotY(-mpGhirahim->mRotation.y); + + if (mpGhirahim->mHealth >= 100) { + if (--field_0x2BC <= 0) { + field_0x2BC = 60; + f32 z = v7.z; + v7.z = 0.0f; + v7.normalizeRS(); + v7 *= 40.0f; + v7.z = z; + field_0x26C.set(v7); + } + v7.set(field_0x26C); + } + if (mpGhirahim->field_0xD50 > 0) { + cLib::addCalcPos2(&field_0x254, v7, 0.2f, 1000.0f); + } else { + cLib::addCalcPos2(&field_0x254, v7, 0.2f, field_0x2CC); + } + + mVec3_c v8 = v7 - field_0x254; + f32 magV8 = v8.mag(); + + mVec3_c v9 = field_0x21C; + v9.y -= 10.0f; + + field_0x098 = magV8; + + mMtx_c m0; + m0.transS(v9); + m0.YrotM(mpGhirahim->mRotation.y); + m0.inverse(); + + mVec3_c v10 = field_0x260; + m0.multVec(v10, v10); + v10.z = 0.0f; + field_0x2E0.set(v10); + + field_0x2D8 = v10.mag(); + + m0.transS(field_0x260); + m0.YrotM(mpGhirahim->mRotation.y); + m0.inverse(); + m0.multVec(v4, v4); + + v4.z = 0.0f; + field_0x2EC.set(v4); + mVec3_c v11 = field_0x254; + v11.rotY(mpGhirahim->mRotation.y); + v11 += field_0x21C; + cLib::addCalcPos2(&field_0x260, v11, 0.5f, 100.0f); + } else { + field_0x2BA = 0; + field_0x260.set(v3); + if (mpGhirahim != nullptr) { + field_0x254.set(field_0x260 - field_0x21C); + field_0x254.rotY(-mpGhirahim->mRotation.y); + } + mMtx_c m1; + m1.setBase(0, v2); + m1.setBase(1, v1); + m1.setBase(2, v0); + + mQuat_c q0; + m1.toQuat(q0); + + field_0x2A8.slerpTo(q0, field_0x2D0, field_0x2A8); + field_0x278.fromQuat(field_0x2A8); + field_0x278.setTranslation(field_0x260); + field_0x278.scaleM(1.05f, 1.05f, 1.05f); + } +} + +void dAcGirahimuBase_c::callback_c::fn_226_24E0() { + return; +} + +void dAcGirahimuBase_c::callback_c::fn_226_24F0() { + mVec3_c v1; + mVec3_c v2; + mVec3_c v3 = field_0x260; + mVec3_c v4 = field_0x18C; + mVec3_c v5 = v4 - v3; + v5.normalizeRS(); + v5 *= field_0x188; + v5 += v3; + + v4 = v5; + v1 = field_0x21C - v3; + v1.normalizeRS(); + v1 *= field_0x188; + v1 += v3; + if (v1.y <= v4.y) { + f32 f = v1.y - v4.y; + v4.y += f; + } + mVec3_c v6 = field_0x21C - v4; + v6.normalizeRS(); + v6 *= field_0x234; + v6 += v4; + + v1 = v6 - v3; + v2 = field_0x21C - v3; + + v1.angle(v2); + + mQuat_c q; + q.slerp(v1, v2, 1.0f); + mMtx_c m; + m.fromQuat(q); + + mVec3_c v7 = v4 - v3; + m.multVec(v7, v7); + v7 += v3; + + v4 = v7; + + v1 = v4 - field_0x21C; + v1.normalizeRS(); + v1 *= field_0x234; + v1 += field_0x21C; + + v4 = v1; + + v1 = v4 - field_0x260; + v1.normalizeRS(); + v1 *= field_0x188; + v1 += field_0x260; + + v4 = v1; + cLib::addCalcPos2(&field_0x164, v4, 0.5f, 100.0f); +} + +void dAcGirahimuBase_c::callback_c::timingB(u32 node, nw4r::g3d::WorldMtxManip *result, nw4r::g3d::ResMdl i_mdl) { + fn_226_1580(node, result, i_mdl); + + mMtx_c m0; + if (node == mNodeID_Head) { + result->GetMtx(m0); + m0.getTranslation(field_0x08C); + + mMtx_c m1; + result->GetMtx(m1); + fn_226_3150(m1); + + mAng3_c a0(field_0x07E, field_0x07C, 0); + fn_226_DC0(m0, a0, field_0x084); + result->SetMtx(m0); + } else if (node == mNodeID_Hair1) { + mMtx_c m1; + result->GetMtx(m1); + m1.YrotM(-field_0x062.y); + m1.ZrotM(field_0x062.z); + result->SetMtx(m1); + } else if (node == mNodeID_Hair2) { + mMtx_c m1; + result->GetMtx(m1); + m1.YrotM(-field_0x062.y); + m1.ZrotM(field_0x062.z); + result->SetMtx(m1); + } else if (node == mNodeID_Hair3) { + mMtx_c m1; + result->GetMtx(m1); + m1.YrotM(-field_0x062.y); + m1.ZrotM(field_0x062.z); + result->SetMtx(m1); + } else if (node == mNodeID_Spine1) { + if (field_0x04E) { + if (mpGhirahim->field_0xD66 <= 0) { + mVec3_c v0; + fn_226_1B60(v0); + dAcGirahimuBase_c *pGhirahim = mpGhirahim; + mAng ang = cLib::targetAngleY(mpGhirahim->mPosition, v0); + ang = ang - pGhirahim->mRotation.y; + if (mpGhirahim->mAnmIDBody != ANM_WaitA) { + sLib::chaseAngle(field_0x062.x.ref(), ang / 3, 0x80); + } else { + static s32 divVal = {2}; + sLib::chaseAngle(field_0x062.x.ref(), ang / divVal, 0x80); + } + } + } else { + sLib::chaseAngle(field_0x062.x.ref(), 0, 0x80); + } + result->GetMtx(m0); + mAng3_c a0(field_0x05A, field_0x058, 0); + fn_226_DC0(m0, a0, field_0x060); + m0.XrotM(field_0x062.x); + result->SetMtx(m0); + } else if (node == mNodeID_Spine2) { + result->GetMtx(m0); + mAng3_c a0(field_0x05A, field_0x058, 0); + fn_226_DC0(m0, a0, field_0x060); + m0.XrotM(field_0x062.x); + result->SetMtx(m0); + } else if (node == mNodeID_ElbowR) { + fn_226_2FD0(); + result->GetMtx(m0); + m0.YrotM(field_0x238); + result->SetMtx(m0); + } else if (node == mNodeID_ElbowL) { + fn_226_3080(); + result->GetMtx(m0); + m0.YrotM(field_0x23A); + result->SetMtx(m0); + } else if (node == mNodeID_KneeL) { + result->GetMtx(m0); + mAng3_c a0(0, field_0x054 / 2, 0); + fn_226_DC0(m0, a0, mpGhirahim->mRotation.y); + result->SetMtx(m0); + } else if (node == mNodeID_KneeR) { + result->GetMtx(m0); + mAng3_c a0(0, field_0x054 / 2, 0); + fn_226_DC0(m0, a0, mpGhirahim->mRotation.y); + result->SetMtx(m0); + } else if (node == mNodeID_LegL) { + result->GetMtx(m0); + mAng3_c a0(0, field_0x054 / 2, 0); + fn_226_DC0(m0, a0, mpGhirahim->mRotation.y); + result->SetMtx(m0); + } else if (node == mNodeID_LegR) { + result->GetMtx(m0); + mAng3_c a0(0, field_0x054 / 2, 0); + fn_226_DC0(m0, a0, mpGhirahim->mRotation.y); + result->SetMtx(m0); + } +} + +void dAcGirahimuBase_c::callback_c::fn_226_2FD0() { + sLib::chaseAngle(field_0x23C.ref(), 0, 0x150); + field_0x240 += 0x3500; + field_0x238 = field_0x23C * field_0x240.sin(); +} + +void dAcGirahimuBase_c::callback_c::fn_226_3080() { + sLib::chaseAngle(field_0x23E.ref(), 0, 0x150); + field_0x242 += 0x3500; + field_0x23A = field_0x23E * field_0x242.sin(); +} + +void dAcGirahimuBase_c::callback_c::fn_226_3130() { + sLib::chase(&field_0x2D0, field_0x2D4, 0.05f); +} + +void dAcGirahimuBase_c::callback_c::fn_226_3150(mMtx_c &m) { + if (field_0x088 && mpGhirahim->field_0xD5C <= 10) { + mVec3_c v0; + m.getTranslation(v0); + m.m[0][3] = m.m[1][3] = m.m[2][3] = 0.0f; + mVec3_c v1(0.0f, 1.0f, 0.0f); + m.multVec(v1, v1); + s16 a0 = v1.atan2sX_Z(); + s16 a1 = v1.atan2sY_XZ(); + field_0x080 = cLib::targetAngleY(v0, mpGhirahim->field_0x88C) - a0; + field_0x082 = -(cLib::targetAngleX(v0, mpGhirahim->field_0x88C) - a1); + } else { + field_0x080 = 0; + field_0x082 = 0; + } + + if (field_0x080 > 0x3000) { + field_0x080.set(0x3000); + } else if (field_0x080 < -0x3000) { + field_0x080 = -0x3000; + } + + sLib::addCalcAngle(field_0x07C.ref(), field_0x080, 2, 0x500); + sLib::addCalcAngle(field_0x07E.ref(), field_0x082, 2, 0x500); + + if (field_0x07E < 0x2000) { + if (field_0x07E + 0x1FFF > 0x3FFEu) { + field_0x07E = -0x2000; + } + } else { + field_0x07E.set(0x2000); + } +} + +void dAcGirahimuBase_c::initializeState_Wait() { + field_0xD6C = 1; + setAnm("WaitA", 0, nullptr, m3d::PLAY_MODE_4, 30.0f, 1.0f); + mCallback.field_0x088 = true; + + field_0xD46 = 200; + field_0xD48 = 400; + field_0xD4A = 300; + + field_0x1834 = 0.0f; + mSpeed = 0.0f; + if (dAcPy_c::GetLinkM()->isUsingSword()) { + mCallback.field_0x04E = true; + mCallback.field_0x2D4 = 0.2f; + mCallback.field_0x2D0 = 0.2f; + } else { + mCallback.field_0x04E = false; + mCallback.field_0x2D4 = 1.0f; + } +} +void dAcGirahimuBase_c::executeState_Wait() { + bool b0 = false; + if (dAcPy_c::GetLinkM()->isUsingSword() && field_0x1838 <= 250.0f) { + b0 = true; + } + + if (dAcPy_c::GetLinkM()->isUsingSword() && field_0x1838 <= 370.0f) { + fn_226_BC00(); + } else { + mCallback.field_0x04F = false; + mCallback.field_0x04E = false; + } + + if (dAcPy_c::GetLinkM()->getBeetleInFlight() != nullptr) { + return; + } + mVec3_c distanceFromStart = mPosition - mStartingPos; + mVec3_c v1(0.0f, 0.0f, 1.0f); + v1.rotY(mRotation.y); + if (field_0x1868 >= 1500.0f && distanceFromStart.dot(v1) < 0.0f) { + field_0x8DC = 0; + changeState(StateID_HomeWarp); + return; + } + if (field_0xD46 <= 0 && mSwordLink.get()->isStick()) { + changeState(StateID_SearchSword); + return; + } + + if (vt_0x210()) { + return; + } + + if (mSwordLink.get()->isStick()) { + if (field_0xD46 % 100 > 50) { + field_0x88C = mSwordLink.get()->mPosition; + } + return; + } + + if (field_0xD4A <= 0) { + vt_0x204(); + return; + } + + if (!b0) { + changeState(StateID_Walk); + return; + } + if (!(mSwordLink.get()->isStick() || turn(field_0x183E))) { + if (field_0x1838 <= 215.0f && --field_0xD4A <= 0) { + field_0xD4A = 0; + } + + setAnmHip("WaitA", ANM_WaitA, m3d::PLAY_MODE_4, 5.0f, 1.0f); + } + + if (mAnmIDShoulderL == ANM_MovePose && mAnmChrs[ANMIDX_ShoulderL].checkFrame(43.0f)) { + setAnmShoulderL("WaitA", ANM_WaitA, m3d::PLAY_MODE_4, 15.0f, 1.0f); + setAnmHead("WaitA", ANM_WaitA, m3d::PLAY_MODE_4, 15.0f, 1.0f); + } + if (field_0xD48 <= 0) { + setAnmShoulderL("MovePose", ANM_MovePose, m3d::PLAY_MODE_4, 15.0f, 1.0f); + setAnmHead("MovePose", ANM_MovePose, m3d::PLAY_MODE_4, 15.0f, 1.0f); + + field_0xD48 = 400 + cM::rndInt(100); + } + + sLib::chaseAngle(mRotation.y.ref(), field_0x183E, 0x500); +} +void dAcGirahimuBase_c::finalizeState_Wait() { + field_0xD44 = 0; + mCallback.field_0x04E = false; + mCallback.field_0x2D4 = 1.0f; +} + +void dAcGirahimuBase_c::initializeState_Walk() { + if (dAcPy_c::GetLinkM()->getBeetleInFlight() != nullptr) { + changeState(StateID_Wait); + return; + } + + field_0xD6C = 1; + setAnm("Walk", ANM_Walk, nullptr, m3d::PLAY_MODE_4, 15.0f, 1.0f); + + mCallback.field_0x088 = true; + mCallback.field_0x04E = false; + mCallback.field_0x2D4 = 1.0f; + + if (dAcPy_c::GetLinkM()->isUsingSword()) { + mCallback.field_0x04E = true; + mCallback.field_0x2D4 = 0.5f; + mCallback.field_0x2D0 = 0.0f; + } else { + mCallback.field_0x04E = false; + mCallback.field_0x2D4 = 1.0f; + } + mCallback.field_0x2CC = 0.0f; +} +void dAcGirahimuBase_c::executeState_Walk() { + if (mSwordLink.get()->isStick()) { + changeState(StateID_Wait); + return; + } + + fn_226_BC00(); + + if (mCallback.field_0x04E) { + setAnmShoulderR("WaitA", ANM_WaitA, m3d::PLAY_MODE_4, 15.0f, 1.0f); + } else { + mCallback.field_0x2BC = 0; + mCallback.field_0x098 = 10.0f; + setAnmShoulderR("Walk", ANM_Walk, m3d::PLAY_MODE_4, 15.0f, 1.0f); + } + + if (dAcPy_c::GetLinkM()->isUsingSword()) { + if (field_0x1838 <= 200.0f) { + changeState(StateID_Wait); + return; + } + } else { + if (field_0x1838 <= 150.0f) { + changeState(StateID_Panch); + return; + } + } + fn_226_B960(6.0f); +} +void dAcGirahimuBase_c::finalizeState_Walk() {} + +void dAcGirahimuBase_c::initializeState_Panch() { + setAnm("AttackBinta", ANM_AttackBinta, nullptr, m3d::PLAY_MODE_4, 5.0f, 1.0f); + mCallback.field_0x088 = true; + field_0x1834 = 0.0f; + mSpeed = 0.0f; +} +void dAcGirahimuBase_c::executeState_Panch() { + field_0xD58 = 60; + sLib::chaseAngle(mRotation.y.ref(), field_0x183E, 0x500); + if (mAnmChrs[ANMIDX_Body].checkFrame(18.0f)) { + mSph0.SetR(100.0f); + mSph0.ClrCoSet(); + mSph0.OnAtSet(); + mSph0.SetAtFlagsUpper(0x40000); + return; + } + if (mAnmChrs[ANMIDX_Body].checkFrame(22.0f)) { + mSph0.SetR(40.0f); + mSph0.ClrAtSet(); + mSph0.SetAtFlagsUpper(0); + return; + } + + if (mAnmChrs[ANMIDX_Body].isStop()) { + changeState(StateID_Wait); + return; + } +} +void dAcGirahimuBase_c::finalizeState_Panch() { + mSph0.OnCoSet(); + mSph0.SetR(40.0f); + mSph0.ClrAtSet(); + mSph0.SetAtFlagsUpper(0); + field_0xD66 = 0; + field_0xD58 = 60; +} + +void dAcGirahimuBase_c::initializeState_Catch() { + s32 flag = getFromParams(0, 0xFF); + if (flag != 0xFF) { + // 0xC0 -> zone temp flag: 0x1 01 + SceneflagManager::sInstance->setFlag(mRoomID, flag); + } + vt_0x1FC(); + + mCollider.ClrCo(); + field_0x1834 = 0.0f; + mSpeed = 0.0f; + + field_0xD7E = false; + if (!field_0x1871 || cM::rndInt(100) > 50) { + field_0x1871 = true; + field_0xD7E = true; + setAnm("Catch", ANM_Catch, "Catch", ANM_Catch, "FaceTongue", ANM_FaceTongue, m3d::PLAY_MODE_4, 5.0f, 1.0f); + } else { + setAnm("Catch", ANM_Catch, "Catch", ANM_Catch, "FaceSmaile", ANM_FaceSmaile, m3d::PLAY_MODE_4, 5.0f, 1.0f); + } + + mCallback.field_0x088 = true; + dAcPy_c::GetLinkM()->set0x439F(this, 7); + mCallback.field_0x014 = 1.0f; + mCallback.field_0x2D4 = 0.5f; + field_0xD46 = 4; + field_0xD5E = 300; + if (!field_0x1872) { + field_0xD5E = 75; + } +} +void dAcGirahimuBase_c::executeState_Catch() { + if (field_0xD46 <= 0) { + field_0xD71 = true; + mCallback.field_0x04E = true; + + if (vt_0x208()) { + return; + } + } + + if (field_0xD46 <= 0 && !dAcPy_c::GetLinkM()->IfCurrentActionToActor(this, 0xA9 /* ??? */)) { + vt_0x220(); + return; + } + + field_0x88C += dAcPy_c::GetLink()->getSwordPos(); + field_0x88C *= 0.5f; + if (--field_0xD5E <= 0) { + vt_0x22C(); + return; + } + + if (mAnmChrs[ANMIDX_Body].isStop()) { + if (field_0xD7E) { + setAnm( + "CatchLoop", ANM_CatchLoop, "CatchLoop", ANM_CatchLoop, "FaceTongue", ANM_FaceTongue, m3d::PLAY_MODE_4, + 5.0f, 1.0f + ); + } else { + setAnm( + "CatchLoop", ANM_CatchLoop, "CatchLoop", ANM_CatchLoop, "FaceSmaile", ANM_FaceSmaile, m3d::PLAY_MODE_4, + 5.0f, 1.0f + ); + } + } + + sLib::chaseAngle(mRotation.y.ref(), cLib::targetAngleY(mPosition, dAcPy_c::GetLink()->mPosition), 0x500); +} +void dAcGirahimuBase_c::finalizeState_Catch() { + mCallback.field_0x04E = false; + field_0xD71 = false; + mCollider.CoSet(); + mCallback.field_0x2D4 = 1.0f; + s32 flag = getFromParams(0, 0xFF); + if (flag != 0xFF) { + // 0xC0 -> zone temp flag: 0x1 01 + SceneflagManager::sInstance->unsetFlag(mRoomID, flag); + } +} + +void dAcGirahimuBase_c::initializeState_ReleaseSword() { + field_0xD5A = 0; + field_0xD66 = 0; + + mCallback.field_0x088 = false; + field_0xD6C = 1; + mSph0.ClrTgSet(); + mCyl0.OnTgSet(); + + field_0x1834 = 0.0f; + mSpeed = 0.0f; +} +void dAcGirahimuBase_c::executeState_ReleaseSword() { + field_0xD81 = true; + fn_226_CC40(); + mSph0.ClrTgSet(); + + sLib::chaseAngle(mRotation.y.ref(), field_0x183E, 0x500); + mCallback.field_0x04E = false; + + if (mAnmChrs[ANMIDX_Body].checkFrame(35.0f)) { + mCallback.field_0x04E = false; + } + if (mAnmChrs[ANMIDX_Body].isStop()) { + vt_0x220(); + } +} +void dAcGirahimuBase_c::finalizeState_ReleaseSword() { + mCallback.field_0x2BC = 0; + mSph0.OnTgSet(); +} + +void dAcGirahimuBase_c::initializeState_G_SwordDamage() {} +void dAcGirahimuBase_c::executeState_G_SwordDamage() {} +void dAcGirahimuBase_c::finalizeState_G_SwordDamage() {} + +void dAcGirahimuBase_c::initializeState_KnifeDamage() { + mCyl2.OnTgSet(); + setAnm("KnifeDamage", ANM_KnifeDamage, nullptr, m3d::PLAY_MODE_4, 5.0f, 1.0f); + mVec3_c pos = mPosition; + pos.y += 100.0f; + getSoundSource()->startSoundAtPosition(SE_Girahim_DMG_KNIFE, pos); + + mCallback.field_0x088 = false; + field_0xD44 = 0; + mSpeed = 0.0f; + field_0x1834 = 0.0f; + field_0xD6C = 8; + field_0xD8E = false; +} +void dAcGirahimuBase_c::executeState_KnifeDamage() { + field_0xD8D = true; + if (mAnmChrs[ANMIDX_Body].isStop()) { + field_0xD8E = false; + + if (field_0x1838 < 500.0f) { + changeState(StateID_BackStep); + } else { + vt_0x220(); + } + } +} +void dAcGirahimuBase_c::finalizeState_KnifeDamage() { + field_0xD8E = false; +} + +void dAcGirahimuBase_c::initializeState_CatchDamage() {} +void dAcGirahimuBase_c::executeState_CatchDamage() {} +void dAcGirahimuBase_c::finalizeState_CatchDamage() {} + +void dAcGirahimuBase_c::initializeState_LinkSwordGuardJust() { + field_0xD6C = 1; + mCallback.field_0x2D4 = 1.0f; + if (mAnmIDBody == ANM_AttackLSwordA) { + setAnm("GuardLSwordA", ANM_GuardLSwordA, nullptr, m3d::PLAY_MODE_4, 5.0f, 1.0f); + } else { + setAnm("GuardLSwordB", ANM_GuardLSwordB, nullptr, m3d::PLAY_MODE_4, 5.0f, 1.0f); + } + mCallback.field_0x088 = false; + field_0xD72 = false; + + mVec3_c throwForce(0.0f, 0.0f, 600.0f); + throwForce.rotY(mRotation.y - 0x7500); + throwForce += mPosition; + mSwordLink.get()->setThrow(throwForce, 0x1200, 29.0f); +} +void dAcGirahimuBase_c::executeState_LinkSwordGuardJust() { + if (mAnmChrs[ANMIDX_Body].isStop()) { + changeState(StateID_SearchSword); + } +} +void dAcGirahimuBase_c::finalizeState_LinkSwordGuardJust() {} + +void dAcGirahimuBase_c::initializeState_GetSword() { + field_0xD6C = 2; + field_0xD66 = 0; + field_0xD71 = true; + + setAnm("GetSword", ANM_GetSword, nullptr, m3d::PLAY_MODE_4, 5.0f, 1.0f); + + mCallback.field_0x014 = 1.0f; + mCallback.field_0x088 = true; + mCallback.field_0x2D4 = 1.0f; + mCallback.field_0x04E = true; + + s32 flag = getFromParams(0, 0xFF); + if (flag != 0xFF) { + // 0xC1 -> zone temp flag: 0x1 02 + SceneflagManager::sInstance->unsetFlag(mRoomID, flag + 1); + } +} +void dAcGirahimuBase_c::executeState_GetSword() { + if (vt_0x208()) { + field_0xD5A = 0; + mSwordLink.get()->setHide(); + return; + } + + if (mAnmChrs[ANMIDX_Body].getFrame() >= 8.0f) { + field_0x88C = mSwordLink.get()->mPosition; + } + + if (dAcPy_c::GetLinkM()->IfCurrentActionToActor(this, 0xA9 /* ??? */) && mAnmChrs[ANMIDX_Body].checkFrame(8.0f)) { + if (dAcPy_c::GetLinkM()->vt_0x084(this, 0xA9 /* ??? */)) { + mCallback.field_0x04E = false; + field_0xD71 = false; + setSwordLinkTransformPlayer(); + mSwordLink.get()->setGetSword(); + } else { + fn_226_D070(); + setAnm("FreeUp", ANM_FreeUp, nullptr, m3d::PLAY_MODE_4, 2.0f, 1.0f); + changeState(StateID_ReleaseSword); + return; + } + } else if (mAnmChrs[ANMIDX_Body].getFrame() < 8.0f && + !dAcPy_c::GetLinkM()->IfCurrentActionToActor(this, 0xA9 /* ??? */)) { + fn_226_D070(); + setAnm("FreeUp", ANM_FreeUp, nullptr, m3d::PLAY_MODE_4, 2.0f, 1.0f); + changeState(StateID_ReleaseSword); + return; + } + + if (mAnmChrs[ANMIDX_Body].checkFrame(36.0f)) { + mVec3_c unused = mCallback.field_0x260 - mPosition; + unused.rotY(-mRotation.y); + + field_0xD72 = true; + mSwordLink.get()->setEquip(); + field_0xD4C = 250; + } + if (mAnmChrs[ANMIDX_Body].isStop()) { + changeState(StateID_Link_SwordWait); + } +} +void dAcGirahimuBase_c::finalizeState_GetSword() { + field_0xD5A = 0; + field_0xD71 = false; +} + +void dAcGirahimuBase_c::initializeState_SearchSword() { + mCallback.field_0x088 = true; + setAnm("Walk", ANM_Walk, nullptr, m3d::PLAY_MODE_4, 15.0f, 1.2f); + mCyl2.OnTgSet(); +} +void dAcGirahimuBase_c::executeState_SearchSword() { + field_0xD7C = false; + + if (mSwordLink.get()->isHide()) { + mVec3_c distFromHome = mStartingPos - mPosition; + if (distFromHome.absXZ() > 800.0f) { + changeState(StateID_HomeWarp); + } else { + changeState(StateID_Wait); + } + return; + } + + field_0x88C = mSwordLink.get()->mPosition; + s16 yTarget = cLib::targetAngleY(mPosition, mSwordLink.get()->mPosition); + sLib::chaseAngle(mRotation.y.ref(), yTarget, 0x200); + sLib::chaseAngle(mAngle.y.ref(), yTarget, 0x200); + + s32 f0 = yTarget - mRotation.y; + f32 f = 1.f - std::abs(mAng(f0).normal_c()); + if (f <= 0.9f) { + f = 0.0f; + fn_226_A070(yTarget); + } else { + setAnm("Walk", ANM_Walk, nullptr, m3d::PLAY_MODE_4, 15.0f, 1.2f); + } + field_0x1834 = f * 8.0f * mAnmChrs[ANMIDX_Body].getRate(); + mVec3_c v = mSwordLink.get()->mPosition - mPosition; + mAng a0 = (s32)v.atan2sX_Z(); + a0 = a0 - mRotation.y; + if (v.absXZ() < 100.0f && mAng(a0).abs() < 0x4000) { + changeState(StateID_PickUpSword); + } +} +void dAcGirahimuBase_c::finalizeState_SearchSword() { + field_0xD7C = true; + mSpeed = 0.0f; + field_0x1834 = 0.0f; + mCyl2.ClrTgSet(); +} + +void dAcGirahimuBase_c::initializeState_HomeWarp() { + mSpeed = 0.0f; + field_0x1834 = 0.0f; + setAnm("MovePose", ANM_MovePose, nullptr, m3d::PLAY_MODE_4, 15.0f, 1.5f); + mCallback.field_0x088 = true; + field_0xD44 = 0; + field_0xD6C = 0; +} +void dAcGirahimuBase_c::executeState_HomeWarp() { + mSph0.ClrTgSet(); + mCyl2.ClrTgSet(); + mCollider.ClrCo(); + + fn_226_BC00(); + + switch (field_0xD44) { + case 0: { + if (mAnmChrs[ANMIDX_Body].getFrame() >= 10.0f && sLib::chase(&field_0x8B0.x, 0.0f, 0.2f)) { + field_0xD44++; + mVec3_c v0 = dAcPy_c::GetLink()->mPosition - mStartingPos; + if (v0.absXZ() - 500.0f > 1000.0f) { + f32 f = 1000.0f; + v0.y = 0.0f; + v0.normalizeRS(); + v0 *= f; + v0 += mStartingPos; + setPosition(v0); + setOldPosition(v0); + } else { + setPosition(mStartingPos); + setOldPosition(mStartingPos); + } + mRotation.y = cLib::targetAngleY(mPosition, dAcPy_c::GetLink()->mPosition); + field_0x8B0.set(0.0f, 0.0f, 0.0f); + field_0xD46 = 20; + } + } break; + case 1: { + if (field_0xD46 <= 0) { + field_0xD44++; + field_0x8B0.set(0.0f, 1.05f, 1.05f); + } + } break; + case 2: { + mCollider.CoSet(); + if (sLib::chase(&field_0x8B0.x, 1.05f, 0.2f)) { + if (field_0xD72) { + changeState(StateID_Link_SwordWait); + } else { + vt_0x220(); + } + } + } break; + } +} +void dAcGirahimuBase_c::finalizeState_HomeWarp() { + mCallback.field_0x2BC = 0; + field_0xD44 = 0; +} + +void dAcGirahimuBase_c::initializeState_PickUpSword() { + field_0xD4C = 250; + + setAnm("PickUp02", ANM_PickUp02, nullptr, m3d::PLAY_MODE_4, 5.0f, 1.0f); + mCallback.field_0x088 = true; + + field_0x1834 = 0.0f; + mSpeed = 0.0f; +} +void dAcGirahimuBase_c::executeState_PickUpSword() { + if (mSwordLink.get()->isHide()) { + vt_0x220(); + return; + } + + field_0x88C = mSwordLink.get()->mPosition; + + if (mAnmChrs[ANMIDX_Body].checkFrame(16.0f)) { + field_0xD72 = true; + mSwordLink.get()->setEquip(); + } + + if (mAnmChrs[ANMIDX_Body].isStop()) { + changeState(StateID_Link_SwordWait); + } +} +void dAcGirahimuBase_c::finalizeState_PickUpSword() {} + +void dAcGirahimuBase_c::initializeState_Link_SwordWait() { + field_0xD6C = 2; + field_0x1872 = true; + if (!mbLinkSwordWaitFirstComplete) { + // Hah, quite the sword you have here. ... + mFlowMgr.triggerEntryPoint(201, 0x39, 0, 0); + setAnm("LookSword", ANM_LookSword, nullptr, m3d::PLAY_MODE_4, 5.0f, 1.0f); + mCallback.field_0x088 = false; + } else { + setAnm("WaitBtB", ANM_WaitBtB, nullptr, m3d::PLAY_MODE_4, 5.0f, 1.0f); + mCallback.field_0x088 = true; + } + field_0xD72 = true; + mSwordLink.get()->setEquip(); + field_0xD46 = 10; + field_0x1834 = 0.0f; + mSpeed = 0.0f; +} +void dAcGirahimuBase_c::executeState_Link_SwordWait() { + if (!mbLinkSwordWaitFirstComplete) { + mFlowMgr.checkFinished(); + } + + mCyl2.SetR(40.0f); + if (field_0xD4C <= 0) { + changeState(StateID_ReturnSword); + return; + } + + if (mAnmIDBody == ANM_LookSword) { + if (mAnmChrs[ANMIDX_Body].isStop()) { + changeState(StateID_Link_SwordWait); + return; + } + } else if (field_0xD46 <= 0) { + changeState(StateID_Link_SwordWalk); + return; + } + + if (mCallback.field_0x07C.abs() < 0x1500 && field_0x1838 < 200.0f) { + changeState(StateID_Link_SwordAttack); + } +} +void dAcGirahimuBase_c::finalizeState_Link_SwordWait() { + mbLinkSwordWaitFirstComplete = true; +} + +void dAcGirahimuBase_c::initializeState_Link_SwordWalk() { + setAnm("WalkBt", ANM_Walk, nullptr, m3d::PLAY_MODE_4, 15.0f, 1.2f); + mCallback.field_0x088 = true; + field_0xD72 = true; + mSwordLink.get()->setEquip(); + field_0xD6C = 2; +} +void dAcGirahimuBase_c::executeState_Link_SwordWalk() { + mCyl2.SetR(60.0f); + if (field_0xD4C <= 0) { + changeState(StateID_ReturnSword); + return; + } + + sLib::chaseAngle(mRotation.y.ref(), field_0x183E, 0x500); + + f32 f0 = 1.0f - std::abs(mAng::s2n_c(field_0x183E - mRotation.y)); + mAngle.y = mRotation.y; + + if (f0 <= 0.6f) { + fn_226_A070(field_0x183E.mVal); + f0 = 0.0f; + } else if (mAnmIDBody != ANM_Walk) { + setAnm("WalkBt", ANM_Walk, nullptr, m3d::PLAY_MODE_4, 15.0f, 1.2f); + } + field_0x1834 = f0 * 8.0f * mAnmChrs[ANMIDX_Body].getRate(); + + if (mCallback.field_0x07C.abs() < 0x1500 && field_0x1838 < 200.0f) { + changeState(StateID_Link_SwordAttack); + } +} +void dAcGirahimuBase_c::finalizeState_Link_SwordWalk() { + mSpeed = 0.0f; + field_0x1834 = 0.0f; +} + +void dAcGirahimuBase_c::initializeState_Link_SwordAttack() { + if (cM::rndInt(100) > 50) { + setAnm("AttackLSwordA", ANM_AttackLSwordA, nullptr, m3d::PLAY_MODE_4, 5.0f, 1.0f); + } else { + setAnm("AttackLSwordB", ANM_AttackLSwordB, nullptr, m3d::PLAY_MODE_4, 5.0f, 1.0f); + } + mCallback.field_0x088 = true; + field_0xD72 = true; + mSwordLink.get()->setEquip(); + mCallback.field_0x2D4 = 1.0f; + mCallback.field_0x2D0 = 1.0f; + mSpeed = 0.0f; + field_0x1834 = 0.0f; +} +void dAcGirahimuBase_c::executeState_Link_SwordAttack() { + mCyl2.SetR(90.0f); + sLib::chase(&field_0x8B0.x, 1.05f, 0.2f); + if (mAnmChrs[ANMIDX_Body].getFrame() < 29.0f) { + sLib::chaseAngle(mRotation.y.ref(), field_0x183E, 0x500); + } + + if (mAnmChrs[ANMIDX_Body].checkFrame(30.0f)) { + mSwordLink.get()->getMdl().setProcActive(true); + mSwordLink.get()->getMdl().enableAttack(); + return; + } + if (mAnmChrs[ANMIDX_Body].checkFrame(35.0f)) { + mSwordLink.get()->getMdl().setInactive(); + mSwordLink.get()->getMdl().setProcActive(false); + return; + } + + if (mAnmChrs[ANMIDX_Body].isStop()) { + changeState(StateID_Link_SwordWait); + return; + } +} +void dAcGirahimuBase_c::finalizeState_Link_SwordAttack() { + mSwordLink.get()->getMdl().setInactive(); + mSwordLink.get()->getMdl().setProcActive(false); +} + +void dAcGirahimuBase_c::initializeState_ReturnSword() { + field_0xD6C = 1; + setAnm("LSwordReturn", ANM_LSwordReturn, nullptr, m3d::PLAY_MODE_4, 5.0f, 1.0f); + mCallback.field_0x088 = true; + field_0xD72 = true; + mSwordLink.get()->setEquip(); + mSpeed = 0.0f; + field_0x1834 = 0.0f; +} +void dAcGirahimuBase_c::executeState_ReturnSword() { + mCyl2.SetR(60.0f); + if (mAnmChrs[ANMIDX_Body].getFrame() < 37.0f) { + sLib::chaseAngle(mRotation.y.ref(), field_0x183E, 0x500); + } + if (mAnmChrs[ANMIDX_Body].checkFrame(37.0f)) { + field_0xD72 = false; + mVec3_c playerOffs(0.0f, 100.0f, 0.0f); + playerOffs.rotY(dAcPy_c::GetLink()->mRotation.y); + playerOffs += dAcPy_c::GetLink()->mPosition; + mVec3_c throwForce = playerOffs - mCallback.field_0x260; + throwForce.normalizeRS(); + throwForce *= 100.0f; + mSwordLink.get()->setAtThrow(throwForce); + } + if (mAnmChrs[ANMIDX_Body].isStop()) { + changeState(StateID_SearchSword); + } +} +void dAcGirahimuBase_c::finalizeState_ReturnSword() {} + +void dAcGirahimuBase_c::initializeState_BackStep() { + if (mAnmIDBody == ANM_StepEnd) { + field_0xD7D = false; + calcJumpMovement(600.0f, 15.0f); + setAnm("StepLoop", ANM_StepLoop, nullptr, m3d::PLAY_MODE_4, 2.0f, 1.0f); + field_0xD44 = 2; + } else { + setAnm("StepStart", ANM_StepStart, nullptr, m3d::PLAY_MODE_4, 2.0f, 0.0f); + field_0xD44 = 0; + } + + mCyl2.ClrTgSet(); + mSph0.ClrTgSet(); + + mCallback.field_0x04E = false; + field_0xD6C = 0; + mCallback.field_0x088 = true; + field_0xD46 = 3; +} +void dAcGirahimuBase_c::executeState_BackStep() { + s32 _weird_zero = 0; + + field_0xD7C = false; + mCyl2.ClrTgSet(); + mSph0.ClrTgSet(); + + switch (field_0xD44) { + case 0: { + field_0xD7D = false; + if (mAng(mRotation.y - field_0x183E).abs() < 0x4000 && field_0xD46 <= 0) { + fn_226_D070(); + setAnm("StepStart", ANM_StepStart, nullptr, m3d::PLAY_MODE_4, 2.0f, 1.0f); + field_0xD44++; + } + } break; + case 1: { + field_0xD7D = false; + if (mAnmChrs[ANMIDX_Body].checkFrame(1.0f)) { + calcJumpMovement(600.0f, _weird_zero + 15.0f); + setAnm("StepLoop", ANM_StepLoop, nullptr, m3d::PLAY_MODE_4, 2.0f, 1.0f); + field_0xD44++; + } + } break; + case 2: { + field_0xD7D = false; + if (mVelocity.y <= 0.0f && mAcch.ChkGndHit() && mPosition.y <= mStartingPos.y + 100.0f) { + dJEffManager_c::spawnGroundEffect(mPosition, mPolyAttr0, mPolyAttr1, field_0x1B4, 0, 1.0f, field_0x1B0); + mAngle.y = mVelocity.atan2sX_Z(); + field_0x1834 = 0.0f; + mSpeed = mVelocity.absXZ(); + mVelocity.set(0.0f, 0.0f, 0.0f); + setAnm("StepEnd", ANM_StepEnd, nullptr, m3d::PLAY_MODE_4, 2.0f, 1.0f); + field_0xD44++; + } + } break; + case 3: { + field_0x1858 = 0.1f; + if (mAnmChrs[ANMIDX_Body].isStop()) { + vt_0x220(); + } + } break; + } + + sLib::chaseAngle(mRotation.y.ref(), field_0x183E, 0x2000); +} +void dAcGirahimuBase_c::finalizeState_BackStep() { + field_0xD44 = 0; + mSpeed = 0.0f; + field_0x1834 = 0.0f; + field_0xD7C = true; + mSph0.OnTgSet(); +} + +void dAcGirahimuBase_c::initializeState_Escape() { + mSpeed = 0.0f; + field_0x1834 = 0.0f; + fn_226_D070(); + setAnm("StepEnd", ANM_StepEnd, nullptr, m3d::PLAY_MODE_4, 2.0f, 1.0f); + + mCyl2.ClrTgSet(); + mSph0.ClrTgSet(); + + mCallback.field_0x04E = true; + mCallback.field_0x2D4 = 0.8f; + mCallback.field_0x2D0 = 0.8f; + + field_0xD44 = 0; + field_0xD4E = 0; + field_0xD6C = 8; + field_0xD60 = 2; +} +void dAcGirahimuBase_c::executeState_Escape() { + field_0xD81 = true; + field_0xD60 = 2; + fn_226_CC40(); + mCyl2.ClrTgSet(); + mSph0.ClrTgSet(); + mCallback.field_0x04E = false; + if (mAnmChrs[ANMIDX_Body].getFrame() >= 15.0f) { + if (dAcPy_c::GetLinkM()->isUsingSword()) { + mCallback.field_0x2D4 = 0.8f; + mCallback.field_0x2D0 = 0.8f; + } else { + mCallback.field_0x2D4 = 1.0f; + } + } + + if (mAnmChrs[ANMIDX_Body].isStop()) { + vt_0x220(); + } + + sLib::chaseAngle(mRotation.y.ref(), field_0x183E, 0x2000); + field_0xD58 = 60; + field_0xD68 = 0; + mCallback.field_0x2BC = 0; +} +void dAcGirahimuBase_c::finalizeState_Escape() { + field_0xD44 = 0; + mSpeed = 0.0f; + field_0x1834 = 0.0f; + field_0xD7C = true; + field_0xD81 = false; + mSph0.OnTgSet(); + field_0xD66 = 0; +} + +void dAcGirahimuBase_c::initializeState_EscapeBack() { + if (field_0xD7B) { + setAnm("WaitBtC", ANM_WaitBtC, nullptr, m3d::PLAY_MODE_4, 15.0f, 1.0f); + } else { + setAnm("WaitA", ANM_WaitA, nullptr, m3d::PLAY_MODE_4, 15.0f, 1.0f); + } + + mCyl2.ClrTgSet(); + mSph0.ClrTgSet(); + mCallback.field_0x04E = true; + mCallback.field_0x2D4 = 0.8f; + mCallback.field_0x2D0 = 0.8f; + + field_0xD44 = 0; + field_0xD4E = 0; + field_0xD6C = 1; + field_0xD46 = 15; + mCallback.field_0x05E = 0xA80; +} +void dAcGirahimuBase_c::executeState_EscapeBack() { + mCyl2.ClrTgSet(); + mSph0.ClrTgSet(); + if (field_0xD46 <= 0) { + vt_0x220(); + } + sLib::chaseAngle(mRotation.y.ref(), field_0x183E, 0x2000); +} +void dAcGirahimuBase_c::finalizeState_EscapeBack() { + field_0xD44 = 0; + mSpeed = 0.0f; + field_0x1834 = 0.0f; + mSph0.OnTgSet(); +} + +void dAcGirahimuBase_c::initializeState_FrontWarp() { + setAnm("MovePose", ANM_MovePose, nullptr, m3d::PLAY_MODE_4, 15.0f, 2.0f); + mCallback.field_0x088 = true; + field_0xD44 = 0; + mSpeed = 0.0f; + field_0x1834 = 0.0f; + field_0xD6C = 0; +} +void dAcGirahimuBase_c::executeState_FrontWarp() { + mCyl2.ClrTgSet(); + switch (field_0xD44) { + case 0: { + if (mAnmChrs[ANMIDX_Body].getFrame() >= 18.0f) { + mCollider.ClrCo(); + if (sLib::chase(&field_0x8B0.x, 0.0f, 0.2f) != 0) { + field_0xD44++; + field_0x8B0.set(0.0f, 0.0f, 0.0f); + field_0xD46 = 20 + cM::rndInt(30); + vt_0x1F8(); + } + } + } break; + case 1: { + mRotation.y = cLib::targetAngleY(mPosition, dAcPy_c::GetLink()->mPosition); + if (field_0xD46 <= 0) { + mVec3_c start = mPosition; + mVec3_c end = mPosition; + for (int i = 0; i < 4; ++i) { + mAng yRot = (i * 0x4000) + dAcPy_c::GetLink()->mRotation.y; + start.set(dAcPy_c::GetLink()->mPosition); + start.y += 100.0f; + end.set(0.0f, 0.0f, 130.0f); + end.rotY(yRot); + end += start; + if (!dBgS_ObjLinChk::LineCross(&start, &end, nullptr)) { + break; + } + } + end.y = mPosition.y; + setPosition(end); + setOldPosition(end); + mRotation.y = cLib::targetAngleY(mPosition, dAcPy_c::GetLink()->mPosition); + field_0x8B0.set(0.0f, 1.05f, 1.05f); + field_0xD44++; + vt_0x20C(); + return; + } + + if (!turn(field_0x183E)) { + vt_0x228(); + } + } break; + } + sLib::chaseAngle(mRotation.y.ref(), field_0x183E, 0x500); +} +void dAcGirahimuBase_c::finalizeState_FrontWarp() { + mCollider.CoSet(); + field_0xD44 = 0; + mCyl2.OnTgSet(); +} + +void dAcGirahimuBase_c::initializeState_FrontAttack() { + field_0x1834 = 0.0f; + mSpeed = 0.0f; + mCallback.field_0x088 = true; + field_0xD6C = 0; + if (vt_0x218()) { + field_0xD46 = 40; + } else { + field_0xD46 = 50; + } +} +void dAcGirahimuBase_c::executeState_FrontAttack() { + mCollider.ClrCo(); + if (field_0x8B0.x >= 0.5f) { + mCollider.CoSet(); + } + if (field_0xD8C) { + if (!fn_226_A120(field_0x183E, 200.0f)) { + vt_0x228(); + } + sLib::chaseAngle(mRotation.y.ref(), field_0x183E, 0x500); + } else { + if (!turn(field_0x183E)) { + vt_0x228(); + } + } + + if (sLib::chase(&field_0x8B0.x, 1.05f, 0.2f) != FALSE) { + field_0xD6C = 5; + } + + sLib::chaseAngle(mRotation.y.ref(), field_0x183E, 0x500); + if (field_0xD46 <= 0) { + if (field_0x1838 <= 350.0f) { + changeState(StateID_Counter); + } else { + vt_0x220(); + } + } +} +void dAcGirahimuBase_c::finalizeState_FrontAttack() {} + +void dAcGirahimuBase_c::initializeState_BackWarp() { + setAnm("MovePose", ANM_MovePose, nullptr, m3d::PLAY_MODE_4, 15.0f, 2.0f); + mCallback.field_0x088 = true; + field_0xD44 = 0; + mCyl2.ClrTgSet(); + mSpeed = 0.0f; + field_0x1834 = 0.0f; + field_0xD6C = 0; +} +void dAcGirahimuBase_c::executeState_BackWarp() { + mCyl2.ClrTgSet(); + + switch (field_0xD44) { + case 0: { + if (mAnmChrs[ANMIDX_Body].getFrame() >= 18.0f) { + mCollider.ClrCo(); + if (sLib::chase(&field_0x8B0.x, 0.0, 0.2f)) { + field_0xD44++; + field_0x8B0.set(0.0f, 0.0f, 0.0f); + field_0xD46 = 20 + cM::rndInt(30); + if (vt_0x218()) { + field_0xD46 /= 2; + } + vt_0x1F8(); + } + } + } break; + case 1: { + mRotation.y = cLib::targetAngleY(mPosition, dAcPy_c::GetLink()->mPosition); + if (field_0xD46 <= 0) { + mVec3_c start = mPosition; + mVec3_c end = mPosition; + for (int i = 0; i < 4; ++i) { + mAng yRot = dAcPy_c::GetLink()->mRotation.y + 0x8000 + (i * 0x4000); + start.set(dAcPy_c::GetLink()->mPosition); + start.y += 100.0f; + end.set(0.0f, 0.0f, 130.0f); + end.rotY(yRot); + end += start; + if (!dBgS_ObjLinChk::LineCross(&start, &end, nullptr)) { + break; + } + } + end.y = mPosition.y; + setPosition(end); + setOldPosition(end); + mRotation.y = cLib::targetAngleY(mPosition, dAcPy_c::GetLink()->mPosition); + field_0x8B0.set(0.0f, 1.05f, 1.05f); + field_0xD44++; + changeState(StateID_BackAttack); + return; + } + } break; + } + sLib::chaseAngle(mRotation.y.ref(), field_0x183E, 0x500); +} +void dAcGirahimuBase_c::finalizeState_BackWarp() { + mCollider.CoSet(); + field_0xD44 = 0; + mCyl2.OnTgSet(); +} + +void dAcGirahimuBase_c::initializeState_BackAttack() { + field_0x1834 = 0.0f; + mSpeed = 0.0f; + vt_0x224(); + mCallback.field_0x088 = true; + field_0xD6C = 0; + field_0xD46 = 50; +} +void dAcGirahimuBase_c::executeState_BackAttack() { + mCollider.ClrCo(); + if (field_0x8B0.x >= 0.5f) { + mCollider.CoSet(); + } + + if (!turn(field_0x183E)) { + vt_0x228(); + } + sLib::chaseAngle(mRotation.y.ref(), field_0x183E, 0x500); + + if (sLib::chase(&field_0x8B0.x, 1.05f, 0.2f) != FALSE) { + field_0xD6C = 5; + } else { + field_0xD6C = 0; + } + + if (field_0xD46 <= 0) { + if (field_0x1838 <= 350.0f) { + changeState(StateID_Counter); + } else { + vt_0x220(); + } + } +} +void dAcGirahimuBase_c::finalizeState_BackAttack() {} + +void dAcGirahimuBase_c::initializeState_Counter() { + field_0xD7E = false; + if (mAnmIDBody == ANM_PoseL) { + setAnm("PoseLAttack", ANM_PoseLAttack, nullptr, m3d::PLAY_MODE_4, 5.0f, 1.0f); + } else if (mAnmIDBody == ANM_PoseR) { + setAnm("PoseRAttack", ANM_PoseRAttack, nullptr, m3d::PLAY_MODE_4, 5.0f, 1.0f); + } else if (mAnmIDBody == ANM_PoseC2) { + setAnm("PoseCAttack", ANM_PoseCAttack2, nullptr, m3d::PLAY_MODE_4, 5.0f, 1.0f); + } else if (mAnmIDBody == ANM_PoseC) { + setAnm("PoseCAttack", ANM_PoseCAttack, nullptr, m3d::PLAY_MODE_4, 5.0f, 1.0f); + } else { + int rnd = cM::rndInt(90); + if (rnd > 60) { + setAnm("PoseLAttack", ANM_PoseLAttack, nullptr, m3d::PLAY_MODE_4, 5.0f, 1.0f); + } else if (rnd > 30) { + setAnm("PoseRAttack", ANM_PoseRAttack, nullptr, m3d::PLAY_MODE_4, 5.0f, 1.0f); + } else { + setAnm("PoseCAttack", ANM_PoseCAttack, nullptr, m3d::PLAY_MODE_4, 5.0f, 1.0f); + } + field_0xD7E = true; + } + field_0x1834 = 0.0f; + mSpeed = 0.0f; + mCallback.field_0x088 = true; + field_0xD6C = 5; +} +void dAcGirahimuBase_c::executeState_Counter() { + sLib::chaseAngle(mRotation.y.ref(), field_0x183E, 0x500); + if (mAnmChrs[ANMIDX_Body].getFrame() >= 16.0f && mAnmChrs[ANMIDX_Body].getFrame() <= 20.0f) { + mMdlSwordA.enableAttack(); + mMdlSwordA.setProcActive(true); + } else { + mMdlSwordA.setInactive(); + mMdlSwordA.setProcActive(false); + } + + if (mAnmChrs[ANMIDX_Body].isStop()) { + vt_0x220(); + } + + if (mAnmChrs[ANMIDX_Body].getFrame() <= 16.0f) { + field_0xD6C = 5; + } else { + field_0xD6C = 6; + } +} +void dAcGirahimuBase_c::finalizeState_Counter() { + mMdlSwordA.setInactive(); + mMdlSwordA.setProcActive(false); + + mCyl2.OnTgSet(); + field_0xD82 = false; +} + +void dAcGirahimuBase_c::initializeState_Run() { + field_0xD6C = 3; + field_0xD44 = 0; + + if (cM::rndInt(100) > 50) { + setAnm("AttackPoseL", ANM_AttackPoseL, nullptr, m3d::PLAY_MODE_4, 5.0f, 1.0f); + } else { + setAnm("AttackPoseR", ANM_AttackPoseR, nullptr, m3d::PLAY_MODE_4, 5.0f, 1.0f); + } + mCallback.field_0x088 = false; + field_0x1834 = 0.0f; +} +void dAcGirahimuBase_c::executeState_Run() { + s32 _weird_zero = 0; + + fn_226_CC40(); + switch (field_0xD44) { + case 0: { + field_0xD81 = true; + field_0x1858 = 0.1f; + if (mAnmChrs[ANMIDX_Body].getFrame() >= 40.0f) { + field_0xD46 = 0; + field_0xD44++; + field_0xD81 = false; + } + sLib::chaseAngle(mRotation.y.ref(), field_0x183E, 0x500); + } break; + case 1: { + if (field_0xD46 <= 0 || field_0x1838 <= 500.0f) { + if (fn_226_CC80()) { + setAnm("AttackLRun", ANM_AttackLRun, nullptr, m3d::PLAY_MODE_4, 5.0f, 1.0f); + + } else { + setAnm("AttackRRun", ANM_AttackRRun, nullptr, m3d::PLAY_MODE_4, 5.0f, 1.0f); + } + + field_0xD44++; + if (vt_0x218()) { + field_0x1834 = _weird_zero + 52.0f; + } else { + field_0x1834 = _weird_zero + 45.0f; + } + field_0x1840.set(mPosition); + mMtx_c m; + MTXIdentity(m); + dStageMgr_c::GetInstance()->procfn_800192F0(0xDC, m, 0x14); + } + sLib::chaseAngle(mRotation.y.ref(), field_0x183E, 0x500); + } break; + case 2: { + mVec3_c v1; + mVec3_c v0 = dAcPy_c::GetLink()->mPosition - field_0x1840; + if (fn_226_CC80()) { + v1.set(-100.0f, 0.0f, 50.0f); + v1.rotY(v0.atan2sX_Z()); + v1 += dAcPy_c::GetLink()->mPosition; + sLib::chaseAngle(mRotation.y.ref(), cLib::targetAngleY(mPosition, v1), 0x2000); + } else { + v1.set(100.0f, 0.0f, 50.0f); + v1.rotY(v0.atan2sX_Z()); + v1 += dAcPy_c::GetLink()->mPosition; + sLib::chaseAngle(mRotation.y.ref(), cLib::targetAngleY(mPosition, v1), 0x2000); + } + v0 = v1 - mPosition; + + f32 dir = v0.absXZ(); + if (dir <= 200.0f || mAcch.ChkWallHit(nullptr)) { + field_0xD44++; + field_0x184C.set(dAcPy_c::GetLink()->mPosition); + } else if ((dAcPy_c::GetLink()->getCurrentAction() == 98 /* BACKFLIP */ || + dAcPy_c::GetLink()->checkFlags0x350(0x80000)) && + dir <= 500.0f) { + field_0xD44++; + field_0x184C.set(dAcPy_c::GetLink()->mPosition); + } + } break; + case 3: { + mVec3_c v1; + mVec3_c v0 = field_0x184C - field_0x1840; + if (fn_226_CC80()) { + v1.set(-100.0f, 0.0f, 50.0f); + v1.rotY(v0.atan2sX_Z()); + v1 += field_0x184C; + sLib::chaseAngle(mRotation.y.ref(), cLib::targetAngleY(mPosition, v1), 0x2000); + } else { + v1.set(100.0f, 0.0f, 50.0f); + v1.rotY(v0.atan2sX_Z()); + v1 += field_0x184C; + s16 target = cLib::targetAngleY(mPosition, v1); + sLib::chaseAngle(mRotation.y.ref(), target, 0x2000); + } + v0 = v1 - mPosition; + + f32 dir = v0.absXZ(); + if (dir <= 150.0f || mAcch.ChkWallHit(nullptr)) { + changeState(StateID_RunAttack); + } + } break; + } +} +void dAcGirahimuBase_c::finalizeState_Run() { + field_0x1834 = 0.0f; + field_0xD81 = false; +} + +void dAcGirahimuBase_c::initializeState_RunAttack() { + field_0xD6C = 4; + if (fn_226_CC80()) { + setAnm("AttackSwordL", ANM_AttackSwordL, nullptr, m3d::PLAY_MODE_4, 5.0f, 1.0f); + } else { + setAnm("AttackSwordR", ANM_AttackSwordR, nullptr, m3d::PLAY_MODE_4, 5.0f, 1.0f); + } + mCallback.field_0x088 = true; + field_0x1834 = 0.0f; + field_0x1858 = 0.2f; +} +void dAcGirahimuBase_c::executeState_RunAttack() { + if (mAnmChrs[ANMIDX_Body].getFrame() > 20.0f) { + field_0xD6C = 8; + field_0xD81 = true; + } + + if (mAnmChrs[ANMIDX_Body].checkFrame(4.0f)) { + mMdlSwordA.enableAttack(); + } + + if (mAnmChrs[ANMIDX_Body].checkFrame(5.0f)) { + mMdlSwordA.setProcActive(true); + } else if (mAnmChrs[ANMIDX_Body].checkFrame(15.0f)) { + mMdlSwordA.setInactive(); + mMdlSwordA.setProcActive(false); + } else if (mAnmChrs[ANMIDX_Body].isStop()) { + vt_0x220(); + } +} +void dAcGirahimuBase_c::finalizeState_RunAttack() { + mMdlSwordA.setInactive(); + mMdlSwordA.setProcActive(false); + field_0x1858 = 0.5f; +} + +void dAcGirahimuBase_c::initializeState_BackWalk() { + field_0xD80 = false; + field_0xD6C = 6; + setAnm("WalkBt", ANM_Walk, nullptr, m3d::PLAY_MODE_2, 15.0f, 1.0f); + mCallback.field_0x088 = true; + field_0xD46 = 50; + field_0x1834 = mAnmChrs[ANMIDX_Body].getRate() * -8.0f; +} +void dAcGirahimuBase_c::executeState_BackWalk() { + if (field_0xD46 <= 0) { + vt_0x220(); + return; + } + fn_226_B960(6.0f); +} +void dAcGirahimuBase_c::finalizeState_BackWalk() {} + +dAcGirahimuBase_c::~dAcGirahimuBase_c() { + if (pSoundIface != nullptr) { + if (pSoundIface->hasPlayingSounds()) { + do { + VIWaitForRetrace(); + } while (pSoundIface->hasPlayingSounds()); + } + } +} + +void dAcGirahimuBase_c::initNodeData() { + nw4r::g3d::ResMdl mdl = mMdlBody.getResMdl(); + mCallback.mNodeID_ShoulderR = mdl.GetResNode("ShoulderR").GetID(); + mCallback.mNodeID_ShoulderL = mdl.GetResNode("ShoulderL").GetID(); + mCallback.mNodeID_Hip = mdl.GetResNode("Hip").GetID(); + mCallback.mNodeID_ArmR = mdl.GetResNode("ArmR").GetID(); + mCallback.mNodeID_ArmL = mdl.GetResNode("ArmL").GetID(); + mCallback.mNodeID_ElbowR = mdl.GetResNode("ElbowR").GetID(); + mCallback.mNodeID_ElbowL = mdl.GetResNode("ElbowL").GetID(); + mCallback.mNodeID_HandR = mdl.GetResNode("HandR").GetID(); + mCallback.mNodeID_Head = mdl.GetResNode("Head").GetID(); + mCallback.mNodeID_Neck = mdl.GetResNode("Neck").GetID(); + mCallback.mNodeID_Hair1 = mdl.GetResNode("Hair1").GetID(); + mCallback.mNodeID_Hair2 = mdl.GetResNode("Hair2").GetID(); + mCallback.mNodeID_Hair3 = mdl.GetResNode("Hair3").GetID(); + mCallback.mNodeID_Hair4 = mdl.GetResNode("Hair4").GetID(); + mCallback.mNodeID_Spine1 = mdl.GetResNode("Spine1").GetID(); + mCallback.mNodeID_Spine2 = mdl.GetResNode("Spine2").GetID(); + mCallback.mNodeID_BrowL = mdl.GetResNode("BrowL").GetID(); + mCallback.mNodeID_BrowR = mdl.GetResNode("BrowR").GetID(); + mCallback.mNodeID_Chin = mdl.GetResNode("Chin").GetID(); + mCallback.mNodeID_MouthL = mdl.GetResNode("MouthL").GetID(); + mCallback.mNodeID_MouthR = mdl.GetResNode("MouthR").GetID(); + mCallback.mNodeID_Upperjaw = mdl.GetResNode("Upperjaw").GetID(); + mCallback.mNodeID_SklRoot = mdl.GetResNode("SklRoot").GetID(); + mCallback.mNodeID_KneeR = mdl.GetResNode("KneeR").GetID(); + mCallback.mNodeID_KneeL = mdl.GetResNode("KneeL").GetID(); + mCallback.mNodeID_LegR = mdl.GetResNode("LegR").GetID(); + mCallback.mNodeID_LegL = mdl.GetResNode("LegL").GetID(); + + mVec3_c nodeTranslation = mdl.GetResNode("ElbowR").GetTranslate(); + mCallback.field_0x234 = nodeTranslation.mag() * 1.05f; + mCallback.field_0x17C = mdl.GetResNode("ElbowR").GetScale(); + + nodeTranslation = mdl.GetResNode("HandR").GetTranslate(); + mCallback.field_0x188 = nodeTranslation.mag() * 1.05f; + mCallback.field_0x228 = mdl.GetResNode("ArmR").GetScale(); +} + +bool dAcGirahimuBase_c::createHeap() { + nw4r::g3d::ResFile bodyRes; + void *rawRes = getOarcResFile("GirahimBt"); + mResAnmChr0 = nw4r::g3d::ResFile(rawRes); + vt_0x200(); + nw4r::g3d::ResMdl resMdl = mResAnmChr0.GetResMdl("GirahimBt"); + if (!mMdlBody.create(resMdl, &mAllocator, 0x137, 1, nullptr)) { + return false; + } + TRY_CREATE(mAnmChrBlend.create(resMdl, 10, &mAllocator, nullptr)); + + nw4r::g3d::ResAnmChr resAnm = mResAnmChr1.GetResAnmChr("WaitA"); + if (!resAnm.IsValid()) { + resAnm = mResAnmChr0.GetResAnmChr("WaitA"); + } + for (int i = 0; i < 5; ++i) { + if (!mAnmChrs[i].create(resMdl, resAnm, &mAllocator, nullptr)) { + mMdlBody.remove(); + return false; + } + } + + for (int i = 0; i < 5; ++i) { + mAnmChrBlend.attach(i, &mAnmChrs[i], 1.0f); + } + + nw4r::g3d::ResAnmTexPat pat = mResAnmChr1.GetResAnmTexPat("GirahimBtWink"); + TRY_CREATE(mAnmTexPatWink.create(resMdl, pat, &mAllocator, nullptr, 1)); + + mMdlBody.setAnm(mAnmTexPatWink); + mMdlBody.setCallback(&mCallback); + mMdlBody.setAnm(mAnmChrBlend, 5.0f); + + initNodeData(); + + bodyRes = nw4r::g3d::ResFile(rawRes); + mMdlPias.create(bodyRes.GetResMdl("Pias"), &mAllocator, 0x20); + + mVec3_c v0(0.0f, -200.0f, 0.0f); + TRY_CREATE( + mMdlSwordA.create(&mAllocator, rawRes, "GirahimSwordA", 0x130, mVec3_c::Zero, v0, mStts, nullptr, 1, nullptr) + ); + + mVec3_c v1(0.0f, -200.0f, 0.0f); + TRY_CREATE( + mMdlSwordB.create(&mAllocator, rawRes, "GirahimSwordB", 0x130, mVec3_c::Zero, v1, mStts, nullptr, 1, nullptr) + ); + + int id = m3d::getMatID(mMdlBody.getResMdl(), "m_Eyeball"); + mEyeMdlCallback.create(mMdlBody, id, id, 1, 1, nullptr); + mEyeMdlCallback.mBlendWeight = 1; + pSoundIface = getSoundSource(); + + return true; +} + +void dAcGirahimuBase_c::createCollision() { + mEmitter.init(this); + + mStts.SetRank(12); + + mAcch.Set(this, 1, &mAcchCir); + mAcchCir.SetWall(50.0f, 100.0f); + + mMdlSwordA.setDamageMaybe(4); + mMdlSwordB.setDamageMaybe(4); + + mCollider.addCc(mSph0, sSrcSph); + mCollider.addCc(mCps0, sSrcCps); + mCollider.addCc(mCps1, sSrcCps); + mCollider.addCc(mCyl2, sSrcCyl); + + mCps0.SetTgShieldType(~AT_TYPE_NONE); + mCps1.SetTgShieldType(~AT_TYPE_NONE); + + mCyl1.Set(sSrcCyl); + mCyl1.ClrTgSet(); + mCyl1.OnCoSet(); + mCyl1.SetStts(mStts); + + mCyl0.Set(sSrcCyl); + mCyl0.OnTgSet(); + mCyl0.ClrCoSet(); + mCyl0.OnTg_0x40(); + + mCyl2.SetR(30.0f); + + mCyl0.SetStts(mStts); + + field_0x20E4 = 30.0f; + field_0x20E8 = 30.0f; + + mCollider.SetStts(mStts); + field_0xD56 = 30; + mCyl2.ClrTgSet(); + + mCallback.init(this); + + mBoundingBox.Set(mVec3_c(-100.0f, -500.0f, -100.0f), mVec3_c(100.0f, 1000.0f, 100.0f)); + + mAnmIDBody = ANM_NONE; + mAcceleration = -6.0f; + mMaxSpeed = -80.0f; + field_0x1858 = 0.5f; + field_0xD7C = true; + field_0x8B0.set(1.05f, 1.05f, 1.05f); + mHealth = 100; + + field_0x8FC.ZrotS(-0x4000); + mMdlSwordA.fn_8006B7A0(0x10000); + mMdlSwordB.fn_8006B7A0(0x10000); + field_0x186C = 40.0f; +} + +int dAcGirahimuBase_c::actorPostCreate() { + if ((s32)getFromParams(0, 0xFF) != 0xFF) { + // zone temp flag: 0x1 01 + SceneflagManager::sInstance->unsetFlag(mRoomID, getFromParams(0, 0xFF)); + } + if ((s32)getFromParams(0, 0xFF) != 0xFF) { + // zone temp flag: 0x1 04 + SceneflagManager::sInstance->unsetFlag(mRoomID, getFromParams(8, 0xFF)); + } + + dAcObjGirahimuSwordLink_c *swLink = static_cast( + create(fProfile::OBJ_GH_SW_L, mRoomID, 0, &mPosition, nullptr, nullptr, 0xFFFFFFFF) + ); + mSwordLink.link(swLink); + return SUCCEEDED; +} + +int dAcGirahimuBase_c::doDelete() { + return SUCCEEDED; +} + +int dAcGirahimuBase_c::preExecute() { + if ((dAcPy_c::GetLink()->getCurrentAction() == 74 /* DIE */ || dLytMsgWindow_c::getInstance()->isVisible()) && + mBossCaptionTimer > 0) { + mBossCaptionTimer = 0; + dLytBossCaption_c::GetInstance()->unk_inline1(); + } + dAcEnBase_c::preExecute(); +} + +void dAcGirahimuBase_c::vt_0x1DC() { + mSph0.SetTgType(AT_TYPE_DAMAGE | AT_TYPE_SWORD); + field_0x8A4.set(field_0x8B0); + + field_0xD8D = false; + field_0xD7C = true; + field_0xD7D = true; + + field_0x1858 = 0.5f; + + mVec3_c diffToLink = mPosition - dAcPy_c::GetLink()->mPosition; + field_0x1838 = diffToLink.absXZ(); + + field_0x183E = cLib::targetAngleY(mPosition, dAcPy_c::GetLink()->mPosition); + + sLib::chase(&field_0x20E4, field_0x20E4, 10.0f); + + mVec3_c diffFromHome = mPosition - mStartingPos; + field_0x1868 = diffFromHome.absXZ(); + + // clang-format off + if (--field_0xD46 <= 0) { field_0xD46 = 0; } + if (--field_0xD48 <= 0) { field_0xD48 = 0; } + if (--field_0xD50 <= 0) { field_0xD50 = 0; } + if (--field_0xD54 <= 0) { field_0xD54 = 0; } + if (--field_0xD4C <= 0) { field_0xD4C = 0; } + if (--field_0xD5C <= 0) { field_0xD5C = 0; } + if (--mBossCaptionTimer <= 0) { mBossCaptionTimer = 0; } + if (--field_0xD68 <= 0) { field_0xD68 = 0; } + if (--field_0xD58 <= 0) { field_0xD58 = 0; } + // clang-format on + if (--field_0xD60 <= 0) { + field_0xD60 = 0; + mSph0.OnTgSet(); + mCyl2.OnTgSet(); + } else { + mSph0.ClrTgSet(); + mCyl2.ClrTgSet(); + } + + mCyl2.SetR(30.0f); + mCyl2.OffTgShieldType(AT_TYPE_DAMAGE | AT_TYPE_SWORD); + mCyl2.SetTgType(~AT_TYPE_COMMON0); + + mCyl0.SetR(200.0f); + mCyl2.SetH(mCallback.field_0x08C.y - mPosition.y); + + mCps0.ClrTgSet(); + mCps1.ClrTgSet(); + if (field_0xD5C <= 0) { + dAcObjBase_c *pObj = dAcPy_c::GetLink()->getBeetleInFlight(); + if (pObj != nullptr) { + field_0x88C.set(pObj->mPosition); + } else { + field_0x88C.set(getPlayerHeadOffset()); + } + } + + if (!dAcPy_c::GetLinkM()->isAttacking()) { + field_0x898 = mCallback.field_0x260 - mCallback.field_0x21C; + field_0x898.rotY(-mRotation.y); + field_0x898.z = 0.0f; + } + + f32 swordLen = 120.0f; + s32 swordType = getPlayerSwordType(); + + if (dAcPy_c::GetLinkM()->isUsingSword()) { + if (swordType == 4 || swordType == 5) { + swordLen *= 1.4f; + } + field_0x20E8 = swordLen; + } else { + field_0x20E8 = 30.0f; + } + + mCyl0.OnTgSet(); + if (dAcPy_c::GetLinkM()->isAttacking() && !field_0xD7A) { + field_0xD7A = true; + mPlayerAttackDir = dAcPy_c::GetLink()->getSpecificAttackDirection(); + } else if (!dAcPy_c::GetLinkM()->isAttacking()) { + field_0xD7A = false; + } + + if (dAcPy_c::GetLink()->isAttacking()) { + field_0xD54 = 20; + } + sLib::chaseAngle(mCallback.field_0x056.ref(), 0, 0x200); + sLib::addCalcAngle(mCallback.field_0x054.ref(), mCallback.field_0x056, 2, 0x20C); +} + +s32 dAcGirahimuBase_c::getPlayerSwordType() { + return dAcPy_c::getCurrentSwordTypeInline(); +} + +bool dAcGirahimuBase_c::setAnm( + const char *anmName, s32 anmId, const char *anmName1, m3d::playMode_e playMode, f32 f0, f32 rate +) { + bool ret = false; + if (mAnmIDBody != anmId) { + if (setAnmBody(anmName, anmId, playMode, f0, rate)) { + setAnmHip(anmName, anmId, playMode, f0, rate); + setAnmShoulderR(anmName, anmId, playMode, f0, rate); + setAnmShoulderL(anmName, anmId, playMode, f0, rate); + if (anmName1 != nullptr) { + setAnmShoulderL(anmName1, anmId, playMode, f0, rate); + } else { + setAnmShoulderL(anmName, anmId, playMode, f0, rate); + } + } + + ret = true; + } + return ret; +} + +bool dAcGirahimuBase_c::setAnm( + const char *anmName, s32 anmId, const char *anmNameHip, s32 anmIdHip, const char *anmNameShoulderL, + s32 anmIdShoulderL, m3d::playMode_e playMode, f32 f0, f32 rate +) { + bool ret = false; + if (mAnmIDBody != anmId) { + if (setAnmBody(anmName, anmId, playMode, f0, rate)) { + setAnmHip(anmNameHip, anmIdHip, playMode, f0, rate); + setAnmShoulderR(anmName, anmId, playMode, f0, rate); + setAnmShoulderL(anmName, anmId, playMode, f0, rate); + if (anmNameShoulderL != nullptr) { + setAnmShoulderL(anmNameShoulderL, anmIdShoulderL, playMode, f0, rate); + } else { + setAnmShoulderL(anmName, anmIdShoulderL, playMode, f0, rate); + } + } + + ret = true; + } + return ret; +} + +bool dAcGirahimuBase_c::setAnm(const char *anmName, s32 anmId, m3d::playMode_e playMode, f32 f0, f32 rate) { + bool ret = false; + if (mAnmIDBody != anmId) { + nw4r::g3d::ResAnmChr resAnm = mResAnmChr1.GetResAnmChr(anmName); + if (!resAnm.IsValid()) { + resAnm = mResAnmChr0.GetResAnmChr(anmName); + } + setAnmBody(anmName, anmId, playMode, f0, rate); + setAnmShoulderR(anmName, anmId, playMode, f0, rate); + setAnmShoulderL(anmName, anmId, playMode, f0, rate); + setAnmHead(anmName, anmId, playMode, f0, rate); + ret = true; + } + return ret; +} + +bool dAcGirahimuBase_c::setAnmBody(const char *anmName, s32 anmId, m3d::playMode_e playMode, f32 f0, f32 rate) { + bool ret = false; + if (mAnmIDBody != anmId) { + nw4r::g3d::ResAnmChr resAnm = mResAnmChr1.GetResAnmChr(anmName); + if (!resAnm.IsValid()) { + resAnm = mResAnmChr0.GetResAnmChr(anmName); + } + mAnmChrs[ANMIDX_Body].setAnm(mMdlBody, resAnm, playMode); + bindAnmBody(); + mAnmIDBody = anmId; + mMdlBody.setAnm(mAnmChrBlend, f0); + + ret = true; + fn_226_BE90(anmName); + + for (int i = 0; i < 5; ++i) { + mAnmChrs[i].setRate(rate); + } + + if (mAnmChrs[ANMIDX_Body].getPlayMode() == m3d::PLAY_MODE_2) { + rate = -rate; + } + + if (pSoundIface != nullptr) { + pSoundIface->setRate(rate); + } + } + return ret; +} + +bool dAcGirahimuBase_c::setAnmHip(const char *anmName, s32 anmId, m3d::playMode_e playMode, f32 f0, f32 rate) { + if (mAnmIDHip != anmId) { + mAnmIDHip = anmId; + nw4r::g3d::ResAnmChr resAnm = mResAnmChr1.GetResAnmChr(anmName); + if (!resAnm.IsValid()) { + resAnm = mResAnmChr0.GetResAnmChr(anmName); + } + mAnmChrs[ANMIDX_Hip].setAnm(mMdlBody, resAnm, playMode); + mAnmChrs[ANMIDX_Hip].setRate(rate); + bindAnmHip(); + mMdlBody.setAnm(mAnmChrBlend, f0); + } + return true; +} + +bool dAcGirahimuBase_c::setAnmShoulderR(const char *anmName, s32 anmId, m3d::playMode_e playMode, f32 f0, f32 rate) { + if (mAnmIDShoulderR != anmId) { + mAnmIDShoulderR = anmId; + fn_226_CE00(); + nw4r::g3d::ResAnmChr resAnm = mResAnmChr1.GetResAnmChr(anmName); + if (!resAnm.IsValid()) { + resAnm = mResAnmChr0.GetResAnmChr(anmName); + } + mAnmChrs[ANMIDX_ShoulderR].setAnm(mMdlBody, resAnm, playMode); + mAnmChrs[ANMIDX_ShoulderR].setRate(rate); + bindAnmShoulderR(); + mMdlBody.setAnm(mAnmChrBlend, f0); + } + return true; +} + +bool dAcGirahimuBase_c::setAnmShoulderL(const char *anmName, s32 anmId, m3d::playMode_e playMode, f32 f0, f32 rate) { + if (mAnmIDShoulderL != anmId) { + mAnmIDShoulderL = anmId; + fn_226_CDA0(); + nw4r::g3d::ResAnmChr resAnm = mResAnmChr1.GetResAnmChr(anmName); + if (!resAnm.IsValid()) { + resAnm = mResAnmChr0.GetResAnmChr(anmName); + } + mAnmChrs[ANMIDX_ShoulderL].setAnm(mMdlBody, resAnm, playMode); + mAnmChrs[ANMIDX_ShoulderL].setRate(rate); + bindAnmShoulderL(); + mMdlBody.setAnm(mAnmChrBlend, f0); + } + return true; +} + +bool dAcGirahimuBase_c::setAnmHead(const char *anmName, s32 anmId, m3d::playMode_e playMode, f32 f0, f32 rate) { + if (mAnmIDHead != anmId) { + mAnmIDHead = anmId; + nw4r::g3d::ResAnmChr resAnm = mResAnmChr1.GetResAnmChr(anmName); + if (!resAnm.IsValid()) { + resAnm = mResAnmChr0.GetResAnmChr(anmName); + } + mAnmChrs[ANMIDX_Head].setAnm(mMdlBody, resAnm, playMode); + mAnmChrs[ANMIDX_Head].setRate(rate); + bindAnmHead(); + mMdlBody.setAnm(mAnmChrBlend, f0); + } + return true; +} + +void dAcGirahimuBase_c::bindAnmHead() { + nw4r::g3d::AnmObjChr *pAnmObj = static_cast(mAnmChrs[ANMIDX_Head].getAnimObj()); + pAnmObj->Release(); + pAnmObj->Bind(mMdlBody.getResMdl(), mCallback.mNodeID_Head, nw4r::g3d::AnmObjChr::BIND_PARTIAL); +} + +void dAcGirahimuBase_c::bindAnmBody() { + nw4r::g3d::AnmObjChr *pAnmObj = static_cast(mAnmChrs[ANMIDX_Body].getAnimObj()); + pAnmObj->Release(); + pAnmObj->Bind(mMdlBody.getResMdl(), mCallback.mNodeID_Head, nw4r::g3d::AnmObjChr::BIND_ONE); + pAnmObj->Bind(mMdlBody.getResMdl(), mCallback.mNodeID_Spine1, nw4r::g3d::AnmObjChr::BIND_ONE); + pAnmObj->Bind(mMdlBody.getResMdl(), mCallback.mNodeID_Spine2, nw4r::g3d::AnmObjChr::BIND_ONE); +} + +void dAcGirahimuBase_c::bindAnmHip() { + nw4r::g3d::AnmObjChr *pAnmObj = static_cast(mAnmChrs[ANMIDX_Hip].getAnimObj()); + pAnmObj->Release(); + pAnmObj->Bind(mMdlBody.getResMdl(), mCallback.mNodeID_SklRoot, nw4r::g3d::AnmObjChr::BIND_ONE); + pAnmObj->Bind(mMdlBody.getResMdl(), mCallback.mNodeID_Hip, nw4r::g3d::AnmObjChr::BIND_PARTIAL); +} + +void dAcGirahimuBase_c::bindAnmShoulderR() { + nw4r::g3d::AnmObjChr *pAnmObj = static_cast(mAnmChrs[ANMIDX_ShoulderR].getAnimObj()); + pAnmObj->Release(); + pAnmObj->Bind(mMdlBody.getResMdl(), mCallback.mNodeID_ShoulderR, nw4r::g3d::AnmObjChr::BIND_PARTIAL); +} + +void dAcGirahimuBase_c::bindAnmShoulderL() { + nw4r::g3d::AnmObjChr *pAnmObj = static_cast(mAnmChrs[ANMIDX_ShoulderL].getAnimObj()); + pAnmObj->Release(); + pAnmObj->Bind(mMdlBody.getResMdl(), mCallback.mNodeID_ShoulderL, nw4r::g3d::AnmObjChr::BIND_PARTIAL); +} + +void dAcGirahimuBase_c::fn_226_9620() { + sLib::addCalcAngle(mCallback.field_0x058.ref(), mCallback.field_0x05C, 2, 0x1000); + sLib::chaseAngle(mCallback.field_0x05C.ref(), 0, 0x100); + sLib::addCalcAngle(mCallback.field_0x05A.ref(), mCallback.field_0x05E, 2, 0x1000); + sLib::chaseAngle(mCallback.field_0x05E.ref(), 0, 0x100); +} + +void dAcGirahimuBase_c::fn_226_9690() { + mVec3_c headTranslation(0.0f, 0.0f, 0.0f); + mMtx_c transform; + nw4r::g3d::ResMdl mdl = mMdlBody.getResMdl(); + mMdlBody.getNodeWorldMtx(mdl.GetResNode("Head").GetID(), transform); + + transform.getTranslation(headTranslation); + if (field_0x8B0.x > 0.0f && cM::isZero(nw4r::math::VEC3LenSq(field_0x185C))) { + mPositionCopy3.set(headTranslation); + mPositionCopy3.y += 30.0f; + mPositionCopy2.set(mPositionCopy3); + AttentionManager::GetInstance()->addUnk3Target(*this, 0x3, 10000.0f, 50.0f, -200.0f, 200.0f); + } + mVec3_c hairTranslation(0.0f, 0.0f, 0.0f); + mMdlBody.getNodeWorldMtx(mdl.GetResNode("Hair1").GetID(), transform); + transform.getTranslation(hairTranslation); + + mVec3_c v1 = mCallback.field_0x070 - headTranslation; + mVec3_c v0 = hairTranslation - headTranslation; + + s16 a1 = (s32)(v1.atan2sX_Z() - v0.atan2sX_Z()); + s16 a2 = (s32)(v1.atan2sY_XZ() - v0.atan2sY_XZ()); + + if (a1 < 0x2001) { + if (u16(a1 + 500) > 0x2000 + 500) { + a1 = -500; + } + } else { + a1 = 0x2000; + } + + if (mAnmIDBody == ANM_Walk) { + a1 = a1 / 2; + } + + if (a2 > -0x2001) { + if (u16(a2 + 0x2000U) > 0x2000) { + a2 = 0; + } + } else { + a2 = -0x2000; + } + sLib::addCalcAngle(mCallback.field_0x06E.ref(), 0, 2, 0x500); + sLib::addCalcAngle(mCallback.field_0x06C.ref(), 0, 2, 0x500); + sLib::addCalcAngle(mCallback.field_0x068.ref(), a1, 2, 0x1000); + sLib::addCalcAngle(mCallback.field_0x06A.ref(), a2, 2, 0x1000); + + sLib::addCalcAngle(mCallback.field_0x062.y.ref(), mCallback.field_0x06E + mCallback.field_0x068, 2, 0x1000); + sLib::addCalcAngle(mCallback.field_0x062.z.ref(), mCallback.field_0x06C + mCallback.field_0x06A, 2, 0x1000); + + mCallback.field_0x070.set(hairTranslation); +} + +void dAcGirahimuBase_c::fn_256_99F0() { + mVec3_c _v0 = field_0x12D0; + mVec3_c _v1(0.0f, 0.0f, 0.0f); + mMtx_c swordRTransform; + mMdlBody.getNodeWorldMtx(mMdlBody.getResMdl().GetResNode("SwordR_loc").GetID(), swordRTransform); + swordRTransform.getTranslation(field_0x12D0); + + if (field_0x8B0.x < 1.05f) { + swordRTransform.scaleM(field_0x8B0); + } else { + mVec3_c scale(1.05f, field_0x12DC, 1.05f); + swordRTransform.scaleM(scale); + } + + mVec3_c v0(0.0f, 0.0f, 1.0f); + v0.rotY(mRotation.y); + mAng a = mAng::d2s_c(15.0f); + swordRTransform.ZrotM(a); + mMdlSwordA.calc(swordRTransform, v0, false); + + mVec3_c _v2 = field_0x1820; + mVec3_c _v3(0.0f, 0.0f, 0.0f); + mMtx_c swordLTransform; + mMdlBody.getNodeWorldMtx(mMdlBody.getResMdl().GetResNode("SwordL_loc").GetID(), swordLTransform); + swordLTransform.getTranslation(field_0x1820); + + if (field_0x8B0.x < 1.05f) { + swordLTransform.scaleM(field_0x8B0); + } else { + mVec3_c scale(1.05f, field_0x12DC, 1.05f); + swordLTransform.scaleM(scale); + } + + mVec3_c v1(0.0f, 0.0f, 1.0f); + v1.rotY(mRotation.y); + swordLTransform.ZrotM(a); + mMdlSwordB.calc(swordLTransform, v1, false); +} + +void dAcGirahimuBase_c::fn_256_9C90() { + if (field_0xD81) { + fn_226_CC40(); + } else { + fn_226_CC50(); + } + mVec3_c v0(0.0f, 0.0f, 40.0f); + v0.rotY(mRotation.y); + + mCps0.ClrCoSet(); + mCps1.ClrCoSet(); + + mCyl1.SetC(mPosition); + mCyl0.SetC(mPosition); + mCyl2.SetC(mPosition); + + mVec3_c v1 = mCallback.field_0x260; + if (dAcPy_c::GetLink()->isAttackingSpin()) { + if (v1.y > mPosition.y + 150.0f) { + v1.y = mPosition.y + 150.0f; + } + } + mSph0.SetC(v1); + + mVec3_c cpsStart(0.0f, 0.0f, 0.0f); + mVec3_c cpsEnd(0.0f, 0.0f, 0.0f); + mVec3_c v4(0.0f, -200.0f, 0.0f); + mMtx_c swordTransform; + nw4r::g3d::ResMdl mdl = mMdlBody.getResMdl(); + mMdlBody.getNodeWorldMtx(mdl.GetResNode("SwordR_loc").GetID(), swordTransform); + swordTransform.getTranslation(cpsStart); + swordTransform.m[0][3] = swordTransform.m[1][3] = swordTransform.m[2][3] = 0.0f; + swordTransform.ZrotM(2000); + mVec3_c v5; + swordTransform.multVec(v4, v5); + cpsEnd.set(cpsStart); + cpsEnd += v0; + cpsEnd += v5; + cpsStart += v0; + + if (mAnmIDBody == ANM_PoseLAttack || mAnmIDBody == ANM_PoseRAttack) { + cpsStart.y -= 50.0f; + cpsEnd.y -= 50.0f; + } + mCps0.Set(cpsStart, cpsEnd); + + mMdlBody.getNodeWorldMtx(mdl.GetResNode("SwordL_loc").GetID(), swordTransform); + swordTransform.getTranslation(cpsStart); + swordTransform.m[0][3] = swordTransform.m[1][3] = swordTransform.m[2][3] = 0.0f; + swordTransform.ZrotM(2000); + + swordTransform.multVec(v4, v5); + cpsStart += v0; + cpsEnd = cpsStart; + + if (mAnmIDBody == ANM_PoseLAttack || mAnmIDBody == ANM_PoseRAttack) { + cpsStart.y -= 50.0f; + cpsEnd.y -= 50.0f; + } + mCps1.Set(cpsStart, cpsEnd); + + mCollider.registerColliders(); + dCcS::GetInstance()->Set(&mCyl0); + mCyl1.SetR(field_0x20E4); + dCcS::GetInstance()->Set(&mCyl1); +} + +bool dAcGirahimuBase_c::fn_226_A070(mAng rotTarget) { + mAng rot = mRotation.y; + s32 angDiff = rotTarget - mRotation.y; + if (rot == rotTarget) { + return false; + } + + if ((s16)angDiff > 0) { + if (mAnmIDBody != ANM_TurnL) { + setAnm("TurnL", ANM_TurnL, nullptr, m3d::PLAY_MODE_4, 15.0f, 1.0f); + } + } else { + if (mAnmIDBody != ANM_TurnR) { + setAnm("TurnR", ANM_TurnR, nullptr, m3d::PLAY_MODE_4, 15.0f, 1.0f); + } + } + return true; +} + +bool dAcGirahimuBase_c::fn_226_A120(mAng rot, f32 f0) { + if (mAnmIDHip == ANM_Walk) { + if (mAnmChrs[ANMIDX_Hip].getPlayMode() != m3d::PLAY_MODE_2) { + field_0x1834 = mAnmChrs[ANMIDX_Body].getRate() * 8.0f; + mSpeed = field_0x1834; + } else { + field_0x1834 = mAnmChrs[ANMIDX_Body].getRate() * -8.0f; + mSpeed = field_0x1834; + } + } + + if (mRotation.y == rot && field_0x1838 <= f0) { + field_0x1834 = 0.0f; + return false; + } + + if (field_0x1838 > f0 + 100.0f) { + if (mAnmIDHip != ANM_Walk) { + setAnmHip("WalkBt", ANM_Walk, m3d::PLAY_MODE_4, 5.0f, 1.0f); + } + } else { + if (field_0x1838 <= f0) { + return turn(field_0x183E); + } + if (mAnmIDHip != ANM_Walk) { + turn(field_0x183E); + } + } + return true; +} + +bool dAcGirahimuBase_c::fn_226_A280(mAng rot) { + mAng roty = mRotation.y; + s32 diff = rot - mRotation.y; + mAng diff0 = roty - field_0x183E; + if (mCallback.field_0x056 == 0) { + if (diff0.abs() != 0) { + if ((s16)diff > 0) { + mCallback.field_0x056 = mAng(0x3000); + } else { + mCallback.field_0x056 = mAng(-0x3000); + } + } + } + return mCallback.field_0x056 != 0; +} + +bool dAcGirahimuBase_c::turn(mAng rotTarget) { + s32 angDiff = angleDiff(rotTarget, mRotation.y); + s16 rot = mRotation.y; + if (rot == field_0x183E) { + return false; + } + + if (mAnmIDHip == ANM_TurnL || mAnmIDHip == ANM_TurnR) { + return true; + } + + if ((s16)angDiff > 0) { + if (mAnmIDHip != ANM_TurnL) { + setAnmHip("TurnL", ANM_TurnL, m3d::PLAY_MODE_4, 5.0f, 1.0f); + field_0x1834 = 0.0f; + mSpeed = 0.0f; + } + } else { + if (mAnmIDHip != ANM_TurnR) { + setAnmHip("TurnR", ANM_TurnR, m3d::PLAY_MODE_4, 5.0f, 1.0f); + field_0x1834 = 0.0f; + mSpeed = 0.0f; + } + } + return true; +} + +void dAcGirahimuBase_c::fn_226_A400(cCcD_Obj *pObj) { + switch (pObj->GetTgAtCutDir()) { + case CUT_DIR_U: { + mCallback.field_0x05E = mAng(0x1500); + mCallback.field_0x05C = 0; + } break; + case CUT_DIR_D: { + mCallback.field_0x05E = -0x1500; + mCallback.field_0x05C = 0; + } break; + case CUT_DIR_LU: { + mCallback.field_0x05E = mAng(0x1500); + mCallback.field_0x05C = mAng(0x1500); + } break; + case CUT_DIR_RD: { + mCallback.field_0x05E = -0x1500; + mCallback.field_0x05C = -0x1500; + } break; + case CUT_DIR_L: { + mCallback.field_0x05C = mAng(0x1500); + } break; + case CUT_DIR_R: { + mCallback.field_0x05C = -0x1500; + } break; + case CUT_DIR_LD: { + mCallback.field_0x05E = -0x1500; + mCallback.field_0x05C = mAng(0x1500); + } break; + case CUT_DIR_RU: { + mCallback.field_0x05E = mAng(0x1500); + mCallback.field_0x05C = -0x1500; + } break; + default: { + mCallback.field_0x05E = 0xA80; + mCallback.field_0x05C = 0; + } break; + } + + if (mAng(mRotation.y - field_0x183E).abs() > 0x4000) { + mCallback.field_0x05C = -mCallback.field_0x05C; + } + mCallback.field_0x060 = mRotation.y; +} + +bool dAcGirahimuBase_c::fn_226_A570() { + bool ret = false; + mVec3_c v0; + switch (mPlayerAttackDir) { + case CUT_DIR_U: v0.set(0.0f, -1.0f, 0.0f); break; + case CUT_DIR_D: v0.set(0.0f, 1.0f, 0.0f); break; + case CUT_DIR_LU: v0.set(1.0f, -1.0f, 0.0f); break; + case CUT_DIR_RD: v0.set(-1.0f, 1.0f, 0.0f); break; + case CUT_DIR_L: v0.set(1.0f, 0.0f, 0.0f); break; + case CUT_DIR_R: v0.set(-1.0f, 0.0f, 0.0f); break; + case CUT_DIR_LD: v0.set(1.0f, 1.0f, 0.0f); break; + case CUT_DIR_RU: v0.set(-1.0f, -1.0f, 0.0f); break; + default: { + return true; + } break; + } + v0.normalizeRS(); + if (field_0xD68 <= 0) { + return true; + } + + if (dAcPy_c::GetLink()->isAttackingSpin()) { + f32 ang = field_0x898.angle(v0); + if (mAng::fromRad(ang) > 0x2000) { + ret = true; + } + } else { + f32 ang = mCallback.field_0x2E0.angle(v0); + if (mAng::fromRad(ang) > 0x5500) { + ret = true; + } + } + + return ret; +} + +mVec3_c dAcGirahimuBase_c::getPlayerHeadOffset() { + mVec3_c headTranslation = dAcPy_c::GetLink()->getHeadTranslation(); + headTranslation.y -= 30.0f; + return headTranslation; +} + +void dAcGirahimuBase_c::executeEarringTransform() { + mVec3_c v0(8.0f, 0.0f, 0.0f); + field_0x8FC.multVec(v0, v0); + v0 += field_0x92C; + + mMtx_c earringTransform; + nw4r::g3d::ResMdl mdl = mMdlBody.getResMdl(); + mMdlBody.getNodeWorldMtx(mdl.GetResNode("Earring").GetID(), earringTransform); + earringTransform.getTranslation(field_0x92C); + + mVec3_c diff = v0 - field_0x92C; + diff.y -= 3.0f; + diff.normalizeRS(); + + mVec3_c from(1.0f, 0.0f, 0.0f); + mQuat_c q0; + q0.slerp(from, diff, 1.0f); + field_0x8FC.fromQuat(q0); + mMtx_c transform; + transform.transS(field_0x92C); + transform.concat(field_0x8FC); + transform.scaleM(field_0x8B0); + mMdlPias.setLocalMtx(transform); +} + +void dAcGirahimuBase_c::calcJumpMovement(f32 f0, f32 f1) { + s32 _weird_zero = 0; + mVec3_c diff = mPosition - mStartingPos; + (void)diff.absXZ(); + mAngle.y = field_0x183E + 0x8000; + + mVec3_c v0(0.0f, 0.0f, f0); + v0.rotY(mAngle.y); + v0 += mPosition; + { mAcceleration = 5.0f; } // used to force rodata pool in preamble + mAcceleration = _weird_zero + 6.0f; + calcVelocity(v0, f1); + mAcceleration = -mAcceleration; +} + +int dAcGirahimuBase_c::draw() { + if (field_0x8B0.x <= 0.0f) { + return SUCCEEDED; + } + + drawModelType1(&mMdlBody); + drawModelType1(&mMdlPias); + static mSphere_c bodySph(mVec3_c(0.0f, 100.0f, 0.0f), 300.0f); + static mSphere_c swordSph(mVec3_c(0.0f, 0.0f, 0.0f), 0.0f); + + fn_8002edb0(mShadow, mMdlBody, &bodySph, -1, -1, 0.0f); + if (field_0xD7B) { + mMdlSwordA.entry(this, nullptr, nullptr); + m3d::mShadow_c::GetInstance()->addMdlToCircle(&mShadow, mMdlSwordA.mMdl, swordSph); + + if (field_0x12E0) { + mMdlSwordB.entry(this, nullptr, nullptr); + m3d::mShadow_c::GetInstance()->addMdlToCircle(&mShadow, mMdlSwordB.mMdl, swordSph); + } + } + + return SUCCEEDED; +} + +void dAcGirahimuBase_c::fn_226_ADC0(cCcD_Obj *pObj) { + s32 currentCutDir = pObj->GetTgAtCutDir(); + s32 previousCutDir = mPreviousHitCutDir; + + if (previousCutDir == CUT_DIR_U || previousCutDir == CUT_DIR_D) { + if (currentCutDir == CUT_DIR_U || currentCutDir == CUT_DIR_D) { + field_0xD8E++; + } else { + field_0xD8E = 1; + } + } else if (previousCutDir == CUT_DIR_LU || previousCutDir == CUT_DIR_RD) { + if (currentCutDir == CUT_DIR_LU || currentCutDir == CUT_DIR_RD) { + field_0xD8E++; + } else { + field_0xD8E = 1; + } + } else if (previousCutDir == CUT_DIR_LD || previousCutDir == CUT_DIR_RU) { + if (currentCutDir == CUT_DIR_LD || currentCutDir == CUT_DIR_RU) { + field_0xD8E++; + } else { + field_0xD8E = 1; + } + } else if (field_0xD8E <= 0) { + field_0xD8E = 1; + } + mPreviousHitCutDir = currentCutDir; +} + +void dAcGirahimuBase_c::setSwordLinkTransform() { + if (!field_0xD72) { + return; + } + + mVec3_c swordTranslation(0.0f, 0.0f, 0.0f); + mMtx_c swordTransform; + nw4r::g3d::ResMdl mdl = mMdlBody.getResMdl(); + mMdlBody.getNodeWorldMtx(mdl.GetResNode("SwordR_loc").GetID(), swordTransform); + swordTransform.getTranslation(swordTranslation); + swordTransform.m[2][3] = swordTransform.m[1][3] = swordTransform.m[0][3] = 0.0f; + swordTransform.ZrotM(0x1000); + mVec3_c v0(swordTranslation.x, swordTranslation.y, swordTranslation.z); + + mSwordLink.get()->setTransform(swordTransform, v0); +} + +void dAcGirahimuBase_c::setSwordLinkTransformPlayer() { + mMtx_c swordTransform; + mVec3_c swordTranslation; + dAcPy_c::GetLinkM()->getSwordModelMatrix(&swordTransform); + swordTransform.getTranslation(swordTranslation); + swordTransform.m[2][3] = swordTransform.m[1][3] = swordTransform.m[0][3] = 0.0f; + swordTransform.ZrotM(0x4000); + swordTransform.YrotM(0x4000); + + mVec3_c v0(swordTranslation.x, swordTranslation.y, swordTranslation.z); + mSwordLink.get()->setTransform(swordTransform, v0); +} + +bool dAcGirahimuBase_c::vt_0x1E0() { + someEnemyDamageCollisionStuffMaybe(mCollider, nullptr); + if (mCyl0.ChkTgHit()) { + u32 hitType = mCyl0.GetTgAtHitType(); + + if (field_0xD81) { + if (hitType == AT_TYPE_SWORD) { + if (isState(StateID_Run)) { + changeState(StateID_BackStep); + return true; + } + mVec3_c v0 = mPosition - mStartingPos; + mVec3_c v1(0.0f, 0.0f, 1.0f); + v1.rotY(mRotation.y); + if (field_0x1868 >= 1500.0f && v0.dot(v1) < 0.0f) { + field_0x8DC = 0; + changeState(StateID_HomeWarp); + return true; + } + s32 cutDir = mCyl0.GetTgAtCutDir(); + if (cutDir == CUT_DIR_LU || cutDir == CUT_DIR_LD || cutDir == CUT_DIR_RU || cutDir == CUT_DIR_RD || + cutDir == CUT_DIR_R || cutDir == CUT_DIR_L) { + if (isState(StateID_Escape)) { + changeState(StateID_BackStep); + return true; + } + + vt_0x214(); + return true; + } else { + changeState(StateID_BackStep); + return true; + } + } else { + if (hitType == AT_TYPE_BELLOWS) { + mCallback.field_0x06C = -0x2000; + } else if (hitType == AT_TYPE_ARROW || hitType == AT_TYPE_CLAWSHOT || hitType == AT_TYPE_0x800000 || + hitType == AT_TYPE_BOMB) { + vt_0x21C(true); + } + return false; + } + } + if (hitType == AT_TYPE_ARROW || hitType == AT_TYPE_CLAWSHOT || hitType == AT_TYPE_0x800000 || + hitType == AT_TYPE_BOMB) { + vt_0x21C(true); + } + } + if (mCyl2.ChkTgHit() && mCyl2.GetTgAtHitType() == AT_TYPE_BELLOWS) { + mCallback.field_0x06C = -0x2000; + } + return false; +} + +void dAcGirahimuBase_c::vt_0x1E4() { + if (field_0xD81) { + return; + } + + cCcD_Obj *pCc = mCollider.findTgHit(); + if (pCc != nullptr) { + switch (pCc->GetTgAtHitType()) { + case AT_TYPE_SWORD: { + if (pCc->GetTgShieldType() != 0) { + changeState(StateID_Catch); + } else { + fn_226_A400(pCc); + changeState(StateID_CatchDamage); + field_0xD68 = 0; + } + } break; + case AT_TYPE_DAMAGE: { + u16 health = mHealth; + if (health != 0) { + health--; + } + mHealth = health; + + mVec3_c v0 = mPosition; + v0.y += 100.0f; + getSoundSource()->startSoundAtPosition(SE_Girahim_DMG_KNIFE, v0); + changeState(StateID_CatchDamage); + } break; + } + } + + bool b0 = fn_226_A570(); + if (mAnmIDBody == ANM_Damage) { + b0 = false; + } else { + field_0xD4E = 0; + } + + if (field_0xD58 > 0) { + b0 = true; + } + + if (b0) { + mSph0.SetTgShieldType(~AT_TYPE_DAMAGE); + mCyl2.SetTgShieldType(~AT_TYPE_DAMAGE); + } else { + mSph0.SetTgShieldType(AT_TYPE_NONE); + mCyl2.OffTgShieldType(AT_TYPE_DAMAGE | AT_TYPE_SWORD); + } + + if (field_0xD50 <= 0 && !isState(StateID_Panch)) { + return; + } + + mSph0.SetTgShieldType(~AT_TYPE_NONE); +} + +void dAcGirahimuBase_c::vt_0x1F0() {} + +void dAcGirahimuBase_c::vt_0x1E8() { + cCcD_Obj *pCc = mSwordLink.get()->mMdl.mCcList.findAtHit(); + if (pCc != nullptr) { + if (pCc->ChkAtShieldReflect()) { + changeState(StateID_LinkSwordGuardJust); + } + } + + if (mCyl2.ChkTgHit()) { + u32 hitType = mCyl2.GetTgAtHitType(); + + if (hitType == AT_TYPE_BELLOWS) { + mCallback.field_0x06C = -0x2000; + } else if (hitType != AT_TYPE_SWORD && hitType != AT_TYPE_DAMAGE) { + field_0x88C.set(const_cast &>(mCyl2).GetTgHitPos()); + field_0xD5C = 20; + } + } +} + +void dAcGirahimuBase_c::vt_0x1EC() { + someEnemyDamageCollisionStuffMaybe(mCollider, nullptr); + mCyl2.OffTgShieldType(AT_TYPE_DAMAGE | AT_TYPE_SWORD); + cCcD_Obj *pCc = mCollider.findTgHit(); + if (pCc != nullptr) { + u32 hitType = pCc->GetTgAtHitType(); + switch (hitType) { + case AT_TYPE_SWORD: { + startSound(SE_BGh_V_DAMAGE); + fn_226_A400(pCc); + fn_226_ADC0(pCc); + fn_226_D070(); + setAnm("DamageHit", ANM_DamageHit, nullptr, m3d::PLAY_MODE_4, 5.0f, 1.0f); + } break; + case AT_TYPE_DAMAGE: { + u16 health = mHealth; + if (health != 0) { + health--; + } + mHealth = health; + + mVec3_c v0 = mPosition; + v0.y += 100.0f; + getSoundSource()->startSoundAtPosition(SE_Girahim_DMG_KNIFE, v0); + field_0xD62 += 50; + } break; + } + } +} + +void dAcGirahimuBase_c::fn_226_B960(f32 f0) { + if (mAnmIDHip != ANM_Walk) { + return; + } + + field_0xD7C = false; + sLib::chaseAngle(mRotation.y.ref(), field_0x183E, 0x500); + s32 f = field_0x183E - mRotation.y; + f32 f1 = 1.0f - std::abs(mAng(f).normal_c()); + if (f1 <= 0.6f) { + f1 = 0.0f; + } + + if (mAnmChrs[ANMIDX_Hip].getPlayMode() == m3d::PLAY_MODE_2) { + f32 rate = mAnmChrs[ANMIDX_Hip].getRate(); + mAngle.y = mRotation.y; + field_0x1834 = -f0 * rate; + } else { + f32 rate = mAnmChrs[ANMIDX_Hip].getRate(); + mAngle.y = mRotation.y; + field_0x1834 = f0 * f1; + field_0x1834 *= rate; + } + + if (dAcPy_c::GetLinkM()->isUsingSword()) { + field_0x20E8 = 120.0f; + } else { + field_0x20E8 = 30.0f; + } +} + +bool dAcGirahimuBase_c::vt_0x21C(bool bStartSound) { + if (!cM::isZero(nw4r::math::VEC3LenSq(field_0x185C))) { + return false; + } + + field_0xD60 = 0; + int rnd = cM::rndInt(100); + if (rnd > 50) { + field_0x185C.set(0.0f, 0.0f, 50.0f); + field_0x185C.rotY(field_0x183E + 0x4000); + } else { + field_0x185C.set(0.0f, 0.0f, 50.0f); + field_0x185C.rotY(field_0x183E - 0x4000); + } + + if (bStartSound) { + startSound(SE_Girahim_SHY); + mMtx_c m0; + MTXIdentity(m0); + dStageMgr_c::GetInstance()->procfn_800192F0(0xEE, m0, 10); + } + return true; +} + +void dAcGirahimuBase_c::fn_226_BC00() { + bool b = true; + if (field_0xD66 <= 0 && field_0xD58 <= 0 && mCallback.field_0x2D8 >= 25.0f && mCallback.field_0x098 <= 4.0f) { + b = false; + } + if (!b) { + mCallback.field_0x2CC = 0.0f; + field_0xD66 = 90; + if (mHealth >= 100) { + field_0xD66 = 120; + } + field_0xD68 = 150; + if (mHealth >= 100) { + field_0xD68 = 190; + } + } else if (--field_0xD66 <= 0) { + field_0xD66 = 0; + sLib::chase(&mCallback.field_0x2CC, 30.0f, 5.0f); + } + + if (dAcPy_c::GetLinkM()->isUsingSword() && field_0x1838 <= 500.0f && + ((u16)(s16)mAnmIDBody == ANM_WaitA || (u16)(s16)mAnmIDBody == ANM_Walk)) { + if (!mCallback.field_0x04E) { + mCallback.field_0x04F = true; + field_0xD50 = 5; + } else { + mCallback.field_0x04F = false; + } + mCallback.field_0x04E = true; + field_0x88C += dAcPy_c::GetLink()->getSwordPos(); + field_0x88C *= 0.5f; + field_0x88C.y = getPlayerHeadOffset().y; + mCallback.field_0x2D4 = 0.2f; + return; + } + + mCallback.field_0x04F = false; + mCallback.field_0x04E = false; + mCallback.field_0x2D4 = 1.0f; +} + +void dAcGirahimuBase_c::setFrame(f32 frame) { + for (int i = 0; i < 5; ++i) { + mAnmChrs[i].setFrameOnly(frame); + } + + if (pSoundIface != nullptr) { + pSoundIface->setFrame(mAnmChrs[ANMIDX_Body].getFrame()); + } +} + +bool dAcGirahimuBase_c::fn_226_BE90(const char *soundName) { + if (pSoundIface == nullptr || !pSoundIface->hasAnimSound()) { + return true; + } + SizedString<64> str; + str.sprintf("%s.brasd", soundName); + mpSoundBrasd = mResAnmChr1.GetExternalData(str); + if (mpSoundBrasd == nullptr) { + mpSoundBrasd = mResAnmChr0.GetExternalData(str); + } + + pSoundIface->load(mpSoundBrasd, soundName); + if (pSoundIface != nullptr) { + pSoundIface->setFrame(mAnmChrs[ANMIDX_Body].getFrame()); + } + return true; +} + +void dAcGirahimuBase_c::fn_226_C060() { + fn_226_C560(); + if (mCyl0.ChkTgHit()) { + u32 hitType = mCyl0.GetTgAtHitType(); + if (hitType == AT_TYPE_SWORD) { + if (mAnmIDBody == ANM_AttackPoseL || mAnmIDBody == ANM_AttackPoseR) { + changeState(StateID_BackStep); + } else { + changeState(StateID_RunAttack); + mSpeed = 120.0f; + } + } else { + changeState(StateID_BackStep); + } + } else { + cCcD_Obj *pCc = mCollider.findTgHit(); + if (pCc != nullptr && pCc->GetTgAtHitType() == AT_TYPE_SWORD) { + fn_226_A400(pCc); + changeState(StateID_G_SwordDamage); + } + } +} + +void dAcGirahimuBase_c::fn_226_C1C0() { + if (dAcPy_c::GetLink()->isAttacking()) { + fn_226_C6A0(); + } + cCcD_Obj *pCc = mCollider.findTgHit(); + if (pCc != nullptr && pCc->GetTgAtHitType() == AT_TYPE_SWORD) { + fn_226_A400(pCc); + changeState(StateID_G_SwordDamage); + } + + pCc = mMdlSwordA.mCcList.findAtHit(); + if (pCc != nullptr && pCc->ChkAtShieldReflect()) { + changeState(StateID_G_SwordDamage); + fn_226_D070(); + setAnm("GuardLSwordA", ANM_DamageHit, nullptr, m3d::PLAY_MODE_4, 5.0f, 1.0f); + field_0xD62 = 40; + mCallback.field_0x088 = true; + mRotation.y = field_0x183E; + } +} + +void dAcGirahimuBase_c::fn_226_C320() { + vt_0x1F4(); + cCcD_Obj *pCc = mMdlSwordA.mCcList.findAtHit(); + if (pCc != nullptr && pCc->ChkAtShieldReflect()) { + changeState(StateID_G_SwordDamage); + fn_226_D070(); + setAnm("GuardLSwordA", ANM_DamageHit, nullptr, m3d::PLAY_MODE_4, 5.0f, 1.0f); + field_0xD62 = 40; + mCallback.field_0x088 = true; + mRotation.y = field_0x183E; + return; + } + cCcD_Obj *pTgCc = mCollider.findTgHit(); + if (pTgCc != nullptr && pTgCc->GetTgAtHitType() == AT_TYPE_SWORD) { + if (pTgCc == &mCps0 || pTgCc == &mCps1) { + const mVec3_c &hitPos = pTgCc->GetTgHitPos(); + getSoundSource()->startSoundAtPosition(SE_Girahim_SWORD_HIT_SWORD, hitPos); + if (!getStateID().isEqual(StateID_Counter)) { + changeState(StateID_Counter); + setFrame(8.0f); + } + } else if (pTgCc == &mCyl2) { + fn_226_A400(pTgCc); + if (pTgCc->GetTgAtCutDir() == CUT_DIR_STAB) { + changeState(StateID_BackStep); + } else { + changeState(StateID_G_SwordDamage); + } + } + } +} + +void dAcGirahimuBase_c::fn_226_C560() { + if (field_0xD81) { + return; + } + + s32 cutDir = mPlayerAttackDir; + if (mAnmIDBody != ANM_AttackPoseL && mAnmIDBody != ANM_AttackPoseR) { + mCyl2.SetTgShieldType(~AT_TYPE_SWORD); + mCyl0.ClrTgSet(); + } + if (fn_226_CC80()) { + if (cutDir == CUT_DIR_LU || cutDir == CUT_DIR_L || cutDir == CUT_DIR_LD || cutDir == CUT_DIR_RU || + cutDir == CUT_DIR_U || cutDir == CUT_DIR_D) { + mCyl2.SetTgShieldType(~AT_TYPE_SWORD); + mCyl0.ClrTgSet(); + } else { + mCyl2.SetTgShieldType(~AT_TYPE_NONE); + mCyl2.SetTgType(~(AT_TYPE_COMMON0 | AT_TYPE_SWORD)); + } + } else { + if (cutDir == CUT_DIR_RU || cutDir == CUT_DIR_R || cutDir == CUT_DIR_RD || cutDir == CUT_DIR_LU || + cutDir == CUT_DIR_U || cutDir == CUT_DIR_D) { + mCyl0.ClrTgSet(); + mCyl2.SetTgShieldType(~AT_TYPE_SWORD); + } else { + mCyl2.SetTgShieldType(~AT_TYPE_NONE); + mCyl2.SetTgType(~(AT_TYPE_COMMON0 | AT_TYPE_SWORD)); + } + } +} + +void dAcGirahimuBase_c::fn_226_C6A0() { + s32 cutDir = mPlayerAttackDir; + if (fn_226_CC80()) { + if (cutDir == CUT_DIR_NONE || cutDir == CUT_DIR_U || cutDir == CUT_DIR_LU || cutDir == CUT_DIR_L || + cutDir == CUT_DIR_LD || cutDir == CUT_DIR_RU || cutDir == CUT_DIR_D) { + mCyl0.ClrTgSet(); + mCyl2.SetTgShieldType(~AT_TYPE_SWORD); + } else { + mCyl2.SetTgShieldType(~AT_TYPE_NONE); + mCyl2.SetTgType(~(AT_TYPE_COMMON0 | AT_TYPE_SWORD)); + } + } else { + if (cutDir == CUT_DIR_NONE || cutDir == CUT_DIR_U || cutDir == CUT_DIR_LU || cutDir == CUT_DIR_RU || + cutDir == CUT_DIR_R || cutDir == CUT_DIR_RD || cutDir == CUT_DIR_D) { + mCyl0.ClrTgSet(); + mCyl2.SetTgShieldType(~AT_TYPE_SWORD); + } else { + mCyl2.SetTgShieldType(~AT_TYPE_NONE); + mCyl2.SetTgType(~(AT_TYPE_COMMON0 | AT_TYPE_SWORD)); + } + } +} + +void dAcGirahimuBase_c::fn_226_C790(cCcD_Obj &cc, s16 anm) { + if (field_0xD54 <= 0) { + cc.ClrTgSet(); + return; + } + + s32 cutDir = mPlayerAttackDir; + switch (anm) { + case ANM_PoseL: + case ANM_PoseLAttack: + if (cutDir == CUT_DIR_RU || cutDir == CUT_DIR_R || cutDir == CUT_DIR_RD) { + cc.OnTgSet(); + } else { + cc.ClrTgSet(); + } + break; + + case ANM_PoseR: + case ANM_PoseRAttack: + if (cutDir == CUT_DIR_LU || cutDir == CUT_DIR_L || cutDir == CUT_DIR_LD) { + cc.OnTgSet(); + } else { + cc.ClrTgSet(); + } + break; + + case ANM_PoseC: + case ANM_PoseCAttack: + if (cutDir == CUT_DIR_U || cutDir == CUT_DIR_LU || cutDir == CUT_DIR_RU) { + cc.OnTgSet(); + } else { + cc.ClrTgSet(); + } + break; + + case ANM_PoseC2: + case ANM_PoseCAttack2: + if (cutDir == CUT_DIR_D || cutDir == CUT_DIR_LD || cutDir == CUT_DIR_RD) { + cc.OnTgSet(); + } else { + cc.ClrTgSet(); + } + break; + + case ANM_PoseLR: + case ANM_PoseLU: + case ANM_PoseRU: + case ANM_PoseUD: break; + + case ANM_PoseLRAttack: + if (cutDir == CUT_DIR_D || cutDir == CUT_DIR_U) { + cc.ClrTgSet(); + } else { + cc.OnTgSet(); + } + break; + case ANM_PoseUDAttack: + if (cutDir == CUT_DIR_L || cutDir == CUT_DIR_R) { + cc.ClrTgSet(); + } else { + cc.OnTgSet(); + } + break; + case ANM_PoseLUAttack: + if (cutDir == CUT_DIR_L || cutDir == CUT_DIR_LD || cutDir == CUT_DIR_D) { + cc.ClrTgSet(); + } else { + cc.OnTgSet(); + } + break; + case ANM_PoseRUAttack: + if (cutDir == CUT_DIR_R || cutDir == CUT_DIR_RD || cutDir == CUT_DIR_U) { + cc.ClrTgSet(); + } else { + cc.OnTgSet(); + } + break; + + default: break; + } +} + +void dAcGirahimuBase_c::vt_0x1F4() { + mCyl2.OnTgSet(); + if (!field_0x12E0 && mAnmIDBody == ANM_PoseC2) { + mAnmIDBody = ANM_PoseC; + } + + fn_226_C790(mCps0, mAnmIDBody); + + if (mCps0.ChkTgSet()) { + mCyl2.ClrTgSet(); + } +} + +void dAcGirahimuBase_c::vt_0x1F8() { + if (dAcPy_c::GetLinkM()->isUsingSword()) { + mVec3_c v0 = dAcPy_c::GetLink()->getSwordPos() - mPosition; + mVec3_c v1 = dAcPy_c::GetLink()->getSwordPos() - dAcPy_c::GetLink()->vt_0x278(); + v1.normalizeRS(); + if (v1.y >= 0.5f) { + setAnm("PoseC", ANM_PoseC, nullptr, m3d::PLAY_MODE_4, 5.0f, 1.0f); + } else { + s16 a = v0.atan2sX_Z(); + if (a - mRotation.y > 0) { + setAnm("PoseL", ANM_PoseL, nullptr, m3d::PLAY_MODE_4, 5.0f, 1.0f); + } else { + setAnm("PoseR", ANM_PoseR, nullptr, m3d::PLAY_MODE_4, 5.0f, 1.0f); + } + } + } else { + s32 rnd = cM::rndInt(100); + if (rnd >= 70) { + setAnm("PoseL", ANM_PoseL, nullptr, m3d::PLAY_MODE_4, 5.0f, 1.0f); + } else if (rnd >= 40) { + setAnm("PoseR", ANM_PoseR, nullptr, m3d::PLAY_MODE_4, 5.0f, 1.0f); + } else { + setAnm("PoseC", ANM_PoseC, nullptr, m3d::PLAY_MODE_4, 5.0f, 1.0f); + } + } +} + +void dAcGirahimuBase_c::fn_226_CC40() { + mCyl0.SetTgType( + ~(AT_TYPE_PHYSICS | AT_TYPE_0x40 | AT_TYPE_SLINGSHOT | AT_TYPE_WIND | AT_TYPE_DAMAGE | AT_TYPE_WHIP | + AT_TYPE_0x8000 | AT_TYPE_BELLOWS | AT_TYPE_GLITTERING_SPORES | AT_TYPE_BEETLE | AT_TYPE_BUGNET) + ); +} + +void dAcGirahimuBase_c::fn_226_CC50() { + mCyl0.SetTgType(~( + AT_TYPE_PHYSICS | AT_TYPE_0x40 | AT_TYPE_SLINGSHOT | AT_TYPE_WIND | AT_TYPE_DAMAGE | AT_TYPE_WHIP | + AT_TYPE_0x8000 | AT_TYPE_BELLOWS | AT_TYPE_GLITTERING_SPORES | AT_TYPE_BEETLE | AT_TYPE_BUGNET | AT_TYPE_SWORD + )); +} + +void dAcGirahimuBase_c::vt_0x220() { + changeState(StateID_Wait); +} + +bool dAcGirahimuBase_c::fn_226_CC80() { + return mAnmIDBody == ANM_AttackPoseL || mAnmIDBody == ANM_AttackLRun || mAnmIDBody == ANM_AttackSwordL; +} + +void dAcGirahimuBase_c::vt_0x200() { + mResAnmChr1 = nw4r::g3d::ResFile(getOarcResFile("GirahimBt")); +} + +void dAcGirahimuBase_c::vt_0x204() { + mCallback.field_0x098 = 10.0f; + changeState(StateID_Panch); +} + +void dAcGirahimuBase_c::vt_0x228() { + if (mAnmIDBody == ANM_PoseL) { + setAnmHip("PoseL", ANM_PoseL, m3d::PLAY_MODE_4, 5.0f, 1.0f); + } else if (mAnmIDBody == ANM_PoseR) { + setAnmHip("PoseR", ANM_PoseR, m3d::PLAY_MODE_4, 5.0f, 1.0f); + } else { + setAnmHip("PoseC", ANM_PoseC, m3d::PLAY_MODE_4, 5.0f, 1.0f); + } +} + +void dAcGirahimuBase_c::fn_226_CDA0() { + switch (mAnmIDShoulderL) { + case ANM_PoseLR: mAnmIDShoulderL = ANM_PoseL; break; + case ANM_PoseUD: mAnmIDShoulderL = ANM_PoseC2; break; + case ANM_PoseLU: mAnmIDShoulderL = ANM_PoseL; break; + case ANM_PoseRU: mAnmIDShoulderL = ANM_PoseC; break; + } +} + +void dAcGirahimuBase_c::fn_226_CE00() { + switch (mAnmIDShoulderR) { + case ANM_PoseLR: mAnmIDShoulderR = ANM_PoseR; break; + case ANM_PoseUD: mAnmIDShoulderR = ANM_PoseC; break; + case ANM_PoseLU: mAnmIDShoulderR = ANM_PoseC; break; + case ANM_PoseRU: mAnmIDShoulderR = ANM_PoseR; break; + } +} + +bool dAcGirahimuBase_c::vt_0x208() { + if (field_0xD74 == 1) { + setAnmBody("PullCenter", ANM_PullCenter, m3d::PLAY_MODE_4, 5.0f, 1.0f); + setAnmHip("PullCenter", ANM_PullCenter, m3d::PLAY_MODE_4, 5.0f, 1.0f); + setAnmHead("PullCenter", ANM_PullCenter, m3d::PLAY_MODE_4, 5.0f, 1.0f); + setAnmShoulderR("PullCenter", ANM_PullCenter, m3d::PLAY_MODE_4, 5.0f, 1.0f); + } else if (field_0xD74 == 2) { + setAnmBody("PullUp", ANM_PullUp, m3d::PLAY_MODE_4, 5.0f, 1.0f); + setAnmHip("PullUp", ANM_PullUp, m3d::PLAY_MODE_4, 5.0f, 1.0f); + setAnmHead("PullUp", ANM_PullUp, m3d::PLAY_MODE_4, 5.0f, 1.0f); + setAnmShoulderR("PullUp", ANM_PullUp, m3d::PLAY_MODE_4, 5.0f, 1.0f); + } else if (field_0xD74 == 3) { + setAnm("FreeCenter", ANM_FreeCenter, nullptr, m3d::PLAY_MODE_4, 2.0f, 1.0f); + changeState(StateID_ReleaseSword); + return true; + } else if (field_0xD74 == 4) { + setAnm("FreeUp", ANM_FreeUp, nullptr, m3d::PLAY_MODE_4, 2.0f, 1.0f); + changeState(StateID_ReleaseSword); + return true; + } + + return false; +} + +void dAcGirahimuBase_c::vt_0x20C() { + changeState(StateID_FrontAttack); +} + +void dAcGirahimuBase_c::vt_0x22C() { + changeState(StateID_GetSword); +} + +void dAcGirahimuBase_c::fn_226_D070() { + mAnmIDShoulderL = ANM_NONE; + mAnmIDShoulderR = ANM_NONE; + mAnmIDHip = ANM_NONE; + mAnmIDBody = ANM_NONE; +} + +void dAcGirahimuBase_c::fn_226_D090() { + mVec3_c v0(1.05f, 1.05f, 1.05f); + mMtx_c hipTransform; + mMdlBody.getNodeWorldMtx(mMdlBody.getResMdl().GetResNode("Hip").GetID(), hipTransform); + mVec3_c v1; + hipTransform.multVec(v1, v1); + + if (field_0x8A4 == v0 && field_0x8B0 != v0) { + if (field_0xD70 && mHealth == 0) { + startSound(SE_Girahim_MAGIC_DISAPPEAR_STAGE); + } else { + startSound(SE_Girahim_MAGIC_DISAPPEAR); + } + dJEffManager_c::spawnEffect(PARTICLE_RESOURCE_ID_MAPPING_684_, v1, nullptr, nullptr, nullptr, nullptr, 0, 0); + } else if (cM::isZero(nw4r::math::VEC3LenSq(field_0x8A4)) && !cM::isZero(nw4r::math::VEC3LenSq(field_0x8B0))) { + startSound(SE_Girahim_MAGIC_APPEAR); + dJEffManager_c::spawnEffect(PARTICLE_RESOURCE_ID_MAPPING_684_, v1, nullptr, nullptr, nullptr, nullptr, 0, 0); + } +} + +void dAcGirahimuBase_c::vt_0x214() { + changeState(StateID_Escape); +} + +void dAcGirahimuBase_c::fn_226_D2C0() {} + +void dAcGirahimuBase_c::fn_226_D2D0() { + if (--field_0xD64 <= 0) { + field_0xD64 = 50 + cM::rndInt(50); + mAnmTexPatWink.setFrame(1.0f, 0); + } + + mVec3_c headTranslation; + mMtx_c headTransform; + mMdlBody.getNodeWorldMtx(mMdlBody.getResMdl().GetResNode("Head").GetID(), headTransform); + headTransform.getTranslation(headTranslation); + headTranslation.y += 60.0f; + headTransform.m[0][3] = headTransform.m[1][3] = headTransform.m[2][3] = 0.0f; + + mVec3_c v0(0.0f, 1.0f, 0.0f); + headTransform.multVec(v0, v0); + + mAng a0 = (s16)(s32)v0.atan2sX_Z() - (s16)cLib::targetAngleY(headTranslation, field_0x88C); + + mVec3_c v1 = field_0x88C; + mVec3_c v2 = v1 - headTranslation; + + mAng a23 = (s16)(s32)v0.atan2sY_XZ() - (s16)(s32)v2.atan2sY_XZ(); + + field_0x584 = mAng::s2n_c(a0) * 0.5f; + if (field_0x584 > 0.5f) { + field_0x584 = 0.5f; + } else if (field_0x584 < -0.5f) { + field_0x584 = -0.5f; + } + + field_0x588 = mAng::s2n_c(a23) * -1.0f; + if (field_0x588 > 1.0f) { + field_0x588 = 1.0f; + } else if (field_0x588 < -1.0f) { + field_0x588 = -1.0f; + } + + if (field_0xD78 || field_0xD8D) { + field_0x584 = 0.0f; + field_0x588 = 0.0f; + } + + sLib::addCalcScaledDiff(&field_0x58C, field_0x584, 1.0f, 0.02f); + sLib::addCalcScaledDiff(&field_0x590, field_0x588, 1.0f, 0.02f); + + mEyeMdlCallback.mTargetOffset[1].y = field_0x590; + mEyeMdlCallback.mTargetOffset[1].x = -field_0x58C; +} + +void dAcGirahimuBase_c::fn_226_D5A0() { + StoryflagManager::sInstance->setFlagOrCounterToValue(STORYFLAG_692, 0); + dTgSwordBattleGame_c *pSwordBattleGame = + static_cast(fManager_c::searchBaseByProfName(fProfile::TAG_SWORD_BATTLE_GAME)); + if (pSwordBattleGame != nullptr) { + pSwordBattleGame->notifyBossDeath(true); + } +} diff --git a/src/REL/d/a/b/d_a_b_lastboss.cpp b/src/REL/d/a/b/d_a_b_lastboss.cpp index b0e68a20e..4bd6964f4 100644 --- a/src/REL/d/a/b/d_a_b_lastboss.cpp +++ b/src/REL/d/a/b/d_a_b_lastboss.cpp @@ -200,7 +200,7 @@ int dAcBlastboss_c::create() { mCc4.SetStts(mStts); mLightningCc.Set(sSrcSph2); - mLightningCc.mTg.Set_0x4C(-1); + mLightningCc.SetTgShieldType(~AT_TYPE_NONE); mLightningCc.SetStts(mStts); mAcceleration = -5.0f; @@ -2041,7 +2041,7 @@ bool dAcBlastboss_c::checkDamage() { mHealth = 400; cCcD_Obj *atHit = mSwordMdl.mCcList.findAtHit(); - if (atHit != nullptr && atHit->GetAtFlag0x8()) { + if (atHit != nullptr && atHit->ChkAtShieldReflect()) { field_0x113E = 20; } diff --git a/src/REL/d/a/d_a_girahimu_sword_beam.cpp b/src/REL/d/a/d_a_girahimu_sword_beam.cpp index 01033dc6e..188f11a11 100644 --- a/src/REL/d/a/d_a_girahimu_sword_beam.cpp +++ b/src/REL/d/a/d_a_girahimu_sword_beam.cpp @@ -234,7 +234,7 @@ void dAcGirahimuSwordBeam_c::initializeState_BulletMove() { m.multVec(vel, mVelocity); } void dAcGirahimuSwordBeam_c::executeState_BulletMove() { - if ((mCps0.ChkAtHit() && !mCps0.GetAtFlag0x8()) || mAcch.ChkGndHit() || mAcch.ChkWallHit(nullptr) || + if ((mCps0.ChkAtHit() && !mCps0.ChkAtShieldReflect()) || mAcch.ChkGndHit() || mAcch.ChkWallHit(nullptr) || mAcch.ChkWaterIn()) { mCps0.SetAtRpm(0); mCps0.ClrAtActorInfo(); @@ -328,7 +328,7 @@ void dAcGirahimuSwordBeam_c::fn_240_11F0() { } } - if (mCps0.ChkAtHit() && mCps0.GetAtFlag0x8()) { + if (mCps0.ChkAtHit() && mCps0.ChkAtShieldReflect()) { mAng3_c a0; a0.x = a0.z = 0; if (field_0xAF4.isLinked()) { diff --git a/src/REL/d/a/e/d_a_e_ks.cpp b/src/REL/d/a/e/d_a_e_ks.cpp index c2eba199c..ef18a9dc8 100644 --- a/src/REL/d/a/e/d_a_e_ks.cpp +++ b/src/REL/d/a/e/d_a_e_ks.cpp @@ -2555,7 +2555,7 @@ void dAcEKs_c::executeState_Attack() { sLib::addCalcAngle(mRotation.x.ref(), mPitch_0xC34, 12, 0x38E); if (mSph.ChkAtHit()) { - if (mSph.GetAtFlag0x8() != 0) { + if (mSph.ChkAtShieldReflect() != 0) { changeState(StateID_Stun); return; } diff --git a/src/REL/d/a/e/d_a_e_remly.cpp b/src/REL/d/a/e/d_a_e_remly.cpp index 8ad28f0ad..7ce91edfa 100644 --- a/src/REL/d/a/e/d_a_e_remly.cpp +++ b/src/REL/d/a/e/d_a_e_remly.cpp @@ -1910,14 +1910,14 @@ void dAcEremly_c::initializeState_NightJumpAttack() { void dAcEremly_c::executeState_NightJumpAttack() { resetHeadRotation(false); if (mSph.ChkAtHit()) { - if (mSph.GetAtFlag0x8()) { + if (mSph.ChkAtShieldReflect()) { setBattleBgmRelated(0); mSpeed = -20.f; changeState(StateID_Stun); return; } - if (mSph.GetAtFlag0x2()) { + if (mSph.ChkAtShieldHit()) { changeState(StateID_NightReflectionFoo); return; } @@ -2058,7 +2058,7 @@ void dAcEremly_c::calcHeadPitch(bool b) { mHeadTiltTimer = 100.f + cM::rndF(100.f); if (cM::rnd() < 0.3f) { mHeadTiltTarget = 0; - } else if (mHeadTiltTarget == 0) { + } else if (mHeadTiltTarget.mVal == 0) { if (cM::rnd() < 0.5f) { mHeadTiltTarget = 5000; } else { diff --git a/src/REL/d/a/obj/d_a_obj_barrel.cpp b/src/REL/d/a/obj/d_a_obj_barrel.cpp index 7eb83dd01..dfcb3ee61 100644 --- a/src/REL/d/a/obj/d_a_obj_barrel.cpp +++ b/src/REL/d/a/obj/d_a_obj_barrel.cpp @@ -1161,7 +1161,7 @@ bool dAcOBarrel_c::fn_293_45A0() { // Amos -> Armos. A Barrel hitting a Armos will break it if (mCyl.ChkAtHit()) { - if (mCyl.GetAtFlag0x2() || mCyl.GetAtFlag0x4() || mCyl.GetAtActor()->mProfileName == fProfile::E_AM) { + if (mCyl.ChkAtShieldHit() || mCyl.ChkAtCutHit() || mCyl.GetAtActor()->mProfileName == fProfile::E_AM) { return true; } } diff --git a/src/REL/d/a/obj/d_a_obj_chair.cpp b/src/REL/d/a/obj/d_a_obj_chair.cpp index f6be0b979..a5dd695c4 100644 --- a/src/REL/d/a/obj/d_a_obj_chair.cpp +++ b/src/REL/d/a/obj/d_a_obj_chair.cpp @@ -69,7 +69,7 @@ int dAcOChair_c::create() { mCyl.Set(sChairColData); mCyl.SetStts(mStts); - mCyl.SetTg_0x4C(0x2000); + mCyl.SetTgShieldType(0x2000); if (mChairType == CHAIR_H) { mCyl.SetTgInfo_0x1(6); diff --git a/src/REL/d/a/obj/d_a_obj_girahimu_knife.cpp b/src/REL/d/a/obj/d_a_obj_girahimu_knife.cpp index 7610a9d8d..060680030 100644 --- a/src/REL/d/a/obj/d_a_obj_girahimu_knife.cpp +++ b/src/REL/d/a/obj/d_a_obj_girahimu_knife.cpp @@ -3,7 +3,7 @@ #include "c/c_lib.h" #include "c/c_math.h" #include "common.h" -#include "d/a/b/d_a_b_girahimu2.h" +#include "d/a/b/d_a_b_girahimu_base.h" #include "d/a/d_a_player.h" #include "d/a/e/d_a_en_base.h" #include "d/col/bg/d_bg_s.h" @@ -168,7 +168,7 @@ void dAcObjGirahimuKnife_c::executeState_Wait() { void dAcObjGirahimuKnife_c::finalizeState_Wait() { mSph0.OnTgSet(); field_0x714.toQuat(field_0x704); - mSph0.SetTg_0x4C(0); + mSph0.SetTgShieldType(AT_TYPE_NONE); } void dAcObjGirahimuKnife_c::initializeState_Attack() { @@ -305,7 +305,7 @@ void dAcObjGirahimuKnife_c::initializeState_SpinWait() { field_0x6F6.x = cM::rndInt(64000); field_0x6F6.z = cM::rndInt(64000); field_0x778 = cM::rndInt(32000); - mSph0.SetTg_0x4C(-1); + mSph0.SetTgShieldType(~AT_TYPE_NONE); field_0x774 = 10.0f; } void dAcObjGirahimuKnife_c::executeState_SpinWait() { @@ -323,7 +323,7 @@ void dAcObjGirahimuKnife_c::executeState_SpinWait() { if (mSph0.ChkTgHit()) { dAcEnBase_c *pEn = FindEnemy(fProfile::B_GIRAHIMU2); if (pEn != nullptr) { - static_cast(pEn)->setField_0xD52(120); + static_cast(pEn)->field_0xD52 = 120; } } fn_239_1DB0(field_0x6D8, field_0x744); @@ -336,11 +336,11 @@ void dAcObjGirahimuKnife_c::executeState_SpinWait() { void dAcObjGirahimuKnife_c::finalizeState_SpinWait() { mSph0.OnTgSet(); field_0x714.toQuat(field_0x704); - mSph0.SetTg_0x4C(0); + mSph0.SetTgShieldType(AT_TYPE_NONE); } void dAcObjGirahimuKnife_c::initializeState_SpinWaitPreAttack() { - mSph0.SetTg_0x4C(-1); + mSph0.SetTgShieldType(~AT_TYPE_NONE); field_0x744.x *= 1.5f; field_0x744.z = 50.0f; field_0x792 = false; @@ -371,13 +371,13 @@ void dAcObjGirahimuKnife_c::executeState_SpinWaitPreAttack() { void dAcObjGirahimuKnife_c::finalizeState_SpinWaitPreAttack() { mSph0.OnTgSet(); field_0x714.toQuat(field_0x704); - mSph0.SetTg_0x4C(0); + mSph0.SetTgShieldType(AT_TYPE_NONE); } void dAcObjGirahimuKnife_c::initializeState_SpinFreeWait() { sSomething0++; field_0x778 = cM::rndInt(32000); - mSph0.SetTg_0x4C(-1); + mSph0.SetTgShieldType(~AT_TYPE_NONE); // NOTE - This is needed to force the rodata pool loading despite not emitting anything field_0x774 = 20.0f; field_0x774 = 0.0f; @@ -398,7 +398,7 @@ void dAcObjGirahimuKnife_c::finalizeState_SpinFreeWait() { sSomething1 = mAng(0); mSph0.OnTgSet(); field_0x714.toQuat(field_0x704); - mSph0.SetTg_0x4C(0); + mSph0.SetTgShieldType(AT_TYPE_NONE); } void dAcObjGirahimuKnife_c::initializeState_FreeWait() { @@ -419,17 +419,17 @@ void dAcObjGirahimuKnife_c::executeState_FreeWait() { void dAcObjGirahimuKnife_c::finalizeState_FreeWait() { mSph0.OnTgSet(); field_0x714.toQuat(field_0x704); - mSph0.SetTg_0x4C(0); + mSph0.SetTgShieldType(AT_TYPE_NONE); } // NONMATCHING void dAcObjGirahimuKnife_c::initializeState_CircleWait() { - mSph0.SetTg_0x4C(-1); + mSph0.SetTgShieldType(~AT_TYPE_NONE); field_0x774 = 0.0f; // Dont think about it mAng som = sSomething1; mAng newval = som + 0x1000; - if (field_0x784 == 7) { + if (mKnifePattern == 7) { newval = som - 0x800; } sSomething1 = newval; @@ -446,7 +446,7 @@ void dAcObjGirahimuKnife_c::executeState_CircleWait() { mSph0.SetR(50.0f); field_0x78F = true; fn_239_2B10(); - if (field_0x784 == 7) { + if (mKnifePattern == 7) { fn_239_1F50(dAcPy_c::GetLink()->mPosition, 50.0f); } else { fn_239_2110(dAcPy_c::GetLink()->mPosition, 150.0f, 0); @@ -456,7 +456,7 @@ void dAcObjGirahimuKnife_c::executeState_CircleWait() { void dAcObjGirahimuKnife_c::finalizeState_CircleWait() { mSph0.OnTgSet(); field_0x714.toQuat(field_0x704); - mSph0.SetTg_0x4C(0); + mSph0.SetTgShieldType(AT_TYPE_NONE); sSomething1 = mAng(0); } @@ -708,7 +708,7 @@ void dAcObjGirahimuKnife_c::fn_239_2B10() { cCcD_Obj *pAtCc = mCollider.findAtHit(); if (pAtCc != nullptr) { - if (pAtCc->GetAtFlag0x8()) { + if (pAtCc->ChkAtShieldReflect()) { if (mState == 8) { mVec3_c force = mPosition - dAcPy_c::GetLink()->mPosition; force.y = 0.0f; @@ -719,7 +719,7 @@ void dAcObjGirahimuKnife_c::fn_239_2B10() { field_0x78D = true; changeState(StateID_Return); } - } else if (pAtCc->GetAtFlag0x2()) { + } else if (pAtCc->ChkAtShieldHit()) { const dAcPy_c *pPlayer = dAcPy_c::GetLink(); s16 angY = cLib::targetAngleY(pPlayer->mPosition, mPosition); s16 diff = pPlayer->mRotation.y - angY; @@ -740,12 +740,12 @@ bool dAcObjGirahimuKnife_c::checkCutDir(s32 cutDir) { return false; } if (dAcPy_c::GetLink()->isAttackingSpin() && dAcPy_c::GetLink()->isAttackingHorizontal()) { - if (field_0x784 == 0 || field_0x784 == 6) { + if (mKnifePattern == 0 || mKnifePattern == 6) { return true; } } if (dAcPy_c::GetLink()->isAttackingSpin() && dAcPy_c::GetLink()->isAttackingVertical()) { - if (field_0x784 == 3 || field_0x784 == 7) { + if (mKnifePattern == 3 || mKnifePattern == 7) { return true; } } @@ -753,28 +753,28 @@ bool dAcObjGirahimuKnife_c::checkCutDir(s32 cutDir) { switch (cutDir) { case CUT_DIR_U: case CUT_DIR_D: - if (field_0x784 == 3) { + if (mKnifePattern == 3) { return true; } break; case CUT_DIR_RD: case CUT_DIR_LU: - if (field_0x784 == 2) { + if (mKnifePattern == 2) { return true; } break; case CUT_DIR_R: case CUT_DIR_L: - if (field_0x784 == 0) { + if (mKnifePattern == 0) { return true; } break; case CUT_DIR_RU: case CUT_DIR_LD: - if (field_0x784 == 1) { + if (mKnifePattern == 1) { return true; } break; diff --git a/src/REL/d/a/obj/d_a_obj_girahimu_sword_link.cpp b/src/REL/d/a/obj/d_a_obj_girahimu_sword_link.cpp index aba45d679..e5f33f5a5 100644 --- a/src/REL/d/a/obj/d_a_obj_girahimu_sword_link.cpp +++ b/src/REL/d/a/obj/d_a_obj_girahimu_sword_link.cpp @@ -154,7 +154,7 @@ void dAcObjGirahimuSwordLink_c::executeState_AtThrow() { cCcD_Obj *pCcAt = mMdl.mCcList.findAtHit(); if (pCcAt != nullptr) { - if (pCcAt->GetAtActor()->isActorPlayer() && pCcAt->GetAtFlag0x2()) { + if (pCcAt->GetAtActor()->isActorPlayer() && pCcAt->ChkAtShieldHit()) { field_0xD14.set(0.0f, 0.0f, 1.0f); field_0xD14.rotY(dAcPy_c::GetLink()->mRotation.y); diff --git a/src/REL/d/a/obj/d_a_obj_toD3_stone_figure.cpp b/src/REL/d/a/obj/d_a_obj_toD3_stone_figure.cpp index 4eb1b451a..2fb30b82b 100644 --- a/src/REL/d/a/obj/d_a_obj_toD3_stone_figure.cpp +++ b/src/REL/d/a/obj/d_a_obj_toD3_stone_figure.cpp @@ -2,6 +2,7 @@ #include "d/a/d_a_item.h" #include "d/a/obj/d_a_obj_base.h" +#include "d/col/c/c_cc_d.h" #include "d/col/cc/d_cc_s.h" #include "d/d_sc_game.h" #include "d/flag/storyflag_manager.h" @@ -67,7 +68,7 @@ int dAcOtoD3StoneFigure_c::create() { mPositionCopy3.y = b; mPositionCopy3.z = c; // mPositionCopy3 = mPositionCopy2; - mCollision.SetTg_0x4C(0x2000); + mCollision.SetTgShieldType(AT_TYPE_ARROW); if (!mIsSkyKeepAlreadyOpen) { mStateMgr.changeState(StateID_OneEye); diff --git a/src/REL/d/a/obj/d_a_obj_triforce.cpp b/src/REL/d/a/obj/d_a_obj_triforce.cpp index 640762eaa..ca2608dc5 100644 --- a/src/REL/d/a/obj/d_a_obj_triforce.cpp +++ b/src/REL/d/a/obj/d_a_obj_triforce.cpp @@ -41,7 +41,7 @@ int dAcOtriforce_c::create() { mCollision.ClrCoSet(); mStartingOffset = cM::rndInt(sStartingOffsetRange); mEffects.init(this); - mCollision.SetTg_0x4C(0x2000); + mCollision.SetTgShieldType(AT_TYPE_ARROW); updateMatrix(); mScale.x = sScale; mScale.y = sScale; diff --git a/src/d/a/d_a_item.cpp b/src/d/a/d_a_item.cpp index 8b66fc410..bedc7495b 100644 --- a/src/d/a/d_a_item.cpp +++ b/src/d/a/d_a_item.cpp @@ -8,6 +8,7 @@ #include "d/a/obj/d_a_obj_boomerang.h" #include "d/a/obj/d_a_obj_warp.h" #include "d/col/bg/d_bg_s.h" +#include "d/col/c/c_cc_d.h" #include "d/col/cc/d_cc_d.h" #include "d/col/cc/d_cc_s.h" #include "d/d_camera.h" @@ -752,11 +753,13 @@ int dAcItem_c::create() { } if (isHeartPiece()) { - mCyl.SetTg_0x4C(0x6CC0); + mCyl.SetTgShieldType( + AT_TYPE_CLAWSHOT | AT_TYPE_ARROW | AT_TYPE_WHIP | AT_TYPE_DAMAGE | AT_TYPE_SLINGSHOT | AT_TYPE_0x40 + ); } else if (isBabyRattle()) { - mCyl.SetTg_0x4C(0x6480); + mCyl.SetTgShieldType(AT_TYPE_CLAWSHOT | AT_TYPE_ARROW | AT_TYPE_DAMAGE | AT_TYPE_SLINGSHOT); } else if (!isAnyRupee() && !isHeartV() && mId != ITEM_STAMINA_FRUIT) { - mCyl.SetTg_0x4C(0x6480); + mCyl.SetTgShieldType(AT_TYPE_CLAWSHOT | AT_TYPE_ARROW | AT_TYPE_DAMAGE | AT_TYPE_SLINGSHOT); } if (isBabyRattle()) { diff --git a/src/d/a/obj/d_a_obj_arrow.cpp b/src/d/a/obj/d_a_obj_arrow.cpp index ef1ebdac2..ee0c10977 100644 --- a/src/d/a/obj/d_a_obj_arrow.cpp +++ b/src/d/a/obj/d_a_obj_arrow.cpp @@ -145,7 +145,7 @@ void dAcArrow_c::hitCallback(cCcD_Obj *i_objInfA, dAcObjBase_c *i_actorB, cCcD_O dJntCol_c *col = i_actorB->getLinkage().getJntCol(); if (col != nullptr) { mBoundJntIdx = col->getArrowOffsetPosAndAngle( - &i_objInfA->GetAtHitPos(), &mRotation, &field_0x6B0, &field_0x6BC, i_objInfB->ChkTg_0x4C(0x2000) + &i_objInfA->GetAtHitPos(), &mRotation, &field_0x6B0, &field_0x6BC, i_objInfB->ChkTgShieldType(0x2000) ); if (mBoundJntIdx >= 0) { @@ -533,7 +533,7 @@ void dAcArrow_c::executeState_Move() { bool b = false; if (atActor != mRef1.get()) { mBoundJntIdx = atActor->getLinkage().getArrowOffsetPosAndAngle( - &mCcCps.GetAtHitPos(), &mRotation, &field_0x6B0, &field_0x6BC, mCcCps.GetAtFlag0x2() + &mCcCps.GetAtHitPos(), &mRotation, &field_0x6B0, &field_0x6BC, mCcCps.ChkAtShieldHit() ); b = true; } @@ -543,11 +543,11 @@ void dAcArrow_c::executeState_Move() { if (b) { mRef1.link(atActor); } - } else if (mBoundJntIdx == -2 || mCcCps.GetAtFlag0x2()) { + } else if (mBoundJntIdx == -2 || mCcCps.ChkAtShieldHit()) { what = 2; } } else { - if (mCcCps.GetAtFlag0x2()) { + if (mCcCps.ChkAtShieldHit()) { what = 2; } else if (mCcCps.ChkAtArrowStick()) { fn_8025E720(atActor, mCcCps.GetAtHitPos()); diff --git a/src/d/a/obj/d_a_obj_tbox.cpp b/src/d/a/obj/d_a_obj_tbox.cpp index 553634073..bd3aceff1 100644 --- a/src/d/a/obj/d_a_obj_tbox.cpp +++ b/src/d/a/obj/d_a_obj_tbox.cpp @@ -9,6 +9,7 @@ #include "d/col/bg/d_bg_s.h" #include "d/col/bg/d_bg_s_gnd_chk.h" #include "d/col/c/c_bg_s_poly_info.h" +#include "d/col/c/c_cc_d.h" #include "d/col/cc/d_cc_d.h" #include "d/col/cc/d_cc_s.h" #include "d/d_light_env.h" @@ -1100,8 +1101,8 @@ int dAcTbox_c::create() { field_0x0D48.addCc(mCcD2, s4); } field_0x0D48.SetStts(mStts); - mCcD1.SetTg_0x4C(-1); - mCcD2.SetTg_0x4C(-1); + mCcD1.SetTgShieldType(~AT_TYPE_NONE); + mCcD2.SetTgShieldType(~AT_TYPE_NONE); mMdl1.setAnm(sAnmNames[mVariant], m3d::PLAY_MODE_4); if (mHasBeenOpened == true) { mMdl1.setFrame(mMdl1.getAnm().getEndFrame()); diff --git a/src/d/col/c/c_cc_d.cpp b/src/d/col/c/c_cc_d.cpp index 64ab31635..0aa3a8d32 100644 --- a/src/d/col/c/c_cc_d.cpp +++ b/src/d/col/c/c_cc_d.cpp @@ -363,15 +363,15 @@ const mVec3_c &cCcD_Obj::GetAtHitPos() const { return mAt.mHitPos; } -bool cCcD_Obj::GetAtFlag0x2() const { +bool cCcD_Obj::ChkAtShieldHit() const { return mAt.MskRPrm(2); } -bool cCcD_Obj::GetAtFlag0x4() const { +bool cCcD_Obj::ChkAtCutHit() const { return mAt.MskRPrm(4); } -bool cCcD_Obj::GetAtFlag0x8() const { +bool cCcD_Obj::ChkAtShieldReflect() const { return mAt.MskRPrm(8); } @@ -383,11 +383,11 @@ const mVec3_c &cCcD_Obj::GetTgHitPos() const { return mTg.mHitPos; } -bool cCcD_Obj::GetTgFlag0x4() const { +bool cCcD_Obj::ChkTgCutHit() const { return mTg.MskRPrm(4); } -bool cCcD_Obj::GetTgFlag0x8() const { +bool cCcD_Obj::ChkTgShieldReflect() const { return mTg.MskRPrm(0x8); } @@ -1452,7 +1452,7 @@ cCcD_ObjTg::cCcD_ObjTg() : mShieldFrontRangeYAngle(nullptr), field_0x4A(0), field_0x4B(0), - field_0x4C(0), + mShieldType(0), field_0x50(0), field_0x54(0), field_0x6C(0.f, 0.f, 0.f), @@ -1463,7 +1463,7 @@ cCcD_ObjTg::~cCcD_ObjTg() {} void cCcD_ObjTg::Set(const cCcD_SrcGObjTg &src) { mEffCounter = 0; mSrc = src; - field_0x4C = 0; + mShieldType = 0; mHitPos = mVec3_c::Zero; mShieldFrontRangeYAngle = nullptr; mShieldRange = 0x4000;