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

1118 lines
31 KiB
C++

#pragma once
#include "Game/Player/MarioModule.hpp"
#include "Game/Util/TriangleFilter.hpp"
#include <JSystem/JGeometry/TMatrix.hpp>
class AreaObj;
class CubeCameraArea;
class FloorCode;
class GravityInfo;
class HashSortTable;
class HitInfo;
class HitSensor;
class MarioAbyssDamage;
class MarioActor;
class MarioBlown;
class MarioBump;
class MarioBury;
class MarioClimb;
class MarioCrush;
class MarioDamage;
class MarioDarkDamage;
class MarioFaint;
class MarioFireDamage;
class MarioFireDance;
class MarioFireRun;
class MarioFlip;
class MarioFlow;
class MarioFoo;
class MarioFpView;
class MarioFreeze;
class MarioFrontStep;
class MarioHang;
class MarioMagic;
class MarioModuleTask;
class MarioMove;
class MarioParalyze;
class MarioRabbit;
class MarioRecovery;
class MarioSideStep;
class MarioSkate;
class MarioSlider;
class MarioState;
class MarioStep;
class MarioStick;
class MarioStun;
class MarioSukekiyo;
class MarioSwim;
class MarioTalk;
class MarioTeresa;
class MarioWait;
class MarioWall;
class MarioWarp;
class Triangle;
struct SoundList;
class Mario : public MarioModule {
public:
enum SeVersion {
SeVersion_NORMAL = 0,
SeVersion_DARK = 1,
};
typedef bool (Mario::*Task)(u32);
Mario(MarioActor*);
virtual bool postureCtrl(MtxPtr);
void initMember();
void updateAndClearStrideParameter();
void checkKeyLock();
void updateTimers();
void updateMorphResetTimer();
void doExtraServices();
bool isEnableCheckGround() NO_INLINE;
void setGroundNorm(const TVec3f&);
void checkForceGrounding();
void updateGroundInfo();
void fixHeadFrontVecByGravity();
bool isNonFixHeadVec() const;
void createMtxDir(MtxPtr, const TVec3f&, const TVec3f&, const TVec3f&);
void createDirectionMtx(MtxPtr);
bool createCorrectionMtx(MtxPtr, TVec3f*);
void createAngleMtx(MtxPtr, bool);
void slopeTiltHead(TVec3f*);
void fixFrontVecByGravity();
void fixFrontVecFromUpSide();
void fixSideVecFromFrontUp();
void setSideVec(const TVec3f&);
void setHeadVec(const TVec3f&);
void setFrontVec(const TVec3f&);
void setFrontVecKeepUp(const TVec3f&, f32);
void setFrontVecKeepUp(const TVec3f&, u32);
void setFrontVecKeepUp(const TVec3f&);
void setFrontVecKeepUpAngle(const TVec3f&, f32);
void setFrontVecKeepSide(const TVec3f&);
void setHeadAndFrontVecFromRotate(const TVec3f&);
void forceSetHeadVecKeepSide(const TVec3f&);
void setGravityVec(const TVec3f&);
void draw() const;
void addTrans(const TVec3f&, const char*);
void setTrans(const TVec3f&, const char*);
bool isEnableRush() const;
bool isForceStopRush() const;
bool isInvincible() const;
bool isCeiling() const;
void inputStick();
void updateSoundCode();
const TVec3f& getShadowNorm() const;
const TVec3f& getAirGravityVec() const;
const TVec3f getAirFrontVec() const;
const TVec3f* getGravityVec() const;
void initAfterConst();
void writeBackPhyisicalVector();
void update();
void updateLookOfs();
void actionMain();
void touchWater();
bool isBlendWaitGround() const;
void checkSpecialWaitAnimation();
void resetSleepTimer();
void connectToClimb();
bool isIgnoreTriangle(const Triangle*);
void checkBaseTransBall();
void createAtField(bool, f32);
void doSwimmingHitCheck(const HitInfo*, u32);
void doSpinPunchAroundPolygons();
void checkMap();
f32 calcDistToCeil(bool);
f32 calcDistToCeilOnPress();
f32 calcDistToCeilHead();
void fixTransBetweenWall(const TVec3f&, const TVec3f&);
f32 calcDistWidth();
void updateCameraPolygon();
void setCameraPolygon(const Triangle*);
void checkAllWall(const TVec3f&, f32);
void calcFrontFloor();
const TVec3f& getWallNorm() const;
const TVec3f& getSideWallNorm() const;
const TVec3f& getFrontWallNorm() const;
const TVec3f& getBackWallNorm() const;
const TVec3f& getWallPos() const;
const Triangle* getWallPolygon() const;
const Triangle* getGroundPolygon() const;
void updateFloorCode();
void updateWallFloorCode();
void saveLastSafetyTrans();
void setNotSafetyTimer();
const TVec3f* getLastSafetyTrans(TVec3f*) const;
bool checkCurrentFloorCodeSevere(u32) const;
bool isCurrentFloorSink() const;
bool isCurrentFloorSand() const;
bool isCurrentShadowFloorDangerAction() const;
void checkBaseTransPoint();
void checkHeadPoint();
void calcShadowPos();
bool updateBinderInfo();
bool isThroughWall(const Triangle*) const;
bool checkGround();
CubeCameraArea* getCameraCubeCode() const;
void updateCubeCode();
bool isDamaging() const;
bool damageLarge(const TVec3f&);
void decDamageAfterTimer();
bool checkDamage();
u16 getDamageAfterTimer() const;
bool damageFloorCheck();
bool damageWallCheck();
bool damagePolygonCheck(const Triangle*);
bool flipLarge(const TVec3f&);
bool isEnableAddDamage() const;
bool damage(const TVec3f&);
bool doAbyssDamage();
void connectToFireRun();
bool doFireDanceWithInitialDamage(u8);
bool doFireObjHitWithInitialDamage();
bool doNeedleWithInitialDamage(u8);
bool doNeedleWithInitialDamage(const Triangle*);
bool doNeedle(const Triangle*);
bool doFireDance();
void checkKarikariDamage();
bool doDarkDamage();
bool doParalyze();
bool doFreeze();
bool requestCrush();
bool tryCrush();
bool doFlipWeak(const TVec3f&);
bool faint(const TVec3f&);
bool doFlipJump(const TVec3f&);
bool doFlipBackRoll(const TVec3f&);
bool doFlipLarge(const TVec3f&);
bool doFlipRot(const TVec3f&);
bool doFrontStep();
void beeMarioOnGround();
bool beeMarioOnAir();
bool blown(const TVec3f&);
bool taskOnEffectCheck(u32);
bool doFlow();
void tryStartFoo();
bool isRising() const;
void checkWallRiseAndSlipFront();
void tryJump();
void tryTurnJump();
void trySquatJump();
void tryBackJump();
void tryTornadoJump();
void startTornadoCentering(HitSensor*);
bool taskOnTornadoCentering(u32);
void trySpinJump(u8);
void tryForceJumpDelay(const TVec3f&);
void tryFreeJumpDelay(const TVec3f&);
void tryForceJump(const TVec3f&, bool);
void tryForceFreeJump(const TVec3f&);
void tryForcePowerJump(const TVec3f&, bool);
void tryFreeJump(const TVec3f&, bool);
void tryWallJump(const TVec3f&, bool);
void tryStickJump(const TVec3f&);
void trySlipUpJump();
void tryHangSlipUp();
void tryDrop();
bool isDigitalJump() const NO_INLINE;
void initActiveJumpVec();
void initJumpParam();
bool isEnableFutureJump() const;
void procJump(bool);
void checkWallRising() NO_INLINE;
void checkWallJumpHit();
void decideSlipUp();
void moveWallSlide(f32);
bool jumpToHipDrop();
void procHipDrop();
void doAirWalk();
void stopJump();
void cancelTornadoJump();
void setRocketBooster(const TVec3f&, f32, u16);
void procRocketBooster();
bool isSoftLandingFloor() const;
void checkAndTryForceJump();
void doLanding();
void startSlidingTask(u32, f32, u16);
bool taskOnSlide(u32);
bool taskOnWallRising(u32);
void incAirWalkTimer();
void mainMove();
bool isEnableTurn();
void recordTurnSlipAngle();
f32 decideInertia(f32);
f32 decideInertiaOnIce(f32);
f32 decideInertiaOnSlip(f32);
void calcShadowDir(const TVec3f&, TVec3f*);
bool retainMoveDir(f32, f32, TVec3f*);
void calcMoveDir(f32, f32, TVec3f*, bool);
bool checkLockOnHoming();
void doLockOnHoming();
void fixPositionInTower();
void check2DMode();
void calcMoveDir2D(f32, f32, TVec3f*);
void calcShadowDir2D(const TVec3f&, TVec3f*);
void stick2Dadjust(f32&, f32&);
void set2Dmode(bool);
void beforeJumping2D();
void afterLanding2D();
void clear2DStick();
void set25Dmode(const AreaObj*);
void update25Dmode();
void updateAxisFromMode(u8);
void calcMoveDir25D(f32, f32, TVec3f*);
bool checkPressDamage();
bool checkVerticalPress(bool);
bool checkSidePressPre();
bool checkSidePress();
void startRabbitMode();
void endRabbitMode();
bool checkWallJumpCode();
bool doSideStep();
bool isSkatableFloor() const;
bool doSkate();
u32 initSoundTable(SoundList* list, u32);
void initSound();
void playSoundJ(const char*, s32);
void stopSoundJ(const char*, u32);
void startBas(const char*, bool, f32, f32);
bool isRunningBas(const char*) const;
void skipBas(f32);
void playSoundTeresaFlying();
void playSoundTrampleCombo(u8);
void setSeVersion(u32);
void checkOnimasu(const HitSensor*);
bool isDossun(const Triangle*) const;
bool isStageCameraRotate2D() const;
bool isNoWalkFallOnDossun() const;
bool isNotReflectGlassGround() const;
bool isUseAnotherMovingPolygon() const;
bool isUseFooSpecialGravity(const TVec3f&, TVec3f*) const;
void updateOnimasu();
bool isHeadPushEnableArea() const;
bool isOnimasuBinderPressSkip() const;
void checkTornado();
void resetTornado();
void calcTornadoTilt();
void reflectWallOnSpinning(const TVec3f&, u16);
void forceStopTornado();
void startRotationTask(u32);
void doSpinWallEffect();
bool taskOnRotation(u32);
void sendStateMsg(u32);
bool updatePosture(MtxPtr);
void changeStatus(MarioState*);
void closeStatus(MarioState*);
u32 getCurrentStatus() const;
bool isStatusActive(u32) const;
void checkBeeStick();
void tryBeeStick(const HitSensor*);
void startTalk(const LiveActor*);
void endTalk();
void setLastNonFixMoveVec(const TVec3f&);
bool isWalling() const;
void checkWallStick();
u8 checkStickWallSide();
s32 checkStickFrontBack();
bool fixWallingPosition(bool);
void fixWallingDir(bool);
bool fixWallingTop();
bool checkWallFloorCode(u16) const;
bool checkWallCode(const char*, bool) const;
bool checkWallCodeNorm(u16, TVec3f*, bool) const;
void setWallCancel();
void keepDistFrontWall();
bool isEnableStickWall();
bool fixWallingDist();
bool isInhibitWall() const;
void tryWallPunch();
bool isHanging() const;
bool fixHangDir(const TVec3f&, TVec3f*);
bool isEnableBackHang();
bool isEnableSideHang();
void checkHang();
bool isEnableHang();
bool isSwimming() const;
bool forceStartSwimAndShoot(const TVec3f&);
bool forceExitSwim();
bool checkStartSwim();
void startSwim();
bool checkWaterDamage();
void clearSlope();
bool isEnableSlopeMove() const;
void moveSlopeSlide();
void slopeMove();
bool taskOnSlipTurn(u32);
void lockGroundCheck(void*, bool);
void unlockGroundCheck(void*);
bool isUseSimpleGroundCheck() const;
bool checkGroundOnSlope();
void stopWalk();
void cancelSquatMode();
f32 getTargetWalkSpeed() const;
void decideSquatWalkAnimation();
void decideWalkSpeed();
void decideWalkAnimation();
void doBrakingAnimation();
void checkWallPush();
void updateBrakeAnimation();
void updateWalkSpeed();
void decideOnIceAnimation();
void updateOnSand();
void updateOnPoison();
void updateOnWater();
bool doRecovery();
bool isSliderFloor() const NO_INLINE;
bool checkSliderMode() const;
void startSlider();
void checkStep();
void startStep(const TVec3f&);
void checkBump();
void startBump(const TVec3f&);
void checkEnforceMove();
void checkEnforceMoveInner();
void recordRelativePosition();
void invalidateRelativePosition();
TPos3f* getMoveBaseMtx() const;
u32 moveRelativePosition(u32);
u32 moveRelativePositionWall();
void recordLastGround();
void getLastGroundPos(TVec3f*) const;
const TVec3f* getLastGroundEdgeNrm(u32) const;
u32 getLastGroundEdgeIndex(const TVec3f&, const TVec3f&) const;
void pushedByReaction();
void addReaction(const TVec3f&);
void tryPushToVelocity();
void push(const TVec3f&);
void push2(const TVec3f&);
void powerAreaMove();
void powerRailMove();
void recordJumpEnforceMove();
void doEnforceJump(f32);
void pushedByWind();
void delTask(MarioModuleTask*);
void execTask();
void drawTask() const;
void initTask();
bool isActiveTask(Task);
bool isActiveTaskID(u32);
bool pushTask(Task, u32);
void popTask(Task);
void callExtraTasks(u32);
void startHandy();
bool taskOnHipDropBlurHopper(u32);
bool taskOnHipDropBlur(u32);
bool taskOnHipDropSlide(u32);
bool taskOnFreezeEnd(u32);
void startFreezeEnd();
bool taskOnHandy(u32);
void startHipDropBlur();
void startHipDropSlide(const HitSensor*);
void startJumpDropSlide(const HitSensor*);
void startTeresaMode();
bool getHitWallNorm(TVec3f*);
void resetTeresaMode();
void doTeresaReflection(const TVec3f&, bool);
void startTeresaDisappear();
void stopPunch();
void startMagic();
bool doObjWarp(LiveActor*);
bool doPointWarp(const TVec3f&, const TVec3f&, s32);
bool isVisibleRecoveryWarpBubble() const;
void doCubeWarp();
bool doPointWarpRecovery(const TVec3f&, const TVec3f&);
bool isDisableStayHere() const;
bool isDisableFpViewMode() const;
void tryFpViewMode();
void stick2DadjustGround(f32&, f32&);
void calcDir2D(f32, f32, TVec3f*);
// instruction comments to make it easier to identify each bit
struct MovementStates {
/* 0x00 */
#if defined(__MWERKS__) || defined(__BIG_ENDIAN__)
unsigned jumping : 1; // _0 (srwi rX, rX, 31)
unsigned _1 : 1; // extrwi rX, rX, 1, 1
unsigned _2 : 1;
unsigned turning : 1; // _3
unsigned _4 : 1;
unsigned _5 : 1;
unsigned _6 : 1;
unsigned _7 : 1;
unsigned _8 : 1;
unsigned _9 : 1;
unsigned _A : 1; // extrwi rX, rX, 1, 10
unsigned _B : 1;
unsigned _C : 1;
unsigned _D : 1;
unsigned _E : 1;
unsigned _F : 1;
unsigned _10 : 1; // rlwinm rX, rX, 0, 17, 15
unsigned _11 : 1;
unsigned _12 : 1;
unsigned _13 : 1;
unsigned _14 : 1;
unsigned _15 : 1;
unsigned debugMode : 1; // _16
unsigned _17 : 1; // extrwi rX, rX, 1, 23
unsigned _18 : 1; // rlwinm rX, rX, 0, 25, 23
unsigned _19 : 1; // extrwi rX, rX, 1, 25
unsigned _1A : 1; // extrwi rX, rX, 1, 26
unsigned _1B : 1;
unsigned _1C : 1;
unsigned _1D : 1;
unsigned digitalJump : 1; // _1E
unsigned _1F : 1;
/* 0x04 */
unsigned _20 : 1;
unsigned _21 : 1;
unsigned _22 : 1;
unsigned _23 : 1; // extrwi rX, rX, 1, 3
unsigned _24 : 1;
unsigned _25 : 1;
unsigned _26 : 1;
unsigned _27 : 1;
unsigned _28 : 1;
unsigned _29 : 1;
unsigned _2A : 1;
unsigned _2B : 1;
unsigned _2C : 1;
unsigned _2D : 1;
unsigned _2E : 1;
unsigned _2F : 1;
unsigned _30 : 1;
unsigned _31 : 1;
unsigned _32 : 1;
unsigned _33 : 1;
unsigned _34 : 1;
unsigned _35 : 1;
unsigned _36 : 1;
unsigned _37 : 1;
unsigned _38 : 1; // rlwimi rX, rX, 7, 24, 24
unsigned _39 : 1;
unsigned _3A : 1;
unsigned _3B : 1;
unsigned _3C : 1;
unsigned _3D : 1;
unsigned _3E : 2; // clrrwi rX, rX, 2
#else
unsigned _1F : 1;
unsigned digitalJump : 1; // _1E
unsigned _1D : 1;
unsigned _1C : 1;
unsigned _1B : 1;
unsigned _1A : 1; // extrwi rX, rX, 1, 26
unsigned _19 : 1; // extrwi rX, rX, 1, 25
unsigned _18 : 1; // rlwinm rX, rX, 0, 25, 23
unsigned _17 : 1; // extrwi rX, rX, 1, 23
unsigned debugMode : 1; // _16
unsigned _15 : 1;
unsigned _14 : 1;
unsigned _13 : 1;
unsigned _12 : 1;
unsigned _11 : 1;
unsigned _10 : 1; // rlwinm rX, rX, 0, 17, 15
unsigned _F : 1;
unsigned _E : 1;
unsigned _D : 1;
unsigned _C : 1;
unsigned _B : 1;
unsigned _A : 1; // extrwi rX, rX, 1, 10
unsigned _9 : 1;
unsigned _8 : 1;
unsigned _7 : 1;
unsigned _6 : 1;
unsigned _5 : 1;
unsigned _4 : 1;
unsigned turning : 1; // _3
unsigned _2 : 1;
unsigned _1 : 1; // extrwi rX, rX, 1, 1
unsigned jumping : 1; // _0 (srwi rX, rX, 31)
unsigned _3E : 2; // clrrwi rX, rX, 2
unsigned _3D : 1;
unsigned _3C : 1;
unsigned _3B : 1;
unsigned _3A : 1;
unsigned _39 : 1;
unsigned _38 : 1; // rlwimi rX, rX, 7, 24, 24
unsigned _37 : 1;
unsigned _36 : 1;
unsigned _35 : 1;
unsigned _34 : 1;
unsigned _33 : 1;
unsigned _32 : 1;
unsigned _31 : 1;
unsigned _30 : 1;
unsigned _2F : 1;
unsigned _2E : 1;
unsigned _2D : 1;
unsigned _2C : 1;
unsigned _2B : 1;
unsigned _2A : 1;
unsigned _29 : 1;
unsigned _28 : 1;
unsigned _27 : 1;
unsigned _26 : 1;
unsigned _25 : 1;
unsigned _24 : 1;
unsigned _23 : 1; // extrwi rX, rX, 1, 3
unsigned _22 : 1;
unsigned _21 : 1;
unsigned _20 : 1;
#endif
};
struct DrawStates {
#if defined(__MWERKS__) || defined(__BIG_ENDIAN__)
unsigned _0 : 1;
unsigned _1 : 1;
unsigned _2 : 1;
unsigned _3 : 1;
unsigned _4 : 1;
unsigned _5 : 1;
unsigned _6 : 1;
unsigned _7 : 1;
unsigned _8 : 1;
unsigned _9 : 1;
unsigned _A : 1;
unsigned _B : 1;
unsigned _C : 1;
unsigned _D : 1;
unsigned _E : 1;
unsigned _F : 1;
unsigned _10 : 1;
unsigned _11 : 1;
unsigned mIsUnderwater : 1;
unsigned _13 : 1;
unsigned _14 : 1;
unsigned _15 : 1;
unsigned _16 : 1;
unsigned _17 : 1;
unsigned _18 : 1;
unsigned _19 : 1;
unsigned _1A : 1;
unsigned _1B : 1;
unsigned _1C : 1;
unsigned _1D : 1;
unsigned _1E : 1;
unsigned _1F : 1;
#else
unsigned _1F : 1;
unsigned _1E : 1;
unsigned _1D : 1;
unsigned _1C : 1;
unsigned _1B : 1;
unsigned _1A : 1;
unsigned _19 : 1;
unsigned _18 : 1;
unsigned _17 : 1;
unsigned _16 : 1;
unsigned _15 : 1;
unsigned _14 : 1;
unsigned _13 : 1;
unsigned mIsUnderwater : 1;
unsigned _11 : 1;
unsigned _10 : 1;
unsigned _F : 1;
unsigned _E : 1;
unsigned _D : 1;
unsigned _C : 1;
unsigned _B : 1;
unsigned _A : 1;
unsigned _9 : 1;
unsigned _8 : 1;
unsigned _7 : 1;
unsigned _6 : 1;
unsigned _5 : 1;
unsigned _4 : 1;
unsigned _3 : 1;
unsigned _2 : 1;
unsigned _1 : 1;
unsigned _0 : 1;
#endif
};
inline const MovementStates& getMovementStates() const {
return mMovementStates;
}
inline const DrawStates& getDrawStates() const {
return mDrawStates;
}
inline const DrawStates& getPrevDrawStates() const {
return mPrevDrawStates;
}
const TVec3f& getUpVec() const {
return _1FC;
}
const TVec3f& getFrontVec() const {
return mFrontVec;
}
const TVec3f& getJumpVec() const {
return mJumpVec;
}
inline void setJumpVec(const TVec3f& rVec) {
mJumpVec = rVec;
}
inline void resetInline() {
_74C = 0.0f;
_750 = 0;
_754 = 0;
}
inline void set3BC(u16 val) {
_3BC = val;
}
inline void set41E(u16 val) {
_41E = val;
}
union {
/* 0x008 */ MovementStates mMovementStates;
struct {
/* 0x008 */ u32 mMovementStates_LOW_WORD;
/* 0x00C */ u32 mMovementStates_HIGH_WORD;
};
};
union {
/* 0x010 */ MovementStates _10;
struct {
/* 0x010 */ u32 _10_LOW_WORD;
/* 0x014 */ u32 _10_HIGH_WORD;
};
};
union {
/* 0x018 */ DrawStates mDrawStates;
/* 0x018 */ u32 mDrawStates_WORD;
};
union {
/* 0x01C */ DrawStates _1C;
/* 0x01C */ u32 _1C_WORD;
};
union {
/* 0x020 */ MovementStates _20;
struct {
/* 0x20 */ u32 _20_LOW_WORD;
/* 0x24 */ u32 _20_HIGH_WORD;
};
};
/* 0x028 */ u32 _28;
/* 0x02C */ u32 _2C;
/* 0x030 */ DrawStates mPrevDrawStates;
// FAKE
/* 0x034 */ u32 _34;
// NOT FAKE
/* 0x038 */ f32 _38;
/* 0x03C */ f32 _3C;
/* 0x040 */ TVec3f _40;
/* 0x04C */ TVec3f _4C;
/* 0x058 */ TVec3f _58;
/* 0x064 */ TMtx34f _64;
/* 0x094 */ TMtx34f _94;
/* 0x0C4 */ TMtx34f _C4;
/* 0x0F4 */ TMtx34f _F4;
/* 0x124 */ f32 _124;
/* 0x128 */ f32 _128;
/* 0x12C */ u32 _12C;
/* 0x130 */ TVec3f mPosition;
/* 0x13C */ TVec3f _13C;
/* 0x148 */ TVec3f _148;
/* 0x154 */ TVec3f _154;
/* 0x160 */ TVec3f mVelocity;
/* 0x16C */ TVec3f _16C;
/* 0x178 */ TVec3f mVelocityAfter;
/* 0x184 */ TVec3f _184;
/* 0x190 */ TVec3f _190;
/* 0x19C */ TVec3f _19C;
/* 0x1A8 */ TVec3f _1A8;
/* 0x1B4 */ TVec3f _1B4;
/* 0x1C0 */ TVec3f mStickPos;
/* 0x1CC */ TVec3f mWorldPadDir;
/* 0x1D8 */ TVec3f mAirGravityVec;
/* 0x1E4 */ TVec3f _1E4;
/* 0x1F0 */ TVec3f mHeadVec;
/* 0x1FC */ TVec3f _1FC;
/* 0x208 */ TVec3f mFrontVec;
/* 0x214 */ TVec3f _214;
/* 0x220 */ TVec3f _220;
/* 0x22C */ TVec3f _22C;
/* 0x238 */ TVec3f _238;
/* 0x244 */ TVec3f _244;
/* 0x250 */ TVec3f _250;
/* 0x25C */ TVec3f _25C;
/* 0x268 */ TVec3f _268;
/* 0x274 */ u8 _274;
/* 0x278 */ f32 mWalkSpeed;
/* 0x27C */ f32 mPrevAnimFrame;
/* 0x280 */ f32 _280;
/* 0x284 */ TVec3f _284;
/* 0x290 */ TVec3f _290;
/* 0x29C */ TVec3f _29C;
/* 0x2A8 */ TVec3f _2A8;
/* 0x2B4 */ f32 _2B4;
/* 0x2B8 */ TVec3f _2B8;
/* 0x2C4 */ TVec3f _2C4;
/* 0x2D0 */ f32 _2D0;
/* 0x2D4 */ TVec3f mJumpVec;
/* 0x2E0 */ TVec3f _2E0;
/* 0x2EC */ TVec3f _2EC;
/* 0x2F8 */ TVec3f _2F8;
/* 0x304 */ TVec3f _304;
/* 0x310 */ TVec3f mSideVec;
/* 0x31C */ TVec3f mShadowPos;
/* 0x328 */ TVec3f _328;
/* 0x334 */ TVec3f _334;
/* 0x340 */ f32 _340;
/* 0x344 */ TVec3f _344; // left/right?
/* 0x350 */ TVec3f _350;
/* 0x35C */ TVec3f _35C;
/* 0x368 */ TVec3f _368;
/* 0x374 */ TVec3f _374;
/* 0x380 */ TVec3f _380;
/* 0x38C */ TVec3f _38C;
/* 0x398 */ TVec3f _398;
/* 0x3A4 */ TVec3f _3A4;
/* 0x3B0 */ TVec3f _3B0;
/* 0x3BC */ u16 _3BC;
/* 0x3BE */ u16 _3BE;
/* 0x3C0 */ u16 _3C0;
/* 0x3C2 */ u16 _3C2;
/* 0x3C4 */ u16 _3C4;
/* 0x3C6 */ u16 _3C6;
/* 0x3C8 */ u16 _3C8;
/* 0x3CA */ u16 _3CA;
/* 0x3CC */ u16 _3CC;
/* 0x3CE */ u16 _3CE; // a timer
/* 0x3D0 */ u16 _3D0;
/* 0x3D2 */ u16 _3D2;
/* 0x3D4 */ u16 _3D4;
/* 0x3D8 */ TVec3f _3D8;
/* 0x3E4 */ TVec3f _3E4;
/* 0x3F0 */ f32 _3F0;
/* 0x3F4 */ f32 _3F4;
/* 0x3F8 */ u16 _3F8;
/* 0x3FA */ u16 _3FA;
/* 0x3FC */ u16 _3FC;
/* 0x3FE */ u16 _3FE;
/* 0x400 */ u16 _400;
/* 0x402 */ u16 _402;
/* 0x404 */ u16 _404;
/* 0x406 */ u16 _406;
/* 0x408 */ u16 _408;
/* 0x40A */ u16 _40A;
/* 0x40C */ u16 _40C;
/* 0x40E */ u16 _40E;
/* 0x410 */ u16 _410;
/* 0x412 */ u16 _412;
/* 0x414 */ u16 _414; // a timer
/* 0x416 */ u16 mMorphResetTimer;
/* 0x418 */ u16 _418;
/* 0x41A */ u16 _41A;
/* 0x41C */ u16 _41C;
/* 0x41E */ u16 _41E;
/* 0x420 */ u16 _420;
/* 0x422 */ u16 _422;
/* 0x424 */ u16 _424;
/* 0x426 */ u16 _426;
/* 0x428 */ u16 _428;
/* 0x42A */ u16 _42A;
/* 0x42C */ u16 _42C;
/* 0x430 */ u32 _430;
/* 0x434 */ u16 _434; // a timer
/* 0x436 */ u16 _436;
/* 0x438 */ u16 _438;
/* 0x43A */ u16 _43A;
/* 0x43C */ TVec3f _43C; // front?
/* 0x448 */ TVec3f _448;
/* 0x454 */ f32 _454;
/* 0x458 */ TriangleFilterDelegator< Mario >* _458;
/* 0x45C */ Triangle* _45C;
/* 0x460 */ Triangle* _460;
/* 0x464 */ Triangle* mGroundPolygon;
/* 0x468 */ Triangle* _468;
/* 0x46C */ Triangle* _46C;
/* 0x470 */ Triangle* _470;
/* 0x474 */ Triangle* _474;
/* 0x478 */ Triangle* mTmpPolygon;
/* 0x47C */ Triangle* _47C;
/* 0x480 */ Triangle* _480;
/* 0x484 */ Triangle* _484;
/* 0x488 */ f32 mVerticalSpeed;
/* 0x48C */ TVec3f mGroundPos;
/* 0x498 */ TVec3f _498;
/* 0x4A4 */ TVec3f _4A4;
/* 0x4B0 */ TVec3f _4B0;
/* 0x4BC */ TVec3f _4BC;
/* 0x4C8 */ Triangle* _4C8;
/* 0x4CC */ Triangle* mFrontWallTriangle;
/* 0x4D0 */ Triangle* mBackWallTriangle;
/* 0x4D4 */ Triangle* mSideWallTriangle;
/* 0x4D8 */ Triangle* _4D8;
/* 0x4DC */ Triangle* _4DC;
/* 0x4E0 */ f32 _4E0;
/* 0x4E4 */ f32 _4E4;
/* 0x4E8 */ TVec3f _4E8;
/* 0x4F4 */ TVec3f _4F4;
// FAKE
/* 0x500 */ TVec3f _500;
// NOT FAKE
/* 0x50C */ TVec3f _50C;
/* 0x518 */ TVec3f _518;
/* 0x524 */ f32 _524;
/* 0x528 */ f32 _528;
/* 0x52C */ f32 _52C;
/* 0x530 */ f32 _530;
/* 0x534 */ u16 _534;
/* 0x538 */ f32 _538;
/* 0x53C */ f32 _53C;
/* 0x540 */ f32 mYAngleOffset;
/* 0x544 */ u16 _544;
/* 0x548 */ f32 _548;
/* 0x54C */ TVec3f _54C;
/* 0x558 */ u32 _558;
/// FAKE
/* 0x55C */ u32 _55C;
/* 0x560 */ u32 _560;
// NOT FAKE
/* 0x564 */ s32 _564;
/* 0x568 */ CubeCameraArea* _568;
/* 0x56C */ AreaObj* _56C;
/* 0x570 */ u8 _570;
/* 0x574 */ void* _574;
/* 0x578 */ u32 _578;
/* 0x57C */ Triangle* _57C[0x20];
/* 0x5FC */ const HitSensor* _5FC;
/* 0x600 */ TVec3f _600;
/* 0x60C */ u8 _60C;
/* 0x60D */ bool _60D;
/* 0x60E */ u8 _60E;
/* 0x60F */ u8 _60F;
/* 0x610 */ u8 _610;
/* 0x611 */ u8 _611;
/* 0x614 */ f32 _614;
/* 0x618 */ f32 _618;
/* 0x61C */ f32 _61C;
/* 0x620 */ f32 _620;
/* 0x624 */ bool _624;
/* 0x628 */ TVec3f _628;
/* 0x634 */ f32 _634;
/* 0x638 */ u8 _638;
/* 0x63C */ TVec3f mSide2D;
/* 0x648 */ TVec3f mUp2D;
/* 0x654 */ TVec3f mNormal2D;
/* 0x660 */ TVec3f _660;
/* 0x66C */ bool _66C;
/* 0x670 */ TVec3f _670;
/* 0x67C */ TVec3f _67C;
/* 0x688 */ TVec3f _688;
/* 0x694 */ TVec3f _694;
/* 0x6A0 */ TVec3f _6A0;
/* 0x6AC */ u8 _6AC;
/* 0x6AD */ u8 _6AD;
/* 0x6B0 */ TVec3f _6B0;
/* 0x6BC */ TVec3f _6BC;
/* 0x6C8 */ TVec2f _6C8;
/* 0x6D0 */ TVec3f _6D0;
/* 0x6DC */ TVec3f _6DC;
/* 0x6E8 */ TVec3f _6E8;
/* 0x6F4 */ TVec3f _6F4;
/* 0x700 */ TVec3f _700;
/* 0x70C */ TVec3f _70C;
/* 0x718 */ f32 _718;
/* 0x71C */ u8 mTargetWalkSpeedIndex;
/* 0x71D */ u8 _71D;
/* 0x71E */ u8 _71E;
/* 0x71F */ u8 _71F;
/* 0x720 */ const char* _720;
/* 0x724 */ const char* _724;
/* 0x728 */ const char* _728;
/* 0x72C */ f32 _72C;
/* 0x730 */ HitSensor* _730;
/* 0x734 */ u8 mIceAnimFoot;
/* 0x735 */ u8 mSinkTimer;
/* 0x738 */ f32 _738;
/* 0x73C */ TVec3f _73C;
/* 0x748 */ u8 mPoisonTimer;
/* 0x74C */ f32 _74C;
/* 0x750 */ u32 _750;
/* 0x754 */ u32 _754;
/* 0x758 */ MarioWall* mWall;
/* 0x75C */ TVec3f _75C;
/* 0x768 */ MarioStick* mStick;
/* 0x76C */ u16 _76C;
/* 0x770 */ f32 _770;
/* 0x774 */ u16 _774;
/* 0x778 */ MarioRabbit* mRabbit;
/* 0x77C */ MarioFoo* mFoo;
/* 0x780 */ MarioSukekiyo* mSukekiyo;
/* 0x784 */ MarioBury* mBury;
/* 0x788 */ MarioWait* mWait;
/* 0x78C */ MarioClimb* mClimb;
/* 0x790 */ TVec3f _790;
/* 0x79C */ MarioHang* mHang;
/* 0x7A0 */ MarioRecovery* mRecovery;
/* 0x7A4 */ MarioWarp* mWarp;
/* 0x7A8 */ MarioFlip* mFlip;
/* 0x7AC */ MarioSideStep* mSideStep;
/* 0x7B0 */ MarioFrontStep* mFrontStep;
/* 0x7B4 */ MarioSkate* mSkate;
/* 0x7B8 */ MarioTalk* mTalk;
/* 0x7BC */ MarioTeresa* mTeresa;
/* 0x7C0 */ MarioDamage* mDamage;
/* 0x7C4 */ TVec3f _7C4;
/* 0x7D0 */ u16 _7D0;
/* 0x7D4 */ TVec3f _7D4;
/* 0x7E0 */ Triangle* _7E0;
/* 0x7E4 */ TMtx34f _7E4;
/* 0x814 */ TVec3f _814;
/* 0x820 */ Triangle* _820;
/* 0x824 */ TMtx34f _824;
/* 0x854 */ MarioFlow* mFlow;
/* 0x858 */ MarioFireDamage* mFireDamage;
/* 0x85C */ MarioFireDance* mFireDance;
/* 0x860 */ MarioFireRun* mFireRun;
/* 0x864 */ MarioParalyze* mParalyze;
/* 0x868 */ MarioStun* mStun;
/* 0x86C */ MarioCrush* mCrush;
/* 0x870 */ MarioFreeze* mFreeze;
/* 0x874 */ MarioAbyssDamage* mAbyssDamage;
/* 0x878 */ MarioDarkDamage* mDarkDamage;
/* 0x87C */ MarioFaint* mFaint;
/* 0x880 */ MarioBlown* mBlown;
/* 0x884 */ MarioSwim* mSwim;
/* 0x888 */ MarioSlider* mSlider;
/* 0x88C */ MarioStep* mStep;
/* 0x890 */ MarioBump* mBump;
/* 0x894 */ MarioMagic* mMagic;
/* 0x898 */ bool _898;
/* 0x89C */ MarioFpView* mFpView;
/* 0x8A0 */ MarioMove* mMove;
/* 0x8A4 */ TVec3f _8A4;
union {
struct {
/* 0x8B0 */ TVec3f _8B0;
/* 0x8BC */ TVec3f _8BC;
};
/* 0x8B0 */ TVec3f mRelativeWallPos[2];
};
/* 0x8C8 */ Triangle* _8C8;
/* 0x8CC */ Triangle* _8CC[2];
/* 0x8D4 */ HitSensor* _8D4;
/* 0x8D8 */ HitSensor* _8D8;
/* 0x8DC */ TVec3f _8DC;
/* 0x8E8 */ Triangle* _8E8;
/* 0x8EC */ u8 _8EC;
// FAKE?
/* 0x8F0 */ f32 _8F0;
// NOT FAKE
/* 0x8F4 */ f32 _8F4;
/* 0x8F8 */ TVec3f _8F8;
/* 0x904 */ TVec3f _904;
// NOT FAKE
/* 0x910 */ TVec3f _910;
/* 0x91C */ TVec3f _91C;
/* 0x928 */ TVec3f _928;
/* 0x934 */ f32 _934;
/* 0x938 */ TVec3f _938;
/* 0x944 */ TVec3f _944;
/* 0x950 */ TVec3f _950;
/* 0x95C */ FloorCode* _95C;
/* 0x960 */ u16 _960;
/* 0x962 */ u16 _962;
/* 0x964 */ u16 _964[3];
/* 0x96A */ u16 _96A;
/* 0x96C */ HashSortTable* _96C; // Sounds
/* 0x970 */ const char* _970; // Sounds or somthing
/* 0x974 */ MarioModuleTask* _974;
// Fake
/* 0x978 */ u32 _978;
// Not fake
/* 0x97C */ MarioState* _97C;
/* 0x980 */ MarioState* _980;
/* 0x984 */ Task _984[0xb];
/* 0xA08 */ u32 _A08[11];
/* 0xA34 */ u16 _A34;
/* 0xA38 */ u32 _A38;
/* 0xA3C */ u16 _A3C;
/* 0xA40 */ TVec3f _A40;
/* 0xA4C */ TVec3f _A4C;
/* 0xA58 */ TVec3f _A58;
/* 0xA64 */ f32 _A64;
/* 0xA68 */ HitSensor* _A68;
/* 0xA6C */ u8 _A6C[0x20]; // animations
/* 0xA8C */ TVec3f _A8C[9];
};