From 88fbb080f10c0f09946fa128e8c03e3101ea7991 Mon Sep 17 00:00:00 2001 From: Ryan Dwyer Date: Sun, 29 Mar 2020 12:35:14 +1000 Subject: [PATCH] Decompile currentPlayerGiveUnlimitedAmmo --- src/game/data/data_0160b0.c | 136 ++++++++-------------------- src/game/game_097ba0.c | 79 ++++++---------- src/game/game_0b63b0.c | 2 +- src/include/game/data/data_0160b0.h | 2 +- src/include/game/game_097ba0.h | 2 +- src/include/types.h | 6 ++ 6 files changed, 72 insertions(+), 155 deletions(-) diff --git a/src/game/data/data_0160b0.c b/src/game/data/data_0160b0.c index 1e4681dc0..1201364cd 100644 --- a/src/game/data/data_0160b0.c +++ b/src/game/data/data_0160b0.c @@ -198,105 +198,43 @@ u32 var80070358 = 0x00270028; u32 var8007035c = 0x0029002a; u32 var80070360 = 0x00000000; u32 var80070364 = 0x00000000; -u32 var80070368 = 0x00000000; -u32 var8007036c = 0x00000000; -u32 var80070370 = 0x00000000; -u32 var80070374 = 0x00000320; -u32 var80070378 = 0x00000000; -u32 var8007037c = 0x00000000; -u32 var80070380 = 0x00000320; -u32 var80070384 = 0x00000000; -u32 var80070388 = 0x00000000; -u32 var8007038c = 0x00000045; -u32 var80070390 = 0x00000000; -u32 var80070394 = 0x00000000; -u32 var80070398 = 0x00000190; -u32 var8007039c = 0x00000000; -u32 var800703a0 = 0xc0000000; -u32 var800703a4 = 0x00000064; -u32 var800703a8 = 0x00000000; -u32 var800703ac = 0x00000000; -u32 var800703b0 = 0x00000064; -u32 var800703b4 = 0x00000000; -u32 var800703b8 = 0x00000000; -u32 var800703bc = 0x0000000c; -u32 var800703c0 = 0x00000000; -u32 var800703c4 = 0x00000000; -u32 var800703c8 = 0x00000003; -u32 var800703cc = 0x00000000; -u32 var800703d0 = 0xc0000000; -u32 var800703d4 = 0x0000000a; -u32 var800703d8 = 0x00000000; -u32 var800703dc = 0x00000000; -u32 var800703e0 = 0x000000c8; -u32 var800703e4 = 0x00000000; -u32 var800703e8 = 0x00000000; -u32 var800703ec = 0x00000028; -u32 var800703f0 = 0x00000000; -u32 var800703f4 = 0x00000000; -u32 var800703f8 = 0x0000000a; -u32 var800703fc = 0x00000000; -u32 var80070400 = 0x3f800000; -u32 var80070404 = 0x0000000a; -u32 var80070408 = 0x00000000; -u32 var8007040c = 0x3f800000; -u32 var80070410 = 0x0000000a; -u32 var80070414 = 0x00000000; -u32 var80070418 = 0x3f800000; -u32 var8007041c = 0x00000320; -u32 var80070420 = 0x00000000; -u32 var80070424 = 0x00000000; -u32 var80070428 = 0x0000000f; -u32 var8007042c = 0x00000000; -u32 var80070430 = 0xc0000000; -u32 var80070434 = 0x00000032; -u32 var80070438 = 0x00000000; -u32 var8007043c = 0x00000000; -u32 var80070440 = 0x0000000a; -u32 var80070444 = 0x00000000; -u32 var80070448 = 0x00000000; -u32 var8007044c = 0x000000c8; -u32 var80070450 = 0x00000000; -u32 var80070454 = 0x00000000; -u32 var80070458 = 0x00004650; -u32 var8007045c = 0x00000000; -u32 var80070460 = 0x00000000; -u32 var80070464 = 0x00000004; -u32 var80070468 = 0x00000000; -u32 var8007046c = 0x00000000; -u32 var80070470 = 0x000000c8; -u32 var80070474 = 0x00000000; -u32 var80070478 = 0x00000000; -u32 var8007047c = 0x00000002; -u32 var80070480 = 0x00000000; -u32 var80070484 = 0x00000000; -u32 var80070488 = 0x0000000a; -u32 var8007048c = 0x00000000; -u32 var80070490 = 0x00000000; -u32 var80070494 = 0x0000000a; -u32 var80070498 = 0x00000000; -u32 var8007049c = 0x00000000; -u32 var800704a0 = 0x0000000a; -u32 var800704a4 = 0x00000000; -u32 var800704a8 = 0x00000000; -u32 var800704ac = 0x000003e8; -u32 var800704b0 = 0x00000000; -u32 var800704b4 = 0x00000000; -u32 var800704b8 = 0x0000000a; -u32 var800704bc = 0x00000000; -u32 var800704c0 = 0x00000000; -u32 var800704c4 = 0x00000032; -u32 var800704c8 = 0x00000000; -u32 var800704cc = 0xbf800000; -u32 var800704d0 = 0x00000001; -u32 var800704d4 = 0x00000000; -u32 var800704d8 = 0x00000000; -u32 var800704dc = 0x000000c8; -u32 var800704e0 = 0x00000000; -u32 var800704e4 = 0x00000000; -u32 var800704e8 = 0x0000000a; -u32 var800704ec = 0x00000000; -u32 var800704f0 = 0x00000000; + +struct ammotype g_AmmoTypes[] = { + { 0, 0, 0 }, + { 800, 0, 0 }, + { 800, 0, 0 }, + { 69, 0, 0 }, + { 400, 0, -2 }, + { 100, 0, 0 }, + { 100, 0, 0 }, + { 12, 0, 0 }, + { 3, 0, -2 }, + { 10, 0, 0 }, + { 200, 0, 0 }, + { 40, 0, 0 }, + { 10, 0, 1 }, + { 10, 0, 1 }, + { 10, 0, 1 }, + { 800, 0, 0 }, + { 15, 0, -2 }, + { 50, 0, 0 }, + { 10, 0, 0 }, + { 200, 0, 0 }, + { 18000, 0, 0 }, + { 4, 0, 0 }, + { 200, 0, 0 }, + { 2, 0, 0 }, + { 10, 0, 0 }, + { 10, 0, 0 }, + { 10, 0, 0 }, + { 1000, 0, 0 }, + { 10, 0, 0 }, + { 50, 0, -1 }, + { 1, 0, 0 }, + { 200, 0, 0 }, + { 10, 0, 0 }, +}; + u32 var800704f4 = 0x00000000; u32 var800704f8 = 0x00000000; u32 var800704fc = 0x00000000; diff --git a/src/game/game_097ba0.c b/src/game/game_097ba0.c index bff3b5f0f..931960b50 100644 --- a/src/game/game_097ba0.c +++ b/src/game/game_097ba0.c @@ -21128,7 +21128,7 @@ glabel var7f1acbac /* f0a91e8: 24010002 */ addiu $at,$zero,0x2 /* f0a91ec: 14c1ffe9 */ bne $a2,$at,.L0f0a9194 /* f0a91f0: 00000000 */ sll $zero,$zero,0x0 -/* f0a91f4: 0fc2a660 */ jal func0f0a9980 +/* f0a91f4: 0fc2a660 */ jal currentPlayerGiveUnlimitedAmmo /* f0a91f8: 00002025 */ or $a0,$zero,$zero /* f0a91fc: 10000007 */ beqz $zero,.L0f0a921c /* f0a9200: 00000000 */ sll $zero,$zero,0x0 @@ -21137,7 +21137,7 @@ glabel var7f1acbac /* f0a9208: 24040004 */ addiu $a0,$zero,0x4 /* f0a920c: 10400003 */ beqz $v0,.L0f0a921c /* f0a9210: 00000000 */ sll $zero,$zero,0x0 -/* f0a9214: 0fc2a660 */ jal func0f0a9980 +/* f0a9214: 0fc2a660 */ jal currentPlayerGiveUnlimitedAmmo /* f0a9218: 00002025 */ or $a0,$zero,$zero .L0f0a921c: /* f0a921c: 0fc273e2 */ jal func0f09cf88 @@ -21520,9 +21520,9 @@ glabel currentPlayerGiveAmmo /* f0a9714: 00127080 */ sll $t6,$s2,0x2 /* f0a9718: 01d27023 */ subu $t6,$t6,$s2 /* f0a971c: 000e7080 */ sll $t6,$t6,0x2 -/* f0a9720: 3c0f8007 */ lui $t7,%hi(var80070368) +/* f0a9720: 3c0f8007 */ lui $t7,%hi(g_AmmoTypes) /* f0a9724: 01ee7821 */ addu $t7,$t7,$t6 -/* f0a9728: 8def0368 */ lw $t7,%lo(var80070368)($t7) +/* f0a9728: 8def0368 */ lw $t7,%lo(g_AmmoTypes)($t7) /* f0a972c: 8fa4003c */ lw $a0,0x3c($sp) /* f0a9730: 00124080 */ sll $t0,$s2,0x2 /* f0a9734: 01e31023 */ subu $v0,$t7,$v1 @@ -21663,10 +21663,10 @@ glabel ammotypeGetMaxCapacity /* f0a98f4: 00047080 */ sll $t6,$a0,0x2 /* f0a98f8: 01c47023 */ subu $t6,$t6,$a0 /* f0a98fc: 000e7080 */ sll $t6,$t6,0x2 -/* f0a9900: 3c028007 */ lui $v0,%hi(var80070368) +/* f0a9900: 3c028007 */ lui $v0,%hi(g_AmmoTypes) /* f0a9904: 004e1021 */ addu $v0,$v0,$t6 /* f0a9908: 03e00008 */ jr $ra -/* f0a990c: 8c420368 */ lw $v0,%lo(var80070368)($v0) +/* f0a990c: 8c420368 */ lw $v0,%lo(g_AmmoTypes)($v0) ); bool ammotypeAllowsUnlimitedAmmo(u32 ammotype) @@ -21699,49 +21699,22 @@ bool ammotypeAllowsUnlimitedAmmo(u32 ammotype) return true; } -GLOBAL_ASM( -glabel func0f0a9980 -/* f0a9980: 27bdffd0 */ addiu $sp,$sp,-48 -/* f0a9984: afb20020 */ sw $s2,0x20($sp) -/* f0a9988: afb40028 */ sw $s4,0x28($sp) -/* f0a998c: afb30024 */ sw $s3,0x24($sp) -/* f0a9990: afb1001c */ sw $s1,0x1c($sp) -/* f0a9994: afb00018 */ sw $s0,0x18($sp) -/* f0a9998: 3c128007 */ lui $s2,%hi(var80070368) -/* f0a999c: 00808825 */ or $s1,$a0,$zero -/* f0a99a0: afbf002c */ sw $ra,0x2c($sp) -/* f0a99a4: 26520368 */ addiu $s2,$s2,%lo(var80070368) -/* f0a99a8: 00008025 */ or $s0,$zero,$zero -/* f0a99ac: 2413000c */ addiu $s3,$zero,0xc -/* f0a99b0: 24140021 */ addiu $s4,$zero,0x21 -.L0f0a99b4: -/* f0a99b4: 16200004 */ bnez $s1,.L0f0a99c8 -/* f0a99b8: 24030001 */ addiu $v1,$zero,0x1 -/* f0a99bc: 0fc2a644 */ jal ammotypeAllowsUnlimitedAmmo -/* f0a99c0: 02002025 */ or $a0,$s0,$zero -/* f0a99c4: 00401825 */ or $v1,$v0,$zero -.L0f0a99c8: -/* f0a99c8: 50600008 */ beqzl $v1,.L0f0a99ec -/* f0a99cc: 26100001 */ addiu $s0,$s0,0x1 -/* f0a99d0: 02130019 */ multu $s0,$s3 -/* f0a99d4: 02002025 */ or $a0,$s0,$zero -/* f0a99d8: 00007012 */ mflo $t6 -/* f0a99dc: 024e7821 */ addu $t7,$s2,$t6 -/* f0a99e0: 0fc2a58a */ jal currentPlayerGiveAmmo -/* f0a99e4: 8de50000 */ lw $a1,0x0($t7) -/* f0a99e8: 26100001 */ addiu $s0,$s0,0x1 -.L0f0a99ec: -/* f0a99ec: 1614fff1 */ bne $s0,$s4,.L0f0a99b4 -/* f0a99f0: 00000000 */ sll $zero,$zero,0x0 -/* f0a99f4: 8fbf002c */ lw $ra,0x2c($sp) -/* f0a99f8: 8fb00018 */ lw $s0,0x18($sp) -/* f0a99fc: 8fb1001c */ lw $s1,0x1c($sp) -/* f0a9a00: 8fb20020 */ lw $s2,0x20($sp) -/* f0a9a04: 8fb30024 */ lw $s3,0x24($sp) -/* f0a9a08: 8fb40028 */ lw $s4,0x28($sp) -/* f0a9a0c: 03e00008 */ jr $ra -/* f0a9a10: 27bd0030 */ addiu $sp,$sp,0x30 -); +void currentPlayerGiveUnlimitedAmmo(bool force) +{ + s32 i; + + for (i = 0; i < ARRAYCOUNT(g_AmmoTypes); i++) { + bool give = true; + + if (!force) { + give = ammotypeAllowsUnlimitedAmmo(i); + } + + if (give) { + currentPlayerGiveAmmo(i, g_AmmoTypes[i].capacity); + } + } +} u32 weaponGetAmmoType(u32 weaponnum, u32 func) { @@ -21801,13 +21774,13 @@ glabel func0f0a9b10 /* f0a9b38: 10600009 */ beqz $v1,.L0f0a9b60 /* f0a9b3c: 00000000 */ sll $zero,$zero,0x0 /* f0a9b40: 8c790000 */ lw $t9,0x0($v1) -/* f0a9b44: 3c028007 */ lui $v0,%hi(var80070368) +/* f0a9b44: 3c028007 */ lui $v0,%hi(g_AmmoTypes) /* f0a9b48: 00194080 */ sll $t0,$t9,0x2 /* f0a9b4c: 01194023 */ subu $t0,$t0,$t9 /* f0a9b50: 00084080 */ sll $t0,$t0,0x2 /* f0a9b54: 00481021 */ addu $v0,$v0,$t0 /* f0a9b58: 10000001 */ beqz $zero,.L0f0a9b60 -/* f0a9b5c: 8c420368 */ lw $v0,%lo(var80070368)($v0) +/* f0a9b5c: 8c420368 */ lw $v0,%lo(g_AmmoTypes)($v0) .L0f0a9b60: /* f0a9b60: 03e00008 */ jr $ra /* f0a9b64: 27bd0018 */ addiu $sp,$sp,0x18 @@ -23765,13 +23738,13 @@ glabel func0f0aa86c .L0f0ab788: /* f0ab788: 8fb900a4 */ lw $t9,0xa4($sp) .L0f0ab78c: -/* f0ab78c: 3c0b8007 */ lui $t3,%hi(var80070368) +/* f0ab78c: 3c0b8007 */ lui $t3,%hi(g_AmmoTypes) /* f0ab790: 8faf00fc */ lw $t7,0xfc($sp) /* f0ab794: 00197080 */ sll $t6,$t9,0x2 /* f0ab798: 01d97023 */ subu $t6,$t6,$t9 /* f0ab79c: 000e7080 */ sll $t6,$t6,0x2 /* f0ab7a0: 016e5821 */ addu $t3,$t3,$t6 -/* f0ab7a4: 8d6b0368 */ lw $t3,%lo(var80070368)($t3) +/* f0ab7a4: 8d6b0368 */ lw $t3,%lo(g_AmmoTypes)($t3) /* f0ab7a8: 01e9c021 */ addu $t8,$t7,$t1 /* f0ab7ac: 5960003e */ blezl $t3,.L0f0ab8a8 /* f0ab7b0: 8faf005c */ lw $t7,0x5c($sp) diff --git a/src/game/game_0b63b0.c b/src/game/game_0b63b0.c index 070c3369e..b50a29e27 100644 --- a/src/game/game_0b63b0.c +++ b/src/game/game_0b63b0.c @@ -2437,7 +2437,7 @@ glabel func0f0b7c60 /* f0b7e20: 24040001 */ addiu $a0,$zero,0x1 /* f0b7e24: a702024c */ sh $v0,0x24c($t8) /* f0b7e28: 8c790284 */ lw $t9,0x284($v1) -/* f0b7e2c: 0fc2a660 */ jal func0f0a9980 +/* f0b7e2c: 0fc2a660 */ jal currentPlayerGiveUnlimitedAmmo /* f0b7e30: a722024e */ sh $v0,0x24e($t9) /* f0b7e34: 0fc08169 */ jal chrGetMaxDamage /* f0b7e38: 02002025 */ or $a0,$s0,$zero diff --git a/src/include/game/data/data_0160b0.h b/src/include/game/data/data_0160b0.h index 9d29d0e0e..b54616842 100644 --- a/src/include/game/data/data_0160b0.h +++ b/src/include/game/data/data_0160b0.h @@ -34,7 +34,7 @@ extern u32 var800702ec; extern u32 var80070314; extern u32 var80070318; extern u32 var80070360; -extern u32 var80070368; +extern struct ammotype g_AmmoTypes[33]; extern u32 var80070500; extern u32 var8007050c; extern u32 var80070518; diff --git a/src/include/game/game_097ba0.h b/src/include/game/game_097ba0.h index 4d1b0daea..54a526cff 100644 --- a/src/include/game/game_097ba0.h +++ b/src/include/game/game_097ba0.h @@ -156,7 +156,7 @@ s32 ammoGetQuantity(u32 type); s32 currentPlayerGetAmmoCount(s8 arg0); s32 ammotypeGetMaxCapacity(u32 ammotype); bool ammotypeAllowsUnlimitedAmmo(u32 ammotype); -u32 func0f0a9980(void); +void currentPlayerGiveUnlimitedAmmo(bool force); u32 weaponGetAmmoType(u32 weaponnum, u32 func); u32 currentPlayerGetAmmoQuantityForWeapon(u32 weaponnum, u32 func); void currentPlayerGiveAmmoForWeapon(u32 weaponnum, u32 func, u32 quantity); diff --git a/src/include/types.h b/src/include/types.h index 130ddc5d3..a91229f9d 100644 --- a/src/include/types.h +++ b/src/include/types.h @@ -5780,4 +5780,10 @@ struct menudata { /*0x66f*/ u8 unk66f; }; +struct ammotype { + u32 capacity; + u32 unk04; + f32 unk08; +}; + #endif