Enemy: Implement Bubble (#744)

This commit is contained in:
Narr the Reg 2026-02-07 14:34:57 -06:00 committed by GitHub
parent 83ecf1c0ec
commit d3e9a086af
No known key found for this signature in database
GPG key ID: B5690EEEBB952194
4 changed files with 2744 additions and 139 deletions

View file

@ -25800,580 +25800,580 @@ Enemy/Bubble.o:
- offset: 0x0df7ec
size: 516
label: _ZN6BubbleC2EPKc
status: NotDecompiled
status: Matching
- offset: 0x0df9f0
size: 528
label: _ZN6BubbleC1EPKc
status: NotDecompiled
status: Matching
- offset: 0x0dfc00
size: 1640
label: _ZN6Bubble4initERKN2al13ActorInitInfoE
status: NotDecompiled
status: Matching
- offset: 0x0e0268
size: 508
label: _ZN6Bubble18recalcClippingInfoEv
status: NotDecompiled
status: Matching
- offset: 0x0e0464
size: 108
label: _ZN6Bubble5startEv
status: NotDecompiled
status: Matching
- offset: 0x0e04d0
size: 16
label: _ZN6Bubble7killAllEv
status: NotDecompiled
status: Matching
- offset: 0x0e04e0
size: 20
label: _ZNK6Bubble16isIgnoreTriangleERKN2al8TriangleE
status: NotDecompiled
status: Matching
- offset: 0x0e04f4
size: 72
label: _ZN6Bubble18initAfterPlacementEv
status: NotDecompiled
status: Matching
- offset: 0x0e053c
size: 396
label: _ZN6Bubble14checkEffectPosEv
status: NotDecompiled
status: Matching
- offset: 0x0e06c8
size: 56
label: _ZNK6Bubble27isValidCollisionOrWaveCheckEv
status: NotDecompiled
status: Matching
- offset: 0x0e0700
size: 160
label: _ZN6Bubble6appearEv
status: NotDecompiled
status: Matching
- offset: 0x0e07a0
size: 1816
label: _ZN6Bubble7controlEv
status: NotDecompiled
status: Matching
- offset: 0x0e0eb8
size: 296
label: _ZNK6Bubble6isHackEv
status: NotDecompiled
status: Matching
- offset: 0x0e0fe0
size: 180
label: _ZN6Bubble6reviveEv
status: NotDecompiled
status: Matching
- offset: 0x0e1094
size: 564
label: _ZN6Bubble14updateLavaWaveEv
status: NotDecompiled
status: Matching
- offset: 0x0e12c8
size: 172
label: _ZN6Bubble20updateScrollAnimRateEv
status: NotDecompiled
status: Matching
- offset: 0x0e1374
size: 60
label: _ZNK6Bubble10isOnGroundEv
status: NotDecompiled
status: Matching
- offset: 0x0e13b0
size: 208
label: _ZN6Bubble8calcAnimEv
status: NotDecompiled
status: Matching
- offset: 0x0e1480
size: 364
label: _ZN6Bubble14updateColliderEv
status: NotDecompiled
status: Matching
- offset: 0x0e15ec
size: 1048
label: _ZN6Bubble12attackSensorEPN2al9HitSensorES2_
status: NotDecompiled
status: Matching
- offset: 0x0e1a04
size: 2592
label: _ZN6Bubble10receiveMsgEPKN2al9SensorMsgEPNS0_9HitSensorES5_
status: NotDecompiled
status: Matching
- offset: 0x0e2424
size: 216
label: _ZN6Bubble9setupHackEv
status: NotDecompiled
status: Matching
- offset: 0x0e24fc
size: 224
label: _ZNK6Bubble38isCurrentNerveEnableLockOnAndStartHackEv
status: NotDecompiled
status: Matching
- offset: 0x0e25dc
size: 48
label: _ZN6Bubble16offGroupClippingEv
status: NotDecompiled
status: Matching
- offset: 0x0e260c
size: 104
label: _ZN6Bubble14startHackLocalEPN2al9HitSensorES2_
status: NotDecompiled
status: Matching
- offset: 0x0e2674
size: 100
label: _ZNK6Bubble19isInvalidHackEscapeEv
status: NotDecompiled
status: Matching
- offset: 0x0e26d8
size: 56
label: _ZN6Bubble14prepareEndHackEv
status: NotDecompiled
status: Matching
- offset: 0x0e2710
size: 152
label: _ZN6Bubble15endHackByCancelEv
status: NotDecompiled
status: Matching
- offset: 0x0e27a8
size: 72
label: _ZN6Bubble12forceEndHackEv
status: NotDecompiled
status: Matching
- offset: 0x0e27f0
size: 4
label: _ZN6Bubble10exeStandByEv
status: NotDecompiled
status: Matching
- offset: 0x0e27f4
size: 68
label: _ZN6Bubble8exeDelayEv
status: NotDecompiled
status: Matching
- offset: 0x0e2838
size: 244
label: _ZN6Bubble11exeRailMoveEv
status: NotDecompiled
status: Matching
- offset: 0x0e292c
size: 60
label: _ZN6Bubble15updatePosOnWaveEv
status: NotDecompiled
status: Matching
- offset: 0x0e2968
size: 472
label: _ZN6Bubble8exeReadyEv
status: NotDecompiled
status: Matching
- offset: 0x0e2b40
size: 324
label: _ZN6Bubble30updateVelocityIfValidCollisionEv
status: NotDecompiled
status: Matching
- offset: 0x0e2c84
size: 28
label: _ZNK6Bubble14isOnDamageFireEv
status: NotDecompiled
status: Matching
- offset: 0x0e2ca0
size: 600
label: _ZN6Bubble5exeUpEv
status: NotDecompiled
status: Matching
- offset: 0x0e2ef8
size: 244
label: _ZN6Bubble21tryStartHitReactionUpEv
status: NotDecompiled
status: Matching
- offset: 0x0e2fec
size: 88
label: _ZN6Bubble22updateShadowMaskLengthEv
status: NotDecompiled
status: Matching
- offset: 0x0e3044
size: 76
label: _ZN6Bubble7exeTurnEv
status: NotDecompiled
status: Matching
- offset: 0x0e3090
size: 584
label: _ZN6Bubble7exeDownEv
status: NotDecompiled
status: Matching
- offset: 0x0e32d8
size: 244
label: _ZN6Bubble23tryStartHitReactionDownEv
status: NotDecompiled
status: Matching
- offset: 0x0e33cc
size: 332
label: _ZN6Bubble9shiftSinkEv
status: NotDecompiled
status: Matching
- offset: 0x0e3518
size: 272
label: _ZN6Bubble7exeSinkEv
status: NotDecompiled
status: Matching
- offset: 0x0e3628
size: 368
label: _ZN6Bubble6headUpEv
status: NotDecompiled
status: Matching
- offset: 0x0e3798
size: 436
label: _ZN6Bubble7exeWaitEv
status: NotDecompiled
status: Matching
- offset: 0x0e394c
size: 84
label: _ZN6Bubble16shiftReadyOrMoveEv
status: NotDecompiled
status: Matching
- offset: 0x0e39a0
size: 52
label: _ZN6Bubble6exeDieEv
status: NotDecompiled
status: Matching
- offset: 0x0e39d4
size: 4
label: _ZN6Bubble11exeWaitHackEv
status: NotDecompiled
status: Matching
- offset: 0x0e39d8
size: 300
label: _ZN6Bubble16exeWaitHackStartEv
status: NotDecompiled
status: Matching
- offset: 0x0e3b04
size: 8
label: _ZN6Bubble16endWaitHackStartEv
status: NotDecompiled
status: Matching
- offset: 0x0e3b0c
size: 332
label: _ZN6Bubble15exeWaitHackFallEv
status: NotDecompiled
status: Matching
- offset: 0x0e3c58
size: 160
label: _ZN6Bubble25trySendMsgStartInSaucePanEv
status: NotDecompiled
status: Matching
- offset: 0x0e3cf8
size: 100
label: _ZN6Bubble11exeHackFallEv
status: NotDecompiled
status: Matching
- offset: 0x0e3d5c
size: 176
label: _ZN6Bubble26tryHitReactionThroughFenceEv
status: NotDecompiled
status: Matching
- offset: 0x0e3e0c
size: 660
label: _ZN6Bubble12tryShiftLandEv
status: NotDecompiled
status: Matching
- offset: 0x0e40a0
size: 772
label: _ZN6Bubble11exeHackMoveEv
status: NotDecompiled
status: Matching
- offset: 0x0e43a4
size: 24
label: _ZNK6Bubble16isHoldHackActionEv
status: NotDecompiled
status: Matching
- offset: 0x0e43bc
size: 600
label: _ZN6Bubble16tryBoundMoveWallEv
status: NotDecompiled
status: Matching
- offset: 0x0e4614
size: 1348
label: _ZN6Bubble18updateHackOnGroundEv
status: NotDecompiled
status: Matching
- offset: 0x0e4b58
size: 1652
label: _ZN6Bubble19constrainLavaDomainEv
status: NotDecompiled
status: Matching
- offset: 0x0e51cc
size: 64
label: _ZN6Bubble12tryShiftFallEv
status: NotDecompiled
status: Matching
- offset: 0x0e520c
size: 24
label: _ZNK6Bubble18isTriggerHackSwingEv
status: NotDecompiled
status: Matching
- offset: 0x0e5224
size: 536
label: _ZN6Bubble13faceToMoveVecEv
status: NotDecompiled
status: Matching
- offset: 0x0e543c
size: 24
label: _ZNK6Bubble17isTriggerHackJumpEv
status: NotDecompiled
status: Matching
- offset: 0x0e5454
size: 8
label: _ZN6Bubble11endHackMoveEv
status: NotDecompiled
status: Matching
- offset: 0x0e545c
size: 2720
label: _ZN6Bubble11exeHackJumpEv
status: NotDecompiled
status: NonMatchingMajor
- offset: 0x0e5efc
size: 408
label: _ZN6Bubble26revertTargetQuatInHackJumpEPN4sead4QuatIfEES3_
status: NotDecompiled
status: Matching
- offset: 0x0e6094
size: 36
label: _ZNK6Bubble17calcHackerMoveVecEPN4sead7Vector3IfEERKS2_
status: NotDecompiled
status: Matching
- offset: 0x0e60b8
size: 916
label: _ZN6Bubble25makeDisplayQuatInHackJumpERKN4sead4QuatIfEES4_S4_b
status: NotDecompiled
status: Matching
- offset: 0x0e644c
size: 116
label: _ZNK6Bubble21isDropAttackCollisionEv
status: NotDecompiled
status: Matching
- offset: 0x0e64c0
size: 104
label: _ZNK6Bubble21isRiseAttackCollisionEv
status: NotDecompiled
status: Matching
- offset: 0x0e6528
size: 24
label: _ZNK6Bubble14isHoldHackJumpEv
status: NotDecompiled
status: Matching
- offset: 0x0e6540
size: 360
label: _ZN6Bubble22tryShiftContinuousJumpEv
status: NotDecompiled
status: Matching
- offset: 0x0e66a8
size: 8
label: _ZN6Bubble11endHackJumpEv
status: NotDecompiled
status: Matching
- offset: 0x0e66b0
size: 484
label: _ZN6Bubble11exeHackLandEv
status: NotDecompiled
status: Matching
- offset: 0x0e6894
size: 40
label: _ZNK6Bubble17calcHackerMoveDirEPN4sead7Vector3IfEERKS2_
status: NotDecompiled
status: Matching
- offset: 0x0e68bc
size: 676
label: _ZN6Bubble17exeHackInLauncherEv
status: NotDecompiled
status: Matching
- offset: 0x0e6b60
size: 76
label: _ZN6Bubble17endHackInLauncherEv
status: NotDecompiled
status: Matching
- offset: 0x0e6bac
size: 1060
label: _ZN6Bubble15exeHackResetPosEv
status: NotDecompiled
status: Matching
- offset: 0x0e6fd0
size: 4
label: _ZN6Bubble11exeHackDemoEv
status: NotDecompiled
status: Matching
- offset: 0x0e6fd4
size: 192
label: _ZN6Bubble9exeReviveEv
status: NotDecompiled
status: Matching
- offset: 0x0e7094
size: 68
label: _ZNK6Bubble15isWaitingLaunchEv
status: NotDecompiled
status: Matching
- offset: 0x0e70d8
size: 116
label: _ZN6Bubble6launchERKN4sead7Vector3IfEEfPN2al12CameraTicketE
status: NotDecompiled
status: Matching
- offset: 0x0e714c
size: 272
label: _ZN6Bubble12launchCancelERKN4sead7Vector3IfEE
status: NotDecompiled
status: Matching
- offset: 0x0e725c
size: 8
label: _ZN6Bubble11showHackCapEv
status: NotDecompiled
status: Matching
- offset: 0x0e7264
size: 8
label: _ZN6Bubble11hideHackCapEv
status: NotDecompiled
status: Matching
- offset: 0x0e726c
size: 88
label: _ZNK6Bubble13isTriggerJumpEv
status: NotDecompiled
status: Matching
- offset: 0x0e72c4
size: 32
label: _ZNK6Bubble15isTriggerActionEv
status: NotDecompiled
status: Matching
- offset: 0x0e72e4
size: 24
label: _ZNK6Bubble19isTriggerHackActionEv
status: NotDecompiled
status: Matching
- offset: 0x0e72fc
size: 16
label: _ZNK6Bubble15isTriggerCancelEv
status: NotDecompiled
status: Matching
- offset: 0x0e730c
size: 112
label: _ZN6Bubble13startJumpAnimEf
status: NotDecompiled
status: Matching
- offset: 0x0e737c
size: 144
label: _ZN6Bubble14resetAndAppearERKN4sead7Vector3IfEERKNS0_4QuatIfEEf
status: NotDecompiled
status: Matching
- offset: 0x0e740c
size: 572
label: _ZN6Bubble13endHackCommonEv
status: NotDecompiled
status: Matching
- offset: 0x0e7648
size: 216
label: _ZNK6Bubble13calcLaunchPosEPN4sead7Vector3IfEERKS2_ff
status: NotDecompiled
status: Matching
- offset: 0x0e7720
size: 52
label: _ZN6Bubble15onGroupClippingEv
status: NotDecompiled
status: Matching
- offset: 0x0e7754
size: 60
label: _ZNK6Bubble20isOnGroundNoVelocityEv
status: NotDecompiled
status: Matching
- offset: 0x0e7790
size: 352
label: _ZN6Bubble24updateCollisionPartsMoveEv
status: NotDecompiled
status: Matching
- offset: 0x0e78f0
size: 1412
label: _ZN6Bubble10accelStickEv
status: NotDecompiled
status: NonMatchingMajor
- offset: 0x0e7e74
size: 48
label: _ZN6Bubble22addHackActorAccelStickEPN4sead7Vector3IfEEfRKS2_
status: NotDecompiled
status: Matching
- offset: 0x0e7ea4
size: 128
label: _ZNK6Bubble19isGroundOverTheWaveEbRKN4sead7Vector3IfEE
status: NotDecompiled
status: Matching
- offset: 0x0e7f24
size: 136
label: _ZNK6Bubble23isEnableSnapWaveSurfaceEv
status: NotDecompiled
status: Matching
- offset: 0x0e7fac
size: 4
label: _ZNK12_GLOBAL__N_116BubbleNrvStandBy7executeEPN2al11NerveKeeperE
status: NotDecompiled
status: Matching
guess: true
- offset: 0x0e7fb0
size: 8
label: _ZNK12_GLOBAL__N_123BubbleNrvHackInLauncher7executeEPN2al11NerveKeeperE
status: NotDecompiled
status: Matching
guess: true
- offset: 0x0e7fb8
size: 76
label: _ZNK12_GLOBAL__N_123BubbleNrvHackInLauncher12executeOnEndEPN2al11NerveKeeperE
status: NotDecompiled
status: Matching
guess: true
- offset: 0x0e8004
size: 8
label: _ZNK12_GLOBAL__N_115BubbleNrvRevive7executeEPN2al11NerveKeeperE
status: NotDecompiled
status: Matching
guess: true
- offset: 0x0e800c
size: 8
label: _ZNK12_GLOBAL__N_121BubbleNrvWaitHackFall7executeEPN2al11NerveKeeperE
status: NotDecompiled
status: Matching
guess: true
- offset: 0x0e8014
size: 72
label: _ZNK12_GLOBAL__N_114BubbleNrvDelay7executeEPN2al11NerveKeeperE
status: NotDecompiled
status: Matching
guess: true
- offset: 0x0e805c
size: 8
label: _ZNK12_GLOBAL__N_111BubbleNrvUp7executeEPN2al11NerveKeeperE
status: NotDecompiled
status: Matching
guess: true
- offset: 0x0e8064
size: 80
label: _ZNK12_GLOBAL__N_113BubbleNrvTurn7executeEPN2al11NerveKeeperE
status: NotDecompiled
status: Matching
guess: true
- offset: 0x0e80b4
size: 8
label: _ZNK12_GLOBAL__N_113BubbleNrvDown7executeEPN2al11NerveKeeperE
status: NotDecompiled
status: Matching
guess: true
- offset: 0x0e80bc
size: 56
label: _ZNK12_GLOBAL__N_112BubbleNrvDie7executeEPN2al11NerveKeeperE
status: NotDecompiled
status: Matching
guess: true
- offset: 0x0e80f4
size: 8
label: _ZNK12_GLOBAL__N_117BubbleNrvHackJump7executeEPN2al11NerveKeeperE
status: NotDecompiled
status: Matching
guess: true
- offset: 0x0e80fc
size: 12
label: _ZNK12_GLOBAL__N_117BubbleNrvHackJump12executeOnEndEPN2al11NerveKeeperE
status: NotDecompiled
status: Matching
guess: true
- offset: 0x0e8108
size: 8
label: _ZNK12_GLOBAL__N_121BubbleNrvHackJumpHigh7executeEPN2al11NerveKeeperE
status: NotDecompiled
status: Matching
guess: true
- offset: 0x0e8110
size: 12
label: _ZNK12_GLOBAL__N_121BubbleNrvHackJumpHigh12executeOnEndEPN2al11NerveKeeperE
status: NotDecompiled
status: Matching
guess: true
- offset: 0x0e811c
size: 8
label: _ZNK12_GLOBAL__N_123BubbleNrvHackCancelJump7executeEPN2al11NerveKeeperE
status: NotDecompiled
status: Matching
guess: true
- offset: 0x0e8124
size: 12
label: _ZNK12_GLOBAL__N_123BubbleNrvHackCancelJump12executeOnEndEPN2al11NerveKeeperE
status: NotDecompiled
status: Matching
guess: true
- offset: 0x0e8130
size: 104
label: _ZNK12_GLOBAL__N_117BubbleNrvHackFall7executeEPN2al11NerveKeeperE
status: NotDecompiled
status: Matching
guess: true
- offset: 0x0e8198
size: 8
label: _ZNK12_GLOBAL__N_121BubbleNrvHackResetPos7executeEPN2al11NerveKeeperE
status: NotDecompiled
status: Matching
guess: true
- offset: 0x0e81a0
size: 4
label: _ZNK12_GLOBAL__N_117BubbleNrvHackDemo7executeEPN2al11NerveKeeperE
status: NotDecompiled
status: Matching
guess: true
- offset: 0x0e81a4
size: 8
label: _ZNK12_GLOBAL__N_117BubbleNrvHackMove7executeEPN2al11NerveKeeperE
status: NotDecompiled
status: Matching
guess: true
- offset: 0x0e81ac
size: 12
label: _ZNK12_GLOBAL__N_117BubbleNrvHackMove12executeOnEndEPN2al11NerveKeeperE
status: NotDecompiled
status: Matching
guess: true
- offset: 0x0e81b8
size: 8
label: _ZNK12_GLOBAL__N_117BubbleNrvWaitHack7executeEPN2al11NerveKeeperE
status: NotDecompiled
status: Matching
guess: true
- offset: 0x0e81c0
size: 8
label: _ZNK12_GLOBAL__N_122BubbleNrvWaitHackStart7executeEPN2al11NerveKeeperE
status: NotDecompiled
status: Matching
guess: true
- offset: 0x0e81c8
size: 12
label: _ZNK12_GLOBAL__N_122BubbleNrvWaitHackStart12executeOnEndEPN2al11NerveKeeperE
status: NotDecompiled
status: Matching
guess: true
- offset: 0x0e81d4
size: 8
label: _ZNK12_GLOBAL__N_114BubbleNrvReady7executeEPN2al11NerveKeeperE
status: NotDecompiled
status: Matching
guess: true
- offset: 0x0e81dc
size: 8
label: _ZNK12_GLOBAL__N_113BubbleNrvWait7executeEPN2al11NerveKeeperE
status: NotDecompiled
status: Matching
guess: true
- offset: 0x0e81e4
size: 8
label: _ZNK12_GLOBAL__N_113BubbleNrvSink7executeEPN2al11NerveKeeperE
status: NotDecompiled
status: Matching
guess: true
- offset: 0x0e81ec
size: 8
label: _ZNK12_GLOBAL__N_117BubbleNrvHackLand7executeEPN2al11NerveKeeperE
status: NotDecompiled
status: Matching
guess: true
- offset: 0x0e81f4
size: 8
label: _ZNK12_GLOBAL__N_117BubbleNrvRailMove7executeEPN2al11NerveKeeperE
status: NotDecompiled
status: Matching
guess: true
- offset: 0x0e81fc
size: 28
label: _ZNK2al10FunctorV0MIP6BubbleMS1_FvvEEclEv
status: NotDecompiled
status: Matching
lazy: true
- offset: 0x0e8218
size: 76
label: _ZNK2al10FunctorV0MIP6BubbleMS1_FvvEE5cloneEv
status: NotDecompiled
status: Matching
lazy: true
- offset: 0x0e8264
size: 4
label: _ZN2al10FunctorV0MIP6BubbleMS1_FvvEED0Ev
status: NotDecompiled
status: Matching
lazy: true
- offset: 0x0e8268
size: 28
label: _ZNK2al23TriangleFilterDelegatorI6BubbleE17isInvalidTriangleERKNS_8TriangleE
status: NotDecompiled
status: Matching
lazy: true
- offset: 0x0e8284
size: 176
label: ''
status: NotDecompiled
label: _GLOBAL__sub_I_Bubble.cpp
status: Matching
Enemy/Bubble2D.o:
'.text':
- offset: 0x0e8334
@ -133715,7 +133715,7 @@ Scene/ProjectActorFactory.o:
- offset: 0x4b68b0
size: 52
label: _ZN2al19createActorFunctionI6BubbleEEPNS_9LiveActorEPKc
status: NotDecompiled
status: Matching
lazy: true
- offset: 0x4b68e4
size: 52

2402
src/Enemy/Bubble.cpp Normal file

File diff suppressed because it is too large Load diff

202
src/Enemy/Bubble.h Normal file
View file

@ -0,0 +1,202 @@
#pragma once
#include <basis/seadTypes.h>
#include <math/seadMatrix.h>
#include <math/seadQuat.h>
#include <math/seadVector.h>
#include "Library/LiveActor/LiveActor.h"
namespace al {
struct ActorInitInfo;
class ActorMatrixCameraTarget;
class AnimScaleController;
class CameraTicket;
class CollisionPartsFilterSpecialPurpose;
class HitSensor;
class JointSpringControllerHolder;
class SensorMsg;
class Triangle;
} // namespace al
class CapTargetInfo;
class IUsePlayerHack;
class DisregardReceiver;
class PlayerHackStartShaderCtrl;
class BubbleStateInLauncher;
class Bubble : public al::LiveActor {
public:
Bubble(const char* name);
void init(const al::ActorInitInfo& info) override;
void initAfterPlacement() override;
void attackSensor(al::HitSensor* self, al::HitSensor* other) override;
bool receiveMsg(const al::SensorMsg* message, al::HitSensor* other,
al::HitSensor* self) override;
void control() override;
void updateCollider() override;
void appear() override;
void calcAnim() override;
void recalcClippingInfo();
void start();
void killAll();
bool isIgnoreTriangle(const al::Triangle& triangle) const;
void checkEffectPos();
bool isValidCollisionOrWaveCheck() const;
bool isHack() const;
void revive();
void updateLavaWave();
void updateScrollAnimRate();
bool isOnGround() const;
void setupHack();
bool isCurrentNerveEnableLockOnAndStartHack() const;
void offGroupClipping();
void startHackLocal(al::HitSensor* self, al::HitSensor* other);
bool isInvalidHackEscape() const;
void prepareEndHack();
void endHackByCancel();
void forceEndHack();
void updatePosOnWave();
void updateVelocityIfValidCollision();
bool isOnDamageFire() const;
void tryStartHitReactionUp();
void updateShadowMaskLength();
void tryStartHitReactionDown();
void shiftSink();
void headUp();
void shiftReadyOrMove();
bool trySendMsgStartInSaucePan();
void tryHitReactionThroughFence();
bool tryShiftLand();
bool isHoldHackAction() const;
bool tryBoundMoveWall();
void updateHackOnGround();
bool constrainLavaDomain();
bool tryShiftFall();
bool isTriggerHackSwing() const;
void faceToMoveVec();
bool isTriggerHackJump() const;
void revertTargetQuatInHackJump(sead::Quatf* quatA, sead::Quatf* quatB);
void calcHackerMoveVec(sead::Vector3f* moveVec, const sead::Vector3f& inputDir) const;
void makeDisplayQuatInHackJump(const sead::Quatf& quatA, const sead::Quatf& quatB,
const sead::Quatf& quatC, bool isValue);
bool isDropAttackCollision() const;
bool isRiseAttackCollision() const;
bool isHoldHackJump() const;
bool tryShiftContinuousJump();
bool calcHackerMoveDir(sead::Vector3f* moveDir, const sead::Vector3f& inputDir) const;
bool isWaitingLaunch() const;
void launch(const sead::Vector3f& dir, f32 force, al::CameraTicket* cameraTicket);
void launchCancel(const sead::Vector3f& dir);
void showHackCap();
void hideHackCap();
bool isTriggerJump() const;
bool isTriggerAction() const;
bool isTriggerHackAction() const;
bool isTriggerCancel() const;
void startJumpAnim(f32 force);
void resetAndAppear(const sead::Vector3f& trans, const sead::Quatf& quat, f32 unused);
void endHackCommon();
void calcLaunchPos(sead::Vector3f* pos, const sead::Vector3f& vecA, f32 valA, f32 valB) const;
void onGroupClipping();
bool isOnGroundNoVelocity() const;
void updateCollisionPartsMove();
void accelStick();
bool addHackActorAccelStick(sead::Vector3f* stickAccel, f32 scale, const sead::Vector3f& dir);
bool isGroundOverTheWave(bool checkHeight, const sead::Vector3f& wavePos) const;
bool isEnableSnapWaveSurface() const;
void exeStandBy();
void exeDelay();
void exeRailMove();
void exeReady();
void exeUp();
void exeTurn();
void exeDown();
void exeSink();
void exeWait();
void exeDie();
void exeWaitHack();
void exeWaitHackStart();
void endWaitHackStart();
void exeWaitHackFall();
void exeHackFall();
void exeHackMove();
void endHackMove();
void exeHackJump();
void endHackJump();
void exeHackLand();
void exeHackInLauncher();
void endHackInLauncher();
void exeHackResetPos();
void exeHackDemo();
void exeRevive();
private:
sead::Vector3f mStartActionPosition = {0.0f, 0.0f, 0.0f};
f32 mJumpHeight = 0.0f;
s32 mTurnFrameDelay = 0;
u32 mTurnFrameCount = 0;
f32 mRailTotalLength = 0.0f;
s32 mRailMoveFrame = 0;
s32 mWaitFrameNum = 0;
s32 mDelayFrameNum = 0;
sead::Vector3f mClippingPos = {0.0f, 0.0f, 0.0f};
u32 mReviveDelayCount = 0;
u32 mReviveDelayTime = 0;
sead::Vector3f mJumpForce = {0.0f, 0.0f, 0.0f};
IUsePlayerHack* mPlayerHack = nullptr;
CapTargetInfo* mCapTargetInfo = nullptr;
u32 mAirTime = 0;
sead::Quatf mStartingRotation = sead::Quatf::unit;
sead::Vector3f mRevivePosition = {0.0f, 0.0f, 0.0f};
sead::Vector3f mReviveStartActionPosition = {0.0f, 0.0f, 0.0f};
bool mIsOnLavaSurface = false;
sead::Vector3f mLandVelocity = {0.0f, 0.0f, 0.0f};
BubbleStateInLauncher* mBubbleStateInLauncher = nullptr;
al::CameraTicket* mLaunchCameraTicket = nullptr;
al::ActorMatrixCameraTarget* mActorMatrixCameraTarget = nullptr;
sead::Matrix34f mCameraMtx = sead::Matrix34f::ident;
sead::Vector3f mStickForce = {0.0f, 0.0f, 0.0f};
s32 mUpperPunchFreeze = 0;
sead::Quatf mGroundRotation = sead::Quatf::unit;
sead::Vector3f mUpDir = sead::Vector3f::ey;
f32 mHackTurnAngle = 0.0f;
u32 mHackTurnFrame = 1;
u32 mHackTurnDelay = 1;
sead::Vector3f mFireNormal = sead::Vector3f::ey;
al::LiveActor* mClippingProbeActor = nullptr;
bool mIsClipped = false;
s32 mWaitReviveDelay = 0;
sead::Vector3f mPreviousTrans = {0.0f, 0.0f, 0.0f};
sead::Matrix34f _24c = sead::Matrix34f::ident;
bool mIsWaveCheckOn = false;
sead::Quatf mRailTargetRotation = sead::Quatf::unit;
sead::Vector3f mShadowMaskOffset = {0.0f, 0.0f, 0.0f};
f32 mShadowMaskDropLength = 0;
s32 mCancelLaunchCooldown = 0;
sead::Vector3f mColliderGroundOffset = {0.0f, 0.0f, 0.0f};
u32 mContinuousJumpDelay = 15;
al::CollisionPartsFilterSpecialPurpose* mCollisionPartsFilter = nullptr;
bool mIsCheckEffectPosRequired = true;
sead::Vector3f mSurfaceProbePos[2];
bool mIsOnHitReactionEffect = true;
sead::Matrix34f mLavaSurfaceMtx = sead::Matrix34f::ident;
const char* mMaterialCode = "";
sead::Vector3f mResetTargetPos = {0.0f, 0.0f, 0.0f};
bool mIsPlayerCaptured = false;
bool mIsInBossSequence = false;
bool mIsHackOnGround = false;
DisregardReceiver* mDisregardReceiver = nullptr;
PlayerHackStartShaderCtrl* mPlayerHackStartShaderCtrl = nullptr;
al::JointSpringControllerHolder* mJointSpringControllerHolder = nullptr;
const char* mCurrentActionName = "";
al::AnimScaleController* mAnimScaleController = nullptr;
bool mIsInSaucePan = false;
bool mIsShowTutorial = false;
bool mIsOnGroupClipping = true;
};
static_assert(sizeof(Bubble) == 0x358);

View file

@ -30,6 +30,7 @@
#include "Boss/BarrierField.h"
#include "Boss/BossForest/BossForestWander.h"
#include "Boss/Mofumofu/MofumofuScrap.h"
#include "Enemy/Bubble.h"
#include "Enemy/Gamane.h"
#include "Enemy/KaronWing.h"
#include "Enemy/Kuribo2D.h"
@ -137,7 +138,7 @@ const al::NameToCreator<al::ActorCreatorFunction> sProjectActorFactoryEntries[]
{"BossRaidRivet", nullptr},
{"BreakablePole", nullptr},
{"Breeda", nullptr},
{"Bubble", nullptr},
{"Bubble", al::createActorFunction<Bubble>},
{"Bubble2D", nullptr},
{"BubbleLauncher", nullptr},
{"Bull", nullptr},