diff options
| author | octorock <79596758+octorock@users.noreply.github.com> | 2021-09-18 10:35:50 +0200 |
|---|---|---|
| committer | octorock <79596758+octorock@users.noreply.github.com> | 2021-09-18 10:35:50 +0200 |
| commit | fe1e97f8ef20b4a4be883c14caade2831d381f1a (patch) | |
| tree | 61031d9ce25d2cc08f096ff9af8cc81c6719782b /src/manager | |
| parent | d6329131229e280762a5cf0b32311cd191a2364a (diff) | |
Decompile manager1B
Diffstat (limited to 'src/manager')
| -rw-r--r-- | src/manager/manager1B.c | 81 | ||||
| -rw-r--r-- | src/manager/manager2B.c | 2 |
2 files changed, 77 insertions, 6 deletions
diff --git a/src/manager/manager1B.c b/src/manager/manager1B.c index e04dca81..37cb856e 100644 --- a/src/manager/manager1B.c +++ b/src/manager/manager1B.c @@ -1,12 +1,83 @@ #include "manager.h" +#include "functions.h" +#include "screen.h" -ASM_FUNC("asm/non_matching/manager1B/Manager1B_Main.inc", void Manager1B_Main()) +typedef struct { + Manager manager; + u32 field_0x20; +} Manager1B; -ASM_FUNC("asm/non_matching/manager1B/sub_0805B448.inc", void sub_0805B448()) +extern u8 gUnk_08108C28[]; +extern void (*const gUnk_08108C54[])(Manager1B*); -ASM_FUNC("asm/non_matching/manager1B/sub_0805B474.inc", void sub_0805B474()) +void sub_0805B4B4(Manager1B*); -ASM_FUNC("asm/non_matching/manager1B/sub_0805B4B4.inc", void sub_0805B4B4()) +void sub_0806D0F8(void); // in bigGoron? -ASM_FUNC("asm/non_matching/manager1B/sub_0805B4D0.inc", void sub_0805B4D0()) +extern u8 gUnk_08108C5C[]; +extern u16 gUnk_08108C44[]; + +void Manager1B_Main(Manager1B* this) { + s32 iVar3; + u8* tmp; + + if (EntityHasDuplicateID((Entity*)this) != 0) { + DeleteThisEntity(); + } + tmp = gUnk_08108C28 + this->manager.unk_0a * 4; + if (this->manager.action == 0) { + this->manager.action = 1; + this->manager.unk_10 |= 0x20; + sub_0805E3A0(this, 6); + if (this->manager.unk_0a != 0) { + sub_08052D74(this, sub_0805B4B4, NULL); + } + iVar3 = 0x100 - (u32)gRoomControls.height; + if (iVar3 < 0) { + iVar3 = 0; + } + this->field_0x20 = iVar3 + (s8)tmp[2]; + gUnk_08108C54[tmp[1]](this); + } + if (gRoomControls.unk2 == 0) { + gUnk_08108C54[tmp[1]](this); + } +} + +void sub_0805B448(Manager1B* this) { + gScreen.affine.bg3xOffset = (gRoomControls.roomScrollX - gRoomControls.roomOriginX) >> 2; + gScreen.affine.bg3yOffset = ((gRoomControls.roomScrollY - gRoomControls.roomOriginY) >> 1) + this->field_0x20; +} + +void sub_0805B474(Manager1B* this) { + s32 tmp = ((gRoomControls.roomScrollY - gRoomControls.roomOriginY) * 0x60) / + (gRoomControls.height - 0xa0); + gScreen.affine.bg3yOffset = gRoomControls.roomOriginY + tmp; + gScreen.affine.bg3xOffset = gRoomControls.roomScrollX - ((gRoomControls.width - 0x100) / 2); +} + +void sub_0805B4B4(Manager1B* this) { + sub_0805B4D0(this->manager.unk_0a); + if (this->manager.unk_0a == 2) { + sub_0806D0F8(); + } + Manager1B_Main(this); +} + +void sub_0805B4D0(u32 param_1) { + s32 iVar1; + u32 uVar2; + + LoadGfxGroup(gUnk_08108C5C[param_1]); + gScreen.affine.bg3Control = 0x1e07; + gScreen.lcd.displayControl |= 0x800; + gScreen.affine.bg3xOffset = (gRoomControls.roomScrollX - gRoomControls.roomOriginX) >> 2; + + uVar2 = (gRoomControls.roomScrollY - gRoomControls.roomOriginY) >> 1; + iVar1 = 0x100 - gRoomControls.height; + if (iVar1 < 0) { + iVar1 = 0; + } + gScreen.affine.bg3yOffset = uVar2 + iVar1+gUnk_08108C44[param_1]; +} diff --git a/src/manager/manager2B.c b/src/manager/manager2B.c index b3601007..29cc7462 100644 --- a/src/manager/manager2B.c +++ b/src/manager/manager2B.c @@ -37,7 +37,7 @@ typedef struct { u16 field_0x3e; } Manager2B; -extern void (*const gUnk_08108D30[])(Entity*); +extern void (*const gUnk_08108D30[])(Manager2B*); extern u8 gEntCount; |
