From 9f5baf022f1b320add4d5b22076be698989cb119 Mon Sep 17 00:00:00 2001 From: Ryan Dwyer Date: Mon, 20 Jan 2020 18:17:52 +1000 Subject: [PATCH] Decompile mpIsPresetUnlocked --- src/game/game_187770.c | 59 +++++++++------------------------- src/include/game/game_187770.h | 2 +- src/include/types.h | 5 +-- src/setup/setup_020df0.c | 28 ++++++++-------- 4 files changed, 32 insertions(+), 62 deletions(-) diff --git a/src/game/game_187770.c b/src/game/game_187770.c index b826386c9..aef3cfc97 100644 --- a/src/game/game_187770.c +++ b/src/game/game_187770.c @@ -7424,46 +7424,19 @@ u32 mpGetNumPresets(void) return NUM_MPPRESETS; } -GLOBAL_ASM( -glabel func0f18db84 -/* f18db84: 27bdffd8 */ addiu $sp,$sp,-40 -/* f18db88: 00047080 */ sll $t6,$a0,0x2 -/* f18db8c: 01c47023 */ subu $t6,$t6,$a0 -/* f18db90: 3c0f8008 */ lui $t7,%hi(g_MpPresets) -/* f18db94: afb30020 */ sw $s3,0x20($sp) -/* f18db98: afb2001c */ sw $s2,0x1c($sp) -/* f18db9c: afb10018 */ sw $s1,0x18($sp) -/* f18dba0: afb00014 */ sw $s0,0x14($sp) -/* f18dba4: 25ef7b6c */ addiu $t7,$t7,%lo(g_MpPresets) -/* f18dba8: 000e70c0 */ sll $t6,$t6,0x3 -/* f18dbac: afbf0024 */ sw $ra,0x24($sp) -/* f18dbb0: 01cf8021 */ addu $s0,$t6,$t7 -/* f18dbb4: 00008825 */ or $s1,$zero,$zero -/* f18dbb8: 24120016 */ addiu $s2,$zero,0x16 -/* f18dbbc: 24130010 */ addiu $s3,$zero,0x10 -.L0f18dbc0: -/* f18dbc0: 0fc67244 */ jal mpIsChallengeComplete -/* f18dbc4: 92040008 */ lbu $a0,0x8($s0) -/* f18dbc8: 14400006 */ bnez $v0,.L0f18dbe4 -/* f18dbcc: 26310001 */ addiu $s1,$s1,0x1 -/* f18dbd0: 92180008 */ lbu $t8,0x8($s0) -/* f18dbd4: 12580003 */ beq $s2,$t8,.L0f18dbe4 -/* f18dbd8: 00000000 */ sll $zero,$zero,0x0 -/* f18dbdc: 10000004 */ beqz $zero,.L0f18dbf0 -/* f18dbe0: 00001025 */ or $v0,$zero,$zero -.L0f18dbe4: -/* f18dbe4: 1633fff6 */ bne $s1,$s3,.L0f18dbc0 -/* f18dbe8: 26100001 */ addiu $s0,$s0,0x1 -/* f18dbec: 24020001 */ addiu $v0,$zero,0x1 -.L0f18dbf0: -/* f18dbf0: 8fbf0024 */ lw $ra,0x24($sp) -/* f18dbf4: 8fb00014 */ lw $s0,0x14($sp) -/* f18dbf8: 8fb10018 */ lw $s1,0x18($sp) -/* f18dbfc: 8fb2001c */ lw $s2,0x1c($sp) -/* f18dc00: 8fb30020 */ lw $s3,0x20($sp) -/* f18dc04: 03e00008 */ jr $ra -/* f18dc08: 27bd0028 */ addiu $sp,$sp,0x28 -); +bool mpIsPresetUnlocked(s32 presetnum) +{ + s32 i; + + for (i = 0; i != 16; i++) { + if (!mpIsChallengeComplete(g_MpPresets[presetnum].challenges[i]) && + g_MpPresets[presetnum].challenges[i] != 22) { + return false; + } + } + + return true; +} GLOBAL_ASM( glabel func0f18dc0c @@ -7476,7 +7449,7 @@ glabel func0f18dc0c /* f18dc24: 00008025 */ or $s0,$zero,$zero /* f18dc28: 2412000e */ addiu $s2,$zero,0xe .L0f18dc2c: -/* f18dc2c: 0fc636e1 */ jal func0f18db84 +/* f18dc2c: 0fc636e1 */ jal mpIsPresetUnlocked /* f18dc30: 02002025 */ or $a0,$s0,$zero /* f18dc34: 10400002 */ beqz $v0,.L0f18dc40 /* f18dc38: 26100001 */ addiu $s0,$s0,0x1 @@ -7504,7 +7477,7 @@ glabel func0f18dc64 /* f18dc7c: 00008025 */ or $s0,$zero,$zero /* f18dc80: 2412000e */ addiu $s2,$zero,0xe .L0f18dc84: -/* f18dc84: 0fc636e1 */ jal func0f18db84 +/* f18dc84: 0fc636e1 */ jal mpIsPresetUnlocked /* f18dc88: 02002025 */ or $a0,$s0,$zero /* f18dc8c: 5040000d */ beqzl $v0,.L0f18dcc4 /* f18dc90: 26100001 */ addiu $s0,$s0,0x1 @@ -7677,7 +7650,7 @@ glabel func0f18dec4 /* f18dee0: 00008025 */ or $s0,$zero,$zero /* f18dee4: 2412000e */ addiu $s2,$zero,0xe .L0f18dee8: -/* f18dee8: 0fc636e1 */ jal func0f18db84 +/* f18dee8: 0fc636e1 */ jal mpIsPresetUnlocked /* f18deec: 02002025 */ or $a0,$s0,$zero /* f18def0: 5040000c */ beqzl $v0,.L0f18df24 /* f18def4: 26100001 */ addiu $s0,$s0,0x1 diff --git a/src/include/game/game_187770.h b/src/include/game/game_187770.h index 0db4d10c0..291a08ad4 100644 --- a/src/include/game/game_187770.h +++ b/src/include/game/game_187770.h @@ -104,7 +104,7 @@ u32 func0f18d9a4(void); u32 func0f18d9fc(void); u32 func0f18dac0(void); u32 mpGetNumPresets(void); -u32 func0f18db84(void); +bool mpIsPresetUnlocked(s32 presetnum); u32 func0f18dc0c(void); u32 func0f18dc64(void); u32 func0f18dcec(void); diff --git a/src/include/types.h b/src/include/types.h index 8fbf5a406..124ef3662 100644 --- a/src/include/types.h +++ b/src/include/types.h @@ -4684,10 +4684,7 @@ struct criteria_holograph { struct mppreset { u16 name; u32 unk04; - u32 unk08; - u32 unk0c; - u32 unk10; - u32 unk14; + u8 challenges[16]; }; #endif diff --git a/src/setup/setup_020df0.c b/src/setup/setup_020df0.c index 2cb97f91f..95d02ae34 100644 --- a/src/setup/setup_020df0.c +++ b/src/setup/setup_020df0.c @@ -12220,20 +12220,20 @@ struct mptrack g_MpTracks[NUM_MPTRACKS] = { // 2db8c struct mppreset g_MpPresets[NUM_MPPRESETS] = { - { 0x5419, 0x07, 0, 0, 0, 0 }, // "No Shield" - { 0x541a, 0x0c, 0, 0, 0, 0 }, // "Automatics" - { 0x541b, 0x0d, 0, 0, 0, 0 }, // "Rocket Launcher" - { 0x541c, 0x0b, 0, 0, 0, 0 }, // "Simulants" - { 0x541d, 0x09, 0, 0, 0, 0 }, // "King of the Hill" - { 0x541e, 0x02, 0, 0, 0, 0 }, // "Complex FarSight" - { 0x541f, 0x08, 0, 0, 0, 0 }, // "Hold the Briefcase" - { 0x5420, 0x01, 0, 0, 0, 0 }, // "Pistol One-Hit Kills" - { 0x5421, 0x0a, 0, 0, 0, 0 }, // "Capture the Case" - { 0x5422, 0x05, 0, 0, 0, 0 }, // "Cloaking" - { 0x5423, 0x00, 0, 0, 0, 0 }, // "Temple Explosives" - { 0x5424, 0x04, 0, 0, 0, 0 }, // "Slayer" - { 0x5425, 0x03, 0, 0, 0, 0 }, // "Tranquilizr" - { 0x5426, 0x06, 0, 0, 0, 0 }, // "Slow Motion" + { 0x5419, 0x07, {0} }, // "No Shield" + { 0x541a, 0x0c, {0} }, // "Automatics" + { 0x541b, 0x0d, {0} }, // "Rocket Launcher" + { 0x541c, 0x0b, {0} }, // "Simulants" + { 0x541d, 0x09, {0} }, // "King of the Hill" + { 0x541e, 0x02, {0} }, // "Complex FarSight" + { 0x541f, 0x08, {0} }, // "Hold the Briefcase" + { 0x5420, 0x01, {0} }, // "Pistol One-Hit Kills" + { 0x5421, 0x0a, {0} }, // "Capture the Case" + { 0x5422, 0x05, {0} }, // "Cloaking" + { 0x5423, 0x00, {0} }, // "Temple Explosives" + { 0x5424, 0x04, {0} }, // "Slayer" + { 0x5425, 0x03, {0} }, // "Tranquilizr" + { 0x5426, 0x06, {0} }, // "Slow Motion" }; u32 var80087cbc = 0x00000000;