diff --git a/asm/non_matching/textbox/DispMessageFrame.inc b/asm/non_matching/textbox/DispMessageFrame.inc deleted file mode 100644 index f7d118df..00000000 --- a/asm/non_matching/textbox/DispMessageFrame.inc +++ /dev/null @@ -1,135 +0,0 @@ - - .syntax unified - - push {r4, r5, r6, r7, lr} - mov r7, sb - mov r6, r8 - push {r6, r7} - adds r7, r0, #0 - adds r4, r1, #0 - adds r6, r2, #0 - mov r8, r3 - adds r3, r7, #0 - lsls r0, r6, #6 - adds r0, #0x40 - adds r2, r3, r0 - mov r0, r8 - strh r0, [r3] - adds r3, #2 - movs r1, #0x80 - lsls r1, r1, #4 - mov sb, r1 - mov r0, r8 - mov r5, sb - orrs r0, r5 - strh r0, [r2] - adds r2, #2 - cmp r4, #0 - ble _08056E4C - mov r0, r8 - adds r0, #1 - strh r0, [r3] - adds r3, #2 - adds r1, r0, #0 - orrs r1, r5 - strh r1, [r2] - adds r2, #2 - subs r4, #2 - adds r1, r4, #0 - subs r4, #1 - mov ip, r0 - cmp r1, #0 - ble _08056E30 - mov r5, r8 - adds r5, #2 - adds r1, r5, #0 - mov r0, sb - orrs r1, r0 -_08056E20: - strh r5, [r3] - adds r3, #2 - strh r1, [r2] - adds r2, #2 - adds r0, r4, #0 - subs r4, #1 - cmp r0, #0 - bgt _08056E20 -_08056E30: - movs r1, #0x80 - lsls r1, r1, #3 - adds r0, r1, #0 - mov r1, ip - orrs r1, r0 - strh r1, [r3] - adds r3, #2 - movs r5, #0xc0 - lsls r5, r5, #4 - adds r0, r5, #0 - mov r1, ip - orrs r1, r0 - strh r1, [r2] - adds r2, #2 -_08056E4C: - movs r0, #0x80 - lsls r0, r0, #3 - adds r5, r0, #0 - mov r0, r8 - orrs r0, r5 - strh r0, [r3] - movs r0, #0xc0 - lsls r0, r0, #4 - adds r1, r0, #0 - mov r0, r8 - orrs r0, r1 - strh r0, [r2] - adds r7, #0x40 - adds r3, #0x40 - cmp r6, #0 - ble _08056EB6 - mov r0, r8 - adds r0, #3 - strh r0, [r7] - adds r1, r0, #0 - orrs r1, r5 - strh r1, [r3] - adds r7, #0x40 - adds r3, #0x40 - subs r6, #2 - adds r1, r6, #0 - subs r6, #1 - adds r2, r0, #0 - cmp r1, #0 - ble _08056EA0 - mov r4, r8 - adds r4, #4 - adds r1, r4, #0 - orrs r1, r5 -_08056E90: - strh r4, [r7] - strh r1, [r3] - adds r7, #0x40 - adds r3, #0x40 - adds r0, r6, #0 - subs r6, #1 - cmp r0, #0 - bgt _08056E90 -_08056EA0: - movs r1, #0x80 - lsls r1, r1, #4 - adds r0, r1, #0 - adds r1, r2, #0 - orrs r1, r0 - strh r1, [r7] - movs r5, #0xc0 - lsls r5, r5, #4 - adds r0, r5, #0 - orrs r2, r0 - strh r2, [r3] -_08056EB6: - pop {r3, r4} - mov r8, r3 - mov sb, r4 - pop {r4, r5, r6, r7, pc} - .align 2, 0 - - .syntax divided diff --git a/include/message.h b/include/message.h index f7f8c25d..19d33ee4 100644 --- a/include/message.h +++ b/include/message.h @@ -126,6 +126,6 @@ void MessageFromTarget(u32 index); */ void MessageAtHeight(u32 index, u32 y); -void DispMessageFrame(u16*, u32, u32, u32); +void DispMessageFrame(u16*, s32, s32, u32); #endif // MESSAGE_H diff --git a/src/message.c b/src/message.c index 8f2ff53e..2d68f6f1 100644 --- a/src/message.c +++ b/src/message.c @@ -697,8 +697,50 @@ static void CreateWindow(void) { } // Also used by figurine menu -ASM_FUNC("asm/non_matching/textbox/DispMessageFrame.inc", - void DispMessageFrame(u16* buffer, u32 width_, u32 height_, u32 flags_)) +void DispMessageFrame(u16* buffer, s32 width, s32 height, u32 flags) { + u16* ptr = buffer; + u16* ptr2 = &buffer[(height << 5) + 0x20]; + u32 flags1; + u32 i; + *ptr++ = flags; + *ptr2++ = flags | 0x800; + if (width > 0) { + *ptr++ = flags + 1; + *ptr2++ = (flags + 1) | 0x800; + width -= 2; + while(width-->0){ + *ptr++ = flags + 2; + *ptr2++ = (flags + 2) | 0x800; + } + + *ptr++ = (flags + 1) | (0x80 << 3); + *ptr2++ = (flags + 1) | (0xc0 << 4); + } + + *ptr = flags | 0x400; + *ptr2 = flags | 0xc00; + buffer += 0x20; + ptr += 0x20; + + if (height > 0) { + *buffer = flags + 3; + *ptr = (flags + 3) | 0x400; + buffer += 0x20; + ptr += 0x20; + + height -= 2; + while (height-- > 0) { + *buffer = flags + 4; + *ptr = (flags + 4) | 0x400; + buffer += 0x20; + ptr += 0x20; + } + + + *buffer = (flags + 3) | 0x800; + *ptr++ = (flags + 3) | 0xc00; + } +} /* Each character is two tiles tall.