pmd-red/src/text2.c
2024-07-19 18:55:21 -04:00

2473 lines
58 KiB
C

#include "global.h"
#include "text1.h"
#include "text2.h"
// data.s
extern const u32 gUnknown_80B853C[16];
extern const struct unkShiftData gUnknown_80B85DC[8];
extern const u32 gUnknown_80B8814[];
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);
extern void sub_8008C6C(UnkTextStruct1 *, u32);
void nullsub_129(u32, s32, s32, s32, u32);
u32 xxx_draw_char(UnkTextStruct1 *, s32, s32, u32, u32, u32);
void sub_800677C(UnkTextStruct1 *, s32, u16 *, u8);
void sub_80069CC(UnkTextStruct1 *, s32, s32, s32, u16 *);
void sub_8006AC4(UnkTextStruct1 *, s32, s32, s32, u16 *);
void sub_8006B70(UnkTextStruct1 *, s32, s32, s32, u16 *);
void sub_8006C44(UnkTextStruct1 *, s32, u16 *, u8);
void sub_8006E94(UnkTextStruct1 *, s32, u32, const u8 *, u16 *);
void sub_8007958(UnkTextStruct1 *, u32, s32, s32, s32, u32);
void sub_8007AA4(UnkTextStruct1 *, u32, s32, s32, s32, u32);
void sub_8007BA8(UnkTextStruct1 *, u32, s32, s32, s32, s32);
void sub_8007D00(UnkTextStruct1 *, u32, s32, s32, s32, s32);
void nullsub_152(void)
{
}
void sub_8006518(UnkTextStruct2 *unkData)
{
s32 iVar2;
for (iVar2 = 0; iVar2 < 4; iVar2++)
unkData[iVar2] = gUnknown_202AFC0[iVar2];
}
void nullsub_153(void)
{
}
u32 sub_8006544(u32 index)
{
return gUnknown_80B8814[index];
}
// a1 is a VRAM pointer
void sub_8006554(UnkTextStruct1 *a0, u32 *a1, u32 *a2, u16 *a3, u32 a4, const UnkTextStruct2 *a5, bool8 a6, u32 a7, UnkTextStruct2_sub *a8, u8 a9)
{
UnkTextStruct1 *t1;
s32 iVar3;
s32 iVar5;
s32 iVar6;
s32 numI;
u32 uVar1;
s32 temp;
s32 i;
s32 j;
t1 = &a0[a4];
iVar3 = a5->unk8.unk0.arr[0] + a8->unk0.arr[0];
iVar5 = a5->unk8.unk0.arr[1] + a8->unk0.arr[1];
t1->unk0 = iVar3;
t1->unk2 = iVar5;
t1->unk4 = a5->unkC;
t1->unk8 = a5->unk10;
t1->unk6 = a5->unkE;
t1->unkC = a5->unk4;
t1->unk10 = a7;
if (t1->unkC == 6)
t1->unk14 = a7;
else
t1->unk14 = a7 + a5->unk12 * t1->unk4;
t1->unk18 = &a2[t1->unk10 * 8];
t1->unk1C = &a2[t1->unk14 * 8];
t1->unk24 = a5->unk12;
t1->unk28 = &a1[t1->unk14 * 8];
if (t1->unkC == 6)
t1->unk2C = t1->unk4 * (t1->unk6 + a5->unk12) * 32;
else
t1->unk2C = t1->unk4 * t1->unk6 * 32;
t1->unk30 = 0;
t1->unk34 = 0;
t1->unk38 = 0;
t1->unk20 = (t1->unk4 * 8) - 8;
t1->unk45 = t1->unkC == 0;
if (t1->unk8 == 0)
return;
if ((a5->unk0 & 0xA0) != 0x80) {
temp = iVar5 - 1;
if (t1->unkC == 6) {
uVar1 = a6 ? t1->unk14 : 0;
sub_8006E94(t1, temp, uVar1, a5->unk14, a3);
temp = iVar5 + 2;
uVar1 = a6 ? t1->unk14 + t1->unk4 * (a5->unk12 + 2) : 0;
numI = t1->unk6 - 2;
}
else {
sub_800677C(t1, temp, a3, a9);
temp = iVar5;
uVar1 = a6 ? t1->unk14 : 0;
numI = t1->unk6;
}
for (i = 0; i < numI; i++) {
iVar6 = iVar3 - 1;
sub_80069CC(t1, iVar6, temp, i, a3);
iVar6 = iVar3;
for (j = 0; j < t1->unk4; j++) {
sub_8006AC4(t1, iVar6, temp, uVar1, a3);
iVar6++;
if (a6)
uVar1++;
}
sub_8006B70(t1, iVar6, temp, i, a3);
temp++;
}
sub_8006C44(t1, temp, a3, a9);
}
if ((a5->unk0 & 0x80) == 0)
sub_8008C6C(a0, a4);
t1->unk46 = 0;
}
void sub_800677C(UnkTextStruct1 *a0, s32 a1, u16 *a2, u8 a3)
{
s32 iVar5;
s32 i;
iVar5 = a0->unk0 - 1;
if (a1 > 28)
return;
if (a1 < 0)
return;
switch (a0->unkC) {
case 0:
case 1:
case 2:
case 6:
break;
case 3:
(a2 + a1 * 0x20)[iVar5] = 0xF2D8;
if (a3 != 0)
(a2 + a1 * 0x20)[iVar5 + 0x400] = 0xF293;
else
(a2 + a1 * 0x20)[iVar5 + 0x400] = 0xF2DB;
iVar5++;
for (i = 0; i < a0->unk4; i++) {
(a2 + a1 * 0x20)[iVar5] = 0xF2D9;
(a2 + a1 * 0x20)[iVar5 + 0x400] = 0xF2DB;
iVar5++;
}
(a2 + a1 * 0x20)[iVar5] = 0xF6D8;
if (a3 != 0)
(a2 + a1 * 0x20)[iVar5 + 0x400] = 0xF693;
else
(a2 + a1 * 0x20)[iVar5 + 0x400] = 0xF2DB;
break;
case 4:
(a2 + a1 * 0x20)[iVar5] = 0xF2E8;
(a2 + a1 * 0x20)[iVar5 + 0x400] = 0xF2DB;
iVar5++;
for (i = 0; i < a0->unk4; i++) {
(a2 + a1 * 0x20)[iVar5] = 0xF2E9;
(a2 + a1 * 0x20)[iVar5 + 0x400] = 0xF2DB;
iVar5++;
}
(a2 + a1 * 0x20)[iVar5] = 0xF6E8;
(a2 + a1 * 0x20)[iVar5 + 0x400] = 0xF2DB;
break;
case 5:
(a2 + a1 * 0x20)[iVar5] = 0xF2DC;
iVar5++;
for (i = 0; i < a0->unk4; i++) {
(a2 + a1 * 0x20)[iVar5] = 0xF2DD;
iVar5++;
}
(a2 + a1 * 0x20)[iVar5] = 0xF6DC;
break;
case 7:
(a2 + a1 * 0x20)[iVar5] = 0xF293;
iVar5++;
for (i = 0; i < a0->unk4; i++) {
(a2 + a1 * 0x20)[iVar5] = 0xF297;
iVar5++;
}
(a2 + a1 * 0x20)[iVar5] = 0xF693;
break;
}
}
void sub_80069CC(UnkTextStruct1 *a0, s32 a1, s32 a2, s32 a3, u16 *a4)
{
if (a2 > 28)
return;
if (a2 < 0)
return;
switch (a0->unkC) {
case 1:
case 2:
break;
case 0:
if (a3 == 0) {
(a4 + a2 * 0x20)[a1] = 0xF297;
(a4 + a2 * 0x20)[a1 + 0x400] = 0xF2DB;
break;
}
if (a3 == a0->unk6 - 1) {
(a4 + a2 * 0x20)[a1] = 0xFA97;
(a4 + a2 * 0x20)[a1 + 0x400] = 0xF2DB;
break;
}
// Fallthrough
case 3:
case 6:
(a4 + a2 * 0x20)[a1] = 0xF2DA;
(a4 + a2 * 0x20)[a1 + 0x400] = 0xF2DB;
break;
case 4:
(a4 + a2 * 0x20)[a1] = 0xF2EA;
(a4 + a2 * 0x20)[a1 + 0x400] = 0xF2DB;
break;
case 5:
(a4 + a2 * 0x20)[a1] = 0xF2DE;
break;
case 7:
(a4 + a2 * 0x20)[a1] = 0xF2B6;
break;
}
}
void sub_8006AC4(UnkTextStruct1 *a0, s32 a1, s32 a2, s32 a3, u16 *a4)
{
if (a2 > 28)
return;
if (a2 < 0)
return;
switch (a0->unkC) {
case 2:
(a4 + a2 * 0x20)[a1] = a3 | 0xF000;
(a4 + a2 * 0x20)[a1 + 0x400] = 0xF278;
break;
case 0:
case 1:
case 3:
case 4:
case 6:
(a4 + a2 * 0x20)[a1] = a3 | 0xF000;
(a4 + a2 * 0x20)[a1 + 0x400] = 0xF2DB;
break;
case 5:
case 7:
(a4 + a2 * 0x20)[a1] = a3 | 0xF000;
break;
}
}
void sub_8006B70(UnkTextStruct1 *a0, s32 a1, s32 a2, s32 a3, u16 *a4)
{
if (a2 > 28)
return;
if (a2 < 0)
return;
switch (a0->unkC) {
case 1:
case 2:
break;
case 0:
if (a3 == 0) {
(a4 + a2 * 0x20)[a1] = 0xF697;
(a4 + a2 * 0x20)[a1 + 0x400] = 0xF2DB;
break;
}
if (a3 == a0->unk6 - 1) {
(a4 + a2 * 0x20)[a1] = 0xFE97;
(a4 + a2 * 0x20)[a1 + 0x400] = 0xF2DB;
break;
}
// Fallthrough
case 3:
case 6:
(a4 + a2 * 0x20)[a1] = 0xF6DA;
(a4 + a2 * 0x20)[a1 + 0x400] = 0xF2DB;
break;
case 4:
(a4 + a2 * 0x20)[a1] = 0xF6EA;
(a4 + a2 * 0x20)[a1 + 0x400] = 0xF2DB;
break;
case 5:
(a4 + a2 * 0x20)[a1] = 0xF6DE;
break;
case 7:
(a4 + a2 * 0x20)[a1] = 0xF6B6;
break;
}
}
void sub_8006C44(UnkTextStruct1 *a0, s32 a1, u16 *a2, u8 a3)
{
s32 iVar5;
s32 i;
iVar5 = a0->unk0 - 1;
if (a1 > 28)
return;
if (a1 < 0)
return;
switch (a0->unkC) {
case 0:
case 1:
case 2:
break;
case 3:
case 6:
(a2 + a1 * 0x20)[iVar5] = 0xFAD8;
if (a3 != 0)
(a2 + a1 * 0x20)[iVar5 + 0x400] = 0xFA93;
else
(a2 + a1 * 0x20)[iVar5 + 0x400] = 0xF2DB;
iVar5++;
for (i = 0; i < a0->unk4; i++) {
(a2 + a1 * 0x20)[iVar5] = 0xFAD9;
(a2 + a1 * 0x20)[iVar5 + 0x400] = 0xF2DB;
iVar5++;
}
(a2 + a1 * 0x20)[iVar5] = 0xFED8;
if (a3 != 0)
(a2 + a1 * 0x20)[iVar5 + 0x400] = 0xFE93;
else
(a2 + a1 * 0x20)[iVar5 + 0x400] = 0xF2DB;
break;
case 4:
(a2 + a1 * 0x20)[iVar5] = 0xFAE8;
(a2 + a1 * 0x20)[iVar5 + 0x400] = 0xF2DB;
iVar5++;
for (i = 0; i < a0->unk4; i++) {
(a2 + a1 * 0x20)[iVar5] = 0xFAE9;
(a2 + a1 * 0x20)[iVar5 + 0x400] = 0xF2DB;
iVar5++;
}
(a2 + a1 * 0x20)[iVar5] = 0xFEE8;
(a2 + a1 * 0x20)[iVar5 + 0x400] = 0xF2DB;
break;
case 5:
(a2 + a1 * 0x20)[iVar5] = 0xFADC;
iVar5++;
for (i = 0; i < a0->unk4; i++) {
(a2 + a1 * 0x20)[iVar5] = 0xFADD;
iVar5++;
}
(a2 + a1 * 0x20)[iVar5] = 0xFEDC;
break;
case 7:
(a2 + a1 * 0x20)[iVar5] = 0xFA93;
iVar5++;
for (i = 0; i < a0->unk4; i++) {
(a2 + a1 * 0x20)[iVar5] = 0xFA97;
iVar5++;
}
(a2 + a1 * 0x20)[iVar5] = 0xFE93;
break;
}
}
// Not even close but I don't feel like continuing atm https://decomp.me/scratch/F58jg
/*
void sub_8006E94(UnkTextStruct1 *a0, s32 a1, u32 a2, const u8 *a3, u16 *a4)
{
s32 bVar1;
s32 iVar2;
s32 iVar3;
s32 sVar4;
u16 *puVar5;
u16 *puVar6;
u16 *puVar7;
s32 iVar8;
u16 *puVar9;
u16 *puVar10;
u16 *puVar11;
s32 local_44;
u32 local_3c;
u16 *local_30;
s32 local_2c;
u16 *local_24;
iVar2 = a0->unk0;
bVar1 = -1;
if (a1 > 28)
return;
if (a1 < 0)
return;
(a4 + a1 * 0x20)[iVar2 - 1] = 0xF278;
(a4 + a1 * 0x20)[iVar2 - 1 + 0x400] = 0xF27A;
(a4 + a1 * 0x20)[iVar2 - 1 + 0x20] = 0xF278;
(a4 + a1 * 0x20)[iVar2 - 1 + 0x420] = 0xF27A;
(a4 + a1 * 0x20)[iVar2 - 1 + 0x40] = 0xF2D8;
(a4 + a1 * 0x20)[iVar2 - 1 + 0x440] = 0xF2DB;
local_2c = iVar2 * 2;
puVar5 = a4 + a1 * 0x20 + iVar2 + 0x40;
puVar7 = a4 + a1 * 0x20 + iVar2 + 0x20;
local_30 = a4 + a1 * 0x20 + iVar2 + 0x400;
puVar11 = a4 + a1 * 0x20 + iVar2 + 0x420;
puVar9 = a4 + a1 * 0x20 + iVar2;
iVar8 = a1 * 0x40;
for (local_3c = 0; local_3c < a3[0]; local_3c++) {
if (local_3c == a3[1]) {
bVar1 = TRUE;
*puVar9 = 0xF2E0;
*local_30 = 0xF2E2;
*puVar7 = 0xF2DA;
*puVar11 = 0xF2DB;
*puVar5 = 0xF6E7;
puVar9[0x440] = 0xF2DB;
puVar5++;
puVar7++;
local_30++;
puVar11++;
puVar9++;
local_2c += 2;
iVar2++;
if (a2 == 0 || ++a2 == 0)
iVar3 = 0;
else
iVar3 = a2 + a0->unk4;
local_24 = a4 + local_2c + iVar8 + 0x80;
puVar10 = a4 + local_2c + iVar8 + 0x40;
puVar6 = a4 + local_2c + iVar8;
for (local_44 = 0; local_44 < a3[2]; local_44++) {
*puVar6 = 0xF2E1;
puVar6[0x400] = 0xF2E2;
*puVar10 = a2 | 0xF000;
puVar6[0x420] = 0xF2DB;
*local_24 = iVar3 | 0xF000;
puVar6[0x440] = 0xF2DB;
local_24++;
puVar10++;
puVar6++;
puVar5++;
puVar7++;
local_30++;
puVar11++;
puVar9++;
local_2c += 2;
iVar2++;
if (a2 != 0)
a2++;
if (iVar3 != 0)
iVar3++;
}
*puVar9 = 0xF6E0;
*local_30 = 0xF2E2;
*puVar7 = 0xF6DA;
*puVar11 = 0xF2DB;
*puVar5 = 0xF2E7;
puVar9[0x440] = 0xF2DB;
}
else {
if (bVar1) {
if ((a3[3] >> (local_3c & 0xFF) & 1) == 0) {
sVar4 = 107;
if (local_3c == a3[0] - 1)
sVar4 = 103;
*puVar9 = (sVar4 + 0x278) | 0xF000;
*puVar7 = 0xF6EF;
*puVar5 = 0xF2D9;
}
else {
sVar4 = 31;
if (local_3c == a3[0] - 1)
sVar4 = 27;
*puVar9 = (sVar4 + 0x278) | 0xF000;
*puVar7 = 0xF6B6;
*puVar5 = 0xF2D9;
}
*local_30 = 0xF27A;
*puVar11 = 0xF6DB;
}
else {
if ((a3[3] >> (local_3c & 0xFF) & 1) == 0) {
sVar4 = 107;
if (local_3c == 0)
sVar4 = 103;
*puVar9 = (sVar4 + 0x278) | 0xF400;
*puVar7 = 0xF2EF;
*puVar5 = 0xF2D9;
}
else {
sVar4 = 31;
if (local_3c == 0)
sVar4 = 27;
*puVar9 = (sVar4 + 0x278) | 0xF400;
*puVar7 = 0xF2B6;
*puVar5 = 0xF2D9;
}
*local_30 = 0xF27A;
*puVar11 = 0xF2DB;
}
puVar9[0x440] = 0xF2DB;
}
local_2c += 2;
local_30++;
iVar2++;
puVar11++;
puVar5++;
puVar7++;
puVar9++;
if (a2 != 0)
a2++;
}
iVar8 = a0->unk0 + a0->unk4;
if (iVar2 < iVar8) {
for (iVar3 = iVar8 - iVar2; iVar3 != 0; iVar3--) {
(a4 + a1 * 0x20)[iVar2 + iVar3] = 0xF278;
(a4 + a1 * 0x20)[iVar2 + 0x400 + iVar3] = 0xF27A;
(a4 + a1 * 0x20)[iVar2 + 0x20 + iVar3] = 0xF278;
(a4 + a1 * 0x20)[iVar2 + 0x420 + iVar3] = 0xF27A;
(a4 + a1 * 0x20)[iVar2 + 0x40 + iVar3] = 0xF2D9;
(a4 + a1 * 0x20)[iVar2 + 0x440 + iVar3] = 0xF2DB;
if (a2 != 0)
a2++;
iVar2 = iVar8;
}
}
(a4 + a1 * 0x20)[iVar2] = 0xF278;
(a4 + a1 * 0x20)[iVar2 + 0x400] = 0xF27A;
(a4 + a1 * 0x20)[iVar2 + 0x20] = 0xF278;
(a4 + a1 * 0x20)[iVar2 + 0x420] = 0xF27A;
(a4 + a1 * 0x20)[iVar2 + 0x40] = 0xF6D8;
(a4 + a1 * 0x20)[iVar2 + 0x440] = 0xF2DB;
}
*/
NAKED
void sub_8006E94(UnkTextStruct1 *a0, s32 a1, u32 a2, const u8 *a3, u16 *a4)
{
asm_unified(
"\tpush {r4-r7,lr}\n"
"\tmov r7, r10\n"
"\tmov r6, r9\n"
"\tmov r5, r8\n"
"\tpush {r5-r7}\n"
"\tsub sp, 0x30\n"
"\tstr r0, [sp]\n"
"\tadds r4, r1, 0\n"
"\tadds r7, r2, 0\n"
"\tstr r3, [sp, 0x4]\n"
"\tmovs r1, 0\n"
"\tldrsh r0, [r0, r1]\n"
"\tmov r10, r0\n"
"\tmovs r2, 0x1\n"
"\tnegs r2, r2\n"
"\tadd r2, r10\n"
"\tmovs r3, 0\n"
"\tstr r3, [sp, 0x8]\n"
"\tcmp r4, 0x1C\n"
"\tble _08006EBE\n"
"\tb _080072FE\n"
"_08006EBE:\n"
"\tcmp r4, 0\n"
"\tbge _08006EC4\n"
"\tb _080072FE\n"
"_08006EC4:\n"
"\tlsls r1, r2, 1\n"
"\tlsls r4, 6\n"
"\tldr r6, [sp, 0x50]\n"
"\tadds r5, r4, r6\n"
"\tadds r1, r5\n"
"\tldr r0, _08006F9C\n"
"\tadds r3, r0, 0\n"
"\tstrh r3, [r1]\n"
"\tmovs r2, 0x80\n"
"\tlsls r2, 4\n"
"\tadds r0, r1, r2\n"
"\tldr r6, _08006FA0\n"
"\tadds r2, r6, 0\n"
"\tstrh r2, [r0]\n"
"\tadds r0, r1, 0\n"
"\tadds r0, 0x40\n"
"\tstrh r3, [r0]\n"
"\tmovs r0, 0x84\n"
"\tlsls r0, 4\n"
"\tadds r0, r1, r0\n"
"\tstrh r2, [r0]\n"
"\tadds r2, r1, 0\n"
"\tadds r2, 0x80\n"
"\tldr r3, _08006FA4\n"
"\tadds r0, r3, 0\n"
"\tstrh r0, [r2]\n"
"\tmovs r6, 0x88\n"
"\tlsls r6, 4\n"
"\tadds r1, r6\n"
"\tldr r2, _08006FA8\n"
"\tadds r0, r2, 0\n"
"\tstrh r0, [r1]\n"
"\tmov r12, r10\n"
"\tmovs r3, 0\n"
"\tstr r4, [sp, 0x18]\n"
"\tldr r4, [sp, 0x4]\n"
"\tldrb r4, [r4]\n"
"\tcmp r3, r4\n"
"\tblt _08006F14\n"
"\tb _08007238\n"
"_08006F14:\n"
"\tadds r2, r5, 0\n"
"\tmov r5, r12\n"
"\tlsls r1, r5, 1\n"
"\tldr r0, [sp, 0x50]\n"
"\tadds r0, 0x80\n"
"\tldr r6, [sp, 0x18]\n"
"\tadds r0, r6, r0\n"
"\tadds r0, r1\n"
"\tmov r9, r0\n"
"\tldr r0, [sp, 0x50]\n"
"\tadds r0, 0x40\n"
"\tadds r0, r6, r0\n"
"\tadds r0, r1\n"
"\tmov r8, r0\n"
"\tldr r4, [sp, 0x50]\n"
"\tmovs r5, 0x80\n"
"\tlsls r5, 4\n"
"\tadds r0, r4, r5\n"
"\tadds r0, r6, r0\n"
"\tadds r0, r1, r0\n"
"\tstr r0, [sp, 0x20]\n"
"\tmovs r6, 0x84\n"
"\tlsls r6, 4\n"
"\tadds r0, r4, r6\n"
"\tldr r4, [sp, 0x18]\n"
"\tadds r0, r4, r0\n"
"\tadds r0, r1\n"
"\tmov r10, r0\n"
"\tadds r4, r1, r2\n"
"\tldr r5, [sp, 0x18]\n"
"\tstr r5, [sp, 0x10]\n"
"\tstr r2, [sp, 0x1C]\n"
"\tstr r1, [sp, 0x24]\n"
"_08006F56:\n"
"\tldr r6, [sp, 0x4]\n"
"\tldrb r6, [r6, 0x1]\n"
"\tcmp r3, r6\n"
"\tbne _08006F60\n"
"\tb _080070C8\n"
"_08006F60:\n"
"\tldr r0, [sp, 0x8]\n"
"\tcmp r0, 0\n"
"\tbne _08007008\n"
"\tldr r1, [sp, 0x4]\n"
"\tldrb r0, [r1, 0x3]\n"
"\tasrs r0, r3\n"
"\tmovs r1, 0x1\n"
"\tands r0, r1\n"
"\tcmp r0, 0\n"
"\tbeq _08006FB8\n"
"\tmovs r1, 0x1F\n"
"\tcmp r3, 0\n"
"\tbne _08006F7C\n"
"\tmovs r1, 0x1B\n"
"_08006F7C:\n"
"\tmovs r2, 0x9E\n"
"\tlsls r2, 2\n"
"\tadds r0, r1, r2\n"
"\tldr r5, _08006FAC\n"
"\tadds r1, r5, 0\n"
"\torrs r0, r1\n"
"\tstrh r0, [r4]\n"
"\tldr r6, _08006FB0\n"
"\tadds r0, r6, 0\n"
"\tmov r1, r8\n"
"\tstrh r0, [r1]\n"
"\tldr r5, _08006FB4\n"
"\tmov r2, r9\n"
"\tstrh r5, [r2]\n"
"\tb _08006FDC\n"
"\t.align 2, 0\n"
"_08006F9C: .4byte 0x0000f278\n"
"_08006FA0: .4byte 0x0000f27a\n"
"_08006FA4: .4byte 0x0000f2d8\n"
"_08006FA8: .4byte 0x0000f2db\n"
"_08006FAC: .4byte 0xfffff400\n"
"_08006FB0: .4byte 0x0000f2b6\n"
"_08006FB4: .4byte 0x0000f2d9\n"
"_08006FB8:\n"
"\tmovs r1, 0x6B\n"
"\tcmp r3, 0\n"
"\tbne _08006FC0\n"
"\tmovs r1, 0x67\n"
"_08006FC0:\n"
"\tmovs r6, 0x9E\n"
"\tlsls r6, 2\n"
"\tadds r0, r1, r6\n"
"\tldr r2, _08006FF4\n"
"\tadds r1, r2, 0\n"
"\torrs r0, r1\n"
"\tstrh r0, [r4]\n"
"\tldr r5, _08006FF8\n"
"\tadds r0, r5, 0\n"
"\tmov r6, r8\n"
"\tstrh r0, [r6]\n"
"\tldr r1, _08006FFC\n"
"\tmov r0, r9\n"
"\tstrh r1, [r0]\n"
"_08006FDC:\n"
"\tldr r2, _08007000\n"
"\tadds r0, r2, 0\n"
"\tldr r5, [sp, 0x20]\n"
"\tstrh r0, [r5]\n"
"\tldr r0, _08007004\n"
"\tmov r6, r10\n"
"\tstrh r0, [r6]\n"
"\tmovs r1, 0x88\n"
"\tlsls r1, 4\n"
"\tadds r0, r4, r1\n"
"\tadds r2, 0x61\n"
"\tb _0800708E\n"
"\t.align 2, 0\n"
"_08006FF4: .4byte 0xfffff400\n"
"_08006FF8: .4byte 0x0000f2ef\n"
"_08006FFC: .4byte 0x0000f2d9\n"
"_08007000: .4byte 0x0000f27a\n"
"_08007004: .4byte 0x0000f2db\n"
"_08007008:\n"
"\tldr r5, [sp, 0x4]\n"
"\tldrb r0, [r5, 0x3]\n"
"\tasrs r0, r3\n"
"\tmovs r1, 0x1\n"
"\tands r0, r1\n"
"\tcmp r0, 0\n"
"\tbeq _0800704C\n"
"\tldrb r0, [r5]\n"
"\tsubs r0, 0x1\n"
"\tmovs r1, 0x1F\n"
"\tcmp r3, r0\n"
"\tbne _08007022\n"
"\tmovs r1, 0x1B\n"
"_08007022:\n"
"\tmovs r6, 0x9E\n"
"\tlsls r6, 2\n"
"\tadds r0, r1, r6\n"
"\tldr r2, _08007040\n"
"\tadds r1, r2, 0\n"
"\torrs r0, r1\n"
"\tstrh r0, [r4]\n"
"\tldr r5, _08007044\n"
"\tadds r0, r5, 0\n"
"\tmov r6, r8\n"
"\tstrh r0, [r6]\n"
"\tldr r1, _08007048\n"
"\tmov r0, r9\n"
"\tstrh r1, [r0]\n"
"\tb _08007076\n"
"\t.align 2, 0\n"
"_08007040: .4byte 0xfffff000\n"
"_08007044: .4byte 0x0000f6b6\n"
"_08007048: .4byte 0x0000f2d9\n"
"_0800704C:\n"
"\tldr r2, [sp, 0x4]\n"
"\tldrb r0, [r2]\n"
"\tsubs r0, 0x1\n"
"\tmovs r1, 0x6B\n"
"\tcmp r3, r0\n"
"\tbne _0800705A\n"
"\tmovs r1, 0x67\n"
"_0800705A:\n"
"\tmovs r5, 0x9E\n"
"\tlsls r5, 2\n"
"\tadds r0, r1, r5\n"
"\tldr r6, _080070B0\n"
"\tadds r1, r6, 0\n"
"\torrs r0, r1\n"
"\tstrh r0, [r4]\n"
"\tldr r1, _080070B4\n"
"\tadds r0, r1, 0\n"
"\tmov r2, r8\n"
"\tstrh r0, [r2]\n"
"\tldr r6, _080070B8\n"
"\tmov r5, r9\n"
"\tstrh r6, [r5]\n"
"_08007076:\n"
"\tldr r1, _080070BC\n"
"\tadds r0, r1, 0\n"
"\tldr r2, [sp, 0x20]\n"
"\tstrh r0, [r2]\n"
"\tldr r5, _080070C0\n"
"\tadds r0, r5, 0\n"
"\tmov r6, r10\n"
"\tstrh r0, [r6]\n"
"\tmovs r1, 0x88\n"
"\tlsls r1, 4\n"
"\tadds r0, r4, r1\n"
"\tldr r2, _080070C4\n"
"_0800708E:\n"
"\tstrh r2, [r0]\n"
"\tmovs r5, 0x2\n"
"\tadd r9, r5\n"
"\tadd r8, r5\n"
"\tldr r6, [sp, 0x20]\n"
"\tadds r6, 0x2\n"
"\tstr r6, [sp, 0x20]\n"
"\tadd r10, r5\n"
"\tadds r4, 0x2\n"
"\tldr r0, [sp, 0x24]\n"
"\tadds r0, 0x2\n"
"\tstr r0, [sp, 0x24]\n"
"\tmovs r1, 0x1\n"
"\tadd r12, r1\n"
"\tadds r3, 0x1\n"
"\tstr r3, [sp, 0x14]\n"
"\tb _08007226\n"
"\t.align 2, 0\n"
"_080070B0: .4byte 0xfffff000\n"
"_080070B4: .4byte 0x0000f6ef\n"
"_080070B8: .4byte 0x0000f2d9\n"
"_080070BC: .4byte 0x0000f27a\n"
"_080070C0: .4byte 0x0000f6db\n"
"_080070C4: .4byte 0x0000f2db\n"
"_080070C8:\n"
"\tmovs r2, 0x1\n"
"\tstr r2, [sp, 0x8]\n"
"\tldr r5, _08007128\n"
"\tadds r0, r5, 0\n"
"\tstrh r0, [r4]\n"
"\tldr r6, _0800712C\n"
"\tadds r0, r6, 0\n"
"\tldr r1, [sp, 0x20]\n"
"\tstrh r0, [r1]\n"
"\tldr r2, _08007130\n"
"\tadds r0, r2, 0\n"
"\tmov r5, r8\n"
"\tstrh r0, [r5]\n"
"\tldr r0, _08007134\n"
"\tmov r6, r10\n"
"\tstrh r0, [r6]\n"
"\tldr r1, _08007138\n"
"\tadds r0, r1, 0\n"
"\tmov r2, r9\n"
"\tstrh r0, [r2]\n"
"\tmovs r5, 0x88\n"
"\tlsls r5, 4\n"
"\tadds r0, r4, r5\n"
"\tldr r6, _08007134\n"
"\tstrh r6, [r0]\n"
"\tmovs r0, 0x2\n"
"\tadd r9, r0\n"
"\tadd r8, r0\n"
"\tldr r1, [sp, 0x20]\n"
"\tadds r1, 0x2\n"
"\tstr r1, [sp, 0x20]\n"
"\tadd r10, r0\n"
"\tadds r4, 0x2\n"
"\tldr r2, [sp, 0x24]\n"
"\tadds r2, 0x2\n"
"\tstr r2, [sp, 0x24]\n"
"\tmovs r5, 0x1\n"
"\tadd r12, r5\n"
"\tcmp r7, 0\n"
"\tbeq _0800713C\n"
"\tadds r7, 0x1\n"
"\tcmp r7, 0\n"
"\tbeq _0800713C\n"
"\tldr r6, [sp]\n"
"\tmovs r1, 0x4\n"
"\tldrsh r0, [r6, r1]\n"
"\tadds r2, r7, r0\n"
"\tb _0800713E\n"
"\t.align 2, 0\n"
"_08007128: .4byte 0x0000f2e0\n"
"_0800712C: .4byte 0x0000f2e2\n"
"_08007130: .4byte 0x0000f2da\n"
"_08007134: .4byte 0x0000f2db\n"
"_08007138: .4byte 0x0000f6e7\n"
"_0800713C:\n"
"\tmovs r2, 0\n"
"_0800713E:\n"
"\tmovs r5, 0\n"
"\tstr r5, [sp, 0xC]\n"
"\tadds r3, 0x1\n"
"\tstr r3, [sp, 0x14]\n"
"\tldr r6, [sp, 0x4]\n"
"\tldrb r6, [r6, 0x2]\n"
"\tcmp r5, r6\n"
"\tbge _080071E0\n"
"\tldr r0, [sp, 0x50]\n"
"\tadds r0, 0x80\n"
"\tldr r1, [sp, 0x10]\n"
"\tadds r0, r1, r0\n"
"\tldr r3, [sp, 0x24]\n"
"\tadds r0, r3, r0\n"
"\tstr r0, [sp, 0x2C]\n"
"\tldr r0, [sp, 0x50]\n"
"\tadds r0, 0x40\n"
"\tadds r0, r1, r0\n"
"\tadds r5, r3, r0\n"
"\tldr r6, [sp, 0x1C]\n"
"\tadds r3, r6\n"
"_08007168:\n"
"\tldr r1, _08007310\n"
"\tadds r0, r1, 0\n"
"\tstrh r0, [r3]\n"
"\tmovs r6, 0x80\n"
"\tlsls r6, 4\n"
"\tadds r6, r3, r6\n"
"\tstr r6, [sp, 0x28]\n"
"\tadds r1, 0x1\n"
"\tadds r0, r1, 0\n"
"\tstrh r0, [r6]\n"
"\tadds r0, r7, 0\n"
"\tldr r6, _08007314\n"
"\torrs r0, r6\n"
"\tstrh r0, [r5]\n"
"\tmovs r1, 0x84\n"
"\tlsls r1, 4\n"
"\tadds r0, r3, r1\n"
"\tldr r6, _08007318\n"
"\tstrh r6, [r0]\n"
"\tadds r0, r2, 0\n"
"\tldr r1, _08007314\n"
"\torrs r0, r1\n"
"\tldr r6, [sp, 0x2C]\n"
"\tstrh r0, [r6]\n"
"\tmovs r1, 0x88\n"
"\tlsls r1, 4\n"
"\tadds r0, r3, r1\n"
"\tldr r6, _08007318\n"
"\tstrh r6, [r0]\n"
"\tldr r0, [sp, 0x2C]\n"
"\tadds r0, 0x2\n"
"\tstr r0, [sp, 0x2C]\n"
"\tadds r5, 0x2\n"
"\tadds r3, 0x2\n"
"\tmovs r1, 0x2\n"
"\tadd r9, r1\n"
"\tadd r8, r1\n"
"\tldr r6, [sp, 0x20]\n"
"\tadds r6, 0x2\n"
"\tstr r6, [sp, 0x20]\n"
"\tadd r10, r1\n"
"\tadds r4, 0x2\n"
"\tldr r0, [sp, 0x24]\n"
"\tadds r0, 0x2\n"
"\tstr r0, [sp, 0x24]\n"
"\tmovs r1, 0x1\n"
"\tadd r12, r1\n"
"\tcmp r7, 0\n"
"\tbeq _080071CC\n"
"\tadds r7, 0x1\n"
"_080071CC:\n"
"\tcmp r2, 0\n"
"\tbeq _080071D2\n"
"\tadds r2, 0x1\n"
"_080071D2:\n"
"\tldr r6, [sp, 0xC]\n"
"\tadds r6, 0x1\n"
"\tstr r6, [sp, 0xC]\n"
"\tldr r0, [sp, 0x4]\n"
"\tldrb r0, [r0, 0x2]\n"
"\tcmp r6, r0\n"
"\tblt _08007168\n"
"_080071E0:\n"
"\tldr r1, _0800731C\n"
"\tadds r0, r1, 0\n"
"\tstrh r0, [r4]\n"
"\tldr r2, _08007320\n"
"\tadds r0, r2, 0\n"
"\tldr r3, [sp, 0x20]\n"
"\tstrh r0, [r3]\n"
"\tldr r5, _08007324\n"
"\tadds r0, r5, 0\n"
"\tmov r6, r8\n"
"\tstrh r0, [r6]\n"
"\tldr r1, _08007318\n"
"\tmov r0, r10\n"
"\tstrh r1, [r0]\n"
"\tadds r2, 0x5\n"
"\tadds r0, r2, 0\n"
"\tmov r3, r9\n"
"\tstrh r0, [r3]\n"
"\tmovs r5, 0x88\n"
"\tlsls r5, 4\n"
"\tadds r0, r4, r5\n"
"\tstrh r1, [r0]\n"
"\tmovs r6, 0x2\n"
"\tadd r9, r6\n"
"\tadd r8, r6\n"
"\tldr r0, [sp, 0x20]\n"
"\tadds r0, 0x2\n"
"\tstr r0, [sp, 0x20]\n"
"\tadd r10, r6\n"
"\tadds r4, 0x2\n"
"\tldr r1, [sp, 0x24]\n"
"\tadds r1, 0x2\n"
"\tstr r1, [sp, 0x24]\n"
"\tmovs r2, 0x1\n"
"\tadd r12, r2\n"
"_08007226:\n"
"\tcmp r7, 0\n"
"\tbeq _0800722C\n"
"\tadds r7, 0x1\n"
"_0800722C:\n"
"\tldr r3, [sp, 0x14]\n"
"\tldr r5, [sp, 0x4]\n"
"\tldrb r5, [r5]\n"
"\tcmp r3, r5\n"
"\tbge _08007238\n"
"\tb _08006F56\n"
"_08007238:\n"
"\tldr r6, [sp]\n"
"\tmovs r0, 0\n"
"\tldrsh r1, [r6, r0]\n"
"\tmovs r2, 0x4\n"
"\tldrsh r0, [r6, r2]\n"
"\tadds r0, r1, r0\n"
"\tcmp r12, r0\n"
"\tbge _080072BC\n"
"\tldr r3, _08007328\n"
"\tadds r4, r3, 0\n"
"\tmov r8, r0\n"
"\tmov r5, r12\n"
"\tlsls r1, r5, 1\n"
"\tldr r0, [sp, 0x50]\n"
"\tadds r0, 0x80\n"
"\tldr r6, [sp, 0x18]\n"
"\tadds r0, r6, r0\n"
"\tadds r5, r1, r0\n"
"\tldr r0, [sp, 0x50]\n"
"\tadds r0, 0x40\n"
"\tadds r0, r6, r0\n"
"\tadds r3, r1, r0\n"
"\tldr r0, [sp, 0x50]\n"
"\tadds r6, r0\n"
"\tadds r2, r1, r6\n"
"\tmovs r1, 0x80\n"
"\tlsls r1, 4\n"
"\tmov r10, r1\n"
"\tmovs r6, 0x84\n"
"\tlsls r6, 4\n"
"\tmov r9, r6\n"
"\tmov r0, r8\n"
"\tmov r1, r12\n"
"\tsubs r0, r1\n"
"\tmov r12, r0\n"
"_0800727E:\n"
"\tstrh r4, [r2]\n"
"\tmov r6, r10\n"
"\tadds r0, r2, r6\n"
"\tldr r1, _0800732C\n"
"\tstrh r1, [r0]\n"
"\tstrh r4, [r3]\n"
"\tmov r6, r9\n"
"\tadds r0, r2, r6\n"
"\tstrh r1, [r0]\n"
"\tadds r1, 0x5F\n"
"\tadds r0, r1, 0\n"
"\tstrh r0, [r5]\n"
"\tmovs r6, 0x88\n"
"\tlsls r6, 4\n"
"\tadds r1, r2, r6\n"
"\tldr r6, _08007318\n"
"\tadds r0, r6, 0\n"
"\tstrh r0, [r1]\n"
"\tadds r5, 0x2\n"
"\tadds r3, 0x2\n"
"\tadds r2, 0x2\n"
"\tmovs r0, 0x1\n"
"\tnegs r0, r0\n"
"\tadd r12, r0\n"
"\tcmp r7, 0\n"
"\tbeq _080072B4\n"
"\tadds r7, 0x1\n"
"_080072B4:\n"
"\tmov r1, r12\n"
"\tcmp r1, 0\n"
"\tbne _0800727E\n"
"\tmov r12, r8\n"
"_080072BC:\n"
"\tmov r2, r12\n"
"\tlsls r1, r2, 1\n"
"\tldr r3, [sp, 0x18]\n"
"\tldr r4, [sp, 0x50]\n"
"\tadds r0, r3, r4\n"
"\tadds r1, r0\n"
"\tldr r5, _08007328\n"
"\tadds r3, r5, 0\n"
"\tstrh r3, [r1]\n"
"\tmovs r6, 0x80\n"
"\tlsls r6, 4\n"
"\tadds r0, r1, r6\n"
"\tldr r4, _0800732C\n"
"\tadds r2, r4, 0\n"
"\tstrh r2, [r0]\n"
"\tadds r0, r1, 0\n"
"\tadds r0, 0x40\n"
"\tstrh r3, [r0]\n"
"\tmovs r5, 0x84\n"
"\tlsls r5, 4\n"
"\tadds r0, r1, r5\n"
"\tstrh r2, [r0]\n"
"\tadds r2, r1, 0\n"
"\tadds r2, 0x80\n"
"\tldr r6, _08007330\n"
"\tadds r0, r6, 0\n"
"\tstrh r0, [r2]\n"
"\tmovs r0, 0x88\n"
"\tlsls r0, 4\n"
"\tadds r1, r0\n"
"\tldr r2, _08007318\n"
"\tadds r0, r2, 0\n"
"\tstrh r0, [r1]\n"
"_080072FE:\n"
"\tadd sp, 0x30\n"
"\tpop {r3-r5}\n"
"\tmov r8, r3\n"
"\tmov r9, r4\n"
"\tmov r10, r5\n"
"\tpop {r4-r7}\n"
"\tpop {r0}\n"
"\tbx r0\n"
"\t.align 2, 0\n"
"_08007310: .4byte 0x0000f2e1\n"
"_08007314: .4byte 0xfffff000\n"
"_08007318: .4byte 0x0000f2db\n"
"_0800731C: .4byte 0x0000f6e0\n"
"_08007320: .4byte 0x0000f2e2\n"
"_08007324: .4byte 0x0000f6da\n"
"_08007328: .4byte 0x0000f278\n"
"_0800732C: .4byte 0x0000f27a\n"
"_08007330: .4byte 0x0000f6d8");
}
#ifdef NONMATCHING // https://decomp.me/scratch/zVTOf
void sub_8007334(s32 a0)
{
s32 r1;
s32 r2;
UnkTextStruct1 *r3;
s32 r4;
u32 r5;
s32 r6;
s16 typeCheater;
r3 = &gUnknown_2027370[a0];
r5 = r3->unk14;
r6 = r3->unk2;
for (r2 = 0; r2 < r3->unk6; r6++, r2++) {
typeCheater = r3->unk0;
r1 = typeCheater;
for (r4 = 0; r4 < r3->unk4; r4++) {
typeCheater = r1;
gUnknown_202B038[0][r6][typeCheater + r4] &= 0xFC00;
gUnknown_202B038[0][r6][typeCheater + r4] |= r5++;
}
}
}
#else
NAKED
void sub_8007334(s32 a0)
{
asm_unified(
"\tpush {r4-r7,lr}\n"
"\tmov r7, r9\n"
"\tmov r6, r8\n"
"\tpush {r6,r7}\n"
"\tlsls r1, r0, 3\n"
"\tadds r1, r0\n"
"\tlsls r1, 3\n"
"\tldr r0, _080073AC\n"
"\tadds r3, r1, r0\n"
"\tldr r5, [r3, 0x14]\n"
"\tmovs r0, 0x2\n"
"\tldrsh r6, [r3, r0]\n"
"\tmovs r2, 0\n"
"\tmovs r1, 0x6\n"
"\tldrsh r0, [r3, r1]\n"
"\tcmp r2, r0\n"
"\tbge _080073A0\n"
"\tldr r7, _080073B0\n"
"\tmov r9, r7\n"
"_0800735A:\n"
"\tmovs r0, 0\n"
"\tldrsh r1, [r3, r0]\n"
"\tmovs r4, 0\n"
"\tmovs r7, 0x4\n"
"\tldrsh r0, [r3, r7]\n"
"\tadds r7, r6, 0x1\n"
"\tadds r2, 0x1\n"
"\tmov r12, r2\n"
"\tcmp r4, r0\n"
"\tbge _08007394\n"
"\tmovs r0, 0xFC\n"
"\tlsls r0, 8\n"
"\tmov r8, r0\n"
"\tlsls r1, 1\n"
"\tlsls r0, r6, 6\n"
"\tadd r0, r9\n"
"\tadds r2, r1, r0\n"
"_0800737C:\n"
"\tldrh r0, [r2]\n"
"\tmov r1, r8\n"
"\tands r1, r0\n"
"\torrs r1, r5\n"
"\tstrh r1, [r2]\n"
"\tadds r2, 0x2\n"
"\tadds r5, 0x1\n"
"\tadds r4, 0x1\n"
"\tmovs r1, 0x4\n"
"\tldrsh r0, [r3, r1]\n"
"\tcmp r4, r0\n"
"\tblt _0800737C\n"
"_08007394:\n"
"\tadds r6, r7, 0\n"
"\tmov r2, r12\n"
"\tmovs r7, 0x6\n"
"\tldrsh r0, [r3, r7]\n"
"\tcmp r2, r0\n"
"\tblt _0800735A\n"
"_080073A0:\n"
"\tpop {r3,r4}\n"
"\tmov r8, r3\n"
"\tmov r9, r4\n"
"\tpop {r4-r7}\n"
"\tpop {r0}\n"
"\tbx r0\n"
"\t.align 2, 0\n"
"_080073AC: .4byte gUnknown_2027370\n"
"_080073B0: .4byte gUnknown_202B038");
}
#endif // NONMATCHING
UNUSED static void nullsub_154(void)
{
}
void sub_80073B8(s32 a0)
{
UnkTextStruct1 *r1;
r1 = &gUnknown_2027370[a0];
r1->unk3C = &r1->unk1C[(u32)r1->unk2C >> 2];
r1->unk40 = r1->unk1C;
r1->unk46 = 1;
}
UNUSED static void nullsub_155(void)
{
}
void sub_80073E0(s32 a0)
{
UnkTextStruct1 *r1;
r1 = &gUnknown_2027370[a0];
if (r1->unk44 == 0) {
r1->unk30 = &r1->unk28[r1->unk3C - r1->unk1C];
r1->unk34 = r1->unk3C;
r1->unk38 = (r1->unk40 - r1->unk3C + 1) * 4;
if (r1->unk38 >= r1->unk2C)
r1->unk38 = r1->unk2C;
if (r1->unk38 < 0)
r1->unk38 = 0;
}
r1->unk46 = 0;
}
UNUSED static void nullsub_156(void)
{
}
u32 xxx_call_draw_char(s32 x, s32 y, u32 a2, u32 color, u32 a4)
{
return xxx_draw_char(gUnknown_2027370, x, y, a2, color, a4);
}
// Unused
bool8 sub_8007464(void)
{
return FALSE;
}
// https://decomp.me/scratch/F06Ty
NAKED
u32 xxx_draw_char(UnkTextStruct1 *a0, s32 x, s32 y, u32 a3, u32 color, u32 a5)
{
asm_unified(
"push {r4-r7,lr}\n"
"\tmov r7, r10\n"
"\tmov r6, r9\n"
"\tmov r5, r8\n"
"\tpush {r5-r7}\n"
"\tsub sp, 0x28\n"
"\tadds r6, r1, 0\n"
"\tmov r10, r2\n"
"\tadds r4, r3, 0\n"
"\tldr r2, [sp, 0x48]\n"
"\tldr r3, [sp, 0x4C]\n"
"\tlsls r1, r3, 3\n"
"\tadds r1, r3\n"
"\tlsls r1, 3\n"
"\tadds r5, r0, r1\n"
"\tldr r1, _080074B8\n"
"\tmovs r0, 0xF\n"
"\tands r2, r0\n"
"\tlsls r2, 2\n"
"\tadds r2, r1\n"
"\tldr r2, [r2]\n"
"\tstr r2, [sp, 0x18]\n"
"\tldr r0, _080074BC\n"
"\tldr r0, [r0]\n"
"\tcmp r0, 0x1\n"
"\tbne _080074CC\n"
"\tcmp r4, 0x70\n"
"\tbeq _080074B0\n"
"\tcmp r4, 0x6A\n"
"\tbeq _080074B0\n"
"\tcmp r4, 0x71\n"
"\tbeq _080074B0\n"
"\tcmp r4, 0x79\n"
"\tbeq _080074B0\n"
"\tcmp r4, 0x67\n"
"\tbne _080074C0\n"
"_080074B0:\n"
"\tmovs r0, 0x2\n"
"\tadd r10, r0\n"
"\tb _080074CC\n"
"\t.align 2, 0\n"
"_080074B8: .4byte gUnknown_80B853C\n"
"_080074BC: .4byte gCurrentCharmap\n"
"_080074C0:\n"
"\tldr r0, _080074F8\n"
"\tcmp r4, r0\n"
"\tbne _080074CC\n"
"\tmovs r1, 0x2\n"
"\tnegs r1, r1\n"
"\tadd r10, r1\n"
"_080074CC:\n"
"\tadds r0, r4, 0\n"
"\tbl GetCharacter\n"
"\tstr r0, [sp]\n"
"\tldr r2, [r0]\n"
"\tstr r2, [sp, 0x4]\n"
"\tstr r2, [sp, 0xC]\n"
"\tadds r3, r2, 0\n"
"\tsubs r3, 0x6\n"
"\tstr r3, [sp, 0x8]\n"
"\tldr r0, _080074FC\n"
"\tldrb r0, [r0]\n"
"\tcmp r0, 0\n"
"\tbeq _08007500\n"
"\tldr r4, [sp]\n"
"\tldrb r1, [r4, 0xA]\n"
"\tlsrs r7, r1, 1\n"
"\tmovs r0, 0x1\n"
"\tadds r2, r7, 0\n"
"\tands r2, r0\n"
"\tstr r2, [sp, 0x1C]\n"
"\tb _08007508\n"
"\t.align 2, 0\n"
"_080074F8: .4byte 0x00008199\n"
"_080074FC: .4byte gUnknown_202B034\n"
"_08007500:\n"
"\tmovs r3, 0\n"
"\tstr r3, [sp, 0x1C]\n"
"\tldr r4, [sp]\n"
"\tldrb r1, [r4, 0xA]\n"
"_08007508:\n"
"\tmovs r0, 0x1\n"
"\tands r0, r1\n"
"\tcmp r0, 0\n"
"\tbne _08007512\n"
"\tb _08007670\n"
"_08007512:\n"
"\tmov r0, r10\n"
"\tcmp r0, 0\n"
"\tbge _0800751A\n"
"\tadds r0, 0x7\n"
"_0800751A:\n"
"\tasrs r4, r0, 3\n"
"\tmovs r7, 0x4\n"
"\tldrsh r0, [r5, r7]\n"
"\tmuls r0, r4\n"
"\tadds r2, r6, 0\n"
"\tcmp r6, 0\n"
"\tbge _0800752A\n"
"\tadds r2, r6, 0x7\n"
"_0800752A:\n"
"\tasrs r2, 3\n"
"\tadds r0, r2\n"
"\tlsls r0, 5\n"
"\tldr r1, [r5, 0x18]\n"
"\tadds r3, r1, r0\n"
"\tlsls r0, r4, 3\n"
"\tmov r1, r10\n"
"\tsubs r0, r1, r0\n"
"\tlsls r0, 2\n"
"\tadds r3, r0\n"
"\tlsls r0, r2, 3\n"
"\tsubs r0, r6, r0\n"
"\tlsls r0, 4\n"
"\tldr r1, _08007664\n"
"\tadds r0, r1\n"
"\tmov r12, r0\n"
"\tmov r9, r2\n"
"\tstr r4, [sp, 0x14]\n"
"\tmovs r2, 0x8\n"
"\tldrsh r0, [r5, r2]\n"
"\tcmp r4, r0\n"
"\tblt _08007558\n"
"\tb _0800786C\n"
"_08007558:\n"
"\tmovs r4, 0\n"
"\tstr r4, [sp, 0x10]\n"
"\tldr r2, _08007668\n"
"\tldr r1, _0800766C\n"
"\tldr r0, [r1]\n"
"\tlsls r0, 2\n"
"\tadds r0, r2\n"
"\tldr r0, [r0]\n"
"\tcmp r4, r0\n"
"\tblt _0800756E\n"
"\tb _0800786C\n"
"_0800756E:\n"
"\tadds r4, r2, 0\n"
"_08007570:\n"
"\tldr r6, [sp, 0x4]\n"
"\tldrh r0, [r6, 0x2]\n"
"\tlsls r2, r0, 16\n"
"\tldrh r0, [r6]\n"
"\torrs r2, r0\n"
"\tcmp r2, 0\n"
"\tbeq _080075CC\n"
"\tmovs r7, 0x4\n"
"\tldrsh r0, [r5, r7]\n"
"\tcmp r9, r0\n"
"\tbge _080075A6\n"
"\tmov r0, r12\n"
"\tldr r1, [r0]\n"
"\tands r1, r2\n"
"\tldr r0, [r0, 0x8]\n"
"\tlsls r1, r0\n"
"\tldr r0, [r3]\n"
"\torrs r0, r1\n"
"\tstr r0, [r3]\n"
"\tldr r0, [r5, 0x3C]\n"
"\tcmp r0, r3\n"
"\tbls _0800759E\n"
"\tstr r3, [r5, 0x3C]\n"
"_0800759E:\n"
"\tldr r0, [r5, 0x40]\n"
"\tcmp r0, r3\n"
"\tbcs _080075A6\n"
"\tstr r3, [r5, 0x40]\n"
"_080075A6:\n"
"\tmovs r1, 0x4\n"
"\tldrsh r0, [r5, r1]\n"
"\tsubs r0, 0x1\n"
"\tcmp r9, r0\n"
"\tbge _080075CC\n"
"\tadds r3, 0x20\n"
"\tmov r6, r12\n"
"\tldr r0, [r6, 0x4]\n"
"\tands r2, r0\n"
"\tldr r0, [r6, 0xC]\n"
"\tlsrs r2, r0\n"
"\tldr r0, [r3]\n"
"\torrs r0, r2\n"
"\tstr r0, [r3]\n"
"\tldr r0, [r5, 0x40]\n"
"\tcmp r0, r3\n"
"\tbcs _080075CA\n"
"\tstr r3, [r5, 0x40]\n"
"_080075CA:\n"
"\tsubs r3, 0x20\n"
"_080075CC:\n"
"\tldr r7, [sp, 0x4]\n"
"\tldrh r2, [r7, 0x4]\n"
"\tcmp r2, 0\n"
"\tbeq _08007620\n"
"\tmovs r1, 0x4\n"
"\tldrsh r0, [r5, r1]\n"
"\tsubs r0, 0x1\n"
"\tcmp r9, r0\n"
"\tbge _080075FA\n"
"\tadds r3, 0x20\n"
"\tmov r6, r12\n"
"\tldr r1, [r6]\n"
"\tands r1, r2\n"
"\tldr r0, [r6, 0x8]\n"
"\tlsls r1, r0\n"
"\tldr r0, [r3]\n"
"\torrs r0, r1\n"
"\tstr r0, [r3]\n"
"\tldr r0, [r5, 0x40]\n"
"\tcmp r0, r3\n"
"\tbcs _080075F8\n"
"\tstr r3, [r5, 0x40]\n"
"_080075F8:\n"
"\tsubs r3, 0x20\n"
"_080075FA:\n"
"\tmovs r7, 0x4\n"
"\tldrsh r0, [r5, r7]\n"
"\tsubs r0, 0x2\n"
"\tcmp r9, r0\n"
"\tbge _08007620\n"
"\tadds r3, 0x40\n"
"\tmov r1, r12\n"
"\tldr r0, [r1, 0x4]\n"
"\tands r2, r0\n"
"\tldr r0, [r1, 0xC]\n"
"\tlsrs r2, r0\n"
"\tldr r0, [r3]\n"
"\torrs r0, r2\n"
"\tstr r0, [r3]\n"
"\tldr r0, [r5, 0x40]\n"
"\tcmp r0, r3\n"
"\tbcs _0800761E\n"
"\tstr r3, [r5, 0x40]\n"
"_0800761E:\n"
"\tsubs r3, 0x40\n"
"_08007620:\n"
"\tldr r2, [sp, 0x4]\n"
"\tadds r2, 0x6\n"
"\tstr r2, [sp, 0x4]\n"
"\tadds r3, 0x4\n"
"\tmovs r6, 0x1\n"
"\tadd r10, r6\n"
"\tmovs r0, 0x7\n"
"\tmov r7, r10\n"
"\tands r0, r7\n"
"\tcmp r0, 0\n"
"\tbne _0800764E\n"
"\tldr r0, [r5, 0x20]\n"
"\tlsls r0, 2\n"
"\tadds r3, r0\n"
"\tldr r0, [sp, 0x14]\n"
"\tadds r0, 0x1\n"
"\tstr r0, [sp, 0x14]\n"
"\tmovs r1, 0x8\n"
"\tldrsh r0, [r5, r1]\n"
"\tldr r2, [sp, 0x14]\n"
"\tcmp r2, r0\n"
"\tblt _0800764E\n"
"\tb _0800786C\n"
"_0800764E:\n"
"\tldr r6, [sp, 0x10]\n"
"\tadds r6, 0x1\n"
"\tstr r6, [sp, 0x10]\n"
"\tldr r7, _0800766C\n"
"\tldr r0, [r7]\n"
"\tlsls r0, 2\n"
"\tadds r0, r4\n"
"\tldr r0, [r0]\n"
"\tcmp r6, r0\n"
"\tblt _08007570\n"
"\tb _0800786C\n"
"\t.align 2, 0\n"
"_08007664: .4byte gUnknown_80B85DC\n"
"_08007668: .4byte gUnknown_202B028\n"
"_0800766C: .4byte gCurrentCharmap\n"
"_08007670:\n"
"\tmovs r0, 0\n"
"\tstr r0, [sp, 0x20]\n"
"\tmov r0, r10\n"
"\tcmp r0, 0\n"
"\tbge _0800767C\n"
"\tadds r0, 0x7\n"
"_0800767C:\n"
"\tasrs r4, r0, 3\n"
"\tmovs r1, 0x4\n"
"\tldrsh r0, [r5, r1]\n"
"\tadds r1, r4, 0\n"
"\tmuls r1, r0\n"
"\tadds r0, r6, 0\n"
"\tcmp r6, 0\n"
"\tbge _0800768E\n"
"\tadds r0, r6, 0x7\n"
"_0800768E:\n"
"\tasrs r2, r0, 3\n"
"\tadds r0, r1, r2\n"
"\tlsls r0, 5\n"
"\tldr r1, [r5, 0x18]\n"
"\tadds r3, r1, r0\n"
"\tlsls r0, r4, 3\n"
"\tmov r7, r10\n"
"\tsubs r0, r7, r0\n"
"\tlsls r0, 2\n"
"\tadds r3, r0\n"
"\tlsls r0, r2, 3\n"
"\tsubs r0, r6, r0\n"
"\tlsls r0, 4\n"
"\tldr r1, _0800788C\n"
"\tadds r0, r1\n"
"\tmov r12, r0\n"
"\tmov r9, r2\n"
"\tstr r4, [sp, 0x14]\n"
"\tmovs r1, 0x8\n"
"\tldrsh r0, [r5, r1]\n"
"\tcmp r4, r0\n"
"\tblt _080076BC\n"
"\tb _0800786C\n"
"_080076BC:\n"
"\tmovs r2, 0\n"
"\tstr r2, [sp, 0x10]\n"
"\tldr r2, _08007890\n"
"\tldr r1, _08007894\n"
"\tldr r0, [r1]\n"
"\tlsls r0, 2\n"
"\tadds r0, r2\n"
"\tldr r0, [r0]\n"
"\tldr r4, [sp, 0x10]\n"
"\tcmp r4, r0\n"
"\tblt _080076D4\n"
"\tb _0800786C\n"
"_080076D4:\n"
"\tldr r6, [sp, 0x4]\n"
"\tldrh r0, [r6, 0x2]\n"
"\tlsls r4, r0, 16\n"
"\tldrh r0, [r6]\n"
"\torrs r4, r0\n"
"\tldr r1, _08007898\n"
"\tands r1, r4\n"
"\tldr r0, [sp, 0x18]\n"
"\tands r0, r4\n"
"\tadds r2, r1, r0\n"
"\tldr r7, [sp, 0x1C]\n"
"\tcmp r7, 0\n"
"\tbeq _08007724\n"
"\tldr r1, [sp, 0xC]\n"
"\tldrh r0, [r1, 0x2]\n"
"\tlsls r0, 16\n"
"\tldrh r1, [r1]\n"
"\torrs r0, r1\n"
"\tlsls r1, r0, 4\n"
"\tmvns r6, r4\n"
"\tmov r8, r6\n"
"\tbics r1, r4\n"
"\tldr r7, _0800789C\n"
"\tldr r6, [r7]\n"
"\tands r1, r6\n"
"\torrs r2, r1\n"
"\tldr r0, [sp, 0x20]\n"
"\tcmp r0, 0\n"
"\tbeq _08007724\n"
"\tldr r1, [sp, 0x8]\n"
"\tldrh r0, [r1, 0x2]\n"
"\tlsls r0, 16\n"
"\tldrh r1, [r1]\n"
"\torrs r0, r1\n"
"\tlsls r1, r0, 4\n"
"\teors r1, r4\n"
"\tmov r4, r8\n"
"\tands r1, r4\n"
"\tands r1, r6\n"
"\torrs r2, r1\n"
"_08007724:\n"
"\tcmp r2, 0\n"
"\tbeq _08007776\n"
"\tmovs r6, 0x4\n"
"\tldrsh r0, [r5, r6]\n"
"\tcmp r9, r0\n"
"\tbge _08007750\n"
"\tmov r7, r12\n"
"\tldr r1, [r7]\n"
"\tands r1, r2\n"
"\tldr r0, [r7, 0x8]\n"
"\tlsls r1, r0\n"
"\tldr r0, [r3]\n"
"\torrs r0, r1\n"
"\tstr r0, [r3]\n"
"\tldr r0, [r5, 0x3C]\n"
"\tcmp r0, r3\n"
"\tbls _08007748\n"
"\tstr r3, [r5, 0x3C]\n"
"_08007748:\n"
"\tldr r0, [r5, 0x40]\n"
"\tcmp r0, r3\n"
"\tbcs _08007750\n"
"\tstr r3, [r5, 0x40]\n"
"_08007750:\n"
"\tmovs r1, 0x4\n"
"\tldrsh r0, [r5, r1]\n"
"\tsubs r0, 0x1\n"
"\tcmp r9, r0\n"
"\tbge _08007776\n"
"\tadds r3, 0x20\n"
"\tmov r4, r12\n"
"\tldr r0, [r4, 0x4]\n"
"\tands r2, r0\n"
"\tldr r0, [r4, 0xC]\n"
"\tlsrs r2, r0\n"
"\tldr r0, [r3]\n"
"\torrs r0, r2\n"
"\tstr r0, [r3]\n"
"\tldr r0, [r5, 0x40]\n"
"\tcmp r0, r3\n"
"\tbcs _08007774\n"
"\tstr r3, [r5, 0x40]\n"
"_08007774:\n"
"\tsubs r3, 0x20\n"
"_08007776:\n"
"\tldr r6, [sp, 0x4]\n"
"\tldrh r4, [r6, 0x4]\n"
"\tldr r1, _08007898\n"
"\tands r1, r4\n"
"\tldr r0, [sp, 0x18]\n"
"\tands r0, r4\n"
"\tadds r2, r1, r0\n"
"\tldr r7, [sp, 0x1C]\n"
"\tcmp r7, 0\n"
"\tbeq _080077CC\n"
"\tldr r1, [sp, 0xC]\n"
"\tldrh r0, [r1, 0x4]\n"
"\tlsls r1, r0, 4\n"
"\tldr r6, [sp, 0xC]\n"
"\tldrh r0, [r6, 0x2]\n"
"\tmovs r7, 0xF\n"
"\tmov r8, r7\n"
"\tlsrs r0, 12\n"
"\torrs r1, r0\n"
"\tmvns r0, r4\n"
"\tstr r0, [sp, 0x24]\n"
"\tbics r1, r4\n"
"\tldr r7, _0800789C\n"
"\tldr r6, [r7]\n"
"\tands r1, r6\n"
"\torrs r2, r1\n"
"\tldr r0, [sp, 0x20]\n"
"\tcmp r0, 0\n"
"\tbeq _080077CC\n"
"\tldr r1, [sp, 0x8]\n"
"\tldrh r0, [r1, 0x4]\n"
"\tlsls r1, r0, 4\n"
"\tldr r7, [sp, 0x8]\n"
"\tldrh r0, [r7, 0x2]\n"
"\tlsrs r0, 12\n"
"\tmov r7, r8\n"
"\tands r0, r7\n"
"\torrs r1, r0\n"
"\teors r1, r4\n"
"\tldr r0, [sp, 0x24]\n"
"\tands r1, r0\n"
"\tands r1, r6\n"
"\torrs r2, r1\n"
"_080077CC:\n"
"\tcmp r2, 0\n"
"\tbeq _0800781C\n"
"\tmovs r1, 0x4\n"
"\tldrsh r0, [r5, r1]\n"
"\tsubs r0, 0x1\n"
"\tcmp r9, r0\n"
"\tbge _080077F6\n"
"\tadds r3, 0x20\n"
"\tmov r4, r12\n"
"\tldr r1, [r4]\n"
"\tands r1, r2\n"
"\tldr r0, [r4, 0x8]\n"
"\tlsls r1, r0\n"
"\tldr r0, [r3]\n"
"\torrs r0, r1\n"
"\tstr r0, [r3]\n"
"\tldr r0, [r5, 0x40]\n"
"\tcmp r0, r3\n"
"\tbcs _080077F4\n"
"\tstr r3, [r5, 0x40]\n"
"_080077F4:\n"
"\tsubs r3, 0x20\n"
"_080077F6:\n"
"\tmovs r6, 0x4\n"
"\tldrsh r0, [r5, r6]\n"
"\tsubs r0, 0x2\n"
"\tcmp r9, r0\n"
"\tbge _0800781C\n"
"\tadds r3, 0x40\n"
"\tmov r7, r12\n"
"\tldr r0, [r7, 0x4]\n"
"\tands r2, r0\n"
"\tldr r0, [r7, 0xC]\n"
"\tlsrs r2, r0\n"
"\tldr r0, [r3]\n"
"\torrs r0, r2\n"
"\tstr r0, [r3]\n"
"\tldr r0, [r5, 0x40]\n"
"\tcmp r0, r3\n"
"\tbcs _0800781A\n"
"\tstr r3, [r5, 0x40]\n"
"_0800781A:\n"
"\tsubs r3, 0x40\n"
"_0800781C:\n"
"\tmovs r0, 0x1\n"
"\tstr r0, [sp, 0x20]\n"
"\tldr r1, [sp, 0x4]\n"
"\tadds r1, 0x6\n"
"\tstr r1, [sp, 0x4]\n"
"\tldr r2, [sp, 0x8]\n"
"\tadds r2, 0x6\n"
"\tstr r2, [sp, 0x8]\n"
"\tldr r4, [sp, 0xC]\n"
"\tadds r4, 0x6\n"
"\tstr r4, [sp, 0xC]\n"
"\tadds r3, 0x4\n"
"\tadd r10, r0\n"
"\tmovs r0, 0x7\n"
"\tmov r6, r10\n"
"\tands r0, r6\n"
"\tcmp r0, 0\n"
"\tbne _08007854\n"
"\tldr r0, [r5, 0x20]\n"
"\tlsls r0, 2\n"
"\tadds r3, r0\n"
"\tldr r7, [sp, 0x14]\n"
"\tadds r7, 0x1\n"
"\tstr r7, [sp, 0x14]\n"
"\tmovs r1, 0x8\n"
"\tldrsh r0, [r5, r1]\n"
"\tcmp r7, r0\n"
"\tbge _0800786C\n"
"_08007854:\n"
"\tldr r2, [sp, 0x10]\n"
"\tadds r2, 0x1\n"
"\tstr r2, [sp, 0x10]\n"
"\tldr r4, _08007894\n"
"\tldr r0, [r4]\n"
"\tlsls r0, 2\n"
"\tldr r6, _08007890\n"
"\tadds r0, r6\n"
"\tldr r0, [r0]\n"
"\tcmp r2, r0\n"
"\tbge _0800786C\n"
"\tb _080076D4\n"
"_0800786C:\n"
"\tldr r7, [sp]\n"
"\tmovs r1, 0x6\n"
"\tldrsh r0, [r7, r1]\n"
"\tldr r2, _080078A0\n"
"\tmovs r3, 0\n"
"\tldrsh r1, [r2, r3]\n"
"\tadds r0, r1\n"
"\tadd sp, 0x28\n"
"\tpop {r3-r5}\n"
"\tmov r8, r3\n"
"\tmov r9, r4\n"
"\tmov r10, r5\n"
"\tpop {r4-r7}\n"
"\tpop {r1}\n"
"\tbx r1\n"
"\t.align 2, 0\n"
"_0800788C: .4byte gUnknown_80B85DC\n"
"_08007890: .4byte gUnknown_202B028\n"
"_08007894: .4byte gCurrentCharmap\n"
"_08007898: .4byte 0x11111111\n"
"_0800789C: .4byte gUnknown_202B030\n"
"_080078A0: .4byte gCharacterSpacing");
}
void sub_80078A4(u32 a0, s32 x, s32 y, s32 a3, u32 color)
{
sub_800792C(a0, x, y, a3, color);
sub_800792C(a0, x, y + 1, a3, gUnknown_202B030 & 0xF);
}
UNUSED static void sub_80078E8(u32 a0, s32 x, s32 y, s32 a3, u32 color)
{
nullsub_129(a0, x, y, a3, color);
nullsub_129(a0, x, y + 1, a3, gUnknown_202B030 & 0xF);
}
void sub_800792C(u32 a0, s32 x, s32 y, s32 a3, u32 color)
{
sub_8007958(gUnknown_2027370, a0, x, y, a3, color);
}
void nullsub_129(u32 a0, s32 x, s32 y, s32 a3, u32 color)
{
}
void sub_8007958(UnkTextStruct1 *a0, u32 a1, s32 x, s32 y, s32 a4, u32 color)
{
u32 uVar4;
u32 *dest;
s32 r4;
const struct unkShiftData *shiftData;
UnkTextStruct1 *r5;
s32 r6;
u32 r9;
struct unkStruct_80B8824 dataLOL;
s32 lol;
r5 = &a0[a1];
r9 = gUnknown_80B853C[color & 0xF];
r4 = y / 8;
dest = r5->unk18 + (((r5->unk4 * r4) + (x / 8)) * 8);
dest += (r4 * -8) + y;
r6 = x / 8;
if (y / 8 >= r5->unk8)
return;
dataLOL = gUnknown_80B8824;
for (; a4 > 0; a4 -= 8) {
lol = a4;
if (lol > 7)
lol = 8;
shiftData = &gUnknown_80B85DC[x + (x / 8 * -8)];
uVar4 = dataLOL.arr[lol];
uVar4 = (uVar4 & 0x11111111) + (uVar4 & r9);
if (uVar4 != 0) {
if (r6 < r5->unk4) {
dest[0] |= (shiftData->bytesA & uVar4) << shiftData->shift_left;
if (r5->unk3C > dest)
r5->unk3C = dest;
if (r5->unk40 < dest)
r5->unk40 = dest;
}
if (r6 < r5->unk4 - 1) {
dest += 8;
dest[0] |= (uVar4 & shiftData->bytesB) >> shiftData->shift_right;
if (r5->unk40 < dest)
r5->unk40 = dest;
dest -= 8;
}
}
r6++;
dest += 8;
}
}
void sub_8007A78(u32 a0, s32 x, s32 y, s32 a3, u32 color)
{
sub_8007AA4(gUnknown_2027370, a0, x, y, a3, color);
}
UNUSED static void nullsub_157(void)
{
}
// https://decomp.me/scratch/4tFKb
void sub_8007AA4(UnkTextStruct1 *a0, u32 a1, s32 x, s32 y, s32 a4, u32 color)
{
s32 r2;
s32 r3;
UnkTextStruct1 *r4;
u32 ip;
u32 *dest;
struct unkStruct_80B8848 dataLOL;
r4 = &a0[a1];
ip = gUnknown_80B853C[color & 0xF] + 0x11111111;
#ifndef NONMATCHING
asm("":::"r8");
#endif // NONMATCHING
dataLOL = gUnknown_80B8848;
a4++; a4--;
r3 = y / 8;
dest = r4->unk18 + ((r4->unk4 * r3 + x / 8) * 8);
r2 = x / 8;
dest += r3 * -8 + y;
ip &= dataLOL.arr[x & 7];
if (r2 >= r4->unk4)
return;
goto thecheck;
label:
y++;
dest++;
if ((y % 8) == 0)
dest += r4->unk20;
a4--;
thecheck:
if (a4 <= 0 || r3 >= r4->unk8)
return;
dest[0] |= ip;
if (r4->unk3C > dest)
r4->unk3C = dest;
if (r4->unk40 < dest)
r4->unk40 = dest;
goto label;
}
void sub_8007B7C(u32 a0, s32 x, s32 y, s32 a3, u32 color)
{
sub_8007BA8(gUnknown_2027370, a0, x, y, a3, color);
}
UNUSED static void nullsub_158(void)
{
}
#ifdef NONMATCHING // https://decomp.me/scratch/AU1bH
void sub_8007BA8(UnkTextStruct1 *a0, u32 a1, s32 x, s32 y, s32 a4, s32 color)
{
s32 iVar1; // r1
s32 iVar3;
s32 iVar9; // r8?
u32 *r4;
u32 r5;
u32 r6;
UnkTextStruct1 *ip;
s32 sp4;
s32 sp8;
u32 sp1C; // Used correctly
s32 yeah;
u32 *sp10; // r2?
ip = &a0[a1];
sp8 = y / 8;
if (sp8 >= ip->unk8)
return;
yeah = ip->unk4 * sp8;
r4 = ip->unk18 + ((yeah + x / 8) * 8);
r4 += (sp8 * -8) + y;
for (sp4 = 0; sp4 < color; sp4++) {
sp10 = r4;
iVar1 = x / 8;
for (iVar9 = 0; iVar9 < a4; iVar9 += 8) {
if (iVar1 >= ip->unk4)
break;
r6 = 0xF0000000;
r5 = 0xE0000000;
sp1C = 0;
for (iVar3 = 0; iVar3 < 8; iVar3++) {
if ((sp10[0] & r6) == 0)
sp1C |= r5;
r6 >>= 4;
r5 >>= 4;
}
sp10[0] |= sp1C;
if (ip->unk3C > sp10)
ip->unk3C = sp10;
if (ip->unk40 < sp10)
ip->unk40 = sp10;
sp10 += 8;
iVar1++;
}
y++;
r4++;
if ((y % 8) == 0) {
r4 += ip->unk20;
sp8++;
if (sp8 >= ip->unk8)
return;
}
sp4++;
}
}
#else
NAKED
void sub_8007BA8(UnkTextStruct1 *a0, u32 a1, s32 x, s32 y, s32 a4, s32 color)
{
asm_unified(
"push {r4-r7,lr}\n"
"\tmov r7, r10\n"
"\tmov r6, r9\n"
"\tmov r5, r8\n"
"\tpush {r5-r7}\n"
"\tsub sp, 0x20\n"
"\tstr r2, [sp]\n"
"\tlsls r2, r1, 3\n"
"\tadds r2, r1\n"
"\tlsls r2, 3\n"
"\tadds r0, r2\n"
"\tmov r12, r0\n"
"\tadds r0, r3, 0\n"
"\tcmp r3, 0\n"
"\tbge _08007BC8\n"
"\tadds r0, r3, 0x7\n"
"_08007BC8:\n"
"\tasrs r0, 3\n"
"\tstr r0, [sp, 0x8]\n"
"\tmov r1, r12\n"
"\tmovs r2, 0x8\n"
"\tldrsh r0, [r1, r2]\n"
"\tldr r4, [sp, 0x8]\n"
"\tcmp r4, r0\n"
"\tbge _08007CC4\n"
"\tmovs r7, 0x4\n"
"\tldrsh r0, [r1, r7]\n"
"\tadds r1, r4, 0\n"
"\tmuls r1, r0\n"
"\tldr r0, [sp]\n"
"\tcmp r0, 0\n"
"\tbge _08007BE8\n"
"\tadds r0, 0x7\n"
"_08007BE8:\n"
"\tasrs r0, 3\n"
"\tadds r0, r1, r0\n"
"\tlsls r0, 5\n"
"\tmov r2, r12\n"
"\tldr r1, [r2, 0x18]\n"
"\tadds r4, r1, r0\n"
"\tldr r7, [sp, 0x8]\n"
"\tlsls r0, r7, 3\n"
"\tsubs r0, r3, r0\n"
"\tlsls r0, 2\n"
"\tadds r4, r0\n"
"\tmovs r0, 0\n"
"\tstr r0, [sp, 0x4]\n"
"\tldr r1, [sp, 0x44]\n"
"\tcmp r0, r1\n"
"\tbge _08007CC4\n"
"_08007C08:\n"
"\tadds r2, r4, 0\n"
"\tldr r0, [sp]\n"
"\tcmp r0, 0\n"
"\tbge _08007C12\n"
"\tadds r0, 0x7\n"
"_08007C12:\n"
"\tasrs r1, r0, 3\n"
"\tmovs r7, 0\n"
"\tmov r8, r7\n"
"\tadds r3, 0x1\n"
"\tstr r3, [sp, 0xC]\n"
"\tadds r4, 0x4\n"
"\tstr r4, [sp, 0x14]\n"
"\tldr r0, [sp, 0x40]\n"
"\tcmp r8, r0\n"
"\tbge _08007C94\n"
"_08007C26:\n"
"\tmov r3, r12\n"
"\tmovs r4, 0x4\n"
"\tldrsh r0, [r3, r4]\n"
"\tcmp r1, r0\n"
"\tbge _08007C94\n"
"\tmovs r6, 0xF0\n"
"\tlsls r6, 24\n"
"\tmovs r5, 0xE0\n"
"\tlsls r5, 24\n"
"\tmovs r7, 0\n"
"\tstr r7, [sp, 0x1C]\n"
"\tldr r4, [r2]\n"
"\tadds r3, r4, 0\n"
"\tmov r0, r12\n"
"\tldr r0, [r0, 0x3C]\n"
"\tmov r9, r0\n"
"\tmov r7, r12\n"
"\tldr r7, [r7, 0x40]\n"
"\tmov r10, r7\n"
"\tadds r1, 0x1\n"
"\tstr r1, [sp, 0x10]\n"
"\tadds r0, r2, 0\n"
"\tadds r0, 0x20\n"
"\tstr r0, [sp, 0x18]\n"
"\tmovs r1, 0x8\n"
"\tadd r8, r1\n"
"\tmovs r1, 0x7\n"
"_08007C5C:\n"
"\tadds r0, r4, 0\n"
"\tands r0, r6\n"
"\tcmp r0, 0\n"
"\tbne _08007C6A\n"
"\tldr r7, [sp, 0x1C]\n"
"\torrs r7, r5\n"
"\tstr r7, [sp, 0x1C]\n"
"_08007C6A:\n"
"\tlsrs r6, 4\n"
"\tlsrs r5, 4\n"
"\tsubs r1, 0x1\n"
"\tcmp r1, 0\n"
"\tbge _08007C5C\n"
"\tldr r0, [sp, 0x1C]\n"
"\torrs r3, r0\n"
"\tstr r3, [r2]\n"
"\tcmp r9, r2\n"
"\tbls _08007C82\n"
"\tmov r1, r12\n"
"\tstr r2, [r1, 0x3C]\n"
"_08007C82:\n"
"\tcmp r10, r2\n"
"\tbcs _08007C8A\n"
"\tmov r3, r12\n"
"\tstr r2, [r3, 0x40]\n"
"_08007C8A:\n"
"\tldr r1, [sp, 0x10]\n"
"\tldr r2, [sp, 0x18]\n"
"\tldr r4, [sp, 0x40]\n"
"\tcmp r8, r4\n"
"\tblt _08007C26\n"
"_08007C94:\n"
"\tldr r3, [sp, 0xC]\n"
"\tldr r4, [sp, 0x14]\n"
"\tmovs r0, 0x7\n"
"\tands r0, r3\n"
"\tcmp r0, 0\n"
"\tbne _08007CB8\n"
"\tmov r7, r12\n"
"\tldr r0, [r7, 0x20]\n"
"\tlsls r0, 2\n"
"\tadds r4, r0\n"
"\tldr r0, [sp, 0x8]\n"
"\tadds r0, 0x1\n"
"\tstr r0, [sp, 0x8]\n"
"\tmovs r1, 0x8\n"
"\tldrsh r0, [r7, r1]\n"
"\tldr r2, [sp, 0x8]\n"
"\tcmp r2, r0\n"
"\tbge _08007CC4\n"
"_08007CB8:\n"
"\tldr r7, [sp, 0x4]\n"
"\tadds r7, 0x1\n"
"\tstr r7, [sp, 0x4]\n"
"\tldr r0, [sp, 0x44]\n"
"\tcmp r7, r0\n"
"\tblt _08007C08\n"
"_08007CC4:\n"
"\tadd sp, 0x20\n"
"\tpop {r3-r5}\n"
"\tmov r8, r3\n"
"\tmov r9, r4\n"
"\tmov r10, r5\n"
"\tpop {r4-r7}\n"
"\tpop {r0}\n"
"\tbx r0");
}
#endif // NONMATCHING
UNUSED static void sub_8007CD4(u32 a0, s32 a1, s32 a2, s32 a3, s32 a4)
{
sub_8007D00(gUnknown_2027370, a0, a1, a2, a3, a4);
}
UNUSED static void nullsub_159(void)
{
}
NAKED // Very similar to sub_8007BA8
void sub_8007D00(UnkTextStruct1 *a0, u32 a1, s32 x, s32 y, s32 a4, s32 color)
{
asm_unified(
"push {r4-r7,lr}\n"
"\tmov r7, r10\n"
"\tmov r6, r9\n"
"\tmov r5, r8\n"
"\tpush {r5-r7}\n"
"\tsub sp, 0x20\n"
"\tstr r2, [sp]\n"
"\tlsls r2, r1, 3\n"
"\tadds r2, r1\n"
"\tlsls r2, 3\n"
"\tadds r0, r2\n"
"\tmov r12, r0\n"
"\tadds r0, r3, 0\n"
"\tcmp r3, 0\n"
"\tbge _08007D20\n"
"\tadds r0, r3, 0x7\n"
"_08007D20:\n"
"\tasrs r0, 3\n"
"\tstr r0, [sp, 0x8]\n"
"\tmov r1, r12\n"
"\tmovs r2, 0x8\n"
"\tldrsh r0, [r1, r2]\n"
"\tldr r4, [sp, 0x8]\n"
"\tcmp r4, r0\n"
"\tbge _08007E0E\n"
"\tmovs r5, 0x4\n"
"\tldrsh r0, [r1, r5]\n"
"\tadds r1, r4, 0\n"
"\tmuls r1, r0\n"
"\tldr r0, [sp]\n"
"\tcmp r0, 0\n"
"\tbge _08007D40\n"
"\tadds r0, 0x7\n"
"_08007D40:\n"
"\tasrs r0, 3\n"
"\tadds r0, r1, r0\n"
"\tlsls r0, 5\n"
"\tmov r2, r12\n"
"\tldr r1, [r2, 0x18]\n"
"\tadds r4, r1, r0\n"
"\tldr r5, [sp, 0x8]\n"
"\tlsls r0, r5, 3\n"
"\tsubs r0, r3, r0\n"
"\tlsls r0, 2\n"
"\tadds r4, r0\n"
"\tmovs r0, 0\n"
"\tb _08007E06\n"
"_08007D5A:\n"
"\tadds r2, r4, 0\n"
"\tldr r0, [sp]\n"
"\tcmp r0, 0\n"
"\tbge _08007D64\n"
"\tadds r0, 0x7\n"
"_08007D64:\n"
"\tasrs r1, r0, 3\n"
"\tmovs r5, 0\n"
"\tmov r8, r5\n"
"\tadds r3, 0x1\n"
"\tstr r3, [sp, 0xC]\n"
"\tadds r4, 0x4\n"
"\tstr r4, [sp, 0x14]\n"
"\tldr r0, [sp, 0x40]\n"
"\tcmp r8, r0\n"
"\tbge _08007DE0\n"
"_08007D78:\n"
"\tmov r3, r12\n"
"\tmovs r4, 0x4\n"
"\tldrsh r0, [r3, r4]\n"
"\tcmp r1, r0\n"
"\tbge _08007DE0\n"
"\tmovs r4, 0xF0\n"
"\tlsls r4, 24\n"
"\tmovs r6, 0xE0\n"
"\tlsls r6, 24\n"
"\tmovs r7, 0\n"
"\tldr r5, [r2]\n"
"\tstr r5, [sp, 0x1C]\n"
"\tadds r3, r5, 0\n"
"\tmov r0, r12\n"
"\tldr r0, [r0, 0x3C]\n"
"\tmov r9, r0\n"
"\tmov r5, r12\n"
"\tldr r5, [r5, 0x40]\n"
"\tmov r10, r5\n"
"\tadds r1, 0x1\n"
"\tstr r1, [sp, 0x10]\n"
"\tadds r0, r2, 0\n"
"\tadds r0, 0x20\n"
"\tstr r0, [sp, 0x18]\n"
"\tmovs r1, 0x8\n"
"\tadd r8, r1\n"
"\tmovs r1, 0x7\n"
"_08007DAE:\n"
"\tldr r0, [sp, 0x1C]\n"
"\tands r0, r4\n"
"\tcmp r0, r6\n"
"\tbne _08007DB8\n"
"\torrs r7, r4\n"
"_08007DB8:\n"
"\tlsrs r4, 4\n"
"\tlsrs r6, 4\n"
"\tsubs r1, 0x1\n"
"\tcmp r1, 0\n"
"\tbge _08007DAE\n"
"\tbics r3, r7\n"
"\tstr r3, [r2]\n"
"\tcmp r9, r2\n"
"\tbls _08007DCE\n"
"\tmov r3, r12\n"
"\tstr r2, [r3, 0x3C]\n"
"_08007DCE:\n"
"\tcmp r10, r2\n"
"\tbcs _08007DD6\n"
"\tmov r4, r12\n"
"\tstr r2, [r4, 0x40]\n"
"_08007DD6:\n"
"\tldr r1, [sp, 0x10]\n"
"\tldr r2, [sp, 0x18]\n"
"\tldr r5, [sp, 0x40]\n"
"\tcmp r8, r5\n"
"\tblt _08007D78\n"
"_08007DE0:\n"
"\tldr r3, [sp, 0xC]\n"
"\tldr r4, [sp, 0x14]\n"
"\tmovs r0, 0x7\n"
"\tands r0, r3\n"
"\tcmp r0, 0\n"
"\tbne _08007E02\n"
"\tmov r1, r12\n"
"\tldr r0, [r1, 0x20]\n"
"\tlsls r0, 2\n"
"\tadds r4, r0\n"
"\tldr r2, [sp, 0x8]\n"
"\tadds r2, 0x1\n"
"\tstr r2, [sp, 0x8]\n"
"\tmovs r5, 0x8\n"
"\tldrsh r0, [r1, r5]\n"
"\tcmp r2, r0\n"
"\tbge _08007E0E\n"
"_08007E02:\n"
"\tldr r0, [sp, 0x4]\n"
"\tadds r0, 0x1\n"
"_08007E06:\n"
"\tstr r0, [sp, 0x4]\n"
"\tldr r1, [sp, 0x44]\n"
"\tcmp r0, r1\n"
"\tblt _08007D5A\n"
"_08007E0E:\n"
"\tadd sp, 0x20\n"
"\tpop {r3-r5}\n"
"\tmov r8, r3\n"
"\tmov r9, r4\n"
"\tmov r10, r5\n"
"\tpop {r4-r7}\n"
"\tpop {r0}\n"
"\tbx r0");
}
void sub_8007E20(u32 a0, u32 a1, u32 a2, u32 a3, u32 a4, u8 *a5, u32 a6)
{
sub_8007E64(gUnknown_2027370, &gUnknown_202B038[0][0][0], a0, a1, a2, a3, a4, a5, a6);
}
UNUSED static void nullsub_160(void)
{
}