tmc/src/text.c

161 lines
3.3 KiB
C

#include "global.h"
#include "utils.h"
#include "structures.h"
#include "functions.h"
#include "asm.h"
extern u16 gUnk_081092D4;
extern u8 gUnk_081094CE;
extern u8 gUnk_02036AD8;
extern u8 gUnk_02036A58;
extern void* gUnk_081092AC[];
typedef struct {
u8 filler0[12][16];
} VStruct;
extern VStruct gUnk_0810942E[];
extern u32 gUnk_0810926C[];
typedef struct {
u8 unk0;
u8 unk1;
} UStruct;
void sub_0805F820(WStruct* r0, u32* r1);
u32 sub_0805F7DC(u32 r0, WStruct* r1) {
u32 temp;
u32 temp2;
u32* offset;
if (r1->unk4 <= r1->unk6)
return 0;
offset = sub_0805F25C(r0);
temp = r1->unk6;
if ((r0 >> 8) > 4) {
sub_0805F820(r1, offset);
offset += 0x10;
}
sub_0805F820(r1, offset);
if (r1->unk6 > r1->unk4) {
r1->unk6 = r1->unk4;
}
return r1->unk6 - temp;
}
void sub_0805F820(WStruct* r0, u32* r1) {
u32 bVar1;
u32 bVar2;
s32 uVar3;
s32 uVar4;
void* uVar5;
u32 uVar6;
u32 uVar7;
u8* puVar8;
u8* temp;
void* temp2;
VStruct* temp3;
if (r0->unk4 - r0->unk6 > 0) {
sub_08002724(r1, &gUnk_02036A58);
if (r0->unk1 == 0) {
u32 tmp = sub_0805F7A0(*r1);
uVar6 = tmp & 0xf;
uVar3 = tmp >> 8;
} else {
uVar6 = 0;
uVar3 = 8;
}
uVar4 = r0->unk4 - r0->unk6;
if (uVar4 > 8) {
uVar4 = 8;
}
if (uVar4 < uVar3) {
uVar3 = uVar4;
}
puVar8 = &gUnk_02036A58 + uVar6;
temp2 = r0->unk8;
temp = gUnk_0810942E[r0->unk3].filler0[r0->unk2 * 2];
uVar7 = r0->unk6;
r0->unk6 += uVar3;
if (r0->unk0 / 16 != 1) {
while (uVar3-- > 0) {
sub_080026C4(puVar8, temp2, temp, uVar7);
puVar8++;
uVar7++;
}
} else {
while (uVar3-- > 0) {
sub_080026F2(puVar8, temp2, temp, uVar7);
puVar8++;
uVar7++;
}
}
}
}
void sub_0805F8E4(u32 r0, WStruct* r1) {
u32 old = r1->unk1;
r1->unk1 = 1;
sub_0805F7DC(r0, r1);
r1->unk1 = old;
}
u32 sub_0805F8F8(u32 idx) {
u8* temp = &gUnk_0810942E[idx].filler0[10][10];
return gUnk_0810926C[*temp];
}
void sub_0805F918(u32 idx, u32 idx2, void* dest) {
u32 i;
void* puVar1;
u8* puVar2;
u32 j;
u32 idx3;
u8* temp;
u8* temp2;
MemFill32(sub_0805F8F8(idx2), &gUnk_02036AD8, 0xe0);
puVar1 = gUnk_081092AC[idx];
temp = &gUnk_081094CE + idx2 * 0xc0;
idx3 = 0;
for (i = 0; i < 3; i++) {
puVar2 = &gUnk_02036A58;
sub_08002724(puVar1, &gUnk_02036A58);
puVar1 += 0x40;
for (j = 0; j < 8; j++) {
sub_080026C4(puVar2, &gUnk_02036AD8, temp, idx3);
puVar2++;
idx3++;
}
}
LoadResourceAsync((const void*)&gUnk_02036AD8, (u32)dest, 0xe0);
}
u32 sub_0805F9A0(u32 r0) {
if (gSaveHeader->gameLanguage == 0) {
u16* val = &gUnk_081092D4;
u32 i = 0;
do {
if (*val == r0) {
return i + 0x800;
}
i++;
val++;
} while (*val != 0);
} else if (r0 == 0x31a) {
r0 = 1;
r0 &= 0xff;
}
return (r0 & 0xff) + 0x800;
}