From d6baf52f338810c28d5624a7faeadba11dd3860d Mon Sep 17 00:00:00 2001 From: Kermalis <29823718+Kermalis@users.noreply.github.com> Date: Sat, 5 Aug 2023 22:27:03 -0400 Subject: [PATCH] Match sub_8006AC4 through sub_8006C44 --- asm/text.s | 495 ---------------------------------------------------- src/text2.c | 158 ++++++++++++++++- 2 files changed, 151 insertions(+), 502 deletions(-) diff --git a/asm/text.s b/asm/text.s index b3368660d..6c854fb3c 100644 --- a/asm/text.s +++ b/asm/text.s @@ -5,501 +5,6 @@ .text - thumb_func_start sub_8006AC4 -sub_8006AC4: - push {r4,r5,lr} - adds r4, r1, 0 - ldr r5, [sp, 0xC] - cmp r2, 0x1C - bgt _08006B64 - cmp r2, 0 - blt _08006B64 - ldr r0, [r0, 0xC] - cmp r0, 0x7 - bhi _08006B64 - lsls r0, 2 - ldr r1, _08006AE4 - adds r0, r1 - ldr r0, [r0] - mov pc, r0 - .align 2, 0 -_08006AE4: .4byte _08006AE8 - .align 2, 0 -_08006AE8: - .4byte _08006B2C - .4byte _08006B2C - .4byte _08006B08 - .4byte _08006B2C - .4byte _08006B2C - .4byte _08006B54 - .4byte _08006B2C - .4byte _08006B54 -_08006B08: - lsls r1, r4, 1 - lsls r0, r2, 6 - adds r0, r5 - adds r1, r0 - ldr r2, _08006B24 - adds r0, r2, 0 - orrs r3, r0 - strh r3, [r1] - movs r0, 0x80 - lsls r0, 4 - adds r1, r0 - ldr r2, _08006B28 - b _08006B44 - .align 2, 0 -_08006B24: .4byte 0xfffff000 -_08006B28: .4byte 0x0000f278 -_08006B2C: - lsls r1, r4, 1 - lsls r0, r2, 6 - adds r0, r5 - adds r1, r0 - ldr r2, _08006B4C - adds r0, r2, 0 - orrs r3, r0 - strh r3, [r1] - movs r0, 0x80 - lsls r0, 4 - adds r1, r0 - ldr r2, _08006B50 -_08006B44: - adds r0, r2, 0 - strh r0, [r1] - b _08006B64 - .align 2, 0 -_08006B4C: .4byte 0xfffff000 -_08006B50: .4byte 0x0000f2db -_08006B54: - lsls r0, r4, 1 - lsls r1, r2, 6 - adds r1, r5 - adds r0, r1 - ldr r2, _08006B6C - adds r1, r2, 0 - orrs r3, r1 - strh r3, [r0] -_08006B64: - pop {r4,r5} - pop {r0} - bx r0 - .align 2, 0 -_08006B6C: .4byte 0xfffff000 - thumb_func_end sub_8006AC4 - - thumb_func_start sub_8006B70 -sub_8006B70: - push {r4-r6,lr} - adds r6, r0, 0 - adds r4, r1, 0 - adds r5, r3, 0 - ldr r3, [sp, 0x10] - cmp r2, 0x1C - bgt _08006C3A - cmp r2, 0 - blt _08006C3A - ldr r0, [r6, 0xC] - cmp r0, 0x7 - bhi _08006C3A - lsls r0, 2 - ldr r1, _08006B94 - adds r0, r1 - ldr r0, [r0] - mov pc, r0 - .align 2, 0 -_08006B94: .4byte _08006B98 - .align 2, 0 -_08006B98: - .4byte _08006BB8 - .4byte _08006C3A - .4byte _08006C3A - .4byte _08006BE8 - .4byte _08006BF8 - .4byte _08006C1C - .4byte _08006BE8 - .4byte _08006C2C -_08006BB8: - cmp r5, 0 - bne _08006BCC - lsls r1, r4, 1 - lsls r0, r2, 6 - adds r0, r3 - adds r1, r0 - ldr r2, _08006BC8 - b _08006C02 - .align 2, 0 -_08006BC8: .4byte 0x0000f697 -_08006BCC: - movs r1, 0x6 - ldrsh r0, [r6, r1] - subs r0, 0x1 - cmp r5, r0 - bne _08006BE8 - lsls r1, r4, 1 - lsls r0, r2, 6 - adds r0, r3 - adds r1, r0 - ldr r2, _08006BE4 - b _08006C02 - .align 2, 0 -_08006BE4: .4byte 0x0000fe97 -_08006BE8: - lsls r1, r4, 1 - lsls r0, r2, 6 - adds r0, r3 - adds r1, r0 - ldr r2, _08006BF4 - b _08006C02 - .align 2, 0 -_08006BF4: .4byte 0x0000f6da -_08006BF8: - lsls r1, r4, 1 - lsls r0, r2, 6 - adds r0, r3 - adds r1, r0 - ldr r2, _08006C14 -_08006C02: - adds r0, r2, 0 - strh r0, [r1] - movs r0, 0x80 - lsls r0, 4 - adds r1, r0 - ldr r2, _08006C18 - adds r0, r2, 0 - strh r0, [r1] - b _08006C3A - .align 2, 0 -_08006C14: .4byte 0x0000f6ea -_08006C18: .4byte 0x0000f2db -_08006C1C: - lsls r0, r4, 1 - lsls r1, r2, 6 - adds r1, r3 - adds r0, r1 - ldr r2, _08006C28 - b _08006C36 - .align 2, 0 -_08006C28: .4byte 0x0000f6de -_08006C2C: - lsls r0, r4, 1 - lsls r1, r2, 6 - adds r1, r3 - adds r0, r1 - ldr r2, _08006C40 -_08006C36: - adds r1, r2, 0 - strh r1, [r0] -_08006C3A: - pop {r4-r6} - pop {r0} - bx r0 - .align 2, 0 -_08006C40: .4byte 0x0000f6b6 - thumb_func_end sub_8006B70 - - thumb_func_start sub_8006C44 -sub_8006C44: - push {r4-r7,lr} - mov r7, r10 - mov r6, r9 - mov r5, r8 - push {r5-r7} - sub sp, 0x4 - adds r6, r0, 0 - adds r4, r1, 0 - str r2, [sp] - lsls r3, 24 - lsrs r3, 24 - mov r9, r3 - movs r1, 0 - ldrsh r0, [r6, r1] - subs r3, r0, 0x1 - cmp r4, 0x1C - ble _08006C68 - b _08006E76 -_08006C68: - cmp r4, 0 - bge _08006C6E - b _08006E76 -_08006C6E: - ldr r0, [r6, 0xC] - cmp r0, 0x7 - bls _08006C76 - b _08006E76 -_08006C76: - lsls r0, 2 - ldr r1, _08006C80 - adds r0, r1 - ldr r0, [r0] - mov pc, r0 - .align 2, 0 -_08006C80: .4byte _08006C84 - .align 2, 0 -_08006C84: - .4byte _08006E76 - .4byte _08006E76 - .4byte _08006E76 - .4byte _08006CA4 - .4byte _08006D64 - .4byte _08006DE8 - .4byte _08006CA4 - .4byte _08006E34 -_08006CA4: - lsls r1, r3, 1 - lsls r2, r4, 6 - ldr r4, [sp] - adds r0, r2, r4 - adds r1, r0 - ldr r7, _08006CC8 - adds r0, r7, 0 - strh r0, [r1] - adds r5, r2, 0 - mov r0, r9 - cmp r0, 0 - beq _08006CD0 - movs r2, 0x80 - lsls r2, 4 - adds r1, r2 - ldr r4, _08006CCC - adds r0, r4, 0 - b _08006CDA - .align 2, 0 -_08006CC8: .4byte 0x0000fad8 -_08006CCC: .4byte 0x0000fa93 -_08006CD0: - movs r7, 0x80 - lsls r7, 4 - adds r1, r7 - ldr r2, _08006D40 - adds r0, r2, 0 -_08006CDA: - strh r0, [r1] - adds r3, 0x1 - movs r4, 0 - movs r7, 0x4 - ldrsh r0, [r6, r7] - cmp r4, r0 - bge _08006D1E - ldr r0, _08006D44 - mov r8, r0 - lsls r0, r3, 1 - ldr r2, [sp] - movs r7, 0x80 - lsls r7, 4 - adds r1, r2, r7 - adds r1, r5, r1 - adds r2, r0, r1 - ldr r7, [sp] - adds r1, r5, r7 - adds r1, r0, r1 - ldr r0, _08006D40 - mov r12, r0 -_08006D04: - mov r7, r8 - strh r7, [r1] - mov r0, r12 - strh r0, [r2] - adds r2, 0x2 - adds r1, 0x2 - adds r3, 0x1 - adds r4, 0x1 - movs r0, 0x4 - ldrsh r7, [r6, r0] - mov r10, r7 - cmp r4, r10 - blt _08006D04 -_08006D1E: - lsls r0, r3, 1 - ldr r2, [sp] - adds r1, r5, r2 - adds r1, r0, r1 - ldr r4, _08006D48 - adds r0, r4, 0 - strh r0, [r1] - mov r7, r9 - cmp r7, 0 - beq _08006D50 - movs r0, 0x80 - lsls r0, 4 - adds r1, r0 - ldr r2, _08006D4C - adds r0, r2, 0 - strh r0, [r1] - b _08006E76 - .align 2, 0 -_08006D40: .4byte 0x0000f2db -_08006D44: .4byte 0x0000fad9 -_08006D48: .4byte 0x0000fed8 -_08006D4C: .4byte 0x0000fe93 -_08006D50: - movs r4, 0x80 - lsls r4, 4 - adds r1, r4 - ldr r7, _08006D60 - adds r0, r7, 0 - strh r0, [r1] - b _08006E76 - .align 2, 0 -_08006D60: .4byte 0x0000f2db -_08006D64: - lsls r1, r3, 1 - lsls r2, r4, 6 - ldr r0, [sp] - adds r0, r2 - mov r12, r0 - add r1, r12 - ldr r4, _08006DD8 - adds r0, r4, 0 - strh r0, [r1] - movs r7, 0x80 - lsls r7, 4 - mov r8, r7 - add r1, r8 - ldr r0, _08006DDC - mov r9, r0 - strh r0, [r1] - adds r3, 0x1 - movs r4, 0 - movs r1, 0x4 - ldrsh r0, [r6, r1] - adds r5, r2, 0 - cmp r4, r0 - bge _08006DBE - ldr r2, _08006DE0 - mov r10, r2 - lsls r1, r3, 1 - ldr r0, [sp] - add r0, r8 - adds r0, r5, r0 - adds r2, r1, r0 - add r1, r12 - mov r12, r9 -_08006DA4: - mov r7, r10 - strh r7, [r1] - mov r0, r12 - strh r0, [r2] - adds r2, 0x2 - adds r1, 0x2 - adds r3, 0x1 - adds r4, 0x1 - movs r0, 0x4 - ldrsh r7, [r6, r0] - mov r8, r7 - cmp r4, r8 - blt _08006DA4 -_08006DBE: - lsls r0, r3, 1 - ldr r2, [sp] - adds r1, r5, r2 - adds r0, r1 - ldr r4, _08006DE4 - adds r1, r4, 0 - strh r1, [r0] - movs r7, 0x80 - lsls r7, 4 - adds r0, r7 - ldr r2, _08006DDC - adds r1, r2, 0 - b _08006E74 - .align 2, 0 -_08006DD8: .4byte 0x0000fae8 -_08006DDC: .4byte 0x0000f2db -_08006DE0: .4byte 0x0000fae9 -_08006DE4: .4byte 0x0000fee8 -_08006DE8: - lsls r0, r3, 1 - lsls r2, r4, 6 - ldr r4, [sp] - adds r4, r2 - mov r12, r4 - add r0, r12 - ldr r7, _08006E28 - adds r1, r7, 0 - strh r1, [r0] - adds r3, 0x1 - movs r1, 0x4 - ldrsh r0, [r6, r1] - adds r5, r2, 0 - cmp r0, 0 - ble _08006E1C - ldr r2, _08006E2C - adds r1, r2, 0 - adds r4, r0, 0 - lsls r0, r3, 1 - add r0, r12 -_08006E10: - strh r1, [r0] - adds r0, 0x2 - adds r3, 0x1 - subs r4, 0x1 - cmp r4, 0 - bne _08006E10 -_08006E1C: - lsls r0, r3, 1 - ldr r4, [sp] - adds r1, r5, r4 - adds r0, r1 - ldr r7, _08006E30 - b _08006E72 - .align 2, 0 -_08006E28: .4byte 0x0000fadc -_08006E2C: .4byte 0x0000fadd -_08006E30: .4byte 0x0000fedc -_08006E34: - lsls r0, r3, 1 - lsls r2, r4, 6 - ldr r1, [sp] - adds r1, r2 - mov r12, r1 - add r0, r12 - ldr r4, _08006E88 - adds r1, r4, 0 - strh r1, [r0] - adds r3, 0x1 - movs r7, 0x4 - ldrsh r0, [r6, r7] - adds r5, r2, 0 - cmp r0, 0 - ble _08006E68 - ldr r2, _08006E8C - adds r1, r2, 0 - adds r4, r0, 0 - lsls r0, r3, 1 - add r0, r12 -_08006E5C: - strh r1, [r0] - adds r0, 0x2 - adds r3, 0x1 - subs r4, 0x1 - cmp r4, 0 - bne _08006E5C -_08006E68: - lsls r0, r3, 1 - ldr r4, [sp] - adds r1, r5, r4 - adds r0, r1 - ldr r7, _08006E90 -_08006E72: - adds r1, r7, 0 -_08006E74: - strh r1, [r0] -_08006E76: - add sp, 0x4 - pop {r3-r5} - mov r8, r3 - mov r9, r4 - mov r10, r5 - pop {r4-r7} - pop {r0} - bx r0 - .align 2, 0 -_08006E88: .4byte 0x0000fa93 -_08006E8C: .4byte 0x0000fa97 -_08006E90: .4byte 0x0000fe93 - thumb_func_end sub_8006C44 - thumb_func_start sub_8006E94 sub_8006E94: push {r4-r7,lr} diff --git a/src/text2.c b/src/text2.c index d59fb9e31..6b24b26df 100644 --- a/src/text2.c +++ b/src/text2.c @@ -6,14 +6,14 @@ extern const u32 gUnknown_80B8814[]; // text.s -extern void sub_8006AC4(struct UnkTextStruct1 *, s32, s32, u32, u16 *); -extern void sub_8006B70(struct UnkTextStruct1 *, s32, s32, s32, u16 *); -extern void sub_8006C44(struct UnkTextStruct1 *, s32, u16 *, u8); extern void sub_8006E94(struct UnkTextStruct1 *, s32, u32, const u8 *, u16 *); extern void sub_8008C6C(struct UnkTextStruct1 *, u32); void sub_800677C(struct UnkTextStruct1 *, s32, u16 *, u8); void sub_80069CC(struct UnkTextStruct1 *, s32, s32, s32, u16 *); +void sub_8006AC4(struct UnkTextStruct1 *, s32, s32, s32, u16 *); +void sub_8006B70(struct UnkTextStruct1 *, s32, s32, s32, u16 *); +void sub_8006C44(struct UnkTextStruct1 *, s32, u16 *, u8); void nullsub_152(void) { @@ -135,13 +135,13 @@ void sub_800677C(struct UnkTextStruct1 *a0, s32 a1, u16 *a2, u8 a3) s32 i; iVar5 = a0->unk0 - 1; - + if (a1 > 28) return; // Cannot combine these ifs for matching if (a1 < 0) return; - + switch (a0->unkC) { case 0: case 1: @@ -204,13 +204,13 @@ void sub_800677C(struct UnkTextStruct1 *a0, s32 a1, u16 *a2, u8 a3) } void sub_80069CC(struct UnkTextStruct1 *a0, s32 a1, s32 a2, s32 a3, u16 *a4) -{ +{ if (a2 > 28) return; // Cannot combine these ifs for matching if (a2 < 0) return; - + switch (a0->unkC) { case 1: case 2: @@ -243,4 +243,148 @@ void sub_80069CC(struct UnkTextStruct1 *a0, s32 a1, s32 a2, s32 a3, u16 *a4) (a4 + a2 * 0x20)[a1] = 0xF2B6; break; } +} + +void sub_8006AC4(struct UnkTextStruct1 *a0, s32 a1, s32 a2, s32 a3, u16 *a4) +{ + if (a2 > 28) + return; + // Cannot combine these ifs for matching + if (a2 < 0) + return; + + switch (a0->unkC) { + case 2: + (a4 + a2 * 0x20)[a1] = a3 | 0xF000; + (a4 + a2 * 0x20)[a1 + 0x400] = 0xF278; + break; + case 0: + case 1: + case 3: + case 4: + case 6: + (a4 + a2 * 0x20)[a1] = a3 | 0xF000; + (a4 + a2 * 0x20)[a1 + 0x400] = 0xF2DB; + break; + case 5: + case 7: + (a4 + a2 * 0x20)[a1] = a3 | 0xF000; + break; + } +} + +void sub_8006B70(struct UnkTextStruct1 *a0, s32 a1, s32 a2, s32 a3, u16 *a4) +{ + if (a2 > 28) + return; + // Cannot combine these ifs for matching + if (a2 < 0) + return; + + switch (a0->unkC) { + case 1: + case 2: + break; + case 0: + if (a3 == 0) { + (a4 + a2 * 0x20)[a1] = 0xF697; + (a4 + a2 * 0x20)[a1 + 0x400] = 0xF2DB; + break; + } + if (a3 == a0->unk6 - 1) { + (a4 + a2 * 0x20)[a1] = 0xFE97; + (a4 + a2 * 0x20)[a1 + 0x400] = 0xF2DB; + break; + } + // Fallthrough + case 3: + case 6: + (a4 + a2 * 0x20)[a1] = 0xF6DA; + (a4 + a2 * 0x20)[a1 + 0x400] = 0xF2DB; + break; + case 4: + (a4 + a2 * 0x20)[a1] = 0xF6EA; + (a4 + a2 * 0x20)[a1 + 0x400] = 0xF2DB; + break; + case 5: + (a4 + a2 * 0x20)[a1] = 0xF6DE; + break; + case 7: + (a4 + a2 * 0x20)[a1] = 0xF6B6; + break; + } +} + +void sub_8006C44(struct UnkTextStruct1 *a0, s32 a1, u16 *a2, u8 a3) +{ + s32 iVar5; + s32 i; + + iVar5 = a0->unk0 - 1; + + if (a1 > 28) + return; + // Cannot combine these ifs for matching + if (a1 < 0) + return; + + switch (a0->unkC) { + case 0: + case 1: + case 2: + break; + case 3: + case 6: + (a2 + a1 * 0x20)[iVar5] = 0xFAD8; + if (a3 != 0) + (a2 + a1 * 0x20)[iVar5 + 0x400] = 0xFA93; + else + (a2 + a1 * 0x20)[iVar5 + 0x400] = 0xF2DB; + iVar5++; + for (i = 0; i < a0->unk4; i++) { + (a2 + a1 * 0x20)[iVar5] = 0xFAD9; + (a2 + a1 * 0x20)[iVar5 + 0x400] = 0xF2DB; + iVar5++; + } + + (a2 + a1 * 0x20)[iVar5] = 0xFED8; + if (a3 != 0) + (a2 + a1 * 0x20)[iVar5 + 0x400] = 0xFE93; + else + (a2 + a1 * 0x20)[iVar5 + 0x400] = 0xF2DB; + break; + case 4: + (a2 + a1 * 0x20)[iVar5] = 0xFAE8; + (a2 + a1 * 0x20)[iVar5 + 0x400] = 0xF2DB; + iVar5++; + for (i = 0; i < a0->unk4; i++) { + (a2 + a1 * 0x20)[iVar5] = 0xFAE9; + (a2 + a1 * 0x20)[iVar5 + 0x400] = 0xF2DB; + iVar5++; + } + + (a2 + a1 * 0x20)[iVar5] = 0xFEE8; + (a2 + a1 * 0x20)[iVar5 + 0x400] = 0xF2DB; + break; + case 5: + (a2 + a1 * 0x20)[iVar5] = 0xFADC; + iVar5++; + for (i = 0; i < a0->unk4; i++) { + (a2 + a1 * 0x20)[iVar5] = 0xFADD; + iVar5++; + } + + (a2 + a1 * 0x20)[iVar5] = 0xFEDC; + break; + case 7: + (a2 + a1 * 0x20)[iVar5] = 0xFA93; + iVar5++; + for (i = 0; i < a0->unk4; i++) { + (a2 + a1 * 0x20)[iVar5] = 0xFA97; + iVar5++; + } + + (a2 + a1 * 0x20)[iVar5] = 0xFE93; + break; + } } \ No newline at end of file