From bfba34d3440e8e05c59a06f92bb079733411702c Mon Sep 17 00:00:00 2001 From: Ryan Dwyer Date: Mon, 10 Jan 2022 20:36:20 +1000 Subject: [PATCH] Decompile mpMenuTextTime --- src/game/mplayer/setup.c | 287 +++---------------------------- src/include/game/mplayer/setup.h | 2 +- 2 files changed, 27 insertions(+), 262 deletions(-) diff --git a/src/game/mplayer/setup.c b/src/game/mplayer/setup.c index 734629b91..37a9436ea 100644 --- a/src/game/mplayer/setup.c +++ b/src/game/mplayer/setup.c @@ -1540,268 +1540,33 @@ char *mpMenuTextDistance(struct menuitem *item) return g_StringPointer; } -#if VERSION >= VERSION_NTSC_1_0 -GLOBAL_ASM( -glabel mpMenuTextTime -/* f17ab38: 3c0e8007 */ lui $t6,%hi(g_MpPlayerNum) -/* f17ab3c: 8dce1448 */ lw $t6,%lo(g_MpPlayerNum)($t6) -/* f17ab40: 3c02800b */ lui $v0,%hi(g_PlayerConfigsArray+0x68) -/* f17ab44: 2408003c */ addiu $t0,$zero,0x3c -/* f17ab48: 000e7880 */ sll $t7,$t6,0x2 -/* f17ab4c: 01ee7821 */ addu $t7,$t7,$t6 -/* f17ab50: 000f7940 */ sll $t7,$t7,0x5 -/* f17ab54: 004f1021 */ addu $v0,$v0,$t7 -/* f17ab58: 8c42c820 */ lw $v0,%lo(g_PlayerConfigsArray+0x68)($v0) -/* f17ab5c: 27bdffe0 */ addiu $sp,$sp,-32 -/* f17ab60: afbf001c */ sw $ra,0x1c($sp) -/* f17ab64: 0048001b */ divu $zero,$v0,$t0 -/* f17ab68: 00004810 */ mfhi $t1 -/* f17ab6c: afa40020 */ sw $a0,0x20($sp) -/* f17ab70: 15000002 */ bnez $t0,.L0f17ab7c -/* f17ab74: 00000000 */ nop -/* f17ab78: 0007000d */ break 0x7 -.L0f17ab7c: -/* f17ab7c: 3c017fff */ lui $at,0x7fff -/* f17ab80: 54400005 */ bnezl $v0,.L0f17ab98 -/* f17ab84: 3421ffff */ ori $at,$at,0xffff -/* f17ab88: 3c027f1b */ lui $v0,%hi(var7f1b7f48) -/* f17ab8c: 10000052 */ b .L0f17acd8 -/* f17ab90: 24427f48 */ addiu $v0,$v0,%lo(var7f1b7f48) -/* f17ab94: 3421ffff */ ori $at,$at,0xffff -.L0f17ab98: -/* f17ab98: 0041082b */ sltu $at,$v0,$at -/* f17ab9c: 14200004 */ bnez $at,.L0f17abb0 -/* f17aba0: 00000000 */ nop -/* f17aba4: 3c027f1b */ lui $v0,%hi(var7f1b7f50) -/* f17aba8: 1000004b */ b .L0f17acd8 -/* f17abac: 24427f50 */ addiu $v0,$v0,%lo(var7f1b7f50) -.L0f17abb0: -/* f17abb0: 0048001b */ divu $zero,$v0,$t0 -/* f17abb4: 00001012 */ mflo $v0 -/* f17abb8: 240a0018 */ addiu $t2,$zero,0x18 -/* f17abbc: 15000002 */ bnez $t0,.L0f17abc8 -/* f17abc0: 00000000 */ nop -/* f17abc4: 0007000d */ break 0x7 -.L0f17abc8: -/* f17abc8: 0048001b */ divu $zero,$v0,$t0 -/* f17abcc: 00001812 */ mflo $v1 -/* f17abd0: 3c057f1b */ lui $a1,%hi(var7f1b7f68) -/* f17abd4: 15000002 */ bnez $t0,.L0f17abe0 -/* f17abd8: 00000000 */ nop -/* f17abdc: 0007000d */ break 0x7 -.L0f17abe0: -/* f17abe0: 006a001a */ div $zero,$v1,$t2 -/* f17abe4: 00003012 */ mflo $a2 -/* f17abe8: 24a57f68 */ addiu $a1,$a1,%lo(var7f1b7f68) -/* f17abec: 15400002 */ bnez $t2,.L0f17abf8 -/* f17abf0: 00000000 */ nop -/* f17abf4: 0007000d */ break 0x7 -.L0f17abf8: -/* f17abf8: 2401ffff */ addiu $at,$zero,-1 -/* f17abfc: 15410004 */ bne $t2,$at,.L0f17ac10 -/* f17ac00: 3c018000 */ lui $at,0x8000 -/* f17ac04: 14610002 */ bne $v1,$at,.L0f17ac10 -/* f17ac08: 00000000 */ nop -/* f17ac0c: 0006000d */ break 0x6 -.L0f17ac10: -/* f17ac10: 3c048007 */ lui $a0,%hi(g_StringPointer) -/* f17ac14: 14c0001a */ bnez $a2,.L0f17ac80 -/* f17ac18: 00000000 */ nop -/* f17ac1c: 006a001a */ div $zero,$v1,$t2 -/* f17ac20: 00003010 */ mfhi $a2 -/* f17ac24: 3c048007 */ lui $a0,%hi(g_StringPointer) -/* f17ac28: 3c057f1b */ lui $a1,%hi(var7f1b7f58) -/* f17ac2c: 0048001b */ divu $zero,$v0,$t0 -/* f17ac30: 00003810 */ mfhi $a3 -/* f17ac34: 24a57f58 */ addiu $a1,$a1,%lo(var7f1b7f58) -/* f17ac38: 8c841440 */ lw $a0,%lo(g_StringPointer)($a0) -/* f17ac3c: 15400002 */ bnez $t2,.L0f17ac48 -/* f17ac40: 00000000 */ nop -/* f17ac44: 0007000d */ break 0x7 -.L0f17ac48: -/* f17ac48: 2401ffff */ addiu $at,$zero,-1 -/* f17ac4c: 15410004 */ bne $t2,$at,.L0f17ac60 -/* f17ac50: 3c018000 */ lui $at,0x8000 -/* f17ac54: 14610002 */ bne $v1,$at,.L0f17ac60 -/* f17ac58: 00000000 */ nop -/* f17ac5c: 0006000d */ break 0x6 -.L0f17ac60: -/* f17ac60: afa90010 */ sw $t1,0x10($sp) -/* f17ac64: 15000002 */ bnez $t0,.L0f17ac70 -/* f17ac68: 00000000 */ nop -/* f17ac6c: 0007000d */ break 0x7 -.L0f17ac70: -/* f17ac70: 0c004dad */ jal sprintf -/* f17ac74: 00000000 */ nop -/* f17ac78: 10000015 */ b .L0f17acd0 -/* f17ac7c: 00000000 */ nop -.L0f17ac80: -/* f17ac80: 006a001a */ div $zero,$v1,$t2 -/* f17ac84: 00003810 */ mfhi $a3 -/* f17ac88: 8c841440 */ lw $a0,%lo(g_StringPointer)($a0) -/* f17ac8c: 15400002 */ bnez $t2,.L0f17ac98 -/* f17ac90: 00000000 */ nop -/* f17ac94: 0007000d */ break 0x7 -.L0f17ac98: -/* f17ac98: 2401ffff */ addiu $at,$zero,-1 -/* f17ac9c: 15410004 */ bne $t2,$at,.L0f17acb0 -/* f17aca0: 3c018000 */ lui $at,0x8000 -/* f17aca4: 14610002 */ bne $v1,$at,.L0f17acb0 -/* f17aca8: 00000000 */ nop -/* f17acac: 0006000d */ break 0x6 -.L0f17acb0: -/* f17acb0: 0048001b */ divu $zero,$v0,$t0 -/* f17acb4: 0000c010 */ mfhi $t8 -/* f17acb8: afb80010 */ sw $t8,0x10($sp) -/* f17acbc: 15000002 */ bnez $t0,.L0f17acc8 -/* f17acc0: 00000000 */ nop -/* f17acc4: 0007000d */ break 0x7 -.L0f17acc8: -/* f17acc8: 0c004dad */ jal sprintf -/* f17accc: 00000000 */ nop -.L0f17acd0: -/* f17acd0: 3c028007 */ lui $v0,%hi(g_StringPointer) -/* f17acd4: 8c421440 */ lw $v0,%lo(g_StringPointer)($v0) -.L0f17acd8: -/* f17acd8: 8fbf001c */ lw $ra,0x1c($sp) -/* f17acdc: 27bd0020 */ addiu $sp,$sp,0x20 -/* f17ace0: 03e00008 */ jr $ra -/* f17ace4: 00000000 */ nop -); -#else -GLOBAL_ASM( -glabel mpMenuTextTime -/* f1754c0: 3c0e8007 */ lui $t6,0x8007 -/* f1754c4: 8dce3af0 */ lw $t6,0x3af0($t6) -/* f1754c8: 3c02800b */ lui $v0,0x800b -/* f1754cc: 2408003c */ addiu $t0,$zero,0x3c -/* f1754d0: 000e7880 */ sll $t7,$t6,0x2 -/* f1754d4: 01ee7821 */ addu $t7,$t7,$t6 -/* f1754d8: 000f7940 */ sll $t7,$t7,0x5 -/* f1754dc: 004f1021 */ addu $v0,$v0,$t7 -/* f1754e0: 8c4210d0 */ lw $v0,0x10d0($v0) -/* f1754e4: 27bdffe0 */ addiu $sp,$sp,-32 -/* f1754e8: afbf001c */ sw $ra,0x1c($sp) -/* f1754ec: 0048001b */ divu $zero,$v0,$t0 -/* f1754f0: 00004810 */ mfhi $t1 -/* f1754f4: afa40020 */ sw $a0,0x20($sp) -/* f1754f8: 15000002 */ bnez $t0,.NB0f175504 -/* f1754fc: 00000000 */ sll $zero,$zero,0x0 -/* f175500: 0007000d */ break 0x7 -.NB0f175504: -/* f175504: 3c017fff */ lui $at,0x7fff -/* f175508: 54400005 */ bnezl $v0,.NB0f175520 -/* f17550c: 3421ffff */ ori $at,$at,0xffff -/* f175510: 3c027f1b */ lui $v0,0x7f1b -/* f175514: 10000052 */ beqz $zero,.NB0f175660 -/* f175518: 24422898 */ addiu $v0,$v0,0x2898 -/* f17551c: 3421ffff */ ori $at,$at,0xffff -.NB0f175520: -/* f175520: 0041082b */ sltu $at,$v0,$at -/* f175524: 14200004 */ bnez $at,.NB0f175538 -/* f175528: 00000000 */ sll $zero,$zero,0x0 -/* f17552c: 3c027f1b */ lui $v0,0x7f1b -/* f175530: 1000004b */ beqz $zero,.NB0f175660 -/* f175534: 244228a0 */ addiu $v0,$v0,0x28a0 -.NB0f175538: -/* f175538: 0048001b */ divu $zero,$v0,$t0 -/* f17553c: 00001012 */ mflo $v0 -/* f175540: 240a0018 */ addiu $t2,$zero,0x18 -/* f175544: 15000002 */ bnez $t0,.NB0f175550 -/* f175548: 00000000 */ sll $zero,$zero,0x0 -/* f17554c: 0007000d */ break 0x7 -.NB0f175550: -/* f175550: 0048001b */ divu $zero,$v0,$t0 -/* f175554: 00001812 */ mflo $v1 -/* f175558: 3c04800a */ lui $a0,0x800a -/* f17555c: 15000002 */ bnez $t0,.NB0f175568 -/* f175560: 00000000 */ sll $zero,$zero,0x0 -/* f175564: 0007000d */ break 0x7 -.NB0f175568: -/* f175568: 006a001a */ div $zero,$v1,$t2 -/* f17556c: 00003012 */ mflo $a2 -/* f175570: 248426b0 */ addiu $a0,$a0,0x26b0 -/* f175574: 15400002 */ bnez $t2,.NB0f175580 -/* f175578: 00000000 */ sll $zero,$zero,0x0 -/* f17557c: 0007000d */ break 0x7 -.NB0f175580: -/* f175580: 2401ffff */ addiu $at,$zero,-1 -/* f175584: 15410004 */ bne $t2,$at,.NB0f175598 -/* f175588: 3c018000 */ lui $at,0x8000 -/* f17558c: 14610002 */ bne $v1,$at,.NB0f175598 -/* f175590: 00000000 */ sll $zero,$zero,0x0 -/* f175594: 0006000d */ break 0x6 -.NB0f175598: -/* f175598: 3c057f1b */ lui $a1,0x7f1b -/* f17559c: 14c0001a */ bnez $a2,.NB0f175608 -/* f1755a0: 00000000 */ sll $zero,$zero,0x0 -/* f1755a4: 006a001a */ div $zero,$v1,$t2 -/* f1755a8: 00003010 */ mfhi $a2 -/* f1755ac: 3c04800a */ lui $a0,0x800a -/* f1755b0: 3c057f1b */ lui $a1,0x7f1b -/* f1755b4: 0048001b */ divu $zero,$v0,$t0 -/* f1755b8: 00003810 */ mfhi $a3 -/* f1755bc: 24a528a8 */ addiu $a1,$a1,0x28a8 -/* f1755c0: 248426b0 */ addiu $a0,$a0,0x26b0 -/* f1755c4: 15400002 */ bnez $t2,.NB0f1755d0 -/* f1755c8: 00000000 */ sll $zero,$zero,0x0 -/* f1755cc: 0007000d */ break 0x7 -.NB0f1755d0: -/* f1755d0: 2401ffff */ addiu $at,$zero,-1 -/* f1755d4: 15410004 */ bne $t2,$at,.NB0f1755e8 -/* f1755d8: 3c018000 */ lui $at,0x8000 -/* f1755dc: 14610002 */ bne $v1,$at,.NB0f1755e8 -/* f1755e0: 00000000 */ sll $zero,$zero,0x0 -/* f1755e4: 0006000d */ break 0x6 -.NB0f1755e8: -/* f1755e8: afa90010 */ sw $t1,0x10($sp) -/* f1755ec: 15000002 */ bnez $t0,.NB0f1755f8 -/* f1755f0: 00000000 */ sll $zero,$zero,0x0 -/* f1755f4: 0007000d */ break 0x7 -.NB0f1755f8: -/* f1755f8: 0c004fc1 */ jal sprintf -/* f1755fc: 00000000 */ sll $zero,$zero,0x0 -/* f175600: 10000015 */ beqz $zero,.NB0f175658 -/* f175604: 00000000 */ sll $zero,$zero,0x0 -.NB0f175608: -/* f175608: 006a001a */ div $zero,$v1,$t2 -/* f17560c: 00003810 */ mfhi $a3 -/* f175610: 24a528b8 */ addiu $a1,$a1,0x28b8 -/* f175614: 15400002 */ bnez $t2,.NB0f175620 -/* f175618: 00000000 */ sll $zero,$zero,0x0 -/* f17561c: 0007000d */ break 0x7 -.NB0f175620: -/* f175620: 2401ffff */ addiu $at,$zero,-1 -/* f175624: 15410004 */ bne $t2,$at,.NB0f175638 -/* f175628: 3c018000 */ lui $at,0x8000 -/* f17562c: 14610002 */ bne $v1,$at,.NB0f175638 -/* f175630: 00000000 */ sll $zero,$zero,0x0 -/* f175634: 0006000d */ break 0x6 -.NB0f175638: -/* f175638: 0048001b */ divu $zero,$v0,$t0 -/* f17563c: 0000c010 */ mfhi $t8 -/* f175640: afb80010 */ sw $t8,0x10($sp) -/* f175644: 15000002 */ bnez $t0,.NB0f175650 -/* f175648: 00000000 */ sll $zero,$zero,0x0 -/* f17564c: 0007000d */ break 0x7 -.NB0f175650: -/* f175650: 0c004fc1 */ jal sprintf -/* f175654: 00000000 */ sll $zero,$zero,0x0 -.NB0f175658: -/* f175658: 3c02800a */ lui $v0,0x800a -/* f17565c: 244226b0 */ addiu $v0,$v0,0x26b0 -.NB0f175660: -/* f175660: 8fbf001c */ lw $ra,0x1c($sp) -/* f175664: 27bd0020 */ addiu $sp,$sp,0x20 -/* f175668: 03e00008 */ jr $ra -/* f17566c: 00000000 */ sll $zero,$zero,0x0 -); -#endif +char *mpMenuTextTime(struct menuitem *item) +{ + u32 raw = g_PlayerConfigsArray[g_MpPlayerNum].time; + s32 secs = raw % 60; + s32 hours; + s32 days; -const char var7f1b7f48[] = "--:--\n"; -const char var7f1b7f50[] = "==:==\n"; -const char var7f1b7f58[] = "%d:%02d.%02d"; -const char var7f1b7f68[] = "%d:%02d:%02d"; + if (raw == 0) { + return "--:--\n"; + } + + if (raw >= 0x7fffffff) { + return "==:==\n"; + } + + raw = raw / 60; + hours = raw / 60; + days = hours / 24; + + if (days == 0) { + sprintf(g_StringPointer, "%d:%02d.%02d", hours % 24, raw % 60, secs); + } else { + sprintf(g_StringPointer, "%d:%02d:%02d", days, hours % 24, raw % 60); + } + + return g_StringPointer; +} char *mpMenuTextAccuracy(struct menuitem *item) { diff --git a/src/include/game/mplayer/setup.h b/src/include/game/mplayer/setup.h index b580ad4f5..c1255e5c4 100644 --- a/src/include/game/mplayer/setup.h +++ b/src/include/game/mplayer/setup.h @@ -24,7 +24,7 @@ char *mpMenuTextMedalKillMaster(struct menuitem *item); char *mpMenuTextMedalSurvivor(struct menuitem *item); char *mpMenuTextAmmoUsed(struct menuitem *item); char *mpMenuTextDistance(struct menuitem *item); -u32 mpMenuTextTime(void); +char *mpMenuTextTime(struct menuitem *item); char *mpMenuTextAccuracy(struct menuitem *item); void mpFormatDamageValue(char *dst, f32 damage); char *mpMenuTextPainReceived(struct menuitem *item);