summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--Makefile16
-rw-r--r--asm/rom1.s8684
-rw-r--r--asm/rom2.s14
-rw-r--r--asm/rom3.s214
-rw-r--r--asm/rom4.s142
-rw-r--r--asm/rom5.s622
-rw-r--r--charmap.txt1
-rw-r--r--data/data2.s339
-rw-r--r--data/graphics.s20
-rw-r--r--ewram_syms.txt8
-rw-r--r--fonts.mk28
-rw-r--r--generated.mk37
-rw-r--r--graphics/fonts/default.pal19
-rw-r--r--graphics/fonts/down_arrow.pngbin0 -> 167 bytes
-rw-r--r--graphics/fonts/font0_jpn.pngbin0 -> 2551 bytes
-rw-r--r--graphics/fonts/font0_lat.pngbin0 -> 2450 bytes
-rw-r--r--graphics/fonts/font1_jpn.pngbin0 -> 1787 bytes
-rw-r--r--graphics/fonts/font1_lat.pngbin0 -> 1564 bytes
-rw-r--r--graphics/fonts/font3_jpn.pngbin0 -> 3885 bytes
-rw-r--r--graphics/fonts/font3_lat.pngbin0 -> 3689 bytes
-rw-r--r--graphics/fonts/font4_jpn.pngbin0 -> 2543 bytes
-rw-r--r--graphics/fonts/font4_lat.pngbin0 -> 2183 bytes
-rw-r--r--graphics/fonts/font6_braille.pngbin0 -> 208 bytes
-rw-r--r--graphics/fonts/unknown_81E6692.pal19
-rw-r--r--include/fonts/.gitignore8
-rw-r--r--include/fonts/font0_widths.h19
-rw-r--r--include/fonts/font1_widths.h17
-rw-r--r--include/fonts/font3_widths.h19
-rw-r--r--include/fonts/font4_widths.h17
-rw-r--r--include/fonts/type1_map.h250
-rw-r--r--include/fonts/type3_map.h131
-rw-r--r--include/gba/defines.h5
-rw-r--r--include/gba/io_reg.h12
-rw-r--r--include/global.h7
-rw-r--r--include/main.h2
-rw-r--r--include/sprite.h2
-rw-r--r--include/string_util.h15
-rw-r--r--include/text.h16
-rw-r--r--ld_script.txt7
-rw-r--r--src/rtc.c1
-rw-r--r--src/sprite.c10
-rw-r--r--src/string_util.c125
-rw-r--r--src/text.c4385
-rw-r--r--tools/bin2c/.gitignore1
-rw-r--r--tools/bin2c/LICENSE19
-rw-r--r--tools/bin2c/Makefile13
-rw-r--r--tools/bin2c/bin2c.c201
-rw-r--r--tools/preproc/c_file.cpp14
-rw-r--r--tools/rsfont/.gitignore1
-rw-r--r--tools/rsfont/LICENSE19
-rw-r--r--tools/rsfont/Makefile15
-rw-r--r--tools/rsfont/convert_png.c169
-rw-r--r--tools/rsfont/convert_png.h11
-rw-r--r--tools/rsfont/font.c457
-rw-r--r--tools/rsfont/font.h30
-rw-r--r--tools/rsfont/gfx.h50
-rw-r--r--tools/rsfont/global.h31
-rw-r--r--tools/rsfont/main.c93
-rw-r--r--tools/rsfont/util.c124
-rw-r--r--tools/rsfont/util.h14
60 files changed, 6877 insertions, 9596 deletions
diff --git a/Makefile b/Makefile
index 117f0b135..aad173523 100644
--- a/Makefile
+++ b/Makefile
@@ -30,12 +30,12 @@ PREPROC := tools/preproc/preproc
.PRECIOUS: %.1bpp %.4bpp %.8bpp %.gbapal %.lz
-.PHONY: rom clean compare
+.PHONY: all rom clean compare generated
C_SRCS := $(wildcard src/*.c)
C_OBJS := $(C_SRCS:%.c=%.o)
-ASM_OBJS := asm/crt0.o asm/rom1.o asm/rom2.o asm/rom3.o asm/rom4.o asm/rom5.o \
+ASM_OBJS := asm/crt0.o asm/rom2.o asm/rom3.o asm/rom4.o asm/rom5.o \
asm/libgcnmultiboot.o asm/m4a_1.o asm/m4a_3.o asm/libagbsyscall.o asm/libc.o
DATA_ASM_OBJS := data/data1.o data/data2.o data/graphics.o data/sound_data.o
@@ -45,18 +45,24 @@ OBJS := $(C_OBJS) $(ASM_OBJS) $(DATA_ASM_OBJS)
ROM := pokeruby.gba
ELF := $(ROM:.gba=.elf)
+all:
+ $(MAKE) generated
+ $(MAKE) rom
+
rom: $(ROM)
# For contributors to make sure a change didn't affect the contents of the ROM.
-compare: $(ROM)
+compare: all
@$(SHA1) rom.sha1
clean:
rm -f $(ROM) $(ELF) $(OBJS) $(C_SRCS:%.c=%.i)
- find . \( -iname '*.1bpp' -o -iname '*.4bpp' -o -iname '*.8bpp' -o -iname '*.gbapal' -o -iname '*.lz' -o -iname '*.latfont' -o -iname '*.hwjpnfont' -o -iname '*.fwjpnfont' \) -exec rm {} +
+ find . \( -iname '*.1bpp' -o -iname '*.4bpp' -o -iname '*.8bpp' -o -iname '*.gbapal' -o -iname '*.lz' \) -exec rm {} +
include castform.mk
include tilesets.mk
+include fonts.mk
+include generated.mk
%.png: ;
%.pal: ;
@@ -92,4 +98,4 @@ $(DATA_ASM_OBJS): %.o: %.s $$(dep)
# Link objects to produce the ROM.
$(ROM): $(OBJS)
$(LD) $(LDFLAGS) -o $(ELF) $(OBJS) $(LIBGCC)
- $(OBJCOPY) -O binary --gap-fill 0xFF $(ELF) $(ROM)
+ $(OBJCOPY) -O binary --gap-fill 0xFF --pad-to 0x9000000 $(ELF) $(ROM)
diff --git a/asm/rom1.s b/asm/rom1.s
deleted file mode 100644
index 14e975722..000000000
--- a/asm/rom1.s
+++ /dev/null
@@ -1,8684 +0,0 @@
- .include "asm/macros.s"
-
- .syntax unified
-
- .text
-
- thumb_func_start SyncBgVisibilityAndMode
-SyncBgVisibilityAndMode: @ 80029AC
- ldrb r2, [r0]
- ldr r1, _080029DC
- lsls r2, 2
- adds r1, r2, r1
- ldr r1, [r1]
- movs r3, 0
- strh r3, [r1]
- ldr r1, _080029E0
- adds r1, r2, r1
- ldr r1, [r1]
- strh r3, [r1]
- ldr r1, _080029E4
- adds r2, r1
- ldr r3, [r2]
- ldrb r2, [r0, 0x3]
- ldrb r1, [r0, 0x2]
- lsls r1, 8
- orrs r2, r1
- ldrb r0, [r0, 0x1]
- lsls r0, 2
- orrs r2, r0
- strh r2, [r3]
- bx lr
- .align 2, 0
-_080029DC: .4byte gUnknown_081E29B8
-_080029E0: .4byte gUnknown_081E29C8
-_080029E4: .4byte gUnknown_081E29A8
- thumb_func_end SyncBgVisibilityAndMode
-
- thumb_func_start sub_80029E8
-sub_80029E8: @ 80029E8
- push {r4,r5,lr}
- sub sp, 0x8
- adds r4, r0, 0
- movs r5, 0
- str r5, [sp]
- ldr r1, [r4, 0x10]
- ldr r2, _08002A14
- mov r0, sp
- bl CpuFastSet
- ldr r1, [r4, 0x14]
- cmp r1, 0
- beq _08002A0C
- str r5, [sp, 0x4]
- add r0, sp, 0x4
- ldr r2, _08002A18
- bl CpuFastSet
-_08002A0C:
- add sp, 0x8
- pop {r4,r5}
- pop {r0}
- bx r0
- .align 2, 0
-_08002A14: .4byte 0x01000008
-_08002A18: .4byte 0x01000200
- thumb_func_end sub_80029E8
-
- thumb_func_start sub_8002A1C
-sub_8002A1C: @ 8002A1C
- push {lr}
- ldr r2, _08002A30
- ldrb r1, [r0, 0x4]
- lsls r1, 4
- adds r0, r2, 0
- movs r2, 0x20
- bl gpu_pal_apply
- pop {r0}
- bx r0
- .align 2, 0
-_08002A30: .4byte gUnknown_081E66B2
- thumb_func_end sub_8002A1C
-
- thumb_func_start sub_8002A34
-sub_8002A34: @ 8002A34
- push {r4,lr}
- adds r4, r0, 0
- bl SyncBgVisibilityAndMode
- adds r0, r4, 0
- bl sub_80029E8
- adds r0, r4, 0
- bl sub_8002A1C
- pop {r4}
- pop {r0}
- bx r0
- thumb_func_end sub_8002A34
-
- thumb_func_start sub_8002A50
-sub_8002A50: @ 8002A50
- push {r4,lr}
- adds r2, r0, 0
- lsls r1, 16
- lsrs r3, r1, 16
- strh r3, [r2, 0x1A]
- movs r4, 0
- ldr r0, [r2, 0x2C]
- ldrb r1, [r0, 0x9]
- cmp r1, 0x1
- beq _08002A72
- cmp r1, 0x2
- bne _08002ACE
- adds r0, r2, 0
- adds r1, r3, 0
- bl sub_8002AD8
- b _08002ACA
-_08002A72:
- ldrb r0, [r0, 0x8]
- cmp r0, 0x6
- bhi _08002ACE
- lsls r0, 2
- ldr r1, _08002A84
- adds r0, r1
- ldr r0, [r0]
- mov pc, r0
- .align 2, 0
-_08002A84: .4byte _08002A88
- .align 2, 0
-_08002A88:
- .4byte _08002AA4
- .4byte _08002AAE
- .4byte _08002AAE
- .4byte _08002AA4
- .4byte _08002AB8
- .4byte _08002AB8
- .4byte _08002AC2
-_08002AA4:
- adds r0, r2, 0
- adds r1, r3, 0
- bl sub_8002B2C
- b _08002ACA
-_08002AAE:
- adds r0, r2, 0
- adds r1, r3, 0
- bl sub_8002B58
- b _08002ACA
-_08002AB8:
- adds r0, r2, 0
- adds r1, r3, 0
- bl sub_8002B8C
- b _08002ACA
-_08002AC2:
- adds r0, r2, 0
- adds r1, r3, 0
- bl sub_8002BC8
-_08002ACA:
- lsls r0, 16
- lsrs r4, r0, 16
-_08002ACE:
- adds r0, r4, 0
- pop {r4}
- pop {r1}
- bx r1
- thumb_func_end sub_8002A50
-
- thumb_func_start sub_8002AD8
-sub_8002AD8: @ 8002AD8
- push {r4,r5,lr}
- sub sp, 0x4
- adds r4, r0, 0
- movs r2, 0
- strh r1, [r4, 0x1A]
- movs r0, 0x2
- strh r0, [r4, 0x1C]
- ldrh r0, [r4, 0x1A]
- lsls r0, 5
- ldr r5, [r4, 0x24]
- adds r5, r0
- str r2, [sp]
- ldr r2, _08002B24
- mov r0, sp
- adds r1, r5, 0
- bl CpuFastSet
- ldr r0, _08002B28
- adds r5, 0x20
- ldr r1, [r4, 0x2C]
- ldrb r2, [r1, 0x5]
- ldrb r3, [r1, 0x6]
- adds r1, r5, 0
- bl sub_8003B30
- ldrh r0, [r4, 0x1C]
- ldrh r1, [r4, 0x1A]
- adds r0, r1
- ldrb r2, [r4, 0x9]
- ldrb r1, [r4, 0xA]
- muls r1, r2
- adds r0, r1
- lsls r0, 16
- lsrs r0, 16
- add sp, 0x4
- pop {r4,r5}
- pop {r1}
- bx r1
- .align 2, 0
-_08002B24: .4byte 0x01000008
-_08002B28: .4byte gUnknown_081E66D2
- thumb_func_end sub_8002AD8
-
- thumb_func_start sub_8002B2C
-sub_8002B2C: @ 8002B2C
- push {r4-r6,lr}
- adds r6, r0, 0
- lsls r1, 16
- lsrs r1, 11
- ldr r0, [r6, 0x24]
- adds r5, r0, r1
- movs r4, 0
-_08002B3A:
- adds r0, r6, 0
- adds r1, r4, 0
- adds r2, r5, 0
- bl sub_8003954
- adds r5, 0x40
- adds r4, 0x1
- cmp r4, 0xFF
- ble _08002B3A
- lsls r0, r4, 17
- lsrs r0, 16
- pop {r4-r6}
- pop {r1}
- bx r1
- thumb_func_end sub_8002B2C
-
- thumb_func_start sub_8002B58
-sub_8002B58: @ 8002B58
- push {r4-r6,lr}
- adds r6, r0, 0
- lsls r1, 16
- lsrs r1, 11
- ldr r0, [r6, 0x24]
- adds r5, r0, r1
- movs r4, 0
-_08002B66:
- lsls r0, r4, 3
- ldr r1, _08002B88
- adds r0, r1
- ldrb r2, [r6, 0x3]
- ldrb r3, [r6, 0x4]
- adds r1, r5, 0
- bl sub_8003B30
- adds r5, 0x20
- adds r4, 0x1
- cmp r4, 0xFF
- ble _08002B66
- lsls r0, r4, 16
- lsrs r0, 16
- pop {r4-r6}
- pop {r1}
- bx r1
- .align 2, 0
-_08002B88: .4byte gUnknown_081E39F0
- thumb_func_end sub_8002B58
-
- thumb_func_start sub_8002B8C
-sub_8002B8C: @ 8002B8C
- push {r4-r6,lr}
- sub sp, 0x4
- adds r4, r0, 0
- lsls r1, 16
- lsrs r1, 11
- ldr r0, [r4, 0x24]
- adds r6, r0, r1
- movs r5, 0
-_08002B9C:
- lsls r0, r5, 5
- ldr r1, _08002BC4
- adds r0, r1
- ldrb r2, [r4, 0x3]
- ldrb r3, [r4, 0x5]
- ldrb r1, [r4, 0x4]
- str r1, [sp]
- adds r1, r6, 0
- bl sub_8003BCC
- adds r6, 0x20
- adds r5, 0x1
- cmp r5, 0xFF
- ble _08002B9C
- lsls r0, r5, 16
- lsrs r0, 16
- add sp, 0x4
- pop {r4-r6}
- pop {r1}
- bx r1
- .align 2, 0
-_08002BC4: .4byte gUnknown_08EA6BC4
- thumb_func_end sub_8002B8C
-
- thumb_func_start sub_8002BC8
-sub_8002BC8: @ 8002BC8
- push {r4-r6,lr}
- adds r6, r0, 0
- lsls r1, 16
- lsrs r1, 11
- ldr r0, [r6, 0x24]
- adds r5, r0, r1
- movs r4, 0
-_08002BD6:
- lsls r0, r4, 3
- ldr r1, _08002BF8
- adds r0, r1
- ldrb r2, [r6, 0x3]
- ldrb r3, [r6, 0x4]
- adds r1, r5, 0
- bl sub_8003B30
- adds r5, 0x20
- adds r4, 0x1
- cmp r4, 0xFF
- ble _08002BD6
- lsls r0, r4, 16
- lsrs r0, 16
- pop {r4-r6}
- pop {r1}
- bx r1
- .align 2, 0
-_08002BF8: .4byte gUnknown_081E58F0
- thumb_func_end sub_8002BC8
-
- thumb_func_start sub_8002BFC
-sub_8002BFC: @ 8002BFC
- push {r4,lr}
- adds r2, r0, 0
- lsls r1, 16
- lsrs r4, r1, 16
- ldr r0, _08002C30
- str r2, [r0]
- ldr r1, _08002C34
- movs r0, 0
- strh r0, [r1]
- ldr r0, _08002C38
- strh r4, [r0]
- strh r4, [r2, 0x1A]
- movs r0, 0
- ldr r3, [r2, 0x2C]
- ldrb r1, [r3, 0x9]
- cmp r1, 0x1
- beq _08002C3C
- cmp r1, 0x2
- bne _08002C4C
- adds r0, r2, 0
- adds r1, r4, 0
- bl sub_8002AD8
- lsls r0, 16
- lsrs r0, 16
- b _08002C4C
- .align 2, 0
-_08002C30: .4byte 0x03000320
-_08002C34: .4byte 0x03000326
-_08002C38: .4byte 0x03000324
-_08002C3C:
- movs r0, 0x80
- lsls r0, 1
- ldrb r1, [r3, 0x8]
- cmp r1, 0
- beq _08002C4A
- cmp r1, 0x3
- bne _08002C4C
-_08002C4A:
- lsls r0, 1
-_08002C4C:
- pop {r4}
- pop {r1}
- bx r1
- thumb_func_end sub_8002BFC
-
- thumb_func_start sub_8002C54
-sub_8002C54: @ 8002C54
- push {r4,r5,lr}
- movs r5, 0x1
- ldr r0, _08002C6C
- ldr r0, [r0]
- ldr r0, [r0, 0x2C]
- ldrb r0, [r0, 0x9]
- cmp r0, 0x1
- bne _08002CA2
- ldr r0, _08002C70
- ldrh r4, [r0]
- adds r0, r4, 0
- b _08002C8A
- .align 2, 0
-_08002C6C: .4byte 0x03000320
-_08002C70: .4byte 0x03000326
-_08002C74:
- ldr r0, _08002CAC
- ldr r0, [r0]
- ldr r1, _08002CB0
- ldrh r1, [r1]
- lsls r2, r4, 24
- lsrs r2, 24
- bl sub_8002CB8
- adds r4, 0x1
- ldr r0, _08002CB4
- ldrh r0, [r0]
-_08002C8A:
- adds r0, 0x10
- cmp r4, r0
- blt _08002C74
- ldr r1, _08002CB4
- ldrh r0, [r1]
- adds r0, 0x10
- strh r0, [r1]
- lsls r0, 16
- lsrs r0, 16
- cmp r0, 0xFF
- bhi _08002CA2
- movs r5, 0
-_08002CA2:
- adds r0, r5, 0
- pop {r4,r5}
- pop {r1}
- bx r1
- .align 2, 0
-_08002CAC: .4byte 0x03000320
-_08002CB0: .4byte 0x03000324
-_08002CB4: .4byte 0x03000326
- thumb_func_end sub_8002C54
-
- thumb_func_start sub_8002CB8
-sub_8002CB8: @ 8002CB8
- push {r4,r5,lr}
- sub sp, 0x4
- adds r4, r0, 0
- lsls r1, 16
- lsrs r3, r1, 16
- lsls r2, 24
- lsrs r2, 24
- ldr r0, [r4, 0x2C]
- ldrb r0, [r0, 0x8]
- cmp r0, 0x5
- bhi _08002D44
- lsls r0, 2
- ldr r1, _08002CD8
- adds r0, r1
- ldr r0, [r0]
- mov pc, r0
- .align 2, 0
-_08002CD8: .4byte _08002CDC
- .align 2, 0
-_08002CDC:
- .4byte _08002CF4
- .4byte _08002D0A
- .4byte _08002D0A
- .4byte _08002CF4
- .4byte _08002D28
- .4byte _08002D28
-_08002CF4:
- lsls r0, r3, 5
- ldr r1, [r4, 0x24]
- adds r1, r0
- lsls r0, r2, 6
- adds r5, r1, r0
- adds r0, r4, 0
- adds r1, r2, 0
- adds r2, r5, 0
- bl sub_8003954
- b _08002D44
-_08002D0A:
- adds r0, r2, r3
- lsls r0, 5
- ldr r1, [r4, 0x24]
- adds r5, r1, r0
- lsls r0, r2, 3
- ldr r1, _08002D24
- adds r0, r1
- ldrb r2, [r4, 0x3]
- ldrb r3, [r4, 0x4]
- adds r1, r5, 0
- bl sub_8003B30
- b _08002D44
- .align 2, 0
-_08002D24: .4byte gUnknown_081E39F0
-_08002D28:
- adds r0, r2, r3
- lsls r0, 5
- ldr r1, [r4, 0x24]
- adds r5, r1, r0
- lsls r0, r2, 5
- ldr r1, _08002D4C
- adds r0, r1
- ldrb r2, [r4, 0x3]
- ldrb r3, [r4, 0x5]
- ldrb r1, [r4, 0x4]
- str r1, [sp]
- adds r1, r5, 0
- bl sub_8003BCC
-_08002D44:
- add sp, 0x4
- pop {r4,r5}
- pop {r0}
- bx r0
- .align 2, 0
-_08002D4C: .4byte gUnknown_08EA6BC4
- thumb_func_end sub_8002CB8
-
- thumb_func_start nullsub_4
-nullsub_4: @ 8002D50
- bx lr
- thumb_func_end nullsub_4
-
- thumb_func_start sub_8002D54
-sub_8002D54: @ 8002D54
- push {r4-r6,lr}
- adds r4, r0, 0
- adds r5, r1, 0
- adds r1, r4, 0
- ldr r0, _08002DBC
- ldm r0!, {r2,r3,r6}
- stm r1!, {r2,r3,r6}
- ldm r0!, {r2,r3,r6}
- stm r1!, {r2,r3,r6}
- ldm r0!, {r2,r3,r6}
- stm r1!, {r2,r3,r6}
- ldm r0!, {r2,r3,r6}
- stm r1!, {r2,r3,r6}
- str r5, [r4, 0x2C]
- ldrb r0, [r5, 0x9]
- strb r0, [r4]
- ldrb r0, [r5, 0xA]
- strb r0, [r4, 0xE]
- ldrb r0, [r5, 0x8]
- strb r0, [r4, 0x1]
- ldrb r0, [r5, 0x4]
- strb r0, [r4, 0x6]
- ldrb r0, [r5, 0xB]
- strb r0, [r4, 0x7]
- ldrb r0, [r5, 0xC]
- strb r0, [r4, 0x8]
- ldrb r0, [r5, 0xD]
- strb r0, [r4, 0x9]
- ldrb r0, [r5, 0xE]
- strb r0, [r4, 0xA]
- ldr r0, [r5, 0x10]
- str r0, [r4, 0x24]
- ldr r0, [r5, 0x14]
- str r0, [r4, 0x28]
- adds r0, r4, 0
- bl sub_8003F3C
- ldrb r1, [r5, 0x6]
- adds r0, r4, 0
- bl sub_8003F60
- ldrb r1, [r5, 0x7]
- adds r0, r4, 0
- bl sub_8003F80
- ldrb r1, [r5, 0x5]
- adds r0, r4, 0
- bl sub_8003F90
- pop {r4-r6}
- pop {r0}
- bx r0
- .align 2, 0
-_08002DBC: .4byte gUnknown_081E6AA4
- thumb_func_end sub_8002D54
-
- thumb_func_start CreateTextRenderer
-CreateTextRenderer: @ 8002DC0
- push {r4-r6,lr}
- mov r6, r8
- push {r6}
- adds r4, r0, 0
- ldr r0, [sp, 0x14]
- lsls r0, 24
- mov r8, r0
- ldr r5, [r4, 0x2C]
- ldrb r0, [r5, 0x9]
- movs r6, 0
- strb r0, [r4]
- ldrb r0, [r5, 0x8]
- strb r0, [r4, 0x1]
- movs r0, 0x2
- strb r0, [r4, 0x2]
- ldrb r0, [r5, 0x4]
- strb r0, [r4, 0x6]
- strb r6, [r4, 0xB]
- strb r6, [r4, 0xC]
- strb r6, [r4, 0xD]
- ldrb r0, [r5, 0xA]
- strb r0, [r4, 0xE]
- strb r6, [r4, 0xF]
- ldrb r0, [r5, 0xB]
- strb r0, [r4, 0x7]
- ldrb r0, [r5, 0xC]
- strb r0, [r4, 0x8]
- ldrb r0, [r5, 0xD]
- strb r0, [r4, 0x9]
- ldrb r0, [r5, 0xE]
- strb r0, [r4, 0xA]
- str r1, [r4, 0x20]
- movs r0, 0
- strh r6, [r4, 0x1E]
- strh r2, [r4, 0x1A]
- strh r6, [r4, 0x1C]
- lsls r3, 3
- strb r3, [r4, 0x12]
- strb r0, [r4, 0x10]
- mov r1, r8
- lsrs r1, 21
- strh r1, [r4, 0x14]
- strb r0, [r4, 0x11]
- movs r0, 0x1
- strh r0, [r4, 0x16]
- strh r6, [r4, 0x18]
- ldr r0, [r5, 0x10]
- str r0, [r4, 0x24]
- ldr r0, [r5, 0x14]
- str r0, [r4, 0x28]
- adds r0, r4, 0
- bl sub_8003F3C
- ldrb r1, [r5, 0x6]
- adds r0, r4, 0
- bl sub_8003F60
- ldrb r1, [r5, 0x7]
- adds r0, r4, 0
- bl sub_8003F80
- ldrb r1, [r5, 0x5]
- adds r0, r4, 0
- bl sub_8003F90
- pop {r3}
- mov r8, r3
- pop {r4-r6}
- pop {r0}
- bx r0
- thumb_func_end CreateTextRenderer
-
- thumb_func_start sub_8002E4C
-sub_8002E4C: @ 8002E4C
- push {r4-r7,lr}
- sub sp, 0x4
- adds r7, r0, 0
- adds r4, r3, 0
- ldr r5, [sp, 0x18]
- ldr r6, [sp, 0x1C]
- lsls r2, 16
- lsrs r2, 16
- lsls r4, 24
- lsrs r4, 24
- lsls r5, 16
- lsrs r5, 16
- movs r0, 0
- str r0, [sp]
- adds r0, r7, 0
- movs r3, 0
- bl CreateTextRenderer
- strb r4, [r7, 0x12]
- strh r5, [r7, 0x14]
- movs r0, 0
- cmp r6, 0
- beq _08002E7C
- movs r0, 0xFF
-_08002E7C:
- strb r0, [r7, 0xF]
- cmp r0, 0
- beq _08002E88
- adds r0, r7, 0
- bl sub_8003D70
-_08002E88:
- add sp, 0x4
- pop {r4-r7}
- pop {r0}
- bx r0
- thumb_func_end sub_8002E4C
-
- thumb_func_start sub_8002E90
-sub_8002E90: @ 8002E90
- push {r4,lr}
- movs r4, 0
- movs r3, 0
- movs r2, 0x2
- strh r2, [r0, 0x16]
- str r1, [r0, 0x20]
- strh r3, [r0, 0x1E]
- strh r3, [r0, 0x18]
- movs r1, 0xFF
- strb r1, [r0, 0xB]
- strb r4, [r0, 0xC]
- strb r4, [r0, 0xD]
- pop {r4}
- pop {r0}
- bx r0
- thumb_func_end sub_8002E90
-
- thumb_func_start sub_8002EB0
-sub_8002EB0: @ 8002EB0
- push {r4-r7,lr}
- mov r7, r8
- push {r7}
- sub sp, 0x4
- adds r7, r0, 0
- ldr r5, [sp, 0x1C]
- lsls r2, 16
- lsrs r2, 16
- lsls r3, 24
- lsrs r3, 24
- lsls r5, 24
- lsrs r5, 24
- ldr r6, _08002F30
- movs r0, 0
- mov r8, r0
- movs r4, 0
- movs r0, 0x3
- strh r0, [r6, 0x36]
- strh r4, [r6, 0x34]
- ldr r0, _08002F34
- mov r4, r8
- strb r4, [r0]
- ldr r4, _08002F38
- movs r0, 0x1A
- strb r0, [r4]
- str r5, [sp]
- adds r0, r7, 0
- bl CreateTextRenderer
- movs r0, 0xFF
- strb r0, [r7, 0xB]
- ldrb r0, [r7]
- cmp r0, 0
- bne _08002F24
- adds r0, r7, 0
- movs r1, 0
- movs r2, 0
- bl GetTextRendererTileBufferIndex
- lsls r0, 16
- lsrs r0, 11
- ldr r4, [r7, 0x24]
- adds r4, r0
- ldr r0, _08002F3C
- ldrb r3, [r7, 0x4]
- adds r1, r4, 0
- adds r2, r3, 0
- bl sub_8003B30
- ldr r0, _08002F40
- adds r4, 0x20
- ldrb r2, [r7, 0x3]
- ldrb r3, [r7, 0x4]
- adds r1, r4, 0
- bl sub_8003B30
- movs r0, 0x2
- strh r0, [r7, 0x1C]
-_08002F24:
- add sp, 0x4
- pop {r3}
- mov r8, r3
- pop {r4-r7}
- pop {r0}
- bx r0
- .align 2, 0
-_08002F30: .4byte 0x03001770
-_08002F34: .4byte 0x03000358
-_08002F38: .4byte 0x03000359
-_08002F3C: .4byte gUnknown_081E66D2
-_08002F40: .4byte gUnknown_081E3D60
- thumb_func_end sub_8002EB0
-
- thumb_func_start sub_8002F44
-sub_8002F44: @ 8002F44
- push {r4,lr}
- adds r4, r0, 0
- b _08002F92
-_08002F4A:
- cmp r0, 0x6
- bne _08002F6C
- adds r0, r4, 0
- movs r1, 0x10
- bl UpdateTextCurY
- movs r0, 0
- strb r0, [r4, 0x10]
- ldrb r0, [r4, 0xF]
- cmp r0, 0
- beq _08002F66
- adds r0, r4, 0
- bl sub_8003D70
-_08002F66:
- movs r0, 0x2
- strh r0, [r4, 0x16]
- b _08002F8C
-_08002F6C:
- cmp r0, 0x7
- bne _08002F8C
- ldrh r1, [r4, 0x1E]
- adds r0, r1, 0x1
- strh r0, [r4, 0x1E]
- lsls r1, 16
- lsrs r1, 16
- ldr r0, [r4, 0x20]
- adds r0, r1
- ldrb r0, [r0]
- bl GetExpandedPlaceholder
- adds r1, r0, 0
- adds r0, r4, 0
- bl sub_8002FA0
-_08002F8C:
- adds r0, r4, 0
- bl sub_8002FE0
-_08002F92:
- ldrh r0, [r4, 0x16]
- cmp r0, 0
- bne _08002F4A
- movs r0, 0x1
- pop {r4}
- pop {r1}
- bx r1
- thumb_func_end sub_8002F44
-
- thumb_func_start sub_8002FA0
-sub_8002FA0: @ 8002FA0
- push {r4-r6,lr}
- mov r6, r9
- mov r5, r8
- push {r5,r6}
- adds r4, r0, 0
- ldrb r0, [r4, 0x2]
- mov r9, r0
- ldr r6, [r4, 0x20]
- ldrh r0, [r4, 0x1E]
- mov r8, r0
- str r1, [r4, 0x20]
- movs r0, 0
- strh r0, [r4, 0x1E]
- movs r5, 0x2
- strh r5, [r4, 0x16]
- adds r0, r4, 0
- bl sub_8002F44
- lsls r0, 24
- lsrs r0, 24
- str r6, [r4, 0x20]
- mov r1, r8
- strh r1, [r4, 0x1E]
- strh r5, [r4, 0x16]
- mov r1, r9
- strb r1, [r4, 0x2]
- pop {r3,r4}
- mov r8, r3
- mov r9, r4
- pop {r4-r6}
- pop {r1}
- bx r1
- thumb_func_end sub_8002FA0
-
- thumb_func_start sub_8002FE0
-sub_8002FE0: @ 8002FE0
- push {r4,lr}
- adds r4, r0, 0
- ldrh r0, [r4, 0x1E]
- adds r1, r0, 0x1
- strh r1, [r4, 0x1E]
- lsls r0, 16
- lsrs r0, 16
- ldr r1, [r4, 0x20]
- adds r1, r0
- ldrb r3, [r1]
- adds r0, r3, 0
- subs r0, 0xFA
- cmp r0, 0x5
- bhi _08003062
- lsls r0, 2
- ldr r1, _08003008
- adds r0, r1
- ldr r0, [r0]
- mov pc, r0
- .align 2, 0
-_08003008: .4byte _0800300C
- .align 2, 0
-_0800300C:
- .4byte _08003048
- .4byte _0800303E
- .4byte _08003056
- .4byte _08003030
- .4byte _08003034
- .4byte _08003024
-_08003024:
- adds r0, r4, 0
- bl sub_8003E4C
- movs r0, 0
- strh r0, [r4, 0x16]
- b _08003076
-_08003030:
- movs r0, 0x7
- b _08003050
-_08003034:
- adds r0, r4, 0
- bl sub_8003E4C
- movs r0, 0x6
- b _08003050
-_0800303E:
- adds r0, r4, 0
- bl DrawInitialDownArrow
- movs r0, 0x8
- b _08003050
-_08003048:
- adds r0, r4, 0
- bl DrawInitialDownArrow
- movs r0, 0x9
-_08003050:
- strh r0, [r4, 0x16]
- movs r0, 0x2
- b _08003076
-_08003056:
- adds r0, r4, 0
- bl sub_8003080
- lsls r0, 24
- lsrs r0, 24
- b _08003076
-_08003062:
- ldr r0, _0800307C
- ldrb r1, [r4]
- lsls r1, 2
- adds r1, r0
- ldr r2, [r1]
- adds r0, r4, 0
- adds r1, r3, 0
- bl _call_via_r2
- movs r0, 0x1
-_08003076:
- pop {r4}
- pop {r1}
- bx r1
- .align 2, 0
-_0800307C: .4byte gUnknown_081E6A7C
- thumb_func_end sub_8002FE0
-
- thumb_func_start sub_8003080
-sub_8003080: @ 8003080
- push {lr}
- ldr r3, _080030A8
- ldrh r2, [r0, 0x1E]
- adds r1, r2, 0x1
- strh r1, [r0, 0x1E]
- lsls r2, 16
- lsrs r2, 16
- ldr r1, [r0, 0x20]
- adds r1, r2
- ldrb r1, [r1]
- lsls r1, 2
- adds r1, r3
- ldr r1, [r1]
- bl _call_via_r1
- lsls r0, 24
- lsrs r0, 24
- pop {r1}
- bx r1
- .align 2, 0
-_080030A8: .4byte gUnknown_081E6AD4
- thumb_func_end sub_8003080
-
- thumb_func_start sub_80030AC
-sub_80030AC: @ 80030AC
- movs r0, 0x2
- bx lr
- thumb_func_end sub_80030AC
-
- thumb_func_start sub_80030B0
-sub_80030B0: @ 80030B0
- push {lr}
- ldrh r2, [r0, 0x1E]
- adds r1, r2, 0x1
- strh r1, [r0, 0x1E]
- lsls r2, 16
- lsrs r2, 16
- ldr r1, [r0, 0x20]
- adds r1, r2
- ldrb r1, [r1]
- bl sub_8003F90
- movs r0, 0x2
- pop {r1}
- bx r1
- thumb_func_end sub_80030B0
-
- thumb_func_start sub_80030CC
-sub_80030CC: @ 80030CC
- push {lr}
- ldrh r2, [r0, 0x1E]
- adds r1, r2, 0x1
- strh r1, [r0, 0x1E]
- lsls r2, 16
- lsrs r2, 16
- ldr r1, [r0, 0x20]
- adds r1, r2
- ldrb r1, [r1]
- bl sub_8003F60
- movs r0, 0x2
- pop {r1}
- bx r1
- thumb_func_end sub_80030CC
-
- thumb_func_start sub_80030E8
-sub_80030E8: @ 80030E8
- push {lr}
- ldrh r2, [r0, 0x1E]
- adds r1, r2, 0x1
- strh r1, [r0, 0x1E]
- lsls r2, 16
- lsrs r2, 16
- ldr r1, [r0, 0x20]
- adds r1, r2
- ldrb r1, [r1]
- bl sub_8003F80
- movs r0, 0x2
- pop {r1}
- bx r1
- thumb_func_end sub_80030E8
-
- thumb_func_start sub_8003104
-sub_8003104: @ 8003104
- push {r4,lr}
- adds r4, r0, 0
- ldrh r1, [r4, 0x1E]
- adds r0, r1, 0x1
- strh r0, [r4, 0x1E]
- lsls r1, 16
- lsrs r1, 16
- ldr r0, [r4, 0x20]
- adds r0, r1
- ldrb r1, [r0]
- adds r0, r4, 0
- bl sub_8003F90
- ldrh r1, [r4, 0x1E]
- adds r0, r1, 0x1
- strh r0, [r4, 0x1E]
- lsls r1, 16
- lsrs r1, 16
- ldr r0, [r4, 0x20]
- adds r0, r1
- ldrb r1, [r0]
- adds r0, r4, 0
- bl sub_8003F60
- ldrh r1, [r4, 0x1E]
- adds r0, r1, 0x1
- strh r0, [r4, 0x1E]
- lsls r1, 16
- lsrs r1, 16
- ldr r0, [r4, 0x20]
- adds r0, r1
- ldrb r1, [r0]
- adds r0, r4, 0
- bl sub_8003F80
- movs r0, 0x2
- pop {r4}
- pop {r1}
- bx r1
- thumb_func_end sub_8003104
-
- thumb_func_start sub_8003154
-sub_8003154: @ 8003154
- ldrh r2, [r0, 0x1E]
- adds r1, r2, 0x1
- strh r1, [r0, 0x1E]
- lsls r2, 16
- lsrs r2, 16
- ldr r1, [r0, 0x20]
- adds r1, r2
- ldrb r1, [r1]
- strb r1, [r0, 0x6]
- movs r0, 0x2
- bx lr
- thumb_func_end sub_8003154
-
- thumb_func_start sub_800316C
-sub_800316C: @ 800316C
- ldrh r2, [r0, 0x1E]
- adds r1, r2, 0x1
- strh r1, [r0, 0x1E]
- lsls r2, 16
- lsrs r2, 16
- ldr r1, [r0, 0x20]
- adds r1, r2
- ldrb r1, [r1]
- strb r1, [r0, 0x1]
- movs r0, 0x2
- bx lr
- thumb_func_end sub_800316C
-
- thumb_func_start sub_8003184
-sub_8003184: @ 8003184
- ldr r1, [r0, 0x2C]
- ldrb r1, [r1, 0x8]
- strb r1, [r0, 0x1]
- movs r0, 0x2
- bx lr
- thumb_func_end sub_8003184
-
- thumb_func_start sub_8003190
-sub_8003190: @ 8003190
- push {r4,lr}
- adds r4, r0, 0
- bl sub_8003E4C
- movs r0, 0x4
- strh r0, [r4, 0x16]
- ldrh r1, [r4, 0x1E]
- adds r0, r1, 0x1
- strh r0, [r4, 0x1E]
- lsls r1, 16
- lsrs r1, 16
- ldr r0, [r4, 0x20]
- adds r0, r1
- ldrb r0, [r0]
- strb r0, [r4, 0xD]
- movs r0, 0x2
- pop {r4}
- pop {r1}
- bx r1
- thumb_func_end sub_8003190
-
- thumb_func_start sub_80031B8
-sub_80031B8: @ 80031B8
- push {r4,lr}
- adds r4, r0, 0
- bl sub_8003E4C
- movs r0, 0x5
- strh r0, [r4, 0x16]
- movs r0, 0x2
- pop {r4}
- pop {r1}
- bx r1
- thumb_func_end sub_80031B8
-
- thumb_func_start sub_80031CC
-sub_80031CC: @ 80031CC
- push {r4,lr}
- adds r4, r0, 0
- bl sub_8003E4C
- movs r0, 0xA
- strh r0, [r4, 0x16]
- movs r0, 0x2
- pop {r4}
- pop {r1}
- bx r1
- thumb_func_end sub_80031CC
-
- thumb_func_start sub_80031E0
-sub_80031E0: @ 80031E0
- push {r4,lr}
- ldrh r1, [r0, 0x1E]
- adds r2, r1, 0x1
- strh r2, [r0, 0x1E]
- lsls r1, 16
- lsrs r1, 16
- ldr r3, [r0, 0x20]
- adds r1, r3, r1
- ldrb r4, [r1]
- adds r1, r2, 0x1
- strh r1, [r0, 0x1E]
- lsls r2, 16
- lsrs r2, 16
- adds r3, r2
- ldrb r0, [r3]
- lsls r0, 8
- orrs r4, r0
- adds r0, r4, 0
- bl sub_8075474
- movs r0, 0x2
- pop {r4}
- pop {r1}
- bx r1
- thumb_func_end sub_80031E0
-
- thumb_func_start sub_8003210
-sub_8003210: @ 8003210
- push {lr}
- ldr r1, _08003238
- ldrb r3, [r0]
- lsls r3, 2
- adds r3, r1
- ldrh r2, [r0, 0x1E]
- adds r1, r2, 0x1
- strh r1, [r0, 0x1E]
- lsls r2, 16
- lsrs r2, 16
- ldr r1, [r0, 0x20]
- adds r1, r2
- ldrb r1, [r1]
- ldr r2, [r3]
- bl _call_via_r2
- movs r0, 0x1
- pop {r1}
- bx r1
- .align 2, 0
-_08003238: .4byte gUnknown_081E6A7C
- thumb_func_end sub_8003210
-
- thumb_func_start sub_800323C
-sub_800323C: @ 800323C
- movs r0, 0x1
- bx lr
- thumb_func_end sub_800323C
-
- thumb_func_start sub_8003240
-sub_8003240: @ 8003240
- push {r4,lr}
- adds r4, r0, 0
- bl sub_8003E4C
- ldrh r1, [r4, 0x1E]
- adds r0, r1, 0x1
- strh r0, [r4, 0x1E]
- lsls r1, 16
- lsrs r1, 16
- ldr r0, [r4, 0x20]
- adds r0, r1
- ldrb r1, [r0]
- lsls r1, 27
- lsrs r1, 24
- adds r0, r4, 0
- bl UpdateTextCurY
- movs r0, 0x1
- pop {r4}
- pop {r1}
- bx r1
- thumb_func_end sub_8003240
-
- thumb_func_start sub_800326C
-sub_800326C: @ 800326C
- push {lr}
- bl sub_8004318
- movs r0, 0x2
- pop {r1}
- bx r1
- thumb_func_end sub_800326C
-
- thumb_func_start sub_8003278
-sub_8003278: @ 8003278
- push {r4,lr}
- ldrh r1, [r0, 0x1E]
- adds r2, r1, 0x1
- strh r2, [r0, 0x1E]
- lsls r1, 16
- lsrs r1, 16
- ldr r3, [r0, 0x20]
- adds r1, r3, r1
- ldrb r4, [r1]
- adds r1, r2, 0x1
- strh r1, [r0, 0x1E]
- lsls r2, 16
- lsrs r2, 16
- adds r3, r2
- ldrb r0, [r3]
- lsls r0, 8
- orrs r4, r0
- adds r0, r4, 0
- bl audio_play
- movs r0, 0x2
- pop {r4}
- pop {r1}
- bx r1
- thumb_func_end sub_8003278
-
- thumb_func_start sub_80032A8
-sub_80032A8: @ 80032A8
- push {r4,r5,lr}
- adds r5, r0, 0
- ldrb r0, [r5]
- cmp r0, 0x1
- beq _080032C6
- ldrb r0, [r5, 0x12]
- ldrb r1, [r5, 0x10]
- adds r0, r1
- movs r1, 0x7
- ands r0, r1
- cmp r0, 0
- bne _080032C6
- ldrb r0, [r5, 0xE]
- cmp r0, 0x7
- bhi _080032E0
-_080032C6:
- ldr r0, _080032DC
- ldrb r1, [r5]
- lsls r1, 2
- adds r1, r0
- ldr r2, [r1]
- adds r0, r5, 0
- movs r1, 0
- bl _call_via_r2
- b _08003338
- .align 2, 0
-_080032DC: .4byte gUnknown_081E6A7C
-_080032E0:
- ldr r0, _08003340
- ldr r4, [r0, 0x40]
- adds r0, r5, 0
- movs r1, 0
- movs r2, 0
- bl GetTextRendererTileBufferIndex
- lsls r0, 16
- lsrs r0, 11
- ldr r1, [r5, 0x24]
- adds r1, r0
- str r4, [r1]
- str r4, [r1, 0x4]
- str r4, [r1, 0x8]
- str r4, [r1, 0xC]
- str r4, [r1, 0x10]
- str r4, [r1, 0x14]
- str r4, [r1, 0x18]
- str r4, [r1, 0x1C]
- adds r0, r5, 0
- movs r1, 0
- movs r2, 0x1
- bl GetTextRendererTileBufferIndex
- lsls r0, 16
- lsrs r0, 11
- ldr r1, [r5, 0x24]
- adds r1, r0
- str r4, [r1]
- str r4, [r1, 0x4]
- str r4, [r1, 0x8]
- str r4, [r1, 0xC]
- str r4, [r1, 0x10]
- str r4, [r1, 0x14]
- str r4, [r1, 0x18]
- str r4, [r1, 0x1C]
- adds r0, r5, 0
- movs r1, 0x1
- bl sub_8006954
- adds r0, r5, 0
- movs r1, 0x8
- bl UpdateTextCurX
-_08003338:
- pop {r4,r5}
- pop {r0}
- bx r0
- .align 2, 0
-_08003340: .4byte 0x03000360
- thumb_func_end sub_80032A8
-
- thumb_func_start sub_8003344
-sub_8003344: @ 8003344
- push {r4-r6,lr}
- adds r4, r0, 0
- lsls r1, 24
- lsrs r5, r1, 24
- ldrb r6, [r4, 0xE]
- ldrb r1, [r4, 0x10]
- subs r0, r5, r1
- cmp r0, 0x8
- ble _08003376
- ldrb r0, [r4, 0x12]
- adds r0, r1
- movs r1, 0x7
- ands r0, r1
- movs r1, 0x8
- subs r1, r0
- strb r1, [r4, 0xE]
- b _08003378
-_08003366:
- adds r0, r4, 0
- bl sub_80032A8
- ldrb r0, [r4, 0x10]
- subs r0, r5, r0
- cmp r0, 0x7
- ble _08003376
- movs r0, 0x8
-_08003376:
- strb r0, [r4, 0xE]
-_08003378:
- ldrb r0, [r4, 0x10]
- cmp r0, r5
- bcc _08003366
- strb r6, [r4, 0xE]
- pop {r4-r6}
- pop {r0}
- bx r0
- thumb_func_end sub_8003344
-
- thumb_func_start sub_8003388
-sub_8003388: @ 8003388
- push {lr}
- ldrh r2, [r0, 0x1E]
- adds r1, r2, 0x1
- strh r1, [r0, 0x1E]
- lsls r2, 16
- lsrs r2, 16
- ldr r1, [r0, 0x20]
- adds r1, r2
- ldrb r1, [r1]
- ldrb r2, [r0, 0x10]
- adds r1, r2
- lsls r1, 24
- lsrs r1, 24
- bl sub_8003344
- movs r0, 0x1
- pop {r1}
- bx r1
- thumb_func_end sub_8003388
-
- thumb_func_start sub_80033AC
-sub_80033AC: @ 80033AC
- push {r4,lr}
- adds r4, r0, 0
- bl sub_8003E4C
- ldrh r1, [r4, 0x1E]
- adds r0, r1, 0x1
- strh r0, [r4, 0x1E]
- lsls r1, 16
- lsrs r1, 16
- ldr r0, [r4, 0x20]
- adds r0, r1
- ldrb r1, [r0]
- adds r0, r4, 0
- bl sub_8003CA0
- movs r0, 0x1
- pop {r4}
- pop {r1}
- bx r1
- thumb_func_end sub_80033AC
-
- thumb_func_start sub_80033D4
-sub_80033D4: @ 80033D4
- push {lr}
- ldrh r2, [r0, 0x1E]
- adds r1, r2, 0x1
- strh r1, [r0, 0x1E]
- lsls r2, 16
- lsrs r2, 16
- ldr r1, [r0, 0x20]
- adds r1, r2
- ldrb r1, [r1]
- bl sub_8003344
- movs r0, 0x1
- pop {r1}
- bx r1
- thumb_func_end sub_80033D4
-
- thumb_func_start sub_80033F0
-sub_80033F0: @ 80033F0
- ldrh r2, [r0, 0x1E]
- adds r1, r2, 0x1
- strh r1, [r0, 0x1E]
- lsls r2, 16
- lsrs r2, 16
- ldr r1, [r0, 0x20]
- adds r1, r2
- ldrb r1, [r1]
- strb r1, [r0, 0xE]
- movs r0, 0x2
- bx lr
- thumb_func_end sub_80033F0
-
- thumb_func_start sub_8003408
-sub_8003408: @ 8003408
- movs r1, 0x1
- strb r1, [r0, 0x2]
- movs r0, 0x2
- bx lr
- thumb_func_end sub_8003408
-
- thumb_func_start sub_8003410
-sub_8003410: @ 8003410
- movs r1, 0x2
- strb r1, [r0, 0x2]
- movs r0, 0x2
- bx lr
- thumb_func_end sub_8003410
-
- thumb_func_start sub_8003418
-sub_8003418: @ 8003418
- push {r4,r5,lr}
- adds r4, r0, 0
- movs r5, 0x1
- b _08003452
-_08003420:
- cmp r0, 0x6
- bne _08003440
- adds r0, r4, 0
- movs r1, 0x10
- bl UpdateTextCurY
- movs r0, 0
- strb r0, [r4, 0x10]
- ldrb r0, [r4, 0xF]
- cmp r0, 0
- beq _0800343C
- adds r0, r4, 0
- bl sub_8003D70
-_0800343C:
- movs r0, 0x2
- strh r0, [r4, 0x16]
-_08003440:
- adds r0, r4, 0
- bl sub_8002FE0
- lsls r0, 24
- lsrs r0, 24
- cmp r0, 0x1
- bne _08003452
- movs r5, 0
- b _08003458
-_08003452:
- ldrh r0, [r4, 0x16]
- cmp r0, 0
- bne _08003420
-_08003458:
- adds r0, r5, 0
- pop {r4,r5}
- pop {r1}
- bx r1
- thumb_func_end sub_8003418
-
- thumb_func_start sub_8003460
-sub_8003460: @ 8003460
- push {r4,lr}
- sub sp, 0x4
- adds r4, r0, 0
- ldr r0, [sp, 0xC]
- lsls r2, 16
- lsrs r2, 16
- lsls r3, 24
- lsrs r3, 24
- lsls r0, 24
- lsrs r0, 24
- str r0, [sp]
- adds r0, r4, 0
- bl CreateTextRenderer
- adds r0, r4, 0
- bl sub_8002F44
- lsls r0, 24
- lsrs r0, 24
- add sp, 0x4
- pop {r4}
- pop {r1}
- bx r1
- thumb_func_end sub_8003460
-
- thumb_func_start sub_8003490
-sub_8003490: @ 8003490
- push {r4,r5,lr}
- sub sp, 0x8
- adds r5, r0, 0
- ldr r4, [sp, 0x14]
- lsls r2, 16
- lsrs r2, 16
- lsls r3, 24
- lsrs r3, 24
- lsls r4, 24
- lsrs r4, 24
- add r0, sp, 0x4
- strb r1, [r0]
- adds r1, r0, 0
- movs r0, 0xFF
- strb r0, [r1, 0x1]
- str r4, [sp]
- adds r0, r5, 0
- bl CreateTextRenderer
- adds r0, r5, 0
- bl sub_8002FE0
- adds r4, r0, 0
- lsls r4, 24
- lsrs r4, 24
- adds r0, r5, 0
- bl sub_8003E4C
- adds r0, r4, 0
- add sp, 0x8
- pop {r4,r5}
- pop {r1}
- bx r1
- thumb_func_end sub_8003490
-
- thumb_func_start sub_80034D4
-sub_80034D4: @ 80034D4
- push {lr}
- adds r3, r0, 0
- adds r2, r1, 0
- ldr r0, _080034E8
- adds r1, r3, 0
- bl sub_8004E3C
- pop {r0}
- bx r0
- .align 2, 0
-_080034E8: .4byte gUnknown_081E6C74
- thumb_func_end sub_80034D4
-
- thumb_func_start sub_80034EC
-sub_80034EC: @ 80034EC
- push {lr}
- adds r1, r0, 0
- ldr r0, _08003500
- bl GetStringWidthGivenTextRendererTemplate
- lsls r0, 24
- lsrs r0, 24
- pop {r1}
- bx r1
- .align 2, 0
-_08003500: .4byte gUnknown_081E6C74
- thumb_func_end sub_80034EC
-
- thumb_func_start sub_8003504
-sub_8003504: @ 8003504
- push {r4-r6,lr}
- mov r6, r9
- mov r5, r8
- push {r5,r6}
- sub sp, 0x4
- mov r8, r0
- mov r9, r1
- adds r6, r2, 0
- adds r4, r3, 0
- lsls r6, 24
- lsrs r6, 24
- lsls r4, 24
- lsrs r4, 24
- ldr r5, _08003550
- ldr r0, _08003554
- str r0, [r5, 0x2C]
- movs r0, 0
- str r0, [sp]
- adds r0, r5, 0
- movs r1, 0
- movs r2, 0
- movs r3, 0
- bl CreateTextRenderer
- str r4, [sp]
- adds r0, r5, 0
- mov r1, r8
- mov r2, r9
- adds r3, r6, 0
- bl sub_8004A48
- add sp, 0x4
- pop {r3,r4}
- mov r8, r3
- mov r9, r4
- pop {r4-r6}
- pop {r1}
- bx r1
- .align 2, 0
-_08003550: .4byte 0x03000328
-_08003554: .4byte gUnknown_081E6C74
- thumb_func_end sub_8003504
-
- thumb_func_start sub_8003558
-sub_8003558: @ 8003558
- push {r4-r6,lr}
- mov r6, r9
- mov r5, r8
- push {r5,r6}
- sub sp, 0x4
- mov r9, r0
- mov r8, r1
- adds r6, r2, 0
- adds r4, r3, 0
- lsls r6, 24
- lsrs r6, 24
- lsls r4, 24
- lsrs r4, 24
- ldr r5, _080035A4
- ldr r0, _080035A8
- str r0, [r5, 0x2C]
- movs r0, 0
- str r0, [sp]
- adds r0, r5, 0
- movs r2, 0
- movs r3, 0
- bl CreateTextRenderer
- str r4, [sp]
- adds r0, r5, 0
- mov r1, r9
- mov r2, r8
- adds r3, r6, 0
- bl sub_8004B24
- add sp, 0x4
- pop {r3,r4}
- mov r8, r3
- mov r9, r4
- pop {r4-r6}
- pop {r1}
- bx r1
- .align 2, 0
-_080035A4: .4byte 0x03000328
-_080035A8: .4byte gUnknown_081E6C74
- thumb_func_end sub_8003558
-
- thumb_func_start sub_80035AC
-sub_80035AC: @ 80035AC
- push {lr}
- ldr r2, _080035C0
- movs r1, 0
- strb r1, [r2]
- bl sub_80035C4
- lsls r0, 24
- lsrs r0, 24
- pop {r1}
- bx r1
- .align 2, 0
-_080035C0: .4byte 0x03000358
- thumb_func_end sub_80035AC
-
- thumb_func_start sub_80035C4
-sub_80035C4: @ 80035C4
- push {r4,lr}
- adds r4, r0, 0
- ldrh r0, [r4, 0x16]
- cmp r0, 0xA
- bls _080035D0
- b _080036D8
-_080035D0:
- lsls r0, 2
- ldr r1, _080035DC
- adds r0, r1
- ldr r0, [r0]
- mov pc, r0
- .align 2, 0
-_080035DC: .4byte _080035E0
- .align 2, 0
-_080035E0:
- .4byte _080036DC
- .4byte _080036C0
- .4byte _080036E0
- .4byte _08003648
- .4byte _08003670
- .4byte _0800360C
- .4byte _080036B4
- .4byte _080036AC
- .4byte _0800367C
- .4byte _08003694
- .4byte _080036C8
-_0800360C:
- adds r0, r4, 0
- bl sub_8003FD0
- lsls r0, 24
- cmp r0, 0
- beq _08003634
- ldr r0, _08003630
- ldrh r1, [r0, 0x2E]
- movs r0, 0x3
- ands r0, r1
- cmp r0, 0
- bne _08003626
- b _08003744
-_08003626:
- movs r0, 0x5
- bl audio_play
- b _08003642
- .align 2, 0
-_08003630: .4byte 0x03001770
-_08003634:
- ldrb r0, [r4, 0xD]
- subs r0, 0x1
- strb r0, [r4, 0xD]
- lsls r0, 24
- cmp r0, 0
- beq _08003642
- b _08003744
-_08003642:
- movs r0, 0x2
- strh r0, [r4, 0x16]
- b _08003744
-_08003648:
- adds r0, r4, 0
- bl sub_8003FD0
- lsls r0, 24
- cmp r0, 0
- beq _08003670
- ldr r2, _0800366C
- ldrh r1, [r2, 0x2C]
- movs r0, 0x3
- ands r0, r1
- cmp r0, 0
- beq _08003670
- ldrh r0, [r2, 0x34]
- cmp r0, 0x1
- bne _08003670
- movs r0, 0
- strb r0, [r4, 0xD]
- b _080036D2
- .align 2, 0
-_0800366C: .4byte 0x03001770
-_08003670:
- ldrb r0, [r4, 0xD]
- cmp r0, 0
- beq _080036D2
- subs r0, 0x1
- strb r0, [r4, 0xD]
- b _080036CC
-_0800367C:
- adds r0, r4, 0
- bl DialogueWaitForInput
- lsls r0, 24
- cmp r0, 0
- beq _08003744
- adds r0, r4, 0
- bl sub_8004318
- movs r0, 0x2
- strh r0, [r4, 0x16]
- b _08003744
-_08003694:
- adds r0, r4, 0
- bl DialogueWaitForInput
- lsls r0, 24
- cmp r0, 0
- beq _08003744
- adds r0, r4, 0
- bl sub_800401C
- movs r0, 0x2
- strh r0, [r4, 0x16]
- b _08003744
-_080036AC:
- ldrh r0, [r4, 0x1E]
- adds r0, 0x1
- strh r0, [r4, 0x1E]
- b _080036D2
-_080036B4:
- adds r0, r4, 0
- bl sub_800401C
- movs r0, 0x2
- strh r0, [r4, 0x16]
- b _08003744
-_080036C0:
- adds r0, r4, 0
- bl sub_8004318
- b _080036E0
-_080036C8:
- bl mplay_has_finished_maybe
-_080036CC:
- lsls r0, 24
- cmp r0, 0
- bne _08003744
-_080036D2:
- movs r0, 0x2
- strh r0, [r4, 0x16]
- b _080036E0
-_080036D8:
- movs r0, 0
- strh r0, [r4, 0x16]
-_080036DC:
- movs r0, 0x1
- b _08003746
-_080036E0:
- adds r0, r4, 0
- bl sub_8002FE0
- ldrh r0, [r4, 0x16]
- cmp r0, 0xA
- bhi _08003738
- lsls r0, 2
- ldr r1, _080036F8
- adds r0, r1
- ldr r0, [r0]
- mov pc, r0
- .align 2, 0
-_080036F8: .4byte _080036FC
- .align 2, 0
-_080036FC:
- .4byte _080036DC
- .4byte _08003738
- .4byte _08003738
- .4byte _08003738
- .4byte _08003744
- .4byte _08003728
- .4byte _08003744
- .4byte _08003738
- .4byte _08003728
- .4byte _08003728
- .4byte _08003744
-_08003728:
- adds r0, r4, 0
- bl sub_8003FD0
- lsls r0, 24
- cmp r0, 0
- bne _08003744
- movs r0, 0x3C
- b _08003742
-_08003738:
- movs r0, 0x3
- strh r0, [r4, 0x16]
- adds r0, r4, 0
- bl sub_8003FA4
-_08003742:
- strb r0, [r4, 0xD]
-_08003744:
- movs r0, 0
-_08003746:
- pop {r4}
- pop {r1}
- bx r1
- thumb_func_end sub_80035C4
-
- thumb_func_start sub_800374C
-sub_800374C: @ 800374C
- push {r4-r6,lr}
- ldr r6, _08003770
- movs r1, 0x1
- strb r1, [r6]
- ldr r5, _08003774
- movs r4, 0x1A
- strb r4, [r5]
- bl sub_80035C4
- lsls r0, 24
- lsrs r0, 24
- strb r4, [r5]
- movs r1, 0
- strb r1, [r6]
- pop {r4-r6}
- pop {r1}
- bx r1
- .align 2, 0
-_08003770: .4byte 0x03000358
-_08003774: .4byte 0x03000359
- thumb_func_end sub_800374C
-
- thumb_func_start sub_8003778
-sub_8003778: @ 8003778
- push {r4,lr}
- ldr r4, _08003798
- movs r1, 0x2
- strb r1, [r4]
- ldr r2, _0800379C
- movs r1, 0x1A
- strb r1, [r2]
- bl sub_80035C4
- lsls r0, 24
- lsrs r0, 24
- movs r1, 0
- strb r1, [r4]
- pop {r4}
- pop {r1}
- bx r1
- .align 2, 0
-_08003798: .4byte 0x03000358
-_0800379C: .4byte 0x03000359
- thumb_func_end sub_8003778
-
- thumb_func_start sub_80037A0
-sub_80037A0: @ 80037A0
- push {r4,lr}
- ldr r2, _080037C0
- movs r1, 0x3
- strb r1, [r2]
- ldr r4, _080037C4
- movs r1, 0x11
- strb r1, [r4]
- bl sub_80035C4
- lsls r0, 24
- lsrs r0, 24
- movs r1, 0x1A
- strb r1, [r4]
- pop {r4}
- pop {r1}
- bx r1
- .align 2, 0
-_080037C0: .4byte 0x03000358
-_080037C4: .4byte 0x03000359
- thumb_func_end sub_80037A0
-
- thumb_func_start IsTextPrinterActive
-IsTextPrinterActive: @ 80037C8
- push {r4,lr}
- ldr r3, _080037E8
- movs r2, 0
- strb r2, [r3]
- ldr r4, _080037EC
- strb r1, [r4]
- bl sub_80035C4
- lsls r0, 24
- lsrs r0, 24
- movs r1, 0x1A
- strb r1, [r4]
- pop {r4}
- pop {r1}
- bx r1
- .align 2, 0
-_080037E8: .4byte 0x03000358
-_080037EC: .4byte 0x03000359
- thumb_func_end IsTextPrinterActive
-
- thumb_func_start sub_80037F0
-sub_80037F0: @ 80037F0
- push {r4,lr}
- adds r4, r0, 0
- bl sub_8003818
- adds r1, r0, 0
- lsls r1, 24
- lsrs r1, 24
- adds r0, r4, 0
- bl UpdateTextCurX
- ldrb r0, [r4, 0xB]
- cmp r0, 0
- beq _08003810
- adds r0, r4, 0
- bl sub_8003E4C
-_08003810:
- pop {r4}
- pop {r0}
- bx r0
- thumb_func_end sub_80037F0
-
- thumb_func_start sub_8003818
-sub_8003818: @ 8003818
- push {r4-r6,lr}
- adds r5, r0, 0
- adds r6, r1, 0
- bl GetGlyphWidth
- adds r4, r0, 0
- lsls r4, 24
- lsrs r4, 24
- adds r0, r5, 0
- adds r1, r6, 0
- adds r2, r4, 0
- bl sub_8006874
- adds r1, r0, 0
- adds r0, r5, 0
- bl sub_8006954
- adds r0, r4, 0
- pop {r4-r6}
- pop {r1}
- bx r1
- thumb_func_end sub_8003818
-
- thumb_func_start sub_8003844
-sub_8003844: @ 8003844
- push {r4,lr}
- adds r4, r0, 0
- ldr r2, _08003864
- ldrb r0, [r4, 0x1]
- lsls r0, 2
- adds r0, r2
- ldr r2, [r0]
- adds r0, r4, 0
- bl _call_via_r2
- ldrb r0, [r4, 0x10]
- adds r0, 0x8
- strb r0, [r4, 0x10]
- pop {r4}
- pop {r0}
- bx r0
- .align 2, 0
-_08003864: .4byte gUnknown_081E6A88
- thumb_func_end sub_8003844
-
- thumb_func_start sub_8003868
-sub_8003868: @ 8003868
- push {lr}
- lsls r2, r1, 1
- ldrh r1, [r0, 0x1A]
- adds r2, r1
- lsls r2, 16
- lsrs r1, r2, 16
- movs r3, 0x80
- lsls r3, 9
- adds r2, r3
- lsrs r2, 16
- bl sub_80039EC
- pop {r0}
- bx r0
- thumb_func_end sub_8003868
-
- thumb_func_start sub_8003884
-sub_8003884: @ 8003884
- push {r4,lr}
- lsls r3, r1, 1
- ldr r4, _080038AC
- adds r1, r3, r4
- ldrb r1, [r1]
- ldrh r2, [r0, 0x1A]
- adds r1, r2, r1
- lsls r1, 16
- lsrs r1, 16
- adds r3, 0x1
- adds r3, r4
- ldrb r3, [r3]
- adds r2, r3
- lsls r2, 16
- lsrs r2, 16
- bl sub_80039EC
- pop {r4}
- pop {r0}
- bx r0
- .align 2, 0
-_080038AC: .4byte gUnknown_081E5FF0
- thumb_func_end sub_8003884
-
- thumb_func_start sub_80038B0
-sub_80038B0: @ 80038B0
- push {lr}
- adds r3, r1, 0
- ldrh r2, [r0, 0x1A]
- adds r1, r2, 0
- adds r1, 0xD4
- lsls r1, 16
- lsrs r1, 16
- adds r2, r3
- lsls r2, 16
- lsrs r2, 16
- bl sub_80039EC
- pop {r0}
- bx r0
- thumb_func_end sub_80038B0
-
- thumb_func_start sub_80038CC
-sub_80038CC: @ 80038CC
- push {r4,lr}
- lsls r3, r1, 1
- ldr r4, _080038F4
- adds r1, r3, r4
- ldrb r1, [r1]
- ldrh r2, [r0, 0x1A]
- adds r1, r2, r1
- lsls r1, 16
- lsrs r1, 16
- adds r3, 0x1
- adds r3, r4
- ldrb r3, [r3]
- adds r2, r3
- lsls r2, 16
- lsrs r2, 16
- bl sub_80039EC
- pop {r4}
- pop {r0}
- bx r0
- .align 2, 0
-_080038F4: .4byte gUnknown_081E61DE
- thumb_func_end sub_80038CC
-
- thumb_func_start sub_80038F8
-sub_80038F8: @ 80038F8
- push {r4-r6,lr}
- adds r6, r0, 0
- adds r5, r1, 0
- bl GetGlyphWidth
- adds r4, r0, 0
- lsls r4, 24
- lsrs r4, 24
- adds r0, r6, 0
- adds r1, r5, 0
- bl sub_800392C
- adds r0, r6, 0
- adds r1, r4, 0
- bl UpdateTextCurX
- ldrb r0, [r6, 0xB]
- cmp r0, 0
- beq _08003924
- adds r0, r6, 0
- bl sub_8003E4C
-_08003924:
- pop {r4-r6}
- pop {r0}
- bx r0
- thumb_func_end sub_80038F8
-
- thumb_func_start sub_800392C
-sub_800392C: @ 800392C
- push {r4,r5,lr}
- adds r4, r0, 0
- adds r5, r1, 0
- bl GetGlyphWidth
- adds r2, r0, 0
- lsls r2, 24
- lsrs r2, 24
- adds r0, r4, 0
- adds r1, r5, 0
- bl sub_8006874
- adds r1, r0, 0
- adds r0, r4, 0
- bl sub_8006954
- pop {r4,r5}
- pop {r0}
- bx r0
- thumb_func_end sub_800392C
-
- thumb_func_start sub_8003954
-sub_8003954: @ 8003954
- push {r4,r5,lr}
- sub sp, 0xC
- adds r4, r0, 0
- adds r3, r1, 0
- adds r5, r2, 0
- ldrb r0, [r4, 0x1]
- ldrb r1, [r4, 0x2]
- lsls r3, 16
- lsrs r3, 16
- add r2, sp, 0x8
- str r2, [sp]
- adds r2, r3, 0
- add r3, sp, 0x4
- bl sub_8003A1C
- ldrb r0, [r4, 0x1]
- cmp r0, 0x6
- bhi _080039E2
- lsls r0, 2
- ldr r1, _08003984
- adds r0, r1
- ldr r0, [r0]
- mov pc, r0
- .align 2, 0
-_08003984: .4byte _08003988
- .align 2, 0
-_08003988:
- .4byte _080039A4
- .4byte _080039A4
- .4byte _080039A4
- .4byte _080039C0
- .4byte _080039C0
- .4byte _080039C0
- .4byte _080039A4
-_080039A4:
- ldr r0, [sp, 0x4]
- ldrb r2, [r4, 0x3]
- ldrb r3, [r4, 0x4]
- adds r1, r5, 0
- bl sub_8003B30
- ldr r0, [sp, 0x8]
- adds r1, r5, 0
- adds r1, 0x20
- ldrb r2, [r4, 0x3]
- ldrb r3, [r4, 0x4]
- bl sub_8003B30
- b _080039E2
-_080039C0:
- ldr r0, [sp, 0x4]
- ldrb r2, [r4, 0x3]
- ldrb r3, [r4, 0x5]
- ldrb r1, [r4, 0x4]
- str r1, [sp]
- adds r1, r5, 0
- bl sub_8003BCC
- ldr r0, [sp, 0x8]
- adds r1, r5, 0
- adds r1, 0x20
- ldrb r2, [r4, 0x3]
- ldrb r3, [r4, 0x5]
- ldrb r4, [r4, 0x4]
- str r4, [sp]
- bl sub_8003BCC
-_080039E2:
- add sp, 0xC
- pop {r4,r5}
- pop {r0}
- bx r0
- thumb_func_end sub_8003954
-
- thumb_func_start sub_80039EC
-sub_80039EC: @ 80039EC
- push {r4-r6,lr}
- adds r4, r0, 0
- lsls r1, 16
- lsrs r5, r1, 16
- lsls r2, 16
- lsrs r6, r2, 16
- bl sub_8003AF8
- adds r2, r0, 0
- cmp r2, 0
- beq _08003A16
- ldrb r1, [r4, 0x6]
- lsls r1, 28
- lsrs r1, 16
- adds r0, r5, 0
- orrs r0, r1
- strh r0, [r2]
- adds r2, 0x40
- adds r0, r6, 0
- orrs r0, r1
- strh r0, [r2]
-_08003A16:
- pop {r4-r6}
- pop {r0}
- bx r0
- thumb_func_end sub_80039EC
-
- thumb_func_start sub_8003A1C
-sub_8003A1C: @ 8003A1C
- push {r4-r6,lr}
- adds r5, r3, 0
- ldr r6, [sp, 0x10]
- lsls r0, 24
- lsrs r3, r0, 24
- lsls r1, 24
- lsrs r0, r1, 24
- lsls r2, 16
- lsrs r4, r2, 16
- cmp r0, 0x1
- bne _08003A36
- movs r0, 0
- b _08003A38
-_08003A36:
- movs r0, 0x7
-_08003A38:
- adds r0, r3
- lsls r1, r0, 1
- adds r1, r0
- lsls r1, 2
- ldr r0, _08003A54
- adds r3, r1, r0
- ldr r0, [r3]
- cmp r0, 0x4
- bhi _08003AEC
- lsls r0, 2
- ldr r1, _08003A58
- adds r0, r1
- ldr r0, [r0]
- mov pc, r0
- .align 2, 0
-_08003A54: .4byte gUnknown_081E6B30
-_08003A58: .4byte _08003A5C
- .align 2, 0
-_08003A5C:
- .4byte _08003A70
- .4byte _08003A80
- .4byte _08003A8C
- .4byte _08003AA0
- .4byte _08003ACC
-_08003A70:
- ldrh r0, [r3, 0x8]
- adds r1, r4, 0
- muls r1, r0
- ldr r0, [r3, 0x4]
- adds r0, r1
- str r0, [r5]
- ldrh r1, [r3, 0xA]
- b _08003AC0
-_08003A80:
- lsls r0, r4, 17
- lsrs r4, r0, 16
- ldr r2, _08003A88
- b _08003AA6
- .align 2, 0
-_08003A88: .4byte gUnknown_081E5FF0
-_08003A8C:
- ldrh r1, [r3, 0x8]
- movs r0, 0xD4
- muls r1, r0
- ldr r0, [r3, 0x4]
- adds r0, r1
- str r0, [r5]
- ldrh r0, [r3, 0x8]
- adds r1, r4, 0
- muls r1, r0
- b _08003ABE
-_08003AA0:
- lsls r0, r4, 17
- lsrs r4, r0, 16
- ldr r2, _08003AC8
-_08003AA6:
- adds r0, r4, r2
- ldrb r1, [r0]
- ldrh r0, [r3, 0x8]
- muls r1, r0
- ldr r0, [r3, 0x4]
- adds r0, r1
- str r0, [r5]
- adds r0, r4, 0x1
- adds r0, r2
- ldrb r1, [r0]
- ldrh r0, [r3, 0x8]
- muls r1, r0
-_08003ABE:
- ldr r0, [r3, 0x4]
-_08003AC0:
- adds r0, r1
- str r0, [r6]
- b _08003AEC
- .align 2, 0
-_08003AC8: .4byte gUnknown_081E61DE
-_08003ACC:
- ldr r0, _08003AF4
- ands r0, r4
- ldrh r2, [r3, 0x8]
- muls r0, r2
- ldr r1, [r3, 0x4]
- adds r1, r0
- movs r0, 0xF
- ands r4, r0
- adds r0, r4, 0
- muls r0, r2
- asrs r0, 1
- adds r1, r0
- str r1, [r5]
- ldrh r0, [r3, 0xA]
- adds r1, r0
- str r1, [r6]
-_08003AEC:
- pop {r4-r6}
- pop {r0}
- bx r0
- .align 2, 0
-_08003AF4: .4byte 0x0000fff0
- thumb_func_end sub_8003A1C
-
- thumb_func_start sub_8003AF8
-sub_8003AF8: @ 8003AF8
- push {r4,lr}
- adds r3, r0, 0
- movs r0, 0
- ldr r4, [r3, 0x28]
- cmp r4, 0
- beq _08003B2A
- ldrb r1, [r3, 0x12]
- ldrb r0, [r3, 0x10]
- adds r1, r0
- lsrs r1, 3
- ldrb r0, [r3, 0x7]
- adds r1, r0
- lsls r1, 24
- lsrs r1, 24
- ldrh r0, [r3, 0x14]
- ldrb r2, [r3, 0x11]
- adds r0, r2
- lsrs r0, 3
- ldrb r3, [r3, 0x8]
- adds r0, r3
- lsls r0, 24
- lsrs r0, 19
- adds r0, r1
- lsls r0, 1
- adds r0, r4, r0
-_08003B2A:
- pop {r4}
- pop {r1}
- bx r1
- thumb_func_end sub_8003AF8
-
- thumb_func_start sub_8003B30
-sub_8003B30: @ 8003B30
- push {r4-r7,lr}
- sub sp, 0x8
- lsls r2, 24
- lsrs r2, 24
- lsls r3, 24
- lsrs r3, 24
- adds r7, r0, 0
- str r3, [sp]
- str r2, [sp, 0x4]
- movs r5, 0
- movs r4, 0x1
- mov r3, sp
- adds r6, r1, 0
-_08003B4A:
- adds r0, r7, r5
- ldrb r2, [r0]
- movs r1, 0x1
- ands r1, r2
- lsls r1, 2
- adds r1, r3
- lsls r2, 24
- lsrs r0, r2, 25
- ands r0, r4
- lsls r0, 2
- adds r0, r3
- ldr r0, [r0]
- lsls r0, 4
- ldr r1, [r1]
- orrs r1, r0
- lsrs r0, r2, 26
- ands r0, r4
- lsls r0, 2
- adds r0, r3
- ldr r0, [r0]
- lsls r0, 8
- orrs r1, r0
- lsrs r0, r2, 27
- ands r0, r4
- lsls r0, 2
- adds r0, r3
- ldr r0, [r0]
- lsls r0, 12
- orrs r1, r0
- lsrs r0, r2, 28
- ands r0, r4
- lsls r0, 2
- adds r0, r3
- ldr r0, [r0]
- lsls r0, 16
- orrs r1, r0
- lsrs r0, r2, 29
- ands r0, r4
- lsls r0, 2
- adds r0, r3
- ldr r0, [r0]
- lsls r0, 20
- orrs r1, r0
- lsrs r0, r2, 30
- ands r0, r4
- lsls r0, 2
- adds r0, r3
- ldr r0, [r0]
- lsls r0, 24
- orrs r1, r0
- lsrs r2, 31
- lsls r2, 2
- adds r2, r3
- ldr r0, [r2]
- lsls r0, 28
- orrs r1, r0
- stm r6!, {r1}
- adds r5, 0x1
- cmp r5, 0x7
- ble _08003B4A
- add sp, 0x8
- pop {r4-r7}
- pop {r0}
- bx r0
- thumb_func_end sub_8003B30
-
- thumb_func_start sub_8003BCC
-sub_8003BCC: @ 8003BCC
- push {r4-r7,lr}
- sub sp, 0x40
- ldr r5, [sp, 0x54]
- lsls r2, 24
- lsrs r2, 24
- lsls r3, 24
- lsrs r3, 24
- lsls r5, 24
- lsrs r5, 24
- movs r4, 0x1
- str r4, [sp, 0x4]
- movs r4, 0x2
- str r4, [sp, 0x8]
- movs r4, 0x3
- str r4, [sp, 0xC]
- movs r4, 0x4
- str r4, [sp, 0x10]
- movs r4, 0x5
- str r4, [sp, 0x14]
- movs r4, 0x6
- str r4, [sp, 0x18]
- movs r4, 0x7
- str r4, [sp, 0x1C]
- movs r4, 0x8
- str r4, [sp, 0x20]
- movs r4, 0x9
- str r4, [sp, 0x24]
- movs r4, 0xA
- str r4, [sp, 0x28]
- movs r4, 0xB
- str r4, [sp, 0x2C]
- movs r4, 0xC
- str r4, [sp, 0x30]
- movs r4, 0xD
- str r4, [sp, 0x34]
- str r5, [sp]
- str r3, [sp, 0x38]
- str r2, [sp, 0x3C]
- movs r3, 0xF
- adds r6, r0, 0
- adds r5, r1, 0
- movs r4, 0x7
-_08003C20:
- ldm r6!, {r2}
- adds r0, r2, 0
- ands r0, r3
- lsls r0, 2
- mov r7, sp
- adds r1, r7, r0
- lsrs r0, r2, 4
- ands r0, r3
- lsls r0, 2
- add r0, sp
- ldr r0, [r0]
- lsls r0, 4
- ldr r1, [r1]
- orrs r1, r0
- lsrs r0, r2, 8
- ands r0, r3
- lsls r0, 2
- add r0, sp
- ldr r0, [r0]
- lsls r0, 8
- orrs r1, r0
- lsrs r0, r2, 12
- ands r0, r3
- lsls r0, 2
- add r0, sp
- ldr r0, [r0]
- lsls r0, 12
- orrs r1, r0
- lsrs r0, r2, 16
- ands r0, r3
- lsls r0, 2
- add r0, sp
- ldr r0, [r0]
- lsls r0, 16
- orrs r1, r0
- lsrs r0, r2, 20
- ands r0, r3
- lsls r0, 2
- add r0, sp
- ldr r0, [r0]
- lsls r0, 20
- orrs r1, r0
- lsrs r0, r2, 24
- ands r0, r3
- lsls r0, 2
- add r0, sp
- ldr r0, [r0]
- lsls r0, 24
- orrs r1, r0
- lsrs r2, 28
- lsls r2, 2
- adds r0, r7, r2
- ldr r0, [r0]
- lsls r0, 28
- orrs r1, r0
- stm r5!, {r1}
- subs r4, 0x1
- cmp r4, 0
- bge _08003C20
- add sp, 0x40
- pop {r4-r7}
- pop {r0}
- bx r0
- thumb_func_end sub_8003BCC
-
- thumb_func_start sub_8003CA0
-sub_8003CA0: @ 8003CA0
- push {lr}
- adds r2, r0, 0
- lsls r1, 24
- lsrs r3, r1, 24
- ldrb r0, [r2]
- cmp r0, 0
- bne _08003CC2
- ldrb r0, [r2, 0x12]
- ldrb r1, [r2, 0x10]
- adds r0, r1
- movs r1, 0x7
- ands r0, r1
- cmp r0, 0
- beq _08003CC2
- ldrh r0, [r2, 0x1C]
- adds r0, 0x2
- strh r0, [r2, 0x1C]
-_08003CC2:
- strb r3, [r2, 0x10]
- pop {r0}
- bx r0
- thumb_func_end sub_8003CA0
-
- thumb_func_start UpdateTextCurX
-UpdateTextCurX: @ 8003CC8
- push {r4,lr}
- adds r4, r0, 0
- lsls r1, 24
- lsrs r1, 24
- ldrb r0, [r4]
- cmp r0, 0
- bne _08003CF6
- ldrb r3, [r4, 0x10]
- adds r0, r1, r3
- strb r0, [r4, 0x10]
- ldrb r0, [r4, 0x12]
- ldrb r1, [r4, 0x10]
- adds r1, r0, r1
- movs r2, 0xF8
- ands r1, r2
- adds r0, r3
- ands r0, r2
- cmp r1, r0
- beq _08003CFC
- ldrh r0, [r4, 0x1C]
- adds r0, 0x2
- strh r0, [r4, 0x1C]
- b _08003CFC
-_08003CF6:
- ldrb r0, [r4, 0x10]
- adds r0, r1, r0
- strb r0, [r4, 0x10]
-_08003CFC:
- pop {r4}
- pop {r0}
- bx r0
- thumb_func_end UpdateTextCurX
-
- thumb_func_start UpdateTextCurY
-UpdateTextCurY: @ 8003D04
- push {lr}
- adds r2, r0, 0
- lsls r1, 24
- lsrs r3, r1, 24
- ldrb r0, [r2]
- cmp r0, 0
- bne _08003D26
- ldrb r0, [r2, 0x12]
- ldrb r1, [r2, 0x10]
- adds r0, r1
- movs r1, 0x7
- ands r0, r1
- cmp r0, 0
- beq _08003D26
- ldrh r0, [r2, 0x1C]
- adds r0, 0x2
- strh r0, [r2, 0x1C]
-_08003D26:
- ldrb r0, [r2, 0x11]
- adds r0, r3, r0
- strb r0, [r2, 0x11]
- pop {r0}
- bx r0
- thumb_func_end UpdateTextCurY
-
- thumb_func_start sub_8003D30
-sub_8003D30: @ 8003D30
- push {lr}
- adds r3, r0, 0
- ldrb r0, [r3]
- cmp r0, 0x1
- beq _08003D54
- cmp r0, 0x1
- bgt _08003D44
- cmp r0, 0
- beq _08003D48
- b _08003D66
-_08003D44:
- cmp r0, 0x2
- bne _08003D66
-_08003D48:
- adds r0, r3, 0
- movs r1, 0
- movs r2, 0x8
- bl sub_8006874
- b _08003D66
-_08003D54:
- ldr r0, _08003D6C
- ldrb r1, [r3, 0x1]
- lsls r1, 2
- adds r1, r0
- ldr r2, [r1]
- adds r0, r3, 0
- movs r1, 0
- bl _call_via_r2
-_08003D66:
- pop {r0}
- bx r0
- .align 2, 0
-_08003D6C: .4byte gUnknown_081E6A88
- thumb_func_end sub_8003D30
-
- thumb_func_start sub_8003D70
-sub_8003D70: @ 8003D70
- push {r4-r6,lr}
- adds r6, r0, 0
- ldrb r0, [r6, 0x12]
- movs r1, 0x7
- ands r1, r0
- ldrb r0, [r6]
- cmp r0, 0x1
- beq _08003E3C
- cmp r1, 0
- beq _08003E3C
- lsls r0, r1, 1
- adds r0, r1
- lsls r0, 2
- ldr r1, _08003E44
- adds r0, r1
- ldr r1, [r0]
- mvns r5, r1
- ldr r0, _08003E48
- ldr r4, [r0, 0x40]
- ands r4, r1
- adds r0, r6, 0
- movs r1, 0
- movs r2, 0
- bl GetTextRendererTileBufferIndex
- lsls r0, 16
- lsrs r0, 11
- ldr r1, [r6, 0x24]
- adds r1, r0
- ldr r0, [r1]
- ands r0, r5
- orrs r0, r4
- str r0, [r1]
- ldr r0, [r1, 0x4]
- ands r0, r5
- orrs r0, r4
- str r0, [r1, 0x4]
- ldr r0, [r1, 0x8]
- ands r0, r5
- orrs r0, r4
- str r0, [r1, 0x8]
- ldr r0, [r1, 0xC]
- ands r0, r5
- orrs r0, r4
- str r0, [r1, 0xC]
- ldr r0, [r1, 0x10]
- ands r0, r5
- orrs r0, r4
- str r0, [r1, 0x10]
- ldr r0, [r1, 0x14]
- ands r0, r5
- orrs r0, r4
- str r0, [r1, 0x14]
- ldr r0, [r1, 0x18]
- ands r0, r5
- orrs r0, r4
- str r0, [r1, 0x18]
- ldr r0, [r1, 0x1C]
- ands r0, r5
- orrs r0, r4
- str r0, [r1, 0x1C]
- adds r0, r6, 0
- movs r1, 0
- movs r2, 0x1
- bl GetTextRendererTileBufferIndex
- lsls r0, 16
- lsrs r0, 11
- ldr r1, [r6, 0x24]
- adds r1, r0
- ldr r0, [r1]
- ands r0, r5
- orrs r0, r4
- str r0, [r1]
- ldr r0, [r1, 0x4]
- ands r0, r5
- orrs r0, r4
- str r0, [r1, 0x4]
- ldr r0, [r1, 0x8]
- ands r0, r5
- orrs r0, r4
- str r0, [r1, 0x8]
- ldr r0, [r1, 0xC]
- ands r0, r5
- orrs r0, r4
- str r0, [r1, 0xC]
- ldr r0, [r1, 0x10]
- ands r0, r5
- orrs r0, r4
- str r0, [r1, 0x10]
- ldr r0, [r1, 0x14]
- ands r0, r5
- orrs r0, r4
- str r0, [r1, 0x14]
- ldr r0, [r1, 0x18]
- ands r0, r5
- orrs r0, r4
- str r0, [r1, 0x18]
- ldr r0, [r1, 0x1C]
- ands r0, r5
- orrs r0, r4
- str r0, [r1, 0x1C]
-_08003E3C:
- pop {r4-r6}
- pop {r0}
- bx r0
- .align 2, 0
-_08003E44: .4byte gUnknown_081E69DC
-_08003E48: .4byte 0x03000360
- thumb_func_end sub_8003D70
-
- thumb_func_start sub_8003E4C
-sub_8003E4C: @ 8003E4C
- push {r4-r6,lr}
- adds r6, r0, 0
- ldrb r0, [r6, 0x10]
- ldrb r1, [r6, 0x12]
- adds r2, r0, r1
- movs r0, 0x7
- ands r2, r0
- ldrb r0, [r6]
- cmp r0, 0x1
- beq _08003F2E
- cmp r2, 0
- beq _08003F2E
- movs r0, 0x8
- subs r0, r2
- lsls r1, r0, 1
- adds r1, r0
- lsls r1, 5
- lsls r0, r2, 1
- adds r0, r2
- lsls r0, 2
- ldr r2, _08003F34
- adds r0, r2
- adds r1, r0
- ldr r5, [r1]
- ldr r0, _08003F38
- ldr r4, [r0, 0x40]
- bics r4, r5
- adds r0, r6, 0
- movs r1, 0
- movs r2, 0
- bl GetTextRendererTileBufferIndex
- lsls r0, 16
- lsrs r0, 11
- ldr r1, [r6, 0x24]
- adds r1, r0
- ldr r0, [r1]
- ands r0, r5
- orrs r0, r4
- str r0, [r1]
- ldr r0, [r1, 0x4]
- ands r0, r5
- orrs r0, r4
- str r0, [r1, 0x4]
- ldr r0, [r1, 0x8]
- ands r0, r5
- orrs r0, r4
- str r0, [r1, 0x8]
- ldr r0, [r1, 0xC]
- ands r0, r5
- orrs r0, r4
- str r0, [r1, 0xC]
- ldr r0, [r1, 0x10]
- ands r0, r5
- orrs r0, r4
- str r0, [r1, 0x10]
- ldr r0, [r1, 0x14]
- ands r0, r5
- orrs r0, r4
- str r0, [r1, 0x14]
- ldr r0, [r1, 0x18]
- ands r0, r5
- orrs r0, r4
- str r0, [r1, 0x18]
- ldr r0, [r1, 0x1C]
- ands r0, r5
- orrs r0, r4
- str r0, [r1, 0x1C]
- adds r0, r6, 0
- movs r1, 0
- movs r2, 0x1
- bl GetTextRendererTileBufferIndex
- lsls r0, 16
- lsrs r0, 11
- ldr r1, [r6, 0x24]
- adds r1, r0
- ldr r0, [r1]
- ands r0, r5
- orrs r0, r4
- str r0, [r1]
- ldr r0, [r1, 0x4]
- ands r0, r5
- orrs r0, r4
- str r0, [r1, 0x4]
- ldr r0, [r1, 0x8]
- ands r0, r5
- orrs r0, r4
- str r0, [r1, 0x8]
- ldr r0, [r1, 0xC]
- ands r0, r5
- orrs r0, r4
- str r0, [r1, 0xC]
- ldr r0, [r1, 0x10]
- ands r0, r5
- orrs r0, r4
- str r0, [r1, 0x10]
- ldr r0, [r1, 0x14]
- ands r0, r5
- orrs r0, r4
- str r0, [r1, 0x14]
- ldr r0, [r1, 0x18]
- ands r0, r5
- orrs r0, r4
- str r0, [r1, 0x18]
- ldr r0, [r1, 0x1C]
- ands r0, r5
- orrs r0, r4
- str r0, [r1, 0x1C]
- adds r0, r6, 0
- movs r1, 0x1
- bl sub_8006954
-_08003F2E:
- pop {r4-r6}
- pop {r0}
- bx r0
- .align 2, 0
-_08003F34: .4byte gUnknown_081E66DC
-_08003F38: .4byte 0x03000360
- thumb_func_end sub_8003E4C
-
- thumb_func_start sub_8003F3C
-sub_8003F3C: @ 8003F3C
- push {lr}
- movs r1, 0
- strb r1, [r0, 0x4]
- movs r1, 0xE
- strb r1, [r0, 0x5]
- movs r1, 0xF
- strb r1, [r0, 0x3]
- movs r1, 0
- ldr r0, _08003F5C
- adds r0, 0x44
-_08003F50:
- stm r0!, {r1}
- adds r1, 0x1
- cmp r1, 0xF
- bls _08003F50
- pop {r0}
- bx r0
- .align 2, 0
-_08003F5C: .4byte 0x03000360
- thumb_func_end sub_8003F3C
-
- thumb_func_start sub_8003F60
-sub_8003F60: @ 8003F60
- lsls r1, 24
- lsrs r1, 24
- strb r1, [r0, 0x4]
- ldr r3, _08003F7C
- str r1, [r3, 0x44]
- lsls r2, r1, 4
- orrs r2, r1
- lsls r0, r2, 8
- orrs r0, r2
- lsls r1, r0, 16
- orrs r0, r1
- str r0, [r3, 0x40]
- bx lr
- .align 2, 0
-_08003F7C: .4byte 0x03000360
- thumb_func_end sub_8003F60
-
- thumb_func_start sub_8003F80
-sub_8003F80: @ 8003F80
- lsls r1, 24
- lsrs r1, 24
- strb r1, [r0, 0x5]
- ldr r0, _08003F8C
- str r1, [r0, 0x7C]
- bx lr
- .align 2, 0
-_08003F8C: .4byte 0x03000360
- thumb_func_end sub_8003F80
-
- thumb_func_start sub_8003F90
-sub_8003F90: @ 8003F90
- lsls r1, 24
- lsrs r1, 24
- strb r1, [r0, 0x3]
- ldr r0, _08003FA0
- adds r0, 0x80
- str r1, [r0]
- bx lr
- .align 2, 0
-_08003FA0: .4byte 0x03000360
- thumb_func_end sub_8003F90
-
- thumb_func_start sub_8003FA4
-sub_8003FA4: @ 8003FA4
- push {lr}
- bl sub_8003FD0
- lsls r0, 24
- cmp r0, 0
- beq _08003FC8
- ldr r1, _08003FC0
- ldr r0, _08003FC4
- ldrb r0, [r0, 0x14]
- lsls r0, 29
- lsrs r0, 29
- adds r0, r1
- ldrb r0, [r0]
- b _08003FCA
- .align 2, 0
-_08003FC0: .4byte gUnknown_081E6BD8
-_08003FC4: .4byte 0x02024ea4
-_08003FC8:
- movs r0, 0x3
-_08003FCA:
- pop {r1}
- bx r1
- thumb_func_end sub_8003FA4
-
- thumb_func_start sub_8003FD0
-sub_8003FD0: @ 8003FD0
- push {lr}
- movs r1, 0x1
- ldr r0, _08003FE8
- ldrb r0, [r0]
- cmp r0, 0x2
- beq _08003FF2
- cmp r0, 0x2
- bgt _08003FEC
- cmp r0, 0x1
- beq _08004008
- b _08004010
- .align 2, 0
-_08003FE8: .4byte 0x03000358
-_08003FEC:
- cmp r0, 0x3
- beq _08003FF6
- b _08004010
-_08003FF2:
- movs r1, 0
- b _08004010
-_08003FF6:
- movs r1, 0
- ldr r0, _08004004
- ldrb r0, [r0]
- cmp r0, 0
- bne _08004010
- movs r1, 0x1
- b _08004010
- .align 2, 0
-_08004004: .4byte 0x0203869a
-_08004008:
- ldr r0, _08004018
- ldrh r0, [r0]
- lsrs r0, 1
- bics r1, r0
-_08004010:
- adds r0, r1, 0
- pop {r1}
- bx r1
- .align 2, 0
-_08004018: .4byte 0x020239f8
- thumb_func_end sub_8003FD0
-
- thumb_func_start sub_800401C
-sub_800401C: @ 800401C
- push {lr}
- ldrb r1, [r0]
- cmp r1, 0x1
- beq _0800403A
- cmp r1, 0x1
- bgt _0800402E
- cmp r1, 0
- beq _08004034
- b _08004044
-_0800402E:
- cmp r1, 0x2
- beq _08004040
- b _08004044
-_08004034:
- bl sub_8004048
- b _08004044
-_0800403A:
- bl sub_800412C
- b _08004044
-_08004040:
- bl sub_80041D4
-_08004044:
- pop {r0}
- bx r0
- thumb_func_end sub_800401C
-
- thumb_func_start sub_8004048
-sub_8004048: @ 8004048
- push {r4,lr}
- adds r2, r0, 0
- ldrb r3, [r2, 0x11]
- cmp r3, 0
- bne _0800406C
- ldr r0, _08004068
- ldrb r0, [r0]
- lsls r0, 1
- adds r0, 0x2
- movs r1, 0
- strh r0, [r2, 0x1C]
- strb r1, [r2, 0x10]
- adds r0, r3, 0
- adds r0, 0x10
- strb r0, [r2, 0x11]
- b _080040A2
- .align 2, 0
-_08004068: .4byte 0x03000359
-_0800406C:
- ldrb r1, [r2, 0xC]
- movs r3, 0x2
- adds r0, r3, 0
- ands r0, r1
- adds r4, r1, 0
- cmp r0, 0
- beq _0800408C
- ldr r1, _08004088
- ldrb r0, [r1]
- lsls r0, 1
- adds r0, 0x2
- strh r0, [r2, 0x1C]
- adds r3, r1, 0
- b _08004090
- .align 2, 0
-_08004088: .4byte 0x03000359
-_0800408C:
- strh r3, [r2, 0x1C]
- ldr r3, _080040A8
-_08004090:
- movs r0, 0x2
- eors r0, r4
- movs r1, 0
- strb r0, [r2, 0xC]
- strb r1, [r2, 0x10]
- ldrb r1, [r3]
- adds r0, r2, 0
- bl sub_80040AC
-_080040A2:
- pop {r4}
- pop {r0}
- bx r0
- .align 2, 0
-_080040A8: .4byte 0x03000359
- thumb_func_end sub_8004048
-
- thumb_func_start sub_80040AC
-sub_80040AC: @ 80040AC
- push {r4-r6,lr}
- mov r6, r9
- mov r5, r8
- push {r5,r6}
- sub sp, 0x4
- adds r4, r0, 0
- lsls r6, r1, 16
- lsrs r6, 16
- ldr r5, [r4, 0x28]
- ldrh r0, [r4, 0x14]
- lsrs r0, 3
- lsls r0, 5
- ldrb r1, [r4, 0x12]
- lsrs r1, 3
- adds r0, r1
- lsls r0, 1
- adds r5, r0
- adds r0, r4, 0
- bl sub_800487C
- ldrb r4, [r4, 0x6]
- lsls r4, 12
- orrs r4, r0
- lsls r4, 16
- lsrs r4, 16
- movs r0, 0x80
- adds r0, r5
- mov r8, r0
- adds r1, r5, 0
- adds r2, r6, 0
- bl CpuSet
- movs r0, 0xC0
- adds r0, r5
- mov r9, r0
- adds r5, 0x40
- adds r1, r5, 0
- adds r2, r6, 0
- bl CpuSet
- mov r0, sp
- strh r4, [r0]
- movs r5, 0x80
- lsls r5, 17
- orrs r5, r6
- mov r1, r8
- adds r2, r5, 0
- bl CpuSet
- mov r0, sp
- adds r0, 0x2
- strh r4, [r0]
- mov r1, r9
- adds r2, r5, 0
- bl CpuSet
- add sp, 0x4
- pop {r3,r4}
- mov r8, r3
- mov r9, r4
- pop {r4-r6}
- pop {r0}
- bx r0
- thumb_func_end sub_80040AC
-
- thumb_func_start sub_800412C
-sub_800412C: @ 800412C
- push {lr}
- adds r2, r0, 0
- ldrb r0, [r2, 0x11]
- adds r1, r0, 0
- cmp r1, 0
- bne _08004140
- strb r1, [r2, 0x10]
- adds r0, 0x10
- strb r0, [r2, 0x11]
- b _08004156
-_08004140:
- ldrb r0, [r2, 0xC]
- movs r1, 0x2
- eors r0, r1
- movs r1, 0
- strb r0, [r2, 0xC]
- strb r1, [r2, 0x10]
- ldr r0, _0800415C
- ldrb r1, [r0]
- adds r0, r2, 0
- bl sub_8004160
-_08004156:
- pop {r0}
- bx r0
- .align 2, 0
-_0800415C: .4byte 0x03000359
- thumb_func_end sub_800412C
-
- thumb_func_start sub_8004160
-sub_8004160: @ 8004160
- push {r4-r7,lr}
- mov r7, r9
- mov r6, r8
- push {r6,r7}
- sub sp, 0x4
- adds r4, r0, 0
- lsls r6, r1, 16
- lsrs r6, 16
- bl sub_8003AF8
- adds r7, r0, 0
- adds r5, r7, 0
- subs r5, 0x40
- adds r0, r4, 0
- bl sub_800487C
- ldrb r4, [r4, 0x6]
- lsls r4, 12
- orrs r4, r0
- lsls r4, 16
- lsrs r4, 16
- movs r0, 0x40
- adds r0, r7
- mov r8, r0
- adds r1, r5, 0
- adds r2, r6, 0
- bl CpuSet
- movs r0, 0x80
- adds r0, r7
- mov r9, r0
- adds r1, r7, 0
- adds r2, r6, 0
- bl CpuSet
- mov r0, sp
- strh r4, [r0]
- movs r5, 0x80
- lsls r5, 17
- orrs r5, r6
- mov r1, r8
- adds r2, r5, 0
- bl CpuSet
- mov r0, sp
- adds r0, 0x2
- strh r4, [r0]
- mov r1, r9
- adds r2, r5, 0
- bl CpuSet
- add sp, 0x4
- pop {r3,r4}
- mov r8, r3
- mov r9, r4
- pop {r4-r7}
- pop {r0}
- bx r0
- thumb_func_end sub_8004160
-
- thumb_func_start sub_80041D4
-sub_80041D4: @ 80041D4
- push {lr}
- adds r2, r0, 0
- ldrb r0, [r2, 0x11]
- adds r1, r0, 0
- cmp r1, 0
- bne _080041E8
- strb r1, [r2, 0x10]
- adds r0, 0x10
- strb r0, [r2, 0x11]
- b _080041FE
-_080041E8:
- ldrb r0, [r2, 0xC]
- movs r1, 0x2
- eors r0, r1
- movs r1, 0
- strb r0, [r2, 0xC]
- strb r1, [r2, 0x10]
- ldr r0, _08004204
- ldrb r1, [r0]
- adds r0, r2, 0
- bl sub_8004208
-_080041FE:
- pop {r0}
- bx r0
- .align 2, 0
-_08004204: .4byte 0x03000359
- thumb_func_end sub_80041D4
-
- thumb_func_start sub_8004208
-sub_8004208: @ 8004208
- push {r4-r7,lr}
- mov r7, r10
- mov r6, r9
- mov r5, r8
- push {r5-r7}
- sub sp, 0x10
- adds r5, r0, 0
- lsls r1, 24
- lsrs r7, r1, 24
- movs r2, 0x2
- negs r2, r2
- movs r1, 0
- bl GetTextRendererTileBufferIndex
- lsls r0, 16
- lsrs r0, 11
- ldr r1, [r5, 0x24]
- mov r8, r1
- add r8, r0
- adds r0, r5, 0
- movs r1, 0
- movs r2, 0
- bl GetTextRendererTileBufferIndex
- lsls r0, 16
- lsrs r0, 11
- ldr r4, [r5, 0x24]
- adds r4, r0
- lsls r0, r7, 3
- mov r9, r0
- adds r0, r4, 0
- mov r1, r8
- mov r2, r9
- bl CpuFastSet
- ldr r1, _08004314
- mov r10, r1
- ldr r0, [r1, 0x40]
- str r0, [sp, 0x8]
- add r0, sp, 0x8
- movs r6, 0x80
- lsls r6, 17
- mov r1, r9
- orrs r6, r1
- adds r1, r4, 0
- adds r2, r6, 0
- bl CpuFastSet
- ldrb r0, [r5, 0x9]
- lsls r0, 5
- adds r4, r0
- add r8, r0
- adds r0, r4, 0
- mov r1, r8
- mov r2, r9
- bl CpuFastSet
- mov r1, r10
- ldr r0, [r1, 0x40]
- str r0, [sp, 0xC]
- add r0, sp, 0xC
- adds r1, r4, 0
- adds r2, r6, 0
- bl CpuFastSet
- adds r0, r5, 0
- bl sub_8003AF8
- adds r4, r0, 0
- subs r4, 0x80
- mov r3, sp
- ldrh r2, [r5, 0x1C]
- ldrh r0, [r5, 0x1A]
- adds r2, r0
- ldrh r0, [r5, 0x14]
- lsrs r0, 3
- ldrb r1, [r5, 0x9]
- muls r0, r1
- adds r2, r0
- ldrb r1, [r5, 0x12]
- lsrs r1, 3
- adds r1, r2
- ldrb r0, [r5, 0x6]
- lsls r0, 12
- orrs r1, r0
- strh r1, [r3]
- mov r2, sp
- ldrb r0, [r5, 0x9]
- adds r1, r0
- strh r1, [r2, 0x2]
- ldrb r0, [r5, 0x9]
- adds r1, r0
- strh r1, [r2, 0x4]
- ldrb r0, [r5, 0x9]
- adds r1, r0
- strh r1, [r2, 0x6]
- movs r5, 0
- cmp r5, r7
- bcs _08004302
-_080042CE:
- ldrh r1, [r3]
- adds r0, r1, 0x1
- strh r0, [r3]
- strh r1, [r4]
- adds r2, r4, 0
- adds r2, 0x40
- ldrh r1, [r3, 0x2]
- adds r0, r1, 0x1
- strh r0, [r3, 0x2]
- strh r1, [r2]
- adds r2, 0x40
- ldrh r1, [r3, 0x4]
- adds r0, r1, 0x1
- strh r0, [r3, 0x4]
- strh r1, [r2]
- adds r2, 0x40
- ldrh r1, [r3, 0x6]
- adds r0, r1, 0x1
- strh r0, [r3, 0x6]
- strh r1, [r2]
- adds r4, 0x2
- adds r0, r5, 0x1
- lsls r0, 24
- lsrs r5, r0, 24
- cmp r5, r7
- bcc _080042CE
-_08004302:
- add sp, 0x10
- pop {r3-r5}
- mov r8, r3
- mov r9, r4
- mov r10, r5
- pop {r4-r7}
- pop {r0}
- bx r0
- .align 2, 0
-_08004314: .4byte 0x03000360
- thumb_func_end sub_8004208
-
- thumb_func_start sub_8004318
-sub_8004318: @ 8004318
- push {r4,lr}
- adds r4, r0, 0
- ldrb r0, [r4]
- cmp r0, 0x1
- beq _08004348
- cmp r0, 0x1
- bgt _0800432C
- cmp r0, 0
- beq _08004332
- b _08004362
-_0800432C:
- cmp r0, 0x2
- beq _08004358
- b _08004362
-_08004332:
- ldr r0, _08004344
- ldrb r1, [r0]
- adds r0, r4, 0
- bl sub_800436C
- movs r0, 0x2
- strh r0, [r4, 0x1C]
- b _08004362
- .align 2, 0
-_08004344: .4byte 0x03000359
-_08004348:
- ldr r0, _08004354
- ldrb r1, [r0]
- adds r0, r4, 0
- bl sub_800436C
- b _08004362
- .align 2, 0
-_08004354: .4byte 0x03000359
-_08004358:
- ldr r0, _08004368
- ldrb r1, [r0]
- adds r0, r4, 0
- bl font_copy_to_vram_maybe
-_08004362:
- pop {r4}
- pop {r0}
- bx r0
- .align 2, 0
-_08004368: .4byte 0x03000359
- thumb_func_end sub_8004318
-
- thumb_func_start sub_800436C
-sub_800436C: @ 800436C
- push {r4-r6,lr}
- adds r4, r0, 0
- lsls r1, 24
- lsrs r6, r1, 24
- movs r0, 0
- strb r0, [r4, 0x10]
- strb r0, [r4, 0x11]
- strb r0, [r4, 0xC]
- adds r0, r4, 0
- bl sub_8003AF8
- adds r5, r0, 0
- adds r0, r4, 0
- bl sub_800487C
- ldrb r1, [r4, 0x6]
- lsls r1, 12
- orrs r1, r0
- lsls r1, 16
- lsrs r1, 16
- movs r0, 0
-_08004396:
- movs r2, 0
- adds r4, r5, 0
- adds r4, 0x40
- adds r3, r0, 0x1
- cmp r2, r6
- bcs _080043B2
-_080043A2:
- lsls r0, r2, 1
- adds r0, r5
- strh r1, [r0]
- adds r0, r2, 0x1
- lsls r0, 24
- lsrs r2, r0, 24
- cmp r2, r6
- bcc _080043A2
-_080043B2:
- adds r5, r4, 0
- lsls r0, r3, 24
- lsrs r0, 24
- cmp r0, 0x3
- bls _08004396
- pop {r4-r6}
- pop {r0}
- bx r0
- thumb_func_end sub_800436C
-
- thumb_func_start font_copy_to_vram_maybe
-font_copy_to_vram_maybe: @ 80043C4
- push {r4-r6,lr}
- mov r6, r8
- push {r6}
- sub sp, 0x10
- adds r6, r0, 0
- lsls r5, r1, 24
- lsrs r5, 24
- movs r0, 0
- strb r0, [r6, 0x10]
- strb r0, [r6, 0x11]
- strb r0, [r6, 0xC]
- adds r0, r6, 0
- movs r1, 0
- movs r2, 0
- bl GetTextRendererTileBufferIndex
- lsls r0, 16
- lsrs r0, 11
- ldr r4, [r6, 0x24]
- adds r4, r0
- ldr r0, _08004454
- mov r8, r0
- ldr r0, [r0, 0x40]
- str r0, [sp]
- lsls r5, 3
- movs r0, 0x80
- lsls r0, 17
- orrs r5, r0
- mov r0, sp
- adds r1, r4, 0
- adds r2, r5, 0
- bl CpuFastSet
- ldrb r0, [r6, 0x9]
- lsls r0, 5
- adds r4, r0
- mov r1, r8
- ldr r0, [r1, 0x40]
- str r0, [sp, 0x4]
- add r0, sp, 0x4
- adds r1, r4, 0
- adds r2, r5, 0
- bl CpuFastSet
- ldrb r0, [r6, 0x9]
- lsls r0, 5
- adds r4, r0
- mov r1, r8
- ldr r0, [r1, 0x40]
- str r0, [sp, 0x8]
- add r0, sp, 0x8
- adds r1, r4, 0
- adds r2, r5, 0
- bl CpuFastSet
- ldrb r0, [r6, 0x9]
- lsls r0, 5
- adds r4, r0
- mov r1, r8
- ldr r0, [r1, 0x40]
- str r0, [sp, 0xC]
- add r0, sp, 0xC
- adds r1, r4, 0
- adds r2, r5, 0
- bl CpuFastSet
- add sp, 0x10
- pop {r3}
- mov r8, r3
- pop {r4-r6}
- pop {r0}
- bx r0
- .align 2, 0
-_08004454: .4byte 0x03000360
- thumb_func_end font_copy_to_vram_maybe
-
- thumb_func_start DrawDownArrow
-DrawDownArrow: @ 8004458
- push {r4-r7,lr}
- sub sp, 0x1C
- adds r5, r0, 0
- bl sub_8003FD0
- lsls r0, 24
- cmp r0, 0
- bne _0800446A
- b _080045BC
-_0800446A:
- ldrh r0, [r5, 0x18]
- movs r1, 0xF0
- lsls r1, 4
- ands r1, r0
- lsrs r1, 2
- ldr r0, _08004488
- adds r7, r1, r0
- ldrb r0, [r5]
- cmp r0, 0x1
- beq _08004492
- cmp r0, 0x1
- bgt _0800448C
- cmp r0, 0
- beq _080044E2
- b _080045BC
- .align 2, 0
-_08004488: .4byte gUnknown_081E5EF0
-_0800448C:
- cmp r0, 0x2
- beq _080044E2
- b _080045BC
-_08004492:
- ldrh r0, [r5, 0x1A]
- adds r0, 0xFE
- lsls r0, 16
- lsrs r6, r0, 16
- ldrb r0, [r5, 0x1]
- cmp r0, 0
- beq _080044A4
- cmp r0, 0x3
- bne _080044A8
-_080044A4:
- lsls r0, r6, 17
- lsrs r6, r0, 16
-_080044A8:
- lsls r0, r6, 5
- ldr r4, [r5, 0x24]
- adds r4, r0
- ldrb r2, [r5, 0x3]
- ldrb r3, [r5, 0x5]
- ldrb r0, [r5, 0x4]
- str r0, [sp]
- adds r0, r7, 0
- adds r1, r4, 0
- bl sub_8003BCC
- adds r0, r7, 0
- adds r0, 0x20
- adds r4, 0x20
- ldrb r2, [r5, 0x3]
- ldrb r3, [r5, 0x5]
- ldrb r1, [r5, 0x4]
- str r1, [sp]
- adds r1, r4, 0
- bl sub_8003BCC
- adds r2, r6, 0x1
- lsls r2, 16
- lsrs r2, 16
- adds r0, r5, 0
- adds r1, r6, 0
- bl sub_80039EC
- b _080045BC
-_080044E2:
- add r1, sp, 0x4
- ldrb r0, [r5]
- strb r0, [r1]
- adds r2, r1, 0
- ldrb r0, [r5, 0x10]
- ldrb r1, [r5, 0x12]
- adds r0, r1
- movs r1, 0x7
- ands r0, r1
- strb r0, [r2, 0x1]
- cmp r0, 0
- beq _08004556
- ldrb r0, [r5, 0x1]
- ldrb r1, [r5, 0x2]
- add r3, sp, 0x14
- add r2, sp, 0x18
- str r2, [sp]
- movs r2, 0
- bl sub_8003A1C
- add r2, sp, 0x4
- adds r0, r2, 0
- ldrb r1, [r0, 0x1]
- movs r0, 0x8
- subs r0, r1
- strb r0, [r2, 0x2]
- ldr r0, [sp, 0x14]
- str r0, [sp, 0x8]
- adds r0, r5, 0
- movs r1, 0x1
- movs r2, 0
- bl GetTextRendererTileBufferIndex
- lsls r0, 16
- lsrs r0, 11
- ldr r1, [r5, 0x24]
- adds r1, r0
- str r1, [sp, 0xC]
- ldr r0, _080045B0
- str r0, [sp, 0x10]
- add r0, sp, 0x4
- bl CopyGlyphToWindow
- ldr r0, [sp, 0x18]
- str r0, [sp, 0x8]
- adds r0, r5, 0
- movs r1, 0x1
- movs r2, 0x1
- bl GetTextRendererTileBufferIndex
- lsls r0, 16
- lsrs r0, 11
- ldr r1, [r5, 0x24]
- adds r1, r0
- str r1, [sp, 0xC]
- add r0, sp, 0x4
- bl CopyGlyphToWindow
-_08004556:
- add r1, sp, 0x4
- movs r0, 0x8
- strb r0, [r1, 0x2]
- str r7, [sp, 0x8]
- adds r0, r5, 0
- movs r1, 0
- movs r2, 0
- bl GetTextRendererTileBufferIndex
- lsls r0, 16
- lsrs r0, 11
- ldr r1, [r5, 0x24]
- adds r1, r0
- str r1, [sp, 0xC]
- ldr r0, _080045B0
- str r0, [sp, 0x10]
- add r0, sp, 0x4
- bl CopyGlyphToWindow
- ldr r0, [sp, 0x8]
- adds r0, 0x20
- str r0, [sp, 0x8]
- adds r0, r5, 0
- movs r1, 0
- movs r2, 0x1
- bl GetTextRendererTileBufferIndex
- lsls r0, 16
- lsrs r0, 11
- ldr r1, [r5, 0x24]
- adds r1, r0
- str r1, [sp, 0xC]
- add r0, sp, 0x4
- bl CopyGlyphToWindow
- add r0, sp, 0x4
- ldrb r0, [r0, 0x1]
- cmp r0, 0
- beq _080045B4
- adds r0, r5, 0
- movs r1, 0x2
- bl sub_8006954
- b _080045BC
- .align 2, 0
-_080045B0: .4byte 0x030003a4
-_080045B4:
- adds r0, r5, 0
- movs r1, 0x1
- bl sub_8006954
-_080045BC:
- add sp, 0x1C
- pop {r4-r7}
- pop {r0}
- bx r0
- thumb_func_end DrawDownArrow
-
- thumb_func_start DialogueWaitForInput
-DialogueWaitForInput: @ 80045C4
- push {r4,r5,lr}
- adds r4, r0, 0
- movs r5, 0x1
- bl sub_8003FD0
- lsls r0, 24
- cmp r0, 0
- bne _080045E2
- ldrb r0, [r4, 0xD]
- subs r0, 0x1
- strb r0, [r4, 0xD]
- lsls r0, 24
- cmp r0, 0
- beq _080045F4
- b _08004600
-_080045E2:
- ldr r0, _080045FC
- ldrh r1, [r0, 0x2E]
- movs r0, 0x3
- ands r0, r1
- cmp r0, 0
- beq _08004600
- movs r0, 0x5
- bl audio_play
-_080045F4:
- adds r0, r4, 0
- bl sub_8004658
- b _08004608
- .align 2, 0
-_080045FC: .4byte 0x03001770
-_08004600:
- adds r0, r4, 0
- bl DrawMovingDownArrow
- movs r5, 0
-_08004608:
- adds r0, r5, 0
- pop {r4,r5}
- pop {r1}
- bx r1
- thumb_func_end DialogueWaitForInput
-
- thumb_func_start DrawInitialDownArrow
-DrawInitialDownArrow: @ 8004610
- push {lr}
- movs r1, 0
- strh r1, [r0, 0x18]
- bl DrawDownArrow
- pop {r0}
- bx r0
- thumb_func_end DrawInitialDownArrow
-
- thumb_func_start DrawMovingDownArrow
-DrawMovingDownArrow: @ 8004620
- push {r4-r6,lr}
- adds r6, r0, 0
- ldrh r1, [r6, 0x18]
- movs r0, 0xF0
- lsls r0, 4
- ands r0, r1
- lsrs r4, r0, 8
- movs r5, 0xF
- ands r5, r1
- adds r5, 0x1
- cmp r5, 0x6
- bne _0800464C
- movs r5, 0
- adds r4, 0x1
- cmp r4, 0x3
- bls _08004642
- movs r4, 0
-_08004642:
- lsls r0, r4, 8
- strh r0, [r6, 0x18]
- adds r0, r6, 0
- bl DrawDownArrow
-_0800464C:
- lsls r0, r4, 8
- orrs r0, r5
- strh r0, [r6, 0x18]
- pop {r4-r6}
- pop {r0}
- bx r0
- thumb_func_end DrawMovingDownArrow
-
- thumb_func_start sub_8004658
-sub_8004658: @ 8004658
- push {r4,lr}
- adds r4, r0, 0
- movs r0, 0
- strh r0, [r4, 0x18]
- adds r0, r4, 0
- bl sub_8003FD0
- lsls r0, 24
- lsrs r0, 24
- cmp r0, 0x1
- bne _08004674
- adds r0, r4, 0
- bl sub_8003D30
-_08004674:
- pop {r4}
- pop {r0}
- bx r0
- thumb_func_end sub_8004658
-
- thumb_func_start sub_800467C
-sub_800467C: @ 800467C
- lsls r1, 24
- lsrs r1, 24
- lsls r2, 24
- ldr r0, [r0, 0x28]
- lsrs r2, 19
- adds r2, r1
- lsls r2, 1
- adds r2, r0
- ldrh r0, [r2]
- bx lr
- thumb_func_end sub_800467C
-
- thumb_func_start sub_8004690
-sub_8004690: @ 8004690
- push {r4-r7,lr}
- mov r7, r9
- mov r6, r8
- push {r6,r7}
- ldr r4, [sp, 0x1C]
- ldr r5, [sp, 0x20]
- lsls r1, 16
- lsrs r6, r1, 16
- lsls r2, 24
- lsrs r2, 24
- mov r8, r2
- lsls r3, 24
- lsrs r3, 24
- mov r12, r3
- lsls r4, 24
- lsrs r4, 24
- lsls r5, 24
- lsrs r5, 24
- mov r9, r5
- lsls r1, r3, 6
- ldr r0, [r0, 0x28]
- adds r2, r0, r1
- mov r1, r8
- cmp r1, r4
- bhi _080046D2
-_080046C2:
- lsls r0, r1, 1
- adds r0, r2
- strh r6, [r0]
- adds r0, r1, 0x1
- lsls r0, 24
- lsrs r1, r0, 24
- cmp r1, r4
- bls _080046C2
-_080046D2:
- mov r0, r12
- adds r0, 0x1
- lsls r0, 24
- lsrs r1, r0, 24
- mov r3, r9
- subs r3, 0x1
- cmp r1, r3
- bge _080046FC
- mov r0, r8
- lsls r7, r0, 1
- lsls r5, r4, 1
-_080046E8:
- adds r2, 0x40
- adds r0, r7, r2
- strh r6, [r0]
- adds r0, r5, r2
- strh r6, [r0]
- adds r0, r1, 0x1
- lsls r0, 24
- lsrs r1, r0, 24
- cmp r1, r3
- blt _080046E8
-_080046FC:
- cmp r12, r9
- beq _08004718
- adds r2, 0x40
- mov r1, r8
- cmp r1, r4
- bhi _08004718
-_08004708:
- lsls r0, r1, 1
- adds r0, r2
- strh r6, [r0]
- adds r0, r1, 0x1
- lsls r0, 24
- lsrs r1, r0, 24
- cmp r1, r4
- bls _08004708
-_08004718:
- pop {r3,r4}
- mov r8, r3
- mov r9, r4
- pop {r4-r7}
- pop {r0}
- bx r0
- thumb_func_end sub_8004690
-
- thumb_func_start sub_8004724
-sub_8004724: @ 8004724
- push {r4-r6,lr}
- sub sp, 0x8
- adds r6, r1, 0
- ldr r4, [sp, 0x18]
- ldr r5, [sp, 0x1C]
- lsls r6, 16
- lsls r2, 24
- lsrs r2, 24
- lsls r3, 24
- lsrs r3, 24
- lsls r4, 24
- lsrs r4, 24
- lsls r5, 24
- lsrs r5, 24
- ldrb r1, [r0, 0x6]
- lsls r1, 28
- orrs r1, r6
- lsrs r1, 16
- str r4, [sp]
- str r5, [sp, 0x4]
- bl sub_8004690
- add sp, 0x8
- pop {r4-r6}
- pop {r0}
- bx r0
- thumb_func_end sub_8004724
-
- thumb_func_start sub_8004758
-sub_8004758: @ 8004758
- push {r4-r7,lr}
- mov r7, r9
- mov r6, r8
- push {r6,r7}
- ldr r4, [sp, 0x1C]
- ldr r5, [sp, 0x20]
- lsls r1, 16
- lsrs r1, 16
- mov r12, r1
- lsls r2, 24
- lsrs r2, 24
- mov r8, r2
- lsls r3, 24
- lsrs r3, 24
- adds r2, r3, 0
- lsls r4, 24
- lsrs r6, r4, 24
- lsls r5, 24
- lsrs r5, 24
- mov r9, r5
- lsls r1, r2, 6
- ldr r0, [r0, 0x28]
- adds r4, r0, r1
- adds r0, r2, 0x1
- lsls r0, 24
- lsrs r3, r0, 24
- cmp r2, r9
- bhi _080047BA
-_08004790:
- mov r1, r8
- adds r5, r3, 0x1
- adds r2, r4, 0
- adds r2, 0x40
- cmp r1, r6
- bhi _080047AE
-_0800479C:
- lsls r0, r1, 1
- adds r0, r4
- mov r7, r12
- strh r7, [r0]
- adds r0, r1, 0x1
- lsls r0, 24
- lsrs r1, r0, 24
- cmp r1, r6
- bls _0800479C
-_080047AE:
- adds r4, r2, 0
- adds r1, r3, 0
- lsls r0, r5, 24
- lsrs r3, r0, 24
- cmp r1, r9
- bls _08004790
-_080047BA:
- pop {r3,r4}
- mov r8, r3
- mov r9, r4
- pop {r4-r7}
- pop {r0}
- bx r0
- thumb_func_end sub_8004758
-
- thumb_func_start sub_80047C8
-sub_80047C8: @ 80047C8
- push {r4-r6,lr}
- sub sp, 0x8
- adds r6, r1, 0
- ldr r4, [sp, 0x18]
- ldr r5, [sp, 0x1C]
- lsls r6, 16
- lsls r2, 24
- lsrs r2, 24
- lsls r3, 24
- lsrs r3, 24
- lsls r4, 24
- lsrs r4, 24
- lsls r5, 24
- lsrs r5, 24
- ldrb r1, [r0, 0x6]
- lsls r1, 28
- orrs r1, r6
- lsrs r1, 16
- str r4, [sp]
- str r5, [sp, 0x4]
- bl sub_8004758
- add sp, 0x8
- pop {r4-r6}
- pop {r0}
- bx r0
- thumb_func_end sub_80047C8
-
- thumb_func_start sub_80047FC
-sub_80047FC: @ 80047FC
- push {r4,r5,lr}
- sub sp, 0x8
- adds r4, r1, 0
- adds r5, r2, 0
- ldr r1, [sp, 0x14]
- lsls r4, 24
- lsrs r4, 24
- lsls r5, 24
- lsrs r5, 24
- lsls r3, 24
- lsrs r3, 24
- lsls r1, 24
- lsrs r1, 24
- str r3, [sp]
- str r1, [sp, 0x4]
- movs r1, 0
- adds r2, r4, 0
- adds r3, r5, 0
- bl sub_80047C8
- add sp, 0x8
- pop {r4,r5}
- pop {r0}
- bx r0
- thumb_func_end sub_80047FC
-
- thumb_func_start sub_800482C
-sub_800482C: @ 800482C
- push {r4-r6,lr}
- mov r6, r9
- mov r5, r8
- push {r5,r6}
- sub sp, 0x8
- mov r9, r0
- adds r6, r1, 0
- mov r8, r2
- adds r4, r3, 0
- ldr r5, [sp, 0x20]
- lsls r6, 24
- lsrs r6, 24
- mov r0, r8
- lsls r0, 24
- lsrs r0, 24
- mov r8, r0
- lsls r4, 24
- lsrs r4, 24
- lsls r5, 24
- lsrs r5, 24
- mov r0, r9
- bl sub_800487C
- adds r1, r0, 0
- lsls r1, 16
- lsrs r1, 16
- str r4, [sp]
- str r5, [sp, 0x4]
- mov r0, r9
- adds r2, r6, 0
- mov r3, r8
- bl sub_80047C8
- add sp, 0x8
- pop {r3,r4}
- mov r8, r3
- mov r9, r4
- pop {r4-r6}
- pop {r0}
- bx r0
- thumb_func_end sub_800482C
-
- thumb_func_start sub_800487C
-sub_800487C: @ 800487C
- push {lr}
- ldrh r2, [r0, 0x1A]
- ldrb r1, [r0]
- cmp r1, 0x1
- beq _08004892
- cmp r1, 0x1
- ble _080048D0
- cmp r1, 0x2
- bne _080048D0
- adds r0, r2, 0x1
- b _080048C8
-_08004892:
- ldrb r0, [r0, 0x1]
- cmp r0, 0x6
- bhi _080048CE
- lsls r0, 2
- ldr r1, _080048A4
- adds r0, r1
- ldr r0, [r0]
- mov pc, r0
- .align 2, 0
-_080048A4: .4byte _080048A8
- .align 2, 0
-_080048A8:
- .4byte _080048D0
- .4byte _080048C4
- .4byte _080048C4
- .4byte _080048D0
- .4byte _080048C4
- .4byte _080048C4
- .4byte _080048D0
-_080048C4:
- adds r0, r2, 0
- adds r0, 0xD4
-_080048C8:
- lsls r0, 16
- lsrs r2, r0, 16
- b _080048D0
-_080048CE:
- movs r2, 0
-_080048D0:
- adds r0, r2, 0
- pop {r1}
- bx r1
- thumb_func_end sub_800487C
-
- thumb_func_start sub_80048D8
-sub_80048D8: @ 80048D8
- adds r3, r0, 0
- lsls r2, 24
- lsrs r2, 24
- strb r1, [r3, 0x10]
- movs r1, 0xF8
- ands r2, r1
- strb r2, [r3, 0x11]
- bx lr
- thumb_func_end sub_80048D8
-
- thumb_func_start GetGlyphWidth
-GetGlyphWidth: @ 80048E8
- push {lr}
- adds r2, r0, 0
- adds r3, r1, 0
- movs r1, 0x8
- ldrb r0, [r2, 0x2]
- cmp r0, 0x2
- bne _08004966
- ldrb r1, [r2, 0xE]
- cmp r1, 0
- bne _08004966
- ldrb r0, [r2, 0x1]
- cmp r0, 0x6
- bhi _08004964
- lsls r0, 2
- ldr r1, _0800490C
- adds r0, r1
- ldr r0, [r0]
- mov pc, r0
- .align 2, 0
-_0800490C: .4byte _08004910
- .align 2, 0
-_08004910:
- .4byte _0800493C
- .4byte _08004948
- .4byte _08004948
- .4byte _0800492C
- .4byte _08004934
- .4byte _08004934
- .4byte _08004964
-_0800492C:
- ldr r0, _08004930
- b _0800493E
- .align 2, 0
-_08004930: .4byte gUnknown_081E6594
-_08004934:
- ldr r2, _08004938
- b _0800494A
- .align 2, 0
-_08004938: .4byte gUnknown_081E63BA
-_0800493C:
- ldr r0, _08004944
-_0800493E:
- adds r0, r3, r0
- ldrb r1, [r0]
- b _08004966
- .align 2, 0
-_08004944: .4byte gUnknown_081E6496
-_08004948:
- ldr r2, _0800495C
-_0800494A:
- ldr r1, _08004960
- lsls r0, r3, 1
- adds r0, 0x1
- adds r0, r1
- ldrb r0, [r0]
- adds r0, r2
- ldrb r1, [r0]
- b _08004966
- .align 2, 0
-_0800495C: .4byte gUnknown_081E62DE
-_08004960: .4byte gUnknown_081E5FF0
-_08004964:
- movs r1, 0x8
-_08004966:
- adds r0, r1, 0
- pop {r1}
- bx r1
- thumb_func_end GetGlyphWidth
-
- thumb_func_start GetExtCtrlCodeLength
-GetExtCtrlCodeLength: @ 800496C
- push {lr}
- lsls r0, 24
- lsrs r1, r0, 24
- movs r0, 0
- cmp r1, 0x16
- bhi _0800497E
- ldr r0, _08004984
- adds r0, r1, r0
- ldrb r0, [r0]
-_0800497E:
- pop {r1}
- bx r1
- .align 2, 0
-_08004984: .4byte gUnknown_081E6BDB
- thumb_func_end GetExtCtrlCodeLength
-
- thumb_func_start sub_8004988
-sub_8004988: @ 8004988
- push {r4-r6,lr}
- sub sp, 0x10
- adds r5, r0, 0
- adds r4, r1, 0
- adds r1, r2, 0
- ldr r0, [sp, 0x20]
- lsls r3, 24
- lsrs r6, r3, 24
- lsls r0, 24
- lsrs r0, 24
- adds r2, r0, 0
- cmp r0, 0x1
- beq _080049C4
- cmp r0, 0x1
- bgt _080049AC
- cmp r0, 0
- beq _080049B2
- b _08004A3C
-_080049AC:
- cmp r2, 0x2
- beq _080049F4
- b _08004A3C
-_080049B2:
- mov r0, sp
- bl ConvertIntToDecimalString
- adds r0, r4, 0
- mov r1, sp
- bl StringCopy
- adds r4, r0, 0
- b _08004A2C
-_080049C4:
- mov r0, sp
- bl ConvertIntToDecimalString
- adds r0, r5, 0
- mov r1, sp
- bl GetStringWidth
- lsls r0, 24
- lsrs r5, r0, 24
- cmp r6, r5
- bls _080049E8
- movs r0, 0xFC
- strb r0, [r4]
- movs r0, 0x13
- strb r0, [r4, 0x1]
- subs r0, r6, r5
- strb r0, [r4, 0x2]
- adds r4, 0x3
-_080049E8:
- adds r0, r4, 0
- mov r1, sp
- bl StringCopy
- adds r4, r0, 0
- b _08004A3C
-_080049F4:
- mov r0, sp
- bl ConvertIntToDecimalString
- adds r0, r5, 0
- mov r1, sp
- bl GetStringWidth
- lsls r0, 24
- lsrs r5, r0, 24
- cmp r6, r5
- bls _08004A1E
- movs r0, 0xFC
- strb r0, [r4]
- movs r0, 0x13
- strb r0, [r4, 0x1]
- subs r0, r6, r5
- lsrs r1, r0, 31
- adds r0, r1
- asrs r0, 1
- strb r0, [r4, 0x2]
- adds r4, 0x3
-_08004A1E:
- adds r0, r4, 0
- mov r1, sp
- bl StringCopy
- adds r4, r0, 0
- cmp r6, r5
- bls _08004A3C
-_08004A2C:
- movs r0, 0xFC
- strb r0, [r4]
- movs r0, 0x13
- strb r0, [r4, 0x1]
- strb r6, [r4, 0x2]
- adds r4, 0x3
- movs r0, 0xFF
- strb r0, [r4]
-_08004A3C:
- adds r0, r4, 0
- add sp, 0x10
- pop {r4-r6}
- pop {r1}
- bx r1
- thumb_func_end sub_8004988
-
- thumb_func_start sub_8004A48
-sub_8004A48: @ 8004A48
- push {r4-r6,lr}
- sub sp, 0x10
- adds r5, r0, 0
- adds r4, r1, 0
- adds r1, r2, 0
- ldr r0, [sp, 0x20]
- lsls r3, 24
- lsrs r6, r3, 24
- lsls r0, 24
- lsrs r0, 24
- adds r2, r0, 0
- cmp r0, 0x1
- beq _08004A9A
- cmp r0, 0x1
- bgt _08004A6C
- cmp r0, 0
- beq _08004A72
- b _08004B1A
-_08004A6C:
- cmp r2, 0x2
- beq _08004ACA
- b _08004B1A
-_08004A72:
- mov r0, sp
- bl ConvertIntToDecimalString
- adds r0, r5, 0
- mov r1, sp
- bl GetStringWidth
- lsls r0, 24
- lsrs r5, r0, 24
- adds r0, r4, 0
- mov r1, sp
- bl StringCopy
- adds r4, r0, 0
- movs r0, 0xFC
- strb r0, [r4]
- movs r0, 0x11
- strb r0, [r4, 0x1]
- subs r0, r6, r5
- b _08004B12
-_08004A9A:
- mov r0, sp
- bl ConvertIntToDecimalString
- adds r0, r5, 0
- mov r1, sp
- bl GetStringWidth
- lsls r0, 24
- lsrs r5, r0, 24
- cmp r6, r5
- bls _08004ABE
- movs r0, 0xFC
- strb r0, [r4]
- movs r0, 0x11
- strb r0, [r4, 0x1]
- subs r0, r6, r5
- strb r0, [r4, 0x2]
- adds r4, 0x3
-_08004ABE:
- adds r0, r4, 0
- mov r1, sp
- bl StringCopy
- adds r4, r0, 0
- b _08004B1A
-_08004ACA:
- mov r0, sp
- bl ConvertIntToDecimalString
- adds r0, r5, 0
- mov r1, sp
- bl GetStringWidth
- lsls r0, 24
- lsrs r5, r0, 24
- cmp r6, r5
- bls _08004AF4
- movs r0, 0xFC
- strb r0, [r4]
- movs r0, 0x11
- strb r0, [r4, 0x1]
- subs r0, r6, r5
- lsrs r1, r0, 31
- adds r0, r1
- asrs r0, 1
- strb r0, [r4, 0x2]
- adds r4, 0x3
-_08004AF4:
- adds r0, r4, 0
- mov r1, sp
- bl StringCopy
- adds r4, r0, 0
- cmp r6, r5
- bls _08004B1A
- movs r0, 0xFC
- strb r0, [r4]
- movs r0, 0x11
- strb r0, [r4, 0x1]
- subs r0, r6, r5
- lsrs r1, r0, 31
- adds r0, r1
- asrs r0, 1
-_08004B12:
- strb r0, [r4, 0x2]
- adds r4, 0x3
- movs r0, 0xFF
- strb r0, [r4]
-_08004B1A:
- adds r0, r4, 0
- add sp, 0x10
- pop {r4-r6}
- pop {r1}
- bx r1
- thumb_func_end sub_8004A48
-
- thumb_func_start sub_8004B24
-sub_8004B24: @ 8004B24
- push {r4-r7,lr}
- adds r5, r0, 0
- adds r4, r1, 0
- adds r7, r2, 0
- ldr r0, [sp, 0x14]
- lsls r3, 24
- lsrs r6, r3, 24
- lsls r0, 24
- lsrs r0, 24
- adds r1, r0, 0
- cmp r0, 0x1
- beq _08004B58
- cmp r0, 0x1
- bgt _08004B46
- cmp r0, 0
- beq _08004B4C
- b _08004BC4
-_08004B46:
- cmp r1, 0x2
- beq _08004B82
- b _08004BC4
-_08004B4C:
- adds r0, r4, 0
- adds r1, r7, 0
- bl StringCopy
- adds r4, r0, 0
- b _08004BB4
-_08004B58:
- adds r0, r5, 0
- adds r1, r7, 0
- bl GetStringWidth
- lsls r0, 24
- lsrs r5, r0, 24
- cmp r6, r5
- bls _08004B76
- movs r0, 0xFC
- strb r0, [r4]
- movs r0, 0x13
- strb r0, [r4, 0x1]
- subs r0, r6, r5
- strb r0, [r4, 0x2]
- adds r4, 0x3
-_08004B76:
- adds r0, r4, 0
- adds r1, r7, 0
- bl StringCopy
- adds r4, r0, 0
- b _08004BC4
-_08004B82:
- adds r0, r5, 0
- adds r1, r7, 0
- bl GetStringWidth
- lsls r0, 24
- lsrs r5, r0, 24
- cmp r6, r5
- bls _08004BA6
- movs r0, 0xFC
- strb r0, [r4]
- movs r0, 0x13
- strb r0, [r4, 0x1]
- subs r0, r6, r5
- lsrs r1, r0, 31
- adds r0, r1
- asrs r0, 1
- strb r0, [r4, 0x2]
- adds r4, 0x3
-_08004BA6:
- adds r0, r4, 0
- adds r1, r7, 0
- bl StringCopy
- adds r4, r0, 0
- cmp r6, r5
- bls _08004BC4
-_08004BB4:
- movs r0, 0xFC
- strb r0, [r4]
- movs r0, 0x13
- strb r0, [r4, 0x1]
- strb r6, [r4, 0x2]
- adds r4, 0x3
- movs r0, 0xFF
- strb r0, [r4]
-_08004BC4:
- adds r0, r4, 0
- pop {r4-r7}
- pop {r1}
- bx r1
- thumb_func_end sub_8004B24
-
- thumb_func_start GetStringWidth
-GetStringWidth: @ 8004BCC
- push {r4-r7,lr}
- mov r7, r10
- mov r6, r9
- mov r5, r8
- push {r5-r7}
- sub sp, 0x4
- adds r5, r0, 0
- adds r7, r1, 0
- movs r2, 0
- ldrb r0, [r5, 0x1]
- mov r10, r0
- ldrb r1, [r5, 0x2]
- mov r9, r1
- ldrb r0, [r5, 0xE]
- mov r8, r0
- movs r6, 0
- ldrb r0, [r7]
- cmp r0, 0xFF
- beq _08004CE6
-_08004BF2:
- adds r0, r7, r6
- ldrb r1, [r0]
- cmp r1, 0xFC
- beq _08004C22
- cmp r1, 0xFD
- bne _08004CCC
- adds r6, 0x1
- ldrb r4, [r5, 0x2]
- adds r0, r7, r6
- ldrb r0, [r0]
- str r2, [sp]
- bl GetExpandedPlaceholder
- adds r1, r0, 0
- adds r0, r5, 0
- bl GetStringWidth
- ldr r2, [sp]
- adds r0, r2, r0
- lsls r0, 24
- lsrs r2, r0, 24
- strb r4, [r5, 0x2]
- adds r6, 0x1
- b _08004CDE
-_08004C22:
- adds r6, 0x1
- adds r0, r7, r6
- ldrb r0, [r0]
- subs r0, 0x6
- cmp r0, 0x10
- bhi _08004CB8
- lsls r0, 2
- ldr r1, _08004C38
- adds r0, r1
- ldr r0, [r0]
- mov pc, r0
- .align 2, 0
-_08004C38: .4byte _08004C3C
- .align 2, 0
-_08004C3C:
- .4byte _08004C80
- .4byte _08004C88
- .4byte _08004CB8
- .4byte _08004CB8
- .4byte _08004CB8
- .4byte _08004CB8
- .4byte _08004CB8
- .4byte _08004CB8
- .4byte _08004CB8
- .4byte _08004CB8
- .4byte _08004CB8
- .4byte _08004C90
- .4byte _08004C9C
- .4byte _08004C9C
- .4byte _08004CA8
- .4byte _08004CB0
- .4byte _08004CB4
-_08004C80:
- adds r0, r6, r7
- ldrb r0, [r0, 0x1]
- strb r0, [r5, 0x1]
- b _08004CB8
-_08004C88:
- ldr r0, [r5, 0x2C]
- ldrb r0, [r0, 0x8]
- strb r0, [r5, 0x1]
- b _08004CB8
-_08004C90:
- adds r0, r6, r7
- ldrb r0, [r0, 0x1]
- adds r0, r2, r0
- lsls r0, 24
- lsrs r2, r0, 24
- b _08004CB8
-_08004C9C:
- adds r0, r6, r7
- ldrb r1, [r0, 0x1]
- cmp r2, r1
- bcs _08004CB8
- ldrb r2, [r0, 0x1]
- b _08004CB8
-_08004CA8:
- adds r0, r6, r7
- ldrb r0, [r0, 0x1]
- strb r0, [r5, 0xE]
- b _08004CB8
-_08004CB0:
- movs r0, 0x1
- b _08004CB6
-_08004CB4:
- movs r0, 0x2
-_08004CB6:
- strb r0, [r5, 0x2]
-_08004CB8:
- adds r0, r7, r6
- ldrb r0, [r0]
- str r2, [sp]
- bl GetExtCtrlCodeLength
- lsls r0, 24
- lsrs r0, 24
- adds r6, r0
- ldr r2, [sp]
- b _08004CDE
-_08004CCC:
- adds r6, 0x1
- adds r0, r5, 0
- str r2, [sp]
- bl GetGlyphWidth
- ldr r2, [sp]
- adds r0, r2, r0
- lsls r0, 24
- lsrs r2, r0, 24
-_08004CDE:
- adds r0, r7, r6
- ldrb r0, [r0]
- cmp r0, 0xFF
- bne _08004BF2
-_08004CE6:
- mov r0, r8
- strb r0, [r5, 0xE]
- mov r1, r9
- strb r1, [r5, 0x2]
- mov r0, r10
- strb r0, [r5, 0x1]
- adds r0, r2, 0
- add sp, 0x4
- pop {r3-r5}
- mov r8, r3
- mov r9, r4
- mov r10, r5
- pop {r4-r7}
- pop {r1}
- bx r1
- thumb_func_end GetStringWidth
-
- thumb_func_start AddTextPrinterParametrized2
-AddTextPrinterParametrized2: @ 8004D04
- push {r4,r5,lr}
- sub sp, 0x8
- adds r5, r0, 0
- ldr r0, [sp, 0x14]
- ldr r4, [sp, 0x18]
- lsls r2, 16
- lsrs r2, 16
- lsls r3, 24
- lsrs r3, 24
- lsls r0, 16
- lsrs r0, 16
- str r0, [sp]
- str r4, [sp, 0x4]
- adds r0, r5, 0
- bl sub_8002E4C
- adds r0, r5, 0
- bl sub_8002F44
- lsls r0, 24
- lsrs r0, 24
- add sp, 0x8
- pop {r4,r5}
- pop {r1}
- bx r1
- thumb_func_end AddTextPrinterParametrized2
-
- thumb_func_start sub_8004D38
-sub_8004D38: @ 8004D38
- push {r4-r7,lr}
- mov r7, r9
- mov r6, r8
- push {r6,r7}
- sub sp, 0x4
- mov r9, r0
- mov r8, r1
- adds r6, r2, 0
- adds r4, r3, 0
- ldr r5, [sp, 0x20]
- lsls r6, 16
- lsrs r6, 16
- lsls r4, 24
- lsrs r4, 24
- lsls r5, 24
- lsrs r5, 24
- bl GetStringWidth
- lsls r0, 24
- lsrs r7, r0, 24
- adds r0, r7, 0x7
- lsrs r0, 3
- subs r4, r0
- lsls r4, 24
- lsrs r4, 24
- str r5, [sp]
- mov r0, r9
- mov r1, r8
- adds r2, r6, 0
- adds r3, r4, 0
- bl CreateTextRenderer
- mov r0, r9
- bl sub_8003D30
- movs r0, 0x7
- ands r7, r0
- cmp r7, 0
- beq _08004D8E
- movs r0, 0x8
- subs r0, r7
- lsls r0, 24
- lsrs r7, r0, 24
-_08004D8E:
- mov r0, r9
- adds r1, r7, 0
- movs r2, 0
- bl sub_80048D8
- mov r0, r9
- bl sub_8002F44
- lsls r0, 24
- lsrs r0, 24
- add sp, 0x4
- pop {r3,r4}
- mov r8, r3
- mov r9, r4
- pop {r4-r7}
- pop {r1}
- bx r1
- thumb_func_end sub_8004D38
-
- thumb_func_start sub_8004DB0
-sub_8004DB0: @ 8004DB0
- push {r4-r6,lr}
- mov r6, r9
- mov r5, r8
- push {r5,r6}
- sub sp, 0x8
- mov r8, r0
- mov r9, r1
- adds r4, r3, 0
- ldr r6, [sp, 0x20]
- ldr r5, [sp, 0x24]
- lsls r2, 16
- lsrs r2, 16
- lsls r4, 24
- lsrs r4, 24
- lsls r6, 24
- lsrs r6, 24
- lsls r5, 16
- str r2, [sp, 0x4]
- bl GetStringWidth
- lsrs r5, 17
- lsls r0, 24
- lsrs r0, 25
- subs r5, r0
- lsls r5, 24
- lsrs r5, 24
- lsrs r0, r5, 3
- adds r4, r0
- lsls r4, 24
- lsrs r4, 24
- str r6, [sp]
- mov r0, r8
- mov r1, r9
- ldr r2, [sp, 0x4]
- adds r3, r4, 0
- bl CreateTextRenderer
- mov r0, r8
- bl sub_8003D30
- movs r1, 0x7
- ands r1, r5
- mov r0, r8
- movs r2, 0
- bl sub_80048D8
- mov r0, r8
- bl sub_8002F44
- lsls r0, 24
- lsrs r0, 24
- add sp, 0x8
- pop {r3,r4}
- mov r8, r3
- mov r9, r4
- pop {r4-r6}
- pop {r1}
- bx r1
- thumb_func_end sub_8004DB0
-
- thumb_func_start sub_8004E24
-sub_8004E24: @ 8004E24
- ldrb r0, [r0, 0x6]
- bx lr
- thumb_func_end sub_8004E24
-
- thumb_func_start sub_8004E28
-sub_8004E28: @ 8004E28
- push {r4,lr}
- ldrb r4, [r0, 0x3]
- strb r4, [r1]
- ldrb r1, [r0, 0x4]
- strb r1, [r2]
- ldrb r0, [r0, 0x5]
- strb r0, [r3]
- pop {r4}
- pop {r0}
- bx r0
- thumb_func_end sub_8004E28
-
- thumb_func_start sub_8004E3C
-sub_8004E3C: @ 8004E3C
- push {r4,r5,lr}
- sub sp, 0x4
- adds r5, r1, 0
- adds r1, r2, 0
- ldr r4, _08004E68
- str r0, [r4, 0x2C]
- movs r0, 0
- str r0, [sp]
- adds r0, r4, 0
- movs r2, 0
- movs r3, 0
- bl CreateTextRenderer
- str r5, [r4, 0x24]
- adds r0, r4, 0
- bl sub_8002F44
- add sp, 0x4
- pop {r4,r5}
- pop {r0}
- bx r0
- .align 2, 0
-_08004E68: .4byte 0x03000328
- thumb_func_end sub_8004E3C
-
- thumb_func_start GetStringWidthGivenTextRendererTemplate
-GetStringWidthGivenTextRendererTemplate: @ 8004E6C
- push {r4,r5,lr}
- sub sp, 0x4
- adds r5, r1, 0
- ldr r4, _08004E98
- str r0, [r4, 0x2C]
- movs r0, 0
- str r0, [sp]
- adds r0, r4, 0
- movs r2, 0
- movs r3, 0
- bl CreateTextRenderer
- adds r0, r4, 0
- adds r1, r5, 0
- bl GetStringWidth
- lsls r0, 24
- lsrs r0, 24
- add sp, 0x4
- pop {r4,r5}
- pop {r1}
- bx r1
- .align 2, 0
-_08004E98: .4byte 0x03000328
- thumb_func_end GetStringWidthGivenTextRendererTemplate
-
- thumb_func_start StopMusicWhileStringIsPrinted
-StopMusicWhileStringIsPrinted: @ 8004E9C
- push {r4,lr}
- adds r4, r0, 0
- lsls r1, 24
- lsrs r1, 24
- cmp r1, 0x1
- bne _08004EFC
- bl StripExtendedControlCodes
- adds r0, r4, 0
- bl StringGetLength
- lsls r0, 24
- lsrs r2, r0, 24
- adds r1, r2, 0
- adds r0, r1, 0x1
- lsls r0, 24
- lsrs r2, r0, 24
- adds r3, r2, 0
- adds r1, r4, r1
- movs r0, 0xFC
- strb r0, [r1]
- adds r0, r3, 0x1
- lsls r0, 24
- lsrs r2, r0, 24
- adds r3, r4, r3
- movs r0, 0x16
- strb r0, [r3]
- adds r0, r2, 0x1
- lsls r0, 24
- adds r2, r4, r2
- movs r1, 0xFF
- strb r1, [r2]
- movs r1, 0xFF
- lsls r1, 24
- adds r0, r1
- b _08004EEE
-_08004EE4:
- adds r1, r2, r4
- ldrb r0, [r1]
- strb r0, [r1, 0x2]
- subs r0, r2, 0x1
- lsls r0, 24
-_08004EEE:
- lsrs r2, r0, 24
- cmp r2, 0xFF
- bne _08004EE4
- movs r0, 0xFC
- strb r0, [r4]
- movs r0, 0x15
- strb r0, [r4, 0x1]
-_08004EFC:
- pop {r4}
- pop {r0}
- bx r0
- thumb_func_end StopMusicWhileStringIsPrinted
-
- thumb_func_start StripExtendedControlCodes
-StripExtendedControlCodes: @ 8004F04
- push {r4-r6,lr}
- adds r5, r0, 0
- movs r4, 0
- movs r6, 0
- ldrb r0, [r5]
- cmp r0, 0xFF
- beq _08004F54
-_08004F12:
- adds r0, r5, r4
- ldrb r0, [r0]
- cmp r0, 0xFC
- bne _08004F34
- adds r0, r4, 0x1
- lsls r0, 16
- lsrs r4, r0, 16
- adds r0, r5, r4
- ldrb r0, [r0]
- bl GetExtCtrlCodeLength
- lsls r0, 24
- lsrs r0, 24
- adds r0, r4, r0
- lsls r0, 16
- lsrs r4, r0, 16
- b _08004F4C
-_08004F34:
- adds r2, r6, 0
- adds r0, r2, 0x1
- lsls r0, 16
- lsrs r6, r0, 16
- adds r2, r5, r2
- adds r1, r4, 0
- adds r0, r1, 0x1
- lsls r0, 16
- lsrs r4, r0, 16
- adds r1, r5, r1
- ldrb r0, [r1]
- strb r0, [r2]
-_08004F4C:
- adds r0, r5, r4
- ldrb r0, [r0]
- cmp r0, 0xFF
- bne _08004F12
-_08004F54:
- adds r1, r5, r6
- movs r0, 0xFF
- strb r0, [r1]
- pop {r4-r6}
- pop {r0}
- bx r0
- thumb_func_end StripExtendedControlCodes
-
- thumb_func_start SkipExtendedControlCode
-SkipExtendedControlCode: @ 8004F60
- push {r4,lr}
- adds r4, r0, 0
- b _08004F74
-_08004F66:
- adds r4, 0x1
- ldrb r0, [r4]
- bl GetExtCtrlCodeLength
- lsls r0, 24
- lsrs r0, 24
- adds r4, r0
-_08004F74:
- ldrb r0, [r4]
- cmp r0, 0xFC
- beq _08004F66
- adds r0, r4, 0
- pop {r4}
- pop {r1}
- bx r1
- thumb_func_end SkipExtendedControlCode
-
- thumb_func_start CompareStringWithoutExtendedControlCodes
-CompareStringWithoutExtendedControlCodes: @ 8004F84
- push {r4-r6,lr}
- adds r4, r0, 0
- adds r5, r1, 0
- movs r6, 0
- b _08004FA6
-_08004F8E:
- cmp r1, r0
- bcs _08004F9C
- movs r6, 0x1
- negs r6, r6
- cmp r0, 0xFF
- bne _08004F9C
- movs r6, 0x1
-_08004F9C:
- ldrb r0, [r4]
- cmp r0, 0xFF
- beq _08004FC6
- adds r4, 0x1
- adds r5, 0x1
-_08004FA6:
- adds r0, r4, 0
- bl SkipExtendedControlCode
- adds r4, r0, 0
- adds r0, r5, 0
- bl SkipExtendedControlCode
- adds r5, r0, 0
- ldrb r1, [r4]
- ldrb r0, [r5]
- cmp r1, r0
- bls _08004F8E
- movs r6, 0x1
- cmp r1, 0xFF
- bne _08004FC6
- subs r6, 0x2
-_08004FC6:
- adds r0, r6, 0
- pop {r4-r6}
- pop {r1}
- bx r1
- thumb_func_end CompareStringWithoutExtendedControlCodes
-
- thumb_func_start sub_8004FD0
-sub_8004FD0: @ 8004FD0
- push {r4-r7,lr}
- mov r7, r10
- mov r6, r9
- mov r5, r8
- push {r5-r7}
- sub sp, 0x18
- mov r10, r0
- adds r5, r1, 0
- adds r6, r2, 0
- ldr r0, [sp, 0x38]
- ldr r1, [sp, 0x3C]
- ldr r2, [sp, 0x40]
- lsls r3, 16
- lsrs r3, 16
- str r3, [sp, 0x8]
- lsls r0, 24
- lsrs r0, 24
- str r0, [sp, 0xC]
- lsls r1, 16
- lsrs r1, 16
- str r1, [sp, 0x10]
- lsls r2, 24
- lsrs r2, 24
- mov r9, r2
- movs r7, 0
- cmp r5, 0
- bne _08005008
- ldr r5, _0800500C
-_08005008:
- str r5, [sp, 0x14]
- b _0800505A
- .align 2, 0
-_0800500C: .4byte 0x020234cc
-_08005010:
- ldrb r1, [r6]
- cmp r1, 0xFC
- beq _08005024
- cmp r1, 0xFE
- beq _08005042
- strb r1, [r5]
- adds r5, 0x1
- adds r6, 0x1
- movs r0, 0x1
- b _0800505C
-_08005024:
- ldrb r0, [r6, 0x1]
- bl GetExtCtrlCodeLength
- adds r4, r0, 0
- adds r4, 0x1
- lsls r4, 24
- lsrs r4, 24
- adds r0, r5, 0
- adds r1, r6, 0
- adds r2, r4, 0
- bl memcpy
- adds r5, r4
- adds r6, r4
- b _0800505E
-_08005042:
- movs r0, 0xFC
- strb r0, [r5]
- movs r0, 0x13
- strb r0, [r5, 0x1]
- mov r0, r9
- strb r0, [r5, 0x2]
- strb r1, [r5, 0x3]
- adds r5, 0x4
- adds r6, 0x1
- adds r0, r7, 0x1
- lsls r0, 24
- lsrs r7, r0, 24
-_0800505A:
- movs r0, 0
-_0800505C:
- mov r8, r0
-_0800505E:
- ldrb r0, [r6]
- cmp r0, 0xFF
- bne _08005010
- movs r0, 0xFC
- strb r0, [r5]
- movs r0, 0x13
- strb r0, [r5, 0x1]
- mov r0, r9
- strb r0, [r5, 0x2]
- movs r0, 0xFF
- strb r0, [r5, 0x3]
- mov r0, r8
- cmp r0, 0
- beq _08005080
- adds r0, r7, 0x1
- lsls r0, 24
- lsrs r7, r0, 24
-_08005080:
- ldr r0, [sp, 0x10]
- str r0, [sp]
- ldr r0, [sp, 0x44]
- str r0, [sp, 0x4]
- mov r0, r10
- ldr r1, [sp, 0x14]
- ldr r2, [sp, 0x8]
- ldr r3, [sp, 0xC]
- bl sub_8002E4C
- mov r0, r10
- bl sub_8002F44
- adds r0, r7, 0
- add sp, 0x18
- pop {r3-r5}
- mov r8, r3
- mov r9, r4
- mov r10, r5
- pop {r4-r7}
- pop {r1}
- bx r1
- thumb_func_end sub_8004FD0
-
- thumb_func_start sub_80050AC
-sub_80050AC: @ 80050AC
- push {r4-r7,lr}
- sub sp, 0x8
- adds r7, r0, 0
- ldr r6, _08005144
- ldr r5, [r7, 0x8]
- ldrb r0, [r7, 0x2]
- lsls r2, r0, 1
- adds r2, r0
- lsls r2, 5
- ldrb r1, [r7, 0x1]
- lsls r0, r1, 1
- adds r0, r1
- lsls r0, 2
- ldr r1, _08005148
- adds r0, r1
- adds r2, r0
- ldr r1, [r2]
- ldr r0, [r2, 0x8]
- orrs r1, r0
- ldr r0, [r5]
- ands r0, r1
- str r0, [r6]
- ldr r0, [r5, 0x4]
- ands r0, r1
- str r0, [r6, 0x4]
- ldr r0, [r5, 0x8]
- ands r0, r1
- str r0, [r6, 0x8]
- ldr r0, [r5, 0xC]
- ands r0, r1
- str r0, [r6, 0xC]
- ldr r0, [r5, 0x10]
- ands r0, r1
- str r0, [r6, 0x10]
- ldr r0, [r5, 0x14]
- ands r0, r1
- str r0, [r6, 0x14]
- ldr r0, [r5, 0x18]
- ands r0, r1
- str r0, [r6, 0x18]
- ldr r0, [r5, 0x1C]
- ands r0, r1
- str r0, [r6, 0x1C]
- ldrb r0, [r7, 0x1]
- ldrb r1, [r7, 0x2]
- adds r0, r1
- cmp r0, 0x8
- ble _0800517C
- ldr r1, [r2, 0x4]
- ldrb r0, [r7]
- cmp r0, 0x2
- bne _0800514C
- ldr r0, [r5, 0x20]
- ands r0, r1
- str r0, [r6, 0x20]
- ldr r0, [r5, 0x24]
- ands r0, r1
- str r0, [r6, 0x24]
- ldr r0, [r5, 0x28]
- ands r0, r1
- str r0, [r6, 0x28]
- ldr r0, [r5, 0x2C]
- ands r0, r1
- str r0, [r6, 0x2C]
- ldr r0, [r5, 0x30]
- ands r0, r1
- str r0, [r6, 0x30]
- ldr r0, [r5, 0x34]
- ands r0, r1
- str r0, [r6, 0x34]
- ldr r0, [r5, 0x38]
- ands r0, r1
- str r0, [r6, 0x38]
- ldr r0, [r5, 0x3C]
- b _08005178
- .align 2, 0
-_08005144: .4byte 0x03000360
-_08005148: .4byte gUnknown_081E66DC
-_0800514C:
- ldr r0, [r5, 0x40]
- ands r0, r1
- str r0, [r6, 0x20]
- ldr r0, [r5, 0x44]
- ands r0, r1
- str r0, [r6, 0x24]
- ldr r0, [r5, 0x48]
- ands r0, r1
- str r0, [r6, 0x28]
- ldr r0, [r5, 0x4C]
- ands r0, r1
- str r0, [r6, 0x2C]
- ldr r0, [r5, 0x50]
- ands r0, r1
- str r0, [r6, 0x30]
- ldr r0, [r5, 0x54]
- ands r0, r1
- str r0, [r6, 0x34]
- ldr r0, [r5, 0x58]
- ands r0, r1
- str r0, [r6, 0x38]
- ldr r0, [r5, 0x5C]
-_08005178:
- ands r0, r1
- str r0, [r6, 0x3C]
-_0800517C:
- ldr r1, [r7, 0xC]
- ldr r0, [r1]
- str r0, [sp]
- ldr r0, [r1, 0x3C]
- str r0, [sp, 0x4]
- ldr r1, _08005200
- ldrb r0, [r7, 0x2]
- lsls r0, 2
- adds r0, r1
- ldr r1, [r7, 0x4]
- ldrb r3, [r7, 0x1]
- ldr r4, [r0]
- adds r0, r6, 0
- mov r2, sp
- bl _call_via_r4
- ldr r0, [r6]
- str r0, [r5]
- ldr r0, [r6, 0x4]
- str r0, [r5, 0x4]
- ldr r0, [r6, 0x8]
- str r0, [r5, 0x8]
- ldr r0, [r6, 0xC]
- str r0, [r5, 0xC]
- ldr r0, [r6, 0x10]
- str r0, [r5, 0x10]
- ldr r0, [r6, 0x14]
- str r0, [r5, 0x14]
- ldr r0, [r6, 0x18]
- str r0, [r5, 0x18]
- ldr r0, [r6, 0x1C]
- str r0, [r5, 0x1C]
- ldrb r0, [r7, 0x1]
- ldrb r1, [r7, 0x2]
- adds r0, r1
- cmp r0, 0x8
- ble _080051EE
- ldrb r0, [r7]
- cmp r0, 0x2
- beq _080051CE
- adds r5, 0x20
-_080051CE:
- ldr r0, [r6, 0x20]
- str r0, [r5, 0x20]
- ldr r0, [r6, 0x24]
- str r0, [r5, 0x24]
- ldr r0, [r6, 0x28]
- str r0, [r5, 0x28]
- ldr r0, [r6, 0x2C]
- str r0, [r5, 0x2C]
- ldr r0, [r6, 0x30]
- str r0, [r5, 0x30]
- ldr r0, [r6, 0x34]
- str r0, [r5, 0x34]
- ldr r0, [r6, 0x38]
- str r0, [r5, 0x38]
- ldr r0, [r6, 0x3C]
- str r0, [r5, 0x3C]
-_080051EE:
- ldrb r1, [r7, 0x1]
- ldrb r0, [r7, 0x2]
- adds r0, r1, r0
- asrs r0, 3
- add sp, 0x8
- pop {r4-r7}
- pop {r1}
- bx r1
- .align 2, 0
-_08005200: .4byte gUnknown_081E6BF4
- thumb_func_end sub_80050AC
-
- thumb_func_start nullsub_33
-nullsub_33: @ 8005204
- bx lr
- thumb_func_end nullsub_33
-
- thumb_func_start sub_8005208
-sub_8005208: @ 8005208
- push {r4-r7,lr}
- mov r12, r0
- adds r7, r1, 0
- adds r6, r2, 0
- lsls r3, 24
- lsrs r3, 21
- ldr r0, _08005250
- adds r5, r3, r0
- movs r4, 0
-_0800521A:
- adds r0, r7, r4
- ldrb r0, [r0]
- lsrs r0, 7
- lsls r0, 2
- adds r0, r6
- ldr r3, [r0]
- lsls r2, r4, 2
- add r2, r12
- ldr r0, [r5]
- adds r1, r3, 0
- lsls r1, r0
- ldr r0, [r2]
- orrs r0, r1
- str r0, [r2]
- ldr r0, [r5, 0x4]
- lsrs r3, r0
- ldr r0, [r2, 0x20]
- orrs r0, r3
- str r0, [r2, 0x20]
- adds r0, r4, 0x1
- lsls r0, 24
- lsrs r4, r0, 24
- cmp r4, 0x7
- bls _0800521A
- pop {r4-r7}
- pop {r0}
- bx r0
- .align 2, 0
-_08005250: .4byte gUnknown_081E6A3C
- thumb_func_end sub_8005208
-
- thumb_func_start sub_8005254
-sub_8005254: @ 8005254
- push {r4-r7,lr}
- mov r7, r8
- push {r7}
- mov r8, r0
- mov r12, r1
- adds r6, r2, 0
- lsls r3, 24
- lsrs r3, 21
- ldr r0, _080052BC
- adds r5, r3, r0
- movs r4, 0
- movs r7, 0x1
-_0800526C:
- mov r1, r12
- adds r0, r1, r4
- ldrb r0, [r0]
- lsls r0, 24
- lsrs r1, r0, 31
- ands r1, r7
- lsls r1, 2
- adds r1, r6
- lsrs r0, 30
- ands r0, r7
- lsls r0, 2
- adds r0, r6
- ldr r0, [r0]
- lsls r0, 4
- ldr r3, [r1]
- orrs r3, r0
- lsls r2, r4, 2
- add r2, r8
- ldr r0, [r5]
- adds r1, r3, 0
- lsls r1, r0
- ldr r0, [r2]
- orrs r0, r1
- str r0, [r2]
- ldr r0, [r5, 0x4]
- lsrs r3, r0
- ldr r0, [r2, 0x20]
- orrs r0, r3
- str r0, [r2, 0x20]
- adds r0, r4, 0x1
- lsls r0, 24
- lsrs r4, r0, 24
- cmp r4, 0x7
- bls _0800526C
- pop {r3}
- mov r8, r3
- pop {r4-r7}
- pop {r0}
- bx r0
- .align 2, 0
-_080052BC: .4byte gUnknown_081E6A3C
- thumb_func_end sub_8005254
-
- thumb_func_start sub_80052C0
-sub_80052C0: @ 80052C0
- push {r4-r7,lr}
- mov r7, r8
- push {r7}
- mov r8, r0
- mov r12, r1
- adds r4, r2, 0
- lsls r3, 24
- lsrs r3, 21
- ldr r0, _08005344
- adds r7, r3, r0
- movs r5, 0
- movs r6, 0x1
-_080052D8:
- mov r1, r12
- adds r0, r1, r5
- ldrb r2, [r0]
- lsls r2, 24
- lsrs r1, r2, 31
- ands r1, r6
- lsls r1, 2
- adds r1, r4
- lsrs r0, r2, 30
- ands r0, r6
- lsls r0, 2
- adds r0, r4
- ldr r0, [r0]
- lsls r0, 4
- ldr r3, [r1]
- orrs r3, r0
- lsrs r0, r2, 29
- ands r0, r6
- lsls r0, 2
- adds r0, r4
- ldr r0, [r0]
- lsls r0, 8
- orrs r3, r0
- lsrs r2, 28
- ands r2, r6
- lsls r2, 2
- adds r2, r4
- ldr r0, [r2]
- lsls r0, 12
- orrs r3, r0
- lsls r2, r5, 2
- add r2, r8
- ldr r0, [r7]
- adds r1, r3, 0
- lsls r1, r0
- ldr r0, [r2]
- orrs r0, r1
- str r0, [r2]
- ldr r0, [r7, 0x4]
- lsrs r3, r0
- ldr r0, [r2, 0x20]
- orrs r0, r3
- str r0, [r2, 0x20]
- adds r0, r5, 0x1
- lsls r0, 24
- lsrs r5, r0, 24
- cmp r5, 0x7
- bls _080052D8
- pop {r3}
- mov r8, r3
- pop {r4-r7}
- pop {r0}
- bx r0
- .align 2, 0
-_08005344: .4byte gUnknown_081E6A3C
- thumb_func_end sub_80052C0
-
- thumb_func_start sub_8005348
-sub_8005348: @ 8005348
- push {r4-r7,lr}
- mov r7, r8
- push {r7}
- mov r8, r0
- mov r12, r1
- adds r4, r2, 0
- lsls r3, 24
- lsrs r3, 21
- ldr r0, _080053CC
- adds r7, r3, r0
- movs r5, 0
- movs r6, 0x1
-_08005360:
- mov r1, r12
- adds r0, r1, r5
- ldrb r2, [r0]
- lsls r2, 24
- lsrs r1, r2, 31
- ands r1, r6
- lsls r1, 2
- adds r1, r4
- lsrs r0, r2, 30
- ands r0, r6
- lsls r0, 2
- adds r0, r4
- ldr r0, [r0]
- lsls r0, 4
- ldr r3, [r1]
- orrs r3, r0
- lsrs r0, r2, 29
- ands r0, r6
- lsls r0, 2
- adds r0, r4
- ldr r0, [r0]
- lsls r0, 8
- orrs r3, r0
- lsrs r2, 28
- ands r2, r6
- lsls r2, 2
- adds r2, r4
- ldr r0, [r2]
- lsls r0, 12
- orrs r3, r0
- lsls r2, r5, 2
- add r2, r8
- ldr r0, [r7]
- adds r1, r3, 0
- lsls r1, r0
- ldr r0, [r2]
- orrs r0, r1
- str r0, [r2]
- ldr r0, [r7, 0x4]
- lsrs r3, r0
- ldr r0, [r2, 0x20]
- orrs r0, r3
- str r0, [r2, 0x20]
- adds r0, r5, 0x1
- lsls r0, 24
- lsrs r5, r0, 24
- cmp r5, 0x7
- bls _08005360
- pop {r3}
- mov r8, r3
- pop {r4-r7}
- pop {r0}
- bx r0
- .align 2, 0
-_080053CC: .4byte gUnknown_081E6A3C
- thumb_func_end sub_8005348
-
- thumb_func_start sub_80053D0
-sub_80053D0: @ 80053D0
- push {r4-r7,lr}
- mov r7, r8
- push {r7}
- mov r8, r0
- mov r12, r1
- adds r4, r2, 0
- lsls r3, 24
- lsrs r3, 21
- ldr r0, _08005460
- adds r7, r3, r0
- movs r5, 0
- movs r6, 0x1
-_080053E8:
- mov r1, r12
- adds r0, r1, r5
- ldrb r2, [r0]
- lsls r2, 24
- lsrs r1, r2, 31
- ands r1, r6
- lsls r1, 2
- adds r1, r4
- lsrs r0, r2, 30
- ands r0, r6
- lsls r0, 2
- adds r0, r4
- ldr r0, [r0]
- lsls r0, 4
- ldr r3, [r1]
- orrs r3, r0
- lsrs r0, r2, 29
- ands r0, r6
- lsls r0, 2
- adds r0, r4
- ldr r0, [r0]
- lsls r0, 8
- orrs r3, r0
- lsrs r0, r2, 28
- ands r0, r6
- lsls r0, 2
- adds r0, r4
- ldr r0, [r0]
- lsls r0, 12
- orrs r3, r0
- lsrs r2, 27
- ands r2, r6
- lsls r2, 2
- adds r2, r4
- ldr r0, [r2]
- lsls r0, 16
- orrs r3, r0
- lsls r2, r5, 2
- add r2, r8
- ldr r0, [r7]
- adds r1, r3, 0
- lsls r1, r0
- ldr r0, [r2]
- orrs r0, r1
- str r0, [r2]
- ldr r0, [r7, 0x4]
- lsrs r3, r0
- ldr r0, [r2, 0x20]
- orrs r0, r3
- str r0, [r2, 0x20]
- adds r0, r5, 0x1
- lsls r0, 24
- lsrs r5, r0, 24
- cmp r5, 0x7
- bls _080053E8
- pop {r3}
- mov r8, r3
- pop {r4-r7}
- pop {r0}
- bx r0
- .align 2, 0
-_08005460: .4byte gUnknown_081E6A3C
- thumb_func_end sub_80053D0
-
- thumb_func_start sub_8005464
-sub_8005464: @ 8005464
- push {r4-r7,lr}
- mov r7, r8
- push {r7}
- mov r8, r0
- mov r12, r1
- adds r4, r2, 0
- lsls r3, 24
- lsrs r3, 21
- ldr r0, _08005504
- adds r7, r3, r0
- movs r6, 0
- movs r5, 0x1
-_0800547C:
- mov r1, r12
- adds r0, r1, r6
- ldrb r2, [r0]
- lsls r2, 24
- lsrs r1, r2, 31
- ands r1, r5
- lsls r1, 2
- adds r1, r4
- lsrs r0, r2, 30
- ands r0, r5
- lsls r0, 2
- adds r0, r4
- ldr r0, [r0]
- lsls r0, 4
- ldr r3, [r1]
- orrs r3, r0
- lsrs r0, r2, 29
- ands r0, r5
- lsls r0, 2
- adds r0, r4
- ldr r0, [r0]
- lsls r0, 8
- orrs r3, r0
- lsrs r0, r2, 28
- ands r0, r5
- lsls r0, 2
- adds r0, r4
- ldr r0, [r0]
- lsls r0, 12
- orrs r3, r0
- lsrs r0, r2, 27
- ands r0, r5
- lsls r0, 2
- adds r0, r4
- ldr r0, [r0]
- lsls r0, 16
- orrs r3, r0
- lsrs r2, 26
- ands r2, r5
- lsls r2, 2
- adds r2, r4
- ldr r0, [r2]
- lsls r0, 20
- orrs r3, r0
- lsls r2, r6, 2
- add r2, r8
- ldr r0, [r7]
- adds r1, r3, 0
- lsls r1, r0
- ldr r0, [r2]
- orrs r0, r1
- str r0, [r2]
- ldr r0, [r7, 0x4]
- lsrs r3, r0
- ldr r0, [r2, 0x20]
- orrs r0, r3
- str r0, [r2, 0x20]
- adds r0, r6, 0x1
- lsls r0, 24
- lsrs r6, r0, 24
- cmp r6, 0x7
- bls _0800547C
- pop {r3}
- mov r8, r3
- pop {r4-r7}
- pop {r0}
- bx r0
- .align 2, 0
-_08005504: .4byte gUnknown_081E6A3C
- thumb_func_end sub_8005464
-
- thumb_func_start sub_8005508
-sub_8005508: @ 8005508
- push {r4-r7,lr}
- mov r7, r8
- push {r7}
- mov r8, r0
- mov r12, r1
- adds r4, r2, 0
- lsls r3, 24
- lsrs r3, 21
- ldr r0, _080055B4
- adds r7, r3, r0
- movs r6, 0
- movs r5, 0x1
-_08005520:
- mov r1, r12
- adds r0, r1, r6
- ldrb r2, [r0]
- lsls r2, 24
- lsrs r1, r2, 31
- ands r1, r5
- lsls r1, 2
- adds r1, r4
- lsrs r0, r2, 30
- ands r0, r5
- lsls r0, 2
- adds r0, r4
- ldr r0, [r0]
- lsls r0, 4
- ldr r3, [r1]
- orrs r3, r0
- lsrs r0, r2, 29
- ands r0, r5
- lsls r0, 2
- adds r0, r4
- ldr r0, [r0]
- lsls r0, 8
- orrs r3, r0
- lsrs r0, r2, 28
- ands r0, r5
- lsls r0, 2
- adds r0, r4
- ldr r0, [r0]
- lsls r0, 12
- orrs r3, r0
- lsrs r0, r2, 27
- ands r0, r5
- lsls r0, 2
- adds r0, r4
- ldr r0, [r0]
- lsls r0, 16
- orrs r3, r0
- lsrs r0, r2, 26
- ands r0, r5
- lsls r0, 2
- adds r0, r4
- ldr r0, [r0]
- lsls r0, 20
- orrs r3, r0
- lsrs r2, 25
- ands r2, r5
- lsls r2, 2
- adds r2, r4
- ldr r0, [r2]
- lsls r0, 24
- orrs r3, r0
- lsls r2, r6, 2
- add r2, r8
- ldr r0, [r7]
- adds r1, r3, 0
- lsls r1, r0
- ldr r0, [r2]
- orrs r0, r1
- str r0, [r2]
- ldr r0, [r7, 0x4]
- lsrs r3, r0
- ldr r0, [r2, 0x20]
- orrs r0, r3
- str r0, [r2, 0x20]
- adds r0, r6, 0x1
- lsls r0, 24
- lsrs r6, r0, 24
- cmp r6, 0x7
- bls _08005520
- pop {r3}
- mov r8, r3
- pop {r4-r7}
- pop {r0}
- bx r0
- .align 2, 0
-_080055B4: .4byte gUnknown_081E6A3C
- thumb_func_end sub_8005508
-
- thumb_func_start sub_80055B8
-sub_80055B8: @ 80055B8
- push {r4-r7,lr}
- mov r7, r9
- mov r6, r8
- push {r6,r7}
- mov r9, r0
- mov r8, r1
- adds r5, r2, 0
- lsls r3, 24
- lsrs r3, 21
- ldr r0, _0800567C
- adds r3, r0
- mov r12, r3
- movs r7, 0
- movs r6, 0x1
-_080055D4:
- mov r1, r8
- adds r0, r1, r7
- ldrb r4, [r0]
- lsls r2, r4, 24
- lsrs r1, r2, 31
- ands r1, r6
- lsls r1, 2
- adds r1, r5
- lsrs r0, r2, 30
- ands r0, r6
- lsls r0, 2
- adds r0, r5
- ldr r0, [r0]
- lsls r0, 4
- ldr r3, [r1]
- orrs r3, r0
- lsrs r0, r2, 29
- ands r0, r6
- lsls r0, 2
- adds r0, r5
- ldr r0, [r0]
- lsls r0, 8
- orrs r3, r0
- lsrs r0, r2, 28
- ands r0, r6
- lsls r0, 2
- adds r0, r5
- ldr r0, [r0]
- lsls r0, 12
- orrs r3, r0
- lsrs r0, r2, 27
- ands r0, r6
- lsls r0, 2
- adds r0, r5
- ldr r0, [r0]
- lsls r0, 16
- orrs r3, r0
- lsrs r0, r2, 26
- ands r0, r6
- lsls r0, 2
- adds r0, r5
- ldr r0, [r0]
- lsls r0, 20
- orrs r3, r0
- lsrs r2, 25
- ands r2, r6
- lsls r2, 2
- adds r2, r5
- ldr r0, [r2]
- lsls r0, 24
- orrs r3, r0
- movs r0, 0x1
- ands r0, r4
- lsls r0, 2
- adds r0, r5
- ldr r0, [r0]
- lsls r0, 28
- orrs r3, r0
- lsls r2, r7, 2
- add r2, r9
- mov r1, r12
- ldr r0, [r1]
- adds r1, r3, 0
- lsls r1, r0
- ldr r0, [r2]
- orrs r0, r1
- str r0, [r2]
- mov r1, r12
- ldr r0, [r1, 0x4]
- lsrs r3, r0
- ldr r0, [r2, 0x20]
- orrs r0, r3
- str r0, [r2, 0x20]
- adds r0, r7, 0x1
- lsls r0, 24
- lsrs r7, r0, 24
- cmp r7, 0x7
- bls _080055D4
- pop {r3,r4}
- mov r8, r3
- mov r9, r4
- pop {r4-r7}
- pop {r0}
- bx r0
- .align 2, 0
-_0800567C: .4byte gUnknown_081E6A3C
- thumb_func_end sub_80055B8
-
- thumb_func_start CopyGlyphToWindow
-CopyGlyphToWindow: @ 8005680
- push {r4-r7,lr}
- adds r7, r0, 0
- ldr r6, _08005714
- ldr r5, [r7, 0x8]
- ldrb r0, [r7, 0x2]
- lsls r2, r0, 1
- adds r2, r0
- lsls r2, 5
- ldrb r1, [r7, 0x1]
- lsls r0, r1, 1
- adds r0, r1
- lsls r0, 2
- ldr r1, _08005718
- adds r0, r1
- adds r2, r0
- ldr r1, [r2]
- ldr r0, [r2, 0x8]
- orrs r1, r0
- ldr r0, [r5]
- ands r0, r1
- str r0, [r6]
- ldr r0, [r5, 0x4]
- ands r0, r1
- str r0, [r6, 0x4]
- ldr r0, [r5, 0x8]
- ands r0, r1
- str r0, [r6, 0x8]
- ldr r0, [r5, 0xC]
- ands r0, r1
- str r0, [r6, 0xC]
- ldr r0, [r5, 0x10]
- ands r0, r1
- str r0, [r6, 0x10]
- ldr r0, [r5, 0x14]
- ands r0, r1
- str r0, [r6, 0x14]
- ldr r0, [r5, 0x18]
- ands r0, r1
- str r0, [r6, 0x18]
- ldr r0, [r5, 0x1C]
- ands r0, r1
- str r0, [r6, 0x1C]
- ldrb r0, [r7, 0x1]
- ldrb r1, [r7, 0x2]
- adds r0, r1
- cmp r0, 0x8
- ble _0800574C
- ldr r1, [r2, 0x4]
- ldrb r0, [r7]
- cmp r0, 0x2
- bne _0800571C
- ldr r0, [r5, 0x20]
- ands r0, r1
- str r0, [r6, 0x20]
- ldr r0, [r5, 0x24]
- ands r0, r1
- str r0, [r6, 0x24]
- ldr r0, [r5, 0x28]
- ands r0, r1
- str r0, [r6, 0x28]
- ldr r0, [r5, 0x2C]
- ands r0, r1
- str r0, [r6, 0x2C]
- ldr r0, [r5, 0x30]
- ands r0, r1
- str r0, [r6, 0x30]
- ldr r0, [r5, 0x34]
- ands r0, r1
- str r0, [r6, 0x34]
- ldr r0, [r5, 0x38]
- ands r0, r1
- str r0, [r6, 0x38]
- ldr r0, [r5, 0x3C]
- b _08005748
- .align 2, 0
-_08005714: .4byte 0x03000360
-_08005718: .4byte gUnknown_081E66DC
-_0800571C:
- ldr r0, [r5, 0x40]
- ands r0, r1
- str r0, [r6, 0x20]
- ldr r0, [r5, 0x44]
- ands r0, r1
- str r0, [r6, 0x24]
- ldr r0, [r5, 0x48]
- ands r0, r1
- str r0, [r6, 0x28]
- ldr r0, [r5, 0x4C]
- ands r0, r1
- str r0, [r6, 0x2C]
- ldr r0, [r5, 0x50]
- ands r0, r1
- str r0, [r6, 0x30]
- ldr r0, [r5, 0x54]
- ands r0, r1
- str r0, [r6, 0x34]
- ldr r0, [r5, 0x58]
- ands r0, r1
- str r0, [r6, 0x38]
- ldr r0, [r5, 0x5C]
-_08005748:
- ands r0, r1
- str r0, [r6, 0x3C]
-_0800574C:
- ldr r1, _080057C4
- ldrb r0, [r7, 0x2]
- lsls r0, 2
- adds r0, r1
- ldr r1, [r7, 0x4]
- ldr r2, [r7, 0xC]
- ldrb r3, [r7, 0x1]
- ldr r4, [r0]
- adds r0, r6, 0
- bl _call_via_r4
- ldr r0, [r6]
- str r0, [r5]
- ldr r0, [r6, 0x4]
- str r0, [r5, 0x4]
- ldr r0, [r6, 0x8]
- str r0, [r5, 0x8]
- ldr r0, [r6, 0xC]
- str r0, [r5, 0xC]
- ldr r0, [r6, 0x10]
- str r0, [r5, 0x10]
- ldr r0, [r6, 0x14]
- str r0, [r5, 0x14]
- ldr r0, [r6, 0x18]
- str r0, [r5, 0x18]
- ldr r0, [r6, 0x1C]
- str r0, [r5, 0x1C]
- ldrb r0, [r7, 0x1]
- ldrb r1, [r7, 0x2]
- adds r0, r1
- cmp r0, 0x8
- ble _080057B4
- ldrb r0, [r7]
- cmp r0, 0x2
- beq _08005794
- adds r5, 0x20
-_08005794:
- ldr r0, [r6, 0x20]
- str r0, [r5, 0x20]
- ldr r0, [r6, 0x24]
- str r0, [r5, 0x24]
- ldr r0, [r6, 0x28]
- str r0, [r5, 0x28]
- ldr r0, [r6, 0x2C]
- str r0, [r5, 0x2C]
- ldr r0, [r6, 0x30]
- str r0, [r5, 0x30]
- ldr r0, [r6, 0x34]
- str r0, [r5, 0x34]
- ldr r0, [r6, 0x38]
- str r0, [r5, 0x38]
- ldr r0, [r6, 0x3C]
- str r0, [r5, 0x3C]
-_080057B4:
- ldrb r1, [r7, 0x1]
- ldrb r0, [r7, 0x2]
- adds r0, r1, r0
- asrs r0, 3
- pop {r4-r7}
- pop {r1}
- bx r1
- .align 2, 0
-_080057C4: .4byte gUnknown_081E6C18
- thumb_func_end CopyGlyphToWindow
-
- thumb_func_start ShiftGlyphWidth0
-ShiftGlyphWidth0: @ 80057C8
- bx lr
- thumb_func_end ShiftGlyphWidth0
-
- thumb_func_start ShiftGlyphWidth1
-ShiftGlyphWidth1: @ 80057CC
- push {r4-r7,lr}
- mov r7, r8
- push {r7}
- mov r12, r0
- adds r7, r1, 0
- adds r6, r2, 0
- lsls r3, 24
- lsrs r3, 21
- ldr r0, _08005824
- adds r5, r3, r0
- movs r4, 0
- movs r0, 0xF
- mov r8, r0
-_080057E6:
- lsls r2, r4, 2
- adds r0, r2, r7
- ldr r0, [r0]
- mov r1, r8
- ands r0, r1
- lsls r0, 2
- adds r0, r6
- ldr r3, [r0]
- add r2, r12
- ldr r0, [r5]
- adds r1, r3, 0
- lsls r1, r0
- ldr r0, [r2]
- orrs r0, r1
- str r0, [r2]
- ldr r0, [r5, 0x4]
- lsrs r3, r0
- ldr r0, [r2, 0x20]
- orrs r0, r3
- str r0, [r2, 0x20]
- adds r0, r4, 0x1
- lsls r0, 24
- lsrs r4, r0, 24
- cmp r4, 0x7
- bls _080057E6
- pop {r3}
- mov r8, r3
- pop {r4-r7}
- pop {r0}
- bx r0
- .align 2, 0
-_08005824: .4byte gUnknown_081E6A3C
- thumb_func_end ShiftGlyphWidth1
-
- thumb_func_start ShiftGlyphWidth2
-ShiftGlyphWidth2: @ 8005828
- push {r4-r7,lr}
- mov r7, r8
- push {r7}
- mov r8, r0
- mov r12, r1
- adds r6, r2, 0
- lsls r3, 24
- lsrs r3, 21
- ldr r0, _0800588C
- adds r5, r3, r0
- movs r4, 0
- movs r7, 0xF
-_08005840:
- lsls r3, r4, 2
- mov r1, r12
- adds r0, r3, r1
- ldr r0, [r0]
- adds r1, r0, 0
- ands r1, r7
- lsls r1, 2
- adds r1, r6
- lsrs r0, 4
- ands r0, r7
- lsls r0, 2
- adds r0, r6
- ldr r0, [r0]
- lsls r0, 4
- ldr r2, [r1]
- orrs r2, r0
- add r3, r8
- ldr r0, [r5]
- adds r1, r2, 0
- lsls r1, r0
- ldr r0, [r3]
- orrs r0, r1
- str r0, [r3]
- ldr r0, [r5, 0x4]
- lsrs r2, r0
- ldr r0, [r3, 0x20]
- orrs r0, r2
- str r0, [r3, 0x20]
- adds r0, r4, 0x1
- lsls r0, 24
- lsrs r4, r0, 24
- cmp r4, 0x7
- bls _08005840
- pop {r3}
- mov r8, r3
- pop {r4-r7}
- pop {r0}
- bx r0
- .align 2, 0
-_0800588C: .4byte gUnknown_081E6A3C
- thumb_func_end ShiftGlyphWidth2
-
- thumb_func_start ShiftGlyphWidth3
-ShiftGlyphWidth3: @ 8005890
- push {r4-r7,lr}
- mov r7, r9
- mov r6, r8
- push {r6,r7}
- mov r9, r0
- mov r8, r1
- adds r6, r2, 0
- lsls r3, 24
- lsrs r3, 21
- ldr r0, _0800590C
- adds r7, r3, r0
- movs r5, 0
- movs r0, 0xF
- mov r12, r0
-_080058AC:
- lsls r4, r5, 2
- mov r1, r8
- adds r0, r4, r1
- ldr r2, [r0]
- adds r1, r2, 0
- mov r3, r12
- ands r1, r3
- lsls r1, 2
- adds r1, r6
- lsrs r0, r2, 4
- ands r0, r3
- lsls r0, 2
- adds r0, r6
- ldr r0, [r0]
- lsls r0, 4
- ldr r3, [r1]
- orrs r3, r0
- lsrs r2, 8
- mov r0, r12
- ands r2, r0
- lsls r2, 2
- adds r2, r6
- ldr r0, [r2]
- lsls r0, 8
- orrs r3, r0
- add r4, r9
- ldr r0, [r7]
- adds r1, r3, 0
- lsls r1, r0
- ldr r0, [r4]
- orrs r0, r1
- str r0, [r4]
- ldr r0, [r7, 0x4]
- lsrs r3, r0
- ldr r0, [r4, 0x20]
- orrs r0, r3
- str r0, [r4, 0x20]
- adds r0, r5, 0x1
- lsls r0, 24
- lsrs r5, r0, 24
- cmp r5, 0x7
- bls _080058AC
- pop {r3,r4}
- mov r8, r3
- mov r9, r4
- pop {r4-r7}
- pop {r0}
- bx r0
- .align 2, 0
-_0800590C: .4byte gUnknown_081E6A3C
- thumb_func_end ShiftGlyphWidth3
-
- thumb_func_start ShiftGlyphWidth4
-ShiftGlyphWidth4: @ 8005910
- push {r4-r7,lr}
- mov r7, r9
- mov r6, r8
- push {r6,r7}
- mov r9, r0
- mov r8, r1
- adds r5, r2, 0
- lsls r3, 24
- lsrs r3, 21
- ldr r0, _0800599C
- adds r3, r0
- mov r12, r3
- movs r6, 0
- movs r7, 0xF
-_0800592C:
- lsls r4, r6, 2
- mov r1, r8
- adds r0, r4, r1
- ldr r2, [r0]
- adds r1, r2, 0
- ands r1, r7
- lsls r1, 2
- adds r1, r5
- lsrs r0, r2, 4
- ands r0, r7
- lsls r0, 2
- adds r0, r5
- ldr r0, [r0]
- lsls r0, 4
- ldr r3, [r1]
- orrs r3, r0
- lsrs r0, r2, 8
- ands r0, r7
- lsls r0, 2
- adds r0, r5
- ldr r0, [r0]
- lsls r0, 8
- orrs r3, r0
- lsrs r2, 12
- ands r2, r7
- lsls r2, 2
- adds r2, r5
- ldr r0, [r2]
- lsls r0, 12
- orrs r3, r0
- add r4, r9
- mov r1, r12
- ldr r0, [r1]
- adds r1, r3, 0
- lsls r1, r0
- ldr r0, [r4]
- orrs r0, r1
- str r0, [r4]
- mov r1, r12
- ldr r0, [r1, 0x4]
- lsrs r3, r0
- ldr r0, [r4, 0x20]
- orrs r0, r3
- str r0, [r4, 0x20]
- adds r0, r6, 0x1
- lsls r0, 24
- lsrs r6, r0, 24
- cmp r6, 0x7
- bls _0800592C
- pop {r3,r4}
- mov r8, r3
- mov r9, r4
- pop {r4-r7}
- pop {r0}
- bx r0
- .align 2, 0
-_0800599C: .4byte gUnknown_081E6A3C
- thumb_func_end ShiftGlyphWidth4
-
- thumb_func_start ShiftGlyphWidth5
-ShiftGlyphWidth5: @ 80059A0
- push {r4-r7,lr}
- mov r7, r8
- push {r7}
- lsls r3, 24
- lsrs r3, 21
- ldr r4, _08005CAC
- adds r3, r4
- ldr r6, [r1]
- movs r4, 0xF
- mov r8, r4
- adds r5, r6, 0
- ands r5, r4
- lsls r5, 2
- adds r5, r2
- lsrs r4, r6, 4
- mov r7, r8
- ands r4, r7
- lsls r4, 2
- adds r4, r2
- ldr r4, [r4]
- lsls r4, 4
- ldr r7, [r5]
- orrs r7, r4
- lsrs r4, r6, 8
- mov r5, r8
- ands r4, r5
- lsls r4, 2
- adds r4, r2
- ldr r4, [r4]
- lsls r4, 8
- orrs r7, r4
- lsrs r4, r6, 12
- ands r4, r5
- lsls r4, 2
- adds r4, r2
- ldr r4, [r4]
- lsls r4, 12
- orrs r7, r4
- lsrs r6, 16
- ands r6, r5
- lsls r6, 2
- adds r6, r2
- ldr r4, [r6]
- lsls r4, 16
- orrs r7, r4
- ldr r4, [r3]
- adds r5, r7, 0
- lsls r5, r4
- ldr r4, [r0]
- orrs r4, r5
- str r4, [r0]
- ldr r4, [r3, 0x4]
- lsrs r7, r4
- ldr r4, [r0, 0x20]
- orrs r4, r7
- str r4, [r0, 0x20]
- ldr r6, [r1, 0x4]
- adds r5, r6, 0
- mov r7, r8
- ands r5, r7
- lsls r5, 2
- adds r5, r2
- lsrs r4, r6, 4
- ands r4, r7
- lsls r4, 2
- adds r4, r2
- ldr r4, [r4]
- lsls r4, 4
- ldr r7, [r5]
- orrs r7, r4
- lsrs r4, r6, 8
- mov r5, r8
- ands r4, r5
- lsls r4, 2
- adds r4, r2
- ldr r4, [r4]
- lsls r4, 8
- orrs r7, r4
- lsrs r4, r6, 12
- ands r4, r5
- lsls r4, 2
- adds r4, r2
- ldr r4, [r4]
- lsls r4, 12
- orrs r7, r4
- lsrs r6, 16
- ands r6, r5
- lsls r6, 2
- adds r6, r2
- ldr r4, [r6]
- lsls r4, 16
- orrs r7, r4
- ldr r4, [r3]
- adds r5, r7, 0
- lsls r5, r4
- ldr r4, [r0, 0x4]
- orrs r4, r5
- str r4, [r0, 0x4]
- ldr r4, [r3, 0x4]
- lsrs r7, r4
- ldr r4, [r0, 0x24]
- orrs r4, r7
- str r4, [r0, 0x24]
- ldr r6, [r1, 0x8]
- adds r5, r6, 0
- mov r7, r8
- ands r5, r7
- lsls r5, 2
- adds r5, r2
- lsrs r4, r6, 4
- ands r4, r7
- lsls r4, 2
- adds r4, r2
- ldr r4, [r4]
- lsls r4, 4
- ldr r7, [r5]
- orrs r7, r4
- lsrs r4, r6, 8
- mov r5, r8
- ands r4, r5
- lsls r4, 2
- adds r4, r2
- ldr r4, [r4]
- lsls r4, 8
- orrs r7, r4
- lsrs r4, r6, 12
- ands r4, r5
- lsls r4, 2
- adds r4, r2
- ldr r4, [r4]
- lsls r4, 12
- orrs r7, r4
- lsrs r6, 16
- ands r6, r5
- lsls r6, 2
- adds r6, r2
- ldr r4, [r6]
- lsls r4, 16
- orrs r7, r4
- ldr r4, [r3]
- adds r5, r7, 0
- lsls r5, r4
- ldr r4, [r0, 0x8]
- orrs r4, r5
- str r4, [r0, 0x8]
- ldr r4, [r3, 0x4]
- lsrs r7, r4
- ldr r4, [r0, 0x28]
- orrs r4, r7
- str r4, [r0, 0x28]
- ldr r6, [r1, 0xC]
- adds r5, r6, 0
- mov r7, r8
- ands r5, r7
- lsls r5, 2
- adds r5, r2
- lsrs r4, r6, 4
- ands r4, r7
- lsls r4, 2
- adds r4, r2
- ldr r4, [r4]
- lsls r4, 4
- ldr r7, [r5]
- orrs r7, r4
- lsrs r4, r6, 8
- mov r5, r8
- ands r4, r5
- lsls r4, 2
- adds r4, r2
- ldr r4, [r4]
- lsls r4, 8
- orrs r7, r4
- lsrs r4, r6, 12
- ands r4, r5
- lsls r4, 2
- adds r4, r2
- ldr r4, [r4]
- lsls r4, 12
- orrs r7, r4
- lsrs r6, 16
- ands r6, r5
- lsls r6, 2
- adds r6, r2
- ldr r4, [r6]
- lsls r4, 16
- orrs r7, r4
- ldr r4, [r3]
- adds r5, r7, 0
- lsls r5, r4
- ldr r4, [r0, 0xC]
- orrs r4, r5
- str r4, [r0, 0xC]
- ldr r4, [r3, 0x4]
- lsrs r7, r4
- ldr r4, [r0, 0x2C]
- orrs r4, r7
- str r4, [r0, 0x2C]
- ldr r6, [r1, 0x10]
- adds r5, r6, 0
- mov r7, r8
- ands r5, r7
- lsls r5, 2
- adds r5, r2
- lsrs r4, r6, 4
- ands r4, r7
- lsls r4, 2
- adds r4, r2
- ldr r4, [r4]
- lsls r4, 4
- ldr r7, [r5]
- orrs r7, r4
- lsrs r4, r6, 8
- mov r5, r8
- ands r4, r5
- lsls r4, 2
- adds r4, r2
- ldr r4, [r4]
- lsls r4, 8
- orrs r7, r4
- lsrs r4, r6, 12
- ands r4, r5
- lsls r4, 2
- adds r4, r2
- ldr r4, [r4]
- lsls r4, 12
- orrs r7, r4
- lsrs r6, 16
- ands r6, r5
- lsls r6, 2
- adds r6, r2
- ldr r4, [r6]
- lsls r4, 16
- orrs r7, r4
- ldr r4, [r3]
- adds r5, r7, 0
- lsls r5, r4
- ldr r4, [r0, 0x10]
- orrs r4, r5
- str r4, [r0, 0x10]
- ldr r4, [r3, 0x4]
- lsrs r7, r4
- ldr r4, [r0, 0x30]
- orrs r4, r7
- str r4, [r0, 0x30]
- ldr r6, [r1, 0x14]
- adds r5, r6, 0
- mov r7, r8
- ands r5, r7
- lsls r5, 2
- adds r5, r2
- lsrs r4, r6, 4
- ands r4, r7
- lsls r4, 2
- adds r4, r2
- ldr r4, [r4]
- lsls r4, 4
- ldr r7, [r5]
- orrs r7, r4
- lsrs r4, r6, 8
- mov r5, r8
- ands r4, r5
- lsls r4, 2
- adds r4, r2
- ldr r4, [r4]
- lsls r4, 8
- orrs r7, r4
- lsrs r4, r6, 12
- ands r4, r5
- lsls r4, 2
- adds r4, r2
- ldr r4, [r4]
- lsls r4, 12
- orrs r7, r4
- lsrs r6, 16
- ands r6, r5
- lsls r6, 2
- adds r6, r2
- ldr r4, [r6]
- lsls r4, 16
- orrs r7, r4
- ldr r4, [r3]
- adds r5, r7, 0
- lsls r5, r4
- ldr r4, [r0, 0x14]
- orrs r4, r5
- str r4, [r0, 0x14]
- ldr r4, [r3, 0x4]
- lsrs r7, r4
- ldr r4, [r0, 0x34]
- orrs r4, r7
- str r4, [r0, 0x34]
- ldr r6, [r1, 0x18]
- adds r5, r6, 0
- mov r7, r8
- ands r5, r7
- lsls r5, 2
- adds r5, r2
- lsrs r4, r6, 4
- ands r4, r7
- lsls r4, 2
- adds r4, r2
- ldr r4, [r4]
- lsls r4, 4
- ldr r7, [r5]
- orrs r7, r4
- lsrs r4, r6, 8
- mov r5, r8
- ands r4, r5
- lsls r4, 2
- adds r4, r2
- ldr r4, [r4]
- lsls r4, 8
- orrs r7, r4
- lsrs r4, r6, 12
- ands r4, r5
- lsls r4, 2
- adds r4, r2
- ldr r4, [r4]
- lsls r4, 12
- orrs r7, r4
- lsrs r6, 16
- ands r6, r5
- lsls r6, 2
- adds r6, r2
- ldr r4, [r6]
- lsls r4, 16
- orrs r7, r4
- ldr r4, [r3]
- adds r5, r7, 0
- lsls r5, r4
- ldr r4, [r0, 0x18]
- orrs r4, r5
- str r4, [r0, 0x18]
- ldr r4, [r3, 0x4]
- lsrs r7, r4
- ldr r4, [r0, 0x38]
- orrs r4, r7
- str r4, [r0, 0x38]
- ldr r5, [r1, 0x1C]
- adds r4, r5, 0
- mov r6, r8
- ands r4, r6
- lsls r4, 2
- adds r4, r2
- lsrs r1, r5, 4
- ands r1, r6
- lsls r1, 2
- adds r1, r2
- ldr r1, [r1]
- lsls r1, 4
- ldr r7, [r4]
- orrs r7, r1
- lsrs r1, r5, 8
- ands r1, r6
- lsls r1, 2
- adds r1, r2
- ldr r1, [r1]
- lsls r1, 8
- orrs r7, r1
- lsrs r1, r5, 12
- ands r1, r6
- lsls r1, 2
- adds r1, r2
- ldr r1, [r1]
- lsls r1, 12
- orrs r7, r1
- lsrs r5, 16
- ands r5, r6
- lsls r5, 2
- adds r5, r2
- ldr r1, [r5]
- lsls r1, 16
- orrs r7, r1
- ldr r1, [r3]
- adds r2, r7, 0
- lsls r2, r1
- ldr r1, [r0, 0x1C]
- orrs r1, r2
- str r1, [r0, 0x1C]
- ldr r1, [r3, 0x4]
- lsrs r7, r1
- ldr r1, [r0, 0x3C]
- orrs r1, r7
- str r1, [r0, 0x3C]
- pop {r3}
- mov r8, r3
- pop {r4-r7}
- pop {r0}
- bx r0
- .align 2, 0
-_08005CAC: .4byte gUnknown_081E6A3C
- thumb_func_end ShiftGlyphWidth5
-
- thumb_func_start ShiftGlyphWidth6
-ShiftGlyphWidth6: @ 8005CB0
- push {r4-r7,lr}
- mov r7, r8
- push {r7}
- lsls r3, 24
- lsrs r3, 21
- ldr r4, _0800602C
- adds r3, r4
- ldr r6, [r1]
- movs r4, 0xF
- mov r8, r4
- adds r5, r6, 0
- ands r5, r4
- lsls r5, 2
- adds r5, r2
- lsrs r4, r6, 4
- mov r7, r8
- ands r4, r7
- lsls r4, 2
- adds r4, r2
- ldr r4, [r4]
- lsls r4, 4
- ldr r7, [r5]
- orrs r7, r4
- lsrs r4, r6, 8
- mov r5, r8
- ands r4, r5
- lsls r4, 2
- adds r4, r2
- ldr r4, [r4]
- lsls r4, 8
- orrs r7, r4
- lsrs r4, r6, 12
- ands r4, r5
- lsls r4, 2
- adds r4, r2
- ldr r4, [r4]
- lsls r4, 12
- orrs r7, r4
- lsrs r4, r6, 16
- ands r4, r5
- lsls r4, 2
- adds r4, r2
- ldr r4, [r4]
- lsls r4, 16
- orrs r7, r4
- lsrs r6, 20
- ands r6, r5
- lsls r6, 2
- adds r6, r2
- ldr r4, [r6]
- lsls r4, 20
- orrs r7, r4
- ldr r4, [r3]
- adds r5, r7, 0
- lsls r5, r4
- ldr r4, [r0]
- orrs r4, r5
- str r4, [r0]
- ldr r4, [r3, 0x4]
- lsrs r7, r4
- ldr r4, [r0, 0x20]
- orrs r4, r7
- str r4, [r0, 0x20]
- ldr r6, [r1, 0x4]
- adds r5, r6, 0
- mov r7, r8
- ands r5, r7
- lsls r5, 2
- adds r5, r2
- lsrs r4, r6, 4
- ands r4, r7
- lsls r4, 2
- adds r4, r2
- ldr r4, [r4]
- lsls r4, 4
- ldr r7, [r5]
- orrs r7, r4
- lsrs r4, r6, 8
- mov r5, r8
- ands r4, r5
- lsls r4, 2
- adds r4, r2
- ldr r4, [r4]
- lsls r4, 8
- orrs r7, r4
- lsrs r4, r6, 12
- ands r4, r5
- lsls r4, 2
- adds r4, r2
- ldr r4, [r4]
- lsls r4, 12
- orrs r7, r4
- lsrs r4, r6, 16
- ands r4, r5
- lsls r4, 2
- adds r4, r2
- ldr r4, [r4]
- lsls r4, 16
- orrs r7, r4
- lsrs r6, 20
- ands r6, r5
- lsls r6, 2
- adds r6, r2
- ldr r4, [r6]
- lsls r4, 20
- orrs r7, r4
- ldr r4, [r3]
- adds r5, r7, 0
- lsls r5, r4
- ldr r4, [r0, 0x4]
- orrs r4, r5
- str r4, [r0, 0x4]
- ldr r4, [r3, 0x4]
- lsrs r7, r4
- ldr r4, [r0, 0x24]
- orrs r4, r7
- str r4, [r0, 0x24]
- ldr r6, [r1, 0x8]
- adds r5, r6, 0
- mov r7, r8
- ands r5, r7
- lsls r5, 2
- adds r5, r2
- lsrs r4, r6, 4
- ands r4, r7
- lsls r4, 2
- adds r4, r2
- ldr r4, [r4]
- lsls r4, 4
- ldr r7, [r5]
- orrs r7, r4
- lsrs r4, r6, 8
- mov r5, r8
- ands r4, r5
- lsls r4, 2
- adds r4, r2
- ldr r4, [r4]
- lsls r4, 8
- orrs r7, r4
- lsrs r4, r6, 12
- ands r4, r5
- lsls r4, 2
- adds r4, r2
- ldr r4, [r4]
- lsls r4, 12
- orrs r7, r4
- lsrs r4, r6, 16
- ands r4, r5
- lsls r4, 2
- adds r4, r2
- ldr r4, [r4]
- lsls r4, 16
- orrs r7, r4
- lsrs r6, 20
- ands r6, r5
- lsls r6, 2
- adds r6, r2
- ldr r4, [r6]
- lsls r4, 20
- orrs r7, r4
- ldr r4, [r3]
- adds r5, r7, 0
- lsls r5, r4
- ldr r4, [r0, 0x8]
- orrs r4, r5
- str r4, [r0, 0x8]
- ldr r4, [r3, 0x4]
- lsrs r7, r4
- ldr r4, [r0, 0x28]
- orrs r4, r7
- str r4, [r0, 0x28]
- ldr r6, [r1, 0xC]
- adds r5, r6, 0
- mov r7, r8
- ands r5, r7
- lsls r5, 2
- adds r5, r2
- lsrs r4, r6, 4
- ands r4, r7
- lsls r4, 2
- adds r4, r2
- ldr r4, [r4]
- lsls r4, 4
- ldr r7, [r5]
- orrs r7, r4
- lsrs r4, r6, 8
- mov r5, r8
- ands r4, r5
- lsls r4, 2
- adds r4, r2
- ldr r4, [r4]
- lsls r4, 8
- orrs r7, r4
- lsrs r4, r6, 12
- ands r4, r5
- lsls r4, 2
- adds r4, r2
- ldr r4, [r4]
- lsls r4, 12
- orrs r7, r4
- lsrs r4, r6, 16
- ands r4, r5
- lsls r4, 2
- adds r4, r2
- ldr r4, [r4]
- lsls r4, 16
- orrs r7, r4
- lsrs r6, 20
- ands r6, r5
- lsls r6, 2
- adds r6, r2
- ldr r4, [r6]
- lsls r4, 20
- orrs r7, r4
- ldr r4, [r3]
- adds r5, r7, 0
- lsls r5, r4
- ldr r4, [r0, 0xC]
- orrs r4, r5
- str r4, [r0, 0xC]
- ldr r4, [r3, 0x4]
- lsrs r7, r4
- ldr r4, [r0, 0x2C]
- orrs r4, r7
- str r4, [r0, 0x2C]
- ldr r6, [r1, 0x10]
- adds r5, r6, 0
- mov r7, r8
- ands r5, r7
- lsls r5, 2
- adds r5, r2
- lsrs r4, r6, 4
- ands r4, r7
- lsls r4, 2
- adds r4, r2
- ldr r4, [r4]
- lsls r4, 4
- ldr r7, [r5]
- orrs r7, r4
- lsrs r4, r6, 8
- mov r5, r8
- ands r4, r5
- lsls r4, 2
- adds r4, r2
- ldr r4, [r4]
- lsls r4, 8
- orrs r7, r4
- lsrs r4, r6, 12
- ands r4, r5
- lsls r4, 2
- adds r4, r2
- ldr r4, [r4]
- lsls r4, 12
- orrs r7, r4
- lsrs r4, r6, 16
- ands r4, r5
- lsls r4, 2
- adds r4, r2
- ldr r4, [r4]
- lsls r4, 16
- orrs r7, r4
- lsrs r6, 20
- ands r6, r5
- lsls r6, 2
- adds r6, r2
- ldr r4, [r6]
- lsls r4, 20
- orrs r7, r4
- ldr r4, [r3]
- adds r5, r7, 0
- lsls r5, r4
- ldr r4, [r0, 0x10]
- orrs r4, r5
- str r4, [r0, 0x10]
- ldr r4, [r3, 0x4]
- lsrs r7, r4
- ldr r4, [r0, 0x30]
- orrs r4, r7
- str r4, [r0, 0x30]
- ldr r6, [r1, 0x14]
- adds r5, r6, 0
- mov r7, r8
- ands r5, r7
- lsls r5, 2
- adds r5, r2
- lsrs r4, r6, 4
- ands r4, r7
- lsls r4, 2
- adds r4, r2
- ldr r4, [r4]
- lsls r4, 4
- ldr r7, [r5]
- orrs r7, r4
- lsrs r4, r6, 8
- mov r5, r8
- ands r4, r5
- lsls r4, 2
- adds r4, r2
- ldr r4, [r4]
- lsls r4, 8
- orrs r7, r4
- lsrs r4, r6, 12
- ands r4, r5
- lsls r4, 2
- adds r4, r2
- ldr r4, [r4]
- lsls r4, 12
- orrs r7, r4
- lsrs r4, r6, 16
- ands r4, r5
- lsls r4, 2
- adds r4, r2
- ldr r4, [r4]
- lsls r4, 16
- orrs r7, r4
- lsrs r6, 20
- ands r6, r5
- lsls r6, 2
- adds r6, r2
- ldr r4, [r6]
- lsls r4, 20
- orrs r7, r4
- ldr r4, [r3]
- adds r5, r7, 0
- lsls r5, r4
- ldr r4, [r0, 0x14]
- orrs r4, r5
- str r4, [r0, 0x14]
- ldr r4, [r3, 0x4]
- lsrs r7, r4
- ldr r4, [r0, 0x34]
- orrs r4, r7
- str r4, [r0, 0x34]
- ldr r6, [r1, 0x18]
- adds r5, r6, 0
- mov r7, r8
- ands r5, r7
- lsls r5, 2
- adds r5, r2
- lsrs r4, r6, 4
- ands r4, r7
- lsls r4, 2
- adds r4, r2
- ldr r4, [r4]
- lsls r4, 4
- ldr r7, [r5]
- orrs r7, r4
- lsrs r4, r6, 8
- mov r5, r8
- ands r4, r5
- lsls r4, 2
- adds r4, r2
- ldr r4, [r4]
- lsls r4, 8
- orrs r7, r4
- lsrs r4, r6, 12
- ands r4, r5
- lsls r4, 2
- adds r4, r2
- ldr r4, [r4]
- lsls r4, 12
- orrs r7, r4
- lsrs r4, r6, 16
- ands r4, r5
- lsls r4, 2
- adds r4, r2
- ldr r4, [r4]
- lsls r4, 16
- orrs r7, r4
- lsrs r6, 20
- ands r6, r5
- lsls r6, 2
- adds r6, r2
- ldr r4, [r6]
- lsls r4, 20
- orrs r7, r4
- ldr r4, [r3]
- adds r5, r7, 0
- lsls r5, r4
- ldr r4, [r0, 0x18]
- orrs r4, r5
- str r4, [r0, 0x18]
- ldr r4, [r3, 0x4]
- lsrs r7, r4
- ldr r4, [r0, 0x38]
- orrs r4, r7
- str r4, [r0, 0x38]
- ldr r5, [r1, 0x1C]
- adds r4, r5, 0
- mov r6, r8
- ands r4, r6
- lsls r4, 2
- adds r4, r2
- lsrs r1, r5, 4
- ands r1, r6
- lsls r1, 2
- adds r1, r2
- ldr r1, [r1]
- lsls r1, 4
- ldr r7, [r4]
- orrs r7, r1
- lsrs r1, r5, 8
- ands r1, r6
- lsls r1, 2
- adds r1, r2
- ldr r1, [r1]
- lsls r1, 8
- orrs r7, r1
- lsrs r1, r5, 12
- ands r1, r6
- lsls r1, 2
- adds r1, r2
- ldr r1, [r1]
- lsls r1, 12
- orrs r7, r1
- lsrs r1, r5, 16
- ands r1, r6
- lsls r1, 2
- adds r1, r2
- ldr r1, [r1]
- lsls r1, 16
- orrs r7, r1
- lsrs r5, 20
- ands r5, r6
- lsls r5, 2
- adds r5, r2
- ldr r1, [r5]
- lsls r1, 20
- orrs r7, r1
- ldr r1, [r3]
- adds r2, r7, 0
- lsls r2, r1
- ldr r1, [r0, 0x1C]
- orrs r1, r2
- str r1, [r0, 0x1C]
- ldr r1, [r3, 0x4]
- lsrs r7, r1
- ldr r1, [r0, 0x3C]
- orrs r1, r7
- str r1, [r0, 0x3C]
- pop {r3}
- mov r8, r3
- pop {r4-r7}
- pop {r0}
- bx r0
- .align 2, 0
-_0800602C: .4byte gUnknown_081E6A3C
- thumb_func_end ShiftGlyphWidth6
-
- thumb_func_start ShiftGlyphWidth7
-ShiftGlyphWidth7: @ 8006030
- push {r4-r7,lr}
- mov r7, r8
- push {r7}
- lsls r3, 24
- lsrs r3, 21
- ldr r4, _08006414
- adds r3, r4
- ldr r6, [r1]
- movs r4, 0xF
- mov r8, r4
- adds r5, r6, 0
- ands r5, r4
- lsls r5, 2
- adds r5, r2
- lsrs r4, r6, 4
- mov r7, r8
- ands r4, r7
- lsls r4, 2
- adds r4, r2
- ldr r4, [r4]
- lsls r4, 4
- ldr r7, [r5]
- orrs r7, r4
- lsrs r4, r6, 8
- mov r5, r8
- ands r4, r5
- lsls r4, 2
- adds r4, r2
- ldr r4, [r4]
- lsls r4, 8
- orrs r7, r4
- lsrs r4, r6, 12
- ands r4, r5
- lsls r4, 2
- adds r4, r2
- ldr r4, [r4]
- lsls r4, 12
- orrs r7, r4
- lsrs r4, r6, 16
- ands r4, r5
- lsls r4, 2
- adds r4, r2
- ldr r4, [r4]
- lsls r4, 16
- orrs r7, r4
- lsrs r4, r6, 20
- ands r4, r5
- lsls r4, 2
- adds r4, r2
- ldr r4, [r4]
- lsls r4, 20
- orrs r7, r4
- lsrs r6, 24
- ands r6, r5
- lsls r6, 2
- adds r6, r2
- ldr r4, [r6]
- lsls r4, 24
- orrs r7, r4
- ldr r4, [r3]
- adds r5, r7, 0
- lsls r5, r4
- ldr r4, [r0]
- orrs r4, r5
- str r4, [r0]
- ldr r4, [r3, 0x4]
- lsrs r7, r4
- ldr r4, [r0, 0x20]
- orrs r4, r7
- str r4, [r0, 0x20]
- ldr r6, [r1, 0x4]
- adds r5, r6, 0
- mov r7, r8
- ands r5, r7
- lsls r5, 2
- adds r5, r2
- lsrs r4, r6, 4
- ands r4, r7
- lsls r4, 2
- adds r4, r2
- ldr r4, [r4]
- lsls r4, 4
- ldr r7, [r5]
- orrs r7, r4
- lsrs r4, r6, 8
- mov r5, r8
- ands r4, r5
- lsls r4, 2
- adds r4, r2
- ldr r4, [r4]
- lsls r4, 8
- orrs r7, r4
- lsrs r4, r6, 12
- ands r4, r5
- lsls r4, 2
- adds r4, r2
- ldr r4, [r4]
- lsls r4, 12
- orrs r7, r4
- lsrs r4, r6, 16
- ands r4, r5
- lsls r4, 2
- adds r4, r2
- ldr r4, [r4]
- lsls r4, 16
- orrs r7, r4
- lsrs r4, r6, 20
- ands r4, r5
- lsls r4, 2
- adds r4, r2
- ldr r4, [r4]
- lsls r4, 20
- orrs r7, r4
- lsrs r6, 24
- ands r6, r5
- lsls r6, 2
- adds r6, r2
- ldr r4, [r6]
- lsls r4, 24
- orrs r7, r4
- ldr r4, [r3]
- adds r5, r7, 0
- lsls r5, r4
- ldr r4, [r0, 0x4]
- orrs r4, r5
- str r4, [r0, 0x4]
- ldr r4, [r3, 0x4]
- lsrs r7, r4
- ldr r4, [r0, 0x24]
- orrs r4, r7
- str r4, [r0, 0x24]
- ldr r6, [r1, 0x8]
- adds r5, r6, 0
- mov r7, r8
- ands r5, r7
- lsls r5, 2
- adds r5, r2
- lsrs r4, r6, 4
- ands r4, r7
- lsls r4, 2
- adds r4, r2
- ldr r4, [r4]
- lsls r4, 4
- ldr r7, [r5]
- orrs r7, r4
- lsrs r4, r6, 8
- mov r5, r8
- ands r4, r5
- lsls r4, 2
- adds r4, r2
- ldr r4, [r4]
- lsls r4, 8
- orrs r7, r4
- lsrs r4, r6, 12
- ands r4, r5
- lsls r4, 2
- adds r4, r2
- ldr r4, [r4]
- lsls r4, 12
- orrs r7, r4
- lsrs r4, r6, 16
- ands r4, r5
- lsls r4, 2
- adds r4, r2
- ldr r4, [r4]
- lsls r4, 16
- orrs r7, r4
- lsrs r4, r6, 20
- ands r4, r5
- lsls r4, 2
- adds r4, r2
- ldr r4, [r4]
- lsls r4, 20
- orrs r7, r4
- lsrs r6, 24
- ands r6, r5
- lsls r6, 2
- adds r6, r2
- ldr r4, [r6]
- lsls r4, 24
- orrs r7, r4
- ldr r4, [r3]
- adds r5, r7, 0
- lsls r5, r4
- ldr r4, [r0, 0x8]
- orrs r4, r5
- str r4, [r0, 0x8]
- ldr r4, [r3, 0x4]
- lsrs r7, r4
- ldr r4, [r0, 0x28]
- orrs r4, r7
- str r4, [r0, 0x28]
- ldr r6, [r1, 0xC]
- adds r5, r6, 0
- mov r7, r8
- ands r5, r7
- lsls r5, 2
- adds r5, r2
- lsrs r4, r6, 4
- ands r4, r7
- lsls r4, 2
- adds r4, r2
- ldr r4, [r4]
- lsls r4, 4
- ldr r7, [r5]
- orrs r7, r4
- lsrs r4, r6, 8
- mov r5, r8
- ands r4, r5
- lsls r4, 2
- adds r4, r2
- ldr r4, [r4]
- lsls r4, 8
- orrs r7, r4
- lsrs r4, r6, 12
- ands r4, r5
- lsls r4, 2
- adds r4, r2
- ldr r4, [r4]
- lsls r4, 12
- orrs r7, r4
- lsrs r4, r6, 16
- ands r4, r5
- lsls r4, 2
- adds r4, r2
- ldr r4, [r4]
- lsls r4, 16
- orrs r7, r4
- lsrs r4, r6, 20
- ands r4, r5
- lsls r4, 2
- adds r4, r2
- ldr r4, [r4]
- lsls r4, 20
- orrs r7, r4
- lsrs r6, 24
- ands r6, r5
- lsls r6, 2
- adds r6, r2
- ldr r4, [r6]
- lsls r4, 24
- orrs r7, r4
- ldr r4, [r3]
- adds r5, r7, 0
- lsls r5, r4
- ldr r4, [r0, 0xC]
- orrs r4, r5
- str r4, [r0, 0xC]
- ldr r4, [r3, 0x4]
- lsrs r7, r4
- ldr r4, [r0, 0x2C]
- orrs r4, r7
- str r4, [r0, 0x2C]
- ldr r6, [r1, 0x10]
- adds r5, r6, 0
- mov r7, r8
- ands r5, r7
- lsls r5, 2
- adds r5, r2
- lsrs r4, r6, 4
- ands r4, r7
- lsls r4, 2
- adds r4, r2
- ldr r4, [r4]
- lsls r4, 4
- ldr r7, [r5]
- orrs r7, r4
- lsrs r4, r6, 8
- mov r5, r8
- ands r4, r5
- lsls r4, 2
- adds r4, r2
- ldr r4, [r4]
- lsls r4, 8
- orrs r7, r4
- lsrs r4, r6, 12
- ands r4, r5
- lsls r4, 2
- adds r4, r2
- ldr r4, [r4]
- lsls r4, 12
- orrs r7, r4
- lsrs r4, r6, 16
- ands r4, r5
- lsls r4, 2
- adds r4, r2
- ldr r4, [r4]
- lsls r4, 16
- orrs r7, r4
- lsrs r4, r6, 20
- ands r4, r5
- lsls r4, 2
- adds r4, r2
- ldr r4, [r4]
- lsls r4, 20
- orrs r7, r4
- lsrs r6, 24
- ands r6, r5
- lsls r6, 2
- adds r6, r2
- ldr r4, [r6]
- lsls r4, 24
- orrs r7, r4
- ldr r4, [r3]
- adds r5, r7, 0
- lsls r5, r4
- ldr r4, [r0, 0x10]
- orrs r4, r5
- str r4, [r0, 0x10]
- ldr r4, [r3, 0x4]
- lsrs r7, r4
- ldr r4, [r0, 0x30]
- orrs r4, r7
- str r4, [r0, 0x30]
- ldr r6, [r1, 0x14]
- adds r5, r6, 0
- mov r7, r8
- ands r5, r7
- lsls r5, 2
- adds r5, r2
- lsrs r4, r6, 4
- ands r4, r7
- lsls r4, 2
- adds r4, r2
- ldr r4, [r4]
- lsls r4, 4
- ldr r7, [r5]
- orrs r7, r4
- lsrs r4, r6, 8
- mov r5, r8
- ands r4, r5
- lsls r4, 2
- adds r4, r2
- ldr r4, [r4]
- lsls r4, 8
- orrs r7, r4
- lsrs r4, r6, 12
- ands r4, r5
- lsls r4, 2
- adds r4, r2
- ldr r4, [r4]
- lsls r4, 12
- orrs r7, r4
- lsrs r4, r6, 16
- ands r4, r5
- lsls r4, 2
- adds r4, r2
- ldr r4, [r4]
- lsls r4, 16
- orrs r7, r4
- lsrs r4, r6, 20
- ands r4, r5
- lsls r4, 2
- adds r4, r2
- ldr r4, [r4]
- lsls r4, 20
- orrs r7, r4
- lsrs r6, 24
- ands r6, r5
- lsls r6, 2
- adds r6, r2
- ldr r4, [r6]
- lsls r4, 24
- orrs r7, r4
- ldr r4, [r3]
- adds r5, r7, 0
- lsls r5, r4
- ldr r4, [r0, 0x14]
- orrs r4, r5
- str r4, [r0, 0x14]
- ldr r4, [r3, 0x4]
- lsrs r7, r4
- ldr r4, [r0, 0x34]
- orrs r4, r7
- str r4, [r0, 0x34]
- ldr r6, [r1, 0x18]
- adds r5, r6, 0
- mov r7, r8
- ands r5, r7
- lsls r5, 2
- adds r5, r2
- lsrs r4, r6, 4
- ands r4, r7
- lsls r4, 2
- adds r4, r2
- ldr r4, [r4]
- lsls r4, 4
- ldr r7, [r5]
- orrs r7, r4
- lsrs r4, r6, 8
- mov r5, r8
- ands r4, r5
- lsls r4, 2
- adds r4, r2
- ldr r4, [r4]
- lsls r4, 8
- orrs r7, r4
- lsrs r4, r6, 12
- ands r4, r5
- lsls r4, 2
- adds r4, r2
- ldr r4, [r4]
- lsls r4, 12
- orrs r7, r4
- lsrs r4, r6, 16
- ands r4, r5
- lsls r4, 2
- adds r4, r2
- ldr r4, [r4]
- lsls r4, 16
- orrs r7, r4
- lsrs r4, r6, 20
- ands r4, r5
- lsls r4, 2
- adds r4, r2
- ldr r4, [r4]
- lsls r4, 20
- orrs r7, r4
- lsrs r6, 24
- ands r6, r5
- lsls r6, 2
- adds r6, r2
- ldr r4, [r6]
- lsls r4, 24
- orrs r7, r4
- ldr r4, [r3]
- adds r5, r7, 0
- lsls r5, r4
- ldr r4, [r0, 0x18]
- orrs r4, r5
- str r4, [r0, 0x18]
- ldr r4, [r3, 0x4]
- lsrs r7, r4
- ldr r4, [r0, 0x38]
- orrs r4, r7
- str r4, [r0, 0x38]
- ldr r5, [r1, 0x1C]
- adds r4, r5, 0
- mov r6, r8
- ands r4, r6
- lsls r4, 2
- adds r4, r2
- lsrs r1, r5, 4
- ands r1, r6
- lsls r1, 2
- adds r1, r2
- ldr r1, [r1]
- lsls r1, 4
- ldr r7, [r4]
- orrs r7, r1
- lsrs r1, r5, 8
- ands r1, r6
- lsls r1, 2
- adds r1, r2
- ldr r1, [r1]
- lsls r1, 8
- orrs r7, r1
- lsrs r1, r5, 12
- ands r1, r6
- lsls r1, 2
- adds r1, r2
- ldr r1, [r1]
- lsls r1, 12
- orrs r7, r1
- lsrs r1, r5, 16
- ands r1, r6
- lsls r1, 2
- adds r1, r2
- ldr r1, [r1]
- lsls r1, 16
- orrs r7, r1
- lsrs r1, r5, 20
- ands r1, r6
- lsls r1, 2
- adds r1, r2
- ldr r1, [r1]
- lsls r1, 20
- orrs r7, r1
- lsrs r5, 24
- ands r5, r6
- lsls r5, 2
- adds r5, r2
- ldr r1, [r5]
- lsls r1, 24
- orrs r7, r1
- ldr r1, [r3]
- adds r2, r7, 0
- lsls r2, r1
- ldr r1, [r0, 0x1C]
- orrs r1, r2
- str r1, [r0, 0x1C]
- ldr r1, [r3, 0x4]
- lsrs r7, r1
- ldr r1, [r0, 0x3C]
- orrs r1, r7
- str r1, [r0, 0x3C]
- b _08006418
- .align 2, 0
-_08006414: .4byte gUnknown_081E6A3C
-_08006418:
- pop {r3}
- mov r8, r3
- pop {r4-r7}
- pop {r0}
- bx r0
- thumb_func_end ShiftGlyphWidth7
-
- thumb_func_start ShiftGlyphWidth8
-ShiftGlyphWidth8: @ 8006424
- push {r4-r7,lr}
- mov r7, r8
- push {r7}
- lsls r3, 24
- lsrs r3, 21
- ldr r4, _08006818
- adds r3, r4
- ldr r6, [r1]
- movs r4, 0xF
- mov r8, r4
- adds r5, r6, 0
- ands r5, r4
- lsls r5, 2
- adds r5, r2
- lsrs r4, r6, 4
- mov r7, r8
- ands r4, r7
- lsls r4, 2
- adds r4, r2
- ldr r4, [r4]
- lsls r4, 4
- ldr r7, [r5]
- orrs r7, r4
- lsrs r4, r6, 8
- mov r5, r8
- ands r4, r5
- lsls r4, 2
- adds r4, r2
- ldr r4, [r4]
- lsls r4, 8
- orrs r7, r4
- lsrs r4, r6, 12
- ands r4, r5
- lsls r4, 2
- adds r4, r2
- ldr r4, [r4]
- lsls r4, 12
- orrs r7, r4
- lsrs r4, r6, 16
- ands r4, r5
- lsls r4, 2
- adds r4, r2
- ldr r4, [r4]
- lsls r4, 16
- orrs r7, r4
- lsrs r4, r6, 20
- ands r4, r5
- lsls r4, 2
- adds r4, r2
- ldr r4, [r4]
- lsls r4, 20
- orrs r7, r4
- lsrs r4, r6, 24
- ands r4, r5
- lsls r4, 2
- adds r4, r2
- ldr r4, [r4]
- lsls r4, 24
- orrs r7, r4
- lsrs r6, 28
- lsls r6, 2
- adds r6, r2
- ldr r4, [r6]
- lsls r4, 28
- orrs r7, r4
- ldr r4, [r3]
- adds r5, r7, 0
- lsls r5, r4
- ldr r4, [r0]
- orrs r4, r5
- str r4, [r0]
- ldr r4, [r3, 0x4]
- lsrs r7, r4
- ldr r4, [r0, 0x20]
- orrs r4, r7
- str r4, [r0, 0x20]
- ldr r6, [r1, 0x4]
- adds r5, r6, 0
- mov r7, r8
- ands r5, r7
- lsls r5, 2
- adds r5, r2
- lsrs r4, r6, 4
- ands r4, r7
- lsls r4, 2
- adds r4, r2
- ldr r4, [r4]
- lsls r4, 4
- ldr r7, [r5]
- orrs r7, r4
- lsrs r4, r6, 8
- mov r5, r8
- ands r4, r5
- lsls r4, 2
- adds r4, r2
- ldr r4, [r4]
- lsls r4, 8
- orrs r7, r4
- lsrs r4, r6, 12
- ands r4, r5
- lsls r4, 2
- adds r4, r2
- ldr r4, [r4]
- lsls r4, 12
- orrs r7, r4
- lsrs r4, r6, 16
- ands r4, r5
- lsls r4, 2
- adds r4, r2
- ldr r4, [r4]
- lsls r4, 16
- orrs r7, r4
- lsrs r4, r6, 20
- ands r4, r5
- lsls r4, 2
- adds r4, r2
- ldr r4, [r4]
- lsls r4, 20
- orrs r7, r4
- lsrs r4, r6, 24
- ands r4, r5
- lsls r4, 2
- adds r4, r2
- ldr r4, [r4]
- lsls r4, 24
- orrs r7, r4
- lsrs r6, 28
- lsls r6, 2
- adds r6, r2
- ldr r4, [r6]
- lsls r4, 28
- orrs r7, r4
- ldr r4, [r3]
- adds r5, r7, 0
- lsls r5, r4
- ldr r4, [r0, 0x4]
- orrs r4, r5
- str r4, [r0, 0x4]
- ldr r4, [r3, 0x4]
- lsrs r7, r4
- ldr r4, [r0, 0x24]
- orrs r4, r7
- str r4, [r0, 0x24]
- ldr r6, [r1, 0x8]
- adds r5, r6, 0
- mov r7, r8
- ands r5, r7
- lsls r5, 2
- adds r5, r2
- lsrs r4, r6, 4
- ands r4, r7
- lsls r4, 2
- adds r4, r2
- ldr r4, [r4]
- lsls r4, 4
- ldr r7, [r5]
- orrs r7, r4
- lsrs r4, r6, 8
- mov r5, r8
- ands r4, r5
- lsls r4, 2
- adds r4, r2
- ldr r4, [r4]
- lsls r4, 8
- orrs r7, r4
- lsrs r4, r6, 12
- ands r4, r5
- lsls r4, 2
- adds r4, r2
- ldr r4, [r4]
- lsls r4, 12
- orrs r7, r4
- lsrs r4, r6, 16
- ands r4, r5
- lsls r4, 2
- adds r4, r2
- ldr r4, [r4]
- lsls r4, 16
- orrs r7, r4
- lsrs r4, r6, 20
- ands r4, r5
- lsls r4, 2
- adds r4, r2
- ldr r4, [r4]
- lsls r4, 20
- orrs r7, r4
- lsrs r4, r6, 24
- ands r4, r5
- lsls r4, 2
- adds r4, r2
- ldr r4, [r4]
- lsls r4, 24
- orrs r7, r4
- lsrs r6, 28
- lsls r6, 2
- adds r6, r2
- ldr r4, [r6]
- lsls r4, 28
- orrs r7, r4
- ldr r4, [r3]
- adds r5, r7, 0
- lsls r5, r4
- ldr r4, [r0, 0x8]
- orrs r4, r5
- str r4, [r0, 0x8]
- ldr r4, [r3, 0x4]
- lsrs r7, r4
- ldr r4, [r0, 0x28]
- orrs r4, r7
- str r4, [r0, 0x28]
- ldr r6, [r1, 0xC]
- adds r5, r6, 0
- mov r7, r8
- ands r5, r7
- lsls r5, 2
- adds r5, r2
- lsrs r4, r6, 4
- ands r4, r7
- lsls r4, 2
- adds r4, r2
- ldr r4, [r4]
- lsls r4, 4
- ldr r7, [r5]
- orrs r7, r4
- lsrs r4, r6, 8
- mov r5, r8
- ands r4, r5
- lsls r4, 2
- adds r4, r2
- ldr r4, [r4]
- lsls r4, 8
- orrs r7, r4
- lsrs r4, r6, 12
- ands r4, r5
- lsls r4, 2
- adds r4, r2
- ldr r4, [r4]
- lsls r4, 12
- orrs r7, r4
- lsrs r4, r6, 16
- ands r4, r5
- lsls r4, 2
- adds r4, r2
- ldr r4, [r4]
- lsls r4, 16
- orrs r7, r4
- lsrs r4, r6, 20
- ands r4, r5
- lsls r4, 2
- adds r4, r2
- ldr r4, [r4]
- lsls r4, 20
- orrs r7, r4
- lsrs r4, r6, 24
- ands r4, r5
- lsls r4, 2
- adds r4, r2
- ldr r4, [r4]
- lsls r4, 24
- orrs r7, r4
- lsrs r6, 28
- lsls r6, 2
- adds r6, r2
- ldr r4, [r6]
- lsls r4, 28
- orrs r7, r4
- ldr r4, [r3]
- adds r5, r7, 0
- lsls r5, r4
- ldr r4, [r0, 0xC]
- orrs r4, r5
- str r4, [r0, 0xC]
- ldr r4, [r3, 0x4]
- lsrs r7, r4
- ldr r4, [r0, 0x2C]
- orrs r4, r7
- str r4, [r0, 0x2C]
- ldr r6, [r1, 0x10]
- adds r5, r6, 0
- mov r7, r8
- ands r5, r7
- lsls r5, 2
- adds r5, r2
- lsrs r4, r6, 4
- ands r4, r7
- lsls r4, 2
- adds r4, r2
- ldr r4, [r4]
- lsls r4, 4
- ldr r7, [r5]
- orrs r7, r4
- lsrs r4, r6, 8
- mov r5, r8
- ands r4, r5
- lsls r4, 2
- adds r4, r2
- ldr r4, [r4]
- lsls r4, 8
- orrs r7, r4
- lsrs r4, r6, 12
- ands r4, r5
- lsls r4, 2
- adds r4, r2
- ldr r4, [r4]
- lsls r4, 12
- orrs r7, r4
- lsrs r4, r6, 16
- ands r4, r5
- lsls r4, 2
- adds r4, r2
- ldr r4, [r4]
- lsls r4, 16
- orrs r7, r4
- lsrs r4, r6, 20
- ands r4, r5
- lsls r4, 2
- adds r4, r2
- ldr r4, [r4]
- lsls r4, 20
- orrs r7, r4
- lsrs r4, r6, 24
- ands r4, r5
- lsls r4, 2
- adds r4, r2
- ldr r4, [r4]
- lsls r4, 24
- orrs r7, r4
- lsrs r6, 28
- lsls r6, 2
- adds r6, r2
- ldr r4, [r6]
- lsls r4, 28
- orrs r7, r4
- ldr r4, [r3]
- adds r5, r7, 0
- lsls r5, r4
- ldr r4, [r0, 0x10]
- orrs r4, r5
- str r4, [r0, 0x10]
- ldr r4, [r3, 0x4]
- lsrs r7, r4
- ldr r4, [r0, 0x30]
- orrs r4, r7
- str r4, [r0, 0x30]
- ldr r6, [r1, 0x14]
- adds r5, r6, 0
- mov r7, r8
- ands r5, r7
- lsls r5, 2
- adds r5, r2
- lsrs r4, r6, 4
- ands r4, r7
- lsls r4, 2
- adds r4, r2
- ldr r4, [r4]
- lsls r4, 4
- ldr r7, [r5]
- orrs r7, r4
- lsrs r4, r6, 8
- mov r5, r8
- ands r4, r5
- lsls r4, 2
- adds r4, r2
- ldr r4, [r4]
- lsls r4, 8
- orrs r7, r4
- lsrs r4, r6, 12
- ands r4, r5
- lsls r4, 2
- adds r4, r2
- ldr r4, [r4]
- lsls r4, 12
- orrs r7, r4
- lsrs r4, r6, 16
- ands r4, r5
- lsls r4, 2
- adds r4, r2
- ldr r4, [r4]
- lsls r4, 16
- orrs r7, r4
- lsrs r4, r6, 20
- ands r4, r5
- lsls r4, 2
- adds r4, r2
- ldr r4, [r4]
- lsls r4, 20
- orrs r7, r4
- lsrs r4, r6, 24
- ands r4, r5
- lsls r4, 2
- adds r4, r2
- ldr r4, [r4]
- lsls r4, 24
- orrs r7, r4
- lsrs r6, 28
- lsls r6, 2
- adds r6, r2
- ldr r4, [r6]
- lsls r4, 28
- orrs r7, r4
- ldr r4, [r3]
- adds r5, r7, 0
- lsls r5, r4
- ldr r4, [r0, 0x14]
- orrs r4, r5
- str r4, [r0, 0x14]
- ldr r4, [r3, 0x4]
- lsrs r7, r4
- ldr r4, [r0, 0x34]
- orrs r4, r7
- str r4, [r0, 0x34]
- ldr r6, [r1, 0x18]
- adds r5, r6, 0
- mov r7, r8
- ands r5, r7
- lsls r5, 2
- adds r5, r2
- lsrs r4, r6, 4
- ands r4, r7
- lsls r4, 2
- adds r4, r2
- ldr r4, [r4]
- lsls r4, 4
- ldr r7, [r5]
- orrs r7, r4
- lsrs r4, r6, 8
- mov r5, r8
- ands r4, r5
- lsls r4, 2
- adds r4, r2
- ldr r4, [r4]
- lsls r4, 8
- orrs r7, r4
- lsrs r4, r6, 12
- ands r4, r5
- lsls r4, 2
- adds r4, r2
- ldr r4, [r4]
- lsls r4, 12
- orrs r7, r4
- lsrs r4, r6, 16
- ands r4, r5
- lsls r4, 2
- adds r4, r2
- ldr r4, [r4]
- lsls r4, 16
- orrs r7, r4
- lsrs r4, r6, 20
- ands r4, r5
- lsls r4, 2
- adds r4, r2
- ldr r4, [r4]
- lsls r4, 20
- orrs r7, r4
- lsrs r4, r6, 24
- ands r4, r5
- lsls r4, 2
- adds r4, r2
- ldr r4, [r4]
- lsls r4, 24
- orrs r7, r4
- lsrs r6, 28
- lsls r6, 2
- adds r6, r2
- ldr r4, [r6]
- lsls r4, 28
- orrs r7, r4
- ldr r4, [r3]
- adds r5, r7, 0
- lsls r5, r4
- ldr r4, [r0, 0x18]
- orrs r4, r5
- str r4, [r0, 0x18]
- ldr r4, [r3, 0x4]
- lsrs r7, r4
- ldr r4, [r0, 0x38]
- orrs r4, r7
- str r4, [r0, 0x38]
- ldr r5, [r1, 0x1C]
- adds r4, r5, 0
- mov r6, r8
- ands r4, r6
- lsls r4, 2
- adds r4, r2
- lsrs r1, r5, 4
- ands r1, r6
- lsls r1, 2
- adds r1, r2
- ldr r1, [r1]
- lsls r1, 4
- ldr r7, [r4]
- orrs r7, r1
- lsrs r1, r5, 8
- ands r1, r6
- lsls r1, 2
- adds r1, r2
- ldr r1, [r1]
- lsls r1, 8
- orrs r7, r1
- lsrs r1, r5, 12
- ands r1, r6
- lsls r1, 2
- adds r1, r2
- ldr r1, [r1]
- lsls r1, 12
- b _0800681C
- .align 2, 0
-_08006818: .4byte gUnknown_081E6A3C
-_0800681C:
- orrs r7, r1
- lsrs r1, r5, 16
- ands r1, r6
- lsls r1, 2
- adds r1, r2
- ldr r1, [r1]
- lsls r1, 16
- orrs r7, r1
- lsrs r1, r5, 20
- ands r1, r6
- lsls r1, 2
- adds r1, r2
- ldr r1, [r1]
- lsls r1, 20
- orrs r7, r1
- lsrs r1, r5, 24
- ands r1, r6
- lsls r1, 2
- adds r1, r2
- ldr r1, [r1]
- lsls r1, 24
- orrs r7, r1
- lsrs r5, 28
- lsls r5, 2
- adds r5, r2
- ldr r1, [r5]
- lsls r1, 28
- orrs r7, r1
- ldr r1, [r3]
- adds r2, r7, 0
- lsls r2, r1
- ldr r1, [r0, 0x1C]
- orrs r1, r2
- str r1, [r0, 0x1C]
- ldr r1, [r3, 0x4]
- lsrs r7, r1
- ldr r1, [r0, 0x3C]
- orrs r1, r7
- str r1, [r0, 0x3C]
- pop {r3}
- mov r8, r3
- pop {r4-r7}
- pop {r0}
- bx r0
- thumb_func_end ShiftGlyphWidth8
-
- thumb_func_start sub_8006874
-sub_8006874: @ 8006874
- push {r4-r7,lr}
- sub sp, 0x1C
- adds r6, r0, 0
- adds r4, r1, 0
- adds r5, r2, 0
- movs r7, 0
- ldrb r0, [r6, 0x1]
- ldrb r1, [r6, 0x2]
- lsls r4, 16
- lsrs r4, 16
- add r3, sp, 0x14
- add r2, sp, 0x18
- str r2, [sp]
- adds r2, r4, 0
- bl sub_8003A1C
- add r1, sp, 0x4
- ldrb r0, [r6]
- strb r0, [r1]
- adds r2, r1, 0
- ldrb r0, [r6, 0x10]
- ldrb r1, [r6, 0x12]
- adds r0, r1
- movs r1, 0x7
- ands r0, r1
- strb r0, [r2, 0x1]
- adds r0, r2, 0
- strb r5, [r0, 0x2]
- ldr r0, [sp, 0x14]
- str r0, [sp, 0x8]
- adds r0, r6, 0
- movs r1, 0
- movs r2, 0
- bl GetTextRendererTileBufferIndex
- lsls r0, 16
- lsrs r0, 11
- ldr r1, [r6, 0x24]
- adds r1, r0
- str r1, [sp, 0xC]
- ldr r0, _080068D8
- str r0, [sp, 0x10]
- ldrb r0, [r6, 0x1]
- cmp r0, 0x6
- bhi _08006948
- lsls r0, 2
- ldr r1, _080068DC
- adds r0, r1
- ldr r0, [r0]
- mov pc, r0
- .align 2, 0
-_080068D8: .4byte 0x030003a4
-_080068DC: .4byte _080068E0
- .align 2, 0
-_080068E0:
- .4byte _080068FC
- .4byte _080068FC
- .4byte _080068FC
- .4byte _08006922
- .4byte _08006922
- .4byte _08006922
- .4byte _080068FC
-_080068FC:
- add r0, sp, 0x4
- bl sub_80050AC
- ldr r0, [sp, 0x18]
- str r0, [sp, 0x8]
- adds r0, r6, 0
- movs r1, 0
- movs r2, 0x1
- bl GetTextRendererTileBufferIndex
- lsls r0, 16
- lsrs r0, 11
- ldr r1, [r6, 0x24]
- adds r1, r0
- str r1, [sp, 0xC]
- add r0, sp, 0x4
- bl sub_80050AC
- b _08006946
-_08006922:
- add r0, sp, 0x4
- bl CopyGlyphToWindow
- ldr r0, [sp, 0x18]
- str r0, [sp, 0x8]
- adds r0, r6, 0
- movs r1, 0
- movs r2, 0x1
- bl GetTextRendererTileBufferIndex
- lsls r0, 16
- lsrs r0, 11
- ldr r1, [r6, 0x24]
- adds r1, r0
- str r1, [sp, 0xC]
- add r0, sp, 0x4
- bl CopyGlyphToWindow
-_08006946:
- adds r7, r0, 0
-_08006948:
- adds r0, r7, 0
- add sp, 0x1C
- pop {r4-r7}
- pop {r1}
- bx r1
- thumb_func_end sub_8006874
-
- thumb_func_start sub_8006954
-sub_8006954: @ 8006954
- push {r4-r7,lr}
- mov r7, r8
- push {r7}
- adds r5, r0, 0
- mov r8, r1
- bl sub_8003AF8
- adds r6, r0, 0
- mov r0, r8
- cmp r0, 0
- beq _080069CE
- cmp r6, 0
- beq _080069CE
- ldrb r0, [r5, 0x6]
- lsls r0, 28
- lsrs r7, r0, 16
- adds r0, r5, 0
- movs r1, 0
- movs r2, 0
- bl GetTextRendererTileBufferIndex
- adds r4, r0, 0
- lsls r4, 16
- lsrs r4, 16
- adds r0, r5, 0
- movs r1, 0
- movs r2, 0x1
- bl GetTextRendererTileBufferIndex
- lsls r0, 16
- lsrs r0, 16
- orrs r4, r7
- strh r4, [r6]
- adds r1, r6, 0
- adds r1, 0x40
- orrs r0, r7
- strh r0, [r1]
- mov r0, r8
- cmp r0, 0x2
- bne _080069CE
- adds r0, r5, 0
- movs r1, 0x1
- movs r2, 0
- bl GetTextRendererTileBufferIndex
- adds r4, r0, 0
- lsls r4, 16
- lsrs r4, 16
- adds r0, r5, 0
- movs r1, 0x1
- movs r2, 0x1
- bl GetTextRendererTileBufferIndex
- lsls r0, 16
- lsrs r0, 16
- orrs r4, r7
- strh r4, [r6, 0x2]
- adds r1, r6, 0
- adds r1, 0x42
- orrs r0, r7
- strh r0, [r1]
-_080069CE:
- pop {r3}
- mov r8, r3
- pop {r4-r7}
- pop {r0}
- bx r0
- thumb_func_end sub_8006954
-
- thumb_func_start GetTextRendererTileBufferIndex
-GetTextRendererTileBufferIndex: @ 80069D8
- push {r4,r5,lr}
- adds r3, r0, 0
- adds r5, r1, 0
- adds r4, r2, 0
- ldrb r0, [r3]
- cmp r0, 0x2
- bne _08006A0E
- ldrh r2, [r3, 0x1C]
- ldrh r0, [r3, 0x1A]
- adds r2, r0
- ldrh r0, [r3, 0x14]
- ldrb r1, [r3, 0x11]
- adds r0, r1
- asrs r0, 3
- adds r0, r4
- ldrb r1, [r3, 0x9]
- muls r0, r1
- adds r2, r0
- ldrb r0, [r3, 0x12]
- ldrb r1, [r3, 0x10]
- adds r0, r1
- asrs r0, 3
- adds r0, r5
- adds r2, r0
- lsls r2, 16
- lsrs r0, r2, 16
- b _08006A1E
-_08006A0E:
- ldrh r0, [r3, 0x1C]
- ldrh r3, [r3, 0x1A]
- adds r0, r3
- lsls r1, r5, 1
- adds r0, r1
- adds r0, r4
- lsls r0, 16
- lsrs r0, 16
-_08006A1E:
- pop {r4,r5}
- pop {r1}
- bx r1
- thumb_func_end GetTextRendererTileBufferIndex
diff --git a/asm/rom2.s b/asm/rom2.s
index ddb55797e..233e600d3 100644
--- a/asm/rom2.s
+++ b/asm/rom2.s
@@ -151,7 +151,7 @@ _08007190: .4byte 0x040000d4
_08007194: .4byte gUnknown_081E7350
_08007198: .4byte 0x80000110
_0800719C: .4byte 0x03002fb0
-_080071A0: .4byte gUnknown_081E29A8
+_080071A0: .4byte gBGControlRegs
thumb_func_end sub_8007128
thumb_func_start sub_80071A4
@@ -164,7 +164,7 @@ sub_80071A4: @ 80071A4
bl SetVBlankCallback
ldr r4, _0800724C
adds r0, r4, 0
- bl sub_8002A34
+ bl SetUpWindowConfig
adds r0, r4, 0
bl sub_8071C4C
bl sub_8007CEC
@@ -221,7 +221,7 @@ _080071E4:
bx r0
.align 2, 0
_08007248: .4byte sub_8007300
-_0800724C: .4byte gUnknown_081E6CE4
+_0800724C: .4byte gWindowConfig_81E6CE4
_08007250: .4byte 0x03002b74
_08007254: .4byte 0x00001111
_08007258: .4byte 0x03001770
@@ -1077,7 +1077,7 @@ _08007908:
adds r0, r2, r1
adds r1, r2
ldrb r1, [r1, 0x12]
- bl StopMusicWhileStringIsPrinted
+ bl SetStringCharset
b _0800798A
.align 2, 0
_0800791C: .4byte 0x03002978
@@ -2420,7 +2420,7 @@ _0800828A:
mov r1, r8
adds r0, r2, r1
adds r1, r2, r7
- bl CompareStringWithoutExtendedControlCodes
+ bl StringCompareWithoutExtCtrlCodes
cmp r0, 0
beq _080082BE
_080082AE:
@@ -2849,7 +2849,7 @@ sub_80085BC: @ 80085BC
bl SetVBlankCallback
ldr r4, _0800863C
adds r0, r4, 0
- bl sub_8002A34
+ bl SetUpWindowConfig
adds r0, r4, 0
bl sub_8071C4C
bl sub_8071EF4
@@ -2883,7 +2883,7 @@ sub_80085BC: @ 80085BC
bx r0
.align 2, 0
_08008638: .4byte sub_8007300
-_0800863C: .4byte gUnknown_081E7198
+_0800863C: .4byte gWindowConfig_81E7198
_08008640: .4byte 0x04000052
_08008644: .4byte 0x03001bb4
_08008648: .4byte sub_8007080
diff --git a/asm/rom3.s b/asm/rom3.s
index f258deb7e..325b2f91b 100644
--- a/asm/rom3.s
+++ b/asm/rom3.s
@@ -112,7 +112,7 @@ sub_8009708: @ 8009708
bl ResetSpriteData
bl FreeAllSpritePalettes
ldr r0, _080097D4
- bl sub_8002A34
+ bl SetUpWindowConfig
ldr r0, _080097D8
bl sub_8071C4C
cmp r4, 0
@@ -132,8 +132,8 @@ _080097C4: .4byte 0x85000100
_080097C8: .4byte 0x05000002
_080097CC: .4byte 0x810001ff
_080097D0: .4byte gUnknown_081E797C
-_080097D4: .4byte gUnknown_081E6C3C
-_080097D8: .4byte gUnknown_081E6CE4
+_080097D4: .4byte gWindowConfig_81E6C3C
+_080097D8: .4byte gWindowConfig_81E6CE4
_080097DC:
movs r0, 0x1
negs r0, r0
@@ -1398,7 +1398,7 @@ task_new_game_prof_birch_speech_1: @ 800A1F4
lsls r4, 24
lsrs r4, 24
ldr r0, _0800A2B0
- bl sub_8002A34
+ bl SetUpWindowConfig
ldr r0, _0800A2B4
bl sub_8071C4C
ldr r0, _0800A2B8
@@ -1474,8 +1474,8 @@ task_new_game_prof_birch_speech_1: @ 800A1F4
pop {r0}
bx r0
.align 2, 0
-_0800A2B0: .4byte gUnknown_081E6C3C
-_0800A2B4: .4byte gUnknown_081E6CE4
+_0800A2B0: .4byte gWindowConfig_81E6C3C
+_0800A2B4: .4byte gWindowConfig_81E6CE4
_0800A2B8: .4byte 0x04000040
_0800A2BC: .4byte gUnknown_081E768C
_0800A2C0: .4byte gUnknown_081E7834
@@ -3312,7 +3312,7 @@ new_game_prof_birch_speech_part2_start: @ 800B060
adds r0, r5, 0
bl AddBirchSpeechObjects
ldr r0, _0800B168
- bl sub_8002A34
+ bl SetUpWindowConfig
ldr r0, _0800B16C
bl sub_8071C4C
ldr r0, _0800B170
@@ -3335,8 +3335,8 @@ _0800B158: .4byte gUnknown_081E764C
_0800B15C: .4byte sub_800AAEC
_0800B160: .4byte 0x03004b20
_0800B164: .4byte 0x0000ffc4
-_0800B168: .4byte gUnknown_081E6C3C
-_0800B16C: .4byte gUnknown_081E6CE4
+_0800B168: .4byte gWindowConfig_81E6C3C
+_0800B16C: .4byte gWindowConfig_81E6CE4
_0800B170: .4byte 0x02024ea4
_0800B174:
strh r0, [r4, 0x14]
@@ -8967,7 +8967,7 @@ _0800DC9C:
adds r0, r4, 0
movs r2, 0xA0
movs r3, 0x15
- bl CreateTextRenderer
+ bl InitWindow
adds r0, r4, 0
bl sub_8002F44
ldr r1, _0800DCC8
@@ -9018,7 +9018,7 @@ _0800DD08:
adds r0, r4, 0
movs r2, 0xA0
movs r3, 0x15
- bl CreateTextRenderer
+ bl InitWindow
adds r0, r4, 0
bl sub_8002F44
ldr r1, _0800DD34
@@ -9053,7 +9053,7 @@ _0800DD38:
adds r0, r4, 0
movs r2, 0xA0
movs r3, 0x15
- bl CreateTextRenderer
+ bl InitWindow
adds r0, r4, 0
bl sub_8002F44
ldr r1, _0800DD8C
@@ -9090,7 +9090,7 @@ _0800DDA8:
adds r0, r4, 0
movs r2, 0xA0
movs r3, 0x6
- bl CreateTextRenderer
+ bl InitWindow
adds r0, r4, 0
bl sub_8002F44
ldr r1, _0800DDEC
@@ -9099,7 +9099,7 @@ _0800DDA8:
movs r2, 0xA8
movs r3, 0x15
_0800DDCA:
- bl CreateTextRenderer
+ bl InitWindow
adds r0, r4, 0
bl sub_8002F44
b _0800DE1C
@@ -9118,7 +9118,7 @@ _0800DDF0:
adds r0, r4, 0
movs r2, 0xA0
movs r3, 0x15
- bl CreateTextRenderer
+ bl InitWindow
adds r0, r4, 0
bl sub_8002F44
ldr r1, _0800DE2C
@@ -9126,7 +9126,7 @@ _0800DDF0:
adds r0, r4, 0
movs r2, 0xA8
movs r3, 0x6
- bl CreateTextRenderer
+ bl InitWindow
adds r0, r4, 0
bl sub_8002F44
_0800DE1C:
@@ -10383,7 +10383,7 @@ _0800E868:
bl sub_80895F8
ldr r4, _0800E92C
adds r0, r4, 0
- bl sub_8002A34
+ bl SetUpWindowConfig
bl sub_8073B94
ldr r0, _0800E930
movs r1, 0
@@ -10407,13 +10407,13 @@ _0800E868:
strb r0, [r1]
ldr r0, _0800E954
adds r1, r4, 0
- bl sub_8002D54
+ bl InitWindowFromConfig
ldr r0, _0800E958
ldr r1, _0800E95C
- bl sub_8002D54
+ bl InitWindowFromConfig
ldr r0, _0800E960
ldr r1, _0800E964
- bl sub_8002D54
+ bl InitWindowFromConfig
bl sub_800D6D4
bl sub_800DAB8
bl ResetSpriteData
@@ -10444,7 +10444,7 @@ _0800E91C: .4byte 0x03004240
_0800E920: .4byte 0x03004de0
_0800E924: .4byte gUnknown_081F9674
_0800E928: .4byte 0x0000ff10
-_0800E92C: .4byte gUnknown_081E6C58
+_0800E92C: .4byte gWindowConfig_81E6C58
_0800E930: .4byte 0x030042a4
_0800E934: .4byte 0x030042a0
_0800E938: .4byte 0x030042c0
@@ -10456,9 +10456,9 @@ _0800E94C: .4byte 0x030041b8
_0800E950: .4byte 0x0300428c
_0800E954: .4byte 0x03004210
_0800E958: .4byte 0x030041d0
-_0800E95C: .4byte gUnknown_081E71D0
+_0800E95C: .4byte gWindowConfig_81E71D0
_0800E960: .4byte 0x03004250
-_0800E964: .4byte gUnknown_081E71EC
+_0800E964: .4byte gWindowConfig_81E71EC
_0800E968: .4byte 0x030028f8
_0800E96C: .4byte sub_800FCFC
_0800E970: .4byte 0x020239f8
@@ -10848,7 +10848,7 @@ shedinja_something: @ 800EC44
bl PokemonGetField
ldr r1, _0800EC98
mov r0, sp
- bl CompareStringWithoutExtendedControlCodes
+ bl StringCompareWithoutExtCtrlCodes
cmp r0, 0
bne _0800EC8C
adds r0, r4, 0
@@ -11341,7 +11341,7 @@ _0800F03E:
bl pokemon_get_gender
strb r0, [r5, 0x1C]
adds r0, r7, 0
- bl StripExtendedControlCodes
+ bl SkipExtCtrlCodes
adds r0, r4, 0
movs r1, 0x3
bl PokemonGetField
@@ -13369,7 +13369,7 @@ _08010084:
cmp r1, 0x9F
ble _08010084
adds r0, r5, 0
- bl sub_8002A34
+ bl SetUpWindowConfig
bl sub_8073B94
ldr r0, _08010164
movs r4, 0
@@ -13390,13 +13390,13 @@ _08010084:
strh r4, [r0]
ldr r0, _08010184
adds r1, r5, 0
- bl sub_8002D54
+ bl InitWindowFromConfig
ldr r0, _08010188
ldr r1, _0801018C
- bl sub_8002D54
+ bl InitWindowFromConfig
ldr r0, _08010190
ldr r1, _08010194
- bl sub_8002D54
+ bl InitWindowFromConfig
bl sub_800D6D4
ldr r0, _08010198
movs r1, 0
@@ -13448,7 +13448,7 @@ _0801014C: .4byte 0x00005051
_08010150: .4byte 0x030042c4
_08010154: .4byte 0x03004240
_08010158: .4byte 0x03004de0
-_0801015C: .4byte gUnknown_081E6C58
+_0801015C: .4byte gWindowConfig_81E6C58
_08010160: .4byte 0x0000ff10
_08010164: .4byte 0x030042a4
_08010168: .4byte 0x030042a0
@@ -13460,9 +13460,9 @@ _0801017C: .4byte 0x030041b0
_08010180: .4byte 0x030041b8
_08010184: .4byte 0x03004210
_08010188: .4byte 0x030041d0
-_0801018C: .4byte gUnknown_081E71D0
+_0801018C: .4byte gWindowConfig_81E71D0
_08010190: .4byte 0x03004250
-_08010194: .4byte gUnknown_081E71EC
+_08010194: .4byte gWindowConfig_81E71EC
_08010198: .4byte gUnknown_08D004E0
_0801019C: .4byte 0x0400004a
_080101A0: .4byte 0x030028f8
@@ -51793,7 +51793,7 @@ sub_8023A80: @ 8023A80
str r0, [sp]
adds r0, r4, 0
movs r3, 0x19
- bl CreateTextRenderer
+ bl InitWindow
adds r0, r4, 0
bl sub_8002F44
ldr r1, _08023AD0
@@ -53784,7 +53784,7 @@ _08024AC4:
str r0, [sp]
adds r0, r4, 0
movs r3, 0xC
- bl CreateTextRenderer
+ bl InitWindow
adds r0, r4, 0
bl sub_8002F44
ldr r1, _08024AEC
@@ -53905,7 +53905,7 @@ _08024BC0:
str r0, [sp]
adds r0, r4, 0
movs r3, 0xC
- bl CreateTextRenderer
+ bl InitWindow
adds r0, r4, 0
bl sub_8002F44
ldr r1, _08024BFC
@@ -69759,7 +69759,7 @@ _0802C9F4:
adds r0, r4, 0
movs r2, 0x17
movs r3, 0x37
- bl sub_8004758
+ bl FillWindowRect
ldr r1, _0802CA50
movs r2, 0xA4
lsls r2, 2
@@ -69767,7 +69767,7 @@ _0802C9F4:
str r0, [sp]
adds r0, r4, 0
movs r3, 0x17
- bl CreateTextRenderer
+ bl InitWindow
adds r0, r4, 0
bl sub_8002F44
ldr r1, _0802CA54
@@ -70297,7 +70297,7 @@ _0802CE1C:
adds r0, r4, 0
movs r2, 0x17
movs r3, 0x37
- bl sub_8004758
+ bl FillWindowRect
ldr r1, _0802CF40
movs r2, 0xA4
lsls r2, 2
@@ -70305,7 +70305,7 @@ _0802CE1C:
str r0, [sp]
adds r0, r4, 0
movs r3, 0x17
- bl CreateTextRenderer
+ bl InitWindow
adds r0, r4, 0
bl sub_8002F44
bl sub_802E220
@@ -70349,7 +70349,7 @@ _0802CE78:
adds r0, r4, 0
movs r2, 0x17
movs r3, 0x37
- bl sub_8004758
+ bl FillWindowRect
ldr r1, _0802CF40
movs r2, 0xA4
lsls r2, 2
@@ -70357,7 +70357,7 @@ _0802CE78:
str r0, [sp]
adds r0, r4, 0
movs r3, 0x17
- bl CreateTextRenderer
+ bl InitWindow
adds r0, r4, 0
bl sub_8002F44
bl sub_802E220
@@ -72631,7 +72631,7 @@ _0802E194:
_0802E196:
str r0, [sp]
adds r0, r4, 0
- bl CreateTextRenderer
+ bl InitWindow
ldr r0, _0802E1AC
bl sub_8002F44
add sp, 0x4
@@ -72662,7 +72662,7 @@ sub_802E1B0: @ 802E1B0
str r2, [sp, 0x4]
movs r2, 0x1
movs r3, 0x37
- bl sub_8004758
+ bl FillWindowRect
movs r6, 0
_0802E1DA:
lsls r0, r6, 24
@@ -72761,7 +72761,7 @@ sub_802E220: @ 802E220
str r0, [sp]
adds r0, r4, 0
movs r3, 0x19
- bl CreateTextRenderer
+ bl InitWindow
adds r0, r4, 0
bl sub_8002F44
_0802E2B0:
@@ -72801,7 +72801,7 @@ sub_802E2D4: @ 802E2D4
adds r0, r4, 0
movs r2, 0x17
movs r3, 0x37
- bl sub_8004758
+ bl FillWindowRect
ldr r1, _0802E324
movs r2, 0xA4
lsls r2, 2
@@ -72809,7 +72809,7 @@ sub_802E2D4: @ 802E2D4
str r0, [sp]
adds r0, r4, 0
movs r3, 0x13
- bl CreateTextRenderer
+ bl InitWindow
b _0802E388
.align 2, 0
_0802E314: .4byte 0x02023a60
@@ -72853,7 +72853,7 @@ _0802E328:
adds r0, r4, 0
movs r2, 0x17
movs r3, 0x39
- bl sub_8004758
+ bl FillWindowRect
ldr r1, _0802E398
movs r2, 0xB0
lsls r2, 2
@@ -72861,7 +72861,7 @@ _0802E328:
str r0, [sp]
adds r0, r4, 0
movs r3, 0x17
- bl CreateTextRenderer
+ bl InitWindow
_0802E388:
ldr r0, _0802E3AC
bl sub_8002F44
@@ -76725,7 +76725,7 @@ sub_803037C: @ 803037C
movs r1, 0xA
movs r2, 0x2
movs r3, 0xF
- bl sub_8004758
+ bl FillWindowRect
movs r0, 0x10
str r0, [sp]
movs r0, 0x26
@@ -76734,7 +76734,7 @@ sub_803037C: @ 803037C
movs r1, 0xA
movs r2, 0x2
movs r3, 0x23
- bl sub_8004758
+ bl FillWindowRect
ldr r1, _08030440
ldr r0, _08030444
ldrb r0, [r0]
@@ -76749,7 +76749,7 @@ sub_803037C: @ 803037C
str r0, [sp]
adds r0, r4, 0
movs r3, 0x12
- bl CreateTextRenderer
+ bl InitWindow
adds r0, r4, 0
bl sub_8002F44
ldr r1, _08030450
@@ -76783,7 +76783,7 @@ _080303EC:
str r0, [sp]
adds r0, r4, 0
movs r3, 0x2
- bl CreateTextRenderer
+ bl InitWindow
adds r0, r4, 0
bl sub_8002F44
add sp, 0x8
@@ -76878,7 +76878,7 @@ sub_80304A8: @ 80304A8
str r0, [sp]
adds r0, r4, 0
movs r3, 0x17
- bl CreateTextRenderer
+ bl InitWindow
adds r0, r4, 0
bl sub_8002F44
_08030500:
@@ -97793,7 +97793,7 @@ _0803AE68:
mov r2, r9
bl pokemon_setattr
add r0, sp, 0x10
- bl StripExtendedControlCodes
+ bl SkipExtCtrlCodes
adds r0, r7, 0
movs r1, 0x2
add r2, sp, 0x10
@@ -101911,10 +101911,10 @@ _0803CE42:
strb r0, [r1]
adds r0, r7, 0
adds r1, r3, 0
- bl StopMusicWhileStringIsPrinted
+ bl SetStringCharset
_0803CE50:
adds r0, r7, 0
- bl StringGetLength
+ bl StringLength
lsls r0, 16
lsrs r4, r0, 16
b _0803D1DC
@@ -107791,7 +107791,7 @@ sub_803FB68: @ 803FB68
ldr r4, _0803FBB8
adds r0, r4
adds r1, r5, 0
- bl CompareStringWithoutExtendedControlCodes
+ bl StringCompareWithoutExtCtrlCodes
cmp r0, 0
bne _0803FBA8
mov r2, r8
@@ -110162,7 +110162,7 @@ _08040D68:
subs r1, 0xB
_08040D70:
adds r0, r4, 0
- bl CompareStringWithoutExtendedControlCodes
+ bl StringCompareWithoutExtCtrlCodes
movs r3, 0
cmp r0, 0
bne _08040D7E
@@ -113036,7 +113036,7 @@ sub_80422C4: @ 80422C4
bl PokemonGetEncryptedField
adds r0, r5, 0
adds r1, r4, 0
- bl StopMusicWhileStringIsPrinted
+ bl SetStringCharset
_080422FC:
adds r4, r6, 0
adds r4, 0x50
@@ -114069,13 +114069,13 @@ sub_8042ABC: @ 8042ABC
adds r6, 0x2C
mov r0, sp
adds r1, r6, 0
- bl CompareStringWithoutExtendedControlCodes
+ bl StringCompareWithoutExtCtrlCodes
cmp r0, 0
bne _08042B08
ldr r0, _08042B30
adds r1, r5, 0
adds r1, 0x24
- bl CompareStringWithoutExtendedControlCodes
+ bl StringCompareWithoutExtCtrlCodes
cmp r0, 0
beq _08042B40
_08042B08:
@@ -114380,12 +114380,12 @@ _08042D8C: .4byte 0x0202e8ce
_08042D90:
ldr r5, _08042DBC
adds r0, r5, 0
- bl sub_8002A34
+ bl SetUpWindowConfig
ldr r4, _08042DC0
ldr r0, [r4]
adds r0, 0x8
adds r1, r5, 0
- bl sub_8002D54
+ bl InitWindowFromConfig
movs r0, 0x14
bl sub_8064EF4
ldr r1, [r4]
@@ -114396,7 +114396,7 @@ _08042D90:
bl sub_8064F08
b _08042F04
.align 2, 0
-_08042DBC: .4byte gUnknown_081E6F84
+_08042DBC: .4byte gWindowConfig_81E6F84
_08042DC0: .4byte 0x0300481c
_08042DC4:
ldr r0, _08042DFC
@@ -124544,7 +124544,7 @@ sub_8047CE8: @ 8047CE8
pop {r0}
bx r0
.align 2, 0
-_08047D44: .4byte gUnknown_081E725C
+_08047D44: .4byte gWindowConfig_81E725C
_08047D48: .4byte 0x020296cc
_08047D4C: .4byte 0x02024ea4
_08047D50: .4byte 0x03002978
@@ -124558,7 +124558,7 @@ sub_8047D58: @ 8047D58
push {r7}
sub sp, 0x18
ldr r0, _08047E30
- bl StringGetLength
+ bl StringLength
lsls r0, 16
lsrs r0, 16
movs r1, 0
@@ -124609,7 +124609,7 @@ _08047D86:
lsls r0, 2
ldr r1, _08047E3C
adds r0, r1
- bl StringGetLength
+ bl StringLength
lsls r0, 16
lsrs r0, 16
movs r1, 0
@@ -124798,11 +124798,11 @@ _08047F48:
bl sub_8071C4C
ldr r4, _0804802C
adds r0, r4, 0
- bl sub_8002A34
+ bl SetUpWindowConfig
ldr r0, [r5]
adds r0, 0x4
adds r1, r4, 0
- bl sub_8002D54
+ bl InitWindowFromConfig
movs r0, 0x14
bl sub_8064EF4
ldr r1, [r5]
@@ -124875,8 +124875,8 @@ _08048018: .4byte 0x03004824
_0804801C: .4byte 0x02017000
_08048020: .4byte 0x06002800
_08048024: .4byte sub_80489F4
-_08048028: .4byte gUnknown_081E6CE4
-_0804802C: .4byte gUnknown_081E6F84
+_08048028: .4byte gWindowConfig_81E6CE4
+_0804802C: .4byte gWindowConfig_81E6F84
_08048030: .4byte 0x03000508
_08048034: .4byte 0x03001770
_08048038: .4byte 0x0000043c
@@ -125035,7 +125035,7 @@ _08048172:
movs r1, 0
movs r2, 0
movs r3, 0
- bl sub_80047C8
+ bl FillWindowRect_DefaultPalette
movs r1, 0x80
lsls r1, 19
movs r0, 0
@@ -125493,11 +125493,11 @@ _0804857C:
bl sub_8071C4C
ldr r4, _08048644
adds r0, r4, 0
- bl sub_8002A34
+ bl SetUpWindowConfig
ldr r0, [r5]
adds r0, 0x4
adds r1, r4, 0
- bl sub_8002D54
+ bl InitWindowFromConfig
movs r0, 0x14
bl sub_8064EF4
ldr r1, [r5]
@@ -125560,8 +125560,8 @@ _08048630: .4byte 0x03004824
_08048634: .4byte 0x02017000
_08048638: .4byte 0x06002800
_0804863C: .4byte sub_80489F4
-_08048640: .4byte gUnknown_081E6CE4
-_08048644: .4byte gUnknown_081E6F84
+_08048640: .4byte gWindowConfig_81E6CE4
+_08048644: .4byte gWindowConfig_81E6F84
_08048648: .4byte 0x03000508
_0804864C: .4byte 0x03001770
_08048650: .4byte 0x0000043c
@@ -126766,7 +126766,7 @@ _0804901E:
bl PokemonGetField
mov r0, sp
ldr r1, _08049074
- bl CompareStringWithoutExtendedControlCodes
+ bl StringCompareWithoutExtCtrlCodes
cmp r0, 0
bne _0804905E
adds r0, r4, 0
@@ -128816,7 +128816,7 @@ _08049F8E:
str r1, [sp, 0x4]
movs r1, 0
movs r3, 0
- bl sub_80047C8
+ bl FillWindowRect_DefaultPalette
ldr r1, _0804A09C
ldr r0, [r1]
adds r0, 0xC8
@@ -129148,7 +129148,7 @@ _0804A2F4:
_0804A31E:
ldr r0, _0804A338
adds r1, r5, 0
- bl GetStringWidthGivenTextRendererTemplate
+ bl GetStringWidthGivenWindowConfig
lsls r0, 24
lsrs r0, 24
add sp, 0xC
@@ -129157,7 +129157,7 @@ _0804A31E:
bx r1
.align 2, 0
_0804A334: .4byte 0x030045c0
-_0804A338: .4byte gUnknown_081E7294
+_0804A338: .4byte gWindowConfig_81E7294
thumb_func_end sub_804A2B4
thumb_func_start sub_804A33C
@@ -129339,7 +129339,7 @@ _0804A484:
mov r1, sp
adds r1, 0x22
ldr r0, _0804A518
- bl GetStringWidthGivenTextRendererTemplate
+ bl GetStringWidthGivenWindowConfig
lsls r0, 24
lsrs r0, 24
movs r1, 0x32
@@ -129395,7 +129395,7 @@ _0804A504:
bx r0
.align 2, 0
_0804A514: .4byte 0x030045c0
-_0804A518: .4byte gUnknown_081E7294
+_0804A518: .4byte gWindowConfig_81E7294
thumb_func_end sub_804A41C
thumb_func_start sub_804A51C
@@ -129791,7 +129791,7 @@ sub_804A80C: @ 804A80C
str r1, [sp, 0x4]
movs r1, 0
movs r3, 0
- bl sub_80047C8
+ bl FillWindowRect_DefaultPalette
movs r0, 0x1
bl sub_804A41C
add sp, 0x8
@@ -129821,7 +129821,7 @@ sub_804A840: @ 804A840
str r1, [sp, 0x4]
movs r1, 0
movs r3, 0
- bl sub_80047C8
+ bl FillWindowRect_DefaultPalette
ldr r0, [r4]
adds r0, 0xC8
ldr r3, _0804A8A4
@@ -129860,7 +129860,7 @@ _0804A8A8:
str r1, [sp, 0x4]
movs r1, 0
movs r3, 0
- bl sub_80047C8
+ bl FillWindowRect_DefaultPalette
ldr r0, [r4]
adds r0, 0xC8
ldr r3, _0804A92C
@@ -130408,7 +130408,7 @@ sub_804ACD8: @ 804ACD8
pop {r0}
bx r0
.align 2, 0
-_0804ACF0: .4byte gUnknown_081E725C
+_0804ACF0: .4byte gWindowConfig_81E725C
thumb_func_end sub_804ACD8
thumb_func_start sub_804ACF4
@@ -131419,11 +131419,11 @@ _0804B47C:
bl sub_804B228
ldr r4, _0804B57C
adds r0, r4, 0
- bl sub_8002A34
+ bl SetUpWindowConfig
ldr r0, [r6]
adds r0, 0x4
adds r1, r4, 0
- bl sub_8002D54
+ bl InitWindowFromConfig
movs r0, 0x2
bl sub_8064EF4
ldr r1, [r6]
@@ -131514,7 +131514,7 @@ _0804B47C:
_0804B570: .4byte 0x03004828
_0804B574: .4byte 0x0201f000
_0804B578: .4byte sub_804B210
-_0804B57C: .4byte gUnknown_081E6F84
+_0804B57C: .4byte gWindowConfig_81E6F84
_0804B580: .4byte 0x03002b74
_0804B584: .4byte 0x00001144
_0804B588: .4byte 0x03001770
@@ -131821,11 +131821,11 @@ _0804B7F4:
bl sub_804B228
ldr r4, _0804B900
adds r0, r4, 0
- bl sub_8002A34
+ bl SetUpWindowConfig
ldr r0, [r5]
adds r0, 0x4
adds r1, r4, 0
- bl sub_8002D54
+ bl InitWindowFromConfig
movs r0, 0x2
bl sub_8064EF4
ldr r1, [r5]
@@ -131899,7 +131899,7 @@ _0804B8F0: .4byte 0x030045c0
_0804B8F4: .4byte 0x03004828
_0804B8F8: .4byte 0x0201f000
_0804B8FC: .4byte sub_804B210
-_0804B900: .4byte gUnknown_081E717C
+_0804B900: .4byte gWindowConfig_81E717C
_0804B904: .4byte 0x03002b74
_0804B908: .4byte 0x00001144
_0804B90C: .4byte 0x03001770
@@ -133424,7 +133424,7 @@ _0804C718:
movs r1, 0
movs r2, 0
movs r3, 0x1D
- bl sub_80047FC
+ bl ZeroFillWindowRect
ldr r4, _0804C794
ldr r1, _0804C798
adds r0, r4, 0
@@ -134934,7 +134934,7 @@ _0804D3C4:
movs r1, 0
movs r2, 0
movs r3, 0x1D
- bl sub_80047FC
+ bl ZeroFillWindowRect
ldr r4, _0804D414
ldr r1, _0804D418
adds r0, r4, 0
@@ -134994,7 +134994,7 @@ _0804D43E:
movs r1, 0
movs r2, 0
movs r3, 0x1D
- bl sub_80047FC
+ bl ZeroFillWindowRect
ldr r4, _0804D484
ldr r1, _0804D488
adds r0, r4, 0
@@ -136142,7 +136142,7 @@ _0804DE4C:
movs r1, 0
movs r2, 0
movs r3, 0x1D
- bl sub_80047FC
+ bl ZeroFillWindowRect
ldr r4, _0804DE94
ldr r1, _0804DE98
adds r0, r4, 0
@@ -136233,7 +136233,7 @@ _0804DF14:
movs r1, 0
movs r2, 0
movs r3, 0x1D
- bl sub_80047FC
+ bl ZeroFillWindowRect
ldr r2, [r4]
adds r0, r2, 0x4
ldr r1, _0804DF50
@@ -137006,7 +137006,7 @@ _0804E5AC:
bl SetVBlankCallback
ldr r4, _0804E60C
adds r0, r4, 0
- bl sub_8002A34
+ bl SetUpWindowConfig
adds r0, r4, 0
bl sub_8071C4C
ldr r3, _0804E610
@@ -137039,7 +137039,7 @@ _0804E5AC:
bl sub_8051474
b _0804E71A
.align 2, 0
-_0804E60C: .4byte gUnknown_081E6F68
+_0804E60C: .4byte gWindowConfig_81E6F68
_0804E610: .4byte 0x03004854
_0804E614:
bl sub_804E2EC
@@ -137665,7 +137665,7 @@ _0804EBBC:
bl SetVBlankCallback
ldr r4, _0804EC64
adds r0, r4, 0
- bl sub_8002A34
+ bl SetUpWindowConfig
adds r0, r4, 0
bl sub_8071C4C
ldr r1, _0804EC68
@@ -137737,7 +137737,7 @@ _0804EC2A:
b _0804F0CE
.align 2, 0
_0804EC60: .4byte sub_804E2BC
-_0804EC64: .4byte gUnknown_081E6F68
+_0804EC64: .4byte gWindowConfig_81E6F68
_0804EC68: .4byte 0x03002b74
_0804EC6C: .4byte 0x00004422
_0804EC70: .4byte 0x03004854
@@ -138314,7 +138314,7 @@ sub_804F0F4: @ 804F0F4
bl SetVBlankCallback
ldr r4, _0804F15C
adds r0, r4, 0
- bl sub_8002A34
+ bl SetUpWindowConfig
adds r0, r4, 0
bl sub_8071C4C
ldr r1, _0804F160
@@ -138348,7 +138348,7 @@ sub_804F0F4: @ 804F0F4
bx r0
.align 2, 0
_0804F158: .4byte sub_804E2BC
-_0804F15C: .4byte gUnknown_081E6F68
+_0804F15C: .4byte gWindowConfig_81E6F68
_0804F160: .4byte 0x03002b74
_0804F164: .4byte 0x00004422
_0804F168: .4byte 0x03004854
@@ -143180,7 +143180,7 @@ _08051730:
movs r1, 0
movs r2, 0
movs r3, 0x10
- bl sub_80047FC
+ bl ZeroFillWindowRect
movs r0, 0x4
movs r1, 0x4
movs r2, 0xA
@@ -144021,7 +144021,7 @@ _08051D56:
adds r0, r4, r1
ldrb r1, [r0, 0x1A]
adds r0, r7, 0
- bl StopMusicWhileStringIsPrinted
+ bl SetStringCharset
adds r0, r7, 0
ldr r1, _08051F20
bl StringAppend
@@ -144906,7 +144906,7 @@ sub_80524BC: @ 80524BC
bl SetVBlankCallback
ldr r4, _08052520
adds r0, r4, 0
- bl sub_8002A34
+ bl SetUpWindowConfig
adds r0, r4, 0
bl sub_8071C4C
ldr r0, _08052524
@@ -144936,7 +144936,7 @@ sub_80524BC: @ 80524BC
bx r0
.align 2, 0
_0805251C: .4byte sub_804E2D8
-_08052520: .4byte gUnknown_081E6CE4
+_08052520: .4byte gWindowConfig_81E6CE4
_08052524: .4byte 0x03001770
_08052528: .4byte 0x03000560
_0805252C: .4byte sub_8052AF8
diff --git a/asm/rom4.s b/asm/rom4.s
index c0415a37f..6e10f0b48 100644
--- a/asm/rom4.s
+++ b/asm/rom4.s
@@ -3627,13 +3627,13 @@ _080548C4:
bl sub_8054814
bl sub_8054C54
ldr r0, _080548DC
- bl sub_8002A34
+ bl SetUpWindowConfig
ldr r0, _080548E0
bl sub_8071C4C
b _08054928
.align 2, 0
-_080548DC: .4byte gUnknown_081E6C3C
-_080548E0: .4byte gUnknown_081E6CE4
+_080548DC: .4byte gWindowConfig_81E6C3C
+_080548E0: .4byte gWindowConfig_81E6CE4
_080548E4:
bl move_tilemap_camera_to_upper_left_corner
b _08054928
@@ -3735,13 +3735,13 @@ _080549B4:
bl sub_8054814
bl sub_8054C54
ldr r0, _080549CC
- bl sub_8002A34
+ bl SetUpWindowConfig
ldr r0, _080549D0
bl sub_8071C4C
b _08054A38
.align 2, 0
-_080549CC: .4byte gUnknown_081E6C3C
-_080549D0: .4byte gUnknown_081E6CE4
+_080549CC: .4byte gWindowConfig_81E6C3C
+_080549D0: .4byte gWindowConfig_81E6CE4
_080549D4:
bl move_tilemap_camera_to_upper_left_corner
b _08054A38
@@ -3897,13 +3897,13 @@ _08054B0C:
bl sub_8054814
bl sub_8054C54
ldr r0, _08054B24
- bl sub_8002A34
+ bl SetUpWindowConfig
ldr r0, _08054B28
bl sub_8071C4C
b _08054B70
.align 2, 0
-_08054B24: .4byte gUnknown_081E6C3C
-_08054B28: .4byte gUnknown_081E6CE4
+_08054B24: .4byte gWindowConfig_81E6C3C
+_08054B28: .4byte gWindowConfig_81E6CE4
_08054B2C:
bl move_tilemap_camera_to_upper_left_corner
b _08054B70
@@ -4042,15 +4042,15 @@ sub_8054C2C: @ 8054C2C
bl sub_8054814
bl sub_8054C54
ldr r0, _08054C4C
- bl sub_8002A34
+ bl SetUpWindowConfig
ldr r0, _08054C50
bl sub_8071C4C
bl mapdata_load_assets_to_gpu_and_full_redraw
pop {r0}
bx r0
.align 2, 0
-_08054C4C: .4byte gUnknown_081E6C3C
-_08054C50: .4byte gUnknown_081E6CE4
+_08054C4C: .4byte gWindowConfig_81E6C3C
+_08054C50: .4byte gWindowConfig_81E6CE4
thumb_func_end sub_8054C2C
thumb_func_start sub_8054C54
@@ -4155,9 +4155,9 @@ _08054D20: .4byte 0x04000050
_08054D24: .4byte gUnknown_081E29E0
_08054D28: .4byte 0x04000052
_08054D2C: .4byte 0x0000070d
-_08054D30: .4byte gUnknown_081E29B8
-_08054D34: .4byte gUnknown_081E29C8
-_08054D38: .4byte gUnknown_081E29A8
+_08054D30: .4byte gBGHorizontalOffsetRegs
+_08054D34: .4byte gBGVerticalOffsetRegs
+_08054D38: .4byte gBGControlRegs
_08054D3C: .4byte 0x00001d41
_08054D40: .4byte 0x00001e43
_08054D44: .4byte gUnknown_081E29D8
@@ -11124,10 +11124,10 @@ _08057AE0:
pop {r0}
bx r0
.align 2, 0
-_08057AE8: .4byte gUnknown_081E29B8
+_08057AE8: .4byte gBGHorizontalOffsetRegs
_08057AEC: .4byte 0x03000590
_08057AF0: .4byte 0x03000598
-_08057AF4: .4byte gUnknown_081E29C8
+_08057AF4: .4byte gBGVerticalOffsetRegs
_08057AF8: .4byte 0x0300059a
_08057AFC: .4byte 0x040000d4
_08057B00: .4byte 0x020219cc
@@ -39974,14 +39974,14 @@ sub_8064A74: @ 8064A74
bl sub_80651C8
ldr r0, _08064A98
ldr r1, _08064A9C
- bl sub_8002D54
+ bl InitWindowFromConfig
pop {r0}
bx r0
.align 2, 0
_08064A90: .4byte 0x030005a8
_08064A94: .4byte 0x0202e9d2
_08064A98: .4byte 0x0202e87c
-_08064A9C: .4byte gUnknown_081E6CE4
+_08064A9C: .4byte gWindowConfig_81E6CE4
thumb_func_end sub_8064A74
thumb_func_start sub_8064AA0
@@ -40017,7 +40017,7 @@ _08064ACE:
_08064AD8: .4byte 0x0202e87c
_08064ADC:
ldr r0, _08064AEC
- bl sub_8065330
+ bl draw_win
_08064AE2:
ldrh r0, [r4, 0x8]
adds r0, 0x1
@@ -40271,7 +40271,7 @@ sub_8064CA0: @ 8064CA0
push {lr}
bl task_del_textbox
ldr r0, _08064CB8
- bl sub_8065330
+ bl draw_win
ldr r1, _08064CBC
movs r0, 0
strb r0, [r1]
@@ -41009,14 +41009,14 @@ copy_textbox_border_tile_patterns_to_vram: @ 8065200
adds r4, r0, 0
bl sub_8065348
adds r0, r4, 0
- bl sub_8065330
+ bl draw_win
pop {r4}
pop {r0}
bx r0
thumb_func_end copy_textbox_border_tile_patterns_to_vram
- thumb_func_start sub_8065214
-sub_8065214: @ 8065214
+ thumb_func_start draw_win_3
+draw_win_3: @ 8065214
push {r4-r6,lr}
ldr r4, [sp, 0x10]
lsls r0, 16
@@ -41076,10 +41076,10 @@ _0806526E:
bx r1
.align 2, 0
_0806527C: .4byte gUnknown_08376290
- thumb_func_end sub_8065214
+ thumb_func_end draw_win_3
- thumb_func_start sub_8065280
-sub_8065280: @ 8065280
+ thumb_func_start draw_win_2
+draw_win_2: @ 8065280
push {r4-r7,lr}
mov r7, r10
mov r6, r9
@@ -41137,7 +41137,7 @@ _080652E2:
adds r1, r4, 0
adds r2, r5, 0
ldr r3, [sp, 0x10]
- bl sub_8065214
+ bl draw_win_3
ldr r1, [sp, 0x8]
adds r2, r1, r4
adds r2, r6, r2
@@ -41171,10 +41171,10 @@ _0806531C:
bx r0
.align 2, 0
_0806532C: .4byte 0x030005ae
- thumb_func_end sub_8065280
+ thumb_func_end draw_win_2
- thumb_func_start sub_8065330
-sub_8065330: @ 8065330
+ thumb_func_start draw_win
+draw_win: @ 8065330
push {lr}
sub sp, 0x4
movs r1, 0x4
@@ -41182,11 +41182,11 @@ sub_8065330: @ 8065330
movs r1, 0
movs r2, 0xE
movs r3, 0x1A
- bl sub_8065280
+ bl draw_win_2
add sp, 0x4
pop {r0}
bx r0
- thumb_func_end sub_8065330
+ thumb_func_end draw_win
thumb_func_start sub_8065348
sub_8065348: @ 8065348
@@ -45546,7 +45546,7 @@ sub_806730C: @ 806730C
ldr r4, _08067360
adds r1, 0x6
adds r0, r4, 0
- bl UnknownStringFunc
+ bl StringBraille
adds r0, r5, 0
adds r1, r6, 0
mov r2, r8
@@ -52984,7 +52984,7 @@ _0806AB16:
bl sub_8073B94
ldr r4, _0806ABA0
adds r0, r4, 0
- bl sub_8002A34
+ bl SetUpWindowConfig
adds r0, r4, 0
bl sub_8071C4C
movs r1, 0x80
@@ -53008,7 +53008,7 @@ _0806AB16:
_0806AB94: .4byte 0x040000d4
_0806AB98: .4byte 0x81000200
_0806AB9C: .4byte 0x81000800
-_0806ABA0: .4byte gUnknown_081E6CE4
+_0806ABA0: .4byte gWindowConfig_81E6CE4
_0806ABA4: .4byte sub_806ABC8
_0806ABA8: .4byte sub_806ABB0
_0806ABAC: .4byte sub_806ACCC
@@ -53879,34 +53879,34 @@ _0806B2B2:
_0806B2CC: .4byte 0x0201b000
_0806B2D0:
ldr r0, _0806B2E0
- bl sub_8002A34
+ bl SetUpWindowConfig
ldr r1, _0806B2E4
ldr r0, _0806B2E8
adds r1, r0
b _0806B42C
.align 2, 0
-_0806B2E0: .4byte gUnknown_081E6C90
+_0806B2E0: .4byte gWindowConfig_81E6C90
_0806B2E4: .4byte 0x03001770
_0806B2E8: .4byte 0x0000043c
_0806B2EC:
ldr r4, _0806B308
ldr r1, _0806B30C
adds r0, r4, 0
- bl sub_8002D54
+ bl InitWindowFromConfig
adds r0, r4, 0
movs r1, 0x1
- bl sub_8002BFC
+ bl MultistepInitWindowTileData
ldr r1, _0806B310
ldr r2, _0806B314
adds r1, r2
b _0806B42C
.align 2, 0
_0806B308: .4byte 0x03004210
-_0806B30C: .4byte gUnknown_081E6C90
+_0806B30C: .4byte gWindowConfig_81E6C90
_0806B310: .4byte 0x03001770
_0806B314: .4byte 0x0000043c
_0806B318:
- bl sub_8002C54
+ bl MultistepLoadFont
cmp r0, 0
bne _0806B322
b _0806B450
@@ -53986,7 +53986,7 @@ _0806B3C0:
bl sub_8071C58
b _0806B426
.align 2, 0
-_0806B3C8: .4byte gUnknown_081E6CC8
+_0806B3C8: .4byte gWindowConfig_81E6CC8
_0806B3CC:
bl sub_8071C94
cmp r0, 0
@@ -58465,7 +58465,7 @@ sub_806D5B8: @ 806D5B8
mov r1, r10
mov r2, r9
mov r3, r8
- bl sub_80047FC
+ bl ZeroFillWindowRect
movs r0, 0
str r0, [sp, 0x4]
lsls r5, 10
@@ -58547,7 +58547,7 @@ sub_806D668: @ 806D668
mov r1, r10
mov r2, r9
mov r3, r8
- bl sub_80047FC
+ bl ZeroFillWindowRect
movs r0, 0
str r0, [sp, 0x4]
lsls r5, 10
@@ -58672,7 +58672,7 @@ _0806D7C8: .4byte gUnknown_08E71354
_0806D7CC: .4byte gUnknown_08E71788
_0806D7D0: .4byte 0x06003800
_0806D7D4: .4byte gUnknown_08E716A0
-_0806D7D8: .4byte gUnknown_081E66B2
+_0806D7D8: .4byte gFontDefaultPalette
_0806D7DC: .4byte gUnknown_08E71894
_0806D7E0: .4byte 0x06006000
_0806D7E4: .4byte gUnknown_08E71934
@@ -59776,7 +59776,7 @@ box_print: @ 806E000
.align 2, 0
_0806E040: .4byte 0x02039360
_0806E044: .4byte 0x01000100
-_0806E048: .4byte gUnknown_081E6CAC
+_0806E048: .4byte gWindowConfig_81E6CAC
_0806E04C: .4byte 0x06014000
thumb_func_end box_print
@@ -60073,7 +60073,7 @@ _0806E278: .4byte gUnknown_08376738
_0806E27C: .4byte 0x020231cc
_0806E280: .4byte 0x02039460
_0806E284: .4byte 0x01000020
-_0806E288: .4byte gUnknown_081E6CAC
+_0806E288: .4byte gWindowConfig_81E6CAC
_0806E28C: .4byte 0xffffff00
_0806E290: .4byte 0x06014200
thumb_func_end sub_806E1F4
@@ -60339,7 +60339,7 @@ sub_806E420: @ 806E420
_0806E48C: .4byte 0x020231cc
_0806E490: .4byte 0x02039460
_0806E494: .4byte 0x01000040
-_0806E498: .4byte gUnknown_081E6CAC
+_0806E498: .4byte gWindowConfig_81E6CAC
_0806E49C: .4byte 0xffffff00
_0806E4A0: .4byte 0x06014300
thumb_func_end sub_806E420
@@ -65966,7 +65966,7 @@ sub_8071284: @ 8071284
pop {r0}
bx r0
.align 2, 0
-_080712AC: .4byte gUnknown_081E6CE4
+_080712AC: .4byte gWindowConfig_81E6CE4
_080712B0: .4byte task50_startmenu
thumb_func_end sub_8071284
@@ -67054,7 +67054,7 @@ _08071AA4:
_08071AB6:
ldr r4, _08071AD4
adds r0, r4, 0
- bl sub_8002A34
+ bl SetUpWindowConfig
adds r0, r4, 0
bl sub_8071C4C
movs r1, 0x80
@@ -67065,7 +67065,7 @@ _08071AB6:
strh r0, [r1]
b _08071B10
.align 2, 0
-_08071AD4: .4byte gUnknown_081E6CE4
+_08071AD4: .4byte gWindowConfig_81E6CE4
_08071AD8:
movs r0, 0x1
negs r0, r0
@@ -67284,7 +67284,7 @@ sub_8071C64: @ 8071C64
ldr r0, _08071C90
str r0, [r1]
adds r1, r3, 0
- bl sub_8002D54
+ bl InitWindowFromConfig
pop {r0}
bx r0
.align 2, 0
@@ -67328,7 +67328,7 @@ _08071CD0:
ldr r0, [r0]
ldr r1, _08071CEC
ldrh r1, [r1]
- bl sub_8002BFC
+ bl MultistepInitWindowTileData
strh r0, [r4]
b _08071D06
.align 2, 0
@@ -67336,7 +67336,7 @@ _08071CE4: .4byte 0x0202e9d0
_08071CE8: .4byte 0x0202e9c8
_08071CEC: .4byte 0x0202e9ce
_08071CF0:
- bl sub_8002C54
+ bl MultistepLoadFont
cmp r0, 0
beq _08071D40
b _08071D06
@@ -67389,12 +67389,12 @@ sub_8071D48: @ 8071D48
ldr r0, _08071D90
str r0, [r5]
adds r1, r2, 0
- bl sub_8002D54
+ bl InitWindowFromConfig
ldr r1, _08071D94
strh r4, [r1]
ldr r0, [r5]
ldrh r1, [r1]
- bl sub_8002A50
+ bl InitWindowTileData
ldr r1, _08071D98
strh r0, [r1]
ldrh r0, [r1]
@@ -67429,7 +67429,7 @@ sub_8071DA4: @ 8071DA4
ldr r0, _08071DEC
str r0, [r5]
adds r1, r2, 0
- bl sub_8002D54
+ bl InitWindowFromConfig
ldr r0, _08071DF0
strh r4, [r0]
ldrh r0, [r0]
@@ -67444,7 +67444,7 @@ sub_8071DA4: @ 8071DA4
strh r0, [r1]
ldr r0, [r5]
ldrh r1, [r1]
- bl sub_8002A50
+ bl InitWindowTileData
ldr r1, _08071DFC
strh r0, [r1]
pop {r4,r5}
@@ -67492,7 +67492,7 @@ sub_8071E2C: @ 8071E2C
adds r1, r0, 0
ldr r4, _08071E48
ldr r0, [r4]
- bl sub_8002D54
+ bl InitWindowFromConfig
ldr r1, [r4]
ldr r0, _08071E4C
ldrh r0, [r0]
@@ -67553,7 +67553,7 @@ Reset: @ 8071E84
adds r1, r4, 0
adds r2, r5, 0
adds r3, r6, 0
- bl sub_80047FC
+ bl ZeroFillWindowRect
add sp, 0x4
pop {r4-r6}
pop {r0}
@@ -67583,7 +67583,7 @@ sub_8071EBC: @ 8071EBC
adds r1, r4, 0
adds r2, r5, 0
adds r3, r6, 0
- bl sub_800482C
+ bl FillWindowRectWithBlankTile
add sp, 0x4
pop {r4-r6}
pop {r0}
@@ -67693,7 +67693,7 @@ sub_8071F98: @ 8071F98
ldr r0, _08071FB8
ldr r0, [r0]
adds r1, r3, 0
- bl sub_800467C
+ bl GetWindowTilemapEntry
lsls r0, 16
lsrs r0, 16
pop {r1}
@@ -67727,7 +67727,7 @@ sub_8071FBC: @ 8071FBC
adds r1, r4, 0
adds r2, r5, 0
adds r3, r6, 0
- bl sub_8004690
+ bl DrawWindowRect
add sp, 0x8
pop {r4-r6}
pop {r0}
@@ -67842,7 +67842,7 @@ sub_80720B0: @ 80720B0
push {lr}
ldr r0, _080720C0
ldr r0, [r0]
- bl sub_8004318
+ bl ClearWindowTextLines
pop {r0}
bx r0
.align 2, 0
@@ -69099,7 +69099,7 @@ sub_80729D8: @ 80729D8
adds r1, r6, 0
adds r2, r5, 0
adds r3, r4, 0
- bl AddTextPrinterParametrized2
+ bl sub_8004D04
lsls r0, 24
lsrs r0, 24
add sp, 0x8
@@ -69320,7 +69320,7 @@ sub_8072B80: @ 8072B80
str r1, [sp]
add r1, sp, 0x4
mov r2, r8
- bl sub_8004B24
+ bl AlignString
ldr r0, [r4]
ldr r1, _08072BD4
ldrh r2, [r1]
@@ -69387,7 +69387,7 @@ sub_8072C14: @ 8072C14
adds r1, r5, 0
adds r2, r6, 0
adds r3, r4, 0
- bl sub_8004988
+ bl AlignInt1
add sp, 0x4
pop {r4-r6}
pop {r1}
@@ -69413,7 +69413,7 @@ sub_8072C44: @ 8072C44
adds r1, r5, 0
adds r2, r6, 0
adds r3, r4, 0
- bl sub_8004A48
+ bl AlignInt2
add sp, 0x4
pop {r4-r6}
pop {r1}
@@ -69439,7 +69439,7 @@ sub_8072C74: @ 8072C74
adds r1, r5, 0
adds r2, r6, 0
adds r3, r4, 0
- bl sub_8004B24
+ bl AlignString
add sp, 0x4
pop {r4-r6}
pop {r1}
@@ -69503,7 +69503,7 @@ sub_8072CF4: @ 8072CF4
lsrs r1, 24
ldr r0, _08072D08
ldr r0, [r0]
- bl IsTextPrinterActive
+ bl sub_80037C8
pop {r1}
bx r1
.align 2, 0
diff --git a/asm/rom5.s b/asm/rom5.s
index 1e61563c0..35c353323 100644
--- a/asm/rom5.s
+++ b/asm/rom5.s
@@ -91,11 +91,11 @@ _0807AE20:
bl dp12_8087EA4
ldr r4, _0807AE5C
adds r0, r4, 0
- bl sub_8002A34
+ bl SetUpWindowConfig
bl sub_8073B94
ldr r0, _0807AE60
adds r1, r4, 0
- bl sub_8002D54
+ bl InitWindowFromConfig
ldr r0, _0807AE64
movs r1, 0
strh r1, [r0]
@@ -115,7 +115,7 @@ _0807AE20:
strh r1, [r0]
b _0807B040
.align 2, 0
-_0807AE5C: .4byte gUnknown_081E6C58
+_0807AE5C: .4byte gWindowConfig_81E6C58
_0807AE60: .4byte 0x03004210
_0807AE64: .4byte 0x030042a4
_0807AE68: .4byte 0x030042a0
@@ -13745,7 +13745,7 @@ _08081852:
movs r3, 0x13
bl Reset
ldr r0, _0808189C
- bl sub_8002A1C
+ bl LoadFontDefaultPalette
ldr r1, _080818A0
movs r0, 0xFF
strh r0, [r1]
@@ -13773,7 +13773,7 @@ _08081892:
pop {r0}
bx r0
.align 2, 0
-_0808189C: .4byte gUnknown_081E6CE4
+_0808189C: .4byte gWindowConfig_81E6CE4
_080818A0: .4byte 0x04000040
thumb_func_end sub_80816A8
@@ -27821,7 +27821,7 @@ sub_8088380: @ 8088380
bl SetVBlankCallback
ldr r4, _080883D0
adds r0, r4, 0
- bl sub_8002A34
+ bl SetUpWindowConfig
adds r0, r4, 0
bl sub_8071C4C
movs r0, 0x26
@@ -27844,7 +27844,7 @@ sub_8088380: @ 8088380
pop {r0}
bx r0
.align 2, 0
-_080883D0: .4byte gUnknown_081E6CE4
+_080883D0: .4byte gWindowConfig_81E6CE4
_080883D4: .4byte 0x02020004
_080883D8: .4byte sub_8088120
thumb_func_end sub_8088380
@@ -28177,7 +28177,7 @@ sub_808862C: @ 808862C
bl SetVBlankCallback
ldr r4, _080886A4
adds r0, r4, 0
- bl sub_8002A34
+ bl SetUpWindowConfig
adds r0, r4, 0
bl sub_8071C4C
movs r0, 0x26
@@ -28202,7 +28202,7 @@ sub_808862C: @ 808862C
.align 2, 0
_0808869C: .4byte 0x04000008
_080886A0: .4byte 0x05000200
-_080886A4: .4byte gUnknown_081E6CE4
+_080886A4: .4byte gWindowConfig_81E6CE4
_080886A8: .4byte 0x02020004
_080886AC: .4byte sub_808847C
thumb_func_end sub_808862C
@@ -34356,13 +34356,13 @@ _0808B758:
b _0808B95C
_0808B76A:
ldr r0, _0808B778
- bl sub_8002A34
+ bl SetUpWindowConfig
ldr r1, _0808B77C
ldr r2, _0808B780
adds r1, r2
b _0808B962
.align 2, 0
-_0808B778: .4byte gUnknown_081E71B4
+_0808B778: .4byte gWindowConfig_81E71B4
_0808B77C: .4byte 0x03001770
_0808B780: .4byte 0x0000043c
_0808B784:
@@ -34370,7 +34370,7 @@ _0808B784:
bl sub_8071C58
b _0808B95C
.align 2, 0
-_0808B78C: .4byte gUnknown_081E71B4
+_0808B78C: .4byte gWindowConfig_81E71B4
_0808B790:
bl sub_8071C94
cmp r0, 0
@@ -35878,7 +35878,7 @@ _0808C344:
strb r0, [r1]
ldr r4, _0808C378
adds r0, r4, 0
- bl sub_8002A34
+ bl SetUpWindowConfig
adds r0, r4, 0
bl sub_8071C4C
ldrb r0, [r5]
@@ -35887,7 +35887,7 @@ _0808C344:
b _0808C50C
.align 2, 0
_0808C374: .4byte 0x030028f8
-_0808C378: .4byte gUnknown_081E7048
+_0808C378: .4byte gWindowConfig_81E7048
_0808C37C:
bl Random
movs r1, 0x3
@@ -37933,7 +37933,7 @@ _0808D4D4: .4byte 0x0000043c
_0808D4D8:
ldr r4, _0808D4F8
adds r0, r4, 0
- bl sub_8002A34
+ bl SetUpWindowConfig
adds r0, r4, 0
bl sub_8071C4C
ldr r0, _0808D4FC
@@ -37944,7 +37944,7 @@ _0808D4D8:
adds r1, r0
b _0808D5E4
.align 2, 0
-_0808D4F8: .4byte gUnknown_081E7048
+_0808D4F8: .4byte gWindowConfig_81E7048
_0808D4FC: .4byte gUnknown_0839FA7C
_0808D500: .4byte 0x0600ff80
_0808D504: .4byte 0x03001770
@@ -41851,7 +41851,7 @@ _0808F3F0: .4byte 0x0000064d
_0808F3F4:
ldr r4, _0808F40C
adds r0, r4, 0
- bl sub_8002A34
+ bl SetUpWindowConfig
adds r0, r4, 0
bl sub_8071C4C
ldr r1, _0808F410
@@ -41859,7 +41859,7 @@ _0808F3F4:
adds r1, r3
b _0808F682
.align 2, 0
-_0808F40C: .4byte gUnknown_081E7064
+_0808F40C: .4byte gWindowConfig_81E7064
_0808F410: .4byte 0x03001770
_0808F414: .4byte 0x0000043c
_0808F418:
@@ -42760,7 +42760,7 @@ _0808FB98: .4byte 0x0000043c
_0808FB9C:
ldr r4, _0808FBB8
adds r0, r4, 0
- bl sub_8002A34
+ bl SetUpWindowConfig
adds r0, r4, 0
bl sub_8071C4C
bl sub_8073B94
@@ -42769,7 +42769,7 @@ _0808FB9C:
adds r1, r0
b _0808FDA0
.align 2, 0
-_0808FBB8: .4byte gUnknown_081E702C
+_0808FBB8: .4byte gWindowConfig_81E702C
_0808FBBC: .4byte 0x03001770
_0808FBC0: .4byte 0x0000043c
_0808FBC4:
@@ -43427,7 +43427,7 @@ _08090170: .4byte 0x0000043c
_08090174:
ldr r4, _080901AC
adds r0, r4, 0
- bl sub_8002A34
+ bl SetUpWindowConfig
adds r0, r4, 0
bl sub_8071C4C
add r1, sp, 0x4
@@ -43449,7 +43449,7 @@ _08090174:
adds r1, r2
b _08090368
.align 2, 0
-_080901AC: .4byte gUnknown_081E702C
+_080901AC: .4byte gWindowConfig_81E702C
_080901B0: .4byte gUnknown_0840E035
_080901B4: .4byte 0x02024ea4
_080901B8: .4byte 0x03001770
@@ -44271,7 +44271,7 @@ _08090858: .4byte gUnknown_08E87AF6
_0809085C:
ldr r4, _0809088C
adds r0, r4, 0
- bl sub_8002A34
+ bl SetUpWindowConfig
adds r0, r4, 0
bl sub_8071C4C
ldr r2, _08090890
@@ -44291,7 +44291,7 @@ _0809085C:
adds r0, r1
b _080909E0
.align 2, 0
-_0809088C: .4byte gUnknown_081E7064
+_0809088C: .4byte gWindowConfig_81E7064
_08090890: .4byte 0x0600c000
_08090894: .4byte 0x040000d4
_08090898: .4byte 0x81000100
@@ -47216,7 +47216,7 @@ _08091F4C: .4byte 0x0000043c
_08091F50:
ldr r4, _08091FA8
adds r0, r4, 0
- bl sub_8002A34
+ bl SetUpWindowConfig
adds r0, r4, 0
bl sub_8071C4C
ldr r0, _08091FAC
@@ -47252,7 +47252,7 @@ _08091F7C:
adds r1, r2
b _08091FF6
.align 2, 0
-_08091FA8: .4byte gUnknown_081E7064
+_08091FA8: .4byte gWindowConfig_81E7064
_08091FAC: .4byte gUnknown_083A05CC
_08091FB0: .4byte gUnknown_083A05DC
_08091FB4: .4byte 0x03004b28
@@ -50303,14 +50303,14 @@ sub_80937BC: @ 80937BC
push {r4,lr}
ldr r4, _080937D4
adds r0, r4, 0
- bl sub_8002A34
+ bl SetUpWindowConfig
adds r0, r4, 0
bl sub_8071C58
pop {r4}
pop {r0}
bx r0
.align 2, 0
-_080937D4: .4byte gUnknown_081E6DC4
+_080937D4: .4byte gWindowConfig_81E6DC4
thumb_func_end sub_80937BC
thumb_func_start sub_80937D8
@@ -50586,7 +50586,7 @@ sub_80939A4: @ 80939A4
bx r0
.align 2, 0
_080939B8: .4byte sub_80939DC
-_080939BC: .4byte gUnknown_081E6DC4
+_080939BC: .4byte gWindowConfig_81E6DC4
thumb_func_end sub_80939A4
thumb_func_start sub_80939C0
@@ -51607,7 +51607,7 @@ sub_8094140: @ 8094140
bl StringCopy
ldrb r1, [r5, 0x8]
adds r0, r4, 0
- bl StopMusicWhileStringIsPrinted
+ bl SetStringCharset
adds r0, r4, 0
movs r1, 0x7
movs r2, 0x5
@@ -51620,7 +51620,7 @@ sub_8094140: @ 8094140
pop {r0}
bx r0
.align 2, 0
-_0809417C: .4byte gUnknown_081E6DC4
+_0809417C: .4byte gWindowConfig_81E6DC4
_08094180: .4byte 0x020231cc
_08094184: .4byte 0x02000094
thumb_func_end sub_8094140
@@ -51648,8 +51648,8 @@ sub_8094188: @ 8094188
pop {r0}
bx r0
.align 2, 0
-_080941D0: .4byte gUnknown_081E6DC4
-_080941D4: .4byte gUnknown_081E6DE0
+_080941D0: .4byte gWindowConfig_81E6DC4
+_080941D4: .4byte gWindowConfig_81E6DE0
thumb_func_end sub_8094188
thumb_func_start sub_80941D8
@@ -51812,7 +51812,7 @@ sub_80942F8: @ 80942F8
bl StringCopy
ldrb r1, [r5, 0x8]
adds r0, r4, 0
- bl StopMusicWhileStringIsPrinted
+ bl SetStringCharset
ldr r1, _08094330
adds r0, r4, 0
bl StringAppend
@@ -54620,7 +54620,7 @@ sub_8095904: @ 8095904
lsrs r0, 24
str r0, [sp, 0x8]
ldr r0, [sp]
- bl StringGetLength
+ bl StringLength
lsls r0, 16
lsrs r0, 16
mov r8, r0
@@ -54662,7 +54662,7 @@ _0809593E:
b _08095A2E
.align 2, 0
_08095980: .4byte 0x0000fff0
-_08095984: .4byte gUnknown_08EA2C44
+_08095984: .4byte gFont3LatinGlyphs
_08095988:
movs r0, 0
mov r9, r0
@@ -54762,7 +54762,7 @@ _08095A2E:
pop {r0}
bx r0
.align 2, 0
-_08095A40: .4byte gUnknown_08EA2C44
+_08095A40: .4byte gFont3LatinGlyphs
_08095A44: .4byte 0x0000fff0
thumb_func_end sub_8095904
@@ -56504,7 +56504,7 @@ _0809676C: .4byte gUnknown_083B6DB8
_08096770: .4byte 0x00001111
_08096774: .4byte 0x040000d4
_08096778: .4byte 0x81000200
-_0809677C: .4byte gUnknown_081E6D38
+_0809677C: .4byte gWindowConfig_81E6D38
_08096780: .4byte 0x80000200
thumb_func_end sub_80966F4
@@ -56689,17 +56689,17 @@ _080968D4:
b _0809697A
_080968E8:
ldr r0, _080968F0
- bl sub_8002A34
+ bl SetUpWindowConfig
b _0809697A
.align 2, 0
-_080968F0: .4byte gUnknown_081E6D00
+_080968F0: .4byte gWindowConfig_81E6D00
_080968F4:
ldr r0, _08096900
bl sub_8071C4C
bl sub_8071EF4
b _0809697A
.align 2, 0
-_08096900: .4byte gUnknown_081E6D00
+_08096900: .4byte gWindowConfig_81E6D00
_08096904:
bl sub_80967DC
bl sub_8096848
@@ -56828,17 +56828,17 @@ _08096A2C: .4byte 0x0203847d
_08096A30: .4byte 0x0203847f
_08096A34:
ldr r0, _08096A3C
- bl sub_8002A34
+ bl SetUpWindowConfig
b _08096AD8
.align 2, 0
-_08096A3C: .4byte gUnknown_081E6D00
+_08096A3C: .4byte gWindowConfig_81E6D00
_08096A40:
ldr r0, _08096A4C
bl sub_8071C4C
bl sub_8071EF4
b _08096AD8
.align 2, 0
-_08096A4C: .4byte gUnknown_081E6D00
+_08096A4C: .4byte gWindowConfig_81E6D00
_08096A50:
bl sub_80967DC
b _08096AD8
@@ -59316,7 +59316,7 @@ _08097F40: .4byte gUnknown_08E8E0E8
_08097F44: .4byte gUnknown_08E8E108
_08097F48: .4byte gUnknown_083B6D74
_08097F4C: .4byte gUnknown_083B6D94
-_08097F50: .4byte gUnknown_081E6694
+_08097F50: .4byte gUnknownPalette_81E6692+0x2
_08097F54: .4byte gUnknown_083B6DBC
thumb_func_end sub_8097E70
@@ -60589,7 +60589,7 @@ _08098974:
adds r0, r1
ldr r6, [r0]
adds r0, r6, 0
- bl StringGetLength
+ bl StringLength
adds r4, r0, 0
lsls r4, 16
lsrs r4, 16
@@ -60618,7 +60618,7 @@ _080989B8:
adds r0, r1
ldr r6, [r0]
adds r0, r6, 0
- bl StringGetLength
+ bl StringLength
adds r4, r0, 0
lsls r4, 16
lsrs r4, 16
@@ -63816,7 +63816,7 @@ sub_809A1BC: @ 809A1BC
_0809A228: .4byte gUnknown_083B6DB8
_0809A22C: .4byte 0x040000d4
_0809A230: .4byte 0x81000100
-_0809A234: .4byte gUnknown_081E6D38
+_0809A234: .4byte gWindowConfig_81E6D38
_0809A238: .4byte 0x80000040
thumb_func_end sub_809A1BC
@@ -71189,10 +71189,10 @@ _0809DB8C: .4byte 0x03001770
_0809DB90: .4byte 0x0000043c
_0809DB94:
ldr r0, _0809DB9C
- bl sub_8002A34
+ bl SetUpWindowConfig
b _0809DDE8
.align 2, 0
-_0809DB9C: .4byte gUnknown_081E6E6C
+_0809DB9C: .4byte gWindowConfig_81E6E6C
_0809DBA0:
ldr r0, _0809DBB0
bl sub_8071C58
@@ -71201,7 +71201,7 @@ _0809DBA0:
adds r1, r2
b _0809DDEE
.align 2, 0
-_0809DBB0: .4byte gUnknown_081E6E6C
+_0809DBB0: .4byte gWindowConfig_81E6E6C
_0809DBB4: .4byte 0x03001770
_0809DBB8: .4byte 0x0000043c
_0809DBBC:
@@ -71811,8 +71811,8 @@ sub_809E044: @ 809E044
pop {r0}
bx r0
.align 2, 0
-_0809E0F4: .4byte gUnknown_081E66AE
-_0809E0F8: .4byte gUnknown_081E66B2
+_0809E0F4: .4byte gUnknownPalette_81E6692+0x1C
+_0809E0F8: .4byte gFontDefaultPalette
thumb_func_end sub_809E044
thumb_func_start sub_809E0FC
@@ -75411,7 +75411,7 @@ _0809FD1C:
lsls r1, 24
lsrs r1, 24
adds r0, r4, 0
- bl StopMusicWhileStringIsPrinted
+ bl SetStringCharset
ldr r5, _0809FD68
adds r0, r5, 0
movs r1, 0xD
@@ -76546,7 +76546,7 @@ sub_80A0664: @ 80A0664
adds r0, r4, 0
bl StringCopy
adds r0, r4, 0
- bl StripExtendedControlCodes
+ bl SkipExtCtrlCodes
b _080A06C2
.align 2, 0
_080A06A0: .4byte 0x02018000
@@ -76576,7 +76576,7 @@ _080A06C2:
bl PokemonGetField
ldr r0, _080A06F4
adds r1, r4, 0
- bl CompareStringWithoutExtendedControlCodes
+ bl StringCompareWithoutExtCtrlCodes
cmp r0, 0
beq _080A0700
_080A06EA:
@@ -77151,7 +77151,7 @@ _080A0BA8:
adds r0, r4, 0
bl StringCopy
adds r0, r4, 0
- bl StringGetLength
+ bl StringLength
lsls r0, 24
lsrs r0, 24
subs r4, 0x2
@@ -82224,10 +82224,10 @@ _080A3268: .4byte 0x03001770
_080A326C: .4byte 0x0000043c
_080A3270:
ldr r0, _080A3278
- bl sub_8002A34
+ bl SetUpWindowConfig
b _080A3464
.align 2, 0
-_080A3278: .4byte gUnknown_081E6DFC
+_080A3278: .4byte gWindowConfig_81E6DFC
_080A327C:
ldr r0, _080A328C
bl sub_8071C58
@@ -82236,7 +82236,7 @@ _080A327C:
adds r1, r0
b _080A346A
.align 2, 0
-_080A328C: .4byte gUnknown_081E6DFC
+_080A328C: .4byte gWindowConfig_81E6DFC
_080A3290: .4byte 0x03001770
_080A3294: .4byte 0x0000043c
_080A3298:
@@ -96385,10 +96385,10 @@ sub_80A9F50: @ 80A9F50
strh r0, [r2]
ldr r4, _080A9FB8
adds r0, r4, 0
- bl sub_8002A34
+ bl SetUpWindowConfig
ldr r0, _080A9FBC
adds r1, r4, 0
- bl sub_8002D54
+ bl InitWindowFromConfig
ldr r0, _080A9FC0
movs r1, 0
strh r1, [r0]
@@ -96422,7 +96422,7 @@ sub_80A9F50: @ 80A9F50
pop {r0}
bx r0
.align 2, 0
-_080A9FB8: .4byte gUnknown_081E6C3C
+_080A9FB8: .4byte gWindowConfig_81E6C3C
_080A9FBC: .4byte 0x0202e908
_080A9FC0: .4byte 0x0400004c
_080A9FC4: .4byte 0x030042a4
@@ -96483,7 +96483,7 @@ _080AA012:
mov r1, sp
bl sub_80034D4
ldr r0, _080AA060
- bl sub_8002A1C
+ bl LoadFontDefaultPalette
add sp, 0xC
pop {r3}
mov r8, r3
@@ -96494,7 +96494,7 @@ _080AA012:
_080AA054: .4byte gUnknown_083C9228
_080AA058: .4byte 0x040000d4
_080AA05C: .4byte 0x85000400
-_080AA060: .4byte gUnknown_081E6C3C
+_080AA060: .4byte gWindowConfig_81E6C3C
thumb_func_end sub_80A9FE4
thumb_func_start sub_80AA064
@@ -96739,7 +96739,7 @@ sub_80AA280: @ 80AA280
movs r1, 0
movs r2, 0
movs r3, 0
- bl sub_80047C8
+ bl FillWindowRect_DefaultPalette
ldr r4, _080AA2EC
ldr r1, _080AA2F0
adds r0, r4, 0
@@ -97058,7 +97058,7 @@ sub_80AA4F0: @ 80AA4F0
movs r1, 0
mov r2, r9
mov r3, r10
- bl sub_80047C8
+ bl FillWindowRect_DefaultPalette
ldr r0, _080AA5B0
lsls r4, 6
adds r4, r5, r4
@@ -98193,7 +98193,7 @@ sub_80AAD84: @ 80AAD84
str r0, [r4, 0x8]
ldr r0, [r4, 0x8]
mov r0, r9
- bl StringGetLength
+ bl StringLength
lsls r0, 16
lsrs r7, r0, 16
cmp r7, 0x8
@@ -98630,13 +98630,13 @@ _080AB108:
ldr r0, [r1, 0x8]
ldr r4, _080AB17C
adds r0, r4, 0
- bl sub_8002A34
+ bl SetUpWindowConfig
ldr r5, _080AB180
adds r0, r5, 0
adds r1, r4, 0
- bl sub_8002D54
+ bl InitWindowFromConfig
adds r0, r4, 0
- bl sub_8002A1C
+ bl LoadFontDefaultPalette
movs r0, 0x7
str r0, [sp]
adds r0, r5, 0
@@ -98658,7 +98658,7 @@ _080AB16C: .4byte 0x04000004
_080AB170: .4byte sub_80AB184
_080AB174: .4byte 0x040000d4
_080AB178: .4byte 0x85000400
-_080AB17C: .4byte gUnknown_081E6FD8
+_080AB17C: .4byte gWindowConfig_81E6FD8
_080AB180: .4byte 0x03004210
thumb_func_end sub_80AB084
@@ -98860,28 +98860,28 @@ sub_80AB320: @ 80AB320
push {r4,lr}
ldr r4, _080AB340
adds r0, r4, 0
- bl sub_8002A34
+ bl SetUpWindowConfig
ldr r0, _080AB344
adds r1, r4, 0
- bl sub_8002D54
+ bl InitWindowFromConfig
ldr r0, _080AB348
ldr r1, _080AB34C
- bl sub_8002D54
+ bl InitWindowFromConfig
pop {r4}
pop {r0}
bx r0
.align 2, 0
-_080AB340: .4byte gUnknown_081E6FD8
+_080AB340: .4byte gWindowConfig_81E6FD8
_080AB344: .4byte 0x03004210
_080AB348: .4byte 0x0202e908
-_080AB34C: .4byte gUnknown_081E6FF4
+_080AB34C: .4byte gWindowConfig_81E6FF4
thumb_func_end sub_80AB320
thumb_func_start sub_80AB350
sub_80AB350: @ 80AB350
push {r4,lr}
ldr r0, _080AB38C
- bl sub_8002A1C
+ bl LoadFontDefaultPalette
movs r0, 0
movs r1, 0
movs r2, 0x2
@@ -98906,7 +98906,7 @@ _080AB364:
pop {r0}
bx r0
.align 2, 0
-_080AB38C: .4byte gUnknown_081E6FD8
+_080AB38C: .4byte gWindowConfig_81E6FD8
_080AB390: .4byte 0x0202ecaa
_080AB394: .4byte 0x00007e3f
thumb_func_end sub_80AB350
@@ -100045,7 +100045,7 @@ sub_80ABCDC: @ 80ABCDC
str r0, [sp, 0x4]
adds r0, r5, 0
movs r1, 0
- bl sub_80047C8
+ bl FillWindowRect_DefaultPalette
movs r6, 0
ldr r0, _080ABD90
mov r8, r0
@@ -100308,7 +100308,7 @@ _080ABF26:
ldrb r1, [r1, 0x3]
str r1, [sp, 0x4]
movs r1, 0
- bl sub_80047C8
+ bl FillWindowRect_DefaultPalette
ldr r0, _080ABF6C
ldrb r0, [r0]
bl sub_80AF59C
@@ -104373,7 +104373,7 @@ sub_80AE098: @ 80AE098
adds r1, r6, 0
bl StringCopy
mov r0, sp
- bl StripExtendedControlCodes
+ bl SkipExtCtrlCodes
ldr r0, _080AE0F4
ldrb r1, [r0]
movs r0, 0x1
@@ -104455,7 +104455,7 @@ _080AE108:
cmp r0, 0
beq _080AE19A
mov r0, sp
- bl StripExtendedControlCodes
+ bl SkipExtCtrlCodes
adds r0, r6, 0
movs r1, 0x3
bl PokemonGetField
@@ -104972,7 +104972,7 @@ _080AE52C:
str r0, [sp, 0x4]
ldr r0, _080AE594
movs r1, 0
- bl sub_80047C8
+ bl FillWindowRect_DefaultPalette
adds r0, r5, 0
bl sub_80AE5BC
adds r0, r5, 0
@@ -105097,11 +105097,11 @@ sub_80AE5D4: @ 80AE5D4
lsls r4, 3
str r4, [sp]
str r6, [sp, 0x4]
- bl AddTextPrinterParametrized2
+ bl sub_8004D04
b _080AE6B0
.align 2, 0
_080AE660: .4byte 0x020238cc
-_080AE664: .4byte gUnknown_081E72B0
+_080AE664: .4byte gEmptyString_81E72B0
_080AE668: .4byte 0x0203869a
_080AE66C: .4byte 0x03002970
_080AE670: .4byte 0x03004210
@@ -105214,7 +105214,7 @@ sub_80AE6E4: @ 80AE6E4
str r4, [sp]
movs r4, 0x1
str r4, [sp, 0x4]
- bl AddTextPrinterParametrized2
+ bl sub_8004D04
add sp, 0x8
pop {r4-r6}
pop {r0}
@@ -105811,7 +105811,7 @@ sub_80AEBEC: @ 80AEBEC
movs r1, 0
movs r2, 0xB
movs r3, 0x1F
- bl sub_80047C8
+ bl FillWindowRect_DefaultPalette
ldr r1, _080AEC78
lsls r0, r4, 3
adds r0, r1
@@ -105988,7 +105988,7 @@ sub_80AED58: @ 80AED58
movs r1, 0
movs r2, 0xB
movs r3, 0x23
- bl sub_80047C8
+ bl FillWindowRect_DefaultPalette
add sp, 0x8
pop {r0}
bx r0
@@ -106514,7 +106514,7 @@ sub_80AF138: @ 80AF138
movs r1, 0
movs r2, 0x1
movs r3, 0xF
- bl sub_80047C8
+ bl FillWindowRect_DefaultPalette
add sp, 0x8
pop {r0}
bx r0
@@ -106714,7 +106714,7 @@ sub_80AF2A0: @ 80AF2A0
str r0, [sp, 0x4]
adds r0, r4, 0
movs r1, 0
- bl sub_80047C8
+ bl FillWindowRect_DefaultPalette
add sp, 0x8
pop {r4}
pop {r0}
@@ -110259,7 +110259,7 @@ _080B0D1C:
str r0, [sp, 0x4]
ldr r0, _080B0D68
movs r1, 0
- bl sub_80047C8
+ bl FillWindowRect_DefaultPalette
adds r0, r4, 0x1
lsls r0, 24
lsrs r4, r0, 24
@@ -110329,7 +110329,7 @@ _080B0DA6:
str r0, [sp, 0x4]
ldr r0, _080B0EDC
movs r1, 0
- bl sub_80047C8
+ bl FillWindowRect_DefaultPalette
adds r0, r4, 0x1
lsls r0, 24
lsrs r4, r0, 24
@@ -114940,7 +114940,7 @@ BuyMenuDrawGraphics: @ 80B3108
bl ResetTasks
ldr r4, _080B3228
adds r0, r4, 0
- bl sub_8002A34
+ bl SetUpWindowConfig
adds r0, r4, 0
bl sub_8071C4C
bl BuyMenuDrawMapGraphics
@@ -115001,7 +115001,7 @@ _080B3218: .4byte 0x06007c00
_080B321C: .4byte gUnknown_08E77928
_080B3220: .4byte 0x02018000
_080B3224: .4byte gUnknown_08E77900
-_080B3228: .4byte gUnknown_081E6DFC
+_080B3228: .4byte gWindowConfig_81E6DFC
_080B322C: .4byte 0x03000708
_080B3230: .4byte 0x02025734
_080B3234: .4byte sub_80B40E8
@@ -119011,7 +119011,7 @@ GetStringWidthInTilesForScriptMenu: @ 80B511C
push {lr}
adds r1, r0, 0
ldr r0, _080B5134
- bl GetStringWidthGivenTextRendererTemplate
+ bl GetStringWidthGivenWindowConfig
lsls r0, 24
lsrs r0, 24
adds r1, r0, 0x7
@@ -119019,7 +119019,7 @@ GetStringWidthInTilesForScriptMenu: @ 80B511C
pop {r1}
bx r1
.align 2, 0
-_080B5134: .4byte gUnknown_081E6CE4
+_080B5134: .4byte gWindowConfig_81E6CE4
thumb_func_end GetStringWidthInTilesForScriptMenu
thumb_func_start sub_80B5138
@@ -120638,14 +120638,14 @@ sub_80B5DC8: @ 80B5DC8
push {r4,lr}
ldr r4, _080B5DE0
adds r0, r4, 0
- bl sub_8002A34
+ bl SetUpWindowConfig
adds r0, r4, 0
bl sub_8071C4C
pop {r4}
pop {r0}
bx r0
.align 2, 0
-_080B5DE0: .4byte gUnknown_081E6E88
+_080B5DE0: .4byte gWindowConfig_81E6E88
thumb_func_end sub_80B5DC8
thumb_func_start NamingScreen_ResetObjects
@@ -123842,7 +123842,7 @@ _080B7528: .4byte 0x020231cc
_080B752C: .4byte 0x02000000
_080B7530: .4byte 0x020234cc
_080B7534: .4byte gUnknown_0842C9A4
-_080B7538: .4byte gUnknown_081E6E88
+_080B7538: .4byte gWindowConfig_81E6E88
thumb_func_end sub_80B74FC
thumb_func_start sub_80B753C
@@ -124351,7 +124351,7 @@ sub_80B78A8: @ 80B78A8
pop {r0}
bx r0
.align 2, 0
-_080B78E4: .4byte gUnknown_081E6F4C
+_080B78E4: .4byte gWindowConfig_81E6F4C
_080B78E8: .4byte gUnknown_083CE358
_080B78EC: .4byte 0x02000000
_080B78F0: .4byte gUnknown_083CE368
@@ -124452,7 +124452,7 @@ sub_80B7960: @ 80B7960
.align 2, 0
_080B799C: .4byte 0x020231cc
_080B79A0: .4byte 0x02000011
-_080B79A4: .4byte gUnknown_081E6F4C
+_080B79A4: .4byte gWindowConfig_81E6F4C
thumb_func_end sub_80B7960
thumb_func_start IsEnoughMoney
@@ -129722,7 +129722,7 @@ sub_80BA0EC: @ 80BA0EC
bl ResetTasks
bl ResetSpriteData
ldr r0, _080BA220
- bl sub_8002A34
+ bl SetUpWindowConfig
ldr r0, _080BA224
bl sub_8071C4C
movs r0, 0x1
@@ -129801,8 +129801,8 @@ _080BA210: .4byte 0x040000d4
_080BA214: .4byte 0x8100c000
_080BA218: .4byte 0x85000100
_080BA21C: .4byte 0x81000200
-_080BA220: .4byte gUnknown_081E6C3C
-_080BA224: .4byte gUnknown_081E6CE4
+_080BA220: .4byte gWindowConfig_81E6C3C
+_080BA224: .4byte gWindowConfig_81E6CE4
_080BA228: .4byte 0x04000040
_080BA22C: .4byte 0x04000048
_080BA230: .4byte 0x00001111
@@ -131795,7 +131795,7 @@ sub_80BB25C: @ 80BB25C
lsls r0, 24
lsrs r6, r0, 24
ldr r0, _080BB374
- bl sub_8002A34
+ bl SetUpWindowConfig
ldr r0, _080BB378
bl sub_8071C4C
ldr r1, _080BB37C
@@ -131922,8 +131922,8 @@ _080BB306:
pop {r0}
bx r0
.align 2, 0
-_080BB374: .4byte gUnknown_081E6C3C
-_080BB378: .4byte gUnknown_081E6CE4
+_080BB374: .4byte gWindowConfig_81E6C3C
+_080BB378: .4byte gWindowConfig_81E6CE4
_080BB37C: .4byte 0x03005d34
_080BB380: .4byte 0xffff0000
_080BB384: .4byte 0xff00ffff
@@ -137622,7 +137622,7 @@ _080BDEFE:
adds r0, r1
adds r1, r5, 0
adds r1, 0x2A
- bl CompareStringWithoutExtendedControlCodes
+ bl StringCompareWithoutExtCtrlCodes
cmp r0, 0
bne _080BDF16
b _080BE012
@@ -137746,7 +137746,7 @@ _080BDFDE:
bl sub_80BDEAC
strb r0, [r5, 0x3]
adds r0, r6, 0
- bl StripExtendedControlCodes
+ bl SkipExtCtrlCodes
_080BE012:
pop {r3}
mov r8, r3
@@ -138009,7 +138009,7 @@ sub_80BE188: @ 80BE188
bl sub_80BDEAC
strb r0, [r4, 0x1F]
adds r0, r5, 0
- bl StripExtendedControlCodes
+ bl SkipExtCtrlCodes
_080BE224:
pop {r4-r6}
pop {r0}
@@ -138315,13 +138315,13 @@ sub_80BE478: @ 80BE478
ldr r1, _080BE564
mov r9, r1
mov r0, r9
- bl StringGetLength
+ bl StringLength
lsls r0, 16
lsrs r0, 16
cmp r0, 0x1
bls _080BE548
adds r0, r4, 0
- bl StringGetLength
+ bl StringLength
lsls r0, 16
lsrs r0, 16
cmp r0, 0x1
@@ -138381,7 +138381,7 @@ sub_80BE478: @ 80BE478
bl sub_80BDEAC
strb r0, [r4, 0x1F]
adds r0, r5, 0
- bl StripExtendedControlCodes
+ bl SkipExtCtrlCodes
_080BE548:
pop {r3,r4}
mov r8, r3
@@ -138630,7 +138630,7 @@ sub_80BE6A0: @ 80BE6A0
bl sub_80BDEAC
strb r0, [r4, 0xE]
adds r0, r5, 0
- bl StripExtendedControlCodes
+ bl SkipExtCtrlCodes
pop {r3}
mov r8, r3
pop {r4-r6}
@@ -140440,7 +140440,7 @@ sub_80BF4F4: @ 80BF4F4
ldr r1, _080BF538
adds r0, r1
adds r1, r5, 0
- bl CompareStringWithoutExtendedControlCodes
+ bl StringCompareWithoutExtCtrlCodes
cmp r0, 0
beq _080BF53C
movs r0, 0x1
@@ -140909,7 +140909,7 @@ _080BF844:
ldr r4, [sp, 0x20]
adds r4, 0xF
adds r0, r4, 0
- bl StringGetLength
+ bl StringLength
lsls r0, 16
lsrs r2, r0, 16
cmp r6, 0
@@ -140951,7 +140951,7 @@ _080BF8A6:
ldr r4, [sp, 0x20]
adds r4, 0x4
adds r0, r4, 0
- bl StringGetLength
+ bl StringLength
lsls r0, 16
lsrs r2, r0, 16
cmp r6, 0
@@ -140992,7 +140992,7 @@ _080BF8F4:
muls r4, r0
ldr r7, _080BF910
adds r0, r4, r7
- bl StringGetLength
+ bl StringLength
lsls r0, 16
lsrs r2, r0, 16
cmp r6, 0
@@ -141110,7 +141110,7 @@ sub_80BF9B4: @ 80BF9B4
bl PokemonGetField
ldr r0, _080BF9EC
adds r1, r4, 0
- bl CompareStringWithoutExtendedControlCodes
+ bl StringCompareWithoutExtCtrlCodes
cmp r0, 0
beq _080BF9F0
bl sub_80BE478
@@ -143054,7 +143054,7 @@ sub_80C08FC: @ 80C08FC
bhi _080C0914
adds r0, r5, 0
movs r1, 0x1
- bl StopMusicWhileStringIsPrinted
+ bl SetStringCharset
_080C0914:
pop {r4,r5}
pop {r0}
@@ -143125,7 +143125,7 @@ _080C0980:
adds r0, r1
adds r1, r4, 0
adds r1, 0x8
- bl CompareStringWithoutExtendedControlCodes
+ bl StringCompareWithoutExtCtrlCodes
cmp r0, 0
bne _080C09CC
ldr r1, _080C09C8
@@ -145619,10 +145619,10 @@ sub_80C2020: @ 80C2020
strh r0, [r5]
ldr r4, _080C20F0
adds r0, r4, 0
- bl sub_8002A34
+ bl SetUpWindowConfig
ldr r0, _080C20F4
adds r1, r4, 0
- bl sub_8002D54
+ bl InitWindowFromConfig
ldr r1, _080C20F8
movs r2, 0xF8
lsls r2, 6
@@ -145715,7 +145715,7 @@ sub_80C2020: @ 80C2020
pop {r0}
bx r0
.align 2, 0
-_080C20F0: .4byte gUnknown_081E6FA0
+_080C20F0: .4byte gWindowConfig_81E6FA0
_080C20F4: .4byte 0x0202e908
_080C20F8: .4byte 0x04000008
_080C20FC: .4byte 0x00001803
@@ -145794,7 +145794,7 @@ _080C2162:
movs r1, 0
bl decompress_palette
ldr r0, _080C2234
- bl sub_8002A1C
+ bl LoadFontDefaultPalette
movs r6, 0
_080C21C0:
lsls r5, r6, 24
@@ -145847,7 +145847,7 @@ _080C2224: .4byte 0x0600e000
_080C2228: .4byte gUnknown_08D1A250
_080C222C: .4byte 0x0600f000
_080C2230: .4byte gUnknown_08D1A618
-_080C2234: .4byte gUnknown_081E6FA0
+_080C2234: .4byte gWindowConfig_81E6FA0
_080C2238: .4byte 0x000060b2
_080C223C: .4byte 0x000060a4
_080C2240:
@@ -147799,7 +147799,7 @@ _080C31CE:
bge _080C31CE
mov r0, r8
mov r1, r9
- bl GetStringWidthGivenTextRendererTemplate
+ bl GetStringWidthGivenWindowConfig
lsls r0, 24
lsrs r5, r0, 24
ldr r2, _080C32D4
@@ -147901,7 +147901,7 @@ _080C32B2:
b _080C3322
.align 2, 0
_080C32C0: .4byte 0x02020004
-_080C32C4: .4byte gUnknown_081E7278
+_080C32C4: .4byte gWindowConfig_81E7278
_080C32C8: .4byte 0x06010000
_080C32CC: .4byte 0x040000d4
_080C32D0: .4byte 0x85000100
@@ -148127,7 +148127,7 @@ _080C34A8: .4byte 0x02018000
thumb_func_start sub_80C34AC
sub_80C34AC: @ 80C34AC
push {lr}
- bl StringGetLength
+ bl StringLength
lsls r0, 16
lsrs r0, 16
lsls r1, r0, 1
@@ -150457,7 +150457,7 @@ sub_80C4674: @ 80C4674
bne _080C4690
adds r0, r4, 0
movs r1, 0x1
- bl StopMusicWhileStringIsPrinted
+ bl SetStringCharset
_080C4690:
pop {r4}
pop {r0}
@@ -150495,7 +150495,7 @@ sub_80C4698: @ 80C4698
lsls r1, 24
lsrs r1, 24
adds r0, r5, 0
- bl StopMusicWhileStringIsPrinted
+ bl SetStringCharset
_080C46DA:
pop {r4,r5}
pop {r0}
@@ -158819,7 +158819,7 @@ sub_80C86A0: @ 80C86A0
b _080C872C
_080C86B6:
adds r0, r4, 0
- bl StringGetLength
+ bl StringLength
lsls r0, 16
lsrs r0, 16
cmp r0, 0x5
@@ -158990,7 +158990,7 @@ _080C87EA:
lsls r1, 24
lsrs r1, 24
adds r0, r4, 0
- bl StopMusicWhileStringIsPrinted
+ bl SetStringCharset
b _080C883E
.align 2, 0
_080C8818: .4byte 0x02038570
@@ -159003,7 +159003,7 @@ _080C8828:
bne _080C8838
adds r0, r4, 0
movs r1, 0x1
- bl StopMusicWhileStringIsPrinted
+ bl SetStringCharset
b _080C883E
_080C8838:
strb r0, [r4, 0x5]
@@ -220531,10 +220531,10 @@ _080E6344:
_080E637C: .4byte gUnknown_083DB698
_080E6380:
ldr r0, _080E6388
- bl sub_8002A34
+ bl SetUpWindowConfig
b _080E6402
.align 2, 0
-_080E6388: .4byte gUnknown_081E6DA8
+_080E6388: .4byte gWindowConfig_81E6DA8
_080E638C:
ldr r0, _080E63A0
bl sub_8071C4C
@@ -220543,8 +220543,8 @@ _080E638C:
bl sub_8071EF4
b _080E6402
.align 2, 0
-_080E63A0: .4byte gUnknown_081E6D54
-_080E63A4: .4byte gUnknown_081E6DA8
+_080E63A0: .4byte gWindowConfig_81E6D54
+_080E63A4: .4byte gWindowConfig_81E6DA8
_080E63A8:
bl sub_80E6424
b _080E6402
@@ -226567,7 +226567,7 @@ sub_80E91D4: @ 80E91D4
bl sub_80E9198
b _080E935C
.align 2, 0
-_080E91FC: .4byte gUnknown_081E6DA8
+_080E91FC: .4byte gWindowConfig_81E6DA8
_080E9200:
bl sub_80E91A4
lsls r0, 24
@@ -226837,7 +226837,7 @@ _080E93FA:
bl Print
b _080E9476
.align 2, 0
-_080E943C: .4byte gUnknown_081E6D8C
+_080E943C: .4byte gWindowConfig_81E6D8C
_080E9440: .4byte gUnknown_083DB694
_080E9444: .4byte 0x00009f8e
_080E9448: .4byte 0x00009f90
@@ -226868,7 +226868,7 @@ _080E9476:
bx r0
.align 2, 0
_080E9484: .4byte 0x00009f91
-_080E9488: .4byte gUnknown_081E6DA8
+_080E9488: .4byte gWindowConfig_81E6DA8
thumb_func_end sub_80E9368
thumb_func_start sub_80E948C
@@ -227023,7 +227023,7 @@ sub_80E95A4: @ 80E95A4
ldr r0, [r0]
mov pc, r0
.align 2, 0
-_080E95C0: .4byte gUnknown_081E6D8C
+_080E95C0: .4byte gWindowConfig_81E6D8C
_080E95C4: .4byte gUnknown_083DB694
_080E95C8: .4byte _080E95CC
.align 2, 0
@@ -227067,7 +227067,7 @@ _080E9612:
pop {r0}
bx r0
.align 2, 0
-_080E961C: .4byte gUnknown_081E6DA8
+_080E961C: .4byte gWindowConfig_81E6DA8
thumb_func_end sub_80E95A4
thumb_func_start sub_80E9620
@@ -227232,7 +227232,7 @@ sub_80E9744: @ 80E9744
ldr r0, [r0]
mov pc, r0
.align 2, 0
-_080E9760: .4byte gUnknown_081E6D8C
+_080E9760: .4byte gWindowConfig_81E6D8C
_080E9764: .4byte gUnknown_083DB694
_080E9768: .4byte _080E976C
.align 2, 0
@@ -227276,7 +227276,7 @@ _080E97B2:
pop {r0}
bx r0
.align 2, 0
-_080E97BC: .4byte gUnknown_081E6DA8
+_080E97BC: .4byte gWindowConfig_81E6DA8
thumb_func_end sub_80E9744
thumb_func_start sub_80E97C0
@@ -227429,7 +227429,7 @@ sub_80E98C4: @ 80E98C4
ldr r0, [r0]
mov pc, r0
.align 2, 0
-_080E98E0: .4byte gUnknown_081E6D8C
+_080E98E0: .4byte gWindowConfig_81E6D8C
_080E98E4: .4byte gUnknown_083DB694
_080E98E8: .4byte _080E98EC
.align 2, 0
@@ -227474,7 +227474,7 @@ _080E9936:
pop {r0}
bx r0
.align 2, 0
-_080E993C: .4byte gUnknown_081E6DA8
+_080E993C: .4byte gWindowConfig_81E6DA8
thumb_func_end sub_80E98C4
thumb_func_start sub_80E9940
@@ -227545,7 +227545,7 @@ _080E99A4:
blt _080E99A4
b _080E9A08
.align 2, 0
-_080E99C4: .4byte gUnknown_081E6D54
+_080E99C4: .4byte gWindowConfig_81E6D54
_080E99C8: .4byte gUnknown_083DB694
_080E99CC: .4byte 0x000001b5
_080E99D0: .4byte 0x00009dc9
@@ -227707,7 +227707,7 @@ _080E9ADE:
pop {r0}
bx r0
.align 2, 0
-_080E9AF4: .4byte gUnknown_081E6D54
+_080E9AF4: .4byte gWindowConfig_81E6D54
thumb_func_end sub_80E9AD4
thumb_func_start sub_80E9AF8
@@ -227782,7 +227782,7 @@ _080E9B80: .4byte 0x00009e14
_080E9B84: .4byte 0x00009e17
_080E9B88: .4byte 0x000099a6
_080E9B8C: .4byte 0x00009a2a
-_080E9B90: .4byte gUnknown_081E6D70
+_080E9B90: .4byte gWindowConfig_81E6D70
_080E9B94:
ldr r0, _080E9BE0
bl sub_8071E2C
@@ -227820,7 +227820,7 @@ _080E9B9A:
blt _080E9B58
b _080E9C52
.align 2, 0
-_080E9BE0: .4byte gUnknown_081E6D54
+_080E9BE0: .4byte gWindowConfig_81E6D54
_080E9BE4: .4byte gUnknown_083DB694
_080E9BE8: .4byte 0x00009a2a
_080E9BEC: .4byte 0x00009e14
@@ -227881,7 +227881,7 @@ _080E9C52:
pop {r0}
bx r0
.align 2, 0
-_080E9C64: .4byte gUnknown_081E6D54
+_080E9C64: .4byte gWindowConfig_81E6D54
_080E9C68: .4byte 0x000099a6
_080E9C6C: .4byte 0x00009a2a
_080E9C70: .4byte 0x00009e14
@@ -228054,7 +228054,7 @@ sub_80E9D7C: @ 80E9D7C
subs r0, r6
b _080E9DCC
.align 2, 0
-_080E9DAC: .4byte gUnknown_081E6D54
+_080E9DAC: .4byte gWindowConfig_81E6D54
_080E9DB0: .4byte gUnknown_083DB694
_080E9DB4: .4byte 0x000001b5
_080E9DB8:
@@ -230792,7 +230792,7 @@ sub_80EB2D4: @ 80EB2D4
cmp r0, 0
beq _080EB2F8
ldr r0, _080EB2F4
- bl StringGetLength
+ bl StringLength
lsls r0, 16
lsrs r0, 16
b _080EB374
@@ -238729,16 +238729,16 @@ _080EF2E4:
b _080EF40C
_080EF2EA:
ldr r0, _080EF2F4
- bl sub_8002A34
+ bl SetUpWindowConfig
b _080EF40C
.align 2, 0
-_080EF2F4: .4byte gUnknown_081E7224
+_080EF2F4: .4byte gWindowConfig_81E7224
_080EF2F8:
ldr r0, _080EF300
bl sub_8071C58
b _080EF40C
.align 2, 0
-_080EF300: .4byte gUnknown_081E7224
+_080EF300: .4byte gWindowConfig_81E7224
_080EF304:
bl sub_8071C94
cmp r0, 0
@@ -239483,16 +239483,16 @@ _080EF8CC:
b _080EF9DC
_080EF8D2:
ldr r0, _080EF8DC
- bl sub_8002A34
+ bl SetUpWindowConfig
b _080EF9DC
.align 2, 0
-_080EF8DC: .4byte gUnknown_081E7224
+_080EF8DC: .4byte gWindowConfig_81E7224
_080EF8E0:
ldr r0, _080EF8E8
bl sub_8071C58
b _080EF9DC
.align 2, 0
-_080EF8E8: .4byte gUnknown_081E7224
+_080EF8E8: .4byte gWindowConfig_81E7224
_080EF8EC:
bl sub_8071C94
cmp r0, 0
@@ -240373,16 +240373,16 @@ _080EFFE0: .4byte gUnknown_083DFEC4
_080EFFE4: .4byte 0x0000d162
_080EFFE8:
ldr r0, _080EFFF0
- bl sub_8002A34
+ bl SetUpWindowConfig
b _080F0154
.align 2, 0
-_080EFFF0: .4byte gUnknown_081E7080
+_080EFFF0: .4byte gWindowConfig_81E7080
_080EFFF4:
ldr r0, _080EFFFC
bl sub_8071C58
b _080F0154
.align 2, 0
-_080EFFFC: .4byte gUnknown_081E7080
+_080EFFFC: .4byte gWindowConfig_81E7080
_080F0000:
bl sub_8071C94
cmp r0, 0
@@ -240489,7 +240489,7 @@ _080F00AC:
b _080F0154
.align 2, 0
_080F00EC: .4byte gUnknown_083E0254
-_080F00F0: .4byte gUnknown_081E6692
+_080F00F0: .4byte gUnknownPalette_81E6692
_080F00F4: .4byte gUnknown_08E8A1C2
_080F00F8:
ldr r0, _080F0110
@@ -240774,16 +240774,16 @@ _080F033C: .4byte 0x000087c8
_080F0340: .4byte 0x0000d162
_080F0344:
ldr r0, _080F034C
- bl sub_8002A34
+ bl SetUpWindowConfig
b _080F0618
.align 2, 0
-_080F034C: .4byte gUnknown_081E70D4
+_080F034C: .4byte gWindowConfig_81E70D4
_080F0350:
ldr r0, _080F0358
bl sub_8071C58
b _080F0618
.align 2, 0
-_080F0358: .4byte gUnknown_081E70D4
+_080F0358: .4byte gWindowConfig_81E70D4
_080F035C:
bl sub_8071C94
cmp r0, 0
@@ -240863,7 +240863,7 @@ _080F0404: .4byte gUnknown_083DFEC4
_080F0408: .4byte 0x000087ca
_080F040C: .4byte gUnknown_083E0294
_080F0410: .4byte 0x0202eac8
-_080F0414: .4byte gUnknown_081E6692
+_080F0414: .4byte gUnknownPalette_81E6692
_080F0418:
cmp r0, 0x1
bne _080F0464
@@ -240895,7 +240895,7 @@ _080F0418:
.align 2, 0
_080F0458: .4byte gUnknown_083E0274
_080F045C: .4byte 0x0202eac8
-_080F0460: .4byte gUnknown_081E6692
+_080F0460: .4byte gUnknownPalette_81E6692
_080F0464:
ldr r4, _080F04B0
adds r0, r4, 0
@@ -241350,7 +241350,7 @@ _080F080A:
bx r0
.align 2, 0
_080F0810: .4byte 0x00008788
-_080F0814: .4byte gUnknown_081E710C
+_080F0814: .4byte gWindowConfig_81E710C
_080F0818: .4byte gUnknown_083DFEC4
thumb_func_end ShowMapNamePopUpWindow
@@ -241369,7 +241369,7 @@ sub_80F081C: @ 80F081C
ldr r0, [r0]
mov pc, r0
.align 2, 0
-_080F0838: .4byte gUnknown_081E710C
+_080F0838: .4byte gWindowConfig_81E710C
_080F083C: .4byte _080F0840
.align 2, 0
_080F0840:
@@ -241459,7 +241459,7 @@ sub_80F08E4: @ 80F08E4
pop {r0}
bx r0
.align 2, 0
-_080F08FC: .4byte gUnknown_081E710C
+_080F08FC: .4byte gWindowConfig_81E710C
thumb_func_end sub_80F08E4
thumb_func_start sub_80F0900
@@ -241648,7 +241648,7 @@ _080F0A40:
_080F0A64: .4byte gUnknown_083DFEC4
_080F0A68: .4byte 0x000087c8
_080F0A6C: .4byte 0x00008788
-_080F0A70: .4byte gUnknown_081E70D4
+_080F0A70: .4byte gWindowConfig_81E70D4
thumb_func_end sub_80F0A24
thumb_func_start sub_80F0A74
@@ -241704,7 +241704,7 @@ sub_80F0A74: @ 80F0A74
.align 2, 0
_080F0ADC: .4byte gUnknown_083DFEC4
_080F0AE0: .4byte 0x00008788
-_080F0AE4: .4byte gUnknown_081E70D4
+_080F0AE4: .4byte gWindowConfig_81E70D4
_080F0AE8: .4byte 0x0000d158
_080F0AEC: .4byte 0x0000ceed
_080F0AF0: .4byte 0x0600f000
@@ -241816,7 +241816,7 @@ _080F0BB4:
_080F0BBC: .4byte 0x00000306
_080F0BC0: .4byte 0x00008778
_080F0BC4: .4byte 0x0000876c
-_080F0BC8: .4byte gUnknown_081E70D4
+_080F0BC8: .4byte gWindowConfig_81E70D4
_080F0BCC:
ldr r0, _080F0C10
bl sub_8071E2C
@@ -241852,7 +241852,7 @@ _080F0BE2:
movs r0, 0
b _080F0C22
.align 2, 0
-_080F0C10: .4byte gUnknown_081E70D4
+_080F0C10: .4byte gWindowConfig_81E70D4
_080F0C14: .4byte 0x00008778
_080F0C18: .4byte gUnknown_083DFEC4
_080F0C1C: .4byte 0x0000d15c
@@ -241942,7 +241942,7 @@ _080F0C64:
.align 2, 0
_080F0CBC: .4byte 0x00000306
_080F0CC0: .4byte 0x0000ffff
-_080F0CC4: .4byte gUnknown_081E70D4
+_080F0CC4: .4byte gWindowConfig_81E70D4
_080F0CC8: .4byte 0x00008770
_080F0CCC: .4byte 0x00008778
_080F0CD0:
@@ -242069,7 +242069,7 @@ _080F0D8C:
mov pc, r0
.align 2, 0
_080F0DB8: .4byte 0x00000306
-_080F0DBC: .4byte gUnknown_081E70D4
+_080F0DBC: .4byte gWindowConfig_81E70D4
_080F0DC0: .4byte 0x00008778
_080F0DC4: .4byte _080F0DC8
.align 2, 0
@@ -242267,7 +242267,7 @@ _080F0F52:
.align 2, 0
_080F0F58: .4byte 0x00000306
_080F0F5C: .4byte 0x00008778
-_080F0F60: .4byte gUnknown_081E70D4
+_080F0F60: .4byte gWindowConfig_81E70D4
thumb_func_end sub_80F0EF4
thumb_func_start sub_80F0F64
@@ -242389,7 +242389,7 @@ sub_80F0FFC: @ 80F0FFC
_080F1048: .4byte gUnknown_083DFEC4
_080F104C: .4byte 0x00008788
_080F1050: .4byte 0x0000ceea
-_080F1054: .4byte gUnknown_081E710C
+_080F1054: .4byte gWindowConfig_81E710C
_080F1058: .4byte 0x0000d138
thumb_func_end sub_80F0FFC
@@ -242465,16 +242465,16 @@ _080F10FC: .4byte gUnknown_083DFEC4
_080F1100: .4byte 0x0000d162
_080F1104:
ldr r0, _080F110C
- bl sub_8002A34
+ bl SetUpWindowConfig
b _080F1218
.align 2, 0
-_080F110C: .4byte gUnknown_081E70B8
+_080F110C: .4byte gWindowConfig_81E70B8
_080F1110:
ldr r0, _080F1118
bl sub_8071C58
b _080F1218
.align 2, 0
-_080F1118: .4byte gUnknown_081E70B8
+_080F1118: .4byte gWindowConfig_81E70B8
_080F111C:
bl sub_8071C94
cmp r0, 0
@@ -242557,7 +242557,7 @@ _080F1194:
_080F11CC: .4byte gUnknown_08E9FAFC
_080F11D0: .4byte gUnknown_083E03A8
_080F11D4: .4byte gUnknown_083E3C60
-_080F11D8: .4byte gUnknown_081E6692
+_080F11D8: .4byte gUnknownPalette_81E6692
_080F11DC:
bl sub_80F1438
b _080F1218
@@ -243030,7 +243030,7 @@ _080F158A:
pop {r0}
bx r0
.align 2, 0
-_080F15A4: .4byte gUnknown_081E72B0
+_080F15A4: .4byte gEmptyString_81E72B0
thumb_func_end sub_80F1494
thumb_func_start sub_80F15A8
@@ -243399,7 +243399,7 @@ _080F186C:
b _080F1914
.align 2, 0
_080F18AC: .4byte gUnknown_083E0254
-_080F18B0: .4byte gUnknown_081E6692
+_080F18B0: .4byte gUnknownPalette_81E6692
_080F18B4: .4byte gUnknown_08E8A1C2
_080F18B8:
ldr r0, _080F18D0
@@ -243534,7 +243534,7 @@ _080F19B8:
pop {r0}
bx r0
.align 2, 0
-_080F19D0: .4byte gUnknown_081E72B0
+_080F19D0: .4byte gEmptyString_81E72B0
_080F19D4: .4byte gUnknown_083DFEC4
_080F19D8: .4byte 0x00008788
thumb_func_end sub_80F1934
@@ -248886,7 +248886,7 @@ _080F42A4: .4byte gUnknown_083DFEC8
_080F42A8: .4byte 0x00001111
_080F42AC: .4byte 0x040000d4
_080F42B0: .4byte 0x81000140
-_080F42B4: .4byte gUnknown_081E70F0
+_080F42B4: .4byte gWindowConfig_81E70F0
_080F42B8: .4byte 0x81000030
_080F42BC: .4byte 0x0fffffff
_080F42C0: .4byte 0x80000040
@@ -249364,7 +249364,7 @@ _080F4676:
bx r0
.align 2, 0
_080F467C: .4byte 0x00008829
-_080F4680: .4byte gUnknown_081E72B0
+_080F4680: .4byte gEmptyString_81E72B0
_080F4684: .4byte 0x000088e9
_080F4688: .4byte 0x00008937
thumb_func_end sub_80F45A0
@@ -253413,7 +253413,7 @@ _080F65EA:
movs r4, 0xFF
_080F65FC:
adds r0, r5, 0
- bl StringGetLength
+ bl StringLength
lsls r0, 16
lsrs r0, 16
adds r5, r0
@@ -257029,7 +257029,7 @@ _080F81D8:
ldr r4, _080F820C
ldr r0, [r4]
ldr r1, _080F8210
- bl sub_8002D54
+ bl InitWindowFromConfig
ldr r0, [r4]
ldr r1, _080F8214
movs r2, 0xF
@@ -257048,7 +257048,7 @@ _080F81D8:
b _080F83C6
.align 2, 0
_080F820C: .4byte 0x0202e9c8
-_080F8210: .4byte gUnknown_081E6CE4
+_080F8210: .4byte gWindowConfig_81E6CE4
_080F8214: .4byte 0x020234cc
_080F8218:
bl sub_8074FD0
@@ -257535,7 +257535,7 @@ sub_80F8560: @ 80F8560
ldr r0, _080F8594
adds r5, r0
adds r0, r6, 0
- bl StringGetLength
+ bl StringLength
adds r4, r0, 0
lsls r4, 24
lsrs r4, 24
@@ -258243,16 +258243,16 @@ _080F8ADA:
_080F8B0C: .4byte 0x04000010
_080F8B10:
ldr r0, _080F8B18
- bl sub_8002A34
+ bl SetUpWindowConfig
b _080F8D30
.align 2, 0
-_080F8B18: .4byte gUnknown_081E6DFC
+_080F8B18: .4byte gWindowConfig_81E6DFC
_080F8B1C:
ldr r0, _080F8B24
bl sub_8071C58
b _080F8D30
.align 2, 0
-_080F8B24: .4byte gUnknown_081E6DFC
+_080F8B24: .4byte gWindowConfig_81E6DFC
_080F8B28:
bl sub_8071C94
cmp r0, 0
@@ -258547,7 +258547,7 @@ sub_80F8D7C: @ 80F8D7C
adds r0, r4, 0
bl sub_814A568
adds r0, r4, 0
- bl StringGetLength
+ bl StringLength
lsls r0, 16
lsrs r0, 16
adds r4, r0
@@ -258626,7 +258626,7 @@ _080F8E04:
ldr r1, _080F8E44
bl StringCopy
ldr r0, _080F8E40
- bl StringGetLength
+ bl StringLength
movs r2, 0x86
lsls r2, 1
adds r1, r4, r2
@@ -265320,17 +265320,17 @@ _080FC0C4:
b _080FC1E6
_080FC104:
ldr r0, _080FC10C
- bl sub_8002A34
+ bl SetUpWindowConfig
b _080FC1E6
.align 2, 0
-_080FC10C: .4byte gUnknown_081E7224
+_080FC10C: .4byte gWindowConfig_81E7224
_080FC110:
ldr r0, _080FC11C
bl sub_8071C4C
bl sub_8071EF4
b _080FC1E6
.align 2, 0
-_080FC11C: .4byte gUnknown_081E7224
+_080FC11C: .4byte gWindowConfig_81E7224
_080FC120:
ldr r4, _080FC158
adds r0, r4, 0
@@ -277198,14 +277198,14 @@ sub_8101C84: @ 8101C84
push {r4,lr}
ldr r4, _08101C9C
adds r0, r4, 0
- bl sub_8002A34
+ bl SetUpWindowConfig
adds r0, r4, 0
bl sub_8071C4C
pop {r4}
pop {r0}
bx r0
.align 2, 0
-_08101C9C: .4byte gUnknown_081E7128
+_08101C9C: .4byte gWindowConfig_81E7128
thumb_func_end sub_8101C84
thumb_func_start sub_8101CA0
@@ -283624,7 +283624,7 @@ sub_8104B80: @ 8104B80
pop {r0}
bx r0
.align 2, 0
-_08104BC0: .4byte gUnknown_081E7144
+_08104BC0: .4byte gWindowConfig_81E7144
_08104BC4: .4byte gUnknown_0842CAF7
thumb_func_end sub_8104B80
@@ -283687,7 +283687,7 @@ sub_8104BFC: @ 8104BFC
pop {r0}
bx r0
.align 2, 0
-_08104C3C: .4byte gUnknown_081E7128
+_08104C3C: .4byte gWindowConfig_81E7128
_08104C40: .4byte 0x02000000
thumb_func_end sub_8104BFC
@@ -287513,12 +287513,12 @@ sub_81068FC: @ 81068FC
adds r0, r4, 0
bl sub_8071C4C
adds r0, r4, 0
- bl sub_8002A34
+ bl SetUpWindowConfig
pop {r4}
pop {r0}
bx r0
.align 2, 0
-_08106914: .4byte gUnknown_081E7160
+_08106914: .4byte gWindowConfig_81E7160
thumb_func_end sub_81068FC
thumb_func_start sub_8106918
@@ -294715,7 +294715,7 @@ sub_8109E80: @ 8109E80
ldr r0, _0810A0C8
bl LoadSpritePalettes
ldr r0, _0810A0CC
- bl sub_8002A34
+ bl SetUpWindowConfig
ldr r0, _0810A0D0
bl sub_8071C4C
movs r0, 0x1
@@ -294878,8 +294878,8 @@ _0810A0BC: .4byte gUnknown_083F62EC
_0810A0C0: .4byte gUnknown_083F7794
_0810A0C4: .4byte gUnknown_083F77A4
_0810A0C8: .4byte gUnknown_083F77B4
-_0810A0CC: .4byte gUnknown_081E6C3C
-_0810A0D0: .4byte gUnknown_081E6CE4
+_0810A0CC: .4byte gWindowConfig_81E6C3C
+_0810A0D0: .4byte gWindowConfig_81E6CE4
_0810A0D4: .4byte 0x04000208
_0810A0D8: .4byte 0x04000200
_0810A0DC: .4byte 0x04000004
@@ -295792,7 +295792,7 @@ _0810A816:
ldr r0, _0810A858
bl LoadSpritePalettes
ldr r0, _0810A85C
- bl sub_8002A34
+ bl SetUpWindowConfig
ldr r0, _0810A860
bl sub_8071C4C
add sp, 0x8
@@ -295805,8 +295805,8 @@ _0810A816:
_0810A850: .4byte gUnknown_08E8F824
_0810A854: .4byte gUnknown_083F7A90
_0810A858: .4byte gUnknown_083F7AA0
-_0810A85C: .4byte gUnknown_081E6C3C
-_0810A860: .4byte gUnknown_081E6CE4
+_0810A85C: .4byte gWindowConfig_81E6C3C
+_0810A860: .4byte gWindowConfig_81E6CE4
thumb_func_end LoadWallClockGraphics
thumb_func_start sub_810A864
@@ -297777,19 +297777,19 @@ _0810B7AC: .4byte 0x03001770
_0810B7B0: .4byte 0x0000043c
_0810B7B4:
ldr r0, _0810B7BC
- bl sub_8002A34
+ bl SetUpWindowConfig
b _0810B91C
.align 2, 0
-_0810B7BC: .4byte gUnknown_081E6E34
+_0810B7BC: .4byte gWindowConfig_81E6E34
_0810B7C0:
ldr r0, _0810B7D0
- bl sub_8002A34
+ bl SetUpWindowConfig
ldr r1, _0810B7D4
ldr r0, _0810B7D8
adds r1, r0
b _0810B922
.align 2, 0
-_0810B7D0: .4byte gUnknown_081E6E50
+_0810B7D0: .4byte gWindowConfig_81E6E50
_0810B7D4: .4byte 0x03001770
_0810B7D8: .4byte 0x0000043c
_0810B7DC:
@@ -297797,7 +297797,7 @@ _0810B7DC:
bl sub_8071C58
b _0810B91C
.align 2, 0
-_0810B7E4: .4byte gUnknown_081E6E34
+_0810B7E4: .4byte gWindowConfig_81E6E34
_0810B7E8:
bl sub_8071C94
cmp r0, 0
@@ -297816,7 +297816,7 @@ _0810B804:
bl sub_8071C58
b _0810B91C
.align 2, 0
-_0810B80C: .4byte gUnknown_081E6E50
+_0810B80C: .4byte gWindowConfig_81E6E50
_0810B810:
bl sub_8071C94
cmp r0, 0
@@ -298199,7 +298199,7 @@ sub_810BB0C: @ 810BB0C
pop {r0}
bx r0
.align 2, 0
-_0810BB28: .4byte gUnknown_081E6E34
+_0810BB28: .4byte gWindowConfig_81E6E34
_0810BB2C: .4byte 0x00000111
thumb_func_end sub_810BB0C
@@ -298231,7 +298231,7 @@ sub_810BB30: @ 810BB30
pop {r0}
bx r0
.align 2, 0
-_0810BB70: .4byte gUnknown_081E6E34
+_0810BB70: .4byte gWindowConfig_81E6E34
_0810BB74: .4byte gUnknown_0840EBED
_0810BB78: .4byte gUnknown_0840EBF3
_0810BB7C: .4byte gUnknown_0840EBF7
@@ -298292,7 +298292,7 @@ _0810BBB0:
bl Reset
b _0810BC6C
.align 2, 0
-_0810BBF4: .4byte gUnknown_081E6E34
+_0810BBF4: .4byte gWindowConfig_81E6E34
_0810BBF8: .4byte 0x020231cc
_0810BBFC: .4byte 0x02025734
_0810BC00: .4byte 0x02039248
@@ -298692,7 +298692,7 @@ _0810BECC:
bl Print
b _0810BF2C
.align 2, 0
-_0810BF10: .4byte gUnknown_081E6E34
+_0810BF10: .4byte gWindowConfig_81E6E34
_0810BF14: .4byte 0x02039248
_0810BF18: .4byte 0x020231cc
_0810BF1C: .4byte 0x02025f2c
@@ -299303,7 +299303,7 @@ _0810C37C:
bx r0
.align 2, 0
_0810C3E8: .4byte 0x02039244
-_0810C3EC: .4byte gUnknown_081E6E50
+_0810C3EC: .4byte gWindowConfig_81E6E50
_0810C3F0: .4byte 0x0203924c
_0810C3F4: .4byte gUnknown_083F7EF4
_0810C3F8: .4byte 0x03000758
@@ -299504,7 +299504,7 @@ sub_810C540: @ 810C540
pop {r0}
bx r0
.align 2, 0
-_0810C5A0: .4byte gUnknown_081E6E50
+_0810C5A0: .4byte gWindowConfig_81E6E50
_0810C5A4: .4byte 0x020231cc
_0810C5A8: .4byte gUnknown_083F7EB8
_0810C5AC: .4byte 0x02025734
@@ -299645,7 +299645,7 @@ _0810C698:
bx r0
.align 2, 0
_0810C6CC: .4byte 0x02039248
-_0810C6D0: .4byte gUnknown_081E6E50
+_0810C6D0: .4byte gWindowConfig_81E6E50
_0810C6D4: .4byte 0x03004b20
_0810C6D8: .4byte sub_810BF7C
thumb_func_end sub_810C668
@@ -299700,7 +299700,7 @@ sub_810C704: @ 810C704
pop {r0}
bx r0
.align 2, 0
-_0810C738: .4byte gUnknown_081E6E34
+_0810C738: .4byte gWindowConfig_81E6E34
_0810C73C: .4byte 0x02039248
_0810C740: .4byte 0x03004b20
_0810C744: .4byte sub_810C6DC
@@ -306268,7 +306268,7 @@ sub_810F96C: @ 810F96C
bl PokemonGetField
ldr r0, _0810F9A0
adds r1, r4, 0
- bl CompareStringWithoutExtendedControlCodes
+ bl StringCompareWithoutExtCtrlCodes
cmp r0, 0
beq _0810F9A4
movs r0, 0x1
@@ -306954,7 +306954,7 @@ _0810FED0:
bne _0810FEF2
adds r0, r4, 0
movs r1, 0x1
- bl StopMusicWhileStringIsPrinted
+ bl SetStringCharset
_0810FEF2:
pop {r4}
pop {r0}
@@ -307117,7 +307117,7 @@ _0810FFFE:
strb r0, [r6, 0x7]
adds r0, r6, 0
mov r1, r8
- bl CompareStringWithoutExtendedControlCodes
+ bl StringCompareWithoutExtCtrlCodes
cmp r0, 0
bne _08110028
ldrh r0, [r4, 0x8]
@@ -307520,7 +307520,7 @@ sub_81102E8: @ 81102E8
adds r0, r4, 0
movs r2, 0x1
movs r3, 0x4
- bl ConvertIntToDecimalStringN_UnknownExtCtrlCode
+ bl ConvertIntToDecimalStringN_DigitWidth6
ldr r4, _0811033C
movs r0, 0x18
bl sub_8053108
@@ -307528,7 +307528,7 @@ sub_81102E8: @ 81102E8
adds r0, r4, 0
movs r2, 0x1
movs r3, 0x4
- bl ConvertIntToDecimalStringN_UnknownExtCtrlCode
+ bl ConvertIntToDecimalStringN_DigitWidth6
ldr r4, _08110340
movs r0, 0x19
bl sub_8053108
@@ -307536,7 +307536,7 @@ sub_81102E8: @ 81102E8
adds r0, r4, 0
movs r2, 0x1
movs r3, 0x4
- bl ConvertIntToDecimalStringN_UnknownExtCtrlCode
+ bl ConvertIntToDecimalStringN_DigitWidth6
ldr r0, _08110344
movs r1, 0x3
movs r2, 0x3
@@ -310457,7 +310457,7 @@ evolution_cutscene: @ 8111984
strh r5, [r0]
ldr r4, _08111C18
adds r0, r4, 0
- bl sub_8002A34
+ bl SetUpWindowConfig
bl sub_8073B94
ldr r0, _08111C1C
strh r5, [r0]
@@ -310480,7 +310480,7 @@ evolution_cutscene: @ 8111984
strh r5, [r0]
ldr r0, _08111C3C
adds r1, r4, 0
- bl sub_8002D54
+ bl InitWindowFromConfig
ldr r1, _08111C40
movs r0, 0x9
strb r0, [r1]
@@ -310705,7 +310705,7 @@ evolution_cutscene: @ 8111984
.align 2, 0
_08111C10: .4byte 0x05006000
_08111C14: .4byte 0x0400004c
-_08111C18: .4byte gUnknown_081E6C58
+_08111C18: .4byte gWindowConfig_81E6C58
_08111C1C: .4byte 0x030042a4
_08111C20: .4byte 0x030042a0
_08111C24: .4byte 0x030042c0
@@ -310796,7 +310796,7 @@ sub_8111C90: @ 8111C90
strh r5, [r0]
ldr r4, _08111E28
adds r0, r4, 0
- bl sub_8002A34
+ bl SetUpWindowConfig
bl sub_8073B94
ldr r0, _08111E2C
strh r5, [r0]
@@ -310819,7 +310819,7 @@ sub_8111C90: @ 8111C90
strh r5, [r0]
ldr r0, _08111E4C
adds r1, r4, 0
- bl sub_8002D54
+ bl InitWindowFromConfig
ldr r1, _08111E50
movs r0, 0x9
strb r0, [r1]
@@ -310917,7 +310917,7 @@ _08111E18: .4byte 0x02014800
_08111E1C: .4byte 0x03004360
_08111E20: .4byte 0x05006000
_08111E24: .4byte 0x0400004c
-_08111E28: .4byte gUnknown_081E6C58
+_08111E28: .4byte gWindowConfig_81E6C58
_08111E2C: .4byte 0x030042a4
_08111E30: .4byte 0x030042a0
_08111E34: .4byte 0x030042c0
@@ -311040,15 +311040,15 @@ _08111F64: .4byte 0x0000043c
_08111F68:
ldr r4, _08111F80
adds r0, r4, 0
- bl sub_8002A34
+ bl SetUpWindowConfig
ldr r0, _08111F84
ldr r0, [r0]
adds r0, 0x4
adds r1, r4, 0
- bl sub_8002D54
+ bl InitWindowFromConfig
b _08112088
.align 2, 0
-_08111F80: .4byte gUnknown_081E6F84
+_08111F80: .4byte gWindowConfig_81E6F84
_08111F84: .4byte 0x03004828
_08111F88:
ldr r4, _08111FC8
@@ -313715,7 +313715,7 @@ _0811369C:
movs r3, 0x9
str r3, [sp]
movs r3, 0x19
- bl CreateTextRenderer
+ bl InitWindow
ldr r0, [r5]
adds r0, 0x4
bl sub_8002F44
@@ -313796,7 +313796,7 @@ _08113768:
movs r1, 0x18
movs r2, 0x8
movs r3, 0x1D
- bl sub_80047FC
+ bl ZeroFillWindowRect
bl sub_814A7FC
ldr r0, _081137D8
movs r1, 0x92
@@ -313870,7 +313870,7 @@ _08113818:
movs r1, 0x18
movs r2, 0x8
movs r3, 0x1D
- bl sub_80047FC
+ bl ZeroFillWindowRect
bl sub_814A7FC
ldr r0, _08113874
movs r1, 0x92
@@ -317387,7 +317387,7 @@ _08115458: .4byte 0x03001770
_0811545C: .4byte 0x0000043c
_08115460:
ldr r0, _08115480
- bl sub_8002A34
+ bl SetUpWindowConfig
ldr r0, _08115484
bl sub_8071C4C
ldr r0, _08115488
@@ -317400,8 +317400,8 @@ _08115460:
adds r1, r2
b _0811557A
.align 2, 0
-_08115480: .4byte gUnknown_081E6C3C
-_08115484: .4byte gUnknown_081E6CE4
+_08115480: .4byte gWindowConfig_81E6C3C
+_08115484: .4byte gWindowConfig_81E6CE4
_08115488: .4byte gUnknown_083F86BC
_0811548C: .4byte 0x03001770
_08115490: .4byte 0x0000043c
@@ -327928,7 +327928,7 @@ _0811A7EA:
movs r0, 0x11
strb r0, [r4, 0x1]
mov r0, sp
- bl StringGetLength
+ bl StringLength
lsls r0, 16
lsrs r0, 16
subs r0, r5, r0
@@ -363565,7 +363565,7 @@ sub_812BB10: @ 812BB10
movs r1, 0xA
movs r2, 0x2
movs r3, 0xF
- bl sub_80047C8
+ bl FillWindowRect_DefaultPalette
movs r0, 0x10
str r0, [sp]
movs r0, 0x24
@@ -363574,7 +363574,7 @@ sub_812BB10: @ 812BB10
movs r1, 0xA
movs r2, 0x2
movs r3, 0x23
- bl sub_80047C8
+ bl FillWindowRect_DefaultPalette
ldr r1, _0812BBD8
ldr r0, _0812BBDC
ldrb r0, [r0]
@@ -363589,7 +363589,7 @@ sub_812BB10: @ 812BB10
str r0, [sp]
adds r0, r4, 0
movs r3, 0x12
- bl CreateTextRenderer
+ bl InitWindow
adds r0, r4, 0
bl sub_8002F44
ldr r1, _0812BBE8
@@ -363623,7 +363623,7 @@ _0812BB84:
str r0, [sp]
adds r0, r4, 0
movs r3, 0x2
- bl CreateTextRenderer
+ bl InitWindow
adds r0, r4, 0
bl sub_8002F44
add sp, 0x8
@@ -377547,13 +377547,13 @@ sub_81326D8: @ 81326D8
bl SetVBlankCallback
ldr r4, _0813278C
adds r0, r4, 0
- bl sub_8002A34
+ bl SetUpWindowConfig
adds r0, r4, 0
bl sub_8071C4C
bl sub_8071EF4
ldr r4, _08132790
adds r0, r4, 0
- bl sub_8002A34
+ bl SetUpWindowConfig
adds r0, r4, 0
bl sub_8071C4C
bl sub_8071EF4
@@ -377587,8 +377587,8 @@ _0813277C: .4byte 0x02017000
_08132780: .4byte 0x0202e8cc
_08132784: .4byte 0x000002c5
_08132788: .4byte sub_813265C
-_0813278C: .4byte gUnknown_081E7240
-_08132790: .4byte gUnknown_081E6CE4
+_0813278C: .4byte gWindowConfig_81E7240
+_08132790: .4byte gWindowConfig_81E6CE4
_08132794: .4byte 0x04000012
_08132798: .4byte gUnknown_08402D80
_0813279C: .4byte gUnknown_08402D88
@@ -377616,13 +377616,13 @@ sub_81327A4: @ 81327A4
bl SetVBlankCallback
ldr r4, _08132858
adds r0, r4, 0
- bl sub_8002A34
+ bl SetUpWindowConfig
adds r0, r4, 0
bl sub_8071C4C
bl sub_8071EF4
ldr r4, _0813285C
adds r0, r4, 0
- bl sub_8002A34
+ bl SetUpWindowConfig
adds r0, r4, 0
bl sub_8071C4C
bl sub_8071EF4
@@ -377663,8 +377663,8 @@ _08132848: .4byte 0x02017000
_0813284C: .4byte 0x0202e8ce
_08132850: .4byte 0x000002c6
_08132854: .4byte sub_813265C
-_08132858: .4byte gUnknown_081E7240
-_0813285C: .4byte gUnknown_081E6CE4
+_08132858: .4byte gWindowConfig_81E7240
+_0813285C: .4byte gWindowConfig_81E6CE4
_08132860: .4byte 0x04000012
_08132864: .4byte gUnknown_08402D80
_08132868: .4byte gUnknown_08402D88
@@ -378586,9 +378586,9 @@ _08132FFA:
pop {r0}
bx r0
.align 2, 0
-_08133024: .4byte gUnknown_081E7240
+_08133024: .4byte gWindowConfig_81E7240
_08133028: .4byte gUnknown_08402CF8
-_0813302C: .4byte gUnknown_081E6CE4
+_0813302C: .4byte gWindowConfig_81E6CE4
thumb_func_end sub_8132FEC
thumb_func_start sub_8133030
@@ -379618,7 +379618,7 @@ _0813381C:
_08133834: .4byte 0x030007b0
_08133838: .4byte 0x02039360
_0813383C: .4byte gBattleMoves
-_08133840: .4byte gUnknown_081E72B0
+_08133840: .4byte gEmptyString_81E72B0
_08133844:
ldrb r0, [r2, 0x1A]
subs r0, 0x1
@@ -385173,16 +385173,16 @@ _0813635E:
b _08136524
_08136366:
ldr r0, _08136370
- bl sub_8002A34
+ bl SetUpWindowConfig
b _08136524
.align 2, 0
-_08136370: .4byte gUnknown_081E7080
+_08136370: .4byte gWindowConfig_81E7080
_08136374:
ldr r0, _0813637C
bl sub_8071C58
b _08136524
.align 2, 0
-_0813637C: .4byte gUnknown_081E7080
+_0813637C: .4byte gWindowConfig_81E7080
_08136380:
bl sub_8071C94
cmp r0, 0
@@ -386235,7 +386235,7 @@ _08136C2C: .4byte 0x000087dc
_08136C30: .4byte 0x03004360
_08136C34: .4byte 0x02039304
_08136C38: .4byte gUnknown_08411581
-_08136C3C: .4byte gUnknown_081E709C
+_08136C3C: .4byte gWindowConfig_81E709C
thumb_func_end sub_8136BB8
thumb_func_start sub_8136C40
@@ -386259,7 +386259,7 @@ _08136C60:
pop {r1}
bx r1
.align 2, 0
-_08136C68: .4byte gUnknown_081E7080
+_08136C68: .4byte gWindowConfig_81E7080
thumb_func_end sub_8136C40
thumb_func_start sub_8136C6C
@@ -386278,7 +386278,7 @@ sub_8136C6C: @ 8136C6C
movs r1, 0
b _08136C9C
.align 2, 0
-_08136C8C: .4byte gUnknown_081E709C
+_08136C8C: .4byte gWindowConfig_81E709C
_08136C90: .4byte 0x02039304
_08136C94:
ldr r0, [r3]
@@ -386407,7 +386407,7 @@ sub_8136D60: @ 8136D60
pop {r0}
bx r0
.align 2, 0
-_08136D84: .4byte gUnknown_081E709C
+_08136D84: .4byte gWindowConfig_81E709C
_08136D88: .4byte gUnknown_084115E1
thumb_func_end sub_8136D60
@@ -386420,7 +386420,7 @@ sub_8136D8C: @ 8136D8C
pop {r0}
bx r0
.align 2, 0
-_08136D9C: .4byte gUnknown_081E7080
+_08136D9C: .4byte gWindowConfig_81E7080
thumb_func_end sub_8136D8C
thumb_func_start sub_8136DA0
@@ -390965,7 +390965,7 @@ sub_8139298: @ 8139298
movs r1, 0xA
movs r2, 0x2
movs r3, 0xF
- bl sub_80047C8
+ bl FillWindowRect_DefaultPalette
movs r0, 0x10
str r0, [sp]
movs r0, 0x24
@@ -390974,7 +390974,7 @@ sub_8139298: @ 8139298
movs r1, 0xA
movs r2, 0x2
movs r3, 0x23
- bl sub_80047C8
+ bl FillWindowRect_DefaultPalette
ldr r1, _08139358
ldr r0, _0813935C
ldrb r0, [r0]
@@ -390989,7 +390989,7 @@ sub_8139298: @ 8139298
str r0, [sp]
adds r0, r4, 0
movs r3, 0x12
- bl CreateTextRenderer
+ bl InitWindow
adds r0, r4, 0
bl sub_8002F44
ldr r1, _08139368
@@ -391019,7 +391019,7 @@ _0813930C:
str r0, [sp]
adds r0, r4, 0
movs r3, 0x2
- bl CreateTextRenderer
+ bl InitWindow
adds r0, r4, 0
bl sub_8002F44
add sp, 0x8
@@ -402689,7 +402689,7 @@ sub_813EEE4: @ 813EEE4
bl sub_80FBB3C
ldr r4, _0813EF9C
adds r0, r4, 0
- bl sub_8002A34
+ bl SetUpWindowConfig
adds r0, r4, 0
bl sub_8071C4C
bl sub_8071EF4
@@ -402731,7 +402731,7 @@ sub_813EEE4: @ 813EEE4
bx r0
.align 2, 0
_0813EF98: .4byte 0x02000008
-_0813EF9C: .4byte gUnknown_081E709C
+_0813EF9C: .4byte gWindowConfig_81E709C
_0813EFA0: .4byte 0x04000008
_0813EFA4: .4byte gUnknown_0842C5B5
_0813EFA8: .4byte sub_813EFC4
@@ -409222,7 +409222,7 @@ sub_81422E8: @ 81422E8
lsrs r4, 24
ldr r5, _08142314
adds r0, r5, 0
- bl sub_8002A34
+ bl SetUpWindowConfig
adds r0, r5, 0
bl sub_8071C4C
ldr r1, _08142318
@@ -409236,7 +409236,7 @@ sub_81422E8: @ 81422E8
pop {r0}
bx r0
.align 2, 0
-_08142314: .4byte gUnknown_081E7198
+_08142314: .4byte gWindowConfig_81E7198
_08142318: .4byte 0x03004b20
_0814231C: .4byte sub_8142320
thumb_func_end sub_81422E8
@@ -409777,7 +409777,7 @@ sub_8142738: @ 8142738
strh r0, [r1]
ldr r4, _08142784
adds r0, r4, 0
- bl sub_8002A34
+ bl SetUpWindowConfig
adds r0, r4, 0
bl sub_8071C4C
ldr r0, _08142788
@@ -409800,7 +409800,7 @@ sub_8142738: @ 8142738
pop {r0}
bx r0
.align 2, 0
-_08142784: .4byte gUnknown_081E71B4
+_08142784: .4byte gWindowConfig_81E71B4
_08142788: .4byte 0x02024ea4
_0814278C: .4byte 0x03004b20
_08142790: .4byte sub_8142794
@@ -410205,7 +410205,7 @@ _08142AB8:
bls _08142AB8
ldr r4, _08142AFC
adds r0, r4, 0
- bl sub_8002A34
+ bl SetUpWindowConfig
adds r0, r4, 0
bl sub_8071C4C
ldr r1, _08142AF0
@@ -410222,7 +410222,7 @@ _08142AEA:
_08142AF0: .4byte 0x03004b20
_08142AF4: .4byte 0x0600381a
_08142AF8: .4byte 0x0600385a
-_08142AFC: .4byte gUnknown_081E7198
+_08142AFC: .4byte gWindowConfig_81E7198
_08142B00: .4byte sub_8142B04
thumb_func_end sub_8142A28
@@ -411542,7 +411542,7 @@ sub_8143570: @ 8143570
bl LoadCompressedObjectPalette
ldr r4, _081435B4
adds r0, r4, 0
- bl sub_8002A34
+ bl SetUpWindowConfig
adds r0, r4, 0
bl sub_8071C4C
pop {r4}
@@ -411552,7 +411552,7 @@ sub_8143570: @ 8143570
_081435A8: .4byte 0x030028f8
_081435AC: .4byte gUnknown_0840B514
_081435B0: .4byte gUnknown_0840B524
-_081435B4: .4byte gUnknown_081E71B4
+_081435B4: .4byte gWindowConfig_81E71B4
thumb_func_end sub_8143570
thumb_func_start sub_81435B8
@@ -412130,7 +412130,7 @@ _08143A0E:
strh r1, [r0, 0x8]
ldr r4, _08143AF8
adds r0, r4, 0
- bl sub_8002A34
+ bl SetUpWindowConfig
adds r0, r4, 0
bl sub_8071C4C
ldr r0, _08143AFC
@@ -412210,7 +412210,7 @@ _08143A0E:
.align 2, 0
_08143AF0: .4byte sub_8143B38
_08143AF4: .4byte 0x03004b20
-_08143AF8: .4byte gUnknown_081E7208
+_08143AF8: .4byte gWindowConfig_81E7208
_08143AFC: .4byte gUnknown_0840B7BC
_08143B00: .4byte gUnknown_0840B7FC
_08143B04: .4byte 0x0600bee0
@@ -416662,7 +416662,7 @@ sub_8145D88: @ 8145D88
movs r2, 0x40
bl gpu_pal_apply
ldr r0, _08145ED4
- bl sub_8002A34
+ bl SetUpWindowConfig
ldr r0, _08145ED8
bl sub_8071C4C
bl pokedex_diploma_something
@@ -416724,8 +416724,8 @@ _08145EC4: .4byte gUnknown_0840D288
_08145EC8: .4byte gUnknown_0840CB4C
_08145ECC: .4byte 0x06003000
_08145ED0: .4byte gUnknown_0840CB0C
-_08145ED4: .4byte gUnknown_081E6C3C
-_08145ED8: .4byte gUnknown_081E6CE4
+_08145ED4: .4byte gWindowConfig_81E6C3C
+_08145ED8: .4byte gWindowConfig_81E6CE4
_08145EDC: .4byte 0x04000208
_08145EE0: .4byte 0x04000200
_08145EE4: .4byte 0x04000004
@@ -416972,13 +416972,13 @@ _081460F0:
b _0814620C
_081460F6:
ldr r0, _08146104
- bl sub_8002A34
+ bl SetUpWindowConfig
ldr r1, _08146108
ldr r0, _0814610C
adds r1, r0
b _08146212
.align 2, 0
-_08146104: .4byte gUnknown_081E6E18
+_08146104: .4byte gWindowConfig_81E6E18
_08146108: .4byte 0x03001770
_0814610C: .4byte 0x0000043c
_08146110:
@@ -416986,7 +416986,7 @@ _08146110:
bl sub_8071C58
b _0814620C
.align 2, 0
-_08146118: .4byte gUnknown_081E6E18
+_08146118: .4byte gWindowConfig_81E6E18
_0814611C:
bl sub_8071C94
cmp r0, 0
@@ -418019,7 +418019,7 @@ sub_8146930: @ 8146930
bl SetVBlankCallback
ldr r4, _081469A0
adds r0, r4, 0
- bl sub_8002A34
+ bl SetUpWindowConfig
adds r0, r4, 0
bl sub_8071C4C
bl sub_8071EF4
@@ -418051,7 +418051,7 @@ sub_8146930: @ 8146930
bx r0
.align 2, 0
_0814699C: .4byte sub_8146900
-_081469A0: .4byte gUnknown_081E6CE4
+_081469A0: .4byte gWindowConfig_81E6CE4
_081469A4: .4byte sub_8007080
_081469A8: .4byte sub_81469E4
thumb_func_end sub_8146930
@@ -418687,7 +418687,7 @@ _08146E6C:
movs r2, 0x20
bl gpu_pal_apply
ldr r0, _08146FF4
- bl sub_8002A34
+ bl SetUpWindowConfig
ldr r0, _08146FF8
bl sub_8071C4C
movs r0, 0xD
@@ -418764,8 +418764,8 @@ _08146FE4: .4byte gUnknown_08411980
_08146FE8: .4byte 0x06010020
_08146FEC: .4byte gUnknown_083F62EC
_08146FF0: .4byte gUnknown_08411960
-_08146FF4: .4byte gUnknown_081E6C3C
-_08146FF8: .4byte gUnknown_081E6CE4
+_08146FF4: .4byte gWindowConfig_81E6C3C
+_08146FF8: .4byte gWindowConfig_81E6CE4
_08146FFC: .4byte gUnknown_084115F9
_08147000: .4byte 0x04000208
_08147004: .4byte 0x04000200
@@ -419920,13 +419920,13 @@ _08147960:
b _08147A44
_08147966:
ldr r0, _08147974
- bl sub_8002A34
+ bl SetUpWindowConfig
ldr r1, _08147978
ldr r2, _0814797C
adds r1, r2
b _08147A4A
.align 2, 0
-_08147974: .4byte gUnknown_081E6E50
+_08147974: .4byte gWindowConfig_81E6E50
_08147978: .4byte 0x03001770
_0814797C: .4byte 0x0000043c
_08147980:
@@ -419934,7 +419934,7 @@ _08147980:
bl sub_8071C58
b _08147A44
.align 2, 0
-_08147988: .4byte gUnknown_081E6E50
+_08147988: .4byte gWindowConfig_81E6E50
_0814798C:
bl sub_8071C94
cmp r0, 0
@@ -421942,7 +421942,7 @@ _08148A2C:
bl ResetTasks
bl ResetSpriteData
ldr r0, _08148AE0
- bl sub_8002A34
+ bl SetUpWindowConfig
ldr r0, _08148AE4
bl sub_8071C4C
movs r0, 0x1
@@ -422000,8 +422000,8 @@ _08148AD0: .4byte 0x06000020
_08148AD4: .4byte 0x00001111
_08148AD8: .4byte 0x06003800
_08148ADC: .4byte 0x000004ff
-_08148AE0: .4byte gUnknown_081E6C3C
-_08148AE4: .4byte gUnknown_081E6CE4
+_08148AE0: .4byte gWindowConfig_81E6C3C
+_08148AE4: .4byte gWindowConfig_81E6CE4
_08148AE8: .4byte 0x0000ffff
_08148AEC: .4byte 0x04000208
_08148AF0: .4byte 0x04000200
@@ -425376,9 +425376,9 @@ sub_814A518: @ 814A518
adds r4, r0, 0
lsls r1, 24
lsrs r5, r1, 24
- bl StripExtendedControlCodes
+ bl SkipExtCtrlCodes
adds r0, r4, 0
- bl StringGetLength
+ bl StringLength
lsls r0, 24
lsrs r1, r0, 24
cmp r5, 0xFC
@@ -425419,18 +425419,18 @@ _0814A55A:
sub_814A568: @ 814A568
push {r4,lr}
adds r4, r0, 0
- bl StringGetLength
+ bl StringLength
lsls r0, 16
lsrs r0, 16
cmp r0, 0x5
bhi _0814A582
adds r0, r4, 0
movs r1, 0x1
- bl StopMusicWhileStringIsPrinted
+ bl SetStringCharset
b _0814A588
_0814A582:
adds r0, r4, 0
- bl StripExtendedControlCodes
+ bl SkipExtCtrlCodes
_0814A588:
pop {r4}
pop {r0}
diff --git a/charmap.txt b/charmap.txt
index ebcd1f6b6..4b00dcaf3 100644
--- a/charmap.txt
+++ b/charmap.txt
@@ -82,6 +82,7 @@
'x' = EC
'y' = ED
'z' = EE
+'▶' = EF
':' = F0
'$' = FF
diff --git a/data/data2.s b/data/data2.s
index 4c3a1f892..2848574d3 100644
--- a/data/data2.s
+++ b/data/data2.s
@@ -5,345 +5,6 @@
.section .rodata
- .global gUnknown_081E29A8
-gUnknown_081E29A8: @ 81E29A8
- .incbin "baserom.gba", 0x001e29a8, 0x10
-
- .global gUnknown_081E29B8
-gUnknown_081E29B8: @ 81E29B8
- .incbin "baserom.gba", 0x001e29b8, 0x10
-
- .global gUnknown_081E29C8
-gUnknown_081E29C8: @ 81E29C8
- .incbin "baserom.gba", 0x001e29c8, 0x10
-
- .global gUnknown_081E29D8
-gUnknown_081E29D8: @ 81E29D8
- .incbin "baserom.gba", 0x001e29d8, 0x8
-
- .global gUnknown_081E29E0
-gUnknown_081E29E0: @ 81E29E0
- .incbin "baserom.gba", 0x001e29e0, 0x8
-
- .global gUnknown_081E29E8
-gUnknown_081E29E8: @ 81E29E8
- .incbin "baserom.gba", 0x001e29e8, 0x1008
-
- .global gUnknown_081E39F0
-gUnknown_081E39F0: @ 81E39F0
- .incbin "baserom.gba", 0x001e39f0, 0x370
-
- .global gUnknown_081E3D60
-gUnknown_081E3D60: @ 81E3D60
- .incbin "baserom.gba", 0x001e3d60, 0x1b90
-
- .global gUnknown_081E58F0
-gUnknown_081E58F0: @ 81E58F0
- .incbin "baserom.gba", 0x001e58f0, 0x600
-
- .global gUnknown_081E5EF0
-gUnknown_081E5EF0: @ 81E5EF0
- .incbin "baserom.gba", 0x001e5ef0, 0x100
-
- .global gUnknown_081E5FF0
-gUnknown_081E5FF0: @ 81E5FF0
- .incbin "baserom.gba", 0x001e5ff0, 0x1ee
-
- .global gUnknown_081E61DE
-gUnknown_081E61DE: @ 81E61DE
- .incbin "baserom.gba", 0x001e61de, 0x100
-
- .global gUnknown_081E62DE
-gUnknown_081E62DE: @ 81E62DE
- .incbin "baserom.gba", 0x001e62de, 0xdc
-
- .global gUnknown_081E63BA
-gUnknown_081E63BA: @ 81E63BA
- .incbin "baserom.gba", 0x001e63ba, 0xdc
-
- .global gUnknown_081E6496
-gUnknown_081E6496: @ 81E6496
- .incbin "baserom.gba", 0x001e6496, 0xfe
-
- .global gUnknown_081E6594
-gUnknown_081E6594: @ 81E6594
- .incbin "baserom.gba", 0x001e6594, 0xfe
-
- .global gUnknown_081E6692
-gUnknown_081E6692: @ 81E6692
- .incbin "baserom.gba", 0x001e6692, 0x2
-
- .global gUnknown_081E6694
-gUnknown_081E6694: @ 81E6694
- .incbin "baserom.gba", 0x001e6694, 0x1a
-
- .global gUnknown_081E66AE
-gUnknown_081E66AE: @ 81E66AE
- .incbin "baserom.gba", 0x001e66ae, 0x4
-
- .global gUnknown_081E66B2
-gUnknown_081E66B2: @ 81E66B2
- .incbin "baserom.gba", 0x001e66b2, 0x20
-
- .global gUnknown_081E66D2
-gUnknown_081E66D2: @ 81E66D2
- .incbin "baserom.gba", 0x001e66d2, 0xa
-
- .global gUnknown_081E66DC
-gUnknown_081E66DC: @ 81E66DC
- .incbin "baserom.gba", 0x001e66dc, 0x300
-
- .global gUnknown_081E69DC
-gUnknown_081E69DC: @ 81E69DC
- .incbin "baserom.gba", 0x001e69dc, 0x60
-
- .global gUnknown_081E6A3C
-gUnknown_081E6A3C: @ 81E6A3C
- .incbin "baserom.gba", 0x001e6a3c, 0x40
-
- .global gUnknown_081E6A7C
-gUnknown_081E6A7C: @ 81E6A7C
- .incbin "baserom.gba", 0x001e6a7c, 0xc
-
- .global gUnknown_081E6A88
-gUnknown_081E6A88: @ 81E6A88
- .incbin "baserom.gba", 0x001e6a88, 0x1c
-
- .global gUnknown_081E6AA4
-gUnknown_081E6AA4: @ 81E6AA4
- .incbin "baserom.gba", 0x001e6aa4, 0x30
-
- .global gUnknown_081E6AD4
-gUnknown_081E6AD4: @ 81E6AD4
- .incbin "baserom.gba", 0x001e6ad4, 0x5c
-
- .global gUnknown_081E6B30
-gUnknown_081E6B30: @ 81E6B30
- .incbin "baserom.gba", 0x001e6b30, 0xa8
-
- .global gUnknown_081E6BD8
-gUnknown_081E6BD8: @ 81E6BD8
- .incbin "baserom.gba", 0x001e6bd8, 0x3
-
- .global gUnknown_081E6BDB
-gUnknown_081E6BDB: @ 81E6BDB
- .incbin "baserom.gba", 0x001e6bdb, 0x19
-
- .global gUnknown_081E6BF4
-gUnknown_081E6BF4: @ 81E6BF4
- .incbin "baserom.gba", 0x001e6bf4, 0x24
-
- .global gUnknown_081E6C18
-gUnknown_081E6C18: @ 81E6C18
- .incbin "baserom.gba", 0x001e6c18, 0x24
-
- .global gUnknown_081E6C3C
-gUnknown_081E6C3C: @ 81E6C3C
- .incbin "baserom.gba", 0x001e6c3c, 0x1c
-
- .global gUnknown_081E6C58
-gUnknown_081E6C58: @ 81E6C58
- .incbin "baserom.gba", 0x001e6c58, 0x1c
-
- .global gUnknown_081E6C74
-gUnknown_081E6C74: @ 81E6C74
- .incbin "baserom.gba", 0x001e6c74, 0x1c
-
- .global gUnknown_081E6C90
-gUnknown_081E6C90: @ 81E6C90
- .incbin "baserom.gba", 0x001e6c90, 0x1c
-
- .global gUnknown_081E6CAC
-gUnknown_081E6CAC: @ 81E6CAC
- .incbin "baserom.gba", 0x001e6cac, 0x1c
-
- .global gUnknown_081E6CC8
-gUnknown_081E6CC8: @ 81E6CC8
- .incbin "baserom.gba", 0x001e6cc8, 0x1c
-
- .global gUnknown_081E6CE4
-gUnknown_081E6CE4: @ 81E6CE4
- .incbin "baserom.gba", 0x001e6ce4, 0x1c
-
- .global gUnknown_081E6D00
-gUnknown_081E6D00: @ 81E6D00
- .incbin "baserom.gba", 0x001e6d00, 0x38
-
- .global gUnknown_081E6D38
-gUnknown_081E6D38: @ 81E6D38
- .incbin "baserom.gba", 0x001e6d38, 0x1c
-
- .global gUnknown_081E6D54
-gUnknown_081E6D54: @ 81E6D54
- .incbin "baserom.gba", 0x001e6d54, 0x1c
-
- .global gUnknown_081E6D70
-gUnknown_081E6D70: @ 81E6D70
- .incbin "baserom.gba", 0x001e6d70, 0x1c
-
- .global gUnknown_081E6D8C
-gUnknown_081E6D8C: @ 81E6D8C
- .incbin "baserom.gba", 0x001e6d8c, 0x1c
-
- .global gUnknown_081E6DA8
-gUnknown_081E6DA8: @ 81E6DA8
- .incbin "baserom.gba", 0x001e6da8, 0x1c
-
- .global gUnknown_081E6DC4
-gUnknown_081E6DC4: @ 81E6DC4
- .incbin "baserom.gba", 0x001e6dc4, 0x1c
-
- .global gUnknown_081E6DE0
-gUnknown_081E6DE0: @ 81E6DE0
- .incbin "baserom.gba", 0x001e6de0, 0x1c
-
- .global gUnknown_081E6DFC
-gUnknown_081E6DFC: @ 81E6DFC
- .incbin "baserom.gba", 0x001e6dfc, 0x1c
-
- .global gUnknown_081E6E18
-gUnknown_081E6E18: @ 81E6E18
- .incbin "baserom.gba", 0x001e6e18, 0x1c
-
- .global gUnknown_081E6E34
-gUnknown_081E6E34: @ 81E6E34
- .incbin "baserom.gba", 0x001e6e34, 0x1c
-
- .global gUnknown_081E6E50
-gUnknown_081E6E50: @ 81E6E50
- .incbin "baserom.gba", 0x001e6e50, 0x1c
-
- .global gUnknown_081E6E6C
-gUnknown_081E6E6C: @ 81E6E6C
- .incbin "baserom.gba", 0x001e6e6c, 0x1c
-
- .global gUnknown_081E6E88
-gUnknown_081E6E88: @ 81E6E88
- .incbin "baserom.gba", 0x001e6e88, 0xc4
-
- .global gUnknown_081E6F4C
-gUnknown_081E6F4C: @ 81E6F4C
- .incbin "baserom.gba", 0x001e6f4c, 0x1c
-
- .global gUnknown_081E6F68
-gUnknown_081E6F68: @ 81E6F68
- .incbin "baserom.gba", 0x001e6f68, 0x1c
-
- .global gUnknown_081E6F84
-gUnknown_081E6F84: @ 81E6F84
- .incbin "baserom.gba", 0x001e6f84, 0x1c
-
- .global gUnknown_081E6FA0
-gUnknown_081E6FA0: @ 81E6FA0
- .incbin "baserom.gba", 0x001e6fa0, 0x38
-
- .global gUnknown_081E6FD8
-gUnknown_081E6FD8: @ 81E6FD8
- .incbin "baserom.gba", 0x001e6fd8, 0x1c
-
- .global gUnknown_081E6FF4
-gUnknown_081E6FF4: @ 81E6FF4
- .incbin "baserom.gba", 0x001e6ff4, 0x38
-
- .global gUnknown_081E702C
-gUnknown_081E702C: @ 81E702C
- .incbin "baserom.gba", 0x001e702c, 0x1c
-
- .global gUnknown_081E7048
-gUnknown_081E7048: @ 81E7048
- .incbin "baserom.gba", 0x001e7048, 0x1c
-
- .global gUnknown_081E7064
-gUnknown_081E7064: @ 81E7064
- .incbin "baserom.gba", 0x001e7064, 0x1c
-
- .global gUnknown_081E7080
-gUnknown_081E7080: @ 81E7080
- .incbin "baserom.gba", 0x001e7080, 0x1c
-
- .global gUnknown_081E709C
-gUnknown_081E709C: @ 81E709C
- .incbin "baserom.gba", 0x001e709c, 0x1c
-
- .global gUnknown_081E70B8
-gUnknown_081E70B8: @ 81E70B8
- .incbin "baserom.gba", 0x001e70b8, 0x1c
-
- .global gUnknown_081E70D4
-gUnknown_081E70D4: @ 81E70D4
- .incbin "baserom.gba", 0x001e70d4, 0x1c
-
- .global gUnknown_081E70F0
-gUnknown_081E70F0: @ 81E70F0
- .incbin "baserom.gba", 0x001e70f0, 0x1c
-
- .global gUnknown_081E710C
-gUnknown_081E710C: @ 81E710C
- .incbin "baserom.gba", 0x001e710c, 0x1c
-
- .global gUnknown_081E7128
-gUnknown_081E7128: @ 81E7128
- .incbin "baserom.gba", 0x001e7128, 0x1c
-
- .global gUnknown_081E7144
-gUnknown_081E7144: @ 81E7144
- .incbin "baserom.gba", 0x001e7144, 0x1c
-
- .global gUnknown_081E7160
-gUnknown_081E7160: @ 81E7160
- .incbin "baserom.gba", 0x001e7160, 0x1c
-
- .global gUnknown_081E717C
-gUnknown_081E717C: @ 81E717C
- .incbin "baserom.gba", 0x001e717c, 0x1c
-
- .global gUnknown_081E7198
-gUnknown_081E7198: @ 81E7198
- .incbin "baserom.gba", 0x001e7198, 0x1c
-
- .global gUnknown_081E71B4
-gUnknown_081E71B4: @ 81E71B4
- .incbin "baserom.gba", 0x001e71b4, 0x1c
-
- .global gUnknown_081E71D0
-gUnknown_081E71D0: @ 81E71D0
- .incbin "baserom.gba", 0x001e71d0, 0x1c
-
- .global gUnknown_081E71EC
-gUnknown_081E71EC: @ 81E71EC
- .incbin "baserom.gba", 0x001e71ec, 0x1c
-
- .global gUnknown_081E7208
-gUnknown_081E7208: @ 81E7208
- .incbin "baserom.gba", 0x001e7208, 0x1c
-
- .global gUnknown_081E7224
-gUnknown_081E7224: @ 81E7224
- .incbin "baserom.gba", 0x001e7224, 0x1c
-
- .global gUnknown_081E7240
-gUnknown_081E7240: @ 81E7240
- .incbin "baserom.gba", 0x001e7240, 0x1c
-
- .global gUnknown_081E725C
-gUnknown_081E725C: @ 81E725C
- .incbin "baserom.gba", 0x001e725c, 0x1c
-
- .global gUnknown_081E7278
-gUnknown_081E7278: @ 81E7278
- .incbin "baserom.gba", 0x001e7278, 0x1c
-
- .global gUnknown_081E7294
-gUnknown_081E7294: @ 81E7294
- .incbin "baserom.gba", 0x001e7294, 0x1c
-
- .global gUnknown_081E72B0
-gUnknown_081E72B0: @ 81E72B0
- .incbin "baserom.gba", 0x001e72b0, 0x3
-
-@ 81E72B3
- .include "data/string_util.s"
-
.global gUnknown_081E7330
gUnknown_081E7330: @ 81E7330
.incbin "baserom.gba", 0x001e7330, 0x20
diff --git a/data/graphics.s b/data/graphics.s
index 7712965fc..981766fe7 100644
--- a/data/graphics.s
+++ b/data/graphics.s
@@ -1053,10 +1053,18 @@ gUnknown_08EA260C: @ 8EA260C
gUnknown_08EA2A44: @ 8EA2A44
.incbin "baserom.gba", 0x00ea2a44, 0x200
- .global gUnknown_08EA2C44
-gUnknown_08EA2C44: @ 8EA2C44
- .incbin "baserom.gba", 0x00ea2c44, 0x3f80
+ .global gFont3LatinGlyphs
+gFont3LatinGlyphs: @ 8EA2C44
+ .incbin "graphics/fonts/font3_lat.4bpp"
- .global gUnknown_08EA6BC4
-gUnknown_08EA6BC4: @ 8EA6BC4
- .incbin "baserom.gba", 0x00ea6bc4
+ .global gFont4LatinGlyphs
+gFont4LatinGlyphs: @ 8EA6BC4
+ .incbin "graphics/fonts/font4_lat.4bpp"
+
+ .global gFont3JapaneseGlyphs
+gFont3JapaneseGlyphs: @ 8EA8744
+ .incbin "graphics/fonts/font3_jpn.4bpp"
+
+ .global gFont4JapaneseGlyphs
+gFont4JapaneseGlyphs: @ 8EAC6C4
+ .incbin "graphics/fonts/font4_jpn.4bpp"
diff --git a/ewram_syms.txt b/ewram_syms.txt
index 5e6593754..148eade7b 100644
--- a/ewram_syms.txt
+++ b/ewram_syms.txt
@@ -1,5 +1,7 @@
-gStringVar1 = 0x20231CC;
-gStringVar2 = 0x20232CC;
-gStringVar3 = 0x20233CC;
+gUnknown_020239F8 = 0x20239F8;
+
+gUnknown_0203869A = 0x203869A;
+
+gTileBuffer = 0x2039360;
gSaveBlock2 = 0x2024EA4;
diff --git a/fonts.mk b/fonts.mk
new file mode 100644
index 000000000..2295dce2b
--- /dev/null
+++ b/fonts.mk
@@ -0,0 +1,28 @@
+RSFONT := tools/rsfont/rsfont
+
+graphics/fonts/font0_jpn.1bpp: graphics/fonts/font0_jpn.png
+ $(RSFONT) $< $@ 240 1
+
+graphics/fonts/font1_jpn.1bpp: graphics/fonts/font1_jpn.png
+ $(RSFONT) $< $@ 256 0
+
+graphics/fonts/font3_jpn.4bpp: graphics/fonts/font3_jpn.png
+ $(RSFONT) $< $@ 252 2
+
+graphics/fonts/font4_jpn.4bpp: graphics/fonts/font4_jpn.png
+ $(RSFONT) $< $@ 220 0
+
+graphics/fonts/font0_lat.1bpp: graphics/fonts/font0_lat.png
+ $(RSFONT) $< $@ 256 1
+
+graphics/fonts/font1_lat.1bpp: graphics/fonts/font1_lat.png
+ $(RSFONT) $< $@ 256 0
+
+graphics/fonts/font3_lat.4bpp: graphics/fonts/font3_lat.png
+ $(RSFONT) $< $@ 254 1
+
+graphics/fonts/font4_lat.4bpp: graphics/fonts/font4_lat.png
+ $(RSFONT) $< $@ 220 0
+
+graphics/fonts/font6_braille.1bpp: graphics/fonts/font6_braille.png
+ $(RSFONT) $< $@ 192 0
diff --git a/generated.mk b/generated.mk
new file mode 100644
index 000000000..c72daf2ac
--- /dev/null
+++ b/generated.mk
@@ -0,0 +1,37 @@
+BIN2C := tools/bin2c/bin2c
+
+GEN_FONT_HEADERS := \
+include/fonts/font0_lat_glyphs.h \
+include/fonts/font1_lat_glyphs.h \
+include/fonts/font0_jpn_glyphs.h \
+include/fonts/font1_jpn_glyphs.h \
+include/fonts/braille_glyphs.h \
+include/fonts/down_arrow_tiles.h \
+include/fonts/unknown_palette_81E6692.h \
+include/fonts/default_palette.h
+
+generated: $(GEN_FONT_HEADERS)
+
+include/fonts/font0_lat_glyphs.h: graphics/fonts/font0_lat.1bpp
+ $(BIN2C) $< sFont0LatinGlyphs >$@ -static -col 8 -pad 4
+
+include/fonts/font1_lat_glyphs.h: graphics/fonts/font1_lat.1bpp
+ $(BIN2C) $< sFont1LatinGlyphs >$@ -static -col 8 -pad 4
+
+include/fonts/font0_jpn_glyphs.h: graphics/fonts/font0_jpn.1bpp
+ $(BIN2C) $< sFont0JapaneseGlyphs >$@ -static -col 8 -pad 4
+
+include/fonts/font1_jpn_glyphs.h: graphics/fonts/font1_jpn.1bpp
+ $(BIN2C) $< sFont1JapaneseGlyphs >$@ -static -col 8 -pad 4
+
+include/fonts/braille_glyphs.h: graphics/fonts/font6_braille.1bpp
+ $(BIN2C) $< sBrailleGlyphs >$@ -static -col 8 -pad 4
+
+include/fonts/down_arrow_tiles.h: graphics/fonts/down_arrow.4bpp
+ $(BIN2C) $< sDownArrowTiles >$@ -static -size 4 -pad 10
+
+include/fonts/unknown_palette_81E6692.h: graphics/fonts/unknown_81E6692.gbapal
+ $(BIN2C) $< gUnknownPalette_81E6692 >$@ -size 2 -pad 6
+
+include/fonts/default_palette.h: graphics/fonts/default.gbapal
+ $(BIN2C) $< gFontDefaultPalette >$@ -size 2 -pad 6
diff --git a/graphics/fonts/default.pal b/graphics/fonts/default.pal
new file mode 100644
index 000000000..1c10c781f
--- /dev/null
+++ b/graphics/fonts/default.pal
@@ -0,0 +1,19 @@
+JASC-PAL
+0100
+16
+0 0 0
+74 74 74
+255 0 0
+0 255 0
+0 0 255
+255 255 0
+0 255 255
+255 0 255
+213 213 205
+0 0 0
+0 0 0
+230 230 238
+255 255 255
+156 205 255
+123 189 230
+255 255 255
diff --git a/graphics/fonts/down_arrow.png b/graphics/fonts/down_arrow.png
new file mode 100644
index 000000000..4138a9a45
--- /dev/null
+++ b/graphics/fonts/down_arrow.png
Binary files differ
diff --git a/graphics/fonts/font0_jpn.png b/graphics/fonts/font0_jpn.png
new file mode 100644
index 000000000..b837984ec
--- /dev/null
+++ b/graphics/fonts/font0_jpn.png
Binary files differ
diff --git a/graphics/fonts/font0_lat.png b/graphics/fonts/font0_lat.png
new file mode 100644
index 000000000..6d65a80ad
--- /dev/null
+++ b/graphics/fonts/font0_lat.png
Binary files differ
diff --git a/graphics/fonts/font1_jpn.png b/graphics/fonts/font1_jpn.png
new file mode 100644
index 000000000..5f5916504
--- /dev/null
+++ b/graphics/fonts/font1_jpn.png
Binary files differ
diff --git a/graphics/fonts/font1_lat.png b/graphics/fonts/font1_lat.png
new file mode 100644
index 000000000..8e6510cdb
--- /dev/null
+++ b/graphics/fonts/font1_lat.png
Binary files differ
diff --git a/graphics/fonts/font3_jpn.png b/graphics/fonts/font3_jpn.png
new file mode 100644
index 000000000..83c6b87ca
--- /dev/null
+++ b/graphics/fonts/font3_jpn.png
Binary files differ
diff --git a/graphics/fonts/font3_lat.png b/graphics/fonts/font3_lat.png
new file mode 100644
index 000000000..b1606aef6
--- /dev/null
+++ b/graphics/fonts/font3_lat.png
Binary files differ
diff --git a/graphics/fonts/font4_jpn.png b/graphics/fonts/font4_jpn.png
new file mode 100644
index 000000000..e37f55c6b
--- /dev/null
+++ b/graphics/fonts/font4_jpn.png
Binary files differ
diff --git a/graphics/fonts/font4_lat.png b/graphics/fonts/font4_lat.png
new file mode 100644
index 000000000..18ac15081
--- /dev/null
+++ b/graphics/fonts/font4_lat.png
Binary files differ
diff --git a/graphics/fonts/font6_braille.png b/graphics/fonts/font6_braille.png
new file mode 100644
index 000000000..0fc2bddba
--- /dev/null
+++ b/graphics/fonts/font6_braille.png
Binary files differ
diff --git a/graphics/fonts/unknown_81E6692.pal b/graphics/fonts/unknown_81E6692.pal
new file mode 100644
index 000000000..ad0de0547
--- /dev/null
+++ b/graphics/fonts/unknown_81E6692.pal
@@ -0,0 +1,19 @@
+JASC-PAL
+0100
+16
+0 0 0
+0 0 0
+255 255 255
+115 123 131
+255 0 0
+213 213 205
+65 205 255
+0 139 189
+255 156 148
+189 90 82
+255 189 180
+213 115 106
+98 238 255
+24 164 213
+238 238 172
+164 164 98
diff --git a/include/fonts/.gitignore b/include/fonts/.gitignore
new file mode 100644
index 000000000..6e5bdcae2
--- /dev/null
+++ b/include/fonts/.gitignore
@@ -0,0 +1,8 @@
+font0_lat_glyphs.h
+font1_lat_glyphs.h
+font0_jpn_glyphs.h
+font1_jpn_glyphs.h
+braille_glyphs.h
+down_arrow_tiles.h
+unknown_palette_81E6692.h
+default_palette.h
diff --git a/include/fonts/font0_widths.h b/include/fonts/font0_widths.h
new file mode 100644
index 000000000..aade6a91d
--- /dev/null
+++ b/include/fonts/font0_widths.h
@@ -0,0 +1,19 @@
+static const u8 sFont0Widths[] =
+{
+ 3, 6, 6, 6, 6, 6, 6, 6, 6, 6, 8, 6, 6, 6, 6, 6,
+ 6, 6, 6, 6, 6, 6, 6, 6, 8, 6, 6, 6, 6, 6, 5, 8,
+ 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 8,
+ 7, 7, 7, 8, 8, 8, 7, 8, 8, 8, 8, 8, 8, 8, 8, 8,
+ 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8,
+ 7, 6, 3, 8, 8, 8, 7, 8, 8, 4, 6, 6, 4, 4, 8, 8,
+ 8, 8, 8, 8, 8, 8, 8, 8, 8, 7, 8, 7, 7, 8, 8, 6,
+ 7, 8, 8, 8, 8, 8, 7, 8, 7, 7, 7, 7, 7, 7, 8, 7,
+ 7, 7, 7, 7, 7, 7, 7, 8, 6, 8, 8, 8, 8, 8, 8, 8,
+ 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8,
+ 7, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 3, 6, 3, 5, 3,
+ 6, 6, 6, 3, 3, 6, 6, 6, 3, 6, 6, 6, 6, 6, 6, 6,
+ 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6,
+ 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 4, 5, 6,
+ 3, 6, 6, 6, 6, 6, 5, 6, 6, 6, 6, 6, 6, 6, 6, 7,
+ 3, 6, 6, 6, 6, 6, 6, 7, 7, 7, 7, 7, 1, 1,
+};
diff --git a/include/fonts/font1_widths.h b/include/fonts/font1_widths.h
new file mode 100644
index 000000000..a5c3dba50
--- /dev/null
+++ b/include/fonts/font1_widths.h
@@ -0,0 +1,17 @@
+static const u8 sFont1Widths[] =
+{
+ 5, 3, 8, 8, 8, 8, 8, 8, 8, 4, 5, 4, 4, 8, 8, 8,
+ 8, 8, 8, 8, 8, 8, 8, 5, 8, 8, 8, 8, 8, 4, 8, 8,
+ 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 6, 6, 6, 5,
+ 6, 5, 5, 5, 5, 5, 5, 5, 5, 4, 8, 4, 4, 5, 5, 5,
+ 5, 5, 5, 5, 5, 5, 5, 5, 8, 4, 5, 5, 5, 5, 4, 8,
+ 4, 4, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 6, 6,
+ 8, 7, 6, 5, 3, 3, 5, 4, 3, 6, 6, 6, 7, 7, 8, 5,
+ 5, 5, 3, 5, 6, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5,
+ 5, 5, 5, 5, 5, 5, 5, 5, 4, 5, 5, 5, 5, 5, 5, 5,
+ 5, 5, 5, 4, 5, 5, 5, 5, 4, 5, 5, 5, 5, 5, 5, 5,
+ 5, 5, 4, 4, 5, 3, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5,
+ 5, 5, 5, 5, 6, 6, 7, 7, 7, 7, 6, 7, 6, 6, 7, 6,
+ 7, 7, 7, 6, 7, 6, 7, 6, 7, 6, 6, 7, 6, 6, 3, 3,
+ 5, 5, 5, 5, 3, 3, 5, 5, 5, 5, 5, 5,
+};
diff --git a/include/fonts/font3_widths.h b/include/fonts/font3_widths.h
new file mode 100644
index 000000000..0f79260e4
--- /dev/null
+++ b/include/fonts/font3_widths.h
@@ -0,0 +1,19 @@
+static const u8 sFont3Widths[] =
+{
+ 3, 6, 6, 6, 6, 6, 6, 6, 6, 6, 8, 6, 6, 6, 6, 6,
+ 6, 6, 6, 6, 6, 6, 6, 6, 8, 6, 6, 6, 6, 6, 4, 8,
+ 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 8,
+ 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8,
+ 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8,
+ 7, 6, 4, 8, 8, 8, 7, 8, 8, 4, 6, 6, 4, 4, 8, 8,
+ 8, 8, 8, 8, 8, 8, 8, 8, 6, 7, 8, 7, 7, 8, 8, 4,
+ 7, 8, 8, 8, 8, 8, 7, 8, 7, 7, 7, 7, 7, 7, 8, 7,
+ 7, 7, 7, 7, 7, 7, 7, 8, 8, 8, 8, 8, 8, 8, 8, 8,
+ 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8,
+ 7, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 3, 6, 3, 5, 3,
+ 6, 6, 6, 3, 3, 6, 6, 6, 3, 6, 6, 6, 6, 6, 6, 6,
+ 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6,
+ 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 4, 5, 6,
+ 3, 6, 6, 6, 6, 6, 5, 6, 6, 6, 6, 6, 6, 6, 6, 7,
+ 3, 6, 6, 6, 6, 6, 6, 7, 7, 7, 7, 7, 1, 1,
+};
diff --git a/include/fonts/font4_widths.h b/include/fonts/font4_widths.h
new file mode 100644
index 000000000..a779eb0eb
--- /dev/null
+++ b/include/fonts/font4_widths.h
@@ -0,0 +1,17 @@
+static const u8 sFont4Widths[] =
+{
+ 5, 3, 8, 8, 8, 8, 8, 8, 8, 4, 5, 4, 4, 8, 8, 8,
+ 8, 8, 8, 8, 8, 8, 8, 5, 8, 8, 8, 8, 8, 4, 8, 8,
+ 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 6, 6, 6, 5,
+ 6, 5, 5, 5, 5, 5, 5, 5, 5, 4, 8, 4, 4, 5, 5, 5,
+ 5, 5, 5, 5, 5, 5, 5, 5, 8, 4, 5, 5, 5, 5, 4, 8,
+ 4, 4, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 6, 6,
+ 8, 7, 6, 5, 3, 3, 5, 4, 3, 6, 6, 6, 7, 7, 8, 5,
+ 5, 5, 3, 5, 6, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5,
+ 5, 5, 5, 5, 5, 5, 5, 5, 4, 5, 5, 5, 5, 5, 5, 5,
+ 5, 5, 5, 4, 5, 5, 5, 5, 4, 5, 5, 5, 5, 5, 5, 5,
+ 5, 5, 4, 4, 5, 3, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5,
+ 5, 5, 5, 5, 6, 6, 7, 7, 7, 7, 6, 7, 6, 6, 7, 6,
+ 7, 7, 7, 6, 7, 6, 7, 6, 7, 6, 6, 7, 6, 6, 3, 3,
+ 5, 5, 5, 5, 3, 3, 5, 5, 5, 5, 5, 5,
+};
diff --git a/include/fonts/type1_map.h b/include/fonts/type1_map.h
new file mode 100644
index 000000000..45e42f62c
--- /dev/null
+++ b/include/fonts/type1_map.h
@@ -0,0 +1,250 @@
+static const u8 sFontType1Map[] =
+{
+ 0xD4, 0xD4,
+ 0xD4, 0x31,
+ 0xD4, 0x32,
+ 0xD4, 0x33,
+ 0xD4, 0x34,
+ 0xD4, 0x35,
+ 0xD4, 0x36,
+ 0xD4, 0x37,
+ 0xD4, 0x38,
+ 0xD4, 0x39,
+ 0xD4, 0x3A,
+ 0xD4, 0x3B,
+ 0xD4, 0x3C,
+ 0xD4, 0x3D,
+ 0xD4, 0x3E,
+ 0xD4, 0x3F,
+ 0xD4, 0x40,
+ 0xD4, 0x41,
+ 0xD4, 0x42,
+ 0xD4, 0x43,
+ 0xD4, 0x44,
+ 0xD4, 0x45,
+ 0xD4, 0x46,
+ 0xD4, 0x47,
+ 0xD4, 0x48,
+ 0xD4, 0x49,
+ 0xD4, 0x4A,
+ 0xD4, 0x4B,
+ 0xD4, 0x4C,
+ 0xD4, 0x4D,
+ 0xD4, 0x4E,
+ 0xD4, 0x4F,
+ 0xD4, 0x50,
+ 0xD4, 0x51,
+ 0xD4, 0x52,
+ 0xD4, 0x53,
+ 0xD4, 0x54,
+ 0xD4, 0x55,
+ 0xD4, 0x56,
+ 0xD4, 0x57,
+ 0xD4, 0x58,
+ 0xD4, 0x59,
+ 0xD4, 0x5A,
+ 0xD4, 0x5B,
+ 0xD4, 0x5C,
+ 0xD4, 0x5D,
+ 0xD4, 0x5E,
+ 0xD4, 0x31,
+ 0xD4, 0x32,
+ 0xD4, 0x33,
+ 0xD4, 0x34,
+ 0xD4, 0x35,
+ 0xD4, 0x60,
+ 0xD4, 0x61,
+ 0xD4, 0x62,
+ 0x65, 0x36,
+ 0x65, 0x37,
+ 0x65, 0x38,
+ 0x65, 0x39,
+ 0x65, 0x3A,
+ 0x65, 0x3B,
+ 0x65, 0x3C,
+ 0x65, 0x3D,
+ 0x65, 0x3E,
+ 0x65, 0x3F,
+ 0x65, 0x40,
+ 0x65, 0x41,
+ 0x65, 0x42,
+ 0x65, 0x43,
+ 0x65, 0x44,
+ 0x65, 0x4A,
+ 0x65, 0x4B,
+ 0x65, 0x4C,
+ 0x65, 0x4D,
+ 0x65, 0x4E,
+ 0x64, 0x4A,
+ 0x64, 0x4B,
+ 0x64, 0x4C,
+ 0x64, 0x4D,
+ 0x64, 0x4E,
+ 0xD4, 0x5F,
+ 0xD4, 0x00,
+ 0xD4, 0x01,
+ 0xD4, 0x02,
+ 0xD4, 0x03,
+ 0xD4, 0x04,
+ 0xD4, 0x05,
+ 0xD4, 0x06,
+ 0xD4, 0x07,
+ 0xD4, 0x08,
+ 0xD4, 0x09,
+ 0xD4, 0x0A,
+ 0xD4, 0x0B,
+ 0xD4, 0x0C,
+ 0xD4, 0x0D,
+ 0xD4, 0x0E,
+ 0xD4, 0x0F,
+ 0xD4, 0x10,
+ 0xD4, 0x11,
+ 0xD4, 0x12,
+ 0xD4, 0x13,
+ 0xD4, 0x14,
+ 0xD4, 0x15,
+ 0xD4, 0x16,
+ 0xD4, 0x17,
+ 0xD4, 0x18,
+ 0xD4, 0x19,
+ 0xD4, 0x1A,
+ 0xD4, 0x1B,
+ 0xD4, 0x4D,
+ 0xD4, 0x1C,
+ 0xD4, 0x1D,
+ 0xD4, 0x1E,
+ 0xD4, 0x1F,
+ 0xD4, 0x20,
+ 0xD4, 0x21,
+ 0xD4, 0x22,
+ 0xD4, 0x23,
+ 0xD4, 0x24,
+ 0xD4, 0x25,
+ 0xD4, 0x58,
+ 0xD4, 0x26,
+ 0xD4, 0x27,
+ 0xD4, 0x28,
+ 0xD4, 0x29,
+ 0xD4, 0x2A,
+ 0xD4, 0x2B,
+ 0xD4, 0x69,
+ 0xD4, 0x30,
+ 0xD4, 0x6A,
+ 0xD4, 0x6B,
+ 0xD4, 0x74,
+ 0xD4, 0x2D,
+ 0xD4, 0x2E,
+ 0xD4, 0x2F,
+ 0x65, 0x05,
+ 0x65, 0x06,
+ 0x65, 0x07,
+ 0x65, 0x08,
+ 0x65, 0x09,
+ 0x65, 0x0A,
+ 0x65, 0x0B,
+ 0x65, 0x0C,
+ 0x65, 0x0D,
+ 0x65, 0x0E,
+ 0x65, 0x0F,
+ 0x65, 0x10,
+ 0x65, 0x11,
+ 0x65, 0x12,
+ 0x65, 0x13,
+ 0x65, 0x19,
+ 0x65, 0x1A,
+ 0x65, 0x1B,
+ 0x65, 0x4D,
+ 0x65, 0x1C,
+ 0x64, 0x19,
+ 0x64, 0x1A,
+ 0x64, 0x1B,
+ 0x64, 0x4D,
+ 0x64, 0x1C,
+ 0xD4, 0x2C,
+ 0xD4, 0x76,
+ 0xD4, 0x77,
+ 0xD4, 0x78,
+ 0xD4, 0x79,
+ 0xD4, 0x7A,
+ 0xD4, 0x7B,
+ 0xD4, 0x7C,
+ 0xD4, 0x7D,
+ 0xD4, 0x7E,
+ 0xD4, 0x7F,
+ 0xD4, 0x67,
+ 0xD4, 0x66,
+ 0xD4, 0x68,
+ 0xD4, 0x63,
+ 0xD4, 0xD2,
+ 0xD4, 0xD3,
+ 0xD4, 0xD0,
+ 0xD4, 0xD1,
+ 0xD4, 0xCE,
+ 0xD4, 0xCF,
+ 0xD4, 0x6F,
+ 0xD4, 0x75,
+ 0xD4, 0x70,
+ 0xD4, 0x72,
+ 0xD4, 0x71,
+ 0xD4, 0x73,
+ 0xD4, 0x80,
+ 0xD4, 0x81,
+ 0xD4, 0x82,
+ 0xD4, 0x83,
+ 0xD4, 0x84,
+ 0xD4, 0x85,
+ 0xD4, 0x86,
+ 0xD4, 0x87,
+ 0xD4, 0x88,
+ 0xD4, 0x89,
+ 0xD4, 0x8A,
+ 0xD4, 0x8B,
+ 0xD4, 0x8C,
+ 0xD4, 0x8D,
+ 0xD4, 0x8E,
+ 0xD4, 0x8F,
+ 0xD4, 0x90,
+ 0xD4, 0x91,
+ 0xD4, 0x92,
+ 0xD4, 0x93,
+ 0xD4, 0x94,
+ 0xD4, 0x95,
+ 0xD4, 0x96,
+ 0xD4, 0x97,
+ 0xD4, 0x98,
+ 0xD4, 0x99,
+ 0xD4, 0x9A,
+ 0xD4, 0x9B,
+ 0xD4, 0x9C,
+ 0xD4, 0x9D,
+ 0xD4, 0x9E,
+ 0xD4, 0x9F,
+ 0xD4, 0xA0,
+ 0xD4, 0xA1,
+ 0xD4, 0xA2,
+ 0xD4, 0xA3,
+ 0xD4, 0xA4,
+ 0xD4, 0xA5,
+ 0xD4, 0xA6,
+ 0xD4, 0xA7,
+ 0xD4, 0xA8,
+ 0xD4, 0xA9,
+ 0xD4, 0xAA,
+ 0xD4, 0xAB,
+ 0xD4, 0xAC,
+ 0xD4, 0xAD,
+ 0xD4, 0xAE,
+ 0xD4, 0xAF,
+ 0xD4, 0xB0,
+ 0xD4, 0xB1,
+ 0xD4, 0xB2,
+ 0xD4, 0xB3,
+ 0xD4, 0x6D,
+ 0xD4, 0xD5,
+ 0xD4, 0xD6,
+ 0xD4, 0xD7,
+ 0xD4, 0xD8,
+ 0xD4, 0xD9,
+ 0xD4, 0xDA,
+ 0xD4, 0xDB,
+};
diff --git a/include/fonts/type3_map.h b/include/fonts/type3_map.h
new file mode 100644
index 000000000..48219423b
--- /dev/null
+++ b/include/fonts/type3_map.h
@@ -0,0 +1,131 @@
+static const u8 sFontType3Map[] =
+{
+ 0x00, 0x10,
+ 0x01, 0x10,
+ 0x02, 0x10,
+ 0x03, 0x10,
+ 0x04, 0x11,
+ 0x05, 0x11,
+ 0x06, 0x11,
+ 0x07, 0x11,
+ 0x08, 0x12,
+ 0x09, 0x12,
+ 0x0A, 0x12,
+ 0x0B, 0x12,
+ 0x0C, 0x13,
+ 0x0D, 0x13,
+ 0x0E, 0x13,
+ 0x0F, 0x13,
+ 0x00, 0x14,
+ 0x01, 0x14,
+ 0x02, 0x14,
+ 0x03, 0x14,
+ 0x04, 0x15,
+ 0x05, 0x15,
+ 0x06, 0x15,
+ 0x07, 0x15,
+ 0x08, 0x16,
+ 0x09, 0x16,
+ 0x0A, 0x16,
+ 0x0B, 0x16,
+ 0x0C, 0x17,
+ 0x0D, 0x17,
+ 0x0E, 0x17,
+ 0x0F, 0x17,
+ 0x00, 0x18,
+ 0x01, 0x18,
+ 0x02, 0x18,
+ 0x03, 0x18,
+ 0x04, 0x19,
+ 0x05, 0x19,
+ 0x06, 0x19,
+ 0x07, 0x19,
+ 0x08, 0x1A,
+ 0x09, 0x1A,
+ 0x0A, 0x1A,
+ 0x0B, 0x1A,
+ 0x0C, 0x1B,
+ 0x0D, 0x1B,
+ 0x0E, 0x1B,
+ 0x0F, 0x1B,
+ 0x00, 0x1C,
+ 0x01, 0x1C,
+ 0x02, 0x1C,
+ 0x03, 0x1C,
+ 0x04, 0x1D,
+ 0x05, 0x1D,
+ 0x06, 0x1D,
+ 0x07, 0x1D,
+ 0x08, 0x1E,
+ 0x09, 0x1E,
+ 0x0A, 0x1E,
+ 0x0B, 0x1E,
+ 0x0C, 0x1F,
+ 0x0D, 0x1F,
+ 0x0E, 0x1F,
+ 0x0F, 0x1F,
+ 0x20, 0x24,
+ 0x20, 0x24,
+ 0x21, 0x24,
+ 0x21, 0x24,
+ 0x20, 0x24,
+ 0x20, 0x24,
+ 0x21, 0x24,
+ 0x21, 0x24,
+ 0x22, 0x25,
+ 0x22, 0x25,
+ 0x23, 0x25,
+ 0x23, 0x25,
+ 0x22, 0x25,
+ 0x22, 0x25,
+ 0x23, 0x25,
+ 0x23, 0x25,
+ 0x20, 0x24,
+ 0x20, 0x24,
+ 0x21, 0x24,
+ 0x21, 0x24,
+ 0x20, 0x24,
+ 0x20, 0x24,
+ 0x21, 0x24,
+ 0x21, 0x24,
+ 0x22, 0x25,
+ 0x22, 0x25,
+ 0x23, 0x25,
+ 0x23, 0x25,
+ 0x22, 0x25,
+ 0x22, 0x25,
+ 0x23, 0x25,
+ 0x23, 0x25,
+ 0x20, 0x26,
+ 0x20, 0x26,
+ 0x21, 0x26,
+ 0x21, 0x26,
+ 0x20, 0x26,
+ 0x20, 0x26,
+ 0x21, 0x26,
+ 0x21, 0x26,
+ 0x22, 0x27,
+ 0x22, 0x27,
+ 0x23, 0x27,
+ 0x23, 0x27,
+ 0x22, 0x27,
+ 0x22, 0x27,
+ 0x23, 0x27,
+ 0x23, 0x27,
+ 0x20, 0x26,
+ 0x20, 0x26,
+ 0x21, 0x26,
+ 0x21, 0x26,
+ 0x20, 0x26,
+ 0x20, 0x26,
+ 0x21, 0x26,
+ 0x21, 0x26,
+ 0x22, 0x27,
+ 0x22, 0x27,
+ 0x23, 0x27,
+ 0x23, 0x27,
+ 0x22, 0x27,
+ 0x22, 0x27,
+ 0x23, 0x27,
+ 0x23, 0x27,
+};
diff --git a/include/gba/defines.h b/include/gba/defines.h
index a8df0c1c2..5b83d3d03 100644
--- a/include/gba/defines.h
+++ b/include/gba/defines.h
@@ -34,6 +34,11 @@
#define INTR_CHECK (*(u16 *)0x3007FF8)
#define INTR_VECTOR (*(void **)0x3007FFC)
+#define BG_VRAM 0x6000000
+
+#define BG_CHAR_ADDR(n) (BG_VRAM + (0x4000 * (n)))
+#define BG_SCREEN_ADDR(n) (BG_VRAM + (0x800 * (n)))
+
#define OBJ_VRAM0 0x6010000 // when BG is in tiled mode
#define OBJ_VRAM1 0x6014000 // when BG is in bitmap mode
diff --git a/include/gba/io_reg.h b/include/gba/io_reg.h
index 84c136465..44d6b932d 100644
--- a/include/gba/io_reg.h
+++ b/include/gba/io_reg.h
@@ -338,6 +338,18 @@
#define REG_DISPCNT (*(vu32 *)REG_ADDR_DISPCNT)
#define REG_DISPSTAT (*(vu16 *)REG_ADDR_DISPSTAT)
#define REG_VCOUNT (*(vu16 *)REG_ADDR_VCOUNT)
+#define REG_BG0CNT (*(vu16 *)REG_ADDR_BG0CNT)
+#define REG_BG1CNT (*(vu16 *)REG_ADDR_BG1CNT)
+#define REG_BG2CNT (*(vu16 *)REG_ADDR_BG2CNT)
+#define REG_BG3CNT (*(vu16 *)REG_ADDR_BG3CNT)
+#define REG_BG0HOFS (*(vu16 *)REG_ADDR_BG0HOFS)
+#define REG_BG0VOFS (*(vu16 *)REG_ADDR_BG0VOFS)
+#define REG_BG1HOFS (*(vu16 *)REG_ADDR_BG1HOFS)
+#define REG_BG1VOFS (*(vu16 *)REG_ADDR_BG1VOFS)
+#define REG_BG2HOFS (*(vu16 *)REG_ADDR_BG2HOFS)
+#define REG_BG2VOFS (*(vu16 *)REG_ADDR_BG2VOFS)
+#define REG_BG3HOFS (*(vu16 *)REG_ADDR_BG3HOFS)
+#define REG_BG3VOFS (*(vu16 *)REG_ADDR_BG3VOFS)
#define REG_SOUND1CNT_L (*(vu16 *)REG_ADDR_SOUND1CNT_L)
#define REG_NR10 (*(vu8 *)REG_ADDR_NR10)
diff --git a/include/global.h b/include/global.h
index b4a88ef5f..21b1e41af 100644
--- a/include/global.h
+++ b/include/global.h
@@ -7,6 +7,9 @@
#define REVISION 0
#endif
+// Prevent cross-jump optimization.
+#define BLOCK_CROSS_JUMP asm("");
+
extern u8 gStringVar1[];
extern u8 gStringVar2[];
extern u8 gStringVar3[];
@@ -42,7 +45,9 @@ struct SaveBlock2
u8 playTimeSeconds;
u8 playTimeVBlanks;
u8 optionsButtonMode;
- u8 filler[0x84];
+ u8 optionsTextSpeed:3;
+ u8 optionsUnk:5;
+ u8 filler[0x83];
struct Time localTimeOffset;
};
diff --git a/include/main.h b/include/main.h
index 06480af43..2f6671967 100644
--- a/include/main.h
+++ b/include/main.h
@@ -42,4 +42,6 @@ struct Main
u8 oamLoadDisabled:1;
};
+extern struct Main gMain;
+
#endif // GUARD_MAIN_H
diff --git a/include/sprite.h b/include/sprite.h
index fdc25c957..10bd3a5f0 100644
--- a/include/sprite.h
+++ b/include/sprite.h
@@ -16,7 +16,7 @@ struct SpriteFrameImage
struct SpritePalette
{
- u8 *data;
+ u16 *data;
u16 tag;
};
diff --git a/include/string_util.h b/include/string_util.h
index 0dee55828..d64bb08cc 100644
--- a/include/string_util.h
+++ b/include/string_util.h
@@ -3,14 +3,6 @@
#include "global.h"
-#define CHAR_SPACE 0x00
-#define CHAR_QUESTION_MARK 0xAC
-#define CHAR_HYPHEN 0xAE
-#define CHAR_COLON 0xF0
-#define EXT_CTRL_CODE_BEGIN 0xFC // extended control code
-#define PLACEHOLDER_BEGIN 0xFD // string placeholder
-#define EOS 0xFF // end of string
-
enum StringConvertMode
{
STR_CONV_MODE_LEFT_ALIGN,
@@ -25,15 +17,16 @@ u8 *StringCopy(u8 *dest, u8 *src);
u8 *StringAppend(u8 *dest, u8 *src);
u8 *StringCopyN(u8 *dest, u8 *src, u8 n);
u8 *StringAppendN(u8 *dest, u8 *src, u8 n);
-u16 StringGetLength(u8 *str);
+u16 StringLength(u8 *str);
s32 StringCompare(u8 *str1, u8 *str2);
s32 StringCompareN(u8 *str1, u8 *str2, u32 n);
u8 *ConvertIntToDecimalStringN(u8 *dest, s32 value, enum StringConvertMode mode, u8 n);
-u8 *ConvertIntToDecimalStringN_UnknownExtCtrlCode(u8 *dest, s32 value, enum StringConvertMode mode, u8 n);
+u8 *ConvertIntToDecimalStringN_DigitWidth6(u8 *dest, s32 value, enum StringConvertMode mode, u8 n);
u8 *ConvertIntToHexStringN(u8 *dest, s32 value, enum StringConvertMode mode, u8 n);
u8 *ConvertIntToDecimalString(u8 *dest, s32 value);
u8 *StringExpandPlaceholders(u8 *dest, u8 *src);
-u8 *UnknownStringFunc(u8 *dest, u8 *src);
+u8 *StringBraille(u8 *dest, u8 *src);
+u8 *GetExpandedPlaceholder(u32 id);
u8 *StringFill(u8 *dest, u8 c, u16 n);
u8 *StringCopyPadded(u8 *dest, u8 *src, u8 c, u16 n);
u8 *StringFillWithTerminator(u8 *dest, u16 n);
diff --git a/include/text.h b/include/text.h
new file mode 100644
index 000000000..4f9bdee5a
--- /dev/null
+++ b/include/text.h
@@ -0,0 +1,16 @@
+#ifndef GUARD_TEXT_H
+#define GUARD_TEXT_H
+
+#include "global.h"
+
+#define CHAR_SPACE 0x00
+#define CHAR_QUESTION_MARK 0xAC
+#define CHAR_HYPHEN 0xAE
+#define CHAR_COLON 0xF0
+#define EXT_CTRL_CODE_BEGIN 0xFC // extended control code
+#define PLACEHOLDER_BEGIN 0xFD // string placeholder
+#define EOS 0xFF // end of string
+
+u8 GetExtCtrlCodeLength(u8 code);
+
+#endif // GUARD_TEXT_H
diff --git a/ld_script.txt b/ld_script.txt
index a1341c13f..a414567a0 100644
--- a/ld_script.txt
+++ b/ld_script.txt
@@ -11,6 +11,7 @@ SECTIONS {
{
src/main.o(ewram_data);
src/sprite.o(ewram_data);
+ src/text.o(ewram_data);
}
. = 0x3000000;
@@ -19,6 +20,7 @@ SECTIONS {
ALIGN(4)
{
src/sprite.o(.bss);
+ src/text.o(.bss);
. = 0xF28;
src/agb_flash.o(.bss);
. = 0xF36;
@@ -28,6 +30,7 @@ SECTIONS {
src/m4a_2.o(.bss.code);
src/main.o(iwram_data);
src/sprite.o(iwram_data);
+ src/text.o(iwram_data);
. = 0x5FD0;
src/m4a_2.o(iwram_data);
}
@@ -40,7 +43,7 @@ SECTIONS {
asm/crt0.o(.text);
src/main.o(.text);
src/sprite.o(.text);
- asm/rom1.o(.text);
+ src/text.o(.text);
src/string_util.o(.text);
asm/rom2.o(.text);
src/rtc.o(.text);
@@ -93,6 +96,8 @@ SECTIONS {
src/main.o(.rodata);
src/sprite.o(.rodata);
. += 0x8; /* Why the gap? */
+ src/text.o(.rodata);
+ src/string_util.o(.rodata);
data/data2.o(.rodata);
src/m4a_tables.o(.rodata);
data/sound_data.o(.rodata);
diff --git a/src/rtc.c b/src/rtc.c
index 6f164066b..39fb23158 100644
--- a/src/rtc.c
+++ b/src/rtc.c
@@ -2,6 +2,7 @@
#include "siirtc.h"
#include "rtc.h"
#include "string_util.h"
+#include "text.h"
extern const struct SiiRtcInfo gRtcDummy;
extern const s32 gNumDaysInMonths[];
diff --git a/src/sprite.c b/src/sprite.c
index f17670361..7714a610f 100644
--- a/src/sprite.c
+++ b/src/sprite.c
@@ -39,7 +39,7 @@ struct OamDimensions
s8 height;
};
-void gpu_pal_apply(u8 *, u16, u32);
+void gpu_pal_apply(u16 *, u16, u32);
void sub_814A590(void);
static void UpdateOamCoords(void);
@@ -92,7 +92,7 @@ static void ApplyAffineAnimFrame(u8 matrixNum, struct AffineAnimFrameCmd *frameC
static void ResetAffineAnimData(void);
static u8 IndexOfSpriteTileTag(u16 tag);
static void AllocSpriteTileRange(u16 tag, u16 start, u16 count);
-static void ApplySpritePalette(u8 *src, u16 paletteOffset);
+static void DoLoadSpritePalette(u16 *src, u16 paletteOffset);
typedef void (*AnimFunc)(struct Sprite *);
typedef void (*AnimCmdFunc)(struct Sprite *);
@@ -292,8 +292,6 @@ static const struct OamDimensions sOamDimensions[3][4] =
},
};
-extern struct Main gMain;
-
static u16 sSpriteTileRangeTags[MAX_SPRITES];
static u16 sSpriteTileRanges[MAX_SPRITES * 2];
static struct AffineAnimState sAffineAnimStates[OAM_MATRIX_COUNT];
@@ -1638,7 +1636,7 @@ u8 LoadSpritePalette(struct SpritePalette *palette)
else
{
sSpritePaletteTags[index] = palette->tag;
- ApplySpritePalette(palette->data, index * 16);
+ DoLoadSpritePalette(palette->data, index * 16);
return index;
}
}
@@ -1651,7 +1649,7 @@ void LoadSpritePalettes(struct SpritePalette *palettes)
break;
}
-static void ApplySpritePalette(u8 *src, u16 paletteOffset)
+static void DoLoadSpritePalette(u16 *src, u16 paletteOffset)
{
gpu_pal_apply(src, paletteOffset + 0x100, 32);
}
diff --git a/src/string_util.c b/src/string_util.c
index 1ac5be114..43195a219 100644
--- a/src/string_util.c
+++ b/src/string_util.c
@@ -1,15 +1,64 @@
#include "global.h"
#include "string_util.h"
+#include "text.h"
#define MAX_PLACEHOLDER_ID 0xD
-typedef u8 *(*ExpandPlaceholderFunc)();
-
-extern u8 gDigits[];
-extern s32 gPowersOfTen[];
-extern u8 gUnknown_081E72EC[];
-extern u8 gUnknown_081E72F0[];
-extern ExpandPlaceholderFunc gExpandPlaceholderFuncTable[];
+static u8 *ExpandPlaceholder_UnknownStringVar(void);
+static u8 *ExpandPlaceholder_PlayerName(void);
+static u8 *ExpandPlaceholder_StringVar1(void);
+static u8 *ExpandPlaceholder_StringVar2(void);
+static u8 *ExpandPlaceholder_StringVar3(void);
+static u8 *ExpandPlaceholder_UnknownString(void);
+static u8 *ExpandPlaceholder_RivalName(void);
+static u8 *ExpandPlaceholder_Version(void);
+static u8 *ExpandPlaceholder_EvilTeam(void);
+static u8 *ExpandPlaceholder_GoodTeam(void);
+static u8 *ExpandPlaceholder_EvilLeader(void);
+static u8 *ExpandPlaceholder_GoodLeader(void);
+static u8 *ExpandPlaceholder_EvilLegendary(void);
+static u8 *ExpandPlaceholder_GoodLegendary(void);
+
+const u8 gEmptyString_81E72B0[] = _"";
+const u8 gRightPointingTriangleString[] = _"▶";
+const u8 sDigits[] = @"0123456789ABCDEF";
+
+const s32 sPowersOfTen[] =
+{
+ 1,
+ 10,
+ 100,
+ 1000,
+ 10000,
+ 100000,
+ 1000000,
+ 10000000,
+ 100000000,
+ 1000000000,
+};
+
+const u8 sSetBrailleFont[] = { 0xFC, 0x06, 0x06, 0xFF };
+const u8 sGotoLine2[] = { 0xFE, 0xFC, 0x0E, 0x02, 0xFF };
+
+typedef u8 *(*ExpandPlaceholderFunc)(void);
+
+const ExpandPlaceholderFunc sExpandPlaceholderFuncs[] =
+{
+ ExpandPlaceholder_UnknownStringVar,
+ ExpandPlaceholder_PlayerName,
+ ExpandPlaceholder_StringVar1,
+ ExpandPlaceholder_StringVar2,
+ ExpandPlaceholder_StringVar3,
+ ExpandPlaceholder_UnknownString,
+ ExpandPlaceholder_RivalName,
+ ExpandPlaceholder_Version,
+ ExpandPlaceholder_EvilTeam,
+ ExpandPlaceholder_GoodTeam,
+ ExpandPlaceholder_EvilLeader,
+ ExpandPlaceholder_GoodLeader,
+ ExpandPlaceholder_EvilLegendary,
+ ExpandPlaceholder_GoodLegendary,
+};
extern u8 gExpandedPlaceholder_Empty[];
extern u8 gExpandedPlaceholder_MaleEmpty[];
@@ -27,10 +76,6 @@ extern u8 gExpandedPlaceholder_May[];
extern u8 gUnknownStringVar[];
-extern u8 GetExtCtrlCodeLength(u8 code);
-
-u8 *GetExpandedPlaceholder(u32 id);
-
u8 *StringCopy10(u8 *dest, u8 *src)
{
u8 i;
@@ -116,7 +161,7 @@ u8 *StringAppendN(u8 *dest, u8 *src, u8 n)
return StringCopyN(dest, src, n);
}
-u16 StringGetLength(u8 *str)
+u16 StringLength(u8 *str)
{
u16 length = 0;
@@ -163,7 +208,7 @@ u8 *ConvertIntToDecimalStringN(u8 *dest, s32 value, enum StringConvertMode mode,
{
enum { WAITING_FOR_NONZERO_DIGIT, WRITING_DIGITS, WRITING_SPACES } state;
s32 powerOfTen;
- s32 largestPowerOfTen = gPowersOfTen[n - 1];
+ s32 largestPowerOfTen = sPowersOfTen[n - 1];
state = WAITING_FOR_NONZERO_DIGIT;
@@ -185,7 +230,7 @@ u8 *ConvertIntToDecimalStringN(u8 *dest, s32 value, enum StringConvertMode mode,
out = dest++;
if (digit <= 9)
- c = gDigits[digit];
+ c = sDigits[digit];
else
c = CHAR_QUESTION_MARK;
@@ -197,7 +242,7 @@ u8 *ConvertIntToDecimalStringN(u8 *dest, s32 value, enum StringConvertMode mode,
out = dest++;
if (digit <= 9)
- c = gDigits[digit];
+ c = sDigits[digit];
else
c = CHAR_QUESTION_MARK;
@@ -215,15 +260,15 @@ u8 *ConvertIntToDecimalStringN(u8 *dest, s32 value, enum StringConvertMode mode,
return dest;
}
-u8 *ConvertIntToDecimalStringN_UnknownExtCtrlCode(u8 *dest, s32 value, enum StringConvertMode mode, u8 n)
+u8 *ConvertIntToDecimalStringN_DigitWidth6(u8 *dest, s32 value, enum StringConvertMode mode, u8 n)
{
enum { WAITING_FOR_NONZERO_DIGIT, WRITING_DIGITS, WRITING_SPACES } state;
s32 powerOfTen;
- s32 largestPowerOfTen = gPowersOfTen[n - 1];
+ s32 largestPowerOfTen = sPowersOfTen[n - 1];
*dest++ = EXT_CTRL_CODE_BEGIN;
*dest++ = 0x14;
- *dest++ = 0x06;
+ *dest++ = 6;
state = WAITING_FOR_NONZERO_DIGIT;
@@ -245,7 +290,7 @@ u8 *ConvertIntToDecimalStringN_UnknownExtCtrlCode(u8 *dest, s32 value, enum Stri
out = dest++;
if (digit <= 9)
- c = gDigits[digit];
+ c = sDigits[digit];
else
c = CHAR_QUESTION_MARK;
@@ -257,7 +302,7 @@ u8 *ConvertIntToDecimalStringN_UnknownExtCtrlCode(u8 *dest, s32 value, enum Stri
out = dest++;
if (digit <= 9)
- c = gDigits[digit];
+ c = sDigits[digit];
else
c = CHAR_QUESTION_MARK;
@@ -309,7 +354,7 @@ u8 *ConvertIntToHexStringN(u8 *dest, s32 value, enum StringConvertMode mode, u8
out = dest++;
if (digit <= 0xF)
- c = gDigits[digit];
+ c = sDigits[digit];
else
c = CHAR_QUESTION_MARK;
@@ -321,7 +366,7 @@ u8 *ConvertIntToHexStringN(u8 *dest, s32 value, enum StringConvertMode mode, u8
out = dest++;
if (digit <= 0xF)
- c = gDigits[digit];
+ c = sDigits[digit];
else
c = CHAR_QUESTION_MARK;
@@ -346,7 +391,7 @@ u8 *ConvertIntToDecimalString(u8 *dest, s32 value)
do
{
- temp[length++] = gDigits[value % 10];
+ temp[length++] = sDigits[value % 10];
value /= 10;
} while (value != 0);
@@ -397,15 +442,15 @@ u8 *StringExpandPlaceholders(u8 *dest, u8 *src)
}
}
-u8 *UnknownStringFunc(u8 *dest, u8 *src)
+u8 *StringBraille(u8 *dest, u8 *src)
{
- u8 array1[4];
- u8 array2[5];
+ u8 setBrailleFont[4];
+ u8 gotoLine2[5];
- memcpy(array1, gUnknown_081E72EC, 4);
- memcpy(array2, gUnknown_081E72F0, 5);
+ memcpy(setBrailleFont, sSetBrailleFont, 4);
+ memcpy(gotoLine2, sGotoLine2, 5);
- dest = StringCopy(dest, array1);
+ dest = StringCopy(dest, setBrailleFont);
for (;;)
{
@@ -417,7 +462,7 @@ u8 *UnknownStringFunc(u8 *dest, u8 *src)
*dest = c;
return dest;
case 0xFE:
- dest = StringCopy(dest, array2);
+ dest = StringCopy(dest, gotoLine2);
break;
default:
*dest++ = c;
@@ -427,32 +472,32 @@ u8 *UnknownStringFunc(u8 *dest, u8 *src)
}
}
-u8 *ExpandPlaceholder_UnknownStringVar()
+u8 *ExpandPlaceholder_UnknownStringVar(void)
{
return gUnknownStringVar;
}
-u8 *ExpandPlaceholder_PlayerName()
+u8 *ExpandPlaceholder_PlayerName(void)
{
return gSaveBlock2.playerName;
}
-u8 *ExpandPlaceholder_StringVar1()
+u8 *ExpandPlaceholder_StringVar1(void)
{
return gStringVar1;
}
-u8 *ExpandPlaceholder_StringVar2()
+u8 *ExpandPlaceholder_StringVar2(void)
{
return gStringVar2;
}
-u8 *ExpandPlaceholder_StringVar3()
+u8 *ExpandPlaceholder_StringVar3(void)
{
return gStringVar3;
}
-u8 *ExpandPlaceholder_UnknownString()
+u8 *ExpandPlaceholder_UnknownString(void)
{
if (gSaveBlock2.playerGender == MALE)
return gExpandedPlaceholder_MaleEmpty;
@@ -460,7 +505,7 @@ u8 *ExpandPlaceholder_UnknownString()
return gExpandedPlaceholder_FemaleEmpty;
}
-u8 *ExpandPlaceholder_RivalName()
+u8 *ExpandPlaceholder_RivalName(void)
{
if (gSaveBlock2.playerGender == MALE)
return gExpandedPlaceholder_May;
@@ -479,11 +524,11 @@ u8 *ExpandPlaceholder_RivalName()
#ifdef SAPPHIRE
#define X(ph, r, s) \
-u8 *ExpandPlaceholder_##ph() { return gExpandedPlaceholder_##s; }
+static u8 *ExpandPlaceholder_##ph(void) { return gExpandedPlaceholder_##s; }
VERSION_DEPENDENT_PLACEHOLDER_LIST
#else
#define X(ph, r, s) \
-u8 *ExpandPlaceholder_##ph() { return gExpandedPlaceholder_##r; }
+static u8 *ExpandPlaceholder_##ph(void) { return gExpandedPlaceholder_##r; }
VERSION_DEPENDENT_PLACEHOLDER_LIST
#endif
@@ -494,7 +539,7 @@ u8 *GetExpandedPlaceholder(u32 id)
if (id > MAX_PLACEHOLDER_ID)
return gExpandedPlaceholder_Empty;
else
- return gExpandPlaceholderFuncTable[id]();
+ return sExpandPlaceholderFuncs[id]();
}
u8 *StringFill(u8 *dest, u8 c, u16 n)
diff --git a/src/text.c b/src/text.c
new file mode 100644
index 000000000..5a0d04c9c
--- /dev/null
+++ b/src/text.c
@@ -0,0 +1,4385 @@
+#include "global.h"
+#include "text.h"
+#include "main.h"
+#include "string_util.h"
+#include "songs.h"
+
+enum
+{
+ CHARSET_JAPANESE = 1,
+ CHARSET_LATIN
+};
+
+enum
+{
+ WIN_STATE_END,
+ WIN_STATE_BEGIN,
+ WIN_STATE_NORMAL,
+ WIN_STATE_INTERRUPTIBLE_PAUSE,
+ WIN_STATE_PAUSE,
+ WIN_STATE_WAIT_BUTTON,
+ WIN_STATE_NEWLINE,
+ WIN_STATE_PLACEHOLDER,
+ WIN_STATE_PARAGRAPH,
+ WIN_STATE_NEWLINE_WAIT,
+ WIN_STATE_WAIT_SOUND,
+};
+
+struct WindowConfig
+{
+ u8 bgNum;
+ u8 charBaseBlock;
+ u8 screenBaseBlock;
+ u8 priority;
+ u8 paletteNum;
+ u8 foregroundColor;
+ u8 backgroundColor;
+ u8 shadowColor;
+ u8 fontNum;
+ u8 textMode;
+ u8 spacing;
+ u8 tilemapLeft;
+ u8 tilemapTop;
+ u8 width;
+ u8 height;
+ u8 *tileData;
+ u16 *tilemap;
+ u32 maybeUnused;
+};
+
+struct Font
+{
+ u32 type;
+ u8 *glyphs;
+ u16 glyphSize;
+ u16 lowerTileOffset;
+};
+
+struct Window
+{
+ u8 textMode;
+ u8 fontNum;
+ u8 charset;
+ u8 foregroundColor;
+ u8 backgroundColor;
+ u8 shadowColor;
+ u8 paletteNum;
+ u8 tilemapLeft;
+ u8 tilemapTop;
+ u8 width;
+ u8 height;
+ u8 win_field_B;
+ u8 win_field_C;
+ u8 delayCounter;
+ u8 spacing;
+ u8 win_field_F;
+ u8 cursorX;
+ u8 cursorY;
+ u8 left;
+ u16 top;
+ u16 state;
+ u16 downArrowCounter;
+ u16 tileDataStartOffset;
+ u16 tileDataOffset;
+ u16 textIndex;
+ u8 *text;
+ u8 *tileData;
+ u16 *tilemap;
+ struct WindowConfig *config;
+};
+
+struct GlyphBuffer
+{
+ // 0-7 left tile
+ // 8-15 right tile (if it exists)
+ u32 pixelRows[16];
+
+ // pixel row filled with BG color
+ u32 background;
+
+ // table of color indices (not a palette)
+ u32 colors[16];
+};
+
+struct GlyphTileInfo
+{
+ u8 textMode;
+ u8 startPixel;
+ u8 width;
+ u8 *src;
+ u32 *dest;
+ u32 *colors;
+};
+
+struct ShiftAmount
+{
+ u32 left;
+ u32 right;
+};
+
+extern void gpu_pal_apply(const u16 *, u16, u32);
+extern void sub_8075474(u16);
+extern void audio_play(u16);
+extern u8 mplay_has_finished_maybe(void);
+
+static u16 InitVariableWidthFontTileData(struct Window *, u16);
+static u16 LoadFixedWidthFont(struct Window *, u16);
+static u16 LoadFixedWidthFont_Font1Latin(struct Window *, u16);
+static u16 LoadFixedWidthFont_Font4Latin(struct Window *, u16);
+static u16 LoadFixedWidthFont_Braille(struct Window *, u16);
+static void MultistepLoadFont_LoadGlyph(struct Window *, u16, u8);
+static u8 sub_8002FA0(struct Window *, u8 *);
+static u8 InterpretText(struct Window *);
+static u8 HandleExtCtrlCode(struct Window *);
+static u8 UpdateWindowText(struct Window *);
+static u8 DrawGlyph_TextMode0(struct Window *, u32);
+static void DrawGlyph_TextMode2(struct Window *, u32);
+static void LoadFixedWidthGlyph(struct Window *, u32, u8 *);
+static void WriteGlyphTilemap(struct Window *, u16, u16);
+static void GetGlyphTilePointers(u8, u8, u16, u8 **, u8 **);
+static u16 *GetCursorTilemapPointer(struct Window *);
+static void ApplyColors_UnshadowedFont(const u8 *, u32 *, u8, u8);
+static void ApplyColors_ShadowedFont(const void *, void *, u8, u8, u8);
+static void SetCursorX(struct Window *, u8);
+static void AddToCursorX(struct Window *, u8);
+static void AddToCursorY(struct Window *, u8);
+static void ClipLeft(struct Window *);
+static void ClipRight(struct Window *);
+static void InitColors(struct Window *);
+static void SetBackgroundColor(struct Window *, u8);
+static void SetShadowColor(struct Window *, u8);
+static void SetForegroundColor(struct Window *, u8);
+static u8 GetTextDelay(struct Window *);
+static bool8 PlayerCanInterruptWait(struct Window *);
+static void ScrollWindowTextLines(struct Window *);
+static void ScrollWindowTextLines_TextMode0(struct Window *);
+static void DoScroll_TextMode0(struct Window *, u16);
+static void ScrollWindowTextLines_TextMode1(struct Window *);
+static void DoScroll_TextMode1(struct Window *, u16);
+static void ScrollWindowTextLines_TextMode2(struct Window *);
+static void DoScroll_TextMode2(struct Window *, u8);
+void ClearWindowTextLines(struct Window *);
+static void ClearWindowTextLines_TextMode0_TextMode1(struct Window *, u8);
+static void ClearWindowTextLines_TextMode2(struct Window *, u8);
+static void TryEraseDownArrow(struct Window *);
+static u16 GetBlankTileNum(struct Window *);
+static u8 WaitWithDownArrow(struct Window *);
+static void DrawInitialDownArrow(struct Window *);
+static void DrawMovingDownArrow(struct Window *);
+u8 *AlignInt2(struct Window *, u8 *, s32, u8, u8);
+u8 *AlignString(struct Window *, u8 *, u8 *, u8, u8);
+void sub_8004E3C(struct WindowConfig *, u8 *, u8 *);
+u8 GetStringWidthGivenWindowConfig(struct WindowConfig *, u8 *);
+static u16 GetCursorTileNum(struct Window *, u32, u32);
+static s32 DrawGlyphTiles(struct Window *, u32, u32);
+static void UpdateTilemap(struct Window *, u32);
+static u8 GetGlyphWidth(struct Window *, u32);
+static s32 DrawGlyphTile_ShadowedFont(struct GlyphTileInfo *);
+u8 GetStringWidth(struct Window *, u8 *);
+void SkipExtCtrlCodes(u8 *);
+
+static void PrintGlyph_TextMode0(struct Window *, u32);
+static void PrintGlyph_TextMode1(struct Window *, u32);
+static void PrintGlyph_TextMode2(struct Window *, u32);
+
+static void WriteGlyphTilemap_Font0_Font3(struct Window *, u32);
+static void WriteGlyphTilemap_Font1_Font4(struct Window *, u32);
+static void WriteGlyphTilemap_Font2_Font5(struct Window *, u32);
+static void WriteGlyphTilemap_Font1_Font4(struct Window *, u32);
+static void WriteGlyphTilemap_Font2_Font5(struct Window *, u32);
+static void WriteGlyphTilemap_Font6(struct Window *, u32);
+
+static u8 ExtCtrlCode_Nop(struct Window *);
+static u8 ExtCtrlCode_ForegroundColor(struct Window *);
+static u8 ExtCtrlCode_BackgroundColor(struct Window *);
+static u8 ExtCtrlCode_ShadowColor(struct Window *);
+static u8 ExtCtrlCode_AllColors(struct Window *);
+static u8 ExtCtrlCode_Palette(struct Window *);
+static u8 ExtCtrlCode_Font(struct Window *);
+static u8 ExtCtrlCode_DefaultFont(struct Window *);
+static u8 ExtCtrlCode_Pause(struct Window *);
+static u8 ExtCtrlCode_WaitButton(struct Window *);
+static u8 ExtCtrlCode_WaitSound(struct Window *);
+static u8 ExtCtrlCode_PlayBGM(struct Window *);
+static u8 ExtCtrlCode_Escape(struct Window *);
+static u8 ExtCtrlCode_Nop2(struct Window *);
+static u8 ExtCtrlCode_SetCursorY(struct Window *);
+static u8 ExtCtrlCode_ClearWindowTextLines(struct Window *);
+static u8 ExtCtrlCode_PlaySE(struct Window *);
+static u8 ExtCtrlCode_Skip(struct Window *);
+static u8 ExtCtrlCode_SetCursorX(struct Window *);
+static u8 ExtCtrlCode_SkipTo(struct Window *);
+static u8 ExtCtrlCode_Spacing(struct Window *);
+static u8 ExtCtrlCode_Japanese(struct Window *);
+static u8 ExtCtrlCode_Latin(struct Window *);
+
+static void ShiftGlyphTile_UnshadowedFont_Width0(struct GlyphBuffer *, u8 *, u32 *, u8);
+static void ShiftGlyphTile_UnshadowedFont_Width1(struct GlyphBuffer *, u8 *, u32 *, u8);
+static void ShiftGlyphTile_UnshadowedFont_Width2(struct GlyphBuffer *, u8 *, u32 *, u8);
+static void ShiftGlyphTile_UnshadowedFont_Width3(struct GlyphBuffer *, u8 *, u32 *, u8);
+static void ShiftGlyphTile_UnshadowedFont_Width4(struct GlyphBuffer *, u8 *, u32 *, u8);
+static void ShiftGlyphTile_UnshadowedFont_Width5(struct GlyphBuffer *, u8 *, u32 *, u8);
+static void ShiftGlyphTile_UnshadowedFont_Width6(struct GlyphBuffer *, u8 *, u32 *, u8);
+static void ShiftGlyphTile_UnshadowedFont_Width7(struct GlyphBuffer *, u8 *, u32 *, u8);
+static void ShiftGlyphTile_UnshadowedFont_Width8(struct GlyphBuffer *, u8 *, u32 *, u8);
+
+static void ShiftGlyphTile_ShadowedFont_Width0(struct GlyphBuffer *, u32 *, u32 *, u8);
+static void ShiftGlyphTile_ShadowedFont_Width1(struct GlyphBuffer *, u32 *, u32 *, u8);
+static void ShiftGlyphTile_ShadowedFont_Width2(struct GlyphBuffer *, u32 *, u32 *, u8);
+static void ShiftGlyphTile_ShadowedFont_Width3(struct GlyphBuffer *, u32 *, u32 *, u8);
+static void ShiftGlyphTile_ShadowedFont_Width4(struct GlyphBuffer *, u32 *, u32 *, u8);
+static void ShiftGlyphTile_ShadowedFont_Width5(struct GlyphBuffer *, u32 *, u32 *, u8);
+static void ShiftGlyphTile_ShadowedFont_Width6(struct GlyphBuffer *, u32 *, u32 *, u8);
+static void ShiftGlyphTile_ShadowedFont_Width7(struct GlyphBuffer *, u32 *, u32 *, u8);
+static void ShiftGlyphTile_ShadowedFont_Width8(struct GlyphBuffer *, u32 *, u32 *, u8);
+
+static struct Window *sMultistepLoadFont_Window;
+static u16 sMultistepLoadFont_StartOffset;
+static u16 sMultistepLoadFont_Index;
+static struct Window sTempWindow;
+static u8 sWaitType;
+static u8 sLineLength;
+static struct GlyphBuffer sGlyphBuffer;
+
+EWRAM_DATA u16 gBG0TilemapBuffer[0x400] = {0};
+EWRAM_DATA u16 gBG1TilemapBuffer[0x400] = {0};
+EWRAM_DATA u16 gBG2TilemapBuffer[0x400] = {0};
+EWRAM_DATA u16 gBG3TilemapBuffer[0x400] = {0};
+
+EWRAM_DATA u8 gStringVar1[0x100] = {0};
+EWRAM_DATA u8 gStringVar2[0x100] = {0};
+EWRAM_DATA u8 gStringVar3[0x100] = {0};
+EWRAM_DATA u8 gStringVar4[0x100] = {0};
+
+extern u16 gUnknown_020239F8;
+extern u8 gUnknown_0203869A;
+extern u8 gTileBuffer[];
+
+vu16 * const gBGControlRegs[] =
+{
+ &REG_BG0CNT,
+ &REG_BG1CNT,
+ &REG_BG2CNT,
+ &REG_BG3CNT,
+};
+
+vu16 * const gBGHorizontalOffsetRegs[] =
+{
+ &REG_BG0HOFS,
+ &REG_BG1HOFS,
+ &REG_BG2HOFS,
+ &REG_BG3HOFS,
+};
+
+vu16 * const gBGVerticalOffsetRegs[] =
+{
+ &REG_BG0VOFS,
+ &REG_BG1VOFS,
+ &REG_BG2VOFS,
+ &REG_BG3VOFS,
+};
+
+const u16 gUnknown_081E29D8[] = { 0x100, 0x200, 0x400, 0x800 };
+const u16 gUnknown_081E29E0[] = { 0x100, 0x200, 0x400, 0x800 };
+const u16 gUnknown_081E29E8[] = { 1, 2, 4, 8 };
+
+#include "fonts/font0_lat_glyphs.h"
+#include "fonts/font1_lat_glyphs.h"
+#include "fonts/font0_jpn_glyphs.h"
+#include "fonts/font1_jpn_glyphs.h"
+#include "fonts/braille_glyphs.h"
+#include "fonts/down_arrow_tiles.h"
+#include "fonts/type1_map.h"
+#include "fonts/type3_map.h"
+#include "fonts/font1_widths.h"
+#include "fonts/font4_widths.h"
+#include "fonts/font0_widths.h"
+#include "fonts/font3_widths.h"
+#include "fonts/unknown_palette_81E6692.h"
+#include "fonts/default_palette.h"
+
+const u8 sBlankTile[8] = { 0, 0, 0, 0, 0, 0, 0, 0, };
+
+static const u32 sGlyphMasks[9][8][3] =
+{
+ {
+ { 0xFFFFFFFF,0xFFFFFFFF,0x00000000, },
+ { 0xFFFFFFFF,0xFFFFFFFF,0x00000000, },
+ { 0xFFFFFFFF,0xFFFFFFFF,0x00000000, },
+ { 0xFFFFFFFF,0xFFFFFFFF,0x00000000, },
+ { 0xFFFFFFFF,0xFFFFFFFF,0x00000000, },
+ { 0xFFFFFFFF,0xFFFFFFFF,0x00000000, },
+ { 0xFFFFFFFF,0xFFFFFFFF,0x00000000, },
+ { 0xFFFFFFFF,0xFFFFFFFF,0x00000000, },
+ },
+ {
+ { 0x00000000,0xFFFFFFFF,0xFFFFFFF0, },
+ { 0x0000000F,0xFFFFFFFF,0xFFFFFF00, },
+ { 0x000000FF,0xFFFFFFFF,0xFFFFF000, },
+ { 0x00000FFF,0xFFFFFFFF,0xFFFF0000, },
+ { 0x0000FFFF,0xFFFFFFFF,0xFFF00000, },
+ { 0x000FFFFF,0xFFFFFFFF,0xFF000000, },
+ { 0x00FFFFFF,0xFFFFFFFF,0xF0000000, },
+ { 0x0FFFFFFF,0xFFFFFFFF,0x00000000, },
+ },
+ {
+ { 0x00000000,0xFFFFFFFF,0xFFFFFF00, },
+ { 0x0000000F,0xFFFFFFFF,0xFFFFF000, },
+ { 0x000000FF,0xFFFFFFFF,0xFFFF0000, },
+ { 0x00000FFF,0xFFFFFFFF,0xFFF00000, },
+ { 0x0000FFFF,0xFFFFFFFF,0xFF000000, },
+ { 0x000FFFFF,0xFFFFFFFF,0xF0000000, },
+ { 0x00FFFFFF,0xFFFFFFFF,0x00000000, },
+ { 0x0FFFFFFF,0xFFFFFFF0,0x00000000, },
+ },
+ {
+ { 0x00000000,0xFFFFFFFF,0xFFFFF000, },
+ { 0x0000000F,0xFFFFFFFF,0xFFFF0000, },
+ { 0x000000FF,0xFFFFFFFF,0xFFF00000, },
+ { 0x00000FFF,0xFFFFFFFF,0xFF000000, },
+ { 0x0000FFFF,0xFFFFFFFF,0xF0000000, },
+ { 0x000FFFFF,0xFFFFFFFF,0x00000000, },
+ { 0x00FFFFFF,0xFFFFFFF0,0x00000000, },
+ { 0x0FFFFFFF,0xFFFFFF00,0x00000000, },
+ },
+ {
+ { 0x00000000,0xFFFFFFFF,0xFFFF0000, },
+ { 0x0000000F,0xFFFFFFFF,0xFFF00000, },
+ { 0x000000FF,0xFFFFFFFF,0xFF000000, },
+ { 0x00000FFF,0xFFFFFFFF,0xF0000000, },
+ { 0x0000FFFF,0xFFFFFFFF,0x00000000, },
+ { 0x000FFFFF,0xFFFFFFF0,0x00000000, },
+ { 0x00FFFFFF,0xFFFFFF00,0x00000000, },
+ { 0x0FFFFFFF,0xFFFFF000,0x00000000, },
+ },
+ {
+ { 0x00000000,0xFFFFFFFF,0xFFF00000, },
+ { 0x0000000F,0xFFFFFFFF,0xFF000000, },
+ { 0x000000FF,0xFFFFFFFF,0xF0000000, },
+ { 0x00000FFF,0xFFFFFFFF,0x00000000, },
+ { 0x0000FFFF,0xFFFFFFF0,0x00000000, },
+ { 0x000FFFFF,0xFFFFFF00,0x00000000, },
+ { 0x00FFFFFF,0xFFFFF000,0x00000000, },
+ { 0x0FFFFFFF,0xFFFF0000,0x00000000, },
+ },
+ {
+ { 0x00000000,0xFFFFFFFF,0xFF000000, },
+ { 0x0000000F,0xFFFFFFFF,0xF0000000, },
+ { 0x000000FF,0xFFFFFFFF,0x00000000, },
+ { 0x00000FFF,0xFFFFFFF0,0x00000000, },
+ { 0x0000FFFF,0xFFFFFF00,0x00000000, },
+ { 0x000FFFFF,0xFFFFF000,0x00000000, },
+ { 0x00FFFFFF,0xFFFF0000,0x00000000, },
+ { 0x0FFFFFFF,0xFFF00000,0x00000000, },
+ },
+ {
+ { 0x00000000,0xFFFFFFFF,0xF0000000, },
+ { 0x0000000F,0xFFFFFFFF,0x00000000, },
+ { 0x000000FF,0xFFFFFFF0,0x00000000, },
+ { 0x00000FFF,0xFFFFFF00,0x00000000, },
+ { 0x0000FFFF,0xFFFFF000,0x00000000, },
+ { 0x000FFFFF,0xFFFF0000,0x00000000, },
+ { 0x00FFFFFF,0xFFF00000,0x00000000, },
+ { 0x0FFFFFFF,0xFF000000,0x00000000, },
+ },
+ {
+ { 0x00000000,0xFFFFFFFF,0x00000000, },
+ { 0x0000000F,0xFFFFFFF0,0x00000000, },
+ { 0x000000FF,0xFFFFFF00,0x00000000, },
+ { 0x00000FFF,0xFFFFF000,0x00000000, },
+ { 0x0000FFFF,0xFFFF0000,0x00000000, },
+ { 0x000FFFFF,0xFFF00000,0x00000000, },
+ { 0x00FFFFFF,0xFF000000,0x00000000, },
+ { 0x0FFFFFFF,0xF0000000,0x00000000, },
+ },
+};
+
+static const struct ShiftAmount sGlyphShiftAmounts[8] =
+{
+ { 0, 32 },
+ { 4, 28 },
+ { 8, 24 },
+ { 12, 20 },
+ { 16, 16 },
+ { 20, 12 },
+ { 24, 8 },
+ { 28, 4 },
+};
+
+typedef void (*PrintGlyphFunc)(struct Window *, u32);
+
+static const PrintGlyphFunc sPrintGlyphFuncs[] =
+{
+ PrintGlyph_TextMode0,
+ PrintGlyph_TextMode1,
+ PrintGlyph_TextMode2,
+};
+
+typedef void (*WriteGlyphTilemapFunc)(struct Window *, u32);
+
+static const WriteGlyphTilemapFunc sWriteGlyphTilemapFuncs[] =
+{
+ WriteGlyphTilemap_Font0_Font3,
+ WriteGlyphTilemap_Font1_Font4,
+ WriteGlyphTilemap_Font2_Font5,
+ WriteGlyphTilemap_Font0_Font3,
+ WriteGlyphTilemap_Font1_Font4,
+ WriteGlyphTilemap_Font2_Font5,
+ WriteGlyphTilemap_Font6,
+};
+
+static const struct Window sDefaultWindow = { .charset = CHARSET_LATIN };
+
+typedef u8 (*ExtCtrlCodeFunc)(struct Window *);
+
+static const ExtCtrlCodeFunc sExtCtrlCodeFuncs[] =
+{
+ ExtCtrlCode_Nop,
+ ExtCtrlCode_ForegroundColor,
+ ExtCtrlCode_BackgroundColor,
+ ExtCtrlCode_ShadowColor,
+ ExtCtrlCode_AllColors,
+ ExtCtrlCode_Palette,
+ ExtCtrlCode_Font,
+ ExtCtrlCode_DefaultFont,
+ ExtCtrlCode_Pause,
+ ExtCtrlCode_WaitButton,
+ ExtCtrlCode_WaitSound,
+ ExtCtrlCode_PlayBGM,
+ ExtCtrlCode_Escape,
+ ExtCtrlCode_Nop2,
+ ExtCtrlCode_SetCursorY,
+ ExtCtrlCode_ClearWindowTextLines,
+ ExtCtrlCode_PlaySE,
+ ExtCtrlCode_Skip,
+ ExtCtrlCode_SetCursorX,
+ ExtCtrlCode_SkipTo,
+ ExtCtrlCode_Spacing,
+ ExtCtrlCode_Japanese,
+ ExtCtrlCode_Latin,
+};
+
+extern const u32 gFont3LatinGlyphs[];
+extern const u32 gFont4LatinGlyphs[];
+extern const u32 gFont3JapaneseGlyphs[];
+extern const u32 gFont4JapaneseGlyphs[];
+
+static const struct Font sFonts[] =
+{
+ // Japanese fonts
+ { 0, (u8 *)sFont0JapaneseGlyphs, 16, 8 },
+ { 1, (u8 *)sFont1JapaneseGlyphs, 8, 0 },
+ { 2, (u8 *)sFont1JapaneseGlyphs, 8, 0 },
+ { 4, (u8 *)gFont3JapaneseGlyphs, 64, 512 },
+ { 1, (u8 *)gFont4JapaneseGlyphs, 32, 0 },
+ { 2, (u8 *)gFont4JapaneseGlyphs, 32, 0 },
+ { 3, (u8 *)sBrailleGlyphs, 8, 0 },
+ // Latin
+ { 0, (u8 *)sFont0LatinGlyphs, 16, 8 },
+ { 1, (u8 *)sFont1LatinGlyphs, 8, 0 },
+ { 2, (u8 *)sFont1LatinGlyphs, 8, 0 },
+ { 0, (u8 *)gFont3LatinGlyphs, 64, 32 },
+ { 1, (u8 *)gFont4LatinGlyphs, 32, 0 },
+ { 2, (u8 *)gFont4LatinGlyphs, 32, 0 },
+ { 3, (u8 *)sBrailleGlyphs, 8, 0 },
+};
+
+static const u8 sTextSpeedDelays[] = { 6, 3, 1 }; // slow, mid, fast
+
+static const u8 sExtCtrlCodeLengths[] =
+{
+ 1,
+ 2,
+ 2,
+ 2,
+ 4,
+ 2,
+ 2,
+ 1,
+ 2,
+ 1,
+ 1,
+ 3,
+ 2,
+ 2,
+ 2,
+ 1,
+ 3,
+ 2,
+ 2,
+ 2,
+ 2,
+ 1,
+ 1,
+};
+
+typedef void (*ShiftGlyphTileUnshadowedFunc)(struct GlyphBuffer *, u8 *, u32 *, u8);
+
+static const ShiftGlyphTileUnshadowedFunc sShiftGlyphTileUnshadowedFuncs[] =
+{
+ ShiftGlyphTile_UnshadowedFont_Width0,
+ ShiftGlyphTile_UnshadowedFont_Width1,
+ ShiftGlyphTile_UnshadowedFont_Width2,
+ ShiftGlyphTile_UnshadowedFont_Width3,
+ ShiftGlyphTile_UnshadowedFont_Width4,
+ ShiftGlyphTile_UnshadowedFont_Width5,
+ ShiftGlyphTile_UnshadowedFont_Width6,
+ ShiftGlyphTile_UnshadowedFont_Width7,
+ ShiftGlyphTile_UnshadowedFont_Width8,
+};
+
+typedef void (*ShiftGlyphTileShadowedFunc)(struct GlyphBuffer *, u32 *, u32 *, u8);
+
+static const ShiftGlyphTileShadowedFunc sShiftGlyphTileShadowedFuncs[] =
+{
+ ShiftGlyphTile_ShadowedFont_Width0,
+ ShiftGlyphTile_ShadowedFont_Width1,
+ ShiftGlyphTile_ShadowedFont_Width2,
+ ShiftGlyphTile_ShadowedFont_Width3,
+ ShiftGlyphTile_ShadowedFont_Width4,
+ ShiftGlyphTile_ShadowedFont_Width5,
+ ShiftGlyphTile_ShadowedFont_Width6,
+ ShiftGlyphTile_ShadowedFont_Width7,
+ ShiftGlyphTile_ShadowedFont_Width8,
+};
+
+const struct WindowConfig gWindowConfig_81E6C3C =
+{
+ 0, // BG number
+ 2, // BG character base block
+ 31, // BG screen base block
+ 0, // BG priority
+ 15, // palette number
+ 1, // foreground color
+ 15, // background color
+ 8, // shadow color
+ 0, // font
+ 0, // text mode
+ 0, // spacing
+ 0, // tilemap left coordinate
+ 0, // tilemap top coordinate
+ 30, // width
+ 20, // height
+ (u8 *)BG_CHAR_ADDR(2), // tile data
+ (u16 *)BG_SCREEN_ADDR(31), // tilemap
+};
+
+const struct WindowConfig gWindowConfig_81E6C58 =
+{
+ 0, // BG number
+ 0, // BG character base block
+ 24, // BG screen base block
+ 0, // BG priority
+ 0, // palette number
+ 1, // foreground color
+ 15, // background color
+ 8, // shadow color
+ 3, // font
+ 0, // text mode
+ 0, // spacing
+ 0, // tilemap left coordinate
+ 0, // tilemap top coordinate
+ 26, // width
+ 20, // height
+ (u8 *)BG_CHAR_ADDR(0), // tile data
+ (u16 *)BG_SCREEN_ADDR(24), // tilemap
+};
+
+const struct WindowConfig gWindowConfig_81E6C74 =
+{
+ 0, // BG number
+ 0, // BG character base block
+ 0, // BG screen base block
+ 0, // BG priority
+ 0, // palette number
+ 1, // foreground color
+ 0, // background color
+ 3, // shadow color
+ 4, // font
+ 0, // text mode
+ 0, // spacing
+ 0, // tilemap left coordinate
+ 0, // tilemap top coordinate
+ 30, // width
+ 20, // height
+ (u8 *)OBJ_VRAM0, // tile data
+ NULL, // tilemap
+};
+
+const struct WindowConfig gWindowConfig_81E6C90 =
+{
+ 0, // BG number
+ 1, // BG character base block
+ 30, // BG screen base block
+ 2, // BG priority
+ 31, // palette number
+ 15, // foreground color
+ 0, // background color
+ 1, // shadow color
+ 4, // font
+ 2, // text mode
+ 0, // spacing
+ 0, // tilemap left coordinate
+ 0, // tilemap top coordinate
+ 30, // width
+ 20, // height
+ (u8 *)BG_CHAR_ADDR(1), // tile data
+ (u16 *)BG_SCREEN_ADDR(30), // tilemap
+};
+
+const struct WindowConfig gWindowConfig_81E6CAC =
+{
+ 0, // BG number
+ 0, // BG character base block
+ 0, // BG screen base block
+ 0, // BG priority
+ 0, // palette number
+ 15, // foreground color
+ 0, // background color
+ 1, // shadow color
+ 4, // font
+ 2, // text mode
+ 0, // spacing
+ 0, // tilemap left coordinate
+ 0, // tilemap top coordinate
+ 8, // width
+ 60, // height
+ gTileBuffer, // tile data
+ NULL, // tilemap
+};
+
+const struct WindowConfig gWindowConfig_81E6CC8 =
+{
+ 2, // BG number
+ 2, // BG character base block
+ 15, // BG screen base block
+ 0, // BG priority
+ 15, // palette number
+ 1, // foreground color
+ 15, // background color
+ 8, // shadow color
+ 3, // font
+ 2, // text mode
+ 0, // spacing
+ 0, // tilemap left coordinate
+ 0, // tilemap top coordinate
+ 30, // width
+ 20, // height
+ (u8 *)BG_CHAR_ADDR(2), // tile data
+ (u16 *)BG_SCREEN_ADDR(15), // tilemap
+};
+
+const struct WindowConfig gWindowConfig_81E6CE4 =
+{
+ 0, // BG number
+ 2, // BG character base block
+ 31, // BG screen base block
+ 0, // BG priority
+ 15, // palette number
+ 1, // foreground color
+ 15, // background color
+ 8, // shadow color
+ 3, // font
+ 2, // text mode
+ 0, // spacing
+ 0, // tilemap left coordinate
+ 0, // tilemap top coordinate
+ 30, // width
+ 20, // height
+ (u8 *)BG_CHAR_ADDR(2), // tile data
+ (u16 *)BG_SCREEN_ADDR(31), // tilemap
+};
+
+const struct WindowConfig gWindowConfig_81E6D00 =
+{
+ 0, // BG number
+ 0, // BG character base block
+ 31, // BG screen base block
+ 0, // BG priority
+ 15, // palette number
+ 2, // foreground color
+ 15, // background color
+ 3, // shadow color
+ 3, // font
+ 2, // text mode
+ 0, // spacing
+ 0, // tilemap left coordinate
+ 0, // tilemap top coordinate
+ 30, // width
+ 20, // height
+ (u8 *)BG_CHAR_ADDR(0), // tile data
+ (u16 *)BG_SCREEN_ADDR(31), // tilemap
+};
+
+const struct WindowConfig gWindowConfig_81E6D1C =
+{
+ 1, // BG number
+ 0, // BG character base block
+ 31, // BG screen base block
+ 1, // BG priority
+ 15, // palette number
+ 2, // foreground color
+ 15, // background color
+ 3, // shadow color
+ 3, // font
+ 2, // text mode
+ 0, // spacing
+ 0, // tilemap left coordinate
+ 0, // tilemap top coordinate
+ 30, // width
+ 20, // height
+ (u8 *)BG_CHAR_ADDR(0), // tile data
+ (u16 *)BG_SCREEN_ADDR(31), // tilemap
+};
+
+const struct WindowConfig gWindowConfig_81E6D38 =
+{
+ 0, // BG number
+ 0, // BG character base block
+ 0, // BG screen base block
+ 0, // BG priority
+ 0, // palette number
+ 15, // foreground color
+ 0, // background color
+ 14, // shadow color
+ 3, // font
+ 2, // text mode
+ 0, // spacing
+ 0, // tilemap left coordinate
+ 0, // tilemap top coordinate
+ 8, // width
+ 64, // height
+ gTileBuffer, // tile data
+ NULL, // tilemap
+};
+
+const struct WindowConfig gWindowConfig_81E6D54 =
+{
+ 3, // BG number
+ 3, // BG character base block
+ 15, // BG screen base block
+ 3, // BG priority
+ 2, // palette number
+ 1, // foreground color
+ 15, // background color
+ 8, // shadow color
+ 3, // font
+ 2, // text mode
+ 0, // spacing
+ 0, // tilemap left coordinate
+ 0, // tilemap top coordinate
+ 30, // width
+ 20, // height
+ (u8 *)BG_CHAR_ADDR(3), // tile data
+ (u16 *)BG_SCREEN_ADDR(15), // tilemap
+};
+
+const struct WindowConfig gWindowConfig_81E6D70 =
+{
+ 3, // BG number
+ 3, // BG character base block
+ 15, // BG screen base block
+ 3, // BG priority
+ 3, // palette number
+ 1, // foreground color
+ 3, // background color
+ 8, // shadow color
+ 3, // font
+ 2, // text mode
+ 0, // spacing
+ 0, // tilemap left coordinate
+ 0, // tilemap top coordinate
+ 30, // width
+ 20, // height
+ (u8 *)BG_CHAR_ADDR(3), // tile data
+ (u16 *)BG_SCREEN_ADDR(15), // tilemap
+};
+
+const struct WindowConfig gWindowConfig_81E6D8C =
+{
+ 1, // BG number
+ 0, // BG character base block
+ 14, // BG screen base block
+ 1, // BG priority
+ 0, // palette number
+ 1, // foreground color
+ 15, // background color
+ 8, // shadow color
+ 3, // font
+ 2, // text mode
+ 0, // spacing
+ 0, // tilemap left coordinate
+ 0, // tilemap top coordinate
+ 30, // width
+ 20, // height
+ (u8 *)BG_CHAR_ADDR(0), // tile data
+ (u16 *)BG_SCREEN_ADDR(14), // tilemap
+};
+
+const struct WindowConfig gWindowConfig_81E6DA8 =
+{
+ 0, // BG number
+ 0, // BG character base block
+ 12, // BG screen base block
+ 0, // BG priority
+ 15, // palette number
+ 1, // foreground color
+ 15, // background color
+ 8, // shadow color
+ 3, // font
+ 2, // text mode
+ 0, // spacing
+ 0, // tilemap left coordinate
+ 0, // tilemap top coordinate
+ 30, // width
+ 20, // height
+ (u8 *)BG_CHAR_ADDR(0), // tile data
+ (u16 *)BG_SCREEN_ADDR(11), // tilemap
+};
+
+const struct WindowConfig gWindowConfig_81E6DC4 =
+{
+ 0, // BG number
+ 2, // BG character base block
+ 30, // BG screen base block
+ 0, // BG priority
+ 15, // palette number
+ 1, // foreground color
+ 0, // background color
+ 8, // shadow color
+ 3, // font
+ 2, // text mode
+ 0, // spacing
+ 0, // tilemap left coordinate
+ 0, // tilemap top coordinate
+ 30, // width
+ 20, // height
+ (u8 *)BG_CHAR_ADDR(2), // tile data
+ (u16 *)BG_SCREEN_ADDR(30), // tilemap
+};
+
+const struct WindowConfig gWindowConfig_81E6DE0 =
+{
+ 0, // BG number
+ 2, // BG character base block
+ 30, // BG screen base block
+ 0, // BG priority
+ 14, // palette number
+ 1, // foreground color
+ 0, // background color
+ 8, // shadow color
+ 3, // font
+ 2, // text mode
+ 0, // spacing
+ 0, // tilemap left coordinate
+ 0, // tilemap top coordinate
+ 30, // width
+ 20, // height
+ (u8 *)BG_CHAR_ADDR(2), // tile data
+ (u16 *)BG_SCREEN_ADDR(30), // tilemap
+};
+
+const struct WindowConfig gWindowConfig_81E6DFC =
+{
+ 0, // BG number
+ 2, // BG character base block
+ 31, // BG screen base block
+ 0, // BG priority
+ 15, // palette number
+ 1, // foreground color
+ 0, // background color
+ 8, // shadow color
+ 3, // font
+ 2, // text mode
+ 0, // spacing
+ 0, // tilemap left coordinate
+ 0, // tilemap top coordinate
+ 30, // width
+ 20, // height
+ (u8 *)BG_CHAR_ADDR(2), // tile data
+ (u16 *)BG_SCREEN_ADDR(31), // tilemap
+};
+
+const struct WindowConfig gWindowConfig_81E6E18 =
+{
+ 0, // BG number
+ 2, // BG character base block
+ 31, // BG screen base block
+ 1, // BG priority
+ 15, // palette number
+ 1, // foreground color
+ 0, // background color
+ 8, // shadow color
+ 3, // font
+ 2, // text mode
+ 0, // spacing
+ 0, // tilemap left coordinate
+ 0, // tilemap top coordinate
+ 30, // width
+ 20, // height
+ (u8 *)BG_CHAR_ADDR(2), // tile data
+ (u16 *)BG_SCREEN_ADDR(31), // tilemap
+};
+
+const struct WindowConfig gWindowConfig_81E6E34 =
+{
+ 1, // BG number
+ 0, // BG character base block
+ 31, // BG screen base block
+ 1, // BG priority
+ 15, // palette number
+ 1, // foreground color
+ 0, // background color
+ 8, // shadow color
+ 3, // font
+ 2, // text mode
+ 0, // spacing
+ 0, // tilemap left coordinate
+ 0, // tilemap top coordinate
+ 30, // width
+ 20, // height
+ (u8 *)BG_CHAR_ADDR(0), // tile data
+ (u16 *)BG_SCREEN_ADDR(31), // tilemap
+};
+
+const struct WindowConfig gWindowConfig_81E6E50 =
+{
+ 0, // BG number
+ 2, // BG character base block
+ 28, // BG screen base block
+ 0, // BG priority
+ 13, // palette number
+ 1, // foreground color
+ 15, // background color
+ 8, // shadow color
+ 3, // font
+ 2, // text mode
+ 0, // spacing
+ 0, // tilemap left coordinate
+ 0, // tilemap top coordinate
+ 30, // width
+ 20, // height
+ (u8 *)BG_CHAR_ADDR(2), // tile data
+ (u16 *)BG_SCREEN_ADDR(28), // tilemap
+};
+
+const struct WindowConfig gWindowConfig_81E6E6C =
+{
+ 0, // BG number
+ 2, // BG character base block
+ 30, // BG screen base block
+ 0, // BG priority
+ 13, // palette number
+ 15, // foreground color
+ 0, // background color
+ 10, // shadow color
+ 3, // font
+ 2, // text mode
+ 0, // spacing
+ 0, // tilemap left coordinate
+ 0, // tilemap top coordinate
+ 30, // width
+ 20, // height
+ (u8 *)BG_CHAR_ADDR(2), // tile data
+ (u16 *)BG_SCREEN_ADDR(30), // tilemap
+};
+
+const struct WindowConfig gWindowConfig_81E6E88 =
+{
+ 0, // BG number
+ 0, // BG character base block
+ 31, // BG screen base block
+ 0, // BG priority
+ 15, // palette number
+ 1, // foreground color
+ 15, // background color
+ 8, // shadow color
+ 3, // font
+ 2, // text mode
+ 0, // spacing
+ 0, // tilemap left coordinate
+ 0, // tilemap top coordinate
+ 30, // width
+ 20, // height
+ (u8 *)BG_CHAR_ADDR(0), // tile data
+ (u16 *)BG_SCREEN_ADDR(31), // tilemap
+};
+
+const struct WindowConfig gWindowConfig_81E6EA4 =
+{
+ 1, // BG number
+ 0, // BG character base block
+ 28, // BG screen base block
+ 1, // BG priority
+ 1, // palette number
+ 1, // foreground color
+ 15, // background color
+ 8, // shadow color
+ 3, // font
+ 2, // text mode
+ 8, // spacing
+ 0, // tilemap left coordinate
+ 0, // tilemap top coordinate
+ 30, // width
+ 20, // height
+ (u8 *)BG_CHAR_ADDR(0), // tile data
+ (u16 *)BG_SCREEN_ADDR(28), // tilemap
+};
+
+const struct WindowConfig gWindowConfig_81E6EC0 =
+{
+ 2, // BG number
+ 2, // BG character base block
+ 29, // BG screen base block
+ 2, // BG priority
+ 1, // palette number
+ 1, // foreground color
+ 15, // background color
+ 8, // shadow color
+ 3, // font
+ 2, // text mode
+ 8, // spacing
+ 0, // tilemap left coordinate
+ 0, // tilemap top coordinate
+ 30, // width
+ 20, // height
+ (u8 *)BG_CHAR_ADDR(2), // tile data
+ (u16 *)BG_SCREEN_ADDR(29), // tilemap
+};
+
+const struct WindowConfig gWindowConfig_81E6EDC =
+{
+ 1, // BG number
+ 0, // BG character base block
+ 28, // BG screen base block
+ 1, // BG priority
+ 2, // palette number
+ 1, // foreground color
+ 15, // background color
+ 8, // shadow color
+ 3, // font
+ 2, // text mode
+ 8, // spacing
+ 0, // tilemap left coordinate
+ 0, // tilemap top coordinate
+ 30, // width
+ 20, // height
+ (u8 *)BG_CHAR_ADDR(0), // tile data
+ (u16 *)BG_SCREEN_ADDR(28), // tilemap
+};
+
+const struct WindowConfig gWindowConfig_81E6EF8 =
+{
+ 2, // BG number
+ 2, // BG character base block
+ 29, // BG screen base block
+ 2, // BG priority
+ 2, // palette number
+ 1, // foreground color
+ 15, // background color
+ 8, // shadow color
+ 3, // font
+ 2, // text mode
+ 8, // spacing
+ 0, // tilemap left coordinate
+ 0, // tilemap top coordinate
+ 30, // width
+ 20, // height
+ (u8 *)BG_CHAR_ADDR(2), // tile data
+ (u16 *)BG_SCREEN_ADDR(29), // tilemap
+};
+
+const struct WindowConfig gWindowConfig_81E6F14 =
+{
+ 1, // BG number
+ 0, // BG character base block
+ 28, // BG screen base block
+ 1, // BG priority
+ 3, // palette number
+ 1, // foreground color
+ 15, // background color
+ 8, // shadow color
+ 3, // font
+ 2, // text mode
+ 8, // spacing
+ 0, // tilemap left coordinate
+ 0, // tilemap top coordinate
+ 30, // width
+ 20, // height
+ (u8 *)BG_CHAR_ADDR(0), // tile data
+ (u16 *)BG_SCREEN_ADDR(28), // tilemap
+};
+
+const struct WindowConfig gWindowConfig_81E6F30 =
+{
+ 2, // BG number
+ 2, // BG character base block
+ 29, // BG screen base block
+ 2, // BG priority
+ 3, // palette number
+ 1, // foreground color
+ 15, // background color
+ 8, // shadow color
+ 3, // font
+ 2, // text mode
+ 8, // spacing
+ 0, // tilemap left coordinate
+ 0, // tilemap top coordinate
+ 30, // width
+ 20, // height
+ (u8 *)BG_CHAR_ADDR(2), // tile data
+ (u16 *)BG_SCREEN_ADDR(29), // tilemap
+};
+
+const struct WindowConfig gWindowConfig_81E6F4C =
+{
+ 3, // BG number
+ 0, // BG character base block
+ 30, // BG screen base block
+ 3, // BG priority
+ 0, // palette number
+ 1, // foreground color
+ 15, // background color
+ 8, // shadow color
+ 3, // font
+ 2, // text mode
+ 0, // spacing
+ 0, // tilemap left coordinate
+ 0, // tilemap top coordinate
+ 30, // width
+ 20, // height
+ (u8 *)BG_CHAR_ADDR(0), // tile data
+ (u16 *)BG_SCREEN_ADDR(30), // tilemap
+};
+
+const struct WindowConfig gWindowConfig_81E6F68 =
+{
+ 0, // BG number
+ 2, // BG character base block
+ 13, // BG screen base block
+ 0, // BG priority
+ 15, // palette number
+ 1, // foreground color
+ 15, // background color
+ 8, // shadow color
+ 3, // font
+ 2, // text mode
+ 0, // spacing
+ 0, // tilemap left coordinate
+ 0, // tilemap top coordinate
+ 30, // width
+ 20, // height
+ (u8 *)BG_CHAR_ADDR(2), // tile data
+ (u16 *)BG_SCREEN_ADDR(13), // tilemap
+};
+
+const struct WindowConfig gWindowConfig_81E6F84 =
+{
+ 0, // BG number
+ 2, // BG character base block
+ 31, // BG screen base block
+ 0, // BG priority
+ 15, // palette number
+ 15, // foreground color
+ 0, // background color
+ 1, // shadow color
+ 3, // font
+ 0, // text mode
+ 0, // spacing
+ 0, // tilemap left coordinate
+ 0, // tilemap top coordinate
+ 30, // width
+ 20, // height
+ (u8 *)BG_CHAR_ADDR(2), // tile data
+ (u16 *)BG_SCREEN_ADDR(31), // tilemap
+};
+
+const struct WindowConfig gWindowConfig_81E6FA0 =
+{
+ 1, // BG number
+ 0, // BG character base block
+ 24, // BG screen base block
+ 3, // BG priority
+ 15, // palette number
+ 1, // foreground color
+ 0, // background color
+ 8, // shadow color
+ 3, // font
+ 0, // text mode
+ 0, // spacing
+ 0, // tilemap left coordinate
+ 0, // tilemap top coordinate
+ 30, // width
+ 20, // height
+ (u8 *)BG_CHAR_ADDR(0), // tile data
+ (u16 *)BG_SCREEN_ADDR(24), // tilemap
+};
+
+const struct WindowConfig gWindowConfig_81E6FBC =
+{
+ 0, // BG number
+ 0, // BG character base block
+ 30, // BG screen base block
+ 0, // BG priority
+ 15, // palette number
+ 15, // foreground color
+ 0, // background color
+ 8, // shadow color
+ 3, // font
+ 0, // text mode
+ 0, // spacing
+ 0, // tilemap left coordinate
+ 0, // tilemap top coordinate
+ 30, // width
+ 20, // height
+ (u8 *)BG_CHAR_ADDR(0), // tile data
+ (u16 *)BG_SCREEN_ADDR(30), // tilemap
+};
+
+const struct WindowConfig gWindowConfig_81E6FD8 =
+{
+ 0, // BG number
+ 0, // BG character base block
+ 24, // BG screen base block
+ 0, // BG priority
+ 15, // palette number
+ 15, // foreground color
+ 0, // background color
+ 8, // shadow color
+ 3, // font
+ 0, // text mode
+ 0, // spacing
+ 0, // tilemap left coordinate
+ 0, // tilemap top coordinate
+ 30, // width
+ 20, // height
+ (u8 *)BG_CHAR_ADDR(0), // tile data
+ (u16 *)BG_SCREEN_ADDR(24), // tilemap
+};
+
+const struct WindowConfig gWindowConfig_81E6FF4 =
+{
+ 0, // BG number
+ 0, // BG character base block
+ 24, // BG screen base block
+ 0, // BG priority
+ 15, // palette number
+ 1, // foreground color
+ 0, // background color
+ 8, // shadow color
+ 3, // font
+ 0, // text mode
+ 0, // spacing
+ 0, // tilemap left coordinate
+ 0, // tilemap top coordinate
+ 30, // width
+ 20, // height
+ (u8 *)BG_CHAR_ADDR(0), // tile data
+ (u16 *)BG_SCREEN_ADDR(24), // tilemap
+};
+
+const struct WindowConfig gWindowConfig_81E7010 =
+{
+ 0, // BG number
+ 0, // BG character base block
+ 30, // BG screen base block
+ 0, // BG priority
+ 15, // palette number
+ 1, // foreground color
+ 0, // background color
+ 8, // shadow color
+ 3, // font
+ 0, // text mode
+ 0, // spacing
+ 0, // tilemap left coordinate
+ 0, // tilemap top coordinate
+ 30, // width
+ 20, // height
+ (u8 *)BG_CHAR_ADDR(0), // tile data
+ (u16 *)BG_SCREEN_ADDR(30), // tilemap
+};
+
+const struct WindowConfig gWindowConfig_81E702C =
+{
+ 3, // BG number
+ 2, // BG character base block
+ 15, // BG screen base block
+ 0, // BG priority
+ 15, // palette number
+ 1, // foreground color
+ 15, // background color
+ 8, // shadow color
+ 3, // font
+ 2, // text mode
+ 0, // spacing
+ 0, // tilemap left coordinate
+ 0, // tilemap top coordinate
+ 30, // width
+ 20, // height
+ (u8 *)BG_CHAR_ADDR(2), // tile data
+ (u16 *)BG_SCREEN_ADDR(15), // tilemap
+};
+
+const struct WindowConfig gWindowConfig_81E7048 =
+{
+ 2, // BG number
+ 2, // BG character base block
+ 14, // BG screen base block
+ 2, // BG priority
+ 15, // palette number
+ 1, // foreground color
+ 0, // background color
+ 8, // shadow color
+ 3, // font
+ 2, // text mode
+ 0, // spacing
+ 16, // tilemap left coordinate
+ 0, // tilemap top coordinate
+ 16, // width
+ 32, // height
+ (u8 *)BG_CHAR_ADDR(2), // tile data
+ (u16 *)BG_SCREEN_ADDR(14), // tilemap
+};
+
+const struct WindowConfig gWindowConfig_81E7064 =
+{
+ 2, // BG number
+ 2, // BG character base block
+ 14, // BG screen base block
+ 2, // BG priority
+ 15, // palette number
+ 1, // foreground color
+ 0, // background color
+ 8, // shadow color
+ 3, // font
+ 2, // text mode
+ 0, // spacing
+ 0, // tilemap left coordinate
+ 0, // tilemap top coordinate
+ 30, // width
+ 20, // height
+ (u8 *)BG_CHAR_ADDR(2), // tile data
+ (u16 *)BG_SCREEN_ADDR(14), // tilemap
+};
+
+const struct WindowConfig gWindowConfig_81E7080 =
+{
+ 3, // BG number
+ 0, // BG character base block
+ 30, // BG screen base block
+ 3, // BG priority
+ 11, // palette number
+ 1, // foreground color
+ 15, // background color
+ 5, // shadow color
+ 3, // font
+ 2, // text mode
+ 0, // spacing
+ 0, // tilemap left coordinate
+ 0, // tilemap top coordinate
+ 30, // width
+ 20, // height
+ (u8 *)BG_CHAR_ADDR(0), // tile data
+ (u16 *)BG_SCREEN_ADDR(30), // tilemap
+};
+
+const struct WindowConfig gWindowConfig_81E709C =
+{
+ 0, // BG number
+ 0, // BG character base block
+ 31, // BG screen base block
+ 1, // BG priority
+ 15, // palette number
+ 1, // foreground color
+ 15, // background color
+ 8, // shadow color
+ 3, // font
+ 2, // text mode
+ 0, // spacing
+ 0, // tilemap left coordinate
+ 0, // tilemap top coordinate
+ 30, // width
+ 20, // height
+ (u8 *)BG_CHAR_ADDR(0), // tile data
+ (u16 *)BG_SCREEN_ADDR(31), // tilemap
+};
+
+const struct WindowConfig gWindowConfig_81E70B8 =
+{
+ 2, // BG number
+ 0, // BG character base block
+ 30, // BG screen base block
+ 2, // BG priority
+ 11, // palette number
+ 1, // foreground color
+ 0, // background color
+ 5, // shadow color
+ 3, // font
+ 2, // text mode
+ 0, // spacing
+ 0, // tilemap left coordinate
+ 0, // tilemap top coordinate
+ 30, // width
+ 20, // height
+ (u8 *)BG_CHAR_ADDR(0), // tile data
+ (u16 *)BG_SCREEN_ADDR(30), // tilemap
+};
+
+const struct WindowConfig gWindowConfig_81E70D4 =
+{
+ 3, // BG number
+ 0, // BG character base block
+ 30, // BG screen base block
+ 3, // BG priority
+ 11, // palette number
+ 1, // foreground color
+ 15, // background color
+ 5, // shadow color
+ 3, // font
+ 2, // text mode
+ 0, // spacing
+ 0, // tilemap left coordinate
+ 0, // tilemap top coordinate
+ 30, // width
+ 20, // height
+ (u8 *)BG_CHAR_ADDR(0), // tile data
+ (u16 *)BG_SCREEN_ADDR(30), // tilemap
+};
+
+const struct WindowConfig gWindowConfig_81E70F0 =
+{
+ 0, // BG number
+ 0, // BG character base block
+ 0, // BG screen base block
+ 0, // BG priority
+ 0, // palette number
+ 15, // foreground color
+ 1, // background color
+ 14, // shadow color
+ 3, // font
+ 2, // text mode
+ 0, // spacing
+ 0, // tilemap left coordinate
+ 0, // tilemap top coordinate
+ 32, // width
+ 32, // height
+ gTileBuffer, // tile data
+ NULL, // tilemap
+};
+
+const struct WindowConfig gWindowConfig_81E710C =
+{
+ 0, // BG number
+ 0, // BG character base block
+ 31, // BG screen base block
+ 1, // BG priority
+ 15, // palette number
+ 1, // foreground color
+ 0, // background color
+ 8, // shadow color
+ 3, // font
+ 2, // text mode
+ 0, // spacing
+ 0, // tilemap left coordinate
+ 0, // tilemap top coordinate
+ 30, // width
+ 20, // height
+ (u8 *)BG_CHAR_ADDR(0), // tile data
+ (u16 *)BG_SCREEN_ADDR(31), // tilemap
+};
+
+const struct WindowConfig gWindowConfig_81E7128 =
+{
+ 0, // BG number
+ 2, // BG character base block
+ 31, // BG screen base block
+ 0, // BG priority
+ 15, // palette number
+ 1, // foreground color
+ 15, // background color
+ 8, // shadow color
+ 3, // font
+ 2, // text mode
+ 0, // spacing
+ 0, // tilemap left coordinate
+ 0, // tilemap top coordinate
+ 30, // width
+ 20, // height
+ (u8 *)BG_CHAR_ADDR(2), // tile data
+ (u16 *)BG_SCREEN_ADDR(31), // tilemap
+};
+
+const struct WindowConfig gWindowConfig_81E7144 =
+{
+ 0, // BG number
+ 2, // BG character base block
+ 31, // BG screen base block
+ 0, // BG priority
+ 13, // palette number
+ 1, // foreground color
+ 0, // background color
+ 8, // shadow color
+ 3, // font
+ 2, // text mode
+ 0, // spacing
+ 0, // tilemap left coordinate
+ 0, // tilemap top coordinate
+ 30, // width
+ 20, // height
+ (u8 *)BG_CHAR_ADDR(2), // tile data
+ (u16 *)BG_SCREEN_ADDR(31), // tilemap
+};
+
+const struct WindowConfig gWindowConfig_81E7160 =
+{
+ 1, // BG number
+ 1, // BG character base block
+ 10, // BG screen base block
+ 1, // BG priority
+ 14, // palette number
+ 1, // foreground color
+ 0, // background color
+ 8, // shadow color
+ 3, // font
+ 0, // text mode
+ 0, // spacing
+ 0, // tilemap left coordinate
+ 0, // tilemap top coordinate
+ 30, // width
+ 20, // height
+ (u8 *)BG_CHAR_ADDR(1), // tile data
+ (u16 *)BG_SCREEN_ADDR(10), // tilemap
+};
+
+const struct WindowConfig gWindowConfig_81E717C =
+{
+ 0, // BG number
+ 3, // BG character base block
+ 31, // BG screen base block
+ 0, // BG priority
+ 15, // palette number
+ 15, // foreground color
+ 0, // background color
+ 8, // shadow color
+ 3, // font
+ 0, // text mode
+ 0, // spacing
+ 0, // tilemap left coordinate
+ 0, // tilemap top coordinate
+ 30, // width
+ 20, // height
+ (u8 *)BG_CHAR_ADDR(3), // tile data
+ (u16 *)BG_SCREEN_ADDR(31), // tilemap
+};
+
+const struct WindowConfig gWindowConfig_81E7198 =
+{
+ 0, // BG number
+ 2, // BG character base block
+ 15, // BG screen base block
+ 0, // BG priority
+ 15, // palette number
+ 15, // foreground color
+ 0, // background color
+ 8, // shadow color
+ 3, // font
+ 2, // text mode
+ 0, // spacing
+ 0, // tilemap left coordinate
+ 0, // tilemap top coordinate
+ 30, // width
+ 20, // height
+ (u8 *)BG_CHAR_ADDR(2), // tile data
+ (u16 *)BG_SCREEN_ADDR(15), // tilemap
+};
+
+const struct WindowConfig gWindowConfig_81E71B4 =
+{
+ 0, // BG number
+ 2, // BG character base block
+ 15, // BG screen base block
+ 0, // BG priority
+ 15, // palette number
+ 1, // foreground color
+ 15, // background color
+ 8, // shadow color
+ 3, // font
+ 2, // text mode
+ 0, // spacing
+ 0, // tilemap left coordinate
+ 0, // tilemap top coordinate
+ 30, // width
+ 20, // height
+ (u8 *)BG_CHAR_ADDR(2), // tile data
+ (u16 *)BG_SCREEN_ADDR(15), // tilemap
+};
+
+const struct WindowConfig gWindowConfig_81E71D0 =
+{
+ 1, // BG number
+ 1, // BG character base block
+ 28, // BG screen base block
+ 0, // BG priority
+ 5, // palette number
+ 13, // foreground color
+ 14, // background color
+ 15, // shadow color
+ 3, // font
+ 0, // text mode
+ 0, // spacing
+ 0, // tilemap left coordinate
+ 0, // tilemap top coordinate
+ 30, // width
+ 20, // height
+ (u8 *)BG_CHAR_ADDR(1), // tile data
+ (u16 *)BG_SCREEN_ADDR(28), // tilemap
+};
+
+const struct WindowConfig gWindowConfig_81E71EC =
+{
+ 2, // BG number
+ 1, // BG character base block
+ 30, // BG screen base block
+ 0, // BG priority
+ 5, // palette number
+ 13, // foreground color
+ 14, // background color
+ 15, // shadow color
+ 3, // font
+ 0, // text mode
+ 0, // spacing
+ 0, // tilemap left coordinate
+ 0, // tilemap top coordinate
+ 30, // width
+ 20, // height
+ (u8 *)BG_CHAR_ADDR(1), // tile data
+ (u16 *)BG_SCREEN_ADDR(30), // tilemap
+};
+
+const struct WindowConfig gWindowConfig_81E7208 =
+{
+ 0, // BG number
+ 2, // BG character base block
+ 28, // BG screen base block
+ 0, // BG priority
+ 8, // palette number
+ 1, // foreground color
+ 0, // background color
+ 2, // shadow color
+ 3, // font
+ 2, // text mode
+ 0, // spacing
+ 0, // tilemap left coordinate
+ 0, // tilemap top coordinate
+ 30, // width
+ 20, // height
+ (u8 *)BG_CHAR_ADDR(2), // tile data
+ (u16 *)BG_SCREEN_ADDR(28), // tilemap
+};
+
+const struct WindowConfig gWindowConfig_81E7224 =
+{
+ 0, // BG number
+ 0, // BG character base block
+ 31, // BG screen base block
+ 0, // BG priority
+ 15, // palette number
+ 1, // foreground color
+ 15, // background color
+ 8, // shadow color
+ 3, // font
+ 2, // text mode
+ 0, // spacing
+ 0, // tilemap left coordinate
+ 0, // tilemap top coordinate
+ 30, // width
+ 20, // height
+ (u8 *)BG_CHAR_ADDR(0), // tile data
+ (u16 *)BG_SCREEN_ADDR(31), // tilemap
+};
+
+const struct WindowConfig gWindowConfig_81E7240 =
+{
+ 1, // BG number
+ 2, // BG character base block
+ 30, // BG screen base block
+ 0, // BG priority
+ 15, // palette number
+ 1, // foreground color
+ 15, // background color
+ 8, // shadow color
+ 3, // font
+ 2, // text mode
+ 0, // spacing
+ 0, // tilemap left coordinate
+ 0, // tilemap top coordinate
+ 30, // width
+ 20, // height
+ (u8 *)BG_CHAR_ADDR(2), // tile data
+ (u16 *)BG_SCREEN_ADDR(30), // tilemap
+};
+
+const struct WindowConfig gWindowConfig_81E725C =
+{
+ 0, // BG number
+ 0, // BG character base block
+ 0, // BG screen base block
+ 0, // BG priority
+ 0, // palette number
+ 15, // foreground color
+ 0, // background color
+ 14, // shadow color
+ 3, // font
+ 2, // text mode
+ 0, // spacing
+ 0, // tilemap left coordinate
+ 0, // tilemap top coordinate
+ 30, // width
+ 20, // height
+ (u8 *)OBJ_VRAM0, // tile data
+ NULL, // tilemap
+};
+
+const struct WindowConfig gWindowConfig_81E7278 =
+{
+ 0, // BG number
+ 0, // BG character base block
+ 0, // BG screen base block
+ 0, // BG priority
+ 0, // palette number
+ 1, // foreground color
+ 15, // background color
+ 8, // shadow color
+ 3, // font
+ 2, // text mode
+ 0, // spacing
+ 0, // tilemap left coordinate
+ 0, // tilemap top coordinate
+ 16, // width
+ 32, // height
+ gTileBuffer, // tile data
+ NULL, // tilemap
+};
+
+const struct WindowConfig gWindowConfig_81E7294 =
+{
+ 0, // BG number
+ 0, // BG character base block
+ 0, // BG screen base block
+ 0, // BG priority
+ 0, // palette number
+ 1, // foreground color
+ 15, // background color
+ 8, // shadow color
+ 4, // font
+ 2, // text mode
+ 0, // spacing
+ 0, // tilemap left coordinate
+ 0, // tilemap top coordinate
+ 16, // width
+ 32, // height
+ gTileBuffer, // tile data
+ NULL, // tilemap
+};
+
+static void UpdateBGRegs(struct WindowConfig *winConfig)
+{
+ u8 bgNum = winConfig->bgNum;
+ *gBGHorizontalOffsetRegs[bgNum] = 0;
+ *gBGVerticalOffsetRegs[bgNum] = 0;
+ *gBGControlRegs[bgNum] = winConfig->priority | (winConfig->screenBaseBlock << 8) | (winConfig->charBaseBlock << 2);
+}
+
+static void ClearBGMem(struct WindowConfig *winConfig)
+{
+ CpuFastFill(winConfig->tileData, 0, 32);
+
+ if (winConfig->tilemap)
+ CpuFastFill(winConfig->tilemap, 0, 0x800);
+}
+
+void LoadFontDefaultPalette(struct WindowConfig *winConfig)
+{
+ gpu_pal_apply(gFontDefaultPalette, 16 * winConfig->paletteNum, 32);
+}
+
+void SetUpWindowConfig(struct WindowConfig *winConfig)
+{
+ UpdateBGRegs(winConfig);
+ ClearBGMem(winConfig);
+ LoadFontDefaultPalette(winConfig);
+}
+
+u16 InitWindowTileData(struct Window *win, u16 startOffset)
+{
+ u16 retVal;
+
+ win->tileDataStartOffset = startOffset;
+ retVal = 0;
+
+ switch (win->config->textMode)
+ {
+ case 2:
+ retVal = InitVariableWidthFontTileData(win, startOffset);
+ break;
+ case 1:
+ switch (win->config->fontNum)
+ {
+ case 0:
+ case 3:
+ retVal = LoadFixedWidthFont(win, startOffset);
+ break;
+ case 1:
+ case 2:
+ retVal = LoadFixedWidthFont_Font1Latin(win, startOffset);
+ break;
+ case 4:
+ case 5:
+ retVal = LoadFixedWidthFont_Font4Latin(win, startOffset);
+ break;
+ case 6:
+ retVal = LoadFixedWidthFont_Braille(win, startOffset);
+ break;
+ }
+ break;
+ }
+
+ return retVal;
+}
+
+static u16 InitVariableWidthFontTileData(struct Window *win, u16 startOffset)
+{
+ u8 *buffer;
+
+ win->tileDataStartOffset = startOffset;
+ win->tileDataOffset = 2;
+ buffer = win->tileData + 32 * win->tileDataStartOffset;
+ CpuFastFill(buffer, 0, 32);
+ ApplyColors_UnshadowedFont(sBlankTile, (u32 *)(buffer + 32), win->config->foregroundColor, win->config->backgroundColor);
+ return win->tileDataStartOffset + win->tileDataOffset + win->width * win->height;
+}
+
+static u16 LoadFixedWidthFont(struct Window *win, u16 startOffset)
+{
+ s32 glyph;
+ u8 *buffer = win->tileData + 32 * startOffset;
+ for (glyph = 0; glyph < 256; glyph++)
+ {
+ LoadFixedWidthGlyph(win, glyph, buffer);
+ buffer += 64;
+ }
+ return 2 * glyph;
+}
+
+static u16 LoadFixedWidthFont_Font1Latin(struct Window *win, u16 startOffset)
+{
+ s32 i;
+ u8 *buffer = win->tileData + 32 * startOffset;
+ for (i = 0; i < 256; i++)
+ {
+ ApplyColors_UnshadowedFont(&sFont1LatinGlyphs[8 * i], (u32 *)buffer, win->foregroundColor, win->backgroundColor);
+ buffer += 32;
+ }
+ return i;
+}
+
+static u16 LoadFixedWidthFont_Font4Latin(struct Window *win, u16 startOffset)
+{
+ s32 i;
+ u8 *buffer = win->tileData + 32 * startOffset;
+ for (i = 0; i < 256; i++)
+ {
+ ApplyColors_ShadowedFont(&gFont4LatinGlyphs[8 * i], buffer, win->foregroundColor, win->shadowColor, win->backgroundColor);
+ buffer += 32;
+ }
+ return i;
+}
+
+static u16 LoadFixedWidthFont_Braille(struct Window *win, u16 startOffset)
+{
+ s32 i;
+ u8 *buffer = win->tileData + 32 * startOffset;
+ for (i = 0; i < 256; i++)
+ {
+ ApplyColors_UnshadowedFont(&sBrailleGlyphs[8 * i], (u32 *)buffer, win->foregroundColor, win->backgroundColor);
+ buffer += 32;
+ }
+ return i;
+}
+
+u16 MultistepInitWindowTileData(struct Window *win, u16 startOffset)
+{
+ u16 retVal;
+ sMultistepLoadFont_Window = win;
+ sMultistepLoadFont_Index = 0;
+ sMultistepLoadFont_StartOffset = startOffset;
+ win->tileDataStartOffset = startOffset;
+ retVal = 0;
+
+ switch (win->config->textMode)
+ {
+ case 2:
+ retVal = InitVariableWidthFontTileData(win, startOffset);
+ break;
+ case 1:
+ retVal = 256;
+ if (win->config->fontNum == 0
+ || win->config->fontNum == 3)
+ retVal *= 2;
+ break;
+ }
+
+ return retVal;
+}
+
+u16 MultistepLoadFont()
+{
+ u16 retVal = 1;
+
+ if (sMultistepLoadFont_Window->config->textMode == 1)
+ {
+ s32 i;
+
+ for (i = sMultistepLoadFont_Index; i < sMultistepLoadFont_Index + 16; i++)
+ MultistepLoadFont_LoadGlyph(sMultistepLoadFont_Window, sMultistepLoadFont_StartOffset, i);
+
+ sMultistepLoadFont_Index += 16;
+
+ if (sMultistepLoadFont_Index < 256)
+ retVal = 0;
+ }
+
+ return retVal;
+}
+
+static void MultistepLoadFont_LoadGlyph(struct Window *win, u16 startOffset, u8 glyph)
+{
+ u8 *buffer;
+
+ switch (win->config->fontNum)
+ {
+ case 0:
+ case 3:
+ buffer = win->tileData + 32 * startOffset + 64 * glyph;
+ LoadFixedWidthGlyph(win, glyph, buffer);
+ break;
+ case 1:
+ case 2:
+ buffer = win->tileData + 32 * (glyph + startOffset);
+ ApplyColors_UnshadowedFont(
+ &sFont1LatinGlyphs[8 * glyph],
+ (u32 *)buffer,
+ win->foregroundColor,
+ win->backgroundColor);
+ break;
+ case 4:
+ case 5:
+ buffer = win->tileData + 32 * (glyph + startOffset);
+ ApplyColors_ShadowedFont(
+ &gFont4LatinGlyphs[8 * glyph],
+ buffer,
+ win->foregroundColor,
+ win->shadowColor,
+ win->backgroundColor);
+ break;
+ }
+}
+
+static void EmptyFunc(void)
+{
+}
+
+void InitWindowFromConfig(struct Window *win, struct WindowConfig *winConfig)
+{
+ *win = sDefaultWindow;
+ win->config = winConfig;
+ win->textMode = winConfig->textMode;
+ win->spacing = winConfig->spacing;
+ win->fontNum = winConfig->fontNum;
+ win->paletteNum = winConfig->paletteNum;
+ win->tilemapLeft = winConfig->tilemapLeft;
+ win->tilemapTop = winConfig->tilemapTop;
+ win->width = winConfig->width;
+ win->height = winConfig->height;
+ win->tileData = winConfig->tileData;
+ win->tilemap = winConfig->tilemap;
+ InitColors(win);
+ SetBackgroundColor(win, winConfig->backgroundColor);
+ SetShadowColor(win, winConfig->shadowColor);
+ SetForegroundColor(win, winConfig->foregroundColor);
+}
+
+void InitWindow(struct Window *win, u8 *text, u16 tileDataStartOffset, u8 left, u8 top)
+{
+ struct WindowConfig *winConfig = win->config;
+ win->textMode = winConfig->textMode;
+ win->fontNum = winConfig->fontNum;
+ win->charset = CHARSET_LATIN;
+ win->paletteNum = winConfig->paletteNum;
+ win->win_field_B = 0;
+ win->win_field_C = 0;
+ win->delayCounter = 0;
+ win->spacing = winConfig->spacing;
+ win->win_field_F = 0;
+ win->tilemapLeft = winConfig->tilemapLeft;
+ win->tilemapTop = winConfig->tilemapTop;
+ win->width = winConfig->width;
+ win->height = winConfig->height;
+ win->text = text;
+ win->textIndex = 0;
+ win->tileDataStartOffset = tileDataStartOffset;
+ win->tileDataOffset = 0;
+ win->left = 8 * left;
+ win->cursorX = 0;
+ win->top = 8 * top;
+ win->cursorY = 0;
+ win->state = WIN_STATE_BEGIN;
+ win->downArrowCounter = 0;
+ win->tileData = winConfig->tileData;
+ win->tilemap = winConfig->tilemap;
+ InitColors(win);
+ SetBackgroundColor(win, winConfig->backgroundColor);
+ SetShadowColor(win, winConfig->shadowColor);
+ SetForegroundColor(win, winConfig->foregroundColor);
+}
+
+void sub_8002E4C(struct Window *win, u8 *text, u16 tileDataStartOffset, u8 left, u16 top, u32 a6)
+{
+ u8 val;
+
+ InitWindow(win, text, tileDataStartOffset, 0, 0);
+ win->left = left;
+ win->top = top;
+ val = 0;
+ if (a6)
+ val = 255;
+ win->win_field_F = val;
+ if (val)
+ ClipLeft(win);
+}
+
+void sub_8002E90(struct Window *win, u8 *text)
+{
+ win->state = WIN_STATE_NORMAL;
+ win->text = text;
+ win->textIndex = 0;
+ win->downArrowCounter = 0;
+ win->win_field_B = -1;
+ win->win_field_C = 0;
+ win->delayCounter = 0;
+}
+
+void sub_8002EB0(struct Window *win, u8 *text, u16 tileDataStartOffset, u8 left, u8 top)
+{
+ gMain.watchedKeysMask = A_BUTTON | B_BUTTON;
+ gMain.watchedKeysPressed = 0;
+ sWaitType = 0;
+ sLineLength = 26;
+ InitWindow(win, text, tileDataStartOffset, left, top);
+ win->win_field_B = -1;
+ if (win->textMode == 0)
+ {
+ u16 val = GetCursorTileNum(win, 0, 0);
+ u8 *buffer = win->tileData + 32 * val;
+ ApplyColors_UnshadowedFont(sBlankTile, (u32 *)buffer, win->backgroundColor, win->backgroundColor);
+ ApplyColors_UnshadowedFont(&sFont1LatinGlyphs[8 * 0x6E], (u32 *)(buffer + 32), win->foregroundColor, win->backgroundColor);
+ win->tileDataOffset = 2;
+ }
+}
+
+u8 sub_8002F44(struct Window *win)
+{
+ while (win->state)
+ {
+ if (win->state == WIN_STATE_NEWLINE)
+ {
+ AddToCursorY(win, 16);
+ win->cursorX = 0;
+ if (win->win_field_F)
+ ClipLeft(win);
+ win->state = WIN_STATE_NORMAL;
+ }
+ else if (win->state == WIN_STATE_PLACEHOLDER)
+ {
+ sub_8002FA0(win, GetExpandedPlaceholder(win->text[win->textIndex++]));
+ }
+
+ InterpretText(win);
+ }
+ return 1;
+}
+
+static u8 sub_8002FA0(struct Window *win, u8 *text)
+{
+ u8 retVal;
+ u8 savedCharset = win->charset;
+ u8 *savedText = win->text;
+ u16 savedTextIndex = win->textIndex;
+ win->text = text;
+ win->textIndex = 0;
+ win->state = WIN_STATE_NORMAL;
+ retVal = sub_8002F44(win);
+ win->text = savedText;
+ win->textIndex = savedTextIndex;
+ win->state = WIN_STATE_NORMAL;
+ win->charset = savedCharset;
+ return retVal;
+}
+
+static u8 InterpretText(struct Window *win)
+{
+ u8 c = win->text[win->textIndex++];
+
+ switch (c)
+ {
+ case 0xFF:
+ ClipRight(win);
+ win->state = WIN_STATE_END;
+ return 0;
+ case 0xFD:
+ win->state = WIN_STATE_PLACEHOLDER;
+ return 2;
+ case 0xFE:
+ ClipRight(win);
+ win->state = WIN_STATE_NEWLINE;
+ return 2;
+ case 0xFB:
+ DrawInitialDownArrow(win);
+ win->state = WIN_STATE_PARAGRAPH;
+ return 2;
+ case 0xFA:
+ DrawInitialDownArrow(win);
+ win->state = WIN_STATE_NEWLINE_WAIT;
+ return 2;
+ case 0xFC:
+ return HandleExtCtrlCode(win);
+ }
+
+ sPrintGlyphFuncs[win->textMode](win, c);
+ return 1;
+}
+
+static u8 HandleExtCtrlCode(struct Window *win)
+{
+ return sExtCtrlCodeFuncs[win->text[win->textIndex++]](win);
+}
+
+static u8 ExtCtrlCode_Nop(struct Window *win)
+{
+ return 2;
+}
+
+static u8 ExtCtrlCode_ForegroundColor(struct Window *win)
+{
+ SetForegroundColor(win, win->text[win->textIndex++]);
+ return 2;
+}
+
+static u8 ExtCtrlCode_BackgroundColor(struct Window *win)
+{
+ SetBackgroundColor(win, win->text[win->textIndex++]);
+ return 2;
+}
+
+static u8 ExtCtrlCode_ShadowColor(struct Window *win)
+{
+ SetShadowColor(win, win->text[win->textIndex++]);
+ return 2;
+}
+
+static u8 ExtCtrlCode_AllColors(struct Window *win)
+{
+ SetForegroundColor(win, win->text[win->textIndex++]);
+ SetBackgroundColor(win, win->text[win->textIndex++]);
+ SetShadowColor(win, win->text[win->textIndex++]);
+ return 2;
+}
+
+static u8 ExtCtrlCode_Palette(struct Window *win)
+{
+ win->paletteNum = win->text[win->textIndex++];
+ return 2;
+}
+
+static u8 ExtCtrlCode_Font(struct Window *win)
+{
+ win->fontNum = win->text[win->textIndex++];
+ return 2;
+}
+
+static u8 ExtCtrlCode_DefaultFont(struct Window *win)
+{
+ win->fontNum = win->config->fontNum;
+ return 2;
+}
+
+static u8 ExtCtrlCode_Pause(struct Window *win)
+{
+ ClipRight(win);
+ win->state = WIN_STATE_PAUSE;
+ win->delayCounter = win->text[win->textIndex++];
+ return 2;
+}
+
+static u8 ExtCtrlCode_WaitButton(struct Window *win)
+{
+ ClipRight(win);
+ win->state = WIN_STATE_WAIT_BUTTON;
+ return 2;
+}
+
+static u8 ExtCtrlCode_WaitSound(struct Window *win)
+{
+ ClipRight(win);
+ win->state = WIN_STATE_WAIT_SOUND;
+ return 2;
+}
+
+static u8 ExtCtrlCode_PlayBGM(struct Window *win)
+{
+ u16 loByte = win->text[win->textIndex++];
+ u16 hiByte = win->text[win->textIndex++] << 8;
+ sub_8075474(loByte | hiByte);
+ return 2;
+}
+
+static u8 ExtCtrlCode_Escape(struct Window *win)
+{
+ sPrintGlyphFuncs[win->textMode](win, win->text[win->textIndex++]);
+ return 1;
+}
+
+u8 ExtCtrlCode_Nop2(struct Window *win)
+{
+ return 1;
+}
+
+static u8 ExtCtrlCode_SetCursorY(struct Window *win)
+{
+ ClipRight(win);
+ AddToCursorY(win, 8 * win->text[win->textIndex++]);
+ return 1;
+}
+
+static u8 ExtCtrlCode_ClearWindowTextLines(struct Window *win)
+{
+ ClearWindowTextLines(win);
+ return 2;
+}
+
+static u8 ExtCtrlCode_PlaySE(struct Window *win)
+{
+ u16 loByte = win->text[win->textIndex++];
+ u16 hiByte = win->text[win->textIndex++] << 8;
+ audio_play(loByte | hiByte);
+ return 2;
+}
+
+static void DrawSpace(struct Window *win)
+{
+ if (win->textMode == 1 || (win->left + win->cursorX) & 7 || win->spacing <= 7)
+ {
+ sPrintGlyphFuncs[win->textMode](win, 0);
+ }
+ else
+ {
+ u32 val = sGlyphBuffer.background;
+ u16 index = GetCursorTileNum(win, 0, 0);
+ u32 *buffer = (u32 *)(win->tileData + 32 * index);
+ buffer[0] = val;
+ buffer[1] = val;
+ buffer[2] = val;
+ buffer[3] = val;
+ buffer[4] = val;
+ buffer[5] = val;
+ buffer[6] = val;
+ buffer[7] = val;
+ index = GetCursorTileNum(win, 0, 1);
+ buffer = (u32 *)(win->tileData + 32 * index);
+ buffer[0] = val;
+ buffer[1] = val;
+ buffer[2] = val;
+ buffer[3] = val;
+ buffer[4] = val;
+ buffer[5] = val;
+ buffer[6] = val;
+ buffer[7] = val;
+ UpdateTilemap(win, 1);
+ AddToCursorX(win, 8);
+ }
+}
+
+static void sub_8003344(struct Window *win, u8 newX)
+{
+ u8 savedSpacing = win->spacing;
+
+ if (newX - win->cursorX <= 8)
+ win->spacing = newX - win->cursorX;
+ else
+ win->spacing = 8 - ((win->left + win->cursorX) & 7);
+
+ while (win->cursorX < newX)
+ {
+ s32 spacing;
+ DrawSpace(win);
+ spacing = newX - win->cursorX;
+ if (spacing >= 8)
+ spacing = 8;
+ win->spacing = spacing;
+ }
+
+ win->spacing = savedSpacing;
+}
+
+static u8 ExtCtrlCode_Skip(struct Window *win)
+{
+ sub_8003344(win, win->cursorX + win->text[win->textIndex++]);
+ return 1;
+}
+
+static u8 ExtCtrlCode_SetCursorX(struct Window *win)
+{
+ ClipRight(win);
+ SetCursorX(win, win->text[win->textIndex++]);
+ return 1;
+}
+
+static u8 ExtCtrlCode_SkipTo(struct Window *win)
+{
+ sub_8003344(win, win->text[win->textIndex++]);
+ return 1;
+}
+
+static u8 ExtCtrlCode_Spacing(struct Window *win)
+{
+ win->spacing = win->text[win->textIndex++];
+ return 2;
+}
+
+static u8 ExtCtrlCode_Japanese(struct Window *win)
+{
+ win->charset = CHARSET_JAPANESE;
+ return 2;
+}
+
+static u8 ExtCtrlCode_Latin(struct Window *win)
+{
+ win->charset = CHARSET_LATIN;
+ return 2;
+}
+
+u8 sub_8003418(struct Window *win)
+{
+ u8 retVal = 1;
+ while (win->state)
+ {
+ if (win->state == WIN_STATE_NEWLINE)
+ {
+ AddToCursorY(win, 16);
+ win->cursorX = 0;
+ if (win->win_field_F)
+ ClipLeft(win);
+ win->state = WIN_STATE_NORMAL;
+ }
+ if (InterpretText(win) == 1)
+ {
+ retVal = 0;
+ break;
+ }
+ }
+ return retVal;
+}
+
+u8 sub_8003460(struct Window *win, u8 *text, u16 tileDataStartOffset, u8 left, u8 top)
+{
+ InitWindow(win, text, tileDataStartOffset, left, top);
+ return sub_8002F44(win);
+}
+
+u8 sub_8003490(struct Window *win, u8 c, u16 tileDataStartOffset, u8 left, u8 top)
+{
+ u8 retVal;
+ u8 text[2];
+ text[0] = c;
+ text[1] = EOS;
+ InitWindow(win, text, tileDataStartOffset, left, top);
+ retVal = InterpretText(win);
+ ClipRight(win);
+ return retVal;
+}
+
+void sub_80034D4(u8 *tileData, u8 *text)
+{
+ sub_8004E3C((struct WindowConfig *)&gWindowConfig_81E6C74, tileData, text);
+}
+
+u8 sub_80034EC(u8 *str)
+{
+ return GetStringWidthGivenWindowConfig((struct WindowConfig *)&gWindowConfig_81E6C74, str);
+}
+
+u8 *sub_8003504(u8 *dest, s32 value, u8 alignAmount, u8 alignType)
+{
+ sTempWindow.config = (struct WindowConfig *)&gWindowConfig_81E6C74;
+ InitWindow(&sTempWindow, 0, 0, 0, 0);
+ return AlignInt2(&sTempWindow, dest, value, alignAmount, alignType);
+}
+
+u8 *sub_8003558(u8 *dest, u8 *src, u8 alignAmount, u8 alignType)
+{
+ sTempWindow.config = (struct WindowConfig *)&gWindowConfig_81E6C74;
+ InitWindow(&sTempWindow, src, 0, 0, 0);
+ return AlignString(&sTempWindow, dest, src, alignAmount, alignType);
+}
+
+u8 sub_80035AC(struct Window *win)
+{
+ sWaitType = 0;
+ return UpdateWindowText(win);
+}
+
+static u8 UpdateWindowText(struct Window *win)
+{
+ switch (win->state)
+ {
+ case WIN_STATE_WAIT_BUTTON:
+ if (PlayerCanInterruptWait(win))
+ {
+ if (gMain.newKeys & (A_BUTTON | B_BUTTON))
+ {
+ audio_play(SE_SELECT);
+ }
+ else
+ {
+ return 0;
+ }
+ }
+ else
+ {
+ win->delayCounter--;
+ if (win->delayCounter)
+ return 0;
+ }
+ win->state = WIN_STATE_NORMAL;
+ return 0;
+ case WIN_STATE_INTERRUPTIBLE_PAUSE:
+ if (PlayerCanInterruptWait(win) && (gMain.heldKeys & (A_BUTTON | B_BUTTON)) && gMain.watchedKeysPressed == TRUE)
+ {
+ win->delayCounter = 0;
+ win->state = WIN_STATE_NORMAL;
+ break;
+ }
+ case WIN_STATE_PAUSE:
+ if (win->delayCounter)
+ {
+ win->delayCounter--;
+ if (win->delayCounter)
+ return 0;
+ }
+
+ win->state = WIN_STATE_NORMAL;
+ break;
+ case WIN_STATE_PARAGRAPH:
+ if (!WaitWithDownArrow(win))
+ return 0;
+ ClearWindowTextLines(win);
+ win->state = WIN_STATE_NORMAL;
+ BLOCK_CROSS_JUMP
+ return 0;
+ case WIN_STATE_NEWLINE_WAIT:
+ if (!WaitWithDownArrow(win))
+ return 0;
+ ScrollWindowTextLines(win);
+ win->state = WIN_STATE_NORMAL;
+ BLOCK_CROSS_JUMP
+ return 0;
+ case WIN_STATE_PLACEHOLDER:
+ win->textIndex++;
+ win->state = WIN_STATE_NORMAL;
+ break;
+ case WIN_STATE_NEWLINE:
+ ScrollWindowTextLines(win);
+ win->state = WIN_STATE_NORMAL;
+ BLOCK_CROSS_JUMP
+ return 0;
+ case WIN_STATE_BEGIN:
+ ClearWindowTextLines(win);
+ break;
+ case WIN_STATE_WAIT_SOUND:
+ if (mplay_has_finished_maybe())
+ return 0;
+ win->state = WIN_STATE_NORMAL;
+ break;
+ case WIN_STATE_END:
+ return 1;
+ case WIN_STATE_NORMAL:
+ break;
+ default:
+ win->state = WIN_STATE_END;
+ return 1;
+ }
+
+ InterpretText(win);
+
+ switch (win->state)
+ {
+ case WIN_STATE_END:
+ return 1;
+ case WIN_STATE_WAIT_BUTTON:
+ case WIN_STATE_PARAGRAPH:
+ case WIN_STATE_NEWLINE_WAIT:
+ if (PlayerCanInterruptWait(win))
+ return 0;
+ win->delayCounter = 60;
+ break;
+ case WIN_STATE_PAUSE:
+ case WIN_STATE_NEWLINE:
+ case WIN_STATE_WAIT_SOUND:
+ break;
+ default:
+ win->state = WIN_STATE_INTERRUPTIBLE_PAUSE;
+ win->delayCounter = GetTextDelay(win);
+ }
+
+ return 0;
+}
+
+u8 sub_800374C(struct Window *win)
+{
+ u8 retVal;
+
+ sWaitType = 1;
+ sLineLength = 26;
+ retVal = UpdateWindowText(win);
+ sLineLength = 26;
+ sWaitType = 0;
+ return retVal;
+}
+
+u8 sub_8003778(struct Window *win)
+{
+ u8 retVal;
+
+ sWaitType = 2;
+ sLineLength = 26;
+ retVal = UpdateWindowText(win);
+ sWaitType = 0;
+ return retVal;
+}
+
+u8 sub_80037A0(struct Window *win)
+{
+ u8 retVal;
+
+ sWaitType = 3;
+ sLineLength = 17;
+ retVal = UpdateWindowText(win);
+ sLineLength = 26;
+ return retVal;
+}
+
+u8 sub_80037C8(struct Window *win, u8 lineLength)
+{
+ u8 retVal;
+
+ sWaitType = 0;
+ sLineLength = lineLength;
+ retVal = UpdateWindowText(win);
+ sLineLength = 26;
+ return retVal;
+}
+
+static void PrintGlyph_TextMode0(struct Window *win, u32 glyph)
+{
+ AddToCursorX(win, DrawGlyph_TextMode0(win, glyph));
+ if (win->win_field_B)
+ ClipRight(win);
+}
+
+static u8 DrawGlyph_TextMode0(struct Window *win, u32 glyph)
+{
+ u8 pixelsWidth = GetGlyphWidth(win, glyph);
+ u32 tilesWidth = DrawGlyphTiles(win, glyph, pixelsWidth);
+ UpdateTilemap(win, tilesWidth);
+ return pixelsWidth;
+}
+
+static void PrintGlyph_TextMode1(struct Window *win, u32 glyph)
+{
+ sWriteGlyphTilemapFuncs[win->fontNum](win, glyph);
+ win->cursorX += 8;
+}
+
+static void WriteGlyphTilemap_Font0_Font3(struct Window *win, u32 glyph)
+{
+ s16 val = win->tileDataStartOffset + 2 * glyph;
+ WriteGlyphTilemap(win, val, val + 1);
+}
+
+static void WriteGlyphTilemap_Font1_Font4(struct Window *win, u32 glyph)
+{
+ u32 val = glyph * 2;
+ WriteGlyphTilemap(
+ win,
+ win->tileDataStartOffset + sFontType1Map[val],
+ win->tileDataStartOffset + sFontType1Map[val + 1]);
+}
+
+static void WriteGlyphTilemap_Font2_Font5(struct Window *win, u32 glyph)
+{
+ WriteGlyphTilemap(
+ win,
+ win->tileDataStartOffset + 212,
+ win->tileDataStartOffset + glyph);
+}
+
+static void WriteGlyphTilemap_Font6(struct Window *win, u32 glyph)
+{
+ u32 val = glyph * 2;
+ WriteGlyphTilemap(
+ win,
+ win->tileDataStartOffset + sFontType3Map[val],
+ win->tileDataStartOffset + sFontType3Map[val + 1]);
+}
+
+static void PrintGlyph_TextMode2(struct Window *win, u32 glyph)
+{
+ u8 width = GetGlyphWidth(win, glyph);
+ DrawGlyph_TextMode2(win, glyph);
+ AddToCursorX(win, width);
+ if (win->win_field_B)
+ ClipRight(win);
+}
+
+static void DrawGlyph_TextMode2(struct Window *win, u32 glyph)
+{
+ u8 pixelsWidth = GetGlyphWidth(win, glyph);
+ u32 tilesWidth = DrawGlyphTiles(win, glyph, pixelsWidth);
+ UpdateTilemap(win, tilesWidth);
+}
+
+static void LoadFixedWidthGlyph(struct Window *win, u32 glyph, u8 *dest)
+{
+ u8 *upperTile;
+ u8 *lowerTile;
+
+ GetGlyphTilePointers(win->fontNum, win->charset, glyph, &upperTile, &lowerTile);
+
+ switch (win->fontNum)
+ {
+ case 0:
+ case 1:
+ case 2:
+ case 6:
+ ApplyColors_UnshadowedFont(upperTile, (u32 *)dest, win->foregroundColor, win->backgroundColor);
+ ApplyColors_UnshadowedFont(lowerTile, (u32 *)(dest + 32), win->foregroundColor, win->backgroundColor);
+ break;
+ case 3:
+ case 4:
+ case 5:
+ ApplyColors_ShadowedFont(upperTile, dest, win->foregroundColor, win->shadowColor, win->backgroundColor);
+ ApplyColors_ShadowedFont(lowerTile, dest + 32, win->foregroundColor, win->shadowColor, win->backgroundColor);
+ break;
+ }
+}
+
+static void WriteGlyphTilemap(struct Window *win, u16 upperTileNum, u16 lowerTileNum)
+{
+ u16 *buffer = GetCursorTilemapPointer(win);
+ if (buffer)
+ {
+ u16 palette = (win->paletteNum << 12);
+ buffer[0] = upperTileNum | palette;
+ buffer[32] = lowerTileNum | palette;
+ }
+}
+
+static void GetGlyphTilePointers(u8 fontNum, u8 charset, u16 glyph, u8 **upperTilePtr, u8 **lowerTilePtr)
+{
+ u16 index;
+ const struct Font *font;
+
+ if (charset == CHARSET_JAPANESE)
+ charset = 0;
+ else
+ charset = 7;
+
+ font = &sFonts[charset + fontNum];
+
+ switch (font->type)
+ {
+ case 0:
+ *upperTilePtr = font->glyphs + glyph * font->glyphSize;
+ *lowerTilePtr = *upperTilePtr + font->lowerTileOffset;
+ break;
+ case 1:
+ index = 2 * glyph;
+ *upperTilePtr = font->glyphs + sFontType1Map[index] * font->glyphSize;
+ *lowerTilePtr = font->glyphs + sFontType1Map[index + 1] * font->glyphSize;
+ break;
+ case 2:
+ *upperTilePtr = font->glyphs + 212 * font->glyphSize;
+ *lowerTilePtr = font->glyphs + glyph * font->glyphSize;
+ break;
+ case 3:
+ index = 2 * glyph;
+ *upperTilePtr = font->glyphs + sFontType3Map[index] * font->glyphSize;
+ *lowerTilePtr = font->glyphs + sFontType3Map[index + 1] * font->glyphSize;
+ break;
+ case 4:
+ *upperTilePtr = font->glyphs
+ + (glyph & 0xFFF0) * font->glyphSize
+ + (((glyph &= 0xF) * font->glyphSize) >> 1);
+ *lowerTilePtr = *upperTilePtr + font->lowerTileOffset;
+ break;
+ }
+}
+
+static u16 *GetCursorTilemapPointer(struct Window *win)
+{
+ u16 *ptr = NULL;
+ if (win->tilemap)
+ {
+ u8 x = ((win->left + win->cursorX) >> 3) + win->tilemapLeft;
+ u8 y = ((win->top + win->cursorY) >> 3) + win->tilemapTop;
+ ptr = &win->tilemap[(y * 32) + x];
+ }
+ return ptr;
+}
+
+static void ApplyColors_UnshadowedFont(const u8 *src, u32 *dest, u8 foreground, u8 background)
+{
+ u32 a[2];
+ s32 i;
+ const u8 *srcRows = src;
+
+ a[0] = background;
+ a[1] = foreground;
+
+ for (i = 0; i < 8; i++)
+ {
+ u32 destRow = a[srcRows[i] & 1]
+ | (a[(srcRows[i] >> 1) & 1] << 4)
+ | (a[(srcRows[i] >> 2) & 1] << 8)
+ | (a[(srcRows[i] >> 3) & 1] << 12)
+ | (a[(srcRows[i] >> 4) & 1] << 16)
+ | (a[(srcRows[i] >> 5) & 1] << 20)
+ | (a[(srcRows[i] >> 6) & 1] << 24)
+ | (a[(srcRows[i] >> 7) ] << 28);
+ dest[i] = destRow;
+ }
+}
+
+static void ApplyColors_ShadowedFont(const void *src, void *dest, u8 foreground, u8 shadow, u8 background)
+{
+ u32 a[0x10];
+ s32 i;
+ const u32 *curSrc;
+ u32 *curDest;
+ u32 colorMask;
+
+ a[0x1] = 0x1;
+ a[0x2] = 0x2;
+ a[0x3] = 0x3;
+ a[0x4] = 0x4;
+ a[0x5] = 0x5;
+ a[0x6] = 0x6;
+ a[0x7] = 0x7;
+ a[0x8] = 0x8;
+ a[0x9] = 0x9;
+ a[0xA] = 0xA;
+ a[0xB] = 0xB;
+ a[0xC] = 0xC;
+ a[0xD] = 0xD;
+ a[0x0] = background;
+ a[0xE] = shadow;
+ a[0xF] = foreground;
+
+ colorMask = 0xF;
+
+ curSrc = src;
+ curDest = dest;
+
+ for (i = 7; i >= 0; i--)
+ {
+ u32 row = *curSrc++;
+ u32 recoloredRow = a[row & colorMask]
+ | (a[(row >> 4) & colorMask] << 4)
+ | (a[(row >> 8) & colorMask] << 8)
+ | (a[(row >> 12) & colorMask] << 12)
+ | (a[(row >> 16) & colorMask] << 16)
+ | (a[(row >> 20) & colorMask] << 20)
+ | (a[(row >> 24) & colorMask] << 24)
+ | (a[(row >> 28) ] << 28);
+ *curDest++ = recoloredRow;
+ }
+}
+
+static void SetCursorX(struct Window *win, u8 x)
+{
+ if (win->textMode == 0 && ((win->left + win->cursorX) & 7))
+ win->tileDataOffset += 2;
+ win->cursorX = x;
+}
+
+static void AddToCursorX(struct Window *win, u8 deltaX)
+{
+ if (win->textMode == 0)
+ {
+ u8 x = win->cursorX;
+ win->cursorX += deltaX;
+ if (((win->left + win->cursorX) & 0xF8) != ((win->left + x) & 0xF8))
+ win->tileDataOffset += 2;
+ }
+ else
+ {
+ win->cursorX += deltaX;
+ }
+}
+
+static void AddToCursorY(struct Window *win, u8 deltaY)
+{
+ if (win->textMode == 0 && ((win->left + win->cursorX) & 7))
+ win->tileDataOffset += 2;
+ win->cursorY += deltaY;
+}
+
+static void EraseAtCursor(struct Window *win)
+{
+ switch (win->textMode)
+ {
+ case 0:
+ case 2:
+ DrawGlyphTiles(win, 0, 8);
+ break;
+ case 1:
+ sWriteGlyphTilemapFuncs[win->fontNum](win, 0);
+ break;
+ }
+}
+
+static void ClipLeft(struct Window *win)
+{
+ u32 pixel = win->left & 7;
+ if (win->textMode != 1 && pixel)
+ {
+ const u32 *masks = sGlyphMasks[8][pixel];
+ u32 outsideMask = masks[0];
+ u32 insideMask = ~outsideMask;
+ u32 outside = sGlyphBuffer.background & outsideMask;
+ u16 tileNum = GetCursorTileNum(win, 0, 0);
+ u32 *buffer = (u32 *)(win->tileData + 32 * tileNum);
+ buffer[0] = (buffer[0] & insideMask) | outside;
+ buffer[1] = (buffer[1] & insideMask) | outside;
+ buffer[2] = (buffer[2] & insideMask) | outside;
+ buffer[3] = (buffer[3] & insideMask) | outside;
+ buffer[4] = (buffer[4] & insideMask) | outside;
+ buffer[5] = (buffer[5] & insideMask) | outside;
+ buffer[6] = (buffer[6] & insideMask) | outside;
+ buffer[7] = (buffer[7] & insideMask) | outside;
+ tileNum = GetCursorTileNum(win, 0, 1);
+ buffer = (u32 *)(win->tileData + 32 * tileNum);
+ buffer[0] = (buffer[0] & insideMask) | outside;
+ buffer[1] = (buffer[1] & insideMask) | outside;
+ buffer[2] = (buffer[2] & insideMask) | outside;
+ buffer[3] = (buffer[3] & insideMask) | outside;
+ buffer[4] = (buffer[4] & insideMask) | outside;
+ buffer[5] = (buffer[5] & insideMask) | outside;
+ buffer[6] = (buffer[6] & insideMask) | outside;
+ buffer[7] = (buffer[7] & insideMask) | outside;
+ }
+}
+
+static void ClipRight(struct Window *win)
+{
+ register u8 cursorX asm("r0") = win->cursorX;
+ u8 left = win->left;
+ u32 pixel = (cursorX + left) & 7;
+ if (win->textMode != 1 && pixel)
+ {
+ const u32 *masks = sGlyphMasks[8 - pixel][pixel];
+ u32 insideMask = masks[0];
+ u32 outside = (sGlyphBuffer.background & ~insideMask);
+ u16 tileNum = GetCursorTileNum(win, 0, 0);
+ u32 *buffer = (u32 *)(win->tileData + 32 * tileNum);
+ buffer[0] = (buffer[0] & insideMask) | outside;
+ buffer[1] = (buffer[1] & insideMask) | outside;
+ buffer[2] = (buffer[2] & insideMask) | outside;
+ buffer[3] = (buffer[3] & insideMask) | outside;
+ buffer[4] = (buffer[4] & insideMask) | outside;
+ buffer[5] = (buffer[5] & insideMask) | outside;
+ buffer[6] = (buffer[6] & insideMask) | outside;
+ buffer[7] = (buffer[7] & insideMask) | outside;
+ tileNum = GetCursorTileNum(win, 0, 1);
+ buffer = (u32 *)(win->tileData + 32 * tileNum);
+ buffer[0] = (buffer[0] & insideMask) | outside;
+ buffer[1] = (buffer[1] & insideMask) | outside;
+ buffer[2] = (buffer[2] & insideMask) | outside;
+ buffer[3] = (buffer[3] & insideMask) | outside;
+ buffer[4] = (buffer[4] & insideMask) | outside;
+ buffer[5] = (buffer[5] & insideMask) | outside;
+ buffer[6] = (buffer[6] & insideMask) | outside;
+ buffer[7] = (buffer[7] & insideMask) | outside;
+ UpdateTilemap(win, 1);
+ }
+}
+
+static void InitColors(struct Window *win)
+{
+ u32 i;
+
+ win->backgroundColor = 0;
+ win->shadowColor = 14;
+ win->foregroundColor = 15;
+
+ for (i = 0; i < 16; i++)
+ sGlyphBuffer.colors[i] = i;
+}
+
+static void SetBackgroundColor(struct Window *win, u8 color)
+{
+ u32 val1;
+ u32 val2;
+ u32 val3;
+ win->backgroundColor = color;
+ sGlyphBuffer.colors[0] = color;
+ val1 = color | (color << 4);
+ val2 = val1 | (val1 << 8);
+ val3 = val2 | (val2 << 16);
+ sGlyphBuffer.background = val3;
+}
+
+static void SetShadowColor(struct Window *win, u8 color)
+{
+ win->shadowColor = color;
+ sGlyphBuffer.colors[14] = color;
+}
+
+static void SetForegroundColor(struct Window *win, u8 color)
+{
+ win->foregroundColor = color;
+ sGlyphBuffer.colors[15] = color;
+}
+
+static u8 GetTextDelay(struct Window *win)
+{
+ if (!PlayerCanInterruptWait(win))
+ return 3;
+
+ return sTextSpeedDelays[gSaveBlock2.optionsTextSpeed];
+}
+
+static bool8 PlayerCanInterruptWait(struct Window *win)
+{
+ bool8 retVal = TRUE;
+
+ switch (sWaitType)
+ {
+ case 2:
+ retVal = FALSE;
+ break;
+ case 3:
+ retVal = FALSE;
+ if (!gUnknown_0203869A)
+ retVal = TRUE;
+ break;
+ case 1:
+ retVal &= ~(gUnknown_020239F8 >> 1);
+ break;
+ }
+
+ return retVal;
+}
+
+static void ScrollWindowTextLines(struct Window *win)
+{
+ switch (win->textMode)
+ {
+ case 0:
+ ScrollWindowTextLines_TextMode0(win);
+ break;
+ case 1:
+ ScrollWindowTextLines_TextMode1(win);
+ break;
+ case 2:
+ ScrollWindowTextLines_TextMode2(win);
+ break;
+ }
+}
+
+static void ScrollWindowTextLines_TextMode0(struct Window *win)
+{
+ if (win->cursorY == 0)
+ {
+ win->tileDataOffset = 2 * sLineLength + 2;
+ win->cursorX = 0;
+ win->cursorY += 16;
+ }
+ else
+ {
+ if (win->win_field_C & 2)
+ win->tileDataOffset = 2 * sLineLength + 2;
+ else
+ win->tileDataOffset = 2;
+ win->win_field_C = win->win_field_C ^ 2;
+ win->cursorX = 0;
+ DoScroll_TextMode0(win, sLineLength);
+ }
+}
+
+static void DoScroll_TextMode0(struct Window *win, u16 lineLength)
+{
+ u16 *buffer = win->tilemap;
+ u32 val1 = 32 * (win->top >> 3);
+ u32 val2 = (win->left >> 3);
+ u16 fill;
+ buffer += val1 + val2;
+ fill = (win->paletteNum << 12) | GetBlankTileNum(win);
+ CpuCopy16(buffer + 64, buffer, lineLength * 2);
+ CpuCopy16(buffer + 96, buffer + 32, lineLength * 2);
+ CpuFill16(buffer + 64, fill, lineLength * 2);
+ CpuFill16(buffer + 96, fill, lineLength * 2);
+}
+
+static void ScrollWindowTextLines_TextMode1(struct Window *win)
+{
+ if (win->cursorY == 0)
+ {
+ win->cursorX = 0;
+ win->cursorY += 16;
+ }
+ else
+ {
+ win->win_field_C ^= 2;
+ win->cursorX = 0;
+ DoScroll_TextMode1(win, sLineLength);
+ }
+}
+
+static void DoScroll_TextMode1(struct Window *win, u16 lineLength)
+{
+ u16 *buffer = GetCursorTilemapPointer(win);
+ u16 *dest = buffer - 32;
+ u16 fill = (win->paletteNum << 12) | GetBlankTileNum(win);
+ CpuCopy16(buffer + 32, dest, lineLength * 2);
+ CpuCopy16(buffer + 64, buffer, lineLength * 2);
+ CpuFill16(buffer + 32, fill, lineLength * 2);
+ CpuFill16(buffer + 64, fill, lineLength * 2);
+}
+
+static void ScrollWindowTextLines_TextMode2(struct Window *win)
+{
+ if (win->cursorY == 0)
+ {
+ win->cursorX = 0;
+ win->cursorY += 16;
+ }
+ else
+ {
+ win->win_field_C ^= 2;
+ win->cursorX = 0;
+ DoScroll_TextMode2(win, sLineLength);
+ }
+}
+
+static void DoScroll_TextMode2(struct Window *win, u8 lineLength)
+{
+ u8 i;
+ u8 *buf1 = win->tileData + 32 * GetCursorTileNum(win, 0, -2);
+ u8 *buf2 = win->tileData + 32 * GetCursorTileNum(win, 0, 0);
+ u8 *buf4;
+ u16 *buf3;
+ u16 a[4];
+
+ CpuFastCopy(buf2, buf1, 32 * lineLength);
+ CpuFastFill(buf2, sGlyphBuffer.background, 32 * lineLength);
+ buf4 = buf2 + 32 * win->width;
+ CpuFastCopy(buf4, buf1 + 32 * win->width, 32 * lineLength);
+ CpuFastFill(buf4, sGlyphBuffer.background, 32 * lineLength);
+
+ buf3 = GetCursorTilemapPointer(win) - 64;
+
+ a[0] = (win->tileDataStartOffset + win->tileDataOffset
+ + ((win->top >> 3) * win->width)
+ + (win->left >> 3))
+ | (win->paletteNum << 12);
+ a[1] = a[0] + win->width;
+ a[2] = a[1] + win->width;
+ a[3] = a[2] + win->width;
+
+ for (i = 0; i < lineLength; i++)
+ {
+ buf3[0] = a[0]++;
+ buf3[32] = a[1]++;
+ buf3[64] = a[2]++;
+ buf3[96] = a[3]++;
+ buf3++;
+ }
+}
+
+void ClearWindowTextLines(struct Window *win)
+{
+ switch (win->textMode)
+ {
+ case 0:
+ ClearWindowTextLines_TextMode0_TextMode1(win, sLineLength);
+ win->tileDataOffset = 2;
+ break;
+ case 1:
+ ClearWindowTextLines_TextMode0_TextMode1(win, sLineLength);
+ break;
+ case 2:
+ ClearWindowTextLines_TextMode2(win, sLineLength);
+ break;
+ }
+}
+
+static void ClearWindowTextLines_TextMode0_TextMode1(struct Window *win, u8 lineLength)
+{
+ u8 i;
+ u16 *buffer;
+ u16 fill;
+
+ win->cursorX = 0;
+ win->cursorY = 0;
+ win->win_field_C = 0;
+
+ buffer = GetCursorTilemapPointer(win);
+ fill = GetBlankTileNum(win) | (win->paletteNum << 12);
+
+ for (i = 0; i < 4; i++)
+ {
+ u8 j;
+ for (j = 0; j < lineLength; j++)
+ buffer[j] = fill;
+ buffer += 32;
+ }
+}
+
+static void ClearWindowTextLines_TextMode2(struct Window *win, u8 lineLength)
+{
+ u8 *buffer;
+
+ win->cursorX = 0;
+ win->cursorY = 0;
+ win->win_field_C = 0;
+
+ buffer = win->tileData + 32 * GetCursorTileNum(win, 0, 0);
+ CpuFastFill(buffer, sGlyphBuffer.background, 32 * lineLength);
+ buffer += 32 * win->width;
+ CpuFastFill(buffer, sGlyphBuffer.background, 32 * lineLength);
+ buffer += 32 * win->width;
+ CpuFastFill(buffer, sGlyphBuffer.background, 32 * lineLength);
+ buffer += 32 * win->width;
+ CpuFastFill(buffer, sGlyphBuffer.background, 32 * lineLength);
+}
+
+static void DrawDownArrow(struct Window *win)
+{
+ if (PlayerCanInterruptWait(win))
+ {
+ const u32 *downArrowTiles = &sDownArrowTiles[((win->downArrowCounter & 0x0F00) >> 8) * 16];
+
+ switch (win->textMode)
+ {
+ case 1:
+ {
+ u8 *buffer;
+ u16 tileNum = win->tileDataStartOffset + 254;
+ if (win->fontNum == 0 || win->fontNum == 3)
+ tileNum *= 2;
+ buffer = win->tileData + 32 * tileNum;
+ ApplyColors_ShadowedFont(downArrowTiles, buffer, win->foregroundColor, win->shadowColor, win->backgroundColor);
+ ApplyColors_ShadowedFont(downArrowTiles + 8, buffer + 32, win->foregroundColor, win->shadowColor, win->backgroundColor);
+ WriteGlyphTilemap(win, tileNum, tileNum + 1);
+ break;
+ }
+ case 0:
+ case 2:
+ {
+ struct GlyphTileInfo glyphTileInfo;
+ glyphTileInfo.textMode = win->textMode;
+ glyphTileInfo.startPixel = (win->left + win->cursorX) & 7;
+ if (glyphTileInfo.startPixel != 0)
+ {
+ u8 *upperTile;
+ u8 *lowerTile;
+ GetGlyphTilePointers(win->fontNum, win->charset, 0, &upperTile, &lowerTile);
+ glyphTileInfo.width = 8 - glyphTileInfo.startPixel;
+ glyphTileInfo.src = upperTile;
+ glyphTileInfo.dest = (u32 *)(win->tileData + 32 * GetCursorTileNum(win, 1, 0));
+ glyphTileInfo.colors = sGlyphBuffer.colors;
+ DrawGlyphTile_ShadowedFont(&glyphTileInfo);
+ glyphTileInfo.src = lowerTile;
+ glyphTileInfo.dest = (u32 *)(win->tileData + 32 * GetCursorTileNum(win, 1, 1));
+ DrawGlyphTile_ShadowedFont(&glyphTileInfo);
+ }
+ glyphTileInfo.width = 8;
+ glyphTileInfo.src = (u8 *)downArrowTiles;
+ glyphTileInfo.dest = (u32 *)(win->tileData + 32 * GetCursorTileNum(win, 0, 0));
+ glyphTileInfo.colors = sGlyphBuffer.colors;
+ DrawGlyphTile_ShadowedFont(&glyphTileInfo);
+ glyphTileInfo.src += 32;
+ glyphTileInfo.dest = (u32 *)(win->tileData + 32 * GetCursorTileNum(win, 0, 1));
+ DrawGlyphTile_ShadowedFont(&glyphTileInfo);
+ if (glyphTileInfo.startPixel != 0)
+ UpdateTilemap(win, 2);
+ else
+ UpdateTilemap(win, 1);
+ break;
+ }
+ }
+ }
+}
+
+static u8 WaitWithDownArrow(struct Window *win)
+{
+ u8 retVal = 1;
+
+ if (!PlayerCanInterruptWait(win))
+ {
+ win->delayCounter--;
+ if (!win->delayCounter)
+ {
+ TryEraseDownArrow(win);
+ }
+ else
+ {
+ DrawMovingDownArrow(win);
+ retVal = 0;
+ }
+ }
+ else
+ {
+ if (gMain.newKeys & (A_BUTTON | B_BUTTON))
+ {
+ audio_play(SE_SELECT);
+ TryEraseDownArrow(win);
+ }
+ else
+ {
+ DrawMovingDownArrow(win);
+ retVal = 0;
+ }
+ }
+
+ return retVal;
+}
+
+static void DrawInitialDownArrow(struct Window *win)
+{
+ win->downArrowCounter = 0;
+ DrawDownArrow(win);
+}
+
+static void DrawMovingDownArrow(struct Window *win)
+{
+ u16 downArrowPos = (win->downArrowCounter & 0x0F00) >> 8;
+ u16 wait = win->downArrowCounter & 0x000F;
+ u16 newVal;
+
+ wait++;
+
+ if (wait == 6)
+ {
+ wait = 0;
+ downArrowPos++;
+ if (downArrowPos > 3)
+ downArrowPos = 0;
+ win->downArrowCounter = downArrowPos << 8;
+ DrawDownArrow(win);
+ }
+
+ newVal = downArrowPos << 8;
+ newVal |= wait;
+
+ win->downArrowCounter = newVal;
+}
+
+static void TryEraseDownArrow(struct Window *win)
+{
+ win->downArrowCounter = 0;
+ if (PlayerCanInterruptWait(win) == TRUE)
+ EraseAtCursor(win);
+}
+
+u16 GetWindowTilemapEntry(struct Window *win, u8 x, u8 y)
+{
+ u16 *tilemap = win->tilemap;
+ return tilemap[32 * y + x];
+}
+
+void DrawWindowRect(struct Window *win, u16 tilemapEntry, u8 left, u8 top, u8 right, u8 bottom)
+{
+ u8 i;
+ u16 *buffer = &win->tilemap[top * 32];
+
+ for (i = left; i <= right; i++)
+ buffer[i] = tilemapEntry;
+
+ for (i = top + 1; i < bottom - 1; i++)
+ {
+ buffer += 32;
+ buffer[left] = tilemapEntry;
+ buffer[right] = tilemapEntry;
+ }
+
+ if (top != bottom)
+ {
+ buffer += 32;
+ for (i = left; i <= right; i++)
+ buffer[i] = tilemapEntry;
+ }
+}
+
+void DrawWindowRect_DefaultPalette(struct Window *win, u16 tileNum, u8 left, u8 top, u8 right, u8 bottom)
+{
+ DrawWindowRect(win, (win->paletteNum << 12) | tileNum, left, top, right, bottom);
+}
+
+void FillWindowRect(struct Window *win, u16 tilemapEntry, u8 left, u8 top, u8 right, u8 bottom)
+{
+ u16 *buffer = &win->tilemap[top * 32];
+ while (top++ <= bottom)
+ {
+ u8 j;
+ for (j = left; j <= right; j++)
+ buffer[j] = tilemapEntry;
+ buffer += 32;
+ }
+}
+
+void FillWindowRect_DefaultPalette(struct Window *win, u16 tileNum, u8 left, u8 top, u8 right, u8 bottom)
+{
+ FillWindowRect(win, (win->paletteNum << 12) | tileNum, left, top, right, bottom);
+}
+
+void ZeroFillWindowRect(struct Window *win, u8 left, u8 top, u8 right, u8 bottom)
+{
+ FillWindowRect_DefaultPalette(win, 0, left, top, right, bottom);
+}
+
+void FillWindowRectWithBlankTile(struct Window *win, u8 left, u8 top, u8 right, u8 bottom)
+{
+ u16 tileNum = GetBlankTileNum(win);
+ FillWindowRect_DefaultPalette(win, tileNum, left, top, right, bottom);
+}
+
+static u16 GetBlankTileNum(struct Window *win)
+{
+ u16 retVal = win->tileDataStartOffset;
+
+ switch (win->textMode)
+ {
+ case 0:
+ break;
+ case 2:
+ retVal++;
+ break;
+ case 1:
+ switch (win->fontNum)
+ {
+ case 1:
+ case 2:
+ case 4:
+ case 5:
+ retVal += 212;
+ case 0:
+ case 3:
+ case 6:
+ break;
+ default:
+ retVal = 0;
+ }
+ break;
+ }
+
+ return retVal;
+}
+
+static s32 sub_80048D8(struct Window *win, u8 x, u8 y)
+{
+ win->cursorX = x;
+ win->cursorY = y & 0xF8;
+}
+
+static u8 GetGlyphWidth(struct Window *win, u32 glyph)
+{
+ u8 width = 8;
+
+ if (win->charset == CHARSET_LATIN)
+ {
+ width = win->spacing;
+ if (!win->spacing)
+ {
+ switch (win->fontNum)
+ {
+ case 3:
+ width = sFont3Widths[glyph];
+ break;
+ case 4:
+ case 5:
+ width = sFont4Widths[sFontType1Map[2 * glyph + 1]];
+ break;
+ case 0:
+ width = sFont0Widths[glyph];
+ break;
+ case 1:
+ case 2:
+ width = sFont1Widths[sFontType1Map[2 * glyph + 1]];
+ break;
+ case 6:
+ width = 8;
+ break;
+ default:
+ width = 8;
+ }
+ }
+ }
+
+ return width;
+}
+
+u8 GetExtCtrlCodeLength(u8 code)
+{
+ u8 length = 0;
+ if (code <= 0x16)
+ length = sExtCtrlCodeLengths[code];
+ return length;
+}
+
+u8 *AlignInt1(struct Window *win, u8 *dest, s32 value, u8 alignAmount, u8 alignType)
+{
+ u8 temp[16];
+ u8 width;
+ switch (alignType)
+ {
+ case 0:
+ ConvertIntToDecimalString(temp, value);
+ dest = StringCopy(dest, temp);
+ dest[0] = 0xFC;
+ dest[1] = 19;
+ dest[2] = alignAmount;
+ dest += 3;
+ *dest = 0xFF;
+ break;
+ case 1:
+ ConvertIntToDecimalString(temp, value);
+ width = GetStringWidth(win, temp);
+ if (alignAmount > width)
+ {
+ dest[0] = 0xFC;
+ dest[1] = 19;
+ dest[2] = alignAmount - width;
+ dest += 3;
+ }
+ dest = StringCopy(dest, temp);
+ break;
+ case 2:
+ ConvertIntToDecimalString(temp, value);
+ width = GetStringWidth(win, temp);
+ if (alignAmount > width)
+ {
+ dest[0] = 0xFC;
+ dest[1] = 19;
+ dest[2] = (alignAmount - width) / 2;
+ dest += 3;
+ }
+ dest = StringCopy(dest, temp);
+ if (alignAmount > width)
+ {
+ dest[0] = 0xFC;
+ dest[1] = 19;
+ dest[2] = alignAmount;
+ dest += 3;
+ *dest = 0xFF;
+ }
+ break;
+ }
+ return dest;
+}
+
+u8 *AlignInt2(struct Window *win, u8 *dest, s32 value, u8 alignAmount, u8 alignType)
+{
+ u8 temp[16];
+ u8 width;
+ switch (alignType)
+ {
+ case 0:
+ ConvertIntToDecimalString(temp, value);
+ width = GetStringWidth(win, temp);
+ dest = StringCopy(dest, temp);
+ dest[0] = 0xFC;
+ dest[1] = 17;
+ dest[2] = alignAmount - width;
+ dest += 3;
+ *dest = 0xFF;
+ break;
+ case 1:
+ ConvertIntToDecimalString(temp, value);
+ width = GetStringWidth(win, temp);
+ if (alignAmount > width)
+ {
+ dest[0] = 0xFC;
+ dest[1] = 17;
+ dest[2] = alignAmount - width;
+ dest += 3;
+ }
+ dest = StringCopy(dest, temp);
+ break;
+ case 2:
+ ConvertIntToDecimalString(temp, value);
+ width = GetStringWidth(win, temp);
+ if (alignAmount > width)
+ {
+ dest[0] = 0xFC;
+ dest[1] = 17;
+ dest[2] = (alignAmount - width) / 2;
+ dest += 3;
+ }
+ dest = StringCopy(dest, temp);
+ if (alignAmount > width)
+ {
+ dest[0] = 0xFC;
+ dest[1] = 17;
+ dest[2] = (alignAmount - width) / 2;
+ dest += 3;
+ *dest = 0xFF;
+ }
+ break;
+ }
+ return dest;
+}
+
+u8 *AlignString(struct Window *win, u8 *dest, u8 *src, u8 alignAmount, u8 alignType)
+{
+ u8 width;
+ switch (alignType)
+ {
+ case 0:
+ dest = StringCopy(dest, src);
+ dest[0] = 0xFC;
+ dest[1] = 19;
+ dest[2] = alignAmount;
+ dest += 3;
+ *dest = 0xFF;
+ break;
+ case 1:
+ width = GetStringWidth(win, src);
+ if (alignAmount > width)
+ {
+ dest[0] = 0xFC;
+ dest[1] = 19;
+ dest[2] = alignAmount - width;
+ dest += 3;
+ }
+ dest = StringCopy(dest, src);
+ break;
+ case 2:
+ width = GetStringWidth(win, src);
+ if (alignAmount > width)
+ {
+ dest[0] = 0xFC;
+ dest[1] = 19;
+ dest[2] = (alignAmount - width) / 2;
+ dest += 3;
+ }
+ dest = StringCopy(dest, src);
+ if (alignAmount > width)
+ {
+ dest[0] = 0xFC;
+ dest[1] = 19;
+ dest[2] = alignAmount;
+ dest += 3;
+ *dest = 0xFF;
+ }
+ break;
+ }
+ return dest;
+}
+
+u8 GetStringWidth(struct Window *win, u8 *s)
+{
+ u8 width = 0;
+ u8 savedFontNum = win->fontNum;
+ u8 savedCharset = win->charset;
+ u8 savedSpacing = win->spacing;
+ s32 i = 0;
+
+ while (s[i] != 0xFF)
+ {
+ u8 c = s[i];
+ switch (c)
+ {
+ case 0xFD:
+ {
+ u8 temp;
+ i++;
+ temp = win->charset;
+ width += GetStringWidth(win, GetExpandedPlaceholder(s[i]));
+ win->charset = temp;
+ i++;
+ break;
+ }
+ case 0xFC:
+ i++;
+ switch (s[i])
+ {
+ case 6:
+ win->fontNum = s[i + 1];
+ break;
+ case 7:
+ win->fontNum = win->config->fontNum;
+ break;
+ case 0x11:
+ width += s[i + 1];
+ break;
+ case 0x12:
+ case 0x13:
+ if (width < s[i + 1])
+ width = s[i + 1];
+ break;
+ case 0x14:
+ win->spacing = s[i + 1];
+ break;
+ case 0x15:
+ win->charset = 1;
+ break;
+ case 0x16:
+ win->charset = 2;
+ break;
+ }
+
+ i += GetExtCtrlCodeLength(s[i]);
+ break;
+ default:
+ i++;
+ width += GetGlyphWidth(win, c);
+ }
+ }
+
+ win->spacing = savedSpacing;
+ win->charset = savedCharset;
+ win->fontNum = savedFontNum;
+
+ return width;
+}
+
+u8 sub_8004D04(struct Window *win, u8 *text, u16 tileDataStartOffset, u8 left, u16 top, u32 a6)
+{
+ sub_8002E4C(win, text, tileDataStartOffset, left, top, a6);
+ return sub_8002F44(win);
+}
+
+u8 sub_8004D38(struct Window *win, u8 *text, u16 tileDataStartOffset, u8 left, u8 top)
+{
+ u8 width = GetStringWidth(win, text);
+ InitWindow(win, text, tileDataStartOffset, left - ((u32)(width + 7) >> 3), top);
+ EraseAtCursor(win);
+ width &= 7;
+ if (width)
+ width = 8 - width;
+ sub_80048D8(win, width, 0);
+ return sub_8002F44(win);
+}
+
+u8 sub_8004DB0(struct Window *win, u8 *text, u16 tileDataStartOffset, u8 left, u8 top, u16 a6)
+{
+ register u32 val asm("r5") = (u8)((a6 >> 1) - (GetStringWidth(win, text) >> 1));
+ left += (val >> 3);
+ InitWindow(win, text, tileDataStartOffset, left, top);
+ EraseAtCursor(win);
+ sub_80048D8(win, val & 7, 0);
+ return sub_8002F44(win);
+}
+
+u8 sub_8004E24(struct Window *win)
+{
+ return win->paletteNum;
+}
+
+void sub_8004E28(struct Window *win, u8 *foreground, u8 *background, u8 *shadow)
+{
+ *foreground = win->foregroundColor;
+ *background = win->backgroundColor;
+ *shadow = win->shadowColor;
+}
+
+void sub_8004E3C(struct WindowConfig *winConfig, u8 *tileData, u8 *text)
+{
+ sTempWindow.config = winConfig;
+ InitWindow(&sTempWindow, text, 0, 0, 0);
+ sTempWindow.tileData = tileData;
+ sub_8002F44(&sTempWindow);
+}
+
+u8 GetStringWidthGivenWindowConfig(struct WindowConfig *winConfig, u8 *s)
+{
+ sTempWindow.config = winConfig;
+ InitWindow(&sTempWindow, s, 0, 0, 0);
+ return GetStringWidth(&sTempWindow, s);
+}
+
+void SetStringCharset(u8 *s, u8 charset)
+{
+ if (charset == CHARSET_JAPANESE)
+ {
+ u8 i;
+ u8 length;
+
+ SkipExtCtrlCodes(s);
+ i = StringLength(s);
+ s[i++] = 0xFC;
+ s[i++] = 22;
+ s[i++] = 0xFF;
+
+ i--;
+
+ while (i != (u8)-1)
+ {
+ s[i + 2] = s[i];
+ i--;
+ }
+
+ s[0] = 0xFC;
+ s[1] = 21;
+ }
+}
+
+void SkipExtCtrlCodes(u8 *str)
+{
+ u16 srcIndex = 0;
+ u16 destIndex = 0;
+ while (str[srcIndex] != 0xFF)
+ {
+ if (str[srcIndex] == 0xFC)
+ {
+ srcIndex++;
+ srcIndex += GetExtCtrlCodeLength(str[srcIndex]);
+ }
+ else
+ {
+ str[destIndex++] = str[srcIndex++];
+ }
+ }
+ str[destIndex] = 0xFF;
+}
+
+static u8 *SkipExtCtrlCode(u8 *s)
+{
+ while (*s == 0xFC)
+ {
+ s++;
+ s += GetExtCtrlCodeLength(*s);
+ }
+
+ return s;
+}
+
+s32 StringCompareWithoutExtCtrlCodes(u8 *str1, u8 *str2)
+{
+ s32 retVal = 0;
+
+ while (1)
+ {
+ str1 = SkipExtCtrlCode(str1);
+ str2 = SkipExtCtrlCode(str2);
+
+ if (*str1 > *str2)
+ break;
+
+ if (*str1 < *str2)
+ {
+ retVal = -1;
+ if (*str2 == 0xFF)
+ retVal = 1;
+ }
+
+ if (*str1 == 0xFF)
+ return retVal;
+
+ str1++;
+ str2++;
+ }
+
+ retVal = 1;
+
+ if (*str1 == 0xFF)
+ retVal = -1;
+
+ return retVal;
+}
+
+u8 sub_8004FD0(struct Window *win, u8 *dest, u8 *src, u16 tileDataStartOffset, u8 left, u16 top, u8 a7, u32 a8)
+{
+ u8 newlineCount = 0;
+ u8 extCtrlCodeLength;
+ u8 *start;
+ u32 endsWithoutNewline;
+
+ if (dest == NULL)
+ dest = gStringVar4;
+
+ start = dest;
+ endsWithoutNewline = FALSE;
+
+ while (*src != 0xFF)
+ {
+ switch (*src)
+ {
+ default:
+ *dest = *src;
+ dest++;
+ src++;
+ endsWithoutNewline = TRUE;
+ break;
+ case 0xFC:
+ extCtrlCodeLength = GetExtCtrlCodeLength(src[1]) + 1;
+ memcpy(dest, src, extCtrlCodeLength);
+ dest += extCtrlCodeLength;
+ src += extCtrlCodeLength;
+ break;
+ case 0xFE:
+ dest[0] = 0xFC;
+ dest[1] = 19;
+ dest[2] = a7;
+ dest[3] = 0xFE;
+ dest += 4;
+ src++;
+ newlineCount++;
+ endsWithoutNewline = FALSE;
+ break;
+ }
+ }
+
+ dest[0] = 0xFC;
+ dest[1] = 19;
+ dest[2] = a7;
+ dest[3] = 0xFF;
+
+ if (endsWithoutNewline)
+ newlineCount++;
+
+ sub_8002E4C(win, start, tileDataStartOffset, left, top, a8);
+ sub_8002F44(win);
+
+ return newlineCount;
+}
+
+static s32 DrawGlyphTile_UnshadowedFont(struct GlyphTileInfo *glyphTileInfo)
+{
+ struct GlyphBuffer *glyphBuffer = &sGlyphBuffer;
+ u32 colors[2];
+ u32 *buffer = glyphTileInfo->dest;
+ const u32 *masks = sGlyphMasks[glyphTileInfo->width][glyphTileInfo->startPixel];
+ u32 mask1 = masks[0] | masks[2];
+
+ glyphBuffer->pixelRows[0] = buffer[0] & mask1;
+ glyphBuffer->pixelRows[1] = buffer[1] & mask1;
+ glyphBuffer->pixelRows[2] = buffer[2] & mask1;
+ glyphBuffer->pixelRows[3] = buffer[3] & mask1;
+ glyphBuffer->pixelRows[4] = buffer[4] & mask1;
+ glyphBuffer->pixelRows[5] = buffer[5] & mask1;
+ glyphBuffer->pixelRows[6] = buffer[6] & mask1;
+ glyphBuffer->pixelRows[7] = buffer[7] & mask1;
+
+ if (glyphTileInfo->startPixel + glyphTileInfo->width > 8)
+ {
+ u32 mask2 = masks[1];
+ if (glyphTileInfo->textMode == 2)
+ {
+ glyphBuffer->pixelRows[8] = buffer[8] & mask2;
+ glyphBuffer->pixelRows[9] = buffer[9] & mask2;
+ glyphBuffer->pixelRows[10] = buffer[10] & mask2;
+ glyphBuffer->pixelRows[11] = buffer[11] & mask2;
+ glyphBuffer->pixelRows[12] = buffer[12] & mask2;
+ glyphBuffer->pixelRows[13] = buffer[13] & mask2;
+ glyphBuffer->pixelRows[14] = buffer[14] & mask2;
+ glyphBuffer->pixelRows[15] = buffer[15] & mask2;
+ }
+ else
+ {
+ glyphBuffer->pixelRows[8] = buffer[16] & mask2;
+ glyphBuffer->pixelRows[9] = buffer[17] & mask2;
+ glyphBuffer->pixelRows[10] = buffer[18] & mask2;
+ glyphBuffer->pixelRows[11] = buffer[19] & mask2;
+ glyphBuffer->pixelRows[12] = buffer[20] & mask2;
+ glyphBuffer->pixelRows[13] = buffer[21] & mask2;
+ glyphBuffer->pixelRows[14] = buffer[22] & mask2;
+ glyphBuffer->pixelRows[15] = buffer[23] & mask2;
+ }
+ }
+
+ colors[0] = glyphTileInfo->colors[0];
+ colors[1] = glyphTileInfo->colors[15];
+
+ sShiftGlyphTileUnshadowedFuncs[glyphTileInfo->width](glyphBuffer, glyphTileInfo->src, colors, glyphTileInfo->startPixel);
+
+ buffer[0] = glyphBuffer->pixelRows[0];
+ buffer[1] = glyphBuffer->pixelRows[1];
+ buffer[2] = glyphBuffer->pixelRows[2];
+ buffer[3] = glyphBuffer->pixelRows[3];
+ buffer[4] = glyphBuffer->pixelRows[4];
+ buffer[5] = glyphBuffer->pixelRows[5];
+ buffer[6] = glyphBuffer->pixelRows[6];
+ buffer[7] = glyphBuffer->pixelRows[7];
+
+ if (glyphTileInfo->startPixel + glyphTileInfo->width > 8)
+ {
+ if (glyphTileInfo->textMode != 2)
+ buffer += 8;
+ buffer[8] = glyphBuffer->pixelRows[8];
+ buffer[9] = glyphBuffer->pixelRows[9];
+ buffer[10] = glyphBuffer->pixelRows[10];
+ buffer[11] = glyphBuffer->pixelRows[11];
+ buffer[12] = glyphBuffer->pixelRows[12];
+ buffer[13] = glyphBuffer->pixelRows[13];
+ buffer[14] = glyphBuffer->pixelRows[14];
+ buffer[15] = glyphBuffer->pixelRows[15];
+ }
+
+ return (glyphTileInfo->startPixel + glyphTileInfo->width) / 8;
+}
+
+static void ShiftGlyphTile_UnshadowedFont_Width0(struct GlyphBuffer *glyphBuffer, u8 *src, u32 *a3, u8 startPixel)
+{
+}
+
+static void ShiftGlyphTile_UnshadowedFont_Width1(struct GlyphBuffer *glyphBuffer, u8 *src, u32 *colors, u8 startPixel)
+{
+ const struct ShiftAmount *shiftAmount = &sGlyphShiftAmounts[startPixel];
+ u8 i;
+ for (i = 0; i < 8; i++)
+ {
+ u32 val = colors[src[i] >> 7];
+ u32 *dest = &glyphBuffer->pixelRows[i];
+ dest[0] |= val << shiftAmount->left;
+ dest[8] |= val >> shiftAmount->right;
+ }
+}
+
+static void ShiftGlyphTile_UnshadowedFont_Width2(struct GlyphBuffer *glyphBuffer, u8 *src, u32 *colors, u8 startPixel)
+{
+ const struct ShiftAmount *shiftAmount = &sGlyphShiftAmounts[startPixel];
+ u8 i;
+ for (i = 0; i < 8; i++)
+ {
+ u32 val = (colors[(src[i] >> 7) & 1] << 0)
+ | (colors[(src[i] >> 6) & 1] << 4);
+ u32 *dest = &glyphBuffer->pixelRows[i];
+ dest[0] |= val << shiftAmount->left;
+ dest[8] |= val >> shiftAmount->right;
+ }
+}
+
+static void ShiftGlyphTile_UnshadowedFont_Width3(struct GlyphBuffer *glyphBuffer, u8 *src, u32 *colors, u8 startPixel)
+{
+ const struct ShiftAmount *shiftAmount = &sGlyphShiftAmounts[startPixel];
+ u8 i;
+ for (i = 0; i < 8; i++)
+ {
+ // XXX: why 4?
+ u32 val = (colors[(src[i] >> 7) & 1] << 0)
+ | (colors[(src[i] >> 6) & 1] << 4)
+ | (colors[(src[i] >> 5) & 1] << 8)
+ | (colors[(src[i] >> 4) & 1] << 12);
+ u32 *dest = &glyphBuffer->pixelRows[i];
+ dest[0] |= val << shiftAmount->left;
+ dest[8] |= val >> shiftAmount->right;
+ }
+}
+
+static void ShiftGlyphTile_UnshadowedFont_Width4(struct GlyphBuffer *glyphBuffer, u8 *src, u32 *colors, u8 startPixel)
+{
+ const struct ShiftAmount *shiftAmount = &sGlyphShiftAmounts[startPixel];
+ u8 i;
+ for (i = 0; i < 8; i++)
+ {
+ u32 val = (colors[(src[i] >> 7) & 1] << 0)
+ | (colors[(src[i] >> 6) & 1] << 4)
+ | (colors[(src[i] >> 5) & 1] << 8)
+ | (colors[(src[i] >> 4) & 1] << 12);
+ u32 *dest = &glyphBuffer->pixelRows[i];
+ dest[0] |= val << shiftAmount->left;
+ dest[8] |= val >> shiftAmount->right;
+ }
+}
+
+static void ShiftGlyphTile_UnshadowedFont_Width5(struct GlyphBuffer *glyphBuffer, u8 *src, u32 *colors, u8 startPixel)
+{
+ const struct ShiftAmount *shiftAmount = &sGlyphShiftAmounts[startPixel];
+ u8 i;
+ for (i = 0; i < 8; i++)
+ {
+ u32 val = (colors[(src[i] >> 7) & 1] << 0)
+ | (colors[(src[i] >> 6) & 1] << 4)
+ | (colors[(src[i] >> 5) & 1] << 8)
+ | (colors[(src[i] >> 4) & 1] << 12)
+ | (colors[(src[i] >> 3) & 1] << 16);
+ u32 *dest = &glyphBuffer->pixelRows[i];
+ dest[0] |= val << shiftAmount->left;
+ dest[8] |= val >> shiftAmount->right;
+ }
+}
+
+static void ShiftGlyphTile_UnshadowedFont_Width6(struct GlyphBuffer *glyphBuffer, u8 *src, u32 *colors, u8 startPixel)
+{
+ const struct ShiftAmount *shiftAmount = &sGlyphShiftAmounts[startPixel];
+ u8 i;
+ for (i = 0; i < 8; i++)
+ {
+ u32 val = (colors[(src[i] >> 7) & 1] << 0)
+ | (colors[(src[i] >> 6) & 1] << 4)
+ | (colors[(src[i] >> 5) & 1] << 8)
+ | (colors[(src[i] >> 4) & 1] << 12)
+ | (colors[(src[i] >> 3) & 1] << 16)
+ | (colors[(src[i] >> 2) & 1] << 20);
+ u32 *dest = &glyphBuffer->pixelRows[i];
+ dest[0] |= val << shiftAmount->left;
+ dest[8] |= val >> shiftAmount->right;
+ }
+}
+
+static void ShiftGlyphTile_UnshadowedFont_Width7(struct GlyphBuffer *glyphBuffer, u8 *src, u32 *colors, u8 startPixel)
+{
+ const struct ShiftAmount *shiftAmount = &sGlyphShiftAmounts[startPixel];
+ u8 i;
+ for (i = 0; i < 8; i++)
+ {
+ u32 val = (colors[(src[i] >> 7) & 1] << 0)
+ | (colors[(src[i] >> 6) & 1] << 4)
+ | (colors[(src[i] >> 5) & 1] << 8)
+ | (colors[(src[i] >> 4) & 1] << 12)
+ | (colors[(src[i] >> 3) & 1] << 16)
+ | (colors[(src[i] >> 2) & 1] << 20)
+ | (colors[(src[i] >> 1) & 1] << 24);
+ u32 *dest = &glyphBuffer->pixelRows[i];
+ dest[0] |= val << shiftAmount->left;
+ dest[8] |= val >> shiftAmount->right;
+ }
+}
+
+static void ShiftGlyphTile_UnshadowedFont_Width8(struct GlyphBuffer *glyphBuffer, u8 *src, u32 *colors, u8 startPixel)
+{
+ const struct ShiftAmount *shiftAmount = &sGlyphShiftAmounts[startPixel];
+ u8 i;
+ for (i = 0; i < 8; i++)
+ {
+ u32 val = (colors[(src[i] >> 7) & 1] << 0)
+ | (colors[(src[i] >> 6) & 1] << 4)
+ | (colors[(src[i] >> 5) & 1] << 8)
+ | (colors[(src[i] >> 4) & 1] << 12)
+ | (colors[(src[i] >> 3) & 1] << 16)
+ | (colors[(src[i] >> 2) & 1] << 20)
+ | (colors[(src[i] >> 1) & 1] << 24)
+ | (colors[(src[i] >> 0) & 1] << 28);
+ u32 *dest = &glyphBuffer->pixelRows[i];
+ dest[0] |= val << shiftAmount->left;
+ dest[8] |= val >> shiftAmount->right;
+ }
+}
+
+static s32 DrawGlyphTile_ShadowedFont(struct GlyphTileInfo *glyphTileInfo)
+{
+ struct GlyphBuffer *glyphBuffer = &sGlyphBuffer;
+ u32 *buffer = glyphTileInfo->dest;
+ const u32 *masks = sGlyphMasks[glyphTileInfo->width][glyphTileInfo->startPixel];
+ u32 mask1 = masks[0] | masks[2];
+
+ glyphBuffer->pixelRows[0] = buffer[0] & mask1;
+ glyphBuffer->pixelRows[1] = buffer[1] & mask1;
+ glyphBuffer->pixelRows[2] = buffer[2] & mask1;
+ glyphBuffer->pixelRows[3] = buffer[3] & mask1;
+ glyphBuffer->pixelRows[4] = buffer[4] & mask1;
+ glyphBuffer->pixelRows[5] = buffer[5] & mask1;
+ glyphBuffer->pixelRows[6] = buffer[6] & mask1;
+ glyphBuffer->pixelRows[7] = buffer[7] & mask1;
+
+ if (glyphTileInfo->startPixel + glyphTileInfo->width > 8)
+ {
+ u32 mask2 = masks[1];
+ if (glyphTileInfo->textMode == 2)
+ {
+ glyphBuffer->pixelRows[8] = buffer[8] & mask2;
+ glyphBuffer->pixelRows[9] = buffer[9] & mask2;
+ glyphBuffer->pixelRows[10] = buffer[10] & mask2;
+ glyphBuffer->pixelRows[11] = buffer[11] & mask2;
+ glyphBuffer->pixelRows[12] = buffer[12] & mask2;
+ glyphBuffer->pixelRows[13] = buffer[13] & mask2;
+ glyphBuffer->pixelRows[14] = buffer[14] & mask2;
+ glyphBuffer->pixelRows[15] = buffer[15] & mask2;
+ }
+ else
+ {
+ glyphBuffer->pixelRows[8] = buffer[16] & mask2;
+ glyphBuffer->pixelRows[9] = buffer[17] & mask2;
+ glyphBuffer->pixelRows[10] = buffer[18] & mask2;
+ glyphBuffer->pixelRows[11] = buffer[19] & mask2;
+ glyphBuffer->pixelRows[12] = buffer[20] & mask2;
+ glyphBuffer->pixelRows[13] = buffer[21] & mask2;
+ glyphBuffer->pixelRows[14] = buffer[22] & mask2;
+ glyphBuffer->pixelRows[15] = buffer[23] & mask2;
+ }
+ }
+
+ sShiftGlyphTileShadowedFuncs[glyphTileInfo->width](glyphBuffer, (u32 *)glyphTileInfo->src, glyphTileInfo->colors, glyphTileInfo->startPixel);
+
+ buffer[0] = glyphBuffer->pixelRows[0];
+ buffer[1] = glyphBuffer->pixelRows[1];
+ buffer[2] = glyphBuffer->pixelRows[2];
+ buffer[3] = glyphBuffer->pixelRows[3];
+ buffer[4] = glyphBuffer->pixelRows[4];
+ buffer[5] = glyphBuffer->pixelRows[5];
+ buffer[6] = glyphBuffer->pixelRows[6];
+ buffer[7] = glyphBuffer->pixelRows[7];
+
+ if (glyphTileInfo->startPixel + glyphTileInfo->width > 8)
+ {
+ if (glyphTileInfo->textMode != 2)
+ buffer += 8;
+ buffer[8] = glyphBuffer->pixelRows[8];
+ buffer[9] = glyphBuffer->pixelRows[9];
+ buffer[10] = glyphBuffer->pixelRows[10];
+ buffer[11] = glyphBuffer->pixelRows[11];
+ buffer[12] = glyphBuffer->pixelRows[12];
+ buffer[13] = glyphBuffer->pixelRows[13];
+ buffer[14] = glyphBuffer->pixelRows[14];
+ buffer[15] = glyphBuffer->pixelRows[15];
+ }
+
+ return (glyphTileInfo->startPixel + glyphTileInfo->width) / 8;
+}
+
+static void ShiftGlyphTile_ShadowedFont_Width0(struct GlyphBuffer *glyphBuffer, u32 *src, u32 *colors, u8 startPixel)
+{
+}
+
+static void ShiftGlyphTile_ShadowedFont_Width1(struct GlyphBuffer *glyphBuffer, u32 *src, u32 *colors, u8 startPixel)
+{
+ const struct ShiftAmount *shiftAmount = &sGlyphShiftAmounts[startPixel];
+ u8 i;
+ for (i = 0; i < 8; i++)
+ {
+ u32 val = colors[src[i] & 0xF];
+ u32 *dest = &glyphBuffer->pixelRows[i];
+ dest[0] |= val << shiftAmount->left;
+ dest[8] |= val >> shiftAmount->right;
+ }
+}
+
+static void ShiftGlyphTile_ShadowedFont_Width2(struct GlyphBuffer *glyphBuffer, u32 *src, u32 *colors, u8 startPixel)
+{
+ const struct ShiftAmount *shiftAmount = &sGlyphShiftAmounts[startPixel];
+ u8 i;
+ for (i = 0; i < 8; i++)
+ {
+ u32 val = (colors[(src[i] >> 0) & 0xF] << 0)
+ | (colors[(src[i] >> 4) & 0xF] << 4);
+ u32 *dest = &glyphBuffer->pixelRows[i];
+ dest[0] |= val << shiftAmount->left;
+ dest[8] |= val >> shiftAmount->right;
+ }
+}
+
+static void ShiftGlyphTile_ShadowedFont_Width3(struct GlyphBuffer *glyphBuffer, u32 *src, u32 *colors, u8 startPixel)
+{
+ const struct ShiftAmount *shiftAmount = &sGlyphShiftAmounts[startPixel];
+ u8 i;
+ for (i = 0; i < 8; i++)
+ {
+ u32 val = (colors[(src[i] >> 0) & 0xF] << 0)
+ | (colors[(src[i] >> 4) & 0xF] << 4)
+ | (colors[(src[i] >> 8) & 0xF] << 8);
+ u32 *dest = &glyphBuffer->pixelRows[i];
+ dest[0] |= val << shiftAmount->left;
+ dest[8] |= val >> shiftAmount->right;
+ }
+}
+
+static void ShiftGlyphTile_ShadowedFont_Width4(struct GlyphBuffer *glyphBuffer, u32 *src, u32 *colors, u8 startPixel)
+{
+ const struct ShiftAmount *shiftAmount = &sGlyphShiftAmounts[startPixel];
+ u8 i;
+ for (i = 0; i < 8; i++)
+ {
+ u32 val = (colors[(src[i] >> 0) & 0xF] << 0)
+ | (colors[(src[i] >> 4) & 0xF] << 4)
+ | (colors[(src[i] >> 8) & 0xF] << 8)
+ | (colors[(src[i] >> 12) & 0xF] << 12);
+ u32 *dest = &glyphBuffer->pixelRows[i];
+ dest[0] |= val << shiftAmount->left;
+ dest[8] |= val >> shiftAmount->right;
+ }
+}
+
+#define SHIFT_GLYPH_WIDTH5_STEP(i) \
+val = (colors[(src[i] >> 0) & 0xF] << 0) \
+ | (colors[(src[i] >> 4) & 0xF] << 4) \
+ | (colors[(src[i] >> 8) & 0xF] << 8) \
+ | (colors[(src[i] >> 12) & 0xF] << 12) \
+ | (colors[(src[i] >> 16) & 0xF] << 16); \
+glyphBuffer->pixelRows[i] |= val << shiftAmount->left; \
+glyphBuffer->pixelRows[i + 8] |= val >> shiftAmount->right; \
+
+static void ShiftGlyphTile_ShadowedFont_Width5(struct GlyphBuffer *glyphBuffer, u32 *src, u32 *colors, u8 startPixel)
+{
+ const struct ShiftAmount *shiftAmount = &sGlyphShiftAmounts[startPixel];
+ u32 val;
+ SHIFT_GLYPH_WIDTH5_STEP(0)
+ SHIFT_GLYPH_WIDTH5_STEP(1)
+ SHIFT_GLYPH_WIDTH5_STEP(2)
+ SHIFT_GLYPH_WIDTH5_STEP(3)
+ SHIFT_GLYPH_WIDTH5_STEP(4)
+ SHIFT_GLYPH_WIDTH5_STEP(5)
+ SHIFT_GLYPH_WIDTH5_STEP(6)
+ SHIFT_GLYPH_WIDTH5_STEP(7)
+}
+
+#define SHIFT_GLYPH_WIDTH6_STEP(i) \
+val = (colors[(src[i] >> 0) & 0xF] << 0) \
+ | (colors[(src[i] >> 4) & 0xF] << 4) \
+ | (colors[(src[i] >> 8) & 0xF] << 8) \
+ | (colors[(src[i] >> 12) & 0xF] << 12) \
+ | (colors[(src[i] >> 16) & 0xF] << 16) \
+ | (colors[(src[i] >> 20) & 0xF] << 20); \
+glyphBuffer->pixelRows[i] |= val << shiftAmount->left; \
+glyphBuffer->pixelRows[i + 8] |= val >> shiftAmount->right; \
+
+static void ShiftGlyphTile_ShadowedFont_Width6(struct GlyphBuffer *glyphBuffer, u32 *src, u32 *colors, u8 startPixel)
+{
+ const struct ShiftAmount *shiftAmount = &sGlyphShiftAmounts[startPixel];
+ u32 val;
+ SHIFT_GLYPH_WIDTH6_STEP(0)
+ SHIFT_GLYPH_WIDTH6_STEP(1)
+ SHIFT_GLYPH_WIDTH6_STEP(2)
+ SHIFT_GLYPH_WIDTH6_STEP(3)
+ SHIFT_GLYPH_WIDTH6_STEP(4)
+ SHIFT_GLYPH_WIDTH6_STEP(5)
+ SHIFT_GLYPH_WIDTH6_STEP(6)
+ SHIFT_GLYPH_WIDTH6_STEP(7)
+}
+
+#define SHIFT_GLYPH_WIDTH7_STEP(i) \
+val = (colors[(src[i] >> 0) & 0xF] << 0) \
+ | (colors[(src[i] >> 4) & 0xF] << 4) \
+ | (colors[(src[i] >> 8) & 0xF] << 8) \
+ | (colors[(src[i] >> 12) & 0xF] << 12) \
+ | (colors[(src[i] >> 16) & 0xF] << 16) \
+ | (colors[(src[i] >> 20) & 0xF] << 20) \
+ | (colors[(src[i] >> 24) & 0xF] << 24); \
+glyphBuffer->pixelRows[i] |= val << shiftAmount->left; \
+glyphBuffer->pixelRows[i + 8] |= val >> shiftAmount->right; \
+
+static void ShiftGlyphTile_ShadowedFont_Width7(struct GlyphBuffer *glyphBuffer, u32 *src, u32 *colors, u8 startPixel)
+{
+ const struct ShiftAmount *shiftAmount = &sGlyphShiftAmounts[startPixel];
+ u32 val;
+ SHIFT_GLYPH_WIDTH7_STEP(0)
+ SHIFT_GLYPH_WIDTH7_STEP(1)
+ SHIFT_GLYPH_WIDTH7_STEP(2)
+ SHIFT_GLYPH_WIDTH7_STEP(3)
+ SHIFT_GLYPH_WIDTH7_STEP(4)
+ SHIFT_GLYPH_WIDTH7_STEP(5)
+ SHIFT_GLYPH_WIDTH7_STEP(6)
+ SHIFT_GLYPH_WIDTH7_STEP(7)
+}
+
+#define SHIFT_GLYPH_WIDTH8_STEP(i) \
+val = (colors[(src[i] >> 0) & 0xF] << 0) \
+ | (colors[(src[i] >> 4) & 0xF] << 4) \
+ | (colors[(src[i] >> 8) & 0xF] << 8) \
+ | (colors[(src[i] >> 12) & 0xF] << 12) \
+ | (colors[(src[i] >> 16) & 0xF] << 16) \
+ | (colors[(src[i] >> 20) & 0xF] << 20) \
+ | (colors[(src[i] >> 24) & 0xF] << 24) \
+ | (colors[(src[i] >> 28) ] << 28); \
+glyphBuffer->pixelRows[i] |= val << shiftAmount->left; \
+glyphBuffer->pixelRows[i + 8] |= val >> shiftAmount->right; \
+
+static void ShiftGlyphTile_ShadowedFont_Width8(struct GlyphBuffer *glyphBuffer, u32 *src, u32 *colors, u8 startPixel)
+{
+ const struct ShiftAmount *shiftAmount = &sGlyphShiftAmounts[startPixel];
+ u32 val;
+ SHIFT_GLYPH_WIDTH8_STEP(0)
+ SHIFT_GLYPH_WIDTH8_STEP(1)
+ SHIFT_GLYPH_WIDTH8_STEP(2)
+ SHIFT_GLYPH_WIDTH8_STEP(3)
+ SHIFT_GLYPH_WIDTH8_STEP(4)
+ SHIFT_GLYPH_WIDTH8_STEP(5)
+ SHIFT_GLYPH_WIDTH8_STEP(6)
+ SHIFT_GLYPH_WIDTH8_STEP(7)
+}
+
+static s32 DrawGlyphTiles(struct Window *win, u32 glyph, u32 glyphWidth)
+{
+ struct GlyphTileInfo glyphTileInfo;
+ u8 *upperTile;
+ u8 *lowerTile;
+ s32 retVal = 0;
+
+ GetGlyphTilePointers(win->fontNum, win->charset, glyph, &upperTile, &lowerTile);
+ glyphTileInfo.textMode = win->textMode;
+ glyphTileInfo.startPixel = (win->left + win->cursorX) & 7;
+ glyphTileInfo.width = glyphWidth;
+ glyphTileInfo.src = upperTile;
+ glyphTileInfo.dest = (u32 *)(win->tileData + 32 * GetCursorTileNum(win, 0, 0));
+ glyphTileInfo.colors = sGlyphBuffer.colors;
+
+ switch (win->fontNum)
+ {
+ case 0:
+ case 1:
+ case 2:
+ case 6:
+ DrawGlyphTile_UnshadowedFont(&glyphTileInfo);
+ glyphTileInfo.src = lowerTile;
+ glyphTileInfo.dest = (u32 *)(win->tileData + 32 * GetCursorTileNum(win, 0, 1));
+ retVal = DrawGlyphTile_UnshadowedFont(&glyphTileInfo);
+ break;
+ case 3:
+ case 4:
+ case 5:
+ DrawGlyphTile_ShadowedFont(&glyphTileInfo);
+ glyphTileInfo.src = lowerTile;
+ glyphTileInfo.dest = (u32 *)(win->tileData + 32 * GetCursorTileNum(win, 0, 1));
+ retVal = DrawGlyphTile_ShadowedFont(&glyphTileInfo);
+ break;
+ }
+
+ return retVal;
+}
+
+static void UpdateTilemap(struct Window *win, u32 tilesWidth)
+{
+ u16 *tilemap = GetCursorTilemapPointer(win);
+ if (tilesWidth && tilemap)
+ {
+ u16 paletteNum = (win->paletteNum << 12);
+ u16 upperLeftTileNum = GetCursorTileNum(win, 0, 0);
+ u16 lowerLeftTileNum = GetCursorTileNum(win, 0, 1);
+ tilemap[0] = upperLeftTileNum | paletteNum;
+ tilemap[32] = lowerLeftTileNum | paletteNum;
+ if (tilesWidth == 2)
+ {
+ u16 upperRightTileNum = GetCursorTileNum(win, 1, 0);
+ u16 lowerRightTileNum = GetCursorTileNum(win, 1, 1);
+ tilemap[1] = upperRightTileNum | paletteNum;
+ tilemap[33] = lowerRightTileNum | paletteNum;
+ }
+ }
+}
+
+static u16 GetCursorTileNum(struct Window *win, u32 xOffset, u32 yOffset)
+{
+ u16 index;
+
+ if (win->textMode == 2)
+ index = win->tileDataStartOffset
+ + win->tileDataOffset
+ + (((win->top + win->cursorY) >> 3) + yOffset) * win->width
+ + (((win->left + win->cursorX) >> 3) + xOffset);
+ else
+ index = win->tileDataStartOffset + win->tileDataOffset + 2 * xOffset + yOffset;
+
+ return index;
+}
diff --git a/tools/bin2c/.gitignore b/tools/bin2c/.gitignore
new file mode 100644
index 000000000..366f3d3e9
--- /dev/null
+++ b/tools/bin2c/.gitignore
@@ -0,0 +1 @@
+bin2c
diff --git a/tools/bin2c/LICENSE b/tools/bin2c/LICENSE
new file mode 100644
index 000000000..534d15349
--- /dev/null
+++ b/tools/bin2c/LICENSE
@@ -0,0 +1,19 @@
+Copyright (c) 2016 YamaArashi
+
+Permission is hereby granted, free of charge, to any person obtaining a copy
+of this software and associated documentation files (the "Software"), to deal
+in the Software without restriction, including without limitation the rights
+to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
+copies of the Software, and to permit persons to whom the Software is
+furnished to do so, subject to the following conditions:
+
+The above copyright notice and this permission notice shall be included in
+all copies or substantial portions of the Software.
+
+THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
+IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
+FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
+AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
+LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
+OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN
+THE SOFTWARE.
diff --git a/tools/bin2c/Makefile b/tools/bin2c/Makefile
new file mode 100644
index 000000000..eee19af22
--- /dev/null
+++ b/tools/bin2c/Makefile
@@ -0,0 +1,13 @@
+CC = gcc
+
+CFLAGS = -Wall -Wextra -std=c11 -O2
+
+.PHONY: clean
+
+SRCS = bin2c.c
+
+bin2c: $(SRCS)
+ $(CC) $(CFLAGS) $(SRCS) -o $@
+
+clean:
+ $(RM) bin2c bin2c.exe
diff --git a/tools/bin2c/bin2c.c b/tools/bin2c/bin2c.c
new file mode 100644
index 000000000..b4bd437f0
--- /dev/null
+++ b/tools/bin2c/bin2c.c
@@ -0,0 +1,201 @@
+// Copyright(c) 2015-2016 YamaArashi
+//
+// Permission is hereby granted, free of charge, to any person obtaining a copy
+// of this software and associated documentation files (the "Software"), to deal
+// in the Software without restriction, including without limitation the rights
+// to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
+// copies of the Software, and to permit persons to whom the Software is
+// furnished to do so, subject to the following conditions:
+//
+// The above copyright notice and this permission notice shall be included in
+// all copies or substantial portions of the Software.
+//
+// THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
+// IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
+// FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
+// AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
+// LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
+// OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN
+// THE SOFTWARE.
+
+#include <stdio.h>
+#include <stdlib.h>
+#include <string.h>
+#include <stdbool.h>
+
+#ifdef _MSC_VER
+
+#define FATAL_ERROR(format, ...) \
+do \
+{ \
+ fprintf(stderr, format, __VA_ARGS__); \
+ exit(1); \
+} while (0)
+
+#else
+
+#define FATAL_ERROR(format, ...) \
+do \
+{ \
+ fprintf(stderr, format, ##__VA_ARGS__); \
+ exit(1); \
+} while (0)
+
+#endif // _MSC_VER
+
+unsigned char *ReadWholeFile(char *path, int *size)
+{
+ FILE *fp = fopen(path, "rb");
+
+ if (fp == NULL)
+ FATAL_ERROR("Failed to open \"%s\" for reading.\n", path);
+
+ fseek(fp, 0, SEEK_END);
+
+ *size = ftell(fp);
+
+ unsigned char *buffer = malloc(*size);
+
+ if (buffer == NULL)
+ FATAL_ERROR("Failed to allocate memory for reading \"%s\".\n", path);
+
+ rewind(fp);
+
+ if (fread(buffer, *size, 1, fp) != 1)
+ FATAL_ERROR("Failed to read \"%s\".\n", path);
+
+ fclose(fp);
+
+ return buffer;
+}
+
+int ExtractData(unsigned char *buffer, int offset, int size)
+{
+ switch (size)
+ {
+ case 1:
+ return buffer[offset];
+ case 2:
+ return (buffer[offset + 1] << 8)
+ | buffer[offset];
+ case 4:
+ return (buffer[offset + 3] << 24)
+ | (buffer[offset + 2] << 16)
+ | (buffer[offset + 1] << 8)
+ | buffer[offset];
+ default:
+ FATAL_ERROR("Invalid size passed to ExtractData.\n");
+ }
+}
+
+int main(int argc, char **argv)
+{
+ if (argc < 3)
+ FATAL_ERROR("Usage: bin2c INPUT_FILE VAR_NAME [OPTIONS...]\n");
+
+ int fileSize;
+ unsigned char *buffer = ReadWholeFile(argv[1], &fileSize);
+ char *var_name = argv[2];
+ int col = 1;
+ int pad = 0;
+ int size = 1;
+ bool isSigned = false;
+ bool isStatic = false;
+ bool isDecimal = false;
+
+ for (int i = 3; i < argc; i++)
+ {
+ if (!strcmp(argv[i], "-col"))
+ {
+ i++;
+
+ if (i >= argc)
+ FATAL_ERROR("Missing argument after '-col'.\n");
+
+ col = atoi(argv[i]);
+ }
+ else if (!strcmp(argv[i], "-pad"))
+ {
+ i++;
+
+ if (i >= argc)
+ FATAL_ERROR("Missing argument after '-pad'.\n");
+
+ pad = atoi(argv[i]);
+ }
+ else if (!strcmp(argv[i], "-size"))
+ {
+ i++;
+
+ if (i >= argc)
+ FATAL_ERROR("Missing argument after '-size'.\n");
+
+ size = atoi(argv[i]);
+
+ if (size != 1 && size != 2 && size != 4)
+ FATAL_ERROR("Size must be 1, 2, or 4.\n");
+ }
+ else if (!strcmp(argv[i], "-signed"))
+ {
+ isSigned = true;
+ isDecimal = true;
+ }
+ else if (!strcmp(argv[i], "-static"))
+ {
+ isStatic = true;
+ }
+ else if (!strcmp(argv[i], "-decimal"))
+ {
+ isDecimal = true;
+ }
+ else
+ {
+ FATAL_ERROR("Unrecognized option '%s'.\n", argv[i]);
+ }
+ }
+
+ if ((fileSize & (size - 1)) != 0)
+ FATAL_ERROR("Size %d doesn't evenly divide file size %d.\n", size, fileSize);
+
+ printf("// Generated file. Do not edit.\n\n");
+
+ if (isStatic)
+ printf("static ");
+
+ printf("const ");
+
+ if (isSigned)
+ printf("s%d ", 8 * size);
+ else
+ printf("u%d ", 8 * size);
+
+ printf("%s[] =\n{", var_name);
+
+ int count = fileSize / size;
+ int offset = 0;
+
+ for (int i = 0; i < count; i++)
+ {
+ if (i % col == 0)
+ printf("\n ");
+
+ int data = ExtractData(buffer, offset, size);
+ offset += size;
+
+ if (isDecimal)
+ {
+ if (isSigned)
+ printf("%*d, ", pad, data);
+ else
+ printf("%*uu, ", pad, data);
+ }
+ else
+ {
+ printf("%#*xu, ", pad, data);
+ }
+ }
+
+ printf("\n};\n");
+
+ return 0;
+}
diff --git a/tools/preproc/c_file.cpp b/tools/preproc/c_file.cpp
index 1e4dea359..aed53d44b 100644
--- a/tools/preproc/c_file.cpp
+++ b/tools/preproc/c_file.cpp
@@ -73,6 +73,7 @@ CFile::~CFile()
void CFile::Preproc()
{
bool inConcatMode = false;
+ bool noTerminator = false;
char stringChar = 0;
while (m_pos < m_size)
@@ -100,10 +101,13 @@ void CFile::Preproc()
else
{
if (inConcatMode ? m_buffer[m_pos] == '"'
- : m_buffer[m_pos] == '_' && m_buffer[m_pos + 1] == '"')
+ : (m_buffer[m_pos] == '_' || m_buffer[m_pos] == '@') && m_buffer[m_pos + 1] == '"')
{
if (!inConcatMode)
- m_pos++; // skip past underscore
+ {
+ noTerminator = (m_buffer[m_pos] == '@');
+ m_pos++; // skip past underscore or at-sign
+ }
unsigned char s[kMaxStringLength];
int length;
@@ -144,7 +148,11 @@ void CFile::Preproc()
if ((c != ' ' && c != '\t' && c != '\n') && inConcatMode)
{
- std::printf("0xFF }");
+ if (noTerminator)
+ std::printf(" }");
+ else
+ std::printf("0xFF }");
+
inConcatMode = false;
}
diff --git a/tools/rsfont/.gitignore b/tools/rsfont/.gitignore
new file mode 100644
index 000000000..3140ececc
--- /dev/null
+++ b/tools/rsfont/.gitignore
@@ -0,0 +1 @@
+rsfont
diff --git a/tools/rsfont/LICENSE b/tools/rsfont/LICENSE
new file mode 100644
index 000000000..b497950c1
--- /dev/null
+++ b/tools/rsfont/LICENSE
@@ -0,0 +1,19 @@
+Copyright (c) 2015-2016 YamaArashi
+
+Permission is hereby granted, free of charge, to any person obtaining a copy
+of this software and associated documentation files (the "Software"), to deal
+in the Software without restriction, including without limitation the rights
+to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
+copies of the Software, and to permit persons to whom the Software is
+furnished to do so, subject to the following conditions:
+
+The above copyright notice and this permission notice shall be included in
+all copies or substantial portions of the Software.
+
+THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
+IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
+FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
+AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
+LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
+OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN
+THE SOFTWARE.
diff --git a/tools/rsfont/Makefile b/tools/rsfont/Makefile
new file mode 100644
index 000000000..78e0cab3a
--- /dev/null
+++ b/tools/rsfont/Makefile
@@ -0,0 +1,15 @@
+CC = gcc
+
+CFLAGS = -Wall -Wextra -std=c11 -O2
+
+LIBS = -lz -lpng
+
+SRCS = main.c convert_png.c util.c font.c
+
+.PHONY: clean
+
+rsfont: $(SRCS) convert_png.h gfx.h global.h util.h font.h
+ $(CC) $(CFLAGS) $(SRCS) -o $@ $(LIBS)
+
+clean:
+ $(RM) rsfont rsfont.exe
diff --git a/tools/rsfont/convert_png.c b/tools/rsfont/convert_png.c
new file mode 100644
index 000000000..f6a30804a
--- /dev/null
+++ b/tools/rsfont/convert_png.c
@@ -0,0 +1,169 @@
+// Copyright (c) 2015 YamaArashi
+
+#include <stdio.h>
+#include <setjmp.h>
+#include <png.h>
+#include "global.h"
+#include "convert_png.h"
+#include "gfx.h"
+
+void ReadPng(char *path, struct Image *image)
+{
+ FILE *fp = fopen(path, "rb");
+
+ if (fp == NULL)
+ FATAL_ERROR("Failed to open \"%s\" for reading.\n", path);
+
+ unsigned char sig[8];
+
+ if (fread(sig, 8, 1, fp) != 1)
+ FATAL_ERROR("Failed to read PNG signature from \"%s\".\n", path);
+
+ if (png_sig_cmp(sig, 0, 8))
+ FATAL_ERROR("\"%s\" does not have a valid PNG signature.\n", path);
+
+ png_structp png_ptr = png_create_read_struct(PNG_LIBPNG_VER_STRING, NULL, NULL, NULL);
+
+ if (!png_ptr)
+ FATAL_ERROR("Failed to create PNG read struct.\n");
+
+ png_infop info_ptr = png_create_info_struct(png_ptr);
+
+ if (!info_ptr)
+ FATAL_ERROR("Failed to create PNG info struct.\n");
+
+ if (setjmp(png_jmpbuf(png_ptr)))
+ FATAL_ERROR("Failed to init I/O for reading \"%s\".\n", path);
+
+ png_init_io(png_ptr, fp);
+ png_set_sig_bytes(png_ptr, 8);
+ png_read_info(png_ptr, info_ptr);
+
+ int bit_depth = png_get_bit_depth(png_ptr, info_ptr);
+
+ if (bit_depth != image->bitDepth)
+ FATAL_ERROR("\"%s\" has a bit depth of %d, but the expected bit depth is %d.\n", path, bit_depth, image->bitDepth);
+
+ int color_type = png_get_color_type(png_ptr, info_ptr);
+
+ if (color_type != PNG_COLOR_TYPE_GRAY && color_type != PNG_COLOR_TYPE_PALETTE)
+ FATAL_ERROR("\"%s\" has an unsupported color type.\n", path);
+
+ // Check if the image has a palette so that we can tell if the colors need to be inverted later.
+ // Don't read the palette because it's not needed for now.
+ image->hasPalette = (color_type == PNG_COLOR_TYPE_PALETTE);
+
+ image->width = png_get_image_width(png_ptr, info_ptr);
+ image->height = png_get_image_height(png_ptr, info_ptr);
+
+ int rowbytes = png_get_rowbytes(png_ptr, info_ptr);
+
+ image->pixels = malloc(image->height * rowbytes);
+
+ if (image->pixels == NULL)
+ FATAL_ERROR("Failed to allocate pixel buffer.\n");
+
+ png_bytepp row_pointers = malloc(image->height * sizeof(png_bytep));
+
+ if (row_pointers == NULL)
+ FATAL_ERROR("Failed to allocate row pointers.\n");
+
+ for (int i = 0; i < image->height; i++)
+ row_pointers[i] = (png_bytep)(image->pixels + (i * rowbytes));
+
+ if (setjmp(png_jmpbuf(png_ptr)))
+ FATAL_ERROR("Error reading from \"%s\".\n", path);
+
+ png_read_image(png_ptr, row_pointers);
+
+ png_destroy_read_struct(&png_ptr, &info_ptr, NULL);
+
+ free(row_pointers);
+ fclose(fp);
+}
+
+void SetPngPalette(png_structp png_ptr, png_infop info_ptr, struct Palette *palette)
+{
+ png_colorp colors = malloc(palette->numColors * sizeof(png_color));
+
+ if (colors == NULL)
+ FATAL_ERROR("Failed to allocate PNG palette.\n");
+
+ for (int i = 0; i < palette->numColors; i++) {
+ colors[i].red = palette->colors[i].red;
+ colors[i].green = palette->colors[i].green;
+ colors[i].blue = palette->colors[i].blue;
+ }
+
+ png_set_PLTE(png_ptr, info_ptr, colors, palette->numColors);
+
+ free(colors);
+}
+
+void WritePng(char *path, struct Image *image)
+{
+ FILE *fp = fopen(path, "wb");
+
+ if (fp == NULL)
+ FATAL_ERROR("Failed to open \"%s\" for writing.\n", path);
+
+ png_structp png_ptr = png_create_write_struct(PNG_LIBPNG_VER_STRING, NULL, NULL, NULL);
+
+ if (!png_ptr)
+ FATAL_ERROR("Failed to create PNG write struct.\n");
+
+ png_infop info_ptr = png_create_info_struct(png_ptr);
+
+ if (!info_ptr)
+ FATAL_ERROR("Failed to create PNG info struct.\n");
+
+ if (setjmp(png_jmpbuf(png_ptr)))
+ FATAL_ERROR("Failed to init I/O for writing \"%s\".\n", path);
+
+ png_init_io(png_ptr, fp);
+
+ if (setjmp(png_jmpbuf(png_ptr)))
+ FATAL_ERROR("Error writing header for \"%s\".\n", path);
+
+ int color_type = image->hasPalette ? PNG_COLOR_TYPE_PALETTE : PNG_COLOR_TYPE_GRAY;
+
+ png_set_IHDR(png_ptr, info_ptr, image->width, image->height,
+ image->bitDepth, color_type, PNG_INTERLACE_NONE,
+ PNG_COMPRESSION_TYPE_BASE, PNG_FILTER_TYPE_BASE);
+
+ if (image->hasPalette) {
+ SetPngPalette(png_ptr, info_ptr, &image->palette);
+
+ if (image->hasTransparency) {
+ png_byte trans = 0;
+ png_set_tRNS(png_ptr, info_ptr, &trans, 1, 0);
+ }
+ }
+
+ png_write_info(png_ptr, info_ptr);
+
+ png_bytepp row_pointers = malloc(image->height * sizeof(png_bytep));
+
+ if (row_pointers == NULL)
+ FATAL_ERROR("Failed to allocate row pointers.\n");
+
+ int rowbytes = png_get_rowbytes(png_ptr, info_ptr);
+
+ for (int i = 0; i < image->height; i++)
+ row_pointers[i] = (png_bytep)(image->pixels + (i * rowbytes));
+
+ if (setjmp(png_jmpbuf(png_ptr)))
+ FATAL_ERROR("Error writing \"%s\".\n", path);
+
+ png_write_image(png_ptr, row_pointers);
+
+ if (setjmp(png_jmpbuf(png_ptr)))
+ FATAL_ERROR("Error ending write of \"%s\".\n", path);
+
+ png_write_end(png_ptr, NULL);
+
+ fclose(fp);
+
+ png_destroy_write_struct(&png_ptr, &info_ptr);
+ free(row_pointers);
+}
diff --git a/tools/rsfont/convert_png.h b/tools/rsfont/convert_png.h
new file mode 100644
index 000000000..55d3d6942
--- /dev/null
+++ b/tools/rsfont/convert_png.h
@@ -0,0 +1,11 @@
+// Copyright (c) 2015 YamaArashi
+
+#ifndef CONVERT_PNG_H
+#define CONVERT_PNG_H
+
+#include "gfx.h"
+
+void ReadPng(char *path, struct Image *image);
+void WritePng(char *path, struct Image *image);
+
+#endif // CONVERT_PNG_H
diff --git a/tools/rsfont/font.c b/tools/rsfont/font.c
new file mode 100644
index 000000000..ba0e69cd2
--- /dev/null
+++ b/tools/rsfont/font.c
@@ -0,0 +1,457 @@
+// Copyright(c) 2015-2016 YamaArashi
+//
+// Permission is hereby granted, free of charge, to any person obtaining a copy
+// of this software and associated documentation files (the "Software"), to deal
+// in the Software without restriction, including without limitation the rights
+// to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
+// copies of the Software, and to permit persons to whom the Software is
+// furnished to do so, subject to the following conditions:
+//
+// The above copyright notice and this permission notice shall be included in
+// all copies or substantial portions of the Software.
+//
+// THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
+// IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
+// FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
+// AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
+// LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
+// OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN
+// THE SOFTWARE.
+
+#include <stdio.h>
+#include <stdlib.h>
+#include <stdint.h>
+#include <stdbool.h>
+#include "global.h"
+#include "font.h"
+#include "gfx.h"
+#include "util.h"
+
+unsigned char gFontPalette[][3] =
+{
+ {0xFF, 0xFF, 0xFF}, // bg (white)
+ {0x38, 0x38, 0x38}, // fg (dark grey)
+ {0xD8, 0xD8, 0xD8}, // shadow (light grey)
+};
+
+void ConvertFromTiles1Bpp(unsigned char *src, unsigned char *dest, int numGlyphs, int layout)
+{
+ for (int glyph = 0; glyph < numGlyphs; glyph++)
+ {
+ if (layout == 0)
+ {
+ for (int i = 0; i < 8; i++)
+ {
+ unsigned char srcRow = src[(glyph * 8) + i];
+
+ for (int j = 0; j < 8; j++)
+ {
+ int x = ((glyph % 16) * 8) + j;
+ int y = ((glyph / 16) * 8) + i;
+ dest[(y * 128) + x] = (srcRow >> (7 - j)) & 1;
+ }
+ }
+ }
+ else
+ {
+ // layout type 1
+
+ int tile1Offset = glyph * 16;
+ int tile2Offset = tile1Offset + 8;
+
+ for (int i = 0; i < 8; i++)
+ {
+ unsigned char srcRow = src[tile1Offset + i];
+
+ for (int j = 0; j < 8; j++)
+ {
+ int x = ((glyph % 16) * 8) + j;
+ int y = ((glyph / 16) * 16) + i;
+ dest[(y * 128) + x] = (srcRow >> (7 - j)) & 1;
+ }
+ }
+
+ for (int i = 0; i < 8; i++)
+ {
+ unsigned char srcRow = src[tile2Offset + i];
+
+ for (int j = 0; j < 8; j++)
+ {
+ int x = ((glyph % 16) * 8) + j;
+ int y = ((glyph / 16) * 16) + 8 + i;
+ dest[(y * 128) + x] = (srcRow >> (7 - j)) & 1;
+ }
+ }
+ }
+ }
+}
+
+void ConvertToTiles1Bpp(unsigned char *src, unsigned char *dest, int numGlyphs, int layout)
+{
+ for (int glyph = 0; glyph < numGlyphs; glyph++)
+ {
+ if (layout == 0)
+ {
+ for (int i = 0; i < 8; i++)
+ {
+ unsigned char destRow = 0;
+
+ for (int j = 0; j < 8; j++)
+ {
+ int x = ((glyph % 16) * 8) + j;
+ int y = ((glyph / 16) * 8) + i;
+ unsigned char color = src[(y * 128) + x];
+
+ if (color > 1)
+ FATAL_ERROR("More than 2 colors in 1 BPP font.\n");
+
+ destRow <<= 1;
+ destRow |= color;
+ }
+
+ dest[(glyph * 8) + i] = destRow;
+ }
+ }
+ else
+ {
+ // layout type 1
+
+ int tile1Offset = glyph * 16;
+ int tile2Offset = tile1Offset + 8;
+
+ for (int i = 0; i < 8; i++)
+ {
+ unsigned char destRow = 0;
+
+ for (int j = 0; j < 8; j++)
+ {
+ int x = ((glyph % 16) * 8) + j;
+ int y = ((glyph / 16) * 16) + i;
+ unsigned char color = src[(y * 128) + x];
+
+ if (color > 1)
+ FATAL_ERROR("More than 2 colors in 1 BPP font.\n");
+
+ destRow <<= 1;
+ destRow |= color;
+ }
+
+ dest[tile1Offset + i] = destRow;
+ }
+
+ for (int i = 0; i < 8; i++)
+ {
+ unsigned char destRow = 0;
+
+ for (int j = 0; j < 8; j++)
+ {
+ int x = ((glyph % 16) * 8) + j;
+ int y = ((glyph / 16) * 16) + 8 + i;
+ unsigned char color = src[(y * 128) + x];
+
+ if (color > 1)
+ FATAL_ERROR("More than 2 colors in 1 BPP font.\n");
+
+ destRow <<= 1;
+ destRow |= color;
+ }
+
+ dest[tile2Offset + i] = destRow;
+ }
+ }
+ }
+}
+
+void ConvertFromTiles4Bpp(unsigned char *src, unsigned char *dest, int numGlyphs, int layout)
+{
+ static unsigned char table[16] =
+ {
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 2, 1,
+ };
+
+ for (int glyph = 0; glyph < numGlyphs; glyph++)
+ {
+ if (layout == 0)
+ {
+ int offset = glyph * 32;
+
+ for (int i = 0; i < 8; i++)
+ {
+ unsigned long srcRow = (src[offset + 3] << 24)
+ | (src[offset + 2] << 16)
+ | (src[offset + 1] << 8)
+ | src[offset];
+
+ for (int j = 0; j < 8; j++)
+ {
+ int x = ((glyph % 16) * 8) + j;
+ int y = ((glyph / 16) * 8) + i;
+ dest[(y * 128) + x] = table[srcRow & 0xF];
+ srcRow >>= 4;
+ }
+
+ offset += 4;
+ }
+ }
+ else
+ {
+ int tile1Offset;
+ int tile2Offset;
+
+ if (layout == 1)
+ {
+ tile1Offset = glyph * 64;
+ tile2Offset = tile1Offset + 32;
+ }
+ else
+ {
+ tile1Offset = ((glyph / 16) * 1024) + ((glyph % 16) * 32);
+ tile2Offset = tile1Offset + 512;
+ }
+
+ for (int i = 0; i < 8; i++)
+ {
+ unsigned long srcRow = (src[tile1Offset + 3] << 24)
+ | (src[tile1Offset + 2] << 16)
+ | (src[tile1Offset + 1] << 8)
+ | src[tile1Offset];
+
+ for (int j = 0; j < 8; j++)
+ {
+ int x = ((glyph % 16) * 8) + j;
+ int y = ((glyph / 16) * 16) + i;
+ dest[(y * 128) + x] = table[srcRow & 0xF];
+ srcRow >>= 4;
+ }
+
+ tile1Offset += 4;
+ }
+
+ for (int i = 0; i < 8; i++)
+ {
+ unsigned long srcRow = (src[tile2Offset + 3] << 24)
+ | (src[tile2Offset + 2] << 16)
+ | (src[tile2Offset + 1] << 8)
+ | src[tile2Offset];
+
+ for (int j = 0; j < 8; j++)
+ {
+ int x = ((glyph % 16) * 8) + j;
+ int y = ((glyph / 16) * 16) + 8 + i;
+ dest[(y * 128) + x] = table[srcRow & 0xF];
+ srcRow >>= 4;
+ }
+
+ tile2Offset += 4;
+ }
+ }
+ }
+}
+
+void ConvertToTiles4Bpp(unsigned char *src, unsigned char *dest, int numGlyphs, int layout)
+{
+ static unsigned char table[3] =
+ {
+ 0, 15, 14,
+ };
+
+ for (int glyph = 0; glyph < numGlyphs; glyph++)
+ {
+ if (layout == 0)
+ {
+ int offset = glyph * 32;
+
+ for (int i = 0; i < 8; i++)
+ {
+ unsigned long destRow = 0;
+
+ for (int j = 0; j < 8; j++)
+ {
+ int x = ((glyph % 16) * 8) + j;
+ int y = ((glyph / 16) * 8) + i;
+ unsigned char color = src[(y * 128) + x];
+
+ if (color > 2)
+ FATAL_ERROR("More than 3 colors in 4 BPP font.\n");
+
+ destRow >>= 4;
+ destRow |= (table[color] << 28);
+ }
+
+ dest[offset] = destRow & 0xFF;
+ dest[offset + 1] = (destRow >> 8) & 0xFF;
+ dest[offset + 2] = (destRow >> 16) & 0xFF;
+ dest[offset + 3] = (destRow >> 24) & 0xFF;
+
+ offset += 4;
+ }
+ }
+ else
+ {
+ int tile1Offset;
+ int tile2Offset;
+
+ if (layout == 1)
+ {
+ tile1Offset = glyph * 64;
+ tile2Offset = tile1Offset + 32;
+ }
+ else
+ {
+ tile1Offset = ((glyph / 16) * 1024) + ((glyph % 16) * 32);
+ tile2Offset = tile1Offset + 512;
+ }
+
+ for (int i = 0; i < 8; i++)
+ {
+ unsigned long destRow = 0;
+
+ for (int j = 0; j < 8; j++)
+ {
+ int x = ((glyph % 16) * 8) + j;
+ int y = ((glyph / 16) * 16) + i;
+ unsigned char color = src[(y * 128) + x];
+
+ if (color > 2)
+ FATAL_ERROR("More than 3 colors in 4 BPP font.\n");
+
+ destRow >>= 4;
+ destRow |= (table[color] << 28);
+ }
+
+ dest[tile1Offset] = destRow & 0xFF;
+ dest[tile1Offset + 1] = (destRow >> 8) & 0xFF;
+ dest[tile1Offset + 2] = (destRow >> 16) & 0xFF;
+ dest[tile1Offset + 3] = (destRow >> 24) & 0xFF;
+
+ tile1Offset += 4;
+ }
+
+ for (int i = 0; i < 8; i++)
+ {
+ unsigned long destRow = 0;
+
+ for (int j = 0; j < 8; j++)
+ {
+ int x = ((glyph % 16) * 8) + j;
+ int y = ((glyph / 16) * 16) + 8 + i;
+ unsigned char color = src[(y * 128) + x];
+
+ if (color > 2)
+ FATAL_ERROR("More than 3 colors in 4 BPP font.\n");
+
+ destRow >>= 4;
+ destRow |= (table[color] << 28);
+ }
+
+ dest[tile2Offset] = destRow & 0xFF;
+ dest[tile2Offset + 1] = (destRow >> 8) & 0xFF;
+ dest[tile2Offset + 2] = (destRow >> 16) & 0xFF;
+ dest[tile2Offset + 3] = (destRow >> 24) & 0xFF;
+
+ tile2Offset += 4;
+ }
+ }
+ }
+}
+
+static void SetFontPalette(struct Image *image)
+{
+ image->hasPalette = true;
+
+ image->palette.numColors = 3;
+
+ for (int i = 0; i < image->palette.numColors; i++)
+ {
+ image->palette.colors[i].red = gFontPalette[i][0];
+ image->palette.colors[i].green = gFontPalette[i][1];
+ image->palette.colors[i].blue = gFontPalette[i][2];
+ }
+
+ image->hasTransparency = false;
+}
+
+int CalcFileSize(int numGlyphs, int bpp, int layout)
+{
+ if (layout == 2)
+ {
+ // assume 4 BPP
+ int numFullRows = numGlyphs / 16;
+ int remainder = numGlyphs % 16;
+ int fullRowsSize = numFullRows * 1024;
+ int remainderSize = 0;
+
+ if (remainder != 0)
+ remainderSize = 1024 - (16 - remainder) * 32;
+
+ return fullRowsSize + remainderSize;
+ }
+ else
+ {
+ int tilesPerGlyph = layout > 0 ? 2 : 1;
+ int bytesPerTile = 8 * bpp;
+ return numGlyphs * tilesPerGlyph * bytesPerTile;
+ }
+}
+
+void ReadFont(char *path, struct Image *image, int numGlyphs, int bpp, int layout)
+{
+ int fileSize;
+ unsigned char *buffer = ReadWholeFile(path, &fileSize);
+
+ int tilesPerGlyph = layout > 0 ? 2 : 1;
+
+ int expectedFileSize = CalcFileSize(numGlyphs, bpp, layout);
+
+ if (fileSize != expectedFileSize)
+ FATAL_ERROR("The file size is %d but should be %d.\n", fileSize, expectedFileSize);
+
+ int numRows = (numGlyphs + 15) / 16;
+ int rowHeight = layout > 0 ? 16 : 8;
+
+ image->width = 128;
+ image->height = numRows * rowHeight;
+ image->bitDepth = 8;
+ image->pixels = calloc(image->width * image->height, 1);
+
+ if (image->pixels == NULL)
+ FATAL_ERROR("Failed to allocate memory for font.\n");
+
+ if (bpp == 1)
+ ConvertFromTiles1Bpp(buffer, image->pixels, numGlyphs, layout);
+ else
+ ConvertFromTiles4Bpp(buffer, image->pixels, numGlyphs, layout);
+
+ free(buffer);
+
+ SetFontPalette(image);
+}
+
+void WriteFont(char *path, struct Image *image, int numGlyphs, int bpp, int layout)
+{
+ if (image->width != 128)
+ FATAL_ERROR("The width of the font image (%d) is not 128.\n", image->width);
+
+ int numRows = (numGlyphs + 15) / 16;
+ int rowHeight = layout > 0 ? 16 : 8;
+ int expectedHeight = numRows * rowHeight;
+
+ if (image->height < expectedHeight)
+ FATAL_ERROR("The height of the font image (%d) is less than %d.\n", image->height, expectedHeight);
+
+ int fileSize = CalcFileSize(numGlyphs, bpp, layout);
+
+ unsigned char *buffer = calloc(fileSize, 1);
+
+ if (buffer == NULL)
+ FATAL_ERROR("Failed to allocate memory for font.\n");
+
+ if (bpp == 1)
+ ConvertToTiles1Bpp(image->pixels, buffer, numGlyphs, layout);
+ else
+ ConvertToTiles4Bpp(image->pixels, buffer, numGlyphs, layout);
+
+ WriteWholeFile(path, buffer, fileSize);
+
+ free(buffer);
+}
diff --git a/tools/rsfont/font.h b/tools/rsfont/font.h
new file mode 100644
index 000000000..1cd48757f
--- /dev/null
+++ b/tools/rsfont/font.h
@@ -0,0 +1,30 @@
+// Copyright(c) 2015-2016 YamaArashi
+//
+// Permission is hereby granted, free of charge, to any person obtaining a copy
+// of this software and associated documentation files (the "Software"), to deal
+// in the Software without restriction, including without limitation the rights
+// to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
+// copies of the Software, and to permit persons to whom the Software is
+// furnished to do so, subject to the following conditions:
+//
+// The above copyright notice and this permission notice shall be included in
+// all copies or substantial portions of the Software.
+//
+// THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
+// IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
+// FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
+// AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
+// LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
+// OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN
+// THE SOFTWARE.
+
+#ifndef FONT_H
+#define FONT_H
+
+#include <stdbool.h>
+#include "gfx.h"
+
+void ReadFont(char *path, struct Image *image, int numGlyphs, int bpp, int layout);
+void WriteFont(char *path, struct Image *image, int numGlyphs, int bpp, int layout);
+
+#endif // FONT_H
diff --git a/tools/rsfont/gfx.h b/tools/rsfont/gfx.h
new file mode 100644
index 000000000..04a3d80c7
--- /dev/null
+++ b/tools/rsfont/gfx.h
@@ -0,0 +1,50 @@
+// Copyright(c) 2015-2016 YamaArashi
+//
+// Permission is hereby granted, free of charge, to any person obtaining a copy
+// of this software and associated documentation files (the "Software"), to deal
+// in the Software without restriction, including without limitation the rights
+// to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
+// copies of the Software, and to permit persons to whom the Software is
+// furnished to do so, subject to the following conditions:
+//
+// The above copyright notice and this permission notice shall be included in
+// all copies or substantial portions of the Software.
+//
+// THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
+// IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
+// FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
+// AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
+// LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
+// OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN
+// THE SOFTWARE.
+
+#ifndef GFX_H
+#define GFX_H
+
+#include <stdint.h>
+#include <stdbool.h>
+
+struct Color
+{
+ unsigned char red;
+ unsigned char green;
+ unsigned char blue;
+};
+
+struct Palette
+{
+ struct Color colors[256];
+ int numColors;
+};
+
+struct Image {
+ int width;
+ int height;
+ int bitDepth;
+ unsigned char *pixels;
+ bool hasPalette;
+ struct Palette palette;
+ bool hasTransparency;
+};
+
+#endif // GFX_H
diff --git a/tools/rsfont/global.h b/tools/rsfont/global.h
new file mode 100644
index 000000000..65dd351d2
--- /dev/null
+++ b/tools/rsfont/global.h
@@ -0,0 +1,31 @@
+// Copyright (c) 2015 YamaArashi
+
+#ifndef GLOBAL_H
+#define GLOBAL_H
+
+#include <stdio.h>
+#include <stdlib.h>
+
+#ifdef _MSC_VER
+
+#define FATAL_ERROR(format, ...) \
+do { \
+ fprintf(stderr, format, __VA_ARGS__); \
+ exit(1); \
+} while (0)
+
+#define UNUSED
+
+#else
+
+#define FATAL_ERROR(format, ...) \
+do { \
+ fprintf(stderr, format, ##__VA_ARGS__); \
+ exit(1); \
+} while (0)
+
+#define UNUSED __attribute__((__unused__))
+
+#endif // _MSC_VER
+
+#endif // GLOBAL_H
diff --git a/tools/rsfont/main.c b/tools/rsfont/main.c
new file mode 100644
index 000000000..2f5d9d971
--- /dev/null
+++ b/tools/rsfont/main.c
@@ -0,0 +1,93 @@
+// Copyright(c) 2015-2016 YamaArashi
+//
+// Permission is hereby granted, free of charge, to any person obtaining a copy
+// of this software and associated documentation files (the "Software"), to deal
+// in the Software without restriction, including without limitation the rights
+// to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
+// copies of the Software, and to permit persons to whom the Software is
+// furnished to do so, subject to the following conditions:
+//
+// The above copyright notice and this permission notice shall be included in
+// all copies or substantial portions of the Software.
+//
+// THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
+// IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
+// FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
+// AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
+// LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
+// OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN
+// THE SOFTWARE.
+
+#include <stdio.h>
+#include <string.h>
+#include <stdbool.h>
+#include "global.h"
+#include "util.h"
+#include "gfx.h"
+#include "convert_png.h"
+#include "font.h"
+
+int ExtensionToBpp(const char *extension)
+{
+ if (!strcmp(extension, "1bpp"))
+ return 1;
+ else if (!strcmp(extension, "4bpp"))
+ return 4;
+ return 0;
+}
+
+int main(int argc, char **argv)
+{
+ if (argc < 5)
+ FATAL_ERROR("Usage: rsfont INPUT_FILE OUTPUT_FILE NUM_GLYPHS LAYOUT_TYPE\n");
+
+ char *inputPath = argv[1];
+ char *outputPath = argv[2];
+ char *inputFileExtension = GetFileExtension(inputPath);
+ char *outputFileExtension = GetFileExtension(outputPath);
+
+ if (inputFileExtension == NULL)
+ FATAL_ERROR("Input file \"%s\" has no extension.\n", inputPath);
+
+ if (outputFileExtension == NULL)
+ FATAL_ERROR("Output file \"%s\" has no extension.\n", outputPath);
+
+ int numGlyphs;
+ int bpp;
+ int layout;
+
+ if (!ParseNumber(argv[3], NULL, 10, &numGlyphs))
+ FATAL_ERROR("Failed to parse number of glyphs.\n");
+
+ if (!ParseNumber(argv[4], NULL, 10, &layout))
+ FATAL_ERROR("Failed to parse layout type.\n");
+
+ if (layout < 0 || layout > 2)
+ FATAL_ERROR("Layout type %d is invalid. Layout type must be 0, 1, or 2.\n", layout);
+
+ bool toPng;
+
+ if (!strcmp(inputFileExtension, "png") && (bpp = ExtensionToBpp(outputFileExtension)) != 0)
+ toPng = false;
+ else if ((bpp = ExtensionToBpp(inputFileExtension)) != 0 && !strcmp(outputFileExtension, "png"))
+ toPng = true;
+ else
+ FATAL_ERROR("Don't know how to convert \"%s\" to \"%s\".\n", inputPath, outputPath);
+
+ if (bpp == 1 && layout == 2)
+ FATAL_ERROR("Layout type 2 is not supported with 1 BPP fonts.\n");
+
+ struct Image image;
+
+ if (toPng)
+ {
+ ReadFont(inputPath, &image, numGlyphs, bpp, layout);
+ WritePng(outputPath, &image);
+ }
+ else
+ {
+ image.bitDepth = 8;
+ ReadPng(inputPath, &image);
+ WriteFont(outputPath, &image, numGlyphs, bpp, layout);
+ }
+}
diff --git a/tools/rsfont/util.c b/tools/rsfont/util.c
new file mode 100644
index 000000000..87abeb31c
--- /dev/null
+++ b/tools/rsfont/util.c
@@ -0,0 +1,124 @@
+// Copyright (c) 2015 YamaArashi
+
+#include <stdio.h>
+#include <stdlib.h>
+#include <string.h>
+#include <stdbool.h>
+#include <errno.h>
+#include <limits.h>
+#include "global.h"
+#include "util.h"
+
+bool ParseNumber(char *s, char **end, int radix, int *intValue)
+{
+ char *localEnd;
+
+ if (end == NULL)
+ end = &localEnd;
+
+ errno = 0;
+
+ const long longValue = strtol(s, end, radix);
+
+ if (*end == s)
+ return false; // not a number
+
+ if ((longValue == LONG_MIN || longValue == LONG_MAX) && errno == ERANGE)
+ return false;
+
+ if (longValue > INT_MAX)
+ return false;
+
+ if (longValue < INT_MIN)
+ return false;
+
+ *intValue = (int)longValue;
+
+ return true;
+}
+
+char *GetFileExtension(char *path)
+{
+ char *extension = path;
+
+ while (*extension != 0)
+ extension++;
+
+ while (extension > path && *extension != '.')
+ extension--;
+
+ if (extension == path)
+ return NULL;
+
+ extension++;
+
+ if (*extension == 0)
+ return NULL;
+
+ return extension;
+}
+
+unsigned char *ReadWholeFile(char *path, int *size)
+{
+ FILE *fp = fopen(path, "rb");
+
+ if (fp == NULL)
+ FATAL_ERROR("Failed to open \"%s\" for reading.\n", path);
+
+ fseek(fp, 0, SEEK_END);
+
+ *size = ftell(fp);
+
+ unsigned char *buffer = malloc(*size);
+
+ if (buffer == NULL)
+ FATAL_ERROR("Failed to allocate memory for reading \"%s\".\n", path);
+
+ rewind(fp);
+
+ if (fread(buffer, *size, 1, fp) != 1)
+ FATAL_ERROR("Failed to read \"%s\".\n", path);
+
+ fclose(fp);
+
+ return buffer;
+}
+
+unsigned char *ReadWholeFileZeroPadded(char *path, int *size, int padAmount)
+{
+ FILE *fp = fopen(path, "rb");
+
+ if (fp == NULL)
+ FATAL_ERROR("Failed to open \"%s\" for reading.\n", path);
+
+ fseek(fp, 0, SEEK_END);
+
+ *size = ftell(fp);
+
+ unsigned char *buffer = calloc(*size + padAmount, 1);
+
+ if (buffer == NULL)
+ FATAL_ERROR("Failed to allocate memory for reading \"%s\".\n", path);
+
+ rewind(fp);
+
+ if (fread(buffer, *size, 1, fp) != 1)
+ FATAL_ERROR("Failed to read \"%s\".\n", path);
+
+ fclose(fp);
+
+ return buffer;
+}
+
+void WriteWholeFile(char *path, void *buffer, int bufferSize)
+{
+ FILE *fp = fopen(path, "wb");
+
+ if (fp == NULL)
+ FATAL_ERROR("Failed to open \"%s\" for writing.\n", path);
+
+ if (fwrite(buffer, bufferSize, 1, fp) != 1)
+ FATAL_ERROR("Failed to write to \"%s\".\n", path);
+
+ fclose(fp);
+}
diff --git a/tools/rsfont/util.h b/tools/rsfont/util.h
new file mode 100644
index 000000000..6d7a9c21e
--- /dev/null
+++ b/tools/rsfont/util.h
@@ -0,0 +1,14 @@
+// Copyright (c) 2015 YamaArashi
+
+#ifndef UTIL_H
+#define UTIL_H
+
+#include <stdbool.h>
+
+bool ParseNumber(char *s, char **end, int radix, int *intValue);
+char *GetFileExtension(char *path);
+unsigned char *ReadWholeFile(char *path, int *size);
+unsigned char *ReadWholeFileZeroPadded(char *path, int *size, int padAmount);
+void WriteWholeFile(char *path, void *buffer, int bufferSize);
+
+#endif // UTIL_H