From 6987dd9a210fd0b3b29163c1a51cc9671a65ac2f Mon Sep 17 00:00:00 2001 From: DizzyEggg Date: Fri, 1 Sep 2017 19:01:58 +0200 Subject: [PATCH] decompile text window --- asm/text_window.s | 686 ---------------------------------------------- ld_script.txt | 2 +- src/text_window.c | 133 +++++++++ 3 files changed, 134 insertions(+), 687 deletions(-) delete mode 100644 asm/text_window.s create mode 100644 src/text_window.c diff --git a/asm/text_window.s b/asm/text_window.s deleted file mode 100644 index 737c0018d..000000000 --- a/asm/text_window.s +++ /dev/null @@ -1,686 +0,0 @@ - .include "asm/macros.inc" - .include "constants/constants.inc" - - .syntax unified - - .text - - thumb_func_start sub_8098758 -sub_8098758: @ 8098758 - push {lr} - lsls r0, 24 - lsrs r0, 24 - cmp r0, 0x13 - bhi _08098770 - lsls r0, 3 - ldr r1, =gUnknown_0851021C - adds r0, r1 - b _08098772 - .pool -_08098770: - ldr r0, =gUnknown_0851021C -_08098772: - pop {r1} - bx r1 - .pool - thumb_func_end sub_8098758 - - thumb_func_start copy_textbox_border_tile_patterns_to_vram -@ void copy_textbox_border_tile_patterns_to_vram(u8 rbox_id, u16 tile_pattern_dest_offset, u8 pal_dest_offset) -copy_textbox_border_tile_patterns_to_vram: @ 809877C - push {r4,r5,lr} - adds r4, r1, 0 - adds r5, r2, 0 - lsls r0, 24 - lsrs r0, 24 - lsls r4, 16 - lsrs r4, 16 - lsls r5, 24 - lsrs r5, 24 - movs r1, 0 - bl GetWindowAttribute - lsls r0, 24 - lsrs r0, 24 - ldr r1, =gUnknown_08DDD748 - movs r2, 0xE0 - lsls r2, 1 - adds r3, r4, 0 - bl LoadBgTiles - bl sub_8098C64 - adds r1, r5, 0 - movs r2, 0x20 - bl LoadPalette - pop {r4,r5} - pop {r0} - bx r0 - .pool - thumb_func_end copy_textbox_border_tile_patterns_to_vram - - thumb_func_start box_border_load_tiles_and_pal -box_border_load_tiles_and_pal: @ 80987BC - push {lr} - lsls r0, 24 - lsrs r0, 24 - lsls r1, 16 - lsrs r1, 16 - lsls r2, 24 - lsrs r2, 24 - bl sub_809882C - pop {r0} - bx r0 - thumb_func_end box_border_load_tiles_and_pal - - thumb_func_start sub_80987D4 -sub_80987D4: @ 80987D4 - push {r4-r6,lr} - mov r6, r8 - push {r6} - adds r4, r1, 0 - adds r6, r2, 0 - mov r8, r3 - lsls r0, 24 - lsrs r0, 24 - lsls r4, 24 - lsrs r4, 24 - lsls r6, 16 - lsrs r6, 16 - mov r1, r8 - lsls r1, 24 - lsrs r1, 24 - mov r8, r1 - movs r1, 0 - bl GetWindowAttribute - lsls r0, 24 - lsrs r0, 24 - ldr r5, =gUnknown_0851021C - lsls r4, 3 - adds r1, r4, r5 - ldr r1, [r1] - movs r2, 0x90 - lsls r2, 1 - adds r3, r6, 0 - bl LoadBgTiles - adds r5, 0x4 - adds r4, r5 - ldr r0, [r4] - mov r1, r8 - movs r2, 0x20 - bl LoadPalette - pop {r3} - mov r8, r3 - pop {r4-r6} - pop {r0} - bx r0 - .pool - thumb_func_end sub_80987D4 - - thumb_func_start sub_809882C -sub_809882C: @ 809882C - push {r4,lr} - adds r4, r1, 0 - adds r3, r2, 0 - lsls r0, 24 - lsrs r0, 24 - lsls r4, 16 - lsrs r4, 16 - lsls r3, 24 - lsrs r3, 24 - ldr r1, =gSaveBlock2Ptr - ldr r1, [r1] - ldrb r1, [r1, 0x14] - lsrs r1, 3 - adds r2, r4, 0 - bl sub_80987D4 - pop {r4} - pop {r0} - bx r0 - .pool - thumb_func_end sub_809882C - - thumb_func_start sub_8098858 -sub_8098858: @ 8098858 - push {r4-r7,lr} - mov r7, r10 - mov r6, r9 - mov r5, r8 - push {r5-r7} - sub sp, 0x20 - adds r4, r0, 0 - adds r5, r1, 0 - lsls r4, 24 - lsrs r4, 24 - lsls r5, 16 - lsrs r5, 16 - lsls r2, 24 - lsrs r2, 24 - str r2, [sp, 0xC] - adds r0, r4, 0 - movs r1, 0 - bl GetWindowAttribute - lsls r0, 24 - lsrs r7, r0, 24 - adds r0, r4, 0 - movs r1, 0x1 - bl GetWindowAttribute - mov r8, r0 - lsls r0, 16 - lsrs r0, 16 - mov r8, r0 - adds r0, r4, 0 - movs r1, 0x2 - bl GetWindowAttribute - adds r6, r0, 0 - lsls r6, 16 - lsrs r6, 16 - adds r0, r4, 0 - movs r1, 0x3 - bl GetWindowAttribute - mov r9, r0 - mov r2, r9 - lsls r2, 16 - lsrs r2, 16 - mov r9, r2 - adds r0, r4, 0 - movs r1, 0x4 - bl GetWindowAttribute - lsls r0, 16 - lsrs r0, 16 - str r0, [sp, 0x10] - mov r0, r8 - subs r0, 0x1 - lsls r2, r0, 24 - lsrs r2, 24 - str r2, [sp, 0x14] - subs r4, r6, 0x1 - lsls r4, 24 - lsrs r4, 24 - movs r0, 0x1 - mov r10, r0 - str r0, [sp] - str r0, [sp, 0x4] - ldr r2, [sp, 0xC] - str r2, [sp, 0x8] - adds r0, r7, 0 - adds r1, r5, 0 - ldr r2, [sp, 0x14] - adds r3, r4, 0 - bl FillBgTilemapBufferRect - adds r1, r5, 0x1 - lsls r1, 16 - lsrs r1, 16 - mov r0, r8 - lsls r2, r0, 24 - lsrs r2, 24 - str r2, [sp, 0x18] - mov r2, r9 - lsls r0, r2, 24 - lsrs r0, 24 - str r0, [sp, 0x1C] - str r0, [sp] - mov r0, r10 - str r0, [sp, 0x4] - ldr r2, [sp, 0xC] - str r2, [sp, 0x8] - adds r0, r7, 0 - ldr r2, [sp, 0x18] - adds r3, r4, 0 - bl FillBgTilemapBufferRect - adds r1, r5, 0x2 - lsls r1, 16 - lsrs r1, 16 - add r8, r9 - mov r0, r8 - lsls r0, 24 - lsrs r0, 24 - mov r8, r0 - mov r2, r10 - str r2, [sp] - str r2, [sp, 0x4] - ldr r0, [sp, 0xC] - str r0, [sp, 0x8] - adds r0, r7, 0 - mov r2, r8 - adds r3, r4, 0 - bl FillBgTilemapBufferRect - adds r1, r5, 0x3 - lsls r1, 16 - lsrs r1, 16 - lsls r2, r6, 24 - lsrs r2, 24 - mov r9, r2 - mov r0, r10 - str r0, [sp] - ldr r2, [sp, 0x10] - lsls r4, r2, 24 - lsrs r4, 24 - str r4, [sp, 0x4] - ldr r0, [sp, 0xC] - str r0, [sp, 0x8] - adds r0, r7, 0 - ldr r2, [sp, 0x14] - mov r3, r9 - bl FillBgTilemapBufferRect - adds r1, r5, 0x5 - lsls r1, 16 - lsrs r1, 16 - mov r2, r10 - str r2, [sp] - str r4, [sp, 0x4] - ldr r0, [sp, 0xC] - str r0, [sp, 0x8] - adds r0, r7, 0 - mov r2, r8 - mov r3, r9 - bl FillBgTilemapBufferRect - adds r1, r5, 0x6 - lsls r1, 16 - lsrs r1, 16 - ldr r2, [sp, 0x10] - adds r6, r2 - lsls r6, 24 - lsrs r6, 24 - mov r0, r10 - str r0, [sp] - str r0, [sp, 0x4] - ldr r2, [sp, 0xC] - str r2, [sp, 0x8] - adds r0, r7, 0 - ldr r2, [sp, 0x14] - adds r3, r6, 0 - bl FillBgTilemapBufferRect - adds r1, r5, 0x7 - lsls r1, 16 - lsrs r1, 16 - ldr r0, [sp, 0x1C] - str r0, [sp] - mov r2, r10 - str r2, [sp, 0x4] - ldr r0, [sp, 0xC] - str r0, [sp, 0x8] - adds r0, r7, 0 - ldr r2, [sp, 0x18] - adds r3, r6, 0 - bl FillBgTilemapBufferRect - adds r5, 0x8 - lsls r5, 16 - lsrs r5, 16 - mov r2, r10 - str r2, [sp] - str r2, [sp, 0x4] - ldr r0, [sp, 0xC] - str r0, [sp, 0x8] - adds r0, r7, 0 - adds r1, r5, 0 - mov r2, r8 - adds r3, r6, 0 - bl FillBgTilemapBufferRect - add sp, 0x20 - pop {r3-r5} - mov r8, r3 - mov r9, r4 - mov r10, r5 - pop {r4-r7} - pop {r0} - bx r0 - thumb_func_end sub_8098858 - - thumb_func_start sub_80989E0 -sub_80989E0: @ 80989E0 - push {r4-r7,lr} - mov r7, r10 - mov r6, r9 - mov r5, r8 - push {r5-r7} - sub sp, 0x1C - adds r4, r0, 0 - mov r9, r1 - lsls r4, 24 - lsrs r4, 24 - mov r0, r9 - lsls r0, 16 - lsrs r0, 16 - mov r9, r0 - lsls r2, 24 - lsrs r2, 24 - mov r10, r2 - adds r0, r4, 0 - movs r1, 0 - bl GetWindowAttribute - lsls r0, 24 - lsrs r7, r0, 24 - adds r0, r4, 0 - movs r1, 0x1 - bl GetWindowAttribute - mov r8, r0 - lsls r0, 16 - lsrs r0, 16 - mov r8, r0 - adds r0, r4, 0 - movs r1, 0x2 - bl GetWindowAttribute - adds r6, r0, 0 - lsls r6, 16 - lsrs r6, 16 - adds r0, r4, 0 - movs r1, 0x3 - bl GetWindowAttribute - adds r5, r0, 0 - lsls r5, 16 - lsrs r5, 16 - adds r0, r4, 0 - movs r1, 0x4 - bl GetWindowAttribute - lsls r0, 16 - lsrs r0, 16 - str r0, [sp, 0xC] - mov r0, r8 - lsls r2, r0, 24 - lsrs r2, 24 - str r2, [sp, 0x10] - lsls r4, r6, 24 - lsrs r4, 24 - movs r0, 0x1 - str r0, [sp] - str r0, [sp, 0x4] - mov r0, r10 - str r0, [sp, 0x8] - adds r0, r7, 0 - mov r1, r9 - adds r3, r4, 0 - bl FillBgTilemapBufferRect - mov r1, r9 - adds r1, 0x1 - lsls r1, 16 - lsrs r1, 16 - mov r0, r8 - adds r0, 0x1 - lsls r2, r0, 24 - lsrs r2, 24 - str r2, [sp, 0x14] - subs r0, r5, 0x2 - lsls r0, 24 - lsrs r0, 24 - str r0, [sp, 0x18] - str r0, [sp] - movs r0, 0x1 - str r0, [sp, 0x4] - mov r0, r10 - str r0, [sp, 0x8] - adds r0, r7, 0 - adds r3, r4, 0 - bl FillBgTilemapBufferRect - mov r1, r9 - adds r1, 0x2 - lsls r1, 16 - lsrs r1, 16 - add r8, r5 - movs r0, 0x1 - negs r0, r0 - add r8, r0 - mov r0, r8 - lsls r0, 24 - lsrs r0, 24 - mov r8, r0 - movs r0, 0x1 - str r0, [sp] - str r0, [sp, 0x4] - mov r0, r10 - str r0, [sp, 0x8] - adds r0, r7, 0 - mov r2, r8 - adds r3, r4, 0 - bl FillBgTilemapBufferRect - mov r1, r9 - adds r1, 0x3 - lsls r1, 16 - lsrs r1, 16 - adds r5, r6, 0x1 - lsls r5, 24 - lsrs r5, 24 - movs r0, 0x1 - str r0, [sp] - ldr r4, [sp, 0xC] - subs r4, 0x2 - lsls r4, 24 - lsrs r4, 24 - str r4, [sp, 0x4] - mov r0, r10 - str r0, [sp, 0x8] - adds r0, r7, 0 - ldr r2, [sp, 0x10] - adds r3, r5, 0 - bl FillBgTilemapBufferRect - mov r1, r9 - adds r1, 0x5 - lsls r1, 16 - lsrs r1, 16 - movs r0, 0x1 - str r0, [sp] - str r4, [sp, 0x4] - mov r0, r10 - str r0, [sp, 0x8] - adds r0, r7, 0 - mov r2, r8 - adds r3, r5, 0 - bl FillBgTilemapBufferRect - mov r1, r9 - adds r1, 0x6 - lsls r1, 16 - lsrs r1, 16 - ldr r0, [sp, 0xC] - adds r6, r0 - subs r6, 0x1 - lsls r6, 24 - lsrs r6, 24 - movs r0, 0x1 - str r0, [sp] - str r0, [sp, 0x4] - mov r0, r10 - str r0, [sp, 0x8] - adds r0, r7, 0 - ldr r2, [sp, 0x10] - adds r3, r6, 0 - bl FillBgTilemapBufferRect - mov r1, r9 - adds r1, 0x7 - lsls r1, 16 - lsrs r1, 16 - ldr r0, [sp, 0x18] - str r0, [sp] - movs r0, 0x1 - str r0, [sp, 0x4] - mov r0, r10 - str r0, [sp, 0x8] - adds r0, r7, 0 - ldr r2, [sp, 0x14] - adds r3, r6, 0 - bl FillBgTilemapBufferRect - movs r0, 0x8 - add r9, r0 - mov r0, r9 - lsls r0, 16 - lsrs r0, 16 - mov r9, r0 - movs r0, 0x1 - str r0, [sp] - str r0, [sp, 0x4] - mov r0, r10 - str r0, [sp, 0x8] - adds r0, r7, 0 - mov r1, r9 - mov r2, r8 - adds r3, r6, 0 - bl FillBgTilemapBufferRect - add sp, 0x1C - pop {r3-r5} - mov r8, r3 - mov r9, r4 - mov r10, r5 - pop {r4-r7} - pop {r0} - bx r0 - thumb_func_end sub_80989E0 - - thumb_func_start rbox_fill_rectangle -rbox_fill_rectangle: @ 8098B7C - push {r4-r6,lr} - mov r6, r9 - mov r5, r8 - push {r5,r6} - sub sp, 0xC - adds r6, r0, 0 - lsls r6, 24 - lsrs r6, 24 - adds r0, r6, 0 - movs r1, 0 - bl GetWindowAttribute - mov r9, r0 - lsls r0, 24 - lsrs r0, 24 - mov r9, r0 - adds r0, r6, 0 - movs r1, 0x1 - bl GetWindowAttribute - mov r8, r0 - mov r1, r8 - lsls r1, 16 - lsrs r1, 16 - mov r8, r1 - adds r0, r6, 0 - movs r1, 0x2 - bl GetWindowAttribute - adds r5, r0, 0 - lsls r5, 16 - lsrs r5, 16 - adds r0, r6, 0 - movs r1, 0x3 - bl GetWindowAttribute - adds r4, r0, 0 - lsls r4, 16 - lsrs r4, 16 - adds r0, r6, 0 - movs r1, 0x4 - bl GetWindowAttribute - movs r1, 0x1 - negs r1, r1 - add r8, r1 - mov r1, r8 - lsls r1, 24 - lsrs r1, 24 - mov r8, r1 - subs r5, 0x1 - lsls r5, 24 - lsrs r5, 24 - adds r4, 0x2 - lsls r4, 24 - lsrs r4, 24 - str r4, [sp] - lsls r0, 24 - movs r1, 0x80 - lsls r1, 18 - adds r0, r1 - lsrs r0, 24 - str r0, [sp, 0x4] - movs r0, 0x11 - str r0, [sp, 0x8] - mov r0, r9 - movs r1, 0 - mov r2, r8 - adds r3, r5, 0 - bl FillBgTilemapBufferRect - add sp, 0xC - pop {r3,r4} - mov r8, r3 - mov r9, r4 - pop {r4-r6} - pop {r0} - bx r0 - thumb_func_end rbox_fill_rectangle - - thumb_func_start stdpal_get -stdpal_get: @ 8098C18 - push {lr} - lsls r0, 24 - lsrs r0, 24 - cmp r0, 0x4 - bhi _08098C54 - lsls r0, 2 - ldr r1, =_08098C30 - adds r0, r1 - ldr r0, [r0] - mov pc, r0 - .pool - .align 2, 0 -_08098C30: - .4byte _08098C44 - .4byte _08098C48 - .4byte _08098C4C - .4byte _08098C50 - .4byte _08098C54 -_08098C44: - movs r0, 0 - b _08098C56 -_08098C48: - movs r0, 0x10 - b _08098C56 -_08098C4C: - movs r0, 0x20 - b _08098C56 -_08098C50: - movs r0, 0x30 - b _08098C56 -_08098C54: - movs r0, 0x40 -_08098C56: - lsls r0, 1 - ldr r1, =gUnknown_0851017C - adds r0, r1 - pop {r1} - bx r1 - .pool - thumb_func_end stdpal_get - - thumb_func_start sub_8098C64 -sub_8098C64: @ 8098C64 - ldr r0, =gUnknown_08DDD728 - bx lr - .pool - thumb_func_end sub_8098C64 - - thumb_func_start sub_8098C6C -sub_8098C6C: @ 8098C6C - push {r4,r5,lr} - adds r3, r1, 0 - adds r4, r2, 0 - lsls r0, 24 - lsrs r0, 24 - lsls r3, 16 - lsrs r3, 16 - lsls r4, 24 - lsrs r4, 24 - ldr r2, =gUnknown_0851021C - ldr r5, =gSaveBlock2Ptr - ldr r1, [r5] - ldrb r1, [r1, 0x14] - lsrs r1, 3 - lsls r1, 3 - adds r1, r2 - ldr r1, [r1] - movs r2, 0x90 - lsls r2, 1 - bl LoadBgTiles - ldr r0, [r5] - ldrb r0, [r0, 0x14] - lsrs r0, 3 - bl sub_8098758 - ldr r0, [r0, 0x4] - adds r1, r4, 0 - movs r2, 0x20 - bl LoadPalette - pop {r4,r5} - pop {r0} - bx r0 - .pool - thumb_func_end sub_8098C6C - - .align 2, 0 @ Don't pad with nop. diff --git a/ld_script.txt b/ld_script.txt index 75547e82b..ebcf65711 100644 --- a/ld_script.txt +++ b/ld_script.txt @@ -86,7 +86,7 @@ SECTIONS { asm/map_obj_8097404.o(.text); asm/field_message_box.o(.text); asm/map_obj_lock.o(.text); - asm/text_window.o(.text); + src/text_window.o(.text); asm/script.o(.text); asm/scrcmd.o(.text); asm/field_control_avatar.o(.text); diff --git a/src/text_window.c b/src/text_window.c new file mode 100644 index 000000000..356e1f339 --- /dev/null +++ b/src/text_window.c @@ -0,0 +1,133 @@ +#include "global.h" +#include "text.h" +#include "window.h" +#include "palette.h" + +extern u8 LoadBgTiles(u8 bg, const void *src, u16 size, u16 destOffset); +extern void FillBgTilemapBufferRect(u8 bg, u16 tileNum, u8 x, u8 y, u8 width, u8 height, u8 palette); + +struct TilesPal +{ + u32* tiles; + u16* pal; +}; + +extern const struct TilesPal gUnknown_0851021C[]; +extern const u32 gUnknown_08DDD748[]; +extern const u16 gUnknown_0851017C[]; +extern const u16 gUnknown_08DDD728[]; + +const u16* sub_8098C64(void); +void sub_809882C(u8 windowId, u16 destOffset, u8 palOffset); + +const struct TilesPal* sub_8098758(u8 id) +{ + if (id > 19) + return &gUnknown_0851021C[0]; + else + return &gUnknown_0851021C[id]; +} + +void copy_textbox_border_tile_patterns_to_vram(u8 windowId, u16 destOffset, u8 palOffset) +{ + LoadBgTiles(GetWindowAttribute(windowId, WINDOW_PRIORITY), gUnknown_08DDD748, 0x1C0, destOffset); + LoadPalette(sub_8098C64(), palOffset, 0x20); +} + +void box_border_load_tiles_and_pal(u8 windowId, u16 destOffset, u8 palOffset) +{ + sub_809882C(windowId, destOffset, palOffset); +} + +void sub_80987D4(u8 windowId, u8 frameId, u16 destOffset, u8 palOffset) +{ + LoadBgTiles(GetWindowAttribute(windowId, WINDOW_PRIORITY), gUnknown_0851021C[frameId].tiles, 0x120, destOffset); + LoadPalette(gUnknown_0851021C[frameId].pal, palOffset, 0x20); +} + +void sub_809882C(u8 windowId, u16 destOffset, u8 palOffset) +{ + sub_80987D4(windowId, gSaveBlock2Ptr->optionsWindowFrameType, destOffset, palOffset); +} + +void sub_8098858(u8 windowId, u16 tileNum, u8 palNum) +{ + u8 bgLayer = GetWindowAttribute(windowId, WINDOW_PRIORITY); + u16 tilemapLeft = GetWindowAttribute(windowId, WINDOW_TILEMAP_LEFT); + u16 tilemapTop = GetWindowAttribute(windowId, WINDOW_TILEMAP_TOP); + u16 width = GetWindowAttribute(windowId, WINDOW_WIDTH); + u16 height = GetWindowAttribute(windowId, WINDOW_HEIGHT); + + FillBgTilemapBufferRect(bgLayer, tileNum + 0, tilemapLeft - 1, tilemapTop - 1, 1, 1, palNum); + FillBgTilemapBufferRect(bgLayer, tileNum + 1, tilemapLeft, tilemapTop - 1, width, 1, palNum); + FillBgTilemapBufferRect(bgLayer, tileNum + 2, tilemapLeft + width, tilemapTop - 1, 1, 1, palNum); + FillBgTilemapBufferRect(bgLayer, tileNum + 3, tilemapLeft - 1, tilemapTop, 1, height, palNum); + FillBgTilemapBufferRect(bgLayer, tileNum + 5, tilemapLeft + width, tilemapTop, 1, height, palNum); + FillBgTilemapBufferRect(bgLayer, tileNum + 6, tilemapLeft - 1, tilemapTop + height, 1, 1, palNum); + FillBgTilemapBufferRect(bgLayer, tileNum + 7, tilemapLeft, tilemapTop + height, width, 1, palNum); + FillBgTilemapBufferRect(bgLayer, tileNum + 8, tilemapLeft + width, tilemapTop + height, 1, 1, palNum); +} + +void sub_80989E0(u8 windowId, u16 tileNum, u8 palNum) +{ + u8 bgLayer = GetWindowAttribute(windowId, WINDOW_PRIORITY); + u16 tilemapLeft = GetWindowAttribute(windowId, WINDOW_TILEMAP_LEFT); + u16 tilemapTop = GetWindowAttribute(windowId, WINDOW_TILEMAP_TOP); + u16 width = GetWindowAttribute(windowId, WINDOW_WIDTH); + u16 height = GetWindowAttribute(windowId, WINDOW_HEIGHT); + + FillBgTilemapBufferRect(bgLayer, tileNum + 0, tilemapLeft, tilemapTop, 1, 1, palNum); + FillBgTilemapBufferRect(bgLayer, tileNum + 1, tilemapLeft + 1, tilemapTop, width - 2, 1, palNum); + FillBgTilemapBufferRect(bgLayer, tileNum + 2, tilemapLeft + width - 1, tilemapTop, 1, 1, palNum); + FillBgTilemapBufferRect(bgLayer, tileNum + 3, tilemapLeft, tilemapTop + 1, 1, height - 2, palNum); + FillBgTilemapBufferRect(bgLayer, tileNum + 5, tilemapLeft + width - 1, tilemapTop + 1, 1, height - 2, palNum); + FillBgTilemapBufferRect(bgLayer, tileNum + 6, tilemapLeft, tilemapTop + height - 1, 1, 1, palNum); + FillBgTilemapBufferRect(bgLayer, tileNum + 7, tilemapLeft + 1, tilemapTop + height - 1, width - 2, 1, palNum); + FillBgTilemapBufferRect(bgLayer, tileNum + 8, tilemapLeft + width - 1, tilemapTop + height - 1, 1, 1, palNum); +} + +void rbox_fill_rectangle(u8 windowId) +{ + u8 bgLayer = GetWindowAttribute(windowId, WINDOW_PRIORITY); + u16 tilemapLeft = GetWindowAttribute(windowId, WINDOW_TILEMAP_LEFT); + u16 tilemapTop = GetWindowAttribute(windowId, WINDOW_TILEMAP_TOP); + u16 width = GetWindowAttribute(windowId, WINDOW_WIDTH); + u16 height = GetWindowAttribute(windowId, WINDOW_HEIGHT); + + FillBgTilemapBufferRect(bgLayer, 0, tilemapLeft - 1, tilemapTop - 1, width + 2, height + 2, 0x11); +} + +const u16* stdpal_get(u8 id) +{ + switch (id) + { + case 0: + id = 0; + break; + case 1: + id = 0x10; + break; + case 2: + id = 0x20; + break; + case 3: + id = 0x30; + break; + case 4: + default: + id = 0x40; + break; + } + return &gUnknown_0851017C[id]; +} + +const u16* sub_8098C64(void) +{ + return gUnknown_08DDD728; +} + +void sub_8098C6C(u8 bg, u16 destOffset, u8 palOffset) +{ + LoadBgTiles(bg, gUnknown_0851021C[gSaveBlock2Ptr->optionsWindowFrameType].tiles, 0x120, destOffset); + LoadPalette(sub_8098758(gSaveBlock2Ptr->optionsWindowFrameType)->pal, palOffset, 0x20); +}