mirror of https://github.com/zeldaret/tmc.git
Decompile manager21
This commit is contained in:
parent
1b122a05b6
commit
9147fa8272
|
|
@ -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
|
||||
|
|
@ -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
|
||||
|
|
@ -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
|
||||
|
|
|
|||
|
|
@ -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;
|
||||
}
|
||||
|
|
|
|||
Loading…
Reference in New Issue