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

150 lines
4.0 KiB
C++

#pragma once
#include "Game/Camera/Camera.hpp"
struct CanmFileHeader {
/* 0x00 */ u8 mMagic[4];
/* 0x04 */ u8 mType[4];
/* 0x08 */ s32 _8;
/* 0x0C */ s32 _C;
/* 0x10 */ s32 _10;
/* 0x14 */ s32 _14;
/* 0x18 */ u32 mNrFrames;
/* 0x1C */ u32 mValueOffset;
};
struct CanmKeyFrameComponentInfo {
/* 0x0 */ u32 mCount;
/* 0x4 */ u32 mOffset;
/* 0x8 */ u32 mType;
};
struct CanmKeyFrameInfo {
/* 0x00 */ CanmKeyFrameComponentInfo mPosX;
/* 0x0C */ CanmKeyFrameComponentInfo mPosY;
/* 0x18 */ CanmKeyFrameComponentInfo mPosZ;
/* 0x24 */ CanmKeyFrameComponentInfo mWatchPosX;
/* 0x30 */ CanmKeyFrameComponentInfo mWatchPosY;
/* 0x3C */ CanmKeyFrameComponentInfo mWatchPosZ;
/* 0x48 */ CanmKeyFrameComponentInfo mTwist;
/* 0x54 */ CanmKeyFrameComponentInfo mFovy;
};
struct CamnFrameComponentInfo {
/* 0x0 */ u32 mCount;
/* 0x4 */ u32 mOffset;
};
struct CanmFrameInfo {
/* 0x00 */ CamnFrameComponentInfo mPosX;
/* 0x08 */ CamnFrameComponentInfo mPosY;
/* 0x10 */ CamnFrameComponentInfo mPosZ;
/* 0x18 */ CamnFrameComponentInfo mWatchPosX;
/* 0x20 */ CamnFrameComponentInfo mWatchPosY;
/* 0x28 */ CamnFrameComponentInfo mWatchPosZ;
/* 0x30 */ CamnFrameComponentInfo mTwist;
/* 0x38 */ CamnFrameComponentInfo mFovy;
};
class BaseCamAnmDataAccessor;
class CamAnmDataAccessor;
class KeyCamAnmDataAccessor;
class CameraAnim : public Camera {
public:
CameraAnim(const char* pName = "\x83\x41\x83\x6a\x83\x81\x81\x5b\x83\x56\x83\x87\x83\x93\x83\x4a\x83\x81\x83\x89");
virtual void reset();
virtual CameraTargetObj* calc();
virtual bool isInterpolationOff() const {
return true;
}
virtual bool isCollisionOff() const {
return true;
}
virtual bool isZeroFrameMoveOff() const {
return true;
}
virtual CamTranslatorBase* createTranslator();
void setParam(u8*, f32);
bool isAnimEnd() const;
static u32 getAnimFrame(u8*);
bool loadBin(u8*);
/* 0x4C */ s32 _4C;
/* 0x50 */ s32 _50;
/* 0x54 */ u32 mNrFrames;
/* 0x58 */ bool mIsKey;
/* 0x5C */ f32 mSpeed;
/* 0x60 */ f32 mCurrentFrame;
/* 0x64 */ BaseCamAnmDataAccessor* mFileDataAccessor;
/* 0x68 */ CamAnmDataAccessor* mDataAccessor;
/* 0x6C */ KeyCamAnmDataAccessor* mKeyDataAccessor;
/* 0x70 */ u32 mNrValues;
/* 0x74 */ s32 _74;
/* 0x78 */ u8* mFileData;
/* 0x7C */ bool mIsPaused;
};
class BaseCamAnmDataAccessor {
public:
inline BaseCamAnmDataAccessor() {
}
virtual inline ~BaseCamAnmDataAccessor() {
}
virtual void set(void*, void*) = 0;
virtual void getPos(TVec3f*, f32) const = 0;
virtual void getWatchPos(TVec3f*, f32) const = 0;
virtual f32 getTwist(f32) const = 0;
virtual f32 getFovy(f32) const = 0;
};
class CamAnmDataAccessor : public BaseCamAnmDataAccessor {
public:
inline CamAnmDataAccessor() {
mInfo = nullptr;
mValues = nullptr;
}
virtual void set(void*, void*);
virtual void getPos(TVec3f*, f32) const;
virtual void getWatchPos(TVec3f*, f32) const;
virtual f32 getTwist(f32) const;
virtual f32 getFovy(f32) const;
f32 get(f32, u32, u32) const;
f32 getValue(int index) const {
return mValues[index];
}
/* 0x4 */ CanmFrameInfo* mInfo;
/* 0x8 */ f32* mValues;
};
class KeyCamAnmDataAccessor : public BaseCamAnmDataAccessor {
public:
inline KeyCamAnmDataAccessor() {
mInfo = nullptr;
mValues = nullptr;
}
virtual void set(void*, void*);
virtual void getPos(TVec3f*, f32) const;
virtual void getWatchPos(TVec3f*, f32) const;
virtual f32 getTwist(f32) const;
virtual f32 getFovy(f32) const;
f32 get(f32, u32, u32, u32) const;
u32 searchKeyFrameIndex(f32, u32, u32, u32) const;
f32 get3f(f32, u32, u32) const;
f32 get4f(f32, u32, u32) const;
f32 calcHermite(f32, f32, f32, f32, f32, f32, f32) const;
/* 0x4 */ CanmKeyFrameInfo* mInfo;
/* 0x8 */ f32* mValues;
};