diff --git a/asm/manager20.s b/asm/manager20.s deleted file mode 100644 index 77f6e5b0..00000000 --- a/asm/manager20.s +++ /dev/null @@ -1,74 +0,0 @@ - .include "asm/macros.inc" - - .include "constants/constants.inc" - - .syntax unified - - .text - - thumb_func_start sub_0805B7A0 -sub_0805B7A0: @ 0x0805B7A0 - push {r4, r5, lr} - adds r5, r0, #0 - ldrb r0, [r5, #0xe] - ldrb r1, [r5, #0xa] - ldrb r2, [r5, #0xb] - bl CreateObject - adds r4, r0, #0 - cmp r4, #0 - beq _0805B81A - ldrh r0, [r5, #0x3e] - adds r1, r4, #0 - adds r1, #0x86 - strh r0, [r1] - ldrh r0, [r5, #0x3e] - bl CheckFlags - cmp r0, #0 - beq _0805B7EC - adds r0, r5, #0 - adds r0, #0x36 - ldrb r1, [r0] - adds r0, #1 - ldrb r2, [r0] - movs r0, #0xf - ands r0, r2 - lsls r0, r0, #8 - orrs r1, r0 - strh r1, [r4, #0x2e] - ldrh r1, [r5, #0x3c] - ldr r0, _0805B7E8 @ =0x00000FFF - ands r0, r1 - strh r0, [r4, #0x32] - ldrh r0, [r5, #0x3c] - lsrs r0, r0, #0xc - b _0805B7FC - .align 2, 0 -_0805B7E8: .4byte 0x00000FFF -_0805B7EC: - ldrh r0, [r5, #0x38] - strh r0, [r4, #0x2e] - ldrh r0, [r5, #0x3a] - strh r0, [r4, #0x32] - adds r0, r5, #0 - adds r0, #0x37 - ldrb r0, [r0] - lsrs r0, r0, #4 -_0805B7FC: - adds r1, r4, #0 - adds r1, #0x38 - strb r0, [r1] - ldr r0, _0805B81C @ =gRoomControls - ldrh r1, [r0, #6] - ldrh r2, [r4, #0x2e] - adds r1, r1, r2 - strh r1, [r4, #0x2e] - ldrh r0, [r0, #8] - ldrh r1, [r4, #0x32] - adds r0, r0, r1 - strh r0, [r4, #0x32] - adds r0, r5, #0 - bl DeleteManager -_0805B81A: - pop {r4, r5, pc} - .align 2, 0 -_0805B81C: .4byte gRoomControls diff --git a/linker.ld b/linker.ld index cf7d6d35..f8ce2d4b 100644 --- a/linker.ld +++ b/linker.ld @@ -501,7 +501,7 @@ SECTIONS { asm/manager1D.o(.text); asm/manager1E.o(.text); asm/manager1F.o(.text); - asm/manager20.o(.text); + src/manager/manager20.o(.text); asm/manager21.o(.text); asm/manager22.o(.text); asm/manager23.o(.text); diff --git a/src/manager/manager20.c b/src/manager/manager20.c new file mode 100644 index 00000000..1f989f10 --- /dev/null +++ b/src/manager/manager20.c @@ -0,0 +1,38 @@ +#include "global.h" +#include "manager.h" +#include "flags.h" +#include "entity.h" +#include "room.h" + +typedef struct { + Manager manager; + u8 unk_20[0x12]; + u16 unk_32; + u8 unk_34[2]; + u8 unk_36; + u8 unk_37; + u16 unk_38; + u16 unk_3a; + u16 unk_3c; + u16 unk_3e; +} Manager20; + +extern void DeleteManager(Manager20*); + +void sub_0805B7A0(Manager20* this) { + Entity* tmp = CreateObject(this->manager.unk_0e, this->manager.unk_0a, this->manager.unk_0b); + if (!tmp) return; + tmp->field_0x86 = this->unk_3e; + if (CheckFlags(this->unk_3e)) { + tmp->x.HALF.HI = this->unk_36 | (this->unk_37&0xF)<<8;//r1 + tmp->y.HALF.HI = this->unk_3c & 0xFFF; + tmp->collisionLayer = this->unk_3c >> 0xC; + } else { + tmp->x.HALF.HI = this->unk_38; + tmp->y.HALF.HI = this->unk_3a; + tmp->collisionLayer = this->unk_37>>4; + } + tmp->x.HALF.HI += gRoomControls.roomOriginX; + tmp->y.HALF.HI += gRoomControls.roomOriginY; + DeleteManager(this); +}