From 568a033f423a2dc734e504315470fc060f64589f Mon Sep 17 00:00:00 2001 From: octorock <79596758+octorock@users.noreply.github.com> Date: Sat, 28 Aug 2021 12:57:28 +0200 Subject: [PATCH] Decompile manager2A --- asm/manager2A.s | 56 ----------------------------------------- include/manager.h | 2 +- linker.ld | 2 +- src/manager/manager2A.c | 39 ++++++++++++++++++++++++++++ 4 files changed, 41 insertions(+), 58 deletions(-) delete mode 100644 asm/manager2A.s create mode 100644 src/manager/manager2A.c diff --git a/asm/manager2A.s b/asm/manager2A.s deleted file mode 100644 index 0e038210..00000000 --- a/asm/manager2A.s +++ /dev/null @@ -1,56 +0,0 @@ - .include "asm/macros.inc" - - .include "constants/constants.inc" - - .syntax unified - - .text - - thumb_func_start Manager2A_Main -Manager2A_Main: @ 0x0805CFC0 - push {r4, lr} - adds r1, r0, #0 - ldrb r0, [r1, #0xc] - cmp r0, #0 - bne _0805CFCE - adds r0, #1 - strb r0, [r1, #0xc] -_0805CFCE: - movs r0, #3 - bl GetCurrentRoomProperty - adds r4, r0, #0 - cmp r4, #0 - beq _0805CFEE - b _0805CFE8 -_0805CFDC: - cmp r0, #0xa - bne _0805CFE6 - adds r0, r4, #0 - bl sub_0805CFF0 -_0805CFE6: - adds r4, #8 -_0805CFE8: - ldrb r0, [r4] - cmp r0, #0 - bne _0805CFDC -_0805CFEE: - pop {r4, pc} - - thumb_func_start sub_0805CFF0 -sub_0805CFF0: @ 0x0805CFF0 - push {r4, lr} - adds r4, r0, #0 - ldrh r0, [r4, #2] - bl CheckLocalFlag - cmp r0, #0 - bne _0805D012 - ldrh r0, [r4, #4] - ldrb r1, [r4, #1] - bl GetTileType - ldrh r1, [r4, #6] - cmp r1, r0 - bne _0805D012 - ldrh r0, [r4, #2] - bl SetLocalFlag -_0805D012: - pop {r4, pc} diff --git a/include/manager.h b/include/manager.h index e3448925..3e0f070a 100644 --- a/include/manager.h +++ b/include/manager.h @@ -181,7 +181,7 @@ extern void Manager26_Main(); extern void Manager27_Main(); extern void Manager28_Main(); extern void Manager29_Main(Entity*); -extern void Manager2A_Main(Entity*); +extern void Manager2A_Main(Manager*); extern void Manager2B_Main(Entity*); extern void Manager2C_Main(Entity*); extern void Manager2D_Main(Entity*); diff --git a/linker.ld b/linker.ld index 19f563f8..94503545 100644 --- a/linker.ld +++ b/linker.ld @@ -542,7 +542,7 @@ SECTIONS { src/manager/manager27.o(.text); src/manager/manager28.o(.text); asm/manager29.o(.text); - asm/manager2A.o(.text); + src/manager/manager2A.o(.text); asm/manager2B.o(.text); asm/manager2C.o(.text); src/manager/manager2D.o(.text); diff --git a/src/manager/manager2A.c b/src/manager/manager2A.c new file mode 100644 index 00000000..048df4cb --- /dev/null +++ b/src/manager/manager2A.c @@ -0,0 +1,39 @@ +#include "manager.h" +#include "room.h" +#include "flags.h" +#include "functions.h" + +typedef struct { + u8 field_0x0; + u8 tileLayer; + u16 flag; + u16 tilePos; + u16 tileType; // If the tile type at tilePos, tileLayer is tileType, set the local flag. +} Manager2A_unk; // TODO result of GetCurrentRoomProperty(3)? + +void sub_0805CFF0(Manager2A_unk*); + +void Manager2A_Main(Manager* manager) { + Manager2A_unk* data; + + if (manager->action == 0) { + manager->action += 1; + } + data = (Manager2A_unk*)GetCurrentRoomProperty(3); + if (data != NULL) { + for (; data->field_0x0 != 0; data = data + 1) { + if (data->field_0x0 == 10) { + sub_0805CFF0(data); + } + } + } +} + +void sub_0805CFF0(Manager2A_unk* param_1) { + if (CheckLocalFlag(param_1->flag) == 0) { + u32 tileType = GetTileType(param_1->tilePos, param_1->tileLayer); + if (param_1->tileType == tileType) { + SetLocalFlag(param_1->flag); + } + } +}