diff --git a/src/game/game_0b28d0.c b/src/game/game_0b28d0.c index 05f3ae776..bc762c9bf 100644 --- a/src/game/game_0b28d0.c +++ b/src/game/game_0b28d0.c @@ -12945,7 +12945,7 @@ glabel func0f0bd904 /* f0bdc58: 0fc31ed9 */ jal func0f0c7b64 /* f0bdc5c: 00402025 */ or $a0,$v0,$zero /* f0bdc60: 8e6d0288 */ lw $t5,0x288($s3) -/* f0bdc64: 0fc549f2 */ jal func0f1527c8 +/* f0bdc64: 0fc549f2 */ jal optionsGetLookAhead /* f0bdc68: 8da40070 */ lw $a0,0x70($t5) /* f0bdc6c: 0fc31e80 */ jal func0f0c7a00 /* f0bdc70: 00402025 */ or $a0,$v0,$zero diff --git a/src/game/game_102240.c b/src/game/game_102240.c index c340d9451..7d1dc18df 100644 --- a/src/game/game_102240.c +++ b/src/game/game_102240.c @@ -740,49 +740,26 @@ glabel menuhandlerScreenSplit /* f102a3c: 00000000 */ sll $zero,$zero,0x0 ); -GLOBAL_ASM( -glabel menuhandlerLookAhead -/* f102a40: 3c02800a */ lui $v0,%hi(g_Vars) -/* f102a44: 24429fc0 */ addiu $v0,$v0,%lo(g_Vars) -/* f102a48: 8c4e0298 */ lw $t6,0x298($v0) -/* f102a4c: 27bdffe8 */ addiu $sp,$sp,-24 -/* f102a50: afbf0014 */ sw $ra,0x14($sp) -/* f102a54: 05c10004 */ bgez $t6,.L0f102a68 -/* f102a58: 00803825 */ or $a3,$a0,$zero -/* f102a5c: 8c4f029c */ lw $t7,0x29c($v0) -/* f102a60: 05e20005 */ bltzl $t7,.L0f102a78 -/* f102a64: 8ca4000c */ lw $a0,0xc($a1) -.L0f102a68: -/* f102a68: 8c580288 */ lw $t8,0x288($v0) -/* f102a6c: 10000002 */ beqz $zero,.L0f102a78 -/* f102a70: 8f040070 */ lw $a0,0x70($t8) -/* f102a74: 8ca4000c */ lw $a0,0xc($a1) -.L0f102a78: -/* f102a78: 24010006 */ addiu $at,$zero,0x6 -/* f102a7c: 10e10007 */ beq $a3,$at,.L0f102a9c -/* f102a80: 24010008 */ addiu $at,$zero,0x8 -/* f102a84: 54e1000d */ bnel $a3,$at,.L0f102abc -/* f102a88: 00001025 */ or $v0,$zero,$zero -/* f102a8c: 0fc549f2 */ jal func0f1527c8 -/* f102a90: 00000000 */ sll $zero,$zero,0x0 -/* f102a94: 1000000a */ beqz $zero,.L0f102ac0 -/* f102a98: 8fbf0014 */ lw $ra,0x14($sp) -.L0f102a9c: -/* f102a9c: 0fc54a7e */ jal func0f1529f8 -/* f102aa0: 8cc50000 */ lw $a1,0x0($a2) -/* f102aa4: 3c02800a */ lui $v0,%hi(g_Vars) -/* f102aa8: 24429fc0 */ addiu $v0,$v0,%lo(g_Vars) -/* f102aac: 8c590458 */ lw $t9,0x458($v0) -/* f102ab0: 37280001 */ ori $t0,$t9,0x1 -/* f102ab4: ac480458 */ sw $t0,0x458($v0) -/* f102ab8: 00001025 */ or $v0,$zero,$zero -.L0f102abc: -/* f102abc: 8fbf0014 */ lw $ra,0x14($sp) -.L0f102ac0: -/* f102ac0: 27bd0018 */ addiu $sp,$sp,0x18 -/* f102ac4: 03e00008 */ jr $ra -/* f102ac8: 00000000 */ sll $zero,$zero,0x0 -); +s32 menuhandlerLookAhead(u32 operation, struct menu_item *item, bool *enable) +{ + u32 optionsindex; + + if (g_Vars.coopplayernum >= 0 || g_Vars.antiplayernum >= 0) { + optionsindex = g_Vars.unk000288->optionsindex; + } else { + optionsindex = item->right; + } + + switch (operation) { + case MENUOP_GET: + return optionsGetLookAhead(optionsindex); + case MENUOP_SET: + optionsSetLookAhead(optionsindex, *enable); + g_Vars.unk000458 |= 1; + } + + return 0; +} s32 menuhandlerHeadRoll(u32 operation, struct menu_item *item, bool *enable) { diff --git a/src/game/game_10ccd0.c b/src/game/game_10ccd0.c index 887f24de0..bcc463ffd 100644 --- a/src/game/game_10ccd0.c +++ b/src/game/game_10ccd0.c @@ -2807,7 +2807,7 @@ glabel func0f10f204 /* f10f2c8: 0fc47961 */ jal func0f11e584 /* f10f2cc: 02002825 */ or $a1,$s0,$zero /* f10f2d0: 8fa40024 */ lw $a0,0x24($sp) -/* f10f2d4: 0fc54a7e */ jal func0f1529f8 +/* f10f2d4: 0fc54a7e */ jal optionsSetLookAhead /* f10f2d8: 00402825 */ or $a1,$v0,$zero /* f10f2dc: 24040005 */ addiu $a0,$zero,0x5 /* f10f2e0: 0fc47961 */ jal func0f11e584 @@ -2879,7 +2879,7 @@ glabel func0f10f204 /* f10f3e8: 0fc47961 */ jal func0f11e584 /* f10f3ec: 02002825 */ or $a1,$s0,$zero /* f10f3f0: 8fa40020 */ lw $a0,0x20($sp) -/* f10f3f4: 0fc54a7e */ jal func0f1529f8 +/* f10f3f4: 0fc54a7e */ jal optionsSetLookAhead /* f10f3f8: 00402825 */ or $a1,$v0,$zero /* f10f3fc: 24040011 */ addiu $a0,$zero,0x11 /* f10f400: 0fc47961 */ jal func0f11e584 @@ -3685,7 +3685,7 @@ glabel func0f10feac /* f10ff84: 02002825 */ or $a1,$s0,$zero /* f10ff88: 0fc4794c */ jal func0f11e530 /* f10ff8c: 00403025 */ or $a2,$v0,$zero -/* f10ff90: 0fc549f2 */ jal func0f1527c8 +/* f10ff90: 0fc549f2 */ jal optionsGetLookAhead /* f10ff94: 02602025 */ or $a0,$s3,$zero /* f10ff98: 24040004 */ addiu $a0,$zero,0x4 /* f10ff9c: 02002825 */ or $a1,$s0,$zero @@ -3757,7 +3757,7 @@ glabel func0f10feac /* f1100a4: 02002825 */ or $a1,$s0,$zero /* f1100a8: 0fc4794c */ jal func0f11e530 /* f1100ac: 00403025 */ or $a2,$v0,$zero -/* f1100b0: 0fc549f2 */ jal func0f1527c8 +/* f1100b0: 0fc549f2 */ jal optionsGetLookAhead /* f1100b4: 02202025 */ or $a0,$s1,$zero /* f1100b8: 24040010 */ addiu $a0,$zero,0x10 /* f1100bc: 02002825 */ or $a1,$s0,$zero diff --git a/src/game/game_152710.c b/src/game/game_152710.c index 1bb7fc10b..61e861365 100644 --- a/src/game/game_152710.c +++ b/src/game/game_152710.c @@ -77,18 +77,10 @@ glabel func0f1527a4 /* f1527c4: 000f102b */ sltu $v0,$zero,$t7 ); -GLOBAL_ASM( -glabel func0f1527c8 -/* f1527c8: 00047080 */ sll $t6,$a0,0x2 -/* f1527cc: 01c47021 */ addu $t6,$t6,$a0 -/* f1527d0: 000e7140 */ sll $t6,$t6,0x5 -/* f1527d4: 3c02800b */ lui $v0,0x800b -/* f1527d8: 004e1021 */ addu $v0,$v0,$t6 -/* f1527dc: 9442c800 */ lhu $v0,-0x3800($v0) -/* f1527e0: 304f0002 */ andi $t7,$v0,0x2 -/* f1527e4: 03e00008 */ jr $ra -/* f1527e8: 000f102b */ sltu $v0,$zero,$t7 -); +s32 optionsGetLookAhead(s32 optionsindex) +{ + return (g_Options[optionsindex].unk48 & OPTION_LOOKAHEAD) != 0; +} GLOBAL_ASM( glabel func0f1527ec @@ -219,32 +211,14 @@ glabel func0f1529a0 /* f1529f4: 00000000 */ sll $zero,$zero,0x0 ); -GLOBAL_ASM( -glabel func0f1529f8 -/* f1529f8: 10a0000b */ beqz $a1,.L0f152a28 -/* f1529fc: 00044080 */ sll $t0,$a0,0x2 -/* f152a00: 00047080 */ sll $t6,$a0,0x2 -/* f152a04: 01c47021 */ addu $t6,$t6,$a0 -/* f152a08: 3c0f800b */ lui $t7,%hi(g_Options) -/* f152a0c: 25efc7b8 */ addiu $t7,$t7,%lo(g_Options) -/* f152a10: 000e7140 */ sll $t6,$t6,0x5 -/* f152a14: 01cf1021 */ addu $v0,$t6,$t7 -/* f152a18: 94580048 */ lhu $t8,0x48($v0) -/* f152a1c: 37190002 */ ori $t9,$t8,0x2 -/* f152a20: 03e00008 */ jr $ra -/* f152a24: a4590048 */ sh $t9,0x48($v0) -.L0f152a28: -/* f152a28: 01044021 */ addu $t0,$t0,$a0 -/* f152a2c: 3c09800b */ lui $t1,%hi(g_Options) -/* f152a30: 2529c7b8 */ addiu $t1,$t1,%lo(g_Options) -/* f152a34: 00084140 */ sll $t0,$t0,0x5 -/* f152a38: 01091021 */ addu $v0,$t0,$t1 -/* f152a3c: 944a0048 */ lhu $t2,0x48($v0) -/* f152a40: 314bfffd */ andi $t3,$t2,0xfffd -/* f152a44: a44b0048 */ sh $t3,0x48($v0) -/* f152a48: 03e00008 */ jr $ra -/* f152a4c: 00000000 */ sll $zero,$zero,0x0 -); +void optionsSetLookAhead(s32 optionsindex, bool enable) +{ + if (enable) { + g_Options[optionsindex].unk48 |= OPTION_LOOKAHEAD; + } else { + g_Options[optionsindex].unk48 &= ~OPTION_LOOKAHEAD; + } +} GLOBAL_ASM( glabel func0f152a50 diff --git a/src/include/constants.h b/src/include/constants.h index 5fb2b390d..ed20cd655 100644 --- a/src/include/constants.h +++ b/src/include/constants.h @@ -658,6 +658,7 @@ #define OPERATOR_LESS_THAN 0 #define OPERATOR_GREATER_THAN 1 +#define OPTION_LOOKAHEAD 0x0002 #define OPTION_AMMOONSCREEN 0x0020 #define OPTION_SHOWGUNFUNCTION 0x0040 #define OPTION_HEADROLL 0x0080 diff --git a/src/include/game/game_152710.h b/src/include/game/game_152710.h index a8648837f..397c68e9e 100644 --- a/src/include/game/game_152710.h +++ b/src/include/game/game_152710.h @@ -9,7 +9,7 @@ u32 func0f152748(void); u32 func0f152764(void); u32 func0f152780(void); u32 func0f1527a4(void); -u32 func0f1527c8(void); +s32 optionsGetLookAhead(s32 optionsindex); u32 func0f1527ec(void); s32 func0f152810(s32 optionsindex); s32 optionsGetAmmoOnScreen(s32 optionsindex); @@ -23,7 +23,7 @@ u32 func0f152918(void); s32 optionsGetHeadRoll(s32 optionsindex); u32 func0f152948(void); u32 func0f1529a0(void); -u32 func0f1529f8(void); +void optionsSetLookAhead(s32 optionsindex, bool enable); u32 func0f152a50(void); u32 func0f152aa8(void); void optionsSetAmmoOnScreen(s32 optionsindex, bool enable);