Decompile manager2A

This commit is contained in:
octorock 2021-08-28 12:57:28 +02:00
parent 1484ab66dc
commit 568a033f42
4 changed files with 41 additions and 58 deletions

View File

@ -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}

View File

@ -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*);

View File

@ -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);

39
src/manager/manager2A.c Normal file
View File

@ -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);
}
}
}