Skip to content

Game structs

61 struct typedefs from the decompilation's include/*.h, as written there. This game has no mod SDK yet, so there is no generated openpete_game_structs.h and no pinned sizes or offsets; pointer fields are guest virtual addresses.

Source links open the definition in the decompilation at commit 40538a5237, the checkout this SDK was generated from.

ActiveSound

Source: include/spu.h:63-78

typedef struct {
    char unk0;
    char unk1;
    char unk2;
    char unk3;
    int unk4;
    int unk8;
    int unkC;
    int unk10;
    int unk14;
    int unk18; // pitch?
    int unk1C;
    int unk20;
    int unk24;
    Moby* unk28;
} ActiveSound;

Angle

Source: include/common.h:94-96

typedef struct {
    unsigned char roll, pitch, yaw;
} Angle;

Animation

Source: include/common.h:98-103

typedef struct {
    unsigned char id;
    unsigned char nextId;
    unsigned char frame;
    unsigned char nextFrame;
} Animation;

AreaHeader

Source: include/common.h:75-78

typedef struct {
    DataHeader env;    // models?
    DataHeader layout;
} AreaHeader;

Camera

Source: include/camera.h:66-111

typedef struct {
    int unk0;
    int unk4;
    int unk8;
    int unkc;
    int unk10;
    int unk14;
    int unk18;
    int unk1c;
    int unk20;
    int unk24;
    Vector3D nextCameraPosCartesian;
    Vector3D currentCameraPosCartesian;
    int unk40;
    short unk44;
    short unk46;
    short unk48;
    short unk4a;
    int cameraState; // refer to CameraState enum; set to int so it's signed
    int unk50; // 8006E048
    int stateTimer; // time in current camera state
    int unk58;
    char unk5c[4];
    Vector3D unk60;
    int unk6c;
    Vector3D unk70;
    CameraPositionArray unk7c;
    int unk130;
    int unk134;
    int unk138;
    int unk13c;
    char unk140[8];
    int unk148[8];
    int unk168;
    Moby* unk16c;
    CameraPosition unk170; // "target relative camera pos during gameplay" ???
    Vector3D unk184;
    CameraPosition unk190;
    int unk1a4;
    int unk1a8;
    int unk1ac[2];
    int unk1b4;
    Vector3D unk1b8;
    int unk1c4[12];
    short unk1f4[4];
} Camera;

CameraPosition

Source: include/camera.h:12-16

typedef struct {
    SphericalPosition pos;
    int yaw;
    int pitch;
} CameraPosition;

CameraPositionArray

Source: include/camera.h:62-64

typedef struct {
    CameraPosition pos[9]; // not sure what they all do yet!
} CameraPositionArray;

CdLoc

Source: include/common.h:305-310

typedef struct {
    unsigned char minute;
    unsigned char second;
    unsigned char sector;
    unsigned char track;
} CdLoc;

CheatFlags

Source: include/cheat.h:7-23

typedef struct {
    unsigned char invincible;
    unsigned char squidboard;
    unsigned char cameraMode;
    unsigned char superflame;
    unsigned char warpToLevel; // probably
    unsigned char previousLevel;
    unsigned char bigHeadMode;
    unsigned char flatMode;
    int spyroWidth;
    int spyroHeight;
    int spyroLength;
    unsigned char bodyColour;
    unsigned char extraHitpoint;
    unsigned char warpToArea;
    unsigned char dialogueTestIndex;
} CheatFlags;

CollisionData

Source: include/common.h:474-483

typedef struct {
    Vector3D D_80071900; // 80071900
    Vector3D targetedPosition; // 8007190c
    Vector3D D_80071918; // 80071918
    int D_80071924; // 80071924 // xxyyyyyy: xx surface sound type; yyyyyy index of special surface type, or 0x3F if not special
    int D_80071928; // 80071928
    int D_8007192C; // 8007192c
    int D_80071930; // 80071930
    int D_80071934; // 80071934
} CollisionData;

Colour

Source: include/common.h:105-107

typedef struct {
    unsigned char r, g, b, a;
} Colour;

CutsceneWads

Source: include/common.h:41-45

typedef struct {
    DataHeader lvl;
    DataHeader ovl;
    DataHeader mdls;
} CutsceneWads;

DataHeader

Source: include/common.h:36-39

typedef struct {
    int offset;
    int size;
} DataHeader;

EnemyTag

Source: include/common.h:488-511

