Decompile manager21

This commit is contained in:
octorock 2021-09-18 12:57:32 +02:00
parent 1b122a05b6
commit 9147fa8272
4 changed files with 66 additions and 112 deletions

View File

@ -1,88 +0,0 @@
.syntax unified
push {r4, r5, r6, r7, lr}
mov r7, r8
push {r7}
adds r5, r0, #0
ldrb r1, [r5, #0xc]
cmp r1, #0
bne _0805B834
movs r0, #1
strb r0, [r5, #0xc]
str r1, [r5, #0x20]
_0805B834:
ldrb r0, [r5, #0xa]
bl GetCurrentRoomProperty
adds r4, r0, #0
movs r7, #0
ldrh r0, [r4]
cmp r0, #0
beq _0805B8C4
ldr r0, _0805B8A8 @ =gRoomControls
mov r8, r0
_0805B848:
ldrh r0, [r4]
ldrh r1, [r4, #2]
movs r2, #4
movs r3, #4
bl CheckRectOnScreen
cmp r0, #0
beq _0805B8AC
movs r6, #1
lsls r6, r7
ldr r0, [r5, #0x20]
ands r0, r6
cmp r0, #0
bne _0805B8B6
ldrh r0, [r4, #4]
bl sub_0805B8CC
cmp r0, #0
beq _0805B8B6
movs r0, #0x4e
movs r1, #1
movs r2, #0
bl CreateObject
adds r1, r0, #0
cmp r1, #0
beq _0805B8B6
ldrh r0, [r4, #6]
strb r0, [r1, #0xe]
strb r7, [r1, #0xf]
ldrh r0, [r4]
mov r2, r8
ldrh r2, [r2, #6]
adds r0, r0, r2
strh r0, [r1, #0x2e]
ldrh r0, [r4, #2]
mov r3, r8
ldrh r3, [r3, #8]
adds r0, r0, r3
strh r0, [r1, #0x32]
str r5, [r1, #0x50]
adds r0, r1, #0
bl sub_08016A30
ldr r0, [r5, #0x20]
orrs r0, r6
b _0805B8B4
.align 2, 0
_0805B8A8: .4byte gRoomControls
_0805B8AC:
movs r1, #1
lsls r1, r7
ldr r0, [r5, #0x20]
bics r0, r1
_0805B8B4:
str r0, [r5, #0x20]
_0805B8B6:
adds r4, #8
adds r7, #1
ldrh r0, [r4]
cmp r0, #0
beq _0805B8C4
cmp r7, #0x1f
bls _0805B848
_0805B8C4:
pop {r3}
mov r8, r3
pop {r4, r5, r6, r7, pc}
.align 2, 0
.syntax divided

View File

@ -1,20 +0,0 @@
.syntax unified
push {lr}
cmp r0, #4
bne _0805B8DA
movs r0, #0x18
bl CheckGlobalFlag
b _0805B8E8
_0805B8DA:
cmp r0, #4
bls _0805B8E6
cmp r0, #6
bhi _0805B8E6
movs r0, #0
b _0805B8E8
_0805B8E6:
movs r0, #1
_0805B8E8:
pop {pc}
.align 2, 0
.syntax divided

View File

@ -28,7 +28,7 @@ void SetRoomFlag(u32);
extern u32 gGlobalFlags;
extern u32 gRoomFlags;
enum {
typedef enum {
FLAG_NONE,
/*0x01*/ LV0_CLEAR, /* */
/*0x02*/ LV1_CLEAR, /* */
@ -130,6 +130,6 @@ enum {
/*0x62*/ MAZE_CLEAR, /* Cleared Castle maze */
/*0x63*/ TINY_ENTRANCE, /* Ezlo described entrances */
/*0x64*/ CASTLE_BGM, /* Castle intro BGM */
};
} Flags;
#endif

View File

@ -1,6 +1,68 @@
#include "manager.h"
#include "room.h"
#include "object.h"
#include "functions.h"
#include "flags.h"
ASM_FUNC("asm/non_matching/manager21/Manager21_Main.inc", void Manager21_Main())
extern bool32 CheckRectOnScreen(u16, u16, u32, u32);
ASM_FUNC("asm/non_matching/manager21/sub_0805B8CC.inc", void sub_0805B8CC())
typedef struct {
Manager manager;
u32 field_0x20;
} Manager21;
typedef struct {
u16 x;
u16 y;
u16 field_0x4;
u16 actionDelay;
} MinishEntranceSpawnData;
bool32 sub_0805B8CC(u32);
/*
Spawns MINISH_SIZED_ENTRANCE at the locations in the room property this->manager.unk_0a when they are visible on the screen.
*/
void Manager21_Main(Manager21* this) {
MinishEntranceSpawnData* spawnData;
u32 count;
if (this->manager.action == 0) {
this->manager.action = 1;
this->field_0x20 = 0;
}
spawnData = (MinishEntranceSpawnData*)GetCurrentRoomProperty(this->manager.unk_0a);
for (count = 0; (spawnData->x != 0) && (count < 0x20); ++count) {
if (CheckRectOnScreen(spawnData->x, spawnData->y, 4, 4) != 0) {
if (((this->field_0x20 & (1 << count)) == 0) && (sub_0805B8CC(spawnData->field_0x4) != 0)) {
Entity* object = CreateObject(MINISH_SIZED_ENTRANCE, 1, 0);
if (object != NULL) {
object->actionDelay = spawnData->actionDelay;
object->field_0xf = count;
object->x.HALF.HI = gRoomControls.roomOriginX + spawnData->x;
object->y.HALF.HI = gRoomControls.roomOriginY + spawnData->y;
object->parent = (Entity*)this;
sub_08016A30(object);
this->field_0x20 |= 1 << count;
}
}
} else {
this->field_0x20 &= ~(1 << count);
}
spawnData += 1;
}
}
bool32 sub_0805B8CC(u32 param_1) {
if (param_1 == 4) {
return CheckGlobalFlag(TATEKAKE_HOUSE);
}
if (param_1 < 5) {
return TRUE;
}
if (param_1 > 6) {
return TRUE;
}
return FALSE;
}