Decompile manager2C

This commit is contained in:
octorock 2021-08-28 13:33:13 +02:00
parent 568a033f42
commit 18168cd2a9
4 changed files with 37 additions and 78 deletions

View File

@ -1,76 +0,0 @@
.include "asm/macros.inc"
.include "constants/constants.inc"
.syntax unified
.text
thumb_func_start Manager2C_Main
Manager2C_Main: @ 0x0805D174
push {r4, r5, lr}
adds r5, r0, #0
ldrb r1, [r5, #0xc]
cmp r1, #0
bne _0805D184
movs r0, #1
strb r0, [r5, #0xc]
strh r1, [r5, #0x3a]
_0805D184:
movs r1, #0x38
ldrsh r0, [r5, r1]
movs r2, #0x3a
ldrsh r1, [r5, r2]
movs r2, #0x14
movs r3, #0x40
bl CheckPlayerInRegion
cmp r0, #0
beq _0805D1EE
ldr r0, _0805D1F0 @ =gPlayerEntity
movs r4, #0x32
ldrsh r1, [r0, r4]
ldr r3, _0805D1F4 @ =gRoomControls
ldrh r2, [r3, #8]
subs r1, r1, r2
movs r4, #0x36
ldrsh r0, [r0, r4]
adds r1, r1, r0
cmp r1, #0
bge _0805D1EE
movs r1, #0xc
ldrsh r0, [r3, r1]
cmp r0, r2
bne _0805D1EE
ldr r4, _0805D1F8 @ =gUnk_030010AC
adds r0, r4, #0
movs r1, #0x20
bl MemClear
subs r4, #0xc
movs r1, #0
movs r0, #1
strb r0, [r4, #8]
strb r1, [r4, #9]
movs r0, #0xb
strb r0, [r4, #0xf]
ldrb r0, [r5, #0xb]
strb r0, [r4, #0xc]
ldrb r0, [r5, #0xe]
strb r0, [r4, #0xd]
adds r0, r5, #0
adds r0, #0x37
ldrb r0, [r0]
strb r0, [r4, #0xe]
ldrh r0, [r5, #0x3c]
strh r0, [r4, #0x10]
ldrh r0, [r5, #0x3e]
strh r0, [r4, #0x12]
adds r0, r5, #0
adds r0, #0x36
ldrb r0, [r0]
strb r0, [r4, #0x14]
_0805D1EE:
pop {r4, r5, pc}
.align 2, 0
_0805D1F0: .4byte gPlayerEntity
_0805D1F4: .4byte gRoomControls
_0805D1F8: .4byte gUnk_030010AC

View File

@ -183,7 +183,7 @@ extern void Manager28_Main();
extern void Manager29_Main(Entity*);
extern void Manager2A_Main(Manager*);
extern void Manager2B_Main(Entity*);
extern void Manager2C_Main(Entity*);
extern void Manager2C_Main();
extern void Manager2D_Main(Entity*);
extern void Manager2E_Main();
extern void Manager2F_Main();

View File

@ -544,7 +544,7 @@ SECTIONS {
asm/manager29.o(.text);
src/manager/manager2A.o(.text);
asm/manager2B.o(.text);
asm/manager2C.o(.text);
src/manager/manager2C.o(.text);
src/manager/manager2D.o(.text);
src/manager/manager2E.o(.text);
asm/manager2E.o(.text);

35
src/manager/manager2C.c Normal file
View File

@ -0,0 +1,35 @@
#include "manager.h"
#include "functions.h"
#include "utils.h"
typedef struct {
struct Manager manager;
u8 field_0x20[0x16];
u8 field_0x36;
u8 field_0x37;
s16 field_0x38;
s16 field_0x3a;
u16 field_0x3c;
u16 field_0x3e;
} Manager2C;
void Manager2C_Main(Manager2C* manager) {
if (manager->manager.action == 0) {
manager->manager.action = 1;
manager->field_0x3a = 0;
}
if (((CheckPlayerInRegion(manager->field_0x38, manager->field_0x3a, 0x14, 0x40) != 0) &&
(((gPlayerEntity.y.HALF.HI - gRoomControls.roomOriginY) +gPlayerEntity.height.HALF.HI) < 0)) &&
(gRoomControls.roomScrollY == gRoomControls.roomOriginY)) {
MemClear(&gScreenTransition.areaID, 0x20);
gScreenTransition.transitioningOut = 1;
gScreenTransition.transitionType = 0;
gScreenTransition.field_0xf = 0xb;
gScreenTransition.areaID = manager->manager.unk_0b;
gScreenTransition.roomID = manager->manager.unk_0e;
gScreenTransition.playerState = manager->field_0x37;
gScreenTransition.playerStartPos.HALF.x = manager->field_0x3c;
gScreenTransition.playerStartPos.HALF.y = manager->field_0x3e;
gScreenTransition.playerLayer = manager->field_0x36;
}
}