From 09f27128f82c716762a3de9f86d6799ac7946abb Mon Sep 17 00:00:00 2001 From: SatoMew Date: Sat, 6 Oct 2018 17:27:58 +0100 Subject: [PATCH 01/13] decompile random.c --- asm/random.s | 36 ------------------------------------ common_syms/random.txt | 1 + src/random.c | 18 ++++++++++++++++++ sym_common.txt | 5 +++-- 4 files changed, 22 insertions(+), 38 deletions(-) delete mode 100644 asm/random.s create mode 100644 common_syms/random.txt create mode 100644 src/random.c diff --git a/asm/random.s b/asm/random.s deleted file mode 100644 index dcf706524..000000000 --- a/asm/random.s +++ /dev/null @@ -1,36 +0,0 @@ - .include "asm/macros.inc" - .include "constants/constants.inc" - - .syntax unified - - .text - - thumb_func_start Random -Random: @ 8044EC8 - ldr r2, _08044EDC @ =gUnknown_3005000 - ldr r1, [r2] - ldr r0, _08044EE0 @ =0x41c64e6d - muls r0, r1 - ldr r1, _08044EE4 @ =0x00006073 - adds r0, r1 - str r0, [r2] - lsrs r0, 16 - bx lr - .align 2, 0 -_08044EDC: .4byte gUnknown_3005000 -_08044EE0: .4byte 0x41c64e6d -_08044EE4: .4byte 0x00006073 - thumb_func_end Random - - thumb_func_start SeedRng -SeedRng: @ 8044EE8 - lsls r0, 16 - lsrs r0, 16 - ldr r1, _08044EF4 @ =gUnknown_3005000 - str r0, [r1] - bx lr - .align 2, 0 -_08044EF4: .4byte gUnknown_3005000 - thumb_func_end SeedRng - - .align 2, 0 @ Don't pad with nop. diff --git a/common_syms/random.txt b/common_syms/random.txt new file mode 100644 index 000000000..794439ea5 --- /dev/null +++ b/common_syms/random.txt @@ -0,0 +1 @@ +gRngValue diff --git a/src/random.c b/src/random.c new file mode 100644 index 000000000..54dae0824 --- /dev/null +++ b/src/random.c @@ -0,0 +1,18 @@ +#include "global.h" +#include "random.h" + +// The number 1103515245 comes from the example implementation +// of rand and srand in the ISO C standard. + +u32 gRngValue; + +u16 Random(void) +{ + gRngValue = 1103515245 * gRngValue + 24691; + return gRngValue >> 16; +} + +void SeedRng(u16 seed) +{ + gRngValue = seed; +} diff --git a/sym_common.txt b/sym_common.txt index db9a63d4f..869baeb9e 100644 --- a/sym_common.txt +++ b/sym_common.txt @@ -132,8 +132,9 @@ gUnknown_3004FF8: @ 3004FF8 gUnknown_3004FFC: @ 3004FFC .space 0x4 -gUnknown_3005000: @ 3005000 - .space 0x4 + .include "random.o" + + .align 2 gUnknown_3005004: @ 3005004 .space 0x4 From 7e1e4bc301b14a0f0ac326cb386c5dd66f96ef06 Mon Sep 17 00:00:00 2001 From: SatoMew Date: Sat, 6 Oct 2018 17:35:02 +0100 Subject: [PATCH 02/13] Remove unnecessary newline --- sym_common.txt | 1 - 1 file changed, 1 deletion(-) diff --git a/sym_common.txt b/sym_common.txt index 869baeb9e..a17212d58 100644 --- a/sym_common.txt +++ b/sym_common.txt @@ -133,7 +133,6 @@ gUnknown_3004FFC: @ 3004FFC .space 0x4 .include "random.o" - .align 2 gUnknown_3005004: @ 3005004 From 77e95d1309f5da9306c69c7aee23587e0c169ceb Mon Sep 17 00:00:00 2001 From: SatoMew Date: Sat, 6 Oct 2018 17:41:51 +0100 Subject: [PATCH 03/13] Fix previous change --- sym_common.txt | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/sym_common.txt b/sym_common.txt index a17212d58..4049c48f5 100644 --- a/sym_common.txt +++ b/sym_common.txt @@ -133,8 +133,8 @@ gUnknown_3004FFC: @ 3004FFC .space 0x4 .include "random.o" + .align 2 - gUnknown_3005004: @ 3005004 .space 0x4 From 7ee367e18e45c996a4ffbf5ff9e9374a1859f377 Mon Sep 17 00:00:00 2001 From: SatoMew Date: Sat, 6 Oct 2018 18:32:26 +0100 Subject: [PATCH 04/13] Fix ld_script.txt --- ld_script.txt | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/ld_script.txt b/ld_script.txt index 1e1d66fbb..33b77351a 100644 --- a/ld_script.txt +++ b/ld_script.txt @@ -82,7 +82,7 @@ SECTIONS { asm/pokemon_item_effect.o(.text); asm/pokemon_3.o(.text); asm/trig.o(.text); - asm/random.o(.text); + src/random.o(.text); asm/util.o(.text); asm/blend_palette.o(.text); asm/daycare.o(.text); From 9236084ad807cc1d2062d87217beb82a874119ec Mon Sep 17 00:00:00 2001 From: ProjectRevoTPP Date: Sat, 6 Oct 2018 16:40:08 -0400 Subject: [PATCH 05/13] finish decompiling text.c --- asm/help_system.s | 4 +- asm/text.s | 1108 --------------------------------------------- data/text.s | 42 +- ld_script.txt | 1 - src/text.c | 433 +++++++++++++++++- 5 files changed, 454 insertions(+), 1134 deletions(-) delete mode 100644 asm/text.s diff --git a/asm/help_system.s b/asm/help_system.s index 9a447ebbe..21ae494aa 100644 --- a/asm/help_system.s +++ b/asm/help_system.s @@ -1322,7 +1322,7 @@ _0813C2D4: bl GetKeypadIconTileOffset lsls r0, 24 lsrs r0, 19 - ldr r1, _0813C344 @ =gUnknown_81EA700 + ldr r1, _0813C344 @ =gKeypadIconTiles adds r0, r1 str r0, [sp, 0x14] add r1, sp, 0x14 @@ -1365,7 +1365,7 @@ _0813C2D4: bl GetKeypadIconWidth b _0813C38E .align 2, 0 -_0813C344: .4byte gUnknown_81EA700 +_0813C344: .4byte gKeypadIconTiles _0813C348: mov r0, r9 ldrb r1, [r0] diff --git a/asm/text.s b/asm/text.s deleted file mode 100644 index 4c554ae88..000000000 --- a/asm/text.s +++ /dev/null @@ -1,1108 +0,0 @@ - .include "asm/macros.inc" - .include "constants/constants.inc" - - .syntax unified - - .text - - thumb_func_start sub_80062B0 -sub_80062B0: @ 80062B0 - push {lr} - adds r1, r0, 0 - ldrh r0, [r1, 0x2E] - movs r3, 0x2E - ldrsh r2, [r1, r3] - cmp r2, 0 - beq _080062C4 - subs r0, 0x1 - strh r0, [r1, 0x2E] - b _080062FA -_080062C4: - movs r0, 0x8 - strh r0, [r1, 0x2E] - movs r3, 0x30 - ldrsh r0, [r1, r3] - cmp r0, 0x1 - beq _080062E8 - cmp r0, 0x1 - bgt _080062DA - cmp r0, 0 - beq _080062E4 - b _080062F4 -_080062DA: - cmp r0, 0x2 - beq _080062E8 - cmp r0, 0x3 - beq _080062EC - b _080062F4 -_080062E4: - strh r2, [r1, 0x26] - b _080062F4 -_080062E8: - strh r0, [r1, 0x26] - b _080062F4 -_080062EC: - movs r0, 0x1 - strh r0, [r1, 0x26] - strh r2, [r1, 0x30] - b _080062FA -_080062F4: - ldrh r0, [r1, 0x30] - adds r0, 0x1 - strh r0, [r1, 0x30] -_080062FA: - pop {r0} - bx r0 - thumb_func_end sub_80062B0 - - thumb_func_start sub_8006300 -sub_8006300: @ 8006300 - push {r4-r6,lr} - mov r6, r8 - push {r6} - adds r4, r1, 0 - adds r5, r2, 0 - adds r6, r3, 0 - ldr r1, [sp, 0x14] - lsls r0, 24 - lsrs r0, 24 - lsls r4, 16 - lsrs r4, 16 - lsls r5, 16 - lsrs r5, 16 - lsls r6, 24 - lsrs r6, 24 - lsls r1, 24 - lsrs r1, 24 - mov r8, r1 - movs r1, 0x1 - ands r0, r1 - lsls r0, 3 - ldr r1, _08006388 @ =gUnknown_81EA68C - adds r0, r1 - bl LoadSpriteSheet - ldr r0, _0800638C @ =gUnknown_81EA6A4 - bl LoadSpritePalette - ldr r0, _08006390 @ =gUnknown_81EA6B4 - adds r4, 0x3 - lsls r4, 16 - asrs r4, 16 - adds r5, 0x4 - lsls r5, 16 - asrs r5, 16 - adds r1, r4, 0 - adds r2, r5, 0 - mov r3, r8 - bl CreateSprite - lsls r0, 24 - lsrs r0, 24 - ldr r1, _08006394 @ =gSprites - lsls r2, r0, 4 - adds r2, r0 - lsls r2, 2 - adds r2, r1 - movs r1, 0x3 - ands r6, r1 - lsls r6, 2 - ldrb r3, [r2, 0x5] - subs r1, 0x10 - ands r1, r3 - orrs r1, r6 - strb r1, [r2, 0x5] - ldrb r3, [r2, 0x3] - movs r1, 0x3F - negs r1, r1 - ands r1, r3 - strb r1, [r2, 0x3] - movs r1, 0x8 - strh r1, [r2, 0x2E] - pop {r3} - mov r8, r3 - pop {r4-r6} - pop {r1} - bx r1 - .align 2, 0 -_08006388: .4byte gUnknown_81EA68C -_0800638C: .4byte gUnknown_81EA6A4 -_08006390: .4byte gUnknown_81EA6B4 -_08006394: .4byte gSprites - thumb_func_end sub_8006300 - - thumb_func_start sub_8006398 -sub_8006398: @ 8006398 - push {r4,lr} - adds r1, r0, 0 - lsls r1, 24 - lsrs r1, 24 - lsls r0, r1, 4 - adds r0, r1 - lsls r0, 2 - ldr r1, _080063C4 @ =gSprites - adds r0, r1 - bl DestroySprite - movs r4, 0x80 - lsls r4, 8 - adds r0, r4, 0 - bl FreeSpriteTilesByTag - adds r0, r4, 0 - bl FreeSpritePaletteByTag - pop {r4} - pop {r0} - bx r0 - .align 2, 0 -_080063C4: .4byte gSprites - thumb_func_end sub_8006398 - - thumb_func_start DrawKeypadIcon -DrawKeypadIcon: @ 80063C8 - push {r4,r5,lr} - sub sp, 0x18 - lsls r0, 24 - lsrs r0, 24 - lsls r1, 24 - lsls r2, 16 - lsrs r2, 16 - lsls r3, 16 - lsrs r3, 16 - ldr r4, _08006410 @ =gUnknown_81EA6CC - lsrs r1, 22 - adds r1, r4 - ldrh r5, [r1] - lsls r5, 5 - ldr r4, _08006414 @ =gUnknown_81EA700 - adds r5, r4 - movs r4, 0x80 - str r4, [sp] - str r4, [sp, 0x4] - str r2, [sp, 0x8] - str r3, [sp, 0xC] - ldrb r4, [r1, 0x2] - str r4, [sp, 0x10] - ldrb r1, [r1, 0x3] - str r1, [sp, 0x14] - adds r1, r5, 0 - movs r2, 0 - movs r3, 0 - bl BlitBitmapRectToWindow - adds r0, r4, 0 - add sp, 0x18 - pop {r4,r5} - pop {r1} - bx r1 - .align 2, 0 -_08006410: .4byte gUnknown_81EA6CC -_08006414: .4byte gUnknown_81EA700 - thumb_func_end DrawKeypadIcon - - thumb_func_start GetKeypadIconTileOffset -GetKeypadIconTileOffset: @ 8006418 - lsls r0, 24 - ldr r1, _08006424 @ =gUnknown_81EA6CC - lsrs r0, 22 - adds r0, r1 - ldrb r0, [r0] - bx lr - .align 2, 0 -_08006424: .4byte gUnknown_81EA6CC - thumb_func_end GetKeypadIconTileOffset - - thumb_func_start GetKeypadIconWidth -GetKeypadIconWidth: @ 8006428 - lsls r0, 24 - ldr r1, _08006434 @ =gUnknown_81EA6CC - lsrs r0, 22 - adds r0, r1 - ldrb r0, [r0, 0x2] - bx lr - .align 2, 0 -_08006434: .4byte gUnknown_81EA6CC - thumb_func_end GetKeypadIconWidth - - thumb_func_start GetKeypadIconHeight -GetKeypadIconHeight: @ 8006438 - lsls r0, 24 - ldr r1, _08006444 @ =gUnknown_81EA6CC - lsrs r0, 22 - adds r0, r1 - ldrb r0, [r0, 0x3] - bx lr - .align 2, 0 -_08006444: .4byte gUnknown_81EA6CC - thumb_func_end GetKeypadIconHeight - - thumb_func_start DecompressGlyphFont0 -DecompressGlyphFont0: @ 8006448 - push {r4-r6,lr} - lsls r0, 16 - lsrs r6, r0, 16 - cmp r1, 0x1 - bne _08006490 - lsrs r2, r0, 20 - lsls r2, 9 - movs r0, 0xF - ands r0, r6 - lsls r0, 4 - ldr r1, _08006488 @ =gUnknown_81EF100 - adds r0, r1 - adds r5, r2, r0 - ldr r4, _0800648C @ =gGlyphInfo - adds r0, r5, 0 - adds r1, r4, 0 - bl DecompressGlyphTile - movs r1, 0x80 - lsls r1, 1 - adds r0, r5, r1 - adds r1, r4, 0 - adds r1, 0x40 - bl DecompressGlyphTile - adds r1, r4, 0 - adds r1, 0x80 - movs r0, 0x8 - strb r0, [r1] - adds r4, 0x81 - movs r0, 0xC - b _080064BC - .align 2, 0 -_08006488: .4byte gUnknown_81EF100 -_0800648C: .4byte gGlyphInfo -_08006490: - lsls r1, r6, 5 - ldr r0, _080064C4 @ =gUnknown_81EAF00 - adds r5, r1, r0 - ldr r4, _080064C8 @ =gGlyphInfo - adds r0, r5, 0 - adds r1, r4, 0 - bl DecompressGlyphTile - adds r0, r5, 0 - adds r0, 0x10 - adds r1, r4, 0 - adds r1, 0x40 - bl DecompressGlyphTile - ldr r0, _080064CC @ =gUnknown_81EEF00 - adds r0, r6, r0 - ldrb r1, [r0] - adds r0, r4, 0 - adds r0, 0x80 - strb r1, [r0] - adds r4, 0x81 - movs r0, 0xD -_080064BC: - strb r0, [r4] - pop {r4-r6} - pop {r0} - bx r0 - .align 2, 0 -_080064C4: .4byte gUnknown_81EAF00 -_080064C8: .4byte gGlyphInfo -_080064CC: .4byte gUnknown_81EEF00 - thumb_func_end DecompressGlyphFont0 - - thumb_func_start GetGlyphWidthFont0 -GetGlyphWidthFont0: @ 80064D0 - push {lr} - lsls r0, 16 - lsrs r2, r0, 16 - cmp r1, 0x1 - beq _080064E8 - ldr r0, _080064E4 @ =gUnknown_81EEF00 - adds r0, r2, r0 - ldrb r0, [r0] - b _080064EA - .align 2, 0 -_080064E4: .4byte gUnknown_81EEF00 -_080064E8: - movs r0, 0x8 -_080064EA: - pop {r1} - bx r1 - thumb_func_end GetGlyphWidthFont0 - - thumb_func_start DecompressGlyphFont1 -DecompressGlyphFont1: @ 80064F0 - push {r4-r6,lr} - lsls r0, 16 - lsrs r6, r0, 16 - cmp r1, 0x1 - bne _0800653C - lsrs r2, r0, 20 - lsls r2, 9 - movs r0, 0xF - ands r0, r6 - lsls r0, 4 - ldr r1, _08006534 @ =gUnknown_81FB300 - adds r0, r1 - adds r5, r2, r0 - ldr r4, _08006538 @ =gGlyphInfo - adds r0, r5, 0 - adds r1, r4, 0 - bl DecompressGlyphTile - movs r1, 0x80 - lsls r1, 1 - adds r0, r5, r1 - adds r1, r4, 0 - adds r1, 0x40 - bl DecompressGlyphTile - adds r1, r4, 0 - adds r1, 0x80 - movs r0, 0x8 - strb r0, [r1] - adds r4, 0x81 - movs r0, 0x10 - strb r0, [r4] - b _08006584 - .align 2, 0 -_08006534: .4byte gUnknown_81FB300 -_08006538: .4byte gGlyphInfo -_0800653C: - lsls r1, r6, 6 - ldr r0, _0800658C @ =gUnknown_81F3100 - adds r5, r1, r0 - ldr r4, _08006590 @ =gGlyphInfo - adds r0, r5, 0 - adds r1, r4, 0 - bl DecompressGlyphTile - adds r0, r5, 0 - adds r0, 0x10 - adds r1, r4, 0 - adds r1, 0x20 - bl DecompressGlyphTile - adds r0, r5, 0 - adds r0, 0x20 - adds r1, r4, 0 - adds r1, 0x40 - bl DecompressGlyphTile - adds r0, r5, 0 - adds r0, 0x30 - adds r1, r4, 0 - adds r1, 0x60 - bl DecompressGlyphTile - ldr r0, _08006594 @ =gUnknown_81FB100 - adds r0, r6, r0 - ldrb r1, [r0] - adds r0, r4, 0 - adds r0, 0x80 - strb r1, [r0] - adds r1, r4, 0 - adds r1, 0x81 - movs r0, 0xE - strb r0, [r1] -_08006584: - pop {r4-r6} - pop {r0} - bx r0 - .align 2, 0 -_0800658C: .4byte gUnknown_81F3100 -_08006590: .4byte gGlyphInfo -_08006594: .4byte gUnknown_81FB100 - thumb_func_end DecompressGlyphFont1 - - thumb_func_start GetGlyphWidthFont1 -GetGlyphWidthFont1: @ 8006598 - push {lr} - lsls r0, 16 - lsrs r2, r0, 16 - cmp r1, 0x1 - beq _080065B0 - ldr r0, _080065AC @ =gUnknown_81FB100 - adds r0, r2, r0 - ldrb r0, [r0] - b _080065B2 - .align 2, 0 -_080065AC: .4byte gUnknown_81FB100 -_080065B0: - movs r0, 0x8 -_080065B2: - pop {r1} - bx r1 - thumb_func_end GetGlyphWidthFont1 - - thumb_func_start DecompressGlyphFont2 -DecompressGlyphFont2: @ 80065B8 - push {r4-r7,lr} - lsls r0, 16 - lsrs r6, r0, 16 - cmp r1, 0x1 - bne _0800665C - cmp r6, 0 - bne _080065F8 - movs r0, 0x2 - bl GetLastTextColor - lsls r0, 24 - lsrs r0, 24 - movs r1, 0 - ldr r3, _080065F4 @ =gGlyphInfo - lsls r2, r0, 4 - orrs r2, r0 - adds r7, r3, 0 - adds r7, 0x80 - movs r6, 0xA - adds r5, r3, 0 - adds r5, 0x81 - movs r4, 0xC -_080065E4: - adds r0, r1, r3 - strb r2, [r0] - strb r6, [r7] - strb r4, [r5] - adds r1, 0x1 - cmp r1, 0x7F - ble _080065E4 - b _080066E4 - .align 2, 0 -_080065F4: .4byte gGlyphInfo -_080065F8: - lsrs r2, r0, 19 - lsls r2, 9 - movs r0, 0x7 - ands r0, r6 - lsls r0, 5 - ldr r1, _08006650 @ =gUnknown_8207500 - adds r0, r1 - adds r4, r2, r0 - ldr r5, _08006654 @ =gGlyphInfo - adds r0, r4, 0 - adds r1, r5, 0 - bl DecompressGlyphTile - adds r0, r4, 0 - adds r0, 0x10 - adds r1, r5, 0 - adds r1, 0x20 - bl DecompressGlyphTile - movs r1, 0x80 - lsls r1, 1 - adds r0, r4, r1 - adds r1, r5, 0 - adds r1, 0x40 - bl DecompressGlyphTile - movs r1, 0x88 - lsls r1, 1 - adds r0, r4, r1 - adds r1, r5, 0 - adds r1, 0x60 - bl DecompressGlyphTile - ldr r0, _08006658 @ =gUnknown_820F500 - adds r0, r6, r0 - ldrb r1, [r0] - adds r0, r5, 0 - adds r0, 0x80 - strb r1, [r0] - adds r1, r5, 0 - adds r1, 0x81 - movs r0, 0xC - b _080066E2 - .align 2, 0 -_08006650: .4byte gUnknown_8207500 -_08006654: .4byte gGlyphInfo -_08006658: .4byte gUnknown_820F500 -_0800665C: - cmp r6, 0 - bne _0800669C - movs r0, 0x2 - bl GetLastTextColor - lsls r0, 24 - lsrs r0, 24 - movs r1, 0 - ldr r3, _08006694 @ =gGlyphInfo - lsls r2, r0, 4 - orrs r2, r0 - ldr r0, _08006698 @ =gUnknown_8207300 - ldrb r4, [r0] - movs r0, 0x81 - adds r0, r3 - mov r12, r0 - adds r6, r3, 0 - adds r6, 0x80 - movs r5, 0xE -_08006682: - adds r0, r1, r3 - strb r2, [r0] - strb r4, [r6] - mov r0, r12 - strb r5, [r0] - adds r1, 0x1 - cmp r1, 0x7F - ble _08006682 - b _080066E4 - .align 2, 0 -_08006694: .4byte gGlyphInfo -_08006698: .4byte gUnknown_8207300 -_0800669C: - lsls r1, r6, 6 - ldr r0, _080066EC @ =gUnknown_81FF300 - adds r4, r1, r0 - ldr r5, _080066F0 @ =gGlyphInfo - adds r0, r4, 0 - adds r1, r5, 0 - bl DecompressGlyphTile - adds r0, r4, 0 - adds r0, 0x10 - adds r1, r5, 0 - adds r1, 0x20 - bl DecompressGlyphTile - adds r0, r4, 0 - adds r0, 0x20 - adds r1, r5, 0 - adds r1, 0x40 - bl DecompressGlyphTile - adds r0, r4, 0 - adds r0, 0x30 - adds r1, r5, 0 - adds r1, 0x60 - bl DecompressGlyphTile - ldr r0, _080066F4 @ =gUnknown_8207300 - adds r0, r6, r0 - ldrb r1, [r0] - adds r0, r5, 0 - adds r0, 0x80 - strb r1, [r0] - adds r1, r5, 0 - adds r1, 0x81 - movs r0, 0xE -_080066E2: - strb r0, [r1] -_080066E4: - pop {r4-r7} - pop {r0} - bx r0 - .align 2, 0 -_080066EC: .4byte gUnknown_81FF300 -_080066F0: .4byte gGlyphInfo -_080066F4: .4byte gUnknown_8207300 - thumb_func_end DecompressGlyphFont2 - - thumb_func_start GetGlyphWidthFont2 -GetGlyphWidthFont2: @ 80066F8 - push {lr} - lsls r0, 16 - lsrs r2, r0, 16 - cmp r1, 0x1 - bne _08006714 - cmp r2, 0 - bne _0800670A - movs r0, 0xA - b _0800671A -_0800670A: - ldr r0, _08006710 @ =gUnknown_820F500 - b _08006716 - .align 2, 0 -_08006710: .4byte gUnknown_820F500 -_08006714: - ldr r0, _08006720 @ =gUnknown_8207300 -_08006716: - adds r0, r2, r0 - ldrb r0, [r0] -_0800671A: - pop {r1} - bx r1 - .align 2, 0 -_08006720: .4byte gUnknown_8207300 - thumb_func_end GetGlyphWidthFont2 - - thumb_func_start DecompressGlyphFont3 -DecompressGlyphFont3: @ 8006724 - push {r4-r7,lr} - lsls r0, 16 - lsrs r3, r0, 16 - cmp r1, 0x1 - bne _080067C0 - cmp r3, 0 - bne _08006764 - movs r0, 0x2 - bl GetLastTextColor - lsls r0, 24 - lsrs r0, 24 - movs r1, 0 - ldr r3, _08006760 @ =gGlyphInfo - lsls r2, r0, 4 - orrs r2, r0 - adds r7, r3, 0 - adds r7, 0x80 - movs r6, 0xA - adds r5, r3, 0 - adds r5, 0x81 - movs r4, 0xC -_08006750: - adds r0, r1, r3 - strb r2, [r0] - strb r6, [r7] - strb r4, [r5] - adds r1, 0x1 - cmp r1, 0x7F - ble _08006750 - b _080067C6 - .align 2, 0 -_08006760: .4byte gGlyphInfo -_08006764: - lsrs r2, r0, 19 - lsls r2, 9 - movs r0, 0x7 - ands r0, r3 - lsls r0, 5 - ldr r1, _080067B8 @ =gUnknown_8207500 - adds r0, r1 - adds r5, r2, r0 - ldr r4, _080067BC @ =gGlyphInfo - adds r0, r5, 0 - adds r1, r4, 0 - bl DecompressGlyphTile - adds r0, r5, 0 - adds r0, 0x10 - adds r1, r4, 0 - adds r1, 0x20 - bl DecompressGlyphTile - movs r1, 0x80 - lsls r1, 1 - adds r0, r5, r1 - adds r1, r4, 0 - adds r1, 0x40 - bl DecompressGlyphTile - movs r1, 0x88 - lsls r1, 1 - adds r0, r5, r1 - adds r1, r4, 0 - adds r1, 0x60 - bl DecompressGlyphTile - adds r1, r4, 0 - adds r1, 0x80 - movs r0, 0xA - strb r0, [r1] - adds r1, 0x1 - movs r0, 0xC - strb r0, [r1] - b _080067C6 - .align 2, 0 -_080067B8: .4byte gUnknown_8207500 -_080067BC: .4byte gGlyphInfo -_080067C0: - adds r0, r3, 0 - bl DecompressGlyphFont2 -_080067C6: - pop {r4-r7} - pop {r0} - bx r0 - thumb_func_end DecompressGlyphFont3 - - thumb_func_start GetGlyphWidthFont3 -GetGlyphWidthFont3: @ 80067CC - push {lr} - lsls r0, 16 - lsrs r2, r0, 16 - cmp r1, 0x1 - beq _080067E4 - ldr r0, _080067E0 @ =gUnknown_8207300 - adds r0, r2, r0 - ldrb r0, [r0] - b _080067E6 - .align 2, 0 -_080067E0: .4byte gUnknown_8207300 -_080067E4: - movs r0, 0xA -_080067E6: - pop {r1} - bx r1 - thumb_func_end GetGlyphWidthFont3 - - thumb_func_start DecompressGlyphFont4 -DecompressGlyphFont4: @ 80067EC - push {r4-r7,lr} - lsls r0, 16 - lsrs r6, r0, 16 - cmp r1, 0x1 - bne _08006890 - cmp r6, 0 - bne _0800682C - movs r0, 0x2 - bl GetLastTextColor - lsls r0, 24 - lsrs r0, 24 - movs r1, 0 - ldr r3, _08006828 @ =gGlyphInfo - lsls r2, r0, 4 - orrs r2, r0 - adds r7, r3, 0 - adds r7, 0x80 - movs r6, 0xA - adds r5, r3, 0 - adds r5, 0x81 - movs r4, 0xC -_08006818: - adds r0, r1, r3 - strb r2, [r0] - strb r6, [r7] - strb r4, [r5] - adds r1, 0x1 - cmp r1, 0x7F - ble _08006818 - b _08006918 - .align 2, 0 -_08006828: .4byte gGlyphInfo -_0800682C: - lsrs r2, r0, 19 - lsls r2, 9 - movs r0, 0x7 - ands r0, r6 - lsls r0, 5 - ldr r1, _08006884 @ =gUnknown_8217818 - adds r0, r1 - adds r4, r2, r0 - ldr r5, _08006888 @ =gGlyphInfo - adds r0, r4, 0 - adds r1, r5, 0 - bl DecompressGlyphTile - adds r0, r4, 0 - adds r0, 0x10 - adds r1, r5, 0 - adds r1, 0x20 - bl DecompressGlyphTile - movs r1, 0x80 - lsls r1, 1 - adds r0, r4, r1 - adds r1, r5, 0 - adds r1, 0x40 - bl DecompressGlyphTile - movs r1, 0x88 - lsls r1, 1 - adds r0, r4, r1 - adds r1, r5, 0 - adds r1, 0x60 - bl DecompressGlyphTile - ldr r0, _0800688C @ =gUnknown_821F818 - adds r0, r6, r0 - ldrb r1, [r0] - adds r0, r5, 0 - adds r0, 0x80 - strb r1, [r0] - adds r1, r5, 0 - adds r1, 0x81 - movs r0, 0xC - b _08006916 - .align 2, 0 -_08006884: .4byte gUnknown_8217818 -_08006888: .4byte gGlyphInfo -_0800688C: .4byte gUnknown_821F818 -_08006890: - cmp r6, 0 - bne _080068D0 - movs r0, 0x2 - bl GetLastTextColor - lsls r0, 24 - lsrs r0, 24 - movs r1, 0 - ldr r3, _080068C8 @ =gGlyphInfo - lsls r2, r0, 4 - orrs r2, r0 - ldr r0, _080068CC @ =gUnknown_8217618 - ldrb r4, [r0] - movs r0, 0x81 - adds r0, r3 - mov r12, r0 - adds r6, r3, 0 - adds r6, 0x80 - movs r5, 0xE -_080068B6: - adds r0, r1, r3 - strb r2, [r0] - strb r4, [r6] - mov r0, r12 - strb r5, [r0] - adds r1, 0x1 - cmp r1, 0x7F - ble _080068B6 - b _08006918 - .align 2, 0 -_080068C8: .4byte gGlyphInfo -_080068CC: .4byte gUnknown_8217618 -_080068D0: - lsls r1, r6, 6 - ldr r0, _08006920 @ =gUnknown_820F618 - adds r4, r1, r0 - ldr r5, _08006924 @ =gGlyphInfo - adds r0, r4, 0 - adds r1, r5, 0 - bl DecompressGlyphTile - adds r0, r4, 0 - adds r0, 0x10 - adds r1, r5, 0 - adds r1, 0x20 - bl DecompressGlyphTile - adds r0, r4, 0 - adds r0, 0x20 - adds r1, r5, 0 - adds r1, 0x40 - bl DecompressGlyphTile - adds r0, r4, 0 - adds r0, 0x30 - adds r1, r5, 0 - adds r1, 0x60 - bl DecompressGlyphTile - ldr r0, _08006928 @ =gUnknown_8217618 - adds r0, r6, r0 - ldrb r1, [r0] - adds r0, r5, 0 - adds r0, 0x80 - strb r1, [r0] - adds r1, r5, 0 - adds r1, 0x81 - movs r0, 0xE -_08006916: - strb r0, [r1] -_08006918: - pop {r4-r7} - pop {r0} - bx r0 - .align 2, 0 -_08006920: .4byte gUnknown_820F618 -_08006924: .4byte gGlyphInfo -_08006928: .4byte gUnknown_8217618 - thumb_func_end DecompressGlyphFont4 - - thumb_func_start GetGlyphWidthFont4 -GetGlyphWidthFont4: @ 800692C - push {lr} - lsls r0, 16 - lsrs r2, r0, 16 - cmp r1, 0x1 - bne _08006948 - cmp r2, 0 - bne _0800693E - movs r0, 0xA - b _0800694E -_0800693E: - ldr r0, _08006944 @ =gUnknown_821F818 - b _0800694A - .align 2, 0 -_08006944: .4byte gUnknown_821F818 -_08006948: - ldr r0, _08006954 @ =gUnknown_8217618 -_0800694A: - adds r0, r2, r0 - ldrb r0, [r0] -_0800694E: - pop {r1} - bx r1 - .align 2, 0 -_08006954: .4byte gUnknown_8217618 - thumb_func_end GetGlyphWidthFont4 - - thumb_func_start DecompressGlyphFont5 -DecompressGlyphFont5: @ 8006958 - push {r4-r7,lr} - lsls r0, 16 - lsrs r6, r0, 16 - cmp r1, 0x1 - bne _080069FC - cmp r6, 0 - bne _08006998 - movs r0, 0x2 - bl GetLastTextColor - lsls r0, 24 - lsrs r0, 24 - movs r1, 0 - ldr r3, _08006994 @ =gGlyphInfo - lsls r2, r0, 4 - orrs r2, r0 - adds r7, r3, 0 - adds r7, 0x80 - movs r6, 0xA - adds r5, r3, 0 - adds r5, 0x81 - movs r4, 0xC -_08006984: - adds r0, r1, r3 - strb r2, [r0] - strb r6, [r7] - strb r4, [r5] - adds r1, 0x1 - cmp r1, 0x7F - ble _08006984 - b _08006A84 - .align 2, 0 -_08006994: .4byte gGlyphInfo -_08006998: - lsrs r2, r0, 19 - lsls r2, 9 - movs r0, 0x7 - ands r0, r6 - lsls r0, 5 - ldr r1, _080069F0 @ =gUnknown_8227B30 - adds r0, r1 - adds r4, r2, r0 - ldr r5, _080069F4 @ =gGlyphInfo - adds r0, r4, 0 - adds r1, r5, 0 - bl DecompressGlyphTile - adds r0, r4, 0 - adds r0, 0x10 - adds r1, r5, 0 - adds r1, 0x20 - bl DecompressGlyphTile - movs r1, 0x80 - lsls r1, 1 - adds r0, r4, r1 - adds r1, r5, 0 - adds r1, 0x40 - bl DecompressGlyphTile - movs r1, 0x88 - lsls r1, 1 - adds r0, r4, r1 - adds r1, r5, 0 - adds r1, 0x60 - bl DecompressGlyphTile - ldr r0, _080069F8 @ =gUnknown_822FB30 - adds r0, r6, r0 - ldrb r1, [r0] - adds r0, r5, 0 - adds r0, 0x80 - strb r1, [r0] - adds r1, r5, 0 - adds r1, 0x81 - movs r0, 0xC - b _08006A82 - .align 2, 0 -_080069F0: .4byte gUnknown_8227B30 -_080069F4: .4byte gGlyphInfo -_080069F8: .4byte gUnknown_822FB30 -_080069FC: - cmp r6, 0 - bne _08006A3C - movs r0, 0x2 - bl GetLastTextColor - lsls r0, 24 - lsrs r0, 24 - movs r1, 0 - ldr r3, _08006A34 @ =gGlyphInfo - lsls r2, r0, 4 - orrs r2, r0 - ldr r0, _08006A38 @ =gUnknown_8227930 - ldrb r4, [r0] - movs r0, 0x81 - adds r0, r3 - mov r12, r0 - adds r6, r3, 0 - adds r6, 0x80 - movs r5, 0xE -_08006A22: - adds r0, r1, r3 - strb r2, [r0] - strb r4, [r6] - mov r0, r12 - strb r5, [r0] - adds r1, 0x1 - cmp r1, 0x7F - ble _08006A22 - b _08006A84 - .align 2, 0 -_08006A34: .4byte gGlyphInfo -_08006A38: .4byte gUnknown_8227930 -_08006A3C: - lsls r1, r6, 6 - ldr r0, _08006A8C @ =gUnknown_821F930 - adds r4, r1, r0 - ldr r5, _08006A90 @ =gGlyphInfo - adds r0, r4, 0 - adds r1, r5, 0 - bl DecompressGlyphTile - adds r0, r4, 0 - adds r0, 0x10 - adds r1, r5, 0 - adds r1, 0x20 - bl DecompressGlyphTile - adds r0, r4, 0 - adds r0, 0x20 - adds r1, r5, 0 - adds r1, 0x40 - bl DecompressGlyphTile - adds r0, r4, 0 - adds r0, 0x30 - adds r1, r5, 0 - adds r1, 0x60 - bl DecompressGlyphTile - ldr r0, _08006A94 @ =gUnknown_8227930 - adds r0, r6, r0 - ldrb r1, [r0] - adds r0, r5, 0 - adds r0, 0x80 - strb r1, [r0] - adds r1, r5, 0 - adds r1, 0x81 - movs r0, 0xE -_08006A82: - strb r0, [r1] -_08006A84: - pop {r4-r7} - pop {r0} - bx r0 - .align 2, 0 -_08006A8C: .4byte gUnknown_821F930 -_08006A90: .4byte gGlyphInfo -_08006A94: .4byte gUnknown_8227930 - thumb_func_end DecompressGlyphFont5 - - thumb_func_start GetGlyphWidthFont5 -GetGlyphWidthFont5: @ 8006A98 - push {lr} - lsls r0, 16 - lsrs r2, r0, 16 - cmp r1, 0x1 - bne _08006AB4 - cmp r2, 0 - bne _08006AAA - movs r0, 0xA - b _08006ABA -_08006AAA: - ldr r0, _08006AB0 @ =gUnknown_822FB30 - b _08006AB6 - .align 2, 0 -_08006AB0: .4byte gUnknown_822FB30 -_08006AB4: - ldr r0, _08006AC0 @ =gUnknown_8227930 -_08006AB6: - adds r0, r2, r0 - ldrb r0, [r0] -_08006ABA: - pop {r1} - bx r1 - .align 2, 0 -_08006AC0: .4byte gUnknown_8227930 - thumb_func_end GetGlyphWidthFont5 - - thumb_func_start DecompressGlyphFont9 -DecompressGlyphFont9: @ 8006AC4 - push {r4,r5,lr} - lsls r0, 16 - lsrs r4, r0, 20 - lsls r4, 9 - movs r1, 0xF0 - lsls r1, 12 - ands r1, r0 - lsrs r1, 12 - ldr r0, _08006B08 @ =gUnknown_822FC48 - adds r1, r0 - adds r4, r1 - ldr r5, _08006B0C @ =gGlyphInfo - adds r0, r4, 0 - adds r1, r5, 0 - bl DecompressGlyphTile - movs r0, 0x80 - lsls r0, 1 - adds r4, r0 - adds r1, r5, 0 - adds r1, 0x40 - adds r0, r4, 0 - bl DecompressGlyphTile - adds r1, r5, 0 - adds r1, 0x80 - movs r0, 0x8 - strb r0, [r1] - adds r5, 0x81 - movs r0, 0xC - strb r0, [r5] - pop {r4,r5} - pop {r0} - bx r0 - .align 2, 0 -_08006B08: .4byte gUnknown_822FC48 -_08006B0C: .4byte gGlyphInfo - thumb_func_end DecompressGlyphFont9 - - .align 2, 0 @ Don't pad with nop. diff --git a/data/text.s b/data/text.s index c9948aef5..b44badaa2 100644 --- a/data/text.s +++ b/data/text.s @@ -24,65 +24,65 @@ gUnknown_81EA6A4:: @ 81EA6A4 gUnknown_81EA6B4:: @ 81EA6B4 .incbin "baserom.gba", 0x1EA6B4, 0x18 -gUnknown_81EA6CC:: @ 81EA6CC +gKeypadIcons:: @ 81EA6CC .incbin "baserom.gba", 0x1EA6CC, 0x34 -gUnknown_81EA700:: @ 81EA700 +gKeypadIconTiles:: @ 81EA700 .incbin "baserom.gba", 0x1EA700, 0x800 -gUnknown_81EAF00:: @ 81EAF00 +gFont0LatinGlyphs:: @ 81EAF00 .incbin "baserom.gba", 0x1EAF00, 0x4000 -gUnknown_81EEF00:: @ 81EEF00 +gFont0LatinGlyphWidths:: @ 81EEF00 .incbin "baserom.gba", 0x1EEF00, 0x200 -gUnknown_81EF100:: @ 81EF100 +gFont0JapaneseGlyphs:: @ 81EF100 .incbin "baserom.gba", 0x1EF100, 0x4000 -gUnknown_81F3100:: @ 81F3100 +gFont1LatinGlyphs:: @ 81F3100 .incbin "baserom.gba", 0x1F3100, 0x8000 -gUnknown_81FB100:: @ 81FB100 +gFont1LatinGlyphWidths:: @ 81FB100 .incbin "baserom.gba", 0x1FB100, 0x200 -gUnknown_81FB300:: @ 81FB300 +gFont1JapaneseGlyphs:: @ 81FB300 .incbin "baserom.gba", 0x1FB300, 0x4000 -gUnknown_81FF300:: @ 81FF300 +gFont2LatinGlyphs:: @ 81FF300 .incbin "baserom.gba", 0x1FF300, 0x8000 -gUnknown_8207300:: @ 8207300 +gFont2LatinGlyphWidths:: @ 8207300 .incbin "baserom.gba", 0x207300, 0x200 -gUnknown_8207500:: @ 8207500 +gFont2JapaneseGlyphs:: @ 8207500 .incbin "baserom.gba", 0x207500, 0x8000 -gUnknown_820F500:: @ 820F500 +gFont2JapaneseGlyphWidths:: @ 820F500 .incbin "baserom.gba", 0x20F500, 0x118 -gUnknown_820F618:: @ 820F618 +gFont4LatinGlyphs:: @ 820F618 .incbin "baserom.gba", 0x20F618, 0x8000 -gUnknown_8217618:: @ 8217618 +gFont4LatinGlyphWidths:: @ 8217618 .incbin "baserom.gba", 0x217618, 0x200 -gUnknown_8217818:: @ 8217818 +gFont4JapaneseGlyphs:: @ 8217818 .incbin "baserom.gba", 0x217818, 0x8000 -gUnknown_821F818:: @ 821F818 +gFont4JapaneseGlyphWidths:: @ 821F818 .incbin "baserom.gba", 0x21F818, 0x118 -gUnknown_821F930:: @ 821F930 +gFont5LatinGlyphs:: @ 821F930 .incbin "baserom.gba", 0x21F930, 0x8000 -gUnknown_8227930:: @ 8227930 +gFont5LatinGlyphWidths:: @ 8227930 .incbin "baserom.gba", 0x227930, 0x200 -gUnknown_8227B30:: @ 8227B30 +gFont5JapaneseGlyphs:: @ 8227B30 .incbin "baserom.gba", 0x227B30, 0x8000 -gUnknown_822FB30:: @ 822FB30 +gFont5JapaneseGlyphWidths:: @ 822FB30 .incbin "baserom.gba", 0x22FB30, 0x118 -gUnknown_822FC48:: @ 822FC48 +gFont9JapaneseGlyphs:: @ 822FC48 .incbin "baserom.gba", 0x22FC48, 0x2000 diff --git a/ld_script.txt b/ld_script.txt index 1e1d66fbb..cc38e017f 100644 --- a/ld_script.txt +++ b/ld_script.txt @@ -58,7 +58,6 @@ SECTIONS { asm/blit.o(.text); src/window_8bpp.o(.text); src/text.o(.text); - asm/text.o(.text); src/sprite.o(.text); src/string_util.o(.text); asm/link.o(.text); diff --git a/src/text.c b/src/text.c index 7832d86f3..bc5fd7a66 100644 --- a/src/text.c +++ b/src/text.c @@ -37,8 +37,6 @@ extern const struct FontInfo gFontInfos[]; extern const u8 gMenuCursorDimensions[][2]; -extern const u16 gFont9JapaneseGlyphs[]; - extern const u16 gFont8LatinGlyphs[]; extern const u8 gFont8LatinGlyphWidths[]; extern const u16 gFont0LatinGlyphs[]; @@ -53,6 +51,15 @@ extern const u16 gFont0JapaneseGlyphs[]; extern const u16 gFont1JapaneseGlyphs[]; extern const u16 gFont2JapaneseGlyphs[]; extern const u8 gFont2JapaneseGlyphWidths[]; +extern const u16 gFont4JapaneseGlyphs[]; +extern const u8 gFont4JapaneseGlyphWidths[]; +extern const u16 gFont4LatinGlyphs[]; +extern const u8 gFont4LatinGlyphWidths[]; +extern const u16 gFont5JapaneseGlyphs[]; +extern const u8 gFont5JapaneseGlyphWidths[]; +extern const u16 gFont5LatinGlyphs[]; +extern const u8 gFont5LatinGlyphWidths[]; +extern const u16 gFont9JapaneseGlyphs[]; u16 Font0Func(struct TextPrinter *textPrinter) { @@ -1438,3 +1445,425 @@ u8 RenderTextFont9(u8 *pixels, u8 fontId, u8 *str) RestoreTextColors(&colorBackup[0], &colorBackup[1], &colorBackup[2]); return 1; } + +// TODO: What is this? +struct Unk80062B0 { + u8 filler0[0x26]; + u16 unk26; + u8 filler28[0x6]; + s16 unk2E; + s16 unk30; +}; + +void sub_80062B0(struct Unk80062B0 *unkStruct) +{ + if(unkStruct->unk2E) + { + unkStruct->unk2E--; + } + else + { + unkStruct->unk2E = 8; + switch(unkStruct->unk30) + { + case 0: + unkStruct->unk26 = 0; + break; + case 1: + unkStruct->unk26 = 1; + break; + case 2: + unkStruct->unk26 = 2; + break; + case 3: + unkStruct->unk26 = 1; + unkStruct->unk30 = 0; + return; + } + unkStruct->unk30++; + } +} + +extern const struct SpriteSheet gUnknown_81EA68C[]; +extern const struct SpritePalette gUnknown_81EA6A4; +extern const struct SpriteTemplate gUnknown_81EA6B4; + +u8 sub_8006300(u8 sheetId, u16 x, u16 y, u8 priority, u8 subpriority) +{ + u8 spriteId; + LoadSpriteSheet(&gUnknown_81EA68C[sheetId & 1]); + LoadSpritePalette(&gUnknown_81EA6A4); + spriteId = CreateSprite(&gUnknown_81EA6B4, x + 3, y + 4, subpriority); + gSprites[spriteId].oam.priority = (priority & 3); + gSprites[spriteId].oam.matrixNum = 0; + gSprites[spriteId].data[0] = 8; + return spriteId; +} + +void sub_8006398(u8 spriteId) +{ + DestroySprite(&gSprites[spriteId]); + FreeSpriteTilesByTag(0x8000); + FreeSpritePaletteByTag(0x8000); +} + +u8 DrawKeypadIcon(u8 windowId, u8 keypadIconId, u16 x, u16 y) +{ + BlitBitmapRectToWindow( + windowId, + gKeypadIconTiles + (gKeypadIcons[keypadIconId].tile_offset * 0x20), + 0, + 0, + 0x80, + 0x80, + x, + y, + gKeypadIcons[keypadIconId].width, + gKeypadIcons[keypadIconId].height); + return gKeypadIcons[keypadIconId].width; +} + +u8 GetKeypadIconTileOffset(u8 keypadIconId) +{ + return gKeypadIcons[keypadIconId].tile_offset; +} + +u8 GetKeypadIconWidth(u8 keypadIconId) +{ + return gKeypadIcons[keypadIconId].width; +} + +u8 GetKeypadIconHeight(u8 keypadIconId) +{ + return gKeypadIcons[keypadIconId].height; +} + +void DecompressGlyphFont0(u16 glyphId, bool32 isJapanese) +{ + const u16* glyphs; + + if (isJapanese == 1) + { + glyphs = gFont0JapaneseGlyphs + (0x100 * (glyphId >> 0x4)) + (0x8 * (glyphId & 0xF)); + DecompressGlyphTile(glyphs, (u16 *)gGlyphInfo); + DecompressGlyphTile(glyphs + 0x80, (u16 *)(gGlyphInfo + 0x40)); + gGlyphInfo[0x80] = 8; // gGlyphWidth + gGlyphInfo[0x81] = 12; // gGlyphHeight + } + else + { + glyphs = gFont0LatinGlyphs + (0x10 * glyphId); + DecompressGlyphTile(glyphs, (u16 *)gGlyphInfo); + DecompressGlyphTile(glyphs + 0x8, (u16 *)(gGlyphInfo + 0x40)); + gGlyphInfo[0x80] = gFont0LatinGlyphWidths[glyphId]; + gGlyphInfo[0x81] = 13; + } +} + +u32 GetGlyphWidthFont0(u16 glyphId, bool32 isJapanese) +{ + if (isJapanese == TRUE) + return 8; + else + return gFont0LatinGlyphWidths[glyphId]; +} + +void DecompressGlyphFont1(u16 glyphId, bool32 isJapanese) +{ + const u16* glyphs; + + if (isJapanese == TRUE) + { + int eff; + glyphs = gFont1JapaneseGlyphs + (0x100 * (glyphId >> 0x4)) + (0x8 * (glyphId & (eff = 0xF))); // shh, no questions, only matching now + DecompressGlyphTile(glyphs, (u16 *)gGlyphInfo); + DecompressGlyphTile(glyphs + 0x80, (u16 *)(gGlyphInfo + 0x40)); // gUnknown_03002FD0 + gGlyphInfo[0x80] = 8; // gGlyphWidth + gGlyphInfo[0x81] = 16; // gGlyphHeight + } + else + { + glyphs = gFont1LatinGlyphs + (0x20 * glyphId); + DecompressGlyphTile(glyphs, (u16 *)gGlyphInfo); + DecompressGlyphTile(glyphs + 0x8, (u16 *)(gGlyphInfo + 0x20)); + DecompressGlyphTile(glyphs + 0x10, (u16 *)(gGlyphInfo + 0x40)); + DecompressGlyphTile(glyphs + 0x18, (u16 *)(gGlyphInfo + 0x60)); + gGlyphInfo[0x80] = gFont1LatinGlyphWidths[glyphId]; + gGlyphInfo[0x81] = 14; + } +} + +u32 GetGlyphWidthFont1(u16 glyphId, bool32 isJapanese) +{ + if (isJapanese == TRUE) + return 8; + else + return gFont1LatinGlyphWidths[glyphId]; +} + +void DecompressGlyphFont2(u16 glyphId, bool32 isJapanese) +{ + const u16* glyphs; + int i; + u8 lastColor; + + if(isJapanese == TRUE) + { + if(glyphId == 0) + { + lastColor = GetLastTextColor(2); + + for(i = 0; i < 0x80; i++) + { + gGlyphInfo[i] = lastColor | lastColor << 4; + // Game Freak, please. writing the same values over and over... + gGlyphInfo[0x80] = 10; + gGlyphInfo[0x81] = 12; + } + } + else // _080065F8 + { + glyphs = gFont2JapaneseGlyphs + (0x100 * (glyphId >> 0x3)) + (0x10 * (glyphId & 0x7)); + DecompressGlyphTile(glyphs, (u16 *)gGlyphInfo); + DecompressGlyphTile(glyphs + 0x8, (u16 *)(gGlyphInfo + 0x20)); // gUnknown_03002FD0 + DecompressGlyphTile(glyphs + 0x80, (u16 *)(gGlyphInfo + 0x40)); // gUnknown_03002FB0 + DecompressGlyphTile(glyphs + 0x88, (u16 *)(gGlyphInfo + 0x60)); // gUnknown_03002FF0 + gGlyphInfo[0x80] = gFont2JapaneseGlyphWidths[glyphId]; // gGlyphWidth + gGlyphInfo[0x81] = 12; // gGlyphHeight + } + } + else // _0800665C + { + if(glyphId == 0) + { + lastColor = GetLastTextColor(2); + + for(i = 0; i < 0x80; i++) + { + gGlyphInfo[i] = lastColor | lastColor << 4; + // but why + gGlyphInfo[0x80] = gFont2LatinGlyphWidths[0]; + gGlyphInfo[0x81] = 14; + } + } + else // _0800669C + { + glyphs = gFont2LatinGlyphs + (0x20 * glyphId); + DecompressGlyphTile(glyphs, (u16 *)gGlyphInfo); + DecompressGlyphTile(glyphs + 0x8, (u16 *)(gGlyphInfo + 0x20)); + DecompressGlyphTile(glyphs + 0x10, (u16 *)(gGlyphInfo + 0x40)); + DecompressGlyphTile(glyphs + 0x18, (u16 *)(gGlyphInfo + 0x60)); + gGlyphInfo[0x80] = gFont2LatinGlyphWidths[glyphId]; + gGlyphInfo[0x81] = 14; + } + } +} + +u32 GetGlyphWidthFont2(u16 glyphId, bool32 isJapanese) +{ + if (isJapanese == TRUE) + { + if(glyphId == 0) + return 10; + + return gFont2JapaneseGlyphWidths[glyphId]; + } + else + { + return gFont2LatinGlyphWidths[glyphId]; + } +} + +void DecompressGlyphFont3(u16 glyphId, bool32 isJapanese) +{ + const u16* glyphs; + int i; + u8 lastColor; + + if(isJapanese == TRUE) + { + if(glyphId == 0) + { + lastColor = GetLastTextColor(2); + + for(i = 0; i < 0x80; i++) + { + gGlyphInfo[i] = lastColor | lastColor << 4; + // Game Freak, please. writing the same values over and over... + gGlyphInfo[0x80] = 10; + gGlyphInfo[0x81] = 12; + } + } + else + { + glyphs = gFont2JapaneseGlyphs + (0x100 * (glyphId >> 0x3)) + (0x10 * (glyphId & 0x7)); + DecompressGlyphTile(glyphs, (u16 *)gGlyphInfo); + DecompressGlyphTile(glyphs + 0x8, (u16 *)(gGlyphInfo + 0x20)); // gUnknown_03002FD0 + DecompressGlyphTile(glyphs + 0x80, (u16 *)(gGlyphInfo + 0x40)); // gUnknown_03002FB0 + DecompressGlyphTile(glyphs + 0x88, (u16 *)(gGlyphInfo + 0x60)); // gUnknown_03002FF0 + gGlyphInfo[0x80] = 10; // gGlyphWidth + gGlyphInfo[0x81] = 12; // gGlyphHeight + } + } + else + DecompressGlyphFont2(glyphId, isJapanese); +} + +u32 GetGlyphWidthFont3(u16 glyphId, bool32 isJapanese) +{ + if(isJapanese == TRUE) + return 10; + else + return gFont2LatinGlyphWidths[glyphId]; +} + +void DecompressGlyphFont4(u16 glyphId, bool32 isJapanese) +{ + const u16* glyphs; + int i; + u8 lastColor; + + if(isJapanese == TRUE) + { + if(glyphId == 0) + { + lastColor = GetLastTextColor(2); + + for(i = 0; i < 0x80; i++) + { + gGlyphInfo[i] = lastColor | lastColor << 4; + // Game Freak, please. writing the same values over and over... + gGlyphInfo[0x80] = 10; + gGlyphInfo[0x81] = 12; + } + } + else // _0800682C + { + glyphs = gFont4JapaneseGlyphs + (0x100 * (glyphId >> 0x3)) + (0x10 * (glyphId & 0x7)); + DecompressGlyphTile(glyphs, (u16 *)gGlyphInfo); + DecompressGlyphTile(glyphs + 0x8, (u16 *)(gGlyphInfo + 0x20)); // gUnknown_03002FD0 + DecompressGlyphTile(glyphs + 0x80, (u16 *)(gGlyphInfo + 0x40)); // gUnknown_03002FB0 + DecompressGlyphTile(glyphs + 0x88, (u16 *)(gGlyphInfo + 0x60)); // gUnknown_03002FF0 + gGlyphInfo[0x80] = gFont4JapaneseGlyphWidths[glyphId]; // gGlyphWidth + gGlyphInfo[0x81] = 12; // gGlyphHeight + } + } + else + { + if(glyphId == 0) + { + lastColor = GetLastTextColor(2); + + for(i = 0; i < 0x80; i++) + { + gGlyphInfo[i] = lastColor | lastColor << 4; + // but why + gGlyphInfo[0x80] = gFont4LatinGlyphWidths[0]; + gGlyphInfo[0x81] = 14; + } + } + else // _080068D0 + { + glyphs = gFont4LatinGlyphs + (0x20 * glyphId); + DecompressGlyphTile(glyphs, (u16 *)gGlyphInfo); + DecompressGlyphTile(glyphs + 0x8, (u16 *)(gGlyphInfo + 0x20)); // gUnknown_03002FD0 + DecompressGlyphTile(glyphs + 0x10, (u16 *)(gGlyphInfo + 0x40)); // gUnknown_03002FB0 + DecompressGlyphTile(glyphs + 0x18, (u16 *)(gGlyphInfo + 0x60)); // gUnknown_03002FF0 + gGlyphInfo[0x80] = gFont4LatinGlyphWidths[glyphId]; // gGlyphWidth + gGlyphInfo[0x81] = 14; // gGlyphHeight + } + } +} + +u32 GetGlyphWidthFont4(u16 glyphId, bool32 isJapanese) +{ + if(isJapanese == TRUE) + { + if(glyphId == 0) + return 10; + + return gFont4JapaneseGlyphWidths[glyphId]; + } + else + return gFont4LatinGlyphWidths[glyphId]; +} + +void DecompressGlyphFont5(u16 glyphId, bool32 isJapanese) +{ + const u16* glyphs; + int i; + u8 lastColor; + + if(isJapanese == TRUE) + { + if(glyphId == 0) + { + lastColor = GetLastTextColor(2); + + for(i = 0; i < 0x80; i++) + { + gGlyphInfo[i] = lastColor | lastColor << 4; + // Game Freak, please. writing the same values over and over... + gGlyphInfo[0x80] = 10; + gGlyphInfo[0x81] = 12; + } + } + else // _08006998 + { + glyphs = gFont5JapaneseGlyphs + (0x100 * (glyphId >> 0x3)) + (0x10 * (glyphId & 0x7)); + DecompressGlyphTile(glyphs, (u16 *)gGlyphInfo); + DecompressGlyphTile(glyphs + 0x8, (u16 *)(gGlyphInfo + 0x20)); // gUnknown_03002FD0 + DecompressGlyphTile(glyphs + 0x80, (u16 *)(gGlyphInfo + 0x40)); // gUnknown_03002FB0 + DecompressGlyphTile(glyphs + 0x88, (u16 *)(gGlyphInfo + 0x60)); // gUnknown_03002FF0 + gGlyphInfo[0x80] = gFont5JapaneseGlyphWidths[glyphId]; // gGlyphWidth + gGlyphInfo[0x81] = 12; // gGlyphHeight + } + } + else + { + if(glyphId == 0) + { + lastColor = GetLastTextColor(2); + + for(i = 0; i < 0x80; i++) + { + gGlyphInfo[i] = lastColor | lastColor << 4; + // but why + gGlyphInfo[0x80] = gFont5LatinGlyphWidths[0]; + gGlyphInfo[0x81] = 14; + } + } + else + { + glyphs = gFont5LatinGlyphs + (0x20 * glyphId); + DecompressGlyphTile(glyphs, (u16 *)gGlyphInfo); + DecompressGlyphTile(glyphs + 0x8, (u16 *)(gGlyphInfo + 0x20)); // gUnknown_03002FD0 + DecompressGlyphTile(glyphs + 0x10, (u16 *)(gGlyphInfo + 0x40)); // gUnknown_03002FB0 + DecompressGlyphTile(glyphs + 0x18, (u16 *)(gGlyphInfo + 0x60)); // gUnknown_03002FF0 + gGlyphInfo[0x80] = gFont5LatinGlyphWidths[glyphId]; // gGlyphWidth + gGlyphInfo[0x81] = 14; // gGlyphHeight + } + } +} + +u32 GetGlyphWidthFont5(u16 glyphId, bool32 isJapanese) +{ + if(isJapanese == TRUE) + { + if(glyphId == 0) + return 10; + + return gFont5JapaneseGlyphWidths[glyphId]; + } + else + return gFont5LatinGlyphWidths[glyphId]; +} + +void DecompressGlyphFont9(u16 glyphId) +{ + const u16* glyphs = gFont9JapaneseGlyphs + (0x100 * (glyphId >> 0x4)) + (0x8 * (glyphId & 0xF)); + DecompressGlyphTile(glyphs, (u16 *)gGlyphInfo); + DecompressGlyphTile(glyphs + 0x80, (u16 *)(gGlyphInfo + 0x40)); // gUnknown_03002FD0 + gGlyphInfo[0x80] = 8; + gGlyphInfo[0x81] = 12; +} From 4cd32e863617326cab9cb7347a55be8c6c6dc3ac Mon Sep 17 00:00:00 2001 From: ProjectRevoTPP Date: Sun, 7 Oct 2018 00:14:45 -0400 Subject: [PATCH 06/13] migrate text rodata to C file --- Makefile | 2 + data/data.s | 5 +- data/graphics/fonts/down_arrow.png | Bin 0 -> 162 bytes data/graphics/fonts/down_arrow_2.png | Bin 0 -> 150 bytes data/graphics/fonts/down_arrow_3.png | Bin 0 -> 189 bytes data/graphics/fonts/down_arrow_RS.png | Bin 0 -> 163 bytes data/graphics/fonts/down_arrow_RS_2.png | Bin 0 -> 150 bytes data/graphics/fonts/font0_jap.png | Bin 0 -> 3073 bytes data/graphics/fonts/font0_latin.png | Bin 0 -> 3285 bytes data/graphics/fonts/font1_jap.png | Bin 0 -> 3135 bytes data/graphics/fonts/font1_latin.png | Bin 0 -> 3470 bytes data/graphics/fonts/font2_jap.png | Bin 0 -> 4532 bytes data/graphics/fonts/font2_latin.png | Bin 0 -> 3470 bytes data/graphics/fonts/font4_jap.png | Bin 0 -> 4480 bytes data/graphics/fonts/font4_latin.png | Bin 0 -> 3470 bytes data/graphics/fonts/font5_jap.png | Bin 0 -> 4507 bytes data/graphics/fonts/font5_latin.png | Bin 0 -> 3470 bytes data/graphics/fonts/font9_jap.png | Bin 0 -> 2281 bytes data/graphics/fonts/keypad_icons.png | Bin 0 -> 297 bytes data/text.s | 88 ----- graphics_file_rules.mk | 34 ++ include/text.h | 4 + ld_script.txt | 1 - src/text.c | 424 ++++++++++++++++++++---- 24 files changed, 407 insertions(+), 151 deletions(-) create mode 100644 data/graphics/fonts/down_arrow.png create mode 100644 data/graphics/fonts/down_arrow_2.png create mode 100644 data/graphics/fonts/down_arrow_3.png create mode 100644 data/graphics/fonts/down_arrow_RS.png create mode 100644 data/graphics/fonts/down_arrow_RS_2.png create mode 100644 data/graphics/fonts/font0_jap.png create mode 100644 data/graphics/fonts/font0_latin.png create mode 100644 data/graphics/fonts/font1_jap.png create mode 100644 data/graphics/fonts/font1_latin.png create mode 100644 data/graphics/fonts/font2_jap.png create mode 100644 data/graphics/fonts/font2_latin.png create mode 100644 data/graphics/fonts/font4_jap.png create mode 100644 data/graphics/fonts/font4_latin.png create mode 100644 data/graphics/fonts/font5_jap.png create mode 100644 data/graphics/fonts/font5_latin.png create mode 100644 data/graphics/fonts/font9_jap.png create mode 100644 data/graphics/fonts/keypad_icons.png delete mode 100644 data/text.s create mode 100644 graphics_file_rules.mk diff --git a/Makefile b/Makefile index 04690e382..0b83cb5c5 100644 --- a/Makefile +++ b/Makefile @@ -89,6 +89,8 @@ tidy: rm -f $(ROM) $(ELF) $(MAP) rm -r build/* +include graphics_file_rules.mk + %.s: ; %.png: ; %.pal: ; diff --git a/data/data.s b/data/data.s index d1598bfbc..7f2b474aa 100644 --- a/data/data.s +++ b/data/data.s @@ -1554,7 +1554,10 @@ gUnknown_83AC970:: @ 83AC970 .incbin "baserom.gba", 0x3AC970, 0x20 sFanfares:: @ 83AC990 - .incbin "baserom.gba", 0x3AC990, 0x278 + .incbin "baserom.gba", 0x3AC990, 0x40 + +gUnknown_83AC9D0:: @ 83AC9D0 + .incbin "baserom.gba", 0x3AC9D0, 0x238 gUnknown_83ACC08:: @ 83ACC08 .incbin "baserom.gba", 0x3ACC08, 0x440 diff --git a/data/graphics/fonts/down_arrow.png b/data/graphics/fonts/down_arrow.png new file mode 100644 index 0000000000000000000000000000000000000000..e74ed47efdbcb85cbb345ba89a678011020a147b GIT binary patch literal 162 zcmeAS@N?(olHy`uVBq!ia0vp^4nWMo!VDyL`#gCAqznRlLR|lYK~hrE)vITpad7Ibngs4u(cyJ60_RR<9o-MvO;A rKWK$8c0Ue0!6J5ir2xkQ5x!Q2XY2V-*1IXifXwoA^>bP0l+XkK=*%;M literal 0 HcmV?d00001 diff --git a/data/graphics/fonts/down_arrow_2.png b/data/graphics/fonts/down_arrow_2.png new file mode 100644 index 0000000000000000000000000000000000000000..aefcf4f0845cf89ef07fbacbf1b4b5e9136dd81e GIT binary patch literal 150 zcmeAS@N?(olHy`uVBq!ia0vp^4nWMo!VDyL`#gCAqznRlLR|lYK~hrE)vITpad7IiZ1BmE-7>B@D|#W2Q)KU^Z#p e!KlZ~rpUn1Qq8!tabC`QkbX~BKbLh*2~7Z(OfP-_ literal 0 HcmV?d00001 diff --git a/data/graphics/fonts/down_arrow_3.png b/data/graphics/fonts/down_arrow_3.png new file mode 100644 index 0000000000000000000000000000000000000000..85a157564e2db5a3524b38cd91d8f4cc356c3d67 GIT binary patch literal 189 zcmeAS@N?(olHy`uVBq!ia0vp^0zj<5!VDx|E`RzTNErn9gt-0(gQTRSt5?rH-tIr4=Ln1%zKM*Ibnf>24ka|9qZ%IiaC>ra)J4G1H8BOH3v+S~~=H eNIx)25MW|pxyCYA^R43wkbX~BKbLh*2~7a3E-&2x literal 0 HcmV?d00001 diff --git a/data/graphics/fonts/font0_jap.png b/data/graphics/fonts/font0_jap.png new file mode 100644 index 0000000000000000000000000000000000000000..23903f343a604183819b202d1e026076dcb5325f GIT binary patch literal 3073 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 TIXYbE00000NkvXXu0mjfw`?7G literal 0 HcmV?d00001 diff --git a/data/graphics/fonts/font1_jap.png b/data/graphics/fonts/font1_jap.png new file mode 100644 index 0000000000000000000000000000000000000000..0041b477a55e5f7d3f27984a254b718b25e2a821 GIT binary patch literal 3135 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 Z@gD>4-hx8InUDYg002ovPDHLkV1f~nzc&B? literal 0 HcmV?d00001 diff --git a/data/graphics/fonts/font1_latin.png b/data/graphics/fonts/font1_latin.png new file mode 100644 index 0000000000000000000000000000000000000000..42e847faf0f281db3da29ac5a33b6c224a416207 GIT binary patch literal 3470 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 literal 0 HcmV?d00001 diff --git a/data/graphics/fonts/font2_jap.png b/data/graphics/fonts/font2_jap.png new file mode 100644 index 0000000000000000000000000000000000000000..efdb4b77eb694bfd4f9395d57faa00667e0b8b85 GIT binary patch literal 4532 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 literal 0 HcmV?d00001 diff --git a/data/graphics/fonts/font4_jap.png b/data/graphics/fonts/font4_jap.png new file mode 100644 index 0000000000000000000000000000000000000000..da4f2beacbc014d2fde8ba6c68df265ff2c94c23 GIT binary patch literal 4480 zcmbW5={ppBAH{z&gTY`V*%@mR*|+SBwOdS5rjos^WnZ$**i)1uyN1eg%T9J?LUu+{ z#*(GRz9oh%<>|Se|KNFbKG${5_5Hp(FHR!H!i1HXj~M{KYG!I^1pwqPLID)^SJ-!N zy8RUvjJdT@O7Drfx;lkIIXOA8pYs<5;FO%1p}uuU?uPBq{qL88Dl&RSCtMYfDVJ4u zI7iI~GHvhQjFRZh{k+a#Bj+f2PpoOWjv@V{&2$$@dC_i7!X>Hi!|jRGBDLvIVst^Ogtf@4`#Dd||o zJ9u_a7`3pq_i|KCpxkx55Qm76SEXOAK30(atPy>>O~bRSU1;s90*VnhL%oJ&NM3A! zv+S_R`q<}8=8T!c;!?GgNz=uqB=dNUogGuKSj*^*q-OQ`Br|5vPYFG-aLx)Z(ku-a z7u3~)cl5w$F(vl~9>rdqsWp7rQL-9K5n<_M$ZzZ&+Gd4_p1!YuvX=&u7pKpWPRC>B zZp^1|hn&h}>b_krmggFWxpqoWEjj%p5qLf4MGe;ry9TnL#_Azd#4zQu%`(;sEmrqSFSeMcO3*58^To^ zz{%`_gf*82kq6J;u>vb_FU)yUb8Eb?i9f8QflbBoQL1fGaGLa%*{6nQ%FAt!3Zp@8 zcZbfRE1=}AAS?y=T`8PnaBb^Sj`gi;N#PC_i_e1s!`AOiHkZHCx`ZU5gh&oG&nZ@h(05wRZkb1*sXs%Z9fxPDjsQt!qHy znP%9W;tHVhZ%(f==cTUaf)dlq;?2O>+55>6*PM#-=p=NP(;=L#$e>!@@-oBf>XaaW zBzVK52>FU(`k|Jx_vDznFv^3HJg=Z>&tfm6^$>u3r$E&)Pv|yZ_R6{@^^|NrA|7Dp z;s%R>nq+2Ipl&)QPm0|4Af4cQV@rSQRvGl=?CWDce8#nBi#^yl`m??;J0+jQ`t%){ z;+GWRs&IvICG@WTogG9a($LOefk3oIF_O+(hiYv46Kqt|>{raXYM+yPc|Rfxbhz;{ z)_+o)+w9MgVyQPB-wty+z(zUG4Gcqk-kt?nZ_%Jd_C3xjqj{bUnP6&T=F*)7t@0y} zwjsa%faD|({=R5;{|ms*+X@tw4j%%3@zRQ3Q(owd&XI-lD!lX^wDXT<%{JTlHJ+?_ z^%Rl8^Fn3JdKZlFkeT7{$LR{07uBz&5VqYk+r?`EbeLR0K~QH6oxHC6qn$s$Ky-Nc z(8OW>!pl?)Q|6)NE2Q2)?bb)Pg5<|mS?R|)tBI_9T*MeV@Pa!;$3@UWHuPYB4DK3o zgf7g*8Jr`U7!3x6a+kc+>x2e%1{NIf8bHu7oyQ6G5WFpJRcfi>H+GM1C^w9vJ9bLq z9;E9->f+;QTEUA=v7M*#y&i(3%%$I4ppLaSaP?t11!~&)=2Tm?qfWHosT^G77A?y3 z+64j=d;(4eJ{!E)iNgJ#WayhRWtK5lpX7un8gG>tj?)3nFYIx^;&Gata=>C$tu>1I zeb@aFr*BDtT4GBC15hVGvLu3X;%RUH1=BPL9&^M}>oD%BN6sY+18HkJTG3slEGMGe zysr6Wm7A(M=u_dNu6RrNxCp#YclXtE$^V)$a?0`(Al}DmWIW4EJmy<6)66kGK!dK= zW*{bY>Au5~;1->ngvGC`&o&wuXaCkLE zxjVOn418}F@pT`vWT}X5E*(_hd@A_N`WgFc)NY;)21hz*zf>F*g%LC3)hm?wxU}kE z-J;Xk*su9Jrb4lR+D_K%4?2L~zT*e4+ETKuD(lo;KA)-ymXy-IxHfJD9{shPPOB3f zJtN{-)9VKQx;swO^M@P}BMgi%$RE4wZwQ(DlKLjMWc` zH!B~xZ*=>5nRAaf8wTERf@H?u!h}~!cWNC&cx(`Bl5D%O?qK|W>!Z~g8aBf>d6&6U z5G2(@2#JC91;(M)FUbY`6(RQE^G3g_lceD*gyNgZeDi7T815a3^_UE3qo7K)7Pr0d z=LFlZ-`)8|7c6By3nu?ORa$XaZ5#ZNApp>c#TDu!@Xaxy(ZG*j+P>oy1+KjqM+tY4 z#8Hb}c-L>22AHQZ$zA-F>k-XI(IVodlXO=28B<6IK^-Oaad7*Y>hYfOL<4iqMeIrX zriC3WiK`zwiC7U=!=24)$9cMYhCR<^Pyxh(w4UlJ+3IwS_ip?ny&;zxlPsUz%V%{j zSI4iiHE$WJU{*oNp#y)?m3G0$c|4vmf#Q45$~v%+{wod@9i|m94}kxuI(Na9Uc!1O zLi?eS96MfNsgTIn6}Bd4tu|_dMTEG_#7%z6-lA&II-Cm?XdMD)q_uKBag~g1IN#oT z(oRQ<@}n6FDam-8>1NWqr}bD!PBWwjxSw^puzXuf=p1Q8JF*kiWo&!|{H z6L7--&B!$_QyxbSIigkR^CJ|5^2nKjSvhZo7p>T!v-;{ayGrrqR<8*Qk_Zhw_!j<< z-SJMj+D8;i)#-lv4Byj;{e!k@gVuM=!k!20y9hV#s_BRvE)X zGPE%)u46{9S<`Svr0ftfYz$|QgyI{5wrG=2S0-KcZUnhk!aiTGPmaW9kE$-R&Wh;3 z_I9l~J16a!F7fHmeZ`~08QMO?I8lWE_~@vhGTZ0qWRX942QO@~ZpdF!mdUaRWK8(Q zau(fbf*?u1ufYJed3J)nWEBQa$2u@%1=M5zUT|*|TBg$xS~=hA;`HBmXfPu|B(_GSyrGQ0J!UtU@q?RfuGNl-?%h|J_czP^XiJSc)mp)K{BV>8&{>`8uXWX);Apr+0xBtAixWVyHmP>PZyzEK-Tl0)JovzD2kqrLE$}h@(s4><<40d-0e7T689mKG@@`1%B$&imYCL=erRR`A9=k zD+DGGlYK~$gG~g@cP?rWWu!ecvOH!jJZJ489tO`sc&*bwh3yk>P zaGuKP31-!MaHl27m^UFBll<-|$CD1EeJ@lNm!!k1K8KyVU#FNcoZQBI&z5qh%Q2V2 zpPLLws=uzj0%nCTYWuoD>HC;zS&a(l6Wf^l8q-|`vDnmi0LihHNCwcQ!FZ`ZI%y$KO|ZmWJpE$JpGt3y`(nanIUQi?6Ewvgf9 zmX_kblMOkNWKut3cGfl5dkWI^vEG=G@Mc6}rT|IA+55$>&^xA7%4+-QN^NkN02L3(ci zfluNi3ZJ#BKtN)={y#_x4__4oFQg(FWXm?Eejhyfszpg$td*gl3`SU@w!5J00W}Th zzlk36koxRk@VWTYo3LEtq0p9q%4-K>vTN?sRK(Qq2vw5UN0YffN<9?y=r6Pzp{mvA zaqsYs-BxwK0$cQ_y)OoPiK1%Z>4?#}alXfSUIT)96ngntc-6rhdc5e>br>lp1KZvc z4BiYB30xbzi<*xBHy#ZhP$YqG6@<75}o zO5~Z#kOSBBd>5uH5UFCz zQQDxmX_4y<1J4#wVzg6vC?~#b-vRP(lW8Mg{^m`W2L$N|LHs9vzw_|YrbAyiskckS(xyN5kEZns}E{QZBc_|7)gWnSS~pKnNqID*TPCms`*u~OR9&F zKIcqn*d+-~+46A*l^k9Llk*P1b!HDbbv8^%cI!xHeN6sBofvmlH3`Y}>o z?;X6#qY%m9#{cCW_ldBt|43my8-ttL^Y2=tzl42L&n1h7<=$dOiRZ@DSI#X+_6`u$ zgs{)X4R045B>QFR9>pxh;x3My+9jObrL~u794hy!k39{oJc{C-$~-92)c$<}r<+@< z(n;%}!xzv~U90D1%& zJwi~|dC#;NM?K#{%7?ZwhL& zc1DN6&l#b z8jf1eE+wDnE1s`|yQIS!!_J`C*v}sBeUC)UUG{pEfQED*?xjxLNB-j9=mZ9NdWvL- z)}YftXKxJkTi(xX+a+cni4xTHHW=jZzfIac{MJ$NL%3Pa)N%Q%ll0{ekGbXST0^$K g{a^62LGA?B7CTy`^MXU>@1z3Ej4TW*3>>2W1JwUZB>(^b literal 0 HcmV?d00001 diff --git a/data/graphics/fonts/font4_latin.png b/data/graphics/fonts/font4_latin.png new file mode 100644 index 0000000000000000000000000000000000000000..42e847faf0f281db3da29ac5a33b6c224a416207 GIT binary patch literal 3470 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 literal 0 HcmV?d00001 diff --git a/data/graphics/fonts/font5_jap.png b/data/graphics/fonts/font5_jap.png new file mode 100644 index 0000000000000000000000000000000000000000..7da59c0eb46ce9a0bf4942874d188020023ff85f GIT binary patch literal 4507 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 z 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 literal 0 HcmV?d00001 diff --git a/data/graphics/fonts/font9_jap.png b/data/graphics/fonts/font9_jap.png new file mode 100644 index 0000000000000000000000000000000000000000..14cf6c042dae07c81a6faab50cd679a5d4c1c1b0 GIT binary patch literal 2281 zcmVNklxaNuU+447Yy8gco*jBG`=B z4U8b`S1@wWxdp8w?f@;Y`77_0Jk#>7J(!u~_V%ueAYI}|iDK(LKB|e{?cHV*$hpm} z5K<oop^#Fdc5ZJJe&wT*xK6E=jY}=jqe>MwYAb7B`=)IUjZXZdYHXt<21$A6 z8_g*ip_}O`N~`o{d{onzA=J|;J0ZXn>^8TJonqO(2H~Dgag4pB7lZq{Q#geD1_r$~6h$de=!y50f}N9;}q5 z{Mg&4ah^fjVm31M?bO-2-*N!zgA|pP-AgEAIUxX+=0&&E4n^^Jc+{QlT0cJOR3pHC z`t6yz@?$H!{pi=u;!apek&V)qZcjTwC2FZ05CHagXb0QbmbUFs4hS%uwl4MEFqEl3 z>XjY4qdw}&BweK|`=k<+b}M~URlip!GpXUU?~nc^Qnv3ag8=m|qs;jlzpf7CcfJmF z$im8JA@e@2P*SL4=0C?>$YQ}!`fqR;5@*SvavZ~Nsc{hTGg{yF_*fYm?$oPII@ zxvP{r@Bo9sCN2TW&m53z<^gdv{+co9Zfx2Oz})ChI?=sn4p928Q~DfaCL1T@#_h=rc~sWoj9KJg5I`4qVdg2~2$Y+N(u_LEKQHDh41jIqYbscREwMk#w>zC_;W z+yUX^Og79jd%@{y2Z?+_t0WUb?-#W(+!Yl{uNU5ws42%e&N9X4)oZ zD%aW$$C0_B*Fz`#+8_NjW6%zm-UVQuR<5SnXAUfo;d-|UGeKg3P$f{B0n5#H8sy=YZcfU{o%f7#OjY|$d!*my3`|b1^J6WDc zo=*7zO9im(`-?|539rs$Xo z9v%U90DNNQ4)DKJ0L#9=c!_5&q%r}Sl;Sl~ha`ER7{MzYT`GWO-(S4K6-=jC#@}sc z@K^9DmObtA&TK24db(5q%f7#O;0Q3m%E!3!KAbrrqJQl{8-e@0+q=PXMS64KtsGzg zwD8(WcJbB&{eUnKOR_;bHd(+=&ZSRL>NVZ}C>5j>>SQ`!|Sg(?tKV9m|=`fNa8M}?+re^}WUkg0iIW5Hv@N}=c8 z6aY6fLerHFd{84p6#(}!hTY0R0Ax5FIIzJp+<;nI#S9A`Blr9qYWU0u(eM6>H}AjR zZmWeK*AKVV!cXXj+iKxw^uukn@Z)AbnR>f*FaBijT;pyjfQ2y@o>)A(bH4-1 z8@GWDcy%`wz#C&MJh6CqdhmeVyOJNn-BJJxV=O$ec=IVC`p<5MGP+v|U}21fCoUM{ z-QMlnmg4aL<}>Rcr#7|CnSlg6^k~l4DUS8I&Q+r4N~nZfr&WMaEIqoO^ z>Of_o&7cOOO{CVAI<;n~O{z^m8aTm!W4jOP1E00&4&vhRK(qzebb(as0n==)F4i_+ z+bsCxav#jmpr(86XTgJkA9@ZTDE(ORt_%r~cwIDF6PFYb0FTgTgVquEPC7Fj)yl7Y z4oD^T@$kX^3o-&b`?$u*CFO$$@8bgpFaeA-l!;aTzG&1vCYB<4JtSC{jRVd5&(Ep- zXqj&LjU?t(2cx7&3* zdGu}gkr?ZBj1dAW%wGi@m;4B|`?`$LBcmVqlBEI7hYR!qgM9y7`ELIo#)o=cKm*`4 zE`S;MXISgpa?3dtMf0t1878Wzi@W|DfZy;lppo=lzXXT~Q1Ad0iB45PK&r-tCPR!z z1TY0D)eK(;>0M&^_hA@JQQ&-y?y06C)oCb(0zjjHdji*h5(j8(F&|~V3|B|Z0T5DE zU4`R$Hsrb(aBu#_gU&NBWCF^8yMjmPVR%rCG~~XXYk@i7cHQMZ$Izn2a8-p0J_pDF zOhS7xPZra{lPji)2lJrs=h~`Mif^DChMz5_E`y)gdkjK=0g67X-Oa#NW~K{L3VSH&K?VxT|_?HYW*B~t=Cs-Ht-RzP-K$KMaK$lnmNn4LKT zb+xbS|KJ<4Cxe*z2zEeS<3a9n*uhI00000NkvXXu0mjf D=Hptl literal 0 HcmV?d00001 diff --git a/data/graphics/fonts/keypad_icons.png b/data/graphics/fonts/keypad_icons.png new file mode 100644 index 0000000000000000000000000000000000000000..f8c162bb902982a46eb1f13e0c181755118f1953 GIT binary patch literal 297 zcmeAS@N?(olHy`uVBq!ia0vp^4M42G!VDxecyh&nltF+`i0gkaNJ>h&diCrx4vznO zixuW@O!+p&FzD=(qu+q4(7>@Ddw&3hws^WYhIn+o4L-G!p#TY;@`aq z2z8j~*QC!Ewn#*ByNMF}r$F5$83|`5Tb*=hsTX$Pk)CmP#^j%}fyu(wo}V-lrk!wO z;N{ZzU32PIlHrzg(HYhb_hTm8@kKStNS1BLe5b&-S2kpJz3h(i^%poUFp6hI6rEoX z#?`0$By|5K{-2@y^BxxQcd?(EkiNCV#)4x@{Z*k)%N)!jS2IZ#?^WIKbiwSmrrf)? c7o=57+ppTHYn>Q-VhYGhp00i_>zopr01=LHt^fc4 literal 0 HcmV?d00001 diff --git a/data/text.s b/data/text.s deleted file mode 100644 index b44badaa2..000000000 --- a/data/text.s +++ /dev/null @@ -1,88 +0,0 @@ - .section .rodata - -gDownArrowTiles:: @ 81EA14C - .incbin "baserom.gba", 0x1EA14C, 0x100 - -gDarkDownArrowTiles:: @ 81EA24C - .incbin "baserom.gba", 0x1EA24C, 0x400 - -gDownArrowYCoords:: @ 81EA64C - .incbin "baserom.gba", 0x1EA64C, 0x4 - -gUnknown_81EA650:: @ 81EA650 - .incbin "baserom.gba", 0x1EA650, 0x4 - -gGlyphWidthFuncs:: @ 81EA654 - .incbin "baserom.gba", 0x1EA654, 0x38 - -gUnknown_81EA68C:: @ 81EA68C - .incbin "baserom.gba", 0x1EA68C, 0x18 - -gUnknown_81EA6A4:: @ 81EA6A4 - .incbin "baserom.gba", 0x1EA6A4, 0x10 - -gUnknown_81EA6B4:: @ 81EA6B4 - .incbin "baserom.gba", 0x1EA6B4, 0x18 - -gKeypadIcons:: @ 81EA6CC - .incbin "baserom.gba", 0x1EA6CC, 0x34 - -gKeypadIconTiles:: @ 81EA700 - .incbin "baserom.gba", 0x1EA700, 0x800 - -gFont0LatinGlyphs:: @ 81EAF00 - .incbin "baserom.gba", 0x1EAF00, 0x4000 - -gFont0LatinGlyphWidths:: @ 81EEF00 - .incbin "baserom.gba", 0x1EEF00, 0x200 - -gFont0JapaneseGlyphs:: @ 81EF100 - .incbin "baserom.gba", 0x1EF100, 0x4000 - -gFont1LatinGlyphs:: @ 81F3100 - .incbin "baserom.gba", 0x1F3100, 0x8000 - -gFont1LatinGlyphWidths:: @ 81FB100 - .incbin "baserom.gba", 0x1FB100, 0x200 - -gFont1JapaneseGlyphs:: @ 81FB300 - .incbin "baserom.gba", 0x1FB300, 0x4000 - -gFont2LatinGlyphs:: @ 81FF300 - .incbin "baserom.gba", 0x1FF300, 0x8000 - -gFont2LatinGlyphWidths:: @ 8207300 - .incbin "baserom.gba", 0x207300, 0x200 - -gFont2JapaneseGlyphs:: @ 8207500 - .incbin "baserom.gba", 0x207500, 0x8000 - -gFont2JapaneseGlyphWidths:: @ 820F500 - .incbin "baserom.gba", 0x20F500, 0x118 - -gFont4LatinGlyphs:: @ 820F618 - .incbin "baserom.gba", 0x20F618, 0x8000 - -gFont4LatinGlyphWidths:: @ 8217618 - .incbin "baserom.gba", 0x217618, 0x200 - -gFont4JapaneseGlyphs:: @ 8217818 - .incbin "baserom.gba", 0x217818, 0x8000 - -gFont4JapaneseGlyphWidths:: @ 821F818 - .incbin "baserom.gba", 0x21F818, 0x118 - -gFont5LatinGlyphs:: @ 821F930 - .incbin "baserom.gba", 0x21F930, 0x8000 - -gFont5LatinGlyphWidths:: @ 8227930 - .incbin "baserom.gba", 0x227930, 0x200 - -gFont5JapaneseGlyphs:: @ 8227B30 - .incbin "baserom.gba", 0x227B30, 0x8000 - -gFont5JapaneseGlyphWidths:: @ 822FB30 - .incbin "baserom.gba", 0x22FB30, 0x118 - -gFont9JapaneseGlyphs:: @ 822FC48 - .incbin "baserom.gba", 0x22FC48, 0x2000 diff --git a/graphics_file_rules.mk b/graphics_file_rules.mk new file mode 100644 index 000000000..876262eb2 --- /dev/null +++ b/graphics_file_rules.mk @@ -0,0 +1,34 @@ +FONTGFXDIR := data/graphics/fonts + +$(FONTGFXDIR)/font0_latin.latfont: $(FONTGFXDIR)/font0_latin.png + $(GFX) $< $@ + +$(FONTGFXDIR)/font0_jap.fwjpnfont: $(FONTGFXDIR)/font0_jap.png + $(GFX) $< $@ + +$(FONTGFXDIR)/font1_latin.latfont: $(FONTGFXDIR)/font1_latin.png + $(GFX) $< $@ + +$(FONTGFXDIR)/font1_jap.fwjpnfont: $(FONTGFXDIR)/font1_jap.png + $(GFX) $< $@ + +$(FONTGFXDIR)/font2_latin.latfont: $(FONTGFXDIR)/font2_latin.png + $(GFX) $< $@ + +$(FONTGFXDIR)/font2_jap.fwjpnfont: $(FONTGFXDIR)/font2_jap.png + $(GFX) $< $@ + +$(FONTGFXDIR)/font4_latin.latfont: $(FONTGFXDIR)/font4_latin.png + $(GFX) $< $@ + +$(FONTGFXDIR)/font4_jap.fwjpnfont: $(FONTGFXDIR)/font4_jap.png + $(GFX) $< $@ + +$(FONTGFXDIR)/font5_latin.latfont: $(FONTGFXDIR)/font5_latin.png + $(GFX) $< $@ + +$(FONTGFXDIR)/font5_jap.fwjpnfont: $(FONTGFXDIR)/font5_jap.png + $(GFX) $< $@ + +$(FONTGFXDIR)/font9_jap.fwjpnfont: $(FONTGFXDIR)/font9_jap.png + $(GFX) $< $@ diff --git a/include/text.h b/include/text.h index 81e1d03f2..61ab8cecd 100644 --- a/include/text.h +++ b/include/text.h @@ -244,5 +244,9 @@ u32 GetGlyphWidthFont2(u16 glyphId, bool32 isJapanese); void DecompressGlyphFont1(u16 glyphId, bool32 isJapanese); u32 GetGlyphWidthFont1(u16 glyphId, bool32 isJapanese); void DecompressGlyphFont9(u16 glyphId); +u32 GetGlyphWidthFont3(u16 glyphId, bool32 isJapanese); +u32 GetGlyphWidthFont4(u16 glyphId, bool32 isJapanese); +u32 GetGlyphWidthFont5(u16 glyphId, bool32 isJapanese); +void sub_80062B0(struct Sprite *sprite); #endif // GUARD_TEXT_H diff --git a/ld_script.txt b/ld_script.txt index cbe8f3193..bc27ac048 100644 --- a/ld_script.txt +++ b/ld_script.txt @@ -363,7 +363,6 @@ SECTIONS { src/text_printer.o(.rodata); src/window.o(.rodata); src/text.o(.rodata); - data/text.o(.rodata); src/sprite.o(.rodata); src/bg_regs.o(.rodata); src/string_util.o(.rodata); diff --git a/src/text.c b/src/text.c index bc5fd7a66..bb2f62f04 100644 --- a/src/text.c +++ b/src/text.c @@ -4,9 +4,12 @@ #include "string_util.h" #include "window.h" #include "text.h" +#include "sprite.h" extern u8 gGlyphInfo[0x90]; extern u8 gUnknown_203ADFA; +extern u16 gUnknown_841F408[]; +extern const struct OamData gUnknown_83AC9D0; extern void FillBitmapRect4Bit(struct Bitmap *surface, u16 x, u16 y, u16 width, u16 height, u8 fillValue); extern void FillWindowPixelRect(u8 windowId, u8 fillValue, u16 x, u16 y, u16 width, u16 height); @@ -20,46 +23,358 @@ extern u8* UnkTextUtil_GetPtrI(u8 a1); TextFlags gTextFlags; -extern const u8 gDownArrowTiles[]; -extern const u8 gDarkDownArrowTiles[]; -extern const u8 gUnusedFRLGBlankedDownArrow[]; -extern const u8 gUnusedFRLGDownArrow[]; -extern const u8 gDownArrowYCoords[]; -extern const u8 gWindowVerticalScrollSpeeds[]; +const u8 gDownArrowTiles[] = INCBIN_U8("data/graphics/fonts/down_arrow.4bpp"); +const u8 gDarkDownArrowTiles[] = INCBIN_U8("data/graphics/fonts/down_arrow_RS.4bpp"); +const u8 gTinyArrowTiles[] = INCBIN_U8("data/graphics/fonts/down_arrow_2.4bpp"); +const u8 gTinyDarkDownArrowTiles[] = INCBIN_U8("data/graphics/fonts/down_arrow_RS_2.4bpp"); +const u8 gDoubleArrowTiles[] = INCBIN_U8("data/graphics/fonts/down_arrow_3.4bpp"); -extern const struct GlyphWidthFunc gGlyphWidthFuncs[]; +const u8 gDownArrowYCoords[] = { 0x0, 0x10, 0x20, 0x10 }; +const u8 gWindowVerticalScrollSpeeds[] = { 0x1, 0x2 , 0x4 , 0x0 }; -extern const struct KeypadIcon gKeypadIcons[]; +const struct GlyphWidthFunc gGlyphWidthFuncs[] = { + { 0x0, GetGlyphWidthFont0 }, + { 0x1, GetGlyphWidthFont1 }, + { 0x2, GetGlyphWidthFont2 }, + { 0x3, GetGlyphWidthFont3 }, + { 0x4, GetGlyphWidthFont4 }, + { 0x5, GetGlyphWidthFont5 }, + { 0x6, GetGlyphWidthFont6 } +}; -extern const u8 gKeypadIconTiles[]; +const struct SpriteSheet gUnknown_81EA68C[] = +{ + {gDoubleArrowTiles, 0x0080, 0x8000}, + {gDoubleArrowTiles + 0x80, 0x0080, 0x8000}, + {NULL} +}; -extern const struct FontInfo gFontInfos[]; +const struct SpritePalette gUnknown_81EA6A4[] = +{ + {gUnknown_841F408, 0x8000}, + {NULL} +}; -extern const u8 gMenuCursorDimensions[][2]; +const struct SpriteTemplate gUnknown_81EA6B4 = +{ + .tileTag = 0x8000, + .paletteTag = 0x8000, + .oam = &gUnknown_83AC9D0, + .anims = gDummySpriteAnimTable, + .images = NULL, + .affineAnims = gDummySpriteAffineAnimTable, + .callback = sub_80062B0, +}; -extern const u16 gFont8LatinGlyphs[]; -extern const u8 gFont8LatinGlyphWidths[]; -extern const u16 gFont0LatinGlyphs[]; -extern const u8 gFont0LatinGlyphWidths[]; -extern const u16 gFont7LatinGlyphs[]; -extern const u8 gFont7LatinGlyphWidths[]; -extern const u16 gFont2LatinGlyphs[]; -extern const u8 gFont2LatinGlyphWidths[]; -extern const u16 gFont1LatinGlyphs[]; -extern const u8 gFont1LatinGlyphWidths[]; -extern const u16 gFont0JapaneseGlyphs[]; -extern const u16 gFont1JapaneseGlyphs[]; -extern const u16 gFont2JapaneseGlyphs[]; -extern const u8 gFont2JapaneseGlyphWidths[]; -extern const u16 gFont4JapaneseGlyphs[]; -extern const u8 gFont4JapaneseGlyphWidths[]; -extern const u16 gFont4LatinGlyphs[]; -extern const u8 gFont4LatinGlyphWidths[]; -extern const u16 gFont5JapaneseGlyphs[]; -extern const u8 gFont5JapaneseGlyphWidths[]; -extern const u16 gFont5LatinGlyphs[]; -extern const u8 gFont5LatinGlyphWidths[]; -extern const u16 gFont9JapaneseGlyphs[]; +const struct KeypadIcon gKeypadIcons[] = { + { 0x0, 0x8, 0xC }, + { 0x1, 0x8, 0xC }, + { 0x2, 0x10, 0xC }, + { 0x4, 0x10, 0xC }, + { 0x6, 0x18, 0xC }, + { 0x9, 0x18, 0xC }, + { 0xC, 0x8, 0xC }, + { 0xD, 0x8, 0xC }, + { 0xE, 0x8, 0xC }, + { 0xF, 0x8, 0xC }, + { 0x20, 0x8, 0xC }, + { 0x21, 0x8, 0xC }, + { 0x22, 0x8, 0xC }, +}; + +const u8 gKeypadIconTiles[] = INCBIN_U8("data/graphics/fonts/keypad_icons.4bpp"); + +// Font 0 +const u16 gFont0LatinGlyphs[] = INCBIN_U16("data/graphics/fonts/font0_latin.latfont"); +const u8 gFont0LatinGlyphWidths[] = +{ + 0x05, 0x05, 0x05, 0x05, 0x05, 0x05, 0x05, 0x05, 0x05, 0x04, 0x05, 0x04, 0x04, 0x05, + 0x05, 0x05, 0x05, 0x05, 0x05, 0x05, 0x05, 0x05, 0x05, 0x05, 0x05, 0x05, 0x05, 0x05, + 0x05, 0x05, 0x04, 0x05, 0x04, 0x04, 0x05, 0x05, 0x05, 0x06, 0x05, 0x05, 0x05, 0x05, + 0x05, 0x05, 0x08, 0x07, 0x08, 0x05, 0x05, 0x05, 0x05, 0x05, 0x08, 0x08, 0x07, 0x05, + 0x05, 0x05, 0x05, 0x05, 0x05, 0x05, 0x05, 0x05, 0x05, 0x05, 0x05, 0x05, 0x05, 0x05, + 0x05, 0x05, 0x05, 0x05, 0x05, 0x05, 0x05, 0x05, 0x05, 0x05, 0x05, 0x05, 0x05, 0x08, + 0x08, 0x08, 0x08, 0x08, 0x08, 0x08, 0x04, 0x07, 0x05, 0x05, 0x05, 0x05, 0x05, 0x05, + 0x05, 0x05, 0x05, 0x05, 0x05, 0x05, 0x05, 0x05, 0x05, 0x05, 0x05, 0x05, 0x05, 0x04, + 0x05, 0x05, 0x05, 0x05, 0x05, 0x05, 0x05, 0x05, 0x05, 0x08, 0x08, 0x08, 0x08, 0x05, + 0x05, 0x05, 0x05, 0x05, 0x05, 0x05, 0x05, 0x07, 0x07, 0x05, 0x05, 0x05, 0x05, 0x05, + 0x05, 0x05, 0x05, 0x05, 0x05, 0x05, 0x05, 0x05, 0x05, 0x05, 0x05, 0x05, 0x05, 0x05, + 0x05, 0x05, 0x05, 0x05, 0x05, 0x05, 0x08, 0x05, 0x05, 0x05, 0x05, 0x05, 0x05, 0x05, + 0x05, 0x05, 0x05, 0x04, 0x05, 0x05, 0x05, 0x05, 0x05, 0x05, 0x05, 0x05, 0x05, 0x05, + 0x05, 0x08, 0x05, 0x08, 0x05, 0x05, 0x05, 0x05, 0x05, 0x05, 0x05, 0x05, 0x05, 0x04, + 0x05, 0x05, 0x05, 0x05, 0x05, 0x05, 0x05, 0x05, 0x05, 0x05, 0x04, 0x05, 0x05, 0x05, + 0x05, 0x04, 0x05, 0x05, 0x05, 0x05, 0x05, 0x05, 0x05, 0x05, 0x05, 0x04, 0x05, 0x05, + 0x05, 0x05, 0x05, 0x05, 0x05, 0x05, 0x05, 0x05, 0x05, 0x05, 0x05, 0x05, 0x05, 0x05, + 0x05, 0x08, 0x07, 0x05, 0x05, 0x05, 0x05, 0x05, 0x05, 0x05, 0x05, 0x05, 0x05, 0x05, + 0x05, 0x05, 0x05, 0x05, 0x08, 0x08, 0x08, 0x08, 0x08, 0x08, 0x08, 0x08, 0x08, 0x08, + 0x08, 0x08, 0x08, 0x08, 0x08, 0x08, 0x08, 0x08, 0x08, 0x08, 0x08, 0x08, 0x08, 0x08, + 0x05, 0x05, 0x05, 0x05, 0x05, 0x05, 0x05, 0x05, 0x05, 0x05, 0x05, 0x05, 0x05, 0x05, + 0x05, 0x05, 0x05, 0x05, 0x05, 0x05, 0x05, 0x05, 0x05, 0x05, 0x05, 0x05, 0x05, 0x05, + 0x05, 0x05, 0x05, 0x05, 0x05, 0x05, 0x05, 0x05, 0x05, 0x05, 0x05, 0x05, 0x05, 0x05, + 0x05, 0x05, 0x05, 0x05, 0x05, 0x05, 0x05, 0x05, 0x05, 0x05, 0x05, 0x05, 0x05, 0x05, + 0x05, 0x05, 0x05, 0x05, 0x05, 0x05, 0x05, 0x05, 0x05, 0x05, 0x05, 0x05, 0x05, 0x05, + 0x05, 0x05, 0x05, 0x05, 0x05, 0x05, 0x05, 0x05, 0x05, 0x05, 0x05, 0x05, 0x05, 0x05, + 0x05, 0x05, 0x05, 0x05, 0x05, 0x05, 0x05, 0x05, 0x05, 0x05, 0x05, 0x05, 0x05, 0x05, + 0x05, 0x05, 0x05, 0x05, 0x05, 0x05, 0x05, 0x05, 0x05, 0x05, 0x05, 0x05, 0x05, 0x05, + 0x05, 0x05, 0x05, 0x05, 0x05, 0x05, 0x05, 0x05, 0x05, 0x05, 0x05, 0x05, 0x05, 0x05, + 0x05, 0x05, 0x05, 0x05, 0x05, 0x05, 0x05, 0x05, 0x05, 0x05, 0x05, 0x05, 0x05, 0x05, + 0x05, 0x05, 0x05, 0x05, 0x05, 0x05, 0x05, 0x05, 0x05, 0x05, 0x05, 0x05, 0x05, 0x05, + 0x05, 0x05, 0x05, 0x05, 0x05, 0x05, 0x05, 0x05, 0x05, 0x05, 0x05, 0x05, 0x05, 0x05, + 0x05, 0x05, 0x05, 0x05, 0x05, 0x05, 0x05, 0x05, 0x05, 0x05, 0x05, 0x05, 0x05, 0x05, + 0x05, 0x05, 0x08, 0x08, 0x08, 0x08, 0x08, 0x08, 0x08, 0x08, 0x08, 0x08, 0x08, 0x08, + 0x08, 0x08, 0x08, 0x08, 0x08, 0x08, 0x08, 0x08, 0x08, 0x08, 0x08, 0x08, 0x08, 0x08, + 0x08, 0x08, 0x08, 0x08, 0x08, 0x08, 0x08, 0x08, 0x08, 0x08, 0x08, 0x08, 0x08, 0x08, + 0x08, 0x08, 0x08, 0x08, 0x08, 0x08, 0x08, 0x05 +}; +const u16 gFont0JapaneseGlyphs[] = INCBIN_U16("data/graphics/fonts/font0_jap.fwjpnfont"); + +// Font 1 +const u16 gFont1LatinGlyphs[] = INCBIN_U16("data/graphics/fonts/font1_latin.latfont"); +const u8 gFont1LatinGlyphWidths[] = +{ + 0x06, 0x06, 0x06, 0x06, 0x06, 0x06, 0x06, 0x06, 0x06, 0x06, 0x06, 0x06, 0x06, 0x06, + 0x06, 0x06, 0x08, 0x06, 0x06, 0x06, 0x06, 0x06, 0x06, 0x06, 0x06, 0x06, 0x06, 0x06, + 0x06, 0x06, 0x06, 0x06, 0x06, 0x06, 0x06, 0x06, 0x06, 0x08, 0x06, 0x06, 0x06, 0x06, + 0x06, 0x06, 0x09, 0x08, 0x08, 0x06, 0x06, 0x06, 0x06, 0x06, 0x0A, 0x08, 0x05, 0x06, + 0x06, 0x06, 0x06, 0x06, 0x06, 0x06, 0x06, 0x06, 0x06, 0x06, 0x06, 0x06, 0x06, 0x06, + 0x06, 0x06, 0x06, 0x06, 0x06, 0x06, 0x06, 0x06, 0x06, 0x06, 0x06, 0x06, 0x06, 0x08, + 0x08, 0x08, 0x08, 0x08, 0x08, 0x04, 0x06, 0x08, 0x05, 0x05, 0x06, 0x06, 0x06, 0x06, + 0x06, 0x06, 0x06, 0x06, 0x06, 0x06, 0x06, 0x06, 0x06, 0x06, 0x06, 0x06, 0x06, 0x06, + 0x06, 0x06, 0x06, 0x06, 0x06, 0x06, 0x06, 0x06, 0x06, 0x0C, 0x0C, 0x0C, 0x0C, 0x06, + 0x06, 0x06, 0x06, 0x06, 0x06, 0x06, 0x08, 0x08, 0x08, 0x06, 0x06, 0x06, 0x06, 0x06, + 0x06, 0x06, 0x06, 0x06, 0x06, 0x06, 0x06, 0x06, 0x06, 0x06, 0x06, 0x06, 0x06, 0x06, + 0x06, 0x06, 0x06, 0x06, 0x06, 0x06, 0x08, 0x06, 0x06, 0x06, 0x06, 0x06, 0x06, 0x06, + 0x06, 0x06, 0x06, 0x06, 0x06, 0x05, 0x06, 0x05, 0x06, 0x06, 0x06, 0x03, 0x03, 0x06, + 0x06, 0x08, 0x05, 0x09, 0x06, 0x06, 0x06, 0x06, 0x06, 0x06, 0x06, 0x06, 0x06, 0x06, + 0x06, 0x06, 0x06, 0x06, 0x06, 0x06, 0x06, 0x06, 0x06, 0x06, 0x06, 0x06, 0x06, 0x06, + 0x06, 0x06, 0x06, 0x06, 0x06, 0x06, 0x06, 0x06, 0x05, 0x06, 0x06, 0x04, 0x06, 0x05, + 0x05, 0x06, 0x05, 0x06, 0x06, 0x06, 0x05, 0x05, 0x05, 0x06, 0x06, 0x06, 0x06, 0x06, + 0x06, 0x08, 0x05, 0x06, 0x06, 0x06, 0x06, 0x06, 0x06, 0x06, 0x06, 0x06, 0x06, 0x06, + 0x06, 0x06, 0x06, 0x06, 0x0C, 0x0C, 0x0C, 0x0C, 0x08, 0x0A, 0x0A, 0x0A, 0x0A, 0x0A, + 0x0A, 0x0A, 0x0A, 0x0A, 0x0A, 0x0A, 0x0A, 0x0A, 0x0A, 0x0A, 0x0A, 0x0A, 0x0A, 0x0A, + 0x06, 0x06, 0x06, 0x06, 0x06, 0x06, 0x06, 0x06, 0x06, 0x06, 0x06, 0x06, 0x06, 0x06, + 0x06, 0x06, 0x06, 0x06, 0x06, 0x06, 0x06, 0x06, 0x06, 0x06, 0x06, 0x06, 0x06, 0x06, + 0x06, 0x06, 0x06, 0x06, 0x06, 0x06, 0x06, 0x06, 0x06, 0x06, 0x06, 0x06, 0x06, 0x06, + 0x06, 0x06, 0x06, 0x06, 0x06, 0x06, 0x06, 0x06, 0x06, 0x06, 0x06, 0x06, 0x06, 0x06, + 0x06, 0x06, 0x06, 0x06, 0x06, 0x06, 0x06, 0x06, 0x06, 0x06, 0x06, 0x06, 0x06, 0x06, + 0x06, 0x06, 0x06, 0x06, 0x06, 0x06, 0x06, 0x06, 0x06, 0x06, 0x06, 0x06, 0x06, 0x06, + 0x06, 0x06, 0x06, 0x06, 0x06, 0x06, 0x06, 0x06, 0x06, 0x06, 0x06, 0x06, 0x06, 0x06, + 0x06, 0x06, 0x06, 0x06, 0x06, 0x06, 0x06, 0x06, 0x06, 0x06, 0x06, 0x06, 0x06, 0x06, + 0x06, 0x06, 0x06, 0x06, 0x06, 0x06, 0x06, 0x06, 0x06, 0x06, 0x06, 0x06, 0x06, 0x06, + 0x06, 0x06, 0x06, 0x06, 0x06, 0x06, 0x06, 0x06, 0x06, 0x06, 0x06, 0x06, 0x06, 0x06, + 0x06, 0x06, 0x06, 0x06, 0x06, 0x06, 0x06, 0x06, 0x06, 0x06, 0x06, 0x06, 0x06, 0x06, + 0x06, 0x06, 0x06, 0x06, 0x06, 0x06, 0x06, 0x06, 0x06, 0x06, 0x06, 0x06, 0x06, 0x06, + 0x06, 0x06, 0x06, 0x06, 0x06, 0x06, 0x06, 0x06, 0x06, 0x06, 0x06, 0x06, 0x06, 0x06, + 0x06, 0x06, 0x08, 0x08, 0x08, 0x08, 0x08, 0x08, 0x08, 0x08, 0x08, 0x08, 0x08, 0x08, + 0x08, 0x08, 0x08, 0x08, 0x08, 0x08, 0x08, 0x08, 0x08, 0x08, 0x08, 0x08, 0x08, 0x08, + 0x08, 0x08, 0x08, 0x08, 0x08, 0x08, 0x08, 0x08, 0x08, 0x08, 0x08, 0x08, 0x08, 0x08, + 0x08, 0x08, 0x08, 0x08, 0x08, 0x08, 0x08, 0x06 +}; +const u16 gFont1JapaneseGlyphs[] = INCBIN_U16("data/graphics/fonts/font1_jap.fwjpnfont"); + +// Font 2 +const u16 gFont2LatinGlyphs[] = INCBIN_U16("data/graphics/fonts/font2_latin.latfont"); +const u8 gFont2LatinGlyphWidths[] = +{ + 0x06, 0x06, 0x06, 0x06, 0x06, 0x06, 0x06, 0x06, 0x06, 0x06, 0x06, 0x06, 0x06, 0x06, + 0x06, 0x06, 0x08, 0x06, 0x06, 0x06, 0x06, 0x06, 0x06, 0x06, 0x06, 0x06, 0x06, 0x06, + 0x06, 0x06, 0x06, 0x06, 0x06, 0x06, 0x06, 0x06, 0x06, 0x08, 0x06, 0x06, 0x06, 0x06, + 0x06, 0x06, 0x09, 0x08, 0x08, 0x06, 0x06, 0x06, 0x06, 0x06, 0x0A, 0x08, 0x05, 0x06, + 0x06, 0x06, 0x06, 0x06, 0x06, 0x06, 0x06, 0x06, 0x06, 0x06, 0x06, 0x06, 0x06, 0x06, + 0x06, 0x06, 0x06, 0x06, 0x06, 0x06, 0x06, 0x06, 0x06, 0x06, 0x06, 0x06, 0x06, 0x08, + 0x08, 0x08, 0x08, 0x08, 0x08, 0x04, 0x06, 0x08, 0x05, 0x05, 0x06, 0x06, 0x06, 0x06, + 0x06, 0x06, 0x06, 0x06, 0x06, 0x06, 0x06, 0x06, 0x06, 0x06, 0x06, 0x06, 0x06, 0x06, + 0x06, 0x06, 0x06, 0x06, 0x06, 0x06, 0x06, 0x06, 0x06, 0x0C, 0x0C, 0x0C, 0x0C, 0x06, + 0x06, 0x06, 0x06, 0x06, 0x06, 0x06, 0x08, 0x08, 0x08, 0x06, 0x06, 0x06, 0x06, 0x06, + 0x06, 0x06, 0x06, 0x06, 0x06, 0x06, 0x06, 0x06, 0x06, 0x06, 0x06, 0x06, 0x06, 0x06, + 0x06, 0x06, 0x06, 0x06, 0x06, 0x06, 0x08, 0x06, 0x06, 0x06, 0x06, 0x06, 0x06, 0x06, + 0x06, 0x06, 0x06, 0x06, 0x06, 0x05, 0x06, 0x05, 0x06, 0x06, 0x06, 0x03, 0x03, 0x06, + 0x06, 0x08, 0x05, 0x09, 0x06, 0x06, 0x06, 0x06, 0x06, 0x06, 0x06, 0x06, 0x06, 0x06, + 0x06, 0x06, 0x06, 0x06, 0x06, 0x06, 0x06, 0x06, 0x06, 0x06, 0x06, 0x06, 0x06, 0x06, + 0x06, 0x06, 0x06, 0x06, 0x06, 0x06, 0x06, 0x06, 0x05, 0x06, 0x06, 0x04, 0x06, 0x05, + 0x05, 0x06, 0x05, 0x06, 0x06, 0x06, 0x05, 0x05, 0x05, 0x06, 0x06, 0x06, 0x06, 0x06, + 0x06, 0x08, 0x05, 0x06, 0x06, 0x06, 0x06, 0x06, 0x06, 0x06, 0x06, 0x06, 0x06, 0x06, + 0x06, 0x06, 0x06, 0x06, 0x0C, 0x0C, 0x0C, 0x0C, 0x08, 0x0A, 0x0A, 0x0A, 0x0A, 0x0A, + 0x0A, 0x0A, 0x0A, 0x0A, 0x0A, 0x0A, 0x0A, 0x0A, 0x0A, 0x0A, 0x0A, 0x0A, 0x0A, 0x0A, + 0x06, 0x06, 0x06, 0x06, 0x06, 0x06, 0x06, 0x06, 0x06, 0x06, 0x06, 0x06, 0x06, 0x06, + 0x06, 0x06, 0x06, 0x06, 0x06, 0x06, 0x06, 0x06, 0x06, 0x06, 0x06, 0x06, 0x06, 0x06, + 0x06, 0x06, 0x06, 0x06, 0x06, 0x06, 0x06, 0x06, 0x06, 0x06, 0x06, 0x06, 0x06, 0x06, + 0x06, 0x06, 0x06, 0x06, 0x06, 0x06, 0x06, 0x06, 0x06, 0x06, 0x06, 0x06, 0x06, 0x06, + 0x06, 0x06, 0x06, 0x06, 0x06, 0x06, 0x06, 0x06, 0x06, 0x06, 0x06, 0x06, 0x06, 0x06, + 0x06, 0x06, 0x06, 0x06, 0x06, 0x06, 0x06, 0x06, 0x06, 0x06, 0x06, 0x06, 0x06, 0x06, + 0x06, 0x06, 0x06, 0x06, 0x06, 0x06, 0x06, 0x06, 0x06, 0x06, 0x06, 0x06, 0x06, 0x06, + 0x06, 0x06, 0x06, 0x06, 0x06, 0x06, 0x06, 0x06, 0x06, 0x06, 0x06, 0x06, 0x06, 0x06, + 0x06, 0x06, 0x06, 0x06, 0x06, 0x06, 0x06, 0x06, 0x06, 0x06, 0x06, 0x06, 0x06, 0x06, + 0x06, 0x06, 0x06, 0x06, 0x06, 0x06, 0x06, 0x06, 0x06, 0x06, 0x06, 0x06, 0x06, 0x06, + 0x06, 0x06, 0x06, 0x06, 0x06, 0x06, 0x06, 0x06, 0x06, 0x06, 0x06, 0x06, 0x06, 0x06, + 0x06, 0x06, 0x06, 0x06, 0x06, 0x06, 0x06, 0x06, 0x06, 0x06, 0x06, 0x06, 0x06, 0x06, + 0x06, 0x06, 0x06, 0x06, 0x06, 0x06, 0x06, 0x06, 0x06, 0x06, 0x06, 0x06, 0x06, 0x06, + 0x06, 0x06, 0x08, 0x08, 0x08, 0x08, 0x08, 0x08, 0x08, 0x08, 0x08, 0x08, 0x08, 0x08, + 0x08, 0x08, 0x08, 0x08, 0x08, 0x08, 0x08, 0x08, 0x08, 0x08, 0x08, 0x08, 0x08, 0x08, + 0x08, 0x08, 0x08, 0x08, 0x08, 0x08, 0x08, 0x08, 0x08, 0x08, 0x08, 0x08, 0x08, 0x08, + 0x08, 0x08, 0x08, 0x08, 0x08, 0x08, 0x08, 0x06 +}; +const u16 gFont2JapaneseGlyphs[] = INCBIN_U16("data/graphics/fonts/font2_jap.fwjpnfont"); +const u8 gFont2JapaneseGlyphWidths[] = +{ + 0x00, 0x0A, 0x0A, 0x0A, 0x0A, 0x0A, 0x0A, 0x0A, 0x0A, 0x0A, 0x0A, 0x0A, 0x0A, 0x0A, + 0x0A, 0x0A, 0x0A, 0x0A, 0x0A, 0x0A, 0x0A, 0x0A, 0x0A, 0x0A, 0x0A, 0x0A, 0x0A, 0x0A, + 0x0A, 0x0A, 0x0A, 0x0A, 0x0A, 0x0A, 0x0A, 0x0A, 0x0A, 0x0A, 0x0A, 0x0A, 0x0A, 0x0A, + 0x0A, 0x0A, 0x0A, 0x0A, 0x0A, 0x09, 0x09, 0x09, 0x09, 0x09, 0x09, 0x09, 0x09, 0x0A, + 0x0A, 0x0A, 0x0A, 0x0A, 0x0A, 0x0A, 0x0A, 0x0A, 0x0A, 0x0A, 0x0A, 0x0A, 0x0A, 0x0A, + 0x0A, 0x0A, 0x0A, 0x0A, 0x0A, 0x0A, 0x0A, 0x0A, 0x0A, 0x0A, 0x09, 0x0A, 0x0A, 0x0A, + 0x0A, 0x0A, 0x0A, 0x0A, 0x0A, 0x0A, 0x0A, 0x0A, 0x0A, 0x0A, 0x0A, 0x0A, 0x0A, 0x0A, + 0x0A, 0x0A, 0x0A, 0x0A, 0x0A, 0x0A, 0x0A, 0x0A, 0x0A, 0x0A, 0x0A, 0x0A, 0x0A, 0x0A, + 0x0A, 0x0A, 0x0A, 0x0A, 0x0A, 0x0A, 0x0A, 0x0A, 0x0A, 0x0A, 0x0A, 0x0A, 0x0A, 0x0A, + 0x0A, 0x09, 0x09, 0x09, 0x09, 0x09, 0x09, 0x09, 0x09, 0x0A, 0x0A, 0x0A, 0x0A, 0x0A, + 0x0A, 0x0A, 0x0A, 0x0A, 0x0A, 0x0A, 0x0A, 0x0A, 0x0A, 0x0A, 0x0A, 0x0A, 0x0A, 0x0A, + 0x0A, 0x0A, 0x0A, 0x0A, 0x0A, 0x0A, 0x09, 0x08, 0x07, 0x08, 0x08, 0x08, 0x08, 0x08, + 0x08, 0x08, 0x08, 0x05, 0x09, 0x0A, 0x0A, 0x0A, 0x08, 0x0A, 0x0A, 0x0A, 0x0A, 0x08, + 0x08, 0x08, 0x0A, 0x0A, 0x08, 0x06, 0x06, 0x06, 0x06, 0x06, 0x06, 0x06, 0x06, 0x06, + 0x06, 0x06, 0x06, 0x06, 0x06, 0x06, 0x06, 0x06, 0x06, 0x06, 0x06, 0x06, 0x06, 0x06, + 0x06, 0x06, 0x06, 0x06, 0x06, 0x06, 0x06, 0x06, 0x05, 0x06, 0x06, 0x02, 0x04, 0x06, + 0x03, 0x06, 0x06, 0x06, 0x06, 0x06, 0x06, 0x06, 0x06, 0x06, 0x06, 0x06, 0x06, 0x06, + 0x06, 0x06, 0x05, 0x06, 0x06, 0x06, 0x06, 0x06, 0x06, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x0A, 0x0A, 0x0A, 0x0A, 0x0A, 0x0A, 0x0A, 0x0A, 0x0A, 0x0A, + 0x0A, 0x0A, 0x0A, 0x0A, 0x0A, 0x0A, 0x0A, 0x0A, 0x0A, 0x0A, 0x0A, 0x0A, 0x0A, 0x00 +}; + +// Font 4 +const u16 gFont4LatinGlyphs[] = INCBIN_U16("data/graphics/fonts/font4_latin.latfont"); +const u8 gFont4LatinGlyphWidths[] = +{ + 0x06, 0x06, 0x06, 0x06, 0x06, 0x06, 0x06, 0x06, 0x06, 0x06, 0x06, 0x06, 0x06, 0x06, + 0x06, 0x06, 0x08, 0x06, 0x06, 0x06, 0x06, 0x06, 0x06, 0x06, 0x06, 0x06, 0x06, 0x06, + 0x06, 0x06, 0x06, 0x06, 0x06, 0x06, 0x06, 0x06, 0x06, 0x08, 0x06, 0x06, 0x06, 0x06, + 0x06, 0x06, 0x09, 0x08, 0x08, 0x06, 0x06, 0x06, 0x06, 0x06, 0x0A, 0x08, 0x05, 0x06, + 0x06, 0x06, 0x06, 0x06, 0x06, 0x06, 0x06, 0x06, 0x06, 0x06, 0x06, 0x06, 0x06, 0x06, + 0x06, 0x06, 0x06, 0x06, 0x06, 0x06, 0x06, 0x06, 0x06, 0x06, 0x06, 0x06, 0x06, 0x08, + 0x08, 0x08, 0x08, 0x08, 0x08, 0x04, 0x06, 0x08, 0x05, 0x05, 0x06, 0x06, 0x06, 0x06, + 0x06, 0x06, 0x06, 0x06, 0x06, 0x06, 0x06, 0x06, 0x06, 0x06, 0x06, 0x06, 0x06, 0x06, + 0x06, 0x06, 0x06, 0x06, 0x06, 0x06, 0x06, 0x06, 0x06, 0x0C, 0x0C, 0x0C, 0x0C, 0x06, + 0x06, 0x06, 0x06, 0x06, 0x06, 0x06, 0x08, 0x08, 0x08, 0x06, 0x06, 0x06, 0x06, 0x06, + 0x06, 0x06, 0x06, 0x06, 0x06, 0x06, 0x06, 0x06, 0x06, 0x06, 0x06, 0x06, 0x06, 0x06, + 0x06, 0x06, 0x06, 0x06, 0x06, 0x06, 0x08, 0x06, 0x06, 0x06, 0x06, 0x06, 0x06, 0x06, + 0x06, 0x06, 0x06, 0x06, 0x06, 0x05, 0x06, 0x05, 0x06, 0x06, 0x06, 0x03, 0x03, 0x06, + 0x06, 0x08, 0x05, 0x09, 0x06, 0x06, 0x06, 0x06, 0x06, 0x06, 0x06, 0x06, 0x06, 0x06, + 0x06, 0x06, 0x06, 0x06, 0x06, 0x06, 0x06, 0x06, 0x06, 0x06, 0x06, 0x06, 0x06, 0x06, + 0x06, 0x06, 0x06, 0x06, 0x06, 0x06, 0x06, 0x06, 0x05, 0x06, 0x06, 0x04, 0x06, 0x05, + 0x05, 0x06, 0x05, 0x06, 0x06, 0x06, 0x05, 0x05, 0x05, 0x06, 0x06, 0x06, 0x06, 0x06, + 0x06, 0x08, 0x05, 0x06, 0x06, 0x06, 0x06, 0x06, 0x06, 0x06, 0x06, 0x06, 0x06, 0x06, + 0x06, 0x06, 0x06, 0x06, 0x0C, 0x0C, 0x0C, 0x0C, 0x08, 0x0A, 0x0A, 0x0A, 0x0A, 0x0A, + 0x0A, 0x0A, 0x0A, 0x0A, 0x0A, 0x0A, 0x0A, 0x0A, 0x0A, 0x0A, 0x0A, 0x0A, 0x0A, 0x0A, + 0x06, 0x06, 0x06, 0x06, 0x06, 0x06, 0x06, 0x06, 0x06, 0x06, 0x06, 0x06, 0x06, 0x06, + 0x06, 0x06, 0x06, 0x06, 0x06, 0x06, 0x06, 0x06, 0x06, 0x06, 0x06, 0x06, 0x06, 0x06, + 0x06, 0x06, 0x06, 0x06, 0x06, 0x06, 0x06, 0x06, 0x06, 0x06, 0x06, 0x06, 0x06, 0x06, + 0x06, 0x06, 0x06, 0x06, 0x06, 0x06, 0x06, 0x06, 0x06, 0x06, 0x06, 0x06, 0x06, 0x06, + 0x06, 0x06, 0x06, 0x06, 0x06, 0x06, 0x06, 0x06, 0x06, 0x06, 0x06, 0x06, 0x06, 0x06, + 0x06, 0x06, 0x06, 0x06, 0x06, 0x06, 0x06, 0x06, 0x06, 0x06, 0x06, 0x06, 0x06, 0x06, + 0x06, 0x06, 0x06, 0x06, 0x06, 0x06, 0x06, 0x06, 0x06, 0x06, 0x06, 0x06, 0x06, 0x06, + 0x06, 0x06, 0x06, 0x06, 0x06, 0x06, 0x06, 0x06, 0x06, 0x06, 0x06, 0x06, 0x06, 0x06, + 0x06, 0x06, 0x06, 0x06, 0x06, 0x06, 0x06, 0x06, 0x06, 0x06, 0x06, 0x06, 0x06, 0x06, + 0x06, 0x06, 0x06, 0x06, 0x06, 0x06, 0x06, 0x06, 0x06, 0x06, 0x06, 0x06, 0x06, 0x06, + 0x06, 0x06, 0x06, 0x06, 0x06, 0x06, 0x06, 0x06, 0x06, 0x06, 0x06, 0x06, 0x06, 0x06, + 0x06, 0x06, 0x06, 0x06, 0x06, 0x06, 0x06, 0x06, 0x06, 0x06, 0x06, 0x06, 0x06, 0x06, + 0x06, 0x06, 0x06, 0x06, 0x06, 0x06, 0x06, 0x06, 0x06, 0x06, 0x06, 0x06, 0x06, 0x06, + 0x06, 0x06, 0x08, 0x08, 0x08, 0x08, 0x08, 0x08, 0x08, 0x08, 0x08, 0x08, 0x08, 0x08, + 0x08, 0x08, 0x08, 0x08, 0x08, 0x08, 0x08, 0x08, 0x08, 0x08, 0x08, 0x08, 0x08, 0x08, + 0x08, 0x08, 0x08, 0x08, 0x08, 0x08, 0x08, 0x08, 0x08, 0x08, 0x08, 0x08, 0x08, 0x08, + 0x08, 0x08, 0x08, 0x08, 0x08, 0x08, 0x08, 0x06 +}; +const u16 gFont4JapaneseGlyphs[] = INCBIN_U16("data/graphics/fonts/font4_jap.fwjpnfont"); +const u8 gFont4JapaneseGlyphWidths[] = +{ + 0x00, 0x0A, 0x0A, 0x0A, 0x0A, 0x0A, 0x0A, 0x0A, 0x0A, 0x0A, 0x0A, 0x0A, 0x0A, 0x0A, + 0x0A, 0x0A, 0x0A, 0x0A, 0x0A, 0x0A, 0x0A, 0x0A, 0x0A, 0x0A, 0x0A, 0x0A, 0x0A, 0x0A, + 0x0A, 0x0A, 0x0A, 0x0A, 0x0A, 0x0A, 0x0A, 0x0A, 0x0A, 0x0A, 0x0A, 0x0A, 0x0A, 0x0A, + 0x0A, 0x0A, 0x0A, 0x0A, 0x0A, 0x0A, 0x09, 0x09, 0x09, 0x09, 0x09, 0x09, 0x09, 0x0A, + 0x0A, 0x0A, 0x0A, 0x0A, 0x0A, 0x0A, 0x0A, 0x0A, 0x0A, 0x0A, 0x0A, 0x0A, 0x0A, 0x0A, + 0x0A, 0x0A, 0x0A, 0x0A, 0x0A, 0x0A, 0x0A, 0x0A, 0x0A, 0x0A, 0x09, 0x0A, 0x0A, 0x0A, + 0x0A, 0x0A, 0x0A, 0x0A, 0x0A, 0x0A, 0x0A, 0x0A, 0x0A, 0x0A, 0x0A, 0x0A, 0x0A, 0x0A, + 0x0A, 0x0A, 0x0A, 0x0A, 0x0A, 0x0A, 0x0A, 0x0A, 0x0A, 0x0A, 0x0A, 0x0A, 0x0A, 0x0A, + 0x0A, 0x0A, 0x0A, 0x0A, 0x0A, 0x0A, 0x0A, 0x0A, 0x0A, 0x0A, 0x0A, 0x0A, 0x0A, 0x0A, + 0x0A, 0x09, 0x09, 0x09, 0x09, 0x09, 0x09, 0x09, 0x09, 0x0A, 0x0A, 0x0A, 0x0A, 0x0A, + 0x0A, 0x0A, 0x0A, 0x0A, 0x0A, 0x0A, 0x0A, 0x0A, 0x0A, 0x0A, 0x0A, 0x0A, 0x0A, 0x0A, + 0x0A, 0x0A, 0x0A, 0x0A, 0x0A, 0x0A, 0x09, 0x08, 0x07, 0x08, 0x08, 0x08, 0x08, 0x08, + 0x08, 0x08, 0x08, 0x05, 0x09, 0x0A, 0x0A, 0x0A, 0x08, 0x0A, 0x0A, 0x0A, 0x0A, 0x08, + 0x08, 0x08, 0x0A, 0x0A, 0x08, 0x06, 0x06, 0x06, 0x06, 0x06, 0x06, 0x06, 0x06, 0x06, + 0x06, 0x06, 0x06, 0x06, 0x06, 0x06, 0x06, 0x06, 0x06, 0x06, 0x06, 0x06, 0x06, 0x06, + 0x06, 0x06, 0x06, 0x06, 0x06, 0x06, 0x06, 0x06, 0x05, 0x06, 0x06, 0x02, 0x04, 0x06, + 0x03, 0x06, 0x06, 0x06, 0x06, 0x06, 0x06, 0x06, 0x06, 0x06, 0x06, 0x06, 0x06, 0x06, + 0x06, 0x06, 0x05, 0x06, 0x06, 0x06, 0x06, 0x06, 0x06, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x0A, 0x0A, 0x0A, 0x0A, 0x0A, 0x0A, 0x0A, 0x0A, 0x0A, 0x0A, + 0x0A, 0x0A, 0x0A, 0x0A, 0x0A, 0x0A, 0x0A, 0x0A, 0x0A, 0x0A, 0x0A, 0x0A, 0x0A, 0x00 +}; + +// Font 5 +const u16 gFont5LatinGlyphs[] = INCBIN_U16("data/graphics/fonts/font5_latin.latfont"); +const u8 gFont5LatinGlyphWidths[] = +{ + 0x06, 0x06, 0x06, 0x06, 0x06, 0x06, 0x06, 0x06, 0x06, 0x06, 0x06, 0x06, 0x06, 0x06, + 0x06, 0x06, 0x08, 0x06, 0x06, 0x06, 0x06, 0x06, 0x06, 0x06, 0x06, 0x06, 0x06, 0x06, + 0x06, 0x06, 0x06, 0x06, 0x06, 0x06, 0x06, 0x06, 0x06, 0x08, 0x06, 0x06, 0x06, 0x06, + 0x06, 0x06, 0x09, 0x08, 0x08, 0x06, 0x06, 0x06, 0x06, 0x06, 0x0A, 0x08, 0x05, 0x06, + 0x06, 0x06, 0x06, 0x06, 0x06, 0x06, 0x06, 0x06, 0x06, 0x06, 0x06, 0x06, 0x06, 0x06, + 0x06, 0x06, 0x06, 0x06, 0x06, 0x06, 0x06, 0x06, 0x06, 0x06, 0x06, 0x06, 0x06, 0x08, + 0x08, 0x08, 0x08, 0x08, 0x08, 0x04, 0x06, 0x08, 0x05, 0x05, 0x06, 0x06, 0x06, 0x06, + 0x06, 0x06, 0x06, 0x06, 0x06, 0x06, 0x06, 0x06, 0x06, 0x06, 0x06, 0x06, 0x06, 0x06, + 0x06, 0x06, 0x06, 0x06, 0x06, 0x06, 0x06, 0x06, 0x06, 0x0C, 0x0C, 0x0C, 0x0C, 0x06, + 0x06, 0x06, 0x06, 0x06, 0x06, 0x06, 0x08, 0x08, 0x08, 0x06, 0x06, 0x06, 0x06, 0x06, + 0x06, 0x06, 0x06, 0x06, 0x06, 0x06, 0x06, 0x06, 0x06, 0x06, 0x06, 0x06, 0x06, 0x06, + 0x06, 0x06, 0x06, 0x06, 0x06, 0x06, 0x08, 0x06, 0x06, 0x06, 0x06, 0x06, 0x06, 0x06, + 0x06, 0x06, 0x06, 0x06, 0x06, 0x05, 0x06, 0x05, 0x06, 0x06, 0x06, 0x03, 0x03, 0x06, + 0x06, 0x08, 0x05, 0x09, 0x06, 0x06, 0x06, 0x06, 0x06, 0x06, 0x06, 0x06, 0x06, 0x06, + 0x06, 0x06, 0x06, 0x06, 0x06, 0x06, 0x06, 0x06, 0x06, 0x06, 0x06, 0x06, 0x06, 0x06, + 0x06, 0x06, 0x06, 0x06, 0x06, 0x06, 0x06, 0x06, 0x05, 0x06, 0x06, 0x04, 0x06, 0x05, + 0x05, 0x06, 0x05, 0x06, 0x06, 0x06, 0x05, 0x05, 0x05, 0x06, 0x06, 0x06, 0x06, 0x06, + 0x06, 0x08, 0x05, 0x06, 0x06, 0x06, 0x06, 0x06, 0x06, 0x06, 0x06, 0x06, 0x06, 0x06, + 0x06, 0x06, 0x06, 0x06, 0x0C, 0x0C, 0x0C, 0x0C, 0x08, 0x0A, 0x0A, 0x0A, 0x0A, 0x0A, + 0x0A, 0x0A, 0x0A, 0x0A, 0x0A, 0x0A, 0x0A, 0x0A, 0x0A, 0x0A, 0x0A, 0x0A, 0x0A, 0x0A, + 0x06, 0x06, 0x06, 0x06, 0x06, 0x06, 0x06, 0x06, 0x06, 0x06, 0x06, 0x06, 0x06, 0x06, + 0x06, 0x06, 0x06, 0x06, 0x06, 0x06, 0x06, 0x06, 0x06, 0x06, 0x06, 0x06, 0x06, 0x06, + 0x06, 0x06, 0x06, 0x06, 0x06, 0x06, 0x06, 0x06, 0x06, 0x06, 0x06, 0x06, 0x06, 0x06, + 0x06, 0x06, 0x06, 0x06, 0x06, 0x06, 0x06, 0x06, 0x06, 0x06, 0x06, 0x06, 0x06, 0x06, + 0x06, 0x06, 0x06, 0x06, 0x06, 0x06, 0x06, 0x06, 0x06, 0x06, 0x06, 0x06, 0x06, 0x06, + 0x06, 0x06, 0x06, 0x06, 0x06, 0x06, 0x06, 0x06, 0x06, 0x06, 0x06, 0x06, 0x06, 0x06, + 0x06, 0x06, 0x06, 0x06, 0x06, 0x06, 0x06, 0x06, 0x06, 0x06, 0x06, 0x06, 0x06, 0x06, + 0x06, 0x06, 0x06, 0x06, 0x06, 0x06, 0x06, 0x06, 0x06, 0x06, 0x06, 0x06, 0x06, 0x06, + 0x06, 0x06, 0x06, 0x06, 0x06, 0x06, 0x06, 0x06, 0x06, 0x06, 0x06, 0x06, 0x06, 0x06, + 0x06, 0x06, 0x06, 0x06, 0x06, 0x06, 0x06, 0x06, 0x06, 0x06, 0x06, 0x06, 0x06, 0x06, + 0x06, 0x06, 0x06, 0x06, 0x06, 0x06, 0x06, 0x06, 0x06, 0x06, 0x06, 0x06, 0x06, 0x06, + 0x06, 0x06, 0x06, 0x06, 0x06, 0x06, 0x06, 0x06, 0x06, 0x06, 0x06, 0x06, 0x06, 0x06, + 0x06, 0x06, 0x06, 0x06, 0x06, 0x06, 0x06, 0x06, 0x06, 0x06, 0x06, 0x06, 0x06, 0x06, + 0x06, 0x06, 0x08, 0x08, 0x08, 0x08, 0x08, 0x08, 0x08, 0x08, 0x08, 0x08, 0x08, 0x08, + 0x08, 0x08, 0x08, 0x08, 0x08, 0x08, 0x08, 0x08, 0x08, 0x08, 0x08, 0x08, 0x08, 0x08, + 0x08, 0x08, 0x08, 0x08, 0x08, 0x08, 0x08, 0x08, 0x08, 0x08, 0x08, 0x08, 0x08, 0x08, + 0x08, 0x08, 0x08, 0x08, 0x08, 0x08, 0x08, 0x06 +}; +const u16 gFont5JapaneseGlyphs[] = INCBIN_U16("data/graphics/fonts/font5_jap.fwjpnfont"); +const u8 gFont5JapaneseGlyphWidths[] = +{ + 0x00, 0x0A, 0x0A, 0x0A, 0x0A, 0x0A, 0x0A, 0x0A, 0x0A, 0x0A, 0x0A, 0x0A, 0x0A, 0x0A, + 0x0A, 0x0A, 0x0A, 0x0A, 0x0A, 0x0A, 0x0A, 0x0A, 0x0A, 0x0A, 0x0A, 0x0A, 0x0A, 0x0A, + 0x0A, 0x0A, 0x0A, 0x0A, 0x0A, 0x0A, 0x0A, 0x0A, 0x0A, 0x0A, 0x0A, 0x0A, 0x0A, 0x0A, + 0x0A, 0x0A, 0x0A, 0x0A, 0x0A, 0x09, 0x09, 0x09, 0x09, 0x09, 0x09, 0x09, 0x09, 0x0A, + 0x0A, 0x0A, 0x0A, 0x0A, 0x0A, 0x0A, 0x0A, 0x0A, 0x0A, 0x0A, 0x0A, 0x0A, 0x0A, 0x0A, + 0x0A, 0x0A, 0x0A, 0x0A, 0x0A, 0x0A, 0x0A, 0x0A, 0x0A, 0x0A, 0x09, 0x0A, 0x0A, 0x0A, + 0x0A, 0x0A, 0x0A, 0x0A, 0x0A, 0x0A, 0x0A, 0x0A, 0x0A, 0x0A, 0x0A, 0x0A, 0x0A, 0x0A, + 0x0A, 0x0A, 0x0A, 0x0A, 0x0A, 0x0A, 0x0A, 0x0A, 0x0A, 0x0A, 0x0A, 0x0A, 0x0A, 0x0A, + 0x0A, 0x0A, 0x0A, 0x0A, 0x0A, 0x0A, 0x0A, 0x0A, 0x0A, 0x0A, 0x0A, 0x0A, 0x0A, 0x0A, + 0x0A, 0x09, 0x09, 0x09, 0x09, 0x09, 0x09, 0x09, 0x08, 0x0A, 0x0A, 0x0A, 0x0A, 0x0A, + 0x0A, 0x0A, 0x0A, 0x0A, 0x0A, 0x0A, 0x0A, 0x0A, 0x0A, 0x0A, 0x0A, 0x0A, 0x0A, 0x0A, + 0x0A, 0x0A, 0x0A, 0x0A, 0x0A, 0x0A, 0x09, 0x08, 0x07, 0x08, 0x08, 0x08, 0x08, 0x08, + 0x08, 0x08, 0x08, 0x05, 0x09, 0x0A, 0x0A, 0x0A, 0x08, 0x0A, 0x0A, 0x0A, 0x0A, 0x08, + 0x08, 0x08, 0x0A, 0x0A, 0x08, 0x06, 0x06, 0x06, 0x06, 0x06, 0x06, 0x06, 0x06, 0x06, + 0x06, 0x06, 0x06, 0x06, 0x06, 0x06, 0x06, 0x06, 0x06, 0x06, 0x06, 0x06, 0x06, 0x06, + 0x06, 0x06, 0x06, 0x06, 0x06, 0x06, 0x06, 0x06, 0x05, 0x06, 0x06, 0x02, 0x04, 0x06, + 0x03, 0x06, 0x06, 0x06, 0x06, 0x06, 0x06, 0x06, 0x06, 0x06, 0x06, 0x06, 0x06, 0x06, + 0x06, 0x06, 0x05, 0x06, 0x06, 0x06, 0x06, 0x06, 0x06, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x0A, 0x0A, 0x0A, 0x0A, 0x0A, 0x0A, 0x0A, 0x0A, 0x0A, 0x0A, + 0x0A, 0x0A, 0x0A, 0x0A, 0x0A, 0x0A, 0x0A, 0x0A, 0x0A, 0x0A, 0x0A, 0x0A, 0x0A, 0x00 +}; + +// Font 9 +const u16 gFont9JapaneseGlyphs[] = INCBIN_U16("data/graphics/fonts/font9_jap.fwjpnfont"); u16 Font0Func(struct TextPrinter *textPrinter) { @@ -989,7 +1304,7 @@ _08005CD0:\n\ ldrb r2, [r6, 0x1F]\n\ cmp r2, 0\n\ beq _08005D40\n\ - ldr r4, _08005D04 @ =gUnknown_81EA650\n\ + ldr r4, _08005D04 @ =gWindowVerticalScrollSpeeds\n\ ldr r5, _08005D08 @ =gSaveBlock2Ptr\n\ ldr r0, [r5]\n\ ldrb r0, [r0, 0x14]\n\ @@ -1011,7 +1326,7 @@ _08005CD0:\n\ strb r0, [r6, 0x1F]\n\ b _08005D36\n\ .align 2, 0\n\ -_08005D04: .4byte gUnknown_81EA650\n\ +_08005D04: .4byte gWindowVerticalScrollSpeeds\n\ _08005D08: .4byte gSaveBlock2Ptr\n\ _08005D0C:\n\ ldrb r0, [r6, 0x4]\n\ @@ -1446,53 +1761,40 @@ u8 RenderTextFont9(u8 *pixels, u8 fontId, u8 *str) return 1; } -// TODO: What is this? -struct Unk80062B0 { - u8 filler0[0x26]; - u16 unk26; - u8 filler28[0x6]; - s16 unk2E; - s16 unk30; -}; - -void sub_80062B0(struct Unk80062B0 *unkStruct) +void sub_80062B0(struct Sprite *sprite) { - if(unkStruct->unk2E) + if(sprite->data[0]) { - unkStruct->unk2E--; + sprite->data[0]--; } else { - unkStruct->unk2E = 8; - switch(unkStruct->unk30) + sprite->data[0] = 8; + switch(sprite->data[1]) { case 0: - unkStruct->unk26 = 0; + sprite->pos2.y = 0; break; case 1: - unkStruct->unk26 = 1; + sprite->pos2.y = 1; break; case 2: - unkStruct->unk26 = 2; + sprite->pos2.y = 2; break; case 3: - unkStruct->unk26 = 1; - unkStruct->unk30 = 0; + sprite->pos2.y = 1; + sprite->data[1] = 0; return; } - unkStruct->unk30++; + sprite->data[1]++; } } -extern const struct SpriteSheet gUnknown_81EA68C[]; -extern const struct SpritePalette gUnknown_81EA6A4; -extern const struct SpriteTemplate gUnknown_81EA6B4; - u8 sub_8006300(u8 sheetId, u16 x, u16 y, u8 priority, u8 subpriority) { u8 spriteId; LoadSpriteSheet(&gUnknown_81EA68C[sheetId & 1]); - LoadSpritePalette(&gUnknown_81EA6A4); + LoadSpritePalette(gUnknown_81EA6A4); spriteId = CreateSprite(&gUnknown_81EA6B4, x + 3, y + 4, subpriority); gSprites[spriteId].oam.priority = (priority & 3); gSprites[spriteId].oam.matrixNum = 0; From 77f8b38417393b8639912efbcc18f7ac610549c1 Mon Sep 17 00:00:00 2001 From: ProjectRevoTPP Date: Sun, 7 Oct 2018 01:01:45 -0400 Subject: [PATCH 07/13] address comments --- data/graphics/fonts/down_arrow_3.png | Bin 189 -> 159 bytes data/graphics/fonts/down_arrow_4.png | Bin 0 -> 160 bytes src/text.c | 91 ++++++++++++++------------- 3 files changed, 46 insertions(+), 45 deletions(-) create mode 100644 data/graphics/fonts/down_arrow_4.png diff --git a/data/graphics/fonts/down_arrow_3.png b/data/graphics/fonts/down_arrow_3.png index 85a157564e2db5a3524b38cd91d8f4cc356c3d67..6345eacfb74c48fd37e37ca09f3a8d3c7eb47c6c 100644 GIT binary patch delta 55 zcmdnXIG=HXIF|qmGXn#|+q;i~CMw#qYk9gjhH%WBn64>BNJxk(23lT4%0tQc4 KKbLh*2~7a9Mh}1h delta 85 zcmbQwxR-H)IF|woGXn#|%jHl1PgJyL_waOa43U^RFx=0Dbtlk`Q>Kqh&*`njxgN@xNASoSdL literal 0 HcmV?d00001 diff --git a/src/text.c b/src/text.c index bb2f62f04..7fb0ab034 100644 --- a/src/text.c +++ b/src/text.c @@ -27,7 +27,8 @@ const u8 gDownArrowTiles[] = INCBIN_U8("data/graphics/fonts/down_arrow.4 const u8 gDarkDownArrowTiles[] = INCBIN_U8("data/graphics/fonts/down_arrow_RS.4bpp"); const u8 gTinyArrowTiles[] = INCBIN_U8("data/graphics/fonts/down_arrow_2.4bpp"); const u8 gTinyDarkDownArrowTiles[] = INCBIN_U8("data/graphics/fonts/down_arrow_RS_2.4bpp"); -const u8 gDoubleArrowTiles[] = INCBIN_U8("data/graphics/fonts/down_arrow_3.4bpp"); +const u8 gDoubleArrowTiles1[] = INCBIN_U8("data/graphics/fonts/down_arrow_3.4bpp"); +const u8 gDoubleArrowTiles2[] = INCBIN_U8("data/graphics/fonts/down_arrow_4.4bpp"); const u8 gDownArrowYCoords[] = { 0x0, 0x10, 0x20, 0x10 }; const u8 gWindowVerticalScrollSpeeds[] = { 0x1, 0x2 , 0x4 , 0x0 }; @@ -44,8 +45,8 @@ const struct GlyphWidthFunc gGlyphWidthFuncs[] = { const struct SpriteSheet gUnknown_81EA68C[] = { - {gDoubleArrowTiles, 0x0080, 0x8000}, - {gDoubleArrowTiles + 0x80, 0x0080, 0x8000}, + {gDoubleArrowTiles1, sizeof(gDoubleArrowTiles1), 0x8000}, + {gDoubleArrowTiles2, sizeof(gDoubleArrowTiles2), 0x8000}, {NULL} }; @@ -1849,8 +1850,8 @@ void DecompressGlyphFont0(u16 glyphId, bool32 isJapanese) glyphs = gFont0JapaneseGlyphs + (0x100 * (glyphId >> 0x4)) + (0x8 * (glyphId & 0xF)); DecompressGlyphTile(glyphs, (u16 *)gGlyphInfo); DecompressGlyphTile(glyphs + 0x80, (u16 *)(gGlyphInfo + 0x40)); - gGlyphInfo[0x80] = 8; // gGlyphWidth - gGlyphInfo[0x81] = 12; // gGlyphHeight + gGlyphInfo[0x80] = 8; + gGlyphInfo[0x81] = 12; } else { @@ -1879,9 +1880,9 @@ void DecompressGlyphFont1(u16 glyphId, bool32 isJapanese) int eff; glyphs = gFont1JapaneseGlyphs + (0x100 * (glyphId >> 0x4)) + (0x8 * (glyphId & (eff = 0xF))); // shh, no questions, only matching now DecompressGlyphTile(glyphs, (u16 *)gGlyphInfo); - DecompressGlyphTile(glyphs + 0x80, (u16 *)(gGlyphInfo + 0x40)); // gUnknown_03002FD0 - gGlyphInfo[0x80] = 8; // gGlyphWidth - gGlyphInfo[0x81] = 16; // gGlyphHeight + DecompressGlyphTile(glyphs + 0x80, (u16 *)(gGlyphInfo + 0x40)); + gGlyphInfo[0x80] = 8; + gGlyphInfo[0x81] = 16; } else { @@ -1923,18 +1924,18 @@ void DecompressGlyphFont2(u16 glyphId, bool32 isJapanese) gGlyphInfo[0x81] = 12; } } - else // _080065F8 + else { glyphs = gFont2JapaneseGlyphs + (0x100 * (glyphId >> 0x3)) + (0x10 * (glyphId & 0x7)); DecompressGlyphTile(glyphs, (u16 *)gGlyphInfo); - DecompressGlyphTile(glyphs + 0x8, (u16 *)(gGlyphInfo + 0x20)); // gUnknown_03002FD0 - DecompressGlyphTile(glyphs + 0x80, (u16 *)(gGlyphInfo + 0x40)); // gUnknown_03002FB0 - DecompressGlyphTile(glyphs + 0x88, (u16 *)(gGlyphInfo + 0x60)); // gUnknown_03002FF0 - gGlyphInfo[0x80] = gFont2JapaneseGlyphWidths[glyphId]; // gGlyphWidth - gGlyphInfo[0x81] = 12; // gGlyphHeight + DecompressGlyphTile(glyphs + 0x8, (u16 *)(gGlyphInfo + 0x20)); + DecompressGlyphTile(glyphs + 0x80, (u16 *)(gGlyphInfo + 0x40)); + DecompressGlyphTile(glyphs + 0x88, (u16 *)(gGlyphInfo + 0x60)); + gGlyphInfo[0x80] = gFont2JapaneseGlyphWidths[glyphId]; + gGlyphInfo[0x81] = 12; } } - else // _0800665C + else { if(glyphId == 0) { @@ -1948,7 +1949,7 @@ void DecompressGlyphFont2(u16 glyphId, bool32 isJapanese) gGlyphInfo[0x81] = 14; } } - else // _0800669C + else { glyphs = gFont2LatinGlyphs + (0x20 * glyphId); DecompressGlyphTile(glyphs, (u16 *)gGlyphInfo); @@ -2000,11 +2001,11 @@ void DecompressGlyphFont3(u16 glyphId, bool32 isJapanese) { glyphs = gFont2JapaneseGlyphs + (0x100 * (glyphId >> 0x3)) + (0x10 * (glyphId & 0x7)); DecompressGlyphTile(glyphs, (u16 *)gGlyphInfo); - DecompressGlyphTile(glyphs + 0x8, (u16 *)(gGlyphInfo + 0x20)); // gUnknown_03002FD0 - DecompressGlyphTile(glyphs + 0x80, (u16 *)(gGlyphInfo + 0x40)); // gUnknown_03002FB0 - DecompressGlyphTile(glyphs + 0x88, (u16 *)(gGlyphInfo + 0x60)); // gUnknown_03002FF0 - gGlyphInfo[0x80] = 10; // gGlyphWidth - gGlyphInfo[0x81] = 12; // gGlyphHeight + DecompressGlyphTile(glyphs + 0x8, (u16 *)(gGlyphInfo + 0x20)); + DecompressGlyphTile(glyphs + 0x80, (u16 *)(gGlyphInfo + 0x40)); + DecompressGlyphTile(glyphs + 0x88, (u16 *)(gGlyphInfo + 0x60)); + gGlyphInfo[0x80] = 10; + gGlyphInfo[0x81] = 12; } } else @@ -2039,15 +2040,15 @@ void DecompressGlyphFont4(u16 glyphId, bool32 isJapanese) gGlyphInfo[0x81] = 12; } } - else // _0800682C + else { glyphs = gFont4JapaneseGlyphs + (0x100 * (glyphId >> 0x3)) + (0x10 * (glyphId & 0x7)); DecompressGlyphTile(glyphs, (u16 *)gGlyphInfo); - DecompressGlyphTile(glyphs + 0x8, (u16 *)(gGlyphInfo + 0x20)); // gUnknown_03002FD0 - DecompressGlyphTile(glyphs + 0x80, (u16 *)(gGlyphInfo + 0x40)); // gUnknown_03002FB0 - DecompressGlyphTile(glyphs + 0x88, (u16 *)(gGlyphInfo + 0x60)); // gUnknown_03002FF0 - gGlyphInfo[0x80] = gFont4JapaneseGlyphWidths[glyphId]; // gGlyphWidth - gGlyphInfo[0x81] = 12; // gGlyphHeight + DecompressGlyphTile(glyphs + 0x8, (u16 *)(gGlyphInfo + 0x20)); + DecompressGlyphTile(glyphs + 0x80, (u16 *)(gGlyphInfo + 0x40)); + DecompressGlyphTile(glyphs + 0x88, (u16 *)(gGlyphInfo + 0x60)); + gGlyphInfo[0x80] = gFont4JapaneseGlyphWidths[glyphId]; + gGlyphInfo[0x81] = 12; } } else @@ -2064,15 +2065,15 @@ void DecompressGlyphFont4(u16 glyphId, bool32 isJapanese) gGlyphInfo[0x81] = 14; } } - else // _080068D0 + else { glyphs = gFont4LatinGlyphs + (0x20 * glyphId); DecompressGlyphTile(glyphs, (u16 *)gGlyphInfo); - DecompressGlyphTile(glyphs + 0x8, (u16 *)(gGlyphInfo + 0x20)); // gUnknown_03002FD0 - DecompressGlyphTile(glyphs + 0x10, (u16 *)(gGlyphInfo + 0x40)); // gUnknown_03002FB0 - DecompressGlyphTile(glyphs + 0x18, (u16 *)(gGlyphInfo + 0x60)); // gUnknown_03002FF0 - gGlyphInfo[0x80] = gFont4LatinGlyphWidths[glyphId]; // gGlyphWidth - gGlyphInfo[0x81] = 14; // gGlyphHeight + DecompressGlyphTile(glyphs + 0x8, (u16 *)(gGlyphInfo + 0x20)); + DecompressGlyphTile(glyphs + 0x10, (u16 *)(gGlyphInfo + 0x40)); + DecompressGlyphTile(glyphs + 0x18, (u16 *)(gGlyphInfo + 0x60)); + gGlyphInfo[0x80] = gFont4LatinGlyphWidths[glyphId]; + gGlyphInfo[0x81] = 14; } } } @@ -2110,15 +2111,15 @@ void DecompressGlyphFont5(u16 glyphId, bool32 isJapanese) gGlyphInfo[0x81] = 12; } } - else // _08006998 + else { glyphs = gFont5JapaneseGlyphs + (0x100 * (glyphId >> 0x3)) + (0x10 * (glyphId & 0x7)); DecompressGlyphTile(glyphs, (u16 *)gGlyphInfo); - DecompressGlyphTile(glyphs + 0x8, (u16 *)(gGlyphInfo + 0x20)); // gUnknown_03002FD0 - DecompressGlyphTile(glyphs + 0x80, (u16 *)(gGlyphInfo + 0x40)); // gUnknown_03002FB0 - DecompressGlyphTile(glyphs + 0x88, (u16 *)(gGlyphInfo + 0x60)); // gUnknown_03002FF0 - gGlyphInfo[0x80] = gFont5JapaneseGlyphWidths[glyphId]; // gGlyphWidth - gGlyphInfo[0x81] = 12; // gGlyphHeight + DecompressGlyphTile(glyphs + 0x8, (u16 *)(gGlyphInfo + 0x20)); + DecompressGlyphTile(glyphs + 0x80, (u16 *)(gGlyphInfo + 0x40)); + DecompressGlyphTile(glyphs + 0x88, (u16 *)(gGlyphInfo + 0x60)); + gGlyphInfo[0x80] = gFont5JapaneseGlyphWidths[glyphId]; + gGlyphInfo[0x81] = 12; } } else @@ -2139,11 +2140,11 @@ void DecompressGlyphFont5(u16 glyphId, bool32 isJapanese) { glyphs = gFont5LatinGlyphs + (0x20 * glyphId); DecompressGlyphTile(glyphs, (u16 *)gGlyphInfo); - DecompressGlyphTile(glyphs + 0x8, (u16 *)(gGlyphInfo + 0x20)); // gUnknown_03002FD0 - DecompressGlyphTile(glyphs + 0x10, (u16 *)(gGlyphInfo + 0x40)); // gUnknown_03002FB0 - DecompressGlyphTile(glyphs + 0x18, (u16 *)(gGlyphInfo + 0x60)); // gUnknown_03002FF0 - gGlyphInfo[0x80] = gFont5LatinGlyphWidths[glyphId]; // gGlyphWidth - gGlyphInfo[0x81] = 14; // gGlyphHeight + DecompressGlyphTile(glyphs + 0x8, (u16 *)(gGlyphInfo + 0x20)); + DecompressGlyphTile(glyphs + 0x10, (u16 *)(gGlyphInfo + 0x40)); + DecompressGlyphTile(glyphs + 0x18, (u16 *)(gGlyphInfo + 0x60)); + gGlyphInfo[0x80] = gFont5LatinGlyphWidths[glyphId]; + gGlyphInfo[0x81] = 14; } } } @@ -2165,7 +2166,7 @@ void DecompressGlyphFont9(u16 glyphId) { const u16* glyphs = gFont9JapaneseGlyphs + (0x100 * (glyphId >> 0x4)) + (0x8 * (glyphId & 0xF)); DecompressGlyphTile(glyphs, (u16 *)gGlyphInfo); - DecompressGlyphTile(glyphs + 0x80, (u16 *)(gGlyphInfo + 0x40)); // gUnknown_03002FD0 + DecompressGlyphTile(glyphs + 0x80, (u16 *)(gGlyphInfo + 0x40)); gGlyphInfo[0x80] = 8; gGlyphInfo[0x81] = 12; } From 7040e8e9568a21ef8417c7de6e47fd636dcd7865 Mon Sep 17 00:00:00 2001 From: PikalaxALT Date: Mon, 8 Oct 2018 12:10:33 -0400 Subject: [PATCH 08/13] sub_8146C30 --- asm/menews_jisan.s | 47 ----------------------------- include/global.h | 21 ++++++++++++- include/mevent.h | 6 ++++ ld_script.txt | 1 + src/menews_jisan.c | 74 ++++++++++++++++++++++++++++++++++++++++++++++ 5 files changed, 101 insertions(+), 48 deletions(-) create mode 100644 include/mevent.h create mode 100644 src/menews_jisan.c diff --git a/asm/menews_jisan.s b/asm/menews_jisan.s index abd5e44f4..160d0e4c8 100644 --- a/asm/menews_jisan.s +++ b/asm/menews_jisan.s @@ -5,53 +5,6 @@ .text - thumb_func_start sub_8146C30 -sub_8146C30: @ 8146C30 - push {r4,r5,lr} - adds r4, r0, 0 - bl sub_8143D94 - adds r5, r0, 0 - movs r0, 0x3 - adds r1, r4, 0 - ands r1, r0 - ldrb r2, [r5] - movs r0, 0x4 - negs r0, r0 - ands r0, r2 - orrs r0, r1 - strb r0, [r5] - cmp r4, 0x2 - bhi _08146C56 - cmp r4, 0x1 - bcs _08146C5C - b _08146C80 -_08146C56: - cmp r4, 0x3 - beq _08146C6E - b _08146C80 -_08146C5C: - bl Random - lsls r0, 16 - lsrs r0, 16 - movs r1, 0xF - bl __umodsi3 - adds r0, 0x10 - b _08146C7E -_08146C6E: - bl Random - lsls r0, 16 - lsrs r0, 16 - movs r1, 0xF - bl __umodsi3 - adds r0, 0x1 -_08146C7E: - strb r0, [r5, 0x1] -_08146C80: - pop {r4,r5} - pop {r0} - bx r0 - thumb_func_end sub_8146C30 - thumb_func_start sub_8146C88 sub_8146C88: @ 8146C88 push {lr} diff --git a/include/global.h b/include/global.h index 75911b9f2..2b35e303d 100644 --- a/include/global.h +++ b/include/global.h @@ -466,6 +466,14 @@ struct RecordMixingDayCareMail bool16 holdsItem[DAYCARE_MON_COUNT]; }; +struct MysteryEventStruct +{ + u8 unk_0_0:2; + u8 unk_0_2:6; + u8 unk_1; + u8 filler_2[0x1ba]; +}; + #define MAP_OBJECTS_COUNT 16 #define BERRY_TREES_COUNT 128 #define FLAGS_COUNT 300 @@ -476,7 +484,18 @@ struct SaveBlock1 { /*0x0000*/ u8 filler[0x4]; /*0x0004*/ struct WarpData location; - /*0x000C*/ u8 fillerC[0x3610]; + /*0x0C*/ struct WarpData warp1; + /*0x14*/ struct WarpData warp2; + /*0x1C*/ struct WarpData lastHealLocation; + /*0x24*/ struct WarpData warp4; + /*0x002C*/ u8 filler2C[0x60C]; + /*0x638*/ u8 trainerRematchStepCounter; + u8 filler_639; + /*0x63a*/ u8 trainerRematches[100]; + /*0x06A0*/ struct MapObject mapObjects[MAP_OBJECTS_COUNT]; + /*0x08E0*/ struct MapObjectTemplate mapObjectTemplates[64]; + /*0x0EE0*/ u8 fillerEE0[0x2580]; + /*0x3460*/ struct MysteryEventStruct unk_3460; /*0x361C*/ struct RamScript ramScript; /*0x3A08*/ u8 filler3A08[0x44]; /*0x3A4C*/ u8 rivalName[PLAYER_NAME_LENGTH]; diff --git a/include/mevent.h b/include/mevent.h new file mode 100644 index 000000000..b196d655b --- /dev/null +++ b/include/mevent.h @@ -0,0 +1,6 @@ +#ifndef GUARD_MEVENT_H +#define GUARD_MEVENT_H + +struct MysteryEventStruct * sub_8143D94(void); + +#endif //GUARD_MEVENT_H diff --git a/ld_script.txt b/ld_script.txt index bc27ac048..777735b7c 100644 --- a/ld_script.txt +++ b/ld_script.txt @@ -249,6 +249,7 @@ SECTIONS { asm/mevent.o(.text); asm/mevent_server.o(.text); asm/mevent_8145654.o(.text); + src/menews_jisan.o(.text); asm/menews_jisan.o(.text); asm/seagallop.o(.text); asm/unk_8147500.o(.text); diff --git a/src/menews_jisan.c b/src/menews_jisan.c new file mode 100644 index 000000000..afaef7cf9 --- /dev/null +++ b/src/menews_jisan.c @@ -0,0 +1,74 @@ +#include "global.h" +#include "mevent.h" +#include "random.h" + +#ifdef NONMATCHING +void sub_8146C30(u32 a0) +{ + struct MysteryEventStruct *r5 = sub_8143D94(); + + r5->unk_0_0 = a0; + asm_comment("The switch logic does not match. Specifically, the \"bhi\" is replaced with a \"bls\" and the comparisons with 1 and 3 are swapped chronologically."); + switch (a0) + { + case 0: + r5->unk_1 = (Random() % 15) + 16; + break; + case 1: + break; + case 2: + break; + case 3: + r5->unk_1 = (Random() % 15) + 1; + break; + } +} +#else +NAKED +void sub_8146C30(u32 a0) +{ + asm_unified("\tpush {r4,r5,lr}\n" + "\tadds r4, r0, 0\n" + "\tbl sub_8143D94\n" + "\tadds r5, r0, 0\n" + "\tmovs r0, 0x3\n" + "\tadds r1, r4, 0\n" + "\tands r1, r0\n" + "\tldrb r2, [r5]\n" + "\tmovs r0, 0x4\n" + "\tnegs r0, r0\n" + "\tands r0, r2\n" + "\torrs r0, r1\n" + "\tstrb r0, [r5]\n" + "\tcmp r4, 0x2\n" + "\tbhi _08146C56\n" + "\tcmp r4, 0x1\n" + "\tbcs _08146C5C\n" + "\tb _08146C80\n" + "_08146C56:\n" + "\tcmp r4, 0x3\n" + "\tbeq _08146C6E\n" + "\tb _08146C80\n" + "_08146C5C:\n" + "\tbl Random\n" + "\tlsls r0, 16\n" + "\tlsrs r0, 16\n" + "\tmovs r1, 0xF\n" + "\tbl __umodsi3\n" + "\tadds r0, 0x10\n" + "\tb _08146C7E\n" + "_08146C6E:\n" + "\tbl Random\n" + "\tlsls r0, 16\n" + "\tlsrs r0, 16\n" + "\tmovs r1, 0xF\n" + "\tbl __umodsi3\n" + "\tadds r0, 0x1\n" + "_08146C7E:\n" + "\tstrb r0, [r5, 0x1]\n" + "_08146C80:\n" + "\tpop {r4,r5}\n" + "\tpop {r0}\n" + "\tbx r0"); +} +#endif From 4dd5029fdc505636d8ac00add5425bb22fd082ba Mon Sep 17 00:00:00 2001 From: PikalaxALT Date: Mon, 8 Oct 2018 14:24:44 -0400 Subject: [PATCH 09/13] sub_8146CA4 --- asm/menews_jisan.s | 50 -------------------------------------------- include/event_data.h | 1 + include/global.h | 10 +++++---- src/menews_jisan.c | 25 ++++++++++++++++++++++ 4 files changed, 32 insertions(+), 54 deletions(-) diff --git a/asm/menews_jisan.s b/asm/menews_jisan.s index 160d0e4c8..4661c1a50 100644 --- a/asm/menews_jisan.s +++ b/asm/menews_jisan.s @@ -5,56 +5,6 @@ .text - thumb_func_start sub_8146C88 -sub_8146C88: @ 8146C88 - push {lr} - bl sub_8143D94 - movs r1, 0 - strb r1, [r0] - strb r1, [r0, 0x1] - ldr r0, _08146CA0 @ =0x00004028 - bl VarSet - pop {r0} - bx r0 - .align 2, 0 -_08146CA0: .4byte 0x00004028 - thumb_func_end sub_8146C88 - - thumb_func_start sub_8146CA4 -sub_8146CA4: @ 8146CA4 - push {r4,lr} - ldr r0, _08146CE0 @ =0x00004028 - bl sub_806E454 - adds r4, r0, 0 - bl sub_8143D94 - adds r2, r0, 0 - ldr r0, [r2] - lsls r0, 24 - lsrs r0, 29 - cmp r0, 0x4 - bls _08146CD8 - ldrh r0, [r4] - adds r0, 0x1 - strh r0, [r4] - lsls r0, 16 - ldr r1, _08146CE4 @ =0x01f30000 - cmp r0, r1 - bls _08146CD8 - ldrb r0, [r2] - movs r1, 0x1F - ands r1, r0 - strb r1, [r2] - movs r0, 0 - strh r0, [r4] -_08146CD8: - pop {r4} - pop {r0} - bx r0 - .align 2, 0 -_08146CE0: .4byte 0x00004028 -_08146CE4: .4byte 0x01f30000 - thumb_func_end sub_8146CA4 - thumb_func_start sub_8146CE8 sub_8146CE8: @ 8146CE8 push {r4-r6,lr} diff --git a/include/event_data.h b/include/event_data.h index f829d3b87..a5c9efe0d 100644 --- a/include/event_data.h +++ b/include/event_data.h @@ -29,6 +29,7 @@ u8 *GetFlagPointer(u16 id); u8 FlagSet(u16 id); u8 FlagClear(u16 id); bool8 FlagGet(u16 id); +u16 * sub_806E454(u16 id); extern u16 gSpecialVar_0x8000; extern u16 gSpecialVar_0x8001; diff --git a/include/global.h b/include/global.h index 2b35e303d..5a7cc134d 100644 --- a/include/global.h +++ b/include/global.h @@ -468,10 +468,11 @@ struct RecordMixingDayCareMail struct MysteryEventStruct { - u8 unk_0_0:2; - u8 unk_0_2:6; - u8 unk_1; - u8 filler_2[0x1ba]; + u32 unk_0_0:2; + u32 unk_0_2:3; + u32 unk_0_5:3; + u32 unk_1:8; + u32 unk_2:16; }; #define MAP_OBJECTS_COUNT 16 @@ -496,6 +497,7 @@ struct SaveBlock1 /*0x08E0*/ struct MapObjectTemplate mapObjectTemplates[64]; /*0x0EE0*/ u8 fillerEE0[0x2580]; /*0x3460*/ struct MysteryEventStruct unk_3460; + /*0x3464*/ u8 filler_3464[0x1b8]; /*0x361C*/ struct RamScript ramScript; /*0x3A08*/ u8 filler3A08[0x44]; /*0x3A4C*/ u8 rivalName[PLAYER_NAME_LENGTH]; diff --git a/src/menews_jisan.c b/src/menews_jisan.c index afaef7cf9..6e9be8318 100644 --- a/src/menews_jisan.c +++ b/src/menews_jisan.c @@ -1,6 +1,7 @@ #include "global.h" #include "mevent.h" #include "random.h" +#include "event_data.h" #ifdef NONMATCHING void sub_8146C30(u32 a0) @@ -72,3 +73,27 @@ void sub_8146C30(u32 a0) "\tbx r0"); } #endif + +void sub_8146C88(void) +{ + struct MysteryEventStruct *r5 = sub_8143D94(); + + r5->unk_0_0 = 0; + r5->unk_0_2 = 0; + r5->unk_0_5 = 0; + r5->unk_1 = 0; + VarSet(0x4028, 0); +} + +void sub_8146CA4(void) +{ + u16 *r4 = sub_806E454(0x4028); + struct MysteryEventStruct *r5 = sub_8143D94(); + struct MysteryEventStruct r0 = *r5; + + if ((u8)r0.unk_0_5 > 4 && ++(*r4) > 0x1f3) + { + r5->unk_0_5 = 0; + *r4 = 0; + } +} From 6b27e999f242f51a81bef70c40a378d5adbaf9e2 Mon Sep 17 00:00:00 2001 From: PikalaxALT Date: Mon, 8 Oct 2018 14:40:46 -0400 Subject: [PATCH 10/13] through sub_8146D94 --- asm/menews_jisan.s | 95 -------------------------------------------- include/event_data.h | 1 + include/mevent.h | 1 + src/menews_jisan.c | 68 +++++++++++++++++++++++++++++-- 4 files changed, 67 insertions(+), 98 deletions(-) diff --git a/asm/menews_jisan.s b/asm/menews_jisan.s index 4661c1a50..155ea3f28 100644 --- a/asm/menews_jisan.s +++ b/asm/menews_jisan.s @@ -5,101 +5,6 @@ .text - thumb_func_start sub_8146CE8 -sub_8146CE8: @ 8146CE8 - push {r4-r6,lr} - ldr r6, _08146D08 @ =gUnknown_20370D0 - bl sub_8143D94 - adds r4, r0, 0 - bl sub_806E2BC - cmp r0, 0 - beq _08146D02 - bl sub_8143E1C - cmp r0, 0 - bne _08146D0C -_08146D02: - movs r0, 0 - b _08146D6E - .align 2, 0 -_08146D08: .4byte gUnknown_20370D0 -_08146D0C: - adds r0, r4, 0 - bl sub_8146E0C - lsls r0, 16 - lsrs r5, r0, 16 - cmp r5, 0x6 - bhi _08146D6C - lsls r0, r5, 2 - ldr r1, _08146D24 @ =_08146D28 - adds r0, r1 - ldr r0, [r0] - mov pc, r0 - .align 2, 0 -_08146D24: .4byte _08146D28 - .align 2, 0 -_08146D28: - .4byte _08146D6C - .4byte _08146D44 - .4byte _08146D44 - .4byte _08146D6C - .4byte _08146D4E - .4byte _08146D5E - .4byte _08146D6C -_08146D44: - adds r0, r4, 0 - bl sub_8146D74 - strh r0, [r6] - b _08146D6C -_08146D4E: - adds r0, r4, 0 - bl sub_8146D74 - strh r0, [r6] - adds r0, r4, 0 - bl sub_8146DA0 - b _08146D6C -_08146D5E: - adds r0, r4, 0 - bl sub_8146D74 - strh r0, [r6] - adds r0, r4, 0 - bl sub_8146D94 -_08146D6C: - adds r0, r5, 0 -_08146D6E: - pop {r4-r6} - pop {r1} - bx r1 - thumb_func_end sub_8146CE8 - - thumb_func_start sub_8146D74 -sub_8146D74: @ 8146D74 - push {r4,lr} - ldrb r2, [r0] - movs r1, 0x4 - negs r1, r1 - ands r1, r2 - strb r1, [r0] - ldrb r4, [r0, 0x1] - adds r4, 0x84 - movs r1, 0 - strb r1, [r0, 0x1] - bl sub_8146DD8 - adds r0, r4, 0 - pop {r4} - pop {r1} - bx r1 - thumb_func_end sub_8146D74 - - thumb_func_start sub_8146D94 -sub_8146D94: @ 8146D94 - ldrb r2, [r0] - movs r1, 0x1D - negs r1, r1 - ands r1, r2 - strb r1, [r0] - bx lr - thumb_func_end sub_8146D94 - thumb_func_start sub_8146DA0 sub_8146DA0: @ 8146DA0 push {r4,lr} diff --git a/include/event_data.h b/include/event_data.h index a5c9efe0d..914217588 100644 --- a/include/event_data.h +++ b/include/event_data.h @@ -30,6 +30,7 @@ u8 FlagSet(u16 id); u8 FlagClear(u16 id); bool8 FlagGet(u16 id); u16 * sub_806E454(u16 id); +bool32 sub_806E2BC(void); extern u16 gSpecialVar_0x8000; extern u16 gSpecialVar_0x8001; diff --git a/include/mevent.h b/include/mevent.h index b196d655b..a611a98a8 100644 --- a/include/mevent.h +++ b/include/mevent.h @@ -2,5 +2,6 @@ #define GUARD_MEVENT_H struct MysteryEventStruct * sub_8143D94(void); +bool32 sub_8143E1C(void); #endif //GUARD_MEVENT_H diff --git a/src/menews_jisan.c b/src/menews_jisan.c index 6e9be8318..93f98ab7a 100644 --- a/src/menews_jisan.c +++ b/src/menews_jisan.c @@ -3,6 +3,14 @@ #include "random.h" #include "event_data.h" +extern EWRAM_DATA u16 gUnknown_20370D0; + +u32 sub_8146D74(struct MysteryEventStruct *); +void sub_8146DD8(struct MysteryEventStruct *); +u16 sub_8146E0C(struct MysteryEventStruct *); +void sub_8146DA0(struct MysteryEventStruct *); +void sub_8146D94(struct MysteryEventStruct *); + #ifdef NONMATCHING void sub_8146C30(u32 a0) { @@ -88,12 +96,66 @@ void sub_8146C88(void) void sub_8146CA4(void) { u16 *r4 = sub_806E454(0x4028); - struct MysteryEventStruct *r5 = sub_8143D94(); - struct MysteryEventStruct r0 = *r5; + struct MysteryEventStruct *r2 = sub_8143D94(); + struct MysteryEventStruct r0 = *r2; if ((u8)r0.unk_0_5 > 4 && ++(*r4) > 0x1f3) { - r5->unk_0_5 = 0; + r2->unk_0_5 = 0; *r4 = 0; } } + +u16 sub_8146CE8(void) +{ + u16 *r6 = &gUnknown_20370D0; + struct MysteryEventStruct *r4 = sub_8143D94(); + u16 r5; + + if (!sub_806E2BC() || !sub_8143E1C()) + return 0; + + r5 = sub_8146E0C(r4); + + switch (r5) + { + case 0: + break; + case 1: + *r6 = sub_8146D74(r4); + break; + case 2: + *r6 = sub_8146D74(r4); + break; + case 3: + break; + case 4: + *r6 = sub_8146D74(r4); + sub_8146DA0(r4); + break; + case 5: + *r6 = sub_8146D74(r4); + sub_8146D94(r4); + break; + case 6: + break; + } + + return r5; +} + +u32 sub_8146D74(struct MysteryEventStruct *a0) +{ + u32 r4; + + a0->unk_0_0 = 0; + r4 = a0->unk_1 + 0x84; + a0->unk_1 = 0; + sub_8146DD8(a0); + return r4; +} + +void sub_8146D94(struct MysteryEventStruct *a0) +{ + a0->unk_0_2 = 0; +} From d348c44eb66a30d50a742d900760826a863c5759 Mon Sep 17 00:00:00 2001 From: PikalaxALT Date: Mon, 8 Oct 2018 14:58:51 -0400 Subject: [PATCH 11/13] Finish decompile of menews_jisan.s --- asm/menews_jisan.s | 134 -------------------------------------------- data/data_84827AC.s | 8 +-- include/global.h | 9 ++- ld_script.txt | 3 +- src/menews_jisan.c | 41 +++++++++++++- 5 files changed, 47 insertions(+), 148 deletions(-) delete mode 100644 asm/menews_jisan.s diff --git a/asm/menews_jisan.s b/asm/menews_jisan.s deleted file mode 100644 index 155ea3f28..000000000 --- a/asm/menews_jisan.s +++ /dev/null @@ -1,134 +0,0 @@ - .include "asm/macros.inc" - .include "constants/constants.inc" - - .syntax unified - - .text - - thumb_func_start sub_8146DA0 -sub_8146DA0: @ 8146DA0 - push {r4,lr} - adds r3, r0, 0 - ldr r0, [r3] - lsls r0, 27 - lsrs r0, 29 - adds r0, 0x1 - movs r1, 0x7 - ands r0, r1 - lsls r0, 2 - ldrb r1, [r3] - movs r4, 0x1D - negs r4, r4 - adds r2, r4, 0 - ands r2, r1 - orrs r2, r0 - strb r2, [r3] - ldr r0, [r3] - lsls r0, 27 - lsrs r0, 29 - cmp r0, 0x4 - bls _08146DD2 - ands r2, r4 - movs r0, 0x10 - orrs r2, r0 - strb r2, [r3] -_08146DD2: - pop {r4} - pop {r0} - bx r0 - thumb_func_end sub_8146DA0 - - thumb_func_start sub_8146DD8 -sub_8146DD8: @ 8146DD8 - push {r4,lr} - adds r3, r0, 0 - ldr r0, [r3] - lsls r0, 24 - lsrs r0, 29 - adds r0, 0x1 - lsls r0, 5 - ldrb r1, [r3] - movs r4, 0x1F - adds r2, r4, 0 - ands r2, r1 - orrs r2, r0 - strb r2, [r3] - ldr r0, [r3] - lsls r0, 24 - lsrs r0, 29 - cmp r0, 0x5 - bls _08146E04 - ands r2, r4 - movs r0, 0xA0 - orrs r2, r0 - strb r2, [r3] -_08146E04: - pop {r4} - pop {r0} - bx r0 - thumb_func_end sub_8146DD8 - - thumb_func_start sub_8146E0C -sub_8146E0C: @ 8146E0C - push {lr} - adds r2, r0, 0 - ldrb r1, [r2] - movs r0, 0xE0 - ands r0, r1 - cmp r0, 0xA0 - bne _08146E1E - movs r0, 0x6 - b _08146E66 -_08146E1E: - ldr r1, [r2] - lsls r0, r1, 30 - lsrs r0, 30 - cmp r0, 0x1 - beq _08146E40 - cmp r0, 0x1 - bgt _08146E32 - cmp r0, 0 - beq _08146E3C - b _08146E58 -_08146E32: - cmp r0, 0x2 - beq _08146E44 - cmp r0, 0x3 - beq _08146E48 - b _08146E58 -_08146E3C: - movs r0, 0x3 - b _08146E66 -_08146E40: - movs r0, 0x1 - b _08146E66 -_08146E44: - movs r0, 0x2 - b _08146E66 -_08146E48: - lsls r0, r1, 27 - lsrs r0, 29 - cmp r0, 0x2 - bhi _08146E54 - movs r0, 0x4 - b _08146E66 -_08146E54: - movs r0, 0x5 - b _08146E66 -_08146E58: - ldr r0, _08146E6C @ =gUnknown_8468C5C "C:/WORK/POKeFRLG/src/pm_lgfr_ose/source/menews_jisan.c" - ldr r1, _08146E70 @ =0x0000017f - ldr r2, _08146E74 @ =gUnknown_8468C94 "0" - movs r3, 0x1 - bl AGBAssert - movs r0, 0 -_08146E66: - pop {r1} - bx r1 - .align 2, 0 -_08146E6C: .4byte gUnknown_8468C5C -_08146E70: .4byte 0x0000017f -_08146E74: .4byte gUnknown_8468C94 - thumb_func_end sub_8146E0C - - .align 2, 0 @ Don't pad with nop. diff --git a/data/data_84827AC.s b/data/data_84827AC.s index 2c69a76d7..565a6adf2 100644 --- a/data/data_84827AC.s +++ b/data/data_84827AC.s @@ -5014,13 +5014,7 @@ gUnknown_8468B6C:: @ 8468B6C gUnknown_8468BCC:: @ 8468BCC .incbin "baserom.gba", 0x468BCC, 0x90 - .align 2 -gUnknown_8468C5C:: @ 8468C5C - .asciz "C:/WORK/POKeFRLG/src/pm_lgfr_ose/source/menews_jisan.c" - - .align 2 -gUnknown_8468C94:: @ 8468C94 - .asciz "0" + .section .rodata.8468C98 .align 2 gUnknown_8468C98:: @ 8468C98 diff --git a/include/global.h b/include/global.h index 5a7cc134d..11a79ebe8 100644 --- a/include/global.h +++ b/include/global.h @@ -468,11 +468,10 @@ struct RecordMixingDayCareMail struct MysteryEventStruct { - u32 unk_0_0:2; - u32 unk_0_2:3; - u32 unk_0_5:3; - u32 unk_1:8; - u32 unk_2:16; + u8 unk_0_0:2; + u8 unk_0_2:3; + u8 unk_0_5:3; + u8 unk_1; }; #define MAP_OBJECTS_COUNT 16 diff --git a/ld_script.txt b/ld_script.txt index 777735b7c..70084ef0e 100644 --- a/ld_script.txt +++ b/ld_script.txt @@ -250,7 +250,6 @@ SECTIONS { asm/mevent_server.o(.text); asm/mevent_8145654.o(.text); src/menews_jisan.o(.text); - asm/menews_jisan.o(.text); asm/seagallop.o(.text); asm/unk_8147500.o(.text); asm/unk_8147AA8.o(.text); @@ -370,6 +369,8 @@ SECTIONS { data/data.o(.rodata); src/battle_ai_script_commands.o(.rodata); data/data_84827AC.o(.rodata); + src/menews_jisan.o(.rodata); + data/data_84827AC.o(.rodata.8468C98); src/m4a_tables.o(.rodata); data/sound_data.o(.rodata); } =0 diff --git a/src/menews_jisan.c b/src/menews_jisan.c index 93f98ab7a..6c3f669eb 100644 --- a/src/menews_jisan.c +++ b/src/menews_jisan.c @@ -7,7 +7,7 @@ extern EWRAM_DATA u16 gUnknown_20370D0; u32 sub_8146D74(struct MysteryEventStruct *); void sub_8146DD8(struct MysteryEventStruct *); -u16 sub_8146E0C(struct MysteryEventStruct *); +u32 sub_8146E0C(struct MysteryEventStruct *); void sub_8146DA0(struct MysteryEventStruct *); void sub_8146D94(struct MysteryEventStruct *); @@ -159,3 +159,42 @@ void sub_8146D94(struct MysteryEventStruct *a0) { a0->unk_0_2 = 0; } + +void sub_8146DA0(struct MysteryEventStruct *a0) +{ + a0->unk_0_2++; + if ((u8)a0->unk_0_2 > 4) + a0->unk_0_2 = 4; +} + +void sub_8146DD8(struct MysteryEventStruct *a0) +{ + a0->unk_0_5++; + if ((u8)a0->unk_0_5 > 5) + a0->unk_0_5 = 5; +} + +u32 sub_8146E0C(struct MysteryEventStruct *a0) +{ + struct MysteryEventStruct r0; + if ((u8)a0->unk_0_5 == 5) + return 6; + + r0 = *a0; + switch (r0.unk_0_0) + { + case 0: + return 3; + case 1: + return 1; + case 2: + return 2; + case 3: + if ((u8)r0.unk_0_2 < 3) + return 4; + return 5; + default: + AGBAssert("C:/WORK/POKeFRLG/src/pm_lgfr_ose/source/menews_jisan.c", 383, "0", 1); + return 0; + } +} From eda4a9f9406aa2ef3fe91006e134f44b07035081 Mon Sep 17 00:00:00 2001 From: PikalaxALT Date: Mon, 8 Oct 2018 14:59:48 -0400 Subject: [PATCH 12/13] Use the macro ya dummy --- src/menews_jisan.c | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/menews_jisan.c b/src/menews_jisan.c index 6c3f669eb..dd1376c26 100644 --- a/src/menews_jisan.c +++ b/src/menews_jisan.c @@ -194,7 +194,7 @@ u32 sub_8146E0C(struct MysteryEventStruct *a0) return 4; return 5; default: - AGBAssert("C:/WORK/POKeFRLG/src/pm_lgfr_ose/source/menews_jisan.c", 383, "0", 1); + AGB_ASSERT_EX(0, "C:/WORK/POKeFRLG/src/pm_lgfr_ose/source/menews_jisan.c", 383); return 0; } } From 1d50bcb0b95e52fb43c22a3348ac033b3534f860 Mon Sep 17 00:00:00 2001 From: PikalaxALT Date: Mon, 8 Oct 2018 16:02:11 -0400 Subject: [PATCH 13/13] Cleanup and create menews_jisan header --- include/event_data.h | 2 ++ include/gba/defines.h | 1 + include/menews_jisan.h | 8 ++++++++ src/menews_jisan.c | 23 +++++++++++------------ 4 files changed, 22 insertions(+), 12 deletions(-) create mode 100644 include/menews_jisan.h diff --git a/include/event_data.h b/include/event_data.h index 914217588..f28ed4f75 100644 --- a/include/event_data.h +++ b/include/event_data.h @@ -51,4 +51,6 @@ extern u16 gSpecialVar_MonBoxId; extern u16 gSpecialVar_MonBoxPos; extern u16 gSpecialVar_0x8014; +extern u16 gUnknown_20370D0; + #endif // GUARD_EVENT_DATA_H diff --git a/include/gba/defines.h b/include/gba/defines.h index fe81770e3..a0ef506dd 100644 --- a/include/gba/defines.h +++ b/include/gba/defines.h @@ -69,5 +69,6 @@ #define WIN_RANGE(a, b) (((a) << 8) | (b)) #define NAKED __attribute__((naked)) +#define UNUSED __attribute__((unused)) #endif // GUARD_GBA_DEFINES diff --git a/include/menews_jisan.h b/include/menews_jisan.h new file mode 100644 index 000000000..8dc1d0a99 --- /dev/null +++ b/include/menews_jisan.h @@ -0,0 +1,8 @@ +#ifndef GUARD_MENEWS_JISAN_H +#define GUARD_MENEWS_JISAN_H + +void sub_8146C30(u32 a0); +void sub_8146C88(void); +void sub_8146CA4(void); + +#endif //GUARD_MENEWS_JISAN_H diff --git a/src/menews_jisan.c b/src/menews_jisan.c index dd1376c26..7dfcee939 100644 --- a/src/menews_jisan.c +++ b/src/menews_jisan.c @@ -2,14 +2,13 @@ #include "mevent.h" #include "random.h" #include "event_data.h" +#include "menews_jisan.h" -extern EWRAM_DATA u16 gUnknown_20370D0; - -u32 sub_8146D74(struct MysteryEventStruct *); -void sub_8146DD8(struct MysteryEventStruct *); -u32 sub_8146E0C(struct MysteryEventStruct *); -void sub_8146DA0(struct MysteryEventStruct *); -void sub_8146D94(struct MysteryEventStruct *); +static u32 sub_8146D74(struct MysteryEventStruct *); +static void sub_8146DD8(struct MysteryEventStruct *); +static u32 sub_8146E0C(struct MysteryEventStruct *); +static void sub_8146DA0(struct MysteryEventStruct *); +static void sub_8146D94(struct MysteryEventStruct *); #ifdef NONMATCHING void sub_8146C30(u32 a0) @@ -144,7 +143,7 @@ u16 sub_8146CE8(void) return r5; } -u32 sub_8146D74(struct MysteryEventStruct *a0) +static u32 sub_8146D74(struct MysteryEventStruct *a0) { u32 r4; @@ -155,26 +154,26 @@ u32 sub_8146D74(struct MysteryEventStruct *a0) return r4; } -void sub_8146D94(struct MysteryEventStruct *a0) +static void sub_8146D94(struct MysteryEventStruct *a0) { a0->unk_0_2 = 0; } -void sub_8146DA0(struct MysteryEventStruct *a0) +static void sub_8146DA0(struct MysteryEventStruct *a0) { a0->unk_0_2++; if ((u8)a0->unk_0_2 > 4) a0->unk_0_2 = 4; } -void sub_8146DD8(struct MysteryEventStruct *a0) +static void sub_8146DD8(struct MysteryEventStruct *a0) { a0->unk_0_5++; if ((u8)a0->unk_0_5 > 5) a0->unk_0_5 = 5; } -u32 sub_8146E0C(struct MysteryEventStruct *a0) +static u32 sub_8146E0C(struct MysteryEventStruct *a0) { struct MysteryEventStruct r0; if ((u8)a0->unk_0_5 == 5)