Decompile modelPromoteTypeToPointer

This commit is contained in:
Ryan Dwyer 2021-02-22 22:13:20 +10:00
parent 01ad7bdfa5
commit 0def638ed9
10 changed files with 42 additions and 60 deletions

View File

@ -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);

View File

@ -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;

View File

@ -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

View File

@ -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)

View File

@ -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));

View File

@ -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

View File

@ -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;

View File

@ -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);

View File

@ -175,7 +175,7 @@ struct anim {
};
struct modeltype {
u16 stage;
s16 type;
u16 numthings;
u16 *things;
};

View File

@ -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;
}
}