diff --git a/asm/non_matching/manager1B/Manager1B_Main.inc b/asm/non_matching/manager1B/Manager1B_Main.inc deleted file mode 100644 index 6a4b50b7..00000000 --- a/asm/non_matching/manager1B/Manager1B_Main.inc +++ /dev/null @@ -1,72 +0,0 @@ - .syntax unified - push {r4, r5, lr} - adds r4, r0, #0 - bl EntityHasDuplicateID - cmp r0, #0 - beq _0805B3C4 - bl DeleteThisEntity -_0805B3C4: - ldrb r0, [r4, #0xa] - lsls r0, r0, #2 - ldr r1, _0805B438 @ =gUnk_08108C28 - adds r5, r0, r1 - ldrb r0, [r4, #0xc] - cmp r0, #0 - bne _0805B41E - movs r0, #1 - strb r0, [r4, #0xc] - ldrb r1, [r4, #0x10] - movs r0, #0x20 - orrs r0, r1 - strb r0, [r4, #0x10] - adds r0, r4, #0 - movs r1, #6 - bl sub_0805E3A0 - ldrb r0, [r4, #0xa] - cmp r0, #0 - beq _0805B3F6 - ldr r1, _0805B43C @ =sub_0805B4B4 - adds r0, r4, #0 - movs r2, #0 - bl sub_08052D74 -_0805B3F6: - ldr r0, _0805B440 @ =gRoomControls - ldrh r1, [r0, #0x20] - movs r0, #0x80 - lsls r0, r0, #1 - subs r1, r0, r1 - cmp r1, #0 - bge _0805B406 - movs r1, #0 -_0805B406: - movs r0, #2 - ldrsb r0, [r5, r0] - adds r0, r1, r0 - str r0, [r4, #0x20] - ldr r1, _0805B444 @ =gUnk_08108C54 - ldrb r0, [r5, #1] - lsls r0, r0, #2 - adds r0, r0, r1 - ldr r1, [r0] - adds r0, r4, #0 - bl _call_via_r1 -_0805B41E: - ldr r0, _0805B440 @ =gRoomControls - ldrh r0, [r0] - cmp r0, #0 - bne _0805B436 - ldr r0, _0805B444 @ =gUnk_08108C54 - ldrb r1, [r5, #1] - lsls r1, r1, #2 - adds r1, r1, r0 - ldr r1, [r1] - adds r0, r4, #0 - bl _call_via_r1 -_0805B436: - pop {r4, r5, pc} - .align 2, 0 -_0805B438: .4byte gUnk_08108C28 -_0805B43C: .4byte sub_0805B4B4 -_0805B440: .4byte gRoomControls -_0805B444: .4byte gUnk_08108C54 - .syntax divided diff --git a/asm/non_matching/manager1B/sub_0805B448.inc b/asm/non_matching/manager1B/sub_0805B448.inc deleted file mode 100644 index 167281fe..00000000 --- a/asm/non_matching/manager1B/sub_0805B448.inc +++ /dev/null @@ -1,23 +0,0 @@ - .syntax unified - push {r4, lr} - ldr r4, _0805B46C @ =gScreen - ldr r3, _0805B470 @ =gRoomControls - movs r2, #0xa - ldrsh r1, [r3, r2] - ldrh r2, [r3, #6] - subs r1, r1, r2 - asrs r1, r1, #2 - strh r1, [r4, #0x2e] - movs r2, #0xc - ldrsh r1, [r3, r2] - ldrh r2, [r3, #8] - subs r1, r1, r2 - asrs r1, r1, #1 - ldr r0, [r0, #0x20] - adds r0, r0, r1 - strh r0, [r4, #0x30] - pop {r4, pc} - .align 2, 0 -_0805B46C: .4byte gScreen -_0805B470: .4byte gRoomControls - .syntax divided diff --git a/asm/non_matching/manager1B/sub_0805B474.inc b/asm/non_matching/manager1B/sub_0805B474.inc deleted file mode 100644 index 59158767..00000000 --- a/asm/non_matching/manager1B/sub_0805B474.inc +++ /dev/null @@ -1,31 +0,0 @@ - .syntax unified - push {r4, r5, lr} - ldr r5, _0805B4A8 @ =gRoomControls - movs r0, #0xc - ldrsh r1, [r5, r0] - ldrh r4, [r5, #8] - subs r1, r1, r4 - lsls r0, r1, #1 - adds r0, r0, r1 - lsls r0, r0, #5 - ldrh r1, [r5, #0x20] - subs r1, #0xa0 - bl __divsi3 - ldr r2, _0805B4AC @ =gScreen - adds r4, r4, r0 - strh r4, [r2, #0x30] - ldrh r0, [r5, #0x1e] - ldr r1, _0805B4B0 @ =0xFFFFFF00 - adds r0, r0, r1 - lsrs r1, r0, #0x1f - adds r0, r0, r1 - asrs r0, r0, #1 - ldrh r1, [r5, #0xa] - subs r1, r1, r0 - strh r1, [r2, #0x2e] - pop {r4, r5, pc} - .align 2, 0 -_0805B4A8: .4byte gRoomControls -_0805B4AC: .4byte gScreen -_0805B4B0: .4byte 0xFFFFFF00 - .syntax divided diff --git a/asm/non_matching/manager1B/sub_0805B4B4.inc b/asm/non_matching/manager1B/sub_0805B4B4.inc deleted file mode 100644 index b0e254c9..00000000 --- a/asm/non_matching/manager1B/sub_0805B4B4.inc +++ /dev/null @@ -1,14 +0,0 @@ - .syntax unified - push {r4, lr} - adds r4, r0, #0 - ldrb r0, [r4, #0xa] - bl sub_0805B4D0 - ldrb r0, [r4, #0xa] - cmp r0, #2 - bne _0805B4C8 - bl sub_0806D0F8 -_0805B4C8: - adds r0, r4, #0 - bl Manager1B_Main - pop {r4, pc} - .syntax divided diff --git a/asm/non_matching/manager1B/sub_0805B4D0.inc b/asm/non_matching/manager1B/sub_0805B4D0.inc deleted file mode 100644 index 8be13a26..00000000 --- a/asm/non_matching/manager1B/sub_0805B4D0.inc +++ /dev/null @@ -1,51 +0,0 @@ - .syntax unified - push {r4, r5, lr} - adds r5, r0, #0 - ldr r0, _0805B528 @ =gUnk_08108C5C - adds r0, r5, r0 - ldrb r0, [r0] - bl LoadGfxGroup - ldr r4, _0805B52C @ =gScreen - ldr r0, _0805B530 @ =0x00001E07 - strh r0, [r4, #0x2c] - ldrh r1, [r4] - movs r2, #0x80 - lsls r2, r2, #4 - adds r0, r2, #0 - orrs r0, r1 - strh r0, [r4] - ldr r2, _0805B534 @ =gRoomControls - movs r1, #0xa - ldrsh r0, [r2, r1] - ldrh r1, [r2, #6] - subs r0, r0, r1 - asrs r0, r0, #2 - strh r0, [r4, #0x2e] - movs r1, #0xc - ldrsh r0, [r2, r1] - ldrh r1, [r2, #8] - subs r0, r0, r1 - asrs r3, r0, #1 - ldrh r1, [r2, #0x20] - movs r0, #0x80 - lsls r0, r0, #1 - subs r2, r0, r1 - cmp r2, #0 - bge _0805B516 - movs r2, #0 -_0805B516: - ldr r0, _0805B538 @ =gUnk_08108C44 - lsls r1, r5, #1 - adds r1, r1, r0 - adds r0, r3, r2 - ldrh r1, [r1] - adds r0, r0, r1 - strh r0, [r4, #0x30] - pop {r4, r5, pc} - .align 2, 0 -_0805B528: .4byte gUnk_08108C5C -_0805B52C: .4byte gScreen -_0805B530: .4byte 0x00001E07 -_0805B534: .4byte gRoomControls -_0805B538: .4byte gUnk_08108C44 - .syntax divided 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;