From 546bfbac65877dbc65160379c132bee3fc6cfc29 Mon Sep 17 00:00:00 2001 From: Ryan Dwyer Date: Sun, 12 Apr 2020 11:14:32 +1000 Subject: [PATCH] Decompile ciGetHangarBioIndexBySlot --- src/game/game_19c990.c | 56 +++++++++++----------------------- src/game/game_1a3340.c | 12 ++++---- src/include/game/game_19c990.h | 2 +- 3 files changed, 25 insertions(+), 45 deletions(-) diff --git a/src/game/game_19c990.c b/src/game/game_19c990.c index bbc09cfe3..12d44f5b7 100644 --- a/src/game/game_19c990.c +++ b/src/game/game_19c990.c @@ -4920,50 +4920,30 @@ s32 ciGetNumUnlockedHangarBios(void) return count; } -GLOBAL_ASM( -glabel func0f1a176c -/* f1a176c: 27bdffd8 */ addiu $sp,$sp,-40 -/* f1a1770: afb30020 */ sw $s3,0x20($sp) -/* f1a1774: afb2001c */ sw $s2,0x1c($sp) -/* f1a1778: afb10018 */ sw $s1,0x18($sp) -/* f1a177c: afb00014 */ sw $s0,0x14($sp) -/* f1a1780: 00809825 */ or $s3,$a0,$zero -/* f1a1784: afbf0024 */ sw $ra,0x24($sp) -/* f1a1788: 2411ffff */ addiu $s1,$zero,-1 -/* f1a178c: 00008025 */ or $s0,$zero,$zero -/* f1a1790: 24120017 */ addiu $s2,$zero,0x17 -.L0f1a1794: -/* f1a1794: 0fc68579 */ jal ciIsHangarBioUnlocked -/* f1a1798: 02002025 */ or $a0,$s0,$zero -/* f1a179c: 10400002 */ beqz $v0,.L0f1a17a8 -/* f1a17a0: 00000000 */ sll $zero,$zero,0x0 -/* f1a17a4: 26310001 */ addiu $s1,$s1,0x1 -.L0f1a17a8: -/* f1a17a8: 56330004 */ bnel $s1,$s3,.L0f1a17bc -/* f1a17ac: 26100001 */ addiu $s0,$s0,0x1 -/* f1a17b0: 10000005 */ beqz $zero,.L0f1a17c8 -/* f1a17b4: 02001025 */ or $v0,$s0,$zero -/* f1a17b8: 26100001 */ addiu $s0,$s0,0x1 -.L0f1a17bc: -/* f1a17bc: 1612fff5 */ bne $s0,$s2,.L0f1a1794 -/* f1a17c0: 00000000 */ sll $zero,$zero,0x0 -/* f1a17c4: 00001025 */ or $v0,$zero,$zero -.L0f1a17c8: -/* f1a17c8: 8fbf0024 */ lw $ra,0x24($sp) -/* f1a17cc: 8fb00014 */ lw $s0,0x14($sp) -/* f1a17d0: 8fb10018 */ lw $s1,0x18($sp) -/* f1a17d4: 8fb2001c */ lw $s2,0x1c($sp) -/* f1a17d8: 8fb30020 */ lw $s3,0x20($sp) -/* f1a17dc: 03e00008 */ jr $ra -/* f1a17e0: 27bd0028 */ addiu $sp,$sp,0x28 -); +s32 ciGetHangarBioIndexBySlot(s32 slot) +{ + s32 index = -1; + s32 i; + + for (i = 0; i < 23; i++) { + if (ciIsHangarBioUnlocked(i)) { + index++; + } + + if (index == slot) { + return i; + } + } + + return 0; +} GLOBAL_ASM( glabel func0f1a17e4 /* f1a17e4: 27bdffe8 */ addiu $sp,$sp,-24 /* f1a17e8: afbf0014 */ sw $ra,0x14($sp) /* f1a17ec: 3c048009 */ lui $a0,%hi(var80088964) -/* f1a17f0: 0fc685db */ jal func0f1a176c +/* f1a17f0: 0fc685db */ jal ciGetHangarBioIndexBySlot /* f1a17f4: 90848964 */ lbu $a0,%lo(var80088964)($a0) /* f1a17f8: 0fc6852d */ jal ciGetHangarBio /* f1a17fc: 00402025 */ or $a0,$v0,$zero diff --git a/src/game/game_1a3340.c b/src/game/game_1a3340.c index d7e8a39e2..e95cde3fc 100644 --- a/src/game/game_1a3340.c +++ b/src/game/game_1a3340.c @@ -3540,7 +3540,7 @@ glabel func0f1a6c8c /* f1a6c90: afa40018 */ sw $a0,0x18($sp) /* f1a6c94: afbf0014 */ sw $ra,0x14($sp) /* f1a6c98: 3c048009 */ lui $a0,%hi(var80088964) -/* f1a6c9c: 0fc685db */ jal func0f1a176c +/* f1a6c9c: 0fc685db */ jal ciGetHangarBioIndexBySlot /* f1a6ca0: 90848964 */ lbu $a0,%lo(var80088964)($a0) /* f1a6ca4: 0fc6852d */ jal ciGetHangarBio /* f1a6ca8: 00402025 */ or $a0,$v0,$zero @@ -3559,7 +3559,7 @@ glabel func0f1a6cc4 /* f1a6ccc: afbf0014 */ sw $ra,0x14($sp) /* f1a6cd0: 3c048009 */ lui $a0,%hi(var80088964) /* f1a6cd4: 90848964 */ lbu $a0,%lo(var80088964)($a0) -/* f1a6cd8: 0fc685db */ jal func0f1a176c +/* f1a6cd8: 0fc685db */ jal ciGetHangarBioIndexBySlot /* f1a6cdc: afa0001c */ sw $zero,0x1c($sp) /* f1a6ce0: 0fc6852d */ jal ciGetHangarBio /* f1a6ce4: 00402025 */ or $a0,$v0,$zero @@ -3644,7 +3644,7 @@ glabel var7f1b99d0 /* f1a6dc8: 8fa60040 */ lw $a2,0x40($sp) /* f1a6dcc: 10000030 */ beqz $zero,.L0f1a6e90 /* f1a6dd0: acc20000 */ sw $v0,0x0($a2) -/* f1a6dd4: 0fc685db */ jal func0f1a176c +/* f1a6dd4: 0fc685db */ jal ciGetHangarBioIndexBySlot /* f1a6dd8: 8cc40000 */ lw $a0,0x0($a2) /* f1a6ddc: 0fc6852d */ jal ciGetHangarBio /* f1a6de0: 00402025 */ or $a0,$v0,$zero @@ -3656,7 +3656,7 @@ glabel var7f1b99d0 /* f1a6df8: 3c028009 */ lui $v0,%hi(var80088964) /* f1a6dfc: 24428964 */ addiu $v0,$v0,%lo(var80088964) /* f1a6e00: a04b0000 */ sb $t3,0x0($v0) -/* f1a6e04: 0fc685db */ jal func0f1a176c +/* f1a6e04: 0fc685db */ jal ciGetHangarBioIndexBySlot /* f1a6e08: 316400ff */ andi $a0,$t3,0xff /* f1a6e0c: 2841000e */ slti $at,$v0,0xe /* f1a6e10: 10200006 */ beqz $at,.L0f1a6e2c @@ -3714,7 +3714,7 @@ glabel menuhandler001a6ea4 /* f1a6ec0: 3c048009 */ lui $a0,%hi(var80088964) /* f1a6ec4: 90848964 */ lbu $a0,%lo(var80088964)($a0) /* f1a6ec8: afae00a4 */ sw $t6,0xa4($sp) -/* f1a6ecc: 0fc685db */ jal func0f1a176c +/* f1a6ecc: 0fc685db */ jal ciGetHangarBioIndexBySlot /* f1a6ed0: 8cd00008 */ lw $s0,0x8($a2) /* f1a6ed4: 2841000e */ slti $at,$v0,0xe /* f1a6ed8: 102000ac */ beqz $at,.L0f1a718c @@ -4043,7 +4043,7 @@ glabel var7f1b99d8 /* f1a7390: 3c048009 */ lui $a0,%hi(var80088964) /* f1a7394: afa500a4 */ sw $a1,0xa4($sp) /* f1a7398: 90848964 */ lbu $a0,%lo(var80088964)($a0) -/* f1a739c: 0fc685db */ jal func0f1a176c +/* f1a739c: 0fc685db */ jal ciGetHangarBioIndexBySlot /* f1a73a0: afa600a0 */ sw $a2,0xa0($sp) /* f1a73a4: 2841000e */ slti $at,$v0,0xe /* f1a73a8: 14200065 */ bnez $at,.L0f1a7540 diff --git a/src/include/game/game_19c990.h b/src/include/game/game_19c990.h index cb802f092..e69d92045 100644 --- a/src/include/game/game_19c990.h +++ b/src/include/game/game_19c990.h @@ -76,7 +76,7 @@ struct hangarbio *ciGetHangarBio(s32 index); bool ciIsHangarBioUnlocked(u32 bioindex); s32 ciGetNumUnlockedLocationBios(void); s32 ciGetNumUnlockedHangarBios(void); -u32 func0f1a176c(void); +s32 ciGetHangarBioIndexBySlot(s32 slot); u32 func0f1a17e4(void); struct trainingdata *getDeviceTrainingData(void); void dtRestorePlayer(void);