#pragma once /** * @file HackCap.h * @brief Main Class for HackCap (Cappy) * Vtable loc: 1D75520 */ #include "al/LiveActor/LiveActor.h" #include "al/sensor/HitSensor.h" #include "al/sensor/SensorMsg.h" #include "game/Player/PlayerInput.h" #include "game/Interfaces/IUsePlayerCollision.h" #include "HackCapThrowParam.h" #include "HackCap/HackCapJointControlKeeper.h" #include "HackCap/PlayerCapActionHistory.h" class PlayerWallActionHistory; class PlayerEyeSensorHitHolder; class IUsePlayerHeightCheck; class PlayerWetControl; class PlayerJointControlKeeper; class HackCapJudgePreInputSeparateThrow; class HackCapJudgePreInputSeparateJump; class PlayerSeparateCapFlag; class CapTargetInfo; class PlayerActorHakoniwa; // use a stub instead of the actual class file #define HACKSIZE sizeof(al::LiveActor) class HackCap : public al::LiveActor { public: HackCap(al::LiveActor const*,char const*,PlayerInput const*, struct PlayerAreaChecker const*, PlayerWallActionHistory const*, PlayerCapActionHistory const*, PlayerEyeSensorHitHolder const*,PlayerSeparateCapFlag const*,IUsePlayerCollision const*, IUsePlayerHeightCheck const*, PlayerWetControl const*, PlayerJointControlKeeper const*, HackCapJudgePreInputSeparateThrow *, HackCapJudgePreInputSeparateJump *); enum SwingHandType { Left, Right }; void init(al::ActorInitInfo const&); void hide(bool); void movement(void); void updateShadowMaskOffset(void); void control(void); void updateTargetLayout(void); void updateCollider(void); void updateFrameOutLayout(void); void attackSpin(al::HitSensor *,al::HitSensor *,float); void prepareLockOn(al::HitSensor *); void sendMsgStartHack(al::HitSensor *); void receiveRequestTransferHack(al::HitSensor *,al::HitSensor *); void startThrowSeparatePlayHack(al::HitSensor *, sead::Vector3f const&, sead::Vector3f const&,float); void startHack(void); void emitHackStartEffect(void); void noticeHackMarioEnter(void); void noticeHackDemoPuppetableEnd(void); void recordHack(void); void addHackStartDemo(void); void addLockOnKeepDemo(void); void syncHackDamageVisibility(bool); void endHack(void); void startSpinAttack(char const*); void startThrow(bool, sead::Vector3f const&, sead::Vector3f const&,float, sead::Vector2f const&, sead::Vector2f const&, sead::Vector3f const&,bool, sead::Vector3f const&, HackCap::SwingHandType,bool,float,int); void startThrowSeparatePlay( sead::Vector3f const&, sead::Vector3f const&,float,bool); void startThrowSeparatePlayJump( sead::Vector3f const&, sead::Vector3f const&,float); void startCatch(char const*,bool, sead::Vector3f const&); void forcePutOn(void); void forceHack(al::HitSensor *, CapTargetInfo const*); // :eyes: void resetLockOnParam(void); void setupStartLockOn(void); void cancelCapState(void); void requestReturn(bool *); void tryReturn(bool,bool *); void updateCapPose(void); void followTarget(void); void syncPuppetSilhouette(void); void recordCapJump(PlayerWallActionHistory *); void getFlyingSpeedMax(void); void getThrowSpeed(void); void requestLockOnHitReaction(CapTargetInfo const*,char const*); void startPuppet(void); void endPuppet(void); void hidePuppetCap(void); void showPuppetCap(void); void hidePuppetCapSilhouette(void); void showPuppetCapSilhouette(void); void startPuppetCheckpointWarp(void); void startHackShineGetDemo(void); void endHackThrowAndReturnHack(void); void endHackShineGetDemo(void); void calcHackFollowTrans( sead::Vector3f *,bool); void makeFollowMtx(sead::Matrix34 *); void updateCapEyeShowHide(bool,int); void activateInvincibleEffect(void); void syncInvincibleEffect(bool); void updateSeparateMode(PlayerSeparateCapFlag const*); void startRescuePlayer(void); void prepareCooperateThrow(void); void requestForceFollowSeparateHide(void); void calcSeparateHideSpeedH(sead::Vector3f const&); void updateModelAlphaForSnapShot(void); void getPadRumblePort(void); void updateThrowJoint(void); void setupThrowStart(void); void getThrowHeight(void); void checkEnableThrowStartSpace(sead::Vector3f *, sead::Vector3f *, sead::Vector3f *, sead::Vector3f const&,float,float,bool, sead::Vector3f const&); void updateWaterArea(void); void getThrowRange(void); void getThrowBrakeTime(void); void startThrowCapEyeThrowAction(void); void tryCollideReflectReaction(void); void tryCollideWallReaction(void); void changeThrowParamInWater(int,bool); void addCurveOffset(void); void tryAppendAttack(void); void tryCollideWallReactionSpiral(void); void endThrowSpiral(void); void tryCollideWallReactionReflect(void); void tryCollideWallReactionRollingGround(void); void rollingGround(void); void tryChangeSeparateThrow(void); void getThrowBackSpeed(void); void updateLavaSurfaceMove(void); void tryCollideWallReactionStay(void); void getThrowStayTime(void); void getThrowStayTimeMax(void); void getThrowSpeedAppend(void); void getThrowRangeAppend(void); void tryCollideWallLockOn(void); void endHackThrowAndReturnHackOrHide(void); void clearThrowType(void); void calcReturnTargetPos( sead::Vector3f *); void attackSensor(al::HitSensor *,al::HitSensor *); void stayRollingOrReflect(void); bool receiveMsg(al::SensorMsg const*,al::HitSensor *,al::HitSensor *); void endMove(void); void prepareTransferLockOn(al::HitSensor *); void collideThrowStartArrow(al::HitSensor *, sead::Vector3f const&, sead::Vector3f const&, sead::Vector3f const&); void trySendAttackCollideAndReaction(bool *); void stayWallHit(void); void endHackThrow(void); bool isFlying(void) const; bool isNoPutOnHide(void) const; bool isEnableThrow(void) const; bool isEnableSpinAttack(void) const; bool isSpinAttack(void) const; bool isEnableRescuePlayer(void) const; bool isRescuePlayer(void) const; bool isEnableHackThrow(bool *) const; bool isSeparateHipDropLand(void) const; bool isSeparateHide(void) const; bool isSeparateThrowFlying(void) const; bool isEnableThrowSeparate(void) const; bool isHoldInputKeepLockOn(void) const; bool isRequestableReturn(void) const; bool isLockOnEnableHackTarget(void) const; bool isWaitHackLockOn(void) const; bool isCatched(void) const; bool isHide(void) const; bool isPutOn(void) const; bool isLockOnInterpolate(void) const; bool isEnablePreInput(void) const; bool isForceCapTouchJump(void) const; bool isHackInvalidSeparatePlay(void) const; bool isHoldSpinCapStay(void) const; bool isThrowTypeSpiral(void) const; bool isThrowTypeRolling(void) const; bool isEnableHackThrowAutoCatch(void) const; bool isEnableCapTouchJumpInput(void) const; void exeLockOn(void); void exeHack(void); void exeSpinAttack(void); void exeCatch(void); void exeTrample(void); void exeTrampleLockOn(void); void exeRescue(void); void exeHide(void); void exeThrowStart(void); void exeThrow(void); void exeThrowBrake(void); void exeThrowSpiral(void); void exeThrowTornado(void); void exeThrowRolling(void); void exeThrowRollingBrake(void); void exeThrowStay(void); void exeThrowAppend(void); void exeRebound(void); void exeReturn(void); void exeBlow(void); void *unkPtr1; // 0x108 void *unkPtr2; // 0x110 al::LiveActor *mLockOnEyes; // 0x118 al::LiveActor *mCapEyes; // 0x120 PlayerActorHakoniwa *mPlayerActor; // 0x128 unsigned char padding_220[0x220-0x130]; HackCapThrowParam *throwParam; // 0x220 unsigned char padding_2B8[0x2B8-0x228]; PlayerCapActionHistory *mCapActionHistory; // 0x2B8 unsigned char padding_2E0[0x2E0-0x2C0]; HackCapJointControlKeeper *mJointKeeper; // 0x2E0 };