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;