summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authornotyouraveragehooman <65437533+notyouraveragehooman@users.noreply.github.com>2020-08-09 16:19:14 -0700
committerGitHub <noreply@github.com>2020-08-09 16:19:14 -0700
commit001845ba3a226c33ceb7479c1cf8bc5fa182700a (patch)
treed313765680f2b94719806d221bef34f5d74d01db
parent72118a5ce9565791d15eae725185470e4a7b157b (diff)
parent0934bc5301844a3fc95696d8d0e1c2899b8b74a9 (diff)
Merge pull request #50 from Ibot02:master
managerA.c ok
-rw-r--r--asm/managerA.s309
-rw-r--r--include/manager.h23
-rw-r--r--linker.ld2
-rw-r--r--src/manager/managerA.c168
4 files changed, 192 insertions, 310 deletions
diff --git a/asm/managerA.s b/asm/managerA.s
deleted file mode 100644
index 68a3204a..00000000
--- a/asm/managerA.s
+++ /dev/null
@@ -1,309 +0,0 @@
- .include "asm/macros.inc"
-
- .include "constants/constants.inc"
-
- .syntax unified
-
- .text
-
- thumb_func_start sub_08058380
-sub_08058380: @ 0x08058380
- push {lr}
- ldr r2, _08058394 @ =gUnk_081081F4
- ldrb r1, [r0, #0xc]
- lsls r1, r1, #2
- adds r1, r1, r2
- ldr r1, [r1]
- bl _call_via_r1
- pop {pc}
- .align 2, 0
-_08058394: .4byte gUnk_081081F4
-
- thumb_func_start sub_08058398
-sub_08058398: @ 0x08058398
- push {r4, lr}
- adds r4, r0, #0
- ldrh r0, [r4, #0x3c]
- bl CheckFlags
- cmp r0, #0
- beq _080583AA
- bl DeleteThisEntity
-_080583AA:
- adds r0, r4, #0
- adds r0, #0x3a
- ldrb r1, [r0]
- lsls r1, r1, #3
- strh r1, [r4, #0x24]
- adds r0, #1
- ldrb r2, [r0]
- lsls r2, r2, #3
- strh r2, [r4, #0x26]
- subs r0, #3
- ldrb r0, [r0]
- lsls r0, r0, #4
- adds r1, r1, r0
- strh r1, [r4, #0x20]
- adds r0, r4, #0
- adds r0, #0x39
- ldrb r0, [r0]
- lsls r0, r0, #4
- adds r2, r2, r0
- strh r2, [r4, #0x22]
- adds r0, r4, #0
- movs r1, #6
- bl sub_0805E3A0
- ldrh r0, [r4, #0x3e]
- cmp r0, #0
- bne _080583E4
- movs r0, #2
- b _080583E6
-_080583E4:
- movs r0, #1
-_080583E6:
- strb r0, [r4, #0xc]
- pop {r4, pc}
- .align 2, 0
-
- thumb_func_start sub_080583EC
-sub_080583EC: @ 0x080583EC
- push {r4, lr}
- adds r4, r0, #0
- ldrh r0, [r4, #0x3e]
- bl CheckFlags
- cmp r0, #0
- beq _08058404
- movs r0, #2
- strb r0, [r4, #0xc]
- adds r0, r4, #0
- bl sub_08058408
-_08058404:
- pop {r4, pc}
- .align 2, 0
-
- thumb_func_start sub_08058408
-sub_08058408: @ 0x08058408
- push {r4, r5, r6, lr}
- adds r4, r0, #0
- ldr r6, _0805843C @ =gPlayerState
- ldr r5, [r6, #0x30]
- movs r0, #8
- ands r5, r0
- cmp r5, #0
- bne _08058488
- ldrh r0, [r4, #0x20]
- ldrh r1, [r4, #0x22]
- ldrh r2, [r4, #0x24]
- ldrh r3, [r4, #0x26]
- bl CheckPlayerInRegion
- cmp r0, #0
- beq _08058488
- ldrb r0, [r4, #0xa]
- cmp r0, #1
- beq _08058488
- cmp r0, #1
- ble _08058450
- cmp r0, #2
- beq _08058440
- cmp r0, #3
- beq _0805847C
- b _08058450
- .align 2, 0
-_0805843C: .4byte gPlayerState
-_08058440:
- adds r0, r4, #0
- bl sub_080585DC
- ldr r0, [r6, #0x30]
- movs r1, #0x80
- ands r0, r1
- cmp r0, #0
- beq _08058488
-_08058450:
- adds r0, r4, #0
- bl sub_080585DC
- adds r0, r4, #0
- bl sub_0805848C
- cmp r0, #0
- beq _08058488
- movs r0, #3
- bl sub_08078A90
- bl sub_08078B48
- bl sub_0805E544
- movs r0, #0
- movs r1, #3
- strb r1, [r4, #0xc]
- strb r0, [r4, #0xd]
- movs r0, #0x1e
- strb r0, [r4, #0xe]
- b _08058488
-_0805847C:
- movs r0, #4
- strb r0, [r4, #0xc]
- strb r5, [r4, #0xd]
- ldrh r0, [r4, #0x36]
- bl sub_080186C0
-_08058488:
- pop {r4, r5, r6, pc}
- .align 2, 0
-
- thumb_func_start sub_0805848C
-sub_0805848C: @ 0x0805848C
- push {lr}
- ldr r0, _080584A4 @ =gPlayerState
- adds r0, #0xa8
- ldrb r0, [r0]
- subs r0, #5
- cmp r0, #0x17
- bhi _08058510
- lsls r0, r0, #2
- ldr r1, _080584A8 @ =_080584AC
- adds r0, r0, r1
- ldr r0, [r0]
- mov pc, r0
- .align 2, 0
-_080584A4: .4byte gPlayerState
-_080584A8: .4byte _080584AC
-_080584AC: @ jump table
- .4byte _0805850C @ case 0
- .4byte _08058510 @ case 1
- .4byte _0805850C @ case 2
- .4byte _0805850C @ case 3
- .4byte _08058510 @ case 4
- .4byte _0805850C @ case 5
- .4byte _0805850C @ case 6
- .4byte _0805850C @ case 7
- .4byte _0805850C @ case 8
- .4byte _0805850C @ case 9
- .4byte _0805850C @ case 10
- .4byte _0805850C @ case 11
- .4byte _0805850C @ case 12
- .4byte _0805850C @ case 13
- .4byte _0805850C @ case 14
- .4byte _0805850C @ case 15
- .4byte _0805850C @ case 16
- .4byte _0805850C @ case 17
- .4byte _0805850C @ case 18
- .4byte _0805850C @ case 19
- .4byte _08058510 @ case 20
- .4byte _08058510 @ case 21
- .4byte _0805850C @ case 22
- .4byte _0805850C @ case 23
-_0805850C:
- movs r0, #0
- b _08058512
-_08058510:
- movs r0, #1
-_08058512:
- pop {pc}
-
- thumb_func_start sub_08058514
-sub_08058514: @ 0x08058514
- push {r4, lr}
- adds r4, r0, #0
- ldrb r0, [r4, #0xd]
- cmp r0, #1
- beq _08058532
- cmp r0, #1
- bgt _08058528
- cmp r0, #0
- beq _08058570
- b _080585A6
-_08058528:
- cmp r0, #2
- beq _08058570
- cmp r0, #3
- beq _08058584
- b _080585A6
-_08058532:
- ldr r2, _08058564 @ =gPlayerState
- ldr r0, [r2, #0x30]
- ldr r1, _08058568 @ =0x00001235
- ands r0, r1
- cmp r0, #0
- bne _080585A6
- ldr r0, _0805856C @ =gPlayerEntity
- movs r1, #0x36
- ldrsh r0, [r0, r1]
- cmp r0, #0
- bne _080585A6
- strb r0, [r2, #2]
- ldrh r0, [r4, #0x36]
- adds r1, r4, #0
- adds r1, #0x35
- ldrb r1, [r1]
- bl sub_08078AA8
- ldrb r0, [r4, #0xd]
- adds r0, #1
- strb r0, [r4, #0xd]
- movs r0, #0x1e
- strb r0, [r4, #0xe]
- b _080585A6
- .align 2, 0
-_08058564: .4byte gPlayerState
-_08058568: .4byte 0x00001235
-_0805856C: .4byte gPlayerEntity
-_08058570:
- ldrb r0, [r4, #0xe]
- subs r0, #1
- strb r0, [r4, #0xe]
- lsls r0, r0, #0x18
- cmp r0, #0
- bne _080585A6
- ldrb r0, [r4, #0xd]
- adds r0, #1
- strb r0, [r4, #0xd]
- b _080585A6
-_08058584:
- ldr r0, _080585A8 @ =gPlayerEntity
- ldrb r0, [r0, #0xc]
- cmp r0, #1
- beq _08058590
- cmp r0, #9
- bne _080585A6
-_08058590:
- ldr r0, _080585AC @ =gPlayerState
- adds r0, #0x8b
- movs r1, #1
- strb r1, [r0]
- bl UnfreezeTime
- ldrh r0, [r4, #0x3c]
- bl SetFlag
- bl DeleteThisEntity
-_080585A6:
- pop {r4, pc}
- .align 2, 0
-_080585A8: .4byte gPlayerEntity
-_080585AC: .4byte gPlayerState
-
- thumb_func_start sub_080585B0
-sub_080585B0: @ 0x080585B0
- push {r4, lr}
- adds r4, r0, #0
- ldr r0, _080585D8 @ =gArea
- adds r0, #0x28
- ldrb r0, [r0]
- cmp r0, #0xff
- beq _080585C2
- bl DeleteThisEntity
-_080585C2:
- ldrh r0, [r4, #0x3c]
- bl CheckFlags
- cmp r0, #0
- beq _080585D4
- bl sub_0801855C
- bl DeleteThisEntity
-_080585D4:
- pop {r4, pc}
- .align 2, 0
-_080585D8: .4byte gArea
-
- thumb_func_start sub_080585DC
-sub_080585DC: @ 0x080585DC
- push {lr}
- ldrh r0, [r0, #0x3c]
- bl CheckFlags
- cmp r0, #0
- beq _080585EC
- bl DeleteThisEntity
-_080585EC:
- pop {pc}
- .align 2, 0
diff --git a/include/manager.h b/include/manager.h
index 66b1c363..dfb5f1ff 100644
--- a/include/manager.h
+++ b/include/manager.h
@@ -4,6 +4,29 @@
#include "global.h"
typedef struct {
+ u8 unk_00[0x0a];
+ u8 unk_0a;
+ u8 unk_0b;
+ u8 unk_0c;
+ u8 unk_0d;
+ u8 unk_0e;
+ u8 unk_0f[0x11];
+ u16 unk_20;
+ u16 unk_22;
+ u16 unk_24;
+ u16 unk_26;
+ u8 unk_28[0x0D];
+ u8 unk_35;
+ u16 unk_36;
+ u8 unk_38;
+ u8 unk_39;
+ u8 unk_3a;
+ u8 unk_3b;
+ u16 unk_3c;
+ u16 unk_3e;
+} Manager;
+
+typedef struct {
u16 field_0x00;
u16 field_0x02;
u8 field_0x04;
diff --git a/linker.ld b/linker.ld
index b1901b80..389a78d7 100644
--- a/linker.ld
+++ b/linker.ld
@@ -474,7 +474,7 @@ SECTIONS {
asm/manager7.o(.text);
asm/manager8.o(.text);
asm/manager9.o(.text);
- asm/managerA.o(.text);
+ src/manager/managerA.o(.text);
asm/managerB.o(.text);
asm/managerC.o(.text);
asm/managerD.o(.text);
diff --git a/src/manager/managerA.c b/src/manager/managerA.c
new file mode 100644
index 00000000..699c5634
--- /dev/null
+++ b/src/manager/managerA.c
@@ -0,0 +1,168 @@
+#include "global.h"
+#include "entity.h"
+#include "player.h"
+#include "manager.h"
+#include "flags.h"
+#include "area.h"
+
+
+extern void (*gUnk_081081F4[])(Manager*);
+
+void sub_08058380(Manager* this) {
+ gUnk_081081F4[this->unk_0c](this);
+}
+
+
+
+extern void sub_0805E3A0(Manager*, u32);
+
+void sub_08058398(Manager* this) {
+
+ if (CheckFlags(this->unk_3c) != 0) {
+ DeleteThisEntity();
+ }
+ this->unk_24 = this->unk_3a<<3;
+ this->unk_26 = this->unk_3b<<3;
+ this->unk_20 = this->unk_24 + (this->unk_38<<4);
+ this->unk_22 = this->unk_26 + (this->unk_39<<4);
+ sub_0805E3A0(this, 0x06);
+ if (this->unk_3e == 0) {
+ this->unk_0c = 2;
+ } else {
+ this->unk_0c = 1;
+ }
+}
+
+
+void sub_08058408(Manager*);
+
+void sub_080583EC(Manager* this) {
+ if (CheckFlags(this->unk_3e) != 0) {
+ this->unk_0c = 2;
+ sub_08058408(this);
+ }
+}
+
+extern u32 CheckPlayerInRegion(u32, u32, u32, u32);
+extern void sub_0805E544(void);
+extern void sub_08078A90(u32);
+extern void sub_08078AA8(u32, u32);
+extern void sub_080186C0(u16);
+extern void sub_08078B48(void);
+
+u32 sub_0805848C(Manager*);
+void sub_080585DC(Manager*);
+
+void sub_08058408(Manager* this){
+ u32 tmp2;
+ tmp2 = (gPlayerState.flags.all & 0x08);
+ if (tmp2 != 0) return;
+ if (!CheckPlayerInRegion(this->unk_20, this->unk_22, this->unk_24, this->unk_26)) return;
+ switch (this->unk_0a) {
+ case 1:
+ return;
+ case 2:
+ sub_080585DC(this);
+ if ((gPlayerState.flags.all & 0x80) == 0) return;
+ case 0:
+ default:
+ sub_080585DC(this);
+ if (sub_0805848C(this) == 0) return;
+ sub_08078A90(3);
+ sub_08078B48();
+ sub_0805E544();
+ this->unk_0c = 3;
+ this->unk_0d = 0;
+ this->unk_0e = 0x1e;
+ return;
+ case 3:
+ this->unk_0c = 4;
+ this->unk_0d = tmp2;
+ sub_080186C0(this->unk_36);
+ return;
+ }
+}
+
+
+u32 sub_0805848C(Manager* this) {
+ switch (gPlayerState.field_0xa8[0]-5) {
+ case 0:
+ case 2:
+ case 3:
+ case 5:
+ case 6:
+ case 7:
+ case 8:
+ case 9:
+ case 10:
+ case 11:
+ case 12:
+ case 13:
+ case 14:
+ case 15:
+ case 16:
+ case 17:
+ case 18:
+ case 19:
+ case 22:
+ case 23:
+ return 0;
+ case 1:
+ case 4:
+ case 20:
+ case 21:
+ default:
+ return 1;
+ }
+}
+
+
+extern void UnfreezeTime(void);
+
+void sub_08058514(Manager* this) {
+ switch (this->unk_0d) {
+ case 1:
+ if ((gPlayerState.flags.all & 0x1235) != 0)
+ return;
+ if (gPlayerEntity.height.HALF.HI != 0)
+ return;
+ gPlayerState.jumpStatus = 0;
+ sub_08078AA8(this->unk_36, this->unk_35);
+ this->unk_0d++;
+ this->unk_0e = 0x1E;
+ return;
+ case 0:
+ case 2:
+ if (((--this->unk_0e)<<0x18) == 0) {
+ this->unk_0d++;
+ }
+ return;
+ case 3:
+ if (gPlayerEntity.action != 1 && gPlayerEntity.action != 9) return;
+ gPlayerState.field_0x8b = 1;
+ UnfreezeTime();
+ SetFlag(this->unk_3c);
+ DeleteThisEntity();
+ return;
+ default:
+ return;
+ }
+}
+
+
+extern void sub_0801855C(void);
+
+void sub_080585B0(Manager* this) {
+ if (gArea.filler4[0] != 0xFF) {
+ DeleteThisEntity();
+ }
+ if (CheckFlags(this->unk_3c)) {
+ sub_0801855C();
+ DeleteThisEntity();
+ }
+}
+void sub_080585DC(Manager* this) {
+ if (CheckFlags(this->unk_3c)) {
+ DeleteThisEntity();
+ }
+}