From 0def638ed9c8a150076bbf8475591c71da3c6401 Mon Sep 17 00:00:00 2001 From: Ryan Dwyer Date: Mon, 22 Feb 2021 22:13:20 +1000 Subject: [PATCH] Decompile modelPromoteTypeToPointer --- src/game/game_00c490.c | 8 ++--- src/game/game_013cf0.c | 2 +- src/game/game_097ba0.c | 6 ++-- src/game/game_1a7560.c | 60 ++++++++++++---------------------- src/game/room.c | 2 +- src/include/constants.h | 12 +++---- src/include/data.h | 2 +- src/include/game/game_1a7560.h | 2 +- src/include/types.h | 2 +- src/lib/dma.c | 6 ++-- 10 files changed, 42 insertions(+), 60 deletions(-) diff --git a/src/game/game_00c490.c b/src/game/game_00c490.c index 1b73dec53..0999067e5 100644 --- a/src/game/game_00c490.c +++ b/src/game/game_00c490.c @@ -1886,8 +1886,8 @@ glabel func0f00e980 /* f00e9e0: 004e1021 */ addu $v0,$v0,$t6 /* f00e9e4: 9444fcce */ lhu $a0,%lo(g_Stages+0xe)($v0) /* f00e9e8: 240f0003 */ addiu $t7,$zero,0x3 -/* f00e9ec: 3c018006 */ lui $at,%hi(g_LoadState) -/* f00e9f0: a02fd9a0 */ sb $t7,%lo(g_LoadState)($at) +/* f00e9ec: 3c018006 */ lui $at,%hi(g_LoadType) +/* f00e9f0: a02fd9a0 */ sb $t7,%lo(g_LoadType)($at) /* f00e9f4: 24050022 */ addiu $a1,$zero,0x22 /* f00e9f8: 02403025 */ or $a2,$s2,$zero /* f00e9fc: 02a03825 */ or $a3,$s5,$zero @@ -2019,7 +2019,7 @@ void setupLoadFiles(s32 stagenum) filenum = g_Stages[g_StageIndex].setupfileid; } - g_LoadState = LOADSTATE_SETUP; + g_LoadType = LOADTYPE_SETUP; g_GeCreditsData = (u8 *)func0f1670fc(filenum, 0x22); setup = (struct stagesetup *)g_GeCreditsData; @@ -2030,7 +2030,7 @@ void setupLoadFiles(s32 stagenum) g_StageSetup.paths = (struct path *)((u32)setup + (u32)setup->paths); g_StageSetup.ailists = (struct ailist *)((u32)setup + (u32)setup->ailists); - g_LoadState = LOADSTATE_PADS; + g_LoadType = LOADTYPE_PADS; g_StageSetup.padfiledata = func0f1670fc(g_Stages[g_StageIndex].padsfileid, 0x22); diff --git a/src/game/game_013cf0.c b/src/game/game_013cf0.c index 5b6af3782..b102c654f 100644 --- a/src/game/game_013cf0.c +++ b/src/game/game_013cf0.c @@ -15,7 +15,7 @@ void stageLoadTiles(void) index = 0; } - g_LoadState = LOADSTATE_TILES; + g_LoadType = LOADTYPE_TILES; g_TileFileData.u8 = func0f1670fc(g_Stages[index].tilefileid, 0x22); g_TileNumRooms = *g_TileFileData.u32; g_TileRooms = g_TileFileData.u32 + 1; diff --git a/src/game/game_097ba0.c b/src/game/game_097ba0.c index e7b380e79..f0d6e7437 100644 --- a/src/game/game_097ba0.c +++ b/src/game/game_097ba0.c @@ -8228,8 +8228,8 @@ glabel func0f09e144 /* f09e1cc: 240b0007 */ addiu $t3,$zero,0x7 /* f09e1d0: 02003825 */ or $a3,$s0,$zero .L0f09e1d4: -/* f09e1d4: 3c018006 */ lui $at,%hi(g_LoadState) -/* f09e1d8: a02bd9a0 */ sb $t3,%lo(g_LoadState)($at) +/* f09e1d4: 3c018006 */ lui $at,%hi(g_LoadType) +/* f09e1d8: a02bd9a0 */ sb $t3,%lo(g_LoadType)($at) /* f09e1dc: 964415b2 */ lhu $a0,0x15b2($s2) /* f09e1e0: 24050011 */ addiu $a1,$zero,0x11 /* f09e1e4: 0fc59c80 */ jal func0f167200 @@ -8258,7 +8258,7 @@ glabel func0f09e144 /* f09e240: 00af3823 */ subu $a3,$a1,$t7 /* f09e244: 0fc5cb9c */ jal func0f172e70 /* f09e248: 02073023 */ subu $a2,$s0,$a3 -/* f09e24c: 0fc69dcc */ jal func0f1a7730 +/* f09e24c: 0fc69dcc */ jal modelPromoteTypeToPointer /* f09e250: 02202025 */ or $a0,$s1,$zero /* f09e254: 02202025 */ or $a0,$s1,$zero /* f09e258: 3c050500 */ lui $a1,0x500 diff --git a/src/game/game_1a7560.c b/src/game/game_1a7560.c index 1cd419d33..ddad72061 100644 --- a/src/game/game_1a7560.c +++ b/src/game/game_1a7560.c @@ -233,55 +233,37 @@ glabel func0f1a7560 /* f1a772c: 27bd0090 */ addiu $sp,$sp,0x90 ); -GLOBAL_ASM( -glabel func0f1a7730 -/* f1a7730: 8c820004 */ lw $v0,0x4($a0) -/* f1a7734: 3c010001 */ lui $at,0x1 -/* f1a7738: 3c0e8009 */ lui $t6,%hi(g_ModelTypes) -/* f1a773c: 0041082b */ sltu $at,$v0,$at -/* f1a7740: 10200012 */ beqz $at,.L0f1a778c -/* f1a7744: 00000000 */ nop -/* f1a7748: 8dce9990 */ lw $t6,%lo(g_ModelTypes)($t6) -/* f1a774c: 00021c00 */ sll $v1,$v0,0x10 -/* f1a7750: 00037c03 */ sra $t7,$v1,0x10 -/* f1a7754: 11c0000d */ beqz $t6,.L0f1a778c -/* f1a7758: 01e01825 */ or $v1,$t7,$zero -/* f1a775c: 3c188009 */ lui $t8,%hi(g_ModelTypes) -/* f1a7760: 27059990 */ addiu $a1,$t8,%lo(g_ModelTypes) -/* f1a7764: 8ca60000 */ lw $a2,0x0($a1) -/* f1a7768: 84d90000 */ lh $t9,0x0($a2) -.L0f1a776c: -/* f1a776c: 54790004 */ bnel $v1,$t9,.L0f1a7780 -/* f1a7770: 8ca60004 */ lw $a2,0x4($a1) -/* f1a7774: 03e00008 */ jr $ra -/* f1a7778: ac860004 */ sw $a2,0x4($a0) -/* f1a777c: 8ca60004 */ lw $a2,0x4($a1) -.L0f1a7780: -/* f1a7780: 24a50004 */ addiu $a1,$a1,0x4 -/* f1a7784: 54c0fff9 */ bnezl $a2,.L0f1a776c -/* f1a7788: 84d90000 */ lh $t9,0x0($a2) -.L0f1a778c: -/* f1a778c: 03e00008 */ jr $ra -/* f1a7790: 00000000 */ nop -); +void modelPromoteTypeToPointer(struct modelfiledata *filedata) +{ + s32 i; + + if ((u32)filedata->type < 0x10000) { + for (i = 0; g_ModelTypes[i] != NULL; i++) { + if ((s16)filedata->type == g_ModelTypes[i]->type) { + filedata->type = g_ModelTypes[i]; + return; + } + } + } +} void *func0f1a7794(u16 fileid, u8 *arg1, s32 arg2, s32 arg3) { - void *ptr; + void *filedata; - g_LoadState = LOADSTATE_6; + g_LoadType = LOADTYPE_MODEL; if (arg1) { - ptr = func0f167200(fileid, 0x11, arg1, arg2); + filedata = func0f167200(fileid, 0x11, arg1, arg2); } else { - ptr = func0f1670fc(fileid, 0x11); + filedata = func0f1670fc(fileid, 0x11); } - func0f1a7730(ptr); - func00022a24(ptr, 0x5000000, ptr); - func0f1a7560(ptr, fileid, 0x5000000, ptr, arg3, arg1 == NULL); + modelPromoteTypeToPointer(filedata); + func00022a24(filedata, 0x5000000, filedata); + func0f1a7560(filedata, fileid, 0x5000000, filedata, arg3, arg1 == NULL); - return ptr; + return filedata; } void *fileLoad(u16 fileid) diff --git a/src/game/room.c b/src/game/room.c index 38344c2e0..70eb3395c 100644 --- a/src/game/room.c +++ b/src/game/room.c @@ -3807,7 +3807,7 @@ void bgInit(s32 stagenum) scratch = ((u32)g_BgPrimaryData + inflatedsize) - primcompsize; scratch = ALIGN16(scratch + 0x8000); - g_LoadState = LOADSTATE_BG; + g_LoadType = LOADTYPE_BG; // Copy section 1 header + compressed primary to scratch space bgLoadFile((u8 *)scratch, 0, ALIGN16(primcompsize + 15)); diff --git a/src/include/constants.h b/src/include/constants.h index 0d868e594..b8c0d49c0 100644 --- a/src/include/constants.h +++ b/src/include/constants.h @@ -1136,12 +1136,12 @@ #define LIGHTOP_TURNON 6 #define LIGHTOP_TURNOFF 7 -#define LOADSTATE_NONE 0 -#define LOADSTATE_BG 1 -#define LOADSTATE_TILES 2 -#define LOADSTATE_SETUP 4 -#define LOADSTATE_PADS 5 -#define LOADSTATE_6 6 +#define LOADTYPE_NONE 0 +#define LOADTYPE_BG 1 +#define LOADTYPE_TILES 2 +#define LOADTYPE_SETUP 4 +#define LOADTYPE_PADS 5 +#define LOADTYPE_MODEL 6 // These actions are assigned to chr->myaction #define MA_NONE 0 diff --git a/src/include/data.h b/src/include/data.h index db5ac5118..2c49bfbfb 100644 --- a/src/include/data.h +++ b/src/include/data.h @@ -33,7 +33,7 @@ extern s32 osViClock; extern u32 var8005cf6c; extern u32 __osGlobalIntMask; extern u32 var8005cf84; -extern u8 g_LoadState; +extern u8 g_LoadType; extern s32 var8005d9d0; extern s32 var8005dd18; extern u32 var8005dd58; diff --git a/src/include/game/game_1a7560.h b/src/include/game/game_1a7560.h index 4e6078359..417b6a8d7 100644 --- a/src/include/game/game_1a7560.h +++ b/src/include/game/game_1a7560.h @@ -5,7 +5,7 @@ #include "types.h" void func0f1a7560(void *ptr, u16 fileid, u32 arg2, void *arg3, s32 arg4, bool arg5); -void func0f1a7730(void *ptr); +void modelPromoteTypeToPointer(struct modelfiledata *filedata); void *func0f1a7794(u16 fileid, u8 *arg1, s32 arg2, s32 arg3); void *fileLoad(u16 fileid); diff --git a/src/include/types.h b/src/include/types.h index 96a5899f2..666dc4983 100644 --- a/src/include/types.h +++ b/src/include/types.h @@ -175,7 +175,7 @@ struct anim { }; struct modeltype { - u16 stage; + s16 type; u16 numthings; u16 *things; }; diff --git a/src/lib/dma.c b/src/lib/dma.c index 326292800..cce598a81 100644 --- a/src/lib/dma.c +++ b/src/lib/dma.c @@ -5,7 +5,7 @@ #include "data.h" #include "types.h" -u8 g_LoadState = 0; +u8 g_LoadType = 0; void dmaInit(void) { @@ -77,7 +77,7 @@ u32 xorDeadbabe(u32 value) */ void dmaCheckPiracy(void *memaddr, u32 len) { - if (g_LoadState != LOADSTATE_NONE && len > 128) { + if (g_LoadType != LOADTYPE_NONE && len > 128) { #if PIRACYCHECKS u32 value = xorDeadbeef(0x0330c820 ^ 0xdeadbeef); u32 *ptr = (u32 *)memaddr; @@ -98,7 +98,7 @@ void dmaCheckPiracy(void *memaddr, u32 len) } #endif - g_LoadState = LOADSTATE_NONE; + g_LoadType = LOADTYPE_NONE; } }