diff options
| author | theo3 <arisstephenson2@gmail.com> | 2020-11-23 22:18:34 -0800 |
|---|---|---|
| committer | theo3 <arisstephenson2@gmail.com> | 2020-11-23 22:18:34 -0800 |
| commit | edbf03101a64b05e9d20cdf53ec2ca4888a2effa (patch) | |
| tree | db67f687b238abf2961b819dd0f121fffbb341c2 /src | |
| parent | 0b52f80e4d01ce7c9104eeb9b474bc1cf77b94ed (diff) | |
done
Diffstat (limited to 'src')
| -rw-r--r-- | src/chooseFile.c | 18 | ||||
| -rw-r--r-- | src/code_0805EC04.c | 101 | ||||
| -rw-r--r-- | src/code_0805F9A0.c | 169 | ||||
| -rw-r--r-- | src/enemy/waterDrop.c | 6 | ||||
| -rw-r--r-- | src/item14.c | 58 | ||||
| -rw-r--r-- | src/manager/manager15.c | 6 | ||||
| -rw-r--r-- | src/manager/manager8.c | 18 | ||||
| -rw-r--r-- | src/manager/manager9.c | 8 | ||||
| -rw-r--r-- | src/object/object48.c | 12 | ||||
| -rw-r--r-- | src/screenDebug.c | 103 |
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); +} |
