This commit is contained in:
guymakinggames 2026-04-23 10:53:16 +02:00 committed by GitHub
commit e23f7e72f6
No known key found for this signature in database
GPG key ID: B5690EEEBB952194
4 changed files with 128 additions and 8 deletions

View file

@ -72135,37 +72135,37 @@ MapObj/GrowSeedStateRevival.o:
label:
- _ZN20GrowSeedStateRevivalC1EPKcPN2al9LiveActorEPN4sead4QuatIfEE
- _ZN20GrowSeedStateRevivalC2EPKcPN2al9LiveActorEPN4sead4QuatIfEE
status: NotDecompiled
status: Matching
- offset: 0x29981c
size: 60
label: _ZN20GrowSeedStateRevival6appearEv
status: NotDecompiled
status: Matching
- offset: 0x299858
size: 16
label: _ZN20GrowSeedStateRevival4killEv
status: NotDecompiled
status: Matching
- offset: 0x299868
size: 152
label: _ZN20GrowSeedStateRevival14exeRevivalWaitEv
status: NotDecompiled
status: Matching
- offset: 0x299900
size: 72
label: _ZN20GrowSeedStateRevival10exeRevivalEv
status: NotDecompiled
status: Matching
- offset: 0x299948
size: 36
label: _ZN20GrowSeedStateRevivalD0Ev
status: NotDecompiled
status: Matching
lazy: true
- offset: 0x29996c
size: 8
label: _ZNK12_GLOBAL__N_134GrowSeedStateRevivalNrvRevivalWait7executeEPN2al11NerveKeeperE
status: NotDecompiled
status: Matching
guess: true
- offset: 0x299974
size: 72
label: _ZNK12_GLOBAL__N_130GrowSeedStateRevivalNrvRevival7executeEPN2al11NerveKeeperE
status: NotDecompiled
status: Matching
guess: true
MapObj/GrowSeedStateWait.o:
'.text':

View file

@ -0,0 +1,63 @@
#include "MapObj/GrowSeedStateRevival.h"
#include "Library/LiveActor/ActorActionFunction.h"
#include "Library/LiveActor/ActorClippingFunction.h"
#include "Library/LiveActor/ActorFlagFunction.h"
#include "Library/LiveActor/ActorModelFunction.h"
#include "Library/LiveActor/ActorMovementFunction.h"
#include "Library/LiveActor/ActorPoseUtil.h"
#include "Library/LiveActor/ActorSensorUtil.h"
#include "Library/LiveActor/LiveActor.h"
#include "Library/Nerve/NerveSetupUtil.h"
#include "Library/Nerve/NerveUtil.h"
#include "MapObj/GrowSeedUtil.h"
namespace {
NERVE_IMPL(GrowSeedStateRevival, RevivalWait);
NERVE_IMPL(GrowSeedStateRevival, Revival);
NERVES_MAKE_NOSTRUCT(GrowSeedStateRevival, RevivalWait, Revival);
} // namespace
GrowSeedStateRevival::GrowSeedStateRevival(const char* name, al::LiveActor* actor,
sead::Quatf* quat)
: al::ActorStateBase(name, actor), mRevivalQuat(quat) {
mRevivalTrans.set(al::getTrans(mActor));
initNerve(&RevivalWait, 0);
}
void GrowSeedStateRevival::appear() {
al::NerveStateBase::appear();
al::invalidateClipping(mActor);
al::invalidateHitSensors(mActor);
al::setNerve(this, &RevivalWait);
}
void GrowSeedStateRevival::kill() {
al::NerveStateBase::kill();
al::validateHitSensors(mActor);
}
void GrowSeedStateRevival::exeRevivalWait() {
if (al::isFirstStep(mActor)) {
al::hideModelIfShow(mActor);
al::setVelocityZero(mActor);
al::offCollide(mActor);
}
if (al::isGreaterEqualStep(mActor, 300)) {
al::setTrans(mActor, mRevivalTrans);
mRevivalQuat->set(sead::Quatf::unit);
GrowSeedUtil::rotateRandom(mRevivalQuat);
al::setNerve(this, &Revival);
}
}
void GrowSeedStateRevival::exeRevival() {
al::showModelIfHide(mActor);
al::startHitReaction(mActor, "復活");
al::onCollide(mActor);
kill();
}

View file

@ -0,0 +1,27 @@
#pragma once
#include <math/seadQuat.h>
#include <math/seadVector.h>
#include "Library/Nerve/NerveStateBase.h"
namespace al {
class LiveActor;
} // namespace al
class GrowSeedStateRevival : public al::ActorStateBase {
public:
GrowSeedStateRevival(const char* name, al::LiveActor* actor, sead::Quatf* quat);
void appear() override;
void kill() override;
void exeRevivalWait();
void exeRevival();
private:
sead::Vector3f mRevivalTrans = sead::Vector3f::zero;
sead::Quatf* mRevivalQuat;
};
static_assert(sizeof(GrowSeedStateRevival) == 0x38);

30
src/MapObj/GrowSeedUtil.h Normal file
View file

@ -0,0 +1,30 @@
#pragma once
#include <basis/seadTypes.h>
#include <math/seadQuat.h>
#include <math/seadVector.h>
namespace al {
class HitSensor;
class LiveActor;
} // namespace al
class GrowSeedStateWait;
namespace GrowSeedUtil {
const char* getGuideLabelName();
bool isInDeathArea(const al::LiveActor*);
void throwToDirection(al::LiveActor*, const sead::Vector3f&, f32);
void throwFromPlayer(al::LiveActor*, f32, f32);
f32 getPlantPartsAddRadius();
void rotateRandom(sead::Quatf*);
void rotateRandomY(sead::Quatf*);
void setVelocityForBlow(al::LiveActor*, al::HitSensor*, al::HitSensor*, f32, f32, f32);
void setVelocityForReflect(al::LiveActor*, f32, f32);
bool checkStrikeArrowBetweenPlayer(al::LiveActor*);
bool tryEmitEffectWaterSurface(bool, sead::Vector3f*, al::LiveActor*);
void prepareKillByShineGet(al::LiveActor*, const sead::Vector3f&);
bool isEnableSeedAttackSpeed(const al::LiveActor*, GrowSeedStateWait*, GrowSeedStateWait*, f32);
} // namespace GrowSeedUtil