typedef struct {
    char unk0; // ?
    char unk1; // ?
    char unk2; // ?
    char unk3; // ?
    short unk4;
    short unk6;
    char unk8; // ?
    char unk9; // ?
    char unkA; // ?
    char unkB; // ?
    char unkC; // ?
    char unkD; // ?
    char unkE;
    char unkF;
    char unk10;
    char unk11;
    char unk12;
    char unk13;
    char unk14;
    char unk15;
    char unk16;
    char unk17;
} EnemyTag;

FullPosition

Source: include/common.h:549-552

typedef struct {
    Vector3D pos;
    int angle;
} FullPosition;

Game

Source: include/common.h:260-264

typedef struct {
    enum Gamestate state;
    int unk1;
    int unk2;
} Game;

GemToll

Source: include/common.h:524-526

typedef struct {
    short value, paid;
} GemToll;

Hud

Source: include/hud.h:68-91

typedef struct {
    short DAT_800719c8; // 800719c8

    // indices of sprites within the full sprite list
    short reticleFrame; // 800719ca
    short numberFrame; // 800719cc
    short gemFrame; // 800719ce
    short textBoxCornerFrame; // 800719d0

    short mainHudIsOnScreen; // 800719d2 // e.g. 1 when pause menu open, 0 otherwise
    short DAT_800719d4; // 800719d4
    short DAT_800719d6; // 800719d6
    short DAT_800719d8; // 800719d8
    short DAT_800719da; // 800719da
    short DAT_800719dc; // 800719dc
    short DAT_800719de; // 800719de
    short DAT_800719e0; // 800719e0
    char DAT_800719e2; // 800719e2
    char DAT_800719e3; // 800719e3
    int DAT_800719e4; // 800719e4
    short DAT_800719e8; // 800719e8
    char DAT_800719ea; // 800719ea
    char DAT_800719eb; // 800719eb
} Hud;

HudEntry

Source: include/hud.h:31-66

typedef struct {
    short unk0; // x
    short unk2; // y
    short unk4; // spriteClass
    unsigned short unk6; // max
    int* unk8; // display variable
    void (*unkC)(void*);
    void (*unk10)(void*); // likely the function to call when the value increments
    int (*unk14)(void*);
    char displayMode; // display mode, i.e. placement and animations
    char isOffScreen;
    short unk1A;
    SpriteAnimationData unk1C; // SpriteAnimationData SpriteData
    char unk22;
    char unk23;
    short unk24;
    unsigned short unk26;
    int* unk28;
    void (*unk2C)(void*);
    void (*unk30)(void*); // likely the function to call when the value increments
    int (*unk34)(void*);
    unsigned short unk38;
    short unk3A;
    char unk3C;
    char unk3D;
    char unk3E;
    char movementFrame;
    unsigned short unk40;
    unsigned short unk42;
    unsigned short unk44;
    short unk46;
    short unk48;
    short unk4A;
    int unk4C;
    int unk50;
} HudEntry;

LevelWadHeader

Source: include/common.h:80-89

typedef struct {
    DataHeader vramSpu;              // 80072098
    DataHeader scene;                // 800720A0 env?
    AreaHeader area[4];              // 800720A8 could be a struct within levelwadheader instead
    int nothing1[4];                 // 800720E8 padding1
    DataHeader dragonModels[6];      // 800720F8
    int nothing2[4];                 // 80072128 padding2
    unsigned int modelOffsets[64];   // 80072138
    unsigned short modelClasses[64]; // 80072238
} LevelWadHeader;

LevelWads

Source: include/common.h:47-50

typedef struct {
    DataHeader lvl;
    DataHeader ovl;
} LevelWads;

LoadingData

Source: include/loaders.h:6-19

typedef struct {
    int* D_800722b8; // ovlStartPtr
    int* D_800722bc; // lvlWadHeaderPtr?
    int* D_800722c0; // scenePtr
    int* D_800722c4; // envPtr
    char* D_800722c8; // layoutPtr // LevelWadHeader*? void*?
    char* D_800722cc; // demoInputsPtr
    int* D_800722d0;
    int* D_800722d4;
    int* D_800722d8;
    int* D_800722dc;
    int* D_800722e0; // ptr
    int* D_800722e4;
} LoadingData;

Moby

Source: include/common.h:109-141

