From dbd3fef96abf9224507034793c20ee8b470dc89d Mon Sep 17 00:00:00 2001 From: Ryan Dwyer Date: Sat, 28 Dec 2019 12:56:15 +1000 Subject: [PATCH] Decompile cheatActivate --- src/game/cheats.c | 275 +++++---------------------------- src/game/game_111600.c | 2 +- src/include/game/game_111600.h | 2 +- src/include/types.h | 3 +- 4 files changed, 43 insertions(+), 239 deletions(-) diff --git a/src/game/cheats.c b/src/game/cheats.c index e2e27260e..89c29ba66 100644 --- a/src/game/cheats.c +++ b/src/game/cheats.c @@ -148,241 +148,44 @@ bool cheatIsActive(s32 cheat_id) return g_CheatsActiveBank1 & (1 << cheat_id); } -GLOBAL_ASM( -glabel cheatActivate -/* f106ea0: 27bdffd8 */ addiu $sp,$sp,-40 -/* f106ea4: 24010002 */ addiu $at,$zero,0x2 -/* f106ea8: afbf001c */ sw $ra,0x1c($sp) -/* f106eac: afb10018 */ sw $s1,0x18($sp) -/* f106eb0: afb00014 */ sw $s0,0x14($sp) -/* f106eb4: 10810006 */ beq $a0,$at,.L0f106ed0 -/* f106eb8: afa40028 */ sw $a0,0x28($sp) -/* f106ebc: 24010003 */ addiu $at,$zero,0x3 -/* f106ec0: 1081004a */ beq $a0,$at,.L0f106fec -/* f106ec4: 3c11800a */ lui $s1,%hi(g_Vars) -/* f106ec8: 100000a6 */ beqz $zero,.L0f107164 -/* f106ecc: 8faf0028 */ lw $t7,0x28($sp) -.L0f106ed0: -/* f106ed0: 3c11800a */ lui $s1,%hi(g_Vars) -/* f106ed4: 26319fc0 */ addiu $s1,$s1,%lo(g_Vars) -/* f106ed8: 8e38006c */ lw $t8,0x6c($s1) -/* f106edc: 8e2f028c */ lw $t7,0x28c($s1) -/* f106ee0: 00008025 */ or $s0,$zero,$zero -/* f106ee4: 13000003 */ beqz $t8,.L0f106ef4 -/* f106ee8: afaf0024 */ sw $t7,0x24($sp) -/* f106eec: 10000002 */ beqz $zero,.L0f106ef8 -/* f106ef0: 24050001 */ addiu $a1,$zero,0x1 -.L0f106ef4: -/* f106ef4: 00002825 */ or $a1,$zero,$zero -.L0f106ef8: -/* f106ef8: 8e390068 */ lw $t9,0x68($s1) -/* f106efc: 00002025 */ or $a0,$zero,$zero -/* f106f00: 00001825 */ or $v1,$zero,$zero -/* f106f04: 13200003 */ beqz $t9,.L0f106f14 -/* f106f08: 00001025 */ or $v0,$zero,$zero -/* f106f0c: 10000001 */ beqz $zero,.L0f106f14 -/* f106f10: 24040001 */ addiu $a0,$zero,0x1 -.L0f106f14: -/* f106f14: 8e2a0064 */ lw $t2,0x64($s1) -/* f106f18: 11400003 */ beqz $t2,.L0f106f28 -/* f106f1c: 00000000 */ sll $zero,$zero,0x0 -/* f106f20: 10000001 */ beqz $zero,.L0f106f28 -/* f106f24: 24030001 */ addiu $v1,$zero,0x1 -.L0f106f28: -/* f106f28: 8e2b0070 */ lw $t3,0x70($s1) -/* f106f2c: 11600003 */ beqz $t3,.L0f106f3c -/* f106f30: 00000000 */ sll $zero,$zero,0x0 -/* f106f34: 10000001 */ beqz $zero,.L0f106f3c -/* f106f38: 24020001 */ addiu $v0,$zero,0x1 -.L0f106f3c: -/* f106f3c: 00436021 */ addu $t4,$v0,$v1 -/* f106f40: 01846821 */ addu $t5,$t4,$a0 -/* f106f44: 01a57021 */ addu $t6,$t5,$a1 -/* f106f48: 19c00024 */ blez $t6,.L0f106fdc -/* f106f4c: 00000000 */ sll $zero,$zero,0x0 -.L0f106f50: -/* f106f50: 0fc4a24b */ jal setCurrentPlayerNum -/* f106f54: 02002025 */ or $a0,$s0,$zero -/* f106f58: 8e380284 */ lw $t8,0x284($s1) -/* f106f5c: 240f0001 */ addiu $t7,$zero,0x1 -/* f106f60: 26100001 */ addiu $s0,$s0,0x1 -/* f106f64: a30f1922 */ sb $t7,0x1922($t8) -/* f106f68: 8e39006c */ lw $t9,0x6c($s1) -/* f106f6c: 00002825 */ or $a1,$zero,$zero -/* f106f70: 00002025 */ or $a0,$zero,$zero -/* f106f74: 13200003 */ beqz $t9,.L0f106f84 -/* f106f78: 00001825 */ or $v1,$zero,$zero -/* f106f7c: 10000001 */ beqz $zero,.L0f106f84 -/* f106f80: 24050001 */ addiu $a1,$zero,0x1 -.L0f106f84: -/* f106f84: 8e2a0068 */ lw $t2,0x68($s1) -/* f106f88: 00001025 */ or $v0,$zero,$zero -/* f106f8c: 11400003 */ beqz $t2,.L0f106f9c -/* f106f90: 00000000 */ sll $zero,$zero,0x0 -/* f106f94: 10000001 */ beqz $zero,.L0f106f9c -/* f106f98: 24040001 */ addiu $a0,$zero,0x1 -.L0f106f9c: -/* f106f9c: 8e2b0064 */ lw $t3,0x64($s1) -/* f106fa0: 11600003 */ beqz $t3,.L0f106fb0 -/* f106fa4: 00000000 */ sll $zero,$zero,0x0 -/* f106fa8: 10000001 */ beqz $zero,.L0f106fb0 -/* f106fac: 24030001 */ addiu $v1,$zero,0x1 -.L0f106fb0: -/* f106fb0: 8e2c0070 */ lw $t4,0x70($s1) -/* f106fb4: 11800003 */ beqz $t4,.L0f106fc4 -/* f106fb8: 00000000 */ sll $zero,$zero,0x0 -/* f106fbc: 10000001 */ beqz $zero,.L0f106fc4 -/* f106fc0: 24020001 */ addiu $v0,$zero,0x1 -.L0f106fc4: -/* f106fc4: 00436821 */ addu $t5,$v0,$v1 -/* f106fc8: 01a47021 */ addu $t6,$t5,$a0 -/* f106fcc: 01c57821 */ addu $t7,$t6,$a1 -/* f106fd0: 020f082a */ slt $at,$s0,$t7 -/* f106fd4: 1420ffde */ bnez $at,.L0f106f50 -/* f106fd8: 00000000 */ sll $zero,$zero,0x0 -.L0f106fdc: -/* f106fdc: 0fc4a24b */ jal setCurrentPlayerNum -/* f106fe0: 8fa40024 */ lw $a0,0x24($sp) -/* f106fe4: 1000005f */ beqz $zero,.L0f107164 -/* f106fe8: 8faf0028 */ lw $t7,0x28($sp) -.L0f106fec: -/* f106fec: 26319fc0 */ addiu $s1,$s1,%lo(g_Vars) -/* f106ff0: 8e26006c */ lw $a2,0x6c($s1) -/* f106ff4: 24010001 */ addiu $at,$zero,0x1 -/* f106ff8: 00002825 */ or $a1,$zero,$zero -/* f106ffc: 10c00003 */ beqz $a2,.L0f10700c -/* f107000: 00002025 */ or $a0,$zero,$zero -/* f107004: 10000001 */ beqz $zero,.L0f10700c -/* f107008: 24050001 */ addiu $a1,$zero,0x1 -.L0f10700c: -/* f10700c: 8e270068 */ lw $a3,0x68($s1) -/* f107010: 00001825 */ or $v1,$zero,$zero -/* f107014: 00001025 */ or $v0,$zero,$zero -/* f107018: 10e00003 */ beqz $a3,.L0f107028 -/* f10701c: 00000000 */ sll $zero,$zero,0x0 -/* f107020: 10000001 */ beqz $zero,.L0f107028 -/* f107024: 24040001 */ addiu $a0,$zero,0x1 -.L0f107028: -/* f107028: 8e280064 */ lw $t0,0x64($s1) -/* f10702c: 11000003 */ beqz $t0,.L0f10703c -/* f107030: 00000000 */ sll $zero,$zero,0x0 -/* f107034: 10000001 */ beqz $zero,.L0f10703c -/* f107038: 24030001 */ addiu $v1,$zero,0x1 -.L0f10703c: -/* f10703c: 8e290070 */ lw $t1,0x70($s1) -/* f107040: 11200003 */ beqz $t1,.L0f107050 -/* f107044: 00000000 */ sll $zero,$zero,0x0 -/* f107048: 10000001 */ beqz $zero,.L0f107050 -/* f10704c: 24020001 */ addiu $v0,$zero,0x1 -.L0f107050: -/* f107050: 0043c021 */ addu $t8,$v0,$v1 -/* f107054: 0304c821 */ addu $t9,$t8,$a0 -/* f107058: 03255021 */ addu $t2,$t9,$a1 -/* f10705c: 55410041 */ bnel $t2,$at,.L0f107164 -/* f107060: 8faf0028 */ lw $t7,0x28($sp) -/* f107064: 8e2b0318 */ lw $t3,0x318($s1) -/* f107068: 5560003e */ bnezl $t3,.L0f107164 -/* f10706c: 8faf0028 */ lw $t7,0x28($sp) -/* f107070: 8e2c028c */ lw $t4,0x28c($s1) -/* f107074: 00008025 */ or $s0,$zero,$zero -/* f107078: 10c00003 */ beqz $a2,.L0f107088 -/* f10707c: afac0024 */ sw $t4,0x24($sp) -/* f107080: 10000002 */ beqz $zero,.L0f10708c -/* f107084: 24050001 */ addiu $a1,$zero,0x1 -.L0f107088: -/* f107088: 00002825 */ or $a1,$zero,$zero -.L0f10708c: -/* f10708c: 10e00003 */ beqz $a3,.L0f10709c -/* f107090: 00002025 */ or $a0,$zero,$zero -/* f107094: 10000001 */ beqz $zero,.L0f10709c -/* f107098: 24040001 */ addiu $a0,$zero,0x1 -.L0f10709c: -/* f10709c: 11000003 */ beqz $t0,.L0f1070ac -/* f1070a0: 00001825 */ or $v1,$zero,$zero -/* f1070a4: 10000001 */ beqz $zero,.L0f1070ac -/* f1070a8: 24030001 */ addiu $v1,$zero,0x1 -.L0f1070ac: -/* f1070ac: 11200003 */ beqz $t1,.L0f1070bc -/* f1070b0: 00001025 */ or $v0,$zero,$zero -/* f1070b4: 10000001 */ beqz $zero,.L0f1070bc -/* f1070b8: 24020001 */ addiu $v0,$zero,0x1 -.L0f1070bc: -/* f1070bc: 00436821 */ addu $t5,$v0,$v1 -/* f1070c0: 01a47021 */ addu $t6,$t5,$a0 -/* f1070c4: 01c57821 */ addu $t7,$t6,$a1 -/* f1070c8: 19e00023 */ blez $t7,.L0f107158 -/* f1070cc: 00000000 */ sll $zero,$zero,0x0 -.L0f1070d0: -/* f1070d0: 0fc4a24b */ jal setCurrentPlayerNum -/* f1070d4: 02002025 */ or $a0,$s0,$zero -/* f1070d8: 0fc44660 */ jal func0f111980 -/* f1070dc: 24040001 */ addiu $a0,$zero,0x1 -/* f1070e0: 8e38006c */ lw $t8,0x6c($s1) -/* f1070e4: 26100001 */ addiu $s0,$s0,0x1 -/* f1070e8: 00002825 */ or $a1,$zero,$zero -/* f1070ec: 13000003 */ beqz $t8,.L0f1070fc -/* f1070f0: 00002025 */ or $a0,$zero,$zero -/* f1070f4: 10000001 */ beqz $zero,.L0f1070fc -/* f1070f8: 24050001 */ addiu $a1,$zero,0x1 -.L0f1070fc: -/* f1070fc: 8e390068 */ lw $t9,0x68($s1) -/* f107100: 00001825 */ or $v1,$zero,$zero -/* f107104: 00001025 */ or $v0,$zero,$zero -/* f107108: 13200003 */ beqz $t9,.L0f107118 -/* f10710c: 00000000 */ sll $zero,$zero,0x0 -/* f107110: 10000001 */ beqz $zero,.L0f107118 -/* f107114: 24040001 */ addiu $a0,$zero,0x1 -.L0f107118: -/* f107118: 8e2a0064 */ lw $t2,0x64($s1) -/* f10711c: 11400003 */ beqz $t2,.L0f10712c -/* f107120: 00000000 */ sll $zero,$zero,0x0 -/* f107124: 10000001 */ beqz $zero,.L0f10712c -/* f107128: 24030001 */ addiu $v1,$zero,0x1 -.L0f10712c: -/* f10712c: 8e2b0070 */ lw $t3,0x70($s1) -/* f107130: 11600003 */ beqz $t3,.L0f107140 -/* f107134: 00000000 */ sll $zero,$zero,0x0 -/* f107138: 10000001 */ beqz $zero,.L0f107140 -/* f10713c: 24020001 */ addiu $v0,$zero,0x1 -.L0f107140: -/* f107140: 00436021 */ addu $t4,$v0,$v1 -/* f107144: 01846821 */ addu $t5,$t4,$a0 -/* f107148: 01a57021 */ addu $t6,$t5,$a1 -/* f10714c: 020e082a */ slt $at,$s0,$t6 -/* f107150: 1420ffdf */ bnez $at,.L0f1070d0 -/* f107154: 00000000 */ sll $zero,$zero,0x0 -.L0f107158: -/* f107158: 0fc4a24b */ jal setCurrentPlayerNum -/* f10715c: 8fa40024 */ lw $a0,0x24($sp) -/* f107160: 8faf0028 */ lw $t7,0x28($sp) -.L0f107164: -/* f107164: 3c02800a */ lui $v0,%hi(g_CheatsActiveBank0) -/* f107168: 244221d0 */ addiu $v0,$v0,%lo(g_CheatsActiveBank0) -/* f10716c: 29e10020 */ slti $at,$t7,0x20 -/* f107170: 10200007 */ beqz $at,.L0f107190 -/* f107174: 00000000 */ sll $zero,$zero,0x0 -/* f107178: 8c4a0000 */ lw $t2,0x0($v0) -/* f10717c: 24180001 */ addiu $t8,$zero,0x1 -/* f107180: 01f8c804 */ sllv $t9,$t8,$t7 -/* f107184: 032a5825 */ or $t3,$t9,$t2 -/* f107188: 10000009 */ beqz $zero,.L0f1071b0 -/* f10718c: ac4b0000 */ sw $t3,0x0($v0) -.L0f107190: -/* f107190: 3c02800a */ lui $v0,%hi(g_CheatsActiveBank1) -/* f107194: 8fac0028 */ lw $t4,0x28($sp) -/* f107198: 244221d4 */ addiu $v0,$v0,%lo(g_CheatsActiveBank1) -/* f10719c: 8c580000 */ lw $t8,0x0($v0) -/* f1071a0: 240d0001 */ addiu $t5,$zero,0x1 -/* f1071a4: 018d7004 */ sllv $t6,$t5,$t4 -/* f1071a8: 01d87825 */ or $t7,$t6,$t8 -/* f1071ac: ac4f0000 */ sw $t7,0x0($v0) -.L0f1071b0: -/* f1071b0: 8fbf001c */ lw $ra,0x1c($sp) -/* f1071b4: 8fb00014 */ lw $s0,0x14($sp) -/* f1071b8: 8fb10018 */ lw $s1,0x18($sp) -/* f1071bc: 03e00008 */ jr $ra -/* f1071c0: 27bd0028 */ addiu $sp,$sp,0x28 -); +void cheatActivate(s32 cheat_id) +{ + u32 prevplayernum; + s32 playernum; + + switch (cheat_id) { + case CHEAT_INVINCIBLE: + // Make all players invincible + prevplayernum = g_Vars.currentplayernum; + + for (playernum = 0; playernum < (g_Vars.players[0] ? 1 : 0) + (g_Vars.players[1] ? 1 : 0) + (g_Vars.players[2] ? 1 : 0) + (g_Vars.players[3] ? 1 : 0); playernum++) { + setCurrentPlayerNum(playernum); + g_Vars.currentplayer->invincible = 1; + } + + setCurrentPlayerNum(prevplayernum); + break; + case CHEAT_ALLGUNS: + // Give all guns if only one player playing + if ((g_Vars.players[0] ? 1 : 0) + (g_Vars.players[1] ? 1 : 0) + (g_Vars.players[2] ? 1 : 0) + (g_Vars.players[3] ? 1 : 0) == 1 && g_Vars.unk000318 == 0) { + prevplayernum = g_Vars.currentplayernum; + + for (playernum = 0; playernum < (g_Vars.players[0] ? 1 : 0) + (g_Vars.players[1] ? 1 : 0) + (g_Vars.players[2] ? 1 : 0) + (g_Vars.players[3] ? 1 : 0); playernum++) { + setCurrentPlayerNum(playernum); + currentPlayerGiveAllGuns(1); + } + + setCurrentPlayerNum(prevplayernum); + } + break; + } + + if (cheat_id < 32) { + g_CheatsActiveBank0 = g_CheatsActiveBank0 | (1 << cheat_id); + } else { + g_CheatsActiveBank1 = g_CheatsActiveBank1 | (1 << cheat_id); + } +} GLOBAL_ASM( glabel cheatDeactivate @@ -551,7 +354,7 @@ glabel cheatDeactivate .L0f1073f4: /* f1073f4: 0fc4a24b */ jal setCurrentPlayerNum /* f1073f8: 02002025 */ or $a0,$s0,$zero -/* f1073fc: 0fc44660 */ jal func0f111980 +/* f1073fc: 0fc44660 */ jal currentPlayerGiveAllGuns /* f107400: 00002025 */ or $a0,$zero,$zero /* f107404: 8e38006c */ lw $t8,0x6c($s1) /* f107408: 26100001 */ addiu $s0,$s0,0x1 diff --git a/src/game/game_111600.c b/src/game/game_111600.c index 13ec2c5b2..df512ef01 100644 --- a/src/game/game_111600.c +++ b/src/game/game_111600.c @@ -285,7 +285,7 @@ glabel func0f111928 ); GLOBAL_ASM( -glabel func0f111980 +glabel currentPlayerGiveAllGuns /* f111980: 3c0e800a */ lui $t6,0x800a /* f111984: 8dcea244 */ lw $t6,-0x5dbc($t6) /* f111988: 27bdffe8 */ addiu $sp,$sp,-24 diff --git a/src/include/game/game_111600.h b/src/include/game/game_111600.h index c3c5dbd7e..1d11c5122 100644 --- a/src/include/game/game_111600.h +++ b/src/include/game/game_111600.h @@ -8,7 +8,7 @@ u32 func0f11165c(void); u32 func0f11179c(void); u32 func0f1118cc(void); u32 func0f111928(void); -u32 func0f111980(void); +void currentPlayerGiveAllGuns(s32 arg0); u32 func0f1119d0(void); u32 func0f111a28(void); u32 func0f111a4c(void); diff --git a/src/include/types.h b/src/include/types.h index 711dd085b..0ee5be424 100644 --- a/src/include/types.h +++ b/src/include/types.h @@ -2298,7 +2298,8 @@ struct player { /*0x1914*/ u32 unk1914; /*0x1918*/ u32 unk1918; /*0x191c*/ u32 unk191c; - /*0x1920*/ u32 unk1920; + /*0x1920*/ u16 unk1920; + /*0x1922*/ u8 invincible; /*0x1924*/ u32 unk1924; /*0x1928*/ u32 unk1928; /*0x192c*/ u32 unk192c;