From 182818aba3583d8ed04527f89c7f445e39fb8441 Mon Sep 17 00:00:00 2001 From: Ryan Dwyer Date: Tue, 13 Oct 2020 18:40:47 +1000 Subject: [PATCH] Decompile func0f00b62c --- src/game/game_00b480.c | 162 +++++---------------------------- src/include/game/game_00b480.h | 2 +- 2 files changed, 25 insertions(+), 139 deletions(-) diff --git a/src/game/game_00b480.c b/src/game/game_00b480.c index 95cd76558..733cb6b32 100644 --- a/src/game/game_00b480.c +++ b/src/game/game_00b480.c @@ -60,147 +60,33 @@ void func0f00b510(void) var80062960 = malloc(0x1470, 4); for (i = 0; i < 20; i++) { + // @bug? Should the ALIGN64 should surely be applied before malloc...? + // Not a bug if only 0x200 bytes are being used var8009ccc0[i] = (void *)ALIGN64(malloc(0x240, 4)); } resetSomeStageThings(); } -GLOBAL_ASM( -glabel func0f00b62c -/* f00b62c: 3c02800a */ lui $v0,%hi(g_Vars) -/* f00b630: 24429fc0 */ addiu $v0,$v0,%lo(g_Vars) -/* f00b634: 8c4e006c */ lw $t6,0x6c($v0) -/* f00b638: 27bdffe0 */ addiu $sp,$sp,-32 -/* f00b63c: afbf0014 */ sw $ra,0x14($sp) -/* f00b640: 11c00003 */ beqz $t6,.L0f00b650 -/* f00b644: afa40020 */ sw $a0,0x20($sp) -/* f00b648: 10000002 */ b .L0f00b654 -/* f00b64c: 24070001 */ addiu $a3,$zero,0x1 -.L0f00b650: -/* f00b650: 00003825 */ or $a3,$zero,$zero -.L0f00b654: -/* f00b654: 8c4f0068 */ lw $t7,0x68($v0) -/* f00b658: 3c088006 */ lui $t0,%hi(g_NumChrsA) -/* f00b65c: 2508298c */ addiu $t0,$t0,%lo(g_NumChrsA) -/* f00b660: 11e00003 */ beqz $t7,.L0f00b670 -/* f00b664: 8fac0020 */ lw $t4,0x20($sp) -/* f00b668: 10000002 */ b .L0f00b674 -/* f00b66c: 24030001 */ addiu $v1,$zero,0x1 -.L0f00b670: -/* f00b670: 00001825 */ or $v1,$zero,$zero -.L0f00b674: -/* f00b674: 8c580064 */ lw $t8,0x64($v0) -/* f00b678: 00003025 */ or $a2,$zero,$zero -/* f00b67c: 24050004 */ addiu $a1,$zero,0x4 -/* f00b680: 13000003 */ beqz $t8,.L0f00b690 -/* f00b684: 00000000 */ nop -/* f00b688: 10000001 */ b .L0f00b690 -/* f00b68c: 24060001 */ addiu $a2,$zero,0x1 -.L0f00b690: -/* f00b690: 8c590070 */ lw $t9,0x70($v0) -/* f00b694: 00001025 */ or $v0,$zero,$zero -/* f00b698: 13200003 */ beqz $t9,.L0f00b6a8 -/* f00b69c: 00000000 */ nop -/* f00b6a0: 10000001 */ b .L0f00b6a8 -/* f00b6a4: 24020001 */ addiu $v0,$zero,0x1 -.L0f00b6a8: -/* f00b6a8: 00464821 */ addu $t1,$v0,$a2 -/* f00b6ac: 01235021 */ addu $t2,$t1,$v1 -/* f00b6b0: 01475821 */ addu $t3,$t2,$a3 -/* f00b6b4: 016c6821 */ addu $t5,$t3,$t4 -/* f00b6b8: 25ae000a */ addiu $t6,$t5,0xa -/* f00b6bc: 000e78c0 */ sll $t7,$t6,0x3 -/* f00b6c0: 01ee7823 */ subu $t7,$t7,$t6 -/* f00b6c4: 000f7880 */ sll $t7,$t7,0x2 -/* f00b6c8: 01ee7823 */ subu $t7,$t7,$t6 -/* f00b6cc: 000f7880 */ sll $t7,$t7,0x2 -/* f00b6d0: 01ee7821 */ addu $t7,$t7,$t6 -/* f00b6d4: 000f78c0 */ sll $t7,$t7,0x3 -/* f00b6d8: 25e4000f */ addiu $a0,$t7,0xf -/* f00b6dc: 3498000f */ ori $t8,$a0,0xf -/* f00b6e0: ad0e0000 */ sw $t6,0x0($t0) -/* f00b6e4: 0c0048f2 */ jal malloc -/* f00b6e8: 3b04000f */ xori $a0,$t8,0xf -/* f00b6ec: 3c088006 */ lui $t0,%hi(g_NumChrsA) -/* f00b6f0: 2508298c */ addiu $t0,$t0,%lo(g_NumChrsA) -/* f00b6f4: 8d060000 */ lw $a2,0x0($t0) -/* f00b6f8: 3c048006 */ lui $a0,%hi(g_ChrsA) -/* f00b6fc: 24842988 */ addiu $a0,$a0,%lo(g_ChrsA) -/* f00b700: ac820000 */ sw $v0,0x0($a0) -/* f00b704: 18c00013 */ blez $a2,.L0f00b754 -/* f00b708: 00001825 */ or $v1,$zero,$zero -/* f00b70c: 00001025 */ or $v0,$zero,$zero -/* f00b710: 2407ffff */ addiu $a3,$zero,-1 -/* f00b714: 8c890000 */ lw $t1,0x0($a0) -.L0f00b718: -/* f00b718: 24630001 */ addiu $v1,$v1,0x1 -/* f00b71c: 01225021 */ addu $t2,$t1,$v0 -/* f00b720: a5470000 */ sh $a3,0x0($t2) -/* f00b724: 8c8b0000 */ lw $t3,0x0($a0) -/* f00b728: 01626021 */ addu $t4,$t3,$v0 -/* f00b72c: ad800020 */ sw $zero,0x20($t4) -/* f00b730: 8c8d0000 */ lw $t5,0x0($a0) -/* f00b734: 01a27021 */ addu $t6,$t5,$v0 -/* f00b738: adc0001c */ sw $zero,0x1c($t6) -/* f00b73c: 8d060000 */ lw $a2,0x0($t0) -/* f00b740: 24420368 */ addiu $v0,$v0,0x368 -/* f00b744: 0066082a */ slt $at,$v1,$a2 -/* f00b748: 5420fff3 */ bnezl $at,.L0f00b718 -/* f00b74c: 8c890000 */ lw $t1,0x0($a0) -/* f00b750: 00001825 */ or $v1,$zero,$zero -.L0f00b754: -/* f00b754: 00062040 */ sll $a0,$a2,0x1 -/* f00b758: 2484000f */ addiu $a0,$a0,0xf -/* f00b75c: 3c01800a */ lui $at,%hi(g_NumChrsC) -/* f00b760: 348f000f */ ori $t7,$a0,0xf -/* f00b764: ac20cd10 */ sw $zero,%lo(g_NumChrsC)($at) -/* f00b768: 39e4000f */ xori $a0,$t7,0xf -/* f00b76c: 24050004 */ addiu $a1,$zero,0x4 -/* f00b770: 0c0048f2 */ jal malloc -/* f00b774: afa3001c */ sw $v1,0x1c($sp) -/* f00b778: 3c088006 */ lui $t0,%hi(g_NumChrsA) -/* f00b77c: 2508298c */ addiu $t0,$t0,%lo(g_NumChrsA) -/* f00b780: 8d040000 */ lw $a0,0x0($t0) -/* f00b784: 3c06800a */ lui $a2,%hi(g_ChrnumsC) -/* f00b788: 24c6cd14 */ addiu $a2,$a2,%lo(g_ChrnumsC) -/* f00b78c: 0004c840 */ sll $t9,$a0,0x1 -/* f00b790: 2724000f */ addiu $a0,$t9,0xf -/* f00b794: 3489000f */ ori $t1,$a0,0xf -/* f00b798: acc20000 */ sw $v0,0x0($a2) -/* f00b79c: 3924000f */ xori $a0,$t1,0xf -/* f00b7a0: 0c0048f2 */ jal malloc -/* f00b7a4: 24050004 */ addiu $a1,$zero,0x4 -/* f00b7a8: 3c088006 */ lui $t0,%hi(g_NumChrsA) -/* f00b7ac: 2508298c */ addiu $t0,$t0,%lo(g_NumChrsA) -/* f00b7b0: 8d0b0000 */ lw $t3,0x0($t0) -/* f00b7b4: 3c04800a */ lui $a0,%hi(g_ChrIndexesC) -/* f00b7b8: 2484cd18 */ addiu $a0,$a0,%lo(g_ChrIndexesC) -/* f00b7bc: 3c06800a */ lui $a2,%hi(g_ChrnumsC) -/* f00b7c0: 24c6cd14 */ addiu $a2,$a2,%lo(g_ChrnumsC) -/* f00b7c4: ac820000 */ sw $v0,0x0($a0) -/* f00b7c8: 8fa3001c */ lw $v1,0x1c($sp) -/* f00b7cc: 1960000e */ blez $t3,.L0f00b808 -/* f00b7d0: 2407ffff */ addiu $a3,$zero,-1 -/* f00b7d4: 00001025 */ or $v0,$zero,$zero -/* f00b7d8: 8ccc0000 */ lw $t4,0x0($a2) -.L0f00b7dc: -/* f00b7dc: 24630001 */ addiu $v1,$v1,0x1 -/* f00b7e0: 01826821 */ addu $t5,$t4,$v0 -/* f00b7e4: a5a70000 */ sh $a3,0x0($t5) -/* f00b7e8: 8c8e0000 */ lw $t6,0x0($a0) -/* f00b7ec: 01c27821 */ addu $t7,$t6,$v0 -/* f00b7f0: a5e70000 */ sh $a3,0x0($t7) -/* f00b7f4: 8d180000 */ lw $t8,0x0($t0) -/* f00b7f8: 24420002 */ addiu $v0,$v0,0x2 -/* f00b7fc: 0078082a */ slt $at,$v1,$t8 -/* f00b800: 5420fff6 */ bnezl $at,.L0f00b7dc -/* f00b804: 8ccc0000 */ lw $t4,0x0($a2) -.L0f00b808: -/* f00b808: 8fbf0014 */ lw $ra,0x14($sp) -/* f00b80c: 27bd0020 */ addiu $sp,$sp,0x20 -/* f00b810: 03e00008 */ jr $ra -/* f00b814: 00000000 */ nop -/* f00b818: 00000000 */ nop -/* f00b81c: 00000000 */ nop -); +void func0f00b62c(s32 numchrs) +{ + s32 i; + + g_NumChrsA = PLAYERCOUNT() + numchrs + 10; + g_ChrsA = malloc(ALIGN16(g_NumChrsA * sizeof(struct chrdata)), 4); + + for (i = 0; i < g_NumChrsA; i++) { + g_ChrsA[i].chrnum = -1; + g_ChrsA[i].model = NULL; + g_ChrsA[i].prop = NULL; + } + + g_NumChrsC = 0; + g_ChrnumsC = malloc(ALIGN16(g_NumChrsA * 2), 4); + g_ChrIndexesC = malloc(ALIGN16(g_NumChrsA * 2), 4); + + for (i = 0; i < g_NumChrsA; i++) { + g_ChrnumsC[i] = -1; + g_ChrIndexesC[i] = -1; + } +} diff --git a/src/include/game/game_00b480.h b/src/include/game/game_00b480.h index aa5af500b..8738ccbde 100644 --- a/src/include/game/game_00b480.h +++ b/src/include/game/game_00b480.h @@ -5,6 +5,6 @@ void func0f00b480(void); void func0f00b510(void); -u32 func0f00b62c(void); +void func0f00b62c(s32 numchrs); #endif