typedef struct {
    void *mobyTag;                   // 0x00 void* (4 byte)
    struct Moby *nextCollision;      // 0x04 Moby* (4 byte)
    unsigned int unknownCollision;   // 0x08
    Vector3D position;               // 0x0C
    int damageFlags;                 // 0x18 // enum TODO
    int unknown;                     // 0x1C
    SHORTMATRIX rotationMatrix;      // 0x20 // formerly "unsigned char unknown1[20]"
    unsigned short collisionBlock;   // 0x34
    short mobyClass;                 // 0x36
    short distanceToGround;          // 0x38, used as mobyClass in cutscenes
    unsigned char linkedMoby;        // 0x3A
    unsigned char unknown2;          // 0x3B
    Animation animationState;        // 0x3C
    unsigned char animationProgress; // 0x40
    unsigned char unknown3[2];       // 0x41
    unsigned char animationRun;      // 0x43
    Angle angle;                     // 0x44
    unsigned char unknown4;          // 0x47
    unsigned char state;             // 0x48
    unsigned char substate;          // 0x49
    unsigned char updateDistance;    // 0x4A, 0xFF if the moby should be updated anywhere
    unsigned char unknown5;          // 0x4B, seems to be 1 if the Moby is to be updated
    unsigned char lowDrawDistance;   // 0x4C, if 0 moby is invisible
    unsigned char drawn;             // 0x4D, 0-2
    unsigned char highDrawDistance;  // 0x4E
    unsigned char size;              // 0x4F // increasing scales down
    unsigned char gemValue;          // 0x50
    unsigned char unkb;              // 0x51
    unsigned char subtype;           // 0x52
    char difficultyFlags;            // 0x53
    Colour colour;                   // 0x54
} Moby;

MoneybagsData

Source: include/common.h:529-542

typedef struct {
    GemToll level_12;
    GemToll level_23;
    GemToll level_10;
    GemToll level_21;
    GemToll level_13;
    GemToll level_34;
    GemToll level_20;
    GemToll level_30;
    GemToll level_42;
    GemToll level_40;
    GemToll level_31;
    GemToll level_41;
} MoneybagsData;

OvlHeader

Source: include/ovl_header.h:37-68

typedef struct { // possibly NOT a struct, may want to define each of these separately in a header file
    unsigned int ovlId;
    char* ovlEnd;
    void (**MobyUpdate)(Moby* moby); // functions named MobyUpdate_$CLASS according to Sep04 printfs
    SpeechData* speechData[1]; // there are LANGUAGE_COUNT of these together! TODO add build param
    Moby* (*SpawnMoby)(int class, Moby* moby); // TODO - should be a function pointer, not sure about the in/outputs
    char* (*SpawnParticle)(int unk1, int unk2, Vector3D* unk3, Vector3D* unk4);
    char* (*UpdateParticles)(int delta);
    void* unk1b[6]; // TODO - animation related, in all levels and cutscenes
    void* unk1c[4]; // TODO - camera related, in all levels and cutscenes
    void* unk2a[7]; // TODO - level-specific; [0] called by Sparx / butterflies, [1] SetCritter / UpdateActiveCritter
    int (*unk2b)(Vector3D*, int, int); // TODO - level-specific
    int (*unk2c)(Vector3D*); // TODO - level-specific
    void* unk2d[6]; // TODO - level-specific
    int (*unk2da)(short*); // sprite related
    void (*unk2db)(void*); // void (*unk2db)(HudStruct*) actually, maybe int output
    void (*unk2dc)(void*); // void (*unk2dc)(HudStruct*) actually, maybe int output
    void (*SpawnFragments)(int fragmentCount, int fragmentClass, Moby* spawningMoby, Vector3D* offsetVecs, int unk2, short unk3);
    void* unk2dd[5]; // TODO - level-specific
    void* unk3[2]; // TODO, speedway related
    void (*UpdateSpeedwayMenu)(enum UpdateFlags updateFlags); // D_8007437C - Speedway menu update
    void* unk4[10]; // TODO, speedway related
    void* unk5[47]; // TODO
    void* unk6[2]; // TODO cutscene related
    void (*UpdateCutscene)(); // D_8007446C - Cutscene update
    void* unk7[3]; // TODO, cutscene related
    void* unk8; // Skateboarding menu init state
    void* unk9; // Skateboarding set record
    void (*UpdateSkateMenu)(); // D_80074484 - Skateboarding menu update
    void* unka; // Skateboarding menu draw?
    void* unkb; // TODO
} OvlHeader;

Pad

Source: include/pad.h:53-69

typedef struct { // e.g. 8006e508
    unsigned char controllerType; //  0 - ControllerType enum
    unsigned char unk1b;          //  1
    unsigned char unk1c;          //  2
    unsigned char unk1d;          //  3
    unsigned char vibrationMode;  //  4
    char unk2[3];                 //  5,  6,  7
    StickState unk2a;             //  8
    StickState unk2b[4];          //  C, 10, 14, 18
    int unk3[4];                  // 1C, 20, 24, 28
    char buttonPressed;           // 2C
    char dpadPressed;             // 2D
    char unk4;                    // 2E
    char unk4a;                   // 2F
    PadState state;               // 30
    PadState store[4];            // 40, 50, 60, 70
} Pad;

