Files
bigmak94andClaude Opus 5.5 bd9bded792 GalaxyQuest: Super Mario Galaxy in VR on Meta Quest 3
A native port built on the Petari decompilation (previous commit): an
HLE platform layer (OS, DVD, GX, audio, input, NAND) under the game's
own code, an OpenXR presentation (a diorama around the player, a giant
screen, the HUD and settings as compositor layers, SpaceWarp, dynamic
resolution), Touch Plus controls, the tools that convert your own game
files (tools/cook, which also takes the few pieces of data the game's
executable holds from your sys/main.dol), and the port's changes to the
decompilation (`git diff petari-base -- decomp`).  README.md explains
installing and building, docs/TECHNICAL.md how it works.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
2026-10-01 01:59:38 +02:00

221 lines
5.6 KiB
C++

#pragma once
#include "Game/Effect/SimpleEffectObj.hpp"
#include "Game/LiveActor/LiveActor.hpp"
#include "Game/LiveActor/Nerve.hpp"
#include <JSystem/JGeometry/TMatrix.hpp>
class NameObjArchiveListCollector;
class ActorCameraInfo;
class ModelObj;
class CameraTargetMtx;
class MorphItemObjNeo : public LiveActor {
public:
MorphItemObjNeo(const char*, s32);
virtual void init(const JMapInfoIter&);
virtual void initAfterPlacement();
virtual void appear();
virtual void kill();
virtual void makeActorDead();
virtual void control();
virtual void calcAndSetBaseMtx();
virtual void attackSensor(HitSensor*, HitSensor*);
virtual bool receiveMsgPlayerAttack(u32, HitSensor*, HitSensor*);
virtual bool receiveOtherMsg(u32, HitSensor*, HitSensor*);
virtual bool isDemo() const;
static void makeArchiveList(NameObjArchiveListCollector*, const JMapInfoIter&);
void glowEffect();
void exeWait();
void exeAppear();
void exeSwitchAppear();
void exeWait2();
void exeFly();
void exeDemo();
/* 0x8c */ u16 mAppearMode;
/* 0x8E */ u16 mAppearFrames;
/* 0x90 */ bool mIsUseSwitch;
/* 0x91 */ bool mIsFloating; // Obj_arg2
/* 0x92 */ bool _92;
/* 0x93 */ u8 mCameraMode; // Obj_arg5
/* 0x94 */ s8 mRotateMode; // Obj_arg6
/* 0x95 */ bool _95; // Obj_arg0
/* 0x96 */ u8 mContainerType; // Obj_arg3
/* 0x97 */ u8 _97;
/* 0x98 */ s8 mIsBind; // Obj_arg1
/* 0x99 */ u8 mShadowType; // Obj_arg4
/* 0x9C */ TVec3f mZRotation;
/* 0xA8 */ s32 mMorphType;
/* 0xAC */ f32 mAngle;
/* 0xB0 */ TVec3f mSpawnPosition;
/* 0xBC */ ActorCameraInfo* mActorCameraInfo;
/* 0xC0 */ ModelObj* mContainerModel;
/* 0xC4 */ ModelObj* mContainerBreakModel;
/* 0xC8 */ TPos3f mBaseMtx;
/* 0xF8 */ CameraTargetMtx* mCameraTargetMtx;
};
class MorphItemNeoHopper : public MorphItemObjNeo {
public:
MorphItemNeoHopper(const char* pName) : MorphItemObjNeo(pName, 1) {
}
};
class MorphItemNeoIce : public MorphItemObjNeo {
public:
MorphItemNeoIce(const char* pName) : MorphItemObjNeo(pName, 4) {
}
};
class MorphItemNeoFire : public MorphItemObjNeo {
public:
MorphItemNeoFire(const char* pName) : MorphItemObjNeo(pName, 5) {
}
};
class MorphItemNeoFoo : public MorphItemObjNeo {
public:
MorphItemNeoFoo(const char* pName) : MorphItemObjNeo(pName, 6) {
}
};
class MorphItemNeoBee : public MorphItemObjNeo {
public:
MorphItemNeoBee(const char* pName) : MorphItemObjNeo(pName, 2) {
}
};
class MorphItemNeoTeresa : public MorphItemObjNeo {
public:
MorphItemNeoTeresa(const char* pName) : MorphItemObjNeo(pName, 3) {
}
};
// Why is this here?
class EffectObjR100F50SyncClipping : public SimpleEffectObj {
public:
EffectObjR100F50SyncClipping(const char* pName) : SimpleEffectObj(pName) {
}
virtual f32 getClippingRadius() const {
return 100.0f;
}
virtual f32 getFarClipDistance() const {
return 50.0f;
}
virtual bool isSyncClipping() const {
return true;
}
};
class EffectObjR500F50 : public SimpleEffectObj {
public:
EffectObjR500F50(const char* pName) : SimpleEffectObj(pName) {
}
virtual f32 getClippingRadius() const {
return 500.0f;
}
virtual f32 getFarClipDistance() const {
return 50.0f;
}
};
class EffectObjR1000F50 : public SimpleEffectObj {
public:
EffectObjR1000F50(const char* pName) : SimpleEffectObj(pName) {
}
virtual f32 getClippingRadius() const {
return 1000.0f;
}
virtual f32 getFarClipDistance() const {
return 50.0f;
}
};
class EffectObj20x20x10SyncClipping : public SimpleEffectObj {
public:
EffectObj20x20x10SyncClipping(const char* pName) : SimpleEffectObj(pName) {
}
virtual f32 getClippingRadius() const {
return 1000.0f;
}
virtual f32 getFarClipDistance() const {
return 50.0f;
}
virtual TVec3f* getClippingCenterOffset() const {
static TVec3f sOffset(0.0f, 200.0f, 0.0f);
return &sOffset;
}
virtual bool isSyncClipping() const {
return true;
}
};
class EffectObj50x50x10SyncClipping : public SimpleEffectObj {
public:
EffectObj50x50x10SyncClipping(const char* pName) : SimpleEffectObj(pName) {
}
virtual f32 getClippingRadius() const {
return 2500.0f;
};
virtual f32 getFarClipDistance() const {
return 50.0f;
};
virtual TVec3f* getClippingCenterOffset() const {
static TVec3f sOffset(0.0f, 200.0f, 0.0f);
return &sOffset;
};
virtual bool isSyncClipping() const {
return true;
};
};
class EffectObj10x10x10SyncClipping : public SimpleEffectObj {
public:
EffectObj10x10x10SyncClipping(const char* pName) : SimpleEffectObj(pName) {
}
virtual f32 getClippingRadius() const {
return 1000.0f;
}
virtual f32 getFarClipDistance() const {
return 50.0f;
}
virtual TVec3f* getClippingCenterOffset() const {
static TVec3f sOffset(0.0f, 580.0f, 0.0f);
return &sOffset;
}
virtual bool isSyncClipping() const {
return true;
}
};
namespace NrvMorphItemObjNeo {
NEW_NERVE(MorphItemObjNeoNrvWait, MorphItemObjNeo, Wait);
NEW_NERVE(MorphItemObjNeoNrvAppear, MorphItemObjNeo, Appear);
NEW_NERVE(MorphItemObjNeoNrvSwitchAppear, MorphItemObjNeo, SwitchAppear);
NEW_NERVE(MorphItemObjNeoNrvWait2, MorphItemObjNeo, Wait);
NEW_NERVE(MorphItemObjNeoNrvFly, MorphItemObjNeo, Fly);
NEW_NERVE(MorphItemObjNeoNrvDemo, MorphItemObjNeo, Wait);
}; // namespace NrvMorphItemObjNeo