summaryrefslogtreecommitdiff
path: root/src/code_0805F9A0.c
diff options
context:
space:
mode:
authortheo3 <arisstephenson2@gmail.com>2020-11-23 22:18:34 -0800
committertheo3 <arisstephenson2@gmail.com>2020-11-23 22:18:34 -0800
commitedbf03101a64b05e9d20cdf53ec2ca4888a2effa (patch)
treedb67f687b238abf2961b819dd0f121fffbb341c2 /src/code_0805F9A0.c
parent0b52f80e4d01ce7c9104eeb9b474bc1cf77b94ed (diff)
done
Diffstat (limited to 'src/code_0805F9A0.c')
-rw-r--r--src/code_0805F9A0.c169
1 files changed, 169 insertions, 0 deletions
diff --git a/src/code_0805F9A0.c b/src/code_0805F9A0.c
new file mode 100644
index 00000000..1514df6a
--- /dev/null
+++ b/src/code_0805F9A0.c
@@ -0,0 +1,169 @@
+#include "global.h"
+#include "functions.h"
+#include "structures.h"
+
+extern u16 gUnk_081092D4;
+extern u8 gUnk_02036AD8;
+extern u8 gUnk_081094CE;
+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;
+
+typedef struct {
+ u8 unk0;
+ u8 unk1;
+ u8 unk2;
+ u8 unk3;
+ u16 unk4;
+ u16 unk6;
+ void* unk8;
+} WStruct;
+
+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;
+
+ _DmaFill32(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++;
+ }
+ }
+ LoadAssetAsync((const void*)&gUnk_02036AD8, (u32)dest, 0xe0);
+}
+
+u32 sub_0805F9A0(u32 r0) {
+
+ if (gUnk_02000000->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;
+}