diff options
-rw-r--r-- | asm/quest_log.s | 126 | ||||
-rw-r--r-- | src/quest_log.c | 147 |
2 files changed, 146 insertions, 127 deletions
diff --git a/asm/quest_log.s b/asm/quest_log.s index d6dc18f13..5e6e71eb4 100644 --- a/asm/quest_log.s +++ b/asm/quest_log.s @@ -5,132 +5,6 @@ .text - thumb_func_start sub_8112EDC -sub_8112EDC: @ 8112EDC - push {r4,r5,lr} - lsls r0, 24 - lsrs r5, r0, 24 - ldr r4, _08112F14 @ =gUnknown_203B020 - ldrb r0, [r4] - cmp r0, 0xFF - beq _08112F0C - movs r1, 0 - bl FillWindowPixelBuffer - ldrb r0, [r4] - bl ClearWindowTilemap - cmp r5, 0 - beq _08112F02 - ldrb r0, [r4] - adds r1, r5, 0 - bl CopyWindowToVram -_08112F02: - ldrb r0, [r4] - bl RemoveWindow - movs r0, 0xFF - strb r0, [r4] -_08112F0C: - pop {r4,r5} - pop {r0} - bx r0 - .align 2, 0 -_08112F14: .4byte gUnknown_203B020 - thumb_func_end sub_8112EDC - - thumb_func_start sub_8112F18 -sub_8112F18: @ 8112F18 - push {r4-r7,lr} - mov r7, r10 - mov r6, r9 - mov r5, r8 - push {r5-r7} - sub sp, 0x8 - lsls r0, 24 - lsrs r0, 24 - mov r10, r0 - movs r1, 0x3 - bl GetWindowAttribute - lsls r0, 24 - lsrs r6, r0, 24 - mov r0, r10 - movs r1, 0x4 - bl GetWindowAttribute - lsls r0, 24 - lsrs r7, r0, 24 - lsls r0, r7, 5 - muls r0, r6 - bl Alloc - mov r8, r0 - cmp r0, 0 - beq _08112FB8 - movs r5, 0 - adds r0, r6, 0 - muls r0, r7 - str r0, [sp] - cmp r5, r7 - bcs _08112FA2 -_08112F5A: - movs r4, 0 - adds r1, r5, 0x1 - mov r9, r1 - cmp r4, r6 - bcs _08112F98 - subs r3, r7, 0x1 -_08112F66: - movs r0, 0 - cmp r5, 0 - beq _08112F74 - movs r0, 0x5 - cmp r5, r3 - bne _08112F74 - movs r0, 0xE -_08112F74: - lsls r0, 5 - ldr r1, _08112FC8 @ =gUnknown_84566A8 - adds r0, r1, r0 - adds r1, r5, 0 - muls r1, r6 - adds r1, r4 - lsls r1, 5 - add r1, r8 - ldr r2, _08112FCC @ =0x04000008 - str r3, [sp, 0x4] - bl CpuSet - adds r0, r4, 0x1 - lsls r0, 24 - lsrs r4, r0, 24 - ldr r3, [sp, 0x4] - cmp r4, r6 - bcc _08112F66 -_08112F98: - mov r1, r9 - lsls r0, r1, 24 - lsrs r5, r0, 24 - cmp r5, r7 - bcc _08112F5A -_08112FA2: - ldr r0, [sp] - lsls r2, r0, 21 - lsrs r2, 16 - mov r0, r10 - mov r1, r8 - movs r3, 0 - bl CopyToWindowPixelBuffer - mov r0, r8 - bl Free -_08112FB8: - add sp, 0x8 - pop {r3-r5} - mov r8, r3 - mov r9, r4 - mov r10, r5 - pop {r4-r7} - pop {r0} - bx r0 - .align 2, 0 -_08112FC8: .4byte gUnknown_84566A8 -_08112FCC: .4byte 0x04000008 - thumb_func_end sub_8112F18 - thumb_func_start sub_8112FD0 sub_8112FD0: @ 8112FD0 push {lr} diff --git a/src/quest_log.c b/src/quest_log.c index 590892acf..cf24cf462 100644 --- a/src/quest_log.c +++ b/src/quest_log.c @@ -2040,7 +2040,7 @@ void sub_8112E3C(u8 a0, struct UnkStruct_300201C * a1, u16 a2) } } -const u16 gUnknown_84566A8[] = INCBIN_U16("data/graphics/unknown_84566a8.bin"); +const u16 gUnknown_84566A8[][16] = INCBIN_U16("data/graphics/unknown_84566a8.bin"); const struct WindowTemplate gUnknown_8456928 = { 0x00, 0, 15, 30, 5, 15, 0x008F @@ -2060,3 +2060,148 @@ u8 sub_8112EB4(void) } return gUnknown_203B020; } + +void sub_8112EDC(u8 a0) +{ + if (gUnknown_203B020 != 0xFF) + { + FillWindowPixelBuffer(gUnknown_203B020, 0x00); + ClearWindowTilemap(gUnknown_203B020); + + if (a0) + CopyWindowToVram(gUnknown_203B020, a0); + + RemoveWindow(gUnknown_203B020); + gUnknown_203B020 = 0xFF; + } +} + +#ifdef NONMATCHING +void sub_8112F18(u8 a0) +{ + u8 width = GetWindowAttribute(a0, WINDOW_WIDTH); + u8 height = GetWindowAttribute(a0, WINDOW_HEIGHT); + u8 * buffer = Alloc(32 * width * height); + u8 i, j; + u8 k; + + if (buffer) + { + for (i = 0; i < height; i++) + { + for (j = 0; j < width; j++) + { + if (i == 0) + k = 0; + else if (i == height - 1) + k = 14; + else + k = 5; + CpuCopy32( + gUnknown_84566A8[k], // operand swap on "add" instruction + buffer + 32 * (i * width + j), + 32 + ); + } + } + CopyToWindowPixelBuffer(a0, buffer, width * height * 32, 0); + Free(buffer); + } +} +#else +NAKED +void sub_8112F18(u8 a0) +{ + asm_unified("\tpush {r4-r7,lr}\n" + "\tmov r7, r10\n" + "\tmov r6, r9\n" + "\tmov r5, r8\n" + "\tpush {r5-r7}\n" + "\tsub sp, 0x8\n" + "\tlsls r0, 24\n" + "\tlsrs r0, 24\n" + "\tmov r10, r0\n" + "\tmovs r1, 0x3\n" + "\tbl GetWindowAttribute\n" + "\tlsls r0, 24\n" + "\tlsrs r6, r0, 24\n" + "\tmov r0, r10\n" + "\tmovs r1, 0x4\n" + "\tbl GetWindowAttribute\n" + "\tlsls r0, 24\n" + "\tlsrs r7, r0, 24\n" + "\tlsls r0, r7, 5\n" + "\tmuls r0, r6\n" + "\tbl Alloc\n" + "\tmov r8, r0\n" + "\tcmp r0, 0\n" + "\tbeq _08112FB8\n" + "\tmovs r5, 0\n" + "\tadds r0, r6, 0\n" + "\tmuls r0, r7\n" + "\tstr r0, [sp]\n" + "\tcmp r5, r7\n" + "\tbcs _08112FA2\n" + "_08112F5A:\n" + "\tmovs r4, 0\n" + "\tadds r1, r5, 0x1\n" + "\tmov r9, r1\n" + "\tcmp r4, r6\n" + "\tbcs _08112F98\n" + "\tsubs r3, r7, 0x1\n" + "_08112F66:\n" + "\tmovs r0, 0\n" + "\tcmp r5, 0\n" + "\tbeq _08112F74\n" + "\tmovs r0, 0x5\n" + "\tcmp r5, r3\n" + "\tbne _08112F74\n" + "\tmovs r0, 0xE\n" + "_08112F74:\n" + "\tlsls r0, 5\n" + "\tldr r1, _08112FC8 @ =gUnknown_84566A8\n" + "\tadds r0, r1, r0\n" + "\tadds r1, r5, 0\n" + "\tmuls r1, r6\n" + "\tadds r1, r4\n" + "\tlsls r1, 5\n" + "\tadd r1, r8\n" + "\tldr r2, _08112FCC @ =0x04000008\n" + "\tstr r3, [sp, 0x4]\n" + "\tbl CpuSet\n" + "\tadds r0, r4, 0x1\n" + "\tlsls r0, 24\n" + "\tlsrs r4, r0, 24\n" + "\tldr r3, [sp, 0x4]\n" + "\tcmp r4, r6\n" + "\tbcc _08112F66\n" + "_08112F98:\n" + "\tmov r1, r9\n" + "\tlsls r0, r1, 24\n" + "\tlsrs r5, r0, 24\n" + "\tcmp r5, r7\n" + "\tbcc _08112F5A\n" + "_08112FA2:\n" + "\tldr r0, [sp]\n" + "\tlsls r2, r0, 21\n" + "\tlsrs r2, 16\n" + "\tmov r0, r10\n" + "\tmov r1, r8\n" + "\tmovs r3, 0\n" + "\tbl CopyToWindowPixelBuffer\n" + "\tmov r0, r8\n" + "\tbl Free\n" + "_08112FB8:\n" + "\tadd sp, 0x8\n" + "\tpop {r3-r5}\n" + "\tmov r8, r3\n" + "\tmov r9, r4\n" + "\tmov r10, r5\n" + "\tpop {r4-r7}\n" + "\tpop {r0}\n" + "\tbx r0\n" + "\t.align 2, 0\n" + "_08112FC8: .4byte gUnknown_84566A8\n" + "_08112FCC: .4byte 0x04000008"); +} +#endif |