From 10964a9f51630325868d62f1bea339ca4ae28682 Mon Sep 17 00:00:00 2001 From: Ryan Dwyer Date: Wed, 20 Apr 2022 23:51:03 +1000 Subject: [PATCH] jpn-final: Decompile pakN64FontCodeToAscii --- src/game/pak.c | 79 ++++++++++---------------------------------------- 1 file changed, 15 insertions(+), 64 deletions(-) diff --git a/src/game/pak.c b/src/game/pak.c index 1e817ef75..d95ab0e2a 100644 --- a/src/game/pak.c +++ b/src/game/pak.c @@ -10104,68 +10104,6 @@ u32 pak0f11e610(u32 arg0) return arg0; } -#if VERSION >= VERSION_JPN_FINAL -GLOBAL_ASM( -glabel pakN64FontCodeToAscii -/* f11e9e4: 27bdfed0 */ addiu $sp,$sp,-304 -/* f11e9e8: afb10018 */ sw $s1,0x18($sp) -/* f11e9ec: afb00014 */ sw $s0,0x14($sp) -/* f11e9f0: 00808025 */ move $s0,$a0 -/* f11e9f4: 00c08825 */ move $s1,$a2 -/* f11e9f8: afbf001c */ sw $ra,0x1c($sp) -/* f11e9fc: afa50134 */ sw $a1,0x134($sp) -/* f11ea00: 27a20030 */ addiu $v0,$sp,0x30 -/* f11ea04: 18c00021 */ blez $a2,.JF0f11ea8c -/* f11ea08: 00003825 */ move $a3,$zero -/* f11ea0c: 3c067f1b */ lui $a2,0x7f1b -/* f11ea10: 24c64760 */ addiu $a2,$a2,0x4760 -/* f11ea14: 24080022 */ li $t0,0x22 -/* f11ea18: 24050027 */ li $a1,0x27 -.JF0f11ea1c: -/* f11ea1c: 92030000 */ lbu $v1,0x0($s0) -/* f11ea20: 26100001 */ addiu $s0,$s0,0x1 -/* f11ea24: 24e70001 */ addiu $a3,$a3,0x1 -/* f11ea28: 28610042 */ slti $at,$v1,0x42 -/* f11ea2c: 10200003 */ beqz $at,.JF0f11ea3c -/* f11ea30: 2404002a */ li $a0,0x2a -/* f11ea34: 00c37021 */ addu $t6,$a2,$v1 -/* f11ea38: 91c40000 */ lbu $a0,0x0($t6) -.JF0f11ea3c: -/* f11ea3c: 14880005 */ bne $a0,$t0,.JF0f11ea54 -/* f11ea40: 28610042 */ slti $at,$v1,0x42 -/* f11ea44: a0450000 */ sb $a1,0x0($v0) -/* f11ea48: 24420001 */ addiu $v0,$v0,0x1 -/* f11ea4c: 1000000d */ b .JF0f11ea84 -/* f11ea50: a0450000 */ sb $a1,0x0($v0) -.JF0f11ea54: -/* f11ea54: 1420000a */ bnez $at,.JF0f11ea80 -/* f11ea58: 28610095 */ slti $at,$v1,0x95 -/* f11ea5c: 10200008 */ beqz $at,.JF0f11ea80 -/* f11ea60: 000379c3 */ sra $t7,$v1,0x7 -/* f11ea64: 3079007f */ andi $t9,$v1,0x7f -/* f11ea68: 35f80080 */ ori $t8,$t7,0x80 -/* f11ea6c: 37290080 */ ori $t1,$t9,0x80 -/* f11ea70: a0580000 */ sb $t8,0x0($v0) -/* f11ea74: 24420001 */ addiu $v0,$v0,0x1 -/* f11ea78: 10000002 */ b .JF0f11ea84 -/* f11ea7c: a0490000 */ sb $t1,0x0($v0) -.JF0f11ea80: -/* f11ea80: a0440000 */ sb $a0,0x0($v0) -.JF0f11ea84: -/* f11ea84: 14f1ffe5 */ bne $a3,$s1,.JF0f11ea1c -/* f11ea88: 24420001 */ addiu $v0,$v0,0x1 -.JF0f11ea8c: -/* f11ea8c: a0400000 */ sb $zero,0x0($v0) -/* f11ea90: 8fa40134 */ lw $a0,0x134($sp) -/* f11ea94: 0c004c34 */ jal strcpy -/* f11ea98: 27a50030 */ addiu $a1,$sp,0x30 -/* f11ea9c: 8fbf001c */ lw $ra,0x1c($sp) -/* f11eaa0: 8fb00014 */ lw $s0,0x14($sp) -/* f11eaa4: 8fb10018 */ lw $s1,0x18($sp) -/* f11eaa8: 03e00008 */ jr $ra -/* f11eaac: 27bd0130 */ addiu $sp,$sp,0x130 -); -#else /** * The note name and note extension are stored on the pak using N64 font code. * This is different to ASCII. @@ -10179,7 +10117,7 @@ void pakN64FontCodeToAscii(char *src, char *dst, s32 len) { char buffer[256]; s32 i; - char in; + s32 in; char c; char *ptr = buffer; @@ -10199,6 +10137,19 @@ void pakN64FontCodeToAscii(char *src, char *dst, s32 len) // PD has a double quote in its fonts, but I guess it doesn't render // very well. So it gets replaced with two single quotes. +#if VERSION >= VERSION_JPN_FINAL + if ((u32)c == '"') { + *ptr = '\''; + ptr++; + *ptr = '\''; + } else if (in >= 0x42 && in <= 0x94) { + *ptr = (in >> 7) | 0x80; + ptr++; + *ptr = (in & 0x7f) | 0x80; + } else { + *ptr = c; + } +#else if ((u32)c == '"') { *ptr = '\''; ptr++; @@ -10206,6 +10157,7 @@ void pakN64FontCodeToAscii(char *src, char *dst, s32 len) } else { *ptr = c; } +#endif ptr++; } @@ -10214,7 +10166,6 @@ void pakN64FontCodeToAscii(char *src, char *dst, s32 len) strcpy(dst, buffer); } -#endif s8 pakFindBySerial(s32 findserial) {