From bd8942bd3523310ee363d804629e2f1da0f6a9e9 Mon Sep 17 00:00:00 2001 From: Ryan Dwyer Date: Sat, 11 Apr 2020 15:44:43 +1000 Subject: [PATCH] Decompile ciGetLocationBio --- src/game/game_19c990.c | 224 +++++++++------------------------ src/game/game_1a3340.c | 6 +- src/include/game/game_19c990.h | 4 +- src/include/types.h | 7 ++ 4 files changed, 74 insertions(+), 167 deletions(-) diff --git a/src/game/game_19c990.c b/src/game/game_19c990.c index 6bca2034f..3b2fef216 100644 --- a/src/game/game_19c990.c +++ b/src/game/game_19c990.c @@ -5499,171 +5499,71 @@ glabel func0f1a14a8 u32 var80088964 = 0; -u32 place_bios[] = { - // name, description - L_MISC(290), L_MISC(313), 0, 0, // Carrington Institute - L_MISC(291), L_MISC(314), 0, 0, // Lucerne Tower - L_MISC(292), L_MISC(315), 0, 0, // Laboratory Basement - L_MISC(293), L_MISC(316), 0, 0, // Carrington Villa - L_MISC(294), L_MISC(317), 0, 0, // Chicago - L_MISC(295), L_MISC(318), 0, 0, // G5 Building - L_MISC(296), L_MISC(319), 0, 0, // Area 51 - L_MISC(297), L_MISC(320), 0, 0, // Alaskan Air Base - L_MISC(298), L_MISC(321), 0, 0, // Air Force One - L_MISC(299), L_MISC(322), 0, 0, // Crash Site - L_MISC(300), L_MISC(323), 0, 0, // Pelagic II - L_MISC(301), L_MISC(324), 0, 0, // Cetan Ship - L_MISC(302), L_MISC(325), 0, 0, // Skedar Assault Ship - L_MISC(303), L_MISC(326), 0, 0, // Skedar Homeworld - L_MISC(304), L_MISC(327), 0, 0, // Jumpship - L_MISC(305), L_MISC(328), 0, 0, // HoverCrate - L_MISC(306), L_MISC(329), 0, 0, // HoverBike - L_MISC(307), L_MISC(330), 0, 0, // Cleaning Hovbot - L_MISC(308), L_MISC(331), 0, 0, // Hovercopter - L_MISC(309), L_MISC(332), 0, 0, // G5 Robot - L_MISC(310), L_MISC(333), 0, 0, // A51 Interceptor - L_MISC(311), L_MISC(334), 0, 0, // Maian Vessel - L_MISC(312), L_MISC(335), 0, 0, // Skedar Shuttle -}; +struct locationbio *ciGetLocationBio(s32 index) +{ + struct locationbio bios[] = { + // name, description + { L_MISC(290), L_MISC(313) }, // Carrington Institute + { L_MISC(291), L_MISC(314) }, // Lucerne Tower + { L_MISC(292), L_MISC(315) }, // Laboratory Basement + { L_MISC(293), L_MISC(316) }, // Carrington Villa + { L_MISC(294), L_MISC(317) }, // Chicago + { L_MISC(295), L_MISC(318) }, // G5 Building + { L_MISC(296), L_MISC(319) }, // Area 51 + { L_MISC(297), L_MISC(320) }, // Alaskan Air Base + { L_MISC(298), L_MISC(321) }, // Air Force One + { L_MISC(299), L_MISC(322) }, // Crash Site + { L_MISC(300), L_MISC(323) }, // Pelagic II + { L_MISC(301), L_MISC(324) }, // Cetan Ship + { L_MISC(302), L_MISC(325) }, // Skedar Assault Ship + { L_MISC(303), L_MISC(326) }, // Skedar Homeworld + { L_MISC(304), L_MISC(327) }, // Jumpship + { L_MISC(305), L_MISC(328) }, // HoverCrate + { L_MISC(306), L_MISC(329) }, // HoverBike + { L_MISC(307), L_MISC(330) }, // Cleaning Hovbot + { L_MISC(308), L_MISC(331) }, // Hovercopter + { L_MISC(309), L_MISC(332) }, // G5 Robot + { L_MISC(310), L_MISC(333) }, // A51 Interceptor + { L_MISC(311), L_MISC(334) }, // Maian Vessel + { L_MISC(312), L_MISC(335) }, // Skedar Shuttle + }; + + switch (index) { + case 0: return &bios[0]; + case 1: return &bios[1]; + case 2: return &bios[2]; + case 3: return &bios[3]; + case 4: return &bios[4]; + case 5: return &bios[5]; + case 6: return &bios[6]; + case 7: return &bios[7]; + case 8: return &bios[8]; + case 9: return &bios[9]; + case 10: return &bios[10]; + case 11: return &bios[11]; + case 12: return &bios[12]; + case 13: return &bios[13]; + case 14: return &bios[14]; + case 15: return &bios[15]; + case 16: return &bios[16]; + case 17: return &bios[17]; + case 18: return &bios[18]; + case 19: return &bios[19]; + case 20: return &bios[20]; + case 21: return &bios[21]; + case 22: return &bios[22]; + } + + return NULL; +} u8 var80088ad8 = 0; u8 var80088adc = 0; -GLOBAL_ASM( -glabel func0f1a14b4 -.late_rodata -glabel var7f1b96cc -.word func0f1a14b4+0x70 # f1a1524 -glabel var7f1b96d0 -.word func0f1a14b4+0x78 # f1a152c -glabel var7f1b96d4 -.word func0f1a14b4+0x80 # f1a1534 -glabel var7f1b96d8 -.word func0f1a14b4+0x88 # f1a153c -glabel var7f1b96dc -.word func0f1a14b4+0x90 # f1a1544 -glabel var7f1b96e0 -.word func0f1a14b4+0x98 # f1a154c -glabel var7f1b96e4 -.word func0f1a14b4+0xa0 # f1a1554 -glabel var7f1b96e8 -.word func0f1a14b4+0xa8 # f1a155c -glabel var7f1b96ec -.word func0f1a14b4+0xb0 # f1a1564 -glabel var7f1b96f0 -.word func0f1a14b4+0xb8 # f1a156c -glabel var7f1b96f4 -.word func0f1a14b4+0xc0 # f1a1574 -glabel var7f1b96f8 -.word func0f1a14b4+0xc8 # f1a157c -glabel var7f1b96fc -.word func0f1a14b4+0xd0 # f1a1584 -glabel var7f1b9700 -.word func0f1a14b4+0xd8 # f1a158c -glabel var7f1b9704 -.word func0f1a14b4+0xe0 # f1a1594 -glabel var7f1b9708 -.word func0f1a14b4+0xe8 # f1a159c -glabel var7f1b970c -.word func0f1a14b4+0xf0 # f1a15a4 -glabel var7f1b9710 -.word func0f1a14b4+0xf8 # f1a15ac -glabel var7f1b9714 -.word func0f1a14b4+0x100 # f1a15b4 -glabel var7f1b9718 -.word func0f1a14b4+0x108 # f1a15bc -glabel var7f1b971c -.word func0f1a14b4+0x110 # f1a15c4 -glabel var7f1b9720 -.word func0f1a14b4+0x118 # f1a15cc -glabel var7f1b9724 -.word func0f1a14b4+0x120 # f1a15d4 -.text -/* f1a14b4: 27bdfe90 */ addiu $sp,$sp,-368 -/* f1a14b8: 3c0e8009 */ lui $t6,%hi(place_bios) -/* f1a14bc: 27a30000 */ addiu $v1,$sp,0x0 -/* f1a14c0: 25ce8968 */ addiu $t6,$t6,%lo(place_bios) -/* f1a14c4: 25d90168 */ addiu $t9,$t6,0x168 -/* f1a14c8: 00604025 */ or $t0,$v1,$zero -.L0f1a14cc: -/* f1a14cc: 8dc10000 */ lw $at,0x0($t6) -/* f1a14d0: 25ce000c */ addiu $t6,$t6,0xc -/* f1a14d4: 2508000c */ addiu $t0,$t0,0xc -/* f1a14d8: ad01fff4 */ sw $at,-0xc($t0) -/* f1a14dc: 8dc1fff8 */ lw $at,-0x8($t6) -/* f1a14e0: ad01fff8 */ sw $at,-0x8($t0) -/* f1a14e4: 8dc1fffc */ lw $at,-0x4($t6) -/* f1a14e8: 15d9fff8 */ bne $t6,$t9,.L0f1a14cc -/* f1a14ec: ad01fffc */ sw $at,-0x4($t0) -/* f1a14f0: 8dc10000 */ lw $at,0x0($t6) -/* f1a14f4: 00044880 */ sll $t1,$a0,0x2 -/* f1a14f8: 00001025 */ or $v0,$zero,$zero -/* f1a14fc: ad010000 */ sw $at,0x0($t0) -/* f1a1500: 8dd90004 */ lw $t9,0x4($t6) -/* f1a1504: 2c810017 */ sltiu $at,$a0,0x17 -/* f1a1508: 10200034 */ beqz $at,.L0f1a15dc -/* f1a150c: ad190004 */ sw $t9,0x4($t0) -/* f1a1510: 3c017f1c */ lui $at,%hi(var7f1b96cc) -/* f1a1514: 00290821 */ addu $at,$at,$t1 -/* f1a1518: 8c2996cc */ lw $t1,%lo(var7f1b96cc)($at) -/* f1a151c: 01200008 */ jr $t1 -/* f1a1520: 00000000 */ sll $zero,$zero,0x0 -/* f1a1524: 1000002d */ beqz $zero,.L0f1a15dc -/* f1a1528: 00601025 */ or $v0,$v1,$zero -/* f1a152c: 1000002b */ beqz $zero,.L0f1a15dc -/* f1a1530: 27a20010 */ addiu $v0,$sp,0x10 -/* f1a1534: 10000029 */ beqz $zero,.L0f1a15dc -/* f1a1538: 27a20020 */ addiu $v0,$sp,0x20 -/* f1a153c: 10000027 */ beqz $zero,.L0f1a15dc -/* f1a1540: 27a20030 */ addiu $v0,$sp,0x30 -/* f1a1544: 10000025 */ beqz $zero,.L0f1a15dc -/* f1a1548: 27a20040 */ addiu $v0,$sp,0x40 -/* f1a154c: 10000023 */ beqz $zero,.L0f1a15dc -/* f1a1550: 27a20050 */ addiu $v0,$sp,0x50 -/* f1a1554: 10000021 */ beqz $zero,.L0f1a15dc -/* f1a1558: 27a20060 */ addiu $v0,$sp,0x60 -/* f1a155c: 1000001f */ beqz $zero,.L0f1a15dc -/* f1a1560: 27a20070 */ addiu $v0,$sp,0x70 -/* f1a1564: 1000001d */ beqz $zero,.L0f1a15dc -/* f1a1568: 27a20080 */ addiu $v0,$sp,0x80 -/* f1a156c: 1000001b */ beqz $zero,.L0f1a15dc -/* f1a1570: 27a20090 */ addiu $v0,$sp,0x90 -/* f1a1574: 10000019 */ beqz $zero,.L0f1a15dc -/* f1a1578: 27a200a0 */ addiu $v0,$sp,0xa0 -/* f1a157c: 10000017 */ beqz $zero,.L0f1a15dc -/* f1a1580: 27a200b0 */ addiu $v0,$sp,0xb0 -/* f1a1584: 10000015 */ beqz $zero,.L0f1a15dc -/* f1a1588: 27a200c0 */ addiu $v0,$sp,0xc0 -/* f1a158c: 10000013 */ beqz $zero,.L0f1a15dc -/* f1a1590: 27a200d0 */ addiu $v0,$sp,0xd0 -/* f1a1594: 10000011 */ beqz $zero,.L0f1a15dc -/* f1a1598: 27a200e0 */ addiu $v0,$sp,0xe0 -/* f1a159c: 1000000f */ beqz $zero,.L0f1a15dc -/* f1a15a0: 27a200f0 */ addiu $v0,$sp,0xf0 -/* f1a15a4: 1000000d */ beqz $zero,.L0f1a15dc -/* f1a15a8: 27a20100 */ addiu $v0,$sp,0x100 -/* f1a15ac: 1000000b */ beqz $zero,.L0f1a15dc -/* f1a15b0: 27a20110 */ addiu $v0,$sp,0x110 -/* f1a15b4: 10000009 */ beqz $zero,.L0f1a15dc -/* f1a15b8: 27a20120 */ addiu $v0,$sp,0x120 -/* f1a15bc: 10000007 */ beqz $zero,.L0f1a15dc -/* f1a15c0: 27a20130 */ addiu $v0,$sp,0x130 -/* f1a15c4: 10000005 */ beqz $zero,.L0f1a15dc -/* f1a15c8: 27a20140 */ addiu $v0,$sp,0x140 -/* f1a15cc: 10000003 */ beqz $zero,.L0f1a15dc -/* f1a15d0: 27a20150 */ addiu $v0,$sp,0x150 -/* f1a15d4: 10000001 */ beqz $zero,.L0f1a15dc -/* f1a15d8: 27a20160 */ addiu $v0,$sp,0x160 -.L0f1a15dc: -/* f1a15dc: 03e00008 */ jr $ra -/* f1a15e0: 27bd0170 */ addiu $sp,$sp,0x170 -); - -bool bioIsUnlocked(u32 bioindex) +bool ciIsLocationBioUnlocked(u32 bioindex) { u32 stage; - // bioindex is an index into place_bios switch (bioindex) { case 0: case 15: @@ -5742,7 +5642,7 @@ glabel func0f1a16a4 /* f1a16d4: 10000009 */ beqz $zero,.L0f1a16fc /* f1a16d8: 02201025 */ or $v0,$s1,$zero .L0f1a16dc: -/* f1a16dc: 0fc68579 */ jal bioIsUnlocked +/* f1a16dc: 0fc68579 */ jal ciIsLocationBioUnlocked /* f1a16e0: 02002025 */ or $a0,$s0,$zero /* f1a16e4: 10400002 */ beqz $v0,.L0f1a16f0 /* f1a16e8: 26100001 */ addiu $s0,$s0,0x1 @@ -5771,7 +5671,7 @@ glabel func0f1a1714 /* f1a172c: 00008025 */ or $s0,$zero,$zero /* f1a1730: 24120017 */ addiu $s2,$zero,0x17 .L0f1a1734: -/* f1a1734: 0fc68579 */ jal bioIsUnlocked +/* f1a1734: 0fc68579 */ jal ciIsLocationBioUnlocked /* f1a1738: 02002025 */ or $a0,$s0,$zero /* f1a173c: 10400002 */ beqz $v0,.L0f1a1748 /* f1a1740: 26100001 */ addiu $s0,$s0,0x1 @@ -5801,7 +5701,7 @@ glabel func0f1a176c /* f1a178c: 00008025 */ or $s0,$zero,$zero /* f1a1790: 24120017 */ addiu $s2,$zero,0x17 .L0f1a1794: -/* f1a1794: 0fc68579 */ jal bioIsUnlocked +/* f1a1794: 0fc68579 */ jal ciIsLocationBioUnlocked /* f1a1798: 02002025 */ or $a0,$s0,$zero /* f1a179c: 10400002 */ beqz $v0,.L0f1a17a8 /* f1a17a0: 00000000 */ sll $zero,$zero,0x0 @@ -5833,7 +5733,7 @@ glabel func0f1a17e4 /* f1a17ec: 3c048009 */ lui $a0,%hi(var80088964) /* f1a17f0: 0fc685db */ jal func0f1a176c /* f1a17f4: 90848964 */ lbu $a0,%lo(var80088964)($a0) -/* f1a17f8: 0fc6852d */ jal func0f1a14b4 +/* f1a17f8: 0fc6852d */ jal ciGetLocationBio /* f1a17fc: 00402025 */ or $a0,$v0,$zero /* f1a1800: 0fc5b9f1 */ jal langGet /* f1a1804: 8c440004 */ lw $a0,0x4($v0) diff --git a/src/game/game_1a3340.c b/src/game/game_1a3340.c index 119ea7eff..3888e25bc 100644 --- a/src/game/game_1a3340.c +++ b/src/game/game_1a3340.c @@ -3577,7 +3577,7 @@ glabel func0f1a6c8c /* f1a6c98: 3c048009 */ lui $a0,%hi(var80088964) /* f1a6c9c: 0fc685db */ jal func0f1a176c /* f1a6ca0: 90848964 */ lbu $a0,%lo(var80088964)($a0) -/* f1a6ca4: 0fc6852d */ jal func0f1a14b4 +/* f1a6ca4: 0fc6852d */ jal ciGetLocationBio /* f1a6ca8: 00402025 */ or $a0,$v0,$zero /* f1a6cac: 0fc5b9f1 */ jal langGet /* f1a6cb0: 8c440000 */ lw $a0,0x0($v0) @@ -3596,7 +3596,7 @@ glabel func0f1a6cc4 /* f1a6cd4: 90848964 */ lbu $a0,%lo(var80088964)($a0) /* f1a6cd8: 0fc685db */ jal func0f1a176c /* f1a6cdc: afa0001c */ sw $zero,0x1c($sp) -/* f1a6ce0: 0fc6852d */ jal func0f1a14b4 +/* f1a6ce0: 0fc6852d */ jal ciGetLocationBio /* f1a6ce4: 00402025 */ or $a0,$v0,$zero /* f1a6ce8: 0fc5b9f1 */ jal langGet /* f1a6cec: 8c440000 */ lw $a0,0x0($v0) @@ -3681,7 +3681,7 @@ glabel var7f1b99d0 /* f1a6dd0: acc20000 */ sw $v0,0x0($a2) /* f1a6dd4: 0fc685db */ jal func0f1a176c /* f1a6dd8: 8cc40000 */ lw $a0,0x0($a2) -/* f1a6ddc: 0fc6852d */ jal func0f1a14b4 +/* f1a6ddc: 0fc6852d */ jal ciGetLocationBio /* f1a6de0: 00402025 */ or $a0,$v0,$zero /* f1a6de4: 0fc5b9f1 */ jal langGet /* f1a6de8: 8c440000 */ lw $a0,0x0($v0) diff --git a/src/include/game/game_19c990.h b/src/include/game/game_19c990.h index dc40efc03..20b03c530 100644 --- a/src/include/game/game_19c990.h +++ b/src/include/game/game_19c990.h @@ -68,8 +68,8 @@ u32 func0f1a1398(void); u32 func0f1a13f0(void); u32 func0f1a1468(void); u32 func0f1a14a8(void); -u32 func0f1a14b4(void); -bool bioIsUnlocked(u32 bioindex); +struct locationbio *ciGetLocationBio(s32 index); +bool ciIsLocationBioUnlocked(u32 bioindex); u32 func0f1a16a4(void); u32 func0f1a1714(void); u32 func0f1a176c(void); diff --git a/src/include/types.h b/src/include/types.h index b4788e1dc..e922c3de4 100644 --- a/src/include/types.h +++ b/src/include/types.h @@ -4717,6 +4717,13 @@ struct miscbio { u32 description; }; +struct locationbio { + u32 name; + u32 description; + u32 unk08; + u32 unk0c; +}; + struct chrbio { u32 name; u32 race;