From 1df21b2a3e6baf27e1f8c93c56916b0236d61348 Mon Sep 17 00:00:00 2001 From: CraftyBoss Date: Thu, 7 Jul 2022 22:36:29 -0700 Subject: [PATCH] added new headers, puppet actor archive, basic player interaction impl --- include/actors/PuppetActor.h | 3 + include/al/LiveActor/LiveActor.h | 6 +- include/al/sensor/HitSensorKeeper.h | 4 +- include/al/util/LiveActorUtil.h | 2 +- include/al/util/SensorUtil.h | 480 ++++++++++++++++++ .../cameras/CameraVerticalAbsorber2DGalaxy.h | 38 ++ include/rs/util/SensorUtil.h | 6 +- romfs/ObjectData/PuppetActor.szs | Bin 0 -> 3588 bytes source/puppets/PuppetActor.cpp | 25 +- source/puppets/PuppetMain.cpp | 2 +- source/server/Client.cpp | 11 +- 11 files changed, 565 insertions(+), 12 deletions(-) create mode 100644 include/al/util/SensorUtil.h create mode 100644 include/cameras/CameraVerticalAbsorber2DGalaxy.h create mode 100644 romfs/ObjectData/PuppetActor.szs diff --git a/include/actors/PuppetActor.h b/include/actors/PuppetActor.h index e6ed730..c32f93a 100644 --- a/include/actors/PuppetActor.h +++ b/include/actors/PuppetActor.h @@ -33,6 +33,9 @@ class PuppetActor : public al::LiveActor { virtual void movement(void) override; virtual void makeActorAlive(void) override; virtual void makeActorDead(void) override; + + virtual void attackSensor(al::HitSensor *, al::HitSensor *) override; + virtual bool receiveMsg(const al::SensorMsg *, al::HitSensor *, al::HitSensor *) override; void initOnline(PuppetInfo *pupInfo); diff --git a/include/al/LiveActor/LiveActor.h b/include/al/LiveActor/LiveActor.h index b27b0ca..444eebf 100644 --- a/include/al/LiveActor/LiveActor.h +++ b/include/al/LiveActor/LiveActor.h @@ -61,8 +61,10 @@ namespace al virtual void draw() const; virtual void startClipped(); virtual void endClipped(); - virtual void attackSensor(HitSensor *, HitSensor *); - virtual bool receiveMsg(const SensorMsg *, HitSensor *, HitSensor *); + // source = sensor belonging to this actor + // target = sensor belonging to other actor + virtual void attackSensor(HitSensor *source, HitSensor *target); + virtual bool receiveMsg(const SensorMsg *msg, HitSensor *source, HitSensor *target); virtual bool receiveMsgScreenPoint(const SensorMsg *, ScreenPointer *, ScreenPointTarget *); virtual const char *getName() const { return this->mActorName; }; diff --git a/include/al/sensor/HitSensorKeeper.h b/include/al/sensor/HitSensorKeeper.h index 03edf6d..9771950 100644 --- a/include/al/sensor/HitSensorKeeper.h +++ b/include/al/sensor/HitSensorKeeper.h @@ -1,7 +1,6 @@ #pragma once #include "types.h" -#include "al/LiveActor/LiveActor.h" #include "al/sensor/SensorHitGroup.h" #include "sead/math/seadVector.h" #include "sead/math/seadMatrix.h" @@ -9,6 +8,9 @@ namespace al { + + class LiveActor; + class HitSensorKeeper { public: diff --git a/include/al/util/LiveActorUtil.h b/include/al/util/LiveActorUtil.h index ace88f8..fdd1a0b 100644 --- a/include/al/util/LiveActorUtil.h +++ b/include/al/util/LiveActorUtil.h @@ -29,7 +29,7 @@ namespace al { void startAction(LiveActor*, char const*); void startAction(IUseLayoutAction*, const char *, const char *); void startFreezeActionEnd(IUseLayoutAction *,char const*,char const*); - void startHitReaction(LiveActor*, char const*); + void startHitReaction(const LiveActor *, char const*); void invalidateClipping(const LiveActor *); void validateClipping(const LiveActor *); void setNerveAtActionEnd(LiveActor*, const al::Nerve*); diff --git a/include/al/util/SensorUtil.h b/include/al/util/SensorUtil.h new file mode 100644 index 0000000..684645d --- /dev/null +++ b/include/al/util/SensorUtil.h @@ -0,0 +1,480 @@ +#pragma once + +#include "al/sensor/HitSensor.h" +#include "al/sensor/HitSensorKeeper.h" +#include "al/sensor/SensorHitGroup.h" + +#include "al/LiveActor/LiveActor.h" // for SensorMsg + +#include + +struct SaveObjInfo; +struct HackEndParam; +struct IUsePlayerCollision; +struct IUsePlayerHack; + +struct DigPoint; +struct TouchTargetInfo; +struct WhipTargetInfo; +struct CapTargetInfo; +struct GotogotonMark; +struct FishingFish; + +typedef unsigned int uint; + +namespace al +{ + + struct ComboCounter; + struct EventFlowExecutor; + struct ParabolicPath; + + sead::Vector3f *getSensorPos(al::HitSensor const *); + sead::Vector3f* getActorTrans(al::HitSensor const*); + + bool tryReceiveMsgPushAndAddVelocity(al::LiveActor*, al::SensorMsg const*, al::HitSensor const*, + al::HitSensor const*, float); + + bool isSensorTypeYoshiEnableSendPush(al::HitSensor const*); + bool isSensorTypeYoshiMsgReceivable(al::HitSensor const*); + bool isSensorValid(al::HitSensor const*); + bool isSensorName(al::HitSensor const*, char const*); + bool isSensorHostName(al::HitSensor const*, char const*); + bool isSensorHost(al::HitSensor const*, al::LiveActor const*); + bool isSensorValid(al::LiveActor const*, char const*); + bool isSensorBindableAll(al::HitSensor const*); + bool isSensorEnemy(al::HitSensor const*); + bool isSensorEnemyAttack(al::HitSensor const*); + bool isSensorEnemyBody(al::HitSensor const*); + bool isSensorEye(al::HitSensor const*); + bool isSensorMapObj(al::HitSensor const*); + bool isSensorNpc(al::HitSensor const*); + bool isSensorPlayerAll(al::HitSensor const*); + bool isSensorRide(al::HitSensor const*); + bool isSensorPlayerAttack(al::HitSensor const*); + bool isSensorPlayer(al::HitSensor const*); + bool isSensorPlayerFoot(al::HitSensor const*); + bool isSensorPlayerDecoration(al::HitSensor const*); + bool isSensorPlayerEye(al::HitSensor const*); + bool isSensorPlayerOrPlayerWeapon(al::HitSensor const*); + bool isSensorCollision(al::HitSensor const*); + bool isSensorPlayerFireBall(al::HitSensor const*); + bool isSensorHoldObj(al::HitSensor const*); + bool isSensorLookAt(al::HitSensor const*); + bool isSensorBindableGoal(al::HitSensor const*); + bool isSensorBindableAllPlayer(al::HitSensor const*); + bool isSensorBindableBubbleOutScreen(al::HitSensor const*); + bool isSensorBindableKoura(al::HitSensor const*); + bool isSensorBindableRouteDokan(al::HitSensor const*); + bool isSensorBindableBubblePadInput(al::HitSensor const*); + bool isSensorBindable(al::HitSensor const*); + bool isSensorSimple(al::HitSensor const*); + bool isSensorHitAnyPlane(al::HitSensor const*,al::HitSensor const*, sead::Vector3 const&); + bool isSensorHitRingShape(al::HitSensor const*, al::HitSensor const*, float); + + bool isMsgRequestPlayerStainWet(al::SensorMsg const *, int *); + bool isMsgPushAll(al::SensorMsg const *); + bool isMsgPush(al::SensorMsg const *); + bool isMsgPushStrong(al::SensorMsg const *); + bool isMsgPushVeryStrong(al::SensorMsg const *); + bool isMsgHoldReleaseAll(al::SensorMsg const *); + bool isMsgHoldCancel(al::SensorMsg const *); + bool isMsgPlayerRelease(al::SensorMsg const *); + bool isMsgPlayerReleaseBySwing(al::SensorMsg const *); + bool isMsgPlayerReleaseDead(al::SensorMsg const *); + bool isMsgPlayerReleaseDamage(al::SensorMsg const *); + bool isMsgPlayerReleaseDemo(al::SensorMsg const *); + bool isMsgItemGetDirectAll(al::SensorMsg const *); + bool isMsgPlayerItemGet(al::SensorMsg const *); + bool isMsgRideAllPlayerItemGet(al::SensorMsg const *); + bool isMsgPlayerTailAttack(al::SensorMsg const *); + bool isMsgItemGetByObjAll(al::SensorMsg const *); + bool isMsgBallItemGet(al::SensorMsg const *); + bool isMsgKickKouraItemGet(al::SensorMsg const *); + bool isMsgKillerItemGet(al::SensorMsg const *); + bool isMsgItemGetAll(al::SensorMsg const *); + bool isMsgFloorTouch(al::SensorMsg const *); + bool isMsgPlayerFloorTouch(al::SensorMsg const *); + bool isMsgEnemyFloorTouch(al::SensorMsg const *); + bool isMsgUpperPunch(al::SensorMsg const *); + bool isMsgPlayerUpperPunch(al::SensorMsg const *); + bool isMsgEnemyUpperPunch(al::SensorMsg const *); + bool isMsgPlayerTrample(al::SensorMsg const *); + bool isMsgPlayerTrampleReflect(al::SensorMsg const *); + bool isMsgPlayerHipDropAll(al::SensorMsg const *); + bool isMsgPlayerStatueDrop(al::SensorMsg const *); + bool isMsgPlayerObjHipDropAll(al::SensorMsg const *); + bool isMsgPlayerObjStatueDrop(al::SensorMsg const *); + bool isMsgPlayerObjHipDropReflectAll(al::SensorMsg const *); + bool isMsgPlayerObjStatueDropReflect(al::SensorMsg const *); + bool isMsgPlayerObjHipDropHighJump(al::SensorMsg const *); + bool isMsgPlayerHipDropKnockDown(al::SensorMsg const *); + bool isMsgPlayerObjStatueDropReflectNoCondition(al::SensorMsg const *); + bool isMsgPlayerStatueTouch(al::SensorMsg const *); + bool isMsgPlayerObjUpperPunch(al::SensorMsg const *); + bool isMsgPlayerRollingAttack(al::SensorMsg const *); + bool isMsgPlayerRollingReflect(al::SensorMsg const *); + bool isMsgPlayerObjRollingAttack(al::SensorMsg const *); + bool isMsgPlayerObjRollingAttackFailure(al::SensorMsg const *); + bool isMsgPlayerInvincibleAttack(al::SensorMsg const *); + bool isMsgPlayerFireBallAttack(al::SensorMsg const *); + bool isMsgPlayerRouteDokanFireBallAttack(al::SensorMsg const *); + bool isMsgPlayerKick(al::SensorMsg const *); + bool isMsgPlayerCatch(al::SensorMsg const *); + bool isMsgPlayerSlidingAttack(al::SensorMsg const *); + bool isMsgPlayerBoomerangAttack(al::SensorMsg const *); + bool isMsgPlayerBoomerangAttackCollide(al::SensorMsg const *); + bool isMsgPlayerBoomerangReflect(al::SensorMsg const *); + bool isMsgPlayerBoomerangBreak(al::SensorMsg const *); + bool isMsgPlayerBodyAttack(al::SensorMsg const *); + bool isMsgPlayerBodyLanding(al::SensorMsg const *); + bool isMsgPlayerBodyAttackReflect(al::SensorMsg const *); + bool isMsgPlayerClimbAttack(al::SensorMsg const *); + bool isMsgPlayerSpinAttack(al::SensorMsg const *); + bool isMsgPlayerGiantAttack(al::SensorMsg const *); + bool isMsgPlayerCooperationHipDrop(al::SensorMsg const *); + bool isMsgPlayerClimbSlidingAttack(al::SensorMsg const *); + bool isMsgPlayerClimbRollingAttack(al::SensorMsg const *); + bool isMsgPlayerGiantHipDrop(al::SensorMsg const *); + bool isMsgPlayerDisregard(al::SensorMsg const *); + bool isMsgPlayerDash(al::SensorMsg const *); + bool isMsgPlayerDamageTouch(al::SensorMsg const *); + bool isMsgPlayerFloorTouchBind(al::SensorMsg const *); + bool isMsgPlayerTouch(al::SensorMsg const *); + bool isMsgPlayerInvincibleTouch(al::SensorMsg const *); + bool isMsgPlayerGiantTouch(al::SensorMsg const *); + bool isMsgPlayerObjTouch(al::SensorMsg const *); + bool isMsgPlayerPutOnEquipment(al::SensorMsg const *); + bool isMsgPlayerReleaseEquipment(al::SensorMsg const *); + bool isMsgPlayerReleaseEquipmentGoal(al::SensorMsg const *); + bool isMsgPlayerCarryFront(al::SensorMsg const *); + bool isMsgPlayerCarryFrontWallKeep(al::SensorMsg const *); + bool isMsgPlayerCarryUp(al::SensorMsg const *); + bool isMsgPlayerCarryKeepDemo(al::SensorMsg const *); + bool isMsgPlayerCarryWarp(al::SensorMsg const *); + bool isMsgPlayerLeave(al::SensorMsg const *); + bool isMsgPlayerToss(al::SensorMsg const *); + bool isMsgEnemyAttack(al::SensorMsg const *); + bool isMsgEnemyAttackFire(al::SensorMsg const *); + bool isMsgEnemyAttackKnockDown(al::SensorMsg const *); + bool isMsgEnemyAttackBoomerang(al::SensorMsg const *); + bool isMsgEnemyAttackNeedle(al::SensorMsg const *); + bool isMsgEnemyItemGet(al::SensorMsg const *); + bool isMsgEnemyRouteDokanAttack(al::SensorMsg const *); + bool isMsgEnemyRouteDokanFire(al::SensorMsg const *); + bool isMsgExplosion(al::SensorMsg const *); + bool isMsgExplosionCollide(al::SensorMsg const *); + bool isMsgBindStart(al::SensorMsg const *); + bool isMsgBindInit(al::SensorMsg const *); + bool isMsgBindEnd(al::SensorMsg const *); + bool isMsgBindCancel(al::SensorMsg const *); + bool isMsgBindCancelByDemo(al::SensorMsg const *); + bool isMsgBindDamage(al::SensorMsg const *); + bool isMsgBindSteal(al::SensorMsg const *); + bool isMsgBindGiant(al::SensorMsg const *); + bool isMsgPressureDeath(al::SensorMsg const *); + bool isMsgNpcTouch(al::SensorMsg const *); + bool isMsgHit(al::SensorMsg const *); + bool isMsgHitStrong(al::SensorMsg const *); + bool isMsgHitVeryStrong(al::SensorMsg const *); + bool isMsgKnockDown(al::SensorMsg const *); + bool isMsgMapPush(al::SensorMsg const *); + bool isMsgVanish(al::SensorMsg const *); + bool isMsgChangeAlpha(al::SensorMsg const *); + bool isMsgShowModel(al::SensorMsg const *); + bool isMsgHideModel(al::SensorMsg const *); + bool isMsgRestart(al::SensorMsg const *); + bool isMsgEnemyTouch(al::SensorMsg const *); + bool isMsgEnemyTrample(al::SensorMsg const *); + bool isMsgMapObjTrample(al::SensorMsg const *); + bool isMsgNeedleBallAttack(al::SensorMsg const *); + bool isMsgPunpunFloorTouch(al::SensorMsg const *); + bool isMsgInvalidateFootPrint(al::SensorMsg const *); + bool isMsgKickKouraAttack(al::SensorMsg const *); + bool isMsgKickKouraAttackCollide(al::SensorMsg const *); + bool isMsgKickKouraReflect(al::SensorMsg const *); + bool isMsgKickKouraCollideNoReflect(al::SensorMsg const *); + bool isMsgKickKouraBreak(al::SensorMsg const *); + bool isMsgKickKouraBlow(al::SensorMsg const *); + bool isMsgKickStoneAttack(al::SensorMsg const *); + bool isMsgKickStoneAttackCollide(al::SensorMsg const *); + bool isMsgKickStoneAttackHold(al::SensorMsg const *); + bool isMsgKickStoneAttackReflect(al::SensorMsg const *); + bool isMsgKickStoneTrample(al::SensorMsg const *); + bool isMsgKillerAttack(al::SensorMsg const *); + bool isMsgLiftGeyser(al::SensorMsg const *); + bool isMsgWarpStart(al::SensorMsg const *); + bool isMsgWarpEnd(al::SensorMsg const *); + bool isMsgHoleIn(al::SensorMsg const *); + bool isMsgJumpInhibit(al::SensorMsg const *); + bool isMsgGoalKill(al::SensorMsg const *); + bool isMsgGoal(al::SensorMsg const *); + bool isMsgBallAttack(al::SensorMsg const *); + bool isMsgBallRouteDokanAttack(al::SensorMsg const *); + bool isMsgBallAttackHold(al::SensorMsg const *); + bool isMsgBallAttackDRCHold(al::SensorMsg const *); + bool isMsgBallAttackCollide(al::SensorMsg const *); + bool isMsgBallTrample(al::SensorMsg const *); + bool isMsgBallTrampleCollide(al::SensorMsg const *); + bool isMsgFireBallCollide(al::SensorMsg const *); + bool isMsgFireBallFloorTouch(al::SensorMsg const *); + bool isMsgDokanBazookaAttack(al::SensorMsg const *); + bool isMsgSwitchOn(al::SensorMsg const *); + bool isMsgSwitchOnInit(al::SensorMsg const *); + bool isMsgSwitchOffInit(al::SensorMsg const *); + bool isMsgSwitchKillOn(al::SensorMsg const *); + bool isMsgSwitchKillOnInit(al::SensorMsg const *); + bool isMsgSwitchKillOffInit(al::SensorMsg const *); + bool isMsgAskSafetyPoint(al::SensorMsg const *); + bool isMsgTouchAssist(al::SensorMsg const *); + bool isMsgTouchAssistNoPat(al::SensorMsg const *); + bool isMsgTouchAssistTrig(al::SensorMsg const *); + bool isMsgTouchAssistTrigOff(al::SensorMsg const *); + bool isMsgTouchAssistTrigNoPat(al::SensorMsg const *); + bool isMsgTouchAssistBurn(al::SensorMsg const *); + bool isMsgTouchAssistAll(al::SensorMsg const *); + bool isMsgTouchCarryItem(al::SensorMsg const *); + bool isMsgTouchReleaseItem(al::SensorMsg const *); + bool isMsgTouchStroke(al::SensorMsg const *); + bool isMsgIsNerveSupportFreeze(al::SensorMsg const *); + bool isMsgOnSyncSupportFreeze(al::SensorMsg const *); + bool isMsgOffSyncSupportFreeze(al::SensorMsg const *); + bool isMsgScreenPointInvalidCollisionParts(al::SensorMsg const *); + bool isMsgBlockUpperPunch(al::SensorMsg const *); + bool isMsgBlockLowerPunch(al::SensorMsg const *); + bool isMsgBlockItemGet(al::SensorMsg const *); + bool isMsgPlayerKouraAttack(al::SensorMsg const *); + bool isMsgLightFlash(al::SensorMsg const *); + bool isMsgForceAbyss(al::SensorMsg const *); + bool isMsgSwordAttackHigh(al::SensorMsg const *); + bool isMsgSwordAttackHighLeft(al::SensorMsg const *); + bool isMsgSwordAttackHighRight(al::SensorMsg const *); + bool isMsgSwordAttackLow(al::SensorMsg const *); + bool isMsgSwordAttackLowLeft(al::SensorMsg const *); + bool isMsgSwordAttackLowRight(al::SensorMsg const *); + bool isMsgSwordBeamAttack(al::SensorMsg const *); + bool isMsgSwordBeamReflectAttack(al::SensorMsg const *); + bool isMsgSwordAttackJumpUnder(al::SensorMsg const *); + bool isMsgShieldGuard(al::SensorMsg const *); + bool isMsgAskMultiPlayerEnemy(al::SensorMsg const *); + bool isMsgItemGettable(al::SensorMsg const *); + bool isMsgKikkiThrow(al::SensorMsg const *); + bool isMsgIsKikkiThrowTarget(al::SensorMsg const *); + bool isMsgPlayerCloudGet(al::SensorMsg const *); + bool isMsgAutoJump(al::SensorMsg const *); + bool isMsgPlayerTouchShadow(al::SensorMsg const *); + bool isMsgPlayerPullOutShadow(al::SensorMsg const *); + bool isMsgPlayerAttackShadow(al::SensorMsg const *); + bool isMsgPlayerAttackShadowStrong(al::SensorMsg const *); + bool isMsgPlayerAttackChangePos(al::SensorMsg const *); + bool isMsgAtmosOnlineLight(al::SensorMsg const *); + bool isMsgLightBurn(al::SensorMsg const *); + bool isMsgMoonLightBurn(al::SensorMsg const *); + bool isMsgString(al::SensorMsg const *); + bool isMsgStringV4fPtr(al::SensorMsg const *); + bool isMsgStringV4fSensorPtr(al::SensorMsg const *); + bool isMsgStringVoidPtr(al::SensorMsg const *); + bool isMsgPlayerTrampleForCrossoverSensor(al::SensorMsg const *, al::HitSensor const *, al::HitSensor const *); + bool isMsgPlayerTrampleReflectForCrossoverSensor(al::SensorMsg const *, al::HitSensor const *, al::HitSensor const *); + bool isMsgPlayerUpperPunchForCrossoverSensor(al::SensorMsg const *, al::HitSensor const *, al::HitSensor const *, float); + bool isMsgKickStoneTrampleForCrossoverSensor(al::SensorMsg const *, al::HitSensor const *, al::HitSensor const *); + + bool sendMsgPlayerAttackTrample(al::HitSensor *, al::HitSensor *, al::ComboCounter *); + bool sendMsgPlayerTrampleReflect(al::HitSensor *, al::HitSensor *, al::ComboCounter *); + bool sendMsgPlayerReflectOrTrample(al::HitSensor *, al::HitSensor *, al::ComboCounter *); + bool sendMsgPlayerHipDrop(al::HitSensor *, al::HitSensor *, al::ComboCounter *); + bool sendMsgPlayerObjHipDrop(al::HitSensor *, al::HitSensor *, al::ComboCounter *); + bool sendMsgPlayerObjHipDropReflect(al::HitSensor *, al::HitSensor *, al::ComboCounter *); + bool sendMsgPlayerObjHipDropHighJump(al::HitSensor *, al::HitSensor *, al::ComboCounter *); + bool sendMsgPlayerHipDropKnockDown(al::HitSensor *, al::HitSensor *); + bool sendMsgPlayerStatueDrop(al::HitSensor *, al::HitSensor *, al::ComboCounter *); + bool sendMsgPlayerObjStatueDrop(al::HitSensor *, al::HitSensor *, al::ComboCounter *); + bool sendMsgPlayerObjStatueDropReflect(al::HitSensor *, al::HitSensor *, al::ComboCounter *); + bool sendMsgPlayerObjStatueDropReflectNoCondition(al::HitSensor *, al::HitSensor *); + bool sendMsgPlayerStatueTouch(al::HitSensor *, al::HitSensor *); + bool sendMsgPlayerUpperPunch(al::HitSensor *, al::HitSensor *); + bool sendMsgPlayerObjUpperPunch(al::HitSensor *, al::HitSensor *); + bool sendMsgPlayerRollingAttack(al::HitSensor *, al::HitSensor *); + bool sendMsgPlayerRollingReflect(al::HitSensor *, al::HitSensor *); + bool sendMsgPlayerObjRollingAttack(al::HitSensor *, al::HitSensor *); + bool sendMsgPlayerObjRollingAttackFailure(al::HitSensor *, al::HitSensor *); + bool sendMsgPlayerInvincibleAttack(al::HitSensor *, al::HitSensor *, al::ComboCounter *); + bool sendMsgPlayerFireBallAttack(al::HitSensor *, al::HitSensor *); + bool sendMsgPlayerRouteDokanFireBallAttack(al::HitSensor *, al::HitSensor *); + bool sendMsgPlayerTailAttack(al::HitSensor *, al::HitSensor *, al::ComboCounter *); + bool sendMsgPlayerTouch(al::HitSensor *, al::HitSensor *); + bool sendMsgPlayerKick(al::HitSensor *, al::HitSensor *); + bool sendMsgPlayerCatch(al::HitSensor *, al::HitSensor *); + bool sendMsgPlayerSlidingAttack(al::HitSensor *, al::HitSensor *, al::ComboCounter *); + bool sendMsgPlayerBoomerangAttack(al::HitSensor *, al::HitSensor *, al::ComboCounter *); + bool sendMsgPlayerBoomerangAttackCollide(al::HitSensor *, al::HitSensor *); + bool sendMsgPlayerBoomerangReflect(al::HitSensor *, al::HitSensor *); + bool sendMsgPlayerBoomerangBreak(al::HitSensor *, al::HitSensor *); + bool sendMsgPlayerBodyAttack(al::HitSensor *, al::HitSensor *, al::ComboCounter *); + bool sendMsgPlayerBodyLanding(al::HitSensor *, al::HitSensor *, al::ComboCounter *); + bool sendMsgPlayerBodyAttackReflect(al::HitSensor *, al::HitSensor *, al::ComboCounter *); + bool sendMsgPlayerClimbAttack(al::HitSensor *, al::HitSensor *, al::ComboCounter *); + bool sendMsgPlayerSpinAttack(al::HitSensor *, al::HitSensor *, al::ComboCounter *); + bool sendMsgPlayerGiantAttack(al::HitSensor *, al::HitSensor *, al::ComboCounter *); + bool sendMsgPlayerCooperationHipDrop(al::HitSensor *, al::HitSensor *, al::ComboCounter *); + bool sendMsgPlayerClimbSlidingAttack(al::HitSensor *, al::HitSensor *, al::ComboCounter *); + bool sendMsgPlayerClimbRollingAttack(al::HitSensor *, al::HitSensor *, al::ComboCounter *); + bool sendMsgPlayerGiantHipDrop(al::HitSensor *, al::HitSensor *, al::ComboCounter *); + bool sendMsgPlayerDisregard(al::HitSensor *, al::HitSensor *); + bool sendMsgPlayerItemGet(al::HitSensor *, al::HitSensor *); + bool sendMsgPlayerPutOnEquipment(al::HitSensor *, al::HitSensor *); + bool sendMsgPlayerReleaseEquipment(al::HitSensor *, al::HitSensor *); + bool sendMsgPlayerReleaseEquipmentGoal(al::HitSensor *, al::HitSensor *, uint); + bool sendMsgPlayerFloorTouch(al::HitSensor *, al::HitSensor *); + bool sendMsgPlayerDamageTouch(al::HitSensor *, al::HitSensor *); + bool sendMsgPlayerCarryFront(al::HitSensor *, al::HitSensor *); + bool sendMsgPlayerCarryFrontWallKeep(al::HitSensor *, al::HitSensor *); + bool sendMsgPlayerCarryUp(al::HitSensor *, al::HitSensor *); + bool sendMsgPlayerCarryKeepDemo(al::HitSensor *, al::HitSensor *); + bool sendMsgPlayerCarryWarp(al::HitSensor *, al::HitSensor *); + bool sendMsgPlayerLeave(al::HitSensor *, al::HitSensor *); + bool sendMsgPlayerRelease(al::HitSensor *, al::HitSensor *); + bool sendMsgPlayerReleaseBySwing(al::HitSensor *, al::HitSensor *); + bool sendMsgPlayerReleaseDamage(al::HitSensor *, al::HitSensor *); + bool sendMsgPlayerReleaseDead(al::HitSensor *, al::HitSensor *); + bool sendMsgPlayerReleaseDemo(al::HitSensor *, al::HitSensor *); + bool sendMsgPlayerToss(al::HitSensor *, al::HitSensor *); + bool sendMsgPlayerInvincibleTouch(al::HitSensor *, al::HitSensor *, al::ComboCounter *); + bool sendMsgEnemyAttack(al::HitSensor *, al::HitSensor *); + bool sendMsgEnemyAttackBoomerang(al::HitSensor *, al::HitSensor *); + bool sendMsgEnemyAttackFire(al::HitSensor *, al::HitSensor *, char const *); + bool sendMsgEnemyAttackNeedle(al::HitSensor *, al::HitSensor *); + bool sendMsgEnemyFloorTouch(al::HitSensor *, al::HitSensor *); + bool sendMsgEnemyItemGet(al::HitSensor *, al::HitSensor *); + bool sendMsgEnemyRouteDokanAttack(al::HitSensor *, al::HitSensor *); + bool sendMsgEnemyRouteDokanFire(al::HitSensor *, al::HitSensor *); + bool sendMsgEnemyTouch(al::HitSensor *, al::HitSensor *); + bool sendMsgEnemyUpperPunch(al::HitSensor *, al::HitSensor *); + bool sendMsgEnemyTrample(al::HitSensor *, al::HitSensor *); + bool sendMsgMapObjTrample(al::HitSensor *, al::HitSensor *); + bool sendMsgPressureDeath(al::HitSensor *, al::HitSensor *); + bool sendMsgNpcTouch(al::HitSensor *, al::HitSensor *); + bool sendMsgExplosion(al::HitSensor *, al::HitSensor *, al::ComboCounter *); + bool sendMsgExplosionCollide(al::HitSensor *, al::HitSensor *, al::ComboCounter *); + bool sendMsgPush(al::HitSensor *, al::HitSensor *); + bool sendMsgPushStrong(al::HitSensor *, al::HitSensor *); + bool sendMsgPushVeryStrong(al::HitSensor *, al::HitSensor *); + bool sendMsgHit(al::HitSensor *, al::HitSensor *); + bool sendMsgHitStrong(al::HitSensor *, al::HitSensor *); + bool sendMsgHitVeryStrong(al::HitSensor *, al::HitSensor *); + bool sendMsgKnockDown(al::HitSensor *, al::HitSensor *); + bool sendMsgMapPush(al::HitSensor *, al::HitSensor *); + bool sendMsgVanish(al::HitSensor *, al::HitSensor *); + bool sendMsgChangeAlpha(al::LiveActor *, float); + bool sendMsgShowModel(al::HitSensor *, al::HitSensor *); + bool sendMsgHideModel(al::HitSensor *, al::HitSensor *); + bool sendMsgRestart(al::HitSensor *, al::HitSensor *); + bool sendMsgNeedleBallAttack(al::HitSensor *, al::HitSensor *); + bool sendMsgPunpunFloorTouch(al::HitSensor *, al::HitSensor *); + bool sendMsgInvalidateFootPrint(al::HitSensor *, al::HitSensor *); + bool sendMsgKickKouraAttack(al::HitSensor *, al::HitSensor *, al::ComboCounter *); + bool sendMsgKickKouraAttackCollide(al::HitSensor *, al::HitSensor *, al::ComboCounter *); + bool sendMsgKickKouraGetItem(al::HitSensor *, al::HitSensor *); + bool sendMsgKickKouraReflect(al::HitSensor *, al::HitSensor *); + bool sendMsgKickKouraCollideNoReflect(al::HitSensor *, al::HitSensor *); + bool sendMsgKickKouraBreak(al::HitSensor *, al::HitSensor *); + bool sendMsgKickKouraBlow(al::HitSensor *, al::HitSensor *); + bool sendMsgKickStoneAttack(al::HitSensor *, al::HitSensor *); + bool sendMsgKickStoneAttackCollide(al::HitSensor *, al::HitSensor *); + bool sendMsgKickStoneAttackHold(al::HitSensor *, al::HitSensor *); + bool sendMsgKickStoneAttackReflect(al::HitSensor *, al::HitSensor *); + bool sendMsgKickStoneTrample(al::HitSensor *, al::HitSensor *); + bool sendMsgKillerAttack(al::HitSensor *, al::HitSensor *); + bool sendMsgLiftGeyser(al::HitSensor *, al::HitSensor *); + bool sendMsgWarpStart(al::HitSensor *, al::HitSensor *); + bool sendMsgWarpEnd(al::HitSensor *, al::HitSensor *); + bool sendMsgHoldCancel(al::HitSensor *, al::HitSensor *); + bool sendMsgHoleIn(al::HitSensor *, al::HitSensor *); + bool sendMsgJumpInhibit(al::HitSensor *, al::HitSensor *); + bool sendMsgGoalKill(al::HitSensor *, al::HitSensor *); + bool sendMsgGoal(al::HitSensor *, al::HitSensor *); + bool sendMsgBindStart(al::HitSensor *, al::HitSensor *); + bool sendMsgBindInit(al::HitSensor *, al::HitSensor *, uint); + bool sendMsgBindEnd(al::HitSensor *, al::HitSensor *); + bool sendMsgBindCancel(al::HitSensor *, al::HitSensor *); + bool sendMsgBindCancelByDemo(al::HitSensor *, al::HitSensor *); + bool sendMsgBindDamage(al::HitSensor *, al::HitSensor *); + bool sendMsgBindSteal(al::HitSensor *, al::HitSensor *); + bool sendMsgBindGiant(al::HitSensor *, al::HitSensor *); + bool sendMsgBallAttack(al::HitSensor *, al::HitSensor *, al::ComboCounter *); + bool sendMsgBallRouteDokanAttack(al::HitSensor *, al::HitSensor *, al::ComboCounter *); + bool sendMsgBallAttackHold(al::HitSensor *, al::HitSensor *); + bool sendMsgBallAttackDRCHold(al::HitSensor *, al::HitSensor *); + bool sendMsgBallAttackCollide(al::HitSensor *, al::HitSensor *); + bool sendMsgBallTrample(al::HitSensor *, al::HitSensor *, al::ComboCounter *); + bool sendMsgBallTrampleCollide(al::HitSensor *, al::HitSensor *); + bool sendMsgBallItemGet(al::HitSensor *, al::HitSensor *); + bool sendMsgFireBalCollide(al::HitSensor *, al::HitSensor *); + bool sendMsgFireBallFloorTouch(al::HitSensor *, al::HitSensor *); + bool sendMsgDokanBazookaAttack(al::HitSensor *, al::HitSensor *); + bool sendMsgRideAllPlayerItemGet(al::HitSensor *, al::HitSensor *); + bool sendMsgHideModel(al::LiveActor *); + bool sendMsgShowModel(al::LiveActor *); + bool sendMsgRestart(al::LiveActor *); + bool sendMsgCollisionImpulse(al::HitSensor *, al::HitSensor *, sead::Vector3f *, sead::Vector3f const &, float, sead::Vector3f const &, float); + bool sendMsgSwitchOn(al::LiveActor *); + bool sendMsgSwitchOnInit(al::LiveActor *); + bool sendMsgSwitchOffInit(al::LiveActor *); + bool sendMsgSwitchKillOn(al::LiveActor *); + bool sendMsgSwitchKillOnInit(al::LiveActor *); + bool sendMsgSwitchKillOffInit(al::LiveActor *); + bool sendMsgPlayerFloorTouchToColliderGround(al::LiveActor *, al::HitSensor *); + bool sendMsgPlayerUpperPunchToColliderCeiling(al::LiveActor *, al::HitSensor *); + bool sendMsgEnemyFloorTouchToColliderGround(al::LiveActor *, al::HitSensor *); + bool sendMsgEnemyUpperPunchToColliderCeiling(al::LiveActor *, al::HitSensor *); + bool sendMsgAskSafetyPoint(al::HitSensor *, al::HitSensor *, sead::Vector3f **); + bool sendMsgAskSafetyPointToColliderGround(al::LiveActor *, al::HitSensor *, sead::Vector3f **); + bool sendMsgTouchAssist(al::HitSensor *, al::HitSensor *); + bool sendMsgTouchAssistTrig(al::HitSensor *, al::HitSensor *); + bool sendMsgTouchStroke(al::HitSensor *, al::HitSensor *); + bool sendMsgScreenPointInvalidCollisionParts(al::HitSensor *, al::HitSensor *); + bool sendMsgBlockUpperPunch(al::HitSensor *, al::HitSensor *, al::ComboCounter *); + bool sendMsgBlockLowerPunch(al::HitSensor *, al::HitSensor *, al::ComboCounter *); + bool sendMsgBlockItemGet(al::HitSensor *, al::HitSensor *); + bool sendMsgKillerItemGet(al::HitSensor *, al::HitSensor *); + bool sendMsgPlayerKouraAttack(al::HitSensor *, al::HitSensor *, al::ComboCounter *); + bool sendMsgLightFlash(al::HitSensor *, al::HitSensor *); + bool sendMsgForceAbyss(al::HitSensor *, al::HitSensor *); + bool sendMsgIsNerveSupportFreeze(al::HitSensor *, al::HitSensor *); + bool sendMsgOnSyncSupportFreeze(al::HitSensor *, al::HitSensor *); + bool sendMsgOffSyncSupportFreeze(al::HitSensor *, al::HitSensor *); + bool sendMsgSwordAttackHighLeft(al::HitSensor *, al::HitSensor *); + bool sendMsgSwordAttackLowLeft(al::HitSensor *, al::HitSensor *); + bool sendMsgSwordAttackHighRight(al::HitSensor *, al::HitSensor *); + bool sendMsgSwordAttackLowRight(al::HitSensor *, al::HitSensor *); + bool sendMsgSwordAttackJumpUnder(al::HitSensor *, al::HitSensor *); + bool sendMsgSwordBeamAttack(al::HitSensor *, al::HitSensor *); + bool sendMsgSwordBeamReflectAttack(al::HitSensor *, al::HitSensor *); + bool sendMsgShieldGuard(al::HitSensor *, al::HitSensor *); + bool sendMsgEnemyAttackKnockDown(al::HitSensor *, al::HitSensor *); + bool sendMsgAskMultiPlayerEnemy(al::HitSensor *, al::HitSensor *); + bool sendMsgItemGettable(al::HitSensor *, al::HitSensor *); + bool sendMsgKikkiThrow(al::HitSensor *, al::HitSensor *); + bool sendMsgIsKikkiThrowTarget(al::HitSensor *, al::HitSensor *); + bool sendMsgPlayerCloudGet(al::HitSensor *, al::HitSensor *); + bool sendMsgAutoJump(al::HitSensor *, al::HitSensor *); + bool sendMsgPlayerTouchShadow(al::HitSensor *, al::HitSensor *); + bool sendMsgPlayerPullOutShadow(al::HitSensor *, al::HitSensor *); + bool sendMsgPlayerAttackShadow(al::HitSensor *, al::HitSensor *); + bool sendMsgPlayerAttackShadowStrong(al::HitSensor *, al::HitSensor *); + bool sendMsgPlayerAttackChangePos(al::HitSensor *, al::HitSensor *, sead::Vector3f *); + bool sendMsgAtmosOnlineLight(al::HitSensor *, al::HitSensor *); + bool sendMsgLightBurn(al::HitSensor *, al::HitSensor *); + bool sendMsgMoonLightBurn(al::HitSensor *, al::HitSensor *); + bool sendMsgString(al::HitSensor *, al::HitSensor *, char const *); + bool sendMsgStringV4fPtr(al::HitSensor *, al::HitSensor *, char const *, sead::Vector4f *); + bool sendMsgStringV4fSensorPtr(al::HitSensor *, al::HitSensor *, char const *, sead::Vector4f *); + bool sendMsgStringVoidPtr(al::HitSensor *, al::HitSensor *, char const *, void *); + bool sendMsgEnemyAttackForCrossoverSensor(al::HitSensor *, al::HitSensor *); + bool sendMsgEnemyAttackForCrossoverCylinderSensor(al::HitSensor *, al::HitSensor *, sead::Vector3f const &, sead::Vector3f const &, float); + bool sendMsgPushAndKillVelocityToTarget(al::LiveActor *, al::HitSensor *, al::HitSensor *); + bool sendMsgPushAndKillVelocityToTargetH(al::LiveActor *, al::HitSensor *, al::HitSensor *); + bool sendMsgCollidePush(al::HitSensor *, al::HitSensor *, sead::Vector3f const &); + bool sendMsgScreenPointTarget(al::SensorMsg const &, al::ScreenPointer *, al::ScreenPointTarget *); + +} // namespace al diff --git a/include/cameras/CameraVerticalAbsorber2DGalaxy.h b/include/cameras/CameraVerticalAbsorber2DGalaxy.h new file mode 100644 index 0000000..8c08172 --- /dev/null +++ b/include/cameras/CameraVerticalAbsorber2DGalaxy.h @@ -0,0 +1,38 @@ +#pragma once + +#include "al/camera/CameraPoser.h" +#include "al/nerve/NerveExecutor.h" +#include "math/seadVector.h" + +namespace al { +class CameraVerticalAbsorber2DGalaxy : public al::NerveExecutor { +public: + CameraVerticalAbsorber2DGalaxy(void); + + void start(al::CameraPoser const*); + void update(al::CameraPoser const*); + void applyLimit(sead::Vector3f* output); + + void exeNone(void); + void exeGround(void); + void exeLimit(void); + void exeLimitOver(void); + void exeLimitAfter(void); + + sead::Vector3f mTargetTrans; + sead::Vector3f mTargetGravity; + sead::Vector3f mTargetUp; + bool mIsTargetCollideGround; + sead::Vector3f mPrevTargetTrans; + sead::Vector3f mPrevTargetGravity; + float unkFloat; + sead::Vector3f mLimit; + sead::Vector3f unkVec; + float unkFloat2; + +}; + +static_assert(sizeof(CameraVerticalAbsorber2DGalaxy) == 0x70, ""); + + +} \ No newline at end of file diff --git a/include/rs/util/SensorUtil.h b/include/rs/util/SensorUtil.h index 959b520..12e4cc2 100644 --- a/include/rs/util/SensorUtil.h +++ b/include/rs/util/SensorUtil.h @@ -5,6 +5,8 @@ #include "al/sensor/SensorHitGroup.h" #include "al/LiveActor/LiveActor.h" // for SensorMsg +#include "game/Interfaces/IUsePlayerHack.h" +#include "game/Player/PlayerHackKeeper.h" #include @@ -880,7 +882,7 @@ bool sendMsgGolemStampPress(al::HitSensor*, al::HitSensor*); // bool sendMsgSwitchOnWithSaveRequest(al::LiveActor*, SaveObjInfo*); bool sendMsgWanwanReboundAttackToCollided(al::LiveActor const*, al::HitSensor*); bool sendMsgWanwanBlockAttackToCollided(al::LiveActor const*, al::HitSensor*); -bool sendMsgDigPointSmell(al::HitSensor*, al::HitSensor*, DigPoint*); +bool sendMsgDigPointSmell(al::HitSensor*, al::HitSensor*, struct DigPoint*); bool sendMsgMofumofuBodyChainExplode(al::HitSensor*, al::HitSensor*, int); bool sendMsgMoonBasementRockThroughCollision(al::HitSensor*, al::HitSensor*, bool); bool sendMsgFishingWait(al::HitSensor*, al::HitSensor*, al::HitSensor*); @@ -1006,7 +1008,7 @@ bool sendMsgBossMagmaDeadDemoStart(al::HitSensor*, al::HitSensor*); bool sendMsgBossMagmaDeadDemoEnd(al::HitSensor*, al::HitSensor*, sead::Vector3 const&); bool sendMsgBossMagmaResetPos(al::HitSensor*, al::HitSensor*, sead::Vector3 const&); bool sendMsgBossMagmaQueryToBubble(al::HitSensor*, al::HitSensor*); -bool sendMsgCheckFishingTarget(al::HitSensor*, al::HitSensor*, FishingFish const*); +bool sendMsgCheckFishingTarget(al::HitSensor*, al::HitSensor*, struct FishingFish const*); bool sendMsgPushToPlayerAndKillVelocityToTarget(al::LiveActor*, al::HitSensor*, al::HitSensor*); bool sendMsgPushToPlayerAndKillVelocityToTargetH(al::LiveActor*, al::HitSensor*, al::HitSensor*); bool sendMsgInitCapTarget(al::HitSensor*, al::HitSensor*, CapTargetInfo const**); diff --git a/romfs/ObjectData/PuppetActor.szs b/romfs/ObjectData/PuppetActor.szs new file mode 100644 index 0000000000000000000000000000000000000000..75fd89ff8d51f1dd7cd6b5149b42b370cd96b684 GIT binary patch literal 3588 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 L$6e#k&@TTU^jqYl literal 0 HcmV?d00001 diff --git a/source/puppets/PuppetActor.cpp b/source/puppets/PuppetActor.cpp index 20b4b5d..cf1be28 100644 --- a/source/puppets/PuppetActor.cpp +++ b/source/puppets/PuppetActor.cpp @@ -1,3 +1,6 @@ +#include +#include "al/util/SensorUtil.h" +#include "rs/util/SensorUtil.h" #include "server/Client.hpp" #include "al/LiveActor/LiveActor.h" #include "al/layout/BalloonMessage.h" @@ -31,7 +34,7 @@ void PuppetActor::init(al::ActorInitInfo const &initInfo) { mPuppetCap->init(initInfo); - al::initActorWithArchiveName(this, initInfo, "PlayerActorHakoniwa", nullptr); + al::initActorWithArchiveName(this, initInfo, "PuppetActor", nullptr); const char *bodyName = "Mario"; const char *capName = "Mario"; @@ -243,6 +246,26 @@ void PuppetActor::makeActorDead() { } } +void PuppetActor::attackSensor(al::HitSensor* source, al::HitSensor* target) { + + if (!al::sendMsgPush(target, source)) { + rs::sendMsgPushToPlayer(target, source); + } + +} + +bool PuppetActor::receiveMsg(const al::SensorMsg* msg, al::HitSensor* source, + al::HitSensor* target) { + + if ((al::isMsgPlayerTrampleReflect(msg) || rs::isMsgPlayerAndCapObjHipDropReflectAll(msg)) && al::isSensorName(target, "Body")) + { + rs::requestHitReactionToAttacker(msg, target, source); + return true; + } + + return false; +} + // this is more or less how nintendo does it with marios demo puppet void PuppetActor::startAction(const char *actName) { diff --git a/source/puppets/PuppetMain.cpp b/source/puppets/PuppetMain.cpp index d3de1c9..2f60af4 100644 --- a/source/puppets/PuppetMain.cpp +++ b/source/puppets/PuppetMain.cpp @@ -66,7 +66,7 @@ void initPuppetActors(al::Scene *scene, al::ActorInitInfo const &rootInfo, char } // create a debug puppet for testing purposes - // createPuppetActorFromFactory(rootInfo, playerPlacement, true); + createPuppetActorFromFactory(rootInfo, playerPlacement, true); } al::initPlacementObjectMap(scene, rootInfo, listName); // run init for ObjectList after we init our puppet actors diff --git a/source/server/Client.cpp b/source/server/Client.cpp index adfbff8..581b657 100644 --- a/source/server/Client.cpp +++ b/source/server/Client.cpp @@ -3,6 +3,7 @@ #include #include "al/actor/ActorSceneInfo.h" #include "al/layout/WindowConfirmWait.h" +#include "al/util/ControllerUtil.h" #include "al/util/LiveActorUtil.h" #include "algorithms/PlayerAnims.h" #include "game/GameData/GameDataFunction.h" @@ -219,7 +220,9 @@ bool Client::startConnection() { bool isNeedSave = false; - if (mServerIP.isEmpty()) { + bool isOverride = al::isPadHoldZL(-1); + + if (mServerIP.isEmpty() || isOverride) { mKeyboard->setHeaderText(u"Save File does not contain an IP!"); mKeyboard->setSubText(u"Please set a Server IP Below."); mServerIP = "0.0.0.0"; @@ -227,7 +230,7 @@ bool Client::startConnection() { isNeedSave = true; } - if (!mServerPort) { + if (!mServerPort || isOverride) { mKeyboard->setHeaderText(u"Save File does not contain a port!"); mKeyboard->setSubText(u"Please set a Server Port Below."); mServerPort = 1027; @@ -585,7 +588,7 @@ void Client::sendHackCapInfPacket(const HackCap* hackCap) { packet.mUserID = sInstance->mUserID; packet.capPos = al::getTrans(hackCap); - packet.isCapVisible = hackCap->isFlying(); + packet.isCapVisible = isFlying; packet.capQuat.x = hackCap->mJointKeeper->mJointRot.x; packet.capQuat.y = hackCap->mJointKeeper->mJointRot.y; @@ -1016,7 +1019,7 @@ void Client::disconnectPlayer(PlayerDC *packet) { PuppetInfo* curInfo = findPuppetInfo(packet->mUserID, false); - if (!curInfo) { + if (!curInfo || !curInfo->isConnected) { return; }