diff --git a/include/fast3d.h b/include/fast3d.h index 2eae9a40..8f6a5eb8 100644 --- a/include/fast3d.h +++ b/include/fast3d.h @@ -16,5 +16,4 @@ typedef struct Gfx { _g->w0 = word0; \ _g->w1 = word1; \ } - #endif diff --git a/include/structs.h b/include/structs.h index 10cc1bdb..47b40671 100644 --- a/include/structs.h +++ b/include/structs.h @@ -32,6 +32,46 @@ typedef struct MenuElement { /* 0x1E */ u16 backgroundAlpha; // 0x0000 = No background, 0x00FF = full background color. } MenuElement; +/* Size: 0x20 bytes */ +typedef struct TextureHeader { + /* 0x00 */ u8 width; + /* 0x01 */ u8 height; + /* 0x02 */ u8 format; // Lower 3 bits determines image format. + // 0 = RGBA32 + // 1 = RGBA16 + // 2 = I8 + // 3 = I4 + // 4 = IA16 + // 5 = IA8 + // 6 = IA4 + // 7 = CI4 texture + /* 0x03 */ u8 unk3; + /* 0x04 */ u8 unk4; + /* 0x05 */ u8 unk5; // Always 0x01? + /* 0x06 */ u16 flags; + // 0x04 = Interlaced texture + // 0x40 = U clamp flag. 0 = Wrap, 1 = Clamp + // 0x80 = V clamp flag. 0 = Wrap, 1 = Clamp + /* 0x08 */ u16 ci4Palette; // Offset to CI4 palette + /* 0x0A */ u8 unkA; + /* 0x0B */ u8 numberOfCommands; // initialized in RAM; Number of commands in the texture display list. (Usually 0x07) + /* 0x0C */ s32* cmd; // initialized in RAM; Pointer to texture display list. + /* 0x10 */ u8 unk10; + /* 0x11 */ u8 unk11; + /* 0x12 */ u8 numOfTextures; // For animated textures, static textures are just 0x01. Each texture has it's own header. + /* 0x13 */ u8 unk13; + /* 0x14 */ u16 frameAdvanceDelay; // How many frames to delay before moving to the next texture. + /* 0x16 */ u16 textureSize; // Size in number of bytes, including the header + /* 0x18 */ u8 unk18; + /* 0x19 */ u8 unk19; + /* 0x1A */ u8 unk1A; + /* 0x1B */ u8 unk1B; + /* 0x1C */ u8 unk1C; + /* 0x1D */ u8 isCompressed; + /* 0x1E */ u8 unk1E; + /* 0x1F */ u8 unk1F; +} TextureHeader; + /* Size: 0x18 bytes */ typedef struct Racer { /* 0x00 */ u32 trophy_points; diff --git a/src/unknown_032760.c b/src/unknown_032760.c index bb311769..28b4033b 100644 --- a/src/unknown_032760.c +++ b/src/unknown_032760.c @@ -5,11 +5,10 @@ #include "types.h" #include "macros.h" -#include "structs.h" /************ .data ************/ -s32 D_800DC950 = 0; +TextureHeader **D_800DC950 = NULL; s32 D_800DC954 = 0; s32 D_800DC958 = 0; s32 D_800DC95C = 0; diff --git a/src/unknown_032760.h b/src/unknown_032760.h index 71786036..3ca8a4b7 100644 --- a/src/unknown_032760.h +++ b/src/unknown_032760.h @@ -2,8 +2,9 @@ #define _UNKNOWN_032760_H_ #include "types.h" +#include "structs.h" -extern s32 D_800DC950; +extern TextureHeader **D_800DC950; extern s32 D_800DC954; extern s32 D_800DC958; extern s32 D_800DC95C; diff --git a/src/unknown_071730.c b/src/unknown_071730.c index 76aa2c55..4d7c82a6 100644 --- a/src/unknown_071730.c +++ b/src/unknown_071730.c @@ -107,7 +107,7 @@ void* func_80070C9C(s32, s32); s32 *func_8006F510(void); void func_8006F53C(s32*); -void func_80071440(LevelHeader *levelHeader); +void func_80071440(TextureHeader *texHeader); void func_80070B30(void) { s32 tmp = -1; @@ -253,12 +253,12 @@ void func_800710B0(s32 arg0) { func_8006F53C(sp2C); } -void func_80071140(LevelHeader *levelHeader) { +void func_80071140(TextureHeader *texHeader) { s32 *sp1C = func_8006F510(); if (D_80123DCC == 0) { - func_80071278(levelHeader); + func_80071278(texHeader); } else { - func_80071440(levelHeader); + func_80071440(texHeader); } func_8006F53C(sp1C); } @@ -266,8 +266,8 @@ void func_80071140(LevelHeader *levelHeader) { GLOBAL_ASM("asm/non_matchings/unknown_071730/func_80071198.s") GLOBAL_ASM("asm/non_matchings/unknown_071730/func_80071278.s") -void func_80071440(LevelHeader *levelHeader) { - D_801235C8[D_80123DC8].unk0 = levelHeader; +void func_80071440(TextureHeader *texHeader) { + D_801235C8[D_80123DC8].unk0 = texHeader; D_801235C8[D_80123DC8].unk4 = D_80123DCC; D_80123DC8++; }