summaryrefslogtreecommitdiff
path: root/src
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
parent0b52f80e4d01ce7c9104eeb9b474bc1cf77b94ed (diff)
done
Diffstat (limited to 'src')
-rw-r--r--src/chooseFile.c18
-rw-r--r--src/code_0805EC04.c101
-rw-r--r--src/code_0805F9A0.c169
-rw-r--r--src/enemy/waterDrop.c6
-rw-r--r--src/item14.c58
-rw-r--r--src/manager/manager15.c6
-rw-r--r--src/manager/manager8.c18
-rw-r--r--src/manager/manager9.c8
-rw-r--r--src/object/object48.c12
-rw-r--r--src/screenDebug.c103
10 files changed, 455 insertions, 44 deletions
diff --git a/src/chooseFile.c b/src/chooseFile.c
index 5a36de17..682606af 100644
--- a/src/chooseFile.c
+++ b/src/chooseFile.c
@@ -38,14 +38,6 @@ typedef struct {
extern struct_020227E8 gUnk_020227E8;
-typedef struct {
- u8 filler0[0x29C];
- u16 unk29C;
- u8 filler29E[0x562];
-} struct_02034CB0;
-
-extern struct_02034CB0 gUnk_02034CB0;
-extern struct_02034CB0 gUnk_02021F30;
extern SaveFile gSaveFiles[];
extern u32 gUsedPalettes;
extern u8 gUnk_02000D00[];
@@ -96,7 +88,7 @@ void sub_08050318(u32 arg0, u32 arg1) {
void sub_08050384(void) {
sub_0801C4A0(0, 0);
- _DmaZero(&gUnk_02034CB0, sizeof(gUnk_02034CB0));
+ _DmaZero(&gBG0Buffer, sizeof(gBG0Buffer));
gScreen.bg.bg3Control = 1;
}
@@ -108,8 +100,8 @@ void sub_080503A8(u32 gfxGroup) {
void sub_080503BC(u8 state) {
gUnk_02032EC0.state = state;
- _DmaZero(&gUnk_02034CB0, sizeof(gUnk_02034CB0));
- _DmaZero(&gUnk_02021F30, sizeof(gUnk_02021F30));
+ _DmaZero(&gBG0Buffer, sizeof(gBG0Buffer));
+ _DmaZero(&gBG1Buffer, sizeof(gBG1Buffer));
}
void sub_080503E4(u32 saveFileId) {
@@ -483,9 +475,9 @@ void sub_08050B3C(u16*);
void sub_08050AFC(u32 saveFileId) {
sub_0805041C(saveFileId);
- _DmaZero(&gUnk_02021F30, sizeof(gUnk_02021F30));
+ _DmaZero(&gBG1Buffer, sizeof(gBG1Buffer));
if (gUnk_02019EE0.unk8[saveFileId] == 1) {
- sub_08050B3C(&gUnk_02021F30.unk29C);
+ sub_08050B3C(&gBG1Buffer.unk29C);
}
gScreen.bg.bg2yOffset = 1;
}
diff --git a/src/code_0805EC04.c b/src/code_0805EC04.c
index c722c57f..3033de51 100644
--- a/src/code_0805EC04.c
+++ b/src/code_0805EC04.c
@@ -1,18 +1,107 @@
#include "entity.h"
+#include "player.h"
-extern u8 gUnk_03000000;
+typedef struct {
+ u16 unk0;
+ u16 unk2;
+ u16 unk4;
+ u8 unk6;
+ u8 unk7;
+} VStruct;
+
+typedef struct {
+ u8 filler[0x420];
+ VStruct unk[0x100];
+} UStruct;
+
+extern UStruct gUnk_03000000;
bool32 sub_0805EC04(Entity* this) {
u32 i = 1;
- u8* l = &gUnk_03000000;
+ UStruct* temp = &gUnk_03000000;
u32 j = 1;
for (; i < 0x20; i++) {
- if (l[(i * 8) + 0x426] == 0) {
- l[(i * 8) + 0x426] = j;
- this->spriteSet.b1 = i;
- this->spriteSet.b0 |= j;
+ if (temp->unk[i].unk6 == 0) {
+ temp->unk[i].unk6 = j;
+ this->spriteOrientation.b1 = i;
+ this->spriteRendering.b0 |= j;
return TRUE;
}
}
return FALSE;
}
+
+void sub_0805EC60(Entity* this) {
+ u8 temp;
+ UStruct* temp2;
+
+ if (this->spriteRendering.b0 != 0) {
+ this->spriteRendering.b0 = 0;
+ temp = this->spriteOrientation.b1;
+ this->spriteOrientation.b1 = 0;
+ temp2 = &gUnk_03000000;
+ temp2->unk[temp].unk6 = 0;
+ }
+}
+
+NAKED
+bool32 sub_0805EC9C(Entity* ent, u32 param_2, u32 param_3, u32 param_4) {
+ asm_unified("\
+ push {r4, r5, r6, r7, lr} \n\
+ adds r4, r0, #0 \n\
+ adds r5, r1, #0 \n\
+ adds r6, r2, #0 \n\
+ adds r7, r3, #0 \n\
+ ldrb r0, [r4, #0x1b] \n\
+ lsls r0, r0, #0x1a \n\
+ lsrs r0, r0, #0x1b \n\
+ cmp r0, #0 \n\
+ bne _0805ECBE \n\
+ adds r0, r4, #0 \n\
+ bl sub_0805EC04 \n\
+ cmp r0, #0 \n\
+ bne _0805ECBE \n\
+ movs r0, #0 \n\
+ b _0805ECE0 \n\
+_0805ECBE: \n\
+ ldr r1, _0805ECE4 @ =gUnk_03000000 \n\
+ ldr r0, _0805ECE8 @ =0x00000427 \n\
+ adds r2, r1, r0 \n\
+ movs r0, #1 \n\
+ strb r0, [r2] \n\
+ ldrb r0, [r4, #0x1b] \n\
+ lsls r0, r0, #0x1a \n\
+ lsrs r0, r0, #0x1b \n\
+ lsls r0, r0, #3 \n\
+ movs r2, #0x84 \n\
+ lsls r2, r2, #3 \n\
+ adds r1, r1, r2 \n\
+ adds r0, r0, r1 \n\
+ strh r5, [r0] \n\
+ strh r6, [r0, #2] \n\
+ strh r7, [r0, #4] \n\
+ movs r0, #1 \n\
+_0805ECE0: \n\
+ pop {r4, r5, r6, r7, pc} \n\
+ .align 2, 0 \n\
+_0805ECE4: .4byte gUnk_03000000 \n\
+_0805ECE8: .4byte 0x00000427 \n\
+ ");
+}
+
+void sub_0805ECEC(int param_1, u32 param_2, u32 param_3, u32 param_4) {
+ u16* temp;
+
+ gUnk_03000000.unk[0].unk7 = 1;
+
+ temp = &gUnk_03000000.unk[param_1].unk0;
+ temp[0] = param_2;
+ temp[1] = param_3;
+ temp[2] = param_4;
+}
+
+void sub_0805ED14(u32 param_1) {
+ gPlayerState.field_0x9c[0] = param_1;
+ gPlayerState.field_0x98 = 0;
+ gPlayerState.field_0x9a = 0;
+} \ No newline at end of file
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;
+}
diff --git a/src/enemy/waterDrop.c b/src/enemy/waterDrop.c
index b95535df..3a1e347b 100644
--- a/src/enemy/waterDrop.c
+++ b/src/enemy/waterDrop.c
@@ -6,7 +6,7 @@
void sub_0802A39C(Entity*);
void sub_0802A334(Entity*);
-extern u16 gUnk_02001A40[];
+extern u16 gBG3Buffer[];
extern void (*const gUnk_080CD030[])(Entity*);
extern const u8 gUnk_080CD03C[];
@@ -63,7 +63,7 @@ void sub_0802A2FC(Entity* this) {
void sub_0802A334(Entity* this) {
u32 x = (this->x.HALF.HI - gRoomControls.roomScrollX + gScreen.bg.bg1yOffset) >> 3;
u32 y = (this->y.HALF.HI - gRoomControls.roomScrollY + gScreen.bg.bg2xOffset) >> 3;
- if (gUnk_02001A40[(x & 0x1fU) + (y & 0x1fU) * 0x20 + 0x400]) {
+ if (gBG3Buffer[(x & 0x1fU) + (y & 0x1fU) * 0x20 + 0x400]) {
this->collisionLayer = 2;
} else {
this->collisionLayer = 1;
@@ -74,7 +74,7 @@ void sub_0802A334(Entity* this) {
void sub_0802A39C(Entity* this) {
u32 x = (gPlayerEntity.x.HALF.HI - gRoomControls.roomScrollX + gScreen.bg.bg1yOffset) >> 3;
u32 y = (gPlayerEntity.y.HALF.HI - gRoomControls.roomScrollY + gScreen.bg.bg2xOffset - 10) >> 3;
- if (gUnk_02001A40[(x & 0x1fU) + (y & 0x1fU) * 0x20 + 0x400]) {
+ if (gBG3Buffer[(x & 0x1fU) + (y & 0x1fU) * 0x20 + 0x400]) {
this->flags &= ~0x80;
} else {
this->flags |= 0x80;
diff --git a/src/item14.c b/src/item14.c
new file mode 100644
index 00000000..d1e6086d
--- /dev/null
+++ b/src/item14.c
@@ -0,0 +1,58 @@
+#include "entity.h"
+#include "functions.h"
+#include "player.h"
+#include "room.h"
+
+extern void (*const gUnk_08109AC8[])(Entity*);
+extern BoundingBox gUnk_08109AD0;
+extern u8 gUnk_08003E44;
+
+void sub_0805FC74(Entity*);
+
+void Item14(Entity *this) {
+ gUnk_08109AC8[this->action](this);
+}
+
+void sub_0805FBE8(Entity* this) {
+ CopyPosition(&gPlayerEntity,this);
+ this->action++;
+ this->spriteSettings.b.draw = TRUE;
+ this->field_0x3c = gPlayerEntity.field_0x3c + 1;
+ this->boundingBox = &gUnk_08109AD0;
+ this->nonPlanarMovement = 0x380;
+ this->animationState = this->animationState & 0x7f;
+ if (this->collisionLayer == 2) {
+ this->entityType.parameter = 1;
+ }
+ this->direction = this->animationState << 2;
+ *(u32 *)&this->field_0x6c = 0x3c;
+ InitializeAnimation(this, (this->animationState >> 1) + 0xc);
+ sub_0801766C(this);
+ sub_0806F69C(this);
+ sub_0805FC74(this);
+ PlaySFX(0x13f);
+}
+
+void sub_0805FC74(Entity* this) {
+ int iVar1;
+
+ if (--*(int *)&this->field_0x6c != -1) {
+ GetNextFrame(this);
+ sub_0806F69C(this);
+ ++this->actionDelay;
+ if (this->entityType.parameter == 0) {
+ sub_0800451C(this);
+ }
+ if (!sub_080002F0(COORD_TO_TILE(this),gPlayerEntity.collisionLayer,0x80) &&
+ sub_080040D8(this,&gUnk_08003E44, this->x.HALF.HI, this->y.HALF.HI)) {
+ CreateFx(this, 0x19, 0);
+ DeleteThisEntity();
+ }
+ if (this->bitfield != 0) {
+ CreateFx(this, 0x19, 0);
+ DeleteThisEntity();
+ }
+ } else {
+ DeleteThisEntity();
+ }
+}
diff --git a/src/manager/manager15.c b/src/manager/manager15.c
index 51a675f4..23abd03e 100644
--- a/src/manager/manager15.c
+++ b/src/manager/manager15.c
@@ -427,7 +427,7 @@ void sub_0805A94C(Manager15* this) {
gScreen.controls.window1VerticalDimensions = (tmp1 << 8 | tmp2);
}
-extern u8 gUnk_02001A40[];
+extern u8 gBG3Buffer[];
#ifdef NON_MATCHING
void sub_0805A9CC(Manager15* this) {
@@ -449,7 +449,7 @@ void sub_0805A9CC(Manager15* this) {
gScreen.affine.bg3yOffset = tmp1 & 0x3F;
if (tmp1 < 0)
tmp1 += 0x3F;
- tmp3 = (&gUnk_02001A40[(tmp1 >> 6 << 9)]);
+ tmp3 = (&gBG3Buffer[(tmp1 >> 6 << 9)]);
gScreen.affine.unk5 = (u32)tmp3;
gScreen.controls.window1VerticalDimensions = 0xa0;
if (this->unk_28 == tmp3)
@@ -499,7 +499,7 @@ void sub_0805AAF0(u32 unk0) {
gScreen.controls.layerFXControl = 0x3E48;
gScreen.controls.alphaBlend = 0x1008;
gScreen.affine.bg3Control = 0x1E04;
- gScreen.affine.unk5 = &gUnk_02001A40;
+ gScreen.affine.unk5 = &gBG3Buffer;
gScreen.affine.bg3xOffset = 0;
gScreen.affine.bg3yOffset = 0;
gScreen.affine.unk4 = 1;
diff --git a/src/manager/manager8.c b/src/manager/manager8.c
index 8fd1d83b..fe0d4335 100644
--- a/src/manager/manager8.c
+++ b/src/manager/manager8.c
@@ -41,7 +41,7 @@ void sub_08057EFC(Manager8* this) {
void sub_08058004(u32, void*, void*);
-extern u8 gUnk_02001A40[];
+extern u8 gBG3Buffer[];
extern u8 gUnk_02006F00[];
void sub_08057F20(Manager8* this) {
@@ -50,8 +50,8 @@ void sub_08057F20(Manager8* this) {
tmp = tmp + (tmp >> 3) + ((0x400 - gRoomControls.width) / 2);
gScreen.affine.bg3xOffset = tmp & 0xF;
gScreen.affine.bg3yOffset = 0x30 - ((0x30 - (gRoomControls.roomScrollY - gRoomControls.roomOriginY)) >> 2);
- gScreen.affine.unk5 = gUnk_02001A40;
- sub_08058004(tmp, gUnk_02006F00, gUnk_02001A40);
+ gScreen.affine.unk5 = gBG3Buffer;
+ sub_08058004(tmp, gUnk_02006F00, gBG3Buffer);
tmp = ((tmp >> 4) << 1);
if (this->unk_38 != tmp) {
this->unk_38 = tmp;
@@ -61,8 +61,8 @@ void sub_08057F20(Manager8* this) {
tmp = tmp + (tmp >> 2) + ((0x400 - gRoomControls.width) / 2);
gScreen.bg.bg1yOffset = tmp & 0xF;
gScreen.bg.bg2xOffset = 0x30 - ((0x30 - (gRoomControls.roomScrollY - gRoomControls.roomOriginY)) >> 1);
- gScreen.bg.unk_14 = gUnk_02001A40 + 0x800;
- sub_08058004(tmp, gUnk_02006F00 + 0x2000, gUnk_02001A40 + 0x800);
+ gScreen.bg.unk_14 = gBG3Buffer + 0x800;
+ sub_08058004(tmp, gUnk_02006F00 + 0x2000, gBG3Buffer + 0x800);
tmp = ((tmp >> 4) << 1);
if (this->unk_3c != tmp) {
this->unk_3c = tmp;
@@ -117,19 +117,19 @@ void sub_080580B0(u32 unk1) {
sub_08058034();
tmp = gRoomControls.roomScrollX - gRoomControls.roomOriginX; // r7
tmp = tmp + (tmp >> 3) + (0x400 - gRoomControls.width) / 2;
- sub_08058004(tmp, gUnk_02006F00, gUnk_02001A40);
+ sub_08058004(tmp, gUnk_02006F00, gBG3Buffer);
gScreen.affine.bg3xOffset = tmp & 0xF;
gScreen.affine.bg3yOffset = 0x30 - ((0x30 - (gRoomControls.roomScrollY - gRoomControls.roomOriginY)) >> 1); //?
gScreen.affine.bg3Control = 0x1D09;
- gScreen.affine.unk5 = gUnk_02001A40;
+ gScreen.affine.unk5 = gBG3Buffer;
gScreen.affine.unk4 = 1;
tmp = gRoomControls.roomScrollX - gRoomControls.roomOriginX; // r7
tmp = tmp + (tmp >> 2) + (0x400 - gRoomControls.width) / 2;
- sub_08058004(tmp, gUnk_02006F00 + 0x2000, gUnk_02001A40 + 0x800);
+ sub_08058004(tmp, gUnk_02006F00 + 0x2000, gBG3Buffer + 0x800);
gScreen.bg.bg1yOffset = tmp & 0xF;
gScreen.bg.bg2xOffset = 0x30 - ((0x30 - (gRoomControls.roomScrollY - gRoomControls.roomOriginY)) >> 1); //?
gScreen.bg.bg1xOffset = 0x1E09;
- gScreen.bg.unk_14 = gUnk_02001A40 + 0x800;
+ gScreen.bg.unk_14 = gBG3Buffer + 0x800;
gScreen.bg.bg2yOffset = 1;
gScreen.controls.layerFXControl = 0x3C48;
gScreen.controls.alphaBlend = 0x609;
diff --git a/src/manager/manager9.c b/src/manager/manager9.c
index d57942c7..c8fc2813 100644
--- a/src/manager/manager9.c
+++ b/src/manager/manager9.c
@@ -18,7 +18,7 @@ void sub_080582F8(u8*, u8*);
void sub_08058324();
extern u32 gUnk_02006F00[];
-extern u8 gUnk_02001A40[];
+extern u8 gBG3Buffer[];
const u16 gUnk_081081EC[] = { 0x30, 0x30, 0x30, 0x38 };
@@ -40,7 +40,7 @@ void sub_08058210(Manager9* this) {
if (this->unk_3c == tmp)
return;
this->unk_3c = tmp;
- sub_080582A0(tmp, gUnk_02006F00, gUnk_02001A40);
+ sub_080582A0(tmp, gUnk_02006F00, gBG3Buffer);
gScreen.bg.bg2yOffset = 1;
}
@@ -91,9 +91,9 @@ void sub_08058324(u32 unk) {
LoadPaletteGroup(unk + 0x86);
LoadGfxGroup(unk + 0x36);
sub_080582D0();
- sub_080582A0(sub_08058244(unk), gUnk_02006F00, gUnk_02001A40);
+ sub_080582A0(sub_08058244(unk), gUnk_02006F00, gBG3Buffer);
gScreen.bg.bg1xOffset = 0x1D47;
- gScreen.bg.unk_14 = gUnk_02001A40;
+ gScreen.bg.unk_14 = gBG3Buffer;
gScreen.bg.bg2yOffset = 1;
gScreen.lcd.displayControl |= 0x200;
}
diff --git a/src/object/object48.c b/src/object/object48.c
index 5db2b96a..f340da1c 100644
--- a/src/object/object48.c
+++ b/src/object/object48.c
@@ -223,7 +223,7 @@ void sub_0808EABC(Entity* this) {
}
break;
case 5:
- switch (gMenu.unk10[this->entityType.form]) {
+ switch (gMenu.focusCoords[this->entityType.form]) {
case 0:
var0 = 42;
var1 = 40;
@@ -232,7 +232,7 @@ void sub_0808EABC(Entity* this) {
case 2:
var0 = 20;
var1 = 144;
- var1 -= (gMenu.unk16 - gMenu.unk10[this->entityType.form]) * 32;
+ var1 -= (gMenu.unk16 - gMenu.focusCoords[this->entityType.form]) * 32;
break;
}
break;
@@ -376,9 +376,9 @@ void sub_0808ECBC(Entity* this) {
void sub_0808ED64(Entity* this) {
int y = 255;
- if (gUnk_02032EC0.transitionType == 1 && gMenu.unk10[1] != 5) {
- this->x.HALF.HI = gMenu.unk10[0] * 16 + 28;
- y = gMenu.unk10[1] * 16 + 58;
+ if (gUnk_02032EC0.transitionType == 1 && gMenu.focusCoords[1] != 5) {
+ this->x.HALF.HI = gMenu.focusCoords[0] * 16 + 28;
+ y = gMenu.focusCoords[1] * 16 + 58;
}
this->y.HALF.HI = y;
}
@@ -421,7 +421,7 @@ void sub_0808EE00(Entity* this) {
}
this->field_0x6a.HWORD = var2;
- this->palette.b.b0 = gMenu.unk10[1] == 5 && var1 == gMenu.field_0x12 ? 11 : 9;
+ this->palette.b.b0 = gMenu.focusCoords[1] == 5 && var1 == gMenu.field_0x12 ? 11 : 9;
gUnk_02019EE0.unk0 |= sub_0808EF6C(this);
}
diff --git a/src/screenDebug.c b/src/screenDebug.c
new file mode 100644
index 00000000..e8c3a506
--- /dev/null
+++ b/src/screenDebug.c
@@ -0,0 +1,103 @@
+#include "global.h"
+#include "functions.h"
+#include "main.h"
+#include "menu.h"
+#include "screen.h"
+#include "structures.h"
+#include "textbox.h"
+
+typedef struct {
+ u16 unk0;
+ u16 unk2;
+ u16 unk4;
+} VStruct;
+
+extern VStruct gUnk_03000FF0;
+extern u8 gBG3Buffer[];
+
+extern void (*const gUnk_08109A30[])();
+
+void HandleDebugTextScreen() {
+ gUnk_08109A30[gUnk_03001000.funcIndex]();
+}
+
+void sub_0805FA04(void) {
+ sub_0801DA90(1);
+ _DmaZero((void*)&gBG0Buffer, sizeof(BGBuffer));
+ _DmaZero((void*)&gBG3Buffer, 0x1000);
+ gScreen.lcd.displayControl = 0x940;
+ gScreen.bg.bg1Control = 0;
+ gScreen.bg.bg2Control = 0;
+ gScreen.affine.bg3xOffset = 0;
+ gScreen.affine.bg3yOffset = 0;
+ gScreen.affine.bg3Control = 0x1e0f;
+ gScreen.affine.unk4 = 1;
+ sub_08056418();
+ _DmaZero((void*)&gUnk_02032EC0, sizeof(UI));
+ _DmaZero((void*)&gMenu, sizeof(Menu));
+ gMenu.unk16 = gUnk_02000000->gameLanguage;
+ sub_08053320();
+ sub_0801D79C(0, 0x1144);
+ gUnk_03001000.funcIndex = 1;
+ sub_080A3210();
+ sub_08050008();
+}
+
+void sub_0805FA98(void) {
+ int iVar1;
+
+ switch (gUnk_03000FF0.unk2) {
+ case 0x40:
+ gMenu.focusCoords[1] -= 1;
+ break;
+ case 0x80:
+ gMenu.focusCoords[1] += 1;
+ break;
+ case 0x200:
+ gMenu.focusCoords[0] ^= 1;
+ if (gMenu.focusCoords[0] == 0) {
+ gScreen.bg.bg0Control = 0x1f0c;
+ gScreen.affine.bg3Control = 0x1e0f;
+ } else {
+ gScreen.bg.bg0Control = 0x1f0f;
+ gScreen.affine.bg3Control = 0x1e0c;
+ }
+ break;
+ case 0x100:
+ gUnk_02000000->gameLanguage = gMenu.unk16;
+ TextboxNoOverlapFollow(gMenu.unk14 * 0x100 + gMenu.unk15);
+ break;
+ case 0x2:
+ sub_08056418();
+ break;
+ default:
+ switch (gUnk_03000FF0.unk4) {
+ case 0x20:
+ iVar1 = -1;
+ break;
+ case 0x10:
+ iVar1 = 1;
+ break;
+ default:
+ iVar1 = 0;
+ break;
+ }
+ switch (gMenu.focusCoords[1]) {
+ case 0:
+ gMenu.unk14 = (gMenu.unk14 + iVar1 + 0x50) % 0x50;
+ break;
+ case 1:
+ gMenu.unk15 += iVar1;
+ break;
+ case 2:
+ gMenu.unk16 = (gMenu.unk16 + iVar1 + 7) % 7;
+ break;
+ }
+ }
+ gMenu.focusCoords[1] = (gMenu.focusCoords[1] + 3) % 3;
+ gScreen.affine.unk4 = 1;
+}
+
+void sub_0805FBC4() {
+ InitScreen(0);
+}