This commit is contained in:
guymakinggames 2026-04-23 10:45:02 +02:00 committed by GitHub
commit 4d4bf8ef12
No known key found for this signature in database
GPG key ID: B5690EEEBB952194
5 changed files with 200 additions and 11 deletions

View file

@ -12532,51 +12532,51 @@ Boss/GiantWanderBoss/GiantWanderBossStateEscapeCancel.o:
label:
- _ZN32GiantWanderBossStateEscapeCancelC1EP15GiantWanderBossPN2al16DeriveActorGroupI19GiantWanderBossMineEE
- _ZN32GiantWanderBossStateEscapeCancelC2EP15GiantWanderBossPN2al16DeriveActorGroupI19GiantWanderBossMineEE
status: NotDecompiled
status: Matching
- offset: 0x06b3ec
size: 20
label: _ZN32GiantWanderBossStateEscapeCancel6appearEv
status: NotDecompiled
status: Matching
- offset: 0x06b400
size: 96
label: _ZN32GiantWanderBossStateEscapeCancel8exeAngryEv
status: NotDecompiled
status: Matching
- offset: 0x06b460
size: 188
label: _ZN32GiantWanderBossStateEscapeCancel13exeAppearMineEv
status: NotDecompiled
status: Matching
- offset: 0x06b51c
size: 200
label: _ZN32GiantWanderBossStateEscapeCancel9exeLaunchEv
status: NotDecompiled
status: Matching
- offset: 0x06b5e4
size: 88
label: _ZN32GiantWanderBossStateEscapeCancel12exeLaunchEndEv
status: NotDecompiled
status: Matching
- offset: 0x06b63c
size: 36
label: _ZN32GiantWanderBossStateEscapeCancelD0Ev
status: NotDecompiled
status: Matching
lazy: true
- offset: 0x06b660
size: 100
label: _ZNK12_GLOBAL__N_140GiantWanderBossStateEscapeCancelNrvAngry7executeEPN2al11NerveKeeperE
status: NotDecompiled
status: Matching
guess: true
- offset: 0x06b6c4
size: 8
label: _ZNK12_GLOBAL__N_145GiantWanderBossStateEscapeCancelNrvAppearMine7executeEPN2al11NerveKeeperE
status: NotDecompiled
status: Matching
guess: true
- offset: 0x06b6cc
size: 8
label: _ZNK12_GLOBAL__N_141GiantWanderBossStateEscapeCancelNrvLaunch7executeEPN2al11NerveKeeperE
status: NotDecompiled
status: Matching
guess: true
- offset: 0x06b6d4
size: 92
label: _ZNK12_GLOBAL__N_144GiantWanderBossStateEscapeCancelNrvLaunchEnd7executeEPN2al11NerveKeeperE
status: NotDecompiled
status: Matching
guess: true
Boss/GiantWanderBoss/GiantWanderBossStateOnGlass.o:
'.text':

View file

@ -0,0 +1,10 @@
#pragma once
#include <math/seadMatrix.h>
#include "Library/LiveActor/LiveActor.h"
class GiantWanderBoss : public al::LiveActor {
public:
const sead::Matrix34f* getBulletMtx() const;
};

View file

@ -0,0 +1,47 @@
#pragma once
#include <basis/seadTypes.h>
#include <math/seadMatrix.h>
#include <math/seadVector.h>
#include "Library/LiveActor/LiveActor.h"
namespace al {
struct ActorInitInfo;
class HitSensor;
class SensorMsg;
} // namespace al
class GiantWanderBossMine : public al::LiveActor {
public:
GiantWanderBossMine(const char*);
void init(const al::ActorInitInfo&) override;
void appear() override;
void kill() override;
void control() override;
void attackSensor(al::HitSensor* self, al::HitSensor* other) override;
bool receiveMsg(const al::SensorMsg* message, al::HitSensor* other,
al::HitSensor* self) override;
void appearAttach(const sead::Matrix34f*, const sead::Vector3f*);
bool isLaunched() const;
bool isEnableLaunch() const;
bool isAttach() const;
void startLaunchForOnGlass(const sead::Vector3f&);
void startLaunchForFirstPhase();
void startLaunchForEscape();
void startLaunchForLongRange();
void exeAppearAttach();
void exeFlyDown();
void resetPositionByAnim();
void checkCollideAndSendMsg();
void exeFlyParabolic();
void exeSignExplosion();
void exeExplosion();
void exeDie();
private:
u8 _108[0xe8];
};
static_assert(sizeof(GiantWanderBossMine) == 0x1f0);

View file

