From 2f59959fe530d17c665b62610460209dd85d0769 Mon Sep 17 00:00:00 2001 From: Ryan Dwyer Date: Sat, 12 Dec 2020 23:34:38 +1000 Subject: [PATCH] Attempt to decompile texturesLoadConfigs --- ld/pd.ld | 2 + src/game/game_107fb0.c | 2 +- src/game/game_167ae0.c | 2 +- src/game/game_16e810.c | 93 +++++++++++++++++++++++++++++-- src/gvars/gvars.c | 44 +++++++-------- src/include/game/game_0abe70.h | 2 +- src/include/game/game_0b3350.h | 4 +- src/include/game/game_16e810.h | 6 +- src/include/game/gamefile.h | 2 +- src/include/gvars/gvars.h | 31 ++++++++--- src/include/types.h | 17 ++++-- src/textureconfig/textureconfig.c | 12 +--- 12 files changed, 155 insertions(+), 62 deletions(-) diff --git a/ld/pd.ld b/ld/pd.ld index a2e3c9acc..4bef720b3 100644 --- a/ld/pd.ld +++ b/ld/pd.ld @@ -353,6 +353,8 @@ SECTIONS * ------------------------------------------------------------------------- */ + __rampos = 0x02000000; + BEGIN_SEG(textureconfig) { build/ROMID/textureconfig/textureconfig.o (.data); diff --git a/src/game/game_107fb0.c b/src/game/game_107fb0.c index 7368541c3..8a649f0d3 100644 --- a/src/game/game_107fb0.c +++ b/src/game/game_107fb0.c @@ -1433,7 +1433,7 @@ char *filemgrMenuTextFileInUseDescription(struct menuitem *item) Gfx *filemgrRenderPerfectHeadThumbnail(Gfx *gdl, struct menuitemrenderdata *renderdata, u32 arg2, u32 arg3) { - struct var800ab5a8 *texture = func0f111460(g_MpPlayerNum, arg2, arg3 & 0xffff); + struct textureconfig *texture = func0f111460(g_MpPlayerNum, arg2, arg3 & 0xffff); if (texture) { gSPDisplayList(gdl++, &var800613a0); diff --git a/src/game/game_167ae0.c b/src/game/game_167ae0.c index ad1bdf35f..159cbd46c 100644 --- a/src/game/game_167ae0.c +++ b/src/game/game_167ae0.c @@ -281,7 +281,7 @@ void func0f167e7c(s32 stagenum) func0f16d324(); func0f011124(true); func0f013b80(); - func0f1735c0(); + texturesLoadConfigs(); fontsLoadForCurrentStage(); hudmsgSystemInit(); diff --git a/src/game/game_16e810.c b/src/game/game_16e810.c index 41cd72b18..d912052d0 100644 --- a/src/game/game_16e810.c +++ b/src/game/game_16e810.c @@ -5787,7 +5787,7 @@ glabel func0f17353c ); GLOBAL_ASM( -glabel func0f1735c0 +glabel texturesLoadConfigs /* f1735c0: 27bdffd8 */ addiu $sp,$sp,-40 /* f1735c4: 3c0e0200 */ lui $t6,0x200 /* f1735c8: 3c0f0200 */ lui $t7,0x200 @@ -5801,16 +5801,16 @@ glabel func0f1735c0 /* f1735e8: 02202025 */ or $a0,$s1,$zero /* f1735ec: 0c0048f2 */ jal malloc /* f1735f0: 24050004 */ addiu $a1,$zero,0x4 -/* f1735f4: 3c03800b */ lui $v1,%hi(var800ab554) -/* f1735f8: 2463b554 */ addiu $v1,$v1,%lo(var800ab554) +/* f1735f4: 3c03800b */ lui $v1,%hi(g_TextureConfigSegment) +/* f1735f8: 2463b554 */ addiu $v1,$v1,%lo(g_TextureConfigSegment) /* f1735fc: 3c05007f */ lui $a1,%hi(_textureconfigSegmentRomStart) /* f173600: ac620000 */ sw $v0,0x0($v1) /* f173604: 24a5b270 */ addiu $a1,$a1,%lo(_textureconfigSegmentRomStart) /* f173608: 00402025 */ or $a0,$v0,$zero /* f17360c: 0c003504 */ jal func0000d410 /* f173610: 02203025 */ or $a2,$s1,$zero -/* f173614: 3c18800b */ lui $t8,%hi(var800ab554) -/* f173618: 8f18b554 */ lw $t8,%lo(var800ab554)($t8) +/* f173614: 3c18800b */ lui $t8,%hi(g_TextureConfigSegment) +/* f173618: 8f18b554 */ lw $t8,%lo(g_TextureConfigSegment)($t8) /* f17361c: 3c070200 */ lui $a3,0x200 /* f173620: 3c06800b */ lui $a2,%hi(var800ab550) /* f173624: 3c080200 */ lui $t0,0x200 @@ -6072,3 +6072,86 @@ glabel func0f1735c0 /* f1739f8: 00000000 */ nop /* f1739fc: 00000000 */ nop ); + +//extern u8 *_textureconfigSegmentRomStart; +//extern u8 *_textureconfigSegmentStart; +//extern u8 *_textureconfigSegmentEnd; + +// Unfinished +//void texturesLoadConfigs(void) +//{ +// s32 stage; +// u32 len = &_textureconfigSegmentEnd - &_textureconfigSegmentStart; +// s32 i; +// +// g_TextureConfigSegment = malloc(len, 4); +// func0000d410(g_TextureConfigSegment, &_textureconfigSegmentRomStart, len); +// +// var800ab550 = (u32)((u32)g_TextureConfigSegment - (u32)&_textureconfigSegmentStart); +// var800ab564 = (Gfx *)((u32)g_TextureConfigSegment - (u32)&_textureconfigSegmentStart + 0x000); // gdl000 +// var800ab568 = (Gfx *)((u32)g_TextureConfigSegment - (u32)&_textureconfigSegmentStart + 0x070); // gdl070 +// var800ab56c = (Gfx *)((u32)g_TextureConfigSegment - (u32)&_textureconfigSegmentStart + 0x0d8); // gdl0d8 +// var800ab570 = (u32 *)((u32)g_TextureConfigSegment - (u32)&_textureconfigSegmentStart + 0x148); // g_ExplosionTextureNums +// var800ab560 = (struct textureconfig *)((u32)g_TextureConfigSegment - (u32)&_textureconfigSegmentStart + 0x1c0); +// var800ab574 = (struct textureconfig *)((u32)g_TextureConfigSegment - (u32)&_textureconfigSegmentStart + 0x298); +// var800ab578 = (struct textureconfig *)((u32)g_TextureConfigSegment - (u32)&_textureconfigSegmentStart + 0x2d4); +// var800ab57c = (struct textureconfig *)((u32)g_TextureConfigSegment - (u32)&_textureconfigSegmentStart + 0x2e0); +// var800ab580 = (struct textureconfig *)((u32)g_TextureConfigSegment - (u32)&_textureconfigSegmentStart + 0x2ec); +// var800ab584 = (struct textureconfig *)((u32)g_TextureConfigSegment - (u32)&_textureconfigSegmentStart + 0x2f8); +// var800ab588 = (struct textureconfig *)((u32)g_TextureConfigSegment - (u32)&_textureconfigSegmentStart + 0x304); +// var800ab58c = (struct textureconfig *)((u32)g_TextureConfigSegment - (u32)&_textureconfigSegmentStart + 0x310); +// var800ab590 = (struct textureconfig *)((u32)g_TextureConfigSegment - (u32)&_textureconfigSegmentStart + 0x31c); +// var800ab594 = (struct textureconfig *)((u32)g_TextureConfigSegment - (u32)&_textureconfigSegmentStart + 0x334); +// var800ab598 = (struct textureconfig *)((u32)g_TextureConfigSegment - (u32)&_textureconfigSegmentStart + 0x7b4); +// var800ab59c = (struct textureconfig *)((u32)g_TextureConfigSegment - (u32)&_textureconfigSegmentStart + 0x7d8); +// var800ab5a0 = (struct textureconfig *)((u32)g_TextureConfigSegment - (u32)&_textureconfigSegmentStart + 0x820); +// var800ab5a4 = (struct textureconfig *)((u32)g_TextureConfigSegment - (u32)&_textureconfigSegmentStart + 0x898); +// var800ab5a8 = (struct textureconfig *)((u32)g_TextureConfigSegment - (u32)&_textureconfigSegmentStart + 0x8a4); +// var800ab5ac = (struct textureconfig *)((u32)g_TextureConfigSegment - (u32)&_textureconfigSegmentStart + 0xb44); +// +// var800ab558 = (len - ((u32)&_textureconfigSegmentStart + 0x1c0)) + (u32)&_textureconfigSegmentStart; +// var800ab55c = malloc(align16(var800ab558), 4); +// +// for (i = 0; i < var800ab558; i++) { +// var800ab55c[i].texturenum = 0; +// } +// +// for (i = 0; i < 15; i++) { +// func0f173010(&var800ab570[i * 2 + 0], 0, 0); +// func0f173010(&var800ab570[i * 2 + 1], 0, 0); +// } +// +// func0f172f5c(var800ab564, 0, 0); +// func0f172f5c(var800ab56c, 0, 0); +// stage = mainGetStageNum(); +// +// if (IS4MB() && stage != STAGE_TITLE && stage != STAGE_CITRAINING && stage != STAGE_4MBMENU) { +// for (i = 0; i < 12; i++) { +// func0f0b3988(&var800ab560[i]); +// } +// +// for (i = 0; i < 5; i++) { +// func0f0b3988(&var800ab574[i]); +// } +// +// for (i = 0; i < 3; i++) { +// func0f0b3988(&var800ab598[i]); +// } +// +// for (i = 0; i < 1; i++) { +// func0f0b3988(&var800ab588[i]); +// } +// +// for (i = 0; i < 1; i++) { +// func0f0b3988(&var800ab58c[i]); +// } +// +// for (i = 0; i < 1; i++) { +// func0f0b3988(&var800ab5ac[i]); +// } +// +// for (i = 0; i < 1; i++) { +// func0f0b3988(&var800ab5a4[i]); +// } +// } +//} diff --git a/src/gvars/gvars.c b/src/gvars/gvars.c index ebcd40c9b..b64e27f59 100644 --- a/src/gvars/gvars.c +++ b/src/gvars/gvars.c @@ -16338,29 +16338,29 @@ u32 var800ab544 = 0; u32 var800ab548 = 0; u32 var800ab54c = 0; u32 var800ab550 = 0; -u32 var800ab554 = 0; +u8 *g_TextureConfigSegment = NULL; u32 var800ab558 = 0; -u32 var800ab55c = 0; -u32 var800ab560 = 0; -u32 var800ab564 = 0; -u32 var800ab568 = 0; -u32 var800ab56c = 0; -u32 var800ab570 = 0; -u32 var800ab574 = 0; -u32 var800ab578 = 0; -u32 var800ab57c = 0; -u32 var800ab580 = 0; -u32 var800ab584 = 0; -u32 var800ab588 = 0; -u32 var800ab58c = 0; -u32 var800ab590 = 0; -u32 var800ab594 = 0; -u32 var800ab598 = 0; -u32 var800ab59c = 0; -u32 var800ab5a0 = 0; -u32 var800ab5a4 = 0; -struct var800ab5a8 *var800ab5a8 = NULL; -u32 var800ab5ac = 0; +struct textureconfig *var800ab55c = NULL; +struct textureconfig *var800ab560 = NULL; +Gfx *var800ab564 = NULL; +Gfx *var800ab568 = NULL; +Gfx *var800ab56c = NULL; +u32 *var800ab570 = NULL; +struct textureconfig *var800ab574 = NULL; +struct textureconfig *var800ab578 = NULL; +struct textureconfig *var800ab57c = NULL; +struct textureconfig *var800ab580 = NULL; +struct textureconfig *var800ab584 = NULL; +struct textureconfig *var800ab588 = NULL; +struct textureconfig *var800ab58c = NULL; +struct textureconfig *var800ab590 = NULL; +struct textureconfig *var800ab594 = NULL; +struct textureconfig *var800ab598 = NULL; +struct textureconfig *var800ab59c = NULL; +struct textureconfig *var800ab5a0 = NULL; +struct textureconfig *var800ab5a4 = NULL; +struct textureconfig *var800ab5a8 = NULL; +struct textureconfig *var800ab5ac = NULL; s32 var800ab5b0 = 0; u32 var800ab5b4 = 0; struct var800ab5b8 var800ab5b8[8] = {0}; diff --git a/src/include/game/game_0abe70.h b/src/include/game/game_0abe70.h index 9eb821ee1..667b157e0 100644 --- a/src/include/game/game_0abe70.h +++ b/src/include/game/game_0abe70.h @@ -5,7 +5,7 @@ u32 func0f0abe70(void); u32 func0f0ac138(void); -Gfx *func0f0ac4b8(Gfx *gdl, u32 arg1, f32 arg2, struct coord *arg3, u32 colour1, f32 arg5, struct coord *arg6, u32 colour2); +Gfx *func0f0ac4b8(Gfx *gdl, struct textureconfig *arg1, f32 arg2, struct coord *arg3, u32 colour1, f32 arg5, struct coord *arg6, u32 colour2); u32 func0f0acb90(void); void bullettailTick(struct bullettail *bullettail); u32 func0f0adcc8(void); diff --git a/src/include/game/game_0b3350.h b/src/include/game/game_0b3350.h index 83a6307a7..d95efd2f0 100644 --- a/src/include/game/game_0b3350.h +++ b/src/include/game/game_0b3350.h @@ -9,8 +9,8 @@ u32 func0f0b3468(void); u32 func0f0b34d8(void); u32 func0f0b3548(void); u32 func0f0b35b8(void); -u32 func0f0b3988(void); -void func0f0b39c0(Gfx **gdl, struct var800ab5a8 *arg1, u32 arg2, u32 arg3, u32 arg4, u32 arg5, u32 arg6); +void func0f0b3988(struct textureconfig *config); +void func0f0b39c0(Gfx **gdl, struct textureconfig *arg1, u32 arg2, u32 arg3, u32 arg4, u32 arg5, u32 arg6); void currentPlayerSetScreenSize(f32 width, f32 height); void currentPlayerSetScreenPosition(f32 left, f32 top); void currentPlayerSetPerspective(f32 near, f32 fovy, f32 aspect); diff --git a/src/include/game/game_16e810.h b/src/include/game/game_16e810.h index 46c72a3e6..769d52aef 100644 --- a/src/include/game/game_16e810.h +++ b/src/include/game/game_16e810.h @@ -29,12 +29,12 @@ u32 func0f172e70(void); u32 func0f172e8c(void); u32 func0f172f44(void); u32 func0f172f54(void); -u32 func0f172f5c(void); -u32 func0f173010(void); +void func0f172f5c(Gfx *gdl, u32 arg1, u32 arg2); +void func0f173010(u32 *texturenum, u32 arg1, u32 arg2); u32 func0f173434(void); u32 func0f1734e8(void); u32 func0f173520(void); u32 func0f17353c(void); -void func0f1735c0(void); +void texturesLoadConfigs(void); #endif diff --git a/src/include/game/gamefile.h b/src/include/game/gamefile.h index 0612d6fcb..69e9b673b 100644 --- a/src/include/game/gamefile.h +++ b/src/include/game/gamefile.h @@ -24,6 +24,6 @@ u8 func0f110cf8(u8 arg0); u32 func0f110d90(void); void func0f110da8(void); u32 func0f110f4c(void); -struct var800ab5a8 *func0f111460(s32 playernum, s32 arg1, s32 arg2); +struct textureconfig *func0f111460(s32 playernum, s32 arg1, s32 arg2); #endif diff --git a/src/include/gvars/gvars.h b/src/include/gvars/gvars.h index b1f4d8d0e..b320237bb 100644 --- a/src/include/gvars/gvars.h +++ b/src/include/gvars/gvars.h @@ -783,16 +783,29 @@ extern u32 var800ab540; extern u32 var800ab544; extern u32 var800ab548; extern u32 var800ab550; -extern u32 var800ab554; +extern u8 *g_TextureConfigSegment; extern u32 var800ab558; -extern u32 var800ab55c; -extern u32 var800ab560; -extern u32 var800ab570; -extern u32 var800ab574; -extern u32 var800ab578; -extern u32 var800ab57c; -extern u32 var800ab5a0; -extern struct var800ab5a8 *var800ab5a8; // indexed by some kind of texturenum +extern struct textureconfig *var800ab55c; +extern struct textureconfig *var800ab560; +extern Gfx *var800ab564; +extern Gfx *var800ab568; +extern Gfx *var800ab56c; +extern u32 *var800ab570; +extern struct textureconfig *var800ab574; +extern struct textureconfig *var800ab578; +extern struct textureconfig *var800ab57c; +extern struct textureconfig *var800ab580; +extern struct textureconfig *var800ab584; +extern struct textureconfig *var800ab588; +extern struct textureconfig *var800ab58c; +extern struct textureconfig *var800ab590; +extern struct textureconfig *var800ab594; +extern struct textureconfig *var800ab598; +extern struct textureconfig *var800ab59c; +extern struct textureconfig *var800ab5a0; +extern struct textureconfig *var800ab5a4; +extern struct textureconfig *var800ab5a8; +extern struct textureconfig *var800ab5ac; extern s32 var800ab5b0; extern struct var800ab5b8 var800ab5b8[8]; extern struct var800ab718 var800ab718[8]; diff --git a/src/include/types.h b/src/include/types.h index 344bc80ca..58a18add3 100644 --- a/src/include/types.h +++ b/src/include/types.h @@ -6191,12 +6191,6 @@ struct var80061420 { s32 unk04; }; -struct var800ab5a8 { - u32 unk00; - u32 unk04; - u32 unk08; -}; - struct var800ab5b8 { u32 unk00; u32 unk04; @@ -6641,4 +6635,15 @@ struct var80067e6c { f32 value; }; +struct textureconfig { + u32 texturenum; + u8 width; + u8 height; + u8 level; + u8 format; + u8 depth; + u8 s; + u8 t; +}; + #endif diff --git a/src/textureconfig/textureconfig.c b/src/textureconfig/textureconfig.c index aa0004fb4..824964464 100644 --- a/src/textureconfig/textureconfig.c +++ b/src/textureconfig/textureconfig.c @@ -1,4 +1,5 @@ #include +#include "types.h" Gfx gdl000[] = { gsDPPipeSync(), @@ -56,17 +57,6 @@ u32 g_ExplosionTextureNums[] = { 0x32, 0x33, 0x34, 0x35, 0x36, 0x37, 0x38, 0x39, 0x3a, 0x3b, }; -struct textureconfig { - u32 texturenum; - u8 width; - u8 height; - u8 level; - u8 format; - u8 depth; - u8 s; - u8 t; -}; - struct textureconfig g_TextureConfigs[] = { { 0x0003, 48, 48, 0, G_IM_FMT_IA, G_IM_SIZ_8b, G_TX_CLAMP, G_TX_CLAMP }, { 0x0c27, 64, 64, 0, G_IM_FMT_IA, G_IM_SIZ_8b, G_TX_CLAMP, G_TX_CLAMP },