mirror of
https://github.com/MonsterDruide1/OdysseyDecomp
synced 2026-04-23 09:04:21 +00:00
Merge a13a1b4f28 into b30105638f
This commit is contained in:
commit
4d4bf8ef12
|
|
@ -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':
|
||||
|
|
|
|||
10
src/Boss/GiantWanderBoss/GiantWanderBoss.h
Normal file
10
src/Boss/GiantWanderBoss/GiantWanderBoss.h
Normal 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;
|
||||
};
|
||||
47
src/Boss/GiantWanderBoss/GiantWanderBossMine.h
Normal file
47
src/Boss/GiantWanderBoss/GiantWanderBossMine.h
Normal 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);
|
||||
102
src/Boss/GiantWanderBoss/GiantWanderBossStateEscapeCancel.cpp
Normal file
102
src/Boss/GiantWanderBoss/GiantWanderBossStateEscapeCancel.cpp
Normal 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();
|
||||
}
|
||||
}
|
||||
30
src/Boss/GiantWanderBoss/GiantWanderBossStateEscapeCancel.h
Normal file
30
src/Boss/GiantWanderBoss/GiantWanderBossStateEscapeCancel.h
Normal 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);
|
||||
Loading…
Reference in a new issue