diff options
60 files changed, 6877 insertions, 9596 deletions
@@ -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 Binary files differnew file mode 100644 index 000000000..4138a9a45 --- /dev/null +++ b/graphics/fonts/down_arrow.png diff --git a/graphics/fonts/font0_jpn.png b/graphics/fonts/font0_jpn.png Binary files differnew file mode 100644 index 000000000..b837984ec --- /dev/null +++ b/graphics/fonts/font0_jpn.png diff --git a/graphics/fonts/font0_lat.png b/graphics/fonts/font0_lat.png Binary files differnew file mode 100644 index 000000000..6d65a80ad --- /dev/null +++ b/graphics/fonts/font0_lat.png diff --git a/graphics/fonts/font1_jpn.png b/graphics/fonts/font1_jpn.png Binary files differnew file mode 100644 index 000000000..5f5916504 --- /dev/null +++ b/graphics/fonts/font1_jpn.png diff --git a/graphics/fonts/font1_lat.png b/graphics/fonts/font1_lat.png Binary files differnew file mode 100644 index 000000000..8e6510cdb --- /dev/null +++ b/graphics/fonts/font1_lat.png diff --git a/graphics/fonts/font3_jpn.png b/graphics/fonts/font3_jpn.png Binary files differnew file mode 100644 index 000000000..83c6b87ca --- /dev/null +++ b/graphics/fonts/font3_jpn.png diff --git a/graphics/fonts/font3_lat.png b/graphics/fonts/font3_lat.png Binary files differnew file mode 100644 index 000000000..b1606aef6 --- /dev/null +++ b/graphics/fonts/font3_lat.png diff --git a/graphics/fonts/font4_jpn.png b/graphics/fonts/font4_jpn.png Binary files differnew file mode 100644 index 000000000..e37f55c6b --- /dev/null +++ b/graphics/fonts/font4_jpn.png diff --git a/graphics/fonts/font4_lat.png b/graphics/fonts/font4_lat.png Binary files differnew file mode 100644 index 000000000..18ac15081 --- /dev/null +++ b/graphics/fonts/font4_lat.png diff --git a/graphics/fonts/font6_braille.png b/graphics/fonts/font6_braille.png Binary files differnew file mode 100644 index 000000000..0fc2bddba --- /dev/null +++ b/graphics/fonts/font6_braille.png 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); @@ -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[] = +{ + ®_BG0CNT, + ®_BG1CNT, + ®_BG2CNT, + ®_BG3CNT, +}; + +vu16 * const gBGHorizontalOffsetRegs[] = +{ + ®_BG0HOFS, + ®_BG1HOFS, + ®_BG2HOFS, + ®_BG3HOFS, +}; + +vu16 * const gBGVerticalOffsetRegs[] = +{ + ®_BG0VOFS, + ®_BG1VOFS, + ®_BG2VOFS, + ®_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 |