PadState

Source: include/pad.h:38-43

typedef struct {
    enum PadInput held; // currently held
    enum PadInput pressed; // newly pressed
    enum PadInput released; // newly released
    StickState stick;
} PadState;

Particle

Source: include/common.h:422-444

typedef struct {
    char unk0; // possible class
    unsigned char unk1;
    char unk2;
    char unk3;
    short unk4; // ShortVector3D?
    short unk6;
    short unk8;
    char unkA;
    char unkB;
    char unkC;
    char unkD;
    char unkE;
    char unkF;
    short unk10;
    short unk12; // ShortVector3D?
    short unk14;
    short unk16;
    short unk18; // ShortVector3D?
    short unk1A;
    short unk1C;
    short unk1E;
} Particle;

PathNode

Source: include/common.h:459-462

typedef struct {
    Vector3D pos;
    int unk;
} PathNode;

PathTag

Source: include/common.h:464-469

typedef struct {
    char nodeCount;
    char curNode;
    char unk[10];
    PathNode* nodes;
} PathTag;

PauseData

Source: include/common.h:352-369

typedef struct {
    int frameCount; // 8006fbc4
    int dat_8006fbc8; // pause scenario / loadstate? 8006fbc8
    int cursorPos; // 8006fbcc
    int menuType; // 8006fbd0
    int dat_8006fbd4; // 8006fbd4

    // Could be in a different struct, unclear
    int dat_8006fbd8; // 8006fbd8
    int dat_8006fbdc; // 8006fbdc
    int dat_8006fbe0; // 8006fbe0
    int dat_8006fbe4; // 8006fbe4
    int dat_8006fbe8; // 8006fbe8
    int dat_8006fbec; // 8006fbec
    int dat_8006fbf0; // 8006fbf0
    int dat_8006fbf4; // 8006fbf4
    int* dat_8006fbf8; // 8006fbf8, some kind of pointer seems to be used in Atlas
} PauseData;

PauseData2

Source: include/common.h:371-379

typedef struct {
    // Probably in a different struct, to get struct usage to match properly
    DRAWENV dat_8006fbfc; // 8006fbfc
    DISPENV dat_8006fc58; // 8006fc58
    int dat_8006fc6c; // 8006fc6c
    DRAWENV dat_8006fc70; // 8006fc70
    DISPENV dat_8006fccc; // 8006fccc
    int dat_8006fce0; // 8006fce0 // a ptr used in some memcpys / loading, so perhaps unrelated?
} PauseData2;

PortalSpawn

Source: include/common.h:544-547

typedef struct {
    Vector3D16 pos;
    short swimming;
} PortalSpawn;

ProgressFlags

Source: include/common.h:146-207

typedef struct {
    unsigned char lvl10_HunterStart;
    unsigned char lvl10_Bianca;
    unsigned char lvl10_TikiEnteredPortal;
    unsigned char addMoneybagsGemsToTotal; // unused under normal means
    unsigned char lvl31_Bentley;
    unsigned char lvl11_Sheila;
    unsigned char lvl13_SgtByrd;
    unsigned char lvl24_Bentley;
    unsigned char lvl23_Sheila;
    unsigned char lvl14_Sheila;
    unsigned char lvl10_HunterLake;
    unsigned char lvl10_SealEnteredPortal;
    unsigned char lvl33_Agent9;
    unsigned char lvl16_Sheila;
    unsigned char lvl80_TheDancingBear;
    unsigned char lvl20_Bianca;
    unsigned char lvl34_SgtByrd;
    unsigned char lvl78_ByrdJamesByrd;
    unsigned char lvl79_ADuplicitousLarcenousUrsine;
    unsigned char lvl10_HunterFirstLedge;
    unsigned char lvl00_MoneybagsSpokenTo;
    unsigned char lvl20_EnchantedTowersOpen;
    unsigned char lvl10_BalloonUsable;
    unsigned char lvl20_WhirligigUsable;
    unsigned char lvl30_RocketUsable;
    unsigned char unk25;
    unsigned char lvl77_NoHardFeelings;
    unsigned char lvl43_Agent9;
    unsigned char lvl17_BuzzDefeated;
    unsigned char lvl27_SpikeDefeated;
    unsigned char lvl37_ScorchDefeated;
    unsigned char lvl47_SorceressDefeated;
    unsigned char lvl41_Bentley;
    unsigned char lvl44_Agent9;
    unsigned char lvl42_Sheila;
    unsigned char lvl30_Bianca;
    unsigned char lvl40_Bianca;
    unsigned char lvl10_CrawdadFarmComplete;
    unsigned char lvl20_SpiderTownComplete;
    unsigned char lvl30_StarfishReefComplete;
    unsigned char lvl40_BugbotFactoryComplete;
    unsigned char lvl18_CrawdadFarmTutorialComplete;
    unsigned char lvl00_HunterTrapped;
    unsigned char lvl40_BiancaSorceressDoor;
    unsigned char lvl40_SuperBonusRoundPortalOpen;
    unsigned char lvl50_Bianca;
    unsigned char lvl50_SkateboardingComplete;
    unsigned char lvl50_Submarines[7];
    unsigned char lvl50_UFOs[7];
    unsigned char lvl50_Thieves[5];
    unsigned char lvl46_Agent9ExtraDialogue; // unused under normal means
    unsigned char lvl10_ZoeAP;
    unsigned char lvl63_BiancaStrikesBack;
    unsigned char lvl65_SpikeIsBorn;
    unsigned char lvl67_AMonsterToEndAllMonsters;
    unsigned char lvl62_TheSecondWarning;
    unsigned char lvl64_HuntersTussle;
    unsigned char lvl66_AnApologyAndLunch;
    unsigned char lvl68_TheEscape;
    unsigned char lvl74_TheEnd;
} ProgressFlags;

