From 107af1e4f2891334beaeb855c91095ea1986df15 Mon Sep 17 00:00:00 2001 From: elijah-thomas774 Date: Fri, 2 Oct 2026 20:36:02 -0400 Subject: [PATCH] d_a_b_girahimu_base early Progress --- .../rels/d_a_b_girahimu_baseNP/symbols.txt | 399 ++-- include/d/a/b/d_a_b_girahimu_base.h | 449 ++++- include/d/a/obj/d_a_obj_girahimu_sword_link.h | 4 + include/nw4r/g3d/res/g3d_resnode.h | 3 + include/toBeSorted/d_enemy_sword_mdl.h | 3 + src/REL/d/a/b/d_a_b_girahimu_base.cpp | 1725 +++++++++++++++++ 6 files changed, 2382 insertions(+), 201 deletions(-) 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 6eaf9822..f16e1ceb 100644 --- a/config/SOUE01/rels/d_a_b_girahimu_baseNP/symbols.txt +++ b/config/SOUE01/rels/d_a_b_girahimu_baseNP/symbols.txt @@ -3,162 +3,162 @@ _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 +initNodeData__17dAcGirahimuBase_cFv = .text:0x00007B30; // type:function size:0x4D4 +createHeap__17dAcGirahimuBase_cFv = .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 +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 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 @@ -186,7 +186,7 @@ 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 +draw__17dAcGirahimuBase_cFv = .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 @@ -212,7 +212,7 @@ 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_CC40__17dAcGirahimuBase_cFv = .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 @@ -230,11 +230,11 @@ 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_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 @@ -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:0x18 +__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:0x10 +__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/include/d/a/b/d_a_b_girahimu_base.h b/include/d/a/b/d_a_b_girahimu_base.h index 1f6a9729..82d5ca2c 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,459 @@ #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/obj/d_a_obj_base.h" +#include "d/col/bg/d_bg_s_acch.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/g3d_scnobj.h" +#include "nw4r/g3d/res/g3d_resanmchr.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 dNpcEyeMdlCallback_c : public nw4r::g3d::IScnObjCallback { +public: + dNpcEyeMdlCallback_c() {} + virtual ~dNpcEyeMdlCallback_c() {} + /* 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 dAcGirahimuBase_c : public dAcEnBase_c { public: - dAcGirahimuBase_c() : mStateMgr(*this) {} - virtual ~dAcGirahimuBase_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 */ mAng3_c field_0x052; + /* 0x058 */ mAng3_c field_0x058; + /* 0x05E */ mAng field_0x05E; + /* 0x060 */ mAng field_0x060; + /* 0x062 */ mAng3_c field_0x062; + + /* 0x068*/ u8 _0x068[0x07C - 0x068]; + + /* 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; + /* 0x098 */ f32 field_0x098; + + /* 0x09C*/ u8 _0x09C[0x0B4 - 0x09C]; + + /* 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 + /* 0x188*/ u8 _0x188[0x18C - 0x188]; + /* 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*/ u8 _0x244[0x254 - 0x244]; + + /* 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_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_PoseR = 0x1B, + ANM_PoseL = 0x1C, + ANM_PoseC = 0x1D, + ANM_PoseC2 = 0x1E, + ANM_PoseLR = 0x1F, + ANM_PoseLU = 0x20, + AMM_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_FaceTonuge = 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_GuardTwoSword = 0x3F, + ANM_EndA = 0x40, + ANM_EndBLoop = 0x41, + ANM_EndC = 0x42, + ANM_EndDLoop = 0x43, + ANM_EndE = 0x44, + ANM_KnifeDamage = 0x45, + }; + + 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 void 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 void vt_0x21C(); + /* vt 0x220 */ virtual void vt_0x220(); + /* vt 0x224 */ virtual void vt_0x224() { + fn_226_8B70("PoseC", ANM_PoseC2, false, 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() { + 5.0f; + 1.0f; + "WalkBt"; + } + + void initNodeData(); + + void fn_226_8B70(const char *, s32 anmId, bool, m3d::playMode_e, f32, f32); + void fn_226_8C90( + const char *, s32 anmId0, const char *, s32 anmId1, const char *, s32 anmId2, m3d::playMode_e, f32, f32 + ); + void fn_226_8FF0(const char *, s32 anmId, m3d::playMode_e, f32, f32); + void fn_226_90C0(const char *, s32 anmId, m3d::playMode_e, f32, f32); + void fn_226_9190(const char *, s32 anmId, m3d::playMode_e, f32, f32); + void fn_226_9260(const char *, s32 anmId, m3d::playMode_e, f32, f32); + + void fn_226_A070(mAng); + void fn_226_AAD0(f32, f32); + void fn_226_AFB0(); + + void fn_226_B960(f32); + void fn_226_BC00(); + + void fn_226_CC40(); + bool fn_226_CC80(); + + void fn_226_D070(); + + bool turn(mAng); private: - /* 0x??? */ STATE_MGR_DECLARE(dAcGirahimuBase_c); + /* 0x0378 */ STATE_MGR_DECLARE(dAcGirahimuBase_c); + /* 0x03B4 */ m3d::mdl_c mMdlBody; + /* 0x03D8 */ m3d::anmChrBlend_c mAnmChrBlend; + /* 0x0400 */ nw4r::g3d::ResAnmChr mResAnmChr0; + /* 0x0404 */ nw4r::g3d::ResAnmChr mResAnmChr1; + /* 0x0408 */ m3d::anmChr_c mAnmChrs[5]; + /* 0x0520 */ dSoundSourceIf_c *pSoundIface; + /* 0x0524 */ UNKWORD field_0x534; + /* 0x0528 */ m3d::anmTexPat_c mAnmTexPatWink; + /* 0x0554 */ dNpcEyeMdlCallback_c mEyeMdlCallback; + /* 0x0584 */ + /* 0x0594 */ callback_c mCallback; + /* 0x088C */ mVec3_c field_0x88C; + + /* 0x08B0*/ mVec3_c field_0x8B0; + /* 0x08BC */ mVec3_c field_0x8BC; + /* 0x08C8 */ s16 field_0x8C8; + + /* 0x08CE */ s16 field_0x8CE; + /* 0x08D4 */ dShadowCircle_c mShadow; + /* 0x08DC */ s32 field_0x8DC; + /* 0x08E0 */ m3d::smdl_c mMdlPias; // Earring + + /* 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 field_0xD6A; + /* 0x0D6C */ s32 field_0xD6C; + + /* 0xD71 */ bool field_0xD71; + /* 0xD72 */ bool field_0xD72; + + /* 0xD79 */ bool mbLinkSwordWaitFirstComplete; + + /* 0xD7B */ bool field_0xD7B; + /* 0xD7C */ bool field_0xD7C; + /* 0xD7D */ bool field_0xD7D; + /* 0xD7E */ bool field_0xD7E; + + /* 0xD80 */ bool field_0xD80; + /* 0xD81 */ bool field_0xD81; + /* 0xD82 */ bool field_0xD82; + + /* 0xD8D */ bool field_0xD8D; + /* 0xD8E */ s16 field_0xD8E; + + /* 0x0D94 */ dEnemySwordMdl_c mMdlSwordA; + /* 0x12E4 */ dEnemySwordMdl_c mMdlSwordB; + + /* 0x1834 */ f32 field_0x1834; + /* 0x1838 */ f32 field_0x1838; + /* 0x183A */ mAng field_0x183A; + /* 0x183E */ mAng field_0x183E; + + /* 0x1858 */ f32 field_0x1858; + + /* 0x1868 */ f32 field_0x1868; + + /* 0x1871 */ bool field_0x1871; + /* 0x1872 */ bool field_0x1872; + + /* 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; + + /* 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/obj/d_a_obj_girahimu_sword_link.h b/include/d/a/obj/d_a_obj_girahimu_sword_link.h index 7dc57214..bf2592af 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 @@ -37,6 +37,10 @@ public: void reflect(const mVec3_c &rot, f32 gravity, f32, f32 force); bool lineCheck(); + dEnemySwordMdl_c &getMdl() { + return mMdl; + } + STATE_FUNC_DECLARE(dAcObjGirahimuSwordLink_c, Hide); STATE_FUNC_DECLARE(dAcObjGirahimuSwordLink_c, Equip); STATE_FUNC_DECLARE(dAcObjGirahimuSwordLink_c, GetSword); diff --git a/include/nw4r/g3d/res/g3d_resnode.h b/include/nw4r/g3d/res/g3d_resnode.h index d3198e8f..73fa3ddc 100644 --- a/include/nw4r/g3d/res/g3d_resnode.h +++ b/include/nw4r/g3d/res/g3d_resnode.h @@ -143,6 +143,9 @@ public: 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_enemy_sword_mdl.h b/include/toBeSorted/d_enemy_sword_mdl.h index b640de60..6a791f35 100644 --- a/include/toBeSorted/d_enemy_sword_mdl.h +++ b/include/toBeSorted/d_enemy_sword_mdl.h @@ -70,6 +70,9 @@ public: void setInactive() { mIsActive = false; } + void setProcActive(bool b) { + mProc.setActive(b); + } void disable() { setInactive(); mProc.setActive(false); 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 ba8a3b2c..0f69332b 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,1728 @@ #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/obj/d_a_obj_girahimu_sword_link.h" +#include "d/col/c/c_cc_d.h" +#include "d/d_vec.h" +#include "d/flag/sceneflag_manager.h" +#include "d/snd/d_snd_wzsound.h" +#include "m/m3d/m_fanm.h" +#include "m/m_angle.h" +#include "m/m_mtx.h" +#include "m/m_quat.h" +#include "m/m_vec.h" +#include "nw4r/g3d/res/g3d_resmdl.h" +#include "nw4r/math/math_arithmetic.h" +#include "rvl/MTX/mtx.h" +#include "rvl/VI/vi.h" +#include "s/s_Math.h" + +#include + +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); + +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 = -v4; + v4 = -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 = -v4; + v4 = -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_0x19C.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() { + 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 v3 = field_0x260; + mVec3_c v4 = field_0x18C; + mVec3_c v5 = v4 - v3; + v5.normalizeRS(); + v5 *= field_0x188; + v5 += v3; + mVec3_c v1 = field_0x21C - v3; + v4.set(v5); + v4.normalizeRS(); + v1 *= field_0x188; + v1 += v3; + if (v1.y <= v4.y) { + v4.y += v1.y - v4.y; + } + mVec3_c v6 = field_0x21C - v4; + v6.normalizeRS(); + v6 *= field_0x234; + v6 += v4; + + mVec3_c v2; + 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; + v1 = v7 - field_0x21C; + v4 = v7; + v1.normalizeRS(); + v4 = v1 * field_0x234; + v4 += field_0x21C; + v1.set(v4); + v1 -= field_0x260; + v1.normalizeRS(); + v4 = v1 * field_0x188; + v4 += field_0x260; + v1.set(v4); + 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; + // What the.... + if (mpGhirahim->field_0x8C8 != 1) { + 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_0x058.y, field_0x058.x, 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_0x058.y, field_0x058.x, 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_0x052.y / 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_0x052.y / 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_0x052.y / 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_0x052.y / 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[2][3] = 0.0f; + m.m[1][3] = 0.0f; + m.m[0][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; + fn_226_8B70("WaitA", 0, false, 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; + } + + fn_226_8FF0("WaitA", ANM_WaitA, m3d::PLAY_MODE_4, 5.0f, 1.0f); + } + + if (field_0x8CE == ANM_MovePose && mAnmChrs[4].checkFrame(43.0f)) { + fn_226_9190("WaitA", ANM_WaitA, m3d::PLAY_MODE_4, 15.0f, 1.0f); + fn_226_9260("WaitA", ANM_WaitA, m3d::PLAY_MODE_4, 15.0f, 1.0f); + } + if (field_0xD48 <= 0) { + fn_226_9190("MovePose", ANM_MovePose, m3d::PLAY_MODE_4, 15.0f, 1.0f); + fn_226_9260("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; + fn_226_8B70("Walk", ANM_Walk, false, 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) { + fn_226_90C0("WaitA", ANM_WaitA, m3d::PLAY_MODE_4, 15.0f, 1.0f); + } else { + mCallback.field_0x2BC = 0; + mCallback.field_0x098 = 10.0f; + fn_226_90C0("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() { + fn_226_8B70("AttackBinta", ANM_AttackBinta, false, 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[0].checkFrame(10.0f)) { + mSph0.SetR(100.0f); + mSph0.ClrCoSet(); + mSph0.OnAtSet(); + mSph0.SetAtFlagsUpper(0x40000); + return; + } + if (mAnmChrs[0].checkFrame(22.0f)) { + mSph0.SetR(40.0f); + mSph0.ClrAtSet(); + mSph0.SetAtFlagsUpper(0); + return; + } + + if (mAnmChrs[0].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; + fn_226_8C90("Catch", ANM_Catch, "Catch", ANM_Catch, "FaceTongue", ANM_FaceTonuge, m3d::PLAY_MODE_4, 5.0f, 1.0f); + } else { + fn_226_8C90("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[0].isStop()) { + if (field_0xD7E) { + fn_226_8C90( + "CatchLoop", ANM_CatchLoop, "CatchLoop", ANM_CatchLoop, "FaceTongue", ANM_FaceTonuge, m3d::PLAY_MODE_4, + 5.0f, 1.0f + ); + } else { + fn_226_8C90( + "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[0].checkFrame(35.0f)) { + mCallback.field_0x04E = false; + } + if (mAnmChrs[0].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(); + fn_226_8B70("KnifeDamage", ANM_KnifeDamage, false, m3d::PLAY_MODE_4, 5.0f, 1.0f); + mVec3_c pos = mPosition; + pos.y += 100.0f; + getSoundSource()->holdSoundAtPosition(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[0].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 (field_0x8C8 == ANM_AttackLSwordA) { + fn_226_8B70("GuardLSwordA", ANM_GuardLSwordA, false, m3d::PLAY_MODE_4, 5.0f, 1.0f); + } else { + fn_226_8B70("GuardLSwordB", ANM_GuardLSwordB, false, m3d::PLAY_MODE_4, 5.0f, 1.0f); + } + mCallback.field_0x088 = 0; + 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[0].isStop()) { + changeState(StateID_SearchSword); + } +} +void dAcGirahimuBase_c::finalizeState_LinkSwordGuardJust() {} + +void dAcGirahimuBase_c::initializeState_GetSword() { + field_0xD6C = 2; + field_0xD66 = 0; + field_0xD71 = true; + + fn_226_8B70("GetSword", ANM_GetSword, false, 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[0].getFrame() >= 8.0f) { + field_0x88C = mSwordLink.get()->mPosition; + } + + if (dAcPy_c::GetLinkM()->IfCurrentActionToActor(this, 0xA9 /* ??? */) && mAnmChrs[0].checkFrame(8.0f)) { + if (dAcPy_c::GetLinkM()->vt_0x084(this, 0xA9 /* ??? */)) { + mCallback.field_0x04E = false; + field_0xD71 = false; + fn_226_AFB0(); + mSwordLink.get()->setGetSword(); + } else { + fn_226_D070(); + fn_226_8B70("FreeUp", ANM_FreeUp, false, m3d::PLAY_MODE_4, 2.0f, 1.0f); + changeState(StateID_ReleaseSword); + return; + } + } else if (mAnmChrs[0].getFrame() < 8.0f && !dAcPy_c::GetLinkM()->IfCurrentActionToActor(this, 0xA9 /* ??? */)) { + fn_226_D070(); + fn_226_8B70("FreeUp", ANM_FreeUp, false, m3d::PLAY_MODE_4, 2.0f, 1.0f); + changeState(StateID_ReleaseSword); + return; + } + + if (mAnmChrs[0].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[0].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; + fn_226_8B70("Walk", ANM_Walk, false, 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 { + fn_226_8B70("Walk", ANM_Walk, false, m3d::PLAY_MODE_4, 15.0f, 1.2f); + } + field_0x1834 = f * 8.0f * mAnmChrs[0].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; + fn_226_8B70("MovePose", ANM_MovePose, false, 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[0].getFrame() >= 13.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; + + fn_226_8B70("PickUp02", ANM_PickUp02, false, 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[0].checkFrame(16.0f)) { + field_0xD72 = true; + mSwordLink.get()->setEquip(); + } + + if (mAnmChrs[0].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); + fn_226_8B70("LookSword", ANM_LookSword, false, m3d::PLAY_MODE_4, 5.0f, 1.0f); + mCallback.field_0x088 = false; + } else { + fn_226_8B70("WaitBtB", ANM_WaitBtB, false, 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 (field_0x8C8 == ANM_LookSword) { + if (mAnmChrs[0].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() { + fn_226_8B70("WalkBt", ANM_Walk, false, 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); + s32 f = field_0x183E - mRotation.y; + + f32 f0 = 1.0f - std::abs(mAng(f).normal_c()); + mAngle.y = mRotation.y; + + if (f0 <= 0.6f) { + fn_226_A070(field_0x183E); + f0 = 2.0f; + } else if (field_0x8C8 != ANM_Walk) { + fn_226_8B70("WalkBt", ANM_Walk, false, m3d::PLAY_MODE_4, 15.0f, 1.2f); + } + field_0x1834 = f0 * 8.0f * mAnmChrs[0].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) { + fn_226_8B70("AttackLSwordA", ANM_AttackLSwordA, false, m3d::PLAY_MODE_4, 5.0f, 1.0f); + } else { + fn_226_8B70("AttackLSwordB", ANM_AttackLSwordB, false, 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[0].getFrame() < 29.0f) { + sLib::chaseAngle(mRotation.y.ref(), field_0x183E, 0x500); + } + + if (mAnmChrs[0].checkFrame(30.0f)) { + mSwordLink.get()->getMdl().setProcActive(true); + mSwordLink.get()->getMdl().enableAttack(); + return; + } + if (mAnmChrs[0].checkFrame(35.0f)) { + mSwordLink.get()->getMdl().setInactive(); + mSwordLink.get()->getMdl().setProcActive(false); + return; + } + + if (mAnmChrs[0].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; + fn_226_8B70("LSwordReturn", ANM_LSwordReturn, false, 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[0].getFrame() < 37.0f) { + sLib::chaseAngle(mRotation.y.ref(), field_0x183E, 0x500); + } + if (mAnmChrs[0].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[0].isStop()) { + changeState(StateID_SearchSword); + } +} +void dAcGirahimuBase_c::finalizeState_ReturnSword() {} + +void dAcGirahimuBase_c::initializeState_BackStep() { + if (field_0x8C8 == ANM_StepEnd) { + field_0xD7D = false; + fn_226_AAD0(600.0f, 15.0f); + fn_226_8B70("StepLoop", ANM_StepLoop, false, m3d::PLAY_MODE_4, 2.0f, 1.0f); + field_0xD44 = 2; + } else { + fn_226_8B70("StepStart", ANM_StepStart, false, m3d::PLAY_MODE_4, 2.0f, 1.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() {} +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(); + fn_226_8B70("StepEnd", ANM_StepEnd, false, 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() {} +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) { + fn_226_8B70("WaitBtC", ANM_WaitBtC, false, m3d::PLAY_MODE_4, 15.0f, 1.0f); + } else { + fn_226_8B70("WaitA", ANM_WaitA, false, 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, 0x500); +} +void dAcGirahimuBase_c::finalizeState_EscapeBack() { + field_0xD44 = 0; + mSpeed = 0.0f; + field_0x1834 = 0.0f; + mSph0.OnTgSet(); +} + +void dAcGirahimuBase_c::initializeState_FrontWarp() { + fn_226_8B70("MovePose", ANM_MovePose, false, 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() {} +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() {} +void dAcGirahimuBase_c::finalizeState_FrontAttack() {} + +void dAcGirahimuBase_c::initializeState_BackWarp() { + fn_226_8B70("MovePose", ANM_MovePose, false, 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() {} +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() {} +void dAcGirahimuBase_c::finalizeState_BackAttack() {} + +void dAcGirahimuBase_c::initializeState_Counter() { + field_0xD7E = false; + if (field_0x8C8 == ANM_PoseR) { + fn_226_8B70("PoseLAttack", ANM_PoseLAttack, false, m3d::PLAY_MODE_4, 5.0f, 1.0f); + } else if (field_0x8C8 == ANM_PoseL) { + fn_226_8B70("PoseRAttack", ANM_PoseRAttack, false, m3d::PLAY_MODE_4, 5.0f, 1.0f); + } else if (field_0x8C8 == ANM_PoseC) { + fn_226_8B70("PoseCAttack", ANM_PoseCAttack2, false, m3d::PLAY_MODE_4, 5.0f, 1.0f); + } else if (field_0x8C8 == ANM_PoseC2) { + fn_226_8B70("PoseCAttack", ANM_PoseCAttack, false, m3d::PLAY_MODE_4, 5.0f, 1.0f); + } else { + int rnd = cM::rndInt(90); + if (rnd > 60) { + fn_226_8B70("PoseLAttack", ANM_PoseLAttack, false, m3d::PLAY_MODE_4, 5.0f, 1.0f); + } else if (rnd > 30) { + fn_226_8B70("PoseRAttack", ANM_PoseRAttack, false, m3d::PLAY_MODE_4, 5.0f, 1.0f); + } else { + fn_226_8B70("PoseCAttack", ANM_PoseC, false, 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() {} +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) { + fn_226_8B70("AttackPoseL", ANM_AttackPoseL, false, m3d::PLAY_MODE_4, 5.0f, 1.0f); + } else { + fn_226_8B70("AttackPoseR", ANM_AttackPoseR, false, m3d::PLAY_MODE_4, 5.0f, 1.0f); + } + mCallback.field_0x088 = false; + field_0x1834 = 0.0f; +} +void dAcGirahimuBase_c::executeState_Run() {} +void dAcGirahimuBase_c::finalizeState_Run() { + field_0x1834 = 0.0f; + field_0xD81 = false; +} + +void dAcGirahimuBase_c::initializeState_RunAttack() { + field_0xD6C = 4; + if (fn_226_CC80()) { + fn_226_8B70("AttackSwordL", ANM_AttackSwordL, false, m3d::PLAY_MODE_4, 5.0f, 1.0f); + } else { + fn_226_8B70("AttackSwordR", ANM_AttackSwordR, false, m3d::PLAY_MODE_4, 5.0f, 1.0f); + } + mCallback.field_0x088 = true; + field_0x1834 = 0.0f; + field_0x1838 = 0.2f; +} +void dAcGirahimuBase_c::executeState_RunAttack() {} +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; + fn_226_8B70("WalkBt", ANM_Walk, false, m3d::PLAY_MODE_2, 15.0f, 1.0f); + mCallback.field_0x088 = true; + field_0xD46 = 50; + field_0x1834 = mAnmChrs[0].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 (mpSoundSource != nullptr) { + if (mpSoundSource->hasPlayingSounds()) { + do { + VIWaitForRetrace(); + } while (mpSoundSource->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(); +} + +// 64B0 +bool dAcGirahimuBase_c::createHeap() {} + +// 6A10 +int dAcGirahimuBase_c::actorPostCreate() {} + +// 6AC0 +int dAcGirahimuBase_c::doDelete() {} + +// 6AD0 +int dAcGirahimuBase_c::preExecute() {} + +// 6B50 +void dAcGirahimuBase_c::vt_0x1DC() {} + +// 90C0 +int dAcGirahimuBase_c::draw() {} + +// 9520 +void dAcGirahimuBase_c::vt_0x1E0() {} + +// 9900 +void dAcGirahimuBase_c::vt_0x1E4() {} + +// 9B30 +void dAcGirahimuBase_c::vt_0x1E8() {} + +// 9CA0 +void dAcGirahimuBase_c::vt_0x1EC() {} + +// 9B20 +void dAcGirahimuBase_c::vt_0x1F0() {} + +// 9F60 +void dAcGirahimuBase_c::vt_0x21C() {} + +// AE30 +void dAcGirahimuBase_c::vt_0x1F4() {} + +// AEB0 +void dAcGirahimuBase_c::vt_0x1F8() {} + +// B0E0 +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) + ); +} + +// B100 +void dAcGirahimuBase_c::vt_0x220() {} + +// B150 +void dAcGirahimuBase_c::vt_0x200() {} + +// B190 +void dAcGirahimuBase_c::vt_0x204() {} + +// B1C0 +void dAcGirahimuBase_c::vt_0x228() {} + +// B300 +bool dAcGirahimuBase_c::vt_0x208() {} + +// B4D0 +void dAcGirahimuBase_c::vt_0x20C() {} + +// B4F0 +void dAcGirahimuBase_c::vt_0x22C() {} + +// B740 +void dAcGirahimuBase_c::vt_0x214() {}