This commit is contained in:
guymakinggames 2026-04-23 07:56:52 +00:00 committed by GitHub
commit b407b7665e
No known key found for this signature in database
GPG key ID: B5690EEEBB952194
6 changed files with 122 additions and 11 deletions

View file

@ -67377,37 +67377,37 @@ MapObj/EchoBlockMapParts.o:
- offset: 0x264a54
size: 120
label: _ZN17EchoBlockMapPartsC2EPKc
status: NotDecompiled
status: Matching
- offset: 0x264acc
size: 132
label: _ZN17EchoBlockMapPartsC1EPKc
status: NotDecompiled
status: Matching
- offset: 0x264b50
size: 132
label: _ZN17EchoBlockMapParts4initERKN2al13ActorInitInfoE
status: NotDecompiled
status: Matching
- offset: 0x264bd4
size: 12
label: _ZN17EchoBlockMapParts5beginEv
status: NotDecompiled
status: Matching
- offset: 0x264be0
size: 8
label: _ZN17EchoBlockMapParts10receiveMsgEPKN2al9SensorMsgEPNS0_9HitSensorES5_
status: NotDecompiled
status: Matching
- offset: 0x264be8
size: 28
label: _ZNK2al10FunctorV0MIP17EchoBlockMapPartsMS1_FvvEEclEv
status: NotDecompiled
status: Matching
lazy: true
- offset: 0x264c04
size: 76
label: _ZNK2al10FunctorV0MIP17EchoBlockMapPartsMS1_FvvEE5cloneEv
status: NotDecompiled
status: Matching
lazy: true
- offset: 0x264c50
size: 4
label: _ZN2al10FunctorV0MIP17EchoBlockMapPartsMS1_FvvEED0Ev
status: NotDecompiled
status: Matching
lazy: true
MapObj/EchoEmitter.o:
'.text':
@ -134216,7 +134216,7 @@ Scene/ProjectActorFactory.o:
- offset: 0x4b7e8c
size: 52
label: _ZN2al19createActorFunctionI17EchoBlockMapPartsEEPNS_9LiveActorEPKc
status: NotDecompiled
status: Matching
lazy: true
- offset: 0x4b7ec0
size: 52

View file

@ -0,0 +1,32 @@
#include "MapObj/EchoBlockMapParts.h"
#include "Library/LiveActor/ActorInitUtil.h"
#include "Library/Stage/StageSwitchUtil.h"
#include "Library/Thread/FunctorV0M.h"
#include "MapObj/EchoEmitterHolder.h"
EchoBlockMapParts::EchoBlockMapParts(const char* name) : al::LiveActor(name) {}
void EchoBlockMapParts::init(const al::ActorInitInfo& info) {
using EchoBlockMapPartsFunctor =
al::FunctorV0M<EchoBlockMapParts*, void (EchoBlockMapParts::*)()>;
al::initMapPartsActor(this, info, nullptr);
rs::initEchoEmitterHolder(this);
al::trySyncStageSwitchAppear(this);
al::tryListenStageSwitchKill(this);
if (al::listenStageSwitchOnAppear(this,
EchoBlockMapPartsFunctor(this, &EchoBlockMapParts::begin)))
makeActorDead();
}
void EchoBlockMapParts::begin() {
makeActorAlive();
}
bool EchoBlockMapParts::receiveMsg(const al::SensorMsg* message, al::HitSensor* other,
al::HitSensor* self) {
return false;
}

View file

@ -0,0 +1,22 @@
#pragma once
#include "Library/LiveActor/LiveActor.h"
namespace al {
struct ActorInitInfo;
class HitSensor;
class SensorMsg;
} // namespace al
class EchoBlockMapParts : public al::LiveActor {
public:
EchoBlockMapParts(const char* name);
void init(const al::ActorInitInfo& info) override;
bool receiveMsg(const al::SensorMsg* message, al::HitSensor* other,
al::HitSensor* self) override;
void begin();
};
static_assert(sizeof(EchoBlockMapParts) == 0x108);

View file

@ -0,0 +1,55 @@
#pragma once
#include <basis/seadTypes.h>
#include <math/seadMatrix.h>
#include <math/seadVector.h>
#include "Library/Execute/IUseExecutor.h"
#include "Library/HostIO/HioNode.h"
#include "Library/Scene/ISceneObj.h"
#include "Scene/SceneObjFactory.h"
namespace agl {
class DrawContext;
} // namespace agl
namespace al {
struct ActorInitInfo;
class IUseSceneObjHolder;
class LiveActor;
} // namespace al
class EchoEmitter;
class EchoEmitterHolder;
class EchoEmitterHolder : public al::HioNode, public al::IUseExecutor, public al::ISceneObj {
public:
static constexpr s32 sSceneObjId = SceneObjID_EchoEmitterHolder;
EchoEmitterHolder();
void initAfterPlacementSceneObj(const al::ActorInitInfo& info) override;
void execute() override;
void emit(const sead::Vector3f& trans, f32 scale, s32 life);
void emitKeep(const void* keeper, const sead::Vector3f& trans, f32 scale, s32 life);
void setToUbo(agl::DrawContext* context, s32 index, const sead::Matrix34f& viewMtx,
const sead::Matrix44f& projMtx) const;
EchoEmitter* tryGetUnUseEmitter() const;
void* tryGetUnUseEmitterKeeper(const void* keeper) const;
const char* getSceneObjName() const override;
private:
char _10[0x58];
};
static_assert(sizeof(EchoEmitterHolder) == 0x68);
namespace rs {
EchoEmitterHolder* tryGetEmitterHolder(const al::IUseSceneObjHolder*);
void initEchoEmitterHolder(const al::LiveActor*);
void emitEcho(const al::LiveActor*, const sead::Vector3f&, f32, s32);
void emitKeepEcho(const al::LiveActor*, const sead::Vector3f&, f32, s32);
} // namespace rs

View file

@ -79,6 +79,7 @@
#include "MapObj/CoinCollectHintObj.h"
#include "MapObj/DoorCity.h"
#include "MapObj/Doshi.h"
#include "MapObj/EchoBlockMapParts.h"
#include "MapObj/ElectricWire/ElectricWire.h"
#include "MapObj/FireDrum2D.h"
#include "MapObj/FixMapPartsBgmChangeAction.h"
@ -283,7 +284,7 @@ const al::NameToCreator<al::ActorCreatorFunction> sProjectActorFactoryEntries[]
{"DoorSnow", nullptr},
{"DoorWarp", nullptr},
{"DoorWarpStageChange", nullptr},
{"EchoBlockMapParts", nullptr},
{"EchoBlockMapParts", al::createActorFunction<EchoBlockMapParts>},
{"EffectObj", al::createActorFunction<al::EffectObj>},
{"EffectObjScale", nullptr},
{"EffectObjAlpha", nullptr},

View file

@ -9,6 +9,7 @@
#include "Item/CoinCollectHolder.h"
#include "Item/CoinCollectWatcher.h"
#include "Layout/KidsModeLayoutAccessor.h"
#include "MapObj/EchoEmitterHolder.h"
#include "MapObj/RouteGuideDirector.h"
#include "Scene/HintPhotoLayoutHolder.h"
@ -39,7 +40,7 @@ static al::ISceneObj* sceneObjCreator(s32 id) {
return nullptr;
case SceneObjID_EchoEmitterHolder:
return nullptr;
return new EchoEmitterHolder();
case SceneObjID_ElectricWireCameraTicketHolder:
return nullptr;