PsyqPad

Source: include/pad.h:45-50

typedef struct {
    unsigned char status;
    unsigned char size_type;
    unsigned char input[2]; // button state, 2 bytes and inverted rather than a full four bytes
    StickState stick;
} PsyqPad;

SaveFile

Source: include/memcard.h:48-82

typedef struct {
    int saveId;                        // 0, for checking if the memory card has changed? Changed every save
    unsigned char fileId;              // 4, for checking if the memory card has changed? Preserved per save file
    unsigned char currentLevel;        // 5
    unsigned char lives;               // 6
    char pad1;                         // 7, seems to be unused
    unsigned char visitedLevels[40];   // 8
    unsigned char collections[40][32]; // 30, bitmasks e.g. for gems etc., 8 ints per level
    unsigned short gemTotals[40];      // 530
    unsigned char eggs[40];            // 580, bitmasks for eggs
    MoneybagsData moneybagsData;       // 5A8 // size 0x30
    ProgressFlags progressFlags;       // 5D8
    char dialogueBitmaskArray[40];     // 624, is this even used?
    int unk_8006c5d0;                  // 64C
    int deathCount;                    // 650, not sure if this is ever actually used
    int unk_8006c710;                  // 654
    int difficulty;                    // 658, the value, rather than the easy/medium/hard
    unsigned char actMetThresholds[40][6];   // 65C, high difficulty thresholds per egg
    unsigned char actPerformance[40][6];     // 74C, for the ACT
    unsigned char speedwayTrialsComplete[4]; // 83C
    int speedwayTrialRecords[4];             // 840
    unsigned char speedwayRacesComplete[4];  // 850
    int speedwayRaceRecords[4];        // 854
    int skateRecords[4];               // 864
    unsigned char skillPoints[20];     // 874
    char pad2;                         // 888, ?? unused??
    unsigned char activeCam;           // 889, active if 1
    unsigned char vibrationOn;         // 88A, on if 1
    unsigned char voicesOn;            // 88B, on if 1
    unsigned char soundVolume;         // 88C
    unsigned char musicVolume;         // 88D
    unsigned char stereoSpeaker;       // 88E, stereo if 1
    char pad3[109];                    // 88F, ???
    int checksum;                      // 8FC
} SaveFile;

Savepoint

Source: include/savepoint.h:8-21

typedef struct {
    int updated; // since entering?
    int collection[8]; // bitmask
    Vector3D spawnPos; // 0x24
    int unk30;
    int unk34;
    struct {
        int ptr; // upper byte is the data type
        int val;
    } savedMemory[4][64];
    int savedMemoryCount[4];
    int swimState; // 0 standing, 1 surface, 2 dive
    int unk5;
} Savepoint;

SHORTMATRIX

Source: include/common.h:28-31

typedef struct { /* Similar to the one in libgte */
  short m[3][3]; /* 3x3 rotation matrix */
  short _pad;    /* padding */
} SHORTMATRIX;

SoundDefinition

Source: include/spu.h:49-61

typedef struct {
    int m_Addr;
    unsigned short unk4;
    unsigned short unk6;
    unsigned short unk8;
    unsigned short unkA;
    unsigned short unkC;
    unsigned short unkE;
    char unk10;
    char unk11;
    char unk12;
    char unk13;
} SoundDefinition;

