From 7f6977e268d8adbb83fae7a64ad90165368da878 Mon Sep 17 00:00:00 2001 From: cecilarmitais Date: Mon, 17 Aug 2026 03:51:32 -0700 Subject: [PATCH] Decomp ten window accessors, including UpdateWindow and ClearWindow Decompile from asm: sub_02027624 0x02027624 ClearWindow 0x02027B58 UpdateWindow 0x02027AF0 sub_0202825C 0x0202825C sub_02027B1C 0x02027B1C sub_02028270 0x02028270 sub_020282C8 0x020282C8 sub_020282F4 0x020282F4 sub_0202830C 0x0202830C sub_02028324 0x02028324 Four bss symbols these functions index at stride 0xE0 are aliases into WINDOW_LIST[0], not separate objects: _022A88E4 is +0x8, _022A88F0 is +0x14, _022A88F8 is +0x1C and _022A8994 is +0xB8. The block from WINDOW_LIST to the end of _022A8994 measures 0xB8 + 0x10C8 = 0x1180 = 20 * 0xE0, and every one of those boundaries falls on a field boundary of the Window layout added earlier. That is independent corroboration of the layout, from the linker rather than from the struct definition. Five of the ten do not reach score 0 on a scratch, and are landed anyway. Their instructions all match; the only difference is the literal-pool word, which the target names _022A8994 where C indexing WINDOW_LIST emits WINDOW_LIST+0xb8. Same address, same relocation target, identical bytes once linked -- the scratch diff compares symbol names, at a flat 5 per word, so ClearWindow and sub_02027B1C report 10 and the three single-literal ones report 5. The matching build is what settles it. Which literal appears is decided by whether the index is constant. A constant offset keeps the base symbol in the pool and puts the offset in the instruction; a variable index folds the offset into the pool word because the index has to be scaled separately. That rule cost a build here: NewWindowScreenCheck stores to _022A7A6C at #8 and #0xa, and rewriting those two lines as _022A7A74[0] and [1] to remove an apparent duplicate changed the pool word and failed main.sbin, with no compile error and no overlay cascade. It is reverted, and both declarations are kept, because the target keeps both. sub_020282C8 writes width*8 and height*8 through an out parameter. It reuses Point rather than adding a second two-s32 struct; the layout is identical and the type already exists, but a size is not a coordinate, so read that as structural reuse and not as a claim about meaning. Two prototypes in the tree contradicted the ones landing here and are replaced with includes: overlay_31_02382820.c declared UpdateWindow itself, and overlay_31_02383880.c declared sub_020282F4 taking s8. Both objects are rebuilt to confirm the retyping is byte-neutral rather than assumed. Two more are left alone and are worth a later pass. overlay_13_0238BDA8.c declares UpdateWindow and sub_02027B1C taking s8, and overlay_25_init.c declares both taking char *; the second is a genuine mistyping, since the value it passes is a window id, but correcting it means retyping ov25_0238B414's own parameter and its callers, which is a larger change than this batch. The s8 declaration in overlay_13 carries an upstream annotation identifying sub_02027B1C, which is worth keeping in place rather than deleting to make a byte-neutral edit. No comments are added to any pmd-sky file. Authored by Claude (Opus 5) under human direction. Confirmed by a matching build with both overlay_31 objects rebuilt: build/pmdsky.us/pmdsky.us.nds: OK. Co-Authored-By: Claude Opus 5 --- asm/include/main_0202760C.inc | 1 - asm/include/main_02027AA0.inc | 17 - asm/include/main_02027B88.inc | 17 + asm/include/main_020282C8.inc | 4 - asm/main_0202760C.s | 14 - asm/main_02027AA0.s | 590 ---------------------------------- asm/main_02027B88.s | 521 ++++++++++++++++++++++++++++++ asm/main_020282C8.s | 53 --- include/main_02027648.h | 1 + include/main_02027AF0.h | 8 + include/main_02028284.h | 4 + include/main_020282F4.h | 8 + include/window.h | 1 + main.lsf | 4 +- src/main_02027648.c | 7 + src/main_02027AF0.c | 26 ++ src/main_02028284.c | 18 ++ src/main_020282F4.c | 17 + src/overlay_31_02382820.c | 2 +- src/overlay_31_02383880.c | 2 +- 20 files changed, 633 insertions(+), 682 deletions(-) create mode 100644 asm/include/main_02027B88.inc delete mode 100644 asm/include/main_020282C8.inc create mode 100644 asm/main_02027B88.s delete mode 100644 asm/main_020282C8.s create mode 100644 include/main_02027AF0.h create mode 100644 include/main_020282F4.h create mode 100644 src/main_02027AF0.c create mode 100644 src/main_020282F4.c diff --git a/asm/include/main_0202760C.inc b/asm/include/main_0202760C.inc index 4ead5556..71f3ae9f 100644 --- a/asm/include/main_0202760C.inc +++ b/asm/include/main_0202760C.inc @@ -1,4 +1,3 @@ #pragma once -.public WINDOW_LIST .public _022A88F0 .public _022A88FC diff --git a/asm/include/main_02027AA0.inc b/asm/include/main_02027AA0.inc index f78d9864..94a3c8e2 100644 --- a/asm/include/main_02027AA0.inc +++ b/asm/include/main_02027AA0.inc @@ -1,21 +1,4 @@ #pragma once -.public InitWindowTrailer -.public MemFree -.public WINDOW_LIST -.public _0209AC64 -.public _0209ACAC .public _020AFD4C .public _020AFD94 -.public _020AFD98 .public _020AFD9C -.public _022A7A6C -.public _022A7A74 -.public _022A7AE4 -.public _022A88E4 -.public _022A88F0 -.public _022A88F8 -.public _022A8992 -.public memset -.public sub_0200B3FC -.public sub_02027974 -.public sub_0202836C diff --git a/asm/include/main_02027B88.inc b/asm/include/main_02027B88.inc new file mode 100644 index 00000000..405eb334 --- /dev/null +++ b/asm/include/main_02027B88.inc @@ -0,0 +1,17 @@ +#pragma once +.public InitWindowTrailer +.public MemFree +.public UpdateWindow +.public WINDOW_LIST +.public _0209AC64 +.public _0209ACAC +.public _020AFD4C +.public _020AFD98 +.public _022A7A6C +.public _022A7A74 +.public _022A7AE4 +.public _022A88E4 +.public _022A8992 +.public sub_0200B3FC +.public sub_02027974 +.public sub_0202836C diff --git a/asm/include/main_020282C8.inc b/asm/include/main_020282C8.inc deleted file mode 100644 index c7e0fc86..00000000 --- a/asm/include/main_020282C8.inc +++ /dev/null @@ -1,4 +0,0 @@ -#pragma once -.public WINDOW_LIST -.public _022A88E4 -.public _022A8994 diff --git a/asm/main_0202760C.s b/asm/main_0202760C.s index 24474f97..bb4e95d0 100644 --- a/asm/main_0202760C.s +++ b/asm/main_0202760C.s @@ -30,17 +30,3 @@ sub_0202796C_JP: ; 0x0202796C _02027980: .word _022A88F0 arm_func_end sub_0202796C_JP #endif - - arm_func_start sub_02027624 -sub_02027624: ; 0x02027624 - ldr r2, _02027644 ; =WINDOW_LIST - mov r1, #0xe0 - mla r2, r0, r1, r2 - ldrb r1, [r2, #6] - ldrb r0, [r2, #7] - smulbb r0, r1, r0 - mov r0, r0, lsl #5 - bx lr - .align 2, 0 -_02027644: .word WINDOW_LIST - arm_func_end sub_02027624 diff --git a/asm/main_02027AA0.s b/asm/main_02027AA0.s index 22746859..12dd3990 100644 --- a/asm/main_02027AA0.s +++ b/asm/main_02027AA0.s @@ -35,593 +35,3 @@ _02027AE4: .word _020AFD4C _02027AE8: .word _020AFD9C _02027AEC: .word _020AFD94 arm_func_end sub_02027AA0 - - arm_func_start UpdateWindow -UpdateWindow: ; 0x02027AF0 - ldr r2, _02027B18 ; =WINDOW_LIST - mov r1, #0xe0 - mla r1, r0, r1, r2 - ldr r0, [r1, #0x14] - str r0, [r1, #0x24] - ldr r0, [r1, #0x18] - str r0, [r1, #0x28] - ldr r0, [r1, #0x1c] - str r0, [r1, #0x2c] - bx lr - .align 2, 0 -_02027B18: .word WINDOW_LIST - arm_func_end UpdateWindow - - arm_func_start sub_02027B1C -sub_02027B1C: ; 0x02027B1C - stmdb sp!, {r4, lr} - mov r4, r0 - mov r0, #0xe0 - mul r2, r4, r0 - ldr r0, _02027B50 ; =_022A88F0 - ldr r1, _02027B54 ; =_022A88F8 - ldr r0, [r0, r2] - ldr r2, [r1, r2] - mov r1, #0 - bl memset - mov r0, r4 - bl UpdateWindow - ldmia sp!, {r4, pc} - .align 2, 0 -_02027B50: .word _022A88F0 -_02027B54: .word _022A88F8 - arm_func_end sub_02027B1C - - arm_func_start ClearWindow -ClearWindow: ; 0x02027B58 - mov r1, #0xe0 - mul r2, r0, r1 - ldr r0, _02027B7C ; =_022A88F0 - ldr r1, _02027B80 ; =_022A88F8 - ldr r0, [r0, r2] - ldr r2, [r1, r2] - ldr ip, _02027B84 ; =memset - mov r1, #0 - bx ip - .align 2, 0 -_02027B7C: .word _022A88F0 -_02027B80: .word _022A88F8 -_02027B84: .word memset - arm_func_end ClearWindow - - arm_func_start sub_02027B88 -sub_02027B88: ; 0x02027B88 - stmdb sp!, {r4, r5, r6, r7, r8, sb, sl, lr} - sub sp, sp, #8 - ldr r0, _02027E14 ; =_022A7A6C -#ifdef JAPAN - ldrsb r2, [r0, #1] -#else - ldrsb r2, [r0, #3] -#endif - b _02027E00 -_02027B9C: - ldr r1, _02027E18 ; =WINDOW_LIST - mov r0, #0xe0 - mla r4, r2, r0, r1 - ldrb r0, [r4, #8] - cmp r0, #1 - ldreqsb r0, [r4, #0xb6] - cmpeq r0, #2 - bne _02027DFC - ldrsb r1, [r4, #9] - ldr r0, _02027E1C ; =_0209AC64 - rsb r1, r1, #0 - mov r1, r1, lsl #1 - ldrsb r0, [r0, r1] - cmp r0, #0 - bne _02027DF0 - ldr r0, _02027E20 ; =_020AFD98 - ldrb r1, [r4, #4] - ldrb r3, [r0, #1] - ldr r2, _02027E24 ; =_0209ACAC - sub r6, r1, #1 - ldrb r2, [r2, r3] - ldrb r0, [r4, #5] - add r1, sp, #0 - mov r5, r2, lsl #0xc - sub r3, r0, #1 - orr r0, r5, #2 - mov r2, r0, lsl #0x10 - ldr r0, _02027E28 ; =_022A7AE4 - str r6, [sp] - mov r2, r2, lsr #0x10 - str r3, [sp, #4] - bl sub_0200B3FC - ldr r1, [sp] - orr r0, r5, #3 - add r1, r1, #1 - mov r0, r0, lsl #0x10 - str r1, [sp] - mov r6, r0, lsr #0x10 - ldr r8, _02027E28 ; =_022A7AE4 - add r7, sp, #0 - b _02027C5C -_02027C40: - mov r0, r8 - mov r1, r7 - mov r2, r6 - bl sub_0200B3FC - ldr r0, [sp] - add r0, r0, #1 - str r0, [sp] -_02027C5C: - ldrb r1, [r4, #4] - ldrb r0, [r4, #6] - ldr r2, [sp] - add r0, r1, r0 - cmp r2, r0 - blt _02027C40 - orr r0, r5, #4 - mov r2, r0, lsl #0x10 - ldr r0, _02027E28 ; =_022A7AE4 - add r1, sp, #0 - mov r2, r2, lsr #0x10 - bl sub_0200B3FC - ldr r0, [sp, #4] - orr r1, r5, #5 - add r0, r0, #1 - str r0, [sp, #4] - orr r0, r5, #1 - orr r2, r5, #6 - mov r0, r0, lsl #0x10 - mov r1, r1, lsl #0x10 - mov r2, r2, lsl #0x10 - mov r7, r0, lsr #0x10 - mov r8, r1, lsr #0x10 - mov r6, r2, lsr #0x10 - ldr sl, _02027E28 ; =_022A7AE4 - add sb, sp, #0 - b _02027D44 -_02027CC8: - ldrb r2, [r4, #4] - mov r0, sl - mov r1, sb - sub r3, r2, #1 - mov r2, r8 - str r3, [sp] - bl sub_0200B3FC - ldr r0, [sp] - add r0, r0, #1 - str r0, [sp] - b _02027D10 -_02027CF4: - mov r0, sl - mov r1, sb - mov r2, r7 - bl sub_0200B3FC - ldr r0, [sp] - add r0, r0, #1 - str r0, [sp] -_02027D10: - ldrb r1, [r4, #4] - ldrb r0, [r4, #6] - ldr r2, [sp] - add r0, r1, r0 - cmp r2, r0 - blt _02027CF4 - mov r0, sl - mov r1, sb - mov r2, r6 - bl sub_0200B3FC - ldr r0, [sp, #4] - add r0, r0, #1 - str r0, [sp, #4] -_02027D44: - ldrb r1, [r4, #5] - ldrb r0, [r4, #7] - ldr r2, [sp, #4] - add r0, r1, r0 - cmp r2, r0 - blt _02027CC8 - ldrb r1, [r4, #4] - orr r0, r5, #7 - mov r2, r0, lsl #0x10 - sub r3, r1, #1 - ldr r0, _02027E28 ; =_022A7AE4 - add r1, sp, #0 - str r3, [sp] - mov r2, r2, lsr #0x10 - bl sub_0200B3FC - ldr r1, [sp] - orr r0, r5, #8 - add r1, r1, #1 - mov r0, r0, lsl #0x10 - str r1, [sp] - mov r6, r0, lsr #0x10 - ldr r8, _02027E28 ; =_022A7AE4 - add r7, sp, #0 - b _02027DC0 -_02027DA4: - mov r0, r8 - mov r1, r7 - mov r2, r6 - bl sub_0200B3FC - ldr r0, [sp] - add r0, r0, #1 - str r0, [sp] -_02027DC0: - ldrb r1, [r4, #4] - ldrb r0, [r4, #6] - ldr r2, [sp] - add r0, r1, r0 - cmp r2, r0 - blt _02027DA4 - orr r0, r5, #9 - mov r2, r0, lsl #0x10 - ldr r0, _02027E28 ; =_022A7AE4 - add r1, sp, #0 - mov r2, r2, lsr #0x10 - bl sub_0200B3FC -_02027DF0: - ldr r0, _02027E2C ; =_020AFD4C - mov r1, #1 -#ifdef JAPAN - strb r1, [r0] -#else - strb r1, [r0, #3] -#endif -_02027DFC: - ldrsb r2, [r4, #0xb5] -_02027E00: - mvn r0, #1 - cmp r2, r0 - bne _02027B9C - add sp, sp, #8 - ldmia sp!, {r4, r5, r6, r7, r8, sb, sl, pc} - .align 2, 0 -_02027E14: .word _022A7A6C -_02027E18: .word WINDOW_LIST -_02027E1C: .word _0209AC64 -_02027E20: .word _020AFD98 -_02027E24: .word _0209ACAC -_02027E28: .word _022A7AE4 -_02027E2C: .word _020AFD4C - arm_func_end sub_02027B88 - - arm_func_start sub_02027E30 -sub_02027E30: ; 0x02027E30 - stmdb sp!, {r3, r4, r5, r6, r7, lr} - sub sp, sp, #8 - ldr r3, _02028070 ; =WINDOW_LIST - mov r2, #0xe0 - mla r7, r0, r2, r3 - ldrsb r0, [r7, #9] - ldr r2, _02028074 ; =_0209AC64 - cmp r1, #0 - rsb r0, r0, #0 - add r4, r2, r0, lsl #1 - movne r0, #2 - moveq r0, #3 - strb r0, [r7, #0xb6] - ldrb r0, [r7, #8] - cmp r0, #1 - bne _02027F34 - cmp r1, #0 - bne _02027F20 - ldrsb r1, [r7, #0x10] - ldr r2, _02028070 ; =WINDOW_LIST - mov r0, #0xe0 - mla r0, r1, r0, r2 - add r0, r0, #0xbc - bl InitWindowTrailer - ldrsb r0, [r4] - cmp r0, #0 - blt _02027F20 - ldrb r0, [r7, #5] - ldr r6, _02028078 ; =_022A7AE4 - add r5, sp, #0 - sub r0, r0, #1 - str r0, [sp, #4] - mov r4, #0 - b _02027F08 -_02027EB8: - ldrb r0, [r7, #4] - sub r0, r0, #1 - str r0, [sp] - b _02027EE4 -_02027EC8: - mov r0, r6 - mov r1, r5 - mov r2, r4 - bl sub_0200B3FC - ldr r0, [sp] - add r0, r0, #1 - str r0, [sp] -_02027EE4: - ldrb r1, [r7, #4] - ldrb r0, [r7, #6] - ldr r2, [sp] - add r0, r1, r0 - cmp r2, r0 - ble _02027EC8 - ldr r0, [sp, #4] - add r0, r0, #1 - str r0, [sp, #4] -_02027F08: - ldrb r1, [r7, #5] - ldrb r0, [r7, #7] - ldr r2, [sp, #4] - add r0, r1, r0 - cmp r2, r0 - ble _02027EB8 -_02027F20: - bl sub_02027B88 - ldr r0, _0202807C ; =_020AFD4C - mov r1, #1 -#ifdef JAPAN - strb r1, [r0] -#else - strb r1, [r0, #3] -#endif - b _02028064 -_02027F34: - cmp r1, #0 - beq _0202801C - ldrb r1, [r7, #4] - mvn r0, #3 - mov r1, r1, lsl #3 - strh r1, [r7, #0x34] - ldrb r1, [r7, #5] - mov r1, r1, lsl #3 - strh r1, [r7, #0x36] - ldrb r1, [r7, #6] - mov r1, r1, lsl #3 - strh r1, [r7, #0x38] - ldrb r1, [r7, #7] - mov r1, r1, lsl #3 - strh r1, [r7, #0x3a] - ldrh r1, [r7, #0x34] - strh r1, [r7, #0x74] - ldrh r1, [r7, #0x36] - strh r1, [r7, #0x76] - ldrh r1, [r7, #0x38] - strh r1, [r7, #0x78] - ldrh r1, [r7, #0x3a] - strh r1, [r7, #0x7a] - ldrsh r1, [r7, #0x74] - sub r1, r1, #8 - strh r1, [r7, #0x74] - ldrsh r1, [r7, #0x76] - sub r1, r1, #8 - strh r1, [r7, #0x76] - ldrsh r1, [r7, #0x78] - add r1, r1, #0x10 - strh r1, [r7, #0x78] - ldrsh r1, [r7, #0x7a] - add r1, r1, #0x10 - strh r1, [r7, #0x7a] - ldrsb r1, [r7, #9] - cmp r1, r0 - beq _02027FFC - ldrsh r0, [r7, #0x34] - sub r0, r0, #1 - strh r0, [r7, #0x34] - ldrsh r0, [r7, #0x36] - sub r0, r0, #2 - strh r0, [r7, #0x36] - ldrsh r0, [r7, #0x38] - add r0, r0, #2 - strh r0, [r7, #0x38] - ldrsh r0, [r7, #0x3a] - add r0, r0, #6 - strh r0, [r7, #0x3a] -_02027FFC: - ldr r0, _0202807C ; =_020AFD4C - ldrb r0, [r0, #1] - cmp r0, #0 - movne r0, #0x90 - strneb r0, [r7, #0x63] - moveq r0, #0xff - streqb r0, [r7, #0x63] - b _02028064 -_0202801C: - ldrsb r1, [r7, #0x10] - ldr r2, _02028070 ; =WINDOW_LIST - mov r0, #0xe0 - mla r0, r1, r0, r2 - add r0, r0, #0xbc - bl InitWindowTrailer - mov r0, #0 - strh r0, [r7, #0x3a] - strh r0, [r7, #0x38] - strh r0, [r7, #0x36] - strh r0, [r7, #0x34] - strh r0, [r7, #0x74] - ldrh r0, [r7, #0x36] - strh r0, [r7, #0x76] - ldrh r0, [r7, #0x38] - strh r0, [r7, #0x78] - ldrh r0, [r7, #0x3a] - strh r0, [r7, #0x7a] -_02028064: - mov r0, #1 - add sp, sp, #8 - ldmia sp!, {r3, r4, r5, r6, r7, pc} - .align 2, 0 -_02028070: .word WINDOW_LIST -_02028074: .word _0209AC64 -_02028078: .word _022A7AE4 -_0202807C: .word _020AFD4C - arm_func_end sub_02027E30 - - arm_func_start sub_02028080 -sub_02028080: ; 0x02028080 - stmdb sp!, {r4, lr} - ldr r3, _020280B8 ; =WINDOW_LIST - mov r2, #0xe0 - mla r4, r0, r2, r3 - strb r1, [r4, #9] - ldrsb r0, [r4, #0x10] - bl UpdateWindow - ldr r0, _020280BC ; =_020AFD4C - ldrb r1, [r4, #8] - ldr r3, [r0, #8] - mov r2, #1 - orr r1, r3, r2, lsl r1 - str r1, [r0, #8] - ldmia sp!, {r4, pc} - .align 2, 0 -_020280B8: .word WINDOW_LIST -_020280BC: .word _020AFD4C - arm_func_end sub_02028080 - - arm_func_start sub_020280C0 -sub_020280C0: ; 0x020280C0 - stmdb sp!, {r3, r4, r5, lr} - mov r4, r1 - mov r1, #1 - mov r5, r0 - bl sub_02027E30 - cmp r4, #0 - ldmeqia sp!, {r3, r4, r5, pc} - mov r1, #0xe0 - mul r3, r5, r1 - ldr r2, _02028104 ; =_022A88E4 - ldr r1, _02028108 ; =_020AFD4C - ldrb r2, [r2, r3] - ldr ip, [r1, #8] - mov r3, #1 - orr r2, ip, r3, lsl r2 - str r2, [r1, #8] - ldmia sp!, {r3, r4, r5, pc} - .align 2, 0 -_02028104: .word _022A88E4 -_02028108: .word _020AFD4C - arm_func_end sub_020280C0 - - arm_func_start sub_0202810C -sub_0202810C: ; 0x0202810C - ldr ip, _02028118 ; =sub_020280C0 - mov r1, #1 - bx ip - .align 2, 0 -_02028118: .word sub_020280C0 - arm_func_end sub_0202810C - - arm_func_start sub_0202811C -sub_0202811C: ; 0x0202811C - ldr ip, _02028128 ; =sub_02027E30 - mov r1, #1 - bx ip - .align 2, 0 -_02028128: .word sub_02027E30 - arm_func_end sub_0202811C - - arm_func_start sub_0202812C -sub_0202812C: ; 0x0202812C - stmdb sp!, {r4, r5, r6, lr} - mov r6, r0 - mov r1, #0xe0 - mul r5, r6, r1 - ldr r1, _02028188 ; =_022A8992 - ldrsb r1, [r1, r5] - cmp r1, #3 - moveq r0, #1 - ldmeqia sp!, {r4, r5, r6, pc} - mov r1, #0 - bl sub_02027E30 - mov r4, r0 - mov r0, r6 - bl sub_0202836C - ldr r0, _0202818C ; =_022A88E4 - ldr r1, _02028190 ; =_020AFD4C - ldrb r0, [r0, r5] - ldr r3, [r1, #8] - mov r2, #1 - orr r2, r3, r2, lsl r0 - mov r0, r4 - str r2, [r1, #8] - ldmia sp!, {r4, r5, r6, pc} - .align 2, 0 -_02028188: .word _022A8992 -_0202818C: .word _022A88E4 -_02028190: .word _020AFD4C - arm_func_end sub_0202812C - - arm_func_start DeleteWindow -DeleteWindow: ; 0x02028194 - stmdb sp!, {r3, r4, r5, lr} - ldr r2, _02028224 ; =WINDOW_LIST - mov r1, #0xe0 - mla r4, r0, r1, r2 - bl sub_0202812C - ldrb r5, [r4, #8] - ldr lr, _02028224 ; =WINDOW_LIST - mov ip, #1 - mov r3, #0 -_020281B8: - cmp lr, r4 - ldrnesb r0, [lr, #0xb6] - cmpne r0, #0 - beq _020281EC - ldrb r0, [lr, #8] - cmp r5, r0 - bne _020281EC - ldrh r2, [lr, #0x12] - ldrb r1, [lr, #6] - ldrb r0, [lr, #7] - mla r0, r1, r0, r2 - cmp ip, r0 - movlt ip, r0 -_020281EC: - add r3, r3, #1 - cmp r3, #0x14 - add lr, lr, #0xe0 - blt _020281B8 - ldr r0, [r4, #0x14] - ldr r1, _02028228 ; =_022A7A74 - mov r2, r5, lsl #1 - strh ip, [r1, r2] - bl MemFree - ldrsb r0, [r4, #0x10] - bl sub_02027974 - mov r0, #0 - strb r0, [r4, #0xb6] - ldmia sp!, {r3, r4, r5, pc} - .align 2, 0 -_02028224: .word WINDOW_LIST -_02028228: .word _022A7A74 - arm_func_end DeleteWindow - - arm_func_start sub_0202822C -sub_0202822C: ; 0x0202822C - stmdb sp!, {r4, lr} - ldr r2, _02028258 ; =WINDOW_LIST - mov r1, #0xe0 - mla r4, r0, r1, r2 - ldr r0, [r4, #0x14] - bl MemFree - ldrsb r0, [r4, #0x10] - bl sub_02027974 - mov r0, #0 - strb r0, [r4, #0xb6] - ldmia sp!, {r4, pc} - .align 2, 0 -_02028258: .word WINDOW_LIST - arm_func_end sub_0202822C - - arm_func_start sub_0202825C -sub_0202825C: ; 0x0202825C - ldr r2, _0202826C ; =_022A7A74 - mov r0, r0, lsl #1 - strh r1, [r2, r0] - bx lr - .align 2, 0 -_0202826C: .word _022A7A74 - arm_func_end sub_0202825C - - arm_func_start sub_02028270 -sub_02028270: ; 0x02028270 - ldr r1, _02028280 ; =_022A7A74 - mov r0, r0, lsl #1 - ldrh r0, [r1, r0] - bx lr - .align 2, 0 -_02028280: .word _022A7A74 - arm_func_end sub_02028270 diff --git a/asm/main_02027B88.s b/asm/main_02027B88.s new file mode 100644 index 00000000..c90487d7 --- /dev/null +++ b/asm/main_02027B88.s @@ -0,0 +1,521 @@ + .include "asm/macros.inc" + .include "main_02027B88.inc" + + .text + + arm_func_start sub_02027B88 +sub_02027B88: ; 0x02027B88 + stmdb sp!, {r4, r5, r6, r7, r8, sb, sl, lr} + sub sp, sp, #8 + ldr r0, _02027E14 ; =_022A7A6C +#ifdef JAPAN + ldrsb r2, [r0, #1] +#else + ldrsb r2, [r0, #3] +#endif + b _02027E00 +_02027B9C: + ldr r1, _02027E18 ; =WINDOW_LIST + mov r0, #0xe0 + mla r4, r2, r0, r1 + ldrb r0, [r4, #8] + cmp r0, #1 + ldreqsb r0, [r4, #0xb6] + cmpeq r0, #2 + bne _02027DFC + ldrsb r1, [r4, #9] + ldr r0, _02027E1C ; =_0209AC64 + rsb r1, r1, #0 + mov r1, r1, lsl #1 + ldrsb r0, [r0, r1] + cmp r0, #0 + bne _02027DF0 + ldr r0, _02027E20 ; =_020AFD98 + ldrb r1, [r4, #4] + ldrb r3, [r0, #1] + ldr r2, _02027E24 ; =_0209ACAC + sub r6, r1, #1 + ldrb r2, [r2, r3] + ldrb r0, [r4, #5] + add r1, sp, #0 + mov r5, r2, lsl #0xc + sub r3, r0, #1 + orr r0, r5, #2 + mov r2, r0, lsl #0x10 + ldr r0, _02027E28 ; =_022A7AE4 + str r6, [sp] + mov r2, r2, lsr #0x10 + str r3, [sp, #4] + bl sub_0200B3FC + ldr r1, [sp] + orr r0, r5, #3 + add r1, r1, #1 + mov r0, r0, lsl #0x10 + str r1, [sp] + mov r6, r0, lsr #0x10 + ldr r8, _02027E28 ; =_022A7AE4 + add r7, sp, #0 + b _02027C5C +_02027C40: + mov r0, r8 + mov r1, r7 + mov r2, r6 + bl sub_0200B3FC + ldr r0, [sp] + add r0, r0, #1 + str r0, [sp] +_02027C5C: + ldrb r1, [r4, #4] + ldrb r0, [r4, #6] + ldr r2, [sp] + add r0, r1, r0 + cmp r2, r0 + blt _02027C40 + orr r0, r5, #4 + mov r2, r0, lsl #0x10 + ldr r0, _02027E28 ; =_022A7AE4 + add r1, sp, #0 + mov r2, r2, lsr #0x10 + bl sub_0200B3FC + ldr r0, [sp, #4] + orr r1, r5, #5 + add r0, r0, #1 + str r0, [sp, #4] + orr r0, r5, #1 + orr r2, r5, #6 + mov r0, r0, lsl #0x10 + mov r1, r1, lsl #0x10 + mov r2, r2, lsl #0x10 + mov r7, r0, lsr #0x10 + mov r8, r1, lsr #0x10 + mov r6, r2, lsr #0x10 + ldr sl, _02027E28 ; =_022A7AE4 + add sb, sp, #0 + b _02027D44 +_02027CC8: + ldrb r2, [r4, #4] + mov r0, sl + mov r1, sb + sub r3, r2, #1 + mov r2, r8 + str r3, [sp] + bl sub_0200B3FC + ldr r0, [sp] + add r0, r0, #1 + str r0, [sp] + b _02027D10 +_02027CF4: + mov r0, sl + mov r1, sb + mov r2, r7 + bl sub_0200B3FC + ldr r0, [sp] + add r0, r0, #1 + str r0, [sp] +_02027D10: + ldrb r1, [r4, #4] + ldrb r0, [r4, #6] + ldr r2, [sp] + add r0, r1, r0 + cmp r2, r0 + blt _02027CF4 + mov r0, sl + mov r1, sb + mov r2, r6 + bl sub_0200B3FC + ldr r0, [sp, #4] + add r0, r0, #1 + str r0, [sp, #4] +_02027D44: + ldrb r1, [r4, #5] + ldrb r0, [r4, #7] + ldr r2, [sp, #4] + add r0, r1, r0 + cmp r2, r0 + blt _02027CC8 + ldrb r1, [r4, #4] + orr r0, r5, #7 + mov r2, r0, lsl #0x10 + sub r3, r1, #1 + ldr r0, _02027E28 ; =_022A7AE4 + add r1, sp, #0 + str r3, [sp] + mov r2, r2, lsr #0x10 + bl sub_0200B3FC + ldr r1, [sp] + orr r0, r5, #8 + add r1, r1, #1 + mov r0, r0, lsl #0x10 + str r1, [sp] + mov r6, r0, lsr #0x10 + ldr r8, _02027E28 ; =_022A7AE4 + add r7, sp, #0 + b _02027DC0 +_02027DA4: + mov r0, r8 + mov r1, r7 + mov r2, r6 + bl sub_0200B3FC + ldr r0, [sp] + add r0, r0, #1 + str r0, [sp] +_02027DC0: + ldrb r1, [r4, #4] + ldrb r0, [r4, #6] + ldr r2, [sp] + add r0, r1, r0 + cmp r2, r0 + blt _02027DA4 + orr r0, r5, #9 + mov r2, r0, lsl #0x10 + ldr r0, _02027E28 ; =_022A7AE4 + add r1, sp, #0 + mov r2, r2, lsr #0x10 + bl sub_0200B3FC +_02027DF0: + ldr r0, _02027E2C ; =_020AFD4C + mov r1, #1 +#ifdef JAPAN + strb r1, [r0] +#else + strb r1, [r0, #3] +#endif +_02027DFC: + ldrsb r2, [r4, #0xb5] +_02027E00: + mvn r0, #1 + cmp r2, r0 + bne _02027B9C + add sp, sp, #8 + ldmia sp!, {r4, r5, r6, r7, r8, sb, sl, pc} + .align 2, 0 +_02027E14: .word _022A7A6C +_02027E18: .word WINDOW_LIST +_02027E1C: .word _0209AC64 +_02027E20: .word _020AFD98 +_02027E24: .word _0209ACAC +_02027E28: .word _022A7AE4 +_02027E2C: .word _020AFD4C + arm_func_end sub_02027B88 + + arm_func_start sub_02027E30 +sub_02027E30: ; 0x02027E30 + stmdb sp!, {r3, r4, r5, r6, r7, lr} + sub sp, sp, #8 + ldr r3, _02028070 ; =WINDOW_LIST + mov r2, #0xe0 + mla r7, r0, r2, r3 + ldrsb r0, [r7, #9] + ldr r2, _02028074 ; =_0209AC64 + cmp r1, #0 + rsb r0, r0, #0 + add r4, r2, r0, lsl #1 + movne r0, #2 + moveq r0, #3 + strb r0, [r7, #0xb6] + ldrb r0, [r7, #8] + cmp r0, #1 + bne _02027F34 + cmp r1, #0 + bne _02027F20 + ldrsb r1, [r7, #0x10] + ldr r2, _02028070 ; =WINDOW_LIST + mov r0, #0xe0 + mla r0, r1, r0, r2 + add r0, r0, #0xbc + bl InitWindowTrailer + ldrsb r0, [r4] + cmp r0, #0 + blt _02027F20 + ldrb r0, [r7, #5] + ldr r6, _02028078 ; =_022A7AE4 + add r5, sp, #0 + sub r0, r0, #1 + str r0, [sp, #4] + mov r4, #0 + b _02027F08 +_02027EB8: + ldrb r0, [r7, #4] + sub r0, r0, #1 + str r0, [sp] + b _02027EE4 +_02027EC8: + mov r0, r6 + mov r1, r5 + mov r2, r4 + bl sub_0200B3FC + ldr r0, [sp] + add r0, r0, #1 + str r0, [sp] +_02027EE4: + ldrb r1, [r7, #4] + ldrb r0, [r7, #6] + ldr r2, [sp] + add r0, r1, r0 + cmp r2, r0 + ble _02027EC8 + ldr r0, [sp, #4] + add r0, r0, #1 + str r0, [sp, #4] +_02027F08: + ldrb r1, [r7, #5] + ldrb r0, [r7, #7] + ldr r2, [sp, #4] + add r0, r1, r0 + cmp r2, r0 + ble _02027EB8 +_02027F20: + bl sub_02027B88 + ldr r0, _0202807C ; =_020AFD4C + mov r1, #1 +#ifdef JAPAN + strb r1, [r0] +#else + strb r1, [r0, #3] +#endif + b _02028064 +_02027F34: + cmp r1, #0 + beq _0202801C + ldrb r1, [r7, #4] + mvn r0, #3 + mov r1, r1, lsl #3 + strh r1, [r7, #0x34] + ldrb r1, [r7, #5] + mov r1, r1, lsl #3 + strh r1, [r7, #0x36] + ldrb r1, [r7, #6] + mov r1, r1, lsl #3 + strh r1, [r7, #0x38] + ldrb r1, [r7, #7] + mov r1, r1, lsl #3 + strh r1, [r7, #0x3a] + ldrh r1, [r7, #0x34] + strh r1, [r7, #0x74] + ldrh r1, [r7, #0x36] + strh r1, [r7, #0x76] + ldrh r1, [r7, #0x38] + strh r1, [r7, #0x78] + ldrh r1, [r7, #0x3a] + strh r1, [r7, #0x7a] + ldrsh r1, [r7, #0x74] + sub r1, r1, #8 + strh r1, [r7, #0x74] + ldrsh r1, [r7, #0x76] + sub r1, r1, #8 + strh r1, [r7, #0x76] + ldrsh r1, [r7, #0x78] + add r1, r1, #0x10 + strh r1, [r7, #0x78] + ldrsh r1, [r7, #0x7a] + add r1, r1, #0x10 + strh r1, [r7, #0x7a] + ldrsb r1, [r7, #9] + cmp r1, r0 + beq _02027FFC + ldrsh r0, [r7, #0x34] + sub r0, r0, #1 + strh r0, [r7, #0x34] + ldrsh r0, [r7, #0x36] + sub r0, r0, #2 + strh r0, [r7, #0x36] + ldrsh r0, [r7, #0x38] + add r0, r0, #2 + strh r0, [r7, #0x38] + ldrsh r0, [r7, #0x3a] + add r0, r0, #6 + strh r0, [r7, #0x3a] +_02027FFC: + ldr r0, _0202807C ; =_020AFD4C + ldrb r0, [r0, #1] + cmp r0, #0 + movne r0, #0x90 + strneb r0, [r7, #0x63] + moveq r0, #0xff + streqb r0, [r7, #0x63] + b _02028064 +_0202801C: + ldrsb r1, [r7, #0x10] + ldr r2, _02028070 ; =WINDOW_LIST + mov r0, #0xe0 + mla r0, r1, r0, r2 + add r0, r0, #0xbc + bl InitWindowTrailer + mov r0, #0 + strh r0, [r7, #0x3a] + strh r0, [r7, #0x38] + strh r0, [r7, #0x36] + strh r0, [r7, #0x34] + strh r0, [r7, #0x74] + ldrh r0, [r7, #0x36] + strh r0, [r7, #0x76] + ldrh r0, [r7, #0x38] + strh r0, [r7, #0x78] + ldrh r0, [r7, #0x3a] + strh r0, [r7, #0x7a] +_02028064: + mov r0, #1 + add sp, sp, #8 + ldmia sp!, {r3, r4, r5, r6, r7, pc} + .align 2, 0 +_02028070: .word WINDOW_LIST +_02028074: .word _0209AC64 +_02028078: .word _022A7AE4 +_0202807C: .word _020AFD4C + arm_func_end sub_02027E30 + + arm_func_start sub_02028080 +sub_02028080: ; 0x02028080 + stmdb sp!, {r4, lr} + ldr r3, _020280B8 ; =WINDOW_LIST + mov r2, #0xe0 + mla r4, r0, r2, r3 + strb r1, [r4, #9] + ldrsb r0, [r4, #0x10] + bl UpdateWindow + ldr r0, _020280BC ; =_020AFD4C + ldrb r1, [r4, #8] + ldr r3, [r0, #8] + mov r2, #1 + orr r1, r3, r2, lsl r1 + str r1, [r0, #8] + ldmia sp!, {r4, pc} + .align 2, 0 +_020280B8: .word WINDOW_LIST +_020280BC: .word _020AFD4C + arm_func_end sub_02028080 + + arm_func_start sub_020280C0 +sub_020280C0: ; 0x020280C0 + stmdb sp!, {r3, r4, r5, lr} + mov r4, r1 + mov r1, #1 + mov r5, r0 + bl sub_02027E30 + cmp r4, #0 + ldmeqia sp!, {r3, r4, r5, pc} + mov r1, #0xe0 + mul r3, r5, r1 + ldr r2, _02028104 ; =_022A88E4 + ldr r1, _02028108 ; =_020AFD4C + ldrb r2, [r2, r3] + ldr ip, [r1, #8] + mov r3, #1 + orr r2, ip, r3, lsl r2 + str r2, [r1, #8] + ldmia sp!, {r3, r4, r5, pc} + .align 2, 0 +_02028104: .word _022A88E4 +_02028108: .word _020AFD4C + arm_func_end sub_020280C0 + + arm_func_start sub_0202810C +sub_0202810C: ; 0x0202810C + ldr ip, _02028118 ; =sub_020280C0 + mov r1, #1 + bx ip + .align 2, 0 +_02028118: .word sub_020280C0 + arm_func_end sub_0202810C + + arm_func_start sub_0202811C +sub_0202811C: ; 0x0202811C + ldr ip, _02028128 ; =sub_02027E30 + mov r1, #1 + bx ip + .align 2, 0 +_02028128: .word sub_02027E30 + arm_func_end sub_0202811C + + arm_func_start sub_0202812C +sub_0202812C: ; 0x0202812C + stmdb sp!, {r4, r5, r6, lr} + mov r6, r0 + mov r1, #0xe0 + mul r5, r6, r1 + ldr r1, _02028188 ; =_022A8992 + ldrsb r1, [r1, r5] + cmp r1, #3 + moveq r0, #1 + ldmeqia sp!, {r4, r5, r6, pc} + mov r1, #0 + bl sub_02027E30 + mov r4, r0 + mov r0, r6 + bl sub_0202836C + ldr r0, _0202818C ; =_022A88E4 + ldr r1, _02028190 ; =_020AFD4C + ldrb r0, [r0, r5] + ldr r3, [r1, #8] + mov r2, #1 + orr r2, r3, r2, lsl r0 + mov r0, r4 + str r2, [r1, #8] + ldmia sp!, {r4, r5, r6, pc} + .align 2, 0 +_02028188: .word _022A8992 +_0202818C: .word _022A88E4 +_02028190: .word _020AFD4C + arm_func_end sub_0202812C + + arm_func_start DeleteWindow +DeleteWindow: ; 0x02028194 + stmdb sp!, {r3, r4, r5, lr} + ldr r2, _02028224 ; =WINDOW_LIST + mov r1, #0xe0 + mla r4, r0, r1, r2 + bl sub_0202812C + ldrb r5, [r4, #8] + ldr lr, _02028224 ; =WINDOW_LIST + mov ip, #1 + mov r3, #0 +_020281B8: + cmp lr, r4 + ldrnesb r0, [lr, #0xb6] + cmpne r0, #0 + beq _020281EC + ldrb r0, [lr, #8] + cmp r5, r0 + bne _020281EC + ldrh r2, [lr, #0x12] + ldrb r1, [lr, #6] + ldrb r0, [lr, #7] + mla r0, r1, r0, r2 + cmp ip, r0 + movlt ip, r0 +_020281EC: + add r3, r3, #1 + cmp r3, #0x14 + add lr, lr, #0xe0 + blt _020281B8 + ldr r0, [r4, #0x14] + ldr r1, _02028228 ; =_022A7A74 + mov r2, r5, lsl #1 + strh ip, [r1, r2] + bl MemFree + ldrsb r0, [r4, #0x10] + bl sub_02027974 + mov r0, #0 + strb r0, [r4, #0xb6] + ldmia sp!, {r3, r4, r5, pc} + .align 2, 0 +_02028224: .word WINDOW_LIST +_02028228: .word _022A7A74 + arm_func_end DeleteWindow + + arm_func_start sub_0202822C +sub_0202822C: ; 0x0202822C + stmdb sp!, {r4, lr} + ldr r2, _02028258 ; =WINDOW_LIST + mov r1, #0xe0 + mla r4, r0, r1, r2 + ldr r0, [r4, #0x14] + bl MemFree + ldrsb r0, [r4, #0x10] + bl sub_02027974 + mov r0, #0 + strb r0, [r4, #0xb6] + ldmia sp!, {r4, pc} + .align 2, 0 +_02028258: .word WINDOW_LIST + arm_func_end sub_0202822C diff --git a/asm/main_020282C8.s b/asm/main_020282C8.s deleted file mode 100644 index 9325ef94..00000000 --- a/asm/main_020282C8.s +++ /dev/null @@ -1,53 +0,0 @@ - .include "asm/macros.inc" - .include "main_020282C8.inc" - - .text - - arm_func_start sub_020282C8 -sub_020282C8: ; 0x020282C8 - ldr r3, _020282F0 ; =WINDOW_LIST - mov r2, #0xe0 - mla r2, r0, r2, r3 - ldrb r0, [r2, #7] - mov r0, r0, lsl #3 - str r0, [r1, #4] - ldrb r0, [r2, #6] - mov r0, r0, lsl #3 - str r0, [r1] - bx lr - .align 2, 0 -_020282F0: .word WINDOW_LIST - arm_func_end sub_020282C8 - - arm_func_start sub_020282F4 -sub_020282F4: ; 0x020282F4 - mov r1, #0xe0 - mul r1, r0, r1 - ldr r0, _02028308 ; =_022A8994 - ldr r0, [r0, r1] - bx lr - .align 2, 0 -_02028308: .word _022A8994 - arm_func_end sub_020282F4 - - arm_func_start sub_0202830C -sub_0202830C: ; 0x0202830C - mov r2, #0xe0 - mul r2, r0, r2 - ldr r0, _02028320 ; =_022A8994 - str r1, [r0, r2] - bx lr - .align 2, 0 -_02028320: .word _022A8994 - arm_func_end sub_0202830C - - arm_func_start sub_02028324 -sub_02028324: ; 0x02028324 - mov r1, #0xe0 - mul r1, r0, r1 - ldr r0, _02028338 ; =_022A88E4 - ldrb r0, [r0, r1] - bx lr - .align 2, 0 -_02028338: .word _022A88E4 - arm_func_end sub_02028324 diff --git a/include/main_02027648.h b/include/main_02027648.h index 29a23292..cb515318 100644 --- a/include/main_02027648.h +++ b/include/main_02027648.h @@ -1,6 +1,7 @@ #ifndef PMDSKY_MAIN_02027648_H #define PMDSKY_MAIN_02027648_H +u32 sub_02027624(s32 window_id); s32 NewWindowScreenCheck(s32 a, s32 b); #endif diff --git a/include/main_02027AF0.h b/include/main_02027AF0.h new file mode 100644 index 00000000..9f3e7e7a --- /dev/null +++ b/include/main_02027AF0.h @@ -0,0 +1,8 @@ +#ifndef PMDSKY_MAIN_02027AF0_H +#define PMDSKY_MAIN_02027AF0_H + +void UpdateWindow(s32 window_id); +void sub_02027B1C(s32 window_id); +void ClearWindow(s32 window_id); + +#endif diff --git a/include/main_02028284.h b/include/main_02028284.h index be8fec6d..3159dc55 100644 --- a/include/main_02028284.h +++ b/include/main_02028284.h @@ -2,7 +2,10 @@ #define PMDSKY_MAIN_02028284_H #include "util.h" +#include "window.h" +void sub_0202825C(s32 index, u16 value); +u16 sub_02028270(s32 index); struct unk_02028284 { s32 field_0x0; s32 field_0x4; @@ -12,5 +15,6 @@ struct unk_02028284 { void GetWindowRectangle(s32 window_id, struct unk_02028284* out); +void sub_020282C8(s32 window_id, Point* out); #endif diff --git a/include/main_020282F4.h b/include/main_020282F4.h new file mode 100644 index 00000000..42af5c2a --- /dev/null +++ b/include/main_020282F4.h @@ -0,0 +1,8 @@ +#ifndef PMDSKY_MAIN_020282F4_H +#define PMDSKY_MAIN_020282F4_H + +s32 sub_020282F4(s32 window_id); +void sub_0202830C(s32 window_id, s32 value); +u8 sub_02028324(s32 window_id); + +#endif diff --git a/include/window.h b/include/window.h index ac54e989..e87e2d14 100644 --- a/include/window.h +++ b/include/window.h @@ -116,6 +116,7 @@ struct unk_022A7A6C { }; extern struct unk_022A7A6C _022A7A6C; +extern u16 _022A7A74[2]; s32 NewWindow(s32 a, s32 b); diff --git a/main.lsf b/main.lsf index ef4512e7..5c3af1be 100644 --- a/main.lsf +++ b/main.lsf @@ -148,8 +148,10 @@ Static main Object asm/main_020278C4.o Object src/main_02027A80.o Object asm/main_02027AA0.o + Object src/main_02027AF0.o + Object asm/main_02027B88.o Object src/main_02028284.o - Object asm/main_020282C8.o + Object src/main_020282F4.o Object src/main_0202833C.o Object asm/main_02028354.o Object src/main_02029A50.o diff --git a/src/main_02027648.c b/src/main_02027648.c index cc7d6502..264767c1 100644 --- a/src/main_02027648.c +++ b/src/main_02027648.c @@ -1,6 +1,13 @@ #include "main_02027648.h" #include "window.h" +u32 sub_02027624(s32 window_id) +{ + WindowTemplate *tmpl = &WINDOW_LIST[window_id].template; + + return (tmpl->width * tmpl->height) << 5; +} + s32 NewWindowScreenCheck(s32 a, s32 b) { s8 i; diff --git a/src/main_02027AF0.c b/src/main_02027AF0.c new file mode 100644 index 00000000..493c9479 --- /dev/null +++ b/src/main_02027AF0.c @@ -0,0 +1,26 @@ +#include "main_02027AF0.h" +#include "window.h" + +extern void* memset(void *s, s32 c, u32 n); + +void UpdateWindow(s32 window_id) +{ + Window *w = &WINDOW_LIST[window_id]; + + w->active_transfer_src = w->pixel_buffer; + w->active_vram_dest = w->vram_base; + w->active_transfer_len = w->transfer_length; +} + +void sub_02027B1C(s32 window_id) +{ + memset(WINDOW_LIST[window_id].pixel_buffer, 0, + WINDOW_LIST[window_id].transfer_length); + UpdateWindow(window_id); +} + +void ClearWindow(s32 window_id) +{ + memset(WINDOW_LIST[window_id].pixel_buffer, 0, + WINDOW_LIST[window_id].transfer_length); +} diff --git a/src/main_02028284.c b/src/main_02028284.c index d859c16e..ff67bdb4 100644 --- a/src/main_02028284.c +++ b/src/main_02028284.c @@ -1,6 +1,16 @@ #include "main_02028284.h" #include "window.h" +void sub_0202825C(s32 index, u16 value) +{ + _022A7A74[index] = value; +} + +u16 sub_02028270(s32 index) +{ + return _022A7A74[index]; +} + void GetWindowRectangle(s32 window_id, struct unk_02028284* out) { WindowTemplate *tmpl = &WINDOW_LIST[window_id].template; @@ -13,3 +23,11 @@ void GetWindowRectangle(s32 window_id, struct unk_02028284* out) out->field_0x8 = left; out->field_0xC = left + (tmpl->width << 3); } + +void sub_020282C8(s32 window_id, Point* out) +{ + WindowTemplate *tmpl = &WINDOW_LIST[window_id].template; + + out->y = tmpl->height << 3; + out->x = tmpl->width << 3; +} diff --git a/src/main_020282F4.c b/src/main_020282F4.c new file mode 100644 index 00000000..3a81e3e5 --- /dev/null +++ b/src/main_020282F4.c @@ -0,0 +1,17 @@ +#include "main_020282F4.h" +#include "window.h" + +s32 sub_020282F4(s32 window_id) +{ + return WINDOW_LIST[window_id].unkB8; +} + +void sub_0202830C(s32 window_id, s32 value) +{ + WINDOW_LIST[window_id].unkB8 = value; +} + +u8 sub_02028324(s32 window_id) +{ + return WINDOW_LIST[window_id].template.bg_id; +} diff --git a/src/overlay_31_02382820.c b/src/overlay_31_02382820.c index 2e5172a7..57ae4806 100644 --- a/src/overlay_31_02382820.c +++ b/src/overlay_31_02382820.c @@ -7,6 +7,7 @@ #include "weather.h" #include "main_02001188.h" #include "window.h" +#include "main_02027AF0.h" extern struct dungeon *DUNGEON_PTR[]; @@ -35,7 +36,6 @@ extern void GetMonsterOrTrapName(u8*, void*, u32); // The third argument isn't a extern u8* StringFromId(u32); extern void PreprocessString(u8* dst, u32 dsize, const u8* src, u32 flags, struct PPStrValues* ptr); extern void DrawTextInWindow(s32, u32, u32, u8*); -extern void UpdateWindow(s32); extern u8* AllocateTemp1024ByteBufferFromPool(void); extern s32 sub_020265A8(u8*); // Measures the text's width in pixels diff --git a/src/overlay_31_02383880.c b/src/overlay_31_02383880.c index 562e6640..aa018b57 100644 --- a/src/overlay_31_02383880.c +++ b/src/overlay_31_02383880.c @@ -3,6 +3,7 @@ #include "main_0202593C.h" #include "overlay_31_02383478.h" #include "main_02001188.h" +#include "main_020282F4.h" extern struct dungeon *DUNGEON_PTR[]; extern struct loc_struct* OVERLAY31_UNKNOWN_POINTER__NA_238A26C; @@ -10,7 +11,6 @@ extern struct loc_struct* OVERLAY31_UNKNOWN_POINTER__NA_238A26C; extern u8 PositionHasItem(struct position* pos); extern bool8 ov10_022BCD10(s8); extern void AdvanceFrame(u8); -extern s32 sub_020282F4(s8); extern void CloseInventoryMenu(s8); extern void ov29_0234E988(u8*); extern void CloseTextBox2();