From f90be514458c15644b9b77498232a871fb8a9346 Mon Sep 17 00:00:00 2001 From: Ryan Dwyer Date: Sun, 27 Dec 2020 15:00:13 +1000 Subject: [PATCH] Decompile func0f013ba0 --- src/game/data/data_020df0.c | 60 ++----------- src/game/game_013550.c | 132 +++++++--------------------- src/game/game_129210.c | 8 +- src/include/game/data/data_020df0.h | 2 +- src/include/types.h | 24 +++++ 5 files changed, 69 insertions(+), 157 deletions(-) diff --git a/src/game/data/data_020df0.c b/src/game/data/data_020df0.c index 78c12040b..0cab82a98 100644 --- a/src/game/data/data_020df0.c +++ b/src/game/data/data_020df0.c @@ -4190,58 +4190,14 @@ u32 var8007e3c0 = 0xab8d9f77; u32 var8007e3c4 = 0x81280783; u32 var8007e3c8 = 0x00000000; u32 var8007e3cc = 0x00000000; -u32 var8007e3d0 = 0x00000bb8; -u32 var8007e3d4 = 0x00000078; -u32 var8007e3d8 = 0x00000bb8; -u32 var8007e3dc = 0x00000050; -u32 var8007e3e0 = 0x00000000; -u32 var8007e3e4 = 0x00000000; -u32 var8007e3e8 = 0x000001f4; -u32 var8007e3ec = 0x00000014; -u32 var8007e3f0 = 0x0000000c; -u32 var8007e3f4 = 0x00000000; -u32 var8007e3f8 = 0x00000000; -u32 var8007e3fc = 0x00000000; -u32 var8007e400 = 0x00000000; -u32 var8007e404 = 0x000005dc; -u32 var8007e408 = 0x00000028; -u32 var8007e40c = 0x000001f4; -u32 var8007e410 = 0x00000014; -u32 var8007e414 = 0x00000000; -u32 var8007e418 = 0x00000000; -u32 var8007e41c = 0x000001f4; -u32 var8007e420 = 0x00000014; -u32 var8007e424 = 0x0000000c; -u32 var8007e428 = 0x00000000; -u32 var8007e42c = 0x00000000; -u32 var8007e430 = 0x00000000; -u32 var8007e434 = 0x00000000; -u32 var8007e438 = 0x00001770; -u32 var8007e43c = 0x00000078; -u32 var8007e440 = 0x00001770; -u32 var8007e444 = 0x00000050; -u32 var8007e448 = 0x00000000; -u32 var8007e44c = 0x00000000; -u32 var8007e450 = 0x000003e8; -u32 var8007e454 = 0x00000014; -u32 var8007e458 = 0x00000004; -u32 var8007e45c = 0x00000000; -u32 var8007e460 = 0x00000000; -u32 var8007e464 = 0x00000000; -u32 var8007e468 = 0x00000000; -u32 var8007e46c = 0x000005dc; -u32 var8007e470 = 0x00000028; -u32 var8007e474 = 0x000001f4; -u32 var8007e478 = 0x00000014; -u32 var8007e47c = 0x00000000; -u32 var8007e480 = 0x00000000; -u32 var8007e484 = 0x000001f4; -u32 var8007e488 = 0x00000014; -u32 var8007e48c = 0x00000004; -u32 var8007e490 = 0x00000000; -u32 var8007e494 = 0x00000000; -u32 var8007e498 = 0x00000000; -u32 var8007e49c = 0x00000000; + +struct var8007e3d0 var8007e3d0[] = { + { 3000, 120, 3000, 80, 0, 0, 500, 20, 12, 0, 0, 0, 0 }, + { 1500, 40, 500, 20, 0, 0, 500, 20, 12, 0, 0, 0, 0 }, + { 6000, 120, 6000, 80, 0, 0, 1000, 20, 4, 0, 0, 0, 0 }, + { 1500, 40, 500, 20, 0, 0, 500, 20, 4, 0, 0, 0, 0 }, +}; + u32 var8007e4a0 = 0x00000000; u32 var8007e4a4 = 0x00000000; f32 var8007e4a8 = 1; diff --git a/src/game/game_013550.c b/src/game/game_013550.c index 0be1465d2..deba55a76 100644 --- a/src/game/game_013550.c +++ b/src/game/game_013550.c @@ -470,103 +470,35 @@ glabel func0f013b80 /* f013b9c: ac40000c */ sw $zero,0xc($v0) ); -GLOBAL_ASM( -glabel func0f013ba0 -/* f013ba0: 27bdffd0 */ addiu $sp,$sp,-48 -/* f013ba4: afb50028 */ sw $s5,0x28($sp) -/* f013ba8: afb40024 */ sw $s4,0x24($sp) -/* f013bac: afb2001c */ sw $s2,0x1c($sp) -/* f013bb0: 3c128008 */ lui $s2,%hi(var8007e3d0) -/* f013bb4: 3c14800a */ lui $s4,%hi(g_Vars) -/* f013bb8: 3c158008 */ lui $s5,%hi(var8007e4a0) -/* f013bbc: afbf002c */ sw $ra,0x2c($sp) -/* f013bc0: afb30020 */ sw $s3,0x20($sp) -/* f013bc4: afb10018 */ sw $s1,0x18($sp) -/* f013bc8: afb00014 */ sw $s0,0x14($sp) -/* f013bcc: 26b5e4a0 */ addiu $s5,$s5,%lo(var8007e4a0) -/* f013bd0: 26949fc0 */ addiu $s4,$s4,%lo(g_Vars) -/* f013bd4: 2652e3d0 */ addiu $s2,$s2,%lo(var8007e3d0) -.L0f013bd8: -/* f013bd8: 8e8e006c */ lw $t6,0x6c($s4) -/* f013bdc: 8e820068 */ lw $v0,0x68($s4) -/* f013be0: 8e840064 */ lw $a0,0x64($s4) -/* f013be4: 8e860070 */ lw $a2,0x70($s4) -/* f013be8: 11c00003 */ beqz $t6,.L0f013bf8 -/* f013bec: 00008025 */ or $s0,$zero,$zero -/* f013bf0: 10000002 */ b .L0f013bfc -/* f013bf4: 24050001 */ addiu $a1,$zero,0x1 -.L0f013bf8: -/* f013bf8: 00002825 */ or $a1,$zero,$zero -.L0f013bfc: -/* f013bfc: 10400003 */ beqz $v0,.L0f013c0c -/* f013c00: 00001825 */ or $v1,$zero,$zero -/* f013c04: 10000001 */ b .L0f013c0c -/* f013c08: 24030001 */ addiu $v1,$zero,0x1 -.L0f013c0c: -/* f013c0c: 10800003 */ beqz $a0,.L0f013c1c -/* f013c10: 00001025 */ or $v0,$zero,$zero -/* f013c14: 10000002 */ b .L0f013c20 -/* f013c18: 24040001 */ addiu $a0,$zero,0x1 -.L0f013c1c: -/* f013c1c: 00002025 */ or $a0,$zero,$zero -.L0f013c20: -/* f013c20: 10c00003 */ beqz $a2,.L0f013c30 -/* f013c24: 00000000 */ nop -/* f013c28: 10000001 */ b .L0f013c30 -/* f013c2c: 24020001 */ addiu $v0,$zero,0x1 -.L0f013c30: -/* f013c30: 00447821 */ addu $t7,$v0,$a0 -/* f013c34: 01e3c021 */ addu $t8,$t7,$v1 -/* f013c38: 0305c821 */ addu $t9,$t8,$a1 -/* f013c3c: 2b210002 */ slti $at,$t9,0x2 -/* f013c40: 14200004 */ bnez $at,.L0f013c54 -/* f013c44: 24050004 */ addiu $a1,$zero,0x4 -/* f013c48: 8e530008 */ lw $s3,0x8($s2) -/* f013c4c: 1000000a */ b .L0f013c78 -/* f013c50: 8e51000c */ lw $s1,0xc($s2) -.L0f013c54: -/* f013c54: 8e8804b4 */ lw $t0,0x4b4($s4) -/* f013c58: 2901005a */ slti $at,$t0,0x5a -/* f013c5c: 54200005 */ bnezl $at,.L0f013c74 -/* f013c60: 8e530000 */ lw $s3,0x0($s2) -/* f013c64: 8e530010 */ lw $s3,0x10($s2) -/* f013c68: 10000003 */ b .L0f013c78 -/* f013c6c: 8e510014 */ lw $s1,0x14($s2) -/* f013c70: 8e530000 */ lw $s3,0x0($s2) -.L0f013c74: -/* f013c74: 8e510004 */ lw $s1,0x4($s2) -.L0f013c78: -/* f013c78: 1a200004 */ blez $s1,.L0f013c8c -/* f013c7c: 00000000 */ nop -/* f013c80: 0c0048f2 */ jal malloc -/* f013c84: 00112100 */ sll $a0,$s1,0x4 -/* f013c88: ae420024 */ sw $v0,0x24($s2) -.L0f013c8c: -/* f013c8c: 1a200007 */ blez $s1,.L0f013cac -/* f013c90: 00001025 */ or $v0,$zero,$zero -.L0f013c94: -/* f013c94: 8e490024 */ lw $t1,0x24($s2) -/* f013c98: 26100001 */ addiu $s0,$s0,0x1 -/* f013c9c: 01225021 */ addu $t2,$t1,$v0 -/* f013ca0: 24420010 */ addiu $v0,$v0,0x10 -/* f013ca4: 1611fffb */ bne $s0,$s1,.L0f013c94 -/* f013ca8: a540000e */ sh $zero,0xe($t2) -.L0f013cac: -/* f013cac: 26520034 */ addiu $s2,$s2,0x34 -/* f013cb0: ae51fffc */ sw $s1,-0x4($s2) -/* f013cb4: ae53fff4 */ sw $s3,-0xc($s2) -/* f013cb8: 1655ffc7 */ bne $s2,$s5,.L0f013bd8 -/* f013cbc: ae53fff8 */ sw $s3,-0x8($s2) -/* f013cc0: 8fbf002c */ lw $ra,0x2c($sp) -/* f013cc4: 8fb00014 */ lw $s0,0x14($sp) -/* f013cc8: 8fb10018 */ lw $s1,0x18($sp) -/* f013ccc: 8fb2001c */ lw $s2,0x1c($sp) -/* f013cd0: 8fb30020 */ lw $s3,0x20($sp) -/* f013cd4: 8fb40024 */ lw $s4,0x24($sp) -/* f013cd8: 8fb50028 */ lw $s5,0x28($sp) -/* f013cdc: 03e00008 */ jr $ra -/* f013ce0: 27bd0030 */ addiu $sp,$sp,0x30 -/* f013ce4: 00000000 */ nop -/* f013ce8: 00000000 */ nop -/* f013cec: 00000000 */ nop -); +void func0f013ba0(void) +{ + s32 i; + s32 j; + s32 num; + s32 val; + + for (i = 0; i < 4; i++) { + if (PLAYERCOUNT() >= 2) { + val = var8007e3d0[i].valifmp; + num = var8007e3d0[i].numifmp; + } else if (g_Vars.stagenum >= STAGE_TITLE) { + val = var8007e3d0[i].valifspecial; + num = var8007e3d0[i].numifspecial; + } else { + val = var8007e3d0[i].valifsp; + num = var8007e3d0[i].numifsp; + } + + if (num > 0) { + var8007e3d0[i].unk24 = malloc(num * sizeof(struct var8007e3d0_data), 4); + } + + for (j = 0; j < num; j++) { + var8007e3d0[i].unk24[j].unk0e = 0; + } + + var8007e3d0[i].numallocated = num; + var8007e3d0[i].val1 = val; + var8007e3d0[i].val2 = val; + } +} diff --git a/src/game/game_129210.c b/src/game/game_129210.c index 9a2fc09fd..61bca8d2d 100644 --- a/src/game/game_129210.c +++ b/src/game/game_129210.c @@ -230,10 +230,10 @@ glabel func0f12939c /* f1294f4: 03c4082a */ slt $at,$s8,$a0 /* f1294f8: 1420ffc2 */ bnez $at,.L0f129404 /* f1294fc: 26d60010 */ addiu $s6,$s6,0x10 -/* f129500: 3c058008 */ lui $a1,%hi(var8007e42c) -/* f129504: 8ca5e42c */ lw $a1,%lo(var8007e42c)($a1) -/* f129508: 3c028008 */ lui $v0,%hi(var8007e430) -/* f12950c: 8c42e430 */ lw $v0,%lo(var8007e430)($v0) +/* f129500: 3c058008 */ lui $a1,%hi(var8007e3d0+0x5c) +/* f129504: 8ca5e42c */ lw $a1,%lo(var8007e3d0+0x5c)($a1) +/* f129508: 3c028008 */ lui $v0,%hi(var8007e3d0+0x60) +/* f12950c: 8c42e430 */ lw $v0,%lo(var8007e3d0+0x60)($v0) /* f129510: 00057883 */ sra $t7,$a1,0x2 /* f129514: 01e02825 */ or $a1,$t7,$zero .L0f129518: diff --git a/src/include/game/data/data_020df0.h b/src/include/game/data/data_020df0.h index 33c5f1f37..ebbbcb1b4 100644 --- a/src/include/game/data/data_020df0.h +++ b/src/include/game/data/data_020df0.h @@ -126,7 +126,7 @@ extern u32 var8007dbe8; extern u32 var8007dbf4; extern u32 var8007dc00; extern u32 var8007dc10; -extern u32 var8007e3d0; +extern struct var8007e3d0 var8007e3d0[4]; extern u32 var8007e4a0; extern u32 var8007e4a4; extern f32 var8007e4a8; diff --git a/src/include/types.h b/src/include/types.h index 9919bc390..5bd95787e 100644 --- a/src/include/types.h +++ b/src/include/types.h @@ -6730,4 +6730,28 @@ struct var8006ae10 { /*0x74*/ u32 unk74; }; +struct var8007e3d0_data { + u32 unk00; + u32 unk04; + u32 unk08; + u16 unk0c; + u16 unk0e; +}; + +struct var8007e3d0 { + s32 valifsp; + s32 numifsp; + s32 valifmp; + s32 numifmp; + s32 valifspecial; + s32 numifspecial; + s32 unk18; + s32 unk1c; + s32 unk20; + struct var8007e3d0_data *unk24; + s32 val1; + s32 val2; + s32 numallocated; +}; + #endif