SoundTable

Source: include/spu.h:6-45

typedef struct {
    unsigned char gemChime;
    unsigned char gemCollect;
    unsigned char bonk;
    unsigned char flame;
    unsigned char swallow;
    unsigned char spit;
    unsigned char underwater;
    unsigned char waterSurface;
    unsigned char waterDive;
    unsigned char squish;
    unsigned char waterPaddle;
    unsigned char iceSkate;
    unsigned char lavaBurn;
    unsigned char lavaDeath;
    unsigned char drown;
    unsigned char unsquish;
    unsigned char spyroSkid;
    unsigned char spyroLand;
    unsigned char spyroStop;
    unsigned char unk19;
    unsigned char headbash;
    unsigned char spyroHurt;
    unsigned char pauseEnter;
    unsigned char pauseExit;
    unsigned char pauseMove;
    unsigned char underwaterHit;
    unsigned char changeVolume;
    unsigned char supercharge;
    unsigned char unk28;
    unsigned char eggHatching;
    unsigned char timerRunOut;
    unsigned char extraLife;
    unsigned char unk32;
    unsigned char unk33;
    unsigned char jump;
    unsigned char skillPoint;
    unsigned char guidebookPageTurn;
    unsigned char levelCompleteFanfare;
} SoundTable;

Sparx

Source: include/common.h:212-223

typedef struct {
    int maxHitpoints; // D_8006580C
    int gemCollectRadius; // not strictly correctly labelled
    int unk1;
    int unk2;
    int breakContainers; // D_8006581C
    int treasureFinder; // D_80065820
    int colour;
    int targetedMobyDistance;
    int butterflyCount;
    Moby* targetedMoby; // Moby*
} Sparx;

SpecialSurface

Source: include/common.h:554-558

typedef struct {
    char m_Type; // 1: Lava; 2: Supercharge; 4: Ice; 6: Portal
    char unk1, unk2, unk3; // padding? maybe not needed
    int unk4; // depends on the surface as to whether there's any additional data, there may be another int needed
} SpecialSurface;

SpeechData

Source: include/common.h:287-294

typedef struct {    
    unsigned char typ;
    unsigned char msg;
    short channel;
    unsigned short len; // LBA
    short unk; // padding
    int offset; // LBA
} SpeechData;

SpeechProps

Source: include/common.h:270-282

typedef struct {
    unsigned char typ; // dialogue type
    char unk1a; // seems to trigger auto-talking when small enough?
    unsigned char nextMsg; // next one to use
    unsigned char lastMsg; // lastMsgId, e.g. 1 means there are 2 messages
    unsigned char prevMsg; // i.e. last played
    char autoTalk; // if set to nonzero, will change to 0 and start talking to Spyro when he's in range
    char talkTextHeight;
    char talkable; // i.e. 1 if close enough to talk to, and in talkable gameplay
    char unk2b[4]; // at least one byte here does seem to be used
    char* name; // should be array of length LANGUAGE_COUNT
    char* msg[1]; // length varies per class, and is multiplied in PAL
} SpeechProps;

SpeedwayData

Source: include/common.h:384-417

typedef struct {
    int speedwayIndex; // 8006FA38
    int gameMode;
    int dat_8006fa40;
    int dat_8006fa44;
    int dat_8006fa48;
    int dat_8006fa4c;
    int dat_8006fa50;
    int dat_8006fa54;
    int timeAttackMobys[4];
    int dat_8006fa68;
    int dat_8006fa6c;
    int currentSkateScore;
    int speedwayFramesElapsed;
    int lapNumber;
    int racePos;
    int dat_8006fa80;
    short dat_8006fa84;
    short dat_8006fa86;
    short dat_8006fa88;
    short dat_8006fa8a;
    int dat_8006fa8c;
    short dat_8006fa90;
    char dat_8006fa92;
    char dat_8006fa93;
    short dat_8006fa94;
    short dat_8006fa96;
    short dat_8006fa98;
    char dat_8006fa9a;
    char dat_8006fa9b;
    short dat_8006fa9c;
    short dat_8006fa9e;
    char dat_8006faa0[0xF0]; // unk
} SpeedwayData;

SpeedwayRecord

Source: include/common.h:513-522

typedef struct {
    int collectionMobyClasses[4];
    int trialComplete;
    int trialRecord;
    int unk1; // 4200 in level 15
    int unk2; // incorrectly loaded
    int unk3; // 4200 in level 15, seemingly not used?
    int raceComplete; // incorrectly not loaded or saved?
    int raceRecord; // in frames, 60fps
} SpeedwayRecord;

