diff options
| author | notyourav <65437533+notyourav@users.noreply.github.com> | 2021-12-02 11:06:25 -0800 |
|---|---|---|
| committer | GitHub <noreply@github.com> | 2021-12-02 11:06:25 -0800 |
| commit | 0f13e4faffac5279726811819bdd673865240a2c (patch) | |
| tree | 5c36ad9c44329acd99132ef98428ec95edebab4a /src | |
| parent | d572b9b64c86180006a20d4bad28022eb2618674 (diff) | |
| parent | fc087427bd9d94c5bc806d328112b4f8608ed695 (diff) | |
Merge pull request #205 from Ibot02/manager14
Diffstat (limited to 'src')
| -rw-r--r-- | src/manager/manager14.c | 198 | ||||
| -rw-r--r-- | src/manager/manager1A.c | 2 |
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? |
