Files
bigmak94andClaude Opus 5.5 4b395efe5c Add the Petari decompilation (SMGCommunity/Petari@0a5c660)
The sources of Petari (https://github.com/SMGCommunity/Petari), the
Super Mario Galaxy decompilation by the SMGCommunity, at commit
0a5c6608dc3b4c44a9aa68c2535d1793dc565f02, unchanged but for LF line
endings: LICENSE (as LICENSE-Petari.txt; CC0 1.0), include/, libs/ and
src/.  Left out: the game data Petari keeps from the original
executable, the error message archive (include/Game/System/
ErrorArchive.hpp) and two tables (src/Game/System/GalaxyID.bcsv and
StoryEvent.bcsv); GalaxyQuest's converter takes them from the player's
own disc.  The port's changes follow in the next commit, so
`git diff petari-base -- decomp` shows them.

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

131 lines
3.5 KiB
C++

#pragma once
#include <revolution/types.h>
class CodeTable;
class JMapInfoIter;
class Triangle;
enum CollisionFloorCode {
CollisionFloorCode_Normal,
CollisionFloorCode_Death,
CollisionFloorCode_Slip,
CollisionFloorCode_NoSlip,
CollisionFloorCode_DamageNormal,
CollisionFloorCode_Ice,
CollisionFloorCode_JumpLow,
CollisionFloorCode_JumpMiddle,
CollisionFloorCode_JumpHigh,
CollisionFloorCode_Slider,
CollisionFloorCode_DamageFire,
CollisionFloorCode_JumpNormal,
CollisionFloorCode_FireDance,
CollisionFloorCode_Sand,
CollisionFloorCode_Glass,
CollisionFloorCode_DamageElectric,
CollisionFloorCode_PullBack,
CollisionFloorCode_Sink,
CollisionFloorCode_SinkPoison,
CollisionFloorCode_Slide,
CollisionFloorCode_WaterBottomH,
CollisionFloorCode_WaterBottomM,
CollisionFloorCode_WaterBottomL,
CollisionFloorCode_Wet,
CollisionFloorCode_Needle,
CollisionFloorCode_SinkDeath,
CollisionFloorCode_Snow,
CollisionFloorCode_RailMove,
CollisionFloorCode_AreaMove,
CollisionFloorCode_Press,
CollisionFloorCode_NoStampSand,
CollisionFloorCode_SinkDeathMud,
CollisionFloorCode_Brake,
CollisionFloorCode_GlassIce,
CollisionFloorCode_JumpParasol,
CollisionFloorCode_End,
};
enum CollisionWallCode {
CollisionWallCode_Normal,
CollisionWallCode_NotWallJump,
CollisionWallCode_NotWallSlip,
CollisionWallCode_NotGrab,
CollisionWallCode_GhostThroughCode,
CollisionWallCode_NotSideStep,
CollisionWallCode_Rebound,
CollisionWallCode_Fur,
CollisionWallCode_NoAction,
CollisionWallCode_End,
};
enum CollisionSoundCode {
CollisionSoundCode_Null,
CollisionSoundCode_Soil,
CollisionSoundCode_Lawn,
CollisionSoundCode_Stone,
CollisionSoundCode_Marble,
CollisionSoundCode_WoodThick,
CollisionSoundCode_WoodThin,
CollisionSoundCode_Metal,
CollisionSoundCode_Snow,
CollisionSoundCode_Ice,
CollisionSoundCode_Shallow,
CollisionSoundCode_Sand,
CollisionSoundCode_Beach,
CollisionSoundCode_Carpet,
CollisionSoundCode_Mud,
CollisionSoundCode_Honey,
CollisionSoundCode_End,
};
enum CollisionCameraCode {
CollisionCameraCode_NoThrough,
CollisionCameraCode_Through,
CollisionCameraCode_End,
};
class CollisionCode {
public:
/// @brief Creates a new `CollisionCode`.
CollisionCode();
const char* getFloorCodeString(const Triangle& rTriangle);
const char* getWallCodeString(const Triangle& rTriangle);
const char* getSoundCodeString(const Triangle& rTriangle);
const char* getSoundCodeString(const JMapInfoIter& rIter);
u32 getCameraID(const Triangle& rTriangle);
u32 getCode(const JMapInfoIter& rIter, CodeTable* pCodeTable, const char* pName);
void createFloorTable();
void createWallTable();
void createSoundTable();
void createCameraTable();
u32 getFloorCode(const JMapInfoIter& rIter);
u32 getWallCode(const JMapInfoIter& rIter);
u32 getSoundCode(const JMapInfoIter& rIter);
u32 getCameraCode(const JMapInfoIter& rIter);
u32 getCameraID(const JMapInfoIter& rIter);
/* 0x00 */ CodeTable* mFloorTable;
/* 0x04 */ CodeTable* mWallTable;
/* 0x08 */ CodeTable* mSoundTable;
/* 0x0C */ CodeTable* mCameraTable;
};
class CodeTable {
public:
CodeTable(u32 numMax);
void add(const char* pName, u32 code);
const char* getString(u32 code);
/* 0x00 */ u32 mCodeNum;
/* 0x04 */ u32 mCodeNumMax;
/* 0x08 */ u32* mHashTable;
/* 0x0C */ u32* mCodeTable;
/* 0x10 */ const char** mNameTable;
};