@ -0,0 +1,102 @@
#include "Boss/GiantWanderBoss/GiantWanderBossStateEscapeCancel.h"
#include <math/seadVector.h>
#include "Library/LiveActor/ActorActionFunction.h"
#include "Library/LiveActor/ActorMovementFunction.h"
#include "Library/Nerve/NerveSetupUtil.h"
#include "Library/Nerve/NerveUtil.h"
#include "Boss/GiantWanderBoss/GiantWanderBoss.h"
#include "Boss/GiantWanderBoss/GiantWanderBossMine.h"
namespace {
NERVE_IMPL(GiantWanderBossStateEscapeCancel, Angry)
NERVE_IMPL(GiantWanderBossStateEscapeCancel, AppearMine)
NERVE_IMPL(GiantWanderBossStateEscapeCancel, Launch)
NERVE_IMPL(GiantWanderBossStateEscapeCancel, LaunchEnd)
NERVES_MAKE_NOSTRUCT(GiantWanderBossStateEscapeCancel, Angry, AppearMine, Launch, LaunchEnd)
const sead::Vector3f sMineAttachOffset = sead::Vector3f::zero;
} // namespace
GiantWanderBossStateEscapeCancel::GiantWanderBossStateEscapeCancel(
GiantWanderBoss* boss, al::DeriveActorGroup<GiantWanderBossMine>* mineGroup)
: al::HostStateBase<GiantWanderBoss>("逃げキャンセル", boss), mMineGroup(mineGroup) {
initNerve(&Angry, 0);
}
GiantWanderBossStateEscapeCancel::~GiantWanderBossStateEscapeCancel() = default;
void GiantWanderBossStateEscapeCancel::appear() {
NerveStateBase::appear();
mLaunchCount = 0;
al::setNerve(this, &Angry);
}
void GiantWanderBossStateEscapeCancel::exeAngry() {
if (al::isFirstStep(this)) {
al::setVelocityZero(getHost());
al::startAction(getHost(), "Angry");
}
if (al::isActionEnd(getHost()))
al::setNerve(this, &AppearMine);
}
void GiantWanderBossStateEscapeCancel::exeAppearMine() {
if (al::isFirstStep(this)) {
mMine = mMineGroup->tryFindDeadDeriveActor();
if (!mMine) {
al::NerveStateBase* state = this;
state->kill();
return;
}
mMine->appearAttach(getHost()->getBulletMtx(), &sMineAttachOffset);
al::startAction(getHost(), "AttackSign");
}
if (al::isActionEnd(getHost()))
al::setNerve(this, &Launch);
}
void GiantWanderBossStateEscapeCancel::exeLaunch() {
if (al::isFirstStep(this)) {
al::startAction(getHost(), "Attack");
mMine->startLaunchForFirstPhase();
mLaunchCount++;
}
al::turnFront(getHost(), 3.0f);
if (!al::isGreaterEqualStep(this, 20))
return;
if (mLaunchCount >= 6) {
al::setNerve(this, &LaunchEnd);
return;
}
mMine = mMineGroup->tryFindDeadDeriveActor();
if (!mMine) {
al::setNerve(this, &LaunchEnd);
return;
}
mMine->appearAttach(getHost()->getBulletMtx(), &sMineAttachOffset);
al::setNerve(this, &Launch);
}
void GiantWanderBossStateEscapeCancel::exeLaunchEnd() {
if (al::isFirstStep(this))
al::startAction(getHost(), "AttackEnd");
if (al::isActionEnd(getHost())) {
al::NerveStateBase* state = this;
state->kill();
}
}

View file

@ -0,0 +1,30 @@
#pragma once
#include <basis/seadTypes.h>
#include "Library/LiveActor/LiveActorGroup.h"
#include "Library/Nerve/NerveStateBase.h"
class GiantWanderBoss;
class GiantWanderBossMine;
class GiantWanderBossStateEscapeCancel : public al::HostStateBase<GiantWanderBoss> {
public:
GiantWanderBossStateEscapeCancel(GiantWanderBoss* boss,
al::DeriveActorGroup<GiantWanderBossMine>* mineGroup);
~GiantWanderBossStateEscapeCancel() override;
void appear() override;
void exeAngry();
void exeAppearMine();
void exeLaunch();
void exeLaunchEnd();
private:
al::DeriveActorGroup<GiantWanderBossMine>* mMineGroup = nullptr;
GiantWanderBossMine* mMine = nullptr;
s32 mLaunchCount = 0;
};
static_assert(sizeof(GiantWanderBossStateEscapeCancel) == 0x38);