mirror of
https://github.com/MonsterDruide1/OdysseyDecomp
synced 2026-04-23 09:04:21 +00:00
MapObj: Implement RiseMapPartsHolder (#919)
This commit is contained in:
parent
c305fb1518
commit
84a0295905
|
|
@ -82139,99 +82139,99 @@ MapObj/RiseMapPartsHolder.o:
|
|||
- offset: 0x2fc448
|
||||
size: 180
|
||||
label: _ZN18RiseMapPartsHolderC2EPKc
|
||||
status: NotDecompiled
|
||||
status: Matching
|
||||
- offset: 0x2fc4fc
|
||||
size: 192
|
||||
label: _ZN18RiseMapPartsHolderC1EPKc
|
||||
status: NotDecompiled
|
||||
status: Matching
|
||||
- offset: 0x2fc5bc
|
||||
size: 1084
|
||||
label: _ZN18RiseMapPartsHolder4initERKN2al13ActorInitInfoE
|
||||
status: NotDecompiled
|
||||
status: NonMatchingMinor
|
||||
- offset: 0x2fc9f8
|
||||
size: 192
|
||||
label: _ZN18RiseMapPartsHolder9startRiseEv
|
||||
status: NotDecompiled
|
||||
status: Matching
|
||||
- offset: 0x2fcab8
|
||||
size: 160
|
||||
label: _ZN18RiseMapPartsHolder10receiveMsgEPKN2al9SensorMsgEPNS0_9HitSensorES5_
|
||||
status: NotDecompiled
|
||||
status: Matching
|
||||
- offset: 0x2fcb58
|
||||
size: 4
|
||||
label: _ZN18RiseMapPartsHolder7exeWaitEv
|
||||
status: NotDecompiled
|
||||
status: Matching
|
||||
- offset: 0x2fcb5c
|
||||
size: 300
|
||||
label: _ZN18RiseMapPartsHolder7exeMoveEv
|
||||
status: NotDecompiled
|
||||
status: Matching
|
||||
- offset: 0x2fcc88
|
||||
size: 132
|
||||
label: _ZN18RiseMapPartsHolder17startRiseAllChildEv
|
||||
status: NotDecompiled
|
||||
status: Matching
|
||||
- offset: 0x2fcd0c
|
||||
size: 204
|
||||
label: _ZN18RiseMapPartsHolder10exeMoveEndEv
|
||||
status: NotDecompiled
|
||||
status: Matching
|
||||
- offset: 0x2fcdd8
|
||||
size: 156
|
||||
label: _ZN18RiseMapPartsHolder7exeStopEv
|
||||
status: NotDecompiled
|
||||
status: Matching
|
||||
- offset: 0x2fce74
|
||||
size: 4
|
||||
label: _ZN18RiseMapPartsHolder14exeRequestDemoEv
|
||||
status: NotDecompiled
|
||||
status: Matching
|
||||
- offset: 0x2fce78
|
||||
size: 176
|
||||
label: _ZN18RiseMapPartsHolder8exeDelayEv
|
||||
status: NotDecompiled
|
||||
status: Matching
|
||||
- offset: 0x2fcf28
|
||||
size: 224
|
||||
label: _ZN18RiseMapPartsHolder9startDemoEb
|
||||
status: NotDecompiled
|
||||
status: Matching
|
||||
- offset: 0x2fd008
|
||||
size: 4
|
||||
label: _ZNK12_GLOBAL__N_125RiseMapPartsHolderNrvWait7executeEPN2al11NerveKeeperE
|
||||
status: NotDecompiled
|
||||
status: Matching
|
||||
guess: true
|
||||
- offset: 0x2fd00c
|
||||
size: 160
|
||||
label: _ZNK12_GLOBAL__N_125RiseMapPartsHolderNrvStop7executeEPN2al11NerveKeeperE
|
||||
status: NotDecompiled
|
||||
status: Matching
|
||||
guess: true
|
||||
- offset: 0x2fd0ac
|
||||
size: 8
|
||||
label: _ZNK12_GLOBAL__N_125RiseMapPartsHolderNrvMove7executeEPN2al11NerveKeeperE
|
||||
status: NotDecompiled
|
||||
status: Matching
|
||||
guess: true
|
||||
- offset: 0x2fd0b4
|
||||
size: 8
|
||||
label: _ZNK12_GLOBAL__N_128RiseMapPartsHolderNrvMoveEnd7executeEPN2al11NerveKeeperE
|
||||
status: NotDecompiled
|
||||
status: Matching
|
||||
guess: true
|
||||
- offset: 0x2fd0bc
|
||||
size: 4
|
||||
label: _ZNK12_GLOBAL__N_132RiseMapPartsHolderNrvRequestDemo7executeEPN2al11NerveKeeperE
|
||||
status: NotDecompiled
|
||||
status: Matching
|
||||
guess: true
|
||||
- offset: 0x2fd0c0
|
||||
size: 8
|
||||
label: _ZNK12_GLOBAL__N_126RiseMapPartsHolderNrvDelay7executeEPN2al11NerveKeeperE
|
||||
status: NotDecompiled
|
||||
status: Matching
|
||||
guess: true
|
||||
- offset: 0x2fd0c8
|
||||
size: 28
|
||||
label: _ZNK2al10FunctorV0MIP18RiseMapPartsHolderMS1_FvvEEclEv
|
||||
status: NotDecompiled
|
||||
status: Matching
|
||||
lazy: true
|
||||
- offset: 0x2fd0e4
|
||||
size: 76
|
||||
label: _ZNK2al10FunctorV0MIP18RiseMapPartsHolderMS1_FvvEE5cloneEv
|
||||
status: NotDecompiled
|
||||
status: Matching
|
||||
lazy: true
|
||||
- offset: 0x2fd130
|
||||
size: 4
|
||||
label: _ZN2al10FunctorV0MIP18RiseMapPartsHolderMS1_FvvEED0Ev
|
||||
status: NotDecompiled
|
||||
status: Matching
|
||||
lazy: true
|
||||
MapObj/RiseMapPartsOld.o:
|
||||
'.text':
|
||||
|
|
@ -135903,7 +135903,7 @@ Scene/ProjectActorFactory.o:
|
|||
- offset: 0x4bd14c
|
||||
size: 52
|
||||
label: _ZN2al19createActorFunctionI18RiseMapPartsHolderEEPNS_9LiveActorEPKc
|
||||
status: NotDecompiled
|
||||
status: Matching
|
||||
lazy: true
|
||||
- offset: 0x4bd180
|
||||
size: 52
|
||||
|
|
|
|||
28
src/Boss/BossUtil/BossUtil.h
Normal file
28
src/Boss/BossUtil/BossUtil.h
Normal file
|
|
@ -0,0 +1,28 @@
|
|||
#pragma once
|
||||
|
||||
#include <basis/seadTypes.h>
|
||||
#include <math/seadVector.h>
|
||||
|
||||
namespace al {
|
||||
struct ActorInitInfo;
|
||||
class LiveActor;
|
||||
} // namespace al
|
||||
|
||||
class BarrierField;
|
||||
|
||||
namespace rs {
|
||||
BarrierField* tryCreateBarrierField(const al::ActorInitInfo&);
|
||||
void updateEyeMove(al::LiveActor*, const sead::Vector3f&, f32, const char*);
|
||||
void resetEyeMove(al::LiveActor*, const char*);
|
||||
void startBossBattle(const al::LiveActor*, s32);
|
||||
void endBossBattle(const al::LiveActor*, s32);
|
||||
s32 getBossBattleDeadCount(const al::LiveActor*, s32);
|
||||
bool isAlreadyShowDemoBossBattleStart(const al::LiveActor*, s32, s32);
|
||||
void saveShowDemoBossBattleStart(const al::LiveActor*, s32, s32);
|
||||
bool isAlreadyShowDemoBossBattleEndKoopaLv2(const al::LiveActor*);
|
||||
void saveShowDemoBossBattleEndKoopaLv2(const al::LiveActor*);
|
||||
bool isAlreadyShowDemoMoonBasementCollapse(const al::LiveActor*);
|
||||
void saveShowDemoMoonBasementCollapse(const al::LiveActor*);
|
||||
bool isAlreadyDeadGK(const al::LiveActor*, s32, s32);
|
||||
void onAlreadyDeadGK(const al::LiveActor*, s32, s32);
|
||||
} // namespace rs
|
||||
295
src/MapObj/RiseMapPartsHolder.cpp
Normal file
295
src/MapObj/RiseMapPartsHolder.cpp
Normal file
|
|
@ -0,0 +1,295 @@
|
|||
#include "MapObj/RiseMapPartsHolder.h"
|
||||
|
||||
#include <math/seadVector.h>
|
||||
|
||||
#include "Library/Camera/CameraUtil.h"
|
||||
#include "Library/Demo/DemoFunction.h"
|
||||
#include "Library/LiveActor/ActorClippingFunction.h"
|
||||
#include "Library/LiveActor/ActorFlagFunction.h"
|
||||
#include "Library/LiveActor/ActorInitFunction.h"
|
||||
#include "Library/LiveActor/ActorInitInfo.h"
|
||||
#include "Library/LiveActor/ActorInitUtil.h"
|
||||
#include "Library/LiveActor/ActorSensorUtil.h"
|
||||
#include "Library/LiveActor/LiveActorGroup.h"
|
||||
#include "Library/Nerve/NerveSetupUtil.h"
|
||||
#include "Library/Nerve/NerveUtil.h"
|
||||
#include "Library/Placement/PlacementFunction.h"
|
||||
#include "Library/Stage/StageSwitchUtil.h"
|
||||
#include "Library/Thread/FunctorV0M.h"
|
||||
|
||||
#include "Boss/BossUtil/BossUtil.h"
|
||||
#include "MapObj/RiseMapParts.h"
|
||||
#include "System/GameDataFunction.h"
|
||||
#include "System/GameDataHolderAccessor.h"
|
||||
#include "System/GameDataUtil.h"
|
||||
#include "System/SaveObjInfo.h"
|
||||
#include "Util/DemoUtil.h"
|
||||
#include "Util/PlayerDemoUtil.h"
|
||||
#include "Util/SensorMsgFunction.h"
|
||||
|
||||
namespace {
|
||||
NERVE_IMPL(RiseMapPartsHolder, Wait);
|
||||
NERVE_IMPL(RiseMapPartsHolder, Move);
|
||||
NERVE_IMPL(RiseMapPartsHolder, MoveEnd);
|
||||
NERVE_IMPL(RiseMapPartsHolder, Stop);
|
||||
NERVE_IMPL(RiseMapPartsHolder, RequestDemo);
|
||||
NERVE_IMPL(RiseMapPartsHolder, Delay);
|
||||
|
||||
NERVES_MAKE_STRUCT(RiseMapPartsHolder, Wait, Stop, Move, MoveEnd, RequestDemo, Delay);
|
||||
} // namespace
|
||||
|
||||
RiseMapPartsHolder::RiseMapPartsHolder(const char* name) : al::LiveActor(name) {}
|
||||
|
||||
// NON_MATCHING: https://decomp.me/scratch/lCb5J
|
||||
void RiseMapPartsHolder::init(const al::ActorInitInfo& info) {
|
||||
using RiseMapPartsHolderFunctor =
|
||||
al::FunctorV0M<RiseMapPartsHolder*, void (RiseMapPartsHolder::*)()>;
|
||||
|
||||
al::initActorSceneInfo(this, info);
|
||||
al::initActorPoseTRSV(this);
|
||||
al::initActorClipping(this, info);
|
||||
al::initExecutorUpdate(this, info, "コリジョン地形[Movement]");
|
||||
al::initStageSwitch(this, info);
|
||||
initHitSensor(1);
|
||||
al::addHitSensorMapObj(this, info, "Body", 0.0f, 64, {0.0f, 0.0f, 0.0f});
|
||||
mAddDemoInfo = al::registDemoRequesterToAddDemoInfo(this, info, 0);
|
||||
if (al::isObjectNameSubStr(info, "Switch"))
|
||||
mIsSwitch = true;
|
||||
|
||||
mLinkedShineIndex = GameDataFunction::tryFindLinkedShineIndex(this, info);
|
||||
al::initNerve(this, &NrvRiseMapPartsHolder.Wait, 0);
|
||||
_108 = rs::createSaveObjInfoWriteSaveData(info);
|
||||
_110 = rs::createSaveObjInfoNoWriteSaveDataInSameWorld(info);
|
||||
|
||||
s32 childNum = al::calcLinkChildNum(info, "RiseParts");
|
||||
mRiseMapPartsGroup = new al::DeriveActorGroup<RiseMapParts>("地形隆起パーツ", childNum);
|
||||
|
||||
for (s32 i = 0; i < childNum; i++) {
|
||||
RiseMapParts* mapParts =
|
||||
new RiseMapParts(al::getLinksActorDisplayName(info, "RiseParts", i));
|
||||
al::initLinksActor(mapParts, info, "RiseParts", i);
|
||||
mRiseMapPartsGroup->registerActor(mapParts);
|
||||
}
|
||||
|
||||
if (al::isExistLinkChild(info, "PlayerRestartPos", 0)) {
|
||||
al::getLinksMatrix(&mPlayerRestartPosMtx, info, "PlayerRestartPos");
|
||||
mHasRestartPos = true;
|
||||
}
|
||||
|
||||
bool isValidObjectCamera = false;
|
||||
al::tryGetArg(&isValidObjectCamera, info, "IsValidObjectCamera");
|
||||
if (isValidObjectCamera)
|
||||
mDemoCamera = al::initDemoObjectCamera(this, info, nullptr, "固定");
|
||||
|
||||
al::tryGetArg(&mIsResetFirstPosInMiniGame, info, "ResetFirstPosInMiniGame");
|
||||
al::tryGetArg(&mRelatedBoss, info, "RelatedBoss");
|
||||
al::tryGetArg(&mDelayFrame, info, "DelayFrame");
|
||||
|
||||
if (mDelayFrame > -1)
|
||||
mDelayFrame = -1;
|
||||
|
||||
if (mIsSwitch) {
|
||||
makeActorAlive();
|
||||
return;
|
||||
}
|
||||
|
||||
bool isStageSwitchListening = al::listenStageSwitchOnStart(
|
||||
this, RiseMapPartsHolderFunctor(this, &RiseMapPartsHolder::startRise));
|
||||
|
||||
bool isDead = false;
|
||||
if (rs::isSequenceTimeBalloonOrRace(this))
|
||||
isDead = true;
|
||||
else if (mLinkedShineIndex < 0)
|
||||
isDead = rs::isOnSaveObjInfo(_108);
|
||||
else if (GameDataFunction::isGotShine(GameDataHolderAccessor(this), mLinkedShineIndex))
|
||||
isDead = true;
|
||||
else if (mLinkedShineIndex < 0)
|
||||
isDead = rs::isOnSaveObjInfo(_108);
|
||||
|
||||
if (mRelatedBoss > -1)
|
||||
isDead = rs::isAlreadyDeadGK(this, mRelatedBoss, 3);
|
||||
|
||||
if (isDead) {
|
||||
if (rs::isSequenceTimeBalloonOrRace(this) && mIsResetFirstPosInMiniGame) {
|
||||
makeActorDead();
|
||||
al::setNerve(this, &NrvRiseMapPartsHolder.Wait);
|
||||
return;
|
||||
}
|
||||
|
||||
al::invalidateClipping(this);
|
||||
al::setNerve(this, &NrvRiseMapPartsHolder.Stop);
|
||||
makeActorAlive();
|
||||
return;
|
||||
}
|
||||
|
||||
if (al::listenStageSwitchOnAppear(
|
||||
this, RiseMapPartsHolderFunctor(this, &RiseMapPartsHolder::startRise))) {
|
||||
for (s32 i = 0; i < childNum; i++)
|
||||
mRiseMapPartsGroup->getDeriveActor(i)->kill();
|
||||
makeActorDead();
|
||||
return;
|
||||
}
|
||||
|
||||
if (isStageSwitchListening) {
|
||||
makeActorAlive();
|
||||
return;
|
||||
}
|
||||
|
||||
s32 scenarioNo = -1;
|
||||
if (!al::tryGetArg(&scenarioNo, info, "ScenarioNo")) {
|
||||
makeActorDead();
|
||||
return;
|
||||
}
|
||||
|
||||
makeActorAlive();
|
||||
}
|
||||
|
||||
void RiseMapPartsHolder::startRise() {
|
||||
if (mRelatedBoss <= -1 && !mIsSwitch && rs::isOnSaveObjInfo(_108))
|
||||
return;
|
||||
|
||||
if (al::isDead(this))
|
||||
appear();
|
||||
|
||||
if (al::isNerve(this, &NrvRiseMapPartsHolder.Stop) ||
|
||||
al::isNerve(this, &NrvRiseMapPartsHolder.Move) ||
|
||||
al::isNerve(this, &NrvRiseMapPartsHolder.RequestDemo)) {
|
||||
return;
|
||||
}
|
||||
|
||||
if (!mIsSwitch)
|
||||
rs::onSaveObjInfo(_110);
|
||||
|
||||
al::invalidateClipping(this);
|
||||
rs::addDemoRiseMapPartsToList(this);
|
||||
al::setNerve(this, &NrvRiseMapPartsHolder.RequestDemo);
|
||||
}
|
||||
|
||||
bool RiseMapPartsHolder::receiveMsg(const al::SensorMsg* message, al::HitSensor* other,
|
||||
al::HitSensor* self) {
|
||||
if (rs::isMsgPlayerDisregardTargetMarker(message) ||
|
||||
rs::isMsgPlayerDisregardHomingAttack(message) || al::isMsgPlayerDisregard(message) ||
|
||||
al::isMsgSwitchOffInit(message)) {
|
||||
return true;
|
||||
}
|
||||
|
||||
if (rs::isMsgSwitchOnWithSaveRequest(message, &mSwitchOnSaveInfo)) {
|
||||
startRise();
|
||||
return true;
|
||||
}
|
||||
|
||||
if (al::isMsgSwitchOnInit(message)) {
|
||||
al::invalidateClipping(this);
|
||||
al::setNerve(this, &NrvRiseMapPartsHolder.Stop);
|
||||
return true;
|
||||
}
|
||||
|
||||
return false;
|
||||
}
|
||||
|
||||
void RiseMapPartsHolder::exeWait() {}
|
||||
|
||||
void RiseMapPartsHolder::exeMove() {
|
||||
if (al::isFirstStep(this)) {
|
||||
if (al::isActiveCameraInterpole(this, 0)) {
|
||||
al::setNerve(this, &NrvRiseMapPartsHolder.Move);
|
||||
return;
|
||||
}
|
||||
|
||||
startRiseAllChild();
|
||||
}
|
||||
|
||||
s32 actorCount = mRiseMapPartsGroup->getActorCount();
|
||||
bool allStopped = true;
|
||||
for (s32 i = 0; i < actorCount; i++) {
|
||||
if (!mRiseMapPartsGroup->getDeriveActor(i)->isStop()) {
|
||||
allStopped = false;
|
||||
break;
|
||||
}
|
||||
}
|
||||
|
||||
if (allStopped) {
|
||||
al::tryOnStageSwitch(this, "SwitchStopOn");
|
||||
al::setNerve(this, &NrvRiseMapPartsHolder.MoveEnd);
|
||||
}
|
||||
}
|
||||
|
||||
void RiseMapPartsHolder::startRiseAllChild() {
|
||||
if (!mIsSwitch && mRelatedBoss == -1)
|
||||
rs::onSaveObjInfo(_108);
|
||||
|
||||
s32 actorCount = mRiseMapPartsGroup->getActorCount();
|
||||
for (s32 i = 0; i < actorCount; i++)
|
||||
mRiseMapPartsGroup->getDeriveActor(i)->startRise();
|
||||
}
|
||||
|
||||
void RiseMapPartsHolder::exeMoveEnd() {
|
||||
if (!al::isGreaterEqualStep(this, 90))
|
||||
return;
|
||||
|
||||
if (mDemoCamera)
|
||||
al::endCamera(this, mDemoCamera, -1, false);
|
||||
|
||||
if (mHasRestartPos) {
|
||||
sead::Vector3f trans;
|
||||
mPlayerRestartPosMtx.getTranslation(trans);
|
||||
sead::Quatf quat = sead::Quatf::unit;
|
||||
mPlayerRestartPosMtx.toQuat(quat);
|
||||
rs::replaceDemoPlayer(this, trans, quat);
|
||||
}
|
||||
|
||||
if (_188 && rs::isActiveDemo(this)) {
|
||||
rs::requestEndDemoRiseMapParts(this);
|
||||
if (mSwitchOnSaveInfo)
|
||||
rs::onSaveObjInfo(mSwitchOnSaveInfo);
|
||||
}
|
||||
|
||||
kill();
|
||||
}
|
||||
|
||||
void RiseMapPartsHolder::exeStop() {
|
||||
if (al::isFirstStep(this)) {
|
||||
s32 actorCount = mRiseMapPartsGroup->getActorCount();
|
||||
for (s32 i = 0; i < actorCount; i++)
|
||||
mRiseMapPartsGroup->getDeriveActor(i)->setStop();
|
||||
|
||||
al::tryOnStageSwitch(this, "SwitchStopOn");
|
||||
kill();
|
||||
}
|
||||
}
|
||||
|
||||
void RiseMapPartsHolder::exeRequestDemo() {}
|
||||
|
||||
void RiseMapPartsHolder::exeDelay() {
|
||||
if (al::isGreaterEqualStep(this, mDelayFrame)) {
|
||||
startRiseAllChild();
|
||||
al::setNerve(this, &NrvRiseMapPartsHolder.Move);
|
||||
}
|
||||
}
|
||||
|
||||
// TODO: Rename `unk`
|
||||
void RiseMapPartsHolder::startDemo(bool unk) {
|
||||
al::invalidateClipping(this);
|
||||
if (unk)
|
||||
_188 = false;
|
||||
|
||||
if (mDemoCamera)
|
||||
al::startCamera(this, mDemoCamera, -1);
|
||||
|
||||
if (mDelayFrame >= 0) {
|
||||
al::setNerve(this, &NrvRiseMapPartsHolder.Delay);
|
||||
return;
|
||||
}
|
||||
|
||||
if (unk)
|
||||
rs::addDemoActor(this, false);
|
||||
else if (mSwitchActor)
|
||||
rs::addDemoActor(mSwitchActor, false);
|
||||
|
||||
if (mRiseMapPartsArray)
|
||||
for (s32 i = 0; i < mRiseMapPartsNum; i++)
|
||||
rs::addDemoActor(mRiseMapPartsArray[i], false);
|
||||
|
||||
al::addDemoActorFromAddDemoInfo(this, mAddDemoInfo);
|
||||
al::setNerve(this, &NrvRiseMapPartsHolder.Move);
|
||||
}
|
||||
|
|
@ -1,19 +1,27 @@
|
|||
#pragma once
|
||||
|
||||
#include <basis/seadTypes.h>
|
||||
#include <math/seadMatrix.h>
|
||||
|
||||
#include "Library/LiveActor/LiveActor.h"
|
||||
|
||||
namespace al {
|
||||
struct ActorInitInfo;
|
||||
class AddDemoInfo;
|
||||
class CameraTicket;
|
||||
class HitSensor;
|
||||
class LiveActorGroup;
|
||||
class SensorMsg;
|
||||
|
||||
template <class T>
|
||||
class DeriveActorGroup;
|
||||
} // namespace al
|
||||
class RiseMapParts;
|
||||
class SaveObjInfo;
|
||||
|
||||
class RiseMapPartsHolder : public al::LiveActor {
|
||||
public:
|
||||
RiseMapPartsHolder(const char*);
|
||||
RiseMapPartsHolder(const char* name);
|
||||
void init(const al::ActorInitInfo& info) override;
|
||||
void startRise();
|
||||
bool receiveMsg(const al::SensorMsg* message, al::HitSensor* other,
|
||||
|
|
@ -25,7 +33,7 @@ public:
|
|||
void exeStop();
|
||||
void exeRequestDemo();
|
||||
void exeDelay();
|
||||
void startDemo(bool);
|
||||
void startDemo(bool unk);
|
||||
|
||||
void setSwitchActor(al::LiveActor* actor) { mSwitchActor = actor; }
|
||||
|
||||
|
|
@ -35,11 +43,23 @@ public:
|
|||
}
|
||||
|
||||
private:
|
||||
void* filler_108[13];
|
||||
al::LiveActor* mSwitchActor;
|
||||
RiseMapParts** mRiseMapPartsArray;
|
||||
s32 mRiseMapPartsNum;
|
||||
void* filler_188[2];
|
||||
SaveObjInfo* _108 = nullptr;
|
||||
SaveObjInfo* _110 = nullptr;
|
||||
SaveObjInfo* mSwitchOnSaveInfo = nullptr;
|
||||
al::CameraTicket* mDemoCamera = nullptr;
|
||||
al::DeriveActorGroup<RiseMapParts>* mRiseMapPartsGroup = nullptr;
|
||||
sead::Matrix34f mPlayerRestartPosMtx;
|
||||
bool mHasRestartPos = false;
|
||||
s32 mDelayFrame = -1;
|
||||
bool mIsSwitch = false;
|
||||
al::LiveActor* mSwitchActor = nullptr;
|
||||
RiseMapParts** mRiseMapPartsArray = nullptr;
|
||||
s32 mRiseMapPartsNum = 0;
|
||||
s32 mLinkedShineIndex = -1;
|
||||
bool _188 = true;
|
||||
bool mIsResetFirstPosInMiniGame = false;
|
||||
s32 mRelatedBoss = -1;
|
||||
al::AddDemoInfo* mAddDemoInfo = nullptr;
|
||||
};
|
||||
|
||||
static_assert(sizeof(RiseMapPartsHolder) == 0x198);
|
||||
|
|
|
|||
|
|
@ -85,6 +85,7 @@
|
|||
#include "MapObj/MoonWorldCaptureParadeLift.h"
|
||||
#include "MapObj/PeachWorldTree.h"
|
||||
#include "MapObj/PoleGrabCeil.h"
|
||||
#include "MapObj/RiseMapPartsHolder.h"
|
||||
#include "MapObj/RouletteSwitch.h"
|
||||
#include "MapObj/SaveFlagCheckObj.h"
|
||||
#include "MapObj/ShineTowerRocket.h"
|
||||
|
|
@ -660,7 +661,7 @@ const al::NameToCreator<al::ActorCreatorFunction> sProjectActorFactoryEntries[]
|
|||
{"RailMoveMapParts", al::createActorFunction<al::RailMoveMapParts>},
|
||||
{"RiseMapParts", nullptr},
|
||||
{"ReactionMapParts", nullptr},
|
||||
{"RiseMapPartsHolder", nullptr},
|
||||
{"RiseMapPartsHolder", al::createActorFunction<RiseMapPartsHolder>},
|
||||
{"RocketFlower", nullptr},
|
||||
{"RollingCubeMapParts", al::createActorFunction<al::RollingCubeMapParts>},
|
||||
{"RippleFixMapParts", nullptr},
|
||||
|
|
|
|||
61
src/Util/PlayerDemoUtil.h
Normal file
61
src/Util/PlayerDemoUtil.h
Normal file
|
|
@ -0,0 +1,61 @@
|
|||
#pragma once
|
||||
|
||||
#include <basis/seadTypes.h>
|
||||
#include <math/seadQuat.h>
|
||||
#include <math/seadVector.h>
|
||||
|
||||
namespace al {
|
||||
class LiveActor;
|
||||
}
|
||||
|
||||
namespace rs {
|
||||
void startActionDemoPlayer(const al::LiveActor*, const char*);
|
||||
bool isActionEndDemoPlayer(const al::LiveActor*);
|
||||
void setActionFrameRateDemoPlayer(const al::LiveActor*, f32);
|
||||
void setActionFrameDemoPlayer(const al::LiveActor*, f32);
|
||||
void clearDemoAnimInterpolatePlayer(const al::LiveActor*);
|
||||
void hideDemoPlayer(const al::LiveActor*);
|
||||
void showDemoPlayer(const al::LiveActor*);
|
||||
void hideDemoPlayerSilhouette(const al::LiveActor*);
|
||||
void showDemoPlayerSilhouette(const al::LiveActor*);
|
||||
void addDemoLockOnCap(const al::LiveActor*);
|
||||
void forcePutOnDemoCap(const al::LiveActor*);
|
||||
void forcePutOffMarioHeadCap(const al::LiveActor*);
|
||||
void hideDemoCap(const al::LiveActor*);
|
||||
void showDemoCap(const al::LiveActor*);
|
||||
void hideDemoCapSilhouette(const al::LiveActor*);
|
||||
void showDemoCapSilhouette(const al::LiveActor*);
|
||||
void killAllEffectPlayerAndCap(const al::LiveActor*);
|
||||
const sead::Vector3f& getDemoPlayerTrans(const al::LiveActor*);
|
||||
void setDemoPlayerQuat(const al::LiveActor*, const sead::Quatf&);
|
||||
const sead::Quatf& getDemoPlayerQuat(const al::LiveActor*);
|
||||
void replaceDemoPlayer(const al::LiveActor*, const sead::Vector3f&, const sead::Quatf&);
|
||||
void validateIK(const al::LiveActor*);
|
||||
void invalidateIK(const al::LiveActor*);
|
||||
void validateWatchTarget(const al::LiveActor*, const sead::Vector3f&);
|
||||
void invalidateWatchTarget(const al::LiveActor*);
|
||||
void hideDemoPlayerAndStartDemoResetAction(const al::LiveActor*);
|
||||
void calcDemoMarioJointPosAllRoot(sead::Vector3f*, const al::LiveActor*);
|
||||
void invalidateMarioDitherFrame(const al::LiveActor*, s32);
|
||||
void startMarioCapEyeAction(const al::LiveActor*, const char*);
|
||||
void killMarioCapEye(const al::LiveActor*);
|
||||
void startMarioRightHandAction(const al::LiveActor*, const char*);
|
||||
f32 getMarioActionFrameMax(const al::LiveActor*);
|
||||
void hideMarioGroundDepthShadow(const al::LiveActor*);
|
||||
void showMarioGroundDepthShadow(const al::LiveActor*);
|
||||
void setMarioGroundDepthShadowMapLength(const al::LiveActor*, f32);
|
||||
void changeMarioDepthShadowMapSizeHight(const al::LiveActor*);
|
||||
void changeMarioDepthShadowMapSizeNormal(const al::LiveActor*);
|
||||
void setMarioDirectionalShadowMaskTypeNone(const al::LiveActor*);
|
||||
void setMarioDirectionalShadowMaskTypeSelf(const al::LiveActor*);
|
||||
void resetMarioDynamics(const al::LiveActor*);
|
||||
void keepMarioCapVisibilityEndDemo(const al::LiveActor*);
|
||||
void clearMarioFootPrint(const al::LiveActor*);
|
||||
} // namespace rs
|
||||
|
||||
namespace PlayerDemoFunction {
|
||||
void startCapCheckpointWarpMode(const al::LiveActor*);
|
||||
void endMarioShadowMainShine(const al::LiveActor*);
|
||||
void prepareSphinxQuizRouteKill(const al::LiveActor*);
|
||||
void clearMarioStain(al::LiveActor*);
|
||||
} // namespace PlayerDemoFunction
|
||||
Loading…
Reference in a new issue