diff --git a/config/SOUE01/symbols.txt b/config/SOUE01/symbols.txt index eff75314..086d1776 100644 --- a/config/SOUE01/symbols.txt +++ b/config/SOUE01/symbols.txt @@ -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__14UnkPlayerClassFv = .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,7 +2483,7 @@ 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 @@ -2501,132 +2501,132 @@ 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 +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 fn_8005CE90 = .text:0x8005CE90; // type:function size:0x134 fn_8005CFD0 = .text:0x8005CFD0; // type:function size:0x10 fn_8005CFE0 = .text:0x8005CFE0; // type:function size:0x134 @@ -2726,8 +2726,8 @@ 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 +__dt__19daPlayerModelBase_cFv = .text:0x80061580; // type:function size:0x254 +__dt__16daPlBaseAnmChr_cFv = .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 @@ -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__14UnkPlayerClassFv = .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 @@ -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__10daPlBase_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 @@ -30811,14 +30811,14 @@ 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 +__vt__10daPlBase_c = .data:0x8050DA00; // type:object size:0x310 +__vt__19daPlBaseCallback2_c = .data:0x8050DD10; // type:object size:0x18 +__vt__27daPlBaseCalcWorldCallback_c = .data:0x8050DD28; // type:object size:0x18 +__vt__16daPlBaseAnmChr_c = .data:0x8050DD40; // type:object size:0x18 +__vt__19daPlBaseCallback1_c = .data:0x8050DD58; // type:object size:0x18 +__vt__13daPlBaseMdl_c = .data:0x8050DD70; // type:object size:0x30 +__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 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..28a454f5 100644 --- a/include/d/a/d_a_player.h +++ b/include/d/a/d_a_player.h @@ -5,18 +5,615 @@ #include "d/a/d_a_base.h" #include "d/a/d_a_itembase.h" #include "d/a/obj/d_a_obj_base.h" +#include "d/col/cc/d_cc_d.h" +#include "d/a/e/d_a_en_base.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 "m/m3d/m_mdl.h" +#include "m/m3d/m_smdl.h" #include "m/m_allocator.h" #include "m/m_angle.h" #include "m/m_mtx.h" +#include "m/m_quat.h" #include "m/m_vec.h" +#include "nw4r/g3d/g3d_calcworld.h" +#include "nw4r/g3d/g3d_scnobj.h" +#include "nw4r/g3d/res/g3d_resanmchr.h" #include "nw4r/g3d/res/g3d_resfile.h" +#include "nw4r/g3d/res/g3d_resmdl.h" #include "toBeSorted/file_manager.h" +#include "toBeSorted/stage_render_stuff.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 + +/* + * 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? +class daPlBase_c : public dAcObjBase_c { public: + virtual ~daPlBase_c() {} +}; + +class daPlBaseCallback1_c : m3d::callback_c {}; +class daPlBaseCallback2_c : m3d::callback_c {}; + +class daPlBaseMdlCallback_c : m3d::mdl_c::mdlCallback_c {}; + +class daPlBaseAnmChr_c : m3d::anmChr_c { +public: + daPlBaseAnmChr_c() : field_0x35(0), field_0x36(0) {} + +private: + /* 0x35 */ u8 field_0x35; + /* 0x36 */ u8 field_0x36; +}; + +class daPlBaseMdl_c : m3d::mdl_c { +public: + daPlBaseMdl_c() : field_0x5C(0) {} + +private: + /* 0x24 */ daPlBaseMdlCallback_c mCallback; + /* 0x5C */ UNKWORD field_0x5C; +}; + +class daPlBaseCalcWorldCallback_c : public nw4r::g3d::ICalcWorldCallback { +public: + virtual void ExecCallbackA( + nw4r::g3d::ChrAnmResult *pResult, nw4r::g3d::ResMdl mdl, + nw4r::g3d::FuncObjCalcWorld *pFuncObj + ) override; // at 0xC + + virtual void ExecCallbackB( + nw4r::g3d::WorldMtxManip *pManip, nw4r::g3d::ResMdl mdl, + nw4r::g3d::FuncObjCalcWorld *pFuncObj + ) override; // at 0x10 + + virtual void ExecCallbackC( + nw4r::math::MTX34 *pMtxArray, nw4r::g3d::ResMdl mdl, + nw4r::g3d::FuncObjCalcWorld *pFuncObj + ) override; // at 0x14 +}; +class daPlBaseScnObjCallback_c : public nw4r::g3d::IScnObjCallback {}; + +class UnkPlayerClass { +public: + UnkPlayerClass() {} + ~UnkPlayerClass() {} + +private: + /* 0x00 */ u8 _0x00[0x10 - 0x00]; +}; + +// Does this one have a vtable? +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() { + } + /* 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() { + // unused; overridden by daPlayerModelBase_c + } + /* vt 0x194 */ virtual void getSwordModelMatrix() { + // unused; overridden by daPlayerModelBase_c + } + /* vt 0x198 */ virtual void vt_0x198() { + // unused; overridden by daPlayerModelBase_c + } + /* vt 0x19C */ virtual void vt_0x19C() { + // unused; overridden by daPlayerModelBase_c + } + /* 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, + }; + + 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 const mColor &getEarringsColor(); + + static mVec3_c sPos1; + static mVec3_c sPos2; + static mAng sRot1; + static mAng sRot2; + static const f32 sPushRelatedConstant; + +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 */ u8 unk_0x344[0x348 - 0x344]; + /* 0x348 */ u32 mSwordAndMoreStates; + /* 0x34C */ u8 unk_0x34C[0x350 - 0x34C]; + /* 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) +}; + +// Vtable at 8050da00, dtor reveals two superclasses +// until dAcObjBase_c +class daPlayerModelBase_c : public daPlayerActBase_c { +public: + daPlayerModelBase_c() + : mSwordRes(nullptr), + mAlinkRes(nullptr), + mPlCommonAnimeRes(nullptr), + mPlCommonSoundRes(nullptr), + mCurrentRes(nullptr), + mAlink2Res(nullptr), + mScnCallback1(this), + mScnCallback2(this), + mScnCallback3(this), + mScnCallback4(this), + mScnCallback5(this) {} + virtual ~daPlayerModelBase_c() {} + // These Flags are named under general guesses. Very likely may need some changes // Correspond to mActionFlags enum dAcPy_FLG0 { @@ -57,174 +654,7 @@ public: 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(); + // overriddes omitted /* vt 0x2E0 */ virtual void vt_0x2E0(); /* vt 0x2E4 */ virtual void someDivingHrabbingStuff(); /* vt 0x2E8 */ virtual void vt_0x2E8(); @@ -237,31 +667,79 @@ public: /* vt 0x304 */ virtual void vt_0x304(); /* vt 0x308 */ virtual void vt_0x308(); /* vt 0x30C */ virtual void vt_0x30C(); + +protected: + /* 0x370 */ mHeapAllocator_c mModelAllocator; + /* 0x38C */ mHeapAllocator_c mSwordAllocator; + /* 0x3A8 */ mHeapAllocator_c mShieldAllocator; + /* 0x3C4 */ u32 mModelUpdateFlags; + /* 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 */ daPlBaseCallback1_c mCallback1; + /* 0x448 */ m3d::mdl_c mHeadMdl; + /* 0x46C */ daPlBaseCallback2_c mCallback2; + /* 0x474 */ m3d::smdl_c mFaceMdl; + /* 0x490 */ m3d::anmChr_c mFaceAnmChr; + /* 0x4CC */ m3d::anmTexPat_c mFaceTexPat; + /* 0x4FC */ m3d::anmTexSrt_c mFaceTexSrt; + /* 0x52C */ m3d::anmChr_c mHeadAnmChr; + /* 0x564 */ m3d::smdl_c mHandsMdl; + /* 0x580 */ daPlBaseCalcWorldCallback_c mCalcWorldCallback; + /* 0x588 */ daPlBaseScnObjCallback_c mScnObjCallback; + /* 0x598 */ m3d::smdl_c mSwordMdl; + /* 0x5B4 */ m3d::anmMatClr_c mAnmMatClr; + /* 0x5E0 */ m3d::smdl_c mShieldMdl; + /* 0x5FC */ m3d::anmTexPat_c mUnkAnmTextPat1; + /* 0x628 */ m3d::anmTexPat_c mUnkAnmTextPat2; + /* 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; + /* 0x610 */ dScnCallback_c mScnCallback4; + /* 0x61C */ dScnCallback_c mScnCallback5; + /* 0x728 */ daPlBaseAnmChr_c mAnmChrs[6]; + /* 0x878 */ dCcD_Cyl mCcCyls[3]; + /* 0xC68 */ dCcD_Cps mCcCpss[3]; + /* 0x10B8 */ dCcD_Cyl mCcCyl; + /* 0x12AC */ mVec3_c mTranslationHand[2]; + /* 0x12C4 */ mVec3_c mTranslationWeapon[2]; + /* 0x12DC */ mVec3_c mToeTranslation[2]; + /* 0x1300 */ UnkPlayerClass mUnk_0x1300[4]; + /* 0x1340 */ mQuat_c mQuat1; + /* 0x1350 */ mQuat_c mQuat2; + /* 0x1360 */ dAcRef_c mRef; // not sure about the class +}; + +// The split between daPlBase_c and dAcPy_c is somewhere after +// member offset 0x1368 and before 0x137C + +class dAcPy_c : public daPlayerModelBase_c { +public: + dAcPy_c(); + virtual ~dAcPy_c(); + + // argument is always false in existing code, true doesn't seem to make a difference + void bonk(bool unk = false); + bool fn_80202D90(bool); + + /* 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: + /* 0x136C */ u8 _0x136C[0x4564 - 0x136C]; /* 0x4564 */ f32 field_0x4564; +public: f32 getField_0x4564() const { return field_0x4564; } @@ -270,6 +748,10 @@ public: return mAnmMatClr.getFrame(0); } + nw4r::g3d::ResFile getSwordResFile() const { + return mSwordRes; + } + inline bool checkFlags0x340(u32 mask) const { return (someFlags_0x340 & mask) != 0; } @@ -278,6 +760,14 @@ public: return (someFlags_0x350 & mask) != 0; } + inline void onFlags_0x360(u32 mask) { + field_0x360 |= mask; + } + + inline void onForceOrPreventActionFlags(u32 mask) { + mForceOrPreventActionFlags |= mask; + } + bool CheckPlayerFly() const { return mActionFlags & FLG0_FLY; } @@ -347,6 +837,9 @@ public: static u32 getCurrentHealthCapacity(); bool canDowseProbably() const; + + mAng fn_8023B520() const; + mAng fn_8023B590() const; }; #endif 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_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/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..6d297df9 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 @@ -50,7 +50,7 @@ bool dAcOSeatSword_c::createHeap() { 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; + mRes = dAcPy_c::GetLink()->getSwordResFile(); const char *sword_name = getSwordName(EQUIPPED_SWORD); TRY_CREATE(mSwordMdl.create(mRes.GetResMdl(sword_name), &heap_allocator, 0x120, 1, nullptr)); } @@ -173,7 +173,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/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/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/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..6c798581 --- /dev/null +++ b/src/d/d_player_act.cpp @@ -0,0 +1,129 @@ +#include "d/a/d_a_item.h" +#include "d/a/d_a_itembase.h" +#include "d/d_player.h" + +#include "common.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; + translate.x = mtx.m[0][3]; + translate.y = mtx.m[1][3]; + translate.z = mtx.m[2][3]; + 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_mdl.cpp b/src/d/d_player_mdl.cpp new file mode 100644 index 00000000..eac936bd --- /dev/null +++ b/src/d/d_player_mdl.cpp @@ -0,0 +1,5 @@ +#include "d/a/d_a_player.h" + +void dummy_triggerDtor(daPlayerModelBase_c *pl) { + delete pl; +}