From 8903bdb02abeb0b4b8179abb35b666bc1a3731bd Mon Sep 17 00:00:00 2001 From: Ryan Dwyer Date: Tue, 11 Jan 2022 08:00:18 +1000 Subject: [PATCH] Decompile lvGetSlowMotionType --- src/game/lv.c | 203 ++++++-------------------------------------------- 1 file changed, 22 insertions(+), 181 deletions(-) diff --git a/src/game/lv.c b/src/game/lv.c index 5e7701790..06154aa9d 100644 --- a/src/game/lv.c +++ b/src/game/lv.c @@ -6455,13 +6455,16 @@ void lvUpdateSoloHandicaps(void) } #if PIRACYCHECKS + +#if VERSION >= VERSION_PAL_FINAL +#define SUBAMOUNT 6661 +#else +#define SUBAMOUNT 54321 +#endif + s32 sub54321(s32 value) { -#if PAL - return value - 6661; -#else - return value - 54321; -#endif + return value - SUBAMOUNT; } #endif @@ -6475,189 +6478,28 @@ void lvUpdateCutsceneTime(void) g_CutsceneTime240_60 = 0; } -#if VERSION >= VERSION_PAL_FINAL -GLOBAL_ASM( -glabel lvGetSlowMotionType -/* f16b854: 27bdffd0 */ addiu $sp,$sp,-48 -/* f16b858: afbf0014 */ sw $ra,0x14($sp) -/* f16b85c: 3c04b000 */ lui $a0,0xb000 -/* f16b860: 0fc5ae00 */ jal sub54321 -/* f16b864: 3484de8d */ ori $a0,$a0,0x1d45 -/* f16b868: 3c041741 */ lui $a0,0x330 -/* f16b86c: afa2002c */ sw $v0,0x2c($sp) -/* f16b870: 0fc5ae00 */ jal sub54321 -/* f16b874: 3484d42a */ ori $a0,$a0,0xe225 -/* f16b878: afa20024 */ sw $v0,0x24($sp) -/* f16b87c: 8fa4002c */ lw $a0,0x2c($sp) -/* f16b880: 0c013994 */ jal osPiReadIo -/* f16b884: 27a50028 */ addiu $a1,$sp,0x28 -/* f16b888: 8fae0028 */ lw $t6,0x28($sp) -/* f16b88c: 8faf0024 */ lw $t7,0x24($sp) -/* f16b890: 3c058006 */ lui $a1,%hi(rspbootTextStart) -/* f16b894: 24a29fe0 */ addiu $v0,$a1,%lo(rspbootTextStart) -/* f16b898: 11cf000d */ beq $t6,$t7,.L0f16b8d0 -/* f16b89c: 3c09800a */ lui $t1,%hi(g_Vars+0x318) -/* f16b8a0: 3c188006 */ lui $t8,%hi(rspbootTextStart+0x1) -/* f16b8a4: 24431000 */ addiu $v1,$v0,0x1000 -/* f16b8a8: 27189fe1 */ addiu $t8,$t8,%lo(rspbootTextStart+0x1) -/* f16b8ac: 0078082b */ sltu $at,$v1,$t8 -/* f16b8b0: 14200007 */ bnez $at,.L0f16b8d0 -/* f16b8b4: 00000000 */ nop -.L0f16b8b8: -/* f16b8b8: 8c590000 */ lw $t9,0x0($v0) -/* f16b8bc: 24420004 */ addiu $v0,$v0,0x4 -/* f16b8c0: 0043082b */ sltu $at,$v0,$v1 -/* f16b8c4: 27280008 */ addiu $t0,$t9,0x8 -/* f16b8c8: 1420fffb */ bnez $at,.L0f16b8b8 -/* f16b8cc: ac48fffc */ sw $t0,-0x4($v0) -.L0f16b8d0: -/* f16b8d0: 8d29a2d8 */ lw $t1,%lo(g_Vars+0x318)($t1) -/* f16b8d4: 3c02800b */ lui $v0,%hi(g_MpSetup+0xc) -/* f16b8d8: 1120000b */ beqz $t1,.L0f16b908 -/* f16b8dc: 00000000 */ nop -/* f16b8e0: 8c42cb94 */ lw $v0,%lo(g_MpSetup+0xc)($v0) -/* f16b8e4: 304a0040 */ andi $t2,$v0,0x40 -/* f16b8e8: 11400003 */ beqz $t2,.L0f16b8f8 -/* f16b8ec: 304b0080 */ andi $t3,$v0,0x80 -/* f16b8f0: 1000001a */ b .L0f16b95c -/* f16b8f4: 24020001 */ addiu $v0,$zero,0x1 -.L0f16b8f8: -/* f16b8f8: 51600018 */ beqzl $t3,.L0f16b95c -/* f16b8fc: 00001025 */ or $v0,$zero,$zero -/* f16b900: 10000016 */ b .L0f16b95c -/* f16b904: 24020002 */ addiu $v0,$zero,0x2 -.L0f16b908: -/* f16b908: 0fc41b99 */ jal cheatIsActive -/* f16b90c: 24040006 */ addiu $a0,$zero,0x6 -/* f16b910: 10400003 */ beqz $v0,.L0f16b920 -/* f16b914: 00000000 */ nop -/* f16b918: 10000010 */ b .L0f16b95c -/* f16b91c: 24020001 */ addiu $v0,$zero,0x1 -.L0f16b920: -/* f16b920: 0fc47b9c */ jal debugGetSlowMotion -/* f16b924: 00000000 */ nop -/* f16b928: 24010001 */ addiu $at,$zero,0x1 -/* f16b92c: 14410003 */ bne $v0,$at,.L0f16b93c -/* f16b930: 00000000 */ nop -/* f16b934: 10000009 */ b .L0f16b95c -/* f16b938: 24020001 */ addiu $v0,$zero,0x1 -.L0f16b93c: -/* f16b93c: 0fc47b9c */ jal debugGetSlowMotion -/* f16b940: 00000000 */ nop -/* f16b944: 24010002 */ addiu $at,$zero,0x2 -/* f16b948: 54410004 */ bnel $v0,$at,.L0f16b95c -/* f16b94c: 00001025 */ or $v0,$zero,$zero -/* f16b950: 10000002 */ b .L0f16b95c -/* f16b954: 24020002 */ addiu $v0,$zero,0x2 -/* f16b958: 00001025 */ or $v0,$zero,$zero -.L0f16b95c: -/* f16b95c: 8fbf0014 */ lw $ra,0x14($sp) -/* f16b960: 27bd0030 */ addiu $sp,$sp,0x30 -/* f16b964: 03e00008 */ jr $ra -/* f16b968: 00000000 */ nop -); -#elif VERSION >= VERSION_NTSC_1_0 -GLOBAL_ASM( -glabel lvGetSlowMotionType -/* f16b854: 27bdffd0 */ addiu $sp,$sp,-48 -/* f16b858: afbf0014 */ sw $ra,0x14($sp) -/* f16b85c: 3c04b000 */ lui $a0,0xb000 -/* f16b860: 0fc5ae00 */ jal sub54321 -/* f16b864: 3484de8d */ ori $a0,$a0,0xde8d -/* f16b868: 3c041741 */ lui $a0,0x1741 -/* f16b86c: afa2002c */ sw $v0,0x2c($sp) -/* f16b870: 0fc5ae00 */ jal sub54321 -/* f16b874: 3484d42a */ ori $a0,$a0,0xd42a -/* f16b878: afa20024 */ sw $v0,0x24($sp) -/* f16b87c: 8fa4002c */ lw $a0,0x2c($sp) -/* f16b880: 0c013994 */ jal osPiReadIo -/* f16b884: 27a50028 */ addiu $a1,$sp,0x28 -/* f16b888: 8fae0028 */ lw $t6,0x28($sp) -/* f16b88c: 8faf0024 */ lw $t7,0x24($sp) -/* f16b890: 3c058006 */ lui $a1,%hi(rspbootTextStart) -/* f16b894: 24a29fe0 */ addiu $v0,$a1,%lo(rspbootTextStart) -/* f16b898: 11cf000d */ beq $t6,$t7,.L0f16b8d0 -/* f16b89c: 3c09800a */ lui $t1,%hi(g_Vars+0x318) -/* f16b8a0: 3c188006 */ lui $t8,%hi(rspbootTextStart+0x1) -/* f16b8a4: 24431000 */ addiu $v1,$v0,0x1000 -/* f16b8a8: 27189fe1 */ addiu $t8,$t8,%lo(rspbootTextStart+0x1) -/* f16b8ac: 0078082b */ sltu $at,$v1,$t8 -/* f16b8b0: 14200007 */ bnez $at,.L0f16b8d0 -/* f16b8b4: 00000000 */ nop -.L0f16b8b8: -/* f16b8b8: 8c590000 */ lw $t9,0x0($v0) -/* f16b8bc: 24420004 */ addiu $v0,$v0,0x4 -/* f16b8c0: 0043082b */ sltu $at,$v0,$v1 -/* f16b8c4: 27280008 */ addiu $t0,$t9,0x8 -/* f16b8c8: 1420fffb */ bnez $at,.L0f16b8b8 -/* f16b8cc: ac48fffc */ sw $t0,-0x4($v0) -.L0f16b8d0: -/* f16b8d0: 8d29a2d8 */ lw $t1,%lo(g_Vars+0x318)($t1) -/* f16b8d4: 3c02800b */ lui $v0,%hi(g_MpSetup+0xc) -/* f16b8d8: 1120000b */ beqz $t1,.L0f16b908 -/* f16b8dc: 00000000 */ nop -/* f16b8e0: 8c42cb94 */ lw $v0,%lo(g_MpSetup+0xc)($v0) -/* f16b8e4: 304a0040 */ andi $t2,$v0,0x40 -/* f16b8e8: 11400003 */ beqz $t2,.L0f16b8f8 -/* f16b8ec: 304b0080 */ andi $t3,$v0,0x80 -/* f16b8f0: 1000001a */ b .L0f16b95c -/* f16b8f4: 24020001 */ addiu $v0,$zero,0x1 -.L0f16b8f8: -/* f16b8f8: 51600018 */ beqzl $t3,.L0f16b95c -/* f16b8fc: 00001025 */ or $v0,$zero,$zero -/* f16b900: 10000016 */ b .L0f16b95c -/* f16b904: 24020002 */ addiu $v0,$zero,0x2 -.L0f16b908: -/* f16b908: 0fc41b99 */ jal cheatIsActive -/* f16b90c: 24040006 */ addiu $a0,$zero,0x6 -/* f16b910: 10400003 */ beqz $v0,.L0f16b920 -/* f16b914: 00000000 */ nop -/* f16b918: 10000010 */ b .L0f16b95c -/* f16b91c: 24020001 */ addiu $v0,$zero,0x1 -.L0f16b920: -/* f16b920: 0fc47b9c */ jal debugGetSlowMotion -/* f16b924: 00000000 */ nop -/* f16b928: 24010001 */ addiu $at,$zero,0x1 -/* f16b92c: 14410003 */ bne $v0,$at,.L0f16b93c -/* f16b930: 00000000 */ nop -/* f16b934: 10000009 */ b .L0f16b95c -/* f16b938: 24020001 */ addiu $v0,$zero,0x1 -.L0f16b93c: -/* f16b93c: 0fc47b9c */ jal debugGetSlowMotion -/* f16b940: 00000000 */ nop -/* f16b944: 24010002 */ addiu $at,$zero,0x2 -/* f16b948: 54410004 */ bnel $v0,$at,.L0f16b95c -/* f16b94c: 00001025 */ or $v0,$zero,$zero -/* f16b950: 10000002 */ b .L0f16b95c -/* f16b954: 24020002 */ addiu $v0,$zero,0x2 -/* f16b958: 00001025 */ or $v0,$zero,$zero -.L0f16b95c: -/* f16b95c: 8fbf0014 */ lw $ra,0x14($sp) -/* f16b960: 27bd0030 */ addiu $sp,$sp,0x30 -/* f16b964: 03e00008 */ jr $ra -/* f16b968: 00000000 */ nop -); -#else -// Can't match the antipiracy part (used in ntsc-1.0 and above) s32 lvGetSlowMotionType(void) { #if PIRACYCHECKS - u32 addr = sub54321(0xb0000a5c + 54321); +#if VERSION >= VERSION_PAL_FINAL + u32 addr = sub54321(0xb0000340 + SUBAMOUNT); u32 actual; - u32 expected = sub54321(0x1740fff9); + u32 expected = sub54321(0x0330c820 + SUBAMOUNT); +#else + u32 addr = sub54321(0xb0000a5c + SUBAMOUNT); + u32 actual; + u32 expected = sub54321(0x1740fff9 + SUBAMOUNT); +#endif + osPiReadIo(addr, &actual); if (actual != expected) { - extern u32 rspbootTextStart; - extern u32 rspbootStartPlusOne; - u32 *ptr = &rspbootStart; - u32 *end = &ptr[1024]; + u32 *ptr = (u32 *)&rspbootTextStart; + u32 *end = (u32 *)(u32)ptr + 1024; - if (!(end < &rspbootStartPlusOne)) { - do { - *ptr += 8; - ptr++; - } while (ptr < end); + while (ptr < end) { + *ptr += 8; + ptr++; } } #endif @@ -6683,7 +6525,6 @@ s32 lvGetSlowMotionType(void) return SLOWMOTION_OFF; } -#endif #if VERSION >= VERSION_PAL_FINAL GLOBAL_ASM(