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++; + } + } + } +}