summaryrefslogtreecommitdiff
path: root/src
diff options
context:
space:
mode:
authornotyourav <65437533+notyourav@users.noreply.github.com>2021-12-02 11:06:25 -0800
committerGitHub <noreply@github.com>2021-12-02 11:06:25 -0800
commit0f13e4faffac5279726811819bdd673865240a2c (patch)
tree5c36ad9c44329acd99132ef98428ec95edebab4a /src
parentd572b9b64c86180006a20d4bad28022eb2618674 (diff)
parentfc087427bd9d94c5bc806d328112b4f8608ed695 (diff)
Merge pull request #205 from Ibot02/manager14
Diffstat (limited to 'src')
-rw-r--r--src/manager/manager14.c198
-rw-r--r--src/manager/manager1A.c2
2 files changed, 186 insertions, 14 deletions
diff --git a/src/manager/manager14.c b/src/manager/manager14.c
index bb7388ef..0b98f542 100644
--- a/src/manager/manager14.c
+++ b/src/manager/manager14.c
@@ -1,25 +1,199 @@
+#include "global.h"
#include "manager.h"
+#include "screen.h"
+#include "room.h"
+#include "flags.h"
+#include "coord.h"
+#include "main.h"
+#include "functions.h"
-ASM_FUNC("asm/non_matching/manager14/Manager14_Main.inc", void Manager14_Main())
+typedef struct {
+ Manager manager;
+ u16 unk_20;
+ u8 unk_22;
+ u8 unk_23[1];
+ u8 unk_24;
+ u8 unk_25[0x1B];
+} Manager14;
-ASM_FUNC("asm/non_matching/manager14/sub_08059E80.inc", void sub_08059E80())
+const u16 gUnk_08108588[] = { 0x1000, 0xF01, 0xE02, 0xD03, 0xC04, 0xB05, 0xA06, 0x907, 0x808 };
-ASM_FUNC("asm/non_matching/manager14/sub_08059EF8.inc", void sub_08059EF8())
+const u16 gUnk_0810859A[] = { 0x808, 0x907, 0xA06, 0x907 };
-ASM_FUNC("asm/non_matching/manager14/sub_08059F9C.inc", void sub_08059F9C())
+extern void sub_0805622C(u16*, u32, u32);
+extern u16 gUnk_02017AA0[];
-ASM_FUNC("asm/non_matching/manager14/sub_0805A040.inc", void sub_0805A040())
+void Manager14_Main(Manager14*);
+void sub_08059E80(Manager14*);
+void sub_08059EF8(Manager14*);
+u32 sub_08059F9C(Manager14*);
+void sub_0805A040(Manager14*);
+void sub_0805A048(Manager14*);
+void sub_0805A098(Manager14*);
+void sub_0805A0C0(Manager14*);
+void sub_0805A114(u32, u32);
+void sub_0805A1D8(Manager14*);
+void nullsub_495();
+void sub_0805A25C();
-ASM_FUNC("asm/non_matching/manager14/sub_0805A048.inc", void sub_0805A048())
+void Manager14_Main(Manager14* this) {
+ static void (*const gUnk_081085A4[])(Manager14*) = {
+ sub_08059E80, sub_0805A040, sub_0805A048, sub_0805A0C0, sub_08059EF8,
+ };
+ this->unk_20++;
+ gUnk_081085A4[this->manager.action](this);
+ sub_0805A1D8(this);
+}
-ASM_FUNC("asm/non_matching/manager14/sub_0805A098.inc", void sub_0805A098())
+void sub_08059E80(Manager14* this) {
+ if (EntityHasDuplicateID((Entity*)this)) {
+ DeleteThisEntity();
+ }
+ this->unk_22 = 1;
+ this->unk_20 = 0;
+ this->manager.unk_0e = 0;
+ this->manager.unk_0f = 4;
+ this->manager.action = 4;
+ this->manager.unk_10 |= 0x20;
+ gScreen.bg3.control = 0x1E04;
+ gScreen.lcd.displayControl |= 0x800;
+ gScreen.controls.layerFXControl = 0x3E48;
+ gScreen.controls.alphaBlend = 0x1000;
+ gScreen.bg3.xOffset = 0x80;
+ gScreen.bg3.yOffset = 0;
+ sub_08052D74(this, nullsub_495, sub_0805A25C);
+}
-ASM_FUNC("asm/non_matching/manager14/sub_0805A0C0.inc", void sub_0805A0C0())
+void sub_08059EF8(Manager14* this) {
+ u32 tmp = --this->manager.unk_0f;
+ if (tmp == 0) {
+ this->manager.unk_0f = 4;
+ if (sub_08059F9C(this)) {
+ if (gUnk_08108588[this->manager.unk_0e] != 0x808) {
+ this->unk_22 = 1;
+ this->unk_24 = tmp;
+ gScreen.controls.alphaBlend = gUnk_08108588[++this->manager.unk_0e];
+ } else {
+ this->unk_22 = tmp;
+ }
+ } else {
+ this->unk_22 = 1;
+ if (gUnk_08108588[this->manager.unk_0e] != 0x1000) {
+ gScreen.controls.alphaBlend = gUnk_08108588[--this->manager.unk_0e];
+ }
+ }
+ }
+}
-ASM_FUNC("asm/non_matching/manager14/sub_0805A114.inc", void sub_0805A114())
+u32 sub_08059F9C(Manager14* this) {
+ switch (gRoomControls.roomID) {
+ case 1:
+ if (CheckLocalFlag(0x16)) {
+ return 0;
+ }
+ sub_0805A25C(this);
+ DeleteThisEntity();
+ break;
+ case 7:
+ sub_0805A25C(this);
+ DeleteThisEntity();
+ break;
+ case 0:
+ case 8 ... 9:
+ case 23:
+ return 1;
+ case 2 ... 6:
+ case 10 ... 22:
+ default:
+ return 0;
+ }
+}
-ASM_FUNC("asm/non_matching/manager14/sub_0805A1D8.inc", void sub_0805A1D8())
+void sub_0805A040(Manager14* this) {
+ sub_0805A098(this);
+}
-ASM_FUNC("asm/non_matching/manager14/nullsub_495.inc", void nullsub_495())
+void sub_0805A048(Manager14* this) {
+ if (--this->manager.unk_0f == 0) {
+ this->manager.unk_0f = 4;
+ gScreen.controls.alphaBlend = gUnk_08108588[this->manager.unk_0e++];
+ if (this->manager.unk_0e == 9) {
+ this->manager.action = 1;
+ this->unk_22 = 0;
+ }
+ }
+ sub_0805A098(this);
+}
-ASM_FUNC("asm/non_matching/manager14/sub_0805A25C.inc", void sub_0805A25C())
+void sub_0805A098(Manager14* this) {
+ switch (gRoomControls.roomID) {
+ case 0:
+ case 8:
+ case 9:
+ case 0x17:
+ return;
+ default:
+ this->manager.action = 3;
+ }
+}
+
+void sub_0805A0C0(Manager14* this) {
+ if (--this->manager.unk_0f == 0) {
+ this->manager.unk_0f = 4;
+ gScreen.controls.alphaBlend = gUnk_08108588[this->manager.unk_0e--];
+ if (this->manager.unk_0e == 0xFF) {
+ gScreen.lcd.displayControl &= ~0x800;
+ sub_08056250();
+ DeleteThisEntity();
+ }
+ }
+}
+
+void sub_0805A114(u32 unk0, u32 unk1) {
+ s32 i;
+ u16* p = &gUnk_02017AA0[gUnk_03003DE4 * 0x500];
+ for (i = 0; i < 0xA0; i++) {
+ s32 tmp = i + gScreen.bg3.yOffset;
+ switch ((tmp >> 3) & 7) {
+ case 4:
+ tmp -= 8;
+ tmp &= 0xF8;
+ break;
+ case 1:
+ case 7:
+ tmp &= 0xF0;
+ break;
+ case 0:
+ case 2 ... 3:
+ case 5 ... 6:
+ default:
+ tmp &= 0xF8;
+ }
+ *p++ = gScreen.bg3.xOffset + ((gSineTable[(unk1 + tmp) & 0xFF] * unk0) >> 8);
+ }
+ sub_0805622C(&gUnk_02017AA0[gUnk_03003DE4 * 0x500], 0x0400001C, 0xA2600001);
+}
+
+void sub_0805A1D8(Manager14* this) {
+ gRoomControls.bg3OffsetX.WORD -= 0x1000;
+ gScreen.bg3.xOffset = gRoomControls.bg3OffsetX.HALF.HI;
+ gRoomControls.bg3OffsetY.WORD -= 0x1000;
+ gScreen.bg3.yOffset = gRoomControls.bg3OffsetY.HALF.HI;
+ if (gScreen.lcd.displayControl & 0x800) {
+ sub_0805A114(6, this->unk_20 >> 1);
+ if (this->unk_22 == 0 && (gMain.ticks & 0x1F) == 0) {
+ this->unk_24++;
+ this->unk_24 &= 3;
+ gScreen.controls.alphaBlend = gUnk_0810859A[this->unk_24];
+ }
+ }
+}
+
+void nullsub_495() {
+}
+
+void sub_0805A25C() {
+ gScreen.controls.layerFXControl = 0;
+ gScreen.lcd.displayControl &= ~0x800;
+ sub_08056250();
+}
diff --git a/src/manager/manager1A.c b/src/manager/manager1A.c
index b0401f28..d828bff5 100644
--- a/src/manager/manager1A.c
+++ b/src/manager/manager1A.c
@@ -31,8 +31,6 @@ void Manager1A_Main(Manager1A* this) {
gUnk_08108668[this->manager.action](this);
}
-extern void sub_08052D74(void*, void*, void*);
-
typedef struct struct_08108764 {
u8 unk_00;
u8 unk_01; // area ID?