From 751674c27a87c261d6a02df3923e8e3bef85c7d1 Mon Sep 17 00:00:00 2001 From: DizzyEggg Date: Wed, 25 Sep 2024 09:50:56 +0200 Subject: [PATCH 01/11] sub_8007E64 --- asm/text.s | 178 --------------------------------------------- include/text2.h | 2 +- src/code_801D014.c | 2 +- src/load_screen.c | 2 +- src/text2.c | 58 ++++++++++++++- 5 files changed, 58 insertions(+), 184 deletions(-) diff --git a/asm/text.s b/asm/text.s index 908647389..5ad2b359b 100644 --- a/asm/text.s +++ b/asm/text.s @@ -5,184 +5,6 @@ .text - thumb_func_start sub_8007E64 -sub_8007E64: - push {r4-r7,lr} - mov r7, r10 - mov r6, r9 - mov r5, r8 - push {r5-r7} - sub sp, 0x10 - str r1, [sp] - str r3, [sp, 0x4] - ldr r7, [sp, 0x30] - ldr r1, [sp, 0x34] - mov r9, r1 - ldr r1, [sp, 0x38] - mov r10, r1 - ldr r5, [sp, 0x3C] - lsls r1, r2, 3 - adds r1, r2 - lsls r1, 3 - adds r4, r0, r1 - adds r0, r3, 0 - cmp r0, 0 - bge _08007E90 - adds r0, 0x7 -_08007E90: - asrs r0, 3 - str r0, [sp, 0x4] - adds r0, r7, 0 - cmp r7, 0 - bge _08007E9C - adds r0, r7, 0x7 -_08007E9C: - asrs r7, r0, 3 - mov r0, r9 - cmp r0, 0 - bge _08007EA6 - adds r0, 0x7 -_08007EA6: - asrs r0, 3 - mov r9, r0 - mov r0, r10 - cmp r0, 0 - bge _08007EB2 - adds r0, 0x7 -_08007EB2: - asrs r0, 3 - mov r10, r0 - ldr r2, [sp, 0x40] - lsls r2, 12 - str r2, [sp, 0x40] - movs r1, 0x8 - ldrsh r0, [r4, r1] - cmp r7, r0 - bge _08007F98 - movs r2, 0x4 - ldrsh r0, [r4, r2] - muls r0, r7 - ldr r1, [sp, 0x4] - adds r0, r1 - lsls r0, 5 - ldr r1, [r4, 0x18] - adds r1, r0 - mov r8, r1 - movs r2, 0 - b _08007F92 -_08007EDA: - ldr r6, [sp, 0x4] - mov r3, r8 - adds r0, r7, 0x1 - str r0, [sp, 0xC] - mov r1, r9 - cmp r1, 0 - ble _08007F7A - mov r12, r9 -_08007EEA: - movs r2, 0x4 - ldrsh r0, [r4, r2] - cmp r6, r0 - bge _08007F68 - ldr r0, [r4, 0x3C] - cmp r0, r3 - bls _08007EFA - str r3, [r4, 0x3C] -_08007EFA: - ldm r5!, {r0} - stm r3!, {r0} - ldm r5!, {r0} - stm r3!, {r0} - ldm r5!, {r0} - stm r3!, {r0} - ldm r5!, {r0} - stm r3!, {r0} - ldm r5!, {r0} - stm r3!, {r0} - ldm r5!, {r0} - stm r3!, {r0} - ldm r5!, {r0} - stm r3!, {r0} - ldr r0, [r5] - stm r3!, {r0} - ldr r0, [r4, 0x40] - cmp r0, r3 - bcs _08007F22 - str r3, [r4, 0x40] -_08007F22: - adds r5, 0x4 - movs r1, 0x2 - ldrsh r0, [r4, r1] - adds r0, r7 - movs r2, 0 - ldrsh r1, [r4, r2] - adds r1, r6 - lsls r1, 1 - lsls r0, 6 - ldr r2, [sp] - adds r0, r2 - adds r1, r0 - ldrh r2, [r1] - ldr r0, _08007F64 - ands r0, r2 - strh r0, [r1] - movs r1, 0x2 - ldrsh r0, [r4, r1] - adds r0, r7 - movs r2, 0 - ldrsh r1, [r4, r2] - adds r1, r6 - lsls r1, 1 - lsls r0, 6 - ldr r2, [sp] - adds r0, r2 - adds r1, r0 - ldrh r2, [r1] - ldr r0, [sp, 0x40] - orrs r0, r2 - strh r0, [r1] - b _08007F6C - .align 2, 0 -_08007F64: .4byte 0x00000fff -_08007F68: - adds r3, 0x20 - adds r5, 0x20 -_08007F6C: - adds r6, 0x1 - movs r0, 0x1 - negs r0, r0 - add r12, r0 - mov r1, r12 - cmp r1, 0 - bne _08007EEA -_08007F7A: - ldr r7, [sp, 0xC] - ldr r0, [r4, 0x20] - lsls r0, 2 - add r8, r0 - movs r2, 0x20 - add r8, r2 - movs r1, 0x8 - ldrsh r0, [r4, r1] - cmp r7, r0 - bge _08007F98 - ldr r2, [sp, 0x8] - adds r2, 0x1 -_08007F92: - str r2, [sp, 0x8] - cmp r2, r10 - blt _08007EDA -_08007F98: - add sp, 0x10 - pop {r3-r5} - mov r8, r3 - mov r9, r4 - mov r10, r5 - pop {r4-r7} - pop {r0} - bx r0 - thumb_func_end sub_8007E64 - thumb_func_start sub_8007FA8 sub_8007FA8: adds r3, r0, 0 diff --git a/include/text2.h b/include/text2.h index bfd1d698c..0dd6c9388 100644 --- a/include/text2.h +++ b/include/text2.h @@ -39,7 +39,7 @@ void sub_80078A4(u32, s32, s32, s32, u32); void sub_800792C(u32, s32, s32, s32, u32); void sub_8007A78(u32, s32, s32, s32, u32); void sub_8007B7C(u32, s32, s32, s32, u32); -void sub_8007E20(u32, u32, u32, u32, u32, u8 *, u32); +void sub_8007E20(u32 a0, u32 a1, u32 a2, u32 a3, u32 a4, u32 *a5, u32 a6); // text.s extern struct unkChar *GetCharacter(u32); diff --git a/src/code_801D014.c b/src/code_801D014.c index b8325af05..1d9bbaed6 100644 --- a/src/code_801D014.c +++ b/src/code_801D014.c @@ -621,6 +621,6 @@ static void LoadTeamRankBadge(u32 a0, u32 a1, u32 a2) rank = GetRescueTeamRank(); teamBadgePic = &teamBadgePic[rank * 128]; - sub_8007E20(a0, a1, a2, 16, 16, teamBadgePic, 14); + sub_8007E20(a0, a1, a2, 16, 16, (void *) teamBadgePic, 14); CloseFile(teamBadgeFile); } diff --git a/src/load_screen.c b/src/load_screen.c index a113d9c25..2acdd182b 100644 --- a/src/load_screen.c +++ b/src/load_screen.c @@ -388,7 +388,7 @@ void sub_80397B4(void) for(index = 0; index < 12; index++) { if (sub_80023E4(gUnknown_203B3B8[index])) { - sub_8007E20(0,x,y,0x10,0x10,(u8 *)(*((s32*)clmkFile->data) + index * 0x80), gUnknown_203B388[index]); + sub_8007E20(0,x,y,0x10,0x10,(u32 *)(*((s32*)clmkFile->data) + index * 0x80), gUnknown_203B388[index]); x += 16; } } diff --git a/src/text2.c b/src/text2.c index b147a87c1..488771757 100644 --- a/src/text2.c +++ b/src/text2.c @@ -10,7 +10,7 @@ extern const struct unkStruct_80B8824 gUnknown_80B8824; extern const struct unkStruct_80B8848 gUnknown_80B8848; // text.s -extern void sub_8007E64(UnkTextStruct1 *, u16 *, u32, u32, u32, u32, u32, u8 *, u32); +void sub_8007E64(UnkTextStruct1 *a0, u16 a1[32][32], u32 a2, s32 a3, s32 a4, s32 a5, s32 a6, u32 *a7, u32 a8); extern void PrepareTextbox_8008C6C(UnkTextStruct1 *, u32); void nullsub_129(u32, s32, s32, s32, u32); @@ -2463,11 +2463,63 @@ void sub_8007D00(UnkTextStruct1 *a0, u32 a1, s32 x, s32 y, s32 a4, s32 color) "\tbx r0"); } -void sub_8007E20(u32 a0, u32 a1, u32 a2, u32 a3, u32 a4, u8 *a5, u32 a6) +void sub_8007E20(u32 a0, u32 a1, u32 a2, u32 a3, u32 a4, u32 *a5, u32 a6) { - sub_8007E64(gUnknown_2027370, &gUnknown_202B038[0][0][0], a0, a1, a2, a3, a4, a5, a6); + sub_8007E64(gUnknown_2027370, gUnknown_202B038[0], a0, a1, a2, a3, a4, a5, a6); } UNUSED static void nullsub_160(void) { } + +void sub_8007E64(UnkTextStruct1 *a0, u16 a1[32][32], u32 a2, s32 a3, s32 a4, s32 a5, s32 a6, u32 *a7, u32 a8) +{ + s32 i, j; + UnkTextStruct1 *r4 = &a0[a2]; + + a3 /= 8; + a4 /= 8; + a5 /= 8; + a6 /= 8; + a8 *= 4096; + if (a4 < r4->unk8) { + s32 id = (r4->unk4 * a4) + a3; + u32 *r8 = &r4->unk18[id * 8]; + + for (i = 0; i < a6; i++) { + s32 r6 = a3; + u32 *r3 = r8; + for (j = 0; j < a5; j++) { + if (r6 < r4->unk4) { + if (r4->unk3C > r3) { + r4->unk3C = r3; + } + *(r3++) = *(a7++); + *(r3++) = *(a7++); + *(r3++) = *(a7++); + *(r3++) = *(a7++); + *(r3++) = *(a7++); + *(r3++) = *(a7++); + *(r3++) = *(a7++); + *(r3++) = *a7; + if (r4->unk40 < r3) { + r4->unk40 = r3; + } + a7++; + a1[r4->unk2 + a4][r4->unk0 + r6] &= 0xFFF; + a1[r4->unk2 + a4][r4->unk0 + r6] |= a8; + } + else { + r3 += 8; + a7 += 8; + } + r6++; + } + a4++; + r8 += r4->unk20; + r8 += 8; + if (a4 >= r4->unk8) + break; + } + } +} From 82986f2b746af15a935ed6ea5941fcf2c531e06a Mon Sep 17 00:00:00 2001 From: DizzyEggg Date: Wed, 25 Sep 2024 11:07:23 +0200 Subject: [PATCH 02/11] sub_800829C --- asm/text.s | 492 ---------------------------------------------------- src/text2.c | 203 +++++++++++++++++++--- 2 files changed, 177 insertions(+), 518 deletions(-) diff --git a/asm/text.s b/asm/text.s index 5ad2b359b..cfbb08b75 100644 --- a/asm/text.s +++ b/asm/text.s @@ -5,499 +5,7 @@ .text - thumb_func_start sub_8007FA8 -sub_8007FA8: - adds r3, r0, 0 - lsrs r0, r3, 28 - lsrs r1, r3, 20 - movs r2, 0xF0 - ands r1, r2 - orrs r0, r1 - lsrs r1, r3, 12 - movs r2, 0xF0 - lsls r2, 4 - ands r1, r2 - orrs r0, r1 - lsrs r1, r3, 4 - movs r2, 0xF0 - lsls r2, 8 - ands r1, r2 - orrs r0, r1 - lsls r1, r3, 4 - movs r2, 0xF0 - lsls r2, 12 - ands r1, r2 - orrs r0, r1 - lsls r1, r3, 12 - movs r2, 0xF0 - lsls r2, 16 - ands r1, r2 - orrs r0, r1 - lsls r1, r3, 20 - movs r2, 0xF0 - lsls r2, 20 - ands r1, r2 - orrs r0, r1 - lsls r3, 28 - orrs r0, r3 - bx lr - thumb_func_end sub_8007FA8 - thumb_func_start sub_8007FEC -sub_8007FEC: - push {r4-r6,lr} - mov r6, r9 - mov r5, r8 - push {r5,r6} - sub sp, 0x14 - mov r8, r0 - mov r9, r1 - ldr r4, [sp, 0x2C] - ldr r5, [sp, 0x30] - ldr r6, [sp, 0x34] - ldr r0, _08008024 - ldr r1, _08008028 - str r2, [sp] - str r3, [sp, 0x4] - str r4, [sp, 0x8] - str r5, [sp, 0xC] - str r6, [sp, 0x10] - mov r2, r8 - mov r3, r9 - bl sub_8008030 - add sp, 0x14 - pop {r3,r4} - mov r8, r3 - mov r9, r4 - pop {r4-r6} - pop {r0} - bx r0 - .align 2, 0 -_08008024: .4byte gUnknown_2027370 -_08008028: .4byte gUnknown_202B038 - thumb_func_end sub_8007FEC - - thumb_func_start nullsub_161 -nullsub_161: - bx lr - thumb_func_end nullsub_161 - - thumb_func_start sub_8008030 -sub_8008030: - push {r4-r7,lr} - mov r7, r10 - mov r6, r9 - mov r5, r8 - push {r5-r7} - sub sp, 0x10 - str r1, [sp] - ldr r1, [sp, 0x30] - mov r8, r1 - ldr r6, [sp, 0x3C] - lsls r1, r2, 3 - adds r1, r2 - lsls r1, 3 - adds r5, r0, r1 - adds r0, r3, 0 - cmp r3, 0 - bge _08008054 - adds r0, r3, 0x7 -_08008054: - asrs r3, r0, 3 - mov r0, r8 - cmp r0, 0 - bge _0800805E - adds r0, 0x7 -_0800805E: - asrs r0, 3 - mov r8, r0 - ldr r0, [sp, 0x34] - cmp r0, 0 - bge _0800806A - adds r0, 0x7 -_0800806A: - asrs r0, 3 - str r0, [sp, 0x34] - ldr r0, [sp, 0x38] - cmp r0, 0 - bge _08008076 - adds r0, 0x7 -_08008076: - asrs r0, 3 - str r0, [sp, 0x38] - ldr r2, [sp, 0x40] - lsls r2, 12 - str r2, [sp, 0x40] - movs r1, 0x8 - ldrsh r0, [r5, r1] - cmp r8, r0 - blt _0800808A - b _08008194 -_0800808A: - movs r2, 0x4 - ldrsh r0, [r5, r2] - mov r1, r8 - muls r1, r0 - adds r0, r1, 0 - ldr r1, [sp, 0x34] - adds r2, r3, r1 - adds r0, r2 - lsls r0, 5 - ldr r1, [r5, 0x18] - adds r1, r0 - mov r10, r1 - movs r3, 0 - str r3, [sp, 0x4] - str r2, [sp, 0xC] - ldr r0, [sp, 0x38] - cmp r3, r0 - bge _08008194 -_080080AE: - ldr r7, [sp, 0xC] - mov r4, r10 - mov r1, r8 - adds r1, 0x1 - str r1, [sp, 0x8] - ldr r2, [sp, 0x34] - cmp r2, 0 - ble _08008172 - mov r9, r2 -_080080C0: - subs r7, 0x1 - subs r4, 0x20 - movs r3, 0x4 - ldrsh r0, [r5, r3] - cmp r7, r0 - bge _08008164 - ldr r0, [r5, 0x3C] - cmp r0, r4 - bls _080080D4 - str r4, [r5, 0x3C] -_080080D4: - ldm r6!, {r0} - bl sub_8007FA8 - str r0, [r4] - ldm r6!, {r0} - bl sub_8007FA8 - str r0, [r4, 0x4] - ldm r6!, {r0} - bl sub_8007FA8 - str r0, [r4, 0x8] - ldm r6!, {r0} - bl sub_8007FA8 - str r0, [r4, 0xC] - ldm r6!, {r0} - bl sub_8007FA8 - str r0, [r4, 0x10] - ldm r6!, {r0} - bl sub_8007FA8 - str r0, [r4, 0x14] - ldm r6!, {r0} - bl sub_8007FA8 - str r0, [r4, 0x18] - ldm r6!, {r0} - bl sub_8007FA8 - str r0, [r4, 0x1C] - adds r1, r4, 0 - adds r1, 0x20 - ldr r0, [r5, 0x40] - cmp r0, r1 - bcs _08008120 - str r1, [r5, 0x40] -_08008120: - movs r1, 0x2 - ldrsh r0, [r5, r1] - add r0, r8 - movs r2, 0 - ldrsh r1, [r5, r2] - adds r1, r7 - lsls r1, 1 - lsls r0, 6 - ldr r3, [sp] - adds r0, r3 - adds r1, r0 - ldrh r0, [r1] - ldr r3, _08008160 - adds r2, r3, 0 - ands r0, r2 - strh r0, [r1] - movs r1, 0x2 - ldrsh r0, [r5, r1] - add r0, r8 - movs r2, 0 - ldrsh r1, [r5, r2] - adds r1, r7 - lsls r1, 1 - lsls r0, 6 - ldr r3, [sp] - adds r0, r3 - adds r1, r0 - ldrh r2, [r1] - ldr r0, [sp, 0x40] - orrs r0, r2 - strh r0, [r1] - b _08008166 - .align 2, 0 -_08008160: .4byte 0x00000fff -_08008164: - adds r6, 0x20 -_08008166: - movs r0, 0x1 - negs r0, r0 - add r9, r0 - mov r1, r9 - cmp r1, 0 - bne _080080C0 -_08008172: - ldr r2, [sp, 0x8] - mov r8, r2 - ldr r0, [r5, 0x20] - lsls r0, 2 - add r10, r0 - movs r3, 0x20 - add r10, r3 - movs r1, 0x8 - ldrsh r0, [r5, r1] - cmp r8, r0 - bge _08008194 - ldr r2, [sp, 0x4] - adds r2, 0x1 - str r2, [sp, 0x4] - ldr r3, [sp, 0x38] - cmp r2, r3 - blt _080080AE -_08008194: - add sp, 0x10 - pop {r3-r5} - mov r8, r3 - mov r9, r4 - mov r10, r5 - pop {r4-r7} - pop {r0} - bx r0 - thumb_func_end sub_8008030 - - thumb_func_start sub_80081A4 -sub_80081A4: - push {r4-r7,lr} - mov r7, r10 - mov r6, r9 - mov r5, r8 - push {r5-r7} - sub sp, 0x4 - str r1, [sp] - lsls r1, r0, 3 - adds r1, r0 - lsls r1, 3 - ldr r0, _08008234 - adds r6, r1, r0 - lsls r3, 7 - ldr r0, _08008238 - adds r3, r0 - ldr r0, [sp] - cmp r0, 0 - bge _080081CA - adds r0, 0x7 -_080081CA: - asrs r0, 3 - str r0, [sp] - adds r0, r2, 0 - cmp r2, 0 - bge _080081D6 - adds r0, r2, 0x7 -_080081D6: - asrs r2, r0, 3 - movs r0, 0x2 - mov r9, r0 - mov r10, r0 - movs r1, 0x8 - ldrsh r0, [r6, r1] - cmp r2, r0 - bge _08008262 - movs r7, 0x4 - ldrsh r0, [r6, r7] - muls r0, r2 - ldr r1, [sp] - adds r0, r1 - lsls r0, 5 - ldr r1, [r6, 0x28] - adds r5, r1, r0 - movs r7, 0 - mov r8, r7 -_080081FA: - ldr r4, [sp] - adds r1, r5, 0 - adds r2, 0x1 - mov r12, r2 - mov r0, r9 - cmp r0, 0 - beq _08008248 - mov r2, r9 -_0800820A: - movs r7, 0x4 - ldrsh r0, [r6, r7] - cmp r4, r0 - bge _0800823C - ldm r3!, {r0} - stm r1!, {r0} - ldm r3!, {r0} - stm r1!, {r0} - ldm r3!, {r0} - stm r1!, {r0} - ldm r3!, {r0} - stm r1!, {r0} - ldm r3!, {r0} - stm r1!, {r0} - ldm r3!, {r0} - stm r1!, {r0} - ldm r3!, {r0} - stm r1!, {r0} - ldm r3!, {r0} - stm r1!, {r0} - b _08008240 - .align 2, 0 -_08008234: .4byte gUnknown_2027370 -_08008238: .4byte gUnknown_80B86B4 -_0800823C: - adds r1, 0x20 - adds r3, 0x20 -_08008240: - adds r4, 0x1 - subs r2, 0x1 - cmp r2, 0 - bne _0800820A -_08008248: - mov r2, r12 - ldr r0, [r6, 0x20] - lsls r0, 2 - adds r5, r0 - adds r5, 0x20 - movs r1, 0x8 - ldrsh r0, [r6, r1] - cmp r2, r0 - bge _08008262 - movs r7, 0x1 - add r8, r7 - cmp r8, r10 - blt _080081FA -_08008262: - add sp, 0x4 - pop {r3-r5} - mov r8, r3 - mov r9, r4 - mov r10, r5 - pop {r4-r7} - pop {r0} - bx r0 - thumb_func_end sub_80081A4 - - thumb_func_start sub_8008274 -sub_8008274: - push {r4,lr} - sub sp, 0x4 - adds r4, r0, 0 - adds r3, r1, 0 - ldr r0, _08008290 - ldr r1, _08008294 - str r2, [sp] - adds r2, r4, 0 - bl sub_800829C - add sp, 0x4 - pop {r4} - pop {r0} - bx r0 - .align 2, 0 -_08008290: .4byte gUnknown_2027370 -_08008294: .4byte gUnknown_202B038 - thumb_func_end sub_8008274 - - thumb_func_start nullsub_162 -nullsub_162: - bx lr - thumb_func_end nullsub_162 - - thumb_func_start sub_800829C -sub_800829C: - push {r4-r7,lr} - mov r7, r8 - push {r7} - mov r8, r1 - ldr r7, [sp, 0x18] - lsls r1, r2, 3 - adds r1, r2 - lsls r1, 3 - adds r4, r0, r1 - lsls r7, 12 - ldr r0, [r4, 0x18] - movs r1, 0x4 - ldrsh r2, [r4, r1] - movs r5, 0x8 - ldrsh r1, [r4, r5] - lsls r1, 5 - muls r1, r2 - adds r2, r3, 0 - bl DecompressAT - movs r2, 0 - movs r1, 0x8 - ldrsh r0, [r4, r1] - cmp r2, r0 - bge _08008312 - movs r0, 0x4 - ldrsh r5, [r4, r0] - mov r12, r5 -_080082D4: - adds r5, r2, 0x1 - mov r1, r12 - cmp r1, 0 - ble _08008308 - movs r0, 0x2 - ldrsh r1, [r4, r0] - adds r1, r2 - movs r2, 0 - ldrsh r0, [r4, r2] - lsls r1, 6 - ldr r6, _08008330 - lsls r0, 1 - adds r0, r1 - mov r1, r8 - adds r2, r0, r1 - movs r0, 0x4 - ldrsh r3, [r4, r0] -_080082F6: - ldrh r1, [r2] - adds r0, r6, 0 - ands r0, r1 - orrs r0, r7 - strh r0, [r2] - adds r2, 0x2 - subs r3, 0x1 - cmp r3, 0 - bne _080082F6 -_08008308: - adds r2, r5, 0 - movs r1, 0x8 - ldrsh r0, [r4, r1] - cmp r2, r0 - blt _080082D4 -_08008312: - ldr r0, [r4, 0x28] - str r0, [r4, 0x30] - ldr r0, [r4, 0x1C] - str r0, [r4, 0x34] - ldr r0, [r4, 0x2C] - str r0, [r4, 0x38] - adds r1, r4, 0 - adds r1, 0x44 - movs r0, 0x1 - strb r0, [r1] - pop {r3} - mov r8, r3 - pop {r4-r7} - pop {r0} - bx r0 - .align 2, 0 -_08008330: .4byte 0x00000fff - thumb_func_end sub_800829C thumb_func_start sub_8008334 sub_8008334: diff --git a/src/text2.c b/src/text2.c index 488771757..6676aa0b1 100644 --- a/src/text2.c +++ b/src/text2.c @@ -1,6 +1,7 @@ #include "global.h" #include "text1.h" #include "text2.h" +#include "decompress.h" // data.s extern const u32 gUnknown_80B853C[16]; @@ -2475,51 +2476,201 @@ UNUSED static void nullsub_160(void) void sub_8007E64(UnkTextStruct1 *a0, u16 a1[32][32], u32 a2, s32 a3, s32 a4, s32 a5, s32 a6, u32 *a7, u32 a8) { s32 i, j; - UnkTextStruct1 *r4 = &a0[a2]; + UnkTextStruct1 *strPtr = &a0[a2]; a3 /= 8; a4 /= 8; a5 /= 8; a6 /= 8; a8 *= 4096; - if (a4 < r4->unk8) { - s32 id = (r4->unk4 * a4) + a3; - u32 *r8 = &r4->unk18[id * 8]; + if (a4 < strPtr->unk8) { + s32 id = (strPtr->unk4 * a4) + a3; + u32 *unk18Ptr = &strPtr->unk18[id * 8]; for (i = 0; i < a6; i++) { - s32 r6 = a3; - u32 *r3 = r8; + s32 xMaybe = a3; + u32 *loopUnk18Ptr = unk18Ptr; for (j = 0; j < a5; j++) { - if (r6 < r4->unk4) { - if (r4->unk3C > r3) { - r4->unk3C = r3; + if (xMaybe < strPtr->unk4) { + if (strPtr->unk3C > loopUnk18Ptr) { + strPtr->unk3C = loopUnk18Ptr; } - *(r3++) = *(a7++); - *(r3++) = *(a7++); - *(r3++) = *(a7++); - *(r3++) = *(a7++); - *(r3++) = *(a7++); - *(r3++) = *(a7++); - *(r3++) = *(a7++); - *(r3++) = *a7; - if (r4->unk40 < r3) { - r4->unk40 = r3; + *(loopUnk18Ptr++) = *(a7++); + *(loopUnk18Ptr++) = *(a7++); + *(loopUnk18Ptr++) = *(a7++); + *(loopUnk18Ptr++) = *(a7++); + *(loopUnk18Ptr++) = *(a7++); + *(loopUnk18Ptr++) = *(a7++); + *(loopUnk18Ptr++) = *(a7++); + *(loopUnk18Ptr++) = *a7; + if (strPtr->unk40 < loopUnk18Ptr) { + strPtr->unk40 = loopUnk18Ptr; } a7++; - a1[r4->unk2 + a4][r4->unk0 + r6] &= 0xFFF; - a1[r4->unk2 + a4][r4->unk0 + r6] |= a8; + a1[strPtr->unk2 + a4][strPtr->unk0 + xMaybe] &= 0xFFF; + a1[strPtr->unk2 + a4][strPtr->unk0 + xMaybe] |= a8; } else { - r3 += 8; + loopUnk18Ptr += 8; a7 += 8; } - r6++; + xMaybe++; } a4++; - r8 += r4->unk20; - r8 += 8; - if (a4 >= r4->unk8) + unk18Ptr += strPtr->unk20; + unk18Ptr += 8; + if (a4 >= strPtr->unk8) break; } } } + +u32 sub_8007FA8(u32 a0) +{ + u32 r0; + + r0 = (a0 >> 28) & 0xF; + r0 |= (a0 >> 20) & 0xF0; + r0 |= (a0 >> 12) & 0xF00; + r0 |= (a0 >> 4) & 0xF000; + r0 |= (a0 << 4) & 0xF0000; + r0 |= (a0 << 12) & 0xF00000; + r0 |= (a0 << 20) & 0xF000000; + r0 |= (a0 << 28) & 0xF0000000; + + return r0; +} + +void sub_8008030(UnkTextStruct1 *a0, u16 a1[32][32], u32 a2, s32 a3, s32 a4, s32 a5, s32 a6, u32 *a7, u32 a8); + +UNUSED void sub_8007FEC(u32 a0, u32 a1, u32 a2, u32 a3, u32 a4, u32 *a5, u32 a6) +{ + sub_8008030(gUnknown_2027370, gUnknown_202B038[0], a0, a1, a2, a3, a4, a5, a6); +} + +void nullsub_161(void) {} + +// Similar to sub_8007E64 +void sub_8008030(UnkTextStruct1 *a0, u16 a1[32][32], u32 a2, s32 a3, s32 a4, s32 a5, s32 a6, u32 *a7, u32 a8) +{ + s32 i, j; + UnkTextStruct1 *strPtr = &a0[a2]; + + a3 /= 8; + a4 /= 8; + a5 /= 8; + a6 /= 8; + a8 *= 4096; + if (a4 < strPtr->unk8) { + u32 *unk18Ptr = &strPtr->unk18[((strPtr->unk4 * a4) + (a3 + a5)) * 8]; + for (i = 0; i < a6; i++) { + s32 xMaybe = a3 + a5; + u32 *loopUnk18Ptr = unk18Ptr; + for (j = 0; j < a5; j++) { + xMaybe--; + loopUnk18Ptr -= 8; + if (xMaybe < strPtr->unk4) { + if (strPtr->unk3C > loopUnk18Ptr) { + strPtr->unk3C = loopUnk18Ptr; + } + loopUnk18Ptr[0] = sub_8007FA8(*(a7++)); + loopUnk18Ptr[1] = sub_8007FA8(*(a7++)); + loopUnk18Ptr[2] = sub_8007FA8(*(a7++)); + loopUnk18Ptr[3] = sub_8007FA8(*(a7++)); + loopUnk18Ptr[4] = sub_8007FA8(*(a7++)); + loopUnk18Ptr[5] = sub_8007FA8(*(a7++)); + loopUnk18Ptr[6] = sub_8007FA8(*(a7++)); + loopUnk18Ptr[7] = sub_8007FA8(*(a7++)); + if (strPtr->unk40 < loopUnk18Ptr + 8) { + strPtr->unk40 = loopUnk18Ptr + 8; + } + a1[strPtr->unk2 + a4][strPtr->unk0 + xMaybe] &= 0xFFF; + a1[strPtr->unk2 + a4][strPtr->unk0 + xMaybe] |= a8; + } + else { + a7 += 8; + } + } + a4++; + unk18Ptr += strPtr->unk20; + unk18Ptr += 8; + if (a4 >= strPtr->unk8) + break; + } + } +} + +extern const u32 gUnknown_80B86B4[][32]; + +// Similar to sub_8007E64 +UNUSED void sub_80081A4(s32 a0, s32 a3, s32 a4, s32 a7Id) +{ + s32 i, j, a5, a6; + UnkTextStruct1 *strPtr = &gUnknown_2027370[a0]; + const u32 *a7 = gUnknown_80B86B4[a7Id]; + + a3 /= 8; + a4 /= 8; + a5 = 2; + a6 = 2; + if (a4 < strPtr->unk8) { + s32 id = (strPtr->unk4 * a4) + a3; + u32 *unk18Ptr = &strPtr->unk28[id * 8]; + + for (i = 0; i < a6; i++) { + s32 xMaybe = a3; + u32 *loopUnk18Ptr = unk18Ptr; + for (j = 0; j < a5; j++) { + if (xMaybe < strPtr->unk4) { + *(loopUnk18Ptr++) = *(a7++); + *(loopUnk18Ptr++) = *(a7++); + *(loopUnk18Ptr++) = *(a7++); + *(loopUnk18Ptr++) = *(a7++); + *(loopUnk18Ptr++) = *(a7++); + *(loopUnk18Ptr++) = *(a7++); + *(loopUnk18Ptr++) = *(a7++); + *(loopUnk18Ptr++) = *a7; + a7++; + } + else { + loopUnk18Ptr += 8; + a7 += 8; + } + xMaybe++; + } + a4++; + unk18Ptr += strPtr->unk20; + unk18Ptr += 8; + if (a4 >= strPtr->unk8) + break; + } + } +} + +void sub_800829C(UnkTextStruct1 *a0, u16 a1[32][32], s32 a2, const u8 *compressedData, u32 a4); + +void sub_8008274(s32 a0, const u8 *compressedData, s32 a2) +{ + sub_800829C(gUnknown_2027370, gUnknown_202B038[0], a0, compressedData, a2); +} + +void nullsub_162() {} + +void sub_800829C(UnkTextStruct1 *a0, u16 a1[32][32], s32 a2, const u8 *compressedData, u32 a4) +{ + s32 i, j; + UnkTextStruct1 *strPtr = &a0[a2]; + + a4 *= 4096; + DecompressAT((u8 *)strPtr->unk18, (strPtr->unk4 * 32) * strPtr->unk8, compressedData); + for (i = 0; i < strPtr->unk8; i++) { + for (j = 0; j < strPtr->unk4; j++) { + a1[strPtr->unk2 + i][strPtr->unk0 + j] &= 0xFFF; + a1[strPtr->unk2 + i][strPtr->unk0 + j] |= a4; + } + } + strPtr->unk30 = strPtr->unk28; + strPtr->unk34 = strPtr->unk1C; + strPtr->unk38 = strPtr->unk2C; + strPtr->unk44 = 1; +} From 6bd9c31ee9129b2d21300e98be3d67eb278caf72 Mon Sep 17 00:00:00 2001 From: DizzyEggg Date: Wed, 25 Sep 2024 13:32:34 +0200 Subject: [PATCH 03/11] xxx_get_next_char_from_string --- asm/text.s | 499 ------------------------------------------- include/text2.h | 9 +- src/code_8012A18_1.c | 4 +- src/code_803D110.c | 3 +- src/menu_input.c | 4 +- src/text2.c | 190 +++++++++++++++- 6 files changed, 200 insertions(+), 509 deletions(-) diff --git a/asm/text.s b/asm/text.s index cfbb08b75..e21244126 100644 --- a/asm/text.s +++ b/asm/text.s @@ -7,505 +7,6 @@ - thumb_func_start sub_8008334 -sub_8008334: - push {r4-r7,lr} - adds r7, r0, 0 - mov r12, r1 - ldr r4, [r7] - ldr r1, [r1] - movs r3, 0 - movs r2, 0 - movs r6, 0xF - movs r5, 0x1C -_08008346: - lsls r2, 4 - lsls r3, 4 - adds r0, r4, 0 - ands r0, r6 - orrs r2, r0 - adds r0, r1, 0 - ands r0, r6 - orrs r3, r0 - lsrs r4, 4 - lsrs r1, 4 - subs r5, 0x4 - cmp r5, 0 - bge _08008346 - str r3, [r7] - mov r0, r12 - str r2, [r0] - pop {r4-r7} - pop {r0} - bx r0 - thumb_func_end sub_8008334 - - thumb_func_start sub_800836C -sub_800836C: - push {r4,r5,lr} - adds r4, r0, 0 - adds r5, r1, 0 - adds r3, r2, 0 - ldr r0, _08008384 - adds r1, r4, 0 - adds r2, r5, 0 - bl sub_800838C - pop {r4,r5} - pop {r0} - bx r0 - .align 2, 0 -_08008384: .4byte gUnknown_2027370 - thumb_func_end sub_800836C - - thumb_func_start nullsub_163 -nullsub_163: - bx lr - thumb_func_end nullsub_163 - - thumb_func_start sub_800838C -sub_800838C: - push {r4-r7,lr} - mov r7, r10 - mov r6, r9 - mov r5, r8 - push {r5-r7} - lsls r4, r1, 3 - adds r4, r1 - lsls r4, 3 - adds r7, r0, r4 - adds r0, r1, 0 - adds r1, r2, 0 - adds r2, r3, 0 - bl sub_8008274 - movs r0, 0 - mov r9, r0 - b _08008452 -_080083AE: - movs r1, 0x4 - ldrsh r0, [r7, r1] - lsrs r1, r0, 31 - adds r0, r1 - asrs r0, 1 - mov r8, r0 - ldrh r1, [r7, 0x4] - movs r0, 0x1 - ands r0, r1 - cmp r0, 0 - beq _080083C8 - movs r0, 0x1 - add r8, r0 -_080083C8: - movs r6, 0 - movs r1, 0x1 - add r1, r9 - mov r10, r1 - cmp r6, r8 - bge _08008450 -_080083D4: - movs r0, 0x4 - ldrsh r1, [r7, r0] - mov r0, r9 - muls r0, r1 - adds r4, r0, r6 - lsls r4, 5 - ldr r5, [r7, 0x18] - adds r4, r5, r4 - subs r0, 0x1 - subs r1, r6 - adds r0, r1 - lsls r0, 5 - adds r5, r0 - adds r0, r4, 0 - adds r4, 0x4 - adds r1, r5, 0 - adds r5, 0x4 - bl sub_8008334 - adds r0, r4, 0 - adds r4, 0x4 - adds r1, r5, 0 - adds r5, 0x4 - bl sub_8008334 - adds r0, r4, 0 - adds r4, 0x4 - adds r1, r5, 0 - adds r5, 0x4 - bl sub_8008334 - adds r0, r4, 0 - adds r4, 0x4 - adds r1, r5, 0 - adds r5, 0x4 - bl sub_8008334 - adds r0, r4, 0 - adds r4, 0x4 - adds r1, r5, 0 - adds r5, 0x4 - bl sub_8008334 - adds r0, r4, 0 - adds r4, 0x4 - adds r1, r5, 0 - adds r5, 0x4 - bl sub_8008334 - adds r0, r4, 0 - adds r4, 0x4 - adds r1, r5, 0 - adds r5, 0x4 - bl sub_8008334 - adds r0, r4, 0 - adds r1, r5, 0 - bl sub_8008334 - adds r6, 0x1 - cmp r6, r8 - blt _080083D4 -_08008450: - mov r9, r10 -_08008452: - movs r1, 0x8 - ldrsh r0, [r7, r1] - cmp r9, r0 - blt _080083AE - pop {r3-r5} - mov r8, r3 - mov r9, r4 - mov r10, r5 - pop {r4-r7} - pop {r0} - bx r0 - thumb_func_end sub_800838C - - thumb_func_start sub_8008468 -sub_8008468: - push {r4-r6,lr} - mov r6, r8 - push {r6} - sub sp, 0x10 - adds r6, r0, 0 - mov r8, r1 - ldr r4, [sp, 0x24] - ldr r5, [sp, 0x28] - ldr r0, _08008498 - ldr r1, _0800849C - str r2, [sp] - str r3, [sp, 0x4] - str r4, [sp, 0x8] - str r5, [sp, 0xC] - adds r2, r6, 0 - mov r3, r8 - bl sub_80084A4 - add sp, 0x10 - pop {r3} - mov r8, r3 - pop {r4-r6} - pop {r0} - bx r0 - .align 2, 0 -_08008498: .4byte gUnknown_2027370 -_0800849C: .4byte gUnknown_202B038 - thumb_func_end sub_8008468 - - thumb_func_start nullsub_164 -nullsub_164: - bx lr - thumb_func_end nullsub_164 - - thumb_func_start sub_80084A4 -sub_80084A4: - push {r4-r7,lr} - mov r7, r10 - mov r6, r9 - mov r5, r8 - push {r5-r7} - sub sp, 0x4 - str r1, [sp] - mov r10, r3 - ldr r6, [sp, 0x24] - ldr r7, [sp, 0x28] - ldr r1, [sp, 0x2C] - mov r12, r1 - lsls r1, r2, 3 - adds r1, r2 - lsls r1, 3 - adds r4, r0, r1 - mov r0, r10 - cmp r0, 0 - bge _080084CC - adds r0, 0x7 -_080084CC: - asrs r0, 3 - mov r10, r0 - adds r0, r6, 0 - cmp r6, 0 - bge _080084D8 - adds r0, r6, 0x7 -_080084D8: - asrs r6, r0, 3 - adds r0, r7, 0 - cmp r7, 0 - bge _080084E2 - adds r0, r7, 0x7 -_080084E2: - asrs r7, r0, 3 - mov r0, r12 - cmp r0, 0 - bge _080084EC - adds r0, 0x7 -_080084EC: - asrs r0, 3 - mov r12, r0 - ldr r2, [sp, 0x30] - lsls r2, 12 - str r2, [sp, 0x30] - movs r1, 0x8 - ldrsh r0, [r4, r1] - cmp r6, r0 - bge _08008570 - movs r2, 0 - mov r8, r2 - cmp r8, r12 - bge _08008570 -_08008506: - mov r3, r10 - adds r0, r6, 0x1 - mov r9, r0 - cmp r7, 0 - ble _0800855E - adds r5, r7, 0 -_08008512: - movs r1, 0x4 - ldrsh r0, [r4, r1] - cmp r3, r0 - bge _08008556 - movs r2, 0x2 - ldrsh r0, [r4, r2] - adds r0, r6 - movs r2, 0 - ldrsh r1, [r4, r2] - adds r1, r3 - lsls r1, 1 - lsls r0, 6 - ldr r2, [sp] - adds r0, r2 - adds r1, r0 - ldrh r2, [r1] - ldr r0, _08008580 - ands r0, r2 - strh r0, [r1] - movs r1, 0x2 - ldrsh r0, [r4, r1] - adds r0, r6 - movs r2, 0 - ldrsh r1, [r4, r2] - adds r1, r3 - lsls r1, 1 - lsls r0, 6 - ldr r2, [sp] - adds r0, r2 - adds r1, r0 - ldrh r2, [r1] - ldr r0, [sp, 0x30] - orrs r0, r2 - strh r0, [r1] -_08008556: - adds r3, 0x1 - subs r5, 0x1 - cmp r5, 0 - bne _08008512 -_0800855E: - mov r6, r9 - movs r1, 0x8 - ldrsh r0, [r4, r1] - cmp r6, r0 - bge _08008570 - movs r2, 0x1 - add r8, r2 - cmp r8, r12 - blt _08008506 -_08008570: - 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 -_08008580: .4byte 0x00000fff - thumb_func_end sub_80084A4 - - thumb_func_start GetCharacter -GetCharacter: - push {r4,r5,lr} - adds r3, r0, 0 - ldr r1, _080085C4 - ldr r0, _080085C8 - ldr r0, [r0] - lsls r0, 2 - adds r0, r1 - ldr r2, [r0] - ldr r5, [r2, 0x4] - ldr r0, _080085CC - adds r1, r3, r0 - ldr r0, _080085D0 - cmp r1, r0 - bhi _080085D4 - movs r2, 0xFF - ands r2, r3 - movs r1, 0xFF - lsls r1, 8 - ands r1, r3 - asrs r1, 8 - subs r2, 0x20 - subs r1, 0xF8 - lsls r0, r1, 3 - subs r0, r1 - lsls r0, 5 - adds r0, r2 - lsls r1, r0, 1 - adds r1, r0 - lsls r1, 2 - adds r1, r5, r1 - b _08008624 - .align 2, 0 -_080085C4: .4byte gCharmaps -_080085C8: .4byte gCurrentCharmap -_080085CC: .4byte 0xffff0800 -_080085D0: .4byte 0x000007fe -_080085D4: - movs r4, 0 - ldr r0, [r2] - subs r2, r0, 0x1 - cmp r4, r2 - bge _08008614 - lsrs r0, r2, 31 - adds r0, r2, r0 - b _08008602 -_080085E4: - lsls r0, r1, 1 - adds r0, r1 - lsls r0, 2 - adds r0, r5 - ldrh r0, [r0, 0x4] - cmp r0, r3 - bge _080085F6 - adds r4, r1, 0x1 - b _080085F8 -_080085F6: - adds r2, r1, 0 -_080085F8: - cmp r4, r2 - bge _08008614 - adds r0, r4, r2 - lsrs r1, r0, 31 - adds r0, r1 -_08008602: - asrs r1, r0, 1 - lsls r0, r1, 1 - adds r0, r1 - lsls r0, 2 - adds r0, r5 - ldrh r0, [r0, 0x4] - cmp r0, r3 - bne _080085E4 - adds r4, r1, 0 -_08008614: - lsls r0, r4, 1 - adds r0, r4 - lsls r0, 2 - adds r1, r5, r0 - ldrh r0, [r1, 0x4] - cmp r0, r3 - beq _08008624 - ldr r1, _0800862C -_08008624: - adds r0, r1, 0 - pop {r4,r5} - pop {r1} - bx r1 - .align 2, 0 -_0800862C: .4byte gUnknown_80B86A4 - thumb_func_end GetCharacter - - thumb_func_start HexDigitValue -HexDigitValue: - push {lr} - lsls r0, 24 - lsrs r1, r0, 24 - adds r3, r1, 0 - adds r2, r1, 0 - subs r2, 0x30 - lsls r0, r2, 24 - lsrs r0, 24 - cmp r0, 0x9 - bhi _08008648 - adds r0, r2, 0 - b _0800865C -_08008648: - adds r0, r1, 0 - subs r0, 0x61 - lsls r0, 24 - lsrs r0, 24 - cmp r0, 0x5 - bls _08008658 - movs r0, 0x1 - b _0800865C -_08008658: - adds r0, r3, 0 - subs r0, 0x57 -_0800865C: - pop {r1} - bx r1 - thumb_func_end HexDigitValue - - thumb_func_start xxx_get_next_char_from_string -xxx_get_next_char_from_string: - push {r4-r6,lr} - adds r5, r0, 0 - adds r6, r1, 0 - ldrb r1, [r5] - cmp r1, 0x7E - bne _08008696 - adds r5, 0x1 - ldrb r0, [r5] - bl HexDigitValue - adds r4, r0, 0 - ldrb r0, [r5, 0x1] - bl HexDigitValue - lsls r4, 4 - adds r4, r0 - ldrb r0, [r5] - cmp r0, 0 - beq _08008690 - adds r5, 0x1 - ldrb r0, [r5] - cmp r0, 0 - beq _08008690 - adds r5, 0x1 -_08008690: - str r4, [r6] - adds r0, r5, 0 - b _080086B2 -_08008696: - adds r0, r1, 0 - subs r0, 0x81 - cmp r0, 0x3 - bls _080086A2 - cmp r1, 0x87 - bne _080086AE -_080086A2: - ldrb r0, [r5, 0x1] - lsls r1, 8 - orrs r0, r1 - str r0, [r6] - adds r0, r5, 0x2 - b _080086B2 -_080086AE: - str r1, [r6] - adds r0, r5, 0x1 -_080086B2: - pop {r4-r6} - pop {r1} - bx r1 - thumb_func_end xxx_get_next_char_from_string thumb_func_start nullsub_165 nullsub_165: diff --git a/include/text2.h b/include/text2.h index 0dd6c9388..07e118c22 100644 --- a/include/text2.h +++ b/include/text2.h @@ -12,12 +12,13 @@ struct unkShiftData u32 shift_right; }; -// size: 0x8 +// size: 0xC struct unkChar { u32 *unk0; - s16 unk4; + u16 unk4; s16 unk6; + u32 fill8; }; struct unkStruct_80B8824 @@ -42,9 +43,9 @@ void sub_8007B7C(u32, s32, s32, s32, u32); void sub_8007E20(u32 a0, u32 a1, u32 a2, u32 a3, u32 a4, u32 *a5, u32 a6); // text.s -extern struct unkChar *GetCharacter(u32); +extern const struct unkChar *GetCharacter(s32); extern void InitGraphics(void); -extern void sub_800836C(u32, u8 *, u32); +void sub_800836C(s32 a0, const u8 *compressedData, s32 a1); extern void sub_800898C(void); extern void sub_80089AC(const UnkTextStruct2 *, UnkTextStruct2_sub *); extern void CallPrepareTextbox_8008C54(u32); diff --git a/src/code_8012A18_1.c b/src/code_8012A18_1.c index abc761f47..99e4919a4 100644 --- a/src/code_8012A18_1.c +++ b/src/code_8012A18_1.c @@ -7,7 +7,7 @@ s32 sub_8015FEC(u8 *buffer, s32 size) { - struct unkChar *iVar2; + const struct unkChar *iVar2; s32 currLength; s32 length; u8 *bufferPtr; @@ -31,4 +31,4 @@ s32 sub_8015FEC(u8 *buffer, s32 size) s32 sub_8016028(void) { return 60; -} \ No newline at end of file +} diff --git a/src/code_803D110.c b/src/code_803D110.c index 6f815efd9..d3c040dcf 100644 --- a/src/code_803D110.c +++ b/src/code_803D110.c @@ -59,6 +59,7 @@ struct UnkDataFileStruct u16 **unk10; }; +// Very similar to unkChar struct struct UnkStruct_sub_803DC6C { u8 *unk0; @@ -759,7 +760,7 @@ struct UnkStruct_sub_803DC6C *sub_803DEC8(s32 chr) if (chr > 63487 && chr < 65535) { s32 r2 = chr & 0xFF; - s32 r1 = (chr & 0xFF00) / 256; + s32 r1 = (chr & 0xFF00) >> 8; r2 -= 32; r1 -= 248; ret = &strPtr[r1 * 224 + r2]; diff --git a/src/menu_input.c b/src/menu_input.c index 5efb1c3bc..1219dde1a 100644 --- a/src/menu_input.c +++ b/src/menu_input.c @@ -167,7 +167,7 @@ void sub_8012BC4(u32 x, u32 y, s32 n, s32 len, u32 color, u32 a5) { s32 iVar1; u32 uVar2; - struct unkChar *iVar3; + const struct unkChar *iVar3; s32 counter; s32 *piVar3; s32 *piVar4; @@ -212,7 +212,7 @@ void sub_8012BC4(u32 x, u32 y, s32 n, s32 len, u32 color, u32 a5) void sub_8012C60(u32 x, u32 y, u32 a2, u32 color, u32 a4) { u32 add_x; - struct unkChar *iVar3; + const struct unkChar *iVar3; u32 uVar2; uVar2 = ReturnIntFromChar2(a2); diff --git a/src/text2.c b/src/text2.c index 6676aa0b1..e8bb9d5f2 100644 --- a/src/text2.c +++ b/src/text2.c @@ -2654,7 +2654,7 @@ void sub_8008274(s32 a0, const u8 *compressedData, s32 a2) sub_800829C(gUnknown_2027370, gUnknown_202B038[0], a0, compressedData, a2); } -void nullsub_162() {} +UNUSED void nullsub_162() {} void sub_800829C(UnkTextStruct1 *a0, u16 a1[32][32], s32 a2, const u8 *compressedData, u32 a4) { @@ -2674,3 +2674,191 @@ void sub_800829C(UnkTextStruct1 *a0, u16 a1[32][32], s32 a2, const u8 *compresse strPtr->unk38 = strPtr->unk2C; strPtr->unk44 = 1; } + +void sub_8008334(u32 *r7, u32 *r12) +{ + s32 i; + u32 r2, r3; + u32 r4, r1; + + r4 = *r7; + r1 = *r12; + + r3 = 0; + r2 = 0; + + for (i = 0; i < 32; i += 4) { + r2 <<= 4; + r3 <<= 4; + r2 |= r4 & 0xF; + r3 |= r1 & 0xF; + r4 >>= 4; + r1 >>= 4; + } + *r7 = r3; + *r12 = r2; +} + +void sub_800838C(UnkTextStruct1 *a0, s32 a1, const u8 *compressedData, s32 a3); + +void sub_800836C(s32 a0, const u8 *compressedData, s32 a1) +{ + sub_800838C(gUnknown_2027370, a0, compressedData, a1); +} + +UNUSED void nullsub_163(void) {} + +void sub_800838C(UnkTextStruct1 *a0, s32 a1, const u8 *compressedData, s32 a3) +{ + s32 i, j; + UnkTextStruct1 *strPtr = &a0[a1]; + + sub_8008274(a1, compressedData, a3); + for (i = 0; i < strPtr->unk8; i++) { + s32 r8 = strPtr->unk4 / 2; + if (strPtr->unk4 & 1) + r8++; + for (j = 0; j < r8; j++) { + u32 *r4, *r5; + s32 unk4Mul = strPtr->unk4 * i; + + r4 = &strPtr->unk18[(unk4Mul + j) * 8]; + unk4Mul--; + r5 = &strPtr->unk18[(unk4Mul + (strPtr->unk4 - j)) * 8]; + + sub_8008334(r4++, r5++); + sub_8008334(r4++, r5++); + sub_8008334(r4++, r5++); + sub_8008334(r4++, r5++); + sub_8008334(r4++, r5++); + sub_8008334(r4++, r5++); + sub_8008334(r4++, r5++); + sub_8008334(r4++, r5++); + } + } +} + +void sub_80084A4(UnkTextStruct1 *a0, u16 a1[32][32], u32 a2, s32 a3, s32 a4, s32 a5, s32 a6, u32 a8); + +UNUSED void sub_8008468(u32 a0, u32 a1, u32 a2, u32 a3, u32 a4, u32 a6) +{ + sub_80084A4(gUnknown_2027370, gUnknown_202B038[0], a0, a1, a2, a3, a4, a6); +} + +UNUSED void nullsub_164(void) {} + +// Effectively unused +void sub_80084A4(UnkTextStruct1 *a0, u16 a1[32][32], u32 a2, s32 a3, s32 a4, s32 a5, s32 a6, u32 a8) +{ + s32 i, j; + UnkTextStruct1 *strPtr = &a0[a2]; + + a3 /= 8; + a4 /= 8; + a5 /= 8; + a6 /= 8; + a8 *= 4096; + if (a4 < strPtr->unk8) { + for (i = 0; i < a6; i++) { + s32 xMaybe = a3; + for (j = 0; j < a5; j++) { + if (xMaybe < strPtr->unk4) { + a1[strPtr->unk2 + a4][strPtr->unk0 + xMaybe] &= 0xFFF; + a1[strPtr->unk2 + a4][strPtr->unk0 + xMaybe] |= a8; + } + xMaybe++; + } + a4++; + if (a4 >= strPtr->unk8) + break; + } + } +} + +extern const struct unkChar gUnknown_80B86A4; + +struct CharMapStruct +{ + s32 unk0; + struct unkChar *unk4; +}; +extern struct CharMapStruct *gCharmaps[]; +extern s32 gCurrentCharmap; + +// Oddly similar to sub_803DEC8 +const struct unkChar *GetCharacter(s32 chr) +{ + s32 r2, r4; + const struct unkChar *ret; + const struct unkChar *strPtr = gCharmaps[gCurrentCharmap]->unk4; + // Fakematch? Or just magic numbers which will make more sense once this file is documented? + if (chr > 63487 && chr < 65535) + { + s32 r2 = chr & 0xFF; + s32 r1 = (chr & 0xFF00) >> 8; + r2 -= 32; + r1 -= 248; + ret = &strPtr[r1 * 224 + r2]; + } + else + { + r4 = 0; + r2 = gCharmaps[gCurrentCharmap]->unk0 - 1; + while (r4 < r2) { + s32 r1 = (r4 + r2) / 2; + if (strPtr[r1].unk4 == chr) { + r4 = r1; + break; + } + else if (strPtr[r1].unk4 < chr) { + r4 = r1 + 1; + } + else { + r2 = r1; + } + } + + ret = &strPtr[r4]; + if (ret->unk4 != chr) + ret = &gUnknown_80B86A4; + + } + return ret; +} + +s32 HexDigitValue(u8 chr) +{ + if (chr >= '0' && chr <= '9') + return chr - '0'; + else if (chr >= 'a' && chr <= 'f') + return (chr - 'a') + 10; + else + return 1; +} + +u8 *xxx_get_next_char_from_string(u8 *a1, u32 *a0) +{ + s32 currChr = *a1; + if (currChr == 0x7E) { + s32 hexDigit; + + a1++; + hexDigit = (HexDigitValue(a1[0]) << 4) + HexDigitValue(a1[1]); + if (*a1 != '\0') { + a1++; + if (*a1 != '\0') { + a1++; + } + } + *a0 = hexDigit; + return a1; + } + else if ((currChr >= 0x81 && currChr <= 0x84) || currChr == 0x87) { + *a0 = a1[1] | (a1[0] << 8); + return a1 + 2; + } + else { + *a0 = currChr; + return a1 + 1; + } +} From 7d137ea3f859d5664fddd2ff0a712fcda307b8f4 Mon Sep 17 00:00:00 2001 From: DizzyEggg Date: Wed, 25 Sep 2024 14:39:08 +0200 Subject: [PATCH 04/11] unused sub_80086C8 --- asm/text.s | 189 ---------------------------------------------------- src/text2.c | 75 +++++++++++++++++++++ 2 files changed, 75 insertions(+), 189 deletions(-) diff --git a/asm/text.s b/asm/text.s index e21244126..d6d5ab392 100644 --- a/asm/text.s +++ b/asm/text.s @@ -5,195 +5,6 @@ .text - - - - thumb_func_start nullsub_165 -nullsub_165: - bx lr - thumb_func_end nullsub_165 - - thumb_func_start nullsub_166 -nullsub_166: - bx lr - thumb_func_end nullsub_166 - - thumb_func_start nullsub_167 -nullsub_167: - bx lr - thumb_func_end nullsub_167 - - thumb_func_start nullsub_168 -nullsub_168: - bx lr - thumb_func_end nullsub_168 - - thumb_func_start sub_80086C8 -sub_80086C8: - push {r4-r7,lr} - mov r7, r10 - mov r6, r9 - mov r5, r8 - push {r5-r7} - sub sp, 0xC - mov r9, r2 - ldr r7, [sp, 0x30] - lsls r2, r1, 3 - adds r2, r1 - lsls r2, 3 - adds r0, r2 - mov r12, r0 - mov r0, r9 - cmp r0, 0 - bge _080086F2 - ldr r1, [sp, 0x2C] - add r1, r9 - str r1, [sp, 0x2C] - movs r2, 0 - mov r9, r2 -_080086F2: - cmp r3, 0 - bge _080086FA - adds r7, r3 - movs r3, 0 -_080086FA: - ldr r0, [sp, 0x2C] - add r0, r9 - mov r4, r12 - movs r5, 0x4 - ldrsh r2, [r4, r5] - lsls r1, r2, 3 - cmp r0, r1 - ble _08008710 - mov r0, r9 - subs r0, r1, r0 - str r0, [sp, 0x2C] -_08008710: - adds r1, r3, r7 - mov r4, r12 - movs r5, 0x8 - ldrsh r0, [r4, r5] - lsls r0, 3 - cmp r1, r0 - ble _08008720 - subs r7, r0, r3 -_08008720: - adds r1, r3, 0 - cmp r3, 0 - bge _08008728 - adds r1, r3, 0x7 -_08008728: - asrs r1, 3 - muls r2, r1 - mov r0, r9 - cmp r0, 0 - bge _08008734 - adds r0, 0x7 -_08008734: - asrs r0, 3 - adds r0, r2, r0 - lsls r0, 3 - lsls r1, 3 - subs r1, r3, r1 - adds r0, r1 - lsls r0, 2 - mov r2, r12 - ldr r1, [r2, 0x18] - b _080087D6 -_08008748: - adds r2, r5, 0 - ldr r4, [sp, 0x2C] - mov r6, r9 - mov r1, r12 - ldr r0, [r1, 0x3C] - cmp r0, r5 - bls _08008758 - str r5, [r1, 0x3C] -_08008758: - subs r0, r7, 0x1 - str r0, [sp, 0x4] - adds r3, 0x1 - str r3, [sp, 0x8] - mov r1, r12 - ldr r1, [r1, 0x40] - str r1, [sp] - adds r0, r5, 0x4 - mov r10, r0 - cmp r4, 0 - ble _080087B6 - ldr r1, _0800878C - mov r8, r1 - movs r7, 0x7 -_08008774: - cmp r4, 0x7 - bgt _08008790 - adds r3, r4, 0 - adds r0, r4, 0 - ands r0, r7 - adds r0, 0x8 - lsls r0, 2 - add r0, r8 - ldr r1, [r2] - ldr r0, [r0] - ands r1, r0 - b _080087AA - .align 2, 0 -_0800878C: .4byte gUnknown_80B8868 -_08008790: - adds r1, r6, 0 - ands r1, r7 - cmp r1, 0 - beq _080087A8 - movs r0, 0x8 - subs r3, r0, r1 - lsls r0, r1, 2 - add r0, r8 - ldr r1, [r2] - ldr r0, [r0] - ands r1, r0 - b _080087AA -_080087A8: - movs r3, 0x8 -_080087AA: - str r1, [r2] - adds r2, 0x20 - subs r4, r3 - adds r6, r3 - cmp r4, 0 - bgt _08008774 -_080087B6: - ldr r7, [sp, 0x4] - ldr r3, [sp, 0x8] - ldr r2, [sp] - cmp r2, r5 - bcs _080087C4 - mov r4, r12 - str r5, [r4, 0x40] -_080087C4: - mov r5, r10 - movs r0, 0x7 - ands r0, r3 - cmp r0, 0 - bne _080087D8 - mov r5, r12 - ldr r0, [r5, 0x20] - lsls r0, 2 - mov r1, r10 -_080087D6: - adds r5, r1, r0 -_080087D8: - cmp r7, 0 - bgt _08008748 - add sp, 0xC - pop {r3-r5} - mov r8, r3 - mov r9, r4 - mov r10, r5 - pop {r4-r7} - pop {r0} - bx r0 - thumb_func_end sub_80086C8 - thumb_func_start sub_80087EC sub_80087EC: push {r4-r6,lr} diff --git a/src/text2.c b/src/text2.c index e8bb9d5f2..c2264dd8a 100644 --- a/src/text2.c +++ b/src/text2.c @@ -2862,3 +2862,78 @@ u8 *xxx_get_next_char_from_string(u8 *a1, u32 *a0) return a1 + 1; } } + +UNUSED void nullsub_165(void) {} +UNUSED void nullsub_166(void) {} +UNUSED void nullsub_167(void) {} +UNUSED void nullsub_168(void) {} + +extern const u32 gUnknown_80B8868[]; + +UNUSED void sub_80086C8(UnkTextStruct1 *a0, s32 a1, s32 a2, s32 a3, s32 a4, s32 a5) +{ + u32 *r5; + s32 r2, r0, r1; + UnkTextStruct1 *strPtr = &a0[a1]; + + if (a2 < 0) { + a4 += a2; + a2 = 0; + } + if (a3 < 0) { + a5 += a3; + a3 = 0; + } + + if (a4 + a2 > strPtr->unk4 * 8) { + a4 = (strPtr->unk4 * 8) - a2; + } + if (a3 + a5 > strPtr->unk8 * 8) { + a5 = (strPtr->unk8 * 8) - a3; + } + + r2 = strPtr->unk4 * (a3 / 8); + r0 = 8 * (r2 + (a2 / 8)); + r1 = a3 - ((a3 / 8) * 8); + r5 = &strPtr->unk18[r0 + r1]; + while (a5 > 0) { + u32 *loopPtr; + s32 r4, r6; + + loopPtr = r5; + r4 = a4; + r6 = a2; + if (strPtr->unk3C > r5) { + strPtr->unk3C = r5; + } + + while (r4 > 0) { + s32 r3; + if (r4 < 8) { + r3 = r4; + *loopPtr &= gUnknown_80B8868[(r4 & 7) + 8]; + } + else if ((r6 & 7) != 0) { + r3 = 8 - (r6 & 7); + *loopPtr &= gUnknown_80B8868[r6 & 7]; + } + else { + r3 = 8; + *loopPtr = r6 & 7; + } + + loopPtr += 8; + r4 -= r3; + r6 += r3; + } + a5--; + a3++; + if (strPtr->unk40 < r5) { + strPtr->unk40 = r5; + } + r5++; + if (!(a3 & 7)) { + r5 = &r5[strPtr->unk20]; + } + } +} From b9456e1d805127fb8c122c876d40ee93fcc67e5d Mon Sep 17 00:00:00 2001 From: DizzyEggg Date: Fri, 27 Sep 2024 15:22:51 +0200 Subject: [PATCH 05/11] sub_80089AC --- asm/text.s | 635 ---------------------------------------------------- src/text2.c | 273 ++++++++++++++++++++++ 2 files changed, 273 insertions(+), 635 deletions(-) diff --git a/asm/text.s b/asm/text.s index d6d5ab392..9ec247abe 100644 --- a/asm/text.s +++ b/asm/text.s @@ -5,642 +5,7 @@ .text - thumb_func_start sub_80087EC -sub_80087EC: - push {r4-r6,lr} - sub sp, 0x8 - adds r4, r0, 0 - adds r5, r1, 0 - adds r6, r2, 0 - ldr r1, [sp, 0x18] - ldr r0, _08008810 - str r3, [sp] - str r1, [sp, 0x4] - adds r1, r4, 0 - adds r2, r5, 0 - adds r3, r6, 0 - bl sub_8008818 - add sp, 0x8 - pop {r4-r6} - pop {r0} - bx r0 - .align 2, 0 -_08008810: .4byte gUnknown_2027370 - thumb_func_end sub_80087EC - thumb_func_start nullsub_176 -nullsub_176: - bx lr - thumb_func_end nullsub_176 - - thumb_func_start sub_8008818 -sub_8008818: - push {r4-r7,lr} - mov r7, r8 - push {r7} - adds r5, r3, 0 - ldr r7, [sp, 0x18] - ldr r3, [sp, 0x1C] - mov r12, r3 - lsls r3, r1, 3 - adds r3, r1 - lsls r3, 3 - adds r4, r0, r3 - cmp r2, 0 - bge _08008834 - adds r2, 0x7 -_08008834: - asrs r2, 3 - mov r8, r2 - adds r3, r5, 0 - cmp r3, 0 - bge _08008840 - adds r3, 0x7 -_08008840: - asrs r3, 3 - movs r2, 0 - cmp r2, r12 - bge _08008892 -_08008848: - movs r1, 0x4 - ldrsh r0, [r4, r1] - muls r0, r3 - add r0, r8 - lsls r0, 5 - ldr r1, [r4, 0x18] - adds r1, r0 - movs r5, 0 - adds r3, 0x1 - adds r6, r2, 0 - adds r6, 0x8 - cmp r5, r7 - bge _0800888C - movs r2, 0 -_08008864: - ldr r0, [r4, 0x3C] - cmp r0, r1 - bls _0800886C - str r1, [r4, 0x3C] -_0800886C: - stm r1!, {r2} - stm r1!, {r2} - stm r1!, {r2} - stm r1!, {r2} - stm r1!, {r2} - stm r1!, {r2} - stm r1!, {r2} - str r2, [r1] - ldr r0, [r4, 0x40] - cmp r0, r1 - bcs _08008884 - str r1, [r4, 0x40] -_08008884: - adds r1, 0x4 - adds r5, 0x8 - cmp r5, r7 - blt _08008864 -_0800888C: - adds r2, r6, 0 - cmp r2, r12 - blt _08008848 -_08008892: - pop {r3} - mov r8, r3 - pop {r4-r7} - pop {r0} - bx r0 - thumb_func_end sub_8008818 - - thumb_func_start xxx_call_update_bg_vram -xxx_call_update_bg_vram: - push {lr} - movs r1, 0 - ldr r2, _080088C0 - ldrb r0, [r2] - cmp r0, 0 - beq _080088AE - strb r1, [r2] - bl sub_80099C0 -_080088AE: - ldr r0, _080088C4 - bl xxx_update_bg_vram - lsls r0, 24 - lsrs r1, r0, 24 - adds r0, r1, 0 - pop {r1} - bx r1 - .align 2, 0 -_080088C0: .4byte gUnknown_20274A5 -_080088C4: .4byte gUnknown_2027370 - thumb_func_end xxx_call_update_bg_vram - - thumb_func_start xxx_update_bg_vram -xxx_update_bg_vram: - push {r4-r7,lr} - mov r7, r8 - push {r7} - mov r8, r0 - movs r2, 0 - movs r1, 0 - movs r7, 0xD0 - lsls r7, 4 -_080088D8: - lsls r0, r1, 3 - adds r0, r1 - lsls r0, 3 - mov r3, r8 - adds r4, r3, r0 - movs r5, 0x4 - ldrsh r0, [r4, r5] - adds r6, r1, 0x1 - cmp r0, 0 - beq _0800897A - ldr r5, [r4, 0x38] - cmp r5, 0 - beq _0800897A - adds r0, r4, 0 - adds r0, 0x45 - ldrb r0, [r0] - cmp r0, 0 - beq _0800894C - ldr r0, [r4, 0x28] - ldr r1, [r4, 0x18] - adds r2, r7, 0 - bl CpuCopy - ldr r0, [r4, 0x18] - adds r2, r0, r7 - ldr r0, [r4, 0x28] - adds r1, r0, r7 - movs r3, 0 - b _08008938 -_08008912: - ldm r2!, {r0} - stm r1!, {r0} - ldm r2!, {r0} - stm r1!, {r0} - ldm r2!, {r0} - stm r1!, {r0} - ldm r2!, {r0} - stm r1!, {r0} - ldm r2!, {r0} - stm r1!, {r0} - ldr r0, _08008944 - stm r1!, {r0} - ldr r0, _08008948 - stm r1!, {r0} - movs r0, 0x1 - negs r0, r0 - stm r1!, {r0} - adds r2, 0xC - adds r3, 0x1 -_08008938: - movs r5, 0x4 - ldrsh r0, [r4, r5] - cmp r3, r0 - blt _08008912 - movs r0, 0 - b _0800896A - .align 2, 0 -_08008944: .4byte 0xdddddddd -_08008948: .4byte 0xeeeeeeee -_0800894C: - ldr r0, [r4, 0x30] - ldr r1, [r4, 0x34] - adds r2, r5, 0 - bl CpuCopy - lsrs r1, r5, 2 - lsls r1, 2 - ldr r0, [r4, 0x34] - adds r0, r1 - str r0, [r4, 0x34] - ldr r0, [r4, 0x30] - adds r0, r5 - str r0, [r4, 0x30] - ldr r0, [r4, 0x38] - subs r0, r5 -_0800896A: - str r0, [r4, 0x38] - ldr r1, [r4, 0x38] - cmp r1, 0 - bne _08008978 - adds r0, r4, 0 - adds r0, 0x44 - strb r1, [r0] -_08008978: - movs r2, 0x1 -_0800897A: - adds r1, r6, 0 - cmp r1, 0x3 - ble _080088D8 - adds r0, r2, 0 - pop {r3} - mov r8, r3 - pop {r4-r7} - pop {r1} - bx r1 - thumb_func_end xxx_update_bg_vram - - thumb_func_start sub_800898C -sub_800898C: - push {lr} - ldr r1, _080089A4 - ldr r2, _080089A8 - movs r3, 0xA0 - lsls r3, 1 - adds r0, r1, r3 -_08008998: - strh r2, [r0] - subs r0, 0x2 - cmp r0, r1 - bge _08008998 - pop {r0} - bx r0 - .align 2, 0 -_080089A4: .4byte gUnknown_3000E94 -_080089A8: .4byte 0x0000f0f0 - thumb_func_end sub_800898C - - thumb_func_start sub_80089AC -sub_80089AC: - push {r4-r7,lr} - mov r7, r10 - mov r6, r9 - mov r5, r8 - push {r5-r7} - sub sp, 0x4 - adds r4, r0, 0 - adds r5, r1, 0 - ldrb r1, [r4] - movs r0, 0x40 - ands r0, r1 - cmp r0, 0 - beq _080089C8 - b _08008C44 -_080089C8: - ldr r6, _08008A3C - ldr r7, [r4, 0x4] - cmp r7, 0x1 - bne _08008A60 - movs r0, 0x8 - ldrsh r2, [r4, r0] - movs r1, 0 - ldrsh r0, [r5, r1] - adds r2, r0 - lsls r3, r2, 3 - mov r12, r3 - movs r7, 0xA - ldrsh r1, [r4, r7] - movs r3, 0x2 - ldrsh r0, [r5, r3] - adds r1, r0 - lsls r5, r1, 3 - movs r7, 0xC - ldrsh r0, [r4, r7] - adds r2, r0 - lsls r7, r2, 3 - movs r2, 0xE - ldrsh r0, [r4, r2] - adds r1, r0 - lsls r2, r1, 3 - cmp r0, 0 - bne _08008A00 - b _08008C44 -_08008A00: - cmp r5, 0 - bge _08008A06 - movs r5, 0 -_08008A06: - cmp r2, 0 - bge _08008A0C - movs r2, 0 -_08008A0C: - cmp r5, 0xA0 - ble _08008A12 - movs r5, 0xA0 -_08008A12: - cmp r2, 0xA0 - ble _08008A18 - movs r2, 0xA0 -_08008A18: - cmp r5, r2 - blt _08008A1E - b _08008C44 -_08008A1E: - lsls r3, r5, 1 - adds r1, r6, r3 - ldrb r0, [r1] - cmp r0, 0xF0 - bne _08008A40 - ldrb r0, [r1, 0x1] - cmp r0, 0xF0 - bne _08008A40 - strb r7, [r1] - adds r3, 0x1 - adds r0, r6, r3 - mov r1, r12 - strb r1, [r0] - b _08008A58 - .align 2, 0 -_08008A3C: .4byte gUnknown_3000E94 -_08008A40: - adds r1, r6, r3 - ldrb r0, [r1] - cmp r0, r7 - bge _08008A4A - strb r7, [r1] -_08008A4A: - adds r3, 0x1 - adds r3, r6, r3 - ldrb r0, [r3] - cmp r0, r12 - ble _08008A58 - mov r0, r12 - strb r0, [r3] -_08008A58: - adds r5, 0x1 - cmp r5, r2 - blt _08008A1E - b _08008C44 -_08008A60: - cmp r7, 0x6 - beq _08008A66 - b _08008BA8 -_08008A66: - movs r2, 0x8 - ldrsh r1, [r4, r2] - movs r3, 0 - ldrsh r0, [r5, r3] - adds r1, r0 - lsls r3, r1, 3 - subs r7, r3, 0x5 - mov r9, r7 - movs r2, 0xA - ldrsh r0, [r4, r2] - movs r7, 0x2 - ldrsh r2, [r5, r7] - adds r0, r2 - lsls r2, r0, 3 - subs r5, r2, 0x4 - movs r7, 0xC - ldrsh r2, [r4, r7] - adds r1, r2 - lsls r1, 3 - adds r1, 0x5 - str r1, [sp] - movs r2, 0xE - ldrsh r1, [r4, r2] - adds r0, r1 - lsls r0, 3 - adds r0, 0x5 - mov r8, r0 - adds r3, 0x3 - mov r12, r3 - ldr r2, [r4, 0x14] - ldrb r1, [r2, 0x2] - subs r0, r1, 0x1 - ldrb r3, [r2] - adds r0, r3 - adds r0, 0x2 - lsls r0, 3 - add r0, r12 - subs r0, 0x4 - mov r10, r0 - ldrb r0, [r2, 0x1] - adds r0, 0x1 - lsls r0, 3 - mov r7, r9 - adds r4, r7, r0 - adds r1, 0x2 - lsls r1, 3 - adds r1, r4, r1 - subs r7, r1, 0x4 - cmp r5, 0 - bge _08008ACC - movs r5, 0 -_08008ACC: - mov r0, r8 - cmp r0, 0 - bge _08008AD6 - movs r1, 0 - mov r8, r1 -_08008AD6: - cmp r5, 0xA0 - ble _08008ADC - movs r5, 0xA0 -_08008ADC: - mov r2, r8 - cmp r2, 0xA0 - ble _08008AE6 - movs r3, 0xA0 - mov r8, r3 -_08008AE6: - movs r3, 0x3 -_08008AE8: - lsls r2, r5, 1 - adds r1, r6, r2 - ldrb r0, [r1] - cmp r0, 0xF0 - bne _08008B02 - ldrb r0, [r1, 0x1] - cmp r0, 0xF0 - bne _08008B02 - strb r7, [r1] - adds r2, 0x1 - adds r0, r6, r2 - strb r4, [r0] - b _08008B18 -_08008B02: - adds r1, r6, r2 - ldrb r0, [r1] - cmp r0, r7 - bge _08008B0C - strb r7, [r1] -_08008B0C: - adds r2, 0x1 - adds r2, r6, r2 - ldrb r0, [r2] - cmp r0, r4 - ble _08008B18 - strb r4, [r2] -_08008B18: - adds r5, 0x1 - subs r3, 0x1 - cmp r3, 0 - bge _08008AE8 - movs r3, 0x7 -_08008B22: - lsls r1, r5, 1 - adds r2, r6, r1 - ldrb r0, [r2] - cmp r0, 0xF0 - bne _08008B40 - ldrb r0, [r2, 0x1] - cmp r0, 0xF0 - bne _08008B40 - mov r7, r10 - strb r7, [r2] - adds r1, 0x1 - adds r0, r6, r1 - mov r1, r12 - strb r1, [r0] - b _08008B5A -_08008B40: - adds r2, r6, r1 - ldrb r0, [r2] - cmp r0, r10 - bge _08008B4C - mov r7, r10 - strb r7, [r2] -_08008B4C: - adds r1, 0x1 - adds r1, r6, r1 - ldrb r0, [r1] - cmp r0, r12 - ble _08008B5A - mov r0, r12 - strb r0, [r1] -_08008B5A: - adds r5, 0x1 - subs r3, 0x1 - cmp r3, 0 - bge _08008B22 - cmp r5, r8 - bge _08008C44 -_08008B66: - lsls r1, r5, 1 - adds r2, r6, r1 - ldrb r0, [r2] - cmp r0, 0xF0 - bne _08008B86 - ldrb r0, [r2, 0x1] - cmp r0, 0xF0 - bne _08008B86 - mov r3, sp - ldrb r3, [r3] - strb r3, [r2] - adds r1, 0x1 - adds r0, r6, r1 - mov r7, r9 - strb r7, [r0] - b _08008BA0 -_08008B86: - adds r2, r6, r1 - ldrb r0, [r2] - ldr r3, [sp] - cmp r0, r3 - bge _08008B92 - strb r3, [r2] -_08008B92: - adds r1, 0x1 - adds r1, r6, r1 - ldrb r0, [r1] - cmp r0, r9 - ble _08008BA0 - mov r0, r9 - strb r0, [r1] -_08008BA0: - adds r5, 0x1 - cmp r5, r8 - blt _08008B66 - b _08008C44 -_08008BA8: - movs r1, 0x8 - ldrsh r0, [r4, r1] - movs r2, 0 - ldrsh r1, [r5, r2] - adds r0, r1 - lsls r1, r0, 3 - subs r1, 0x5 - mov r8, r1 - movs r3, 0xA - ldrsh r2, [r4, r3] - movs r3, 0x2 - ldrsh r1, [r5, r3] - adds r2, r1 - lsls r5, r2, 3 - mov r9, r5 - mov r3, r9 - subs r3, 0x5 - movs r5, 0xC - ldrsh r1, [r4, r5] - adds r0, r1 - lsls r0, 3 - adds r0, 0x5 - mov r12, r0 - movs r1, 0xE - ldrsh r0, [r4, r1] - adds r2, r0 - lsls r1, r2, 3 - adds r5, r1, 0x5 - cmp r0, 0 - beq _08008C44 - cmp r7, 0 - bne _08008BEC - adds r3, 0x8 - subs r5, r1, 0x3 -_08008BEC: - cmp r3, 0 - bge _08008BF2 - movs r3, 0 -_08008BF2: - cmp r5, 0 - bge _08008BF8 - movs r5, 0 -_08008BF8: - cmp r3, 0xA0 - ble _08008BFE - movs r3, 0xA0 -_08008BFE: - cmp r5, 0xA0 - ble _08008C40 - movs r5, 0xA0 - b _08008C40 -_08008C06: - lsls r1, r3, 1 - adds r2, r6, r1 - ldrb r0, [r2] - cmp r0, 0xF0 - bne _08008C24 - ldrb r0, [r2, 0x1] - cmp r0, 0xF0 - bne _08008C24 - mov r7, r12 - strb r7, [r2] - adds r1, 0x1 - adds r0, r6, r1 - mov r1, r8 - strb r1, [r0] - b _08008C3E -_08008C24: - adds r2, r6, r1 - ldrb r0, [r2] - cmp r0, r12 - bge _08008C30 - mov r7, r12 - strb r7, [r2] -_08008C30: - adds r1, 0x1 - adds r1, r6, r1 - ldrb r0, [r1] - cmp r0, r8 - ble _08008C3E - mov r0, r8 - strb r0, [r1] -_08008C3E: - adds r3, 0x1 -_08008C40: - cmp r3, r5 - blt _08008C06 -_08008C44: - add sp, 0x4 - pop {r3-r5} - mov r8, r3 - mov r9, r4 - mov r10, r5 - pop {r4-r7} - pop {r0} - bx r0 - thumb_func_end sub_80089AC thumb_func_start CallPrepareTextbox_8008C54 CallPrepareTextbox_8008C54: diff --git a/src/text2.c b/src/text2.c index c2264dd8a..86473eb7f 100644 --- a/src/text2.c +++ b/src/text2.c @@ -2,6 +2,9 @@ #include "text1.h" #include "text2.h" #include "decompress.h" +#include "code_8009804.h" +#include "cpu.h" +#include "structs/str_text.h" // data.s extern const u32 gUnknown_80B853C[16]; @@ -2937,3 +2940,273 @@ UNUSED void sub_80086C8(UnkTextStruct1 *a0, s32 a1, s32 a2, s32 a3, s32 a4, s32 } } } + +void sub_8008818(UnkTextStruct1 *a0, s32 a1, s32 a2, s32 a3, s32 a4, s32 a5); + +void sub_80087EC(s32 a0, s32 a1, s32 a2, s32 a3, s32 a4) +{ + sub_8008818(gUnknown_2027370, a0, a1, a2, a3, a4); +} + +UNUSED void nullsub_176(void) {} + +void sub_8008818(UnkTextStruct1 *a0, s32 a1, s32 a2, s32 a3, s32 a4, s32 a5) +{ + s32 i, j; + UnkTextStruct1 *strPtr = &a0[a1]; + s32 a2Div = a2 / 8; + s32 a3Div = a3 / 8; + + for (i = 0; i < a5; i += 8) { + u32 *ptr = &strPtr->unk18[((strPtr->unk4 * a3Div) + a2Div) * 8]; + for (j = 0; j < a4; j += 8) { + if (strPtr->unk3C > ptr) { + strPtr->unk3C = ptr; + } + *(ptr++) = 0; + *(ptr++) = 0; + *(ptr++) = 0; + *(ptr++) = 0; + *(ptr++) = 0; + *(ptr++) = 0; + *(ptr++) = 0; + *ptr = 0; + if (strPtr->unk40 < ptr) { + strPtr->unk40 = ptr; + } + ptr++; + } + a3Div++; + } +} + +extern u8 gUnknown_20274A5; +bool8 xxx_update_bg_vram(UnkTextStruct1 *a0); + +bool8 xxx_call_update_bg_vram(void) +{ + bool8 ret = FALSE; + if (gUnknown_20274A5 != 0) { + gUnknown_20274A5 = 0; + sub_80099C0(); + } + ret = xxx_update_bg_vram(gUnknown_2027370); + return ret; +} + +bool8 xxx_update_bg_vram(UnkTextStruct1 *a0) +{ + s32 i, j; + u32 r5; + bool8 ret = FALSE; + + for (i = 0; i < 4; i++) { + UnkTextStruct1 *strPtr = &a0[i]; + if (strPtr->unk4 == 0) + continue; + r5 = strPtr->unk38; + if (r5 == 0) + continue; + + if (strPtr->unk45) { + u32 *r2, *r1; + + CpuCopy(strPtr->unk28, strPtr->unk18, 0xD00); + // The reason for void casts is because we want to add 0xD00/r5 directly to pointers. Because pointers are u32, without the casts, it would multiply the value by 4. + r2 = (void *)(strPtr->unk18) + 0xD00; + r1 = (void *)(strPtr->unk28) + 0xD00; + for (j = 0; j < strPtr->unk4; j++) { + *(r1++) = *(r2++); + *(r1++) = *(r2++); + *(r1++) = *(r2++); + *(r1++) = *(r2++); + *(r1++) = *(r2++); + *(r1++) = 0xDDDDDDDD; + *(r1++) = 0xEEEEEEEE; + *(r1++) = 0xFFFFFFFF; + r2 += 3; + } + strPtr->unk38 = 0; + } + else { + CpuCopy(strPtr->unk30, strPtr->unk34, r5); + strPtr->unk34 += (r5 / 4); + strPtr->unk30 = (void *)(strPtr->unk30) + r5; + strPtr->unk38 -= r5; + } + + if (strPtr->unk38 == 0) { + strPtr->unk44 = 0; + } + ret = TRUE; + } + + return ret; +} + +// Todo fix gUnknown_3000E94 being accessed as s16/u8 +extern s16 gUnknown_3000E94[]; + +void sub_800898C(void) +{ + s32 i; + + for (i = 0; i < 161; i++) { + gUnknown_3000E94[i] = 0xF0F0; + } +} + +void sub_80089AC(const UnkTextStruct2 *r4, UnkTextStruct2_sub *r5_Str) +{ + u8 *r6; + + if (r4->unk0 & 0x40) + return; + + r6 = (void*) &gUnknown_3000E94; + if (r4->unk4 == 1) { + s32 r12 = (r4->unk8.unk0.separate.unk0 + r5_Str->unk0.separate.unk0) * 8; + s32 r5 = (r4->unk8.unk0.separate.unk2 + r5_Str->unk0.separate.unk2) * 8; + s32 r7 = (r4->unk8.unk0.separate.unk0 + r5_Str->unk0.separate.unk0 + r4->unkC) * 8; + s32 r2 = (r4->unk8.unk0.separate.unk2 + r5_Str->unk0.separate.unk2 + r4->unkE) * 8; + if (r4->unkE != 0) { + if (r5 < 0) + r5 = 0; + if (r2 < 0) + r2 = 0; + if (r5 > 160) + r5 = 160; + if (r2 > 160) + r2 = 160; + while (r5 < r2) { + s32 id = r5 * 2; + if (r6[id] == 240 && r6[id + 1] == 240) { + r6[id++] = r7; + r6[id] = r12; + } + else { + if (r6[id] < r7) { + r6[id] = r7; + } + id++; + if (r6[id] > r12) { + r6[id] = r12; + } + } + r5++; + } + } + } + else if (r4->unk4 == 6) { + s32 i; + s32 r9 = ((r4->unk8.unk0.separate.unk0 + r5_Str->unk0.separate.unk0) * 8) - 5; + s32 r5 = ((r4->unk8.unk0.separate.unk2 + r5_Str->unk0.separate.unk2) * 8) - 4; + s32 var_24 = ((r4->unk8.unk0.separate.unk0 + r5_Str->unk0.separate.unk0 + r4->unkC) * 8) + 5; + s32 r8 = ((r4->unk8.unk0.separate.unk2 + r5_Str->unk0.separate.unk2 + r4->unkE) * 8) + 5; + s32 r12 = ((r4->unk8.unk0.separate.unk0 + r5_Str->unk0.separate.unk0) * 8) + 3; + const UnkTextStruct2_sub2 *r2 = r4->unk14; + s32 tmp = r2->f2 - 1; + s32 r10 = (((tmp + r2->f0 + 2) * 8) + r12) - 4; + s32 r4 = r9 + ((r2->f1 + 1) * 8); + s32 r7 = (r4 + ((r2->f2 + 2) * 8)) - 4; + + if (r5 < 0) + r5 = 0; + if (r8 < 0) + r8 = 0; + if (r5 > 160) + r5 = 160; + if (r8 > 160) + r8 = 160; + + for (i = 0; i < 4; i++) { + s32 id = r5 * 2; + if (r6[id] == 240 && r6[id + 1] == 240) { + r6[id++] = r7; + r6[id] = r4; + } + else { + if (r6[id] < r7) { + r6[id] = r7; + } + id++; + if (r6[id] > r4) { + r6[id] = r4; + } + } + r5++; + } + for (i = 0; i < 8; i++) { + s32 id = r5 * 2; + if (r6[id] == 240 && r6[id + 1] == 240) { + r6[id++] = r10; + r6[id] = r12; + } + else { + if (r6[id] < r10) { + r6[id] = r10; + } + id++; + if (r6[id] > r12) { + r6[id] = r12; + } + } + r5++; + } + + while (r5 < r8) { + s32 id = r5 * 2; + if (r6[id] == 240 && r6[id + 1] == 240) { + r6[id++] = var_24; + r6[id] = r9; + } + else { + if (r6[id] < var_24) { + r6[id] = var_24; + } + id++; + if (r6[id] > r9) { + r6[id] = r9; + } + } + r5++; + } + } + else { + s32 r8 = ((r4->unk8.unk0.separate.unk0 + r5_Str->unk0.separate.unk0) * 8) - 5; + s32 r3 = ((r4->unk8.unk0.separate.unk2 + r5_Str->unk0.separate.unk2) * 8) - 5; + s32 r12 = ((r4->unk8.unk0.separate.unk0 + r5_Str->unk0.separate.unk0 + r4->unkC) * 8) + 5; + s32 r5 = ((r4->unk8.unk0.separate.unk2 + r5_Str->unk0.separate.unk2 + r4->unkE) * 8) + 5; + if (r4->unkE != 0) { + if (r4->unk4 == 0) { + r3 += 8; + r5 = ((r4->unk8.unk0.separate.unk2 + r5_Str->unk0.separate.unk2 + r4->unkE) * 8) - 3; + } + if (r3 < 0) + r3 = 0; + if (r5 < 0) + r5 = 0; + if (r3 > 160) + r3 = 160; + if (r5 > 160) + r5 = 160; + while (r3 < r5) { + s32 id = r3 * 2; + if (r6[id] == 240 && r6[id + 1] == 240) { + r6[id++] = r12; + r6[id] = r8; + } + else { + if (r6[id] < r12) { + r6[id] = r12; + } + id++; + if (r6[id] > r8) { + r6[id] = r8; + } + } + r3++; + } + } + } +} From d0fcc152fb647bef2de5083c310d76b512a80501 Mon Sep 17 00:00:00 2001 From: DizzyEggg Date: Fri, 27 Sep 2024 16:52:14 +0200 Subject: [PATCH 06/11] sub_8008E58 --- asm/text.s | 350 ---------------------------------------------------- src/text2.c | 161 ++++++++++++++++++++++++ 2 files changed, 161 insertions(+), 350 deletions(-) diff --git a/asm/text.s b/asm/text.s index 9ec247abe..1b5253b9d 100644 --- a/asm/text.s +++ b/asm/text.s @@ -7,356 +7,6 @@ - thumb_func_start CallPrepareTextbox_8008C54 -CallPrepareTextbox_8008C54: - push {lr} - adds r1, r0, 0 - ldr r0, _08008C64 - bl PrepareTextbox_8008C6C - pop {r0} - bx r0 - .align 2, 0 -_08008C64: .4byte gUnknown_2027370 - thumb_func_end CallPrepareTextbox_8008C54 - - thumb_func_start nullsub_169 -nullsub_169: - bx lr - thumb_func_end nullsub_169 - - thumb_func_start PrepareTextbox_8008C6C -PrepareTextbox_8008C6C: - push {r4-r7,lr} - mov r7, r10 - mov r6, r9 - mov r5, r8 - push {r5-r7} - sub sp, 0xC - mov r9, r0 - mov r8, r1 - lsls r0, r1, 3 - add r0, r8 - lsls r0, 3 - mov r1, r9 - adds r6, r1, r0 - adds r0, r6, 0 - adds r0, 0x45 - ldrb r0, [r0] - cmp r0, 0 - bne _08008CBE - movs r2, 0x4 - ldrsh r0, [r6, r2] - movs r7, 0x8 - ldrsh r1, [r6, r7] - muls r0, r1 - lsls r4, r0, 5 - movs r5, 0 - movs r0, 0x44 - adds r0, r6 - mov r10, r0 - cmp r5, r4 - bge _08008D1E -_08008CA8: - lsrs r1, r5, 2 - lsls r1, 2 - ldr r0, [r6, 0x18] - adds r0, r1 - movs r1, 0x20 - bl CpuClear - adds r5, 0x20 - cmp r5, r4 - blt _08008CA8 - b _08008D1E -_08008CBE: - movs r1, 0x4 - ldrsh r0, [r6, r1] - movs r2, 0x8 - ldrsh r1, [r6, r2] - subs r1, 0x1 - muls r1, r0 - lsls r1, 5 - str r1, [sp, 0x8] - ldr r4, [r6, 0x18] - movs r5, 0 - movs r7, 0x44 - adds r7, r6 - mov r10, r7 - cmp r5, r0 - bge _08008D04 - movs r0, 0x1 - negs r0, r0 - mov r12, r0 - movs r1, 0 - ldr r3, _08008D84 - ldr r2, _08008D88 -_08008CE8: - mov r7, r12 - stm r4!, {r7} - stm r4!, {r3} - stm r4!, {r2} - stm r4!, {r1} - stm r4!, {r1} - stm r4!, {r1} - stm r4!, {r1} - stm r4!, {r1} - adds r5, 0x1 - movs r7, 0x4 - ldrsh r0, [r6, r7] - cmp r5, r0 - blt _08008CE8 -_08008D04: - movs r5, 0 - ldr r0, [sp, 0x8] - cmp r5, r0 - bge _08008D1E -_08008D0C: - adds r0, r4, 0 - movs r1, 0x20 - bl CpuClear - adds r4, 0x20 - adds r5, 0x20 - ldr r1, [sp, 0x8] - cmp r5, r1 - blt _08008D0C -_08008D1E: - ldr r0, [r6, 0xC] - cmp r0, 0x6 - bne _08008D60 - adds r5, r6, 0 - adds r5, 0x46 - movs r4, 0 - movs r0, 0x1 - strb r0, [r5] - movs r2, 0x4 - ldrsh r0, [r6, r2] - lsls r0, 3 - str r0, [sp] - movs r0, 0xE - str r0, [sp, 0x4] - mov r0, r9 - mov r1, r8 - movs r2, 0 - movs r3, 0xA - bl sub_8007958 - movs r7, 0x4 - ldrsh r0, [r6, r7] - lsls r0, 3 - str r0, [sp] - movs r0, 0xD - str r0, [sp, 0x4] - mov r0, r9 - mov r1, r8 - movs r2, 0 - movs r3, 0xB - bl sub_8007958 - strb r4, [r5] -_08008D60: - ldr r0, [r6, 0x28] - str r0, [r6, 0x30] - ldr r0, [r6, 0x1C] - str r0, [r6, 0x34] - ldr r0, [r6, 0x2C] - str r0, [r6, 0x38] - movs r0, 0x1 - mov r1, r10 - strb r0, [r1] - add sp, 0xC - pop {r3-r5} - mov r8, r3 - mov r9, r4 - mov r10, r5 - pop {r4-r7} - pop {r0} - bx r0 - .align 2, 0 -_08008D84: .4byte 0xeeeeeeee -_08008D88: .4byte 0xdddddddd - thumb_func_end PrepareTextbox_8008C6C - - thumb_func_start sub_8008D8C -sub_8008D8C: - push {lr} - lsls r1, r0, 3 - adds r1, r0 - lsls r1, 3 - ldr r0, _08008DA4 - adds r1, r0 - ldr r0, [r1, 0x38] - cmp r0, 0 - beq _08008DA0 - movs r0, 0x1 -_08008DA0: - pop {r1} - bx r1 - .align 2, 0 -_08008DA4: .4byte gUnknown_2027370 - thumb_func_end sub_8008D8C - - thumb_func_start sub_8008DA8 -sub_8008DA8: - movs r0, 0 - bx lr - thumb_func_end sub_8008DA8 - - thumb_func_start sub_8008DAC -sub_8008DAC: - ldr r3, _08008DC0 - lsls r0, 1 - lsls r1, 6 - adds r0, r1 - adds r0, r3 - strh r2, [r0] - ldr r1, _08008DC4 - movs r0, 0x1 - strb r0, [r1] - bx lr - .align 2, 0 -_08008DC0: .4byte gUnknown_202B038 -_08008DC4: .4byte gUnknown_20274A5 - thumb_func_end sub_8008DAC - - thumb_func_start sub_8008DC8 -sub_8008DC8: - push {r4,lr} - ldr r4, _08008DEC - lsls r0, 1 - lsls r1, 6 - adds r0, r1 - adds r1, r0, r4 - strh r2, [r1] - movs r1, 0x80 - lsls r1, 4 - adds r4, r1 - adds r0, r4 - strh r3, [r0] - ldr r1, _08008DF0 - movs r0, 0x1 - strb r0, [r1] - pop {r4} - pop {r0} - bx r0 - .align 2, 0 -_08008DEC: .4byte gUnknown_202B038 -_08008DF0: .4byte gUnknown_20274A5 - thumb_func_end sub_8008DC8 - - thumb_func_start sub_8008DF4 -sub_8008DF4: - push {r4-r7,lr} - adds r4, r0, 0 - adds r5, r1, 0 - adds r3, r2, 0 - ldrb r0, [r3] - ldr r1, _08008E4C - mov r12, r1 - cmp r0, 0 - beq _08008E3E - ldr r6, _08008E50 -_08008E08: - ldrb r1, [r3] - adds r0, r1, 0 - subs r0, 0x61 - lsls r0, 24 - lsrs r0, 24 - cmp r0, 0x19 - bhi _08008E1E - adds r0, r1, 0 - subs r0, 0x20 - lsls r0, 24 - lsrs r1, r0, 24 -_08008E1E: - lsls r2, r4, 1 - lsls r0, r5, 6 - adds r2, r0 - adds r2, r6 - movs r7, 0x96 - lsls r7, 2 - adds r0, r1, r7 - ldr r7, _08008E54 - adds r1, r7, 0 - orrs r0, r1 - strh r0, [r2] - adds r3, 0x1 - adds r4, 0x1 - ldrb r0, [r3] - cmp r0, 0 - bne _08008E08 -_08008E3E: - movs r0, 0x1 - mov r1, r12 - strb r0, [r1] - pop {r4-r7} - pop {r0} - bx r0 - .align 2, 0 -_08008E4C: .4byte gUnknown_20274A5 -_08008E50: .4byte gUnknown_202B038 -_08008E54: .4byte 0xfffff000 - thumb_func_end sub_8008DF4 - - thumb_func_start sub_8008E58 -sub_8008E58: - push {r4-r7,lr} - mov r7, r8 - push {r7} - adds r5, r0, 0 - mov r8, r1 - adds r4, r2, 0 - ldrb r0, [r4] - ldr r7, _08008EC4 - cmp r0, 0 - beq _08008EB4 - adds r1, r0, 0 - cmp r3, 0 - beq _08008EB4 - ldr r0, _08008EC8 - mov r12, r0 -_08008E76: - adds r0, r1, 0 - subs r0, 0x61 - lsls r0, 24 - lsrs r0, 24 - cmp r0, 0x19 - bhi _08008E8A - adds r0, r1, 0 - subs r0, 0x20 - lsls r0, 24 - lsrs r1, r0, 24 -_08008E8A: - lsls r2, r5, 1 - mov r6, r8 - lsls r0, r6, 6 - adds r2, r0 - add r2, r12 - movs r6, 0x96 - lsls r6, 2 - adds r0, r1, r6 - ldr r6, _08008ECC - adds r1, r6, 0 - orrs r0, r1 - strh r0, [r2] - adds r4, 0x1 - adds r5, 0x1 - subs r3, 0x1 - ldrb r0, [r4] - cmp r0, 0 - beq _08008EB4 - adds r1, r0, 0 - cmp r3, 0 - bne _08008E76 -_08008EB4: - movs r0, 0x1 - strb r0, [r7] - pop {r3} - mov r8, r3 - pop {r4-r7} - pop {r0} - bx r0 - .align 2, 0 -_08008EC4: .4byte gUnknown_20274A5 -_08008EC8: .4byte gUnknown_202B038 -_08008ECC: .4byte 0xfffff000 - thumb_func_end sub_8008E58 thumb_func_start sub_8008ED0 sub_8008ED0: diff --git a/src/text2.c b/src/text2.c index 86473eb7f..f7b6be917 100644 --- a/src/text2.c +++ b/src/text2.c @@ -3210,3 +3210,164 @@ void sub_80089AC(const UnkTextStruct2 *r4, UnkTextStruct2_sub *r5_Str) } } } + +void PrepareTextbox_8008C6C(UnkTextStruct1 *strArr, u32 strId); + +void CallPrepareTextbox_8008C54(u32 strId) +{ + PrepareTextbox_8008C6C(gUnknown_2027370, strId); +} + +UNUSED void nullsub_169(void) {} + +void PrepareTextbox_8008C6C(UnkTextStruct1 *strArr, u32 strId) +{ + s32 i; + UnkTextStruct1 *strPtr = &strArr[strId]; + + if (!strPtr->unk45) { + s32 count = (strPtr->unk4 * strPtr->unk8) * 32; + for (i = 0; i < count; i += 32) { + CpuClear(&strPtr->unk18[i / 4u], 32); + } + } + else { + s32 count = (strPtr->unk4 * (strPtr->unk8 - 1)) * 32; + u32 *ptr = strPtr->unk18; + for (i = 0; i < strPtr->unk4; i++) { + *(ptr++) = 0xFFFFFFFF; + *(ptr++) = 0xEEEEEEEE; + *(ptr++) = 0xDDDDDDDD; + *(ptr++) = 0; + *(ptr++) = 0; + *(ptr++) = 0; + *(ptr++) = 0; + *(ptr++) = 0; + } + for (i = 0; i < count; i += 32) { + CpuClear(ptr, 32); + ptr += 8; + } + } + + if (strPtr->unkC == 6) { + strPtr->unk46 = 1; + sub_8007958(strArr, strId, 0, 10, strPtr->unk4 * 8, 0xE); + sub_8007958(strArr, strId, 0, 11, strPtr->unk4 * 8, 0xD); + strPtr->unk46 = 0; + } + + strPtr->unk30 = strPtr->unk28; + strPtr->unk34 = strPtr->unk1C; + strPtr->unk38 = strPtr->unk2C; + strPtr->unk44 = 1; +} + +bool8 sub_8008D8C(u32 strId) +{ + UnkTextStruct1 *strPtr = &gUnknown_2027370[strId]; + return (strPtr->unk38 != 0); +} + +UNUSED bool8 sub_8008DA8(void) +{ + return FALSE; +} + +UNUSED void sub_8008DAC(s32 a0, s32 a1, s32 a2) +{ + gUnknown_202B038[0][a1][a0] = a2; + gUnknown_20274A5 = 1; +} + +void sub_8008DC8(s32 a0, s32 a1, s32 a2, s32 a3) +{ + gUnknown_202B038[0][a1][a0] = a2; + gUnknown_202B038[1][a1][a0] = a3; + gUnknown_20274A5 = 1; +} + +UNUSED void sub_8008DF4(s32 a0, s32 a1, u8 *a2) +{ + u8 r1; + + while (1) { + if (*a2 == 0) + break; + + r1 = *a2; + if (r1 >= 97 && r1 <= 122) { + r1 -= 32; + } + gUnknown_202B038[0][a1][a0] = 0xF000 | (r1 + 0x258); + a2++; + a0++; + } + gUnknown_20274A5 = 1; +} + +UNUSED void sub_8008E58(s32 a0, s32 a1, u8 *a2, s32 a3) +{ + u8 r1; + + while (1) { + if (*a2 == 0) + break; + + r1 = *a2; + if (a3 == 0) + break; + + if (r1 >= 97 && r1 <= 122) { + r1 -= 32; + } + gUnknown_202B038[0][a1][a0] = 0xF000 | (r1 + 0x258); + a2++; + a0++; + a3--; + } + gUnknown_20274A5 = 1; +} + +extern s16 gCharacterSpacing; + +s32 sub_8008ED0(const u8 *str) +{ + s32 ret = 0; + + while (1) { + u32 chr; + + str = xxx_get_next_char_from_string(str, &chr); + if (chr == 0) + break; + if (chr == 0xD) + break; + if (chr == 0xA) + break; + if (chr == 0x82A0 || chr == 0x82A2) + continue; + + if (chr == 0x23) { + switch (*str) { + case 0x6E: + return ret; + case 0x5B: + return ret; + case 0x50: + return ret; + } + } + else if (chr == 0x60) { + ret += 6; + } + else { + unkChar *ptr = GetCharacter(chr); + if (ptr != NULL) { + ret += ptr->unk6 + gCharacterSpacing; + } + } + } + + return ret; +} From 7220a18265df4ec422c07357eb3f14d6a68ae67e Mon Sep 17 00:00:00 2001 From: DizzyEggg Date: Mon, 30 Sep 2024 11:27:38 +0200 Subject: [PATCH 07/11] xxx_draw_string --- asm/text.s | 361 ---------------------------------------------------- src/text2.c | 124 ++++++++++++++++-- 2 files changed, 114 insertions(+), 371 deletions(-) diff --git a/asm/text.s b/asm/text.s index 1b5253b9d..12cbc1f6c 100644 --- a/asm/text.s +++ b/asm/text.s @@ -8,367 +8,6 @@ - thumb_func_start sub_8008ED0 -sub_8008ED0: - push {r4,r5,lr} - sub sp, 0x4 - adds r4, r0, 0 - movs r5, 0 - b _08008F64 -_08008EDA: - ldr r0, _08008F18 - cmp r1, r0 - beq _08008F64 - adds r0, 0x2 - cmp r1, r0 - beq _08008F64 - cmp r1, 0x1B - beq _08008F7E - cmp r1, 0x23 - bne _08008F44 - ldrb r0, [r2] - cmp r0, 0x6E - beq _08008F7E - cmp r0, 0x5B - beq _08008F7E - cmp r0, 0x50 - beq _08008F7E - cmp r0, 0x57 - beq _08008F40 - cmp r0, 0x57 - bgt _08008F22 - cmp r0, 0x43 - beq _08008F38 - cmp r0, 0x43 - bgt _08008F1C - cmp r0, 0x2B - beq _08008F40 - cmp r0, 0x3D - beq _08008F34 - b _08008F64 - .align 2, 0 -_08008F18: .4byte 0x000082a0 -_08008F1C: - cmp r0, 0x52 - beq _08008F3C - b _08008F64 -_08008F22: - cmp r0, 0x72 - beq _08008F3C - cmp r0, 0x72 - bgt _08008F30 - cmp r0, 0x63 - beq _08008F38 - b _08008F64 -_08008F30: - cmp r0, 0x7E - bne _08008F64 -_08008F34: - adds r4, r2, 0x2 - b _08008F64 -_08008F38: - adds r4, 0x2 - b _08008F64 -_08008F3C: - adds r4, 0x1 - b _08008F64 -_08008F40: - adds r4, r2, 0x1 - b _08008F64 -_08008F44: - cmp r1, 0x60 - bne _08008F4C - adds r5, 0x6 - b _08008F64 -_08008F4C: - adds r0, r1, 0 - bl GetCharacter - cmp r0, 0 - beq _08008F64 - movs r1, 0x6 - ldrsh r0, [r0, r1] - ldr r1, _08008F88 - movs r2, 0 - ldrsh r1, [r1, r2] - adds r0, r1 - adds r5, r0 -_08008F64: - adds r0, r4, 0 - mov r1, sp - bl xxx_get_next_char_from_string - adds r2, r0, 0 - adds r4, r2, 0 - ldr r1, [sp] - cmp r1, 0 - beq _08008F7E - cmp r1, 0xD - beq _08008F7E - cmp r1, 0xA - bne _08008EDA -_08008F7E: - adds r0, r5, 0 - add sp, 0x4 - pop {r4,r5} - pop {r1} - bx r1 - .align 2, 0 -_08008F88: .4byte gCharacterSpacing - thumb_func_end sub_8008ED0 - - thumb_func_start sub_8008F8C -sub_8008F8C: - push {r4-r6,lr} - sub sp, 0x10 - adds r4, r0, 0 - adds r5, r1, 0 - adds r6, r2, 0 - ldr r1, [sp, 0x20] - ldr r2, [sp, 0x24] - ldr r0, _08008FB8 - str r3, [sp] - str r1, [sp, 0x4] - movs r1, 0 - str r1, [sp, 0x8] - str r2, [sp, 0xC] - adds r1, r4, 0 - adds r2, r5, 0 - adds r3, r6, 0 - bl xxx_draw_string - add sp, 0x10 - pop {r4-r6} - pop {r0} - bx r0 - .align 2, 0 -_08008FB8: .4byte gUnknown_2027370 - thumb_func_end sub_8008F8C - - thumb_func_start PrintStringOnWindow -PrintStringOnWindow: - push {r4-r6,lr} - sub sp, 0x10 - adds r4, r0, 0 - adds r5, r1, 0 - adds r6, r2, 0 - ldr r1, [sp, 0x20] - ldr r0, _08008FE8 - str r3, [sp] - str r1, [sp, 0x4] - movs r1, 0 - str r1, [sp, 0x8] - movs r1, 0xD - str r1, [sp, 0xC] - adds r1, r4, 0 - adds r2, r5, 0 - adds r3, r6, 0 - bl xxx_draw_string - add sp, 0x10 - pop {r4-r6} - pop {r0} - bx r0 - .align 2, 0 -_08008FE8: .4byte gUnknown_2027370 - thumb_func_end PrintStringOnWindow - - thumb_func_start nullsub_170 -nullsub_170: - bx lr - thumb_func_end nullsub_170 - - thumb_func_start sub_8008FF0 -sub_8008FF0: - push {r4-r6,lr} - sub sp, 0x10 - adds r4, r0, 0 - adds r5, r1, 0 - adds r6, r2, 0 - ldr r1, [sp, 0x20] - ldr r0, _0800901C - str r3, [sp] - str r1, [sp, 0x4] - movs r1, 0 - str r1, [sp, 0x8] - movs r1, 0xD - str r1, [sp, 0xC] - adds r1, r4, 0 - adds r2, r5, 0 - adds r3, r6, 0 - bl xxx_draw_string - add sp, 0x10 - pop {r4-r6} - pop {r0} - bx r0 - .align 2, 0 -_0800901C: .4byte gUnknown_2027370 - thumb_func_end sub_8008FF0 - - thumb_func_start nullsub_171 -nullsub_171: - bx lr - thumb_func_end nullsub_171 - - thumb_func_start xxx_draw_string -xxx_draw_string: - push {r4-r7,lr} - mov r7, r9 - mov r6, r8 - push {r6,r7} - sub sp, 0x40 - adds r5, r0, 0 - adds r4, r3, 0 - ldr r0, [sp, 0x5C] - mov r8, r0 - ldr r7, [sp, 0x64] - add r0, sp, 0x8 - strh r1, [r0] - strh r2, [r0, 0x2] - str r1, [sp, 0x14] - movs r0, 0x7 - str r0, [sp, 0x18] - add r2, sp, 0x3C - mov r9, r2 - b _08009128 -_0800904A: - ldr r0, _08009058 - cmp r3, r0 - bne _08009060 - ldr r1, _0800905C - movs r0, 0 - str r0, [r1] - b _08009128 - .align 2, 0 -_08009058: .4byte 0x000082a0 -_0800905C: .4byte gCurrentCharmap -_08009060: - ldr r0, _08009070 - cmp r3, r0 - bne _08009078 - ldr r1, _08009074 - movs r0, 0x1 - str r0, [r1] - b _08009128 - .align 2, 0 -_08009070: .4byte 0x000082a2 -_08009074: .4byte gCurrentCharmap -_08009078: - cmp r3, 0x1B - beq _0800914A - cmp r3, 0xD - beq _08009084 - cmp r3, 0xA - bne _08009096 -_08009084: - add r1, sp, 0x8 - ldr r0, [sp, 0x14] - strh r0, [r1] - adds r0, r1, 0 - ldrh r0, [r0, 0x2] - ldr r3, [sp, 0x68] - adds r0, r3 - strh r0, [r1, 0x2] - b _08009128 -_08009096: - cmp r3, 0x1D - bne _080090AA - add r1, sp, 0x8 - ldr r0, [sp, 0x14] - strh r0, [r1] - adds r0, r1, 0 - ldrh r0, [r0, 0x2] - adds r0, 0x5 - strh r0, [r1, 0x2] - b _08009128 -_080090AA: - cmp r3, 0x60 - bne _080090B8 - add r1, sp, 0x8 - adds r0, r1, 0 - ldrh r0, [r0] - adds r0, 0x6 - b _08009126 -_080090B8: - cmp r7, 0 - bne _080090E0 - add r0, sp, 0x8 - movs r6, 0 - ldrsh r1, [r0, r6] - movs r6, 0x2 - ldrsh r2, [r0, r6] - ldr r0, [sp, 0x18] - str r0, [sp] - mov r0, r8 - str r0, [sp, 0x4] - adds r0, r5, 0 - bl xxx_draw_char - add r2, sp, 0x8 - adds r1, r2, 0 - ldrh r1, [r1] - adds r1, r0 - strh r1, [r2] - b _08009128 -_080090E0: - adds r0, r3, 0 - bl GetCharacter - adds r2, r0, 0 - cmp r2, 0 - beq _08009128 - add r0, sp, 0x8 - movs r3, 0 - ldrsh r1, [r0, r3] - ldr r0, _08009158 - movs r6, 0 - ldrsh r0, [r0, r6] - adds r0, 0xA - movs r3, 0x6 - ldrsh r2, [r2, r3] - subs r0, r2 - lsrs r2, r0, 31 - adds r0, r2 - asrs r0, 1 - adds r1, r0 - add r0, sp, 0x8 - movs r6, 0x2 - ldrsh r2, [r0, r6] - ldr r3, [sp, 0x3C] - ldr r0, [sp, 0x18] - str r0, [sp] - mov r0, r8 - str r0, [sp, 0x4] - adds r0, r5, 0 - bl xxx_draw_char - add r1, sp, 0x8 - adds r0, r1, 0 - ldrh r0, [r0] - adds r0, r7 -_08009126: - strh r0, [r1] -_08009128: - adds r0, r5, 0 - adds r1, r4, 0 - add r2, sp, 0x8 - bl HandleTextFormat - adds r4, r0, 0 - mov r1, r9 - bl xxx_get_next_char_from_string - adds r4, r0, 0 - ldr r3, [sp, 0x3C] - cmp r3, 0 - beq _0800914A - ldr r2, [sp, 0x60] - cmp r3, r2 - beq _0800914A - b _0800904A -_0800914A: - add sp, 0x40 - pop {r3,r4} - mov r8, r3 - mov r9, r4 - pop {r4-r7} - pop {r0} - bx r0 - .align 2, 0 -_08009158: .4byte gCharacterSpacing - thumb_func_end xxx_draw_string - thumb_func_start sub_800915C sub_800915C: push {r4,lr} diff --git a/src/text2.c b/src/text2.c index f7b6be917..10e31fb76 100644 --- a/src/text2.c +++ b/src/text2.c @@ -2839,7 +2839,7 @@ s32 HexDigitValue(u8 chr) return 1; } -u8 *xxx_get_next_char_from_string(u8 *a1, u32 *a0) +const u8 *xxx_get_next_char_from_string(const u8 *a1, u32 *a0) { s32 currChr = *a1; if (currChr == 0x7E) { @@ -3336,9 +3336,11 @@ s32 sub_8008ED0(const u8 *str) s32 ret = 0; while (1) { + const u8 *strPtr; u32 chr; - str = xxx_get_next_char_from_string(str, &chr); + strPtr = xxx_get_next_char_from_string(str, &chr); + str = strPtr; if (chr == 0) break; if (chr == 0xD) @@ -3347,22 +3349,36 @@ s32 sub_8008ED0(const u8 *str) break; if (chr == 0x82A0 || chr == 0x82A2) continue; + if (chr == 0x1B) + break; if (chr == 0x23) { - switch (*str) { - case 0x6E: - return ret; - case 0x5B: - return ret; - case 0x50: - return ret; + if (*strPtr == 0x6E || *strPtr == 0x5B || *strPtr == 0x50) + break; + switch (*strPtr) { + case 0x3D: + case 0x7E: + str = strPtr + 2; + break; + case 0x43: + case 0x63: + str += 2; + break; + case 0x52: + case 0x72: + str++; + break; + case 0x2B: + case 0x57: + str = strPtr + 1; + break; } } else if (chr == 0x60) { ret += 6; } else { - unkChar *ptr = GetCharacter(chr); + const struct unkChar *ptr = GetCharacter(chr); if (ptr != NULL) { ret += ptr->unk6 + gCharacterSpacing; } @@ -3371,3 +3387,91 @@ s32 sub_8008ED0(const u8 *str) return ret; } + +void xxx_draw_string(UnkTextStruct1 *strArr, s32 x, s32 y, const u8 *str, u32 windowId, s32 a5, s32 a6, s32 a7); + +void sub_8008F8C(s32 x, s32 y, const u8 *str, u32 windowId, s32 a4, s32 a5) +{ + xxx_draw_string(gUnknown_2027370, x, y, str, windowId, a4, 0, a5); +} + +void PrintStringOnWindow(s32 x, u32 y, const u8 *str, u32 windowId, u32 a4) +{ + xxx_draw_string(gUnknown_2027370, x, y, str, windowId, a4, 0, 0xD); +} + +UNUSED void nullsub_170(void) {} + +// Identical to PrintStringOnWindow +UNUSED void sub_8008FF0(s32 x, u32 y, const u8 *str, u32 windowId, u32 a4) +{ + xxx_draw_string(gUnknown_2027370, x, y, str, windowId, a4, 0, 0xD); +} + +UNUSED void nullsub_171(void) {} + +struct UnkDrawStringStruct +{ + s16 unk0; + s16 unk2; + s32 unkC; + u32 unk10; + u32 unk14; + u32 unk18; + void *unk24; + u32 unk2C; + u8 fill[24]; + u32 unk3C; +}; + +const u8 *HandleTextFormat(UnkTextStruct1 *strArr, const u8 *str, struct UnkDrawStringStruct *sp); + +void xxx_draw_string(UnkTextStruct1 *strArr, s32 x, s32 y, const u8 *str, u32 windowId, s32 a5, s32 a6, s32 a7) +{ + struct UnkDrawStringStruct sp; + + sp.unk0 = x; + sp.unk2 = y; + sp.unk14 = x; + sp.unk18 = 7; + while (1) { + str = HandleTextFormat(strArr, str, &sp); + str = xxx_get_next_char_from_string(str, &sp.unk3C); + if (sp.unk3C == '\0' || sp.unk3C == a5) + break; + + if (sp.unk3C == 0x82A0) { + gCurrentCharmap = 0; + } + else if (sp.unk3C == 0x82A2) { + gCurrentCharmap = 1; + } + else if (sp.unk3C == 0x1B) { + break; + } + else if (sp.unk3C == 0xD || sp.unk3C == 0xA) { + sp.unk0 = sp.unk14; + sp.unk2 += a7; + } + else if (sp.unk3C == 0x1D) { + sp.unk0 = sp.unk14; + sp.unk2 += 5; + } + else if (sp.unk3C == 0x60) { + sp.unk0 += 6; + } + else if (a6 == 0) { + sp.unk0 += xxx_draw_char(strArr, sp.unk0, sp.unk2, sp.unk3C, sp.unk18, windowId); + } + else { + const struct unkChar *chrPtr = GetCharacter(sp.unk3C); + if (chrPtr != NULL) { + s32 x = sp.unk0; + s32 x2 = gCharacterSpacing + 10; + x +=((x2 - chrPtr->unk6) / 2); + xxx_draw_char(strArr, x, sp.unk2, sp.unk3C, sp.unk18, windowId); + sp.unk0 += a6; + } + } + } +} From c579df25889883e3923097bb36b89af405ee6d43 Mon Sep 17 00:00:00 2001 From: DizzyEggg Date: Tue, 1 Oct 2024 11:34:12 +0200 Subject: [PATCH 08/11] sub_8009408 --- asm/text.s | 456 --------------------------------------------- src/text2.c | 526 ++++++++++++++++++++++++++++++++++++++++++++++++++-- 2 files changed, 508 insertions(+), 474 deletions(-) diff --git a/asm/text.s b/asm/text.s index 12cbc1f6c..bee84d649 100644 --- a/asm/text.s +++ b/asm/text.s @@ -7,462 +7,6 @@ - - thumb_func_start sub_800915C -sub_800915C: - push {r4,lr} - adds r3, r0, 0 - movs r2, 0 -_08009162: - ldrb r0, [r1] - cmp r0, 0x2E - beq _08009184 - subs r0, 0x30 - lsls r0, 24 - lsrs r0, 24 - cmp r0, 0x9 - bhi _08009186 - lsls r0, r2, 2 - adds r0, r2 - lsls r2, r0, 1 - adds r0, r2, 0 - subs r0, 0x30 - ldrb r4, [r1] - adds r2, r0, r4 - adds r1, 0x1 - b _08009162 -_08009184: - adds r1, 0x1 -_08009186: - strh r2, [r3] - adds r0, r1, 0 - pop {r4} - pop {r1} - bx r1 - thumb_func_end sub_800915C - - thumb_func_start xxx_handle_format_global -xxx_handle_format_global: - push {lr} - adds r3, r0, 0 - adds r2, r1, 0 - ldr r0, _080091A4 - adds r1, r3, 0 - bl HandleTextFormat - pop {r1} - bx r1 - .align 2, 0 -_080091A4: .4byte gUnknown_2027370 - thumb_func_end xxx_handle_format_global - - thumb_func_start sub_80091A8 -sub_80091A8: - adds r0, 0x1 - bx lr - thumb_func_end sub_80091A8 - - thumb_func_start HandleTextFormat -HandleTextFormat: - push {r4-r7,lr} - mov r7, r9 - mov r6, r8 - push {r6,r7} - mov r8, r0 - adds r4, r1, 0 - adds r5, r2, 0 - movs r0, 0 - mov r9, r0 - movs r7, 0x1 -_080091C0: - ldrb r0, [r4] - cmp r0, 0x23 - beq _080091C8 - b _0800937A -_080091C8: - ldrb r0, [r4, 0x1] - adds r1, r0, 0 - cmp r1, 0x5B - bne _08009216 - adds r2, r4, 0 - adds r4, 0x2 - adds r0, r5, 0 - adds r0, 0x21 - mov r1, r9 - strb r1, [r0] - ldrb r1, [r4] - adds r6, r0, 0 - cmp r1, 0 - beq _080091F6 - cmp r1, 0x5D - beq _080091F4 -_080091E8: - adds r4, 0x1 - ldrb r0, [r4] - cmp r0, 0 - beq _080091F6 - cmp r0, 0x5D - bne _080091E8 -_080091F4: - adds r4, 0x1 -_080091F6: - ldr r3, [r5, 0x24] - cmp r3, 0 - beq _0800920C - adds r0, r2, 0 - adds r1, r4, 0 - adds r2, r5, 0 - bl _call_via_r3 - cmp r0, 0 - beq _0800920C - adds r4, r0, 0 -_0800920C: - ldrb r0, [r6] - cmp r0, 0 - beq _08009214 - b _0800937A -_08009214: - b _080091C0 -_08009216: - cmp r1, 0x3D - bne _08009220 - ldrb r0, [r4, 0x2] - strh r0, [r5] - b _080092BA -_08009220: - cmp r1, 0x79 - bne _0800922A - ldrb r0, [r4, 0x2] - strh r0, [r5, 0x2] - b _080092BA -_0800922A: - cmp r1, 0x3E - bne _0800923A - adds r1, r4, 0x2 - adds r0, r5, 0 - bl sub_800915C - adds r4, r0, 0 - b _080091C0 -_0800923A: - cmp r1, 0x2E - bne _08009246 - ldrh r0, [r5] - ldrb r2, [r4, 0x2] - adds r0, r2 - b _0800926E -_08009246: - cmp r1, 0x6E - bne _08009258 - ldr r0, [r5, 0xC] - strh r0, [r5] - ldrh r0, [r5, 0x2] - adds r0, 0xB - strh r0, [r5, 0x2] - adds r4, 0x2 - b _080091C0 -_08009258: - cmp r1, 0x3A - bne _08009264 - ldrh r0, [r5] - strh r0, [r5, 0x4] - adds r4, 0x2 - b _080091C0 -_08009264: - cmp r1, 0x3B - bne _08009274 - ldrh r0, [r5, 0x4] - ldrb r3, [r4, 0x2] - adds r0, r3 -_0800926E: - strh r0, [r5] - adds r4, 0x3 - b _080091C0 -_08009274: - cmp r1, 0x2B - bne _0800929A - adds r4, 0x2 - adds r0, r4, 0 - bl sub_8008ED0 - mov r2, r8 - movs r3, 0x4 - ldrsh r1, [r2, r3] - lsls r1, 3 - subs r1, r0 - strh r1, [r5] - movs r1, 0 - ldrsh r0, [r5, r1] - lsrs r1, r0, 31 - adds r0, r1 - asrs r0, 1 - strh r0, [r5] - b _080091C0 -_0800929A: - cmp r1, 0x43 - bne _080092A4 - ldr r0, [r5, 0x10] - str r0, [r5, 0x14] - b _080092DC -_080092A4: - lsls r0, 24 - lsrs r0, 24 - cmp r0, 0x5F - bne _080092CC - ldr r0, [r5, 0x10] - str r0, [r5, 0x14] - ldr r1, _080092C8 - ldrb r0, [r4, 0x2] - adds r0, r1 - ldrb r0, [r0] - str r0, [r5, 0x10] -_080092BA: - adds r4, 0x3 - ldrb r0, [r4] - cmp r0, 0x2E - beq _080092C4 - b _080091C0 -_080092C4: - adds r4, 0x1 - b _080091C0 - .align 2, 0 -_080092C8: .4byte gUnknown_202749A -_080092CC: - cmp r0, 0x52 - bne _080092D4 - ldr r0, [r5, 0x14] - b _080092EE -_080092D4: - cmp r0, 0x63 - bne _080092E8 - ldr r0, [r5, 0x10] - str r0, [r5, 0x18] -_080092DC: - ldrb r0, [r4, 0x2] - bl InterpretColorChar - str r0, [r5, 0x10] - adds r4, 0x3 - b _080091C0 -_080092E8: - cmp r0, 0x72 - bne _080092F4 - ldr r0, [r5, 0x18] -_080092EE: - str r0, [r5, 0x10] - adds r4, 0x2 - b _080091C0 -_080092F4: - cmp r0, 0x53 - bne _08009314 - ldr r3, _08009310 - ldrb r2, [r4, 0x2] - movs r0, 0x7F - adds r1, r0, 0 - ands r1, r2 - adds r1, r3 - ldrb r2, [r4, 0x3] - ands r0, r2 - strb r0, [r1] - adds r4, 0x4 - b _080091C0 - .align 2, 0 -_08009310: .4byte gUnknown_20274A6 -_08009314: - cmp r0, 0x57 - bne _0800933A - adds r4, 0x2 - mov r2, r8 - movs r3, 0 - ldrsh r0, [r2, r3] - lsls r0, 3 - ldrh r1, [r5] - adds r0, r1 - subs r0, 0x2 - strh r0, [r5, 0x8] - movs r3, 0x2 - ldrsh r0, [r2, r3] - lsls r0, 3 - ldrh r1, [r5, 0x2] - adds r0, r1 - adds r0, 0x3 - strh r0, [r5, 0xA] - b _0800935C -_0800933A: - cmp r0, 0x50 - bne _08009350 - adds r4, 0x2 - ldr r0, _0800934C - strh r0, [r5, 0x2] - mov r2, r9 - str r2, [r5, 0x1C] - b _0800935C - .align 2, 0 -_0800934C: .4byte 0x0000270f -_08009350: - cmp r0, 0x70 - bne _08009368 - adds r4, 0x2 - ldr r0, _08009364 - strh r0, [r5, 0x2] - str r7, [r5, 0x1C] -_0800935C: - adds r0, r5, 0 - adds r0, 0x20 - strb r7, [r0] - b _0800937A - .align 2, 0 -_08009364: .4byte 0x0000270f -_08009368: - cmp r0, 0x7E - bne _0800937A - ldrb r0, [r4, 0x2] - str r0, [r5, 0x2C] - adds r0, r5, 0 - adds r0, 0x21 - strb r7, [r0] - adds r4, 0x3 - b _080091C0 -_0800937A: - adds r0, r4, 0 - pop {r3,r4} - mov r8, r3 - mov r9, r4 - pop {r4-r7} - pop {r1} - bx r1 - thumb_func_end HandleTextFormat - - thumb_func_start sub_8009388 -sub_8009388: - push {r4-r7,lr} - mov r7, r9 - mov r6, r8 - push {r6,r7} - ldr r2, _080093F4 - ldr r6, _080093F8 - strh r6, [r2] - movs r0, 0x80 - lsls r0, 4 - adds r5, r2, r0 - ldr r4, _080093FC - strh r4, [r5] - ldr r0, _08009400 - ldr r3, [r0] - ldr r0, _08009404 - ldr r1, [r0] - mov r9, r0 - cmp r3, r1 - bge _080093E6 - mov r8, r2 - mov r12, r6 - adds r6, r5, 0 - movs r5, 0 - adds r7, r6, 0 -_080093B8: - lsls r0, r3, 6 - mov r1, r8 - adds r2, r0, r1 - mov r1, r12 - strh r1, [r2] - adds r1, r0, r6 - strh r4, [r1] - adds r3, 0x1 - adds r0, r7 - adds r0, 0x2 - adds r2, 0x2 - movs r1, 0x1E -_080093D0: - strh r5, [r2] - strh r4, [r0] - adds r0, 0x2 - adds r2, 0x2 - subs r1, 0x1 - cmp r1, 0 - bge _080093D0 - mov r1, r9 - ldr r0, [r1] - cmp r3, r0 - blt _080093B8 -_080093E6: - pop {r3,r4} - mov r8, r3 - mov r9, r4 - pop {r4-r7} - pop {r0} - bx r0 - .align 2, 0 -_080093F4: .4byte gUnknown_202B038 -_080093F8: .4byte 0x0000f279 -_080093FC: .4byte 0x0000f27a -_08009400: .4byte gUnknown_202B020 -_08009404: .4byte gUnknown_202B024 - thumb_func_end sub_8009388 - - thumb_func_start sub_8009408 -sub_8009408: - push {r4-r7,lr} - mov r7, r10 - mov r6, r9 - mov r5, r8 - push {r5-r7} - adds r5, r1, 0 - ldr r1, _08009478 - ldr r6, _0800947C - strh r6, [r1] - movs r2, 0x80 - lsls r2, 4 - adds r4, r1, r2 - ldr r2, _08009480 - strh r2, [r4] - adds r3, r0, 0 - ldr r0, _08009484 - mov r10, r0 - cmp r3, r5 - bge _08009464 - mov r9, r1 - mov r8, r6 - adds r7, r4, 0 - adds r4, r2, 0 - movs r6, 0 - mov r12, r7 -_0800943A: - lsls r0, r3, 6 - mov r1, r9 - adds r2, r0, r1 - mov r1, r8 - strh r1, [r2] - adds r1, r0, r7 - strh r4, [r1] - adds r3, 0x1 - add r0, r12 - adds r0, 0x2 - adds r2, 0x2 - movs r1, 0x1E -_08009452: - strh r6, [r2] - strh r4, [r0] - adds r0, 0x2 - adds r2, 0x2 - subs r1, 0x1 - cmp r1, 0 - bge _08009452 - cmp r3, r5 - blt _0800943A -_08009464: - movs r0, 0x1 - mov r2, r10 - strb r0, [r2] - pop {r3-r5} - mov r8, r3 - mov r9, r4 - mov r10, r5 - pop {r4-r7} - pop {r0} - bx r0 - .align 2, 0 -_08009478: .4byte gUnknown_202B038 -_0800947C: .4byte 0x0000f279 -_08009480: .4byte 0x0000f27a -_08009484: .4byte gUnknown_20274A5 - thumb_func_end sub_8009408 - thumb_func_start sub_8009488 sub_8009488: push {r4-r7,lr} diff --git a/src/text2.c b/src/text2.c index 10e31fb76..9a552381b 100644 --- a/src/text2.c +++ b/src/text2.c @@ -3410,18 +3410,36 @@ UNUSED void sub_8008FF0(s32 x, u32 y, const u8 *str, u32 windowId, u32 a4) UNUSED void nullsub_171(void) {} +struct UnkDrawStringStruct; + struct UnkDrawStringStruct { s16 unk0; s16 unk2; + s16 unk4; + s16 unk6; + s16 unk8; + s16 unkA; s32 unkC; u32 unk10; u32 unk14; u32 unk18; - void *unk24; + u32 unk1C; + u8 unk20; + u8 unk21; + u8 fill22; + u8 fill23; + const u8* (*unk24)(const u8 *, const u8 *, struct UnkDrawStringStruct*); + u8 fill28; + u8 fill29; + u8 fill2A; + u8 fill2B; u32 unk2C; - u8 fill[24]; - u32 unk3C; + u8 fill30; + u8 fill31; + u8 fill32; + u8 fill33; + u32 unk34; }; const u8 *HandleTextFormat(UnkTextStruct1 *strArr, const u8 *str, struct UnkDrawStringStruct *sp); @@ -3432,46 +3450,518 @@ void xxx_draw_string(UnkTextStruct1 *strArr, s32 x, s32 y, const u8 *str, u32 wi sp.unk0 = x; sp.unk2 = y; - sp.unk14 = x; - sp.unk18 = 7; + sp.unkC = x; + sp.unk10 = 7; while (1) { str = HandleTextFormat(strArr, str, &sp); - str = xxx_get_next_char_from_string(str, &sp.unk3C); - if (sp.unk3C == '\0' || sp.unk3C == a5) + str = xxx_get_next_char_from_string(str, &sp.unk34); + if (sp.unk34 == '\0' || sp.unk34 == a5) break; - if (sp.unk3C == 0x82A0) { + if (sp.unk34 == 0x82A0) { gCurrentCharmap = 0; } - else if (sp.unk3C == 0x82A2) { + else if (sp.unk34 == 0x82A2) { gCurrentCharmap = 1; } - else if (sp.unk3C == 0x1B) { + else if (sp.unk34 == 0x1B) { break; } - else if (sp.unk3C == 0xD || sp.unk3C == 0xA) { - sp.unk0 = sp.unk14; + else if (sp.unk34 == 0xD || sp.unk34 == 0xA) { + sp.unk0 = sp.unkC; sp.unk2 += a7; } - else if (sp.unk3C == 0x1D) { - sp.unk0 = sp.unk14; + else if (sp.unk34 == 0x1D) { + sp.unk0 = sp.unkC; sp.unk2 += 5; } - else if (sp.unk3C == 0x60) { + else if (sp.unk34 == 0x60) { sp.unk0 += 6; } else if (a6 == 0) { - sp.unk0 += xxx_draw_char(strArr, sp.unk0, sp.unk2, sp.unk3C, sp.unk18, windowId); + sp.unk0 += xxx_draw_char(strArr, sp.unk0, sp.unk2, sp.unk34, sp.unk10, windowId); } else { - const struct unkChar *chrPtr = GetCharacter(sp.unk3C); + const struct unkChar *chrPtr = GetCharacter(sp.unk34); if (chrPtr != NULL) { s32 x = sp.unk0; s32 x2 = gCharacterSpacing + 10; x +=((x2 - chrPtr->unk6) / 2); - xxx_draw_char(strArr, x, sp.unk2, sp.unk3C, sp.unk18, windowId); + xxx_draw_char(strArr, x, sp.unk2, sp.unk34, sp.unk10, windowId); sp.unk0 += a6; } } } } + +const u8 *sub_800915C(s16 *a0, const u8 *str) +{ + s32 a = 0; + + while (1) + { + if (*str == 0x2E) { + str++; + break; + } + else if (*str >= '0' && *str <= '9') { + a *= 10; + a += (*str - '0'); + str++; + } + else { + break; + } + } + + *a0 = a; + return str; +} + +const u8 *xxx_handle_format_global(const u8 *str, struct UnkDrawStringStruct *unkStrPtr) +{ + return HandleTextFormat(gUnknown_2027370, str, unkStrPtr); +} + +UNUSED s32 sub_80091A8(s32 a0) +{ + return a0 + 1; +} + +extern u8 gUnknown_202749A[]; +extern u8 gUnknown_20274A6[]; + +s32 InterpretColorChar(s32 a0); + +#ifdef NONMATCHING +// https://decomp.me/scratch/AJ2km +const u8 *HandleTextFormat(UnkTextStruct1 *strArr, const u8 *str, struct UnkDrawStringStruct *sp) +{ + while (*str == 0x23) { + if (str[1] == 0x5B) { + const u8 *strBefore = str; + str += 2; + sp->unk21 = 0; + while (*str != '\0') { + if (*str == 0x5D) { + str++; + break; + } + str++; + } + if (sp->unk24 != NULL) { + const u8 *strNew = sp->unk24(strBefore, str, sp); + if (strNew != NULL) { + str = strNew; + } + } + + if (sp->unk21 != 0) + break; + } + else if (str[1] == 0x3D) { + sp->unk0 = str[2]; + str += 3; + if (*str == 0x2E) + str++; + } + else if (str[1] == 0x79) { + sp->unk2 = str[2]; + str += 3; + if (*str == 0x2E) + str++; + } + else if (str[1] == 0x3E) { + str = sub_800915C(&sp->unk0, str + 2); + } + else if (str[1] == 0x2E) { + sp->unk0 += str[2]; + str += 3; + } + else if (str[1] == 0x6E) { + sp->unk0 = sp->unkC; + sp->unk2 += 11; + str += 2; + } + else if (str[1] == 0x3A) { + sp->unk0 = sp->unk4; + str += 2; + } + else if (str[1] == 0x3B) { + sp->unk0 = sp->unk4 + str[2]; + str += 3; + } + else if (str[1] == 0x2B) { + str += 2; + sp->unk0 = (strArr[0].unk4 * 8) - sub_8008ED0(str); + sp->unk0 /= 2; + } + else if (str[1] == 0x43) { + sp->unk14 = sp->unk10; + sp->unk10 = InterpretColorChar(str[2]); + str += 3; + } + else if (str[1] == 0x5F) { + sp->unk14 = sp->unk10; + sp->unk10 = gUnknown_202749A[str[2]]; + str += 3; + if (*str == 0x2E) + str++; + } + else if (str[1] == 0x52) { + sp->unk10 = sp->unk14; + str += 2; + } + else if (str[1] == 0x63) { + sp->unk18 = sp->unk10; + sp->unk10 = InterpretColorChar(str[2]); + str += 3; + } + else if (str[1] == 0x72) { + sp->unk10 = sp->unk18; + str += 2; + } + else if (str[1] == 0x53) { + gUnknown_20274A6[str[2] & 0x7F] = str[3] & 0x7F; + str += 4; + } + else if (str[1] == 0x57) { + str += 2; + sp->unk8 = ((strArr[0].unk0 * 8) + sp->unk0) - 2; + sp->unkA = ((strArr[0].unk2 * 8) + sp->unk2) + 3; + sp->unk20 = 1; + break; + } + else if (str[1] == 0x50) { + str += 2; + sp->unk2 = 9999; + sp->unk1C = 0; + sp->unk20 = 1; + break; + } + else if (str[1] == 0x70) { + str += 2; + sp->unk2 = 9999; + sp->unk1C = 1; + sp->unk20 = 1; + break; + } + else if (str[1] == 0x7E) { + sp->unk2C = str[2]; + sp->unk21 = 1; + str += 3; + } + else { + break; + } + } + + return str; +} + +#else +NAKED const u8 *HandleTextFormat(UnkTextStruct1 *strArr, const u8 *str, struct UnkDrawStringStruct *sp) +{ + asm_unified("push {r4-r7,lr}\n" +" mov r7, r9\n" +" mov r6, r8\n" +" push {r6,r7}\n" +" mov r8, r0\n" +" adds r4, r1, 0\n" +" adds r5, r2, 0\n" +" movs r0, 0\n" +" mov r9, r0\n" +" movs r7, 0x1\n" +"_080091C0:\n" +" ldrb r0, [r4]\n" +" cmp r0, 0x23\n" +" beq _080091C8\n" +" b _0800937A\n" +"_080091C8:\n" +" ldrb r0, [r4, 0x1]\n" +" adds r1, r0, 0\n" +" cmp r1, 0x5B\n" +" bne _08009216\n" +" adds r2, r4, 0\n" +" adds r4, 0x2\n" +" adds r0, r5, 0\n" +" adds r0, 0x21\n" +" mov r1, r9\n" +" strb r1, [r0]\n" +" ldrb r1, [r4]\n" +" adds r6, r0, 0\n" +" cmp r1, 0\n" +" beq _080091F6\n" +" cmp r1, 0x5D\n" +" beq _080091F4\n" +"_080091E8:\n" +" adds r4, 0x1\n" +" ldrb r0, [r4]\n" +" cmp r0, 0\n" +" beq _080091F6\n" +" cmp r0, 0x5D\n" +" bne _080091E8\n" +"_080091F4:\n" +" adds r4, 0x1\n" +"_080091F6:\n" +" ldr r3, [r5, 0x24]\n" +" cmp r3, 0\n" +" beq _0800920C\n" +" adds r0, r2, 0\n" +" adds r1, r4, 0\n" +" adds r2, r5, 0\n" +" bl _call_via_r3\n" +" cmp r0, 0\n" +" beq _0800920C\n" +" adds r4, r0, 0\n" +"_0800920C:\n" +" ldrb r0, [r6]\n" +" cmp r0, 0\n" +" beq _08009214\n" +" b _0800937A\n" +"_08009214:\n" +" b _080091C0\n" +"_08009216:\n" +" cmp r1, 0x3D\n" +" bne _08009220\n" +" ldrb r0, [r4, 0x2]\n" +" strh r0, [r5]\n" +" b _080092BA\n" +"_08009220:\n" +" cmp r1, 0x79\n" +" bne _0800922A\n" +" ldrb r0, [r4, 0x2]\n" +" strh r0, [r5, 0x2]\n" +" b _080092BA\n" +"_0800922A:\n" +" cmp r1, 0x3E\n" +" bne _0800923A\n" +" adds r1, r4, 0x2\n" +" adds r0, r5, 0\n" +" bl sub_800915C\n" +" adds r4, r0, 0\n" +" b _080091C0\n" +"_0800923A:\n" +" cmp r1, 0x2E\n" +" bne _08009246\n" +" ldrh r0, [r5]\n" +" ldrb r2, [r4, 0x2]\n" +" adds r0, r2\n" +" b _0800926E\n" +"_08009246:\n" +" cmp r1, 0x6E\n" +" bne _08009258\n" +" ldr r0, [r5, 0xC]\n" +" strh r0, [r5]\n" +" ldrh r0, [r5, 0x2]\n" +" adds r0, 0xB\n" +" strh r0, [r5, 0x2]\n" +" adds r4, 0x2\n" +" b _080091C0\n" +"_08009258:\n" +" cmp r1, 0x3A\n" +" bne _08009264\n" +" ldrh r0, [r5]\n" +" strh r0, [r5, 0x4]\n" +" adds r4, 0x2\n" +" b _080091C0\n" +"_08009264:\n" +" cmp r1, 0x3B\n" +" bne _08009274\n" +" ldrh r0, [r5, 0x4]\n" +" ldrb r3, [r4, 0x2]\n" +" adds r0, r3\n" +"_0800926E:\n" +" strh r0, [r5]\n" +" adds r4, 0x3\n" +" b _080091C0\n" +"_08009274:\n" +" cmp r1, 0x2B\n" +" bne _0800929A\n" +" adds r4, 0x2\n" +" adds r0, r4, 0\n" +" bl sub_8008ED0\n" +" mov r2, r8\n" +" movs r3, 0x4\n" +" ldrsh r1, [r2, r3]\n" +" lsls r1, 3\n" +" subs r1, r0\n" +" strh r1, [r5]\n" +" movs r1, 0\n" +" ldrsh r0, [r5, r1]\n" +" lsrs r1, r0, 31\n" +" adds r0, r1\n" +" asrs r0, 1\n" +" strh r0, [r5]\n" +" b _080091C0\n" +"_0800929A:\n" +" cmp r1, 0x43\n" +" bne _080092A4\n" +" ldr r0, [r5, 0x10]\n" +" str r0, [r5, 0x14]\n" +" b _080092DC\n" +"_080092A4:\n" +" lsls r0, 24\n" +" lsrs r0, 24\n" +" cmp r0, 0x5F\n" +" bne _080092CC\n" +" ldr r0, [r5, 0x10]\n" +" str r0, [r5, 0x14]\n" +" ldr r1, _080092C8\n" +" ldrb r0, [r4, 0x2]\n" +" adds r0, r1\n" +" ldrb r0, [r0]\n" +" str r0, [r5, 0x10]\n" +"_080092BA:\n" +" adds r4, 0x3\n" +" ldrb r0, [r4]\n" +" cmp r0, 0x2E\n" +" beq _080092C4\n" +" b _080091C0\n" +"_080092C4:\n" +" adds r4, 0x1\n" +" b _080091C0\n" +" .align 2, 0\n" +"_080092C8: .4byte gUnknown_202749A\n" +"_080092CC:\n" +" cmp r0, 0x52\n" +" bne _080092D4\n" +" ldr r0, [r5, 0x14]\n" +" b _080092EE\n" +"_080092D4:\n" +" cmp r0, 0x63\n" +" bne _080092E8\n" +" ldr r0, [r5, 0x10]\n" +" str r0, [r5, 0x18]\n" +"_080092DC:\n" +" ldrb r0, [r4, 0x2]\n" +" bl InterpretColorChar\n" +" str r0, [r5, 0x10]\n" +" adds r4, 0x3\n" +" b _080091C0\n" +"_080092E8:\n" +" cmp r0, 0x72\n" +" bne _080092F4\n" +" ldr r0, [r5, 0x18]\n" +"_080092EE:\n" +" str r0, [r5, 0x10]\n" +" adds r4, 0x2\n" +" b _080091C0\n" +"_080092F4:\n" +" cmp r0, 0x53\n" +" bne _08009314\n" +" ldr r3, _08009310\n" +" ldrb r2, [r4, 0x2]\n" +" movs r0, 0x7F\n" +" adds r1, r0, 0\n" +" ands r1, r2\n" +" adds r1, r3\n" +" ldrb r2, [r4, 0x3]\n" +" ands r0, r2\n" +" strb r0, [r1]\n" +" adds r4, 0x4\n" +" b _080091C0\n" +" .align 2, 0\n" +"_08009310: .4byte gUnknown_20274A6\n" +"_08009314:\n" +" cmp r0, 0x57\n" +" bne _0800933A\n" +" adds r4, 0x2\n" +" mov r2, r8\n" +" movs r3, 0\n" +" ldrsh r0, [r2, r3]\n" +" lsls r0, 3\n" +" ldrh r1, [r5]\n" +" adds r0, r1\n" +" subs r0, 0x2\n" +" strh r0, [r5, 0x8]\n" +" movs r3, 0x2\n" +" ldrsh r0, [r2, r3]\n" +" lsls r0, 3\n" +" ldrh r1, [r5, 0x2]\n" +" adds r0, r1\n" +" adds r0, 0x3\n" +" strh r0, [r5, 0xA]\n" +" b _0800935C\n" +"_0800933A:\n" +" cmp r0, 0x50\n" +" bne _08009350\n" +" adds r4, 0x2\n" +" ldr r0, _0800934C\n" +" strh r0, [r5, 0x2]\n" +" mov r2, r9\n" +" str r2, [r5, 0x1C]\n" +" b _0800935C\n" +" .align 2, 0\n" +"_0800934C: .4byte 0x0000270f\n" +"_08009350:\n" +" cmp r0, 0x70\n" +" bne _08009368\n" +" adds r4, 0x2\n" +" ldr r0, _08009364\n" +" strh r0, [r5, 0x2]\n" +" str r7, [r5, 0x1C]\n" +"_0800935C:\n" +" adds r0, r5, 0\n" +" adds r0, 0x20\n" +" strb r7, [r0]\n" +" b _0800937A\n" +" .align 2, 0\n" +"_08009364: .4byte 0x0000270f\n" +"_08009368:\n" +" cmp r0, 0x7E\n" +" bne _0800937A\n" +" ldrb r0, [r4, 0x2]\n" +" str r0, [r5, 0x2C]\n" +" adds r0, r5, 0\n" +" adds r0, 0x21\n" +" strb r7, [r0]\n" +" adds r4, 0x3\n" +" b _080091C0\n" +"_0800937A:\n" +" adds r0, r4, 0\n" +" pop {r3,r4}\n" +" mov r8, r3\n" +" mov r9, r4\n" +" pop {r4-r7}\n" +" pop {r1}\n" +" bx r1\n"); +} +#endif // NONMATCHING + +extern s32 gUnknown_202B020; +extern s32 gUnknown_202B024; + +void sub_8009388(void) +{ + s32 i, j; + + gUnknown_202B038[0][0][0] = 0xF279; + gUnknown_202B038[1][0][0] = 0xF27A; + for (i = gUnknown_202B020; i < gUnknown_202B024; i++) { + gUnknown_202B038[0][i][0] = 0xF279; + gUnknown_202B038[1][i][0] = 0xF27A; + for (j = 1; j < 32; j++) { + gUnknown_202B038[0][i][j] = 0; + gUnknown_202B038[1][i][j] = 0xF27A; + } + } +} + +void sub_8009408(s32 from, s32 to) +{ + s32 i, j; + + gUnknown_202B038[0][0][0] = 0xF279; + gUnknown_202B038[1][0][0] = 0xF27A; + for (i = from; i < to; i++) { + gUnknown_202B038[0][i][0] = 0xF279; + gUnknown_202B038[1][i][0] = 0xF27A; + for (j = 1; j < 32; j++) { + gUnknown_202B038[0][i][j] = 0; + gUnknown_202B038[1][i][j] = 0xF27A; + } + } + gUnknown_20274A5 = 1; +} + From ebf922c39ac080404a6e3ad0cb814143e89ed77b Mon Sep 17 00:00:00 2001 From: DizzyEggg Date: Tue, 1 Oct 2024 12:34:45 +0200 Subject: [PATCH 09/11] InterpretColorChar --- asm/text.s | 331 ---------------------------------------------------- src/text2.c | 104 ++++++++++++++++- 2 files changed, 103 insertions(+), 332 deletions(-) diff --git a/asm/text.s b/asm/text.s index bee84d649..3060acc4c 100644 --- a/asm/text.s +++ b/asm/text.s @@ -7,337 +7,6 @@ - thumb_func_start sub_8009488 -sub_8009488: - push {r4-r7,lr} - mov r7, r10 - mov r6, r9 - mov r5, r8 - push {r5-r7} - lsls r1, r0, 3 - adds r1, r0 - lsls r1, 3 - ldr r0, _08009514 - adds r4, r1, r0 - movs r0, 0x2 - ldrsh r1, [r4, r0] - movs r3, 0 - movs r2, 0x6 - ldrsh r0, [r4, r2] - cmp r3, r0 - bge _08009506 - ldr r6, _08009518 - mov r9, r6 - ldr r0, _0800951C - mov r8, r0 - movs r2, 0x80 - lsls r2, 4 - add r2, r8 - mov r10, r2 -_080094BA: - movs r6, 0 - ldrsh r2, [r4, r6] - movs r5, 0 - movs r6, 0x4 - ldrsh r0, [r4, r6] - adds r6, r1, 0x1 - adds r7, r3, 0x1 - cmp r5, r0 - bge _080094FA - movs r0, 0xFC - lsls r0, 8 - mov r12, r0 - lsls r2, 1 - lsls r1, 6 - mov r3, r10 - adds r0, r1, r3 - adds r3, r2, r0 - add r1, r8 - adds r2, r1 -_080094E0: - ldrh r0, [r2] - mov r1, r12 - ands r1, r0 - strh r1, [r2] - mov r0, r9 - strh r0, [r3] - adds r3, 0x2 - adds r2, 0x2 - adds r5, 0x1 - movs r1, 0x4 - ldrsh r0, [r4, r1] - cmp r5, r0 - blt _080094E0 -_080094FA: - adds r1, r6, 0 - adds r3, r7, 0 - movs r2, 0x6 - ldrsh r0, [r4, r2] - cmp r3, r0 - blt _080094BA -_08009506: - pop {r3-r5} - mov r8, r3 - mov r9, r4 - mov r10, r5 - pop {r4-r7} - pop {r0} - bx r0 - .align 2, 0 -_08009514: .4byte gUnknown_2027370 -_08009518: .4byte 0x0000f27a -_0800951C: .4byte gUnknown_202B038 - thumb_func_end sub_8009488 - - thumb_func_start nullsub_172 -nullsub_172: - bx lr - thumb_func_end nullsub_172 - - thumb_func_start sub_8009524 -sub_8009524: - push {r4-r7,lr} - mov r7, r10 - mov r6, r9 - mov r5, r8 - push {r5-r7} - lsls r1, r0, 3 - adds r1, r0 - lsls r1, 3 - ldr r0, _080095BC - adds r4, r1, r0 - movs r1, 0x2 - ldrsh r0, [r4, r1] - subs r1, r0, 0x1 - movs r3, 0 - movs r2, 0x6 - ldrsh r0, [r4, r2] - adds r0, 0x2 - cmp r3, r0 - bge _080095AE - ldr r6, _080095C0 - mov r9, r6 - ldr r0, _080095C4 - mov r8, r0 - movs r2, 0x80 - lsls r2, 4 - add r2, r8 - mov r10, r2 -_0800955A: - movs r6, 0 - ldrsh r0, [r4, r6] - subs r2, r0, 0x1 - movs r5, 0 - movs r6, 0x4 - ldrsh r0, [r4, r6] - adds r0, 0x2 - adds r6, r1, 0x1 - adds r7, r3, 0x1 - cmp r5, r0 - bge _080095A0 - movs r0, 0xFC - lsls r0, 8 - mov r12, r0 - lsls r2, 1 - lsls r1, 6 - mov r3, r10 - adds r0, r1, r3 - adds r3, r2, r0 - add r1, r8 - adds r2, r1 -_08009584: - ldrh r0, [r2] - mov r1, r12 - ands r1, r0 - strh r1, [r2] - mov r0, r9 - strh r0, [r3] - adds r3, 0x2 - adds r2, 0x2 - adds r5, 0x1 - movs r1, 0x4 - ldrsh r0, [r4, r1] - adds r0, 0x2 - cmp r5, r0 - blt _08009584 -_080095A0: - adds r1, r6, 0 - adds r3, r7, 0 - movs r2, 0x6 - ldrsh r0, [r4, r2] - adds r0, 0x2 - cmp r3, r0 - blt _0800955A -_080095AE: - pop {r3-r5} - mov r8, r3 - mov r9, r4 - mov r10, r5 - pop {r4-r7} - pop {r0} - bx r0 - .align 2, 0 -_080095BC: .4byte gUnknown_2027370 -_080095C0: .4byte 0x0000f27a -_080095C4: .4byte gUnknown_202B038 - thumb_func_end sub_8009524 - - thumb_func_start nullsub_173 -nullsub_173: - bx lr - thumb_func_end nullsub_173 - - thumb_func_start sub_80095CC -sub_80095CC: - ldr r2, _080095D8 - str r0, [r2] - ldr r0, _080095DC - str r1, [r0] - bx lr - .align 2, 0 -_080095D8: .4byte gUnknown_202B020 -_080095DC: .4byte gUnknown_202B024 - thumb_func_end sub_80095CC - - thumb_func_start nullsub_174 -nullsub_174: - bx lr - thumb_func_end nullsub_174 - -@ https://decomp.me/scratch/A63Io - thumb_func_start sub_80095E4 -sub_80095E4: - push {lr} - cmp r1, 0 - bne _080095EC - movs r1, 0xA -_080095EC: - muls r1, r0 - movs r0, 0x7 - ands r0, r1 - cmp r0, 0 - beq _08009604 - adds r0, r1, 0 - cmp r1, 0 - bge _080095FE - adds r0, r1, 0x7 -_080095FE: - asrs r0, 3 - adds r0, 0x1 - b _0800960E -_08009604: - adds r0, r1, 0 - cmp r0, 0 - bge _0800960C - adds r0, 0x7 -_0800960C: - asrs r0, 3 -_0800960E: - pop {r1} - bx r1 - thumb_func_end sub_80095E4 - - thumb_func_start sub_8009614 -sub_8009614: - push {lr} - muls r1, r0 - movs r0, 0x7 - ands r0, r1 - cmp r0, 0 - beq _0800962E - adds r0, r1, 0 - cmp r1, 0 - bge _08009628 - adds r0, r1, 0x7 -_08009628: - asrs r0, 3 - adds r0, 0x1 - b _08009638 -_0800962E: - adds r0, r1, 0 - cmp r0, 0 - bge _08009636 - adds r0, 0x7 -_08009636: - asrs r0, 3 -_08009638: - pop {r1} - bx r1 - thumb_func_end sub_8009614 - - thumb_func_start InterpretColorChar -InterpretColorChar: - push {lr} - lsls r0, 24 - lsrs r0, 24 - adds r2, r0, 0 - cmp r0, 0xF - bls _080096DA - adds r1, r0, 0 - subs r1, 0x30 - lsls r0, r1, 24 - lsrs r0, 24 - cmp r0, 0xF - bhi _08009658 - adds r0, r1, 0 - b _080096DA -_08009658: - adds r0, r2, 0 - subs r0, 0x43 - cmp r0, 0x14 - bhi _080096D8 - lsls r0, 2 - ldr r1, _0800966C - adds r0, r1 - ldr r0, [r0] - mov pc, r0 - .align 2, 0 -_0800966C: .4byte _08009670 - .align 2, 0 -_08009670: - .4byte _080096D0 - .4byte _080096D0 - .4byte _080096C8 - .4byte _080096D8 - .4byte _080096CC - .4byte _080096C4 - .4byte _080096C4 - .4byte _080096D8 - .4byte _080096D8 - .4byte _080096D8 - .4byte _080096CC - .4byte _080096D0 - .4byte _080096D8 - .4byte _080096D8 - .4byte _080096D8 - .4byte _080096D8 - .4byte _080096C8 - .4byte _080096C8 - .4byte _080096D8 - .4byte _080096D8 - .4byte _080096D4 -_080096C4: - movs r0, 0x4 - b _080096DA -_080096C8: - movs r0, 0xF - b _080096DA -_080096CC: - movs r0, 0x5 - b _080096DA -_080096D0: - movs r0, 0x6 - b _080096DA -_080096D4: - movs r0, 0x2 - b _080096DA -_080096D8: - movs r0, 0x7 -_080096DA: - pop {r1} - bx r1 - thumb_func_end InterpretColorChar - thumb_func_start InitGraphics InitGraphics: push {r4-r6,lr} diff --git a/src/text2.c b/src/text2.c index 9a552381b..a3da69608 100644 --- a/src/text2.c +++ b/src/text2.c @@ -3531,7 +3531,7 @@ UNUSED s32 sub_80091A8(s32 a0) extern u8 gUnknown_202749A[]; extern u8 gUnknown_20274A6[]; -s32 InterpretColorChar(s32 a0); +s32 InterpretColorChar(u8 a0); #ifdef NONMATCHING // https://decomp.me/scratch/AJ2km @@ -3965,3 +3965,105 @@ void sub_8009408(s32 from, s32 to) gUnknown_20274A5 = 1; } +UNUSED void sub_8009488(s32 strArrId) +{ + s32 i, j; + s32 id0, id1; + UnkTextStruct1 *strPtr = &gUnknown_2027370[strArrId]; + + id0 = strPtr->unk2; + for (i = 0; i < strPtr->unk6; i++) { + id1 = strPtr->unk0; + for (j = 0; j < strPtr->unk4; j++) { + gUnknown_202B038[0][id0][id1] &= 0xFC00; + gUnknown_202B038[1][id0][id1] = 0xF27A; + id1++; + } + id0++; + } +} + +UNUSED void nullsub_172(void) {} + +void sub_8009524(s32 strArrId) +{ + s32 i, j; + UnkTextStruct1 *strPtr = &gUnknown_2027370[strArrId]; + s32 id0 = strPtr->unk2 - 1; + + for (i = 0; i < strPtr->unk6 + 2; i++) { + s32 id1 = strPtr->unk0 - 1; + for (j = 0; j < strPtr->unk4 + 2; j++) { + gUnknown_202B038[0][id0][id1] &= 0xFC00; + gUnknown_202B038[1][id0][id1] = 0xF27A; + id1++; + } + id0++; + } +} + +UNUSED void nullsub_173(void) {} + +void sub_80095CC(s32 a0, s32 a1) +{ + gUnknown_202B020 = a0; + gUnknown_202B024 = a1; +} + +UNUSED void nullsub_174(void) {} + +s32 sub_80095E4(s32 a0, s32 a1) +{ + s32 r1; + + if (a1 == 0) + a1 = 10; + r1 = a0 * a1; + + if ((r1 % 8) != 0) + return (r1 / 8) + 1; + else + return r1 / 8; +} + +// Same as sub_80095E4 except it doesn't check for a1 == 0 +s32 sub_8009614(s32 a0, s32 a1) +{ + s32 r1; + + r1 = a0 * a1; + + if ((r1 % 8) != 0) + return (r1 / 8) + 1; + else + return r1 / 8; +} + +s32 InterpretColorChar(u8 a0) +{ + if (a0 < 16) + return a0; + if (a0 >= 48 && a0 <= 63) + return a0 - 48; + + switch (a0) { + case 72: + case 73: + return 4; + case 69: + case 83: + case 84: + return 15; + case 71: + case 77: + return 5; + case 67: + case 68: + case 78: + return 6; + case 87: + return 2; + + } + return 7; +} From 2d2794c9014f6050cff188287e1255b2c151f713 Mon Sep 17 00:00:00 2001 From: DizzyEggg Date: Wed, 2 Oct 2024 09:38:37 +0200 Subject: [PATCH 10/11] text review changes --- src/text2.c | 36 ++++++++++++++++++------------------ 1 file changed, 18 insertions(+), 18 deletions(-) diff --git a/src/text2.c b/src/text2.c index a3da69608..d3c863a1d 100644 --- a/src/text2.c +++ b/src/text2.c @@ -2528,7 +2528,7 @@ void sub_8007E64(UnkTextStruct1 *a0, u16 a1[32][32], u32 a2, s32 a3, s32 a4, s32 } } -u32 sub_8007FA8(u32 a0) +u32 FlipPixelsHorizontally(u32 a0) { u32 r0; @@ -2576,14 +2576,14 @@ void sub_8008030(UnkTextStruct1 *a0, u16 a1[32][32], u32 a2, s32 a3, s32 a4, s32 if (strPtr->unk3C > loopUnk18Ptr) { strPtr->unk3C = loopUnk18Ptr; } - loopUnk18Ptr[0] = sub_8007FA8(*(a7++)); - loopUnk18Ptr[1] = sub_8007FA8(*(a7++)); - loopUnk18Ptr[2] = sub_8007FA8(*(a7++)); - loopUnk18Ptr[3] = sub_8007FA8(*(a7++)); - loopUnk18Ptr[4] = sub_8007FA8(*(a7++)); - loopUnk18Ptr[5] = sub_8007FA8(*(a7++)); - loopUnk18Ptr[6] = sub_8007FA8(*(a7++)); - loopUnk18Ptr[7] = sub_8007FA8(*(a7++)); + loopUnk18Ptr[0] = FlipPixelsHorizontally(*(a7++)); + loopUnk18Ptr[1] = FlipPixelsHorizontally(*(a7++)); + loopUnk18Ptr[2] = FlipPixelsHorizontally(*(a7++)); + loopUnk18Ptr[3] = FlipPixelsHorizontally(*(a7++)); + loopUnk18Ptr[4] = FlipPixelsHorizontally(*(a7++)); + loopUnk18Ptr[5] = FlipPixelsHorizontally(*(a7++)); + loopUnk18Ptr[6] = FlipPixelsHorizontally(*(a7++)); + loopUnk18Ptr[7] = FlipPixelsHorizontally(*(a7++)); if (strPtr->unk40 < loopUnk18Ptr + 8) { strPtr->unk40 = loopUnk18Ptr + 8; } @@ -2794,7 +2794,7 @@ const struct unkChar *GetCharacter(s32 chr) s32 r2, r4; const struct unkChar *ret; const struct unkChar *strPtr = gCharmaps[gCurrentCharmap]->unk4; - // Fakematch? Or just magic numbers which will make more sense once this file is documented? + // TODO: create labels for these if (chr > 63487 && chr < 65535) { s32 r2 = chr & 0xFF; @@ -3345,14 +3345,14 @@ s32 sub_8008ED0(const u8 *str) break; if (chr == 0xD) break; - if (chr == 0xA) + if (chr == '\n') break; if (chr == 0x82A0 || chr == 0x82A2) continue; if (chr == 0x1B) break; - if (chr == 0x23) { + if (chr == '#') { if (*strPtr == 0x6E || *strPtr == 0x5B || *strPtr == 0x50) break; switch (*strPtr) { @@ -3374,7 +3374,7 @@ s32 sub_8008ED0(const u8 *str) break; } } - else if (chr == 0x60) { + else if (chr == '`') { ret += 6; } else { @@ -3467,7 +3467,7 @@ void xxx_draw_string(UnkTextStruct1 *strArr, s32 x, s32 y, const u8 *str, u32 wi else if (sp.unk34 == 0x1B) { break; } - else if (sp.unk34 == 0xD || sp.unk34 == 0xA) { + else if (sp.unk34 == 0xD || sp.unk34 == '\n') { sp.unk0 = sp.unkC; sp.unk2 += a7; } @@ -3475,7 +3475,7 @@ void xxx_draw_string(UnkTextStruct1 *strArr, s32 x, s32 y, const u8 *str, u32 wi sp.unk0 = sp.unkC; sp.unk2 += 5; } - else if (sp.unk34 == 0x60) { + else if (sp.unk34 == '`') { sp.unk0 += 6; } else if (a6 == 0) { @@ -3500,7 +3500,7 @@ const u8 *sub_800915C(s16 *a0, const u8 *str) while (1) { - if (*str == 0x2E) { + if (*str == '.') { str++; break; } @@ -4043,8 +4043,8 @@ s32 InterpretColorChar(u8 a0) { if (a0 < 16) return a0; - if (a0 >= 48 && a0 <= 63) - return a0 - 48; + if (a0 >= '0' && a0 <= '?') + return a0 - '0'; switch (a0) { case 72: From be00dce2e1bd376931a623b141f56d81b78457ee Mon Sep 17 00:00:00 2001 From: DizzyEggg Date: Fri, 4 Oct 2024 09:34:30 +0200 Subject: [PATCH 11/11] change numbers to chars --- src/text2.c | 52 +++++++++++++++++++++++++--------------------------- 1 file changed, 25 insertions(+), 27 deletions(-) diff --git a/src/text2.c b/src/text2.c index d3c863a1d..728654041 100644 --- a/src/text2.c +++ b/src/text2.c @@ -3343,33 +3343,31 @@ s32 sub_8008ED0(const u8 *str) str = strPtr; if (chr == 0) break; - if (chr == 0xD) - break; - if (chr == '\n') + if (chr == '\r' || chr == '\n') break; if (chr == 0x82A0 || chr == 0x82A2) continue; - if (chr == 0x1B) + if (chr == '\e') break; if (chr == '#') { - if (*strPtr == 0x6E || *strPtr == 0x5B || *strPtr == 0x50) + if (*strPtr == 'n' || *strPtr == '[' || *strPtr == 'P') break; switch (*strPtr) { - case 0x3D: - case 0x7E: + case '=': + case '~': str = strPtr + 2; break; - case 0x43: - case 0x63: + case 'C': + case 'c': str += 2; break; - case 0x52: - case 0x72: + case 'R': + case 'r': str++; break; - case 0x2B: - case 0x57: + case '+': + case 'W': str = strPtr + 1; break; } @@ -3464,14 +3462,14 @@ void xxx_draw_string(UnkTextStruct1 *strArr, s32 x, s32 y, const u8 *str, u32 wi else if (sp.unk34 == 0x82A2) { gCurrentCharmap = 1; } - else if (sp.unk34 == 0x1B) { + else if (sp.unk34 == '\e') { break; } - else if (sp.unk34 == 0xD || sp.unk34 == '\n') { + else if (sp.unk34 == '\r' || sp.unk34 == '\n') { sp.unk0 = sp.unkC; sp.unk2 += a7; } - else if (sp.unk34 == 0x1D) { + else if (sp.unk34 == '\x1D') { // ASCII group separator. sp.unk0 = sp.unkC; sp.unk2 += 5; } @@ -4047,21 +4045,21 @@ s32 InterpretColorChar(u8 a0) return a0 - '0'; switch (a0) { - case 72: - case 73: + case 'H': + case 'I': return 4; - case 69: - case 83: - case 84: + case 'E': + case 'S': + case 'T': return 15; - case 71: - case 77: + case 'G': + case 'M': return 5; - case 67: - case 68: - case 78: + case 'C': + case 'D': + case 'N': return 6; - case 87: + case 'W': return 2; }