Decompile managerD

This commit is contained in:
octorock 2021-08-28 22:24:10 +02:00
parent 0d8b5c786b
commit 08a5d972ed
4 changed files with 76 additions and 89 deletions

View File

@ -1,87 +0,0 @@
.include "asm/macros.inc"
.include "constants/constants.inc"
.syntax unified
.text
thumb_func_start ManagerD_Main
ManagerD_Main: @ 0x08058DD0
push {lr}
ldr r2, _08058DE4 @ =gUnk_08108308
ldrb r1, [r0, #0xc]
lsls r1, r1, #2
adds r1, r1, r2
ldr r1, [r1]
bl _call_via_r1
pop {pc}
.align 2, 0
_08058DE4: .4byte gUnk_08108308
thumb_func_start sub_08058DE8
sub_08058DE8: @ 0x08058DE8
push {r4, lr}
adds r4, r0, #0
ldrh r0, [r4, #0x3e]
bl CheckFlags
cmp r0, #0
beq _08058DFC
bl DeleteThisEntity
b _08058E14
_08058DFC:
movs r0, #1
strb r0, [r4, #0xc]
ldrh r0, [r4, #0x3a]
bl GetLayerByIndex
ldrh r1, [r4, #0x38]
lsls r1, r1, #1
adds r1, #4
adds r0, r0, r1
str r0, [r4, #0x30]
ldrh r0, [r0]
strh r0, [r4, #0x28]
_08058E14:
pop {r4, pc}
.align 2, 0
thumb_func_start sub_08058E18
sub_08058E18: @ 0x08058E18
push {lr}
adds r2, r0, #0
ldr r1, [r2, #0x30]
ldrh r0, [r2, #0x28]
ldrh r1, [r1]
cmp r0, r1
beq _08058E30
ldrb r0, [r2, #0xc]
adds r0, #1
strb r0, [r2, #0xc]
movs r0, #0xf
strb r0, [r2, #0xe]
_08058E30:
pop {pc}
.align 2, 0
thumb_func_start sub_08058E34
sub_08058E34: @ 0x08058E34
push {r4, lr}
adds r4, r0, #0
ldrb r0, [r4, #0xe]
subs r0, #1
strb r0, [r4, #0xe]
lsls r0, r0, #0x18
cmp r0, #0
bne _08058E5E
ldrh r0, [r4, #0x3e]
bl SetFlag
ldrb r0, [r4, #0xa]
cmp r0, #0
beq _08058E58
bl GetCurrentRoomProperty
bl LoadRoomEntityList
_08058E58:
adds r0, r4, #0
bl DeleteManager
_08058E5E:
pop {r4, pc}

View File

@ -152,7 +152,7 @@ extern void Manager9_Main();
extern void ManagerA_Main();
extern void ManagerB_Main();
extern void ManagerC_Main();
extern void ManagerD_Main(Entity*);
extern void ManagerD_Main();
extern void ManagerE_Main();
extern void ManagerF_Main(Entity*);
extern void Manager10_Main(Entity*);

View File

@ -513,7 +513,7 @@ SECTIONS {
src/manager/managerA.o(.text);
src/manager/managerB.o(.text);
src/manager/managerC.o(.text);
asm/managerD.o(.text);
src/manager/managerD.o(.text);
src/manager/managerE.o(.text);
asm/managerF.o(.text);
asm/manager10.o(.text);

74
src/manager/managerD.c Normal file
View File

@ -0,0 +1,74 @@
#include "manager.h"
#include "flags.h"
#include "room.h"
#include "functions.h"
typedef struct {
Manager manager;
u8 field_0x20;
u8 field_0x21;
u8 field_0x22;
u8 field_0x23;
u8 field_0x24;
u8 field_0x25;
u8 field_0x26;
u8 field_0x27;
u16 field_0x28;
u8 field_0x2a;
u8 field_0x2b;
u8 field_0x2c;
u8 field_0x2d;
u8 field_0x2e;
u8 field_0x2f;
u16* field_0x30;
u8 field_0x34;
u8 field_0x35;
u8 field_0x36;
u8 field_0x37;
u16 field_0x38;
u16 field_0x3a;
u8 field_0x3c;
u8 field_0x3d;
u16 field_0x3e;
} ManagerD;
extern void (*const gUnk_08108308[])(ManagerD*);
extern u16* GetLayerByIndex(u32);
void ManagerD_Main(ManagerD* this) {
gUnk_08108308[this->manager.action](this);
}
void sub_08058DE8(ManagerD* this) {
u16* puVar2;
u16* puVar3;
if (CheckFlags(this->field_0x3e) != 0) {
DeleteThisEntity();
} else {
this->manager.action = 1;
puVar2 = GetLayerByIndex(this->field_0x3a);
puVar3 = (this->field_0x38 + 2) + puVar2;
this->field_0x30 = puVar3;
this->field_0x28 = *puVar3;
}
}
void sub_08058E18(ManagerD* this) {
if (this->field_0x28 != *this->field_0x30) {
this->manager.action += 1;
this->manager.unk_0e = 0xf;
}
}
void sub_08058E34(ManagerD* this) {
if (--this->manager.unk_0e == 0) {
SetFlag(this->field_0x3e);
if (this->manager.unk_0a != 0) {
LoadRoomEntityList((EntityData*)GetCurrentRoomProperty(this->manager.unk_0a));
}
DeleteManager((Manager*)this);
}
}