refresh 6

This commit is contained in:
n64
2020-02-03 00:51:26 -05:00
parent 9273f38df1
commit 9a801cb96d
236 changed files with 17101 additions and 4820 deletions

View File

@@ -35,6 +35,7 @@ extern "C" {
#endif
#include <PR/ultratypes.h>
#include <PR/os_thread.h>
#if defined(_LANGUAGE_C) || defined(_LANGUAGE_C_PLUS_PLUS)

View File

@@ -1,6 +1,6 @@
#ifndef _ULTRA64_OS_MISC_H_
#define _ULTRA64_OS_MISC_H_
#include <PR/ultratypes.h>
/* Miscellaneous OS functions */
void osInitialize(void);

View File

@@ -5,9 +5,10 @@
/* Types */
typedef struct
{
typedef struct {
#ifndef VERSION_EU
u32 errStatus;
#endif
void *dramAddr;
void *C2Addr;
u32 sectorSize;
@@ -15,20 +16,21 @@ typedef struct
u32 C1ErrSector[4];
} __OSBlockInfo;
typedef struct
{
u32 cmdType;
u16 transferMode;
u16 blockNum;
s32 sectorNum;
uintptr_t devAddr;
u32 bmCtlShadow;
u32 seqCtlShadow;
__OSBlockInfo block[2];
typedef struct {
u32 cmdType; // 0
u16 transferMode; // 4
u16 blockNum; // 6
s32 sectorNum; // 8
uintptr_t devAddr; // c
#ifdef VERSION_EU
u32 unk10; //error status added moved to blockinfo
#endif
u32 bmCtlShadow; // 10
u32 seqCtlShadow; // 14
__OSBlockInfo block[2]; // 18
} __OSTranxInfo;
typedef struct OSPiHandle_s
{
typedef struct OSPiHandle_s {
struct OSPiHandle_s *next;
u8 type;
u8 latency;
@@ -41,27 +43,26 @@ typedef struct OSPiHandle_s
__OSTranxInfo transferInfo;
} OSPiHandle;
typedef struct
{
typedef struct {
u8 type;
uintptr_t address;
} OSPiInfo;
typedef struct
{
typedef struct {
u16 type;
u8 pri;
u8 status;
OSMesgQueue *retQueue;
} OSIoMesgHdr;
typedef struct
{
typedef struct {
/*0x00*/ OSIoMesgHdr hdr;
/*0x08*/ void *dramAddr;
/*0x0C*/ uintptr_t devAddr;
/*0x10*/ size_t size;
//OSPiHandle *piHandle; //from the official definition
#ifdef VERSION_EU
OSPiHandle *piHandle; // from the official definition
#endif
} OSIoMesg;
/* Definitions */
@@ -74,12 +75,13 @@ typedef struct
/* Functions */
s32 osPiStartDma(OSIoMesg *mb, s32 priority, s32 direction,
uintptr_t devAddr, void *vAddr, size_t nbytes, OSMesgQueue *mq);
void osCreatePiManager(OSPri pri, OSMesgQueue *cmdQ, OSMesg *cmdBuf,
s32 cmdMsgCnt);
s32 osPiStartDma(OSIoMesg *mb, s32 priority, s32 direction, uintptr_t devAddr, void *vAddr,
size_t nbytes, OSMesgQueue *mq);
void osCreatePiManager(OSPri pri, OSMesgQueue *cmdQ, OSMesg *cmdBuf, s32 cmdMsgCnt);
OSMesgQueue *osPiGetCmdQueue(void);
s32 osPiWriteIo(uintptr_t devAddr, u32 data);
s32 osPiReadIo(uintptr_t devAddr, u32 *data);
s32 osPiRawStartDma(s32 dir, u32 cart_addr, void *dram_addr, size_t size);
s32 osEPiRawStartDma(OSPiHandle *piHandle, s32 dir, u32 cart_addr, void *dram_addr, size_t size);
#endif

View File

@@ -1,6 +1,6 @@
#ifndef _ULTRA64_THREAD_H_
#define _ULTRA64_THREAD_H_
#include "ultratypes.h"
/* Recommended priorities for system threads */
#define OS_PRIORITY_MAX 255
#define OS_PRIORITY_VIMGR 254

View File

@@ -254,6 +254,8 @@
#define SOUND_GENERAL_BOWSER_BOMB_EXPLOSION SOUND_ARG_LOAD(3, 1, 0x2F, 0x00, 8)
/* not verified */ #define SOUND_GENERAL_COIN_SPURT SOUND_ARG_LOAD(3, 0, 0x30, 0x00, 8)
/* not verified */ #define SOUND_GENERAL_COIN_SPURT_2 SOUND_ARG_LOAD(3, 8, 0x30, 0x00, 8)
/* not verified */ #define SOUND_GENERAL_COIN_SPURT_EU SOUND_ARG_LOAD(3, 8, 0x30, 0x20, 8)
/* not verified */ #define SOUND_GENERAL_EXPLOSION6 0x3031
/* not verified */ #define SOUND_GENERAL_UNK32 0x3032
/* not verified */ #define SOUND_GENERAL_BOAT_TILT1 SOUND_ARG_LOAD(3, 0, 0x34, 0x40, 8)

View File

@@ -246,8 +246,8 @@ extern const BehaviorScript bhvOpenableCageDoor[];
extern const BehaviorScript bhvOpenableGrill[];
extern const BehaviorScript bhvWaterLevelDiamond[];
extern const BehaviorScript bhvInitializeChangingWaterLevel[];
extern const BehaviorScript bhvTornadoSandParticle[];
extern const BehaviorScript bhvTornado[];
extern const BehaviorScript bhvTweesterSandParticle[];
extern const BehaviorScript bhvTweester[];
extern const BehaviorScript bhvMerryGoRoundBooManager[];
extern const BehaviorScript bhvPlaysMusicTrackWhenTouched[];
extern const BehaviorScript bhvAnimatedTexture[];
@@ -524,7 +524,7 @@ extern const BehaviorScript bhvBird[];
extern const BehaviorScript bhvRacingPenguin[];
extern const BehaviorScript bhvPenguinRaceFinishLine[];
extern const BehaviorScript bhvPenguinRaceShortcutCheck[];
extern const BehaviorScript bhvCoffinManager[];
extern const BehaviorScript bhvCoffinSpawner[];
extern const BehaviorScript bhvCoffin[];
extern const BehaviorScript bhvClamShell[];
extern const BehaviorScript bhvSkeeter[];

View File

@@ -19,7 +19,7 @@
/// player exits their activation radius.
#define BUGFIX_PIRANHA_PLANT_STATE_RESET (0 || VERSION_US || VERSION_EU)
/// Fixes bug where sleeping Piranha Plants damage players that bump into them
#define BUGFIX_PIRANHA_PLANT_SLEEP_DAMAGE (0 || VERSION_US || VERSION_EU)
#define BUGFIX_PIRANHA_PLANT_SLEEP_DAMAGE (0 || VERSION_US)
/// Fixes bug where it shows a star when you grab a key in bowser battle stages
#define BUGFIX_STAR_BOWSER_KEY (0 || VERSION_US || VERSION_EU)
@@ -28,6 +28,10 @@
#define SCREEN_HEIGHT 240
// Border Height Define for NTSC Versions
#ifndef VERSION_EU
#define BORDER_HEIGHT 8
#else
#define BORDER_HEIGHT 1
#endif
#endif

View File

@@ -151,7 +151,7 @@ struct MacroPreset MacroObjectPresets[] = {
{bhvYellowCoin, MODEL_YELLOW_COIN, 0},
{bhvYellowCoin, MODEL_YELLOW_COIN, 0},
{bhvStaticObject, MODEL_KLEPTO, 0}, // unused
{bhvTornado, MODEL_TORNADO, 0}, // unused
{bhvTweester, MODEL_TWEESTER, 0}, // unused
{bhvPokey, MODEL_NONE, 0},
{bhvPokey, MODEL_NONE, 0}, // unused
{bhvToxBox, MODEL_SSL_TOX_BOX, 0}, // unused

View File

@@ -360,7 +360,7 @@
// group 5
#define MODEL_POKEY_HEAD 0x54 // pokey_head_geo
#define MODEL_POKEY_BODY_PART 0x55 // pokey_body_part_geo
#define MODEL_TORNADO 0x56 // tornado_seg5_geo_05014630
#define MODEL_TWEESTER 0x56 // tweester_geo
#define MODEL_KLEPTO 0x57 // klepto_geo
#define MODEL_EYEROK_LEFT_HAND 0x58 // eyerok_left_hand_geo
#define MODEL_EYEROK_RIGHT_HAND 0x59 // eyerok_right_hand_geo

View File

@@ -382,6 +382,18 @@
#define BBH_DYNAMIC_SURFACE_ROOM 0
#define BBH_OUTSIDE_ROOM 13
/* Coffin Spawner */
/* oAction */
#define COFFIN_SPAWNER_ACT_COFFINS_UNLOADED 0
/* Coffin */
/* oAction */
#define COFFIN_ACT_IDLE 0
#define COFFIN_ACT_STAND_UP 1
/* oBehParams2ndByte */
#define COFFIN_BP_STATIC 0
/* WDW Arrow Lift */
/* oAction */
#define ARROW_LIFT_ACT_IDLE 0
@@ -853,6 +865,17 @@
#define SKEETER_ACT_LUNGE 1
#define SKEETER_ACT_WALK 2
/* Tweester */
/* oAction */
#define TWEESTER_ACT_IDLE 0
#define TWEESTER_ACT_CHASE 1
#define TWEESTER_ACT_HIDE 2
/* oSubAction */
#define TWEESTER_SUB_ACT_WAIT 0
#define TWEESTER_SUB_ACT_CHASE 0
/* Triplet butterfly */
/* oAction */
#define TRIPLET_BUTTERFLY_ACT_INIT 0

View File

@@ -132,7 +132,7 @@
#define /*0x1B4*/ oWallAngle OBJECT_FIELD_U32(0x4B)
#define /*0x1B8*/ oFloorType OBJECT_FIELD_S16(0x4C, 0)
#define /*0x1BA*/ oFloorRoom OBJECT_FIELD_S16(0x4C, 1)
#define /*0x1BC*/ oUnk1BC OBJECT_FIELD_S32(0x4D)
#define /*0x1BC*/ oAngleToHome OBJECT_FIELD_S32(0x4D)
#define /*0x1C0*/ oFloor OBJECT_FIELD_SURFACE(0x4E)
#define /*0x1C4*/ oDeathSound OBJECT_FIELD_S32(0x4F)
@@ -1042,8 +1042,8 @@
#define /*0x0F4*/ oTumblingBridgeUnkF4 OBJECT_FIELD_S32(0x1B)
/* Tweester */
#define /*0x0F4*/ oTweesterUnkF4 OBJECT_FIELD_S32(0x1B)
#define /*0x0F8*/ oTweesterUnkF8 OBJECT_FIELD_S32(0x1C)
#define /*0x0F4*/ oTweesterScaleTimer OBJECT_FIELD_S32(0x1B)
#define /*0x0F8*/ oTweesterUnused OBJECT_FIELD_S32(0x1C)
/* Ukiki */
#define /*0x0F4*/ oUkikiTauntCounter OBJECT_FIELD_S16(0x1B, 0)

View File

@@ -15,14 +15,23 @@
#define SEG_POOL_START 0x8005C000
#define SEG_POOL_END SEG_BUFFERS
#define SEG_GODDARD 0x8016F000
#define SEG_BUFFERS 0x801C1000
#ifdef VERSION_EU
#define SEG_MAIN 0x80241800 // TODO: Investigate why it's different?
#else
#define SEG_MAIN 0x80246000
#endif
#ifdef VERSION_EU
#define SEG_ENGINE 0x8036FF00
#else
#define SEG_ENGINE 0x80378800
#endif
#define SEG_FRAMEBUFFERS 0x8038F800
#else /* Use Expansion Pak space for pool. */

View File

@@ -164,8 +164,8 @@
#define ACT_FLAG_CONTROL_JUMP_HEIGHT /* 0x02000000 */ (1 << 25)
#define ACT_FLAG_ALLOW_FIRST_PERSON /* 0x04000000 */ (1 << 26)
#define ACT_FLAG_PAUSE_EXIT /* 0x08000000 */ (1 << 27)
#define ACT_FLAG_SWIMMING_OR_FLYING /* 0x10000000 */ (1 << 28) // not checked by game
#define ACT_FLAG_WATER_OR_TEXT /* 0x20000000 */ (1 << 29) // not checked by game
#define ACT_FLAG_SWIMMING_OR_FLYING /* 0x10000000 */ (1 << 28)
#define ACT_FLAG_WATER_OR_TEXT /* 0x20000000 */ (1 << 29)
#define ACT_FLAG_THROWING /* 0x80000000 */ (1 << 31)
#define ACT_UNINITIALIZED 0x00000000 // (0x000)

View File

@@ -226,6 +226,102 @@
#ifdef VERSION_EU
/**
* File Select Text
*/
#define TEXT_RETURN_FR _("RETOUR")
#define TEXT_RETURN_DE _("ZURÜCK")
#define TEXT_CHECK_SCORE_FR _("SCORE")
#define TEXT_CHECK_SCORE_DE _("LEISTUNG")
#define TEXT_COPY_FILE_FR _("COPIER")
#define TEXT_COPY_FILE_DE _("KOPIEREN")
#define TEXT_ERASE_FILE_FR _("EFFACER")
#define TEXT_ERASE_FILE_DE _("LÖSCHEN")
#define TEXT_SELECT_FILE_FR _("CHOISIR FICHIER")
#define TEXT_SELECT_FILE_DE _("WwHLE SPIEL")
#define TEXT_SCORE_FR _("SCORE")
#define TEXT_SCORE_DE _("LEISTUNG")
#define TEXT_COPY_FR _("COPIER")
#define TEXT_COPY_DE _("KOPIEREN")
#define TEXT_ERASE_FR _("EFFACER")
#define TEXT_ERASE_DE _("LÖSCHEN")
#define TEXT_OPTION _("OPTION") // new in EU
#define TEXT_OPTION_FR _("OPTION")
#define TEXT_OPTION_DE _("OPTIONEN")
#define TEXT_CHECK_FILE_FR _("VOIR SCORE")
#define TEXT_CHECK_FILE_DE _("VON WELCHEM SPIEL")
#define TEXT_NO_SAVED_DATA_EXISTS_FR _("AUCUNE SAUVEGARDE DISPONIBLE")
#define TEXT_NO_SAVED_DATA_EXISTS_DE _("KEIN SPIEL VORHANDEN")
#define TEXT_COPY_FILE_BUTTON_FR _("COPIER FICHIER")
#define TEXT_COPY_FILE_BUTTON_DE _("SPIEL KOPIEREN")
#define TEXT_COPY_IT_TO_WHERE_FR _("COPIER SUR?")
#define TEXT_COPY_IT_TO_WHERE_DE _("WOHIN KOPIEREN?")
#define TEXT_COPYING_COMPLETED_FR _("COPIE ACHEVEÉ")
#define TEXT_COPYING_COMPLETED_DE _("SPIEL KOPIERT")
#define TEXT_SAVED_DATA_EXISTS_FR _("SAVEGARDE EXISTANTE")
#define TEXT_SAVED_DATA_EXISTS_DE _("BEREITS BELEGT")
#define TEXT_NO_FILE_TO_COPY_FROM_FR _("AUCUN FICHIER VIDE")
#define TEXT_NO_FILE_TO_COPY_FROM_DE _("KEIN PLATZ VORHANDEN")
#define TEXT_YES_FR _("OUI")
#define TEXT_YES_DE _("JA")
#define TEXT_NO_FR _("NON")
#define TEXT_NO_DE _("NEIN")
#define TEXT_ERASE_FILE_BUTTON_FR _("EFFACER FICHIER")
#define TEXT_ERASE_FILE_BUTTON_DE _("SPIEL LxSCHEN")
#define TEXT_SURE_FR _("OK?")
#define TEXT_SURE_DE _("SICHER?")
#define TEXT_FILE_MARIO_A_JUST_ERASED_FR _("MARIO A EFFACÉ")
#define TEXT_FILE_MARIO_A_JUST_ERASED_DE _("MARIO A GELÖSCHT")
#define TEXT_SOUND_SELECT_FR _("SON")
#define TEXT_SOUND_SELECT_DE _("SOUND")
#define TEXT_LANGUAGE_SELECT _("LANGUAGE SELECT") // new in EU
#define TEXT_LANGUAGE_SELECT_FR _("SELECTION LANGUE")
#define TEXT_LANGUAGE_SELECT_DE _("WwHLE SPRACHE")
#define TEXT_STEREO_FR _("STÉRÉO")
#define TEXT_MONO_FR _("MONO")
#define TEXT_HEADSET_FR _("CASQUE")
#define TEXT_STEREO_DE _("STEREO")
#define TEXT_MONO_DE _("MONO")
#define TEXT_HEADSET_DE _("PHONES")
#define TEXT_ENGLISH _("ENGLISH")
#define TEXT_FRENCH _("FRANÇAIS")
#define TEXT_GERMAN _("DEUTSCH")
#define TEXT_HI_SCORE_FR _("MEILLEUR SCORE")
#define TEXT_HI_SCORE_DE _("BESTLEISTUNG")
#define TEXT_MY_SCORE_FR _("MON SCORE")
#define TEXT_MY_SCORE_DE _("LEISTUNG")
#define TEXT_NEW_FR _("VIDE")
#define TEXT_NEW_DE _("FREI")
/**
* Menus Text (Pause, Course Completed)
*/
@@ -291,6 +387,89 @@
#define TEXT_LETS_HAVE_CAKE_DE _("Laßt uns einen leckeren Kuchen backen...")
#define TEXT_FOR_MARIO_DE _("...für Mario...")
/**
* Course Table names for Score Menu Save view
*/
#define TEXT_MENU_BOB _(" 1 BOB-OMB BATTLEFIELD")
#define TEXT_MENU_WF _(" 2 WHOMP'S FORTRESS")
#define TEXT_MENU_JRB _(" 3 JOLLY ROGER BAY")
#define TEXT_MENU_CCM _(" 4 COOL, COOL MOUNTAIN")
#define TEXT_MENU_BBH _(" 5 BIG BOO'S HAUNT")
#define TEXT_MENU_HMC _(" 6 HAZY MAZE CAVE")
#define TEXT_MENU_LLL _(" 7 LETHAL LAVA LAND")
#define TEXT_MENU_SSL _(" 8 SHIFTING SAND LAND")
#define TEXT_MENU_DDD _(" 9 DIRE, DIRE DOCKS")
#define TEXT_MENU_SL _("10 SNOWMAN'S LAND")
#define TEXT_MENU_WDW _("11 WET-DRY WORLD")
#define TEXT_MENU_TTM _("12 TALL, TALL MOUNTAIN")
#define TEXT_MENU_THI _("13 TINY-HUGE ISLAND")
#define TEXT_MENU_TTC _("14 TICK TOCK CLOCK")
#define TEXT_MENU_RR _("15 RAINBOW RIDE")
#define TEXT_MENU_BITDW _(" BOWSER IN THE DARK WORLD")
#define TEXT_MENU_BITFS _(" BOWSER IN THE FIRE SEA")
#define TEXT_MENU_BITS _(" BOWSER IN THE SKY")
#define TEXT_MENU_PSS _(" THE PRINCESS'S SECRET SLIDE")
#define TEXT_MENU_COTMC _(" CAVERN OF THE METAL CAP")
#define TEXT_MENU_TOTWC _(" TOWER OF THE WING CAP")
#define TEXT_MENU_VCUTM _(" VANISH CAP UNDER THE MOAT")
#define TEXT_MENU_WMOTR _(" WING MARIO OVER THE RAINBOW")
#define TEXT_MENU_SA _(" THE SECRET AQUARIUM")
#define TEXT_MENU_NONE _("")
#define TEXT_MENU_STARS _(" CASTLE SECRET STARS")
#define TEXT_MENU_BOB_FR _(" 1 BATAILLE DE BOB-OMB")
#define TEXT_MENU_WF_FR _(" 2 FORTERESSE DE WHOMP")
#define TEXT_MENU_JRB_FR _(" 3 BAIE DES PIRATES")
#define TEXT_MENU_CCM_FR _(" 4 MONTAGNE GLA-GLA")
#define TEXT_MENU_BBH_FR _(" 5 MANOIR DE BIG BOO")
#define TEXT_MENU_HMC_FR _(" 6 CAVERNE BRUMEUSE")
#define TEXT_MENU_LLL_FR _(" 7 LAVES FATALES")
#define TEXT_MENU_SSL_FR _(" 8 SABLES TROP MOUVANTS")
#define TEXT_MENU_DDD_FR _(" 9 AFFREUX BASSIN")
#define TEXT_MENU_SL_FR _("10 CHEZ LE ROI DES NEIGES")
#define TEXT_MENU_WDW_FR _("11 MONDE TREMPE-SECHE")
#define TEXT_MENU_TTM_FR _("12 TROP HAUTE MONTAGNE")
#define TEXT_MENU_THI_FR _("13 ILE GRANDS-PETITS")
#define TEXT_MENU_TTC_FR _("14 HORLOGE TIC-TAC")
#define TEXT_MENU_RR_FR _("15 COURSE ARC-EN-CIEL")
#define TEXT_MENU_BITDW_FR _(" BOWSER DES TENEBRES")
#define TEXT_MENU_BITFS_FR _(" BOWSER DES LAVES")
#define TEXT_MENU_BITS_FR _(" BOWSER DES CIEUX")
#define TEXT_MENU_PSS_FR _(" GLISSADE DE LA PRINCESSE")
#define TEXT_MENU_COTMC_FR _(" MINE DES CASQUETTES-METAL")
#define TEXT_MENU_TOTWC_FR _(" INTERRUPTEUR DE LA TOUR AILEE")
#define TEXT_MENU_VCUTM_FR _(" INVISIBLE SOUS LES DOUVES")
#define TEXT_MENU_WMOTR_FR _(" AU-DELA DE L'ARC-EN-CIEL")
#define TEXT_MENU_SA_FR _(" AQUARIUM SECRET")
#define TEXT_MENU_NONE_FR _("")
#define TEXT_MENU_STARS_FR _(" ETOILES SECRETES")
#define TEXT_MENU_BOB_DE _(" 1 BOB-OMBS BOMBENBERG")
#define TEXT_MENU_WF_DE _(" 2 WUMMPS WUCHTWALL")
#define TEXT_MENU_JRB_DE _(" 3 PIRATENBUCHT PANIK")
#define TEXT_MENU_CCM_DE _(" 4 BIBBERBERG BOB")
#define TEXT_MENU_BBH_DE _(" 5 BIG BOOS BURG")
#define TEXT_MENU_HMC_DE _(" 6 GRÜNE GIFTGROTTE")
#define TEXT_MENU_LLL_DE _(" 7 LAVA LAGUNE")
#define TEXT_MENU_SSL_DE _(" 8 WOBIWABA WÜSTE")
#define TEXT_MENU_DDD_DE _(" 9 WILDE WASSERWERFT")
#define TEXT_MENU_SL_DE _("10 FROSTBEULEN FRUST")
#define TEXT_MENU_WDW_DE _("11 ATLANTIS AQUARIA")
#define TEXT_MENU_TTM_DE _("12 FLIEGENPILZ FIASKO")
#define TEXT_MENU_THI_DE _("13 GULLIVER GUMBA")
#define TEXT_MENU_TTC_DE _("14 TICK TACK TRAUMA")
#define TEXT_MENU_RR_DE _("15 REGENBOGEN RASEREI")
#define TEXT_MENU_BITDW_DE _(" BOWSERS SCHATTENWELT")
#define TEXT_MENU_BITFS_DE _(" BOWSERS LAVASEE")
#define TEXT_MENU_BITS_DE _(" BOWSERS LUFTSCHLOSS")
#define TEXT_MENU_PSS_DE _(" TOADSTOOLS RUTSCHBAHN")
#define TEXT_MENU_COTMC_DE _(" GRÜNER SCHALTERPALAST")
#define TEXT_MENU_TOTWC_DE _(" ROTER SCHALTERPALAST")
#define TEXT_MENU_VCUTM_DE _(" BLAUER SCHALTERPALAST")
#define TEXT_MENU_WMOTR_DE _(" REGENBOGEN FEUERWERK")
#define TEXT_MENU_SA_DE _(" VERSTECKTES AQUARIUM")
#define TEXT_MENU_NONE_DE _("")
#define TEXT_MENU_STARS_DE _(" GEHEIME STERNE")
#endif
#endif

View File

@@ -7,6 +7,18 @@
#include <ultra64.h>
#include "macros.h"
// Certain functions are marked as having return values, but do not
// actually return a value. This causes undefined behavior, which we'd rather
// avoid on modern GCC. This only impacts -O2 and can matter for both the function
// itself and functions that call it.
#ifdef AVOID_UB
#define BAD_RETURN(cmd) void
#else
#define BAD_RETURN(cmd) cmd
#endif
struct Controller
{
/*0x00*/ s16 rawStickX; //
@@ -233,16 +245,16 @@ struct Surface
struct MarioBodyState
{
/*0x00*/ u32 action;
/*0x04*/ s8 capState;
/*0x04*/ s8 capState; /// see MarioCapGSCId
/*0x05*/ s8 eyeState;
/*0x06*/ s8 handState;
/*0x07*/ s8 unk07;
/*0x07*/ s8 wingFlutter; /// whether Mario's wing cap wings are fluttering
/*0x08*/ s16 modelState;
/*0x0A*/ s8 grabPos;
/*0x0B*/ u8 unk0B;
/*0x0C*/ Vec3s unkC;
/*0x12*/ Vec3s unk12;
/*0x18*/ Vec3f unk18;
/*0x0B*/ u8 punchState; /// 2 bits for type of punch, 6 bits for punch animation timer
/*0x0C*/ Vec3s torsoAngle;
/*0x12*/ Vec3s headAngle;
/*0x18*/ Vec3f heldObjLastPosition; /// also known as HOLP
u8 padding[4];
};