summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authornotyouraveragehooman <65437533+notyouraveragehooman@users.noreply.github.com>2020-09-13 14:41:18 -0700
committerGitHub <noreply@github.com>2020-09-13 14:41:18 -0700
commit2bb41b1f0930bcf5f098c8995f9711d3da83df6d (patch)
tree8c1ca42c22953c0446350835b1870f40330fd585
parent25ad2077e4697f84d60af67672e4fb36129b338e (diff)
parent825d9c168bf9a3ba4f688ba50736fe6f45242eaf (diff)
Merge pull request #85 from Ibot02:manager20
Manager20.c: ok
-rw-r--r--asm/manager20.s74
-rw-r--r--linker.ld2
-rw-r--r--src/manager/manager20.c38
3 files changed, 39 insertions, 75 deletions
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);
+}