From 52c2238c0884a529d0df18b6ec642aaf54989c95 Mon Sep 17 00:00:00 2001 From: Ryan Dwyer Date: Tue, 9 Feb 2021 19:00:04 +1000 Subject: [PATCH] Attempt to decompile fileGetInflatedLength --- src/game/file.c | 34 ++++++++++++++++++++++++---- src/game/game_097ba0.c | 4 ++-- src/game/game_0b69d0.c | 6 ++--- src/game/game_0f09f0.c | 6 ++--- src/game/room.c | 4 ++-- src/include/game/file.h | 4 ++-- src/include/game/stubs/game_175f50.h | 2 +- src/include/lib/lib_074f0.h | 2 +- src/lib/lib_074f0.c | 2 +- 9 files changed, 45 insertions(+), 19 deletions(-) diff --git a/src/game/file.c b/src/game/file.c index 7d4a2fb2b..776119f55 100644 --- a/src/game/file.c +++ b/src/game/file.c @@ -148,7 +148,7 @@ void func0f166ff0(u16 filenum, void *memaddr, s32 offset, u32 len) } GLOBAL_ASM( -glabel func0f167054 +glabel fileGetInflatedLength /* f167054: 27bdff78 */ addiu $sp,$sp,-136 /* f167058: 3c0f8008 */ lui $t7,%hi(filetable) /* f16705c: 25ef2060 */ addiu $t7,$t7,%lo(filetable) @@ -177,7 +177,7 @@ glabel func0f167054 /* f1670b4: 0c003504 */ jal func0000d410 /* f1670b8: 00808025 */ or $s0,$a0,$zero .L0f1670bc: -/* f1670bc: 0c002277 */ jal func000089dc +/* f1670bc: 0c002277 */ jal rzipIs1173 /* f1670c0: 02002025 */ or $a0,$s0,$zero /* f1670c4: 10400009 */ beqz $v0,.L0f1670ec /* f1670c8: 8fbf001c */ lw $ra,0x1c($sp) @@ -197,6 +197,32 @@ glabel func0f167054 /* f1670f8: 27bd0088 */ addiu $sp,$sp,0x88 ); +//u32 fileGetInflatedLength(u32 filenum) +//{ +// u8 buffer[0x50]; +// u8 *alignedbuffer; +// void *romaddr; +// u32 tmp; +// +// romaddr = filetable[filenum]; +// alignedbuffer = buffer; +// +// if (romaddr == NULL) { +// alignedbuffer = (u8 *)(((u32)alignedbuffer) & ~0xf); +// +// stub0f175f58(func0f166ea8((u32 *) &filetable[filenum]), (u32)alignedbuffer, 16); +// } else { +// alignedbuffer = (u8 *)(((u32)alignedbuffer) & ~0xf); +// func0000d410((void *)alignedbuffer, romaddr, 0x40); +// } +// +// if (rzipIs1173((void *)alignedbuffer)) { +// return (alignedbuffer[2] << 16) | (alignedbuffer[3] << 8) | alignedbuffer[4]; +// } +// +// return 0; +//} + GLOBAL_ASM( glabel func0f1670fc /* f1670fc: 27bdffd0 */ addiu $sp,$sp,-48 @@ -218,7 +244,7 @@ glabel func0f1670fc /* f167138: 8e080000 */ lw $t0,0x0($s0) /* f16713c: 5500000e */ bnezl $t0,.L0f167178 /* f167140: 8e040000 */ lw $a0,0x0($s0) -/* f167144: 0fc59c15 */ jal func0f167054 +/* f167144: 0fc59c15 */ jal fileGetInflatedLength /* f167148: 01e02025 */ or $a0,$t7,$zero /* f16714c: 24490020 */ addiu $t1,$v0,0x20 /* f167150: 2401fff0 */ addiu $at,$zero,-16 @@ -284,7 +310,7 @@ glabel func0f1670fc // // // 13c // if (info->unk00 == 0) { -// info->unk00 = (func0f167054(filenum) + 0x20) & 0xfffffff0; +// info->unk00 = (fileGetInflatedLength(filenum) + 0x20) & 0xfffffff0; // // // 164 // if (arg1 == 0x11) { diff --git a/src/game/game_097ba0.c b/src/game/game_097ba0.c index 0cb49e8d2..fd6350fb4 100644 --- a/src/game/game_097ba0.c +++ b/src/game/game_097ba0.c @@ -8218,7 +8218,7 @@ glabel func0f09e144 /* f09e19c: 8e5815bc */ lw $t8,0x15bc($s2) /* f09e1a0: af100000 */ sw $s0,0x0($t8) /* f09e1a4: 964415b2 */ lhu $a0,0x15b2($s2) -/* f09e1a8: 0fc59c15 */ jal func0f167054 +/* f09e1a8: 0fc59c15 */ jal fileGetInflatedLength /* f09e1ac: afa30064 */ sw $v1,0x64($sp) /* f09e1b0: 2443003f */ addiu $v1,$v0,0x3f /* f09e1b4: 3479003f */ ori $t9,$v1,0x3f @@ -8370,7 +8370,7 @@ glabel func0f09e144 /* f09e3e4: 02202025 */ or $a0,$s1,$zero /* f09e3e8: 0fc69d58 */ jal func0f1a7560 /* f09e3ec: 02203825 */ or $a3,$s1,$zero -/* f09e3f0: 0fc59c15 */ jal func0f167054 +/* f09e3f0: 0fc59c15 */ jal fileGetInflatedLength /* f09e3f4: 964415b2 */ lhu $a0,0x15b2($s2) /* f09e3f8: 0fc59ca0 */ jal fileGetSize /* f09e3fc: 964415b2 */ lhu $a0,0x15b2($s2) diff --git a/src/game/game_0b69d0.c b/src/game/game_0b69d0.c index 1d81a420d..690c912d7 100644 --- a/src/game/game_0b69d0.c +++ b/src/game/game_0b69d0.c @@ -1733,7 +1733,7 @@ glabel var7f1ad5b4 /* f0b8e1c: 9484cf06 */ lhu $a0,%lo(g_Bodies+0x2)($a0) /* f0b8e20: afab00f0 */ sw $t3,0xf0($sp) /* f0b8e24: afa5005c */ sw $a1,0x5c($sp) -/* f0b8e28: 0fc59c15 */ jal func0f167054 +/* f0b8e28: 0fc59c15 */ jal fileGetInflatedLength /* f0b8e2c: afa500ec */ sw $a1,0xec($sp) /* f0b8e30: 8fa900f0 */ lw $t1,0xf0($sp) /* f0b8e34: 244e003f */ addiu $t6,$v0,0x3f @@ -1748,7 +1748,7 @@ glabel var7f1ad5b4 /* f0b8e58: 000a5080 */ sll $t2,$t2,0x2 /* f0b8e5c: 3c048008 */ lui $a0,%hi(g_Bodies+0x2) /* f0b8e60: 008a2021 */ addu $a0,$a0,$t2 -/* f0b8e64: 0fc59c15 */ jal func0f167054 +/* f0b8e64: 0fc59c15 */ jal fileGetInflatedLength /* f0b8e68: 9484cf06 */ lhu $a0,%lo(g_Bodies+0x2)($a0) /* f0b8e6c: 8fab00e4 */ lw $t3,0xe4($sp) /* f0b8e70: 244c003f */ addiu $t4,$v0,0x3f @@ -1762,7 +1762,7 @@ glabel var7f1ad5b4 /* f0b8e8c: 001948c0 */ sll $t1,$t9,0x3 /* f0b8e90: 3c048008 */ lui $a0,%hi(g_Props+0x4) /* f0b8e94: 00892021 */ addu $a0,$a0,$t1 -/* f0b8e98: 0fc59c15 */ jal func0f167054 +/* f0b8e98: 0fc59c15 */ jal fileGetInflatedLength /* f0b8e9c: 9484b070 */ lhu $a0,%lo(g_Props+0x4)($a0) /* f0b8ea0: 8fb800e4 */ lw $t8,0xe4($sp) /* f0b8ea4: 244f003f */ addiu $t7,$v0,0x3f diff --git a/src/game/game_0f09f0.c b/src/game/game_0f09f0.c index e919ed2b6..3e280c953 100644 --- a/src/game/game_0f09f0.c +++ b/src/game/game_0f09f0.c @@ -3247,7 +3247,7 @@ glabel var7f1b2948 /* f0f3a84: 96220002 */ lhu $v0,0x2($s1) /* f0f3a88: 00402025 */ or $a0,$v0,$zero /* f0f3a8c: a7a2040a */ sh $v0,0x40a($sp) -/* f0f3a90: 0fc59c15 */ jal func0f167054 +/* f0f3a90: 0fc59c15 */ jal fileGetInflatedLength /* f0f3a94: afa2003c */ sw $v0,0x3c($sp) /* f0f3a98: 8e2d0000 */ lw $t5,0x0($s1) /* f0f3a9c: 2443003f */ addiu $v1,$v0,0x3f @@ -3268,7 +3268,7 @@ glabel var7f1b2948 /* f0f3ad4: 000a5080 */ sll $t2,$t2,0x2 /* f0f3ad8: 022a8821 */ addu $s1,$s1,$t2 /* f0f3adc: 9631cf06 */ lhu $s1,%lo(g_Bodies+0x2)($s1) -/* f0f3ae0: 0fc59c15 */ jal func0f167054 +/* f0f3ae0: 0fc59c15 */ jal fileGetInflatedLength /* f0f3ae4: 02202025 */ or $a0,$s1,$zero /* f0f3ae8: 8fab0420 */ lw $t3,0x420($sp) /* f0f3aec: 244c003f */ addiu $t4,$v0,0x3f @@ -3353,7 +3353,7 @@ glabel var7f1b2948 /* f0f3c1c: 10000027 */ b .L0f0f3cbc /* f0f3c20: 8e19000c */ lw $t9,0xc($s0) .L0f0f3c24: -/* f0f3c24: 0fc59c15 */ jal func0f167054 +/* f0f3c24: 0fc59c15 */ jal fileGetInflatedLength /* f0f3c28: 00402025 */ or $a0,$v0,$zero /* f0f3c2c: 2443003f */ addiu $v1,$v0,0x3f /* f0f3c30: 346d003f */ ori $t5,$v1,0x3f diff --git a/src/game/room.c b/src/game/room.c index d054cccd6..5135047ae 100644 --- a/src/game/room.c +++ b/src/game/room.c @@ -7350,7 +7350,7 @@ glabel func0f15d9a8 /* f15d9ac: afbf0014 */ sw $ra,0x14($sp) /* f15d9b0: afa51424 */ sw $a1,0x1424($sp) /* f15d9b4: afa61428 */ sw $a2,0x1428($sp) -/* f15d9b8: 0c002277 */ jal func000089dc +/* f15d9b8: 0c002277 */ jal rzipIs1173 /* f15d9bc: afa41420 */ sw $a0,0x1420($sp) /* f15d9c0: 8fa41420 */ lw $a0,0x1420($sp) /* f15d9c4: 8fa51424 */ lw $a1,0x1424($sp) @@ -7638,7 +7638,7 @@ glabel func0f15dc58 /* f15dd98: 02602025 */ or $a0,$s3,$zero /* f15dd9c: 0fc56c71 */ jal func0f15b1c4 /* f15dda0: 02403025 */ or $a2,$s2,$zero -/* f15dda4: 0c002277 */ jal func000089dc +/* f15dda4: 0c002277 */ jal rzipIs1173 /* f15dda8: 02602025 */ or $a0,$s3,$zero /* f15ddac: 10400009 */ beqz $v0,.L0f15ddd4 /* f15ddb0: 8fae02f4 */ lw $t6,0x2f4($sp) diff --git a/src/include/game/file.h b/src/include/game/file.h index a8c2eb9f7..6124f0a5d 100644 --- a/src/include/game/file.h +++ b/src/include/game/file.h @@ -6,11 +6,11 @@ void *fileGetRomAddress(s32 filenum); u32 fileGetRomSizeByTableAddress(u32 *filetableaddr); s32 fileGetRomSizeByFileNum(s32 filenum); -u32 func0f166ea8(void); +u32 func0f166ea8(u32 *filetableaddr); void func0f166eb4(void *ptr, u32 len, void *table, struct fileinfo *info); void func0f166f74(void); void func0f166ff0(u16 filenum, void *memaddr, s32 offset, u32 len); -u32 func0f167054(u32 filenum); +u32 fileGetInflatedLength(u32 filenum); void *func0f1670fc(u32 filenum, u32 arg1); void *func0f167200(s32 filenum, s32 arg1, u8 *ptr, u32 size); u32 fileGetSize(s32 filenum); diff --git a/src/include/game/stubs/game_175f50.h b/src/include/game/stubs/game_175f50.h index ca9ff17e6..70b78668e 100644 --- a/src/include/game/stubs/game_175f50.h +++ b/src/include/game/stubs/game_175f50.h @@ -4,7 +4,7 @@ #include "types.h" void stub0f175f50(void); -void stub0f175f58(s32 arg0, s32 arg1, s32 arg2); +void stub0f175f58(s32 arg0, u32 addr, u32 numwords); bool stub0f175f68(s32 arg0, s32 arg1); void stub0f175f78(s32 arg0, s32 arg1, s32 arg2); diff --git a/src/include/lib/lib_074f0.h b/src/include/lib/lib_074f0.h index dbcf95896..f692cd724 100644 --- a/src/include/lib/lib_074f0.h +++ b/src/include/lib/lib_074f0.h @@ -12,7 +12,7 @@ u32 func00008024(void); u32 func00008064(void); u32 func00008610(void); u32 func000088b0(void); -u32 func000089dc(void); +bool rzipIs1173(void *buffer); u32 func00008a08(void); #endif diff --git a/src/lib/lib_074f0.c b/src/lib/lib_074f0.c index 461476751..8227a3d77 100644 --- a/src/lib/lib_074f0.c +++ b/src/lib/lib_074f0.c @@ -1563,7 +1563,7 @@ glabel func000088b0 ); GLOBAL_ASM( -glabel func000089dc +glabel rzipIs1173 /* 89dc: 24090011 */ addiu $t1,$zero,0x11 /* 89e0: 90880000 */ lbu $t0,0x0($a0) /* 89e4: 15090006 */ bne $t0,$t1,.L00008a00