diff --git a/config/SOUE01/rels/d_a_obj_tuboNP/symbols.txt b/config/SOUE01/rels/d_a_obj_tuboNP/symbols.txt index 933b46b5..3c952aee 100644 --- a/config/SOUE01/rels/d_a_obj_tuboNP/symbols.txt +++ b/config/SOUE01/rels/d_a_obj_tuboNP/symbols.txt @@ -42,7 +42,7 @@ calcRoll__10dAcOtubo_cFv = .text:0x00001D30; // type:function size:0x78C adjustRoll__10dAcOtubo_cFv = .text:0x000024C0; // type:function size:0x1B0 fn_272_2670__10dAcOtubo_cFv = .text:0x00002670; // type:function size:0x3A0 attemptDestroy__10dAcOtubo_cFv = .text:0x00002A10; // type:function size:0x324 -attemptDestroyOnWall__10dAcOtubo_cFPUlPCUc = .text:0x00002D40; // type:function size:0x64 +attemptDestroyOnWall__10dAcOtubo_cFRCUlRCb = .text:0x00002D40; // type:function size:0x64 getCenter__10dAcOtubo_cCFv = .text:0x00002DB0; // type:function size:0xAC fn_272_2E60__10dAcOtubo_cFRC7mVec3_c = .text:0x00002E60; // type:function size:0x1B8 fn_272_3020__10dAcOtubo_cFv = .text:0x00003020; // type:function size:0x12C diff --git a/config/SOUE01/splits.txt b/config/SOUE01/splits.txt index 37e10797..c682d244 100644 --- a/config/SOUE01/splits.txt +++ b/config/SOUE01/splits.txt @@ -248,15 +248,19 @@ d/d_player_act.cpp: .bss start:0x805A06B0 end:0x805A06C8 d/d_player_mdl.cpp: - .text start:0x8005CE90 end:0x80061B10 align:16 - .ctors start:0x804DB68C end:0x804DB690 - .rodata start:0x804DE1E8 end:0x804E0B38 + .text start:0x8005CE90 end:0x80061AA4 align:16 + .rodata start:0x804DE1E8 end:0x804E0918 .data start:0x8050D690 end:0x8050DDD8 .sdata start:0x80571C80 end:0x80571D08 - .sbss start:0x80575208 end:0x80575220 + .sbss start:0x80575208 end:0x80575210 .sdata2 start:0x80577020 end:0x80577680 .bss start:0x805A06C8 end:0x805A06F0 +d/d_player_guide_colors.cpp: + .text start:0x80061AB0 end:0x80061B0C align:16 + .ctors start:0x804DB68C end:0x804DB690 + .sbss start:0x80575210 end:0x80575220 + d/d_rawarchive.cpp: .text start:0x80061B10 end:0x800629D0 align:16 .data start:0x8050DDD8 end:0x8050DDF8 diff --git a/config/SOUE01/symbols.txt b/config/SOUE01/symbols.txt index 98fe1971..6769ea6e 100644 --- a/config/SOUE01/symbols.txt +++ b/config/SOUE01/symbols.txt @@ -978,7 +978,7 @@ polyAttrsToGroundEffectIdx__14dJEffManager_cFll = .text:0x8002A380; // type:func spawnGroundEffect__14dJEffManager_cFRC7mVec3_cUcUcRC7mVec3_clff = .text:0x8002A450; // type:function size:0x1C0 fn_8002A610 = .text:0x8002A610; // type:function size:0x678 fn_8002AC90 = .text:0x8002AC90; // type:function size:0x460 -fn_8002B0F0 = .text:0x8002B0F0; // type:function size:0x8 +vt_0x1C0__17daPlayerActBase_cCFv = .text:0x8002B0F0; // type:function size:0x8 init__14dWaterEffect_cFP12dAcObjBase_cfff = .text:0x8002B100; // type:function size:0x14 execute__14dWaterEffect_cFff = .text:0x8002B120; // type:function size:0x1F4 drawAfter__18JPAEmitterCallBackFP14JPABaseEmitter = .text:0x8002B320; // type:function size:0x4 @@ -1151,13 +1151,13 @@ ActorEnemyBase__shouldUpdateMaybe = .text:0x8002F400; // type:function size:0xB4 ActorEnemyBase__postUpdate = .text:0x8002F4C0; // type:function size:0x7C ActorEnemyBase__preDraw = .text:0x8002F540; // type:function size:0x74 fn_8002F5C0 = .text:0x8002F5C0; // type:function size:0x110 -fn_8002F6D0 = .text:0x8002F6D0; // type:function size:0x8 -fn_8002F6E0 = .text:0x8002F6E0; // type:function size:0x8 +checkBeetleActorReferences__17daPlayerActBase_cFv = .text:0x8002F6D0; // type:function size:0x8 +getBeetleActorReferencesSize__17daPlayerActBase_cFv = .text:0x8002F6E0; // type:function size:0x8 fn_8002F6F0 = .text:0x8002F6F0; // type:function size:0xC fn_8002F700 = .text:0x8002F700; // type:function size:0x8 fn_8002F710 = .text:0x8002F710; // type:function size:0x110 -fn_8002F820 = .text:0x8002F820; // type:function size:0x8 -fn_8002F830 = .text:0x8002F830; // type:function size:0x8 +checkRefArrayAtIndex__17daPlayerActBase_cFv = .text:0x8002F820; // type:function size:0x8 +sizeOfActorRefs_16__17daPlayerActBase_cFv = .text:0x8002F830; // type:function size:0x8 fn_8002F840 = .text:0x8002F840; // type:function size:0x8 fn_8002F850 = .text:0x8002F850; // type:function size:0x70 fn_8002F8C0 = .text:0x8002F8C0; // type:function size:0x70 @@ -1195,7 +1195,7 @@ fn_80030C70 = .text:0x80030C70; // type:function size:0x4 fn_80030C80 = .text:0x80030C80; // type:function size:0x8 ActorEnemyBase__initList = .text:0x80030C90; // type:function size:0x14 ActorNpcEventFlowManager__handleType3Flow = .text:0x80030CB0; // type:function size:0xC34 -fn_800318F0 = .text:0x800318F0; // type:function size:0x4 +setActorRef9__17daPlayerActBase_cFv = .text:0x800318F0; // type:function size:0x4 fn_80031900 = .text:0x80031900; // type:function size:0x8 fn_80031910 = .text:0x80031910; // type:function size:0x8 fn_80031920 = .text:0x80031920; // type:function size:0x8 @@ -1205,7 +1205,7 @@ fn_80031A40 = .text:0x80031A40; // type:function size:0x44 fn_80031A90 = .text:0x80031A90; // type:function size:0xAC fn_80031B40 = .text:0x80031B40; // type:function size:0x98 fn_80031BE0 = .text:0x80031BE0; // type:function size:0x9C -fn_80031C80 = .text:0x80031C80; // type:function size:0x4 +vt_0x2B0__17daPlayerActBase_cFv = .text:0x80031C80; // type:function size:0x4 fn_80031C90 = .text:0x80031C90; // type:function size:0xF8 fn_80031D90 = .text:0x80031D90; // type:function size:0xF0 fn_80031E80 = .text:0x80031E80; // type:function size:0xC0 @@ -1289,9 +1289,9 @@ getLinkRotation = .text:0x80034690; // type:function size:0x20 ActorLink__setObjActorFlags0x200 = .text:0x800346B0; // type:function size:0x14 ActorLink__unsetObjActorFlags0x200 = .text:0x800346D0; // type:function size:0x14 fn_800346F0 = .text:0x800346F0; // type:function size:0xDC -fn_800347D0 = .text:0x800347D0; // type:function size:0x4 -fn_800347E0 = .text:0x800347E0; // type:function size:0x4 -fn_800347F0 = .text:0x800347F0; // type:function size:0x8 +vt_0x2AC__17daPlayerActBase_cFv = .text:0x800347D0; // type:function size:0x4 +triggerMoveEventMaybe__17daPlayerActBase_cFv = .text:0x800347E0; // type:function size:0x4 +vt_0x2C4__17daPlayerActBase_cFv = .text:0x800347F0; // type:function size:0x8 fn_80034800 = .text:0x80034800; // type:function size:0x170 fn_80034970 = .text:0x80034970; // type:function size:0xFC fn_80034A70 = .text:0x80034A70; // type:function size:0x8 @@ -1303,7 +1303,7 @@ fn_80034B50 = .text:0x80034B50; // type:function size:0xB8 fn_80034C10 = .text:0x80034C10; // type:function size:0x64 fn_80034C80 = .text:0x80034C80; // type:function size:0x104 fn_80034D90 = .text:0x80034D90; // type:function size:0x8 -fn_80034DA0 = .text:0x80034DA0; // type:function size:0x8 +isDashing__17daPlayerActBase_cFv = .text:0x80034DA0; // type:function size:0x8 acNpc_vt_0x11C__8dAcNpc_cFv = .text:0x80034DB0; // type:function size:0x10 fn_80034DC0 = .text:0x80034DC0; // type:function size:0x50 ActorNpcBase2__rotateToGoal = .text:0x80034E10; // type:function size:0x5C @@ -1439,7 +1439,7 @@ fn_80038B70 = .text:0x80038B70; // type:function size:0x138 fn_80038CB0 = .text:0x80038CB0; // type:function size:0xCC fn_80038D80 = .text:0x80038D80; // type:function size:0x7C fn_80038E00 = .text:0x80038E00; // type:function size:0x4C -fn_80038E50 = .text:0x80038E50; // type:function size:0x4 +unlinkActorRef9__17daPlayerActBase_cFv = .text:0x80038E50; // type:function size:0x4 fn_80038E60 = .text:0x80038E60; // type:function size:0x18 fn_80038E80 = .text:0x80038E80; // type:function size:0x28 fn_80038EB0 = .text:0x80038EB0; // type:function size:0x38 @@ -1924,7 +1924,7 @@ fn_8004B380 = .text:0x8004B380; // type:function size:0xD0 fn_8004B450 = .text:0x8004B450; // type:function size:0x140 fn_8004B590 = .text:0x8004B590; // type:function size:0x3B8 fn_8004B950 = .text:0x8004B950; // type:function size:0x14 -fn_8004B970 = .text:0x8004B970; // type:function size:0x8 +vt_0x2C0__17daPlayerActBase_cFv = .text:0x8004B970; // type:function size:0x8 AcOrdinaryNpc__statePainEnter = .text:0x8004B980; // type:function size:0x50 fn_8004B9D0 = .text:0x8004B9D0; // type:function size:0x1C AcOrdinaryNpc__statePainUpdate = .text:0x8004B9F0; // type:function size:0xB8 @@ -2072,7 +2072,7 @@ fn_80050010 = .text:0x80050010; // type:function size:0x4 fn_80050020 = .text:0x80050020; // type:function size:0x8 fn_80050030 = .text:0x80050030; // type:function size:0x1A8 fn_800501E0 = .text:0x800501E0; // type:function size:0x40 -fn_80050220 = .text:0x80050220; // type:function size:0x40 +__dt__7mQuat_cFv = .text:0x80050220; // type:function size:0x40 AcNpcKyuiBase__initStates = .text:0x80050260; // type:function size:0x1E0 fn_80050440 = .text:0x80050440; // type:function size:0x58 AcNpcKyuiBase__dtor = .text:0x800504A0; // type:function size:0x5C @@ -2439,24 +2439,24 @@ fn_8005B4B0 = .text:0x8005B4B0; // type:function size:0xDC fn_8005B590 = .text:0x8005B590; // type:function size:0xB0 fn_8005B640 = .text:0x8005B640; // type:function size:0x2C fn_8005B670 = .text:0x8005B670; // type:function size:0x64 -ActorLink__preExecute = .text:0x8005B6E0; // type:function size:0x4C -fn_8005B730 = .text:0x8005B730; // type:function size:0x18 -isInAnyEvent = .text:0x8005B750; // type:function size:0x24 -isAttackingLeft = .text:0x8005B780; // type:function size:0x20 -isAttackingRight = .text:0x8005B7A0; // type:function size:0x20 -fn_8005B7C0 = .text:0x8005B7C0; // type:function size:0x30 -isAttackingUpwards = .text:0x8005B7F0; // type:function size:0x20 -isStabbing = .text:0x8005B810; // type:function size:0x14 -isSpinAttackingHorizontally = .text:0x8005B830; // type:function size:0x20 -isSpinAttackingVertically = .text:0x8005B850; // type:function size:0x20 -fn_8005B870 = .text:0x8005B870; // type:function size:0x28 -fn_8005B8A0 = .text:0x8005B8A0; // type:function size:0xC0 -setPosYRot__7dAcPy_cFRC7mVec3_c4mAngiii = .text:0x8005B960; // type:function size:0x44 -setTransform__7dAcPy_cFRC6mMtx_ciii = .text:0x8005B9B0; // type:function size:0x98 -fn_8005BA50 = .text:0x8005BA50; // type:function size:0x30 -fn_8005BA80 = .text:0x8005BA80; // type:function size:0x8 -fn_8005BA90 = .text:0x8005BA90; // type:function size:0x8 -fn_8005BAA0 = .text:0x8005BAA0; // type:function size:0x8 +preExecute__17daPlayerActBase_cFv = .text:0x8005B6E0; // type:function size:0x4C +postExecute__17daPlayerActBase_cFQ27fBase_c12MAIN_STATE_e = .text:0x8005B730; // type:function size:0x18 +isInEvent__17daPlayerActBase_cFv = .text:0x8005B750; // type:function size:0x24 +isAttackingLeft__17daPlayerActBase_cCFv = .text:0x8005B780; // type:function size:0x20 +isAttackingRight__17daPlayerActBase_cCFv = .text:0x8005B7A0; // type:function size:0x20 +isAttackingDown__17daPlayerActBase_cCFv = .text:0x8005B7C0; // type:function size:0x30 +isAttackingUp__17daPlayerActBase_cCFv = .text:0x8005B7F0; // type:function size:0x20 +isAttackingStab__17daPlayerActBase_cCFv = .text:0x8005B810; // type:function size:0x14 +isAttackingSpinHorizontal__17daPlayerActBase_cCFv = .text:0x8005B830; // type:function size:0x20 +isAttackingSpinVertical__17daPlayerActBase_cCFv = .text:0x8005B850; // type:function size:0x20 +setBonkRelatedAnimFlag__17daPlayerActBase_cFb = .text:0x8005B870; // type:function size:0x28 +setPosRot__17daPlayerActBase_cFPC7mVec3_cPC7mAng3_cbii = .text:0x8005B8A0; // type:function size:0xC0 +setPosYRot__17daPlayerActBase_cFRC7mVec3_c4mAngbii = .text:0x8005B960; // type:function size:0x44 +setTransform__17daPlayerActBase_cFRC6mMtx_cbii = .text:0x8005B9B0; // type:function size:0x98 +someTargetedActorCheck__17daPlayerActBase_cCFv = .text:0x8005BA50; // type:function size:0x30 +getTargetedActor1__17daPlayerActBase_cCFv = .text:0x8005BA80; // type:function size:0x8 +fn_8005BA90__17daPlayerActBase_cFv = .text:0x8005BA90; // type:function size:0x8 +fn_8005BAA0__17daPlayerActBase_cFv = .text:0x8005BAA0; // type:function size:0x8 restoreLinksStamina = .text:0x8005BAB0; // type:function size:0x8 fn_8005BAC0 = .text:0x8005BAC0; // type:function size:0x10 fn_8005BAD0 = .text:0x8005BAD0; // type:function size:0x10 @@ -2464,7 +2464,7 @@ fn_8005BAE0 = .text:0x8005BAE0; // type:function size:0xC IsLinkOutOfStamina = .text:0x8005BAF0; // type:function size:0x14 fn_8005BB10 = .text:0x8005BB10; // type:function size:0x8 getBoatActorIfRiding = .text:0x8005BB20; // type:function size:0x24 -fn_8005BB50 = .text:0x8005BB50; // type:function size:0x8 +getRidingActor__17daPlayerActBase_cFv = .text:0x8005BB50; // type:function size:0x8 AcNpcTke__setRefInLinkToCall = .text:0x8005BB60; // type:function size:0xC setObtainedItemID = .text:0x8005BB70; // type:function size:0x3C fn_8005BBB0 = .text:0x8005BBB0; // type:function size:0xC @@ -2483,13 +2483,13 @@ fn_8005BD90 = .text:0x8005BD90; // type:function size:0xC getLinkSoundRelated = .text:0x8005BDA0; // type:function size:0xC fn_8005BDB0 = .text:0x8005BDB0; // type:function size:0xE8 unsetRegionBasedFlagsMaybe = .text:0x8005BEA0; // type:function size:0x100 -ActorLink__getEarringColor = .text:0x8005BFA0; // type:function size:0xB0 +getEarringsColor__17daPlayerActBase_cFv = .text:0x8005BFA0; // type:function size:0xB0 getLinkTunicSubtype = .text:0x8005C050; // type:function size:0xC getCurrentSwordType = .text:0x8005C060; // type:function size:0xAC -updateCurrentSword = .text:0x8005C110; // type:function size:0x24 +updateCurrentSword__17daPlayerActBase_cFv = .text:0x8005C110; // type:function size:0x24 doesPlayerHaveSword = .text:0x8005C140; // type:function size:0x1C -getSwordName = .text:0x8005C160; // type:function size:0x14 -getCurrentlyEquippedShieldType__7dAcPy_cFv = .text:0x8005C180; // type:function size:0x44 +getSwordName__17daPlayerActBase_cFl = .text:0x8005C160; // type:function size:0x14 +getCurrentlyEquippedShieldType__17daPlayerActBase_cFv = .text:0x8005C180; // type:function size:0x44 getCurrentSlingshotType__7dAcPy_cFv = .text:0x8005C1D0; // type:function size:0x48 getCurrentBugNetType__7dAcPy_cFv = .text:0x8005C220; // type:function size:0x48 getCurrentBeetleType__7dAcPy_cFv = .text:0x8005C270; // type:function size:0x78 @@ -2501,243 +2501,243 @@ isItemRestrictedByBokoBase__7dAcPy_cF7ITEM_ID = .text:0x8005C430; // type:functi isItemRestricted = .text:0x8005C4F0; // type:function size:0xE0 fn_8005C5D0 = .text:0x8005C5D0; // type:function size:0x34 getLinkPtr__Fv = .text:0x8005C610; // type:function size:0x8 -fn_8005C620 = .text:0x8005C620; // type:function size:0x8 -fn_8005C630 = .text:0x8005C630; // type:function size:0x8 -fn_8005C640 = .text:0x8005C640; // type:function size:0x8 -fn_8005C650 = .text:0x8005C650; // type:function size:0x8 -fn_8005C660 = .text:0x8005C660; // type:function size:0x8 -fn_8005C670 = .text:0x8005C670; // type:function size:0x8 -fn_8005C680 = .text:0x8005C680; // type:function size:0x4 -fn_8005C690 = .text:0x8005C690; // type:function size:0x8 -fn_8005C6A0 = .text:0x8005C6A0; // type:function size:0x4 -fn_8005C6B0 = .text:0x8005C6B0; // type:function size:0x8 -fn_8005C6C0 = .text:0x8005C6C0; // type:function size:0x8 -fn_8005C6D0 = .text:0x8005C6D0; // type:function size:0xC -fn_8005C6E0 = .text:0x8005C6E0; // type:function size:0x8 -fn_8005C6F0 = .text:0x8005C6F0; // type:function size:0x8 -fn_8005C700 = .text:0x8005C700; // type:function size:0x8 -fn_8005C710 = .text:0x8005C710; // type:function size:0x8 -fn_8005C720 = .text:0x8005C720; // type:function size:0x8 -fn_8005C730 = .text:0x8005C730; // type:function size:0x8 -fn_8005C740 = .text:0x8005C740; // type:function size:0x8 -fn_8005C750 = .text:0x8005C750; // type:function size:0xC -fn_8005C760 = .text:0x8005C760; // type:function size:0x4 -fn_8005C770 = .text:0x8005C770; // type:function size:0x8 -fn_8005C780 = .text:0x8005C780; // type:function size:0x4 -fn_8005C790 = .text:0x8005C790; // type:function size:0x8 -fn_8005C7A0 = .text:0x8005C7A0; // type:function size:0x8 -fn_8005C7B0 = .text:0x8005C7B0; // type:function size:0x8 -fn_8005C7C0 = .text:0x8005C7C0; // type:function size:0xC -fn_8005C7D0 = .text:0x8005C7D0; // type:function size:0x8 -fn_8005C7E0 = .text:0x8005C7E0; // type:function size:0x8 -fn_8005C7F0 = .text:0x8005C7F0; // type:function size:0x8 -fn_8005C800 = .text:0x8005C800; // type:function size:0x8 -fn_8005C810 = .text:0x8005C810; // type:function size:0x8 -fn_8005C820 = .text:0x8005C820; // type:function size:0x8 -fn_8005C830 = .text:0x8005C830; // type:function size:0x4 -fn_8005C840 = .text:0x8005C840; // type:function size:0x4 -fn_8005C850 = .text:0x8005C850; // type:function size:0x8 -fn_8005C860 = .text:0x8005C860; // type:function size:0x8 -fn_8005C870 = .text:0x8005C870; // type:function size:0x8 -fn_8005C880 = .text:0x8005C880; // type:function size:0x8 -fn_8005C890 = .text:0x8005C890; // type:function size:0x8 -fn_8005C8A0 = .text:0x8005C8A0; // type:function size:0x8 -fn_8005C8B0 = .text:0x8005C8B0; // type:function size:0x8 -fn_8005C8C0 = .text:0x8005C8C0; // type:function size:0x8 -fn_8005C8D0 = .text:0x8005C8D0; // type:function size:0x8 -fn_8005C8E0 = .text:0x8005C8E0; // type:function size:0x8 -fn_8005C8F0 = .text:0x8005C8F0; // type:function size:0x8 -fn_8005C900 = .text:0x8005C900; // type:function size:0x8 -fn_8005C910 = .text:0x8005C910; // type:function size:0x8 -fn_8005C920 = .text:0x8005C920; // type:function size:0x8 -fn_8005C930 = .text:0x8005C930; // type:function size:0x8 -fn_8005C940 = .text:0x8005C940; // type:function size:0x8 -fn_8005C950 = .text:0x8005C950; // type:function size:0x8 -fn_8005C960 = .text:0x8005C960; // type:function size:0x8 -fn_8005C970 = .text:0x8005C970; // type:function size:0x8 -fn_8005C980 = .text:0x8005C980; // type:function size:0x8 -fn_8005C990 = .text:0x8005C990; // type:function size:0x8 -fn_8005C9A0 = .text:0x8005C9A0; // type:function size:0x8 -fn_8005C9B0 = .text:0x8005C9B0; // type:function size:0x4 -fn_8005C9C0 = .text:0x8005C9C0; // type:function size:0x8 -fn_8005C9D0 = .text:0x8005C9D0; // type:function size:0x8 -fn_8005C9E0 = .text:0x8005C9E0; // type:function size:0x8 -fn_8005C9F0 = .text:0x8005C9F0; // type:function size:0x4 -fn_8005CA00 = .text:0x8005CA00; // type:function size:0x8 -fn_8005CA10 = .text:0x8005CA10; // type:function size:0x8 -fn_8005CA20 = .text:0x8005CA20; // type:function size:0x8 -fn_8005CA30 = .text:0x8005CA30; // type:function size:0x8 -fn_8005CA40 = .text:0x8005CA40; // type:function size:0x8 -fn_8005CA50 = .text:0x8005CA50; // type:function size:0x8 -fn_8005CA60 = .text:0x8005CA60; // type:function size:0xC -fn_8005CA70 = .text:0x8005CA70; // type:function size:0x8 -fn_8005CA80 = .text:0x8005CA80; // type:function size:0x4 -fn_8005CA90 = .text:0x8005CA90; // type:function size:0x8 -fn_8005CAA0 = .text:0x8005CAA0; // type:function size:0x8 -fn_8005CAB0 = .text:0x8005CAB0; // type:function size:0x8 -fn_8005CAC0 = .text:0x8005CAC0; // type:function size:0x8 -fn_8005CAD0 = .text:0x8005CAD0; // type:function size:0x8 -fn_8005CAE0 = .text:0x8005CAE0; // type:function size:0x8 -fn_8005CAF0 = .text:0x8005CAF0; // type:function size:0x8 -fn_8005CB00 = .text:0x8005CB00; // type:function size:0x8 -fn_8005CB10 = .text:0x8005CB10; // type:function size:0x8 -fn_8005CB20 = .text:0x8005CB20; // type:function size:0x8 -fn_8005CB30 = .text:0x8005CB30; // type:function size:0x8 -fn_8005CB40 = .text:0x8005CB40; // type:function size:0x8 -fn_8005CB50 = .text:0x8005CB50; // type:function size:0x4 -fn_8005CB60 = .text:0x8005CB60; // type:function size:0x4 -fn_8005CB70 = .text:0x8005CB70; // type:function size:0x8 -fn_8005CB80 = .text:0x8005CB80; // type:function size:0x4 -fn_8005CB90 = .text:0x8005CB90; // type:function size:0x8 -fn_8005CBA0 = .text:0x8005CBA0; // type:function size:0x8 -fn_8005CBB0 = .text:0x8005CBB0; // type:function size:0x8 -fn_8005CBC0 = .text:0x8005CBC0; // type:function size:0x8 -fn_8005CBD0 = .text:0x8005CBD0; // type:function size:0x8 -fn_8005CBE0 = .text:0x8005CBE0; // type:function size:0x8 -fn_8005CBF0 = .text:0x8005CBF0; // type:function size:0x8 -fn_8005CC00 = .text:0x8005CC00; // type:function size:0x8 -fn_8005CC10 = .text:0x8005CC10; // type:function size:0x8 -fn_8005CC20 = .text:0x8005CC20; // type:function size:0x8 -fn_8005CC30 = .text:0x8005CC30; // type:function size:0x8 -fn_8005CC40 = .text:0x8005CC40; // type:function size:0xC -fn_8005CC50 = .text:0x8005CC50; // type:function size:0xC -fn_8005CC60 = .text:0x8005CC60; // type:function size:0x8 -fn_8005CC70 = .text:0x8005CC70; // type:function size:0x8 -fn_8005CC80 = .text:0x8005CC80; // type:function size:0x8 -fn_8005CC90 = .text:0x8005CC90; // type:function size:0x8 -fn_8005CCA0 = .text:0x8005CCA0; // type:function size:0x8 -fn_8005CCB0 = .text:0x8005CCB0; // type:function size:0x8 -fn_8005CCC0 = .text:0x8005CCC0; // type:function size:0x8 -fn_8005CCD0 = .text:0x8005CCD0; // type:function size:0x8 -fn_8005CCE0 = .text:0x8005CCE0; // type:function size:0x8 -fn_8005CCF0 = .text:0x8005CCF0; // type:function size:0x4 -fn_8005CD00 = .text:0x8005CD00; // type:function size:0x8 -fn_8005CD10 = .text:0x8005CD10; // type:function size:0x8 -fn_8005CD20 = .text:0x8005CD20; // type:function size:0x8 -fn_8005CD30 = .text:0x8005CD30; // type:function size:0x8 -fn_8005CD40 = .text:0x8005CD40; // type:function size:0x8 -fn_8005CD50 = .text:0x8005CD50; // type:function size:0x8 -fn_8005CD60 = .text:0x8005CD60; // type:function size:0x8 -fn_8005CD70 = .text:0x8005CD70; // type:function size:0x8 -fn_8005CD80 = .text:0x8005CD80; // type:function size:0x4 -fn_8005CD90 = .text:0x8005CD90; // type:function size:0x58 -fn_8005CDF0 = .text:0x8005CDF0; // type:function size:0x8 -fn_8005CE00 = .text:0x8005CE00; // type:function size:0x4 -fn_8005CE10 = .text:0x8005CE10; // type:function size:0x4 -fn_8005CE20 = .text:0x8005CE20; // type:function size:0x8 -fn_8005CE30 = .text:0x8005CE30; // type:function size:0x8 -ActorLink__initPos = .text:0x8005CE40; // type:function size:0x4C -fn_8005CE90 = .text:0x8005CE90; // type:function size:0x134 -fn_8005CFD0 = .text:0x8005CFD0; // type:function size:0x10 -fn_8005CFE0 = .text:0x8005CFE0; // type:function size:0x134 -fn_8005D120 = .text:0x8005D120; // type:function size:0xD4 -fn_8005D200 = .text:0x8005D200; // type:function size:0x4 -fn_8005D210 = .text:0x8005D210; // type:function size:0x38 -fn_8005D250 = .text:0x8005D250; // type:function size:0x60 -fn_8005D2B0 = .text:0x8005D2B0; // type:function size:0x8 -fn_8005D2C0 = .text:0x8005D2C0; // type:function size:0x8 -fn_8005D2D0 = .text:0x8005D2D0; // type:function size:0x8 -fn_8005D2E0 = .text:0x8005D2E0; // type:function size:0x34 -isAnimationWaitingMaybe = .text:0x8005D320; // type:function size:0x80 -fn_8005D3A0 = .text:0x8005D3A0; // type:function size:0x8 -fn_8005D3B0 = .text:0x8005D3B0; // type:function size:0x30 -fn_8005D3E0 = .text:0x8005D3E0; // type:function size:0x28 -fn_8005D410 = .text:0x8005D410; // type:function size:0x60 -InitLinkItemHeap = .text:0x8005D470; // type:function size:0x58 -ActorLink__allocateExternalDataBuffers = .text:0x8005D4D0; // type:function size:0x9C -InitSomeModelHeaps = .text:0x8005D570; // type:function size:0x78 -ActorLink__updateSwordShieldIfNeeded = .text:0x8005D5F0; // type:function size:0x58 -fn_8005D650 = .text:0x8005D650; // type:function size:0xDC -ActorLink__setEarringColor = .text:0x8005D730; // type:function size:0x74 -ActorLink__LoadLinkModels = .text:0x8005D7B0; // type:function size:0x32C -ActorLink__initBodyModels = .text:0x8005DAE0; // type:function size:0x360 -LoadHands = .text:0x8005DE40; // type:function size:0x250 -fn_8005E090 = .text:0x8005E090; // type:function size:0x64 -ActorLink__initSwordModels = .text:0x8005E100; // type:function size:0x1F0 -ActorLink__updateSword = .text:0x8005E2F0; // type:function size:0xA8 -getCurrentShieldPouchSlot = .text:0x8005E3A0; // type:function size:0x50 -isInBambooCuttingMinigame__7dAcPy_cFv = .text:0x8005E3F0; // type:function size:0x8 -getCurrentlyEquippedShieldId = .text:0x8005E400; // type:function size:0x4C -getShieldSubtype = .text:0x8005E450; // type:function size:0x3C -ActorLink__initShieldModels = .text:0x8005E490; // type:function size:0x2C0 -ActorLink__updateShieldModels = .text:0x8005E750; // type:function size:0xC8 -ActorLink__createModelAndSetDrawPriority = .text:0x8005E820; // type:function size:0x68 -createModelAndSetPriorityDraw = .text:0x8005E890; // type:function size:0x68 -fn_8005E900 = .text:0x8005E900; // type:function size:0x11C -fn_8005EA20 = .text:0x8005EA20; // type:function size:0xA0 -fn_8005EAC0 = .text:0x8005EAC0; // type:function size:0x274 -fn_8005ED40 = .text:0x8005ED40; // type:function size:0x4 -fn_8005ED50 = .text:0x8005ED50; // type:function size:0xC -fn_8005ED60 = .text:0x8005ED60; // type:function size:0x7B0 -fn_8005F510 = .text:0x8005F510; // type:function size:0x4 -fn_8005F520 = .text:0x8005F520; // type:function size:0x24 -fn_8005F550 = .text:0x8005F550; // type:function size:0x8 -fn_8005F560 = .text:0x8005F560; // type:function size:0x8 -fn_8005F570 = .text:0x8005F570; // type:function size:0x8 -fn_8005F580 = .text:0x8005F580; // type:function size:0x88 -fn_8005F610 = .text:0x8005F610; // type:function size:0xD4 -fn_8005F6F0 = .text:0x8005F6F0; // type:function size:0x194 -fn_8005F890 = .text:0x8005F890; // type:function size:0x2C0 -fn_8005FB50 = .text:0x8005FB50; // type:function size:0x8 -fn_8005FB60 = .text:0x8005FB60; // type:function size:0xC -fn_8005FB70 = .text:0x8005FB70; // type:function size:0x14 -fn_8005FB90 = .text:0x8005FB90; // type:function size:0x220 -fn_8005FDB0 = .text:0x8005FDB0; // type:function size:0x4 -fn_8005FDC0 = .text:0x8005FDC0; // type:function size:0x78 -fn_8005FE40 = .text:0x8005FE40; // type:function size:0x4C -fn_8005FE90 = .text:0x8005FE90; // type:function size:0xA8 -fn_8005FF40 = .text:0x8005FF40; // type:function size:0x118 -UnkModel__setMatrix = .text:0x80060060; // type:function size:0x40 -fn_800600A0 = .text:0x800600A0; // type:function size:0xD4 -fn_80060180 = .text:0x80060180; // type:function size:0xB0 -getItemResFile__7dAcPy_cFPCcR12mAllocator_c = .text:0x80060230; // type:function size:0xD4 -ActorLink__GetResCompressedFileFromExternalData = .text:0x80060310; // type:function size:0x94 -getAnmChrFromExternal = .text:0x800603B0; // type:function size:0x94 -ActorLink__BindAnmTexPatToArcALink2 = .text:0x80060450; // type:function size:0xD4 -getAnmTexSrtFromExternal = .text:0x80060530; // type:function size:0x94 -fn_800605D0 = .text:0x800605D0; // type:function size:0x30 -ActorLink__SetFaceTexPat = .text:0x80060600; // type:function size:0xEC -fn_800606F0 = .text:0x800606F0; // type:function size:0x38 -ActorLink__SetFaceTexSrt = .text:0x80060730; // type:function size:0xAC -fn_800607E0 = .text:0x800607E0; // type:function size:0x38 -ActorLink__SetFaceAnmChr = .text:0x80060820; // type:function size:0xF0 -fn_80060910 = .text:0x80060910; // type:function size:0x38 -fn_80060950 = .text:0x80060950; // type:function size:0x164 -fn_80060AC0 = .text:0x80060AC0; // type:function size:0x6C -fn_80060B30 = .text:0x80060B30; // type:function size:0xCC -fn_80060C00 = .text:0x80060C00; // type:function size:0xE0 -fn_80060CE0 = .text:0x80060CE0; // type:function size:0x64 -fn_80060D50 = .text:0x80060D50; // type:function size:0x54 -fn_80060DB0 = .text:0x80060DB0; // type:function size:0x29C -fn_80061050 = .text:0x80061050; // type:function size:0x1B0 -fn_80061200 = .text:0x80061200; // type:function size:0x210 -fn_80061410 = .text:0x80061410; // type:function size:0x6C -fn_80061480 = .text:0x80061480; // type:function size:0x8 -fn_80061490 = .text:0x80061490; // type:function size:0x1C -fn_800614B0 = .text:0x800614B0; // type:function size:0xC -fn_800614C0 = .text:0x800614C0; // type:function size:0xC -ActorLink__getSwordModelMatrix = .text:0x800614D0; // type:function size:0x8 -ActorLink__getShieldModelMatrix = .text:0x800614E0; // type:function size:0x8 -fn_800614F0 = .text:0x800614F0; // type:function size:0x14 -ActorLink__getCurrentCarriedActor = .text:0x80061510; // type:function size:0x8 -fn_80061520 = .text:0x80061520; // type:function size:0x8 -fn_80061530 = .text:0x80061530; // type:function size:0x8 -ActorLink__getHeadTranslation = .text:0x80061540; // type:function size:0x8 -fn_80061550 = .text:0x80061550; // type:function size:0x8 -ActorLink__getCenterTranslation = .text:0x80061560; // type:function size:0x8 -fn_80061570 = .text:0x80061570; // type:function size:0x8 -fn_80061580 = .text:0x80061580; // type:function size:0x254 -fn_800617E0 = .text:0x800617E0; // type:function size:0x58 -fn_80061840 = .text:0x80061840; // type:function size:0x40 -fn_80061880 = .text:0x80061880; // type:function size:0x40 -fn_800618C0 = .text:0x800618C0; // type:function size:0x40 -fn_80061900 = .text:0x80061900; // type:function size:0x58 -fn_80061960 = .text:0x80061960; // type:function size:0x58 -fn_800619C0 = .text:0x800619C0; // type:function size:0x6C -fn_80061A30 = .text:0x80061A30; // type:function size:0x58 -fn_80061A90 = .text:0x80061A90; // type:function size:0x4 -fn_80061AA0 = .text:0x80061AA0; // type:function size:0x4 -dPlayerModel__sinit = .text:0x80061AB0; // type:function size:0x5C +getShieldRegenProgressMaybe__17daPlayerActBase_cFv = .text:0x8005C620; // type:function size:0x8 +isUsingBottle__17daPlayerActBase_cFv = .text:0x8005C630; // type:function size:0x8 +isBottleOut__17daPlayerActBase_cFv = .text:0x8005C640; // type:function size:0x8 +isHealingShield__17daPlayerActBase_cFv = .text:0x8005C650; // type:function size:0x8 +isDrinkingPotion__17daPlayerActBase_cFv = .text:0x8005C660; // type:function size:0x8 +isRecovering__17daPlayerActBase_cCFv = .text:0x8005C670; // type:function size:0x8 +lookTowardItem__17daPlayerActBase_cFv = .text:0x8005C680; // type:function size:0x4 +isRunningUpWall__17daPlayerActBase_cFv = .text:0x8005C690; // type:function size:0x8 +doGameOver__17daPlayerActBase_cFv = .text:0x8005C6A0; // type:function size:0x4 +getDieLargeDamageDir__17daPlayerActBase_cFv = .text:0x8005C6B0; // type:function size:0x8 +vt_0x298__17daPlayerActBase_cFv = .text:0x8005C6C0; // type:function size:0x8 +somethingSwitchDials__17daPlayerActBase_cFv = .text:0x8005C6D0; // type:function size:0xC +bugNetCollectTreasure__17daPlayerActBase_cFUl = .text:0x8005C6E0; // type:function size:0x8 +isUsingBugnet1__17daPlayerActBase_cFv = .text:0x8005C6F0; // type:function size:0x8 +getBugNetPos__17daPlayerActBase_cCFv = .text:0x8005C700; // type:function size:0x8 +isUsingBugnet__17daPlayerActBase_cCFv = .text:0x8005C710; // type:function size:0x8 +vt_0x280__17daPlayerActBase_cFv = .text:0x8005C720; // type:function size:0x8 +getSwordPos__17daPlayerActBase_cCFv = .text:0x8005C730; // type:function size:0x8 +vt_0x278__17daPlayerActBase_cCFv = .text:0x8005C740; // type:function size:0x8 +vt_0x274__17daPlayerActBase_cFv = .text:0x8005C750; // type:function size:0xC +triggerExitRelated__17daPlayerActBase_cFv = .text:0x8005C760; // type:function size:0x4 +doesGameOver__17daPlayerActBase_cFv = .text:0x8005C770; // type:function size:0x8 +setActorRef11__17daPlayerActBase_cFv = .text:0x8005C780; // type:function size:0x4 +getGroosenatorIfIn__17daPlayerActBase_cFv = .text:0x8005C790; // type:function size:0x8 +vt_0x260__17daPlayerActBase_cCFv = .text:0x8005C7A0; // type:function size:0x8 +vt_0x25C__17daPlayerActBase_cFv = .text:0x8005C7B0; // type:function size:0x8 +vt_0x258__17daPlayerActBase_cCFv = .text:0x8005C7C0; // type:function size:0xC +isAttackingUnderground__17daPlayerActBase_cFv = .text:0x8005C7D0; // type:function size:0x8 +vt_0x250__17daPlayerActBase_cFv = .text:0x8005C7E0; // type:function size:0x8 +vt_0x24C__17daPlayerActBase_cFv = .text:0x8005C7F0; // type:function size:0x8 +vt_0x248__17daPlayerActBase_cFv = .text:0x8005C800; // type:function size:0x8 +vt_0x244__17daPlayerActBase_cFv = .text:0x8005C810; // type:function size:0x8 +vt_0x240__17daPlayerActBase_cFv = .text:0x8005C820; // type:function size:0x8 +setActorRef10__17daPlayerActBase_cFv = .text:0x8005C830; // type:function size:0x4 +setVecIfInFreeFall__17daPlayerActBase_cFv = .text:0x8005C840; // type:function size:0x4 +vt_0x234__17daPlayerActBase_cFv = .text:0x8005C850; // type:function size:0x8 +vt_0x230__17daPlayerActBase_cFv = .text:0x8005C860; // type:function size:0x8 +getTurnableSwitch__17daPlayerActBase_cFv = .text:0x8005C870; // type:function size:0x8 +getRidingMinecartActor__17daPlayerActBase_cCFv = .text:0x8005C880; // type:function size:0x8 +isRidingBall__17daPlayerActBase_cCFv = .text:0x8005C890; // type:function size:0x8 +isPushingBlock__17daPlayerActBase_cFv = .text:0x8005C8A0; // type:function size:0x8 +isinMpPosePower__17daPlayerActBase_cFv = .text:0x8005C8B0; // type:function size:0x8 +vt_0x214__17daPlayerActBase_cFv = .text:0x8005C8C0; // type:function size:0x8 +isSlding2__17daPlayerActBase_cFv = .text:0x8005C8D0; // type:function size:0x8 +isSliding__17daPlayerActBase_cFv = .text:0x8005C8E0; // type:function size:0x8 +isBeingPulledByLeftClawshot__17daPlayerActBase_cFv = .text:0x8005C8F0; // type:function size:0x8 +isBeingPulledFromRightClawshot__17daPlayerActBase_cFv = .text:0x8005C900; // type:function size:0x8 +isLandingFromSailcloth__17daPlayerActBase_cFv = .text:0x8005C910; // type:function size:0x8 +didDiveSky_andNotOther__17daPlayerActBase_cFv = .text:0x8005C920; // type:function size:0x8 +didDiveSky_and_other__17daPlayerActBase_cFv = .text:0x8005C930; // type:function size:0x8 +vt_0x1F0__17daPlayerActBase_cFv = .text:0x8005C940; // type:function size:0x8 +vt_0x1EC__17daPlayerActBase_cFv = .text:0x8005C950; // type:function size:0x8 +vt_0x1E0__17daPlayerActBase_cFv = .text:0x8005C960; // type:function size:0x8 +didShootBow__17daPlayerActBase_cFv = .text:0x8005C970; // type:function size:0x8 +isWeaponChargedFully__17daPlayerActBase_cFv = .text:0x8005C980; // type:function size:0x8 +isChargingWeapon__17daPlayerActBase_cFv = .text:0x8005C990; // type:function size:0x8 +ifHasHealthAndSomethingElse__17daPlayerActBase_cFv = .text:0x8005C9A0; // type:function size:0x8 +unlinkActorRef1__17daPlayerActBase_cFv = .text:0x8005C9B0; // type:function size:0x4 +doesActorRef1Exist__17daPlayerActBase_cFv = .text:0x8005C9C0; // type:function size:0x8 +getActorInActorRef1__17daPlayerActBase_cFv = .text:0x8005C9D0; // type:function size:0x8 +vt_0x1BC__17daPlayerActBase_cFv = .text:0x8005C9E0; // type:function size:0x8 +canHandleGameOver__17daPlayerActBase_cFv = .text:0x8005C9F0; // type:function size:0x4 +isByte0x434eEqual7__17daPlayerActBase_cFv = .text:0x8005CA00; // type:function size:0x8 +isItemFairyFromBugnet__17daPlayerActBase_cFv = .text:0x8005CA10; // type:function size:0x8 +vt_0x1AC__17daPlayerActBase_cFv = .text:0x8005CA20; // type:function size:0x8 +vt_0x1A8__17daPlayerActBase_cFv = .text:0x8005CA30; // type:function size:0x8 +vt_0x1A4__17daPlayerActBase_cFv = .text:0x8005CA40; // type:function size:0x8 +vt_0x1A0__17daPlayerActBase_cFv = .text:0x8005CA50; // type:function size:0x8 +getVec3F_Z__17daPlayerActBase_cCFv = .text:0x8005CA60; // type:function size:0xC +isOffeset0x435eEqual0x20__17daPlayerActBase_cFv = .text:0x8005CA70; // type:function size:0x8 +setWindMillPos__17daPlayerActBase_cFv = .text:0x8005CA80; // type:function size:0x4 +getBellowsPosOrOtherVec3F__17daPlayerActBase_cCFv = .text:0x8005CA90; // type:function size:0x8 +getPointedAngle__17daPlayerActBase_cCFv = .text:0x8005CAA0; // type:function size:0x8 +isGustBellowsBeingBlown__17daPlayerActBase_cFv = .text:0x8005CAB0; // type:function size:0x8 +isSwimming__17daPlayerActBase_cFv = .text:0x8005CAC0; // type:function size:0x8 +getFloatIfStruggling__17daPlayerActBase_cFv = .text:0x8005CAD0; // type:function size:0x8 +getCurrentAnimFrame__17daPlayerActBase_cCFv = .text:0x8005CAE0; // type:function size:0x8 +vt_0x164__17daPlayerActBase_cFv = .text:0x8005CAF0; // type:function size:0x8 +getYPos__17daPlayerActBase_cFv = .text:0x8005CB00; // type:function size:0x8 +vt_0x15C__17daPlayerActBase_cFv = .text:0x8005CB10; // type:function size:0x8 +vt_0x158__17daPlayerActBase_cFv = .text:0x8005CB20; // type:function size:0x8 +vt_0x154__17daPlayerActBase_cFv = .text:0x8005CB30; // type:function size:0x8 +hasLessThanQuarterHealth__17daPlayerActBase_cFb = .text:0x8005CB40; // type:function size:0x8 +vt_0x14C__17daPlayerActBase_cFv = .text:0x8005CB50; // type:function size:0x4 +applyDamageWithIFrames__17daPlayerActBase_cFv = .text:0x8005CB60; // type:function size:0x4 +setActorLinkToSomething__17daPlayerActBase_cFv = .text:0x8005CB70; // type:function size:0x8 +store2Floats0x4500__17daPlayerActBase_cFv = .text:0x8005CB80; // type:function size:0x4 +isSmelly__17daPlayerActBase_cFv = .text:0x8005CB90; // type:function size:0x8 +isCursed__17daPlayerActBase_cFv = .text:0x8005CBA0; // type:function size:0x8 +isShocked__17daPlayerActBase_cFv = .text:0x8005CBB0; // type:function size:0x8 +isBurning__17daPlayerActBase_cFv = .text:0x8005CBC0; // type:function size:0x8 +vt_0x12C__17daPlayerActBase_cFv = .text:0x8005CBD0; // type:function size:0x8 +vt_0x128__17daPlayerActBase_cFv = .text:0x8005CBE0; // type:function size:0x8 +vt_0x124__17daPlayerActBase_cFv = .text:0x8005CBF0; // type:function size:0x8 +isUsingShield__17daPlayerActBase_cFv = .text:0x8005CC00; // type:function size:0x8 +isUsingMitts__17daPlayerActBase_cFv = .text:0x8005CC10; // type:function size:0x8 +isUsingSword__17daPlayerActBase_cFv = .text:0x8005CC20; // type:function size:0x8 +isCrawling__17daPlayerActBase_cFv = .text:0x8005CC30; // type:function size:0x8 +vt_0x0FC__17daPlayerActBase_cFv = .text:0x8005CC40; // type:function size:0xC +vt_0x0F8__17daPlayerActBase_cFv = .text:0x8005CC50; // type:function size:0xC +isUsingBomb__17daPlayerActBase_cFv = .text:0x8005CC60; // type:function size:0x8 +vt_0x0DC__17daPlayerActBase_cFP9dAcBase_cR7mVec3_c = .text:0x8005CC70; // type:function size:0x8 +getItemFromClawshotsMaybe__17daPlayerActBase_cFv = .text:0x8005CC80; // type:function size:0x8 +someFloatWithWhip__17daPlayerActBase_cFv = .text:0x8005CC90; // type:function size:0x8 +tryGrabItemWithWhip__17daPlayerActBase_cFv = .text:0x8005CCA0; // type:function size:0x8 +isWhipOnObject__17daPlayerActBase_cFv = .text:0x8005CCB0; // type:function size:0x8 +somethingWithWHip__17daPlayerActBase_cFv = .text:0x8005CCC0; // type:function size:0x8 +anotherThingWithWhip__17daPlayerActBase_cFv = .text:0x8005CCD0; // type:function size:0x8 +isUsingWhip__17daPlayerActBase_cFv = .text:0x8005CCE0; // type:function size:0x8 +finishPlayingHarp__17daPlayerActBase_cFv = .text:0x8005CCF0; // type:function size:0x4 +isUsingHarp__17daPlayerActBase_cFv = .text:0x8005CD00; // type:function size:0x8 +isPullingOutBomb__17daPlayerActBase_cFv = .text:0x8005CD10; // type:function size:0x8 +isCarryingBomb__17daPlayerActBase_cFv = .text:0x8005CD20; // type:function size:0x8 +vt_0x0AC__17daPlayerActBase_cFv = .text:0x8005CD30; // type:function size:0x8 +canRollObject__17daPlayerActBase_cFv = .text:0x8005CD40; // type:function size:0x8 +canThrowObject__17daPlayerActBase_cFv = .text:0x8005CD50; // type:function size:0x8 +isThrowingOrRollingItem__17daPlayerActBase_cFv = .text:0x8005CD60; // type:function size:0x8 +isLiftingObject__17daPlayerActBase_cFv = .text:0x8005CD70; // type:function size:0x8 +relatedToUsingItem0x11__17daPlayerActBase_cFv = .text:0x8005CD80; // type:function size:0x4 +__dt__10daPlBase_cFv = .text:0x8005CD90; // type:function size:0x58 +vt_0x090__17daPlayerActBase_cFv = .text:0x8005CDF0; // type:function size:0x8 +set0x43DE__17daPlayerActBase_cFv = .text:0x8005CE00; // type:function size:0x4 +set0x439F__17daPlayerActBase_cFP9dAcBase_ci = .text:0x8005CE10; // type:function size:0x4 +vt_0x084__17daPlayerActBase_cFP9dAcBase_ci = .text:0x8005CE20; // type:function size:0x8 +IfCurrentActionToActor__17daPlayerActBase_cFP9dAcBase_ci = .text:0x8005CE30; // type:function size:0x8 +__sinit_\d_player_act_cpp = .text:0x8005CE40; // type:function size:0x4C +ExecCallback_DRAW_OPA__24daPlBaseScnObjCallback_cFQ44nw4r3g3d6ScnObj6TimingPQ34nw4r3g3d6ScnObjUlPv = .text:0x8005CE90; // type:function size:0x134 +ExecCallback_CALC_MAT__24daPlBaseScnObjCallback_cFQ44nw4r3g3d6ScnObj6TimingPQ34nw4r3g3d6ScnObjUlPv = .text:0x8005CFD0; // type:function size:0x10 +ExecCallbackA__21daPlBaseMdlCallback_cFPQ34nw4r3g3d12ChrAnmResultQ34nw4r3g3d6ResMdlPQ34nw4r3g3d16FuncObjCalcWorld = .text:0x8005CFE0; // type:function size:0x134 +create__13daPlBaseMdl_cFP19daPlayerModelBase_cQ34nw4r3g3d6ResMdlP12mAllocator_cUlUlPUl = .text:0x8005D120; // type:function size:0xD4 +setAnm__13daPlBaseMdl_cFRQ23m3d6banm_c = .text:0x8005D200; // type:function size:0x4 +remove__13daPlBaseMdl_cFv = .text:0x8005D210; // type:function size:0x38 +setBlendNodeRange__13daPlBaseMdl_cFUsUsf = .text:0x8005D250; // type:function size:0x60 +timingA__22daPlBaseMainCallback_cFUlPQ34nw4r3g3d12ChrAnmResultQ34nw4r3g3d6ResMdl = .text:0x8005D2B0; // type:function size:0x8 +timingB__22daPlBaseMainCallback_cFUlPQ34nw4r3g3d13WorldMtxManipQ34nw4r3g3d6ResMdl = .text:0x8005D2C0; // type:function size:0x8 +timingC__22daPlBaseMainCallback_cFPQ34nw4r4math5MTX34Q34nw4r3g3d6ResMdl = .text:0x8005D2D0; // type:function size:0x8 +play__16daPlBaseAnmChr_cFv = .text:0x8005D2E0; // type:function size:0x34 +isFinished__16daPlBaseAnmChr_cFv = .text:0x8005D320; // type:function size:0x80 +timingB__22daPlBaseHeadCallback_cFUlPQ34nw4r3g3d13WorldMtxManipQ34nw4r3g3d6ResMdl = .text:0x8005D3A0; // type:function size:0x8 +ExecCallbackC__23daPlBaseHandsCallback_cFPQ34nw4r4math5MTX34Q34nw4r3g3d6ResMdlPQ34nw4r3g3d16FuncObjCalcWorld = .text:0x8005D3B0; // type:function size:0x30 +isBodyAnmPart_0_2_4__19daPlayerModelBase_cFl = .text:0x8005D3E0; // type:function size:0x28 +freeFrmHeap__19daPlayerModelBase_cFP16mHeapAllocator_c = .text:0x8005D410; // type:function size:0x60 +allocFrmHeap__19daPlayerModelBase_cFP16mHeapAllocator_cUlPCc = .text:0x8005D470; // type:function size:0x58 +allocExternalDataBuffers__19daPlayerModelBase_cFv = .text:0x8005D4D0; // type:function size:0x9C +initModelHeaps__19daPlayerModelBase_cFv = .text:0x8005D570; // type:function size:0x78 +updateSwordShieldModelsIfNeeded__19daPlayerModelBase_cFv = .text:0x8005D5F0; // type:function size:0x58 +createAnmTexSrt__19daPlayerModelBase_cFPCcRQ23m3d6bmdl_c = .text:0x8005D650; // type:function size:0xDC +updateEarringsColor__19daPlayerModelBase_cFv = .text:0x8005D730; // type:function size:0x74 +loadBodyModels__19daPlayerModelBase_cFv = .text:0x8005D7B0; // type:function size:0x32C +loadBody__19daPlayerModelBase_cFv = .text:0x8005DAE0; // type:function size:0x360 +loadHandsModels__19daPlayerModelBase_cFv = .text:0x8005DE40; // type:function size:0x250 +setSwordAnm__19daPlayerModelBase_cFPCc = .text:0x8005E090; // type:function size:0x64 +initSwordModel__19daPlayerModelBase_cFv = .text:0x8005E100; // type:function size:0x1F0 +updateSwordModel__19daPlayerModelBase_cFv = .text:0x8005E2F0; // type:function size:0xA8 +getCurrentShieldPouchSlot__19daPlayerModelBase_cFv = .text:0x8005E3A0; // type:function size:0x50 +isInBambooCuttingMinigame__7dAcPy_cFv = .text:0x8005E3F0; // type:function size:0x8 scope:weak +getCurrentlyEquippedShieldId__19daPlayerModelBase_cFv = .text:0x8005E400; // type:function size:0x4C +getShieldType__19daPlayerModelBase_cFl = .text:0x8005E450; // type:function size:0x3C +initShieldModel__19daPlayerModelBase_cFv = .text:0x8005E490; // type:function size:0x2C0 +updateShieldModel__19daPlayerModelBase_cFv = .text:0x8005E750; // type:function size:0xC8 +createGenericSmdl__19daPlayerModelBase_cFQ34nw4r3g3d6ResMdlRQ23m3d6smdl_cP12mAllocator_cUl = .text:0x8005E820; // type:function size:0x68 +createGenericMdl__19daPlayerModelBase_cFQ34nw4r3g3d6ResMdlRQ23m3d5mdl_cP12mAllocator_cUl = .text:0x8005E890; // type:function size:0x68 +applyWorldRotationMaybe__19daPlayerModelBase_cFPQ34nw4r4math5MTX344mAng4mAng4mAngP7mVec3_cb = .text:0x8005E900; // type:function size:0x11C +applyWorldRotationMaybe__19daPlayerModelBase_cFPQ34nw4r3g3d13WorldMtxManip4mAng4mAng4mAngP7mVec3_cb = .text:0x8005EA20; // type:function size:0xA0 +adjustMainModelChrAnm__19daPlayerModelBase_cFQ219daPlayerModelBase_c21PlayerMainModelNode_ePQ34nw4r3g3d12ChrAnmResult = .text:0x8005EAC0; // type:function size:0x274 +transformModelCenter__19daPlayerModelBase_cFP6mMtx_c = .text:0x8005ED40; // type:function size:0x4 scope:weak +getArmZRot__19daPlayerModelBase_cFl = .text:0x8005ED50; // type:function size:0xC scope:weak +adjustMainModelWorldMtx__19daPlayerModelBase_cFQ219daPlayerModelBase_c21PlayerMainModelNode_ePQ34nw4r3g3d13WorldMtxManip = .text:0x8005ED60; // type:function size:0x7B0 +transformBackbone1__19daPlayerModelBase_cFPQ34nw4r3g3d13WorldMtxManip = .text:0x8005F510; // type:function size:0x4 scope:weak +vt_0x30C__19daPlayerModelBase_cFR7mVec3_c = .text:0x8005F520; // type:function size:0x24 scope:weak +isMPPose__19daPlayerModelBase_cFv = .text:0x8005F550; // type:function size:0x8 scope:weak +isOnTightRope__19daPlayerModelBase_cFv = .text:0x8005F560; // type:function size:0x8 scope:weak +isOnVines__19daPlayerModelBase_cFv = .text:0x8005F570; // type:function size:0x8 scope:weak +updateMainBlend1__19daPlayerModelBase_cFf = .text:0x8005F580; // type:function size:0x88 +updateMainBlend2__19daPlayerModelBase_cFfb = .text:0x8005F610; // type:function size:0xD4 +updateBlendWeights__19daPlayerModelBase_cFQ219daPlayerModelBase_c21PlayerMainModelNode_e = .text:0x8005F6F0; // type:function size:0x194 +fn_8005F890__19daPlayerModelBase_cFPQ34nw4r4math5MTX34 = .text:0x8005F890; // type:function size:0x2C0 +vt_0x2E8__19daPlayerModelBase_cFPQ34nw4r4math5MTX34PCUsb = .text:0x8005FB50; // type:function size:0x8 scope:weak +vt_0x304__19daPlayerModelBase_cCFv = .text:0x8005FB60; // type:function size:0xC scope:weak +isOnClawTargetMaybe__19daPlayerModelBase_cFlR4mAngR4mAng = .text:0x8005FB70; // type:function size:0x14 scope:weak +fn_8005FB90__19daPlayerModelBase_cFPQ34nw4r4math5MTX34 = .text:0x8005FB90; // type:function size:0x220 +mainModelTimingA__19daPlayerModelBase_cFUlPQ34nw4r3g3d12ChrAnmResult = .text:0x8005FDB0; // type:function size:0x4 +mainModelTimingB__19daPlayerModelBase_cFUlPQ34nw4r3g3d13WorldMtxManip = .text:0x8005FDC0; // type:function size:0x78 +mainModelTimingC__19daPlayerModelBase_cFPQ34nw4r4math5MTX34 = .text:0x8005FE40; // type:function size:0x4C +handsCallbackC__19daPlayerModelBase_cFPQ34nw4r4math5MTX34Q34nw4r3g3d6ResMdlPQ34nw4r3g3d16FuncObjCalcWorld = .text:0x8005FE90; // type:function size:0xA8 +headModelTimingB__19daPlayerModelBase_cFUlPQ34nw4r3g3d13WorldMtxManip = .text:0x8005FF40; // type:function size:0x118 +setTransformAndCalc__19daPlayerModelBase_cFRQ23m3d9scnLeaf_cPC6mMtx_c = .text:0x80060060; // type:function size:0x40 +setShieldTransform__19daPlayerModelBase_cFb = .text:0x800600A0; // type:function size:0xD4 +loadTwoAnmChrs__19daPlayerModelBase_cFlllb = .text:0x80060180; // type:function size:0xB0 +getItemResFile__19daPlayerModelBase_cFPCcR12mAllocator_c = .text:0x80060230; // type:function size:0xD4 +getExternalCompressedFile__19daPlayerModelBase_cFPCcPCcPvUl = .text:0x80060310; // type:function size:0x94 +getExternalAnmChr__19daPlayerModelBase_cFPCcPvUl = .text:0x800603B0; // type:function size:0x94 +getExternalAnmTexPat__19daPlayerModelBase_cFPCcPvUl = .text:0x80060450; // type:function size:0xD4 +getExternalAnmTexSrt__19daPlayerModelBase_cFPCcPvUl = .text:0x80060530; // type:function size:0x94 +canStart__19daPlayerModelBase_cCFbUsUsPUsPUs = .text:0x800605D0; // type:function size:0x30 +setFaceTexPat__19daPlayerModelBase_cFlb = .text:0x80060600; // type:function size:0xEC +checkFaceTexPat__19daPlayerModelBase_cFv = .text:0x800606F0; // type:function size:0x38 +setFaceTexSrt__19daPlayerModelBase_cFlb = .text:0x80060730; // type:function size:0xAC +checkFaceTexSrt__19daPlayerModelBase_cFv = .text:0x800607E0; // type:function size:0x38 +setFaceAnmChr__19daPlayerModelBase_cFlb = .text:0x80060820; // type:function size:0xF0 +checkFaceAnmChr__19daPlayerModelBase_cFv = .text:0x80060910; // type:function size:0x38 +loadAnmChr__19daPlayerModelBase_cFllPvUl = .text:0x80060950; // type:function size:0x164 +removeAnmChr__19daPlayerModelBase_cFl = .text:0x80060AC0; // type:function size:0x6C +loadSound__19daPlayerModelBase_cFRQ34nw4r3g3d7ResFilePCcl = .text:0x80060B30; // type:function size:0xCC +loadSoundForAnim__19daPlayerModelBase_cFl = .text:0x80060C00; // type:function size:0xE0 +syncSoundWithAnim__19daPlayerModelBase_cFv = .text:0x80060CE0; // type:function size:0x64 +registMassObj__19daPlayerModelBase_cFP8cCcD_ObjUc = .text:0x80060D50; // type:function size:0x54 +updateModelColliders__19daPlayerModelBase_cFv = .text:0x80060DB0; // type:function size:0x29C +updateCachedPositions__19daPlayerModelBase_cFv = .text:0x80061050; // type:function size:0x1B0 +setPosCopy3__19daPlayerModelBase_cFv = .text:0x80061200; // type:function size:0x210 +fn_80061410__19daPlayerModelBase_cFv = .text:0x80061410; // type:function size:0x6C +alwaysRet0__19daPlayerModelBase_cFv = .text:0x80061480; // type:function size:0x8 scope:weak +somethingWithCarriedActorFlags__19daPlayerModelBase_cFv = .text:0x80061490; // type:function size:0x1C +vt_0x19C__19daPlayerModelBase_cFv = .text:0x800614B0; // type:function size:0xC scope:weak +vt_0x198__19daPlayerModelBase_cFv = .text:0x800614C0; // type:function size:0xC scope:weak +getSwordModelMatrix__19daPlayerModelBase_cFP6mMtx_c = .text:0x800614D0; // type:function size:0x8 scope:weak +getSheathModelMatrix__19daPlayerModelBase_cFP6mMtx_c = .text:0x800614E0; // type:function size:0x8 scope:weak +getBodyMtx__19daPlayerModelBase_cFP6mMtx_ci = .text:0x800614F0; // type:function size:0x14 scope:weak +getCurrentCarriedActor__19daPlayerModelBase_cFv = .text:0x80061510; // type:function size:0x8 scope:weak +vt_0x0F4__19daPlayerModelBase_cCFv = .text:0x80061520; // type:function size:0x8 scope:weak +vt_0x0F0__19daPlayerModelBase_cCFv = .text:0x80061530; // type:function size:0x8 scope:weak +vt_0x0EC__19daPlayerModelBase_cCFv = .text:0x80061540; // type:function size:0x8 scope:weak +vt_0x0E8__19daPlayerModelBase_cCFv = .text:0x80061550; // type:function size:0x8 scope:weak +getCenterTranslation__19daPlayerModelBase_cCFv = .text:0x80061560; // type:function size:0x8 scope:weak +canBlockAttack__19daPlayerModelBase_cFv = .text:0x80061570; // type:function size:0x8 scope:weak +__dt__19daPlayerModelBase_cFv = .text:0x80061580; // type:function size:0x254 scope:weak +__dt__16daPlBaseAnmChr_cFv = .text:0x800617E0; // type:function size:0x58 scope:weak +__dt__24daPlBaseScnObjCallback_cFv = .text:0x80061840; // type:function size:0x40 scope:weak +__dt__23daPlBaseHandsCallback_cFv = .text:0x80061880; // type:function size:0x40 scope:weak +__dt__Q34nw4r3g3d18ICalcWorldCallbackFv = .text:0x800618C0; // type:function size:0x40 scope:weak +__dt__22daPlBaseHeadCallback_cFv = .text:0x80061900; // type:function size:0x58 scope:weak +__dt__22daPlBaseMainCallback_cFv = .text:0x80061960; // type:function size:0x58 scope:weak +__dt__13daPlBaseMdl_cFv = .text:0x800619C0; // type:function size:0x6C scope:weak +__dt__21daPlBaseMdlCallback_cFv = .text:0x80061A30; // type:function size:0x58 scope:weak +ExecCallbackB__Q34nw4r3g3d18ICalcWorldCallbackFPQ34nw4r3g3d13WorldMtxManipQ34nw4r3g3d6ResMdlPQ34nw4r3g3d16FuncObjCalcWorld = .text:0x80061A90; // type:function size:0x4 scope:weak +ExecCallbackA__Q34nw4r3g3d18ICalcWorldCallbackFPQ34nw4r3g3d12ChrAnmResultQ34nw4r3g3d6ResMdlPQ34nw4r3g3d16FuncObjCalcWorld = .text:0x80061AA0; // type:function size:0x4 scope:weak +__sinit_\d_player_guide_colors_cpp = .text:0x80061AB0; // type:function size:0x5C scope:local computeChecksumInner__FPvUl = .text:0x80061B10; // type:function size:0x88 computeChecksum__FPvUl = .text:0x80061BA0; // type:function size:0x34 setPrefix__FP18ArcCallbackHandlerPCcUl = .text:0x80061BE0; // type:function size:0x10 @@ -2898,7 +2898,7 @@ fn_80066DA0 = .text:0x80066DA0; // type:function size:0x5C fn_80066E00 = .text:0x80066E00; // type:function size:0x44 fn_80066E50 = .text:0x80066E50; // type:function size:0x108 fn_80066F60 = .text:0x80066F60; // type:function size:0x50 -lzSafeDecompress = .text:0x80066FB0; // type:function size:0x64 +lzSafeDecompress__FPCvUlPv = .text:0x80066FB0; // type:function size:0x64 matrixCreateFromPosRotYScale__FR6mMtx_cRC7mVec3_c4mAngRC7mVec3_cP6mMtx_cf = .text:0x80067020; // type:function size:0x138 checkIfVec3fInMatrix__FRC6mMtx_cRC7mVec3_c = .text:0x80067160; // type:function size:0x88 fn_800671F0 = .text:0x800671F0; // type:function size:0x84 @@ -10072,7 +10072,7 @@ fn_80189E10 = .text:0x80189E10; // type:function size:0xF4 fn_80189F10 = .text:0x80189F10; // type:function size:0x8C getPouchSlotCount__Fb = .text:0x80189FA0; // type:function size:0x6C isPouchItem = .text:0x8018A010; // type:function size:0x88 -isItemShield = .text:0x8018A0A0; // type:function size:0x18 +isItemShield__Fl = .text:0x8018A0A0; // type:function size:0x18 isItemExtraAmmo__Fl = .text:0x8018A0C0; // type:function size:0x18 fn_8018A0E0 = .text:0x8018A0E0; // type:function size:0x20 fn_8018A100 = .text:0x8018A100; // type:function size:0x20 @@ -11198,7 +11198,7 @@ getCamera__9dScGame_cFl = .text:0x801BB6F0; // type:function size:0x10 fn_801BB700 = .text:0x801BB700; // type:function size:0x4C fn_801BB750 = .text:0x801BB750; // type:function size:0x4C fn_801BB7A0 = .text:0x801BB7A0; // type:function size:0xC4 -isHeroMode = .text:0x801BB870; // type:function size:0x44 +isHeroMode__9dScGame_cFv = .text:0x801BB870; // type:function size:0x44 startNewGameFile = .text:0x801BB8C0; // type:function size:0x100 fn_801BB9C0 = .text:0x801BB9C0; // type:function size:0x3C unsetFlagsAfterStart = .text:0x801BBA00; // type:function size:0x110 @@ -11891,7 +11891,7 @@ fn_801D8290 = .text:0x801D8290; // type:function size:0x46C fn_801D8700 = .text:0x801D8700; // type:function size:0x134 fn_801D8840 = .text:0x801D8840; // type:function size:0x2B8 fn_801D8B00 = .text:0x801D8B00; // type:function size:0x230 -fn_801D8D30 = .text:0x801D8D30; // type:function size:0x4 +__ct__7mQuat_cFv = .text:0x801D8D30; // type:function size:0x4 fn_801D8D40 = .text:0x801D8D40; // type:function size:0xB90 fn_801D98D0 = .text:0x801D98D0; // type:function size:0x37C fn_801D9C50 = .text:0x801D9C50; // type:function size:0x4 @@ -12655,7 +12655,7 @@ ActorLink__dealsWithShield = .text:0x80214110; // type:function size:0xA0 fn_802141B0 = .text:0x802141B0; // type:function size:0x108 fn_802142C0 = .text:0x802142C0; // type:function size:0x11C fn_802143E0 = .text:0x802143E0; // type:function size:0x148 -fn_80214530 = .text:0x80214530; // type:function size:0x78 +onShieldUpdate__7dAcPy_cFv = .text:0x80214530; // type:function size:0x78 handleShieldStatusEffects = .text:0x802145B0; // type:function size:0x200 fn_802147B0 = .text:0x802147B0; // type:function size:0x2D4 ActorLink__ShieldBlock = .text:0x80214A90; // type:function size:0x128 @@ -13078,9 +13078,9 @@ playHarpMaybe = .text:0x80236B20; // type:function size:0x1CC ActorLink__finishPlayingHarp = .text:0x80236CF0; // type:function size:0x20 ActorLink__doHarpPlayAnim = .text:0x80236D10; // type:function size:0xE0 fn_80236DF0 = .text:0x80236DF0; // type:function size:0x22C -ActorLink__ctorCont = .text:0x80237020; // type:function size:0xAC8 -ActorLink__ctorContCont = .text:0x80237AF0; // type:function size:0x34C -fn_80237E40 = .text:0x80237E40; // type:function size:0x48 +__ct__7dAcPy_cFv = .text:0x80237020; // type:function size:0xAC8 +__ct__19daPlayerModelBase_cFv = .text:0x80237AF0; // type:function size:0x34C +__ct__16daPlBaseAnmChr_cFv = .text:0x80237E40; // type:function size:0x48 ActorLink__create16EmptyActorReferences = .text:0x80237E90; // type:function size:0x48 fn_80237EE0 = .text:0x80237EE0; // type:function size:0x80 fn_80237F60 = .text:0x80237F60; // type:function size:0x8 @@ -13113,7 +13113,7 @@ fn_802385A0 = .text:0x802385A0; // type:function size:0x9C fn_80238640 = .text:0x80238640; // type:function size:0x38 fn_80238680 = .text:0x80238680; // type:function size:0x68 fn_802386F0 = .text:0x802386F0; // type:function size:0x8 -ActorLink__destroyModels = .text:0x80238700; // type:function size:0xBB0 +__dt__7dAcPy_cFv = .text:0x80238700; // type:function size:0xBB0 ActorLink__initModels = .text:0x802392B0; // type:function size:0x2EC ActorLink__init1 = .text:0x802395A0; // type:function size:0xD8 ActorLink__init2 = .text:0x80239680; // type:function size:0x20C @@ -17048,7 +17048,7 @@ TgSirenTag__stateWaitUpdate = .text:0x802D7030; // type:function size:0x4E4 fn_802D7520 = .text:0x802D7520; // type:function size:0x88 outOfTimeMaybe = .text:0x802D75B0; // type:function size:0x74 fn_802D7630 = .text:0x802D7630; // type:function size:0x8 -hasCollectedAllTears = .text:0x802D7640; // type:function size:0x3C +_hasCollectedAllTears__10dTgSiren_cFv = .text:0x802D7640; // type:function size:0x3C fn_802D7680 = .text:0x802D7680; // type:function size:0x90 fn_802D7710 = .text:0x802D7710; // type:function size:0x90 setSilentRealmToPeaceful = .text:0x802D77A0; // type:function size:0x118 @@ -17577,7 +17577,7 @@ getMatID__Q23m3d6bmdl_cCFPCc = .text:0x802E9300; // type:function size:0x3C getNodeID__Q23m3d6bmdl_cCFPCc = .text:0x802E9340; // type:function size:0x3C getNodeWorldMtx__Q23m3d6bmdl_cCFUlPQ34nw4r4math5MTX34 = .text:0x802E9380; // type:function size:0xA8 getNodeWorldMtxMultVecZero__Q23m3d6bmdl_cCFUlRQ34nw4r4math4VEC3 = .text:0x802E9430; // type:function size:0x5C -getNodeWorldMtxMultVec__Q23m3d6bmdl_cCFUlRQ34nw4r4math4VEC3RQ34nw4r4math4VEC3 = .text:0x802E9490; // type:function size:0x60 +getNodeWorldMtxMultVec__Q23m3d6bmdl_cCFUlRCQ34nw4r4math4VEC3RQ34nw4r4math4VEC3 = .text:0x802E9490; // type:function size:0x60 setAnm__Q23m3d6bmdl_cFRQ23m3d6banm_c = .text:0x802E94F0; // type:function size:0x15C play__Q23m3d6bmdl_cFv = .text:0x802E9650; // type:function size:0x20 getResMdl__Q23m3d6bmdl_cCFv = .text:0x802E9670; // type:function size:0x80 @@ -17848,7 +17848,7 @@ ZrotM__6mMtx_cFRC4mAng = .text:0x802F1990; // type:function size:0x4C ZXYrotS__6mMtx_cFRC4mAngRC4mAngRC4mAng = .text:0x802F19E0; // type:function size:0x60 ZXYrotM__6mMtx_cFRC4mAngRC4mAngRC4mAng = .text:0x802F1A40; // type:function size:0x60 mMtx__XYZrotS = .text:0x802F1AA0; // type:function size:0x60 -mMtx__ZYXrotM = .text:0x802F1B00; // type:function size:0x60 +ZYXrotM__6mMtx_cFRC4mAngRC4mAngRC4mAng = .text:0x802F1B00; // type:function size:0x60 toRot__6mMtx_cCFR7mAng3_c = .text:0x802F1B60; // type:function size:0xDC fn_802F1C40__6mMtx_cFll = .text:0x802F1C40; // type:function size:0x220 makeRotationFromVecs__6mMtx_cFRC7mVec3_cRC7mVec3_cf = .text:0x802F1E60; // type:function size:0x58 @@ -27847,312 +27847,328 @@ fontMgrIndex = .rodata:0x804DDFF0; // type:object size:0x14 scope:local @LOCAL@createFontHeap__5dHeapFUlPQ23EGG4Heap@name = .rodata:0x804DE148; // type:object size:0x22 scope:local @LOCAL@createHBMHeap__5dHeapFUlPQ23EGG4Heap@name = .rodata:0x804DE16C; // type:object size:0x1C scope:local lbl_804DE188 = .rodata:0x804DE188; // type:object size:0x60 -lbl_804DE1E8 = .rodata:0x804DE1E8; // type:object size:0xC -lbl_804DE1F4 = .rodata:0x804DE1F4; // type:object size:0xC data:string -lbl_804DE200 = .rodata:0x804DE200; // type:object size:0xC -lbl_804DE20C = .rodata:0x804DE20C; // type:object size:0x10 -lbl_804DE21C = .rodata:0x804DE21C; // type:object size:0x14 -lbl_804DE230 = .rodata:0x804DE230; // type:object size:0xC -lbl_804DE23C = .rodata:0x804DE23C; // type:object size:0xC -lbl_804DE248 = .rodata:0x804DE248; // type:object size:0xC -lbl_804DE254 = .rodata:0x804DE254; // type:object size:0xC -lbl_804DE260 = .rodata:0x804DE260; // type:object size:0xC -lbl_804DE26C = .rodata:0x804DE26C; // type:object size:0xC -lbl_804DE278 = .rodata:0x804DE278; // type:object size:0x10 -lbl_804DE288 = .rodata:0x804DE288; // type:object size:0x10 -lbl_804DE298 = .rodata:0x804DE298; // type:object size:0x10 data:string -lbl_804DE2A8 = .rodata:0x804DE2A8; // type:object size:0xC -lbl_804DE2B4 = .rodata:0x804DE2B4; // type:object size:0xC data:string -lbl_804DE2C0 = .rodata:0x804DE2C0; // type:object size:0xC -lbl_804DE2CC = .rodata:0x804DE2CC; // type:object size:0x10 -lbl_804DE2DC = .rodata:0x804DE2DC; // type:object size:0x14 -lbl_804DE2F0 = .rodata:0x804DE2F0; // type:object size:0xC -lbl_804DE2FC = .rodata:0x804DE2FC; // type:object size:0xC -lbl_804DE308 = .rodata:0x804DE308; // type:object size:0xC -lbl_804DE314 = .rodata:0x804DE314; // type:object size:0x14 -lbl_804DE328 = .rodata:0x804DE328; // type:object size:0x10 data:string -lbl_804DE338 = .rodata:0x804DE338; // type:object size:0xC data:string -lbl_804DE344 = .rodata:0x804DE344; // type:object size:0x10 -lbl_804DE354 = .rodata:0x804DE354; // type:object size:0x14 -lbl_804DE368 = .rodata:0x804DE368; // type:object size:0x14 -lbl_804DE37C = .rodata:0x804DE37C; // type:object size:0x14 -lbl_804DE390 = .rodata:0x804DE390; // type:object size:0x10 -lbl_804DE3A0 = .rodata:0x804DE3A0; // type:object size:0x10 -lbl_804DE3B0 = .rodata:0x804DE3B0; // type:object size:0xC -lbl_804DE3BC = .rodata:0x804DE3BC; // type:object size:0x18 -lbl_804DE3D4 = .rodata:0x804DE3D4; // type:object size:0x10 -lbl_804DE3E4 = .rodata:0x804DE3E4; // type:object size:0xC -lbl_804DE3F0 = .rodata:0x804DE3F0; // type:object size:0x10 -lbl_804DE400 = .rodata:0x804DE400; // type:object size:0x10 -lbl_804DE410 = .rodata:0x804DE410; // type:object size:0x10 -lbl_804DE420 = .rodata:0x804DE420; // type:object size:0x14 -lbl_804DE434 = .rodata:0x804DE434; // type:object size:0xC data:string -lbl_804DE440 = .rodata:0x804DE440; // type:object size:0x14 -lbl_804DE454 = .rodata:0x804DE454; // type:object size:0xC data:string -lbl_804DE460 = .rodata:0x804DE460; // type:object size:0x10 -lbl_804DE470 = .rodata:0x804DE470; // type:object size:0xC data:string -lbl_804DE47C = .rodata:0x804DE47C; // type:object size:0xC data:string -lbl_804DE488 = .rodata:0x804DE488; // type:object size:0xC data:string -lbl_804DE494 = .rodata:0x804DE494; // type:object size:0xC -lbl_804DE4A0 = .rodata:0x804DE4A0; // type:object size:0xC -lbl_804DE4AC = .rodata:0x804DE4AC; // type:object size:0xC -lbl_804DE4B8 = .rodata:0x804DE4B8; // type:object size:0xC data:string -lbl_804DE4C4 = .rodata:0x804DE4C4; // type:object size:0xC data:string -lbl_804DE4D0 = .rodata:0x804DE4D0; // type:object size:0x10 -lbl_804DE4E0 = .rodata:0x804DE4E0; // type:object size:0x10 -lbl_804DE4F0 = .rodata:0x804DE4F0; // type:object size:0x10 -lbl_804DE500 = .rodata:0x804DE500; // type:object size:0xC -lbl_804DE50C = .rodata:0x804DE50C; // type:object size:0xC -lbl_804DE518 = .rodata:0x804DE518; // type:object size:0x10 -lbl_804DE528 = .rodata:0x804DE528; // type:object size:0x10 -lbl_804DE538 = .rodata:0x804DE538; // type:object size:0x10 -lbl_804DE548 = .rodata:0x804DE548; // type:object size:0x10 -lbl_804DE558 = .rodata:0x804DE558; // type:object size:0x14 -lbl_804DE56C = .rodata:0x804DE56C; // type:object size:0x14 -lbl_804DE580 = .rodata:0x804DE580; // type:object size:0xC -lbl_804DE58C = .rodata:0x804DE58C; // type:object size:0xC -lbl_804DE598 = .rodata:0x804DE598; // type:object size:0xC -lbl_804DE5A4 = .rodata:0x804DE5A4; // type:object size:0xC -lbl_804DE5B0 = .rodata:0x804DE5B0; // type:object size:0xC data:string -lbl_804DE5BC = .rodata:0x804DE5BC; // type:object size:0x10 -lbl_804DE5CC = .rodata:0x804DE5CC; // type:object size:0xC data:string -lbl_804DE5D8 = .rodata:0x804DE5D8; // type:object size:0x10 -lbl_804DE5E8 = .rodata:0x804DE5E8; // type:object size:0x10 -lbl_804DE5F8 = .rodata:0x804DE5F8; // type:object size:0xC data:string -lbl_804DE604 = .rodata:0x804DE604; // type:object size:0xC data:string -lbl_804DE610 = .rodata:0x804DE610; // type:object size:0x10 -lbl_804DE620 = .rodata:0x804DE620; // type:object size:0x14 -lbl_804DE634 = .rodata:0x804DE634; // type:object size:0x14 -lbl_804DE648 = .rodata:0x804DE648; // type:object size:0x14 -lbl_804DE65C = .rodata:0x804DE65C; // type:object size:0x14 -lbl_804DE670 = .rodata:0x804DE670; // type:object size:0xC -lbl_804DE67C = .rodata:0x804DE67C; // type:object size:0xC -lbl_804DE688 = .rodata:0x804DE688; // type:object size:0x14 data:string -lbl_804DE69C = .rodata:0x804DE69C; // type:object size:0x14 -lbl_804DE6B0 = .rodata:0x804DE6B0; // type:object size:0x14 -lbl_804DE6C4 = .rodata:0x804DE6C4; // type:object size:0x14 data:string -lbl_804DE6D8 = .rodata:0x804DE6D8; // type:object size:0xC -lbl_804DE6E4 = .rodata:0x804DE6E4; // type:object size:0xC -lbl_804DE6F0 = .rodata:0x804DE6F0; // type:object size:0xC -lbl_804DE6FC = .rodata:0x804DE6FC; // type:object size:0xC -lbl_804DE708 = .rodata:0x804DE708; // type:object size:0xC -lbl_804DE714 = .rodata:0x804DE714; // type:object size:0xC -lbl_804DE720 = .rodata:0x804DE720; // type:object size:0x10 -lbl_804DE730 = .rodata:0x804DE730; // type:object size:0xC -lbl_804DE73C = .rodata:0x804DE73C; // type:object size:0xC -lbl_804DE748 = .rodata:0x804DE748; // type:object size:0xC -lbl_804DE754 = .rodata:0x804DE754; // type:object size:0xC -lbl_804DE760 = .rodata:0x804DE760; // type:object size:0xC -lbl_804DE76C = .rodata:0x804DE76C; // type:object size:0xC -lbl_804DE778 = .rodata:0x804DE778; // type:object size:0xC -lbl_804DE784 = .rodata:0x804DE784; // type:object size:0xC data:string -lbl_804DE790 = .rodata:0x804DE790; // type:object size:0xC data:string -lbl_804DE79C = .rodata:0x804DE79C; // type:object size:0x10 -lbl_804DE7AC = .rodata:0x804DE7AC; // type:object size:0x10 -lbl_804DE7BC = .rodata:0x804DE7BC; // type:object size:0xC -lbl_804DE7C8 = .rodata:0x804DE7C8; // type:object size:0xC -lbl_804DE7D4 = .rodata:0x804DE7D4; // type:object size:0xC data:string -lbl_804DE7E0 = .rodata:0x804DE7E0; // type:object size:0xC data:string -lbl_804DE7EC = .rodata:0x804DE7EC; // type:object size:0x10 -lbl_804DE7FC = .rodata:0x804DE7FC; // type:object size:0x10 -lbl_804DE80C = .rodata:0x804DE80C; // type:object size:0x14 -lbl_804DE820 = .rodata:0x804DE820; // type:object size:0xC -lbl_804DE82C = .rodata:0x804DE82C; // type:object size:0x14 -lbl_804DE840 = .rodata:0x804DE840; // type:object size:0x10 data:string -lbl_804DE850 = .rodata:0x804DE850; // type:object size:0x10 -lbl_804DE860 = .rodata:0x804DE860; // type:object size:0x10 -lbl_804DE870 = .rodata:0x804DE870; // type:object size:0x10 -lbl_804DE880 = .rodata:0x804DE880; // type:object size:0x10 -lbl_804DE890 = .rodata:0x804DE890; // type:object size:0x10 -lbl_804DE8A0 = .rodata:0x804DE8A0; // type:object size:0x10 -lbl_804DE8B0 = .rodata:0x804DE8B0; // type:object size:0x10 -lbl_804DE8C0 = .rodata:0x804DE8C0; // type:object size:0x10 -lbl_804DE8D0 = .rodata:0x804DE8D0; // type:object size:0xC data:string -lbl_804DE8DC = .rodata:0x804DE8DC; // type:object size:0xC data:string -lbl_804DE8E8 = .rodata:0x804DE8E8; // type:object size:0xC data:string -lbl_804DE8F4 = .rodata:0x804DE8F4; // type:object size:0xC data:string -lbl_804DE900 = .rodata:0x804DE900; // type:object size:0x10 -lbl_804DE910 = .rodata:0x804DE910; // type:object size:0x10 -lbl_804DE920 = .rodata:0x804DE920; // type:object size:0x14 -lbl_804DE934 = .rodata:0x804DE934; // type:object size:0x14 -lbl_804DE948 = .rodata:0x804DE948; // type:object size:0xC -lbl_804DE954 = .rodata:0x804DE954; // type:object size:0xC -lbl_804DE960 = .rodata:0x804DE960; // type:object size:0xC -lbl_804DE96C = .rodata:0x804DE96C; // type:object size:0xC -lbl_804DE978 = .rodata:0x804DE978; // type:object size:0xC -lbl_804DE984 = .rodata:0x804DE984; // type:object size:0xC -lbl_804DE990 = .rodata:0x804DE990; // type:object size:0xC -lbl_804DE99C = .rodata:0x804DE99C; // type:object size:0x14 -lbl_804DE9B0 = .rodata:0x804DE9B0; // type:object size:0x10 data:string -lbl_804DE9C0 = .rodata:0x804DE9C0; // type:object size:0xC data:string -lbl_804DE9CC = .rodata:0x804DE9CC; // type:object size:0x10 -lbl_804DE9DC = .rodata:0x804DE9DC; // type:object size:0xC -lbl_804DE9E8 = .rodata:0x804DE9E8; // type:object size:0x10 -lbl_804DE9F8 = .rodata:0x804DE9F8; // type:object size:0x10 -lbl_804DEA08 = .rodata:0x804DEA08; // type:object size:0x10 -lbl_804DEA18 = .rodata:0x804DEA18; // type:object size:0x10 -lbl_804DEA28 = .rodata:0x804DEA28; // type:object size:0x18 -lbl_804DEA40 = .rodata:0x804DEA40; // type:object size:0x18 -lbl_804DEA58 = .rodata:0x804DEA58; // type:object size:0x10 -lbl_804DEA68 = .rodata:0x804DEA68; // type:object size:0xC -lbl_804DEA74 = .rodata:0x804DEA74; // type:object size:0xC -lbl_804DEA80 = .rodata:0x804DEA80; // type:object size:0x10 -lbl_804DEA90 = .rodata:0x804DEA90; // type:object size:0xC -lbl_804DEA9C = .rodata:0x804DEA9C; // type:object size:0xC -lbl_804DEAA8 = .rodata:0x804DEAA8; // type:object size:0x10 -lbl_804DEAB8 = .rodata:0x804DEAB8; // type:object size:0xC -lbl_804DEAC4 = .rodata:0x804DEAC4; // type:object size:0xC -lbl_804DEAD0 = .rodata:0x804DEAD0; // type:object size:0xC -lbl_804DEADC = .rodata:0x804DEADC; // type:object size:0xC data:string -lbl_804DEAE8 = .rodata:0x804DEAE8; // type:object size:0x14 -lbl_804DEAFC = .rodata:0x804DEAFC; // type:object size:0x14 -lbl_804DEB10 = .rodata:0x804DEB10; // type:object size:0x14 -lbl_804DEB24 = .rodata:0x804DEB24; // type:object size:0x14 -lbl_804DEB38 = .rodata:0x804DEB38; // type:object size:0xC -lbl_804DEB44 = .rodata:0x804DEB44; // type:object size:0xC -lbl_804DEB50 = .rodata:0x804DEB50; // type:object size:0xC -lbl_804DEB5C = .rodata:0x804DEB5C; // type:object size:0xC -lbl_804DEB68 = .rodata:0x804DEB68; // type:object size:0xC -lbl_804DEB74 = .rodata:0x804DEB74; // type:object size:0xC -lbl_804DEB80 = .rodata:0x804DEB80; // type:object size:0xC -lbl_804DEB8C = .rodata:0x804DEB8C; // type:object size:0xC -lbl_804DEB98 = .rodata:0x804DEB98; // type:object size:0x10 -lbl_804DEBA8 = .rodata:0x804DEBA8; // type:object size:0x14 -lbl_804DEBBC = .rodata:0x804DEBBC; // type:object size:0x14 -lbl_804DEBD0 = .rodata:0x804DEBD0; // type:object size:0x18 -lbl_804DEBE8 = .rodata:0x804DEBE8; // type:object size:0xC -lbl_804DEBF4 = .rodata:0x804DEBF4; // type:object size:0xC -lbl_804DEC00 = .rodata:0x804DEC00; // type:object size:0xC -lbl_804DEC0C = .rodata:0x804DEC0C; // type:object size:0xC -lbl_804DEC18 = .rodata:0x804DEC18; // type:object size:0xC -lbl_804DEC24 = .rodata:0x804DEC24; // type:object size:0xC -lbl_804DEC30 = .rodata:0x804DEC30; // type:object size:0x10 -lbl_804DEC40 = .rodata:0x804DEC40; // type:object size:0xC -lbl_804DEC4C = .rodata:0x804DEC4C; // type:object size:0xC data:string -lbl_804DEC58 = .rodata:0x804DEC58; // type:object size:0x10 -lbl_804DEC68 = .rodata:0x804DEC68; // type:object size:0xC -lbl_804DEC74 = .rodata:0x804DEC74; // type:object size:0xC -lbl_804DEC80 = .rodata:0x804DEC80; // type:object size:0x10 -lbl_804DEC90 = .rodata:0x804DEC90; // type:object size:0x10 -lbl_804DECA0 = .rodata:0x804DECA0; // type:object size:0xC data:string -lbl_804DECAC = .rodata:0x804DECAC; // type:object size:0xC -lbl_804DECB8 = .rodata:0x804DECB8; // type:object size:0xC -lbl_804DECC4 = .rodata:0x804DECC4; // type:object size:0xC -lbl_804DECD0 = .rodata:0x804DECD0; // type:object size:0xC -lbl_804DECDC = .rodata:0x804DECDC; // type:object size:0xC -lbl_804DECE8 = .rodata:0x804DECE8; // type:object size:0xC -lbl_804DECF4 = .rodata:0x804DECF4; // type:object size:0xC -lbl_804DED00 = .rodata:0x804DED00; // type:object size:0x14 -lbl_804DED14 = .rodata:0x804DED14; // type:object size:0xC -lbl_804DED20 = .rodata:0x804DED20; // type:object size:0x10 -lbl_804DED30 = .rodata:0x804DED30; // type:object size:0xC -lbl_804DED3C = .rodata:0x804DED3C; // type:object size:0xC data:string -lbl_804DED48 = .rodata:0x804DED48; // type:object size:0x14 -lbl_804DED5C = .rodata:0x804DED5C; // type:object size:0x14 -lbl_804DED70 = .rodata:0x804DED70; // type:object size:0xC -lbl_804DED7C = .rodata:0x804DED7C; // type:object size:0xC data:string -lbl_804DED88 = .rodata:0x804DED88; // type:object size:0x10 -lbl_804DED98 = .rodata:0x804DED98; // type:object size:0xC -lbl_804DEDA4 = .rodata:0x804DEDA4; // type:object size:0x10 -lbl_804DEDB4 = .rodata:0x804DEDB4; // type:object size:0x14 -lbl_804DEDC8 = .rodata:0x804DEDC8; // type:object size:0x10 data:string -lbl_804DEDD8 = .rodata:0x804DEDD8; // type:object size:0x18 -lbl_804DEDF0 = .rodata:0x804DEDF0; // type:object size:0x10 data:string -lbl_804DEE00 = .rodata:0x804DEE00; // type:object size:0x10 data:string -lbl_804DEE10 = .rodata:0x804DEE10; // type:object size:0x10 -lbl_804DEE20 = .rodata:0x804DEE20; // type:object size:0x10 -lbl_804DEE30 = .rodata:0x804DEE30; // type:object size:0x10 data:string -lbl_804DEE40 = .rodata:0x804DEE40; // type:object size:0x10 data:string -lbl_804DEE50 = .rodata:0x804DEE50; // type:object size:0xC -lbl_804DEE5C = .rodata:0x804DEE5C; // type:object size:0x14 -lbl_804DEE70 = .rodata:0x804DEE70; // type:object size:0xC data:string -lbl_804DEE7C = .rodata:0x804DEE7C; // type:object size:0xC -lbl_804DEE88 = .rodata:0x804DEE88; // type:object size:0x10 -lbl_804DEE98 = .rodata:0x804DEE98; // type:object size:0xC -lbl_804DEEA4 = .rodata:0x804DEEA4; // type:object size:0xC -lbl_804DEEB0 = .rodata:0x804DEEB0; // type:object size:0xC -lbl_804DEEBC = .rodata:0x804DEEBC; // type:object size:0x10 -lbl_804DEECC = .rodata:0x804DEECC; // type:object size:0xC -lbl_804DEED8 = .rodata:0x804DEED8; // type:object size:0xC -lbl_804DEEE4 = .rodata:0x804DEEE4; // type:object size:0xC -lbl_804DEEF0 = .rodata:0x804DEEF0; // type:object size:0xC -lbl_804DEEFC = .rodata:0x804DEEFC; // type:object size:0xC -lbl_804DEF08 = .rodata:0x804DEF08; // type:object size:0xC -lbl_804DEF14 = .rodata:0x804DEF14; // type:object size:0x10 -lbl_804DEF24 = .rodata:0x804DEF24; // type:object size:0xC -lbl_804DEF30 = .rodata:0x804DEF30; // type:object size:0x10 -lbl_804DEF40 = .rodata:0x804DEF40; // type:object size:0x10 -lbl_804DEF50 = .rodata:0x804DEF50; // type:object size:0x14 -lbl_804DEF64 = .rodata:0x804DEF64; // type:object size:0xC data:string -lbl_804DEF70 = .rodata:0x804DEF70; // type:object size:0x10 -lbl_804DEF80 = .rodata:0x804DEF80; // type:object size:0xC data:string -lbl_804DEF8C = .rodata:0x804DEF8C; // type:object size:0x10 -lbl_804DEF9C = .rodata:0x804DEF9C; // type:object size:0x10 -lbl_804DEFAC = .rodata:0x804DEFAC; // type:object size:0xC -lbl_804DEFB8 = .rodata:0x804DEFB8; // type:object size:0xC -lbl_804DEFC4 = .rodata:0x804DEFC4; // type:object size:0x10 -lbl_804DEFD4 = .rodata:0x804DEFD4; // type:object size:0xC -lbl_804DEFE0 = .rodata:0x804DEFE0; // type:object size:0xC data:string -lbl_804DEFEC = .rodata:0x804DEFEC; // type:object size:0xC data:string -lbl_804DEFF8 = .rodata:0x804DEFF8; // type:object size:0xC data:string -lbl_804DF004 = .rodata:0x804DF004; // type:object size:0xC data:string -lbl_804DF010 = .rodata:0x804DF010; // type:object size:0xC -lbl_804DF01C = .rodata:0x804DF01C; // type:object size:0x10 -lbl_804DF02C = .rodata:0x804DF02C; // type:object size:0x10 -lbl_804DF03C = .rodata:0x804DF03C; // type:object size:0xC -lbl_804DF048 = .rodata:0x804DF048; // type:object size:0x10 data:string -lbl_804DF058 = .rodata:0x804DF058; // type:object size:0x10 -lbl_804DF068 = .rodata:0x804DF068; // type:object size:0x10 -lbl_804DF078 = .rodata:0x804DF078; // type:object size:0x10 data:string -lbl_804DF088 = .rodata:0x804DF088; // type:object size:0x10 -lbl_804DF098 = .rodata:0x804DF098; // type:object size:0x10 -lbl_804DF0A8 = .rodata:0x804DF0A8; // type:object size:0x10 -lbl_804DF0B8 = .rodata:0x804DF0B8; // type:object size:0x10 -lbl_804DF0C8 = .rodata:0x804DF0C8; // type:object size:0xC -lbl_804DF0D4 = .rodata:0x804DF0D4; // type:object size:0xC -lbl_804DF0E0 = .rodata:0x804DF0E0; // type:object size:0xC -lbl_804DF0EC = .rodata:0x804DF0EC; // type:object size:0xC -lbl_804DF0F8 = .rodata:0x804DF0F8; // type:object size:0x10 -lbl_804DF108 = .rodata:0x804DF108; // type:object size:0x10 data:string -lbl_804DF118 = .rodata:0x804DF118; // type:object size:0xC -lbl_804DF124 = .rodata:0x804DF124; // type:object size:0xC -lbl_804DF130 = .rodata:0x804DF130; // type:object size:0xC -lbl_804DF13C = .rodata:0x804DF13C; // type:object size:0x10 -lbl_804DF14C = .rodata:0x804DF14C; // type:object size:0x14 -lbl_804DF160 = .rodata:0x804DF160; // type:object size:0x14 -lbl_804DF174 = .rodata:0x804DF174; // type:object size:0xC -lbl_804DF180 = .rodata:0x804DF180; // type:object size:0x10 -lbl_804DF190 = .rodata:0x804DF190; // type:object size:0x10 -lbl_804DF1A0 = .rodata:0x804DF1A0; // type:object size:0x10 -lbl_804DF1B0 = .rodata:0x804DF1B0; // type:object size:0xC -lbl_804DF1BC = .rodata:0x804DF1BC; // type:object size:0xC -lbl_804DF1C8 = .rodata:0x804DF1C8; // type:object size:0xC -lbl_804DF1D4 = .rodata:0x804DF1D4; // type:object size:0xC -lbl_804DF1E0 = .rodata:0x804DF1E0; // type:object size:0xC -lbl_804DF1EC = .rodata:0x804DF1EC; // type:object size:0xC data:string -lbl_804DF1F8 = .rodata:0x804DF1F8; // type:object size:0xC -lbl_804DF204 = .rodata:0x804DF204; // type:object size:0xC data:string -lbl_804DF210 = .rodata:0x804DF210; // type:object size:0x10 -lbl_804DF220 = .rodata:0x804DF220; // type:object size:0x18 -lbl_804DF238 = .rodata:0x804DF238; // type:object size:0x10 data:string -lbl_804DF248 = .rodata:0x804DF248; // type:object size:0x14 -lbl_804DF25C = .rodata:0x804DF25C; // type:object size:0x18 -lbl_804DF274 = .rodata:0x804DF274; // type:object size:0xC -lbl_804DF280 = .rodata:0x804DF280; // type:object size:0xC -lbl_804DF28C = .rodata:0x804DF28C; // type:object size:0xC -lbl_804DF298 = .rodata:0x804DF298; // type:object size:0xC data:string -lbl_804DF2A4 = .rodata:0x804DF2A4; // type:object size:0xC -lbl_804DF2B0 = .rodata:0x804DF2B0; // type:object size:0xC -lbl_804DF2BC = .rodata:0x804DF2BC; // type:object size:0xC -lbl_804DF2C8 = .rodata:0x804DF2C8; // type:object size:0xC -lbl_804DF2D4 = .rodata:0x804DF2D4; // type:object size:0xC -lbl_804DF2E0 = .rodata:0x804DF2E0; // type:object size:0x10 -lbl_804DF2F0 = .rodata:0x804DF2F0; // type:object size:0xC -LINK_ANIMATIONS = .rodata:0x804DF2FC; // type:object size:0x14C4 -SHIELD_DURABILITIES = .rodata:0x804E07C0; // type:object size:0xC -SHIELD_REGEN_TIME = .rodata:0x804E07CC; // type:object size:0x7C -lbl_804E0848 = .rodata:0x804E0848; // type:object size:0x24 align:4 data:float -lbl_804E086C = .rodata:0x804E086C; // type:object size:0xAC align:4 data:float +@26290 = .rodata:0x804DE1E8; // type:object size:0xA scope:local data:string +...rodata.0 = .rodata:0x804DE1E8; // type:label scope:local +@26295 = .rodata:0x804DE1F4; // type:object size:0xC scope:local data:string +@26296 = .rodata:0x804DE200; // type:object size:0x9 scope:local data:string +@26297 = .rodata:0x804DE20C; // type:object size:0xE scope:local data:string +@26299 = .rodata:0x804DE21C; // type:object size:0x11 scope:local data:string +@26300 = .rodata:0x804DE230; // type:object size:0xB scope:local data:string +@26303 = .rodata:0x804DE23C; // type:object size:0xA scope:local data:string +@26305 = .rodata:0x804DE248; // type:object size:0xA scope:local data:string +@26306 = .rodata:0x804DE254; // type:object size:0x9 scope:local data:string +@26308 = .rodata:0x804DE260; // type:object size:0xB scope:local data:string +@26309 = .rodata:0x804DE26C; // type:object size:0x9 scope:local data:string +@26310 = .rodata:0x804DE278; // type:object size:0xD scope:local data:string +@26311 = .rodata:0x804DE288; // type:object size:0xF scope:local data:string +@26312 = .rodata:0x804DE298; // type:object size:0x10 scope:local data:string +@26313 = .rodata:0x804DE2A8; // type:object size:0x9 scope:local data:string +@26314 = .rodata:0x804DE2B4; // type:object size:0xC scope:local data:string +@26315 = .rodata:0x804DE2C0; // type:object size:0xB scope:local data:string +@26316 = .rodata:0x804DE2CC; // type:object size:0xF scope:local data:string +@26317 = .rodata:0x804DE2DC; // type:object size:0x12 scope:local data:string +@26319 = .rodata:0x804DE2F0; // type:object size:0x9 scope:local data:string +@26321 = .rodata:0x804DE2FC; // type:object size:0xB scope:local data:string +@26322 = .rodata:0x804DE308; // type:object size:0xB scope:local data:string +@26323 = .rodata:0x804DE314; // type:object size:0xE scope:local data:string +@26324 = .rodata:0x804DE328; // type:object size:0x10 scope:local data:string +@26325 = .rodata:0x804DE338; // type:object size:0xC scope:local data:string +@26326 = .rodata:0x804DE344; // type:object size:0xF scope:local data:string +@26327 = .rodata:0x804DE354; // type:object size:0x12 scope:local data:string +@26328 = .rodata:0x804DE368; // type:object size:0x12 scope:local data:string +@26329 = .rodata:0x804DE37C; // type:object size:0x12 scope:local data:string +@26330 = .rodata:0x804DE390; // type:object size:0xD scope:local data:string +@26331 = .rodata:0x804DE3A0; // type:object size:0xF scope:local data:string +@26332 = .rodata:0x804DE3B0; // type:object size:0xB scope:local data:string +@26333 = .rodata:0x804DE3BC; // type:object size:0x15 scope:local data:string +@26334 = .rodata:0x804DE3D4; // type:object size:0xE scope:local data:string +@26335 = .rodata:0x804DE3E4; // type:object size:0xB scope:local data:string +@26336 = .rodata:0x804DE3F0; // type:object size:0xD scope:local data:string +@26337 = .rodata:0x804DE400; // type:object size:0xD scope:local data:string +@26338 = .rodata:0x804DE410; // type:object size:0xD scope:local data:string +@26339 = .rodata:0x804DE420; // type:object size:0x13 scope:local data:string +@26340 = .rodata:0x804DE434; // type:object size:0xC scope:local data:string +@26342 = .rodata:0x804DE440; // type:object size:0x12 scope:local data:string +@26343 = .rodata:0x804DE454; // type:object size:0xC scope:local data:string +@26344 = .rodata:0x804DE460; // type:object size:0xD scope:local data:string +@26345 = .rodata:0x804DE470; // type:object size:0xC scope:local data:string +@26363 = .rodata:0x804DE47C; // type:object size:0xC scope:local data:string +@26364 = .rodata:0x804DE488; // type:object size:0xC scope:local data:string +@26386 = .rodata:0x804DE494; // type:object size:0x9 scope:local data:string +@26390 = .rodata:0x804DE4A0; // type:object size:0x9 scope:local data:string +@26400 = .rodata:0x804DE4AC; // type:object size:0xA scope:local data:string +@26401 = .rodata:0x804DE4B8; // type:object size:0xC scope:local data:string +@26402 = .rodata:0x804DE4C4; // type:object size:0xC scope:local data:string +@26403 = .rodata:0x804DE4D0; // type:object size:0xE scope:local data:string +@26404 = .rodata:0x804DE4E0; // type:object size:0xE scope:local data:string +@26405 = .rodata:0x804DE4F0; // type:object size:0xD scope:local data:string +@26406 = .rodata:0x804DE500; // type:object size:0xA scope:local data:string +@26407 = .rodata:0x804DE50C; // type:object size:0xA scope:local data:string +@26408 = .rodata:0x804DE518; // type:object size:0xD scope:local data:string +@26409 = .rodata:0x804DE528; // type:object size:0xD scope:local data:string +@26410 = .rodata:0x804DE538; // type:object size:0xF scope:local data:string +@26411 = .rodata:0x804DE548; // type:object size:0xF scope:local data:string +@26412 = .rodata:0x804DE558; // type:object size:0x13 scope:local data:string +@26413 = .rodata:0x804DE56C; // type:object size:0x13 scope:local data:string +@26415 = .rodata:0x804DE580; // type:object size:0x9 scope:local data:string +@26416 = .rodata:0x804DE58C; // type:object size:0x9 scope:local data:string +@26418 = .rodata:0x804DE598; // type:object size:0x9 scope:local data:string +@26419 = .rodata:0x804DE5A4; // type:object size:0x9 scope:local data:string +@26422 = .rodata:0x804DE5B0; // type:object size:0xC scope:local data:string +@26423 = .rodata:0x804DE5BC; // type:object size:0xE scope:local data:string +@26424 = .rodata:0x804DE5CC; // type:object size:0xC scope:local data:string +@26425 = .rodata:0x804DE5D8; // type:object size:0xE scope:local data:string +@26436 = .rodata:0x804DE5E8; // type:object size:0xD scope:local data:string +@26437 = .rodata:0x804DE5F8; // type:object size:0xC scope:local data:string +@26438 = .rodata:0x804DE604; // type:object size:0xC scope:local data:string +@26439 = .rodata:0x804DE610; // type:object size:0xD scope:local data:string +@26448 = .rodata:0x804DE620; // type:object size:0x12 scope:local data:string +@26449 = .rodata:0x804DE634; // type:object size:0x11 scope:local data:string +@26450 = .rodata:0x804DE648; // type:object size:0x11 scope:local data:string +@26451 = .rodata:0x804DE65C; // type:object size:0x12 scope:local data:string +@26453 = .rodata:0x804DE670; // type:object size:0x9 scope:local data:string +@26454 = .rodata:0x804DE67C; // type:object size:0xB scope:local data:string +@26458 = .rodata:0x804DE688; // type:object size:0x14 scope:local data:string +@26459 = .rodata:0x804DE69C; // type:object size:0x13 scope:local data:string +@26460 = .rodata:0x804DE6B0; // type:object size:0x13 scope:local data:string +@26461 = .rodata:0x804DE6C4; // type:object size:0x14 scope:local data:string +@26462 = .rodata:0x804DE6D8; // type:object size:0x9 scope:local data:string +@26463 = .rodata:0x804DE6E4; // type:object size:0x9 scope:local data:string +@26468 = .rodata:0x804DE6F0; // type:object size:0x9 scope:local data:string +@26469 = .rodata:0x804DE6FC; // type:object size:0xA scope:local data:string +@26470 = .rodata:0x804DE708; // type:object size:0x9 scope:local data:string +@26471 = .rodata:0x804DE714; // type:object size:0x9 scope:local data:string +@26472 = .rodata:0x804DE720; // type:object size:0xF scope:local data:string +@26478 = .rodata:0x804DE730; // type:object size:0x9 scope:local data:string +@26479 = .rodata:0x804DE73C; // type:object size:0x9 scope:local data:string +@26480 = .rodata:0x804DE748; // type:object size:0x9 scope:local data:string +@26483 = .rodata:0x804DE754; // type:object size:0x9 scope:local data:string +@26484 = .rodata:0x804DE760; // type:object size:0x9 scope:local data:string +@26488 = .rodata:0x804DE76C; // type:object size:0xA scope:local data:string +@26489 = .rodata:0x804DE778; // type:object size:0xA scope:local data:string +@26492 = .rodata:0x804DE784; // type:object size:0xC scope:local data:string +@26493 = .rodata:0x804DE790; // type:object size:0xC scope:local data:string +@26494 = .rodata:0x804DE79C; // type:object size:0xD scope:local data:string +@26495 = .rodata:0x804DE7AC; // type:object size:0xD scope:local data:string +@26496 = .rodata:0x804DE7BC; // type:object size:0xA scope:local data:string +@26497 = .rodata:0x804DE7C8; // type:object size:0xA scope:local data:string +@26500 = .rodata:0x804DE7D4; // type:object size:0xC scope:local data:string +@26501 = .rodata:0x804DE7E0; // type:object size:0xC scope:local data:string +@26502 = .rodata:0x804DE7EC; // type:object size:0xD scope:local data:string +@26503 = .rodata:0x804DE7FC; // type:object size:0xD scope:local data:string +@26507 = .rodata:0x804DE80C; // type:object size:0x13 scope:local data:string +@26514 = .rodata:0x804DE820; // type:object size:0x9 scope:local data:string +@26515 = .rodata:0x804DE82C; // type:object size:0xD scope:local data:string +@26516 = .rodata:0x804DE840; // type:object size:0x10 scope:local data:string +@26519 = .rodata:0x804DE850; // type:object size:0xD scope:local data:string +@26520 = .rodata:0x804DE860; // type:object size:0xD scope:local data:string +@26521 = .rodata:0x804DE870; // type:object size:0xD scope:local data:string +@26522 = .rodata:0x804DE880; // type:object size:0xD scope:local data:string +@26523 = .rodata:0x804DE890; // type:object size:0xD scope:local data:string +@26524 = .rodata:0x804DE8A0; // type:object size:0xD scope:local data:string +@26525 = .rodata:0x804DE8B0; // type:object size:0xD scope:local data:string +@26526 = .rodata:0x804DE8C0; // type:object size:0xD scope:local data:string +@26527 = .rodata:0x804DE8D0; // type:object size:0xC scope:local data:string +@26528 = .rodata:0x804DE8DC; // type:object size:0xC scope:local data:string +@26529 = .rodata:0x804DE8E8; // type:object size:0xC scope:local data:string +@26530 = .rodata:0x804DE8F4; // type:object size:0xC scope:local data:string +@26531 = .rodata:0x804DE900; // type:object size:0xD scope:local data:string +@26532 = .rodata:0x804DE910; // type:object size:0xD scope:local data:string +@26533 = .rodata:0x804DE920; // type:object size:0x11 scope:local data:string +@26534 = .rodata:0x804DE934; // type:object size:0x11 scope:local data:string +@26539 = .rodata:0x804DE948; // type:object size:0xA scope:local data:string +@26541 = .rodata:0x804DE954; // type:object size:0xB scope:local data:string +@26543 = .rodata:0x804DE960; // type:object size:0xA scope:local data:string +@26545 = .rodata:0x804DE96C; // type:object size:0xB scope:local data:string +@26547 = .rodata:0x804DE978; // type:object size:0xB scope:local data:string +@26549 = .rodata:0x804DE984; // type:object size:0xA scope:local data:string +@26551 = .rodata:0x804DE990; // type:object size:0xB scope:local data:string +@26552 = .rodata:0x804DE99C; // type:object size:0xD scope:local data:string +@26553 = .rodata:0x804DE9B0; // type:object size:0x10 scope:local data:string +@26554 = .rodata:0x804DE9C0; // type:object size:0xC scope:local data:string +@26555 = .rodata:0x804DE9CC; // type:object size:0xF scope:local data:string +@26557 = .rodata:0x804DE9DC; // type:object size:0xB scope:local data:string +@26558 = .rodata:0x804DE9E8; // type:object size:0xF scope:local data:string +@26559 = .rodata:0x804DE9F8; // type:object size:0xD scope:local data:string +@26560 = .rodata:0x804DEA08; // type:object size:0xD scope:local data:string +@26571 = .rodata:0x804DEA18; // type:object size:0xE scope:local data:string +@26572 = .rodata:0x804DEA28; // type:object size:0x15 scope:local data:string +@26573 = .rodata:0x804DEA40; // type:object size:0x15 scope:local data:string +@26574 = .rodata:0x804DEA58; // type:object size:0xD scope:local data:string +@26575 = .rodata:0x804DEA68; // type:object size:0xB scope:local data:string +@26576 = .rodata:0x804DEA74; // type:object size:0x9 scope:local data:string +@26577 = .rodata:0x804DEA80; // type:object size:0xE scope:local data:string +@26578 = .rodata:0x804DEA90; // type:object size:0xA scope:local data:string +@26579 = .rodata:0x804DEA9C; // type:object size:0x9 scope:local data:string +@26580 = .rodata:0x804DEAA8; // type:object size:0xD scope:local data:string +@26583 = .rodata:0x804DEAB8; // type:object size:0xA scope:local data:string +@26584 = .rodata:0x804DEAC4; // type:object size:0x9 scope:local data:string +@26586 = .rodata:0x804DEAD0; // type:object size:0xA scope:local data:string +@26587 = .rodata:0x804DEADC; // type:object size:0xC scope:local data:string +@26588 = .rodata:0x804DEAE8; // type:object size:0x12 scope:local data:string +@26589 = .rodata:0x804DEAFC; // type:object size:0x13 scope:local data:string +@26590 = .rodata:0x804DEB10; // type:object size:0x13 scope:local data:string +@26591 = .rodata:0x804DEB24; // type:object size:0x12 scope:local data:string +@26599 = .rodata:0x804DEB38; // type:object size:0xB scope:local data:string +@26600 = .rodata:0x804DEB44; // type:object size:0xA scope:local data:string +@26601 = .rodata:0x804DEB50; // type:object size:0xB scope:local data:string +@26602 = .rodata:0x804DEB5C; // type:object size:0xA scope:local data:string +@26603 = .rodata:0x804DEB68; // type:object size:0xB scope:local data:string +@26604 = .rodata:0x804DEB74; // type:object size:0xA scope:local data:string +@26605 = .rodata:0x804DEB80; // type:object size:0xB scope:local data:string +@26606 = .rodata:0x804DEB8C; // type:object size:0x9 scope:local data:string +@26609 = .rodata:0x804DEB98; // type:object size:0xF scope:local data:string +@26610 = .rodata:0x804DEBA8; // type:object size:0x13 scope:local data:string +@26611 = .rodata:0x804DEBBC; // type:object size:0x13 scope:local data:string +@26612 = .rodata:0x804DEBD0; // type:object size:0x16 scope:local data:string +@26613 = .rodata:0x804DEBE8; // type:object size:0x9 scope:local data:string +@26615 = .rodata:0x804DEBF4; // type:object size:0x9 scope:local data:string +@26617 = .rodata:0x804DEC00; // type:object size:0xB scope:local data:string +@26625 = .rodata:0x804DEC0C; // type:object size:0x9 scope:local data:string +@26627 = .rodata:0x804DEC18; // type:object size:0xB scope:local data:string +@26628 = .rodata:0x804DEC24; // type:object size:0xB scope:local data:string +@26634 = .rodata:0x804DEC30; // type:object size:0xE scope:local data:string +@26635 = .rodata:0x804DEC40; // type:object size:0x9 scope:local data:string +@26636 = .rodata:0x804DEC4C; // type:object size:0xC scope:local data:string +@26637 = .rodata:0x804DEC58; // type:object size:0xD scope:local data:string +@26638 = .rodata:0x804DEC68; // type:object size:0xA scope:local data:string +@26639 = .rodata:0x804DEC74; // type:object size:0xA scope:local data:string +@26642 = .rodata:0x804DEC80; // type:object size:0xF scope:local data:string +@26643 = .rodata:0x804DEC90; // type:object size:0xD scope:local data:string +@26646 = .rodata:0x804DECA0; // type:object size:0xC scope:local data:string +@26647 = .rodata:0x804DECAC; // type:object size:0x9 scope:local data:string +@26648 = .rodata:0x804DECB8; // type:object size:0xA scope:local data:string +@26649 = .rodata:0x804DECC4; // type:object size:0xB scope:local data:string +@26650 = .rodata:0x804DECD0; // type:object size:0xA scope:local data:string +@26651 = .rodata:0x804DECDC; // type:object size:0x9 scope:local data:string +@26652 = .rodata:0x804DECE8; // type:object size:0x9 scope:local data:string +@26653 = .rodata:0x804DECF4; // type:object size:0xB scope:local data:string +@26654 = .rodata:0x804DED00; // type:object size:0x11 scope:local data:string +@26655 = .rodata:0x804DED14; // type:object size:0xB scope:local data:string +@26656 = .rodata:0x804DED20; // type:object size:0xD scope:local data:string +@26657 = .rodata:0x804DED30; // type:object size:0xB scope:local data:string +@26658 = .rodata:0x804DED3C; // type:object size:0xC scope:local data:string +@26659 = .rodata:0x804DED48; // type:object size:0x11 scope:local data:string +@26660 = .rodata:0x804DED5C; // type:object size:0x13 scope:local data:string +@26661 = .rodata:0x804DED70; // type:object size:0xA scope:local data:string +@26662 = .rodata:0x804DED7C; // type:object size:0xC scope:local data:string +@26663 = .rodata:0x804DED88; // type:object size:0xE scope:local data:string +@26664 = .rodata:0x804DED98; // type:object size:0xA scope:local data:string +@26665 = .rodata:0x804DEDA4; // type:object size:0xD scope:local data:string +@26666 = .rodata:0x804DEDB4; // type:object size:0x11 scope:local data:string +@26667 = .rodata:0x804DEDC8; // type:object size:0x10 scope:local data:string +@26668 = .rodata:0x804DEDD8; // type:object size:0x14 scope:local data:string +@26669 = .rodata:0x804DEDF0; // type:object size:0x10 scope:local data:string +@26670 = .rodata:0x804DEE00; // type:object size:0x10 scope:local data:string +@26671 = .rodata:0x804DEE10; // type:object size:0xE scope:local data:string +@26672 = .rodata:0x804DEE20; // type:object size:0xF scope:local data:string +@26673 = .rodata:0x804DEE30; // type:object size:0x10 scope:local data:string +@26674 = .rodata:0x804DEE40; // type:object size:0x10 scope:local data:string +@26675 = .rodata:0x804DEE50; // type:object size:0xA scope:local data:string +@26676 = .rodata:0x804DEE5C; // type:object size:0x11 scope:local data:string +@26677 = .rodata:0x804DEE70; // type:object size:0xC scope:local data:string +@26678 = .rodata:0x804DEE7C; // type:object size:0xA scope:local data:string +@26679 = .rodata:0x804DEE88; // type:object size:0xD scope:local data:string +@26680 = .rodata:0x804DEE98; // type:object size:0xB scope:local data:string +@26682 = .rodata:0x804DEEA4; // type:object size:0x9 scope:local data:string +@26683 = .rodata:0x804DEEB0; // type:object size:0x9 scope:local data:string +@26684 = .rodata:0x804DEEBC; // type:object size:0xF scope:local data:string +@26686 = .rodata:0x804DEECC; // type:object size:0x9 scope:local data:string +@26687 = .rodata:0x804DEED8; // type:object size:0x9 scope:local data:string +@26688 = .rodata:0x804DEEE4; // type:object size:0x9 scope:local data:string +@26689 = .rodata:0x804DEEF0; // type:object size:0xA scope:local data:string +@26690 = .rodata:0x804DEEFC; // type:object size:0xA scope:local data:string +@26693 = .rodata:0x804DEF08; // type:object size:0x9 scope:local data:string +@26694 = .rodata:0x804DEF14; // type:object size:0xD scope:local data:string +@26696 = .rodata:0x804DEF24; // type:object size:0xA scope:local data:string +@26697 = .rodata:0x804DEF30; // type:object size:0xD scope:local data:string +@26698 = .rodata:0x804DEF40; // type:object size:0xE scope:local data:string +@26699 = .rodata:0x804DEF50; // type:object size:0x13 scope:local data:string +@26700 = .rodata:0x804DEF64; // type:object size:0xC scope:local data:string +@26701 = .rodata:0x804DEF70; // type:object size:0xF scope:local data:string +@26702 = .rodata:0x804DEF80; // type:object size:0xC scope:local data:string +@26703 = .rodata:0x804DEF8C; // type:object size:0xE scope:local data:string +@26704 = .rodata:0x804DEF9C; // type:object size:0xE scope:local data:string +@26705 = .rodata:0x804DEFAC; // type:object size:0x9 scope:local data:string +@26706 = .rodata:0x804DEFB8; // type:object size:0x9 scope:local data:string +@26707 = .rodata:0x804DEFC4; // type:object size:0xD scope:local data:string +@26708 = .rodata:0x804DEFD4; // type:object size:0xB scope:local data:string +@26709 = .rodata:0x804DEFE0; // type:object size:0xC scope:local data:string +@26710 = .rodata:0x804DEFEC; // type:object size:0xC scope:local data:string +@26711 = .rodata:0x804DEFF8; // type:object size:0xC scope:local data:string +@26712 = .rodata:0x804DF004; // type:object size:0xC scope:local data:string +@26713 = .rodata:0x804DF010; // type:object size:0xA scope:local data:string +@26716 = .rodata:0x804DF01C; // type:object size:0xE scope:local data:string +@26717 = .rodata:0x804DF02C; // type:object size:0xD scope:local data:string +@26718 = .rodata:0x804DF03C; // type:object size:0xB scope:local data:string +@26719 = .rodata:0x804DF048; // type:object size:0x10 scope:local data:string +@26720 = .rodata:0x804DF058; // type:object size:0xF scope:local data:string +@26721 = .rodata:0x804DF068; // type:object size:0xD scope:local data:string +@26722 = .rodata:0x804DF078; // type:object size:0x10 scope:local data:string +@26723 = .rodata:0x804DF088; // type:object size:0xF scope:local data:string +@26724 = .rodata:0x804DF098; // type:object size:0xD scope:local data:string +@26725 = .rodata:0x804DF0A8; // type:object size:0xF scope:local data:string +@26726 = .rodata:0x804DF0B8; // type:object size:0xF scope:local data:string +@26727 = .rodata:0x804DF0C8; // type:object size:0x9 scope:local data:string +@26730 = .rodata:0x804DF0D4; // type:object size:0xB scope:local data:string +@26732 = .rodata:0x804DF0E0; // type:object size:0x9 scope:local data:string +@26733 = .rodata:0x804DF0EC; // type:object size:0xB scope:local data:string +@26734 = .rodata:0x804DF0F8; // type:object size:0x9 scope:local data:string +@26737 = .rodata:0x804DF108; // type:object size:0x10 scope:local data:string +@26738 = .rodata:0x804DF118; // type:object size:0x9 scope:local data:string +@26739 = .rodata:0x804DF124; // type:object size:0x9 scope:local data:string +@26740 = .rodata:0x804DF130; // type:object size:0xB scope:local data:string +@26741 = .rodata:0x804DF13C; // type:object size:0xF scope:local data:string +@26742 = .rodata:0x804DF14C; // type:object size:0x12 scope:local data:string +@26743 = .rodata:0x804DF160; // type:object size:0x11 scope:local data:string +@26745 = .rodata:0x804DF174; // type:object size:0xA scope:local data:string +@26746 = .rodata:0x804DF180; // type:object size:0xE scope:local data:string +@26747 = .rodata:0x804DF190; // type:object size:0xF scope:local data:string +@26748 = .rodata:0x804DF1A0; // type:object size:0xF scope:local data:string +@26749 = .rodata:0x804DF1B0; // type:object size:0xB scope:local data:string +@26750 = .rodata:0x804DF1BC; // type:object size:0xB scope:local data:string +@26751 = .rodata:0x804DF1C8; // type:object size:0xB scope:local data:string +@26757 = .rodata:0x804DF1D4; // type:object size:0x9 scope:local data:string +@26759 = .rodata:0x804DF1E0; // type:object size:0xB scope:local data:string +@26762 = .rodata:0x804DF1EC; // type:object size:0xC scope:local data:string +@26765 = .rodata:0x804DF1F8; // type:object size:0xB scope:local data:string +@26766 = .rodata:0x804DF204; // type:object size:0xC scope:local data:string +@26767 = .rodata:0x804DF210; // type:object size:0xD scope:local data:string +@26768 = .rodata:0x804DF220; // type:object size:0x11 scope:local data:string +@26769 = .rodata:0x804DF238; // type:object size:0x10 scope:local data:string +@26770 = .rodata:0x804DF248; // type:object size:0x11 scope:local data:string +@26771 = .rodata:0x804DF25C; // type:object size:0x15 scope:local data:string +@26772 = .rodata:0x804DF274; // type:object size:0xB scope:local data:string +@26773 = .rodata:0x804DF280; // type:object size:0xB scope:local data:string +@26774 = .rodata:0x804DF28C; // type:object size:0xA scope:local data:string +@26775 = .rodata:0x804DF298; // type:object size:0xC scope:local data:string +@26776 = .rodata:0x804DF2A4; // type:object size:0xB scope:local data:string +@26777 = .rodata:0x804DF2B0; // type:object size:0x9 scope:local data:string +@26778 = .rodata:0x804DF2BC; // type:object size:0xB scope:local data:string +@26779 = .rodata:0x804DF2C8; // type:object size:0x9 scope:local data:string +@26780 = .rodata:0x804DF2D4; // type:object size:0xB scope:local data:string +@26781 = .rodata:0x804DF2E0; // type:object size:0xD scope:local data:string +@26783 = .rodata:0x804DF2F0; // type:object size:0xA scope:local data:string +sAnimations__19daPlayerModelBase_c = .rodata:0x804DF2FC; // type:object size:0x14C4 +sShieldDurabilities__19daPlayerModelBase_c = .rodata:0x804E07C0; // type:object size:0xA +sShieldRegenTimes__19daPlayerModelBase_c = .rodata:0x804E07CC; // type:object size:0xA +sSwordRelatedX = .rodata:0x804E07D8; // type:object size:0x1C scope:local +sSwordRelatedUnk = .rodata:0x804E07F4; // type:object size:0x1C scope:local +sSwordRelatedZ = .rodata:0x804E0810; // type:object size:0x1C scope:local +sSwordRelatedY = .rodata:0x804E082C; // type:object size:0x1C scope:local +@LOCAL@fn_8005F890__19daPlayerModelBase_cFPQ34nw4r4math5MTX34@sArmVecs@0 = .rodata:0x804E0848; // type:object size:0x24 scope:local align:4 data:float +@LOCAL@fn_8005FB90__19daPlayerModelBase_cFPQ34nw4r4math5MTX34@sLegVecs@0 = .rodata:0x804E086C; // type:object size:0x24 scope:local align:4 data:float +@LOCAL@updateCachedPositions__19daPlayerModelBase_cFv@sPosAboveLink = .rodata:0x804E0890; // type:object size:0xC scope:local +@LOCAL@updateCachedPositions__19daPlayerModelBase_cFv@sPos1@0 = .rodata:0x804E089C; // type:object size:0xC scope:local +@LOCAL@updateCachedPositions__19daPlayerModelBase_cFv@sHeadPos@1 = .rodata:0x804E08A8; // type:object size:0xC scope:local +@LOCAL@updateCachedPositions__19daPlayerModelBase_cFv@sUnusedVec1@2 = .rodata:0x804E08B4; // type:object size:0xC scope:local +@LOCAL@updateCachedPositions__19daPlayerModelBase_cFv@sUnusedVec2@3 = .rodata:0x804E08C0; // type:object size:0xC scope:local +@LOCAL@updateCachedPositions__19daPlayerModelBase_cFv@sUnusedVec3@4 = .rodata:0x804E08CC; // type:object size:0xC scope:local +@LOCAL@updateCachedPositions__19daPlayerModelBase_cFv@sUnusedVec4@5 = .rodata:0x804E08D8; // type:object size:0xC scope:local +@LOCAL@setPosCopy3__19daPlayerModelBase_cFv@posCopy3v0 = .rodata:0x804E08E4; // type:object size:0xC scope:local +@LOCAL@setPosCopy3__19daPlayerModelBase_cFv@posCopy3v1@0 = .rodata:0x804E08F0; // type:object size:0xC scope:local +@LOCAL@setPosCopy3__19daPlayerModelBase_cFv@posCopy3v2@1 = .rodata:0x804E08FC; // type:object size:0xC scope:local +@LOCAL@setPosCopy3__19daPlayerModelBase_cFv@posCopy3v3@2 = .rodata:0x804E0908; // type:object size:0xC scope:local lbl_804E0918 = .rodata:0x804E0918; // type:object size:0x14 lbl_804E092C = .rodata:0x804E092C; // type:object size:0x14 align:4 data:float lbl_804E0940 = .rodata:0x804E0940; // type:object size:0x14 align:4 data:float @@ -30783,42 +30799,58 @@ lbl_8050D644 = .data:0x8050D644; // type:object size:0xC data:string lbl_8050D650 = .data:0x8050D650; // type:object size:0xC data:string lbl_8050D65C = .data:0x8050D65C; // type:object size:0x14 SWORD_NAMES = .data:0x8050D670; // type:object size:0x20 -FACE_TXT_STUFF = .data:0x8050D690; // type:object size:0x108 data:4byte -lbl_8050D798 = .data:0x8050D798; // type:object size:0x30 -lbl_8050D7C8 = .data:0x8050D7C8; // type:object size:0xC -lbl_8050D7D4 = .data:0x8050D7D4; // type:object size:0xC -lbl_8050D7E0 = .data:0x8050D7E0; // type:object size:0x88 -lbl_8050D868 = .data:0x8050D868; // type:object size:0xC -lbl_8050D874 = .data:0x8050D874; // type:object size:0xC data:string -lbl_8050D880 = .data:0x8050D880; // type:object size:0xC -lbl_8050D88C = .data:0x8050D88C; // type:object size:0xC -lbl_8050D898 = .data:0x8050D898; // type:object size:0xC -lbl_8050D8A4 = .data:0x8050D8A4; // type:object size:0xC -lbl_8050D8B0 = .data:0x8050D8B0; // type:object size:0xC -lbl_8050D8BC = .data:0x8050D8BC; // type:object size:0x10 -ActorLink__SWORD_PODS(SHIETHS) = .data:0x8050D8CC; // type:object size:0x1C -lbl_8050D8E8 = .data:0x8050D8E8; // type:object size:0x10 -lbl_8050D8F8 = .data:0x8050D8F8; // type:object size:0x10 data:string -lbl_8050D908 = .data:0x8050D908; // type:object size:0x10 data:string -lbl_8050D918 = .data:0x8050D918; // type:object size:0x10 data:string -lbl_8050D928 = .data:0x8050D928; // type:object size:0x14 -SHIELD_MODEL_BASE = .data:0x8050D93C; // type:object size:0x14 -lbl_8050D950 = .data:0x8050D950; // type:object size:0x18 -lbl_8050D968 = .data:0x8050D968; // type:object size:0x18 -lbl_8050D980 = .data:0x8050D980; // type:object size:0x18 -BROKEN_SHIELD_ANIMATION = .data:0x8050D998; // type:object size:0x14 -jumptable_8050D9AC = .data:0x8050D9AC; // type:object size:0x28 scope:local -lbl_8050D9D4 = .data:0x8050D9D4; // type:object size:0x10 -lbl_8050D9E4 = .data:0x8050D9E4; // type:object size:0xC -lbl_8050D9F0 = .data:0x8050D9F0; // type:object size:0x10 -lbl_8050DA00 = .data:0x8050DA00; // type:object size:0x310 -lbl_8050DD10 = .data:0x8050DD10; // type:object size:0x18 -lbl_8050DD28 = .data:0x8050DD28; // type:object size:0x18 -ActorLink__animation_vtable = .data:0x8050DD40; // type:object size:0x18 -lbl_8050DD58 = .data:0x8050DD58; // type:object size:0x18 -ActorLink__mainBodyModelVtable = .data:0x8050DD70; // type:object size:0x30 -ActorLink__mainBodyModelCallbackVtable = .data:0x8050DDA0; // type:object size:0x18 -lbl_8050DDB8 = .data:0x8050DDB8; // type:object size:0x20 +sFaceResNames = .data:0x8050D690; // type:object size:0xE4 scope:local data:4byte +...data.0 = .data:0x8050D690; // type:label scope:local +@32899 = .data:0x8050D774; // type:object size:0xC scope:local data:string +@32900 = .data:0x8050D780; // type:object size:0xA scope:local data:string +@32901 = .data:0x8050D78C; // type:object size:0xB scope:local data:string +@32929 = .data:0x8050D798; // type:object size:0xA scope:local data:string +sBodyMdls = .data:0x8050D7A4; // type:object size:0xC scope:local +sHeadMdls = .data:0x8050D7B0; // type:object size:0xC scope:local +sFaceMdls = .data:0x8050D7BC; // type:object size:0xC scope:local +@27017 = .data:0x8050D7C8; // type:object size:0x9 scope:local data:string +@27018 = .data:0x8050D7D4; // type:object size:0x9 scope:local data:string +@27019 = .data:0x8050D7E0; // type:object size:0x9 scope:local data:string +sHandMdls = .data:0x8050D7EC; // type:object size:0xC scope:local +@32966 = .data:0x8050D7F8; // type:object size:0x10 scope:local data:string +@32967 = .data:0x8050D808; // type:object size:0xA scope:local data:string +@32968 = .data:0x8050D814; // type:object size:0xB scope:local data:string +@32969 = .data:0x8050D820; // type:object size:0xC scope:local data:string +@32970 = .data:0x8050D82C; // type:object size:0xD scope:local data:string +@32971 = .data:0x8050D83C; // type:object size:0xD scope:local data:string +@32972 = .data:0x8050D84C; // type:object size:0xE scope:local data:string +@32973 = .data:0x8050D85C; // type:object size:0x9 scope:local data:string +@33033 = .data:0x8050D868; // type:object size:0xA scope:local data:string +@33074 = .data:0x8050D874; // type:object size:0xC scope:local data:string +@27247 = .data:0x8050D880; // type:object size:0xA scope:local data:string +@27248 = .data:0x8050D88C; // type:object size:0xA scope:local data:string +@27249 = .data:0x8050D898; // type:object size:0xA scope:local data:string +@27250 = .data:0x8050D8A4; // type:object size:0xA scope:local data:string +@27251 = .data:0x8050D8B0; // type:object size:0xA scope:local data:string +@27252 = .data:0x8050D8BC; // type:object size:0xF scope:local data:string +@LOCAL@initSwordModel__19daPlayerModelBase_cFv@sSwordPods = .data:0x8050D8CC; // type:object size:0x1C scope:local +@33119 = .data:0x8050D8E8; // type:object size:0xB scope:local data:string +@27329 = .data:0x8050D8F8; // type:object size:0x10 scope:local data:string +@27330 = .data:0x8050D908; // type:object size:0x10 scope:local data:string +@27331 = .data:0x8050D918; // type:object size:0x10 scope:local data:string +@27332 = .data:0x8050D928; // type:object size:0x11 scope:local data:string +sShieldModelsBase = .data:0x8050D93C; // type:object size:0x14 scope:local +@27333 = .data:0x8050D950; // type:object size:0x16 scope:local data:string +@27334 = .data:0x8050D968; // type:object size:0x16 scope:local data:string +@27335 = .data:0x8050D980; // type:object size:0x16 scope:local data:string +sShieldModelsBroken = .data:0x8050D998; // type:object size:0x14 scope:local +@33728 = .data:0x8050D9AC; // type:object size:0x28 scope:local +@34063 = .data:0x8050D9D4; // type:object size:0xE scope:local data:string +@34064 = .data:0x8050D9E4; // type:object size:0xB scope:local data:string +@34235 = .data:0x8050D9F0; // type:object size:0x9 scope:local data:string +__vt__19daPlayerModelBase_c = .data:0x8050DA00; // type:object size:0x310 +__vt__22daPlBaseHeadCallback_c = .data:0x8050DD10; // type:object size:0x18 +__vt__23daPlBaseHandsCallback_c = .data:0x8050DD28; // type:object size:0x18 +__vt__16daPlBaseAnmChr_c = .data:0x8050DD40; // type:object size:0x18 +__vt__22daPlBaseMainCallback_c = .data:0x8050DD58; // type:object size:0x18 +__vt__13daPlBaseMdl_c = .data:0x8050DD70; // type:object size:0x2C +__vt__21daPlBaseMdlCallback_c = .data:0x8050DDA0; // type:object size:0x18 +__vt__24daPlBaseScnObjCallback_c = .data:0x8050DDB8; // type:object size:0x20 @4669 = .data:0x8050DDD8; // type:object size:0xE scope:local data:string @4670 = .data:0x8050DDE8; // type:object size:0xB scope:local data:string __vt__8dScene_c = .data:0x8050DDF8; // type:object size:0x4C @@ -39116,29 +39148,29 @@ lbl_80571C58 = .sdata:0x80571C58; // type:object size:0x8 data:byte lbl_80571C60 = .sdata:0x80571C60; // type:object size:0x8 data:4byte lbl_80571C68 = .sdata:0x80571C68; // type:object size:0x8 OBTAINED_ITEM_ID = .sdata:0x80571C70; // type:object size:0x4 data:4byte -EQUIPPED_SWORD = .sdata:0x80571C74; // type:object size:0x1 data:byte +sCurrentSword__17daPlayerActBase_c = .sdata:0x80571C74; // type:object size:0x1 data:byte lbl_80571C78 = .sdata:0x80571C78; // type:object size:0x8 data:4byte -lbl_80571C80 = .sdata:0x80571C80; // type:object size:0x4 data:4byte -lbl_80571C84 = .sdata:0x80571C84; // type:object size:0x4 data:4byte -lbl_80571C88 = .sdata:0x80571C88; // type:object size:0x4 -lbl_80571C8C = .sdata:0x80571C8C; // type:object size:0x4 -lbl_80571C90 = .sdata:0x80571C90; // type:object size:0x8 data:string -lbl_80571C98 = .sdata:0x80571C98; // type:object size:0x8 -lbl_80571CA0 = .sdata:0x80571CA0; // type:object size:0x8 data:string -lbl_80571CA8 = .sdata:0x80571CA8; // type:object size:0x8 data:string -lbl_80571CB0 = .sdata:0x80571CB0; // type:object size:0x8 data:string -lbl_80571CB8 = .sdata:0x80571CB8; // type:object size:0x8 data:string -lbl_80571CC0 = .sdata:0x80571CC0; // type:object size:0x8 data:string -lbl_80571CC8 = .sdata:0x80571CC8; // type:object size:0x4 data:4byte -lbl_80571CCC = .sdata:0x80571CCC; // type:object size:0x4 data:4byte -lbl_80571CD0 = .sdata:0x80571CD0; // type:object size:0x4 data:4byte -lbl_80571CD4 = .sdata:0x80571CD4; // type:object size:0x4 data:4byte -lbl_80571CD8 = .sdata:0x80571CD8; // type:object size:0x8 -lbl_80571CE0 = .sdata:0x80571CE0; // type:object size:0x8 -lbl_80571CE8 = .sdata:0x80571CE8; // type:object size:0x8 -lbl_80571CF0 = .sdata:0x80571CF0; // type:object size:0x8 -lbl_80571CF8 = .sdata:0x80571CF8; // type:object size:0x8 data:string -lbl_80571D00 = .sdata:0x80571D00; // type:object size:0x8 data:string +@21818 = .sdata:0x80571C80; // type:object size:0x4 scope:local data:4byte +@21819 = .sdata:0x80571C84; // type:object size:0x4 scope:local data:4byte +@32840 = .sdata:0x80571C88; // type:object size:0x1 scope:local +@27009 = .sdata:0x80571C8C; // type:object size:0x3 scope:local data:string +@27010 = .sdata:0x80571C90; // type:object size:0x8 scope:local data:string +@27011 = .sdata:0x80571C98; // type:object size:0x3 scope:local data:string +@27012 = .sdata:0x80571CA0; // type:object size:0x8 scope:local data:string +@27013 = .sdata:0x80571CA8; // type:object size:0x8 scope:local data:string +@27014 = .sdata:0x80571CB0; // type:object size:0x8 scope:local data:string +@27015 = .sdata:0x80571CB8; // type:object size:0x8 scope:local data:string +@27016 = .sdata:0x80571CC0; // type:object size:0x8 scope:local data:string +@27578 = .sdata:0x80571CC8; // type:object size:0x4 scope:local data:4byte +@27580 = .sdata:0x80571CCC; // type:object size:0x4 scope:local data:4byte +@27588 = .sdata:0x80571CD0; // type:object size:0x4 scope:local data:4byte +@27589 = .sdata:0x80571CD4; // type:object size:0x4 scope:local data:4byte +@34075 = .sdata:0x80571CD8; // type:object size:0x6 scope:local data:string +@34097 = .sdata:0x80571CE0; // type:object size:0x6 scope:local data:string +@34120 = .sdata:0x80571CE8; // type:object size:0x6 scope:local data:string +@34141 = .sdata:0x80571CF0; // type:object size:0x6 scope:local data:string +@STRING@ConstructDrawEnumerator__Q34nw4r3g3d6ResMdlCFv@0 = .sdata:0x80571CF8; // type:object size:0x8 scope:weak data:string +@STRING@ConstructDrawEnumerator__Q34nw4r3g3d6ResMdlCFv = .sdata:0x80571D00; // type:object size:0x8 scope:weak data:string RootActorID = .sdata:0x80571D08; // type:object size:0x2 scope:local data:2byte gameStateIsActive = .sdata:0x80571D0A; // type:object size:0x1 scope:local data:byte @9006 = .sdata:0x80571D10; // type:object size:0x7 scope:local data:string @@ -41288,12 +41320,12 @@ lbl_805751F6 = .sbss:0x805751F6; // type:object size:0x1 data:byte lbl_805751F8 = .sbss:0x805751F8; // type:object size:0x1 data:byte lbl_805751FC = .sbss:0x805751FC; // type:object size:0x1 data:byte lbl_80575200 = .sbss:0x80575200; // type:object size:0x8 data:byte -DefaultHandMats = .sbss:0x80575208; // type:object size:0x1 data:byte -lbl_8057520A = .sbss:0x8057520A; // type:object size:0x1 data:byte -lbl_8057520B = .sbss:0x8057520B; // type:object size:0x5 data:byte -guideColor1 = .sbss:0x80575210; // type:object size:0x4 data:4byte -guideColor2 = .sbss:0x80575214; // type:object size:0x4 data:4byte -guideColor3 = .sbss:0x80575218; // type:object size:0x8 data:4byte +sSavedHandMats = .sbss:0x80575208; // type:object size:0x2 scope:local data:byte +@GUARD@initShieldModel__19daPlayerModelBase_cFv@shieldEffects = .sbss:0x8057520A; // type:object size:0x1 scope:local data:byte +@GUARD@adjustMainModelChrAnm__19daPlayerModelBase_cFQ219daPlayerModelBase_c21PlayerMainModelNode_ePQ34nw4r3g3d12ChrAnmResult@v1 = .sbss:0x8057520B; // type:object size:0x1 scope:local data:byte +sGuideColor1__19daPlayerModelBase_c = .sbss:0x80575210; // type:object size:0x4 data:4byte +sGuideColor2__19daPlayerModelBase_c = .sbss:0x80575214; // type:object size:0x4 data:4byte +sGuideColor3__19daPlayerModelBase_c = .sbss:0x80575218; // type:object size:0x4 data:4byte RootActorParams = .sbss:0x80575220; // type:object size:0x4 scope:local data:4byte ms_configuration_p__6dSys_c = .sbss:0x80575228; // type:object size:0x4 data:4byte dSys_c__ms_RootHeapMem1 = .sbss:0x8057522C; // type:object size:0x4 data:4byte @@ -42897,222 +42929,220 @@ lbl_80577008 = .sdata2:0x80577008; // type:object size:0x4 align:4 data:float lbl_80577010 = .sdata2:0x80577010; // type:object size:0x4 align:4 data:float lbl_80577014 = .sdata2:0x80577014; // type:object size:0x4 align:4 data:float lbl_80577018 = .sdata2:0x80577018; // type:object size:0x4 align:4 data:float -lbl_80577020 = .sdata2:0x80577020; // type:object size:0x8 data:string -lbl_80577028 = .sdata2:0x80577028; // type:object size:0x4 data:string -lbl_8057702C = .sdata2:0x8057702C; // type:object size:0x8 -lbl_80577034 = .sdata2:0x80577034; // type:object size:0x8 -lbl_8057703C = .sdata2:0x8057703C; // type:object size:0x8 -lbl_80577044 = .sdata2:0x80577044; // type:object size:0x8 -lbl_8057704C = .sdata2:0x8057704C; // type:object size:0xC -lbl_80577058 = .sdata2:0x80577058; // type:object size:0x8 data:string -lbl_80577060 = .sdata2:0x80577060; // type:object size:0x8 data:string -lbl_80577068 = .sdata2:0x80577068; // type:object size:0x8 data:string -lbl_80577070 = .sdata2:0x80577070; // type:object size:0x8 data:string -lbl_80577078 = .sdata2:0x80577078; // type:object size:0x8 -lbl_80577080 = .sdata2:0x80577080; // type:object size:0x4 -lbl_80577084 = .sdata2:0x80577084; // type:object size:0xC -lbl_80577090 = .sdata2:0x80577090; // type:object size:0x8 data:string -lbl_80577098 = .sdata2:0x80577098; // type:object size:0x8 -lbl_805770A0 = .sdata2:0x805770A0; // type:object size:0x8 data:string -lbl_805770A8 = .sdata2:0x805770A8; // type:object size:0x8 -lbl_805770B0 = .sdata2:0x805770B0; // type:object size:0x8 data:string -lbl_805770B8 = .sdata2:0x805770B8; // type:object size:0x8 -lbl_805770C0 = .sdata2:0x805770C0; // type:object size:0x8 data:string -lbl_805770C8 = .sdata2:0x805770C8; // type:object size:0x8 -lbl_805770D0 = .sdata2:0x805770D0; // type:object size:0x8 -lbl_805770D8 = .sdata2:0x805770D8; // type:object size:0x8 -lbl_805770E0 = .sdata2:0x805770E0; // type:object size:0x8 -lbl_805770E8 = .sdata2:0x805770E8; // type:object size:0x8 -lbl_805770F0 = .sdata2:0x805770F0; // type:object size:0x8 -lbl_805770F8 = .sdata2:0x805770F8; // type:object size:0x8 -lbl_80577100 = .sdata2:0x80577100; // type:object size:0x8 -lbl_80577108 = .sdata2:0x80577108; // type:object size:0x4 data:string -lbl_8057710C = .sdata2:0x8057710C; // type:object size:0x4 data:string -lbl_80577110 = .sdata2:0x80577110; // type:object size:0x8 -lbl_80577118 = .sdata2:0x80577118; // type:object size:0x8 -lbl_80577120 = .sdata2:0x80577120; // type:object size:0x8 -lbl_80577128 = .sdata2:0x80577128; // type:object size:0x8 -lbl_80577130 = .sdata2:0x80577130; // type:object size:0x8 -lbl_80577138 = .sdata2:0x80577138; // type:object size:0x8 -lbl_80577140 = .sdata2:0x80577140; // type:object size:0x8 -lbl_80577148 = .sdata2:0x80577148; // type:object size:0x8 -lbl_80577150 = .sdata2:0x80577150; // type:object size:0x8 -lbl_80577158 = .sdata2:0x80577158; // type:object size:0x8 -lbl_80577160 = .sdata2:0x80577160; // type:object size:0x8 data:string -lbl_80577168 = .sdata2:0x80577168; // type:object size:0x8 data:string -lbl_80577170 = .sdata2:0x80577170; // type:object size:0x8 data:string -lbl_80577178 = .sdata2:0x80577178; // type:object size:0x8 data:string -lbl_80577180 = .sdata2:0x80577180; // type:object size:0x8 data:string -lbl_80577188 = .sdata2:0x80577188; // type:object size:0x8 data:string -lbl_80577190 = .sdata2:0x80577190; // type:object size:0x8 data:string -lbl_80577198 = .sdata2:0x80577198; // type:object size:0x8 data:string -lbl_805771A0 = .sdata2:0x805771A0; // type:object size:0x8 -lbl_805771A8 = .sdata2:0x805771A8; // type:object size:0x8 -lbl_805771B0 = .sdata2:0x805771B0; // type:object size:0x8 -lbl_805771B8 = .sdata2:0x805771B8; // type:object size:0x8 -lbl_805771C0 = .sdata2:0x805771C0; // type:object size:0x8 -lbl_805771C8 = .sdata2:0x805771C8; // type:object size:0x8 data:string -lbl_805771D0 = .sdata2:0x805771D0; // type:object size:0x8 -lbl_805771D8 = .sdata2:0x805771D8; // type:object size:0x8 data:string -lbl_805771E0 = .sdata2:0x805771E0; // type:object size:0x8 data:string -lbl_805771E8 = .sdata2:0x805771E8; // type:object size:0x8 -lbl_805771F0 = .sdata2:0x805771F0; // type:object size:0x8 -lbl_805771F8 = .sdata2:0x805771F8; // type:object size:0x8 -lbl_80577200 = .sdata2:0x80577200; // type:object size:0x8 -lbl_80577208 = .sdata2:0x80577208; // type:object size:0x8 data:string -lbl_80577210 = .sdata2:0x80577210; // type:object size:0x8 data:string -lbl_80577218 = .sdata2:0x80577218; // type:object size:0x8 data:string -lbl_80577220 = .sdata2:0x80577220; // type:object size:0x8 data:string -lbl_80577228 = .sdata2:0x80577228; // type:object size:0x8 -lbl_80577230 = .sdata2:0x80577230; // type:object size:0x8 -lbl_80577238 = .sdata2:0x80577238; // type:object size:0x8 -lbl_80577240 = .sdata2:0x80577240; // type:object size:0x8 -lbl_80577248 = .sdata2:0x80577248; // type:object size:0x8 -lbl_80577250 = .sdata2:0x80577250; // type:object size:0x8 -lbl_80577258 = .sdata2:0x80577258; // type:object size:0x8 -lbl_80577260 = .sdata2:0x80577260; // type:object size:0x8 -lbl_80577268 = .sdata2:0x80577268; // type:object size:0x8 -lbl_80577270 = .sdata2:0x80577270; // type:object size:0x8 -lbl_80577278 = .sdata2:0x80577278; // type:object size:0x8 -lbl_80577280 = .sdata2:0x80577280; // type:object size:0x8 -lbl_80577288 = .sdata2:0x80577288; // type:object size:0x8 -lbl_80577290 = .sdata2:0x80577290; // type:object size:0x8 -lbl_80577298 = .sdata2:0x80577298; // type:object size:0x8 data:string -lbl_805772A0 = .sdata2:0x805772A0; // type:object size:0x8 data:string -lbl_805772A8 = .sdata2:0x805772A8; // type:object size:0x8 data:string -lbl_805772B0 = .sdata2:0x805772B0; // type:object size:0x8 data:string -lbl_805772B8 = .sdata2:0x805772B8; // type:object size:0x4 data:string -lbl_805772BC = .sdata2:0x805772BC; // type:object size:0xC -lbl_805772C8 = .sdata2:0x805772C8; // type:object size:0x8 data:string -lbl_805772D0 = .sdata2:0x805772D0; // type:object size:0x4 data:string -lbl_805772D4 = .sdata2:0x805772D4; // type:object size:0x8 -lbl_805772DC = .sdata2:0x805772DC; // type:object size:0x8 -lbl_805772E4 = .sdata2:0x805772E4; // type:object size:0x8 -lbl_805772EC = .sdata2:0x805772EC; // type:object size:0x8 -lbl_805772F4 = .sdata2:0x805772F4; // type:object size:0x8 -lbl_805772FC = .sdata2:0x805772FC; // type:object size:0x8 -lbl_80577304 = .sdata2:0x80577304; // type:object size:0x8 -lbl_8057730C = .sdata2:0x8057730C; // type:object size:0x8 -lbl_80577314 = .sdata2:0x80577314; // type:object size:0x8 -lbl_8057731C = .sdata2:0x8057731C; // type:object size:0x8 -lbl_80577324 = .sdata2:0x80577324; // type:object size:0x8 -lbl_8057732C = .sdata2:0x8057732C; // type:object size:0x8 -lbl_80577334 = .sdata2:0x80577334; // type:object size:0xC -lbl_80577340 = .sdata2:0x80577340; // type:object size:0x8 data:string -lbl_80577348 = .sdata2:0x80577348; // type:object size:0x8 data:string -lbl_80577350 = .sdata2:0x80577350; // type:object size:0x8 data:string -lbl_80577358 = .sdata2:0x80577358; // type:object size:0x8 data:string -lbl_80577360 = .sdata2:0x80577360; // type:object size:0x8 data:string -lbl_80577368 = .sdata2:0x80577368; // type:object size:0x4 data:string -lbl_8057736C = .sdata2:0x8057736C; // type:object size:0x8 -lbl_80577374 = .sdata2:0x80577374; // type:object size:0x8 -lbl_8057737C = .sdata2:0x8057737C; // type:object size:0x8 -lbl_80577384 = .sdata2:0x80577384; // type:object size:0x8 -lbl_8057738C = .sdata2:0x8057738C; // type:object size:0xC -lbl_80577398 = .sdata2:0x80577398; // type:object size:0x8 data:string -lbl_805773A0 = .sdata2:0x805773A0; // type:object size:0x8 -lbl_805773A8 = .sdata2:0x805773A8; // type:object size:0x8 -lbl_805773B0 = .sdata2:0x805773B0; // type:object size:0x8 data:string -lbl_805773B8 = .sdata2:0x805773B8; // type:object size:0x8 data:string -lbl_805773C0 = .sdata2:0x805773C0; // type:object size:0x8 data:string -lbl_805773C8 = .sdata2:0x805773C8; // type:object size:0x8 -lbl_805773D0 = .sdata2:0x805773D0; // type:object size:0x8 -lbl_805773D8 = .sdata2:0x805773D8; // type:object size:0x8 -lbl_805773E0 = .sdata2:0x805773E0; // type:object size:0x8 data:string -lbl_805773E8 = .sdata2:0x805773E8; // type:object size:0x8 -lbl_805773F0 = .sdata2:0x805773F0; // type:object size:0x8 data:string -lbl_805773F8 = .sdata2:0x805773F8; // type:object size:0x8 data:string -lbl_80577400 = .sdata2:0x80577400; // type:object size:0x8 -lbl_80577408 = .sdata2:0x80577408; // type:object size:0x8 data:string -lbl_80577410 = .sdata2:0x80577410; // type:object size:0x8 data:string -lbl_80577418 = .sdata2:0x80577418; // type:object size:0x8 -lbl_80577420 = .sdata2:0x80577420; // type:object size:0x8 -lbl_80577428 = .sdata2:0x80577428; // type:object size:0x8 -lbl_80577430 = .sdata2:0x80577430; // type:object size:0x8 -lbl_80577438 = .sdata2:0x80577438; // type:object size:0x8 data:string -lbl_80577440 = .sdata2:0x80577440; // type:object size:0x8 data:string -lbl_80577448 = .sdata2:0x80577448; // type:object size:0x8 data:string -lbl_80577450 = .sdata2:0x80577450; // type:object size:0x8 data:string -lbl_80577458 = .sdata2:0x80577458; // type:object size:0x8 data:string -lbl_80577460 = .sdata2:0x80577460; // type:object size:0x8 data:string -lbl_80577468 = .sdata2:0x80577468; // type:object size:0x8 -lbl_80577470 = .sdata2:0x80577470; // type:object size:0x8 -lbl_80577478 = .sdata2:0x80577478; // type:object size:0x8 -lbl_80577480 = .sdata2:0x80577480; // type:object size:0x8 -lbl_80577488 = .sdata2:0x80577488; // type:object size:0x8 -lbl_80577490 = .sdata2:0x80577490; // type:object size:0x8 -lbl_80577498 = .sdata2:0x80577498; // type:object size:0x8 -lbl_805774A0 = .sdata2:0x805774A0; // type:object size:0x8 -lbl_805774A8 = .sdata2:0x805774A8; // type:object size:0x8 -lbl_805774B0 = .sdata2:0x805774B0; // type:object size:0x8 -lbl_805774B8 = .sdata2:0x805774B8; // type:object size:0x8 -lbl_805774C0 = .sdata2:0x805774C0; // type:object size:0x8 -lbl_805774C8 = .sdata2:0x805774C8; // type:object size:0x8 -lbl_805774D0 = .sdata2:0x805774D0; // type:object size:0x8 -lbl_805774D8 = .sdata2:0x805774D8; // type:object size:0x8 -lbl_805774E0 = .sdata2:0x805774E0; // type:object size:0x8 -lbl_805774E8 = .sdata2:0x805774E8; // type:object size:0x8 -lbl_805774F0 = .sdata2:0x805774F0; // type:object size:0x8 -lbl_805774F8 = .sdata2:0x805774F8; // type:object size:0x8 -lbl_80577500 = .sdata2:0x80577500; // type:object size:0x8 -lbl_80577508 = .sdata2:0x80577508; // type:object size:0x8 -lbl_80577510 = .sdata2:0x80577510; // type:object size:0x8 -lbl_80577518 = .sdata2:0x80577518; // type:object size:0x8 -lbl_80577520 = .sdata2:0x80577520; // type:object size:0x8 -lbl_80577528 = .sdata2:0x80577528; // type:object size:0x8 -lbl_80577530 = .sdata2:0x80577530; // type:object size:0x8 -lbl_80577538 = .sdata2:0x80577538; // type:object size:0x8 -lbl_80577540 = .sdata2:0x80577540; // type:object size:0x8 -lbl_80577548 = .sdata2:0x80577548; // type:object size:0x8 -lbl_80577550 = .sdata2:0x80577550; // type:object size:0x8 -lbl_80577558 = .sdata2:0x80577558; // type:object size:0x8 -lbl_80577560 = .sdata2:0x80577560; // type:object size:0x8 data:string -lbl_80577568 = .sdata2:0x80577568; // type:object size:0x8 data:string -lbl_80577570 = .sdata2:0x80577570; // type:object size:0x8 data:string -lbl_80577578 = .sdata2:0x80577578; // type:object size:0x8 data:string -lbl_80577580 = .sdata2:0x80577580; // type:object size:0x8 data:string -lbl_80577588 = .sdata2:0x80577588; // type:object size:0x8 data:string -lbl_80577590 = .sdata2:0x80577590; // type:object size:0x8 data:string -lbl_80577598 = .sdata2:0x80577598; // type:object size:0x8 -lbl_805775A0 = .sdata2:0x805775A0; // type:object size:0x8 -lbl_805775A8 = .sdata2:0x805775A8; // type:object size:0x8 -lbl_805775B0 = .sdata2:0x805775B0; // type:object size:0x8 data:string -lbl_805775B8 = .sdata2:0x805775B8; // type:object size:0x8 data:string -lbl_805775C0 = .sdata2:0x805775C0; // type:object size:0x8 -lbl_805775C8 = .sdata2:0x805775C8; // type:object size:0x4 -lbl_805775CC = .sdata2:0x805775CC; // type:object size:0x8 -lbl_805775D4 = .sdata2:0x805775D4; // type:object size:0x8 -lbl_805775DC = .sdata2:0x805775DC; // type:object size:0x8 -lbl_805775E4 = .sdata2:0x805775E4; // type:object size:0x8 -lbl_805775EC = .sdata2:0x805775EC; // type:object size:0xC -lbl_805775F8 = .sdata2:0x805775F8; // type:object size:0x8 data:string -lbl_80577600 = .sdata2:0x80577600; // type:object size:0x8 -lbl_80577608 = .sdata2:0x80577608; // type:object size:0x8 -lbl_80577610 = .sdata2:0x80577610; // type:object size:0x8 -lbl_80577618 = .sdata2:0x80577618; // type:object size:0x8 data:string -lbl_80577620 = .sdata2:0x80577620; // type:object size:0x4 data:4byte -lbl_80577624 = .sdata2:0x80577624; // type:object size:0x4 align:4 data:float -lbl_80577628 = .sdata2:0x80577628; // type:object size:0x4 align:4 data:float -lbl_8057762C = .sdata2:0x8057762C; // type:object size:0x4 align:4 data:float -lbl_80577630 = .sdata2:0x80577630; // type:object size:0x8 align:8 data:double -lbl_80577638 = .sdata2:0x80577638; // type:object size:0x8 align:8 data:double -lbl_80577640 = .sdata2:0x80577640; // type:object size:0x4 align:4 data:float -lbl_80577644 = .sdata2:0x80577644; // type:object size:0x4 align:4 data:float -lbl_80577648 = .sdata2:0x80577648; // type:object size:0x4 align:4 data:float -lbl_8057764C = .sdata2:0x8057764C; // type:object size:0x4 align:4 data:float -lbl_80577650 = .sdata2:0x80577650; // type:object size:0x2 data:2byte -lbl_80577652 = .sdata2:0x80577652; // type:object size:0x2 -lbl_80577654 = .sdata2:0x80577654; // type:object size:0x2 data:2byte -lbl_80577656 = .sdata2:0x80577656; // type:object size:0x2 -lbl_80577658 = .sdata2:0x80577658; // type:object size:0x4 align:4 data:float -lbl_8057765C = .sdata2:0x8057765C; // type:object size:0x4 align:4 data:float -lbl_80577660 = .sdata2:0x80577660; // type:object size:0x4 align:4 data:float -lbl_80577664 = .sdata2:0x80577664; // type:object size:0x4 align:4 data:float -lbl_80577668 = .sdata2:0x80577668; // type:object size:0x4 align:4 data:float -lbl_8057766C = .sdata2:0x8057766C; // type:object size:0x4 align:4 data:float -lbl_80577670 = .sdata2:0x80577670; // type:object size:0x4 align:4 data:float -lbl_80577674 = .sdata2:0x80577674; // type:object size:0x4 align:4 data:float -lbl_80577678 = .sdata2:0x80577678; // type:object size:0x4 align:4 data:float +@26291 = .sdata2:0x80577020; // type:object size:0x8 scope:local data:string +@26292 = .sdata2:0x80577028; // type:object size:0x4 scope:local data:string +@26293 = .sdata2:0x8057702C; // type:object size:0x5 scope:local data:string +@26294 = .sdata2:0x80577034; // type:object size:0x6 scope:local data:string +@26298 = .sdata2:0x8057703C; // type:object size:0x6 scope:local data:string +@26301 = .sdata2:0x80577044; // type:object size:0x7 scope:local data:string +@26302 = .sdata2:0x8057704C; // type:object size:0x5 scope:local data:string +@26304 = .sdata2:0x80577058; // type:object size:0x8 scope:local data:string +@26307 = .sdata2:0x80577060; // type:object size:0x8 scope:local data:string +@26318 = .sdata2:0x80577068; // type:object size:0x8 scope:local data:string +@26320 = .sdata2:0x80577070; // type:object size:0x8 scope:local data:string +@26341 = .sdata2:0x80577078; // type:object size:0x7 scope:local data:string +@26346 = .sdata2:0x80577080; // type:object size:0x1 scope:local +@26347 = .sdata2:0x80577084; // type:object size:0x6 scope:local data:string +@26348 = .sdata2:0x80577090; // type:object size:0x8 scope:local data:string +@26349 = .sdata2:0x80577098; // type:object size:0x6 scope:local data:string +@26350 = .sdata2:0x805770A0; // type:object size:0x8 scope:local data:string +@26351 = .sdata2:0x805770A8; // type:object size:0x6 scope:local data:string +@26352 = .sdata2:0x805770B0; // type:object size:0x8 scope:local data:string +@26353 = .sdata2:0x805770B8; // type:object size:0x6 scope:local data:string +@26354 = .sdata2:0x805770C0; // type:object size:0x8 scope:local data:string +@26355 = .sdata2:0x805770C8; // type:object size:0x7 scope:local data:string +@26356 = .sdata2:0x805770D0; // type:object size:0x7 scope:local data:string +@26357 = .sdata2:0x805770D8; // type:object size:0x7 scope:local data:string +@26358 = .sdata2:0x805770E0; // type:object size:0x7 scope:local data:string +@26359 = .sdata2:0x805770E8; // type:object size:0x6 scope:local data:string +@26360 = .sdata2:0x805770F0; // type:object size:0x6 scope:local data:string +@26361 = .sdata2:0x805770F8; // type:object size:0x6 scope:local data:string +@26362 = .sdata2:0x80577100; // type:object size:0x6 scope:local data:string +@26365 = .sdata2:0x80577108; // type:object size:0x4 scope:local data:string +@26366 = .sdata2:0x8057710C; // type:object size:0x4 scope:local data:string +@26367 = .sdata2:0x80577110; // type:object size:0x6 scope:local data:string +@26368 = .sdata2:0x80577118; // type:object size:0x6 scope:local data:string +@26369 = .sdata2:0x80577120; // type:object size:0x7 scope:local data:string +@26370 = .sdata2:0x80577128; // type:object size:0x5 scope:local data:string +@26371 = .sdata2:0x80577130; // type:object size:0x5 scope:local data:string +@26372 = .sdata2:0x80577138; // type:object size:0x6 scope:local data:string +@26373 = .sdata2:0x80577140; // type:object size:0x6 scope:local data:string +@26374 = .sdata2:0x80577148; // type:object size:0x6 scope:local data:string +@26375 = .sdata2:0x80577150; // type:object size:0x6 scope:local data:string +@26376 = .sdata2:0x80577158; // type:object size:0x6 scope:local data:string +@26377 = .sdata2:0x80577160; // type:object size:0x8 scope:local data:string +@26378 = .sdata2:0x80577168; // type:object size:0x8 scope:local data:string +@26379 = .sdata2:0x80577170; // type:object size:0x8 scope:local data:string +@26380 = .sdata2:0x80577178; // type:object size:0x8 scope:local data:string +@26381 = .sdata2:0x80577180; // type:object size:0x8 scope:local data:string +@26382 = .sdata2:0x80577188; // type:object size:0x8 scope:local data:string +@26383 = .sdata2:0x80577190; // type:object size:0x8 scope:local data:string +@26384 = .sdata2:0x80577198; // type:object size:0x8 scope:local data:string +@26385 = .sdata2:0x805771A0; // type:object size:0x6 scope:local data:string +@26387 = .sdata2:0x805771A8; // type:object size:0x7 scope:local data:string +@26388 = .sdata2:0x805771B0; // type:object size:0x7 scope:local data:string +@26389 = .sdata2:0x805771B8; // type:object size:0x6 scope:local data:string +@26391 = .sdata2:0x805771C0; // type:object size:0x7 scope:local data:string +@26392 = .sdata2:0x805771C8; // type:object size:0x8 scope:local data:string +@26393 = .sdata2:0x805771D0; // type:object size:0x5 scope:local data:string +@26394 = .sdata2:0x805771D8; // type:object size:0x8 scope:local data:string +@26395 = .sdata2:0x805771E0; // type:object size:0x8 scope:local data:string +@26396 = .sdata2:0x805771E8; // type:object size:0x7 scope:local data:string +@26397 = .sdata2:0x805771F0; // type:object size:0x6 scope:local data:string +@26398 = .sdata2:0x805771F8; // type:object size:0x6 scope:local data:string +@26399 = .sdata2:0x80577200; // type:object size:0x5 scope:local data:string +@26414 = .sdata2:0x80577208; // type:object size:0x8 scope:local data:string +@26417 = .sdata2:0x80577210; // type:object size:0x8 scope:local data:string +@26420 = .sdata2:0x80577218; // type:object size:0x8 scope:local data:string +@26421 = .sdata2:0x80577220; // type:object size:0x8 scope:local data:string +@26426 = .sdata2:0x80577228; // type:object size:0x5 scope:local data:string +@26427 = .sdata2:0x80577230; // type:object size:0x6 scope:local data:string +@26428 = .sdata2:0x80577238; // type:object size:0x6 scope:local data:string +@26429 = .sdata2:0x80577240; // type:object size:0x7 scope:local data:string +@26430 = .sdata2:0x80577248; // type:object size:0x7 scope:local data:string +@26431 = .sdata2:0x80577250; // type:object size:0x7 scope:local data:string +@26432 = .sdata2:0x80577258; // type:object size:0x5 scope:local data:string +@26433 = .sdata2:0x80577260; // type:object size:0x5 scope:local data:string +@26434 = .sdata2:0x80577268; // type:object size:0x5 scope:local data:string +@26435 = .sdata2:0x80577270; // type:object size:0x5 scope:local data:string +@26440 = .sdata2:0x80577278; // type:object size:0x6 scope:local data:string +@26441 = .sdata2:0x80577280; // type:object size:0x6 scope:local data:string +@26442 = .sdata2:0x80577288; // type:object size:0x6 scope:local data:string +@26443 = .sdata2:0x80577290; // type:object size:0x6 scope:local data:string +@26444 = .sdata2:0x80577298; // type:object size:0x8 scope:local data:string +@26445 = .sdata2:0x805772A0; // type:object size:0x8 scope:local data:string +@26446 = .sdata2:0x805772A8; // type:object size:0x8 scope:local data:string +@26447 = .sdata2:0x805772B0; // type:object size:0x8 scope:local data:string +@26452 = .sdata2:0x805772B8; // type:object size:0x4 scope:local data:string +@26455 = .sdata2:0x805772BC; // type:object size:0x6 scope:local data:string +@26456 = .sdata2:0x805772C8; // type:object size:0x8 scope:local data:string +@26457 = .sdata2:0x805772D0; // type:object size:0x4 scope:local data:string +@26464 = .sdata2:0x805772D4; // type:object size:0x6 scope:local data:string +@26465 = .sdata2:0x805772DC; // type:object size:0x7 scope:local data:string +@26466 = .sdata2:0x805772E4; // type:object size:0x7 scope:local data:string +@26467 = .sdata2:0x805772EC; // type:object size:0x6 scope:local data:string +@26473 = .sdata2:0x805772F4; // type:object size:0x7 scope:local data:string +@26474 = .sdata2:0x805772FC; // type:object size:0x7 scope:local data:string +@26475 = .sdata2:0x80577304; // type:object size:0x7 scope:local data:string +@26476 = .sdata2:0x8057730C; // type:object size:0x7 scope:local data:string +@26477 = .sdata2:0x80577314; // type:object size:0x7 scope:local data:string +@26481 = .sdata2:0x8057731C; // type:object size:0x7 scope:local data:string +@26482 = .sdata2:0x80577324; // type:object size:0x7 scope:local data:string +@26485 = .sdata2:0x8057732C; // type:object size:0x7 scope:local data:string +@26486 = .sdata2:0x80577334; // type:object size:0x7 scope:local data:string +@26487 = .sdata2:0x80577340; // type:object size:0x8 scope:local data:string +@26490 = .sdata2:0x80577348; // type:object size:0x8 scope:local data:string +@26491 = .sdata2:0x80577350; // type:object size:0x8 scope:local data:string +@26498 = .sdata2:0x80577358; // type:object size:0x8 scope:local data:string +@26499 = .sdata2:0x80577360; // type:object size:0x8 scope:local data:string +@26504 = .sdata2:0x80577368; // type:object size:0x4 scope:local data:string +@26505 = .sdata2:0x8057736C; // type:object size:0x5 scope:local data:string +@26506 = .sdata2:0x80577374; // type:object size:0x7 scope:local data:string +@26508 = .sdata2:0x8057737C; // type:object size:0x7 scope:local data:string +@26509 = .sdata2:0x80577384; // type:object size:0x6 scope:local data:string +@26510 = .sdata2:0x8057738C; // type:object size:0x6 scope:local data:string +@26511 = .sdata2:0x80577398; // type:object size:0x8 scope:local data:string +@26512 = .sdata2:0x805773A0; // type:object size:0x6 scope:local data:string +@26513 = .sdata2:0x805773A8; // type:object size:0x6 scope:local data:string +@26517 = .sdata2:0x805773B0; // type:object size:0x8 scope:local data:string +@26518 = .sdata2:0x805773B8; // type:object size:0x8 scope:local data:string +@26535 = .sdata2:0x805773C0; // type:object size:0x8 scope:local data:string +@26536 = .sdata2:0x805773C8; // type:object size:0x6 scope:local data:string +@26537 = .sdata2:0x805773D0; // type:object size:0x6 scope:local data:string +@26538 = .sdata2:0x805773D8; // type:object size:0x7 scope:local data:string +@26540 = .sdata2:0x805773E0; // type:object size:0x8 scope:local data:string +@26542 = .sdata2:0x805773E8; // type:object size:0x7 scope:local data:string +@26544 = .sdata2:0x805773F0; // type:object size:0x8 scope:local data:string +@26546 = .sdata2:0x805773F8; // type:object size:0x8 scope:local data:string +@26548 = .sdata2:0x80577400; // type:object size:0x7 scope:local data:string +@26550 = .sdata2:0x80577408; // type:object size:0x8 scope:local data:string +@26556 = .sdata2:0x80577410; // type:object size:0x8 scope:local data:string +@26561 = .sdata2:0x80577418; // type:object size:0x6 scope:local data:string +@26562 = .sdata2:0x80577420; // type:object size:0x6 scope:local data:string +@26563 = .sdata2:0x80577428; // type:object size:0x6 scope:local data:string +@26564 = .sdata2:0x80577430; // type:object size:0x6 scope:local data:string +@26565 = .sdata2:0x80577438; // type:object size:0x8 scope:local data:string +@26566 = .sdata2:0x80577440; // type:object size:0x8 scope:local data:string +@26567 = .sdata2:0x80577448; // type:object size:0x8 scope:local data:string +@26568 = .sdata2:0x80577450; // type:object size:0x8 scope:local data:string +@26569 = .sdata2:0x80577458; // type:object size:0x8 scope:local data:string +@26570 = .sdata2:0x80577460; // type:object size:0x8 scope:local data:string +@26581 = .sdata2:0x80577468; // type:object size:0x7 scope:local data:string +@26582 = .sdata2:0x80577470; // type:object size:0x5 scope:local data:string +@26585 = .sdata2:0x80577478; // type:object size:0x6 scope:local data:string +@26592 = .sdata2:0x80577480; // type:object size:0x6 scope:local data:string +@26593 = .sdata2:0x80577488; // type:object size:0x7 scope:local data:string +@26594 = .sdata2:0x80577490; // type:object size:0x6 scope:local data:string +@26595 = .sdata2:0x80577498; // type:object size:0x7 scope:local data:string +@26596 = .sdata2:0x805774A0; // type:object size:0x7 scope:local data:string +@26597 = .sdata2:0x805774A8; // type:object size:0x6 scope:local data:string +@26598 = .sdata2:0x805774B0; // type:object size:0x7 scope:local data:string +@26607 = .sdata2:0x805774B8; // type:object size:0x7 scope:local data:string +@26608 = .sdata2:0x805774C0; // type:object size:0x7 scope:local data:string +@26614 = .sdata2:0x805774C8; // type:object size:0x7 scope:local data:string +@26616 = .sdata2:0x805774D0; // type:object size:0x7 scope:local data:string +@26618 = .sdata2:0x805774D8; // type:object size:0x6 scope:local data:string +@26619 = .sdata2:0x805774E0; // type:object size:0x6 scope:local data:string +@26620 = .sdata2:0x805774E8; // type:object size:0x7 scope:local data:string +@26621 = .sdata2:0x805774F0; // type:object size:0x7 scope:local data:string +@26622 = .sdata2:0x805774F8; // type:object size:0x7 scope:local data:string +@26623 = .sdata2:0x80577500; // type:object size:0x7 scope:local data:string +@26624 = .sdata2:0x80577508; // type:object size:0x5 scope:local data:string +@26626 = .sdata2:0x80577510; // type:object size:0x7 scope:local data:string +@26629 = .sdata2:0x80577518; // type:object size:0x6 scope:local data:string +@26630 = .sdata2:0x80577520; // type:object size:0x7 scope:local data:string +@26631 = .sdata2:0x80577528; // type:object size:0x5 scope:local data:string +@26632 = .sdata2:0x80577530; // type:object size:0x7 scope:local data:string +@26633 = .sdata2:0x80577538; // type:object size:0x7 scope:local data:string +@26640 = .sdata2:0x80577540; // type:object size:0x7 scope:local data:string +@26641 = .sdata2:0x80577548; // type:object size:0x6 scope:local data:string +@26644 = .sdata2:0x80577550; // type:object size:0x7 scope:local data:string +@26645 = .sdata2:0x80577558; // type:object size:0x7 scope:local data:string +@26681 = .sdata2:0x80577560; // type:object size:0x8 scope:local data:string +@26685 = .sdata2:0x80577568; // type:object size:0x8 scope:local data:string +@26691 = .sdata2:0x80577570; // type:object size:0x8 scope:local data:string +@26692 = .sdata2:0x80577578; // type:object size:0x8 scope:local data:string +@26695 = .sdata2:0x80577580; // type:object size:0x8 scope:local data:string +@26714 = .sdata2:0x80577588; // type:object size:0x8 scope:local data:string +@26715 = .sdata2:0x80577590; // type:object size:0x8 scope:local data:string +@26728 = .sdata2:0x80577598; // type:object size:0x5 scope:local data:string +@26729 = .sdata2:0x805775A0; // type:object size:0x7 scope:local data:string +@26731 = .sdata2:0x805775A8; // type:object size:0x5 scope:local data:string +@26735 = .sdata2:0x805775B0; // type:object size:0x8 scope:local data:string +@26736 = .sdata2:0x805775B8; // type:object size:0x8 scope:local data:string +@26744 = .sdata2:0x805775C0; // type:object size:0x7 scope:local data:string +@26752 = .sdata2:0x805775C8; // type:object size:0x3 scope:local data:string +@26753 = .sdata2:0x805775CC; // type:object size:0x5 scope:local data:string +@26754 = .sdata2:0x805775D4; // type:object size:0x6 scope:local data:string +@26755 = .sdata2:0x805775DC; // type:object size:0x6 scope:local data:string +@26756 = .sdata2:0x805775E4; // type:object size:0x6 scope:local data:string +@26758 = .sdata2:0x805775EC; // type:object size:0x5 scope:local data:string +@26760 = .sdata2:0x805775F8; // type:object size:0x8 scope:local data:string +@26761 = .sdata2:0x80577600; // type:object size:0x7 scope:local data:string +@26763 = .sdata2:0x80577608; // type:object size:0x6 scope:local data:string +@26764 = .sdata2:0x80577610; // type:object size:0x7 scope:local data:string +@26782 = .sdata2:0x80577618; // type:object size:0x8 scope:local data:string +sUnkDuration__19daPlayerModelBase_c = .sdata2:0x80577620; // type:object size:0x4 data:4byte +@32839 = .sdata2:0x80577624; // type:object size:0x4 scope:local align:4 data:float +@32852 = .sdata2:0x80577628; // type:object size:0x4 scope:local align:4 data:float +@32869 = .sdata2:0x8057762C; // type:object size:0x4 scope:local align:4 data:float +@33198 = .sdata2:0x80577630; // type:object size:0x8 scope:local align:8 data:double +@33199 = .sdata2:0x80577638; // type:object size:0x8 scope:local align:8 data:double +@33681 = .sdata2:0x80577640; // type:object size:0x4 scope:local align:4 data:float +@33682 = .sdata2:0x80577644; // type:object size:0x4 scope:local align:4 data:float +@33683 = .sdata2:0x80577648; // type:object size:0x4 scope:local align:4 data:float +@33726 = .sdata2:0x8057764C; // type:object size:0x4 scope:local align:4 data:float +@LOCAL@fn_8005F890__19daPlayerModelBase_cFPQ34nw4r4math5MTX34@sNodeIdsArms1 = .sdata2:0x80577650; // type:object size:0x4 scope:local data:2byte +@LOCAL@fn_8005FB90__19daPlayerModelBase_cFPQ34nw4r4math5MTX34@sNodeIdsLegs1 = .sdata2:0x80577654; // type:object size:0x4 scope:local data:2byte +@34039 = .sdata2:0x80577658; // type:object size:0x4 scope:local align:4 data:float +@34040 = .sdata2:0x8057765C; // type:object size:0x4 scope:local align:4 data:float +@34041 = .sdata2:0x80577660; // type:object size:0x4 scope:local align:4 data:float +@34042 = .sdata2:0x80577664; // type:object size:0x4 scope:local align:4 data:float +@34043 = .sdata2:0x80577668; // type:object size:0x4 scope:local align:4 data:float +@34341 = .sdata2:0x8057766C; // type:object size:0x4 scope:local align:4 data:float +@34365 = .sdata2:0x80577670; // type:object size:0x4 scope:local align:4 data:float +@34459 = .sdata2:0x80577674; // type:object size:0x4 scope:local align:4 data:float +@34460 = .sdata2:0x80577678; // type:object size:0x4 scope:local align:4 data:float lbl_80577680 = .sdata2:0x80577680; // type:object size:0x4 align:4 data:float lbl_80577684 = .sdata2:0x80577684; // type:object size:0x4 align:4 data:float lbl_80577688 = .sdata2:0x80577688; // type:object size:0x4 align:4 data:float @@ -50349,9 +50379,9 @@ lbl_805A05F0 = .bss:0x805A05F0; // type:object size:0x60 PadExtendedStuff_ARRAY_805a0604_3_.field4_0x4 = .bss:0x805A0650; // type:object size:0x60 LINK_POS = .bss:0x805A06B0; // type:object size:0xC align:4 data:float LINK_POS_2 = .bss:0x805A06BC; // type:object size:0xC align:4 data:float -HandMats = .bss:0x805A06C8; // type:object size:0x10 data:byte -SOUND_BREAKING_MAYBE = .bss:0x805A06D8; // type:object size:0xC data:2byte -lbl_805A06E4 = .bss:0x805A06E4; // type:object size:0xC align:4 data:float +sHandMats = .bss:0x805A06C8; // type:object size:0xE scope:local data:byte +@LOCAL@initShieldModel__19daPlayerModelBase_cFv@shieldEffects = .bss:0x805A06D8; // type:object size:0xA scope:local data:2byte +@LOCAL@adjustMainModelChrAnm__19daPlayerModelBase_cFQ219daPlayerModelBase_c21PlayerMainModelNode_ePQ34nw4r3g3d12ChrAnmResult@v1 = .bss:0x805A06E4; // type:object size:0xC scope:local align:4 data:float @7070 = .bss:0x805A06F0; // type:object size:0xC scope:local sFader__8dScene_c = .bss:0x805A06FC; // type:object size:0x24 data:4byte SysConfig = .bss:0x805A0720; // type:object size:0x58 data:4byte diff --git a/configure.py b/configure.py index 6c725c13..95217fb3 100644 --- a/configure.py +++ b/configure.py @@ -413,7 +413,8 @@ config.libs = [ Object(NonMatching, "d/d_pad.cpp"), Object(NonMatching, "d/d_pad_player.cpp"), Object(NonMatching, "d/d_player_act.cpp"), - Object(NonMatching, "d/d_player_mdl.cpp"), + Object(Matching, "d/d_player_mdl.cpp"), + Object(Matching, "d/d_player_guide_colors.cpp"), Object(Matching, "d/d_rawarchive.cpp"), Object(Matching, "d/d_scene.cpp"), Object(NonMatching, "d/d_state.cpp"), diff --git a/include/d/a/d_a_base.h b/include/d/a/d_a_base.h index 4fd914ce..f0bfddc8 100644 --- a/include/d/a/d_a_base.h +++ b/include/d/a/d_a_base.h @@ -15,11 +15,74 @@ struct cBgS_PolyInfo; struct SoundSource { virtual ~SoundSource() {} - // TODO + // TODO there's probably multiple inheritance involved and stuff + #define SOUNDSOURCE_VIRTUAL(offset) virtual void vt_##offset(); + SOUNDSOURCE_VIRTUAL(0x0C); + SOUNDSOURCE_VIRTUAL(0x10); + SOUNDSOURCE_VIRTUAL(0x14); + SOUNDSOURCE_VIRTUAL(0x18); + SOUNDSOURCE_VIRTUAL(0x1C); + SOUNDSOURCE_VIRTUAL(0x20); + SOUNDSOURCE_VIRTUAL(0x24); + SOUNDSOURCE_VIRTUAL(0x28); + SOUNDSOURCE_VIRTUAL(0x2C); + SOUNDSOURCE_VIRTUAL(0x30); + SOUNDSOURCE_VIRTUAL(0x34); + SOUNDSOURCE_VIRTUAL(0x38); + SOUNDSOURCE_VIRTUAL(0x3C); + SOUNDSOURCE_VIRTUAL(0x40); + SOUNDSOURCE_VIRTUAL(0x44); virtual bool shutdown(); // 0x48 + SOUNDSOURCE_VIRTUAL(0x4C); + SOUNDSOURCE_VIRTUAL(0x50); + SOUNDSOURCE_VIRTUAL(0x54); + SOUNDSOURCE_VIRTUAL(0x58); + SOUNDSOURCE_VIRTUAL(0x5C); + SOUNDSOURCE_VIRTUAL(0x60); + SOUNDSOURCE_VIRTUAL(0x64); + SOUNDSOURCE_VIRTUAL(0x68); + SOUNDSOURCE_VIRTUAL(0x6C); + SOUNDSOURCE_VIRTUAL(0x70); + SOUNDSOURCE_VIRTUAL(0x74); + SOUNDSOURCE_VIRTUAL(0x78); + SOUNDSOURCE_VIRTUAL(0x7C); + SOUNDSOURCE_VIRTUAL(0x80); + SOUNDSOURCE_VIRTUAL(0x84); + SOUNDSOURCE_VIRTUAL(0x88); + SOUNDSOURCE_VIRTUAL(0x8C); + SOUNDSOURCE_VIRTUAL(0x90); + SOUNDSOURCE_VIRTUAL(0x94); + SOUNDSOURCE_VIRTUAL(0x98); + SOUNDSOURCE_VIRTUAL(0x9C); + SOUNDSOURCE_VIRTUAL(0xA0); + SOUNDSOURCE_VIRTUAL(0xA4); + SOUNDSOURCE_VIRTUAL(0xA8); + SOUNDSOURCE_VIRTUAL(0xAC); + SOUNDSOURCE_VIRTUAL(0xB0); + SOUNDSOURCE_VIRTUAL(0xB4); + SOUNDSOURCE_VIRTUAL(0xB8); + SOUNDSOURCE_VIRTUAL(0xBC); + SOUNDSOURCE_VIRTUAL(0xC0); + SOUNDSOURCE_VIRTUAL(0xC4); + SOUNDSOURCE_VIRTUAL(0xC8); + SOUNDSOURCE_VIRTUAL(0xCC); + SOUNDSOURCE_VIRTUAL(0xD0); + SOUNDSOURCE_VIRTUAL(0xD4); + SOUNDSOURCE_VIRTUAL(0xD8); + SOUNDSOURCE_VIRTUAL(0xDC); + SOUNDSOURCE_VIRTUAL(0xE0); + SOUNDSOURCE_VIRTUAL(0xE4); + SOUNDSOURCE_VIRTUAL(0xE8); + SOUNDSOURCE_VIRTUAL(0xEC); + SOUNDSOURCE_VIRTUAL(0xF0); + SOUNDSOURCE_VIRTUAL(0xF4); + SOUNDSOURCE_VIRTUAL(0xF8); + SOUNDSOURCE_VIRTUAL(0xFC); + + virtual bool isReadyMaybe(); // 0x100 - virtual bool load(void *data, const char *name); // 0x100 + virtual bool load(void *data, const char *name); // 0x104 virtual void setFrame(f32 frame); // 0x108 virtual void setRate(f32 frame); // 0x10C virtual void set_0x164(UNKWORD val); // 0x114 diff --git a/include/d/a/d_a_item.h b/include/d/a/d_a_item.h index b897bdf1..997683c8 100644 --- a/include/d/a/d_a_item.h +++ b/include/d/a/d_a_item.h @@ -47,6 +47,9 @@ public: static void spawnItem(u16 item, u32 room, const mVec3_c &pos, const mAng3_c &rot, u32 params, u32 arg); static void spawnDrop(u16 item, u32 room, const mVec3_c &pos, const mAng3_c &rot); static u32 checkFlag(u32 flag); + static bool hasItem(u32 flag) { + return checkFlag(flag); + } static void setFlag(s32 id); void setItemPosition(const mVec3_c &); diff --git a/include/d/a/d_a_player.h b/include/d/a/d_a_player.h index 955760e9..e27a3513 100644 --- a/include/d/a/d_a_player.h +++ b/include/d/a/d_a_player.h @@ -2,311 +2,42 @@ #define D_A_PLAYER_H #include "common.h" -#include "d/a/d_a_base.h" -#include "d/a/d_a_itembase.h" -#include "d/a/obj/d_a_obj_base.h" -#include "m/m3d/m_anmmatclr.h" -#include "m/m_allocator.h" -#include "m/m_angle.h" -#include "m/m_mtx.h" -#include "m/m_vec.h" -#include "nw4r/g3d/res/g3d_resfile.h" +#include "d/d_player_mdl.h" #include "toBeSorted/file_manager.h" +#include "toBeSorted/minigame_mgr.h" -class dAcPy_c : public dAcObjBase_c { - // See Below for some info - // https://github.com/lepelog/skywardsword-tools/wiki/Player-Actor +// See Below for some info +// https://github.com/lepelog/skywardsword-tools/wiki/Player-Actor + +class dAcPy_c : public daPlayerModelBase_c { public: - // These Flags are named under general guesses. Very likely may need some changes - // Correspond to mActionFlags - enum dAcPy_FLG0 { - FLG0_ON_FOOT = 0x80000000, - FLG0_USE_ITEM_0 = 0x40000000, - FLG0_USE_ITEM_1 = 0x20000000, - FLG0_UNK_GEN_MOVE = 0x10000000, - FLG0_ATTACK_MOVE = 0x8000000, - FLG0_USE_ITEM_2 = 0x4000000, - FLG0_RECOVER_ELEC = 0x2000000, - FLG0_CRAWLING = 0x1000000, - FLG0_TIGHT_ROPE = 0x800000, - FLG0_SWING_ROPE = 0x400000, - FLG0_PUSHPULL = 0x200000, - FLG0_UNK_100000 = 0x100000, - FLG0_UNK_80000 = 0x80000, - FLG0_IN_WATER = 0x40000, - FLG0_ON_LADDDER = 0x20000, - FLG0_ON_VINES = 0x10000, - FLG0_UNK_0x8000 = 0x8000, - FLG0_UNK_0x4000 = 0x4000, - FLG0_INTERATION = 0x2000, - FLG0_BASIC_ACTION = 0x1000, - FLG0_HANGING_ITEM = 0x800, - FLG0_EXTERN_CONTROL = 0x400, - FLG0_ATTACK_RELATED = 0x200, - FLG0_UNK_0x100 = 0x100, - FLG0_UNK_0x80 = 0x80, - FLG0_HANGING_LEDGE = 0x40, - FLG0_UNK_0x20 = 0x20, - FLG0_UNK_0x10 = 0x10, - FLG0_DAMAGED = 0x8, - FLG0_UNK_0x4 = 0x4, - FLG0_IN_AIR = 0x2, - FLG0_STATIONARY = 0x1, - - FLG0_FLY = FLG0_TIGHT_ROPE | FLG0_SWING_ROPE | FLG0_IN_WATER | FLG0_ON_LADDDER | FLG0_ON_VINES | - FLG0_HANGING_ITEM | FLG0_HANGING_LEDGE | FLG0_UNK_0x10 | FLG0_IN_AIR, - }; - - enum dAcPy_RidingActor { - RIDING_NONE = 0, - RIDING_TRUCK_MINECART = 1, - RIDING_LOFTWING = 2, - RIDING_BOAT = 3, - }; - dAcPy_c(); virtual ~dAcPy_c(); - void setTransform(const mMtx_c &mtx, UNKWORD, UNKWORD, UNKWORD); - void setPosYRot(const mVec3_c &pos, mAng rot, UNKWORD, UNKWORD, UNKWORD); // argument is always false in existing code, true doesn't seem to make a difference void bonk(bool unk = false); bool fn_80202D90(bool); - /* vt 0x080 */ virtual UNKWORD IfCurrentActionToActor(dAcBase_c *ac, UNKWORD); - /* vt 0x084 */ virtual void vt_0x084(dAcBase_c *ac, UNKWORD); - /* vt 0x088 */ virtual void set0x439F(dAcBase_c *ac, UNKWORD); - /* vt 0x08C */ virtual void set0x43DE(); - /* vt 0x090 */ virtual f32 vt_0x090(); - /* vt 0x094 */ virtual void relatedToUsingItem0x11(); - /* vt 0x098 */ virtual void setPosRot(const mVec3_c &pos, const mAng3_c &ang, UNKWORD, UNKWORD, UNKWORD); - /* vt 0x09C */ virtual void isLiftingObject(); - /* vt 0x0A0 */ virtual void isThrowingOrRollingItem(); - /* vt 0x0A4 */ virtual void canThrowObject(); - /* vt 0x0A8 */ virtual void canRollObject(); - /* vt 0x0AC */ virtual void vt_0x0AC(); - /* vt 0x0B0 */ virtual void isCarryingBomb(); - /* vt 0x0B4 */ virtual void isPullingOutBomb(); - /* vt 0x0B8 */ virtual void isUsingHarp(); - /* vt 0x0BC */ virtual void isFinishedPlayingHarp(); - /* vt 0x0C0 */ virtual void isUsingWhip(); - /* vt 0x0C4 */ virtual void anotherThingWithWhip(); - /* vt 0x0C8 */ virtual void somethingWithWHip(); - /* vt 0x0CC */ virtual void isWhipOnObject(); - /* vt 0x0D0 */ virtual void tryGrabItemWithWhip(); - /* vt 0x0D4 */ virtual void someFloatWithWhip(); - /* vt 0x0D8 */ virtual void getItemFromClawshotsMaybe(); - /* vt 0x0DC */ virtual void vt_0x0DC(dAcBase_c *, mVec3_c &); - /* vt 0x0E0 */ virtual void isUsingBomb(); - /* vt 0x0E4 */ virtual mVec3_c &getCenterTranslation() const; - /* vt 0x0E8 */ virtual void vt_0x0E8(); - /* vt 0x0EC */ virtual void vt_0x0EC(); - /* vt 0x0F0 */ virtual void vt_0x0F0(); - /* vt 0x0F4 */ virtual void vt_0x0F4(); - /* vt 0x0F8 */ virtual void vt_0x0F8(); - /* vt 0x0FC */ virtual void vt_0x0FC(); - /* vt 0x100 */ virtual void isCrawling(); - /* vt 0x104 */ virtual void isUsingSword(); - /* vt 0x108 */ virtual void isUsingMitts(); - /* vt 0x10C */ virtual void isUsingShield(); - /* vt 0x110 */ virtual void getTargetedActor1(); - /* vt 0x114 */ virtual void somethingWithCarriedActorFlags(); - /* vt 0x118 */ virtual dAcObjBase_c *getCurrentCarriedActor(); - /* vt 0x11C */ virtual void checkBeetleActorReferences(); - /* vt 0x120 */ virtual void getBeetleActorReferencesSize(); - /* vt 0x124 */ virtual void vt_0x124(); - /* vt 0x128 */ virtual void vt_0x128(); - /* vt 0x12C */ virtual void vt_0x12C(); - /* vt 0x130 */ virtual void isBurning(); - /* vt 0x134 */ virtual void isShocked(); - /* vt 0x138 */ virtual void isCursed(); - /* vt 0x13C */ virtual void isSmelly(); - /* vt 0x140 */ virtual void store2Floats0x4500(); - /* vt 0x144 */ virtual void setActorLinkToSomething(); - /* vt 0x148 */ virtual void applyDamageWithIFrames(); - /* vt 0x14C */ virtual void vt_0x14C(); - /* vt 0x150 */ virtual bool hasLessThanQuarterHealth(bool); - /* vt 0x154 */ virtual void vt_0x154(); - /* vt 0x158 */ virtual void vt_0x158(); - /* vt 0x15C */ virtual void vt_0x15C(); - /* vt 0x160 */ virtual void vt_0x160(); - /* vt 0x164 */ virtual void vt_0x164(); - /* vt 0x168 */ virtual f32 getCurrentAnimFrame() const; - /* vt 0x16C */ virtual void getFloatIfStruggling(); - /* vt 0x170 */ virtual void isSwimming(); - /* vt 0x174 */ virtual void isGustBellowsBeingBlown(); - /* vt 0x178 */ virtual void getPointedAngle(); - /* vt 0x17C */ virtual void getBellowsPosOrOtherVec3F(); - /* vt 0x180 */ virtual void setWindMillPos(); - /* vt 0x184 */ virtual void isOffeset0x435eEqual0x20(); - /* vt 0x188 */ virtual void getVec3F_Z(); - /* vt 0x18C */ virtual void getBodyMtx(mMtx_c *out_mtx, int boneIdx); - /* vt 0x190 */ virtual void getSheathModelMatrix(); - /* vt 0x194 */ virtual void getSwordModelMatrix(); - /* vt 0x198 */ virtual void vt_0x198(); - /* vt 0x19C */ virtual void vt_0x19C(); - /* vt 0x1A0 */ virtual void vt_0x1A0(); - /* vt 0x1A4 */ virtual void vt_0x1A4(); - /* vt 0x1A8 */ virtual void vt_0x1A8(); - /* vt 0x1AC */ virtual void vt_0x1AC(); - /* vt 0x1B0 */ virtual bool isItemFairyFromBugnet(); - /* vt 0x1B4 */ virtual void isByte0x434eEqual7(); - /* vt 0x1B8 */ virtual void canHandleGameOver(); - /* vt 0x1BC */ virtual void vt_0x1BC(); - /* vt 0x1C0 */ virtual void *vt_0x1C0() const; - /* vt 0x1C4 */ virtual void getActorInActorRef1(); - /* vt 0x1C8 */ virtual void doesActorRef1Exist(); - /* vt 0x1CC */ virtual void unlinkActorRef1(); - /* vt 0x1D0 */ virtual void ifHasHealthAndSomethingElse(); - /* vt 0x1D4 */ virtual void isChargingWeapon(); - /* vt 0x1D8 */ virtual void isWeaponChargedFully(); - /* vt 0x1DC */ virtual void didShootBow(); - /* vt 0x1E0 */ virtual void vt_0x1E0(); - /* vt 0x1E4 */ virtual void checkRefArrayAtIndex(); - /* vt 0x1E8 */ virtual void sizeOfActorRefs_16(); - /* vt 0x1EC */ virtual void vt_0x1EC(); - /* vt 0x1F0 */ virtual void vt_0x1F0(); - /* vt 0x1F4 */ virtual void didDiveSky_and_other(); - /* vt 0x1F8 */ virtual void didDiveSky_andNotOther(); - /* vt 0x1FC */ virtual void isLandingFromSailcloth(); - /* vt 0x200 */ virtual void isBeingPulledFromRightClawshot(); - /* vt 0x204 */ virtual void isBeingPulledByLeftClawshot(); - /* vt 0x208 */ virtual void isDashing(); - /* vt 0x20C */ virtual void isSliding(); - /* vt 0x210 */ virtual void isSlding2(); - /* vt 0x214 */ virtual void vt_0x214(); - /* vt 0x218 */ virtual void isinMpPosePower(); - /* vt 0x21C */ virtual void isPushingBlock(); - /* vt 0x220 */ virtual void getRidingActor(); - /* vt 0x224 */ virtual bool isRidingBall() const; - /* vt 0x228 */ virtual dAcObjBase_c *getRidingMinecartActor() const; - /* vt 0x22C */ virtual void getTurnableSwitch(); - /* vt 0x230 */ virtual void vt_0x230(); - /* vt 0x234 */ virtual void vt_0x234(); - /* vt 0x238 */ virtual void setVecIfInFreeFall(); - /* vt 0x23C */ virtual void setActorRef10(); - /* vt 0x240 */ virtual void vt_0x240(); - /* vt 0x244 */ virtual void vt_0x244(); - /* vt 0x248 */ virtual void vt_0x248(); - /* vt 0x24C */ virtual void vt_0x24C(); - /* vt 0x250 */ virtual void vt_0x250(); - /* vt 0x254 */ virtual void isAttackingUnderground(); - /* vt 0x258 */ virtual mAng vt_0x258() const; - /* vt 0x25C */ virtual void vt_0x25C(); - /* vt 0x260 */ virtual f32 vt_0x260() const; - /* vt 0x264 */ virtual void getGroosenatorIfIn(); - /* vt 0x268 */ virtual void setActorRef11(); - /* vt 0x26C */ virtual void doesGameOver(); - /* vt 0x270 */ virtual void triggerExitRelated(); - /* vt 0x274 */ virtual void vt_0x274(); - /* vt 0x278 */ virtual void vt_0x278(); - /* vt 0x27C */ virtual void getSwordPos(); - /* vt 0x280 */ virtual void vt_0x280(); - /* vt 0x284 */ virtual bool isUsingBugnet() const; - /* vt 0x288 */ virtual const mVec3_c &getBugNetPos() const; - /* vt 0x28C */ virtual bool isUsingBugnet1(); - /* vt 0x290 */ virtual void bugNetCollectTreasure(u32 itemId); - /* vt 0x294 */ virtual void somethingSwitchDials(); - /* vt 0x298 */ virtual void vt_0x298(); - /* vt 0x29C */ virtual void getDieLargeDamageDir(); - /* vt 0x2A0 */ virtual void doGameOver(); - /* vt 0x2A4 */ virtual void isRunningUpWall(); - /* vt 0x2A8 */ virtual void lookTowardItem(); - /* vt 0x2AC */ virtual void vt_0x2AC(); - /* vt 0x2B0 */ virtual void vt_0x2B0(); - /* vt 0x2B4 */ virtual void triggerMoveEventMaybe(); - /* vt 0x2B8 */ virtual void setActorRef9(); - /* vt 0x2BC */ virtual void unlinkActorRef9(); - /* vt 0x2C0 */ virtual void vt_0x2C0(); - /* vt 0x2C4 */ virtual void vt_0x2C4(); - /* vt 0x2C8 */ virtual bool isRecovering() const; - /* vt 0x2CC */ virtual void isDrinkingPotion(); - /* vt 0x2D0 */ virtual void isHealingShield(); - /* vt 0x2D4 */ virtual void isBottleOut(); - /* vt 0x2D8 */ virtual void isUsingBottle(); - /* vt 0x2DC */ virtual void getShieldRegenProgressMaybe(); - /* vt 0x2E0 */ virtual void vt_0x2E0(); - /* vt 0x2E4 */ virtual void someDivingHrabbingStuff(); - /* vt 0x2E8 */ virtual void vt_0x2E8(); - /* vt 0x2EC */ virtual void isOnClawTargetMaybe(); - /* vt 0x2F0 */ virtual void isMPPose(); - /* vt 0x2F4 */ virtual void isOnTightRope(); - /* vt 0x2F8 */ virtual void isOnVines(); - /* vt 0x2FC */ virtual void alwaysRet0(); - /* vt 0x300 */ virtual void canBlockAttack(); - /* vt 0x304 */ virtual void vt_0x304(); - /* vt 0x308 */ virtual void vt_0x308(); - /* vt 0x30C */ virtual void vt_0x30C(); + /* overrides omitted */ /* vt 0x310 */ virtual void vt_0x310(); /* vt 0x314 */ virtual void vt_0x314(); /* vt 0x318 */ virtual void vt_0x318(); - /* 0x330 */ u8 unk_0x330[0x339 - 0x330]; - /* 0x339 */ u8 mRidingActorType; - /* 0x33A */ u8 unk_0x33A[0x340 - 0x33A]; - /* 0x340 */ u32 someFlags_0x340; - /* 0x344 */ u8 unk_0x344[0x348 - 0x344]; - /* 0x348 */ u32 mSwordAndMoreStates; - /* 0x34C */ u8 unk_0x34C[0x350 - 0x34C]; - /* 0x350 */ u32 someFlags_0x350; - u8 UNK_0x354[0x35C - 0x354]; - /* 0x35C */ u32 mForceOrPreventActionFlags; - /* 0x360 */ UNKWORD field_0x360; - /* 0x364 */ u32 mActionFlags; - /* 0x368 */ u32 mActionFlagsCont; - /* 0x36C */ int mCurrentAction; // TODO (Document Enum) - /* 0x370 */ u8 _370[0x3C8 - 0x370]; - /* 0x3C8 */ nw4r::g3d::ResFile mSwordRes; - /* 0x3CC */ u8 _0x3CC[0x5B4 - 0x3CC]; - /* 0x5B4 */ m3d::anmMatClr_c mAnmMatClr; - /* 0x5E0 */ u8 _0x5E0[0x4564 - 0x5E0]; +protected: + /* 0x137C */ u8 _0x137C[0x4564 - 0x137C]; /* 0x4564 */ f32 field_0x4564; +public: f32 getField_0x4564() const { return field_0x4564; } - f32 getAnmMatClrFrame() const { - return mAnmMatClr.getFrame(0); + f32 getSwordAnmFrame() const { + return mSwordAnmMatClr.getFrame(0); } - inline bool checkFlags0x340(u32 mask) const { - return (someFlags_0x340 & mask) != 0; - } - - inline bool checkFlags0x350(u32 mask) const { - return (someFlags_0x350 & mask) != 0; - } - - bool CheckPlayerFly() const { - return mActionFlags & FLG0_FLY; - } - - int getCurrentAction() const { - return mCurrentAction; - } - - bool checkCurrentAction(int action) const { - return mCurrentAction == action; - } - - bool isSittingOrUnk0xAE() const { - return mCurrentAction == 0xAD || mCurrentAction == 0xAE; - } - - inline bool checkSwordAndMoreStates(u32 mask) const { - return (mSwordAndMoreStates & mask) != 0; - } - - inline bool checkActionFlags(u32 mask) const { - return (mActionFlags & mask) != 0; - } - inline bool checkActionFlagsCont(u32 mask) const { - return (mActionFlagsCont & mask) != 0; - } - - inline u8 getRidingActorType() const { - return mRidingActorType; + nw4r::g3d::ResFile getSwordResFile() const { + return mSwordRes; } inline bool hasvt_0x1C0() const { @@ -321,8 +52,6 @@ public: return FileManager::GetInstance()->hasStaminaPotionPlus() && getRidingActorType() != RIDING_BOAT; } - static nw4r::g3d::ResFile getItemResFile(const char *name, mAllocator_c &allocator); - static const dAcPy_c *GetLink() { return LINK; } @@ -331,6 +60,8 @@ public: return LINK2; } + void onShieldUpdate(); + static dAcPy_c *LINK; static dAcPy_c *LINK2; @@ -338,15 +69,18 @@ public: static s32 getCurrentSlingshotType(); static s32 getCurrentBeetleType(); static s32 getCurrentBugNetType(); - static s32 getCurrentlyEquippedShieldType(); - - static bool isInBambooCuttingMinigame(); + static bool isInBambooCuttingMinigame() { + return MinigameManager::isInMinigameState(MinigameManager::BAMBOO_CUTTING); + } static bool isItemRestrictedByBokoBase(ITEM_ID item); static u32 getCurrentHealthCapacity(); bool canDowseProbably() const; + + mAng fn_8023B520() const; + mAng fn_8023B590() const; }; #endif diff --git a/include/d/col/cc/d_cc_s.h b/include/d/col/cc/d_cc_s.h index bca37b65..54f53be1 100644 --- a/include/d/col/cc/d_cc_s.h +++ b/include/d/col/cc/d_cc_s.h @@ -38,6 +38,10 @@ public: // This is a remnant of cCcS, which dCcS::Ct calls. Idk the correct layout void Ct_cCcS(); + dCcMassS_Mng &GetMassMng() { + return mMassMng; + } + void Ct(); void Dt(); diff --git a/include/d/d_player_act.h b/include/d/d_player_act.h new file mode 100644 index 00000000..aee87035 --- /dev/null +++ b/include/d/d_player_act.h @@ -0,0 +1,640 @@ +#ifndef D_A_PLAYER_ACT_H +#define D_A_PLAYER_ACT_H + +#include "d/d_player_base.h" + +class dAcEnBase_c; + +// Does this one have a vtable? +// Name unknown +class daPlayerActBase_c : public daPlBase_c { +public: + daPlayerActBase_c() : field_0x334(120.0f), mCurrentAction(187) {} + virtual ~daPlayerActBase_c() {} + + int preExecute() override; + void postExecute(MAIN_STATE_e state) override; + + /* vt 0x080 */ virtual UNKWORD IfCurrentActionToActor(dAcBase_c *ac, UNKWORD) { + return 0; + } + /* vt 0x084 */ virtual UNKWORD vt_0x084(dAcBase_c *ac, UNKWORD) { + return 0; + } + /* vt 0x088 */ virtual void set0x439F(dAcBase_c *ac, UNKWORD) {} + /* vt 0x08C */ virtual void set0x43DE() {} + /* vt 0x090 */ virtual f32 vt_0x090() { + return 0.0f; + } + /* vt 0x094 */ virtual void relatedToUsingItem0x11() { + // TODO obvious hack, not sure + delete (daPlBase_c *)0; + } + /* vt 0x098 */ virtual void setPosRot(const mVec3_c *pos, const mAng3_c *ang, bool force, UNKWORD, UNKWORD); + /* vt 0x09C */ virtual bool isLiftingObject() { + return false; + } + /* vt 0x0A0 */ virtual bool isThrowingOrRollingItem() { + return false; + } + /* vt 0x0A4 */ virtual bool canThrowObject() { + return false; + } + /* vt 0x0A8 */ virtual bool canRollObject() { + return false; + } + /* vt 0x0AC */ virtual UNKWORD vt_0x0AC() { + return 0; + } + /* vt 0x0B0 */ virtual bool isCarryingBomb() { + return false; + } + /* vt 0x0B4 */ virtual bool isPullingOutBomb() { + return false; + } + /* vt 0x0B8 */ virtual bool isUsingHarp() { + return false; + } + /* vt 0x0BC */ virtual void finishPlayingHarp() {} + /* vt 0x0C0 */ virtual bool isUsingWhip() { + return false; + } + /* vt 0x0C4 */ virtual bool anotherThingWithWhip() { + return false; + } + /* vt 0x0C8 */ virtual bool somethingWithWHip() { + return false; + } + /* vt 0x0CC */ virtual bool isWhipOnObject() { + return false; + } + /* vt 0x0D0 */ virtual bool tryGrabItemWithWhip() { + return false; + } + /* vt 0x0D4 */ virtual f32 someFloatWithWhip() { + return 0.0f; + } + /* vt 0x0D8 */ virtual UNKWORD getItemFromClawshotsMaybe() { + return 0; + } + /* vt 0x0DC */ virtual UNKWORD vt_0x0DC(dAcBase_c *, mVec3_c &) { + return 0; + } + /* vt 0x0E0 */ virtual bool isUsingBomb() { + return false; + } + /* vt 0x0E4 */ virtual const mVec3_c &getCenterTranslation() const { + // unused; overridden by daPlayerModelBase_c + return mVec3_c::Zero; + } + /* vt 0x0E8 */ virtual const mVec3_c &vt_0x0E8() const { + // unused; overridden by daPlayerModelBase_c + return mVec3_c::Zero; + } + /* vt 0x0EC */ virtual const mVec3_c &vt_0x0EC() const { + // unused; overridden by daPlayerModelBase_c + return mVec3_c::Zero; + } + /* vt 0x0F0 */ virtual const mVec3_c &vt_0x0F0() const { + // unused; overridden by daPlayerModelBase_c + return mVec3_c::Zero; + } + /* vt 0x0F4 */ virtual const mVec3_c &vt_0x0F4() const { + // unused; overridden by daPlayerModelBase_c + return mVec3_c::Zero; + } + /* vt 0x0F8 */ virtual mAng vt_0x0F8() { + return 0; + } + /* vt 0x0FC */ virtual mAng vt_0x0FC() { + return 0; + } + /* vt 0x100 */ virtual bool isCrawling() { + return false; + } + /* vt 0x104 */ virtual bool isUsingSword() { + return false; + } + /* vt 0x108 */ virtual bool isUsingMitts() { + return false; + } + /* vt 0x10C */ virtual bool isUsingShield() { + return false; + } + /* vt 0x110 */ virtual dAcEnBase_c *getTargetedActor1() const { + return nullptr; + } + /* vt 0x114 */ virtual void somethingWithCarriedActorFlags() { + // unused; overridden by daPlayerModelBase_c + } + /* vt 0x118 */ virtual dAcObjBase_c *getCurrentCarriedActor() { + // unused; overridden by daPlayerModelBase_c + return nullptr; + } + /* vt 0x11C */ virtual UNKWORD checkBeetleActorReferences() { + return 0; + } + /* vt 0x120 */ virtual UNKWORD getBeetleActorReferencesSize() { + return 0; + } + /* vt 0x124 */ virtual UNKWORD vt_0x124() { + return 0; + } + /* vt 0x128 */ virtual UNKWORD vt_0x128() { + return 0; + } + /* vt 0x12C */ virtual UNKWORD vt_0x12C() { + return 0; + } + /* vt 0x130 */ virtual bool isBurning() { + return 0; + } + /* vt 0x134 */ virtual bool isShocked() { + return 0; + } + /* vt 0x138 */ virtual bool isCursed() { + return 0; + } + /* vt 0x13C */ virtual bool isSmelly() { + return 0; + } + /* vt 0x140 */ virtual void store2Floats0x4500() {} + /* vt 0x144 */ virtual bool setActorLinkToSomething() { + return true; + } + /* vt 0x148 */ virtual void applyDamageWithIFrames() {} + /* vt 0x14C */ virtual void vt_0x14C() {} + /* vt 0x150 */ virtual bool hasLessThanQuarterHealth(bool) { + return false; + } + /* vt 0x154 */ virtual UNKWORD vt_0x154() { + return 0; + } + /* vt 0x158 */ virtual UNKWORD vt_0x158() { + return 0; + } + /* vt 0x15C */ virtual UNKWORD vt_0x15C() { + return 0; + } + /* vt 0x160 */ virtual f32 getYPos() { + return position.y; + } + /* vt 0x164 */ virtual f32 vt_0x164() { + return position.y; + } + /* vt 0x168 */ virtual f32 getCurrentAnimFrame() const { + return 0.0f; + } + /* vt 0x16C */ virtual f32 getFloatIfStruggling() { + return 0.0f; + } + /* vt 0x170 */ virtual bool isSwimming() { + return false; + } + /* vt 0x174 */ virtual bool isGustBellowsBeingBlown() { + return false; + } + /* vt 0x178 */ virtual const mAng3_c &getPointedAngle() const { + return rotation; + } + /* vt 0x17C */ virtual const mVec3_c &getBellowsPosOrOtherVec3F() const { + return position; + } + /* vt 0x180 */ virtual void setWindMillPos() {} + /* vt 0x184 */ virtual bool isOffeset0x435eEqual0x20() { + return 0; + } + /* vt 0x188 */ virtual const mVec3_c &getVec3F_Z() const { + return mVec3_c::Ez; + } + /* vt 0x18C */ virtual void getBodyMtx(mMtx_c *out_mtx, int boneIdx) { + // unused; overridden by daPlayerModelBase_c + } + /* vt 0x190 */ virtual void getSheathModelMatrix(mMtx_c *out_mtx) { + // unused; overridden by daPlayerModelBase_c + } + /* vt 0x194 */ virtual void getSwordModelMatrix(mMtx_c *out_mtx) { + // unused; overridden by daPlayerModelBase_c + } + /* vt 0x198 */ virtual mAng vt_0x198() { + // unused; overridden by daPlayerModelBase_c + return 0; + } + /* vt 0x19C */ virtual mAng vt_0x19C() { + // unused; overridden by daPlayerModelBase_c + return 0; + } + /* vt 0x1A0 */ virtual f32 vt_0x1A0() { + return 0.0f; + } + /* vt 0x1A4 */ virtual const mVec3_c &vt_0x1A4() { + return poscopy3; + } + /* vt 0x1A8 */ virtual f32 vt_0x1A8() { + return yoffset; + } + /* vt 0x1AC */ virtual f32 vt_0x1AC() { + return 0.0f; + } + /* vt 0x1B0 */ virtual bool isItemFairyFromBugnet() { + return false; + } + /* vt 0x1B4 */ virtual bool isByte0x434eEqual7() { + return false; + } + /* vt 0x1B8 */ virtual void canHandleGameOver() {} + /* vt 0x1BC */ virtual UNKWORD vt_0x1BC() { + return 0; + } + /* vt 0x1C0 */ virtual void *vt_0x1C0() const { + return nullptr; + } + /* vt 0x1C4 */ virtual UNKWORD getActorInActorRef1() { + return 0; + } + /* vt 0x1C8 */ virtual bool doesActorRef1Exist() { + return false; + } + /* vt 0x1CC */ virtual void unlinkActorRef1() {} + /* vt 0x1D0 */ virtual bool ifHasHealthAndSomethingElse() { + return false; + } + /* vt 0x1D4 */ virtual bool isChargingWeapon() { + return false; + } + /* vt 0x1D8 */ virtual bool isWeaponChargedFully() { + return false; + } + /* vt 0x1DC */ virtual bool didShootBow() { + return true; + } + /* vt 0x1E0 */ virtual UNKWORD vt_0x1E0() { + return 0; + } + /* vt 0x1E4 */ virtual dAcObjBase_c *checkRefArrayAtIndex() { + return nullptr; + } + /* vt 0x1E8 */ virtual s32 sizeOfActorRefs_16() { + return 0; + } + /* vt 0x1EC */ virtual bool vt_0x1EC() { + return true; + } + /* vt 0x1F0 */ virtual UNKWORD vt_0x1F0() { + return 0; + } + /* vt 0x1F4 */ virtual UNKWORD didDiveSky_and_other() { + return 0; + } + /* vt 0x1F8 */ virtual UNKWORD didDiveSky_andNotOther() { + return 0; + } + /* vt 0x1FC */ virtual UNKWORD isLandingFromSailcloth() { + return 0; + } + /* vt 0x200 */ virtual bool isBeingPulledFromRightClawshot() { + return false; + } + /* vt 0x204 */ virtual bool isBeingPulledByLeftClawshot() { + return false; + } + /* vt 0x208 */ virtual bool isDashing() { + return false; + } + /* vt 0x20C */ virtual bool isSliding() { + return false; + } + /* vt 0x210 */ virtual bool isSlding2() { + return false; + } + /* vt 0x214 */ virtual UNKWORD vt_0x214() { + return 0; + } + /* vt 0x218 */ virtual bool isinMpPosePower() { + return false; + } + /* vt 0x21C */ virtual bool isPushingBlock() { + return false; + } + /* vt 0x220 */ virtual dAcObjBase_c *getRidingActor() { + return nullptr; + } + /* vt 0x224 */ virtual bool isRidingBall() const { + return false; + } + /* vt 0x228 */ virtual dAcObjBase_c *getRidingMinecartActor() const { + return 0; + } + /* vt 0x22C */ virtual UNKWORD getTurnableSwitch() { + return 0; + } + /* vt 0x230 */ virtual UNKWORD vt_0x230() { + return 0; + } + /* vt 0x234 */ virtual UNKWORD vt_0x234() { + return 0; + } + /* vt 0x238 */ virtual void setVecIfInFreeFall() {} + /* vt 0x23C */ virtual void setActorRef10() {} + /* vt 0x240 */ virtual f32 vt_0x240() { + return 0.0f; + } + /* vt 0x244 */ virtual UNKWORD vt_0x244() { + return 0; + } + /* vt 0x248 */ virtual UNKWORD vt_0x248() { + return 0; + } + /* vt 0x24C */ virtual UNKWORD vt_0x24C() { + return 0; + } + /* vt 0x250 */ virtual f32 vt_0x250() { + return 1.0f; + } + /* vt 0x254 */ virtual bool isAttackingUnderground() { + return false; + } + /* vt 0x258 */ virtual mAng vt_0x258() const { + return 0; + } + /* vt 0x25C */ virtual UNKWORD vt_0x25C() { + return 0; + } + /* vt 0x260 */ virtual f32 vt_0x260() const { + return 1.0f; + } + /* vt 0x264 */ virtual UNKWORD getGroosenatorIfIn() { + return 0; + } + /* vt 0x268 */ virtual void setActorRef11() {} + /* vt 0x26C */ virtual bool doesGameOver() { + return true; + } + /* vt 0x270 */ virtual void triggerExitRelated() {} + /* vt 0x274 */ virtual mAng vt_0x274() { + return rotation.y; + } + /* vt 0x278 */ virtual const mVec3_c &vt_0x278() const { + return position; + } + /* vt 0x27C */ virtual const mVec3_c &getSwordPos() const { + return position; + } + /* vt 0x280 */ virtual UNKWORD vt_0x280() { + return 0; + } + /* vt 0x284 */ virtual bool isUsingBugnet() const { + return false; + } + /* vt 0x288 */ virtual const mVec3_c &getBugNetPos() const { + return position; + } + /* vt 0x28C */ virtual bool isUsingBugnet1() { + return false; + } + /* vt 0x290 */ virtual UNKWORD bugNetCollectTreasure(u32 itemId) { + return 0; + } + /* vt 0x294 */ virtual mAng somethingSwitchDials() { + return 0; + } + /* vt 0x298 */ virtual UNKWORD vt_0x298() { + return 0; + } + /* vt 0x29C */ virtual UNKWORD getDieLargeDamageDir() { + return 0; + } + /* vt 0x2A0 */ virtual void doGameOver() {} + /* vt 0x2A4 */ virtual bool isRunningUpWall() { + return false; + } + /* vt 0x2A8 */ virtual void lookTowardItem() {} + /* vt 0x2AC */ virtual void vt_0x2AC() {} + /* vt 0x2B0 */ virtual void vt_0x2B0() {} + /* vt 0x2B4 */ virtual void triggerMoveEventMaybe() {} + /* vt 0x2B8 */ virtual void setActorRef9() {} + /* vt 0x2BC */ virtual void unlinkActorRef9() {} + /* vt 0x2C0 */ virtual bool vt_0x2C0() { + return true; + } + /* vt 0x2C4 */ virtual bool vt_0x2C4() { + return true; + } + /* vt 0x2C8 */ virtual bool isRecovering() const { + return false; + } + /* vt 0x2CC */ virtual bool isDrinkingPotion() { + return false; + } + /* vt 0x2D0 */ virtual bool isHealingShield() { + return false; + } + /* vt 0x2D4 */ virtual bool isBottleOut() { + return false; + } + /* vt 0x2D8 */ virtual bool isUsingBottle() { + return false; + } + /* vt 0x2DC */ virtual f32 getShieldRegenProgressMaybe() { + return 0.0f; + } + + enum dAcPy_RidingActor { + RIDING_NONE = 0, + RIDING_TRUCK_MINECART = 1, + RIDING_LOFTWING = 2, + RIDING_BOAT = 3, + }; + + enum PlayerAttackDirection_e { + ATTACK_NONE = 0, + ATTACK_SWING_LEFT = 1, + ATTACK_SWING_RIGHT = 2, + ATTACK_SWING_DOWN = 3, + ATTACK_SWING_UP = 4, + ATTACK_STAB = 5, + ATTACK_SPIN_RIGHT = 6, + ATTACK_SPIN_LEFT = 7, + ATTACK_SPIN_DOWN = 8, + ATTACK_SPIN_UP = 9, + ATTACK_JUMP_SLASH = 10, + ATTACK_FINAL_BLOW = 11, + }; + + enum ModelUpdateFlags_e { + UPDATE_MODEL_SWORD = 0x20, + UPDATE_MODEL_SHIELD = 0x40, + }; + + enum SwordAndMoreStates_e { + NO_SHIETH = (1 << 0), + POUCH = (1 << 1), + SWORD_AWAY = (1 << 2), + FLASH_RED = (1 << 4), + DEPLETE_STAMINA = (1 << 5), + SPRINTING = (1 << 6), + B_WHEEL_OPEN = (1 << 7), + POUCH_OPEN = (1 << 8), + TRYING_TO_USE_STAMINA_NOT_ABLE = (1 << 9), + PUTTING_AWAY_SAILCLOTH = (1 << 10), + GRAB_LEDGE_FROM_UNDER = (1 << 13), + HOLDING_A_NO_STAMINA_DROP = (1 << 14), + FIRST_PERSON = (1 << 18), + SKYWARD_STRIKE_ACTIVE = (1 << 20), + LIGHTNING_STRIKE_ACTIVE = (1 << 22), + C_MENU_OPEN = (1 << 23), + SHIELD_OUT = (1 << 27), + HOLDING_TARGET = (1 << 28), + ITEM_NEAR_LINK = (1 << 29), + USING_ITEM = (1 << 31), + }; + + // These Flags are named under general guesses. Very likely may need some changes + // Correspond to mActionFlags + enum dAcPy_FLG0 { + FLG0_ON_FOOT = 0x80000000, + FLG0_USE_ITEM_0 = 0x40000000, + FLG0_USE_ITEM_1 = 0x20000000, + FLG0_UNK_GEN_MOVE = 0x10000000, + FLG0_ATTACK_MOVE = 0x8000000, + FLG0_USE_ITEM_2 = 0x4000000, + FLG0_RECOVER_ELEC = 0x2000000, + FLG0_CRAWLING = 0x1000000, + FLG0_TIGHT_ROPE = 0x800000, + FLG0_SWING_ROPE = 0x400000, + FLG0_PUSHPULL = 0x200000, + FLG0_UNK_100000 = 0x100000, + FLG0_UNK_80000 = 0x80000, + FLG0_IN_WATER = 0x40000, + FLG0_ON_LADDDER = 0x20000, + FLG0_ON_VINES = 0x10000, + FLG0_UNK_0x8000 = 0x8000, + FLG0_UNK_0x4000 = 0x4000, + FLG0_INTERATION = 0x2000, + FLG0_BASIC_ACTION = 0x1000, + FLG0_HANGING_ITEM = 0x800, + FLG0_EXTERN_CONTROL = 0x400, + FLG0_ATTACK_RELATED = 0x200, + FLG0_UNK_0x100 = 0x100, + FLG0_UNK_0x80 = 0x80, + FLG0_HANGING_LEDGE = 0x40, + FLG0_UNK_0x20 = 0x20, + FLG0_UNK_0x10 = 0x10, + FLG0_DAMAGED = 0x8, + FLG0_UNK_0x4 = 0x4, + FLG0_IN_AIR = 0x2, + FLG0_STATIONARY = 0x1, + + FLG0_FLY = FLG0_TIGHT_ROPE | FLG0_SWING_ROPE | FLG0_IN_WATER | FLG0_ON_LADDDER | FLG0_ON_VINES | + FLG0_HANGING_ITEM | FLG0_HANGING_LEDGE | FLG0_UNK_0x10 | FLG0_IN_AIR, + }; + + inline bool checkFlags0x340(u32 mask) const { + return (someFlags_0x340 & mask) != 0; + } + + inline void offFlags_0x340(u32 mask) { + someFlags_0x340 &= ~mask; + } + + inline bool checkFlags0x350(u32 mask) const { + return (someFlags_0x350 & mask) != 0; + } + + inline void onFlags_0x360(u32 mask) { + field_0x360 |= mask; + } + + inline void onForceOrPreventActionFlags(u32 mask) { + mForceOrPreventActionFlags |= mask; + } + + inline void onFaceUpdateFlags(u32 mask) { + mFaceUpdateFlags |= mask; + } + + inline void offFaceUpdateFlags(u32 mask) { + mFaceUpdateFlags &= ~mask; + } + + inline bool checkFaceUpdateFlags(u32 mask) const { + return (mFaceUpdateFlags & mask) != 0; + } + + bool CheckPlayerFly() const { + return mActionFlags & FLG0_FLY; + } + + int getCurrentAction() const { + return mCurrentAction; + } + + bool checkCurrentAction(int action) const { + return mCurrentAction == action; + } + + bool isSittingOrUnk0xAE() const { + return mCurrentAction == 0xAD || mCurrentAction == 0xAE; + } + + inline bool checkActionFlags(u32 mask) const { + return (mActionFlags & mask) != 0; + } + inline bool checkActionFlagsCont(u32 mask) const { + return (mActionFlagsCont & mask) != 0; + } + + inline u8 getRidingActorType() const { + return mRidingActorType; + } + + static bool isInEvent(); + bool isAttackingLeft() const; + bool isAttackingRight() const; + bool isAttackingDown() const; + bool isAttackingUp() const; + bool isAttackingStab() const; + bool isAttackingSpinHorizontal() const; + bool isAttackingSpinVertical() const; + void setBonkRelatedAnimFlag(bool b); + void setPosYRot(const mVec3_c &pos, mAng rot, bool force, UNKWORD, UNKWORD); + void setTransform(const mMtx_c &mtx, bool force, UNKWORD, UNKWORD); + bool someTargetedActorCheck() const; + static mAng fn_8005BA90(); + static mAng fn_8005BAA0(); + static void updateCurrentSword(); + + static s32 getCurrentSwordType(); + static const char *getSwordName(s32); + static s32 getCurrentlyEquippedShieldType(); + + static const mColor &getEarringsColor(); + + static mVec3_c sPos1; + static mVec3_c sPos2; + static mAng sRot1; + static mAng sRot2; + static const f32 sPushRelatedConstant; + static u8 sCurrentSword; + +protected: + /* 0x330 */ u8 unk_0x330[0x334 - 0x330]; + /* 0x334 */ f32 field_0x334; + /* 0x338 */ u8 mAttackDirection; + /* 0x339 */ u8 mRidingActorType; + /* 0x33A */ u8 unk_0x33A[0x340 - 0x33A]; + /* 0x340 */ u32 someFlags_0x340; + /* 0x344 */ u32 mFaceUpdateFlags; + /* 0x348 */ u32 mSwordAndMoreStates; + /* 0x34C */ u32 mModelUpdateFlags; + /* 0x350 */ u32 someFlags_0x350; + /* 0x354 */ u32 someFlags_0x354; + /* 0x358 */ u32 someFlags_0x358; + /* 0x35C */ u32 mForceOrPreventActionFlags; + /* 0x360 */ u32 field_0x360; + /* 0x364 */ u32 mActionFlags; + /* 0x368 */ u32 mActionFlagsCont; + /* 0x36C */ int mCurrentAction; // TODO (Document Enum) +}; + +#endif diff --git a/include/d/d_player_base.h b/include/d/d_player_base.h new file mode 100644 index 00000000..314b57c0 --- /dev/null +++ b/include/d/d_player_base.h @@ -0,0 +1,26 @@ +#ifndef D_A_PLAYER_BASE_H +#define D_A_PLAYER_BASE_H + +#include "d/a/obj/d_a_obj_base.h" + +/* + * The inheritance chain goes something like: + * dAcObjBase_c straightfoward + * v + * daPlBase_c only has a dtor, vtable (80533128) pooled into d_a_player at the end + * v + * daPlayerActBase_c has a few strong and many weak functions, vtable stripped + * v + * daPlayerModelBase_c has the actual implementation of many functions, vtable at 8050da00, size 0x310 + * v + * dAcPy_c "ActorLink", vtable at 80532cb0 + */ + +// Vtable at 80533128, no differences to dAcObjBase_c? +// Name unknown, though this name exists in NSMBW +class daPlBase_c : public dAcObjBase_c { +public: + virtual ~daPlBase_c() {} +}; + +#endif diff --git a/include/d/d_player_mdl.h b/include/d/d_player_mdl.h new file mode 100644 index 00000000..c52ab8f6 --- /dev/null +++ b/include/d/d_player_mdl.h @@ -0,0 +1,1024 @@ +#ifndef D_A_PLAYER_MDL_H +#define D_A_PLAYER_MDL_H + +#include "d/col/cc/d_cc_d.h" +#include "d/d_player_act.h" +#include "m/m3d/m_anmchr.h" +#include "m/m3d/m_anmchrblend.h" +#include "m/m3d/m_anmmatclr.h" +#include "m/m3d/m_anmtexpat.h" +#include "m/m3d/m_anmtexsrt.h" +#include "toBeSorted/stage_render_stuff.h" + +struct PlayerAnimation { + /* 0x00 */ const char *animName; + /* 0x04 */ u8 field_0x04; + /* 0x05 */ u8 field_0x05; + /* 0x06 */ u16 mFaceTexPatIdx; + /* 0x08 */ u16 mFaceTexSrtIdx; + /* 0x0A */ u16 mFaceAnmChrIdx; +}; + +class daPlayerModelBase_c; + +class daPlBaseScnObjCallback_c : public dScnCallback_c { +public: + daPlBaseScnObjCallback_c(dAcObjBase_c *b) : dScnCallback_c(b), mpPlayer(b) {} + + /* vt 0x10 */ virtual void + ExecCallback_CALC_MAT(nw4r::g3d::ScnObj::Timing, nw4r::g3d::ScnObj *, u32, void *) override; + + /* 0x18 */ virtual void ExecCallback_DRAW_OPA(nw4r::g3d::ScnObj::Timing, nw4r::g3d::ScnObj *, u32, void *) override; + +private: + /* 0x0C */ dAcObjBase_c *mpPlayer; +}; + +class daPlBaseMdlCallback_c : public m3d::mdl_c::mdlCallback_c { +public: + virtual void ExecCallbackA(nw4r::g3d::ChrAnmResult *, nw4r::g3d::ResMdl, nw4r::g3d::FuncObjCalcWorld *) override; + + void setNodeIds(u16 min, u16 max) { + mNodeIdMin = min; + mNodeIdMax = max; + } + +private: + /* 0x30 */ u16 mNodeIdMin; + /* 0x32 */ u16 mNodeIdMax; +}; + +class daPlBaseMdl_c : public m3d::mdl_c { +public: + daPlBaseMdl_c() : mpSoundData(nullptr) {} + + virtual bool setAnm(m3d::banm_c &anm) override; + virtual void remove() override; + + bool create( + daPlayerModelBase_c *player, nw4r::g3d::ResMdl mdl, mAllocator_c *alloc, u32 bufferOption, u32 nView, u32 *pSize + ); + void setBlendNodeRange(u16, u16, f32); + + nw4r::g3d::ChrAnmResult *getNodeResult(u16 node) { + return mCallback.getNodeResult(node); + } + + void setSoundRelated(u16 id, void *data) { + field_0x5A = id; + mpSoundData = data; + } + + void setField_0x58(u8 val) { + field_0x58 = val; + } + + u16 getField_0x5A() const { + return field_0x5A; + } + + void *getSoundData() const { + return mpSoundData; + } + +private: + /* 0x24 */ daPlBaseMdlCallback_c mCallback; + /* 0x58 */ u8 field_0x58; + /* 0x5A */ u16 field_0x5A; + /* 0x5C */ void *mpSoundData; +}; + +class daPlBaseMainCallback_c : public m3d::callback_c { +public: + virtual void timingA(u32, nw4r::g3d::ChrAnmResult *, nw4r::g3d::ResMdl) override; + virtual void timingB(u32, nw4r::g3d::WorldMtxManip *, nw4r::g3d::ResMdl) override; + virtual void timingC(nw4r::math::MTX34 *, nw4r::g3d::ResMdl) override; + + void setPlayer(daPlayerModelBase_c *p) { + mpPlayer = p; + } + +private: + daPlayerModelBase_c *mpPlayer; +}; + +class daPlBaseAnmChr_c : public m3d::anmChr_c { +public: + daPlBaseAnmChr_c() : field_0x35(0), field_0x36(0) {} + + void play() override; + bool isFinished(); + + void setField_0x35(u8 value) { + field_0x35 = value; + } + +private: + /* 0x35 */ u8 field_0x35; + /* 0x36 */ u8 field_0x36; +}; + +class daPlBaseHandsCallback_c : public nw4r::g3d::ICalcWorldCallback { +public: + virtual void ExecCallbackC( + nw4r::math::MTX34 *pMtxArray, nw4r::g3d::ResMdl mdl, + nw4r::g3d::FuncObjCalcWorld *pFuncObj + ) override; // at 0x14 + + void setPlayer(daPlayerModelBase_c *p) { + mpPlayer = p; + } + +private: + /* 0x04 */ daPlayerModelBase_c *mpPlayer; +}; + +class daPlBaseHeadCallback_c : public m3d::callback_c { +public: + virtual void timingB(u32, nw4r::g3d::WorldMtxManip *, nw4r::g3d::ResMdl) override; + + void setPlayer(daPlayerModelBase_c *p) { + mpPlayer = p; + } + +private: + daPlayerModelBase_c *mpPlayer; +}; + +// Vtable at 8050da00, dtor reveals two superclasses +// until dAcObjBase_c. Name unknown +class daPlayerModelBase_c : public daPlayerActBase_c { +public: + daPlayerModelBase_c() + : mSwordRes(nullptr), + mAlinkRes(nullptr), + mPlCommonAnimeRes(nullptr), + mPlCommonSoundRes(nullptr), + mCurrentRes(nullptr), + mAlink2Res(nullptr), + mScnObjCallback(this), + mScnCallback1(this), + mScnCallback2(this), + mScnCallback3(this), + mScnCallback4(this), + mScnCallback5(this) {} + virtual ~daPlayerModelBase_c() {} + + enum TunicType_e { + TUNIC_0, + TUNIC_1, + TUNIC_SILENT, + }; + + enum PlayerMainModelFace_e { + PLAYER_FACE_DEFAULT = 0, + PLAYER_FACEMABA01 = 1, + PLAYER_FACE_M = 2, + PLAYER_FACE_HA = 3, + PLAYER_FACE_CUT = 4, + PLAYER_FACE_CUTAROUND = 5, + PLAYER_FACE_DAMAGE = 6, + PLAYER_FACE_DAMAGELARGE = 7, + PLAYER_FACE_DIE = 8, + PLAYER_FACE_DIELARGEDAMAGE = 9, + PLAYER_FACE_DIEMAGMA = 10, + PLAYER_FACE_PAIN = 11, + PLAYER_FACE_WA = 12, + PLAYER_FACE_DRINKST = 13, + PLAYER_FACE_DRINK = 14, + PLAYER_FACE_DRINKED = 15, + PLAYER_FACE_BREATH = 16, + PLAYER_FACE_CLOSE = 17, + PLAYER_FACE_ENTRANCE = 18, + PLAYER_FACE_BINOUT = 19, + PLAYER_FACE_GETBIGWAIT = 20, + PLAYER_FACE_GETAWAITNICE = 21, + PLAYER_FACE_WAITLOOKROUND = 22, + PLAYER_FACE_DANGER = 23, + PLAYER_FACE_BINSHIELD = 24, + PLAYER_FACE_SWIMDIEA = 25, + PLAYER_FACE_WAITSERVICEA = 26, + PLAYER_FACE_WAITSERVICEHOTA = 27, + PLAYER_FACE_BOXOP = 28, + PLAYER_FACE_NOTICE = 29, + PLAYER_FACE_SWIMP = 30, + PLAYER_FACE_BEDSLEEP = 31, + PLAYER_FACE_BEDAWAKE = 32, + PLAYER_FACE_SWORDPULLST = 33, + PLAYER_FACE_SWORDPULLWAIT = 34, + PLAYER_FACE_SWORDPULL = 35, + PLAYER_FACE_SWORDSIRENST = 36, + PLAYER_FACE_SWORDSIRENRAISE = 37, + PLAYER_FACE_SWORDSIRENSTICK = 38, + PLAYER_FACE_SWORDSIRENAFTER = 39, + PLAYER_FACE_BIRD_REACH = 40, + PLAYER_FACE_BIRD_GETWAIT = 41, + PLAYER_FACE_DIETRUCK = 42, + PLAYER_FACE_BIRD_FESTIVALSTART = 43, + PLAYER_FACE_GETSURPRISE = 44, + PLAYER_FACE_ASURACUT = 45, + PLAYER_FACE_ASURACUTST = 46, + PLAYER_FACE_ASURACUTED = 47, + PLAYER_FACE_CANNONWAIT = 48, + PLAYER_FACE_KRAKENAPPEARANCE = 49, + PLAYER_FACE_GETFLOWER = 50, + PLAYER_FACE_HARP = 51, + PLAYER_FACE_SITWAITSERVICEA = 52, + PLAYER_FACE_LIGHTNING = 53, + PLAYER_FACE_LASTATTACK = 54, + PLAYER_FACE_BIRD_CALL = 55, + PLAYER_FACE_NONE = 56, + + PLAYER_FACE_MAX = 57, + }; + + enum PlayerMainAnim_e { + PLAYER_ANIM_ATRFW = 0, + PLAYER_ANIM_ATRFW_R = 1, + PLAYER_ANIM_ATRFD = 2, + PLAYER_ANIM_ATRFD_R = 3, + PLAYER_ANIM_ATRBW = 4, + PLAYER_ANIM_ATRBW_R = 5, + PLAYER_ANIM_ATRBD = 6, + PLAYER_ANIM_ATRBD_R = 7, + PLAYER_ANIM_ATRSWL = 8, + PLAYER_ANIM_ATRSDL = 9, + PLAYER_ANIM_ATRSWR = 10, + PLAYER_ANIM_ATRSDR = 11, + PLAYER_ANIM_ATSWL = 12, + PLAYER_ANIM_ATSDL = 13, + PLAYER_ANIM_ATSWR = 14, + PLAYER_ANIM_ATSDR = 15, + PLAYER_ANIM_ATSWL_RIGHT = 16, + PLAYER_ANIM_ATSDL_RIGHT = 17, + PLAYER_ANIM_ATL = 18, + PLAYER_ANIM_ATR = 19, + PLAYER_ANIM_DASHA = 20, + PLAYER_ANIM_DASHS = 21, + PLAYER_ANIM_ATRBWH = 22, + PLAYER_ANIM_ATBW = 23, + PLAYER_ANIM_ATBD = 24, + PLAYER_ANIM_WALKH = 25, + PLAYER_ANIM_WAITS = 26, + PLAYER_ANIM_WALKS = 27, + PLAYER_ANIM_STEPL = 28, + PLAYER_ANIM_STEPR = 29, + PLAYER_ANIM_ATSJLST = 30, + PLAYER_ANIM_ATSJLED = 31, + PLAYER_ANIM_ATSJRST = 32, + PLAYER_ANIM_ATSJRED = 33, + PLAYER_ANIM_ATSJFST = 34, + PLAYER_ANIM_ATSJFED = 35, + PLAYER_ANIM_ROLLBST = 36, + PLAYER_ANIM_ROLLBED = 37, + PLAYER_ANIM_WAITB = 38, + PLAYER_ANIM_WAITBTOA = 39, + PLAYER_ANIM_SJMPST = 40, + PLAYER_ANIM_SJMPED = 41, + PLAYER_ANIM_ROLLF = 42, + PLAYER_ANIM_ROLLFMIS = 43, + PLAYER_ANIM_JUMPST = 44, + PLAYER_ANIM_JUMPSED = 45, + PLAYER_ANIM_VJMP = 46, + PLAYER_ANIM_VJMPCHA = 47, + PLAYER_ANIM_VJMPCHB = 48, + PLAYER_ANIM_VJMPCL = 49, + PLAYER_ANIM_HANGL = 50, + PLAYER_ANIM_HANGR = 51, + PLAYER_ANIM_HANG = 52, + PLAYER_ANIM_CLIMBHANG = 53, + PLAYER_ANIM_CLIMBSLIDEL = 54, + PLAYER_ANIM_CLIMBSLIDER = 55, + PLAYER_ANIM_CLIMBHANGMISS = 56, + PLAYER_ANIM_CLIMBSTRUGGLE = 57, + PLAYER_ANIM_CLIMBIVYHANG = 58, + PLAYER_ANIM_CLIMBIVYL = 59, + PLAYER_ANIM_CLIMBIVYR = 60, + PLAYER_ANIM_CLIMBIVYL_ST = 61, + PLAYER_ANIM_CLIMBIVYR_ST = 62, + PLAYER_ANIM_CLIMBIVYSLIDEL = 63, + PLAYER_ANIM_CLIMBIVYSLIDER = 64, + PLAYER_ANIM_CLIMBIVYSLANTLU_RD = 65, + PLAYER_ANIM_CLIMBIVYSLIDERU_LD = 66, + PLAYER_ANIM_LADUPST = 67, + PLAYER_ANIM_LADUPEDL = 68, + PLAYER_ANIM_LADUPEDR = 69, + PLAYER_ANIM_LADDWST = 70, + PLAYER_ANIM_LADDWEDL = 71, + PLAYER_ANIM_LADDWEDR = 72, + PLAYER_ANIM_LADRTOL = 73, + PLAYER_ANIM_LADLTOR = 74, + PLAYER_ANIM_LADJUMPUPST = 75, + PLAYER_ANIM_LADJUMPDOWNST = 76, + PLAYER_ANIM_LADJUMPUPED = 77, + PLAYER_ANIM_LADJUMPDOWNED = 78, + PLAYER_ANIM_CUTT = 79, + PLAYER_ANIM_CUTTB = 80, + PLAYER_ANIM_CUTTL = 81, + PLAYER_ANIM_CUTTLB = 82, + PLAYER_ANIM_CUTJST = 83, + PLAYER_ANIM_CUTJED = 84, + PLAYER_ANIM_DAMF = 85, + PLAYER_ANIM_DAMB = 86, + PLAYER_ANIM_DAML = 87, + PLAYER_ANIM_DAMR = 88, + PLAYER_ANIM_DAMAGEMFRONT = 89, + PLAYER_ANIM_DAMAGEMBACK = 90, + PLAYER_ANIM_DAMAGEMLEFT = 91, + PLAYER_ANIM_DAMAGEMRIGHT = 92, + PLAYER_ANIM_DAMFF = 93, + PLAYER_ANIM_DAMFB = 94, + PLAYER_ANIM_DAMFL = 95, + PLAYER_ANIM_DAMFR = 96, + PLAYER_ANIM_DAMFFUP = 97, + PLAYER_ANIM_DAMFBUP = 98, + PLAYER_ANIM_DAMFLUP = 99, + PLAYER_ANIM_DAMFRUP = 100, + PLAYER_ANIM_DAMAGELFRONTSLIDE = 101, + PLAYER_ANIM_DAMAGELBACKSLIDE = 102, + PLAYER_ANIM_DAMAGELLEFTSLIDE = 103, + PLAYER_ANIM_DAMAGELRIGHTSLIDE = 104, + PLAYER_ANIM_DAM = 105, + PLAYER_ANIM_LANDDAMA = 106, + PLAYER_ANIM_LANDDAMAST = 107, + PLAYER_ANIM_CUTST = 108, + PLAYER_ANIM_ATDEFNG = 109, + PLAYER_ANIM_DIE = 110, + PLAYER_ANIM_DIELARGEDAMAGEFRONT = 111, + PLAYER_ANIM_DIELARGEDAMAGEBACK = 112, + PLAYER_ANIM_DIELARGEDAMAGELEFT = 113, + PLAYER_ANIM_DIELARGEDAMAGERIGHT = 114, + PLAYER_ANIM_SWIMWAIT = 115, + PLAYER_ANIM_SWIMINGA = 116, + PLAYER_ANIM_SWIMP = 117, + PLAYER_ANIM_ATSSWL = 118, + PLAYER_ANIM_ATSSWR = 119, + PLAYER_ANIM_ATBSW = 120, + PLAYER_ANIM_SWIMDIVE = 121, + PLAYER_ANIM_SWIMINGST = 122, + PLAYER_ANIM_SWIMINGB = 123, + PLAYER_ANIM_SWIMINGC = 124, + PLAYER_ANIM_SWIMATTACKMISS = 125, + PLAYER_ANIM_DAMSWF = 126, + PLAYER_ANIM_DAMSWB = 127, + PLAYER_ANIM_DAMSWL = 128, + PLAYER_ANIM_DAMSWR = 129, + PLAYER_ANIM_DAMSWW = 130, + PLAYER_ANIM_SWIMDIEA = 131, + PLAYER_ANIM_SWIMDIEP = 132, + PLAYER_ANIM_DIEMAGMA = 133, + PLAYER_ANIM_SLIDEF = 134, + PLAYER_ANIM_SLIDEB = 135, + PLAYER_ANIM_SLIDEFED = 136, + PLAYER_ANIM_SLIDEBED = 137, + PLAYER_ANIM_HSJMPL = 138, + PLAYER_ANIM_HSJMPR = 139, + PLAYER_ANIM_HSSHOOT = 140, + PLAYER_ANIM_HSHANGEDL = 141, + PLAYER_ANIM_HSHANGEDR = 142, + PLAYER_ANIM_HSHANGL = 143, + PLAYER_ANIM_HSHANGR = 144, + PLAYER_ANIM_HSHANGWAITL = 145, + PLAYER_ANIM_HSHANGWAITR = 146, + PLAYER_ANIM_HSHANGSHOOTL = 147, + PLAYER_ANIM_HSHANGSHOOTR = 148, + PLAYER_ANIM_HSWALLEDL = 149, + PLAYER_ANIM_HSWALLEDR = 150, + PLAYER_ANIM_HSWALLL = 151, + PLAYER_ANIM_HSWALLR = 152, + PLAYER_ANIM_HSWALLWAITL = 153, + PLAYER_ANIM_HSWALLWAITR = 154, + PLAYER_ANIM_HSWALLSHOOTL = 155, + PLAYER_ANIM_HSWALLSHOOTR = 156, + PLAYER_ANIM_LIE = 157, + PLAYER_ANIM_LIEF = 158, + PLAYER_ANIM_WAITST = 159, + PLAYER_ANIM_WAITSTRUGGLEDAMAGE = 160, + PLAYER_ANIM_WAITPP = 161, + PLAYER_ANIM_PUSHW = 162, + PLAYER_ANIM_PULLW = 163, + PLAYER_ANIM_JUMPBST = 164, + PLAYER_ANIM_JUMPB = 165, + PLAYER_ANIM_WAITD = 166, + PLAYER_ANIM_WAITATOD = 167, + PLAYER_ANIM_WAITSERVICEA = 168, + PLAYER_ANIM_WAITSERVICEHOTA = 169, + PLAYER_ANIM_DASHUPL = 170, + PLAYER_ANIM_DASHUPR = 171, + PLAYER_ANIM_CLIMBJUMPUST = 172, + PLAYER_ANIM_CLIMBJUMPDST = 173, + PLAYER_ANIM_CLIMBJUMPLST = 174, + PLAYER_ANIM_CLIMBJUMPRST = 175, + PLAYER_ANIM_CLIMBJUMPUED = 176, + PLAYER_ANIM_CLIMBJUMPDED = 177, + PLAYER_ANIM_CLIMBJUMPLED = 178, + PLAYER_ANIM_CLIMBJUMPRED = 179, + PLAYER_ANIM_HANGJUMPLST = 180, + PLAYER_ANIM_HANGJUMPRST = 181, + PLAYER_ANIM_HANGJUMPLED = 182, + PLAYER_ANIM_HANGJUMPRED = 183, + PLAYER_ANIM_DOORKNOBPULL = 184, + PLAYER_ANIM_DOORKNOBPUSH = 185, + PLAYER_ANIM_DOORKNOBPULLLOCK = 186, + PLAYER_ANIM_DOORKNOBPUSHLOCK = 187, + PLAYER_ANIM_DOOROPD = 188, + PLAYER_ANIM_DASHB = 189, + PLAYER_ANIM_MGDIG = 190, + PLAYER_ANIM_MPCUTU = 191, + PLAYER_ANIM_MPCUTU_RE = 192, + PLAYER_ANIM_MPCUTLU = 193, + PLAYER_ANIM_MPCUTLU_RE = 194, + PLAYER_ANIM_MPCUTL = 195, + PLAYER_ANIM_MPCUTL_RE = 196, + PLAYER_ANIM_MPCUTLD = 197, + PLAYER_ANIM_MPCUTLD_RE = 198, + PLAYER_ANIM_MPCUTRD = 199, + PLAYER_ANIM_MPCUTRD_RE = 200, + PLAYER_ANIM_MPCUTR = 201, + PLAYER_ANIM_MPCUTR_RE = 202, + PLAYER_ANIM_MPCUTRU = 203, + PLAYER_ANIM_MPCUTRU_RE = 204, + PLAYER_ANIM_MPCUTD_RIGHT = 205, + PLAYER_ANIM_MPCUTD_RIGHT_RE = 206, + PLAYER_ANIM_MPCUTD_LEFT = 207, + PLAYER_ANIM_MPCUTD_LEFT_RE = 208, + PLAYER_ANIM_CUTPUSH = 209, + PLAYER_ANIM_CUTPUSH_RE = 210, + PLAYER_ANIM_ENEMYGUARDJUST = 211, + PLAYER_ANIM_LIFTB_BEFORE = 212, + PLAYER_ANIM_LIFTM_BEFORE = 213, + PLAYER_ANIM_LIFTB = 214, + PLAYER_ANIM_LIFTS = 215, + PLAYER_ANIM_LIFTM = 216, + PLAYER_ANIM_LIFTL = 217, + PLAYER_ANIM_THROWBU = 218, + PLAYER_ANIM_THROWSU = 219, + PLAYER_ANIM_THROWMU = 220, + PLAYER_ANIM_THROWLU = 221, + PLAYER_ANIM_THROWBD = 222, + PLAYER_ANIM_THROWSD = 223, + PLAYER_ANIM_MPGUARDSHIELD = 224, + PLAYER_ANIM_MPGUARDSHIELD_IMPACT = 225, + PLAYER_ANIM_MPGUARDSHIELD_NORMAL = 226, + PLAYER_ANIM_VJMPCHA_2 = 227, + PLAYER_ANIM_ROPEHOLDWAIT = 228, + PLAYER_ANIM_ROPECLIMBL = 229, + PLAYER_ANIM_ROPEHOLDWAIT_2 = 230, + PLAYER_ANIM_ROPEPULL = 231, + PLAYER_ANIM_ROPETIGHTHOLD = 232, + PLAYER_ANIM_ROPEFRONT = 233, + PLAYER_ANIM_ROPEBACK = 234, + PLAYER_ANIM_ROPESTRUGGLE = 235, + PLAYER_ANIM_DIVEST = 236, + PLAYER_ANIM_DIVE = 237, + PLAYER_ANIM_STOLELAND = 238, + PLAYER_ANIM_DIVEDROP = 239, + PLAYER_ANIM_FLOAT = 240, + PLAYER_ANIM_FLOATAWAY = 241, + PLAYER_ANIM_DIVETOFLOAT = 242, + PLAYER_ANIM_ROCKETBEETLE_WAIT = 243, + PLAYER_ANIM_ROCKETBEETLE_SHOOT = 244, + PLAYER_ANIM_ROCKETBEETLE_RESET = 245, + PLAYER_ANIM_ROCKETBEETLE_BACK = 246, + PLAYER_ANIM_WHIPU = 247, + PLAYER_ANIM_WHIPLU = 248, + PLAYER_ANIM_WHIPL = 249, + PLAYER_ANIM_WHIPLD = 250, + PLAYER_ANIM_WHIPRD = 251, + PLAYER_ANIM_WHIPR = 252, + PLAYER_ANIM_WHIPRU = 253, + PLAYER_ANIM_WHIPBACKRD = 254, + PLAYER_ANIM_WHIPBACKR = 255, + PLAYER_ANIM_WHIPBACKRU = 256, + PLAYER_ANIM_WHIPBACKU = 257, + PLAYER_ANIM_WHIPBACKLU = 258, + PLAYER_ANIM_WHIPBACKL = 259, + PLAYER_ANIM_WHIPBACKLD = 260, + PLAYER_ANIM_TURNBACK = 261, + PLAYER_ANIM_ATLTOR = 262, + PLAYER_ANIM_ATRTOL = 263, + PLAYER_ANIM_CHUCHUSTRUGGLE = 264, + PLAYER_ANIM_CHUCHUSTRUGGLE_BIG = 265, + PLAYER_ANIM_CHUCHUSTRUGGLE_ACT = 266, + PLAYER_ANIM_CHUCHUSTRUGGLE_ESCAPE = 267, + PLAYER_ANIM_SURPRISE = 268, + PLAYER_ANIM_DANGER = 269, + PLAYER_ANIM_ROCKRIDE = 270, + PLAYER_ANIM_NOTICE = 271, + PLAYER_ANIM_WAITINSECT = 272, + PLAYER_ANIM_NUMBA = 273, + PLAYER_ANIM_NUMBB = 274, + PLAYER_ANIM_DAMFEF = 275, + PLAYER_ANIM_DAMFEB = 276, + PLAYER_ANIM_DAMFEL = 277, + PLAYER_ANIM_DAMFER = 278, + PLAYER_ANIM_GETA = 279, + PLAYER_ANIM_GETAWAIT = 280, + PLAYER_ANIM_GETBIG = 281, + PLAYER_ANIM_GETBIGWAIT = 282, + PLAYER_ANIM_BOXOPSMALL = 283, + PLAYER_ANIM_BOXOP = 284, + PLAYER_ANIM_CUTUST = 285, + PLAYER_ANIM_CUTU = 286, + PLAYER_ANIM_CUTUED = 287, + PLAYER_ANIM_CUTUNG = 288, + PLAYER_ANIM_WAITLOOKROUND = 289, + PLAYER_ANIM_ENTRANCE = 290, + PLAYER_ANIM_MPPOSEPOWER = 291, + PLAYER_ANIM_MPPOSEPOWERL = 292, + PLAYER_ANIM_BINSWINGS = 293, + PLAYER_ANIM_BINSWINGU = 294, + PLAYER_ANIM_BINOUT = 295, + PLAYER_ANIM_DRIFT = 296, + PLAYER_ANIM_SWIMDIEAREVIVE = 297, + PLAYER_ANIM_MGLIEFREVIVE = 298, + PLAYER_ANIM_CATCHL = 299, + PLAYER_ANIM_CATCHR = 300, + PLAYER_ANIM_BATTLEREADY = 301, + PLAYER_ANIM_ROLLJUMP = 302, + PLAYER_ANIM_TANSUOPEN = 303, + PLAYER_ANIM_TANSUCLOSE = 304, + PLAYER_ANIM_BEDSLEEPL = 305, + PLAYER_ANIM_BEDSLEEP = 306, + PLAYER_ANIM_BEDAWAKE = 307, + PLAYER_ANIM_BIRD_GLIDE = 308, + PLAYER_ANIM_BIRD_GLIDEAROUND = 309, + PLAYER_ANIM_BIRD_REACH = 310, + PLAYER_ANIM_BIRD_GETWAIT = 311, + PLAYER_ANIM_BIRD_ACCEL = 312, + PLAYER_ANIM_BIRD_DAMAGE = 313, + PLAYER_ANIM_BIRD_DAMAGESMALL = 314, + PLAYER_ANIM_BIRD_DAMAGETORNADO = 315, + PLAYER_ANIM_BIRD_CALL = 316, + PLAYER_ANIM_SWORDPULLST = 317, + PLAYER_ANIM_SWORDPULLWAIT = 318, + PLAYER_ANIM_SWORDPULL = 319, + PLAYER_ANIM_SWORDSIRENST = 320, + PLAYER_ANIM_SWORDSIRENSTWAIT = 321, + PLAYER_ANIM_SWORDSIRENRAISE = 322, + PLAYER_ANIM_SWORDSIRENRAISEWAIT = 323, + PLAYER_ANIM_SWORDSIRENSTICK = 324, + PLAYER_ANIM_SWORDSIRENAFTER = 325, + PLAYER_ANIM_SWITCHDIAL_ST = 326, + PLAYER_ANIM_SWITCHDIAL_STL = 327, + PLAYER_ANIM_SWITCHDIAL_LTOR = 328, + PLAYER_ANIM_SWITCHDIAL_PUSH = 329, + PLAYER_ANIM_TRUCKLTOR = 330, + PLAYER_ANIM_TRUCKFRONTTOBACK = 331, + PLAYER_ANIM_TRUCKJUMPST = 332, + PLAYER_ANIM_TRUCKJUMP = 333, + PLAYER_ANIM_TRUCKJUMPEND = 334, + PLAYER_ANIM_TRUCKBRAKE = 335, + PLAYER_ANIM_TRUCKIN = 336, + PLAYER_ANIM_TRUCKOUT = 337, + PLAYER_ANIM_DIETRUCK = 338, + PLAYER_ANIM_DIETRUCKREVIVE = 339, + PLAYER_ANIM_MGDIGIN = 340, + PLAYER_ANIM_MGDIGOUT = 341, + PLAYER_ANIM_MGLIEF_L = 342, + PLAYER_ANIM_MGLIEF_R = 343, + PLAYER_ANIM_MGATTACKL = 344, + PLAYER_ANIM_MGATTACKR = 345, + PLAYER_ANIM_MGDASHL = 346, + PLAYER_ANIM_MGDASHR = 347, + PLAYER_ANIM_MGDAMAGE = 348, + PLAYER_ANIM_MGWAITBREATH = 349, + PLAYER_ANIM_MGLIEUP = 350, + PLAYER_ANIM_LIFTREMLY = 351, + PLAYER_ANIM_THROWREMLYUP = 352, + PLAYER_ANIM_LIFTREMLYUTOM = 353, + PLAYER_ANIM_BIRD_FESTIVALSTART = 354, + PLAYER_ANIM_GETSURPRISE = 355, + PLAYER_ANIM_GIRAHIMGRAPPLE = 356, + PLAYER_ANIM_GIRAHIMPULL = 357, + PLAYER_ANIM_GIRAHIMPULLUP = 358, + PLAYER_ANIM_GIRAHIMCHANGE = 359, + PLAYER_ANIM_ROPEWALK = 360, + PLAYER_ANIM_ROPEBEND = 361, + PLAYER_ANIM_ROPEHANGBEND = 362, + PLAYER_ANIM_ROPEHANGUP = 363, + PLAYER_ANIM_ROPEBALANCE = 364, + PLAYER_ANIM_SETSEKIBANA = 365, + PLAYER_ANIM_SETSEKIBANB = 366, + PLAYER_ANIM_SETSEKIBANC = 367, + PLAYER_ANIM_PUSHTSWST = 368, + PLAYER_ANIM_PUSHTSW = 369, + PLAYER_ANIM_PUSHLOG = 370, + PLAYER_ANIM_ASURACUTRIGHT = 371, + PLAYER_ANIM_ASURACUTLEFT = 372, + PLAYER_ANIM_ASURACUTUP = 373, + PLAYER_ANIM_ASURACUTRIGHTST = 374, + PLAYER_ANIM_ASURACUTLEFTST = 375, + PLAYER_ANIM_ASURACUTUPST = 376, + PLAYER_ANIM_ASURACUTRIGHTED = 377, + PLAYER_ANIM_ASURACUTLEFTED = 378, + PLAYER_ANIM_ASURACUTUPED = 379, + PLAYER_ANIM_ASURASWORDWAIT = 380, + PLAYER_ANIM_ASURASWORDLIFT = 381, + PLAYER_ANIM_BINSCOOP = 382, + PLAYER_ANIM_FIRE = 383, + PLAYER_ANIM_CROUCH = 384, + PLAYER_ANIM_CANNONWAIT = 385, + PLAYER_ANIM_SEAL = 386, + PLAYER_ANIM_SEALLOOP = 387, + PLAYER_ANIM_SEALFINISH = 388, + PLAYER_ANIM_FINISHED = 389, + PLAYER_ANIM_SITDOWN = 390, + PLAYER_ANIM_SITWAIT = 391, + PLAYER_ANIM_SITWAITSERVICEA = 392, + PLAYER_ANIM_ROOFWAIT = 393, + PLAYER_ANIM_ROOFHANG = 394, + PLAYER_ANIM_MGSTRUGGLE = 395, + PLAYER_ANIM_MGSTRUGGLE_ACT = 396, + PLAYER_ANIM_MGSTRUGGLE_ESCAPE = 397, + PLAYER_ANIM_KRAKENAPPEARANCE = 398, + PLAYER_ANIM_MGBURY = 399, + PLAYER_ANIM_GETFLOWER = 400, + PLAYER_ANIM_DOORLARGEOPEN = 401, + PLAYER_ANIM_DOORLARGECLOSE = 402, + PLAYER_ANIM_HARPPLAYFINISH = 403, + PLAYER_ANIM_LIGHTNINGL = 404, + PLAYER_ANIM_LIGHTNINGR = 405, + PLAYER_ANIM_LASTATTACK = 406, + PLAYER_ANIM_AT = 407, + PLAYER_ANIM_TAKE = 408, + PLAYER_ANIM_TAKEL = 409, + PLAYER_ANIM_TAKER = 410, + PLAYER_ANIM_TAKE2 = 411, + PLAYER_ANIM_WAITATOS = 412, + PLAYER_ANIM_DAMD = 413, + PLAYER_ANIM_ASHOOTWAIT = 414, + PLAYER_ANIM_ARELORD = 415, + PLAYER_ANIM_ASHOOT = 416, + PLAYER_ANIM_ARELORDTAME = 417, + PLAYER_ANIM_ASHOOTWAIT_2 = 418, + PLAYER_ANIM_ARELORD_2 = 419, + PLAYER_ANIM_ASHOOT_2 = 420, + PLAYER_ANIM_DAMSW = 421, + PLAYER_ANIM_HSWAIT = 422, + PLAYER_ANIM_VACUUMWAIT = 423, + PLAYER_ANIM_MPPOSEFRONT = 424, + PLAYER_ANIM_MPPOSEAROUND = 425, + PLAYER_ANIM_MPPOSEAROUNDBACK = 426, + PLAYER_ANIM_MPPOSEDASHFRONT = 427, + PLAYER_ANIM_MPPOSEDASHAROUND = 428, + PLAYER_ANIM_MPPOSEDASHAROUNDBACK = 429, + PLAYER_ANIM_LIFTB_UTOD = 430, + PLAYER_ANIM_LIFTS_UTOD = 431, + PLAYER_ANIM_LIFTLWALK = 432, + PLAYER_ANIM_MPGUARDPOSE = 433, + PLAYER_ANIM_ROCKRIDE_2 = 434, + PLAYER_ANIM_BINDRINKST = 435, + PLAYER_ANIM_BINDRINK = 436, + PLAYER_ANIM_BINDRINKED = 437, + PLAYER_ANIM_HARPPOSE = 438, + PLAYER_ANIM_HARPPLAYGO = 439, + PLAYER_ANIM_HARPPLAYCOME = 440, + PLAYER_ANIM_BINHOLD = 441, + PLAYER_ANIM_BINSHIELD = 442, + + PLAYER_ANIM_MAX = 443, + }; + + // Alink.arc > g3d > model.brres > 3DModels(NW4R) > al > Bones > ... + enum PlayerMainModelNode_e { + PLAYER_MAIN_NODE_CENTER = 0, + PLAYER_MAIN_NODE_BACKBONE_1 = 1, + PLAYER_MAIN_NODE_BACKBONE_2 = 2, + PLAYER_MAIN_NODE_HEAD = 4, + PLAYER_MAIN_NODE_POD = 5, + + PLAYER_MAIN_NODE_SHOULDER_L = 6, + PLAYER_MAIN_NODE_ARM_L1 = 7, + PLAYER_MAIN_NODE_ARM_L2 = 8, + PLAYER_MAIN_NODE_HAND_L = 9, + PLAYER_MAIN_NODE_WEAPON_L = 10, + + PLAYER_MAIN_NODE_SHOULDER_R = 11, + PLAYER_MAIN_NODE_ARM_R1 = 12, + PLAYER_MAIN_NODE_ARM_R2 = 13, + PLAYER_MAIN_NODE_HAND_R = 14, + PLAYER_MAIN_NODE_WEAPON_R = 15, + PLAYER_MAIN_NODE_WAIST = 16, + + PLAYER_MAIN_NODE_CLOTCH_L = 17, + PLAYER_MAIN_NODE_LEG_L1 = 18, + PLAYER_MAIN_NODE_LEG_L2 = 19, + PLAYER_MAIN_NODE_FOOT_L = 20, + PLAYER_MAIN_NODE_TOE_L = 21, + + PLAYER_MAIN_NODE_CLOTCH_R = 22, + PLAYER_MAIN_NODE_LEG_R1 = 23, + PLAYER_MAIN_NODE_LEG_R2 = 24, + PLAYER_MAIN_NODE_FOOT_R = 25, + PLAYER_MAIN_NODE_TOE_R = 26, + + PLAYER_MAIN_NODE_FSKIRT_L1 = 27, + PLAYER_MAIN_NODE_FSKIRT_L2 = 28, + + PLAYER_MAIN_NODE_FSKIRT_R1 = 29, + PLAYER_MAIN_NODE_FSKIRT_R2 = 30, + + PLAYER_MAIN_NODE_RSKIRT_L1 = 31, + PLAYER_MAIN_NODE_RSKIRT_L2 = 32, + PLAYER_MAIN_NODE_RSKIRT_R1 = 33, + PLAYER_MAIN_NODE_RSKIRT_R2 = 34, + }; + + // Alink.arc > g3d > model.brres > 3DModels(NW4R) > al_head > Bones > ... + enum PlayerHeadModelNode_e { + PLAYER_HEAD_NODE_HAIR_L = 1, + PLAYER_HEAD_NODE_HAIR_R1 = 2, + PLAYER_HEAD_NODE_HAIR_R2 = 3, + PLAYER_HEAD_NODE_MOMI_L = 4, + PLAYER_HEAD_NODE_MOMI_R = 5, + PLAYER_HEAD_NODE_MOMI_Z_CAP_1 = 6, + }; + + // Alink.arc > g3d > model.brres > 3DModels(NW4R) > al_hands > Bones > ... + enum PlayerHandsModelNode_e { + PLAYER_HANDS_NODE_HAND_L = 1, + PLAYER_HANDS_NODE_HAND_R = 2, + }; + + void fn_8005F890(nw4r::math::MTX34 *); + void fn_8005FB90(nw4r::math::MTX34 *); + bool fn_80061410(); + + static void freeFrmHeap(mHeapAllocator_c *allocator); + static void allocFrmHeap(mHeapAllocator_c *allocator, u32 size, const char *name); + void allocExternalDataBuffers(); + void initModelHeaps(); + void updateSwordShieldModelsIfNeeded(); + m3d::anmTexSrt_c *createAnmTexSrt(const char *resName, m3d::bmdl_c &mdl); + + static bool createGenericMdl(nw4r::g3d::ResMdl resMdl, m3d::mdl_c &mdl, mAllocator_c *alloc, u32 bufferOption); + static bool createGenericSmdl(nw4r::g3d::ResMdl resMdl, m3d::smdl_c &mdl, mAllocator_c *alloc, u32 bufferOption); + static void setTransformAndCalc(m3d::scnLeaf_c &lf, const mMtx_c *mtx); + void setShieldTransform(bool inHand); + + static nw4r::g3d::ResFile getItemResFile(const char *name, mAllocator_c &allocator); + nw4r::g3d::ResFile getExternalCompressedFile(const char *name, const char *extension, void *dest, u32 maxSize); + nw4r::g3d::ResAnmChr getExternalAnmChr(const char *name, void *dest, u32 maxSize); + nw4r::g3d::ResAnmTexPat getExternalAnmTexPat(const char *name, void *dest, u32 maxSize); + nw4r::g3d::ResAnmTexSrt getExternalAnmTexSrt(const char *name, void *dest, u32 maxSize); + + static bool isBodyAnmPart_0_2_4(s32 part); + + static u32 getCurrentShieldPouchSlot(); + static s32 getShieldType(s32 item); + static s32 getCurrentlyEquippedShieldId(); + + void updateEarringsColor(); + void loadBodyModels(); + void loadBody(); + void loadHandsModels(); + void setSwordAnm(const char *name); + void initSwordModel(); + void updateSwordModel(); + void initShieldModel(); + void updateShieldModel(); + + // Own virtual methods + + /* vt 0x2E0 */ virtual void transformBackbone1(nw4r::g3d::WorldMtxManip *) {} + /* vt 0x2E4 */ virtual void transformModelCenter(mMtx_c *) {} + /* vt 0x2E8 */ virtual bool vt_0x2E8(nw4r::math::MTX34 *, const u16 *, bool) { + return true; + } + /* vt 0x2EC */ virtual void isOnClawTargetMaybe(s32 arm, mAng &a1, mAng &a2) { + a1 = 0; + a2 = 0; + } + /* vt 0x2F0 */ virtual bool isMPPose() { + return false; + } + /* vt 0x2F4 */ virtual bool isOnTightRope() { + return false; + } + /* vt 0x2F8 */ virtual bool isOnVines() { + return false; + } + /* vt 0x2FC */ virtual bool alwaysRet0() { + return 0; + } + /* vt 0x300 */ virtual bool canBlockAttack() { + return false; + } + /* vt 0x304 */ virtual const mVec3_c &vt_0x304() const { + return mVec3_c::Zero; + } + // r = 1, l = 0, backbone = 2 + /* vt 0x308 */ virtual mAng getArmZRot(s32 which) { + return 0; + } + /* vt 0x30C */ virtual void vt_0x30C(mVec3_c &res) { + res = mVec3_c::Ex; + } + + // Overrides + + /* vt 0x0E4 */ virtual const mVec3_c &getCenterTranslation() const override { + return mCenterTranslation; + } + /* vt 0x0E8 */ virtual const mVec3_c &vt_0x0E8() const override { + return field_0x12F4; + } + /* vt 0x0EC */ virtual const mVec3_c &vt_0x0EC() const override { + return mHeadTranslation; + } + /* vt 0x0F0 */ virtual const mVec3_c &vt_0x0F0() const override { + return mTranslationHand[1]; + } + /* vt 0x0F4 */ virtual const mVec3_c &vt_0x0F4() const override { + return mTranslationHand[0]; + } + + /* vt 0x114 */ virtual void somethingWithCarriedActorFlags() override; + /* vt 0x118 */ virtual dAcObjBase_c *getCurrentCarriedActor() override { + return mCarriedActorRef.get(); + } + + /* vt 0x18C */ virtual void getBodyMtx(mMtx_c *out_mtx, int boneIdx) override { + mMainMdl.getNodeWorldMtx(boneIdx, *out_mtx); + } + /* vt 0x190 */ virtual void getSheathModelMatrix(mMtx_c *out_mtx) override { + mSheathMdl.getLocalMtx(*out_mtx); + } + /* vt 0x194 */ virtual void getSwordModelMatrix(mMtx_c *out_mtx) override { + mSwordMdl.getLocalMtx(*out_mtx); + } + /* vt 0x198 */ virtual mAng vt_0x198() override { + return field_0x1268; + } + /* vt 0x19C */ virtual mAng vt_0x19C() override { + return field_0x126A; + } + + u8 getHandMat(s32 idx) { + return field_0x1208[idx]; + } + + inline bool checkSwordAndMoreStates(u32 mask) const { + return (mSwordAndMoreStates & mask) != 0; + } + + inline void offSwordAndMoreStates(u32 mask) { + mSwordAndMoreStates &= ~mask; + } + + bool canStart(bool force, u16 newIdx, u16 invalidValue, u16 *out1, u16 *out2) const; + void setFaceTexPat(s32 faceIdx, bool force); + void checkFaceTexPat(); + void setFaceTexSrt(s32 faceIdx, bool force); + void checkFaceTexSrt(); + void setFaceAnmChr(s32 faceIdx, bool force); + void checkFaceAnmChr(); + + void setPosCopy3(); + + void loadTwoAnmChrs(s32 childIdx, s32 animIdx, s32 animIdx2, bool b); + void loadAnmChr(s32 childIdx, s32 animIdx, void *dest, u32 maxSize); + void removeAnmChr(s32 childIdx); + void loadSound(nw4r::g3d::ResFile &file, const char *name, s32 childIdx); + void loadSoundForAnim(s32 childIdx); + + void syncSoundWithAnim(); + static void registMassObj(cCcD_Obj *obj, u8 priority); + void updateModelColliders(); + void updateCachedPositions(); + + // Model callbacks - dropping the mdl argument, apparently + void mainModelTimingA(u32 nodeId, nw4r::g3d::ChrAnmResult *result); + void adjustMainModelChrAnm(PlayerMainModelNode_e nodeId, nw4r::g3d::ChrAnmResult *result); + + void mainModelTimingB(u32 nodeId, nw4r::g3d::WorldMtxManip *result); + void adjustMainModelWorldMtx(PlayerMainModelNode_e nodeId, nw4r::g3d::WorldMtxManip *result); + + void mainModelTimingC(nw4r::math::MTX34 *result); + void headModelTimingB(u32 nodeId, nw4r::g3d::WorldMtxManip *result); + + void handsCallbackC(nw4r::math::MTX34 *pMtxArray, nw4r::g3d::ResMdl mdl, nw4r::g3d::FuncObjCalcWorld *pFuncObj); + + void updateBlendWeights(PlayerMainModelNode_e nodeId); + void updateMainBlend1(f32 blend); + void updateMainBlend2(f32 blend, bool save); + void applyWorldRotationMaybe(nw4r::math::MTX34 *result, mAng x, mAng y, mAng z, mVec3_c *off, bool order); + void applyWorldRotationMaybe(nw4r::g3d::WorldMtxManip *result, mAng x, mAng y, mAng z, mVec3_c *off, bool order); + + static const PlayerAnimation sAnimations[443]; + static const s32 sUnkDuration; + static const u8 sShieldDurabilities[10]; + static const u8 sShieldRegenTimes[10]; + static mColor sGuideColor1; + static mColor sGuideColor2; + static mColor sGuideColor3; + +protected: + /* 0x370 */ mHeapAllocator_c mModelAllocator; + /* 0x38C */ mHeapAllocator_c mSwordAllocator; + /* 0x3A8 */ mHeapAllocator_c mShieldAllocator; + /* 0x3C4 */ void *mpExternalAnmCharBuffer; + /* 0x3C8 */ nw4r::g3d::ResFile mSwordRes; + /* 0x3CC */ nw4r::g3d::ResFile mAlinkRes; + /* 0x3D0 */ nw4r::g3d::ResFile mPlCommonAnimeRes; + /* 0x3D4 */ nw4r::g3d::ResFile mPlCommonSoundRes; + /* 0x3D8 */ nw4r::g3d::ResFile mCurrentRes; + /* 0x3DC */ nw4r::g3d::ResFile mAlink2Res; + /* 0x3E0 */ daPlBaseMdl_c mMainMdl; + /* 0x440 */ daPlBaseMainCallback_c mMainBodyCallback; + /* 0x448 */ m3d::mdl_c mHeadMdl; + /* 0x46C */ daPlBaseHeadCallback_c mHeadCallback; + /* 0x474 */ m3d::smdl_c mFaceMdl; + /* 0x490 */ m3d::anmChr_c mFaceAnmChr; + /* 0x4C8 */ void *mpAnmCharBuffer; + /* 0x4CC */ m3d::anmTexPat_c mFaceTexPat; + /* 0x4F8 */ void *mpTexPatBuffer; + /* 0x4FC */ m3d::anmTexSrt_c mFaceTexSrt; + /* 0x528 */ void *mpTexSrtBuffer; + /* 0x52C */ m3d::anmChr_c mHeadAnmChr; + /* 0x564 */ m3d::smdl_c mHandsMdl; + /* 0x580 */ daPlBaseHandsCallback_c mCalcWorldCallback; + /* 0x588 */ daPlBaseScnObjCallback_c mScnObjCallback; + /* 0x598 */ m3d::smdl_c mSwordMdl; + /* 0x5B4 */ m3d::anmMatClr_c mSwordAnmMatClr; + /* 0x5E0 */ m3d::smdl_c mShieldMdl; + /* 0x5FC */ m3d::anmTexPat_c mShieldAnmTexPat1; + /* 0x628 */ m3d::anmTexPat_c mShieldAnmTexPat2; + /* 0x654 */ m3d::smdl_c mSheathMdl; + /* 0x670 */ m3d::smdl_c mUnkMdl1; + /* 0x68C */ m3d::anmChr_c mAnmChr; + /* 0x6C4 */ m3d::anmChrBlend_c mAnmChrBlend; + /* 0x6EC */ dScnCallback_c mScnCallback1; + /* 0x6F8 */ dScnCallback_c mScnCallback2; + /* 0x704 */ dScnCallback_c mScnCallback3; + /* 0x710 */ dScnCallback_c mScnCallback4; + /* 0x71C */ dScnCallback_c mScnCallback5; + /* 0x728 */ daPlBaseAnmChr_c mAnmChrs[6]; + /* 0x878 */ dCcD_Cyl mCcCyls[3]; + /* 0xC68 */ dCcD_Cps mCcCpss[3]; + /* 0x10B8 */ dCcD_Cyl mCcCyl; + /* 0x1208 */ u8 field_0x1208[2]; + /* 0x120A */ u8 field_0x120A; + /* 0x120B */ u8 mTunicType; + /* 0x120C */ u8 mCurrentAnmChrIdx; + /* 0x120D */ u8 mShieldPouchSlot; + /* 0x120E */ s8 mPouchMatId; + /* 0x120F */ s8 mBeltMatId; + /* 0x1210 */ s8 mLowbodyMapId; + /* 0x1211 */ s8 mLowotherMapId; + /* 0x1212 */ s8 mPouch2MatId; + /* 0x1213 */ s8 mUpbodyMatId; + /* 0x1214 */ s8 mUpotherMatId; + /* 0x1215 */ s8 mBelt2MatId; + /* 0x1216 */ s8 mCapMatId; + /* 0x1217 */ s8 mSkinMatId; + /* 0x1218 */ u8 mSkywardStrikeChargeDuration; + /* 0x1219 */ u8 field_0x1219; + /* 0x121A */ u16 mAnimations[6]; + /* 0x1226 */ u16 mFaceAnmChrIdx1; + /* 0x1228 */ u16 mFaceAnmChrIdx2; + /* 0x122A */ u16 mFaceAnmTexPatIdx1; + /* 0x122C */ u16 mFaceAnmTexPatIdx2; + /* 0x122E */ u16 mFaceAnmTexSrtIdx1; + /* 0x1230 */ u16 mFaceAnmTexSrtIdx2; + /* 0x1232 */ u16 mBreakingEffect; + /* 0x1234 */ mAng mWaistZRot; + /* 0x1236 */ mAng mWaistYRot; + /* 0x1238 */ mAng field_0x1238[5]; + /* 0x1242 */ mAng field_0x1242[5]; + /* 0x124C */ u8 _0x124C[0x1256 - 0x124C]; + /* 0x1256 */ mAng field_0x1256; + /* 0x1258 */ mAng field_0x1258; + /* 0x125A */ mAng field_0x125A; + /* 0x125C */ mAng mRSkirtR1Rot; + /* 0x125E */ mAng mRSkirtL1Rot; + /* 0x1260 */ mAng mRightHandRotation; + /* 0x1262 */ mAng mHeadZRot; + /* 0x1264 */ mAng mHeadYRot; + /* 0x1266 */ mAng mHeadXRot; + /* 0x1268 */ mAng field_0x1268; + /* 0x126A */ mAng field_0x126A; + /* 0x126C */ mAng field_0x126C; + /* 0x1270 */ f32 field_0x1270; + /* 0x1274 */ f32 field_0x1274; + /* 0x1278 */ f32 field_0x1278; + /* 0x127C */ mVec3_c field_0x127C; + /* 0x1288 */ mVec3_c mCenterTranslation; + /* 0x1294 */ mVec3_c mHeadTranslation; + /* 0x12A0 */ mVec3_c mPositionAboveLink; + /* 0x12AC */ mVec3_c mTranslationHand[2]; + /* 0x12C4 */ mVec3_c mTranslationWeapon[2]; + /* 0x12DC */ mVec3_c mToeTranslation[2]; + /* 0x12F4 */ mVec3_c field_0x12F4; + /* 0x1300 */ mQuat_c field_0x1300[4]; + /* 0x1340 */ mQuat_c mQuat1; + /* 0x1350 */ mQuat_c mQuat2; + /* 0x1360 */ dAcRef_c mCarriedActorRef; // not sure about the class + /* 0x136C */ mAng *field_0x136C; + /* 0x1370 */ mAng *field_0x1370; + /* 0x1374 */ mAng *field_0x1374; // x3 + /* 0x1378 */ mAng *field_0x1378; // x3 +}; + +#endif diff --git a/include/d/d_pouch.h b/include/d/d_pouch.h index b1d064c1..feacc53d 100644 --- a/include/d/d_pouch.h +++ b/include/d/d_pouch.h @@ -12,6 +12,7 @@ s32 getPouchSlotCount(bool unk); bool isItemExtraAmmo(s32 item); bool isItemMedal(s32 item); bool hasAnyShields(); +bool isItemShield(s32 item); #define POUCH_SLOT_NONE 8 diff --git a/include/d/d_rawarchive.h b/include/d/d_rawarchive.h index 7c127147..3835ae10 100644 --- a/include/d/d_rawarchive.h +++ b/include/d/d_rawarchive.h @@ -3,6 +3,7 @@ #include "common.h" #include "m/m_dvd.h" +#include "nw4r/g3d/res/g3d_resfile.h" #include "sized_string.h" class ArcCallbackHandlerBase { @@ -23,6 +24,8 @@ public: static ArcCallbackHandler sInstance; }; +void BindSystemModelsAndLighting(nw4r::g3d::ResFile); + // TODO: loading status could be an enum (-2/-1/0/+1) // Ghidra: ArcManagerEntry diff --git a/include/d/d_sc_game.h b/include/d/d_sc_game.h index 25c42b57..6c86c0db 100644 --- a/include/d/d_sc_game.h +++ b/include/d/d_sc_game.h @@ -136,6 +136,7 @@ public: STATE_VIRTUAL_FUNC_DECLARE(dScGame_c, Stanby); // sic STATE_VIRTUAL_FUNC_DECLARE(dScGame_c, Action); + static bool isHeroMode(); static bool isCurrentStage(const char *stageName); static bool isStageSkyloftLayer20(); static bool isInCredits(); diff --git a/include/d/lyt/meter/d_lyt_meter.h b/include/d/lyt/meter/d_lyt_meter.h index c7618481..6f7b5b23 100644 --- a/include/d/lyt/meter/d_lyt_meter.h +++ b/include/d/lyt/meter/d_lyt_meter.h @@ -446,6 +446,18 @@ public: } } + static void setShieldMaxDurability(f32 durability) { + if (sInstance != nullptr) { + sInstance->mMain.mShield.setMaxDurability(durability); + } + } + + static void setShieldId(s32 type) { + if (sInstance != nullptr) { + sInstance->mMain.mShield.setShieldId(type); + } + } + static f32 getShieldMaxDurability() { if (sInstance != nullptr) { return sInstance->mMain.mShield.getMaxDurability(); diff --git a/include/d/lyt/meter/d_lyt_meter_shield_gauge.h b/include/d/lyt/meter/d_lyt_meter_shield_gauge.h index ec012a83..38cf0baf 100644 --- a/include/d/lyt/meter/d_lyt_meter_shield_gauge.h +++ b/include/d/lyt/meter/d_lyt_meter_shield_gauge.h @@ -47,6 +47,14 @@ public: return mMaxDurability; } + void setMaxDurability(f32 durability) { + mMaxDurability = durability; + } + + void setShieldId(s32 id) { + mShieldId = id; + } + private: s32 getLytFrameForShield(s32) const; void setLevel(f32 level); @@ -77,7 +85,7 @@ private: /* 0x30C */ u8 field_0x30C; /* 0x30D */ u8 field_0x30D; /* 0x30E */ u8 field_0x30E; - /* 0x310 */ s32 mShieldType; + /* 0x310 */ s32 mShieldId; /* 0x314 */ s32 mSavedShieldType; /* 0x318 */ s32 field_0x318; /* 0x31C */ u8 field_0x31C; diff --git a/include/egg/core/eggAllocator.h b/include/egg/core/eggAllocator.h index 4d9978c6..f260f1e1 100644 --- a/include/egg/core/eggAllocator.h +++ b/include/egg/core/eggAllocator.h @@ -21,6 +21,11 @@ public: inline MEMAllocator *getHandle() { return static_cast(this); } + + Heap *getHeap() { + return mHeap; + } + /* 0x14 */ Heap *mHeap; /* 0x18 */ s32 align; }; diff --git a/include/egg/core/eggHeap.h b/include/egg/core/eggHeap.h index 986248aa..c83a9956 100644 --- a/include/egg/core/eggHeap.h +++ b/include/egg/core/eggHeap.h @@ -5,13 +5,14 @@ #include "common.h" #include "egg/core/eggDisposer.h" -#include "egg/core/eggThread.h" +#include "egg/egg_types.h" #include "egg/prim/eggBitFlag.h" + #include "nw4r/ut.h" + #include "rvl/MEM.h" #include "rvl/OS.h" - namespace EGG { // class ExpHeap; @@ -79,6 +80,20 @@ public: return this; } + static inline EGG::FrmHeap *toFrmHeap(EGG::Heap *heap) { + if (heap != nullptr && heap->getHeapKind() == HEAP_KIND_FRAME) { + return (FrmHeap *)heap; + } + return nullptr; + } + + static inline EGG::ExpHeap *toExpHeap(EGG::Heap *heap) { + if (heap != nullptr && heap->getHeapKind() == HEAP_KIND_EXPANDED) { + return (ExpHeap *)heap; + } + return nullptr; + } + public: // members /* 0x10 */ MEMiHeapHead *mHeapHandle; diff --git a/include/m/m3d/m_anmchr.h b/include/m/m3d/m_anmchr.h index 49444ea6..2ff01dd7 100644 --- a/include/m/m3d/m_anmchr.h +++ b/include/m/m3d/m_anmchr.h @@ -1,6 +1,7 @@ #ifndef M3D_M_ANMCHR_H #define M3D_M_ANMCHR_H +#include "common.h" #include "m/m3d/m_bmdl.h" #include "m/m3d/m_fanm.h" #include "nw4r/g3d/res/g3d_resanmchr.h" @@ -13,6 +14,14 @@ public: virtual int getType() const override; + bool create(nw4r::g3d::ResMdl mdl, nw4r::g3d::ResAnmChr anm, mAllocator_c *alloc) { + return create(mdl, anm, alloc, nullptr); + } + // Not sure about this overload but it fixes stack alloc in some cases and other files + // definitely have similar overloads with seemingly identical argument types + bool create2(nw4r::g3d::ResMdl mdl, nw4r::g3d::ResAnmChr anm, mAllocator_c *alloc) { + return create(mdl, anm, alloc); + } bool create(nw4r::g3d::ResMdl, nw4r::g3d::ResAnmChr, mAllocator_c *, u32 *); void setAnm(bmdl_c &, nw4r::g3d::ResAnmChr, playMode_e); void setAnmAfter(bmdl_c &, nw4r::g3d::ResAnmChr, playMode_e); diff --git a/include/m/m3d/m_anmchrblend.h b/include/m/m3d/m_anmchrblend.h index 42e20bf2..4db8bda8 100644 --- a/include/m/m3d/m_anmchrblend.h +++ b/include/m/m3d/m_anmchrblend.h @@ -1,6 +1,7 @@ #ifndef M3D_M_ANMCHRBLEND_H #define M3D_M_ANMCHRBLEND_H +#include "common.h" #include "m/m3d/m_anmchr.h" #include "m/m3d/m_banm.h" #include "m/m3d/m_bmdl.h" @@ -14,6 +15,9 @@ public: virtual int getType() const override; + bool create(nw4r::g3d::ResMdl mdl, int nView, mAllocator_c *alloc) { + return create(mdl, nView, alloc, nullptr); + } bool create(nw4r::g3d::ResMdl, int, mAllocator_c *, u32 *); void attach(int, nw4r::g3d::AnmObjChrRes *, f32); void attach(int, anmChr_c *, f32); diff --git a/include/m/m3d/m_banm.h b/include/m/m3d/m_banm.h index beca1b3f..dbf6cd2b 100644 --- a/include/m/m3d/m_banm.h +++ b/include/m/m3d/m_banm.h @@ -28,9 +28,9 @@ public: } protected: - nw4r::g3d::AnmObj *mpAnmObj; - EGG::FrmHeap *mpFrameHeap; - mAllocator_c mAllocator; + /* 0x04 */ nw4r::g3d::AnmObj *mpAnmObj; + /* 0x08 */ EGG::FrmHeap *mpFrameHeap; + /* 0x0C */ mAllocator_c mAllocator; }; } // namespace m3d diff --git a/include/m/m3d/m_bmdl.h b/include/m/m3d/m_bmdl.h index ee9d1920..7cacd67d 100644 --- a/include/m/m3d/m_bmdl.h +++ b/include/m/m3d/m_bmdl.h @@ -22,7 +22,7 @@ public: int getNodeID(const char *name) const; bool getNodeWorldMtx(u32 p1, nw4r::math::MTX34 *out) const; bool getNodeWorldMtxMultVecZero(u32 p1, nw4r::math::VEC3 &out) const; - bool getNodeWorldMtxMultVec(u32, nw4r::math::VEC3 &, nw4r::math::VEC3 &) const; + bool getNodeWorldMtxMultVec(u32, const nw4r::math::VEC3 &, nw4r::math::VEC3 &) const; nw4r::g3d::ResMdl getResMdl() const; nw4r::g3d::ResMat getResMat(u32 index) const; @@ -40,7 +40,7 @@ public: bool getBounds(mVec3_c *min, mVec3_c *max) const; private: - banm_c *mpCurrentAnm; + /* 0x18 */ banm_c *mpCurrentAnm; }; } // namespace m3d diff --git a/include/m/m3d/m_fanm.h b/include/m/m3d/m_fanm.h index 641f3cbf..49c89c0d 100644 --- a/include/m/m3d/m_fanm.h +++ b/include/m/m3d/m_fanm.h @@ -47,10 +47,10 @@ public: } private: - f32 mEndFrame; - f32 mStartFrame; - f32 mCurrentFrame; - u8 mPlayState; + /* 0x28 */ f32 mEndFrame; + /* 0x2C */ f32 mStartFrame; + /* 0x30 */ f32 mCurrentFrame; + /* 0x34 */ u8 mPlayState; }; } // namespace m3d diff --git a/include/m/m3d/m_mdl.h b/include/m/m3d/m_mdl.h index c420330f..a0833038 100644 --- a/include/m/m3d/m_mdl.h +++ b/include/m/m3d/m_mdl.h @@ -43,7 +43,11 @@ public: mpBaseCallback = cb; } - private: + nw4r::g3d::ChrAnmResult *getNodeResult(u16 node) { + return &mpNodes[node]; + } + + protected: /* 0x04 */ calcRatio_c mCalcRatio; /* 0x20 */ int mNumNode; /* 0x24 */ nw4r::g3d::ChrAnmResult *mpNodes; @@ -66,9 +70,9 @@ public: private: /** If we allocated the callback ourselves, this is what we need to free */ - mdlCallback_c *mpOwnedCallback; + /* 0x1C */ mdlCallback_c *mpOwnedCallback; /** The actual callback to use */ - mdlCallback_c *mpCallback; + /* 0x20 */ mdlCallback_c *mpCallback; }; } // namespace m3d diff --git a/include/m/m_angle.h b/include/m/m_angle.h index a39d29d2..01455a59 100644 --- a/include/m/m_angle.h +++ b/include/m/m_angle.h @@ -52,6 +52,10 @@ struct mAng { mVal -= other.mVal; return *this; } + mAng &operator*=(const s32 &other) { + mVal *= other; + return *this; + } s32 step(s16 target, s32 steps, s16 max, s16 min); @@ -67,7 +71,7 @@ struct mAng { return (360.0f / 65536.0f) * mVal; } - static mAng fromDeg(f32 deg) { + static s16 fromDeg(f32 deg) { return deg * sDegToAng; } f32 degree2() const { diff --git a/include/m/m_mtx.h b/include/m/m_mtx.h index 1251c980..6c9391af 100644 --- a/include/m/m_mtx.h +++ b/include/m/m_mtx.h @@ -32,6 +32,12 @@ public: operator nw4r::math::MTX34 &() { return *(nw4r::math::MTX34 *)(this); } + operator const nw4r::math::MTX34 *() const { + return (nw4r::math::MTX34 *)(this); + } + operator const nw4r::math::MTX34 &() const { + return *(nw4r::math::MTX34 *)(this); + } void XrotS(const mAng &angle); ///< Generates a rotation matrix for the X axis with the given angle. void XrotM(const mAng &angle); ///< Rotates the matrix on the X axis by the given angle. diff --git a/include/nw4r/g3d/g3d_calcworld.h b/include/nw4r/g3d/g3d_calcworld.h index d32c5adf..b31ed72a 100644 --- a/include/nw4r/g3d/g3d_calcworld.h +++ b/include/nw4r/g3d/g3d_calcworld.h @@ -43,13 +43,13 @@ public: virtual ~ICalcWorldCallback() {}; // at 0x8 virtual void ExecCallbackA(ChrAnmResult *pResult, ResMdl mdl, - FuncObjCalcWorld *pFuncObj) = 0; // at 0xC + FuncObjCalcWorld *pFuncObj) {}; // at 0xC virtual void ExecCallbackB(WorldMtxManip *pManip, ResMdl mdl, - FuncObjCalcWorld *pFuncObj) = 0; // at 0x10 + FuncObjCalcWorld *pFuncObj) {}; // at 0x10 virtual void ExecCallbackC(math::MTX34 *pMtxArray, ResMdl mdl, - FuncObjCalcWorld *pFuncObj) = 0; // at 0x14 + FuncObjCalcWorld *pFuncObj) {}; // at 0x14 }; /****************************************************************************** @@ -76,6 +76,11 @@ public: } } + // Not sure + void SetMtxUnchecked(const nw4r::math::MTX34 *arg) { + PSMTXCopy(*arg, *mpM); + } + private: math::MTX34 *mpM; // at 0x0 math::VEC3 *mpS; // at 0x4 diff --git a/include/nw4r/g3d/res/g3d_resmdl.h b/include/nw4r/g3d/res/g3d_resmdl.h index db0a2b6a..42107896 100644 --- a/include/nw4r/g3d/res/g3d_resmdl.h +++ b/include/nw4r/g3d/res/g3d_resmdl.h @@ -220,6 +220,11 @@ public: u32 GetShpID() const; u32 GetNodeID() const; }; + + // Not sure, but d_player_mdl has these strings at the end of .data (inlines) and in reverse order (in the same inline) + DrawEnumerator ConstructDrawEnumerator() const { + return DrawEnumerator(GetResByteCode("DrawOpa"), GetResByteCode("DrawXlu")); + } }; } // namespace g3d diff --git a/include/nw4r/g3d/res/g3d_resnode.h b/include/nw4r/g3d/res/g3d_resnode.h index bc084e72..43f080c9 100644 --- a/include/nw4r/g3d/res/g3d_resnode.h +++ b/include/nw4r/g3d/res/g3d_resnode.h @@ -109,11 +109,7 @@ public: } u32 GetMtxID() const { - if (IsValid()) { - return ptr()->mtxID; - } - - return 0; + return IsValid() ? ptr()->mtxID : 0; } bool IsVisible() const { diff --git a/include/nw4r/g3d/res/g3d_resshp.h b/include/nw4r/g3d/res/g3d_resshp.h index 344f8757..e58e0a23 100644 --- a/include/nw4r/g3d/res/g3d_resshp.h +++ b/include/nw4r/g3d/res/g3d_resshp.h @@ -148,6 +148,15 @@ public: return !(ref().flag & ResShpData::FLAG_INVISIBLE); } + // Not sure, copied from ResNode + void SetVisibility(bool visible) { + if (visible) { + ptr()->flag &= ~ResShpData::FLAG_INVISIBLE; + } else { + ptr()->flag |= ResShpData::FLAG_INVISIBLE; + } + } + void DCStore(bool sync); }; diff --git a/include/toBeSorted/cx_util.h b/include/toBeSorted/cx_util.h new file mode 100644 index 00000000..44b5ee0b --- /dev/null +++ b/include/toBeSorted/cx_util.h @@ -0,0 +1,8 @@ +#ifndef CX_UTIL_H +#define CX_UTIL_H + +#include "common.h" + +bool lzSafeDecompress(const void *src, u32 maxSize, void *dest); + +#endif diff --git a/include/toBeSorted/stage_render_stuff.h b/include/toBeSorted/stage_render_stuff.h index 6a1ecbea..6aa0d00a 100644 --- a/include/toBeSorted/stage_render_stuff.h +++ b/include/toBeSorted/stage_render_stuff.h @@ -5,7 +5,6 @@ #include "m/m3d/m_scnleaf.h" #include "nw4r/g3d/g3d_scnobj.h" - class dScnCallback_c : public nw4r::g3d::IScnObjCallback { public: dScnCallback_c(dAcObjBase_c *arg) : mpActor(arg) {} diff --git a/src/REL/d/a/d_a_bombf.cpp b/src/REL/d/a/d_a_bombf.cpp index b0e7e1c8..b664ce01 100644 --- a/src/REL/d/a/d_a_bombf.cpp +++ b/src/REL/d/a/d_a_bombf.cpp @@ -133,7 +133,7 @@ int dAcBombf_c::actorExecute() { } int dAcBombf_c::draw() { - if (field_0x3D0 != 0 && (dAcPy_c::LINK->mActionFlagsCont & 0x400000) == 0) { + if (field_0x3D0 != 0 && !dAcPy_c::LINK->checkActionFlagsCont(0x400000)) { return SUCCEEDED; } drawModelType1(&mModel); @@ -170,7 +170,6 @@ void dAcBombf_c::initializeState_Wait() {} extern "C" u16 lbl_8057A750; void dAcBombf_c::executeState_Wait() { - // Stack problems if (SceneflagManager::sInstance->checkBoolFlag(roomid, mDespawnSceneFlag)) { deleteRequest(); dAcBomb_c *bomb = mBombRef.get(); @@ -184,12 +183,12 @@ void dAcBombf_c::executeState_Wait() { f32 scaleFactor = mScale.x; if (field_0x3D2 == 0 || field_0x3D2 == 2) { - mVec3_c m; - PSMTXMultVecSR(mWorldMtx, mVec3_c::Ey, m); + mVec3_c up; + PSMTXMultVecSR(mWorldMtx, mVec3_c::Ey, up); + mVec3_c upScaled = up * 30.0f; + mVec3_c checkPos = position + upScaled; - mVec3_c m3 = position + (m * 30.0f); - - if (mTimeAreaStruct.check(roomid, m3, 0, 30.0f, 0.1f) && field_0x3D4 != 1) { + if (mTimeAreaStruct.check(roomid, checkPos, 0, 30.0f, 0.1f) && field_0x3D4 != 1) { if (mTimeAreaStruct.field_0x04 == 1) { playSound(SE_TIMESLIP_TIMESLIP); } else { diff --git a/src/REL/d/a/d_a_t_wood_area.cpp b/src/REL/d/a/d_a_t_wood_area.cpp index 044826bf..4424227f 100644 --- a/src/REL/d/a/d_a_t_wood_area.cpp +++ b/src/REL/d/a/d_a_t_wood_area.cpp @@ -55,7 +55,7 @@ extern const u16 PARTICLE_RESOURCE_ID_MAPPING_8_; void dAcTWoodArea_c::initializeState_Wait() {} void dAcTWoodArea_c::executeState_Wait() { - if (dAcPy_c::LINK != nullptr && (dAcPy_c::LINK->someFlags_0x350 & 0x2000)) { + if (dAcPy_c::LINK != nullptr && dAcPy_c::LINK->checkFlags0x350(0x2000)) { // This is a bit messed up mVec3_c dist = position - dAcPy_c::LINK->position; f32 attachRadius = getAttachRadius(); diff --git a/src/REL/d/a/obj/d_a_obj_seat_sword.cpp b/src/REL/d/a/obj/d_a_obj_seat_sword.cpp index 61ae95e3..625cc40c 100644 --- a/src/REL/d/a/obj/d_a_obj_seat_sword.cpp +++ b/src/REL/d/a/obj/d_a_obj_seat_sword.cpp @@ -42,16 +42,14 @@ const InteractionTargetDef dAcOSeatSword_c::sInteractionDef = { const Vec dAcOSeatSword_c::sEffectPos = {-20.f, 260.f, 30.f}; -extern "C" const char *getSwordName(int); -extern "C" u8 EQUIPPED_SWORD; bool dAcOSeatSword_c::createHeap() { if (mSubtype == 0) { - const char *goddess_sword = getSwordName(1); + const char *goddess_sword = daPlayerActBase_c::getSwordName(1); mRes = dAcPy_c::getItemResFile(goddess_sword, heap_allocator); TRY_CREATE(mSwordMdl.create(mRes.GetResMdl(goddess_sword), &heap_allocator, 0x120, 1, nullptr)); } else if (mSubtype == 1) { - mRes = dAcPy_c::LINK->mSwordRes; - const char *sword_name = getSwordName(EQUIPPED_SWORD); + mRes = dAcPy_c::GetLink()->getSwordResFile(); + const char *sword_name = daPlayerActBase_c::getSwordName(daPlayerActBase_c::sCurrentSword); TRY_CREATE(mSwordMdl.create(mRes.GetResMdl(sword_name), &heap_allocator, 0x120, 1, nullptr)); } @@ -173,7 +171,7 @@ void dAcOSeatSword_c::registerInEvent() { ang.y += someAng; vec.rotY(rotation.y); vec += position; - player->setPosRot(vec, ang, 0, 1, 0); + player->setPosRot(&vec, &ang, 0, 1, 0); mField_0x7E8.set(0); updateSwordMdl(); } diff --git a/src/REL/d/a/obj/d_a_obj_tubo.cpp b/src/REL/d/a/obj/d_a_obj_tubo.cpp index ec396692..2c6d42ec 100644 --- a/src/REL/d/a/obj/d_a_obj_tubo.cpp +++ b/src/REL/d/a/obj/d_a_obj_tubo.cpp @@ -459,13 +459,13 @@ void dAcOtubo_c::destroy() { mActorCarryInfo.fn_80050EA0(this); dEmitterBase_c *fx_thing = dJEffManager_c::spawnEffect( - PARTICLE_RESOURCE_ID_MAPPING_209_, poscopy2, nullptr, nullptr, nullptr, nullptr, 0, 0 + PARTICLE_RESOURCE_ID_MAPPING_211_, poscopy2, nullptr, nullptr, nullptr, nullptr, 0, 0 ); if (fx_thing) { fx_thing->attachEmitterCallbackId(mSubtype != 0 ? dJEffManager_c::TsuboB : dJEffManager_c::TsuboA); } fx_thing = dJEffManager_c::spawnEffect( - PARTICLE_RESOURCE_ID_MAPPING_109_, position, nullptr, nullptr, nullptr, nullptr, 0, 0 + PARTICLE_RESOURCE_ID_MAPPING_116_, position, nullptr, nullptr, nullptr, nullptr, 0, 0 ); if (fx_thing) { fx_thing->bindShpEmitter(mSubtype != 0 ? dJEffManager_c::TsuboB : dJEffManager_c::TsuboA, false); @@ -573,7 +573,7 @@ void dAcOtubo_c::fn_272_2670() { static const s16 unk = {0}; // needed for rodata ordering if (!cM::isZero(mField_0x9CA)) { angle.y = (*(s16 *)((u8 *)this + 0x9CA)); // HACK to force load again - mField_0x9CA = 0; + mField_0x9CA.set(0); } else { mQuat_c q; q.set(1.f, 0.f, 0.f, 0.f); diff --git a/src/REL/d/t/d_t_holy_water.cpp b/src/REL/d/t/d_t_holy_water.cpp index bca20dcd..3cb475a2 100644 --- a/src/REL/d/t/d_t_holy_water.cpp +++ b/src/REL/d/t/d_t_holy_water.cpp @@ -21,7 +21,7 @@ int dTgHolyWater_c::actorExecute() { mDowsingTarget.doUnregister(); } if (isLinkNearby()) { - dAcPy_c::LINK->mForceOrPreventActionFlags |= 0x10000000; + dAcPy_c::LINK->onForceOrPreventActionFlags(0x10000000); } return SUCCEEDED; } diff --git a/src/REL/d/t/d_t_reaction.cpp b/src/REL/d/t/d_t_reaction.cpp index 9c55a906..9c8f32d1 100644 --- a/src/REL/d/t/d_t_reaction.cpp +++ b/src/REL/d/t/d_t_reaction.cpp @@ -7,6 +7,7 @@ #include "d/col/c/c_cc_d.h" #include "d/col/cc/d_cc_s.h" #include "d/d_pouch.h" +#include "d/d_sc_game.h" #include "d/flag/sceneflag_manager.h" #include "m/m_angle.h" #include "toBeSorted/small_sound_mgr.h" @@ -30,8 +31,6 @@ bool dTgReaction_c::createHeap() { return true; } -extern "C" bool isHeroMode(); - int dTgReaction_c::create() { // Note the double _c here if (!initAllocatorWork1Heap(0x1000, "dTgReaction_c_c::m_allocator", 0x20)) { @@ -54,7 +53,7 @@ int dTgReaction_c::create() { return FAILED; } - if (isHeroMode()) { + if (dScGame_c::isHeroMode()) { if (getParam0x10() == 1) { field_0x4DE = 1; } diff --git a/src/d/a/d_a_player.cpp b/src/d/a/d_a_player.cpp index f461951e..acffedc2 100644 --- a/src/d/a/d_a_player.cpp +++ b/src/d/a/d_a_player.cpp @@ -1,3 +1,10 @@ #include "d/a/d_a_player.h" dAcPy_c *dAcPy_c::LINK; + +// TODO: Disable this pragma when the ctors are matching +#pragma dont_inline on +dAcPy_c::dAcPy_c() {} +#pragma dont_inline reset + +dAcPy_c::~dAcPy_c() {} diff --git a/src/d/a/obj/d_a_obj_switch.cpp b/src/d/a/obj/d_a_obj_switch.cpp index f8145bbe..ffc58d74 100644 --- a/src/d/a/obj/d_a_obj_switch.cpp +++ b/src/d/a/obj/d_a_obj_switch.cpp @@ -43,20 +43,20 @@ void dAcOsw_c::rideCallback(dBgW *unknown, dAcObjBase_c *actor, dAcObjBase_c *in dAcOsw_c *sw = static_cast(actor); // halp - if (!(link == nullptr || ((link->mActionFlags & 0x40000) == 0 && - (((link->someFlags_0x340 & 0x800000) == 0 || + if (!(link == nullptr || (!link->checkActionFlags(dAcPy_c::FLG0_IN_WATER) && + ((!link->checkFlags0x340(0x800000) || ((link->getCurrentCarriedActor() != nullptr && link->getCurrentCarriedActor()->mActorCarryInfo.testCarryFlag(0x04)))))))) { return; } if (interactor->mActorCarryInfo.isCarried != 1) { - if (link == nullptr || (link->mActionFlags & 0xC70852) == 0) { + if (link == nullptr || (link->checkActionFlags(0xC70852)) == 0) { if (!sw->someInteractCheck(link != nullptr)) { bool needsOnFlag = sw->mOnSceneFlag < 0xFF && !SceneflagManager::sInstance->checkBoolFlag(sw->roomid, sw->mOnSceneFlag); if (!needsOnFlag && sw->mObjRef.get() == nullptr && link != nullptr && sw->field_0x5F1 == 0 && sw->mStateMgr.isState(StateID_On)) { - link->field_0x360 |= 0x8000; + link->onFlags_0x360(0x8000); } } } @@ -136,7 +136,7 @@ int dAcOsw_c::actorPostCreate() { int dAcOsw_c::doDelete() { dAcPy_c *link = dAcPy_c::LINK; if (mSwitchType != 1 && field_0x5F2 == 0) { - if ((link == nullptr || (link->someFlags_0x340 & 0x200) != 0) && (link == nullptr || link->roomid == roomid)) { + if ((link == nullptr || link->checkFlags0x340(0x200)) && (link == nullptr || link->roomid == roomid)) { if (mOffSceneFlag < 0xFF && SceneflagManager::sInstance->checkBoolFlag(roomid, mOffSceneFlag)) { SceneflagManager::sInstance->unsetFlag(roomid, mOffSceneFlag); } diff --git a/src/d/a/obj/d_a_obj_tbox.cpp b/src/d/a/obj/d_a_obj_tbox.cpp index 6f63a834..eea6e056 100644 --- a/src/d/a/obj/d_a_obj_tbox.cpp +++ b/src/d/a/obj/d_a_obj_tbox.cpp @@ -96,6 +96,7 @@ const cCcD_SrcGObj dAcTbox_c::sColSrc = { }; // clang-format on +// TODO: pragma readonly_strings on? static const char sGetTriForce[] = "GetTriForce"; static const char sGetSwordA[] = "GetSwordA"; static const char sGetHarp[] = "GetHarp"; diff --git a/src/d/d_player.cpp b/src/d/d_player.cpp deleted file mode 100644 index 1e0ef775..00000000 --- a/src/d/d_player.cpp +++ /dev/null @@ -1 +0,0 @@ -#include "d/d_player.h" diff --git a/src/d/d_player_act.cpp b/src/d/d_player_act.cpp new file mode 100644 index 00000000..35bd390c --- /dev/null +++ b/src/d/d_player_act.cpp @@ -0,0 +1,127 @@ +#include "d/d_player_act.h" + +#include "common.h" +#include "d/a/d_a_item.h" +#include "d/a/d_a_itembase.h" +#include "d/a/d_a_player.h" +#include "d/a/obj/d_a_obj_base.h" +#include "m/m_angle.h" +#include "m/m_color.h" +#include "m/m_vec.h" +#include "toBeSorted/event_manager.h" + +mVec3_c daPlayerActBase_c::sPos1(mVec3_c::Zero); +mVec3_c daPlayerActBase_c::sPos2(mVec3_c::Zero); +mAng daPlayerActBase_c::sRot1(0); +mAng daPlayerActBase_c::sRot2(0); +const f32 daPlayerActBase_c::sPushRelatedConstant = 75.0f; + +int daPlayerActBase_c::preExecute() { + if (dAcObjBase_c::preExecute() == NOT_READY) { + return NOT_READY; + } + someFlags_0x350 = 0; + someFlags_0x354 = 0; + return SUCCEEDED; +} + +void daPlayerActBase_c::postExecute(MAIN_STATE_e state) { + if (state != CANCELED) { + someFlags_0x358 = 0; + mForceOrPreventActionFlags = 0; + } + dAcObjBase_c::postExecute(state); +} + +bool daPlayerActBase_c::isInEvent() { + return EventManager::isInEvent(); +} + +bool daPlayerActBase_c::isAttackingLeft() const { + return mAttackDirection == ATTACK_SPIN_LEFT || mAttackDirection == ATTACK_SWING_LEFT; +} + +bool daPlayerActBase_c::isAttackingRight() const { + return mAttackDirection == ATTACK_SPIN_RIGHT || mAttackDirection == ATTACK_SWING_RIGHT; +} + +bool daPlayerActBase_c::isAttackingDown() const { + return mAttackDirection == ATTACK_SWING_DOWN || mAttackDirection == ATTACK_SPIN_DOWN || + mAttackDirection == ATTACK_JUMP_SLASH; +} + +bool daPlayerActBase_c::isAttackingUp() const { + return mAttackDirection == ATTACK_SPIN_UP || mAttackDirection == ATTACK_SWING_UP; +} + +bool daPlayerActBase_c::isAttackingStab() const { + return mAttackDirection == ATTACK_STAB; +} + +bool daPlayerActBase_c::isAttackingSpinHorizontal() const { + return mAttackDirection == ATTACK_SPIN_LEFT || mAttackDirection == ATTACK_SPIN_RIGHT; +} + +bool daPlayerActBase_c::isAttackingSpinVertical() const { + return mAttackDirection == ATTACK_SPIN_DOWN || mAttackDirection == ATTACK_SPIN_UP; +} + +void daPlayerActBase_c::setBonkRelatedAnimFlag(bool b) { + if (b) { + field_0x360 |= 2; + } else { + field_0x360 |= 1; + } +} + +void daPlayerActBase_c::setPosRot(const mVec3_c *pos, const mAng3_c *rot, bool force, UNKWORD, UNKWORD) { + if (isInEvent() || force) { + mStts.ClrCcMove(); + if (pos != nullptr) { + position = *pos; + mOldPosition = position; + velocity.y = 0.0f; + } + if (rot != nullptr) { + rotation = *rot; + angle.y = rotation.y; + } + } +} + +void daPlayerActBase_c::setPosYRot(const mVec3_c &pos, mAng rot, bool force, UNKWORD a4, UNKWORD a5) { + mAng3_c ang(0, rot, 0); + setPosRot(&pos, &ang, force, a4, a5); +} + +void daPlayerActBase_c::setTransform(const mMtx_c &mtx, bool force, UNKWORD a4, UNKWORD a5) { + mVec3_c translate; + mtx.getTranslation(translate); + mAng3_c rot; + mtx.toRot(rot); + setPosRot(&translate, &rot, force, a4, a5); +} + +extern "C" bool fn_80213090(dAcEnBase_c *); + +bool daPlayerActBase_c::someTargetedActorCheck() const { + return fn_80213090(getTargetedActor1()); +} + +mAng daPlayerActBase_c::fn_8005BA90() { + return dAcPy_c::LINK2->fn_8023B520(); +} + +mAng daPlayerActBase_c::fn_8005BAA0() { + return dAcPy_c::LINK2->fn_8023B590(); +} + +const mColor &daPlayerActBase_c::getEarringsColor() { + static const mColor sNoFireshieldEarrings = mColor(45, 80, 127, 255); + static const mColor sFireshieldEarrings = mColor(222, 57, 20, 255); + if (dAcItem_c::hasItem(ITEM_FIRESHIELD_EARRINGS)) { + return sFireshieldEarrings; + } else { + return sNoFireshieldEarrings; + } +} diff --git a/src/d/d_player_guide_colors.cpp b/src/d/d_player_guide_colors.cpp new file mode 100644 index 00000000..7d790887 --- /dev/null +++ b/src/d/d_player_guide_colors.cpp @@ -0,0 +1,7 @@ +#include "d/a/d_a_player.h" + +// Need to be their own file due to sbss alignment + +mColor daPlayerModelBase_c::sGuideColor1(0x00, 0x82, 0xDC, 0xFF); +mColor daPlayerModelBase_c::sGuideColor2(0x64, 0xFF, 0xFF, 0xFF); +mColor daPlayerModelBase_c::sGuideColor3(0x46, 0xC8, 0xFF, 0xFF); diff --git a/src/d/d_player_mdl.cpp b/src/d/d_player_mdl.cpp new file mode 100644 index 00000000..a994eebb --- /dev/null +++ b/src/d/d_player_mdl.cpp @@ -0,0 +1,1964 @@ +#include "d/d_player_mdl.h" + +#include "common.h" +#include "d/a/d_a_base.h" +#include "d/a/d_a_itembase.h" +#include "d/a/d_a_player.h" +#include "d/col/cc/d_cc_s.h" +#include "d/d_heap.h" +#include "d/d_pouch.h" +#include "d/d_rawarchive.h" +#include "d/d_sc_game.h" +#include "d/lyt/meter/d_lyt_meter.h" +#include "egg/core/eggHeap.h" +#include "m/m3d/m3d.h" +#include "m/m3d/m_fanm.h" +#include "m/m3d/m_mdl.h" +#include "m/m_allocator.h" +#include "m/m_mtx.h" +#include "m/m_vec.h" +#include "nw4r/g3d/g3d_anmchr.h" +#include "nw4r/g3d/g3d_anmobj.h" +#include "nw4r/g3d/g3d_scnmdl.h" +#include "nw4r/g3d/g3d_scnmdlsmpl.h" +#include "nw4r/g3d/g3d_scnobj.h" +#include "nw4r/g3d/res/g3d_resanmchr.h" +#include "nw4r/g3d/res/g3d_resanmclr.h" +#include "nw4r/g3d/res/g3d_resanmtexpat.h" +#include "nw4r/g3d/res/g3d_resanmtexsrt.h" +#include "nw4r/g3d/res/g3d_resfile.h" +#include "nw4r/g3d/res/g3d_resmdl.h" +#include "nw4r/g3d/res/g3d_resshp.h" +#include "nw4r/math/math_arithmetic.h" +#include "nw4r/math/math_types.h" +#include "rvl/CX/cx.h" +#include "rvl/GX/GXTypes.h" +#include "rvl/MTX/mtxvec.h" +#include "sized_string.h" +#include "toBeSorted/cx_util.h" +#include "toBeSorted/file_manager.h" +#include "toBeSorted/stage_render_stuff.h" + +static u8 sSavedHandMats[2] = {}; +static u8 sHandMats[14] = {}; + +#pragma push +#pragma readonly_strings on +static const char *sFaceResNames[] = { + "F_Default", + "Fmaba01", + "F_M", + "F_Ha", + "F_Cut", + "F_CutAround", + "F_Damage", + "F_DamageLarge", + "F_Die", + "F_DieLargeDamage", + "F_DieMagma", + "F_Pain", + "F_Wa", + "F_DrinkSt", + "F_Drink", + "F_DrinkEd", + "F_Breath", + "F_Close", + "F_entrance", + "F_Binout", + "F_GetBigWait", + "F_getAwaitNice", + "F_WaitLookRound", + "F_Danger", + "F_BinShield", + "F_swimDieA", + "F_WaitServiceA", + "F_WaitServiceHotA", + "F_BoxOp", + "F_Notice", + "F_swimP", + "F_BedSleep", + "F_BedAwake", + "F_SwordPullSt", + "F_SwordPullWait", + "F_SwordPull", + "F_SwordSirenSt", + "F_SwordSirenRaise", + "F_SwordSirenStick", + "F_SwordSirenAfter", + "F_Bird_Reach", + "F_Bird_GetWait", + "F_DieTruck", + "F_Bird_FestivalStart", + "F_GetSurprise", + "F_AsuraCut", + "F_AsuraCutSt", + "F_AsuraCutEd", + "F_CannonWait", + "F_KrakenAppearance", + "F_GetFlower", + "F_Harp", + "F_SitWaitServiceA", + "F_Lightning", + "F_LastAttack", + "F_Bird_Call", + // this one will go in sbss2 if you explicitly define each string + // with const char[], so either a pragma or a file wide flag is used, + // and this whole array is part of the .data pool + "", +}; + +// clang-format off +const PlayerAnimation daPlayerModelBase_c::sAnimations[] = { + { "atrFW", 13, 6, PLAYER_FACEMABA01, PLAYER_FACE_DEFAULT, PLAYER_FACE_DEFAULT}, + { "atrFW_R", 7, 0, PLAYER_FACEMABA01, PLAYER_FACE_DEFAULT, PLAYER_FACE_DEFAULT}, + { "atrFD", 13, 6, PLAYER_FACEMABA01, PLAYER_FACE_DEFAULT, PLAYER_FACE_DEFAULT}, + { "atrFD_R", 7, 0, PLAYER_FACEMABA01, PLAYER_FACE_DEFAULT, PLAYER_FACE_DEFAULT}, + { "atrbW", 13, 6, PLAYER_FACEMABA01, PLAYER_FACE_DEFAULT, PLAYER_FACE_DEFAULT}, + { "atrbW_R", 7, 0, PLAYER_FACEMABA01, PLAYER_FACE_DEFAULT, PLAYER_FACE_DEFAULT}, + { "atrbD", 13, 6, PLAYER_FACEMABA01, PLAYER_FACE_DEFAULT, PLAYER_FACE_DEFAULT}, + { "atrbD_R", 7, 0, PLAYER_FACEMABA01, PLAYER_FACE_DEFAULT, PLAYER_FACE_DEFAULT}, + { "atrsWL", 13, 6, PLAYER_FACEMABA01, PLAYER_FACE_DEFAULT, PLAYER_FACE_DEFAULT}, + { "atrsDL", 13, 6, PLAYER_FACEMABA01, PLAYER_FACE_DEFAULT, PLAYER_FACE_DEFAULT}, + { "atrsWR", 13, 6, PLAYER_FACEMABA01, PLAYER_FACE_DEFAULT, PLAYER_FACE_DEFAULT}, + { "atrsDR", 13, 6, PLAYER_FACEMABA01, PLAYER_FACE_DEFAULT, PLAYER_FACE_DEFAULT}, + { "atsWL", 13, 6, PLAYER_FACEMABA01, PLAYER_FACE_DEFAULT, PLAYER_FACE_DEFAULT}, + { "atsDL", 13, 6, PLAYER_FACEMABA01, PLAYER_FACE_DEFAULT, PLAYER_FACE_DEFAULT}, + { "atsWR", 13, 6, PLAYER_FACEMABA01, PLAYER_FACE_DEFAULT, PLAYER_FACE_DEFAULT}, + { "atsDR", 13, 6, PLAYER_FACEMABA01, PLAYER_FACE_DEFAULT, PLAYER_FACE_DEFAULT}, + { "atsWL_right", 13, 6, PLAYER_FACEMABA01, PLAYER_FACE_DEFAULT, PLAYER_FACE_DEFAULT}, + { "atsDL_right", 13, 6, PLAYER_FACEMABA01, PLAYER_FACE_DEFAULT, PLAYER_FACE_DEFAULT}, + { "atL", 9, 2, PLAYER_FACEMABA01, PLAYER_FACE_DEFAULT, PLAYER_FACE_DEFAULT}, + { "atR", 9, 2, PLAYER_FACEMABA01, PLAYER_FACE_DEFAULT, PLAYER_FACE_DEFAULT}, + { "dashA", 13, 56, PLAYER_FACEMABA01, PLAYER_FACE_DEFAULT, PLAYER_FACE_DEFAULT}, + { "dashS", 13, 56, PLAYER_FACEMABA01, PLAYER_FACE_DEFAULT, PLAYER_FACE_DEFAULT}, + { "atrbWH", 7, 0, PLAYER_FACEMABA01, PLAYER_FACE_DEFAULT, PLAYER_FACE_DEFAULT}, + { "atbW", 13, 6, PLAYER_FACEMABA01, PLAYER_FACE_DEFAULT, PLAYER_FACE_DEFAULT}, + { "atbD", 13, 6, PLAYER_FACEMABA01, PLAYER_FACE_DEFAULT, PLAYER_FACE_DEFAULT}, + { "walkH", 7, 50, PLAYER_FACEMABA01, PLAYER_FACE_DEFAULT, PLAYER_FACE_DEFAULT}, + { "waitS", 13, 56, PLAYER_FACEMABA01, PLAYER_FACE_DEFAULT, PLAYER_FACE_DEFAULT}, + { "walkS", 13, 56, PLAYER_FACEMABA01, PLAYER_FACE_DEFAULT, PLAYER_FACE_DEFAULT}, + { "stepL", 13, 56, PLAYER_FACEMABA01, PLAYER_FACE_DEFAULT, PLAYER_FACE_DEFAULT}, + { "stepR", 13, 56, PLAYER_FACEMABA01, PLAYER_FACE_DEFAULT, PLAYER_FACE_DEFAULT}, + { "atsJLSt", 7, 50, PLAYER_FACEMABA01, PLAYER_FACE_DEFAULT, PLAYER_FACE_M}, + { "atsJLEd", 9, 52, PLAYER_FACEMABA01, PLAYER_FACE_DEFAULT, PLAYER_FACE_M}, + { "atsJRSt", 7, 50, PLAYER_FACEMABA01, PLAYER_FACE_DEFAULT, PLAYER_FACE_M}, + { "atsJREd", 9, 52, PLAYER_FACEMABA01, PLAYER_FACE_DEFAULT, PLAYER_FACE_M}, + { "atsJFSt", 13, 56, PLAYER_FACEMABA01, PLAYER_FACE_DEFAULT, PLAYER_FACE_M}, + { "atsJFEd", 9, 52, PLAYER_FACEMABA01, PLAYER_FACE_DEFAULT, PLAYER_FACE_M}, + { "rollBSt", 13, 56, PLAYER_FACEMABA01, PLAYER_FACE_DEFAULT, PLAYER_FACE_M}, + { "rollBEd", 9, 52, PLAYER_FACEMABA01, PLAYER_FACE_DEFAULT, PLAYER_FACE_M}, + { "waitB", 9, 52, PLAYER_FACEMABA01, PLAYER_FACE_DEFAULT, PLAYER_FACE_M}, + { "waitBtoA", 9, 52, PLAYER_FACEMABA01, PLAYER_FACE_DEFAULT, PLAYER_FACE_DEFAULT}, + { "sjmpSt", 7, 50, PLAYER_FACEMABA01, PLAYER_FACE_DEFAULT, PLAYER_FACE_DEFAULT}, + { "sjmpEd", 7, 50, PLAYER_FACEMABA01, PLAYER_FACE_DEFAULT, PLAYER_FACE_DEFAULT}, + { "rollF", 7, 50, PLAYER_FACEMABA01, PLAYER_FACE_DEFAULT, PLAYER_FACE_M}, + { "rollFmis", 7, 0, PLAYER_FACE_CLOSE, PLAYER_FACE_DEFAULT, PLAYER_FACE_CLOSE}, + { "jumpSt", 7, 50, PLAYER_FACEMABA01, PLAYER_FACE_DEFAULT, PLAYER_FACE_M}, + { "jumpSEd", 7, 50, PLAYER_FACEMABA01, PLAYER_FACE_DEFAULT, PLAYER_FACE_M}, + { "vjmp", 7, 50, PLAYER_FACEMABA01, PLAYER_FACE_DEFAULT, PLAYER_FACE_M}, + { "vjmpChA", 7, 50, PLAYER_FACEMABA01, PLAYER_FACE_DEFAULT, PLAYER_FACE_M}, + { "vjmpChB", 7, 50, PLAYER_FACEMABA01, PLAYER_FACE_DEFAULT, PLAYER_FACE_M}, + { "vjmpCl", 7, 50, PLAYER_FACEMABA01, PLAYER_FACE_DEFAULT, PLAYER_FACE_M}, + { "hangL", 7, 50, PLAYER_FACEMABA01, PLAYER_FACE_DEFAULT, PLAYER_FACE_M}, + { "hangR", 7, 50, PLAYER_FACEMABA01, PLAYER_FACE_DEFAULT, PLAYER_FACE_M}, + { "Hang", 7, 50, PLAYER_FACEMABA01, PLAYER_FACE_DEFAULT, PLAYER_FACE_M}, + { "climbHang", 12, 55, PLAYER_FACEMABA01, PLAYER_FACE_DEFAULT, PLAYER_FACE_M}, + { "climbSlideL", 12, 55, PLAYER_FACEMABA01, PLAYER_FACE_DEFAULT, PLAYER_FACE_M}, + { "climbSlideR", 12, 55, PLAYER_FACEMABA01, PLAYER_FACE_DEFAULT, PLAYER_FACE_M}, + { "climbHangmiss", 12, 55, PLAYER_FACEMABA01, PLAYER_FACE_DEFAULT, PLAYER_FACE_M}, + { "climbStruggle", 12, 5, PLAYER_FACE_PAIN, PLAYER_FACE_DEFAULT, PLAYER_FACE_PAIN}, + { "ClimbIvyHang", 12, 5, PLAYER_FACEMABA01, PLAYER_FACE_DEFAULT, PLAYER_FACE_M}, + { "ClimbIvyL", 12, 5, PLAYER_FACEMABA01, PLAYER_FACE_DEFAULT, PLAYER_FACE_M}, + { "ClimbIvyR", 12, 5, PLAYER_FACEMABA01, PLAYER_FACE_DEFAULT, PLAYER_FACE_M}, + { "ClimbIvyL_St", 12, 5, PLAYER_FACEMABA01, PLAYER_FACE_DEFAULT, PLAYER_FACE_M}, + { "ClimbIvyR_St", 12, 5, PLAYER_FACEMABA01, PLAYER_FACE_DEFAULT, PLAYER_FACE_M}, + { "ClimbIvySlideL", 12, 5, PLAYER_FACEMABA01, PLAYER_FACE_DEFAULT, PLAYER_FACE_M}, + { "ClimbIvySlideR", 12, 5, PLAYER_FACEMABA01, PLAYER_FACE_DEFAULT, PLAYER_FACE_M}, + { "ClimbIvySlantLU_RD", 12, 5, PLAYER_FACEMABA01, PLAYER_FACE_DEFAULT, PLAYER_FACE_M}, + { "ClimbIvySlideRU_LD", 12, 5, PLAYER_FACEMABA01, PLAYER_FACE_DEFAULT, PLAYER_FACE_M}, + { "ladUpSt", 13, 6, PLAYER_FACEMABA01, PLAYER_FACE_DEFAULT, PLAYER_FACE_DEFAULT}, + { "ladUpEdL", 13, 6, PLAYER_FACEMABA01, PLAYER_FACE_DEFAULT, PLAYER_FACE_DEFAULT}, + { "ladUpEdR", 13, 6, PLAYER_FACEMABA01, PLAYER_FACE_DEFAULT, PLAYER_FACE_DEFAULT}, + { "ladDwSt", 13, 6, PLAYER_FACEMABA01, PLAYER_FACE_DEFAULT, PLAYER_FACE_DEFAULT}, + { "ladDWEdL", 13, 6, PLAYER_FACEMABA01, PLAYER_FACE_DEFAULT, PLAYER_FACE_DEFAULT}, + { "ladDWEdR", 13, 6, PLAYER_FACEMABA01, PLAYER_FACE_DEFAULT, PLAYER_FACE_DEFAULT}, + { "ladRtoL", 13, 6, PLAYER_FACEMABA01, PLAYER_FACE_DEFAULT, PLAYER_FACE_DEFAULT}, + { "ladLtoR", 13, 6, PLAYER_FACEMABA01, PLAYER_FACE_DEFAULT, PLAYER_FACE_DEFAULT}, + { "LadJumpUpSt", 13, 6, PLAYER_FACEMABA01, PLAYER_FACE_DEFAULT, PLAYER_FACE_DEFAULT}, + { "LadJumpDownSt", 13, 6, PLAYER_FACEMABA01, PLAYER_FACE_DEFAULT, PLAYER_FACE_DEFAULT}, + { "LadJumpUpEd", 13, 6, PLAYER_FACEMABA01, PLAYER_FACE_DEFAULT, PLAYER_FACE_DEFAULT}, + { "LadJumpDownEd", 13, 6, PLAYER_FACEMABA01, PLAYER_FACE_DEFAULT, PLAYER_FACE_DEFAULT}, + { "cutT", 13, 100, PLAYER_FACEMABA01, PLAYER_FACE_DEFAULT, PLAYER_FACE_M}, + { "cutTB", 13, 4, PLAYER_FACEMABA01, PLAYER_FACE_DEFAULT, PLAYER_FACE_M}, + { "cutTL", 13, 4, PLAYER_FACEMABA01, PLAYER_FACE_DEFAULT, PLAYER_FACE_M}, + { "cutTLB", 13, 4, PLAYER_FACEMABA01, PLAYER_FACE_DEFAULT, PLAYER_FACE_M}, + { "cutJSt", 13, 4, PLAYER_FACEMABA01, PLAYER_FACE_DEFAULT, PLAYER_FACE_M}, + { "cutJEd", 13, 4, PLAYER_FACEMABA01, PLAYER_FACE_DEFAULT, PLAYER_FACE_M}, + { "damF", 13, 56, PLAYER_FACE_DAMAGE, PLAYER_FACE_DEFAULT, PLAYER_FACE_DAMAGE}, + { "damB", 13, 56, PLAYER_FACE_DAMAGE, PLAYER_FACE_DEFAULT, PLAYER_FACE_DAMAGE}, + { "damL", 13, 56, PLAYER_FACE_DAMAGE, PLAYER_FACE_DEFAULT, PLAYER_FACE_DAMAGE}, + { "damR", 13, 56, PLAYER_FACE_DAMAGE, PLAYER_FACE_DEFAULT, PLAYER_FACE_DAMAGE}, + { "DamageMFront", 13, 56, PLAYER_FACE_DAMAGE, PLAYER_FACE_DEFAULT, PLAYER_FACE_DAMAGE}, + { "DamageMBack", 13, 56, PLAYER_FACE_DAMAGE, PLAYER_FACE_DEFAULT, PLAYER_FACE_DAMAGE}, + { "DamageMLeft", 13, 56, PLAYER_FACE_DAMAGE, PLAYER_FACE_DEFAULT, PLAYER_FACE_DAMAGE}, + { "DamageMRight", 13, 56, PLAYER_FACE_DAMAGE, PLAYER_FACE_DEFAULT, PLAYER_FACE_DAMAGE}, + { "damFF", 13, 56, PLAYER_FACE_DAMAGELARGE, PLAYER_FACE_DEFAULT, PLAYER_FACE_DAMAGELARGE}, + { "damFB", 13, 56, PLAYER_FACE_DAMAGELARGE, PLAYER_FACE_DEFAULT, PLAYER_FACE_DAMAGELARGE}, + { "damFL", 13, 56, PLAYER_FACE_DAMAGELARGE, PLAYER_FACE_DEFAULT, PLAYER_FACE_DAMAGELARGE}, + { "damFR", 13, 56, PLAYER_FACE_DAMAGELARGE, PLAYER_FACE_DEFAULT, PLAYER_FACE_DAMAGELARGE}, + { "damFFup", 7, 50, PLAYER_FACE_CLOSE, PLAYER_FACE_DEFAULT, PLAYER_FACE_CLOSE}, + { "damFBup", 7, 50, PLAYER_FACE_CLOSE, PLAYER_FACE_DEFAULT, PLAYER_FACE_CLOSE}, + { "damFLup", 7, 50, PLAYER_FACE_CLOSE, PLAYER_FACE_DEFAULT, PLAYER_FACE_CLOSE}, + { "damFRup", 7, 50, PLAYER_FACE_CLOSE, PLAYER_FACE_DEFAULT, PLAYER_FACE_CLOSE}, + { "DamageLFrontSlide", 7, 50, PLAYER_FACE_WA, PLAYER_FACE_DEFAULT, PLAYER_FACE_WA}, + { "DamageLBackSlide", 7, 50, PLAYER_FACE_WA, PLAYER_FACE_DEFAULT, PLAYER_FACE_WA}, + { "DamageLLeftSlide", 7, 50, PLAYER_FACE_WA, PLAYER_FACE_DEFAULT, PLAYER_FACE_WA}, + { "DamageLRightSlide", 7, 50, PLAYER_FACE_WA, PLAYER_FACE_DEFAULT, PLAYER_FACE_WA}, + { "dam", 13, 56, PLAYER_FACE_DAMAGE, PLAYER_FACE_DEFAULT, PLAYER_FACE_DAMAGE}, + { "landDamA", 7, 50, PLAYER_FACE_NONE, PLAYER_FACE_DEFAULT, PLAYER_FACE_NONE}, + { "landDamAst", 13, 50, PLAYER_FACE_CLOSE, PLAYER_FACE_DEFAULT, PLAYER_FACE_CLOSE}, + { "cutST", 9, 52, PLAYER_FACE_PAIN, PLAYER_FACE_DEFAULT, PLAYER_FACE_PAIN}, + { "atDefNG", 9, 52, PLAYER_FACE_DAMAGE, PLAYER_FACE_DEFAULT, PLAYER_FACE_DAMAGE}, + { "die", 13, 56, PLAYER_FACE_DIE, PLAYER_FACE_DIE, PLAYER_FACE_DIE}, + { "DieLargeDamageFront", 7, 0, PLAYER_FACE_DIELARGEDAMAGE, PLAYER_FACE_DIELARGEDAMAGE, PLAYER_FACE_DIELARGEDAMAGE}, + { "DieLargeDamageBack", 7, 0, PLAYER_FACE_DIELARGEDAMAGE, PLAYER_FACE_DIELARGEDAMAGE, PLAYER_FACE_DIELARGEDAMAGE}, + { "DieLargeDamageLeft", 7, 0, PLAYER_FACE_DIELARGEDAMAGE, PLAYER_FACE_DIELARGEDAMAGE, PLAYER_FACE_DIELARGEDAMAGE}, + { "DieLargeDamageRight", 7, 0, PLAYER_FACE_DIELARGEDAMAGE, PLAYER_FACE_DIELARGEDAMAGE, PLAYER_FACE_DIELARGEDAMAGE}, + { "swimwait", 7, 0, PLAYER_FACEMABA01, PLAYER_FACE_DEFAULT, PLAYER_FACE_DEFAULT}, + { "swimingA", 7, 0, PLAYER_FACEMABA01, PLAYER_FACE_DEFAULT, PLAYER_FACE_DEFAULT}, + { "swimP", 7, 0, PLAYER_FACE_SWIMP, PLAYER_FACE_SWIMP, PLAYER_FACE_SWIMP}, + { "atsSwL", 7, 0, PLAYER_FACEMABA01, PLAYER_FACE_DEFAULT, PLAYER_FACE_DEFAULT}, + { "atsSwR", 7, 0, PLAYER_FACEMABA01, PLAYER_FACE_DEFAULT, PLAYER_FACE_DEFAULT}, + { "atbSw", 7, 0, PLAYER_FACEMABA01, PLAYER_FACE_DEFAULT, PLAYER_FACE_DEFAULT}, + { "swimDive", 7, 0, PLAYER_FACEMABA01, PLAYER_FACE_DEFAULT, PLAYER_FACE_DEFAULT}, + { "swimingSt", 7, 0, PLAYER_FACEMABA01, PLAYER_FACE_DEFAULT, PLAYER_FACE_DEFAULT}, + { "swimingB", 7, 0, PLAYER_FACEMABA01, PLAYER_FACE_DEFAULT, PLAYER_FACE_DEFAULT}, + { "swimingC", 7, 0, PLAYER_FACEMABA01, PLAYER_FACE_DEFAULT, PLAYER_FACE_M}, + { "SwimAttackMiss", 7, 0, PLAYER_FACE_CLOSE, PLAYER_FACE_DEFAULT, PLAYER_FACE_CLOSE}, + { "damSwF", 13, 6, PLAYER_FACE_DAMAGE, PLAYER_FACE_DEFAULT, PLAYER_FACE_DAMAGE}, + { "damSwB", 13, 6, PLAYER_FACE_DAMAGE, PLAYER_FACE_DEFAULT, PLAYER_FACE_DAMAGE}, + { "damSwL", 13, 6, PLAYER_FACE_DAMAGE, PLAYER_FACE_DEFAULT, PLAYER_FACE_DAMAGE}, + { "damSwR", 13, 6, PLAYER_FACE_DAMAGE, PLAYER_FACE_DEFAULT, PLAYER_FACE_DAMAGE}, + { "damSwW", 13, 6, PLAYER_FACE_DAMAGE, PLAYER_FACE_DEFAULT, PLAYER_FACE_DAMAGE}, + { "swimDieA", 13, 6, PLAYER_FACE_SWIMDIEA, PLAYER_FACE_SWIMDIEA, PLAYER_FACE_SWIMDIEA}, + { "swimDieP", 7, 0, PLAYER_FACE_WA, PLAYER_FACE_DIE, PLAYER_FACE_WA}, + { "DieMagma", 7, 0, PLAYER_FACE_DIEMAGMA, PLAYER_FACE_DIEMAGMA, PLAYER_FACE_DIEMAGMA}, + { "slideF", 7, 50, PLAYER_FACE_WA, PLAYER_FACE_DEFAULT, PLAYER_FACE_WA}, + { "slideB", 7, 50, PLAYER_FACE_WA, PLAYER_FACE_DEFAULT, PLAYER_FACE_WA}, + { "slideFEd", 7, 50, PLAYER_FACEMABA01, PLAYER_FACE_DEFAULT, PLAYER_FACE_DEFAULT}, + { "slideBEd", 7, 50, PLAYER_FACEMABA01, PLAYER_FACE_DEFAULT, PLAYER_FACE_DEFAULT}, + { "HSjmpL", 8, 1, PLAYER_FACEMABA01, PLAYER_FACE_DEFAULT, PLAYER_FACE_M}, + { "HSjmpR", 8, 1, PLAYER_FACEMABA01, PLAYER_FACE_DEFAULT, PLAYER_FACE_M}, + { "HSshoot", 8, 1, PLAYER_FACEMABA01, PLAYER_FACE_DEFAULT, PLAYER_FACE_M}, + { "HShangEdL", 8, 1, PLAYER_FACEMABA01, PLAYER_FACE_DEFAULT, PLAYER_FACE_M}, + { "HShangEdR", 8, 1, PLAYER_FACEMABA01, PLAYER_FACE_DEFAULT, PLAYER_FACE_M}, + { "HShangL", 8, 1, PLAYER_FACEMABA01, PLAYER_FACE_DEFAULT, PLAYER_FACE_M}, + { "HShangR", 8, 1, PLAYER_FACEMABA01, PLAYER_FACE_DEFAULT, PLAYER_FACE_M}, + { "HShangwaitL", 8, 1, PLAYER_FACEMABA01, PLAYER_FACE_DEFAULT, PLAYER_FACE_M}, + { "HShangwaitR", 8, 1, PLAYER_FACEMABA01, PLAYER_FACE_DEFAULT, PLAYER_FACE_M}, + { "HShangshootL", 8, 1, PLAYER_FACEMABA01, PLAYER_FACE_DEFAULT, PLAYER_FACE_M}, + { "HShangshootR", 8, 1, PLAYER_FACEMABA01, PLAYER_FACE_DEFAULT, PLAYER_FACE_M}, + { "HSwallEdL", 8, 1, PLAYER_FACEMABA01, PLAYER_FACE_DEFAULT, PLAYER_FACE_M}, + { "HSwallEdR", 8, 1, PLAYER_FACEMABA01, PLAYER_FACE_DEFAULT, PLAYER_FACE_M}, + { "HSwallL", 8, 1, PLAYER_FACEMABA01, PLAYER_FACE_DEFAULT, PLAYER_FACE_M}, + { "HSwallR", 8, 1, PLAYER_FACEMABA01, PLAYER_FACE_DEFAULT, PLAYER_FACE_M}, + { "HSwallwaitL", 8, 1, PLAYER_FACEMABA01, PLAYER_FACE_DEFAULT, PLAYER_FACE_M}, + { "HSwallwaitR", 8, 1, PLAYER_FACEMABA01, PLAYER_FACE_DEFAULT, PLAYER_FACE_M}, + { "HSwallshootL", 8, 1, PLAYER_FACEMABA01, PLAYER_FACE_DEFAULT, PLAYER_FACE_M}, + { "HSwallshootR", 8, 1, PLAYER_FACEMABA01, PLAYER_FACE_DEFAULT, PLAYER_FACE_M}, + { "lie", 7, 0, PLAYER_FACEMABA01, PLAYER_FACE_DEFAULT, PLAYER_FACE_DEFAULT}, + { "lieF", 7, 0, PLAYER_FACEMABA01, PLAYER_FACE_DEFAULT, PLAYER_FACE_DEFAULT}, + { "waitST", 9, 2, PLAYER_FACE_PAIN, PLAYER_FACE_DEFAULT, PLAYER_FACE_PAIN}, + { "WaitStruggleDamage", 9, 2, PLAYER_FACE_DAMAGE, PLAYER_FACE_DEFAULT, PLAYER_FACE_DAMAGE}, + { "waitPP", 7, 0, PLAYER_FACEMABA01, PLAYER_FACE_DEFAULT, PLAYER_FACE_DEFAULT}, + { "pushW", 7, 0, PLAYER_FACEMABA01, PLAYER_FACE_DEFAULT, PLAYER_FACE_M}, + { "pullW", 8, 1, PLAYER_FACEMABA01, PLAYER_FACE_DEFAULT, PLAYER_FACE_M}, + { "jumpBSt", 7, 0, PLAYER_FACEMABA01, PLAYER_FACE_DEFAULT, PLAYER_FACE_HA}, + { "jumpB", 7, 0, PLAYER_FACEMABA01, PLAYER_FACE_DEFAULT, PLAYER_FACE_M}, + { "waitD", 13, 56, PLAYER_FACE_NONE, PLAYER_FACE_DEFAULT, PLAYER_FACE_NONE}, + { "waitAtoD", 13, 56, PLAYER_FACEMABA01, PLAYER_FACE_DEFAULT, PLAYER_FACE_DEFAULT}, + { "WaitServiceA", 13, 6, PLAYER_FACE_WAITSERVICEA, PLAYER_FACE_WAITSERVICEA, PLAYER_FACE_WAITSERVICEA}, + { "WaitServiceHotA", 13, 6, PLAYER_FACE_WAITSERVICEHOTA, PLAYER_FACE_WAITSERVICEHOTA, PLAYER_FACE_WAITSERVICEHOTA}, + { "dashUpL", 9, 52, PLAYER_FACEMABA01, PLAYER_FACE_DEFAULT, PLAYER_FACE_M}, + { "dashUpR", 9, 52, PLAYER_FACEMABA01, PLAYER_FACE_DEFAULT, PLAYER_FACE_M}, + { "climbjumpUSt", 12, 5, PLAYER_FACEMABA01, PLAYER_FACE_DEFAULT, PLAYER_FACE_M}, + { "climbjumpDSt", 12, 5, PLAYER_FACEMABA01, PLAYER_FACE_DEFAULT, PLAYER_FACE_M}, + { "climbjumpLSt", 12, 55, PLAYER_FACEMABA01, PLAYER_FACE_DEFAULT, PLAYER_FACE_M}, + { "climbjumpRSt", 12, 55, PLAYER_FACEMABA01, PLAYER_FACE_DEFAULT, PLAYER_FACE_M}, + { "climbjumpUEd", 12, 5, PLAYER_FACEMABA01, PLAYER_FACE_DEFAULT, PLAYER_FACE_M}, + { "climbjumpDEd", 12, 5, PLAYER_FACEMABA01, PLAYER_FACE_DEFAULT, PLAYER_FACE_M}, + { "climbjumpLEd", 12, 5, PLAYER_FACEMABA01, PLAYER_FACE_DEFAULT, PLAYER_FACE_M}, + { "climbjumpREd", 12, 5, PLAYER_FACEMABA01, PLAYER_FACE_DEFAULT, PLAYER_FACE_M}, + { "hangjumpLSt", 7, 50, PLAYER_FACEMABA01, PLAYER_FACE_DEFAULT, PLAYER_FACE_M}, + { "hangjumpRSt", 7, 50, PLAYER_FACEMABA01, PLAYER_FACE_DEFAULT, PLAYER_FACE_M}, + { "hangjumpLEd", 7, 50, PLAYER_FACEMABA01, PLAYER_FACE_DEFAULT, PLAYER_FACE_M}, + { "hangjumpREd", 7, 50, PLAYER_FACEMABA01, PLAYER_FACE_DEFAULT, PLAYER_FACE_M}, + { "DoorKnobPull", 13, 6, PLAYER_FACEMABA01, PLAYER_FACE_DEFAULT, PLAYER_FACE_DEFAULT}, + { "DoorKnobPush", 13, 6, PLAYER_FACEMABA01, PLAYER_FACE_DEFAULT, PLAYER_FACE_DEFAULT}, + { "DoorKnobPullLock", 13, 5, PLAYER_FACEMABA01, PLAYER_FACE_DEFAULT, PLAYER_FACE_DEFAULT}, + { "DoorKnobPushLock", 13, 5, PLAYER_FACEMABA01, PLAYER_FACE_DEFAULT, PLAYER_FACE_DEFAULT}, + { "DoorOpD", 7, 0, PLAYER_FACEMABA01, PLAYER_FACE_DEFAULT, PLAYER_FACE_M}, + { "dashB", 13, 6, PLAYER_FACEMABA01, PLAYER_FACE_DEFAULT, PLAYER_FACE_M}, + { "MgDig", 13, 6, PLAYER_FACEMABA01, PLAYER_FACE_DEFAULT, PLAYER_FACE_DEFAULT}, + { "MPCutU", 13, 4, PLAYER_FACEMABA01, PLAYER_FACE_DEFAULT, PLAYER_FACE_M}, + { "MPCutU_Re", 13, 4, PLAYER_FACEMABA01, PLAYER_FACE_DEFAULT, PLAYER_FACE_M}, + { "MPCutLU", 13, 4, PLAYER_FACEMABA01, PLAYER_FACE_DEFAULT, PLAYER_FACE_M}, + { "MPCutLU_Re", 13, 4, PLAYER_FACEMABA01, PLAYER_FACE_DEFAULT, PLAYER_FACE_M}, + { "MPCutL", 13, 4, PLAYER_FACEMABA01, PLAYER_FACE_DEFAULT, PLAYER_FACE_M}, + { "MPCutL_Re", 13, 4, PLAYER_FACEMABA01, PLAYER_FACE_DEFAULT, PLAYER_FACE_M}, + { "MPCutLD", 13, 4, PLAYER_FACEMABA01, PLAYER_FACE_DEFAULT, PLAYER_FACE_M}, + { "MPCutLD_Re", 13, 4, PLAYER_FACEMABA01, PLAYER_FACE_DEFAULT, PLAYER_FACE_M}, + { "MPCutRD", 13, 4, PLAYER_FACEMABA01, PLAYER_FACE_DEFAULT, PLAYER_FACE_M}, + { "MPCutRD_Re", 13, 4, PLAYER_FACEMABA01, PLAYER_FACE_DEFAULT, PLAYER_FACE_M}, + { "MPCutR", 13, 4, PLAYER_FACEMABA01, PLAYER_FACE_DEFAULT, PLAYER_FACE_M}, + { "MPCutR_Re", 13, 4, PLAYER_FACEMABA01, PLAYER_FACE_DEFAULT, PLAYER_FACE_M}, + { "MPCutRU", 13, 4, PLAYER_FACEMABA01, PLAYER_FACE_DEFAULT, PLAYER_FACE_M}, + { "MPCutRU_Re", 13, 4, PLAYER_FACEMABA01, PLAYER_FACE_DEFAULT, PLAYER_FACE_M}, + { "MPCutD_right", 13, 4, PLAYER_FACEMABA01, PLAYER_FACE_DEFAULT, PLAYER_FACE_M}, + { "MPCutD_right_Re", 13, 4, PLAYER_FACEMABA01, PLAYER_FACE_DEFAULT, PLAYER_FACE_M}, + { "MPCutD_left", 13, 4, PLAYER_FACEMABA01, PLAYER_FACE_DEFAULT, PLAYER_FACE_M}, + { "MPCutD_left_Re", 13, 4, PLAYER_FACEMABA01, PLAYER_FACE_DEFAULT, PLAYER_FACE_M}, + { "CutPush", 13, 4, PLAYER_FACEMABA01, PLAYER_FACE_DEFAULT, PLAYER_FACE_M}, + { "CutPush_Re", 13, 4, PLAYER_FACEMABA01, PLAYER_FACE_DEFAULT, PLAYER_FACE_M}, + { "EnemyGuardJust", 13, 100, PLAYER_FACE_DAMAGE, PLAYER_FACE_DEFAULT, PLAYER_FACE_DAMAGE}, + { "LiftB_Before", 7, 0, PLAYER_FACEMABA01, PLAYER_FACE_DEFAULT, PLAYER_FACE_DEFAULT}, + { "LiftM_Before", 7, 0, PLAYER_FACEMABA01, PLAYER_FACE_DEFAULT, PLAYER_FACE_DEFAULT}, + { "LiftB", 7, 0, PLAYER_FACEMABA01, PLAYER_FACE_DEFAULT, PLAYER_FACE_DEFAULT}, + { "LiftS", 7, 0, PLAYER_FACEMABA01, PLAYER_FACE_DEFAULT, PLAYER_FACE_DEFAULT}, + { "LiftM", 7, 0, PLAYER_FACEMABA01, PLAYER_FACE_DEFAULT, PLAYER_FACE_DEFAULT}, + { "LiftL", 7, 0, PLAYER_FACEMABA01, PLAYER_FACE_DEFAULT, PLAYER_FACE_M}, + { "ThrowBU", 7, 0, PLAYER_FACEMABA01, PLAYER_FACE_DEFAULT, PLAYER_FACE_M}, + { "ThrowSU", 7, 0, PLAYER_FACEMABA01, PLAYER_FACE_DEFAULT, PLAYER_FACE_M}, + { "ThrowMU", 7, 0, PLAYER_FACEMABA01, PLAYER_FACE_DEFAULT, PLAYER_FACE_M}, + { "ThrowLU", 7, 0, PLAYER_FACEMABA01, PLAYER_FACE_DEFAULT, PLAYER_FACE_M}, + { "ThrowBD", 7, 0, PLAYER_FACEMABA01, PLAYER_FACE_DEFAULT, PLAYER_FACE_M}, + { "ThrowSD", 7, 0, PLAYER_FACEMABA01, PLAYER_FACE_DEFAULT, PLAYER_FACE_M}, + { "MPGuardShield", 7, 2, PLAYER_FACE_CUT, PLAYER_FACE_DEFAULT, PLAYER_FACE_CUT}, + { "MPGuardShield_Impact", 7, 2, PLAYER_FACEMABA01, PLAYER_FACE_DEFAULT, PLAYER_FACE_M}, + { "MPGuardShield_Normal", 7, 2, PLAYER_FACEMABA01, PLAYER_FACE_DEFAULT, PLAYER_FACE_M}, + { "vjmpChA", 8, 1, PLAYER_FACEMABA01, PLAYER_FACE_DEFAULT, PLAYER_FACE_M}, + { "RopeHoldWait", 8, 1, PLAYER_FACEMABA01, PLAYER_FACE_DEFAULT, PLAYER_FACE_M}, + { "RopeClimbL", 8, 1, PLAYER_FACEMABA01, PLAYER_FACE_DEFAULT, PLAYER_FACE_M}, + { "RopeHoldWait", 8, 1, PLAYER_FACEMABA01, PLAYER_FACE_DEFAULT, PLAYER_FACE_M}, + { "RopePull", 8, 1, PLAYER_FACEMABA01, PLAYER_FACE_DEFAULT, PLAYER_FACE_M}, + { "RopeTightHold", 8, 1, PLAYER_FACEMABA01, PLAYER_FACE_DEFAULT, PLAYER_FACE_M}, + { "RopeFront", 8, 1, PLAYER_FACEMABA01, PLAYER_FACE_DEFAULT, PLAYER_FACE_M}, + { "RopeBack", 8, 1, PLAYER_FACEMABA01, PLAYER_FACE_DEFAULT, PLAYER_FACE_M}, + { "RopeStruggle", 8, 1, PLAYER_FACE_PAIN, PLAYER_FACE_DEFAULT, PLAYER_FACE_PAIN}, + { "DiveSt", 7, 0, PLAYER_FACEMABA01, PLAYER_FACE_DEFAULT, PLAYER_FACE_M}, + { "Dive", 7, 0, PLAYER_FACEMABA01, PLAYER_FACE_DEFAULT, PLAYER_FACE_M}, + { "StoleLand", 13, 6, PLAYER_FACEMABA01, PLAYER_FACE_DEFAULT, PLAYER_FACE_M}, + { "DiveDrop", 7, 0, PLAYER_FACEMABA01, PLAYER_FACE_DEFAULT, PLAYER_FACE_M}, + { "Float", 9, 2, PLAYER_FACEMABA01, PLAYER_FACE_DEFAULT, PLAYER_FACE_DEFAULT}, + { "FloatAway", 9, 2, PLAYER_FACE_WA, PLAYER_FACE_DEFAULT, PLAYER_FACE_WA}, + { "DiveToFloat", 9, 2, PLAYER_FACEMABA01, PLAYER_FACE_DEFAULT, PLAYER_FACE_M}, + { "RocketBeetle_Wait", 9, 2, PLAYER_FACEMABA01, PLAYER_FACE_DEFAULT, PLAYER_FACE_DEFAULT}, + { "RocketBeetle_Shoot", 9, 2, PLAYER_FACEMABA01, PLAYER_FACE_DEFAULT, PLAYER_FACE_DEFAULT}, + { "RocketBeetle_Reset", 9, 2, PLAYER_FACEMABA01, PLAYER_FACE_DEFAULT, PLAYER_FACE_DEFAULT}, + { "RocketBeetle_Back", 9, 2, PLAYER_FACEMABA01, PLAYER_FACE_DEFAULT, PLAYER_FACE_DEFAULT}, + { "WhipU", 8, 4, PLAYER_FACEMABA01, PLAYER_FACE_DEFAULT, PLAYER_FACE_M}, + { "WhipLU", 8, 4, PLAYER_FACEMABA01, PLAYER_FACE_DEFAULT, PLAYER_FACE_M}, + { "WhipL", 8, 4, PLAYER_FACEMABA01, PLAYER_FACE_DEFAULT, PLAYER_FACE_M}, + { "WhipLD", 8, 4, PLAYER_FACEMABA01, PLAYER_FACE_DEFAULT, PLAYER_FACE_M}, + { "WhipRD", 8, 4, PLAYER_FACEMABA01, PLAYER_FACE_DEFAULT, PLAYER_FACE_M}, + { "WhipR", 8, 4, PLAYER_FACEMABA01, PLAYER_FACE_DEFAULT, PLAYER_FACE_M}, + { "WhipRU", 8, 4, PLAYER_FACEMABA01, PLAYER_FACE_DEFAULT, PLAYER_FACE_M}, + { "WhipBackRD", 7, 0, PLAYER_FACEMABA01, PLAYER_FACE_DEFAULT, PLAYER_FACE_M}, + { "WhipBackR", 7, 0, PLAYER_FACEMABA01, PLAYER_FACE_DEFAULT, PLAYER_FACE_M}, + { "WhipBackRU", 7, 0, PLAYER_FACEMABA01, PLAYER_FACE_DEFAULT, PLAYER_FACE_M}, + { "WhipBackU", 7, 0, PLAYER_FACEMABA01, PLAYER_FACE_DEFAULT, PLAYER_FACE_M}, + { "WhipBackLU", 7, 0, PLAYER_FACEMABA01, PLAYER_FACE_DEFAULT, PLAYER_FACE_M}, + { "WhipBackL", 7, 0, PLAYER_FACEMABA01, PLAYER_FACE_DEFAULT, PLAYER_FACE_M}, + { "WhipBackLD", 7, 0, PLAYER_FACEMABA01, PLAYER_FACE_DEFAULT, PLAYER_FACE_M}, + { "turnBack", 13, 6, PLAYER_FACEMABA01, PLAYER_FACE_DEFAULT, PLAYER_FACE_M}, + { "atLtoR", 7, 0, PLAYER_FACEMABA01, PLAYER_FACE_DEFAULT, PLAYER_FACE_DEFAULT}, + { "atRtoL", 7, 0, PLAYER_FACEMABA01, PLAYER_FACE_DEFAULT, PLAYER_FACE_DEFAULT}, + { "ChuchuStruggle", 9, 52, PLAYER_FACE_PAIN, PLAYER_FACE_DEFAULT, PLAYER_FACE_PAIN}, + { "ChuchuStruggle_big", 9, 52, PLAYER_FACE_PAIN, PLAYER_FACE_DEFAULT, PLAYER_FACE_PAIN}, + { "ChuchuStruggle_act", 9, 52, PLAYER_FACEMABA01, PLAYER_FACE_DEFAULT, PLAYER_FACE_M}, + {"ChuchuStruggle_Escape", 9, 52, PLAYER_FACEMABA01, PLAYER_FACE_DEFAULT, PLAYER_FACE_M}, + { "Surprise", 13, 56, PLAYER_FACE_WA, PLAYER_FACE_DEFAULT, PLAYER_FACE_WA}, + { "Danger", 9, 52, PLAYER_FACE_DANGER, PLAYER_FACE_DANGER, PLAYER_FACE_DANGER}, + { "RockRide", 9, 52, PLAYER_FACE_WA, PLAYER_FACE_DEFAULT, PLAYER_FACE_WA}, + { "Notice", 13, 56, PLAYER_FACE_NOTICE, PLAYER_FACE_NOTICE, PLAYER_FACE_NOTICE}, + { "waitinsect", 9, 52, PLAYER_FACE_PAIN, PLAYER_FACE_DEFAULT, PLAYER_FACE_PAIN}, + { "numbA", 12, 55, PLAYER_FACE_DAMAGELARGE, PLAYER_FACE_DEFAULT, PLAYER_FACE_DAMAGELARGE}, + { "numbB", 12, 5, PLAYER_FACE_DAMAGELARGE, PLAYER_FACE_DEFAULT, PLAYER_FACE_DAMAGELARGE}, + { "damFEF", 7, 50, PLAYER_FACE_DAMAGELARGE, PLAYER_FACE_DEFAULT, PLAYER_FACE_DAMAGELARGE}, + { "damFEB", 7, 50, PLAYER_FACE_DAMAGELARGE, PLAYER_FACE_DEFAULT, PLAYER_FACE_DAMAGELARGE}, + { "damFEL", 7, 50, PLAYER_FACE_DAMAGELARGE, PLAYER_FACE_DEFAULT, PLAYER_FACE_DAMAGELARGE}, + { "damFER", 7, 50, PLAYER_FACE_DAMAGELARGE, PLAYER_FACE_DEFAULT, PLAYER_FACE_DAMAGELARGE}, + { "getA", 7, 0, PLAYER_FACEMABA01, PLAYER_FACE_DEFAULT, PLAYER_FACE_DEFAULT}, + { "getAwait", 7, 0, PLAYER_FACEMABA01, PLAYER_FACE_GETAWAITNICE, PLAYER_FACE_GETAWAITNICE}, + { "GetBig", 7, 0, PLAYER_FACEMABA01, PLAYER_FACE_DEFAULT, PLAYER_FACE_DEFAULT}, + { "GetBigWait", 7, 0, PLAYER_FACEMABA01, PLAYER_FACE_GETBIGWAIT, PLAYER_FACE_GETBIGWAIT}, + { "BoxOpSmall", 7, 0, PLAYER_FACEMABA01, PLAYER_FACE_DEFAULT, PLAYER_FACE_DEFAULT}, + { "BoxOp", 7, 0, PLAYER_FACEMABA01, PLAYER_FACE_BOXOP, PLAYER_FACE_BOXOP}, + { "cutUSt", 7, 100, PLAYER_FACEMABA01, PLAYER_FACE_DEFAULT, PLAYER_FACE_M}, + { "cutU", 7, 100, PLAYER_FACEMABA01, PLAYER_FACE_DEFAULT, PLAYER_FACE_M}, + { "cutUEd", 9, 100, PLAYER_FACEMABA01, PLAYER_FACE_DEFAULT, PLAYER_FACE_M}, + { "cutUNG", 9, 100, PLAYER_FACEMABA01, PLAYER_FACE_DEFAULT, PLAYER_FACE_M}, + { "WaitLookRound", 13, 56, PLAYER_FACEMABA01, PLAYER_FACE_WAITLOOKROUND, PLAYER_FACE_WAITLOOKROUND}, + { "entrance", 13, 6, PLAYER_FACE_ENTRANCE, PLAYER_FACE_ENTRANCE, PLAYER_FACE_ENTRANCE}, + { "MPPosePower", 13, 255, PLAYER_FACEMABA01, PLAYER_FACE_DEFAULT, PLAYER_FACE_M}, + { "MPPosePowerL", 13, 255, PLAYER_FACEMABA01, PLAYER_FACE_DEFAULT, PLAYER_FACE_M}, + { "BinswingS", 13, 5, PLAYER_FACEMABA01, PLAYER_FACE_DEFAULT, PLAYER_FACE_DEFAULT}, + { "BinswingU", 13, 5, PLAYER_FACEMABA01, PLAYER_FACE_DEFAULT, PLAYER_FACE_DEFAULT}, + { "Binout", 13, 5, PLAYER_FACE_BINOUT, PLAYER_FACE_BINOUT, PLAYER_FACE_BINOUT}, + { "Drift", 7, 0, PLAYER_FACE_DAMAGELARGE, PLAYER_FACE_DEFAULT, PLAYER_FACE_DAMAGELARGE}, + { "swimDieARevive", 13, 6, PLAYER_FACE_CLOSE, PLAYER_FACE_DEFAULT, PLAYER_FACE_CLOSE}, + { "MgLieFRevive", 7, 0, PLAYER_FACE_CLOSE, PLAYER_FACE_DEFAULT, PLAYER_FACE_CLOSE}, + { "CatchL", 13, 6, PLAYER_FACEMABA01, PLAYER_FACE_DEFAULT, PLAYER_FACE_DEFAULT}, + { "CatchR", 13, 6, PLAYER_FACEMABA01, PLAYER_FACE_DEFAULT, PLAYER_FACE_DEFAULT}, + { "BattleReady", 9, 52, PLAYER_FACEMABA01, PLAYER_FACE_DEFAULT, PLAYER_FACE_M}, + { "RollJump", 13, 6, PLAYER_FACEMABA01, PLAYER_FACE_DEFAULT, PLAYER_FACE_M}, + { "TansuOpen", 13, 6, PLAYER_FACEMABA01, PLAYER_FACE_DEFAULT, PLAYER_FACE_DEFAULT}, + { "TansuClose", 13, 6, PLAYER_FACEMABA01, PLAYER_FACE_DEFAULT, PLAYER_FACE_DEFAULT}, + { "BedSleepL", 13, 6, PLAYER_FACE_BEDSLEEP, PLAYER_FACE_BEDSLEEP, PLAYER_FACE_BEDSLEEP}, + { "BedSleep", 13, 6, PLAYER_FACE_BEDSLEEP, PLAYER_FACE_BEDSLEEP, PLAYER_FACE_BEDSLEEP}, + { "BedAwake", 8, 1, PLAYER_FACE_BEDAWAKE, PLAYER_FACE_BEDAWAKE, PLAYER_FACE_BEDAWAKE}, + { "Bird_Glide", 8, 1, PLAYER_FACEMABA01, PLAYER_FACE_DEFAULT, PLAYER_FACE_DEFAULT}, + { "Bird_GlideAround", 8, 1, PLAYER_FACEMABA01, PLAYER_FACE_DEFAULT, PLAYER_FACE_DEFAULT}, + { "Bird_Reach", 8, 5, PLAYER_FACE_BIRD_REACH, PLAYER_FACE_BIRD_REACH, PLAYER_FACE_BIRD_REACH}, + { "Bird_GetWait", 8, 0, PLAYER_FACE_BIRD_GETWAIT, PLAYER_FACE_BIRD_GETWAIT, PLAYER_FACE_BIRD_GETWAIT}, + { "Bird_Accel", 8, 1, PLAYER_FACE_CUT, PLAYER_FACE_DEFAULT, PLAYER_FACE_CUT}, + { "Bird_Damage", 8, 1, PLAYER_FACE_DAMAGE, PLAYER_FACE_DEFAULT, PLAYER_FACE_DAMAGE}, + { "Bird_DamageSmall", 8, 1, PLAYER_FACE_DAMAGE, PLAYER_FACE_DEFAULT, PLAYER_FACE_DAMAGE}, + { "Bird_DamageTornado", 8, 1, PLAYER_FACE_DAMAGELARGE, PLAYER_FACE_DEFAULT, PLAYER_FACE_DAMAGELARGE}, + { "Bird_Call", 10, 3, PLAYER_FACEMABA01, PLAYER_FACE_DEFAULT, PLAYER_FACE_BIRD_CALL}, + { "SwordPullSt", 13, 6, PLAYER_FACE_SWORDPULLST, PLAYER_FACE_SWORDPULLST, PLAYER_FACE_SWORDPULLST}, + { "SwordPullWait", 8, 1, PLAYER_FACEMABA01, PLAYER_FACE_DEFAULT, PLAYER_FACE_SWORDPULLWAIT}, + { "SwordPull", 8, 1, PLAYER_FACE_SWORDPULL, PLAYER_FACE_SWORDPULL, PLAYER_FACE_SWORDPULL}, + { "SwordSirenSt", 13, 1, PLAYER_FACE_SWORDSIRENST, PLAYER_FACE_SWORDSIRENST, PLAYER_FACE_SWORDSIRENST}, + { "SwordSirenStWait", 8, 1, PLAYER_FACE_SWORDSIRENST, PLAYER_FACE_SWORDSIRENST, PLAYER_FACE_SWORDSIRENST}, + { "SwordSirenRaise", 8, 1, PLAYER_FACE_SWORDSIRENRAISE, PLAYER_FACE_SWORDSIRENRAISE, PLAYER_FACE_SWORDSIRENRAISE}, + { "SwordSirenRaiseWait", 8, 1, PLAYER_FACE_SWORDSIRENRAISE, PLAYER_FACE_SWORDSIRENRAISE, PLAYER_FACE_SWORDSIRENRAISE}, + { "SwordSirenStick", 8, 1, PLAYER_FACE_SWORDSIRENSTICK, PLAYER_FACE_SWORDSIRENSTICK, PLAYER_FACE_SWORDSIRENSTICK}, + { "SwordSirenAfter", 8, 100, PLAYER_FACE_SWORDSIRENAFTER, PLAYER_FACE_SWORDSIRENAFTER, PLAYER_FACE_SWORDSIRENAFTER}, + { "SwitchDial_st", 9, 4, PLAYER_FACEMABA01, PLAYER_FACE_DEFAULT, PLAYER_FACE_M}, + { "SwitchDial_stL", 9, 4, PLAYER_FACEMABA01, PLAYER_FACE_DEFAULT, PLAYER_FACE_M}, + { "SwitchDial_LtoR", 9, 4, PLAYER_FACEMABA01, PLAYER_FACE_DEFAULT, PLAYER_FACE_M}, + { "SwitchDial_push", 9, 4, PLAYER_FACEMABA01, PLAYER_FACE_DEFAULT, PLAYER_FACE_M}, + { "TruckLtoR", 12, 5, PLAYER_FACEMABA01, PLAYER_FACE_DEFAULT, PLAYER_FACE_M}, + { "TruckFrontToBack", 12, 5, PLAYER_FACEMABA01, PLAYER_FACE_DEFAULT, PLAYER_FACE_M}, + { "TruckJumpSt", 12, 5, PLAYER_FACEMABA01, PLAYER_FACE_DEFAULT, PLAYER_FACE_M}, + { "TruckJump", 12, 5, PLAYER_FACEMABA01, PLAYER_FACE_DEFAULT, PLAYER_FACE_M}, + { "TruckJumpEnd", 12, 5, PLAYER_FACE_WA, PLAYER_FACE_DEFAULT, PLAYER_FACE_WA}, + { "TruckBrake", 12, 5, PLAYER_FACE_PAIN, PLAYER_FACE_DEFAULT, PLAYER_FACE_PAIN}, + { "TruckIn", 13, 6, PLAYER_FACEMABA01, PLAYER_FACE_DEFAULT, PLAYER_FACE_DEFAULT}, + { "TruckOut", 13, 6, PLAYER_FACEMABA01, PLAYER_FACE_DEFAULT, PLAYER_FACE_DEFAULT}, + { "DieTruck", 13, 56, PLAYER_FACE_DIETRUCK, PLAYER_FACE_DIETRUCK, PLAYER_FACE_DIETRUCK}, + { "DieTruckRevive", 13, 56, PLAYER_FACE_CLOSE, PLAYER_FACE_DEFAULT, PLAYER_FACE_CLOSE}, + { "MgDigIn", 7, 0, PLAYER_FACEMABA01, PLAYER_FACE_DEFAULT, PLAYER_FACE_M}, + { "MgDigOut", 7, 0, PLAYER_FACEMABA01, PLAYER_FACE_DEFAULT, PLAYER_FACE_M}, + { "MgLieF_L", 7, 0, PLAYER_FACEMABA01, PLAYER_FACE_DEFAULT, PLAYER_FACE_DEFAULT}, + { "MgLieF_R", 7, 0, PLAYER_FACEMABA01, PLAYER_FACE_DEFAULT, PLAYER_FACE_DEFAULT}, + { "MgAttackL", 7, 0, PLAYER_FACE_CUT, PLAYER_FACE_DEFAULT, PLAYER_FACE_CUT}, + { "MgAttackR", 7, 0, PLAYER_FACE_CUT, PLAYER_FACE_DEFAULT, PLAYER_FACE_CUT}, + { "MgDashL", 7, 0, PLAYER_FACEMABA01, PLAYER_FACE_DEFAULT, PLAYER_FACE_M}, + { "MgDashR", 7, 0, PLAYER_FACEMABA01, PLAYER_FACE_DEFAULT, PLAYER_FACE_M}, + { "MgDamage", 7, 0, PLAYER_FACE_DAMAGE, PLAYER_FACE_DEFAULT, PLAYER_FACE_DAMAGE}, + { "MgWaitBreath", 7, 0, PLAYER_FACE_BREATH, PLAYER_FACE_DEFAULT, PLAYER_FACE_BREATH}, + { "MgLieUp", 7, 0, PLAYER_FACEMABA01, PLAYER_FACE_DEFAULT, PLAYER_FACE_M}, + { "LiftRemly", 13, 6, PLAYER_FACEMABA01, PLAYER_FACE_GETAWAITNICE, PLAYER_FACE_GETAWAITNICE}, + { "ThrowRemlyUp", 13, 6, PLAYER_FACEMABA01, PLAYER_FACE_GETAWAITNICE, PLAYER_FACE_GETAWAITNICE}, + { "LiftRemlyUtoM", 13, 6, PLAYER_FACEMABA01, PLAYER_FACE_GETAWAITNICE, PLAYER_FACE_GETAWAITNICE}, + { "Bird_FestivalStart", 9, 2, PLAYER_FACE_BIRD_FESTIVALSTART, PLAYER_FACE_BIRD_FESTIVALSTART, PLAYER_FACE_BIRD_FESTIVALSTART}, + { "GetSurprise", 13, 6, PLAYER_FACE_GETSURPRISE, PLAYER_FACE_GETSURPRISE, PLAYER_FACE_GETSURPRISE}, + { "GirahimGrapple", 9, 2, PLAYER_FACEMABA01, PLAYER_FACE_DEFAULT, PLAYER_FACE_M}, + { "GirahimPull", 9, 2, PLAYER_FACEMABA01, PLAYER_FACE_DEFAULT, PLAYER_FACE_M}, + { "GirahimPullUp", 9, 2, PLAYER_FACEMABA01, PLAYER_FACE_DEFAULT, PLAYER_FACE_M}, + { "GirahimChange", 13, 100, PLAYER_FACE_WA, PLAYER_FACE_DEFAULT, PLAYER_FACE_WA}, + { "RopeWalk", 7, 0, PLAYER_FACEMABA01, PLAYER_FACE_DEFAULT, PLAYER_FACE_M}, + { "RopeBend", 9, 2, PLAYER_FACEMABA01, PLAYER_FACE_DEFAULT, PLAYER_FACE_M}, + { "RopeHangBend", 12, 5, PLAYER_FACEMABA01, PLAYER_FACE_DEFAULT, PLAYER_FACE_DEFAULT}, + { "RopeHangUp", 12, 5, PLAYER_FACEMABA01, PLAYER_FACE_DEFAULT, PLAYER_FACE_DEFAULT}, + { "RopeBalance", 255, 255, PLAYER_FACE_WA, PLAYER_FACE_MAX, PLAYER_FACE_WA}, + { "SetSekibanA", 13, 6, PLAYER_FACEMABA01, PLAYER_FACE_DEFAULT, PLAYER_FACE_DEFAULT}, + { "SetSekibanB", 13, 6, PLAYER_FACEMABA01, PLAYER_FACE_DEFAULT, PLAYER_FACE_DEFAULT}, + { "SetSekibanC", 13, 6, PLAYER_FACEMABA01, PLAYER_FACE_DEFAULT, PLAYER_FACE_DEFAULT}, + { "pushTSWst", 7, 0, PLAYER_FACEMABA01, PLAYER_FACE_DEFAULT, PLAYER_FACE_M}, + { "pushTSW", 7, 0, PLAYER_FACEMABA01, PLAYER_FACE_DEFAULT, PLAYER_FACE_M}, + { "PushLog", 7, 0, PLAYER_FACEMABA01, PLAYER_FACE_DEFAULT, PLAYER_FACE_M}, + { "AsuraCutRight", 12, 5, PLAYER_FACE_ASURACUT, PLAYER_FACE_DEFAULT, PLAYER_FACE_ASURACUT}, + { "AsuraCutLeft", 12, 5, PLAYER_FACE_ASURACUT, PLAYER_FACE_DEFAULT, PLAYER_FACE_ASURACUT}, + { "AsuraCutUp", 12, 5, PLAYER_FACE_ASURACUT, PLAYER_FACE_DEFAULT, PLAYER_FACE_ASURACUT}, + { "AsuraCutRightSt", 12, 5, PLAYER_FACE_ASURACUTST, PLAYER_FACE_DEFAULT, PLAYER_FACE_ASURACUTST}, + { "AsuraCutLeftSt", 12, 5, PLAYER_FACE_ASURACUTST, PLAYER_FACE_DEFAULT, PLAYER_FACE_ASURACUTST}, + { "AsuraCutUpSt", 12, 5, PLAYER_FACE_ASURACUTST, PLAYER_FACE_DEFAULT, PLAYER_FACE_ASURACUTST}, + { "AsuraCutRightEd", 12, 5, PLAYER_FACE_ASURACUTED, PLAYER_FACE_DEFAULT, PLAYER_FACE_ASURACUTED}, + { "AsuraCutLeftEd", 12, 5, PLAYER_FACE_ASURACUTED, PLAYER_FACE_DEFAULT, PLAYER_FACE_ASURACUTED}, + { "AsuraCutUpEd", 12, 5, PLAYER_FACE_ASURACUTED, PLAYER_FACE_DEFAULT, PLAYER_FACE_ASURACUTED}, + { "AsuraSwordWait", 12, 5, PLAYER_FACEMABA01, PLAYER_FACE_DEFAULT, PLAYER_FACE_M}, + { "AsuraSwordLift", 12, 5, PLAYER_FACEMABA01, PLAYER_FACE_DEFAULT, PLAYER_FACE_M}, + { "BinScoop", 13, 5, PLAYER_FACEMABA01, PLAYER_FACE_DEFAULT, PLAYER_FACE_DEFAULT}, + { "Fire", 9, 2, PLAYER_FACEMABA01, PLAYER_FACE_DEFAULT, PLAYER_FACE_M}, + { "crouch", 13, 6, PLAYER_FACEMABA01, PLAYER_FACE_DEFAULT, PLAYER_FACE_M}, + { "CannonWait", 13, 6, PLAYER_FACE_CANNONWAIT, PLAYER_FACE_CANNONWAIT, PLAYER_FACE_CANNONWAIT}, + { "Seal", 13, 6, PLAYER_FACEMABA01, PLAYER_FACE_DEFAULT, PLAYER_FACE_M}, + { "SealLoop", 13, 6, PLAYER_FACEMABA01, PLAYER_FACE_DEFAULT, PLAYER_FACE_M}, + { "SealFinish", 13, 6, PLAYER_FACEMABA01, PLAYER_FACE_DEFAULT, PLAYER_FACE_M}, + { "FinishEd", 13, 100, PLAYER_FACEMABA01, PLAYER_FACE_DEFAULT, PLAYER_FACE_M}, + { "SitDown", 13, 6, PLAYER_FACEMABA01, PLAYER_FACE_DEFAULT, PLAYER_FACE_DEFAULT}, + { "SitWait", 13, 6, PLAYER_FACEMABA01, PLAYER_FACE_DEFAULT, PLAYER_FACE_DEFAULT}, + { "SitWaitServiceA", 13, 6, PLAYER_FACE_SITWAITSERVICEA, PLAYER_FACE_SITWAITSERVICEA, PLAYER_FACE_SITWAITSERVICEA}, + { "roofwait", 12, 5, PLAYER_FACEMABA01, PLAYER_FACE_DEFAULT, PLAYER_FACE_DEFAULT}, + { "roofhang", 12, 5, PLAYER_FACEMABA01, PLAYER_FACE_DEFAULT, PLAYER_FACE_DEFAULT}, + { "MgStruggle", 9, 52, PLAYER_FACE_PAIN, PLAYER_FACE_DEFAULT, PLAYER_FACE_PAIN}, + { "MgStruggle_act", 9, 52, PLAYER_FACEMABA01, PLAYER_FACE_DEFAULT, PLAYER_FACE_M}, + { "MgStruggle_Escape", 9, 52, PLAYER_FACEMABA01, PLAYER_FACE_DEFAULT, PLAYER_FACE_M}, + { "KrakenAppearance", 9, 2, PLAYER_FACE_KRAKENAPPEARANCE, PLAYER_FACE_KRAKENAPPEARANCE, PLAYER_FACE_KRAKENAPPEARANCE}, + { "MgBury", 7, 0, PLAYER_FACEMABA01, PLAYER_FACE_DEFAULT, PLAYER_FACE_DEFAULT}, + { "GetFlower", 7, 0, PLAYER_FACE_GETFLOWER, PLAYER_FACE_GETFLOWER, PLAYER_FACE_GETFLOWER}, + { "DoorLargeOpen", 13, 6, PLAYER_FACEMABA01, PLAYER_FACE_DEFAULT, PLAYER_FACE_DEFAULT}, + { "DoorLargeClose", 7, 0, PLAYER_FACEMABA01, PLAYER_FACE_DEFAULT, PLAYER_FACE_DEFAULT}, + { "HarpPlayFinish", 7, 0, PLAYER_FACEMABA01, PLAYER_FACE_DEFAULT, PLAYER_FACE_DEFAULT}, + { "LightningL", 13, 4, PLAYER_FACE_LIGHTNING, PLAYER_FACE_LIGHTNING, PLAYER_FACE_LIGHTNING}, + { "LightningR", 13, 4, PLAYER_FACE_LIGHTNING, PLAYER_FACE_LIGHTNING, PLAYER_FACE_LIGHTNING}, + { "LastAttack", 8, 100, PLAYER_FACE_LASTATTACK, PLAYER_FACE_LASTATTACK, PLAYER_FACE_LASTATTACK}, + { "at", 255, 255, PLAYER_FACE_MAX, PLAYER_FACE_MAX, PLAYER_FACE_M}, + { "take", 255, 255, PLAYER_FACE_MAX, PLAYER_FACE_MAX, PLAYER_FACE_MAX}, + { "takeL", 255, 255, PLAYER_FACE_MAX, PLAYER_FACE_MAX, PLAYER_FACE_MAX}, + { "takeR", 255, 255, PLAYER_FACE_MAX, PLAYER_FACE_MAX, PLAYER_FACE_MAX}, + { "Take2", 255, 255, PLAYER_FACE_MAX, PLAYER_FACE_MAX, PLAYER_FACE_MAX}, + { "waitAtoS", 9, 1, PLAYER_FACE_MAX, PLAYER_FACE_MAX, PLAYER_FACE_M}, + { "damD", 255, 56, PLAYER_FACE_DAMAGE, PLAYER_FACE_MAX, PLAYER_FACE_DAMAGE}, + { "Ashootwait", 13, 1, PLAYER_FACE_MAX, PLAYER_FACE_MAX, PLAYER_FACE_M}, + { "Arelord", 8, 3, PLAYER_FACE_MAX, PLAYER_FACE_MAX, PLAYER_FACE_M}, + { "Ashoot", 8, 3, PLAYER_FACE_MAX, PLAYER_FACE_MAX, PLAYER_FACE_M}, + { "ArelordTame", 8, 3, PLAYER_FACE_MAX, PLAYER_FACE_MAX, PLAYER_FACE_M}, + { "Ashootwait", 13, 1, PLAYER_FACE_MAX, PLAYER_FACE_MAX, PLAYER_FACE_M}, + { "Arelord", 8, 3, PLAYER_FACE_MAX, PLAYER_FACE_MAX, PLAYER_FACE_M}, + { "Ashoot", 8, 3, PLAYER_FACE_MAX, PLAYER_FACE_MAX, PLAYER_FACE_M}, + { "damSw", 13, 6, PLAYER_FACE_DAMAGE, PLAYER_FACE_MAX, PLAYER_FACE_DAMAGE}, + { "HSwait", 8, 1, PLAYER_FACE_MAX, PLAYER_FACE_MAX, PLAYER_FACE_M}, + { "VacuumWait", 12, 5, PLAYER_FACE_MAX, PLAYER_FACE_MAX, PLAYER_FACE_MAX}, + { "MPPoseFront", 13, 255, PLAYER_FACE_MAX, PLAYER_FACE_MAX, PLAYER_FACE_M}, + { "MPPoseAround", 13, 255, PLAYER_FACE_MAX, PLAYER_FACE_MAX, PLAYER_FACE_MAX}, + { "MPPoseAroundBack", 13, 255, PLAYER_FACE_MAX, PLAYER_FACE_MAX, PLAYER_FACE_M}, + { "MPPoseDashFront", 13, 255, PLAYER_FACE_MAX, PLAYER_FACE_MAX, PLAYER_FACE_M}, + { "MPPoseDashAround", 13, 255, PLAYER_FACE_MAX, PLAYER_FACE_MAX, PLAYER_FACE_MAX}, + { "MPPoseDashAroundBack", 13, 255, PLAYER_FACE_MAX, PLAYER_FACE_MAX, PLAYER_FACE_M}, + { "LiftB_UtoD", 7, 0, PLAYER_FACE_MAX, PLAYER_FACE_MAX, PLAYER_FACE_M}, + { "LiftS_UtoD", 7, 0, PLAYER_FACE_MAX, PLAYER_FACE_MAX, PLAYER_FACE_MAX}, + { "LiftLWalk", 7, 0, PLAYER_FACE_MAX, PLAYER_FACE_MAX, PLAYER_FACE_M}, + { "MPGuardPose", 255, 255, PLAYER_FACE_MAX, PLAYER_FACE_MAX, PLAYER_FACE_MAX}, + { "RockRide", 255, 56, PLAYER_FACE_WA, PLAYER_FACE_MAX, PLAYER_FACE_WA}, + { "BinDrinkSt", 255, 5, PLAYER_FACE_DRINKST, PLAYER_FACE_DRINKST, PLAYER_FACE_DRINKST}, + { "BinDrink", 255, 5, PLAYER_FACE_DRINK, PLAYER_FACE_MAX, PLAYER_FACE_DRINK}, + { "BinDrinkEd", 255, 5, PLAYER_FACE_DRINKED, PLAYER_FACE_MAX, PLAYER_FACE_DRINKED}, + { "HarpPose", 7, 6, PLAYER_FACEMABA01, PLAYER_FACE_DEFAULT, PLAYER_FACE_DEFAULT}, + { "HarpPlayGo", 7, 1, PLAYER_FACEMABA01, PLAYER_FACE_DEFAULT, PLAYER_FACE_DEFAULT}, + { "HarpPlayCome", 7, 0, PLAYER_FACEMABA01, PLAYER_FACE_DEFAULT, PLAYER_FACE_DEFAULT}, + { "BinHold", 255, 5, PLAYER_FACE_MAX, PLAYER_FACE_MAX, PLAYER_FACE_MAX}, + { "BinShield", 9, 5, PLAYER_FACE_BINSHIELD, PLAYER_FACE_BINSHIELD, PLAYER_FACE_BINSHIELD}, +}; +// clang-format on +#pragma pop + +const s32 daPlayerModelBase_c::sUnkDuration = 0x2400; + +const u8 daPlayerModelBase_c::sShieldDurabilities[10] = {16, 24, 32, 24, 36, 48, 12, 16, 20, 48}; +const u8 daPlayerModelBase_c::sShieldRegenTimes[10] = {0, 0, 0, 0, 0, 0, 90, 90, 90, 0}; + +/** + * Watch the player's hand material indices and change the ResMat + * so that the right hand mats are visible and all others are hidden. + */ +void daPlBaseScnObjCallback_c::ExecCallback_DRAW_OPA( + nw4r::g3d::ScnObj::Timing timing, nw4r::g3d::ScnObj *pObj, u32 param, void *pInfo +) { + if (timing != nw4r::g3d::ScnObj::CALLBACK_TIMING_C) { + nw4r::g3d::ScnMdl *pMdl = nw4r::g3d::ScnObj::DynamicCast(pObj); + nw4r::g3d::ResMdl mdl = pMdl->GetResMdl(); + nw4r::g3d::ResShp shp(nullptr); + for (int i = 0; i < 2; i++) { + u8 defaultMat = sSavedHandMats[i]; + // TODO: Is there a way to avoid this cast? + u8 playerHandMat = static_cast(mpPlayer)->getHandMat(i); + if (playerHandMat != defaultMat) { + if (defaultMat != 0xFE) { + shp = mdl.GetResShp(sHandMats[defaultMat]); + shp.SetVisibility(false); + shp.DCStore(false); + } + if (playerHandMat != 0xFE) { + shp = mdl.GetResShp(sHandMats[playerHandMat]); + shp.SetVisibility(true); + shp.DCStore(false); + } + sSavedHandMats[i] = playerHandMat; + } + } + } +} + +void daPlBaseScnObjCallback_c::ExecCallback_CALC_MAT( + nw4r::g3d::ScnObj::Timing timing, nw4r::g3d::ScnObj *pObj, u32 param, void *pInfo +) { + if (timing != nw4r::g3d::ScnObj::CALLBACK_TIMING_C) { + return; + } + dScnCallback_c::ExecCallback_CALC_MAT(timing, pObj, param, pInfo); +} + +void daPlBaseMdlCallback_c::ExecCallbackA( + nw4r::g3d::ChrAnmResult *result, nw4r::g3d::ResMdl mdl, nw4r::g3d::FuncObjCalcWorld *calcWorld +) { + u16 nodeId = calcWorld->GetCallbackNodeID(); + // Only run the full callback for certain specified nodes - but under which conditions is + // mNodeIdMin == daPlayerModelBase_c::PLAYER_MAIN_NODE_WAIST? + if ((nodeId >= mNodeIdMin && nodeId < mNodeIdMax) || (mNodeIdMin == daPlayerModelBase_c::PLAYER_MAIN_NODE_WAIST && + nodeId == daPlayerModelBase_c::PLAYER_MAIN_NODE_CENTER)) { + m3d::mdl_c::mdlCallback_c::ExecCallbackA(result, mdl, calcWorld); + return; + } + // Otherwise only save the result + mpNodes[nodeId] = *result; + if (mpBaseCallback != nullptr) { + mpBaseCallback->timingA(nodeId, result, mdl); + } +} + +bool daPlBaseMdl_c::create( + daPlayerModelBase_c *player, nw4r::g3d::ResMdl mdl, mAllocator_c *alloc, u32 bufferOption, u32 nView, u32 *pSize +) { + if (!m3d::mdl_c::create(mdl, &mCallback, alloc, bufferOption, nView, pSize)) { + return false; + } + + setBlendNodeRange(0, 0xFFFF, 0.0f); + field_0x58 = 0; + mpSoundData = nullptr; + field_0x5A = 0xFFFF; + SoundSource *sound = player->getSoundSource(); + if (sound->isReadyMaybe()) { + sound->load(nullptr, ""); + } + return true; +} + +bool daPlBaseMdl_c::setAnm(m3d::banm_c &anm) { + return m3d::bmdl_c::setAnm(anm); +} + +void daPlBaseMdl_c::remove() { + mCallback.remove(); + m3d::mdl_c::remove(); +} + +void daPlBaseMdl_c::setBlendNodeRange(u16 nodeIdMin, u16 nodeIdMax, f32 blendFrame) { + mCallback.setBlendFrame(blendFrame + 1.0f); + mCallback.setNodeIds(nodeIdMin, nodeIdMax); + mCallback.calcBlend(); +} + +void daPlBaseMainCallback_c::timingA(u32 nodeId, nw4r::g3d::ChrAnmResult *result, nw4r::g3d::ResMdl mdl) { + mpPlayer->mainModelTimingA(nodeId, result); +} + +void daPlBaseMainCallback_c::timingB(u32 nodeId, nw4r::g3d::WorldMtxManip *result, nw4r::g3d::ResMdl mdl) { + mpPlayer->mainModelTimingB(nodeId, result); +} + +void daPlBaseMainCallback_c::timingC(nw4r::math::MTX34 *result, nw4r::g3d::ResMdl mdl) { + mpPlayer->mainModelTimingC(result); +} + +void daPlBaseAnmChr_c::play() { + m3d::fanm_c::play(); + field_0x36 = 0; +} + +bool daPlBaseAnmChr_c::isFinished() { + if (field_0x35 && !field_0x36) { + return true; + } + + if (isStop() || nw4r::math::FAbs(getRate()) < 0.001f) { + field_0x35 = 1; + field_0x36 = 1; + } + return false; +} + +void daPlBaseHeadCallback_c::timingB(u32 nodeId, nw4r::g3d::WorldMtxManip *result, nw4r::g3d::ResMdl) { + mpPlayer->headModelTimingB(nodeId, result); +} + +void daPlBaseHandsCallback_c::ExecCallbackC( + nw4r::math::MTX34 *pMtxArray, nw4r::g3d::ResMdl mdl, nw4r::g3d::FuncObjCalcWorld *pFuncObj +) { + mpPlayer->handsCallbackC(pMtxArray, mdl, pFuncObj); +} + +// TODO explain +bool daPlayerModelBase_c::isBodyAnmPart_0_2_4(s32 part) { + return part == 0 || part == 2 || part == 4; +} + +void daPlayerModelBase_c::freeFrmHeap(mHeapAllocator_c *allocator) { + EGG::Heap::toFrmHeap(allocator->getHeap())->free(0x1 | 0x2); +} + +void daPlayerModelBase_c::allocFrmHeap(mHeapAllocator_c *allocator, u32 size, const char *name) { + // TODO fix char constness + allocator->createNewTempFrmHeap(size, dHeap::work1Heap.heap, (char *)name, 0x20, 0); + new u8[size](); + allocator->adjustFrmHeapRestoreCurrent(); +} + +void daPlayerModelBase_c::allocExternalDataBuffers() { + mpExternalAnmCharBuffer = heap_allocator.alloc(0x2400 * 6); + mpAnmCharBuffer = heap_allocator.alloc(0x1000); + mpTexPatBuffer = heap_allocator.alloc(0x1000); + mpTexSrtBuffer = heap_allocator.alloc(0x1000); +} + +void daPlayerModelBase_c::initModelHeaps() { + allocFrmHeap(&mModelAllocator, 0x14000, "LinkClothes"); + allocFrmHeap(&mSwordAllocator, 0xE000, "LinkSword"); + allocFrmHeap(&mShieldAllocator, 0x1C100, "LinkShield"); +} + +void daPlayerModelBase_c::updateSwordShieldModelsIfNeeded() { + if (mModelUpdateFlags & UPDATE_MODEL_SWORD) { + updateSwordModel(); + } + FileManager *f = FileManager::GetInstance(); + if (mModelUpdateFlags & UPDATE_MODEL_SHIELD) { + f->setShieldPouchSlot(mShieldPouchSlot); + updateShieldModel(); + } +} + +m3d::anmTexSrt_c *daPlayerModelBase_c::createAnmTexSrt(const char *resName, m3d::bmdl_c &mdl) { + m3d::anmTexSrt_c *anm = new m3d::anmTexSrt_c(); + (void)mAlink2Res.GetResAnmTexSrt(resName); + anm->create(mdl.getResMdl(), mAlink2Res.GetResAnmTexSrt(resName), &heap_allocator, nullptr, 1); + mdl.setAnm(*anm); + return anm; +} + +void daPlayerModelBase_c::updateEarringsColor() { + if (mTunicType != TUNIC_SILENT) { + mColor color = getEarringsColor(); + mFaceMdl.setTevKColor(mFaceMdl.getMatID("al_face_m"), GX_KCOLOR1, color, false); + } +} + +static const char *sBodyMdls[] = {"al", "pl_body", "Sl"}; +static const char *sHeadMdls[] = {"al_head", "pl_head", "Sl_head"}; +static const char *sFaceMdls[] = {"al_face", "al_face", "Sl_face"}; +static const char *sHandMdls[] = {"al_hands", "pl_hands", "Sl_hands"}; + +void daPlayerModelBase_c::loadBodyModels() { + mQuat1.set(1.0f, 0.0, 0.0f, 0.0f); + mQuat2.set(1.0f, 0.0, 0.0f, 0.0f); + freeFrmHeap(&mModelAllocator); + + nw4r::g3d::ResMdl bodyMdl = mAlink2Res.GetResMdl(sBodyMdls[mTunicType]); + mMainMdl.create(this, bodyMdl, &mModelAllocator, 0x930, 1, nullptr); + mMainMdl.setPriorityDraw(0x82, 0x7F); + bodyMdl.ref().info.envelope_mtx_mode = nw4r::g3d::ResMdlInfoDataTypedef::EVPMATRIXMODE_APPROX; + + nw4r::g3d::ResMdl headMdl = mAlink2Res.GetResMdl(sHeadMdls[mTunicType]); + createGenericMdl(headMdl, mHeadMdl, &mModelAllocator, 0x800); + + nw4r::g3d::ResMdl faceMdl = mAlink2Res.GetResMdl(sFaceMdls[mTunicType]); + createGenericSmdl(faceMdl, mFaceMdl, &mModelAllocator, 0x807); + + mMainMdl.setCallback(&mMainBodyCallback); + mMainBodyCallback.setPlayer(this); + mHeadMdl.setCallback(&mHeadCallback); + mHeadCallback.setPlayer(this); + + mScnCallback1.attach(mMainMdl); + mScnCallback2.attach(mHeadMdl); + + nw4r::g3d::ResMdl handMdl = mAlink2Res.GetResMdl(sHandMdls[mTunicType]); + createGenericSmdl(handMdl, mHandsMdl, &mModelAllocator, 0x800); + nw4r::g3d::ScnMdlSimple *s = nw4r::g3d::ScnObj::DynamicCast(mHandsMdl.getG3dObject()); + s->SetScnMdlCallback(&mCalcWorldCallback); + s->EnableScnMdlCallbackTiming(nw4r::g3d::ScnObj::CALLBACK_TIMING_C); + mCalcWorldCallback.setPlayer(this); + mHandsMdl.setCallback(&mScnObjCallback); + // TODO args types + mHandsMdl.enableCallbackTiming( + nw4r::g3d::ScnObj::Timing(nw4r::g3d::ScnObj::CALLBACK_TIMING_A | nw4r::g3d::ScnObj::CALLBACK_TIMING_C) + ); + mHandsMdl.enableCallbackOp( + nw4r::g3d::ScnObj::ExecOp(nw4r::g3d::ScnObj::EXECOP_DRAW_OPA | nw4r::g3d::ScnObj::EXECOP_CALC_MAT) + ); + loadHandsModels(); + + mBeltMatId = mMainMdl.getMatID("al_belt_upper_m"); + mSkinMatId = mMainMdl.getMatID("al_skin_m"); + mPouchMatId = mMainMdl.getMatID("al_pouch_m"); + mUpbodyMatId = mMainMdl.getMatID("al_upbody_m"); + mUpotherMatId = mMainMdl.getMatID("al_upother_m"); + mBelt2MatId = mBeltMatId; + mLowbodyMapId = mMainMdl.getMatID("al_lowbody_m"); + mLowotherMapId = mMainMdl.getMatID("al_lowother_m"); + mPouch2MatId = mPouchMatId; + mCapMatId = mHeadMdl.getMatID("al_cap_m"); + + offSwordAndMoreStates(NO_SHIETH | POUCH | FIRST_PERSON); + + if (mPouchMatId >= 0) { + mMainMdl.setCullMode(mPouchMatId, GX_CULL_BACK, false); + } + mMainMdl.setCullMode(mBeltMatId, GX_CULL_BACK, false); + mMainMdl.setCullMode(mSkinMatId, GX_CULL_BACK, false); + updateEarringsColor(); +} + +void daPlayerModelBase_c::loadBody() { + loadBodyModels(); + nw4r::g3d::ResMdl bodyMdl = mMainMdl.getResMdl(); + mAnmChrBlend.create(bodyMdl, 6, &heap_allocator); + mAnmChrBlend.getAnimObj()->SetAnmFlag(nw4r::g3d::AnmObj::FLAG_USE_QUATERNION_ROTATION_BLEND, true); + + daPlBaseAnmChr_c *anms = mAnmChrs; + // "waitS" + nw4r::g3d::ResAnmChr resAnmChr26 = getExternalAnmChr(sAnimations[26].animName, mpExternalAnmCharBuffer, 0x2400); + nw4r::g3d::AnmObjChr *animObj; + for (s32 i = 0; i < 6; i++) { + anms->create2(bodyMdl, resAnmChr26, &heap_allocator); + anms->setAnm(mMainMdl, resAnmChr26, m3d::PLAY_MODE_0); + f32 f; + switch (i) { + case 0: + case 1: f = 1.0f; break; + default: f = 0.0f; break; + } + animObj = static_cast(anms->getAnimObj()); + animObj->Release(); + if (isBodyAnmPart_0_2_4(i)) { + animObj->Bind(bodyMdl, PLAYER_MAIN_NODE_WAIST, nw4r::g3d::AnmObjChr::BIND_PARTIAL); + animObj->Bind(bodyMdl, PLAYER_MAIN_NODE_CENTER, nw4r::g3d::AnmObjChr::BIND_ONE); + } else { + animObj->Bind(bodyMdl, PLAYER_MAIN_NODE_BACKBONE_1, nw4r::g3d::AnmObjChr::BIND_PARTIAL); + } + mAnmChrBlend.attach(i, anms, f); + anms++; + } + + mMainMdl.setAnm(mAnmChrBlend); + + // "F_default" + mFaceAnmChr.create( + mFaceMdl.getResMdl(), getExternalAnmChr(sFaceResNames[0], mpAnmCharBuffer, 0x1000), &heap_allocator, nullptr + ); + mFaceMdl.setAnm(mFaceAnmChr); + mFaceAnmChrIdx1 = PLAYER_FACE_DEFAULT; + mFaceAnmChrIdx2 = PLAYER_FACE_MAX; + + // "Fmaba01" + mFaceTexPat.create( + mFaceMdl.getResMdl(), getExternalAnmTexPat(sFaceResNames[1], mpTexPatBuffer, 0x1000), &heap_allocator, nullptr, + 1 + ); + mFaceMdl.setAnm(mFaceTexPat); + mFaceAnmTexPatIdx1 = PLAYER_FACEMABA01; + mFaceAnmTexPatIdx2 = PLAYER_FACE_MAX; + + bool isInTrial = dScGame_c::currentSpawnInfo.getTrial() == SpawnInfo::TRIAL; + mFaceTexSrt.create( + mFaceMdl.getResMdl(), getExternalAnmTexSrt(sFaceResNames[0], mpTexSrtBuffer, 0x1000), &heap_allocator, nullptr, + isInTrial ? 2 : 1 + ); + mFaceMdl.setAnm(mFaceTexSrt); + mFaceAnmTexSrtIdx1 = PLAYER_FACE_DEFAULT; + mFaceAnmTexSrtIdx2 = PLAYER_FACE_MAX; + + // no allocator arg? + mHeadAnmChr.create(mHeadMdl.getResMdl(), mPlCommonAnimeRes.GetResAnmChr("H_Default"), nullptr, nullptr); + mHeadMdl.setAnm(mHeadAnmChr); +} + +void daPlayerModelBase_c::loadHandsModels() { + nw4r::g3d::ResMdl mdl = mHandsMdl.getResMdl(); + SizedString<16> handName("al_handRA_m"); + s32 ids[14]; + // Hand mats: al_handRA_m - al_handRG_m + // al_handLA_m - al_handLG_m + for (s32 i = 0; i < 14; i++) { + if (i < 7) { + handName.mChars[8] = i + 'A'; + } else { + if (i == 7) { + handName.mChars[7] = 'L'; + } + handName.mChars[8] = i + ('A' - 7); + } + ids[i] = m3d::getMatID(mdl, handName); + sHandMats[i] = 0xFF; + } + + nw4r::g3d::ResShp shp(nullptr); + + sSavedHandMats[0] = 7; + sSavedHandMats[1] = 0; + + nw4r::g3d::ResMdl::DrawEnumerator drawEnumerator = mdl.ConstructDrawEnumerator(); + while (drawEnumerator.IsValid()) { + for (int j = 0; j < 14; j++) { + if (ids[j] == drawEnumerator.GetMatID()) { + sHandMats[j] = drawEnumerator.GetShpID(); + break; + } + } + + drawEnumerator.MoveNext(); + } + + for (int i = 0; i < mdl.GetResShpNumEntries(); i++) { + shp = mdl.GetResShp(i); + bool visible = sHandMats[sSavedHandMats[0]] == i || sHandMats[sSavedHandMats[1]] == i; + if (visible) { + shp.SetVisibility(true); + } else { + shp.SetVisibility(false); + } + shp.DCStore(false); + } +} + +void daPlayerModelBase_c::setSwordAnm(const char *name) { + nw4r::g3d::ResAnmClr clr = mAlinkRes.GetResAnmClr(name); + mSwordAnmMatClr.setAnm(mSwordMdl, clr, 0, m3d::PLAY_MODE_4); + mSwordMdl.setAnm(mSwordAnmMatClr); +} +static const f32 sSwordRelatedX[] = {9.0f, 12.0, 12.0, 12.0, 12.0, 12.0, 9.0f}; +static const f32 sSwordRelatedUnk[] = {73.0f, 80.0f, 100.0f, 100.0f, 120.0f, 120.0f, 73.0f}; +static const f32 sSwordRelatedZ[] = {0.7f, 0.7f, 0.9f, 0.9f, 1.0f, 1.0f, 0.7f}; +static const f32 sSwordRelatedY[] = {0.7f, 0.8f, 0.9f, 0.9f, 1.0f, 1.0f, 0.7f}; + +void daPlayerModelBase_c::initSwordModel() { + static const char *sSwordPods[] = {"EquipPodA", "EquipPodB", "EquipPodC", "EquipPodD", + "EquipPodE", "EquipPodMaster", "EquipPodA"}; + + updateCurrentSword(); + freeFrmHeap(&mSwordAllocator); + const char *swordName = getSwordName(sCurrentSword); + mSwordRes = getItemResFile(swordName, mSwordAllocator); + field_0x1278 = sSwordRelatedUnk[sCurrentSword]; + field_0x127C.x = sSwordRelatedX[sCurrentSword]; + field_0x127C.y = sSwordRelatedY[sCurrentSword]; + field_0x127C.z = sSwordRelatedZ[sCurrentSword]; + + nw4r::g3d::ResMdl sheathMdl = mSwordRes.GetResMdl(sSwordPods[sCurrentSword]); + createGenericSmdl(sheathMdl, mSheathMdl, &mSwordAllocator, 0x800); + mScnCallback4.attach(mSheathMdl); + + nw4r::g3d::ResMdl swordMdl = mSwordRes.GetResMdl(swordName); + createGenericSmdl(swordMdl, mSwordMdl, &mSwordAllocator, 0x810); + mSwordMdl.setPriorityDraw(0x84, 0x7F); + nw4r::g3d::ResAnmClr swordAnmClr = mAlinkRes.GetResAnmClr("appearance"); + nw4r::g3d::ResMdl swordResMdl = mSwordMdl.getResMdl(); + mSwordAnmMatClr.create(swordResMdl, swordAnmClr, &mSwordAllocator, nullptr, 1); + mSwordMdl.setAnm(mSwordAnmMatClr); + mScnCallback3.attach(mSwordMdl); + offFlags_0x340(1); + offSwordAndMoreStates(SWORD_AWAY); + + // TODO ids + if (sCurrentSword == 0) { + mSkywardStrikeChargeDuration = 82; + } else if (sCurrentSword == 5) { + if (dScGame_c::isHeroMode()) { + mSkywardStrikeChargeDuration = 10; + } else { + mSkywardStrikeChargeDuration = 40; + } + } else { + if (dScGame_c::isHeroMode()) { + field_0x127C.z = 1.0f; + mSkywardStrikeChargeDuration = 40; + } else { + mSkywardStrikeChargeDuration = 55; + } + } +} + +void daPlayerModelBase_c::updateSwordModel() { + mMtx_c sheathMtx; + mMtx_c swordMtx; + mSheathMdl.getLocalMtx(sheathMtx); + mSwordMdl.getLocalMtx(swordMtx); + + mSwordAnmMatClr.remove(); + mSheathMdl.remove(); + mSwordMdl.remove(); + + initSwordModel(); + + setTransformAndCalc(mSheathMdl, &sheathMtx); + setTransformAndCalc(mSwordMdl, &swordMtx); + mModelUpdateFlags &= ~UPDATE_MODEL_SWORD; +} + +u32 daPlayerModelBase_c::getCurrentShieldPouchSlot() { + // Compiler quirk, inline function not inlined due to GetLink call + if (dScGame_c::currentSpawnInfo.getTrial() == SpawnInfo::TRIAL || dAcPy_c::GetLink()->isInBambooCuttingMinigame()) { + return POUCH_SLOT_NONE; + } + return FileManager::GetInstance()->getShieldPouchSlot(); +} + +s32 daPlayerModelBase_c::getCurrentlyEquippedShieldId() { + s32 id; + u32 slot = getCurrentShieldPouchSlot(); + if (slot < POUCH_SLOT_NONE) { + id = getShieldType(FileManager::GetInstance()->getPouchItem(slot)); + } else { + id = 10; + } + if (id >= 11) { + id = 10; + } + return id; +} + +s32 daPlayerModelBase_c::getShieldType(s32 item) { + if (!isItemShield(item)) { + item = ITEM_WOODEN_SHIELD; + } + return item - ITEM_WOODEN_SHIELD; +} + +static const char *sShieldModelsBase[] = { + "EquipShieldWood", "EquipShieldIron", "EquipShieldHoly", "EquipShieldHylia", "EquipShieldWood", +}; + +static const char *sShieldModelsBroken[] = { + "EquipShieldWoodBroken", "EquipShieldIronBroken", "EquipShieldHolyBroken", + "EquipShieldHylia", "EquipShieldWoodBroken", +}; + +void daPlayerModelBase_c::initShieldModel() { + static const u16 shieldEffects[] = { + PARTICLE_RESOURCE_ID_MAPPING_537_, PARTICLE_RESOURCE_ID_MAPPING_535_, PARTICLE_RESOURCE_ID_MAPPING_529_, + PARTICLE_RESOURCE_ID_MAPPING_529_, PARTICLE_RESOURCE_ID_MAPPING_529_, + }; + freeFrmHeap(&mShieldAllocator); + s32 shieldType = getCurrentlyEquippedShieldType(); + s32 shieldId = getCurrentlyEquippedShieldId(); + nw4r::g3d::ResFile shieldRes = getItemResFile(sShieldModelsBase[shieldType], mShieldAllocator); + createGenericSmdl(shieldRes.GetResMdl(sShieldModelsBase[shieldType]), mShieldMdl, &mShieldAllocator, 0x903); + mScnCallback5.attach(mShieldMdl); + if (shieldType != /* HYLIA */ 3) { + mShieldAnmTexPat1.create( + mShieldMdl.getResMdl(), shieldRes.GetResAnmTexPat(sShieldModelsBase[shieldType]), &mShieldAllocator, + nullptr, 1 + ); + mShieldMdl.setAnm(mShieldAnmTexPat1); + mShieldAnmTexPat1.setFrame(shieldId % 3, 0); + + createGenericSmdl(shieldRes.GetResMdl(sShieldModelsBroken[shieldType]), mUnkMdl1, &mShieldAllocator, 0x103); + mAnmChr.create( + mUnkMdl1.getResMdl(), shieldRes.GetResAnmChr(sShieldModelsBroken[shieldType]), &mShieldAllocator, nullptr + ); + mUnkMdl1.setAnm(mAnmChr); + mAnmChr.setFrameOnly(0.0f); + + mShieldAnmTexPat2.create( + mUnkMdl1.getResMdl(), shieldRes.GetResAnmTexPat(sShieldModelsBase[shieldType]), &mShieldAllocator, nullptr, + 1 + ); + mShieldAnmTexPat2.setFrame(mShieldAnmTexPat1.getFrame(0), 0); + mUnkMdl1.setAnm(mShieldAnmTexPat2); + } + mBreakingEffect = shieldEffects[shieldType]; + dLytMeter_c::setShieldId(shieldId); + dLytMeter_c::setShieldMaxDurability(sShieldDurabilities[shieldId]); + dAcPy_c::GetLink2()->onShieldUpdate(); +} + +void daPlayerModelBase_c::updateShieldModel() { + mModelUpdateFlags &= ~(UPDATE_MODEL_SHIELD | 8); // TODO ??? + if (getCurrentShieldPouchSlot() != POUCH_SLOT_NONE) { + mMtx_c mtx; + mShieldMdl.getLocalMtx(mtx); + mShieldAnmTexPat1.remove(); + mShieldAnmTexPat2.remove(); + mShieldMdl.remove(); + mAnmChr.remove(); + mUnkMdl1.remove(); + initShieldModel(); + setTransformAndCalc(mShieldMdl, &mtx); + } +} + +bool daPlayerModelBase_c::createGenericSmdl( + nw4r::g3d::ResMdl resMdl, m3d::smdl_c &mdl, mAllocator_c *alloc, u32 bufferOption +) { + bool ok = mdl.create(resMdl, alloc, bufferOption | 0x120, 1, nullptr); + mdl.setPriorityDraw(0x82, 0x7F); + return ok; +} + +bool daPlayerModelBase_c::createGenericMdl( + nw4r::g3d::ResMdl resMdl, m3d::mdl_c &mdl, mAllocator_c *alloc, u32 bufferOption +) { + bool ok = mdl.create(resMdl, alloc, bufferOption | 0x120, 1, nullptr); + mdl.setPriorityDraw(0x82, 0x7F); + return ok; +} + +void daPlayerModelBase_c::applyWorldRotationMaybe( + nw4r::math::MTX34 *result, mAng x, mAng y, mAng z, mVec3_c *off, bool order +) { + mVec3_c v; + v.x = result->_03; + v.y = result->_13; + v.z = result->_23; + mMtx_c work; + if (off != nullptr) { + MTXTrans(work, off->x, off->y, off->z); + } else { + MTXTrans(work, v.x, v.y, v.z); + } + work.YrotM(rotation.y); + if (order) { + work.ZYXrotM(x, y, z); + } else { + work.ZXYrotM(x, y, z); + } + work.YrotM(-rotation.y); + mMtx_c translateBack; + translateBack.transS(-v.x, -v.y, -v.z); + MTXConcat(work, translateBack, work); + MTXConcat(work, *result, *result); +} + +void daPlayerModelBase_c::applyWorldRotationMaybe( + nw4r::g3d::WorldMtxManip *result, mAng x, mAng y, mAng z, mVec3_c *off, bool order +) { + mMtx_c mtx; + result->GetMtx(mtx); + applyWorldRotationMaybe(mtx, x, y, z, off, order); + result->SetMtxUnchecked(mtx); +} + +void daPlayerModelBase_c::adjustMainModelChrAnm(PlayerMainModelNode_e nodeId, nw4r::g3d::ChrAnmResult *result) { + mMtx_c mtx; + result->GetMtx(mtx); + if (nodeId == PLAYER_MAIN_NODE_HEAD) { + mtx.YrotM(-mHeadYRot); + mtx.ZrotM(mHeadZRot); + mtx.XrotM(mHeadXRot); + } else if (nodeId == PLAYER_MAIN_NODE_WAIST) { + mtx.ZrotM(mWaistZRot); + mtx.YrotM(-mWaistYRot); + } else if (nodeId == PLAYER_MAIN_NODE_CENTER) { + transformModelCenter(&mtx); + } else if (nodeId == PLAYER_MAIN_NODE_ARM_R1 || nodeId == PLAYER_MAIN_NODE_ARM_R2) { + mtx.ZrotM(getArmZRot(1)); + } else if (nodeId == PLAYER_MAIN_NODE_ARM_L1 || nodeId == PLAYER_MAIN_NODE_ARM_L2) { + mtx.ZrotM(getArmZRot(0)); + } else if (nodeId == PLAYER_MAIN_NODE_RSKIRT_L1 || nodeId == PLAYER_MAIN_NODE_RSKIRT_L2) { + if (getRidingActorType() == RIDING_LOFTWING) { + if (nodeId == PLAYER_MAIN_NODE_RSKIRT_L1) { + mtx.ZrotM(mRSkirtL1Rot); + } else { + mtx.ZrotM(3000); + } + } + } else if (nodeId == PLAYER_MAIN_NODE_RSKIRT_R1 || nodeId == PLAYER_MAIN_NODE_RSKIRT_R2) { + if (getRidingActorType() == RIDING_LOFTWING) { + if (nodeId == PLAYER_MAIN_NODE_RSKIRT_R1) { + mtx.ZrotM(mRSkirtR1Rot); + } else { + mtx.ZrotM(3000); + } + } + } else if (mRightHandRotation != 0) { + if (nodeId == PLAYER_MAIN_NODE_HAND_R) { + static const mVec3_c v1(1.0f, 1.0f, 0.0f); + mMtx_c rotMtx; + rotMtx.setAxisRotation(v1, mRightHandRotation.radian2()); + mtx += rotMtx; + } + } + + result->SetMtx(mtx); +} + +void daPlayerModelBase_c::adjustMainModelWorldMtx(PlayerMainModelNode_e nodeId, nw4r::g3d::WorldMtxManip *result) { + if (checkCurrentAction(0xA9) && (nodeId == PLAYER_MAIN_NODE_ARM_R1 || nodeId == PLAYER_MAIN_NODE_ARM_R2)) { + mMtx_c mtx; + mtx.makeQ(mQuat1); + mtx.YrotM(-rotation.y); + mMtx_c mtx2; + mtx2.YrotS(rotation.y); + MTXConcat(mtx2, mtx, mtx); + + mMtx_c orig; + result->GetMtx(orig); + mVec3_c origTrans; + orig.getTranslation(origTrans); + MTXConcat(mtx, orig, orig); + orig.setTranslation(origTrans); + if (nodeId == PLAYER_MAIN_NODE_ARM_R1) { + applyWorldRotationMaybe(orig, 1500, 0, 0, nullptr, false); + } + result->SetMtxUnchecked(orig); + } else if (mAnimations[3] == 0xE0 && nodeId == PLAYER_MAIN_NODE_ARM_R2) { + mMtx_c mtx; + mtx.makeQ(mQuat1); + mtx.YrotM(-rotation.y); + mMtx_c mtx2; + mtx2.YrotS(rotation.y); + MTXConcat(mtx2, mtx, mtx); + + mMtx_c orig; + result->GetMtx(orig); + mVec3_c origTrans; + orig.getTranslation(origTrans); + MTXConcat(mtx, orig, orig); + orig.setTranslation(origTrans); + result->SetMtxUnchecked(orig); + } else if (nodeId == PLAYER_MAIN_NODE_BACKBONE_1) { + transformBackbone1(result); + applyWorldRotationMaybe( + result, field_0x1268 >> 1, field_0x126A * 0.4f + getArmZRot(2), field_0x126C, nullptr, false + ); + } else if (nodeId == PLAYER_MAIN_NODE_BACKBONE_2) { + applyWorldRotationMaybe(result, field_0x1268 >> 1, field_0x126A * 0.6f + getArmZRot(2), 0, nullptr, false); + } else if (nodeId == PLAYER_MAIN_NODE_FSKIRT_L1 && *field_0x136C != 0) { + mVec3_c v; + vt_0x30C(v); + if (*field_0x136C < 0) { + v.z *= -1.0f; + } + applyWorldRotationMaybe(result, v.x * *field_0x136C, 0, v.z * *field_0x136C, nullptr, true); + } else if (nodeId == PLAYER_MAIN_NODE_FSKIRT_R1 && *field_0x1370) { + mVec3_c v; + vt_0x30C(v); + if (*field_0x1370 > 0) { + v.z *= -1.0f; + } + applyWorldRotationMaybe(result, v.x * *field_0x1370, 0, v.z * *field_0x1370, nullptr, true); + } else if (nodeId == PLAYER_MAIN_NODE_POD) { + if (field_0x1258 != 0) { + mMtx_c mtx; + mtx.YrotS(field_0x125A); + mtx.XrotM(field_0x1258); + mtx.YrotM(-field_0x125A); + mMtx_c orig; + result->GetMtx(orig); + mVec3_c origTrans; + orig.getTranslation(origTrans); + MTXConcat(mtx, orig, orig); + orig.setTranslation(origTrans); + result->SetMtxUnchecked(orig); + } + if (field_0x1268 < 0) { + applyWorldRotationMaybe(result, -(field_0x1268 >> 1), 0, 0, nullptr, false); + } + } else if ((nodeId == PLAYER_MAIN_NODE_ARM_R2 || nodeId == PLAYER_MAIN_NODE_HAND_R) && isMPPose()) { + mMtx_c mtx; + mtx.makeQ(mQuat2); + mtx.YrotM(-rotation.y); + mMtx_c mtx2; + mtx2.YrotS(rotation.y); + MTXConcat(mtx2, mtx, mtx); + + mMtx_c orig; + result->GetMtx(orig); + mVec3_c origTrans; + orig.getTranslation(origTrans); + MTXConcat(mtx, orig, orig); + orig.setTranslation(origTrans); + result->SetMtxUnchecked(orig); + } else if (nodeId == PLAYER_MAIN_NODE_HAND_R || nodeId == PLAYER_MAIN_NODE_HAND_L) { + if (isOnTightRope()) { + mAng rot; + if (nodeId == PLAYER_MAIN_NODE_HAND_R) { + rot = -5461; + } else { + rot = -7282; + } + applyWorldRotationMaybe(result, rot, 0, 0, nullptr, false); + } else if (isOnVines()) { + // TODO what even is this + mAng v1 = -3277; + mAng v2 = 910; + if (nodeId == PLAYER_MAIN_NODE_HAND_R) { + v1 *= -1; + v2 *= -1; + } + applyWorldRotationMaybe(result, 0xec17, v1, v2, nullptr, true); + } + } +} + +void daPlayerModelBase_c::updateMainBlend1(f32 blend) { + // TODO document numbers + mAnmChrBlend.setWeight(1, (1.0f - blend) * (1.0f - field_0x1274)); + mAnmChrBlend.setWeight(3, (1.0f - blend) * field_0x1274); + mAnmChrBlend.setWeight(5, blend); +} + +void daPlayerModelBase_c::updateMainBlend2(f32 blend, bool save) { + // TODO document numbers + f32 blend4 = 1.0f - mAnmChrBlend.getWeight(4); + mAnmChrBlend.setWeight(0, blend4 * (1.0f - blend)); + mAnmChrBlend.setWeight(2, blend4 * blend); + f32 blend5 = 1.0f - mAnmChrBlend.getWeight(5); + mAnmChrBlend.setWeight(1, blend5 * (1.0f - blend)); + mAnmChrBlend.setWeight(3, blend5 * blend); + if (save) { + field_0x1274 = blend; + } +} + +void daPlayerModelBase_c::updateBlendWeights(PlayerMainModelNode_e nodeId) { + switch (field_0x1219) { + case 9: + if (nodeId == PLAYER_MAIN_NODE_CENTER) { + updateMainBlend2(field_0x1274, false); + } else if (nodeId == PLAYER_MAIN_NODE_WEAPON_R) { + if (field_0x1274 < 0.5f) { + updateMainBlend2(0.0f, false); + } else { + updateMainBlend2(1.0f, false); + } + } + break; + case 1: + if (nodeId == PLAYER_MAIN_NODE_CENTER) { + updateMainBlend1(0.0f); + } else if (nodeId == PLAYER_MAIN_NODE_POD) { + updateMainBlend1(field_0x1270); + } + break; + case 4: + if (nodeId == PLAYER_MAIN_NODE_CENTER) { + updateMainBlend1(0.0f); + } else if (nodeId == PLAYER_MAIN_NODE_WEAPON_L) { + updateMainBlend1(field_0x1270); + } + break; + case 2: + if (nodeId == PLAYER_MAIN_NODE_WEAPON_L) { + updateMainBlend1(0.0f); + } else if (nodeId == PLAYER_MAIN_NODE_WEAPON_R) { + updateMainBlend1(field_0x1270); + } + break; + case 3: + if (nodeId == PLAYER_MAIN_NODE_POD) { + updateMainBlend1(0.0f); + } else if (nodeId == PLAYER_MAIN_NODE_WEAPON_L) { + updateMainBlend1(field_0x1270); + } + break; + case 5: + if (nodeId == PLAYER_MAIN_NODE_HEAD) { + updateMainBlend1(0.0f); + } else if (nodeId == PLAYER_MAIN_NODE_POD) { + updateMainBlend1(field_0x1270); + } + break; + case 7: + if (nodeId == PLAYER_MAIN_NODE_CENTER) { + updateMainBlend1(0.0f); + } else if (nodeId == PLAYER_MAIN_NODE_HEAD) { + updateMainBlend1(1.0f); + } else if (nodeId == PLAYER_MAIN_NODE_POD) { + updateMainBlend1(0.0f); + } else if (nodeId == PLAYER_MAIN_NODE_WEAPON_R) { + updateMainBlend1(1.0f); + } + break; + case 6: + if (nodeId == PLAYER_MAIN_NODE_HEAD) { + updateMainBlend2(1.0f, false); + } else if (nodeId == PLAYER_MAIN_NODE_POD) { + updateMainBlend2(0.0f, false); + } + break; + case 8: + if (nodeId == PLAYER_MAIN_NODE_HEAD) { + updateMainBlend1(0.0f); + } else if (nodeId == PLAYER_MAIN_NODE_POD) { + updateMainBlend1(field_0x1270); + } + break; + } +} + +void daPlayerModelBase_c::fn_8005F890(nw4r::math::MTX34 *result) { + // Probably related to IK? + static const u16 sNodeIdsArms1[] = {PLAYER_MAIN_NODE_ARM_L1, PLAYER_MAIN_NODE_ARM_R1}; + static const Vec sArmVecs[] = { + {29.0f, 0.0f, 0.0f}, + {26.5f, 0.0f, 0.0f}, + { 0.0f, 0.0f, 0.0f} + }; + + nw4r::g3d::ResMdl mdl = mMainMdl.getResMdl(); + + if (vt_0x2E8(result, sNodeIdsArms1, false)) { + mVec3_c dstVec; + mVec3_c swordOffset; + mVec3_c translate; + if (checkCurrentAction(/* SWORD_IN_DIAL */ 0x86) || checkCurrentAction(/* ON_BIRD */ 0x8A)) { + swordOffset = vt_0x304() * 0.5f; + } else { + swordOffset = mVec3_c::Zero; + } + + nw4r::math::MTX34 *targetMtx; + for (s32 arm = 0; arm < 2; arm++) { + mAng rot1; + mAng rot2; + // TODO maybe there's a more natural order + s32 i; + isOnClawTargetMaybe(arm, rot1, rot2); + u16 armNode = sNodeIdsArms1[arm]; + mAng *angs; + mVec3_c *dst = nullptr; + if (arm == 0) { + angs = field_0x1374; + } else { + angs = field_0x1378; + } + // Walk down the arm bones and transform the whole thing again? + for (i = 0; i < 3; i++) { + targetMtx = &result[mdl.GetResNode(armNode).GetMtxID()]; + applyWorldRotationMaybe(targetMtx, rot1, rot2, angs[i], dst, false); + MTXMultVec(*targetMtx, mVec3_c(sArmVecs[i]), dstVec); + if (i != 2 && arm == 1) { + // sword hand + dstVec -= swordOffset; + } + dst = &dstVec; + armNode++; + } + mMainMdl.getNodeResult(armNode)->GetTranslate(translate); + MTXMultVec(*targetMtx, translate, *dst); + applyWorldRotationMaybe(&result[mdl.GetResNode(armNode).GetMtxID()], rot1, rot2, angs[2], &dstVec, false); + } + } +} + +void daPlayerModelBase_c::fn_8005FB90(nw4r::math::MTX34 *result) { + // Suffer from the same problem as above + static const u16 sNodeIdsLegs1[] = {PLAYER_MAIN_NODE_LEG_L1, PLAYER_MAIN_NODE_LEG_R1}; + static const Vec sLegVecs[] = { + { 30.0f, 0.0f, 0.0f}, + {39.3635f, 0.0f, 0.0f}, + { 14.18f, 0.0f, 0.0f} + }; + + nw4r::g3d::ResMdl mdl = mMainMdl.getResMdl(); + + if (vt_0x2E8(result, sNodeIdsLegs1, true)) { + mVec3_c dstVec; + mVec3_c legOffset = vt_0x304() * 0.5f; + + for (s32 leg = 0; leg < 2; leg++) { + // TODO maybe there's a more natural order + mVec3_c *dst = nullptr; + s32 i; + u16 legNode = sNodeIdsLegs1[leg]; + mAng *angs; + if (leg == 0) { + angs = field_0x136C; + } else { + angs = field_0x1370; + } + // Walk down the leg bones and transform the whole thing again? + for (i = 0; i < 3; i++) { + u32 mtxId = mdl.GetResNode(legNode).GetMtxID(); + nw4r::math::MTX34 *targetMtx = &result[mtxId]; + applyWorldRotationMaybe(targetMtx, angs[i], 0, 0, dst, false); + MTXMultVec(*targetMtx, mVec3_c(sLegVecs[i]), dstVec); + if (i != 2) { + dstVec -= legOffset; + } + dst = &dstVec; + legNode++; + } + applyWorldRotationMaybe(&result[mdl.GetResNode(legNode).GetMtxID()], angs[2], 0, 0, &dstVec, false); + } + } +} + +void daPlayerModelBase_c::mainModelTimingA(u32 nodeId, nw4r::g3d::ChrAnmResult *result) { + adjustMainModelChrAnm((PlayerMainModelNode_e)nodeId, result); +} + +void daPlayerModelBase_c::mainModelTimingB(u32 nodeId, nw4r::g3d::WorldMtxManip *result) { + adjustMainModelWorldMtx((PlayerMainModelNode_e)nodeId, result); + if (field_0x1219 != 0) { + if (nodeId == PLAYER_MAIN_NODE_CENTER || nodeId == PLAYER_MAIN_NODE_POD || + nodeId == PLAYER_MAIN_NODE_WEAPON_L || nodeId == PLAYER_MAIN_NODE_HEAD || + nodeId == PLAYER_MAIN_NODE_WEAPON_R) { + updateBlendWeights((PlayerMainModelNode_e)nodeId); + } + } +} + +void daPlayerModelBase_c::mainModelTimingC(nw4r::math::MTX34 *result) { + fn_8005FB90(result); + fn_8005F890(result); + mMainMdl.setField_0x58(1); +} + +void daPlayerModelBase_c::handsCallbackC( + nw4r::math::MTX34 *pMtxArray, nw4r::g3d::ResMdl mdl, nw4r::g3d::FuncObjCalcWorld *pFuncObj +) { + mMainMdl.getNodeWorldMtx(PLAYER_MAIN_NODE_HAND_L, &pMtxArray[mdl.GetResNode(PLAYER_HANDS_NODE_HAND_L).GetMtxID()]); + mMainMdl.getNodeWorldMtx(PLAYER_MAIN_NODE_HAND_R, &pMtxArray[mdl.GetResNode(PLAYER_HANDS_NODE_HAND_R).GetMtxID()]); +} + +void daPlayerModelBase_c::headModelTimingB(u32 nodeId, nw4r::g3d::WorldMtxManip *result) { + if (nodeId >= PLAYER_HEAD_NODE_MOMI_Z_CAP_1) { + mMtx_c mtx; + result->GetMtx(mtx); + mVec3_c v; + mtx.getTranslation(v); + mMtx_c rot; + rot.makeQ(field_0x1300[nodeId - 6]); + MTXConcat(rot, mtx, mtx); + mtx.setTranslation(v); + result->SetMtxUnchecked(mtx); + } else if (nodeId >= PLAYER_HEAD_NODE_HAIR_L) { + mAng oldYRot = rotation.y; + rotation.y = field_0x1256; + u32 idx = nodeId - 1; + applyWorldRotationMaybe(result, field_0x1238[idx], 0, field_0x1242[idx], nullptr, false); + rotation.y = oldYRot; + } +} + +void daPlayerModelBase_c::setTransformAndCalc(m3d::scnLeaf_c &lf, const mMtx_c *mtx) { + if (mtx != nullptr) { + lf.setLocalMtx(*mtx); + } + lf.calc(false); +} + +void daPlayerModelBase_c::setShieldTransform(bool inHand) { + mMtx_c targetTransform; + if (inHand) { + mMainMdl.getNodeWorldMtx(PLAYER_MAIN_NODE_WEAPON_L, targetTransform); + } else { + mMainMdl.getNodeWorldMtx(PLAYER_MAIN_NODE_POD, targetTransform); + mMtx_c mtx2; + MTXTrans(mtx2, 4.2f, -4.4f, 20.0f); + MTXConcat(targetTransform, mtx2, targetTransform); + targetTransform.ZYXrotM(mAng::fromDeg(91.0f), mAng::fromDeg(-123.0f), 0); + } + setTransformAndCalc(mShieldMdl, &targetTransform); +} + +void daPlayerModelBase_c::loadTwoAnmChrs(s32 childIdx, s32 animIdx, s32 animIdx2, bool b) { + void *data = (u8 *)mpExternalAnmCharBuffer + childIdx * 0x2400; + u32 size1; + void *data2; + u32 size2; + + s32 otherChildIdx = 3; + + if (childIdx == 0) { + otherChildIdx = 1; + } + + if (animIdx == animIdx2) { + size1 = 0x2400 * 2; + if (b) { + size1 *= 2; + } + size2 = 0; + data2 = data; + } else { + size1 = 0x2400; + if (b) { + size1 *= 2; + } + size2 = size1; + data2 = (u8 *)data + size1; + } + loadAnmChr(childIdx, animIdx, data, size1); + loadAnmChr(otherChildIdx, animIdx2, data2, size2); +} + +nw4r::g3d::ResFile daPlayerModelBase_c::getItemResFile(const char *name, mAllocator_c &allocator) { + SizedString<64> buf; + buf.sprintf("dat/%s.brresC", name); + void *dat = getOarcFile("PLCompItem", buf); + u32 size = CXGetUncompressedSize(dat); + void *decompressedBuf = allocator.alloc(size); + lzSafeDecompress(dat, size, decompressedBuf); + nw4r::g3d::ResFile file(decompressedBuf); + file.Init(); + file.Bind(); + BindSystemModelsAndLighting(file); + return file; +} + +nw4r::g3d::ResFile +daPlayerModelBase_c::getExternalCompressedFile(const char *name, const char *extension, void *dest, u32 maxSize) { + if (maxSize != 0) { + SizedString<64> buf; + buf.sprintf("%s.%s", name, extension); + void *externalData = mPlCommonAnimeRes.GetExternalData(buf); + lzSafeDecompress(externalData, maxSize, dest); + } + nw4r::g3d::ResFile file(dest); + file.Init(); + return file; +} + +nw4r::g3d::ResAnmChr daPlayerModelBase_c::getExternalAnmChr(const char *name, void *dest, u32 maxSize) { + nw4r::g3d::ResAnmChr result; + if (mCurrentRes.IsValid()) { + result = mCurrentRes.GetResAnmChr(name); + if (result.IsValid()) { + return result; + } + } + nw4r::g3d::ResFile file = getExternalCompressedFile(name, "rchaC", dest, maxSize); + result = file.GetResAnmChr(name); + return result; +} + +nw4r::g3d::ResAnmTexPat daPlayerModelBase_c::getExternalAnmTexPat(const char *name, void *dest, u32 maxSize) { + nw4r::g3d::ResAnmTexPat result; + if (mCurrentRes.IsValid()) { + result = mCurrentRes.GetResAnmTexPat(name); + if (result.IsValid()) { + result.Bind(mAlink2Res); + return result; + } + } + nw4r::g3d::ResFile file = getExternalCompressedFile(name, "rtpaC", dest, maxSize); + result = file.GetResAnmTexPat(name); + result.Bind(mAlink2Res); + return result; +} + +nw4r::g3d::ResAnmTexSrt daPlayerModelBase_c::getExternalAnmTexSrt(const char *name, void *dest, u32 maxSize) { + nw4r::g3d::ResAnmTexSrt result; + if (mCurrentRes.IsValid()) { + result = mCurrentRes.GetResAnmTexSrt(name); + if (result.IsValid()) { + return result; + } + } + nw4r::g3d::ResFile file = getExternalCompressedFile(name, "rtsaC", dest, maxSize); + result = file.GetResAnmTexSrt(name); + return result; +} + +bool daPlayerModelBase_c::canStart(bool force, u16 faceIdx, u16 invalidValue, u16 *out1, u16 *out2) const { + if (force) { + *out2 = faceIdx; + } else { + *out1 = faceIdx; + if (*out2 != invalidValue) { + return false; + } + } + return true; +} + +void daPlayerModelBase_c::setFaceTexPat(s32 faceIdx, bool force) { + if ((!force && ((mFaceAnmTexPatIdx1 == faceIdx && mFaceAnmTexPatIdx1 == 1) || + (checkFaceUpdateFlags(0x40000000) && (faceIdx == PLAYER_FACEMABA01))))) { + return; + } + + if (faceIdx != 0x38) { + offFaceUpdateFlags(0x40000000); + if (canStart(force, faceIdx, PLAYER_FACE_MAX, &mFaceAnmTexPatIdx1, &mFaceAnmTexPatIdx2)) { + nw4r::g3d::ResAnmTexPat anm = getExternalAnmTexPat(sFaceResNames[faceIdx], mpTexPatBuffer, 0x1000); + mFaceTexPat.setAnm(mFaceMdl, anm, 0, m3d::PLAY_MODE_4); + mFaceTexPat.setFrame(0.0f, 0); + } + } +} + +void daPlayerModelBase_c::checkFaceTexPat() { + if (mFaceAnmTexPatIdx2 == PLAYER_FACE_MAX) { + return; + } + s32 prev = mFaceAnmTexPatIdx1; + mFaceAnmTexPatIdx2 = PLAYER_FACE_MAX; + if (prev >= PLAYER_FACE_BEDSLEEP) { + prev = PLAYER_FACEMABA01; + } + mFaceAnmTexPatIdx1 = PLAYER_FACE_MAX; + setFaceTexPat(prev, false); +} + +void daPlayerModelBase_c::setFaceTexSrt(s32 faceIdx, bool force) { + offFaceUpdateFlags(0x80000000); + if (canStart(force, faceIdx, PLAYER_FACE_MAX, &mFaceAnmTexSrtIdx1, &mFaceAnmTexSrtIdx2)) { + nw4r::g3d::ResAnmTexSrt anm = getExternalAnmTexSrt(sFaceResNames[faceIdx], mpTexSrtBuffer, 0x1000); + mFaceTexSrt.setAnm(mFaceMdl, anm, 0, m3d::PLAY_MODE_4); + mFaceTexSrt.setFrame(0.0f, 0); + } +} + +void daPlayerModelBase_c::checkFaceTexSrt() { + if (mFaceAnmTexSrtIdx2 == PLAYER_FACE_MAX) { + return; + } + s32 prev = mFaceAnmTexSrtIdx1; + mFaceAnmTexSrtIdx2 = PLAYER_FACE_MAX; + if (prev >= PLAYER_FACE_BEDSLEEP) { + prev = PLAYER_FACE_DEFAULT; + } + mFaceAnmTexSrtIdx1 = PLAYER_FACE_MAX; + setFaceTexSrt(prev, false); +} + +void daPlayerModelBase_c::setFaceAnmChr(s32 faceIdx, bool force) { + if (faceIdx == PLAYER_FACE_NONE || (!force && (checkFaceUpdateFlags(0x20000000) && + (faceIdx == PLAYER_FACE_DEFAULT || faceIdx == PLAYER_FACE_M)))) { + return; + } + offFaceUpdateFlags(0x20000000); + if (canStart(force, faceIdx, PLAYER_FACE_MAX, &mFaceAnmChrIdx1, &mFaceAnmChrIdx2)) { + nw4r::g3d::ResAnmChr anm = getExternalAnmChr(sFaceResNames[faceIdx], mpAnmCharBuffer, 0x1000); + mFaceAnmChr.setAnm(mFaceMdl, anm, m3d::PLAY_MODE_4); + mFaceAnmChr.setFrameOnly(0.0f); + mFaceMdl.setAnm(mFaceAnmChr); + } +} + +void daPlayerModelBase_c::checkFaceAnmChr() { + if (mFaceAnmChrIdx2 == PLAYER_FACE_MAX) { + return; + } + s32 prev = mFaceAnmChrIdx1; + mFaceAnmChrIdx2 = PLAYER_FACE_MAX; + if (prev >= PLAYER_FACE_BEDSLEEP) { + prev = PLAYER_FACE_DEFAULT; + } + mFaceAnmChrIdx1 = PLAYER_FACE_MAX; + setFaceAnmChr(prev, false); +} + +void daPlayerModelBase_c::loadAnmChr(s32 childIdx, s32 animIdx, void *dest, u32 maxSize) { + nw4r::g3d::ResAnmChr anm = getExternalAnmChr(sAnimations[animIdx].animName, dest, maxSize); + mAnmChrs[childIdx].setAnm(mMainMdl, anm, m3d::PLAY_MODE_4); + nw4r::g3d::AnmObjChr *animObj = static_cast(mAnmChrs[childIdx].getAnimObj()); + animObj->Release(); + nw4r::g3d::ResMdl bodyMdl = mMainMdl.getResMdl(); + if (isBodyAnmPart_0_2_4(childIdx)) { + animObj->Bind(bodyMdl, PLAYER_MAIN_NODE_WAIST, nw4r::g3d::AnmObjChr::BIND_PARTIAL); + animObj->Bind(bodyMdl, PLAYER_MAIN_NODE_CENTER, nw4r::g3d::AnmObjChr::BIND_ONE); + } else { + animObj->Bind(bodyMdl, PLAYER_MAIN_NODE_BACKBONE_1, nw4r::g3d::AnmObjChr::BIND_PARTIAL); + } + mAnmChrBlend.attach(childIdx, &mAnmChrs[childIdx], 1.0f); + mMainMdl.setAnm(mAnmChrBlend); + mAnimations[childIdx] = animIdx; + mAnmChrs[childIdx].setField_0x35(0); +} + +void daPlayerModelBase_c::removeAnmChr(s32 childIdx) { + mAnmChrs[childIdx].getAnimObj()->Release(); + mAnmChrBlend.detach(childIdx); + mAnimations[childIdx] = PLAYER_ANIM_MAX; +} + +void daPlayerModelBase_c::loadSound(nw4r::g3d::ResFile &file, const char *name, s32 childIdx) { + SoundSource *s = getSoundSource(); + mCurrentAnmChrIdx = childIdx; + SizedString<64> path; + path.sprintf("%s.brasd", name); + void *dat = file.GetExternalData(path); + if (dat == nullptr && file == mCurrentRes) { + dat = mPlCommonSoundRes.GetExternalData(path); + } + mMainMdl.setSoundRelated(mAnimations[childIdx], dat); + s->load(dat, name); +} + +void daPlayerModelBase_c::loadSoundForAnim(s32 childIdx) { + SoundSource *s = getSoundSource(); + s32 anim = mAnimations[childIdx]; + mCurrentAnmChrIdx = childIdx; + if (anim != mMainMdl.getField_0x5A()) { + loadSound(mCurrentRes.IsValid() ? mCurrentRes : mPlCommonSoundRes, sAnimations[anim].animName, childIdx); + } else { + s->load(mMainMdl.getSoundData(), sAnimations[anim].animName); + } + s->setRate(mAnmChrs[childIdx].getRate()); +} + +void daPlayerModelBase_c::syncSoundWithAnim() { + f32 frame = mAnmChrs[mCurrentAnmChrIdx].getFrame(); + getSoundSource()->setFrame(frame); +} + +void daPlayerModelBase_c::registMassObj(cCcD_Obj *obj, u8 priority) { + dCcS::GetInstance()->Set(obj); + dCcS::GetInstance()->GetMassMng().SetObj(obj, priority); +} + +void daPlayerModelBase_c::updateModelColliders() { + mVec3_c bodyTranslation; + mMainMdl.getNodeWorldMtxMultVecZero(PLAYER_MAIN_NODE_CENTER, bodyTranslation); + + mVec3_c bottom; + bottom = ((mToeTranslation[0] + mToeTranslation[1]) * 0.5f + bodyTranslation) * 0.5f; + f32 f = mToeTranslation[0].y > mToeTranslation[1].y ? mToeTranslation[1].y : mToeTranslation[0].y; + f32 height; + if (bodyTranslation.y > f) { + height = bodyTranslation.y - f; + bottom.y = f; + } else { + bottom.y = bodyTranslation.y; + height = f - bodyTranslation.y; + } + + if (height < 60.0f) { + bottom.y -= (60.0f - height) * 0.5f; + height = 60.0f; + } + mCcCyls[0].SetC(bottom); + mCcCyls[0].SetH(height); + + if (!checkActionFlagsCont(0x20000)) { + bottom = (bodyTranslation + mHeadTranslation) * 0.5f; + } + + if (bodyTranslation.y > mHeadTranslation.y) { + height = bodyTranslation.y - mHeadTranslation.y; + bottom.y = mHeadTranslation.y; + } else { + bottom.y = bodyTranslation.y; + height = mHeadTranslation.y - bodyTranslation.y; + } + + if (height < 60.0f) { + bottom.y -= (60.0f - height) * 0.5f; + height = 60.0f; + } + + mCcCyls[2].SetC(bottom); + mCcCyls[2].SetH(height); + + bottom = (mCcCyls[0].GetC() + mCcCyls[2].GetC()) * 0.5f; + f32 midH = (mCcCyls[0].GetH() + mCcCyls[2].GetH()) * 0.5f; + + mCcCyls[1].SetC(bottom); + mCcCyls[1].SetH(midH); +} + +void daPlayerModelBase_c::updateCachedPositions() { + static const Vec sPosAboveLink = {0.0f, -8.0f, 0.0f}; + static const Vec sPos1 = {12.0f, -8.0f, 0.0f}; + static const Vec sHeadPos = {0.0f, -28.0f, 0.0f}; + + mMainMdl.getNodeWorldMtxMultVec(PLAYER_MAIN_NODE_HEAD, sPos1, poscopy2); + mMainMdl.getNodeWorldMtxMultVec(PLAYER_MAIN_NODE_HEAD, sPosAboveLink, mPositionAboveLink); + mMainMdl.getNodeWorldMtxMultVec(PLAYER_MAIN_NODE_HEAD, sHeadPos, mHeadTranslation); + + static const Vec sUnusedVec1 = {0.0f, 55.75f, 15.0f}; + static const Vec sUnusedVec2 = {9.5f, 47.0f, 24.5f}; + static const Vec sUnusedVec3 = {1.75f, 55.0f, 25.5f}; + static const Vec sUnusedVec4 = {0.0f, 55.0f, 25.0f}; + + mMainMdl.getNodeWorldMtxMultVecZero(PLAYER_MAIN_NODE_TOE_L, mToeTranslation[0]); + mMainMdl.getNodeWorldMtxMultVecZero(PLAYER_MAIN_NODE_TOE_R, mToeTranslation[1]); + mMainMdl.getNodeWorldMtxMultVecZero(PLAYER_MAIN_NODE_HAND_L, mTranslationHand[0]); + mMainMdl.getNodeWorldMtxMultVecZero(PLAYER_MAIN_NODE_HAND_R, mTranslationHand[1]); + mMainMdl.getNodeWorldMtxMultVecZero(PLAYER_MAIN_NODE_WEAPON_L, mTranslationWeapon[0]); + mMainMdl.getNodeWorldMtxMultVecZero(PLAYER_MAIN_NODE_WEAPON_R, mTranslationWeapon[1]); + mMainMdl.getNodeWorldMtxMultVecZero(PLAYER_MAIN_NODE_CENTER, mCenterTranslation); + + if (checkCurrentAction(/* DOWSE_LOOK */ 0x68)) { + mVec3_c v(0.0f, 18.0f, 0.0f); + v.rotX(field_0x1268); + v.rotY(rotation.y + field_0x126A); + poscopy2 += v; + } +} + +void daPlayerModelBase_c::setPosCopy3() { + static const Vec posCopy3v0 = {0.0f, 150.0f, 0.0f}; + static const Vec posCopy3v1 = {0.0f, 40.0f, 0.0f}; + static const Vec posCopy3v2 = {0.0f, 95.0f, 0.0f}; + static const Vec posCopy3v3 = {0.0f, 14.0f, 0.0f}; + if (checkCurrentAction(/* FREE_FALL*/ 0x13) || checkCurrentAction(/* WALKING_ON_TIGHTROPE */ 0x81)) { + poscopy3 = position; + poscopy3.y += 180.0f; + } else if (checkCurrentAction(/* BEING_PULLED_BY_CLAWS */ 0x5A)) { + poscopy3 = poscopy2; + } else if (checkActionFlags(FLG0_SWING_ROPE)) { + poscopy3 = position; + } else if (checkActionFlagsCont(0x20000000) || checkCurrentAction(0x70) || + checkCurrentAction(/* HANG_ON_ZIP */ 0x85)) { + poscopy3 = position; + poscopy3.y -= 100.0f; + } else { + // TODO maybe fakematch, is there a way to avoid this goto? + if (checkActionFlags(FLG0_HANGING_LEDGE)) { + goto label; + } + + switch (getCurrentAction()) { + case 0x82: + case 0x83: + case 0x84: /* CLIMBING_ONTO_TIGHTROPE */ { + label: + const nw4r::math::MTX34 *c = mHeadMdl.getLocalMtx(); + poscopy3.x = c->_03; + poscopy3.y = c->_13; + poscopy3.z = c->_23; + break; + } + case 0x09: { + // SLIDING + poscopy3 = position + mVec3_c(posCopy3v2); + break; + } + default: { + mMtx_c mtx; + mMainMdl.getLocalMtx(mtx); + + f32 f; + const Vec *v; + if (checkActionFlags(FLG0_IN_WATER) || checkCurrentAction(/* SWIM_DASH_INFO_AIR */ 0x57)) { + v = &posCopy3v3; + f = position.y; + } else { + if (checkCurrentAction(/* VOID_SAND */ 0x4C)) { + v = &posCopy3v3; + } else { + v = checkActionFlags(FLG0_CRAWLING) ? &posCopy3v1 : &posCopy3v0; + } + f = mtx.m[1][3]; + } + poscopy3.copyFrom(v); + poscopy3.x += position.x; + poscopy3.y += f; + poscopy3.z += position.z; + break; + } + } + } +} + +bool daPlayerModelBase_c::fn_80061410() { + return (field_0x120A || alwaysRet0()) && !(someFlags_0x354 & 0x800); +} + +// I believe this is the only strong virtual function of daPlayerModelBase_c, +// and this causes the vtable and all other weak functions to be here +/* vt 0x114 */ void daPlayerModelBase_c::somethingWithCarriedActorFlags() { + if (mCarriedActorRef.get() != nullptr) { + mCarriedActorRef.get()->setObjectProperty(0x200); + } +} diff --git a/src/d/lyt/d_lyt_do_button.cpp b/src/d/lyt/d_lyt_do_button.cpp index 9aec9bcf..9f4fc89e 100644 --- a/src/d/lyt/d_lyt_do_button.cpp +++ b/src/d/lyt/d_lyt_do_button.cpp @@ -294,7 +294,7 @@ bool dLytDobutton_c::remove() { bool dLytDobutton_c::execute() { bool isInEvent = EventManager::isInEvent(); bool b1 = true; - if (dAcPy_c::isInBambooCuttingMinigame()) { + if (dAcPy_c::GetLink()->isInBambooCuttingMinigame()) { setActionTextStuff(ICON_12, ACT_DO_70, false); } if (field_0x490 == 0) { diff --git a/src/d/lyt/meter/d_lyt_meter_cross_btn.cpp b/src/d/lyt/meter/d_lyt_meter_cross_btn.cpp index a16a09a7..c34e4d04 100644 --- a/src/d/lyt/meter/d_lyt_meter_cross_btn.cpp +++ b/src/d/lyt/meter/d_lyt_meter_cross_btn.cpp @@ -491,7 +491,8 @@ bool dLytMeterCrossBtn_c::execute() { if (field_0x637 != 0) { if (mIconDown == 0) { - f32 frame = dAcPy_c::GetLink2()->getAnmMatClrFrame(); + // Start UI animation together with sword animation on Link's back + f32 frame = dAcPy_c::GetLink2()->getSwordAnmFrame(); if (frame == 0.0f) { mAnm[CROSS_BTN_ANIM_CALL_0].setToEnd(); if (!mAnm[CROSS_BTN_ANIM_CALL_0].isEnabled()) { diff --git a/src/d/lyt/meter/d_lyt_meter_shield_gauge.cpp b/src/d/lyt/meter/d_lyt_meter_shield_gauge.cpp index 8c811edc..f89e6188 100644 --- a/src/d/lyt/meter/d_lyt_meter_shield_gauge.cpp +++ b/src/d/lyt/meter/d_lyt_meter_shield_gauge.cpp @@ -78,7 +78,7 @@ bool dLytMeterShieldGauge_c::build(d2d::ResAccIf_c *resAcc) { field_0x31F = 0; field_0x31E = 0; field_0x318 = 0; - mShieldType = 0; + mShieldId = 0; mSavedShieldType = -1; mAnm[SHIELD_ANIM_UPDOWN].setFrame(mCurrentDurability); @@ -134,11 +134,11 @@ bool dLytMeterShieldGauge_c::execute() { bool b3 = false; bool b4 = false; - if (mShieldType != mSavedShieldType || + if (mShieldId != mSavedShieldType || mCurrentShieldPouchSlot != convertFilePouchSlot(FileManager::GetInstance()->getShieldPouchSlot())) { mLyt.findPane("N_alpha_00")->SetVisible(true); - mSavedShieldType = mShieldType; - mAnm[SHIELD_ANIM_TYPE].setFrame(getLytFrameForShield(mShieldType)); + mSavedShieldType = mShieldId; + mAnm[SHIELD_ANIM_TYPE].setFrame(getLytFrameForShield(mShieldId)); mAnm[SHIELD_ANIM_TYPE].setAnimEnable(true); mAnm[SHIELD_ANIM_LOOP_0].setFrame(0.0f); field_0x31D = 1; diff --git a/src/egg/core/eggHeap.cpp b/src/egg/core/eggHeap.cpp index 37522dba..531585ef 100644 --- a/src/egg/core/eggHeap.cpp +++ b/src/egg/core/eggHeap.cpp @@ -1,9 +1,9 @@ #include "egg/core/eggHeap.h" #include "egg/core/eggAllocator.h" +#include "egg/core/eggThread.h" #include "nw4r/ut/ut_list.h" - namespace EGG { /* 80673ae8 */ nw4r::ut::List Heap::sHeapList; diff --git a/src/m/m3d/m_bmdl.cpp b/src/m/m3d/m_bmdl.cpp index 916d6440..2515e856 100644 --- a/src/m/m3d/m_bmdl.cpp +++ b/src/m/m3d/m_bmdl.cpp @@ -39,7 +39,7 @@ bool bmdl_c::getNodeWorldMtxMultVecZero(u32 p1, nw4r::math::VEC3 &out) const { } } -bool bmdl_c::getNodeWorldMtxMultVec(u32 p1, nw4r::math::VEC3 &in, nw4r::math::VEC3 &out) const { +bool bmdl_c::getNodeWorldMtxMultVec(u32 p1, const nw4r::math::VEC3 &in, nw4r::math::VEC3 &out) const { nw4r::math::MTX34 mtx; if (!getNodeWorldMtx(p1, &mtx)) { return false; diff --git a/src/m/m3d/m_shadow.cpp b/src/m/m3d/m_shadow.cpp index 903ca14f..da0246ef 100644 --- a/src/m/m3d/m_shadow.cpp +++ b/src/m/m3d/m_shadow.cpp @@ -514,17 +514,14 @@ bool mShadowChild_c::setGeom(const GXTexObj *texObj, const mMtx_c &mtx, const mQ } void mShadowChild_c::updateMtx() { - const mQuat_c &q = GetQuat(); - const mVec3_c &pos = GetPosition(); + // NONMATCHING + field_0x13C = mQuat.w; - Set0x13C(q.w); - - mVec3_c a(q.v); - - a += pos * GetOffset(); - - mVec3_c b(q.v); - b -= pos * Get0x13C(); + mVec3_c a(mQuat.v.x, mQuat.v.y, mQuat.v.z); + a += mPositionMaybe * GetOffset(); + + mVec3_c b(mQuat.v.x, mQuat.v.y, mQuat.v.z); + b -= mPositionMaybe * field_0x13C; const mVec3_c *up; if (cM::isZero((a - b).squareMagXZ())) { @@ -536,17 +533,16 @@ void mShadowChild_c::updateMtx() { mMtx_c mtx; C_MTXLookAt(mtx.m, a, *up, b); - const f32 f = Get0x13C(); + f32 f = field_0x13C; mFrustum.set(f, -f, -f, f, f, f + GetOffset(), mtx, true); } void mShadowChild_c::drawMdl() { - // Equivalent, but stack problems and regswaps using namespace nw4r; - mMtx_c mtx; + Mtx44 mtx; GXSetTevColor(GX_TEVREG0, sColors[mColorChanIdx]); - C_MTXOrtho(mtx.m, field_0x13C, -field_0x13C, -field_0x13C, field_0x13C, 0.0f, 100.0f + (-mFrustum.mFar)); - GXSetProjection(mtx.m, GX_ORTHOGRAPHIC); + C_MTXOrtho(mtx, field_0x13C, -field_0x13C, -field_0x13C, field_0x13C, 0.0f, 100.0f + (-mFrustum.mFar)); + GXSetProjection(mtx, GX_ORTHOGRAPHIC); g3d::G3DState::Invalidate(0x7FF); mMtx_c &viewMtx = mFrustum.mView; @@ -571,7 +567,7 @@ void mShadowChild_c::drawMdl() { g3d::DrawResMdlReplacement *pRep = mdl2 ? &mdl2->GetDrawResMdlReplacement() : nullptr; g3d::DrawResMdlDirectly( - resMdl, viewPosArray, nullptr, nullptr, mdl2->GetByteCode(g3d::ScnMdlSimple::BYTE_CODE_DRAW_OPA), + resMdl, viewPosArray, nullptr, nullptr, mdl->GetByteCode(g3d::ScnMdlSimple::BYTE_CODE_DRAW_OPA), nullptr, pRep, g3d::RESMDL_DRAWMODE_FORCE_LIGHTOFF | g3d::RESMDL_DRAWMODE_IGNORE_MATERIAL ); GXInvalidateVtxCache(); diff --git a/src/m/m_allocator.cpp b/src/m/m_allocator.cpp index 922c6889..1c6a56f0 100644 --- a/src/m/m_allocator.cpp +++ b/src/m/m_allocator.cpp @@ -63,19 +63,12 @@ void mHeapAllocator_c::destroyHeap() { } } -inline EGG::Heap *getHeapOfKind(EGG::Heap *heap, EGG::Heap::eHeapKind kind) { - if (heap != nullptr && heap->getHeapKind() == kind) { - return heap; - } - return nullptr; -} - s32 mHeapAllocator_c::adjustFrmHeap() { EGG::Heap *heap = mHeap; if (heap == mHeap::g_assertHeap) { return 0; } - return mHeap::adjustFrmHeap(static_cast(getHeapOfKind(heap, EGG::Heap::HEAP_KIND_FRAME))); + return mHeap::adjustFrmHeap(EGG::Heap::toFrmHeap(heap)); } s32 mHeapAllocator_c::adjustExpHeap() { @@ -83,7 +76,7 @@ s32 mHeapAllocator_c::adjustExpHeap() { if (heap == mHeap::g_assertHeap) { return 0; } - return mHeap::adjustExpHeap(static_cast(getHeapOfKind(heap, EGG::Heap::HEAP_KIND_EXPANDED))); + return mHeap::adjustExpHeap(EGG::Heap::toExpHeap(heap)); } bool mHeapAllocator_c::createNewTempFrmHeap(s32 size, EGG::Heap *newHeap, char *heapName, s32 align, u32 attrs) { @@ -98,7 +91,7 @@ bool mHeapAllocator_c::createNewTempFrmHeap(s32 size, EGG::Heap *newHeap, char * void mHeapAllocator_c::adjustFrmHeapRestoreCurrent() { mHeap::restoreCurrentHeap(); EGG::Heap *heap = mHeap; - mHeap::adjustFrmHeap(static_cast(getHeapOfKind(heap, EGG::Heap::HEAP_KIND_FRAME))); + mHeap::adjustFrmHeap(EGG::Heap::toFrmHeap(heap)); } void *operator new[](size_t size, mAllocator_c *allocator) { diff --git a/src/toBeSorted/special_item_drop_mgr.cpp b/src/toBeSorted/special_item_drop_mgr.cpp index c3ecf8d5..3ae89924 100644 --- a/src/toBeSorted/special_item_drop_mgr.cpp +++ b/src/toBeSorted/special_item_drop_mgr.cpp @@ -7,6 +7,7 @@ #include "d/a/d_a_itembase.h" #include "d/a/d_a_player.h" #include "d/d_pouch.h" +#include "d/d_sc_game.h" #include "m/m_angle.h" #include "m/m_vec.h" @@ -386,8 +387,6 @@ static const struct { }; static const u16 RAND_RUPEE_ARRAY[3] = {ITEM_GREEN_RUPEE, ITEM_BLUE_RUPEE, ITEM_RED_RUPEE}; -extern "C" bool isHeroMode(); - // 800c7bb0 int SpecialItemDropMgr::fn_800C7BB0(int specialItemId) { const DropList *list = &sDropTable.mList[specialItemId]; @@ -410,8 +409,8 @@ int SpecialItemDropMgr::fn_800C7BB0(int specialItemId) { // No seeds until you get the Slingshot weight = 0; } - } else if (specialItemId != 0x27 && (entryIdx == 1 || entryIdx == 2) && isHeroMode()) { - // Hearts generally don't drop on Hero Mode unless it's a special kind of heart (which?) + } else if (specialItemId != 0x27 && (entryIdx == 1 || entryIdx == 2) && dScGame_c::isHeroMode()) { + // Hearts generally don't drop on Hero Mode unless it's a special kind of heart (TODO which?) weight = 0; } else if ((entryIdx == 7 || entryIdx == 8) && !dAcItem_c::checkFlag(ITEM_BOMB_BAG)) { // Bombs won't drop until you get the Bomb Bag