SphericalPosition

Source: include/camera.h:6-10

typedef struct {
    int azimuth;
    int elevation;
    unsigned int radius; // spherical radius
} SphericalPosition;

SpriteAnimationData

Source: include/hud.h:23-29

typedef struct {
    short index;
    char animationType;
    char frame;
    char unk1;
    char unk2;
} SpriteAnimationData;

SpriteData

Source: include/hud.h:4-11

typedef struct {
    unsigned char unk0;
    unsigned char unk1;
    short unk2;
    unsigned char unk4;
    unsigned char unk5;
    short unk6;
} SpriteData;

SpriteDefinition

Source: include/hud.h:13-21

typedef struct {
    short spriteClass;
    char frame;
    char frameCount;
    char animationType;
    char frameDelay;
    char unk6;
    char unk7;
} SpriteDefinition;

Spyro

Source: include/spyro.h:247-340

typedef struct {
    Vector3D position;         // 0
    Angle bodyRotation;        // C
    char padding1;             // padding?
    Angle headRotation;        // 10
    char padding2;             // padding?
    Animation bodyAnimation;   // 14
    Animation headAnimation;   // 18
    char unk3[4];              // 1C, possibly animation progress
    Colour cheatColour;        // 20
    int damageFlags;           // 24, enum todo
    int unk4[7];               // 28
    int unk4a;                 // 44 distance to feet, e.g. different for critters
    int animationState;        // 48 - see AnimationState
    int unk5;                  // 4C
    enum MovementState movementState;   // 50
    int animationStateFrames;  // 54, frames in current animationState
    int unk6b;                 // 58
    struct {
        int roll;              // 5C, overall roll, goes up to +-0x100
        int pitch;             // 60, overall pitch / elevation / incline, goes up to +-0x100
        int yaw;               // 64, overall yaw / azimuth, goes up to +-0x100
    } rotation;
    int unk7[3];               // 68
    Vector3D unk7a[4];         // 74, something speed related
    int unk7b;                 // A4, seemingly another yaw variable, a copy of rotation.yaw
    int unk7c;                 // A8
    int horizontalSpeed;       // AC, possibly target horizontal speed actually
    int unk8[2];               // B0, more horizontal speed variables (possibly two actual speeds, maybe one for prev frame)
    int ticksSinceLastSurfaceTouch; // B8, floor specifically
    int unk9a;                 // BC, surface touch
    int unk9b;                 // C0
    int unk9c;                 // C4
    int unk9d;                 // C8, some sort of speed variable
    int unk9e;                 // CC
    int unk9f;                 // D0
    int unk9g;                 // D4, related to unk9d
    int unk9h[9];              // D8
    char unk10[8];             // FC
    int unk11[8];              // 104
    Vector3D unk12;            // 124, copy of Spyro's position, for some reason
    int unk13a[3];             // 130
    Moby* unk13b;              // 13C
    int unk13ca;               // 140
    int unk13cb;               // 144
    short unk13cc;             // 148
    short unk13cd;             // 14A
    int unk13ce;               // 14C
    int unk13d[4];             // 150
    int unk13e[4];             // 160
    int unk13f[4];             // 170, spit state in the first int, just like the other spit state variable; 178 is the timer since last flame
    int unk13g[4];             // 180
    int unk13h[4];             // 190
    unsigned int unk14[5];     // 1A0
    char grounded;             // 1B4
    char unk15b;               // 1B5
    char unk15c;               // 1B6
    char unk15d;               // 1B7
    char unk15e;               // 1B8
    char idle;                 // 1B9
    char unk15g;               // 1BA
    char unk15h;               // 1BB
    int superflyTimer;         // 1BC
    int unk16a[4];             // 1C0
    int superflameTimer;       // 1D0, internally called super-spit
    int unk16b[3];             // 1D4
    int unk16c[3];             // 1E0
    enum AnimationState unknownAnimationStateVariable; // ? 1EC
    int unk17q;                // 1F0, sometimes 4 for some reason
    int unk17r;                // 1F4
    int unk17s;                // 1F8, some sort of z rotation (yaw?)
    int spitState;             // 1FC, 3 when holding something and 4 when spitting, 1 when flaming, etc. - maybe a head animation thing, matches other spit state variable
    int unk17t;                // 200
    int unk17u;                // 204
    int unk17v;                // 208
    int unk17a;                // 20C
    int unk17b;                // 210
    int unk17c;                // 214
    Moby* unk17d;              // 218, whirlwind moby pointer
    int unk17e;                // 21C
    int unk17f;                // 220
    int unk17g;                // 224
    Angle unk18;               // 228
    char padding3;             // 22B
    Vector3D unk19;            // 22C
    int unk20[3];              // 238
    int unk20a;                // 244 1 if currently a critter, seems to be used to hide Spyro
    int unk20b;                // 248 related to critters
    enum Critter critterMode;  // 24C i.e. the player
    Moby* critterMobyPtr;      // 250
    int unk21[11];             // [0] 254, 258, 25C, 260; [4] 264, 268, 26C, 270; [8] 274, 278, 27C
    int currentHealth;         // 280
    int unk22[25];             // [1] makes spyro invisible, [15] changes a lot and is -1 when Spyro is airborne
} Spyro;

