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

1034 lines
31 KiB
C++

#pragma once
#include "Game/LiveActor/Nerve.hpp"
#include "Game/Player/Mario.hpp"
#include "Game/Player/MatrixControl.hpp"
#include "Game/Util/Color.hpp"
#include "Game/Util/MapUtil.hpp"
class BlackHole;
class CollisionShadow;
class DLchanger;
class DrawAdaptor;
class FixedPosition;
class FootPrint;
class FurMulti;
class HashSortTable;
class IceStep;
class FireMarioBall;
class J3DAnmTexPattern;
class J3DModel;
class J3DModelData;
class J3DModelX;
class JAIAudible;
class JUTTexture;
class JetTurtleShadow;
class MarioAnimator;
class MarioConst;
class MarioEffect;
class CollectCounter;
class MarioMessenger;
class MarioNullBck;
class MarioSearchLight;
class MarioParts;
class ModelHolder;
class ModelObj;
class MultiEmitter;
class RushEndInfo;
class TornadoMario;
class Triangle;
class XanimePlayer;
class XanimeResourceTable;
class XjointTransform;
struct DLholder;
struct ResTIMG;
struct SmokeEffectEntry;
class MatrixControl;
enum SPECIAL_STATUS_FOR_CAMERA { CASE_0, CASE_1 };
enum PlayerMode {
/* 0x0 */ PlayerMode_Normal,
/* 0x1 */ PlayerMode_Invincible,
/* 0x2 */ PlayerMode_2,
/* 0x3 */ PlayerMode_Ice,
/* 0x4 */ PlayerMode_Bee,
/* 0x5 */ PlayerMode_Hopper,
/* 0x6 */ PlayerMode_Teresa,
/* 0x7 */ PlayerMode_Foo,
/* 0x8 */ PlayerMode_8,
/* 0x9 */ PlayerMode_Tornado
};
template < int SIZE, class T, class U >
class AudGenericAudible;
class JAUDopplerAudibleChannel;
class JAUDopplerAudibleAbsPos;
typedef AudGenericAudible< 4, JAUDopplerAudibleChannel, JAUDopplerAudibleAbsPos > AudGeneric;
extern bool gIsLuigi; // (cc68 - 10000)(r13)
class MarioActor : public LiveActor {
public:
MarioActor(const char*);
virtual ~MarioActor();
virtual void init(const JMapInfoIter&);
virtual void initAfterPlacement();
virtual void movement();
virtual void draw() const;
virtual void calcAnim();
virtual void calcViewAndEntry();
virtual void control();
virtual void calcAndSetBaseMtx();
virtual void updateHitSensor(HitSensor*);
virtual void attackSensor(HitSensor*, HitSensor*);
virtual bool receiveMsgPush(HitSensor*, HitSensor*);
virtual bool receiveMsgEnemyAttack(u32, HitSensor*, HitSensor*);
virtual bool receiveMsgTaken(HitSensor*, HitSensor*);
virtual bool receiveOtherMsg(u32, HitSensor*, HitSensor*);
virtual const TVec3f& getLastMove() const;
virtual void getLastMove(TVec3f*) const;
virtual void getFrontVec(TVec3f*) const;
void init2(const TVec3f&, const TVec3f&, s32);
void initAfterOpeningDemo();
void calcBaseFrontVec(const TVec3f&);
void playSound(const char*, s32);
void changeAnimation(const char*, const char* = nullptr);
void changeAnimationNonStop(const char*);
void changeAnimationUpper(const char*);
void stopAnimation(const char*);
bool isAnimationRun(const char*) const;
void changeNullAnimation(const char*, s8);
void clearNullAnimation(s8);
bool isStopNullAnimation() const;
void changeGameOverAnimation();
XjointTransform* getJointCtrl(const char*) const;
void updateRotationInfo();
void exeWait();
// void exeGameOverBlackHole();
void control2();
void controlMain();
void updateBehavior();
void updateBindRatio();
bool isInPunchTimerRange() const;
void updatePunching();
bool doRush();
void updateSwingTimer();
void updateSwingAction();
bool checkClapCatchStart();
void updateRealMtx();
void setUpperRotateY(f32);
void decLife(u16);
void decLifeLarge();
void decLifeMiddle();
void decLifeSmall();
void resetWaterLife();
void updateLife();
void incLife(u32);
void changeMaxLife(s32);
bool doPressing();
void careMovingObject();
bool doStun();
void scaleMtx(MtxPtr);
void updateBaseScaleMtx();
void getRealMtx(MtxPtr, const char*) const NO_INLINE;
void getRealPos(const char*, TVec3f*) const;
MtxPtr getGlobalJointMtx(const char*);
void calcAnimInMovement();
void forceSetBaseMtx(MtxPtr);
void setBlendMtxTimer(u16);
void getGroundPos(TVec3f* dst) const;
TVec3f* getShadowPos() const;
bool isTurning() const;
bool isJumping() const;
bool isJumpRising() const;
bool isPunching() const;
bool isItemSwinging() const;
bool isDamaging() const;
bool isNeedDamageFog() const;
bool isStaggering() const;
bool isSleeping() const;
bool isRefuseTalk() const;
bool isDebugMode() const;
void jumpHop();
void calcCenterPos();
void calcHeadPos();
void setPress(u8, s32);
XanimeResourceTable* getResourceTable() const;
bool isEnableMoveMario() const;
bool isEnableNerveChange() const;
void forceGameOver();
void forceGameOverAbyss();
void forceGameOverBlackHole();
void forceGameOverNonStop();
void forceGameOverSink();
void updateCameraInfo();
bool binderFilter(const Triangle*);
void setPunchHitTimer(u8);
void initEffect();
void initMaterialEffect();
void initCommonEffect();
void addSoundObjHolder();
void initMember();
void initDrawAndModel();
void initBeeMario();
void initTeresaMario();
void initHopperMario();
void initIceMario();
void initInvincibleMario();
void initTeresaMarioAnimation();
void initTornadoMario();
void initBoneMario();
void swapTextureInit();
void initBlur();
void changeDisplayMode(u8);
bool isAllHidden() const;
void calcViewMainModel();
void initFace();
void updateFace();
void drawIndirect() const;
void drawIndirectModel() const;
void drawReflectModel() const;
void drawModelBlur() const;
void drawSearchLight() const;
void drawPreWipe() const;
void initSearchLight();
void initThrowing();
void drawMarioModel() const;
// Called by drawMarioModel
void calcViewSearchLight();
void changeTeresaAnimation(const char*, s32);
MultiEmitter* playEffect(const char*);
void playEffectTrans(const char*, const TVec3f&);
MultiEmitter* playMaterialEffect(const char*);
MultiEmitter* playCommonEffect(const char*);
void stopEffect(const char*);
void stopMaterialEffect(const char*);
void stopCommonEffect(const char*);
bool isCommonEffect(const char*) const NO_INLINE;
bool isMaterialEffect(const char*) const NO_INLINE;
s32 getFloorMaterialIndex(u32) const;
void updateSearchLight();
void updateThrowing();
void updateEffect();
bool checkEffectWaterColumn();
void bodyClap();
bool selectWaterInOut(const char*) const;
void playEffectRT(const char*, const TVec3f&, const TVec3f&);
void playEffectRTZ(const char*, const TVec3f&, const TVec3f&);
void playEffectRTW(const char*, const TVec3f&, const TVec3f&);
void playEffectSRT(const char*, f32, const TVec3f&, const TVec3f&);
void emitEffectWaterColumn(const TVec3f&, const TVec3f&);
void endRush(const RushEndInfo*);
void stopSpinTicoEffect(bool);
void stopEffectForce(const char*);
void initBlackHoleOut(); // void ?
void exeGameOverBlackHole2();
void initBlink();
void updateBlink();
void setBlink(const char*);
void entryWallWalkMode(const TVec3f&, const TVec3f&);
HitSensor* getLookTargetSensor() const;
J3DModelX* getJ3DModel() const;
J3DModelData* getModelData() const;
J3DModelX* getSimpleModel() const;
void createTextureDL(DLholder*, u16, u16);
void swapTexture(const char*, u8) const;
void copyMaterial(J3DModel*, u16, s32);
void settingRush();
void resetCondition();
bool isFixJumpRushSensor(const HitSensor*) const;
bool isLandEffectRushSensor(const HitSensor*) const;
void beginRush();
bool takeSensor(HitSensor*);
// Defined in MarioActorPunch
bool isEnableSpinPunch();
void reactionPunch(HitSensor*);
bool sendPunch(HitSensor*, bool);
bool doFreezeAttack(HitSensor*) NO_INLINE;
bool trySpinPunch();
void printHitMark(HitSensor*);
bool tryPunchAirAfter(HitSensor*);
bool sendBodyAttack(HitSensor*);
void doFreezeAttack();
// Defined in MarioActorCamera
MtxPtr getMapBaseMtx() const;
bool isFastRise() const;
bool isLongDrop() const;
bool isFastDrop() const;
u32 getSpecialMode() const;
bool isCameraStateOn(SPECIAL_STATUS_FOR_CAMERA) const;
void getSideVec(TVec3f*) const;
void getUpVec(TVec3f*) const;
const TVec3f& getTransForCamera() const;
void updateTransForCamera();
void updateForCamera();
// Defined in MarioActorGameOver
void forceKill(u32);
void exeGameOver();
void exeGameOverAbyss();
void exeGameOverFire();
void exeGameOverSink();
void exeGameOverNonStop();
void exeTimeWait();
// Defined in MarioActorGravity
const TVec3f& getGravityVec() const;
const TVec3f& getGravityVector() const;
const TVec3f& getAirGravityVec() const;
void getGravityVector(TVec3f*) const;
f32 getGravityRatio() const;
GravityInfo* getGravityInfo() const;
u8 getGravityLevel() const;
bool checkBeeWallStick(TVec3f&);
bool checkBeeFloorStick(TVec3f&);
void syncJumpBeeStickMode();
void updateBeeModeGravity(TVec3f&);
bool isInZeroGravitySpot() const;
void updateGravityVec(bool, bool);
bool checkBeeCeilStick(TVec3f&);
void updateBeeStickMode(TVec3f&);
// Defined in MarioActorHand
void initHand();
void updateHand();
void changeHandMaterial();
void updateHandAtMorph();
void drawHand() const;
void drawIndirectHand() const;
// Defined in MarioActorPad
void resetPadSwing();
bool isRequestHipDrop() const;
bool isRequestRush() const;
bool isRequestThrow() const;
bool isRequestSpin() const;
bool isRequestJump() const;
bool isRequestJump2P() const;
bool isKeepJump() const;
bool isKeepJump2P() const;
bool checkButtonType(u16, bool) const;
void getStickValue(f32*, f32*);
void updateActionTrigger();
void updateControllerSwing();
void updateControllerSwingLeft();
void lockOnDPD();
bool isRequestSpinJump2P() const;
// Defined in MarioActorParts
void init2D();
void initParts();
void updateBeeWingAnimation();
void updateTornado();
void updateTakingPosition();
const HitSensor* getCarrySensor() const;
void changeSpecialModeAnimation(const char*);
void updateSpecialModeAnimation();
void initFireBall();
void shootFireBall();
void showFreezeModel();
void hideFreezeModel();
void updateFairyStar();
void update2D();
void updateThrowVector();
void createIceFloor(const TVec3f&);
void createIceFloor(const TVec3f&, const TVec3f&);
void createIceWall(const TVec3f&, const TVec3f&);
void updateBaseMtxTeresa(MtxPtr);
bool finalizeFreezeModel();
void offTakingFlag();
// Defined in MarioActorSensor
void setupSensors();
void doTrampleJump(HitSensor*);
void trampleJump(f32, f32);
bool sendMsgToSensor(HitSensor*, u32);
void resetSensorCount();
void recordScoutingObject(HitSensor*);
void updateScouter();
void initScouter();
void initForJump();
// Defined in MarioActorShadow
void initShadow();
void calcViewReflectionModel();
void calcViewWallShadowModel();
void drawShadow() const;
void decideShadowMode();
void calcViewSilhouetteModel();
f32 calcCylinderToCenter(const AreaObj*, TVec3f*);
void calcViewBlurModel();
void calcViewFootPrint();
void drawSilhouette() const;
// Defined in MarioActorSpecialDraw
void initScreenBox();
bool isUseScreenBox() const;
void calcScreenBoxRange();
void captureScreenBox() const;
void writeBackScreenBox() const;
void calc1stPersonView();
void hideBeeFur();
void calcFogLighting();
void resetFog();
void updateAlphaDL(u8);
void updateSimpleAlphaDL(u8);
void updateReflectAlphaDL(u8);
void updateLightDL(const Color8&, const Color8&, const Color8&, f32);
void createRainbowDL();
void drawScreenBlend() const;
void updateRandomTexture(f32);
void drawWallShade(const TVec3f&, const TVec3f&, f32) const;
void drawSpinInhibit() const;
void drawColdWaterDamage() const;
void setRasterScroll(s32, s32, s32);
void updateRasterScroll();
void drawRasterScroll(f32, s16, f32) const;
void drawMosaic() const;
void drawLifeUp() const;
void calcSpinEffect();
void drawSpinEffect() const;
void drawSphereMask() const;
void initDarkMask();
void updateDarkMask(u16);
void showBeeFur();
bool drawDarkMask() const;
// Defined in MarioActorMatrix
void initActionMatrix();
bool isActionOk(const char*) const;
u8 selectAction(const char*) const;
bool selectAutoBind(const char*, u8*) const;
bool selectCustomEffectSpinHitSound(const char*) const;
bool selectSpinCatchInRush(const char*) const;
bool selectHomingInSuperHipDrop(const char*) const;
bool selectNotHomingSensor(const HitSensor*) const;
bool selectInvalidMovingCollision(const char*) const;
bool selectQuickResetBeeWallGravity(const char*) const;
bool selectJumpRushSensor(const char*) const;
bool selectDamageFireColor(const char*) const;
bool selectWaterInOutEffect(const char*) const;
bool selectOnDamageRush(const char*) const;
bool selectTiltPress(const HitSensor*) const;
bool selectHandyRush(const HitSensor*) const;
bool selectRecoverFlyMeter(const HitSensor*) const;
bool selectHideFlyMeter(const HitSensor*) const;
bool selectTeresaThru(const HitSensor*) const;
bool selectRebindTimer(const HitSensor*) const;
bool selectHipDropRush(const HitSensor*) const;
bool selectPushOff(const HitSensor*) const;
bool selectWaterInOutRush(const HitSensor*) const;
bool selectLandEffect(const HitSensor*) const;
bool selectNoShadow(const HitSensor*) const;
bool selectDamagePop(const HitSensor*) const;
f32 getFaceLookHeight(const char*) const;
// Defined in MarioActorMorph
void setPlayerMode(u16, bool);
void resetPlayerModeOnDamage();
void resetPlayerModeOnNoDamage();
void updatePlayerMode();
void touchSensor(HitSensor*);
void initMorphStringTable();
const char* changeMorphString(const char*) const;
// Defined in MarioActorOffensiveMsg
void attackOrPushSensor(HitSensor*, f32);
void attackOrPushSensorInDamage(HitSensor*, f32);
void attackOrPushSensorInRush(HitSensor*, f32);
void tryAddClapCoin(HitSensor*);
bool tryTornadoAttack(HitSensor*);
bool isUnderTarget(HitSensor*);
bool tryHipDropAttack(HitSensor*);
bool checkAndTryTrampleAttack(HitSensor*, f32, bool);
bool tryTrampleAttack(HitSensor*);
bool cylinderHorizontalCheck(HitSensor*);
bool tryJetAttack(HitSensor*);
void tryCounterJetAttack(HitSensor*);
bool tryGetItem(HitSensor*);
bool cylinderPushCheck(HitSensor* pSensor, f32 radius, f32 width, f32 height);
bool cylinderPushCheck(const TVec3f&, f32, f32, f32);
void attackOrPushPolygons();
void sendWallTouch(HitSensor*, HitSensor*);
bool sendMsgUpperPunch(HitSensor*);
// Defined in MarioActorDefensiveMsg
bool tryAttackMsg(u32, const HitSensor*, bool*);
bool tryVectorAttackMsg(u32, const TVec3f&);
bool cylinderHitCheck(const HitSensor*, TVec3f*);
// Defined in MarioActorRushMsg
void addRushSensor(HitSensor*, bool);
bool tryStandardRush();
void checkPriorRushTarget();
HitSensor* getNearestRushTarget(bool) const;
HitSensor* getNearestJumpTarget() const;
HitSensor* getHighPriorityTarget() const;
HitSensor* getRescueTarget() const;
bool tryStartRush(bool);
bool tryJumpRush();
void tryRushInRush();
// Defined in MarioActorTakeMsg
void memorizeSensorThrow(HitSensor*);
bool tryThrow();
void tryReleaseDirect(const HitSensor*);
void damageDropThrowMemoSensor();
void rushDropThrowMemoSensor();
void trySetLockOnTarget(HitSensor*);
void tryCoinPull();
void tryCoinPullInRush();
void flushCoinPull();
bool tryCoinPullOne(HitSensor*) NO_INLINE;
void tryPullTrans(TVec3f*, const TVec3f&);
bool releaseThrowMemoSensor();
void tryReleaseWithMsg(u32);
void tryTornadoPull(HitSensor*);
void tryReleaseBombTeresa();
void runTeresaBaseAnimation();
void updateTeresaAnimation();
void getThrowVec(TVec3f*) const;
const MarioConst& getConst() const {
return *mConst;
}
inline u32 getHealth() const {
return mHealth;
}
inline void setB90(bool param1) {
_B90 = param1;
}
inline const Mario::MovementStates& getMovementStates() const {
return mMario->mMovementStates;
}
inline const Mario::DrawStates& getDrawStates() const {
return mMario->mDrawStates;
}
inline const Mario::DrawStates& getPrevDrawStates() const {
return mMario->mPrevDrawStates;
}
// Only used in isSleeping() to make it match
inline bool IsMarioAnimationRun(const char* pAnimName) const {
return mMario->isAnimationRun(pAnimName);
}
inline bool IsMarioSwimming() const {
return mMario->isSwimming();
}
inline void MarioStopWalk() const {
mMario->stopWalk();
}
inline const bool isBeeMarioOnFur() const {
return mMario->getMovementStates()._1 && strcmp("Fur", MR::getWallCodeString(mMario->getGroundPolygon())) == 0 && mBeeWallWalk == 0;
}
inline const bool is481or482On() const {
return _482 || _481;
}
inline Mario* getMario() const {
return mMario;
}
inline bool isBeeWallWalk() const {
return mBeeWallWalk != 0;
}
struct FBO {
u32 _0;
u32 _4;
};
/* 0x08C */ u8 _8C;
/* 0x090 */ DLchanger* mDLchanger;
/* 0x094 */ DLchanger* _94[0x40];
/* 0x194 */ u8* mDL[2];
/* 0x19C */ u32 mDLSize;
/* 0x1A0 */ u8 mCurrDL;
/* 0x1A1 */ u8 _1A1;
/* 0x1A4 */ f32 _1A4;
/* 0x1A8 */ u16 _1A8;
/* 0x1AA */ u16 _1AA;
/* 0x1AC */ f32 _1AC;
/* 0x1B0 */ Color8 _1B0;
/* 0x1B4 */ u8 _1B4;
/* 0x1B5 */ bool _1B5;
/* 0x1B8 */ CollectCounter* _1B8;
/* 0x1BC */ MarioMessenger* _1BC;
/* 0x1C0 */ bool _1C0;
/* 0x1C1 */ bool _1C1;
/* 0x1C2 */ bool _1C2;
/* 0x1C3 */ bool _1C3;
/* 0x1C4 */ u16 _1C4;
/* 0x1C6 */ u16 _1C6;
/* 0x1C8 */ f32 _1C8;
/* 0x1CC */ f32 _1CC;
/* 0x1D0 */ u8 _1D0;
/* 0x1D1 */ u8 _1D1;
/* 0x1D4 */ f32 _1D4;
union {
/* 0x1D8 */ FBO* mRasterBuffers[2];
struct {
/* 0x1D8 */ FBO* _1D8;
/* 0x1DC */ FBO* _1DC;
};
};
/* 0x1E0 */ bool _1E0;
/* 0x1E1 */ bool _1E1;
/* 0x1E2 */ u8 _1E2;
/* 0x1E4 */ f32 _1E4;
/* 0x1E8 */ u16 _1E8;
/* 0x1EC */ f32 _1EC;
/* 0x1F0 */ TVec3f _1F0;
/* 0x1FC */ TVec3f _1FC;
/* 0x208 */ f32 _208;
/* 0x20C */ const AreaObj* _20C;
/* 0x210 */ u8 _210;
/* 0x211 */ u8 _211;
/* 0x214 */ CollisionShadow* _214;
/* 0x218 */ DrawAdaptor* _218;
/* 0x21C */ DrawAdaptor* _21C;
/* 0x220 */ DrawAdaptor* _220;
/* 0x224 */ DrawAdaptor* mDrawSearchLight;
/* 0x228 */ DrawAdaptor* _228;
/* 0x22C */ DrawAdaptor* _22C;
/* 0x230 */ Mario* mMario;
/* 0x234 */ MarioAnimator* mMarioAnim;
/* 0x238 */ MarioEffect* mMarioEffect;
/* 0x23C */ MarioConst* mConst;
/* 0x240 */ TVec3f _240;
/* 0x24C */ TVec3f _24C;
/* 0x258 */ TVec3f _258;
/* 0x264 */ TVec3f mLastMove;
/* 0x270 */ TVec3f _270;
/* 0x27C */ TVec3f _27C;
/* 0x288 */ TVec3f _288;
/* 0x294 */ TVec3f _294;
/* 0x2A0 */ TVec3f _2A0;
/* 0x2AC */ TVec3f _2AC;
/* 0x2B8 */ TVec3f _2B8;
/* 0x2C4 */ TVec3f _2C4;
/* 0x2D0 */ TVec3f mUpVec;
/* 0x2DC */ TVec3f _2DC;
/* 0x2E8 */ TVec3f _2E8;
/* 0x2F4 */ TVec3f mCameraTrans;
/* 0x300 */ TVec3f _300;
/* 0x30C */ TVec3f _30C;
/* 0x318 */ TVec3f _318;
/* 0x324 */ TVec3f _324;
/* 0x330 */ u16 _330; // a timer
/* 0x332 */ u16 _332;
/* 0x334 */ u16 _334;
/* 0x336 */ u16 _336;
/* 0x338 */ u16 _338;
/* 0x33C */ TVec3f _33C;
/* 0x348 */ TVec3f _348;
/* 0x354 */ TVec3f _354;
/* 0x360 */ TVec3f _360;
/* 0x36C */ GravityInfo* mGravityInfo;
/* 0x370 */ bool _370;
/* 0x374 */ f32 mGravityRatio;
/* 0x378 */ u16 _378;
/* 0x37C */ u32 _37C;
/* 0x380 */ u32 mHealth;
/* 0x394 */ u32 mWaterLife;
/* 0x388 */ u32 _388;
/* 0x38C */ u16 _38C;
/* 0x390 */ u32 _390;
/* 0x394 */ u32 _394;
/* 0x398 */ u32 _398;
/* 0x39C */ u8 _39C;
/* 0x39D */ u8 _39D;
/* 0x39E */ u8 _39E;
/* 0x3A0 */ u32 _3A0;
/* 0x3A4 */ u32 _3A4;
/* 0x3A8 */ u16 _3A8;
/* 0x3AA */ u16 _3AA;
/* 0x3AC */ u16 _3AC;
/* 0x3B0 */ f32 _3B0;
/* 0x3B4 */ TVec3f _3B4;
/* 0x3C0 */ bool _3C0;
/* 0x3C1 */ bool _3C1;
/* 0x3C4 */ TVec3f _3C4;
/* 0x3D0 */ u16 _3D0;
/* 0x3D2 */ u16 _3D2;
/* 0x3D4 */ u16 mPlayerMode;
/* 0x3D6 */ u16 _3D6;
/* 0x3D8 */ u16 _3D8;
/* 0x3DA */ u16 _3DA;
/* 0x3DC */ u16 _3DC;
/* 0x3DE */ u8 _3DE;
/* 0x3DF */ u8 _3DF;
/* 0x3E0 */ u32 mMaxHealth;
/* 0x3E4 */ bool _3E4;
/* 0x3E5 */ bool _3E5;
/* 0x3E6 */ bool _3E6;
/* 0x3E7 */ bool _3E7;
/* 0x3E8 */ bool _3E8;
/* 0x3EC */ TMtx34f _3EC;
/* 0x41C */ u32 _41C;
/* 0x420 */ u32 _420;
/* 0x424 */ HitSensor* _424;
/* 0x428 */ HitSensor* _428[4];
/* 0x438 */ TVec3f _438[4];
union {
struct {
/* 0x468 */ u32 _468;
/* 0x46C */ HitSensor* _46C;
/* 0x470 */ HitSensor* _470;
};
/* 0x468 */ TVec3f _468Vec;
};
/* 0x474 */ HitSensor* _474;
/* 0x478 */ f32 _478;
/* 0x47C */ u32 _47C;
/* 0x480 */ bool _480;
/* 0x481 */ u8 _481;
/* 0x482 */ bool _482;
/* 0x483 */ bool _483;
/* 0x484 */ TVec3f _484;
/* 0x490 */ f32 _490;
/* 0x494 */ FixedPosition* _494;
/* 0x498 */ FixedPosition* _498;
/* 0x49C */ FixedPosition* _49C;
/* 0x4A0 */ FixedPosition* mSearchLightThrowPos;
/* 0x4A4 */ HitSensor* _4A4; // used in calcAnimInMovement()
/* 0x4A8 */ HitSensor* _4A8;
/* 0x4AC */ f32 _4AC;
/* 0x4B0 */ f32 _4B0;
/* 0x4B4 */ f32 _4B4;
/* 0x4B8 */ TVec3f _4B8;
/* 0x4C4 */ TVec3f _4C4;
/* 0x4D0 */ HitSensor* _4D0[128];
/* 0x6D0 */ bool _6D0;
/* 0x6D4 */ f32 _6D4;
/* 0x6D8 */ f32 _6D8;
/* 0x6DC */ HitSensor* _6DC[64];
/* 0x7DC */ u16 _7DC; // _6DC count
/* 0x7DE */ u16 _7DE;
/* 0x7E0 */ u16 _7E0;
/* 0x7E2 */ u8 _7E2;
/* 0x7E4 */ HitSensor* _7E4[64];
/* 0x8E4 */ bool _8E4[64];
/* 0x924 */ HitSensor* _924;
/* 0x928 */ HitSensor* _928;
/* 0x92C */ u32 _92C;
/* 0x930 */ u32 _930;
/* 0x934 */ bool _934;
/* 0x935 */ bool _935;
/* 0x938 */ TVec3f _938;
/* 0x944 */ u8 _944;
/* 0x945 */ u8 _945;
/* 0x946 */ u16 _946;
/* 0x948 */ u16 _948;
/* 0x94A */ u16 _94A;
/* 0x94C */ u16 _94C;
/* 0x94E */ u16 _94E;
/* 0x950 */ bool _950;
/* 0x951 */ u8 _951;
/* 0x954 */ HitSensor* _954[8];
/* 0x974 */ u8 _974; // _954 count
/* 0x978 */ TVec3f _978;
/* 0x984 */ f32 _984;
/* 0x988 */ u8 _988;
/* 0x989 */ u8 _989;
/* 0x98C */ TornadoMario* mTornadoMario;
/* 0x990 */ u8 _990;
/* 0x994 */ LiveActor* _994; // probably some subclass of LiveActor
/* 0x998 */ MarioSearchLight* mSearchLight;
/* 0x99C */ u32 mSearchLightTimer;
/* 0x9A0 */ JetTurtleShadow* _9A0;
/* 0x9A4 */ MarioParts* _9A4;
/* 0x9A8 */ f32 _9A8;
/* 0x9AC */ f32 _9AC;
/* 0x9B0 */ f32 _9B0;
/* 0x9B4 */ u16 _9B4;
/* 0x9B8 */ XanimePlayer* _9B8;
/* 0x9BC */ XanimeResourceTable* _9BC;
/* 0x9C0 */ ModelHolder* _9C0;
/* 0x9C4 */ MarioParts* _9C4;
/* 0x9C8 */ ModelHolder* _9C8;
/* 0x9CC */ f32 _9CC;
/* 0x9D0 */ f32 _9D0;
/* 0x9D4 */ HitSensor* _9D4;
/* 0x9D8 */ TVec3f _9D8;
/* 0x9E4 */ ModelHolder* _9E4;
/* 0x9E8 */ MarioParts* _9E8;
/* 0x9EC */ FurMulti* _9EC;
/* 0x9F0 */ u8 _9F0;
/* 0x9F1 */ u8 mBeeWallWalk;
/* 0x9F2 */ u16 _9F2;
/* 0x9F4 */ TVec3f _9F4;
/* 0xA00 */ ModelHolder* _A00;
/* 0xA04 */ ModelHolder* _A04;
/* 0xA08 */ u8 _A08;
/* 0xA09 */ u8 _A09;
/* 0xA0A */ u8 mCurrModel;
/* 0xA0B */ u8 _A0B;
/* 0xA0C */ u8 _A0C;
/* 0xA10 */ ModelHolder* _A10;
/* 0xA14 */ J3DModelX* _A14;
/* 0xA18 */ TVec3f _A18;
/* 0xA24 */ u8 _A24;
/* 0xA25 */ u8 _A25;
/* 0xA28 */ J3DModelX* mModels[6];
/* 0xA40 */ ModelHolder* _A40;
/* 0xA44 */ ModelHolder* _A44;
/* 0xA48 */ ModelHolder* _A48;
/* 0xA4C */ ModelHolder* _A4C;
/* 0xA50 */ ModelHolder* _A50;
/* 0xA54 */ ModelHolder* _A54;
/* 0xA58 */ bool _A58;
/* 0xA59 */ u8 _A59;
/* 0xA5A */ u8 _A5A;
/* 0xA5B */ u8 _A5B;
/* 0xA5C */ ModelHolder* _A5C;
/* 0xA60 */ u8 _A60;
/* 0xA61 */ bool _A61;
/* 0xA62 */ bool _A62;
/* 0xA64 */ u32 _A64;
/* 0xA68 */ f32 _A68;
/* 0xA6C */ u16 _A6C;
/* 0xA6E */ u8 _A6E;
union {
struct {
/* 0xA70 */ Mtx* _A70[8];
/* 0xA90 */ Mtx* _A90[8];
};
/* 0xA70 */ Mtx* mBlurMatrices[2][8];
};
/* 0xAB0 */ TMtx34f _AB0;
/* 0xAE0 */ TMtx34f _AE0;
/* 0xB10 */ u16 _B10;
/* 0xB12 */ u16 _B12;
/* 0xB14 */ u16 _B14;
/* 0xB18 */ TVec3f _B18;
union {
/* 0xB24 */ TVec2f mScreenBoxMin;
struct {
/* 0xB24 */ f32 _B24;
/* 0xB28 */ f32 _B28;
};
};
union {
/* 0xB2C */ TVec2f mScreenBoxMax;
struct {
/* 0xB2C */ f32 _B2C;
/* 0xB30 */ f32 _B30;
};
};
union {
/* 0xB34 */ TVec2f mScreenBoxPos;
struct {
/* 0xB34 */ f32 _B34;
/* 0xB38 */ f32 _B38;
};
};
union {
/* 0xB3C */ TVec2f mScreenBoxSize;
struct {
/* 0xB3C */ f32 _B3C;
/* 0xB40 */ f32 _B40;
};
};
/* 0xB44 */ void* _B44;
/* 0xB48 */ FootPrint* _B48;
/* 0xB4C */ IceStep** _B4C;
/* 0xB50 */ u16 _B50; // _B4C count
/* 0xB54 */ FireMarioBall* _B54[3];
/* 0xB60 */ u16 _B60;
/* 0xB64 */ ResTIMG** _B64;
/* 0xB68 */ u8 _B68;
/* 0xB6A */ u16 _B6A;
/* 0xB6C */ DLholder* _B6C;
/* 0xB70 */ u16 _B70;
/* 0xB72 */ u8 _B72;
/* 0xB74 */ u16 _B74;
/* 0xB78 */ J3DAnmTexPattern* mEyeRes;
/* 0xB7C */ JUTTexture* _B7C;
union {
/* 0xB80 */ JUTTexture* mMaskTextures[2];
struct {
/* 0xB80 */ JUTTexture* _B80;
/* 0xB84 */ JUTTexture* _B84;
};
};
/* 0xB88 */ u16 _B88;
/* 0xB8C */ MarioNullBck* mNullAnimation;
/* 0xB90 */ bool _B90;
/* 0xB91 */ bool _B91;
/* 0xB92 */ s8 _B92;
/* 0xB94 */ u16 _B94;
/* 0xB96 */ u8 _B96;
union {
/* 0xB98 */ u32 _B98;
struct {
#if defined(__MWERKS__) || defined(__BIG_ENDIAN__)
unsigned mSmoke : 1;
unsigned mSnow : 1;
unsigned _2 : 1;
unsigned mSlopeSlip : 1;
unsigned mIsStationary : 1;
unsigned mBeeWind : 1;
#else
unsigned : 26;
unsigned mBeeWind : 1;
unsigned mIsStationary : 1;
unsigned mSlopeSlip : 1;
unsigned _2 : 1;
unsigned mSnow : 1;
unsigned mSmoke : 1;
#endif
} mEffectFlags;
};
/* 0xB9C */ u16 _B9C;
/* 0xB9E */ u16 _B9E;
/* 0xBA0 */ SmokeEffectEntry** _BA0;
/* 0xBA4 */ HashSortTable* _BA4;
/* 0xBA8 */ ModelObj* _BA8;
/* 0xBAC */ TVec3f _BAC;
/* 0xBB8 */ TVec3f _BB8;
/* 0xBC4 */ u16 _BC4;
/* 0xBC8 */ TMtx34f _BC8;
/* 0xBF8 */ TMtx34f _BF8;
/* 0xC28 */ Mtx* _C28;
/* 0xC2C */ TMtx34f _C2C;
/* 0xC5C */ TMtx34f _C5C;
/* 0xC8C */ TMtx34f _C8C;
/* 0xCBC */ TMtx34f _CBC;
/* 0xCEC */ TMtx34f _CEC;
/* 0xD1C */ TMtx34f _D1C;
/* 0xD4C */ TMtx34f _D4C;
/* 0xD7C */ TMtx34f _D7C;
/* 0xDAC */ TMtx34f _DAC;
/* 0xDDC */ TMtx34f _DDC;
/* 0xE0C */ TMtx34f _E0C;
/* 0xE3C */ TMtx34f _E3C;
/* 0xE6C */ TMtx34f _E6C;
/* 0xE9C */ u16 mBlendMtxTimer;
/* 0xEA0 */ f32 _EA0;
/* 0xEA4 */ bool _EA4;
/* 0xEA5 */ bool _EA5;
/* 0xEA6 */ bool _EA6;
/* 0xEA8 */ TMtx34f _EA8;
/* 0xED8 */ TVec3f _ED8;
/* 0xEE4 */ const char* _EE4;
/* 0xEE8 */ bool mSuperKinokoCollected;
/* 0xEE9 */ bool mPowerupCollected;
/* 0xEEA */ bool mTransforming;
/* 0xEEB */ bool _EEB;
/* 0xEEC */ bool _EEC;
/* 0xEED */ bool _EED;
/* 0xEEE */ bool _EEE;
/* 0xEF0 */ u16 _EF0;
/* 0xEF2 */ u16 _EF2;
/* 0xEF4 */ u16 _EF4;
/* 0xEF6 */ u16 _EF6;
/* 0xEF8 */ u32 _EF8;
/* 0xEFC */ u32 _EFC;
/* 0xF00 */ bool _F00;
/* 0xF04 */ u32 _F04;
/* 0xF08 */ u32 _F08;
/* 0xF0C */ bool _F0C;
/* 0xF0D */ u8 _F0D;
/* 0xF0E */ u16 _F0E;
/* 0xF10 */ u16 _F10;
/* 0xF12 */ u16 _F12;
/* 0xF14 */ u16 _F14;
/* 0xF16 */ u16 _F16;
/* 0xF18 */ u16 _F18;
/* 0xF1A */ u16 _F1A;
/* 0xF1C */ u16 _F1C;
/* 0xF1E */ u16 _F1E;
/* 0xF20 */ bool _F20;
/* 0xF21 */ bool _F21;
/* 0xF24 */ HitSensor* _F24;
/* 0xF28 */ u16 _F28;
/* 0xF2C */
union {
/* 0xF2C */ u32 _F2C;
/* 0xF2C */ TVec3f _F2CVec;
};
/* 0xF38 */ u8 _F38;
union {
/* 0xF3C */ AudGeneric* _F3C;
/* 0xF3C */ TVec3f* _F3CVec;
};
/* 0xF40 */ u16 _F40;
/* 0xF42 */ u16 _F42;
/* 0xF44 */ bool _F44;
/* 0xF48 */ HitSensor* _F48;
/* 0xF4C */ BlackHole* mBlackHole;
/* 0xF50 */ TVec3f mBlackHolePosition;
/* 0xF5C */ TVec3f mBlackHoleRotateAxis;
/* 0xF68 */ TVec3f mPosRelativeToBlackHole;
/* 0xF74 */ bool _F74;
/* 0xF78 */ TVec3f mCamPos;
/* 0xF84 */ TVec3f mCamDirX;
/* 0xF90 */ TVec3f mCamDirY;
/* 0xF9C */ TVec3f mCamDirZ;
/* 0xFA8 */ TVec3f _FA8;
/* 0xFB4 */ const Nerve* _FB4;
/* 0xFB8 */ u16 _FB8; // a timer
/* 0xFBC */ MatrixControl* _FBC;
/* 0xFC0 */ MatrixControl* _FC0;
/* 0xFC4 */ MatrixControl* _FC4;
/* 0xFC8 */ MatrixValueGetter* _FC8;
/* 0xFCC */ bool _FCC;
/* 0xFCD */ bool _FCD;
};
// header defined since these actually get defined in CamHeliEffector
// and in sinit of NameObjFactory
namespace NrvMarioActor {
NEW_NERVE(MarioActorNrvWait, MarioActor, Wait);
NEW_NERVE(MarioActorNrvGameOver, MarioActor, GameOver);
NEW_NERVE(MarioActorNrvGameOverAbyss, MarioActor, GameOverAbyss);
NEW_NERVE(MarioActorNrvGameOverAbyss2, MarioActor, GameOverAbyss);
NEW_NERVE(MarioActorNrvGameOverFire, MarioActor, GameOverFire);
NEW_NERVE(MarioActorNrvGameOverBlackHole, MarioActor, GameOverBlackHole2);
NEW_NERVE(MarioActorNrvGameOverNonStop, MarioActor, GameOverNonStop);
NEW_NERVE(MarioActorNrvGameOverSink, MarioActor, GameOverSink);
NEW_NERVE(MarioActorNrvTimeWait, MarioActor, TimeWait);
NEW_NERVE(MarioActorNrvNoRush, MarioActor, Wait);
}; // namespace NrvMarioActor