summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorTal Hayon <talhayon1@gmail.com>2022-01-01 13:25:46 +0200
committerTal Hayon <talhayon1@gmail.com>2022-01-01 13:25:46 +0200
commit09de51bef2ea46b2e6068e07157d464fa54be6b3 (patch)
tree1cd48e48ec3fc401f53b1b1a73ee6dd42c4632e3
parent4ca44a90a93e37b8ba45f1d02906011b2b8922f1 (diff)
Decompile DispMessageFrame
-rw-r--r--asm/non_matching/textbox/DispMessageFrame.inc135
-rw-r--r--include/message.h2
-rw-r--r--src/message.c46
3 files changed, 45 insertions, 138 deletions
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.