StickState

Source: include/pad.h:31-36

typedef struct {
    unsigned char rx;
    unsigned char ry;
    unsigned char lx;
    unsigned char ly;
} StickState;

StreamingData

Source: include/common.h:320-347

typedef struct {
    int wadSector; // 8006e470
    int dat_8006e474; // 8006e474
    CdLoc dat_8006e478; // 8006e478
    int dat_8006e47c; // 8006e47c
    int dat_8006e480; // 8006e480
    int dat_8006e484; // 8006e484
    int dat_8006e488; // 8006e488

    // possible sub-struct here due to some assembly oddities, but seems to compile fine without it? Probably nothing
    int dat_8006e48c; // 8006e48c, possibly number of tracks (e..g 8 when playing music)
    int dat_8006e490; // 8006e490
    int dat_8006e494; // 8006e494
    int dat_8006e498; // 8006e498 // volatile in s1?
    int musicEnabled; // 8006e49c
    int dat_8006e4a0; // 8006e4a0
    int dat_8006e4a4; // 8006e4a4
    int dat_8006e4a8; // 8006e4a8
    int musicVolume; // 8006e4ac // actual xa music volume, as opposed to the menu value
    int speechVolume; // 8006e4b0 // as above, for dialogue?
    int dat_8006e4b4; // 8006e4b4

    XaAudioData dat_8006e4b8; // 8006e4b8
    XaAudioData musicData; // 8006e4cc
    XaAudioData dat_8006e4e0; // 8006e4e0
    XaAudioData speechData; // 8006e4f4 - dialogue
} StreamingData;

TalkTextData

Source: include/common.h:449-454

typedef struct {
    char model; // animation state
    char zAngle;
    char zOffset;
    char colour;
} TalkTextData;

Tracer

Source: include/tracers.h:12-20

typedef struct {
    Vector3D16* unk0;
    Vector3D16 unk4[16];
    unsigned char unk64;
    unsigned char unk65;
    unsigned char unk66;
    unsigned char unk67;
    int unk68;
} Tracer;

Unk_8006d048

Source: include/common.h:560-577

typedef struct {
    int unk0;
    int unk4;
    int unk8;
    int unkC;
    int unk10;
    SpecialSurface** m_SurfaceData; // points to array of surface param ptrs
    int unk18;
    int unk1C;
    int* unk20; // TextureComponent*?
    int unk24;
    void* unk28; // CollisionHeader*?
    int unk2C;
    int unk30;
    int unk34;
    int unk38;
    int unk3C;
} Unk_8006d048;

Unknown_80070260

Source: include/tracers.h:4-10

typedef struct {
    int unk0;
    int unk4;
    int unk8;
    int unkC;
    int unk10;
} Unknown_80070260;

Vector3D

Source: include/common.h:20-22

typedef struct {
    int x, y, z;
} Vector3D;

Vector3D16

Source: include/common.h:24-26

typedef struct {
    short x, y, z;
} Vector3D16;

WadHeader

Source: include/common.h:52-73

typedef struct {
    DataHeader spyroMdls;
    DataHeader titleOvl;
    DataHeader unk0;
    DataHeader universalLogo;
    DataHeader unk1;
    DataHeader insomniacLogo;
    CutsceneWads cutscene[21]; // based on func_80058778, 0th is title!
    DataHeader loadOvl; // common
    DataHeader loadImg[6];
    DataHeader cutsceneImg[20];
    DataHeader loadCycloramas;
    LevelWads lvl[40];
    DataHeader gameOverImg;
    DataHeader atlasOvl;
    DataHeader optionsOvl;
    DataHeader atlasImgs;
    DataHeader epilogueImgs;
    DataHeader creditsOvl;
    DataHeader creditsLvl[12];
    DataHeader unused;
} WadHeader;

XaAudioData

Source: include/common.h:312-318

typedef struct {
    int unk0; // holds startLba or 0?
    int startLba;
    int endLba;
    int track;
    int* volumePtr;
} XaAudioData;