mirror of
https://github.com/zeldaret/tmc
synced 2026-05-30 00:47:12 -04:00
Decompile manager23
This commit is contained in:
@@ -1,12 +0,0 @@
|
||||
.syntax unified
|
||||
push {lr}
|
||||
ldr r2, _0805BC88 @ =gUnk_08108CCC
|
||||
ldrb r1, [r0, #0xa]
|
||||
lsls r1, r1, #2
|
||||
adds r1, r1, r2
|
||||
ldr r1, [r1]
|
||||
bl _call_via_r1
|
||||
pop {pc}
|
||||
.align 2, 0
|
||||
_0805BC88: .4byte gUnk_08108CCC
|
||||
.syntax divided
|
||||
@@ -1,35 +0,0 @@
|
||||
.syntax unified
|
||||
push {r4, lr}
|
||||
adds r4, r0, #0
|
||||
ldrb r0, [r4, #0xc]
|
||||
cmp r0, #0
|
||||
bne _0805BCAE
|
||||
movs r0, #1
|
||||
strb r0, [r4, #0xc]
|
||||
movs r0, #0x1e
|
||||
strb r0, [r4, #0xf]
|
||||
ldrh r0, [r4, #0x3e]
|
||||
bl CheckFlags
|
||||
cmp r0, #0
|
||||
beq _0805BCAE
|
||||
adds r0, r4, #0
|
||||
bl sub_0805BE94
|
||||
_0805BCAE:
|
||||
ldrh r0, [r4, #0x3e]
|
||||
bl CheckFlags
|
||||
cmp r0, #0
|
||||
beq _0805BCD0
|
||||
ldrb r0, [r4, #0xf]
|
||||
subs r0, #1
|
||||
strb r0, [r4, #0xf]
|
||||
lsls r0, r0, #0x18
|
||||
cmp r0, #0
|
||||
bne _0805BCD0
|
||||
adds r0, r4, #0
|
||||
bl sub_0805BEC4
|
||||
adds r0, r4, #0
|
||||
bl sub_0805BE94
|
||||
_0805BCD0:
|
||||
pop {r4, pc}
|
||||
.align 2, 0
|
||||
.syntax divided
|
||||
@@ -1,68 +0,0 @@
|
||||
.syntax unified
|
||||
push {r4, lr}
|
||||
adds r4, r0, #0
|
||||
ldrb r0, [r4, #0xc]
|
||||
cmp r0, #1
|
||||
beq _0805BD0E
|
||||
cmp r0, #1
|
||||
bgt _0805BCE8
|
||||
cmp r0, #0
|
||||
beq _0805BCEE
|
||||
b _0805BD5A
|
||||
_0805BCE8:
|
||||
cmp r0, #2
|
||||
beq _0805BD38
|
||||
b _0805BD5A
|
||||
_0805BCEE:
|
||||
movs r0, #1
|
||||
strb r0, [r4, #0xc]
|
||||
movs r0, #0x1e
|
||||
strb r0, [r4, #0xf]
|
||||
ldrh r0, [r4, #0x3e]
|
||||
bl CheckFlags
|
||||
cmp r0, #0
|
||||
beq _0805BD5A
|
||||
adds r0, r4, #0
|
||||
movs r1, #0x75
|
||||
bl sub_0805BE70
|
||||
movs r0, #2
|
||||
strb r0, [r4, #0xc]
|
||||
b _0805BD5A
|
||||
_0805BD0E:
|
||||
ldrh r0, [r4, #0x3e]
|
||||
bl CheckFlags
|
||||
cmp r0, #0
|
||||
beq _0805BD5A
|
||||
ldrb r0, [r4, #0xf]
|
||||
subs r0, #1
|
||||
strb r0, [r4, #0xf]
|
||||
lsls r0, r0, #0x18
|
||||
cmp r0, #0
|
||||
bne _0805BD5A
|
||||
movs r0, #0x1e
|
||||
strb r0, [r4, #0xf]
|
||||
adds r0, r4, #0
|
||||
bl sub_0805BEC4
|
||||
adds r0, r4, #0
|
||||
movs r1, #0x76
|
||||
bl sub_0805BE70
|
||||
b _0805BD5A
|
||||
_0805BD38:
|
||||
ldrh r0, [r4, #0x3e]
|
||||
bl CheckFlags
|
||||
cmp r0, #0
|
||||
bne _0805BD5A
|
||||
ldrb r0, [r4, #0xf]
|
||||
subs r0, #1
|
||||
strb r0, [r4, #0xf]
|
||||
lsls r0, r0, #0x18
|
||||
cmp r0, #0
|
||||
bne _0805BD5A
|
||||
movs r0, #0x1e
|
||||
strb r0, [r4, #0xf]
|
||||
adds r0, r4, #0
|
||||
movs r1, #0x75
|
||||
bl sub_0805BE70
|
||||
_0805BD5A:
|
||||
pop {r4, pc}
|
||||
.syntax divided
|
||||
@@ -1,43 +0,0 @@
|
||||
.syntax unified
|
||||
push {r4, lr}
|
||||
adds r4, r0, #0
|
||||
ldrb r0, [r4, #0xc]
|
||||
cmp r0, #0
|
||||
bne _0805BD94
|
||||
ldrh r0, [r4, #0x3e]
|
||||
bl CheckFlags
|
||||
cmp r0, #0
|
||||
beq _0805BD76
|
||||
adds r0, r4, #0
|
||||
bl sub_0805BE94
|
||||
_0805BD76:
|
||||
ldrh r1, [r4, #0x38]
|
||||
lsls r1, r1, #0x10
|
||||
asrs r1, r1, #0x14
|
||||
movs r2, #0x3f
|
||||
ands r1, r2
|
||||
ldrh r0, [r4, #0x3a]
|
||||
lsls r0, r0, #0x10
|
||||
asrs r0, r0, #0x14
|
||||
ands r0, r2
|
||||
lsls r0, r0, #6
|
||||
orrs r1, r0
|
||||
strh r1, [r4, #0x20]
|
||||
movs r0, #1
|
||||
strb r0, [r4, #0xc]
|
||||
b _0805BDB0
|
||||
_0805BD94:
|
||||
ldrh r0, [r4, #0x20]
|
||||
ldrb r1, [r4, #0xb]
|
||||
bl GetTileType
|
||||
cmp r0, #0x76
|
||||
bne _0805BDB0
|
||||
ldrh r0, [r4, #0x3e]
|
||||
bl SetFlag
|
||||
ldrb r0, [r4, #0xe]
|
||||
bl sub_0805308C
|
||||
bl DeleteThisEntity
|
||||
_0805BDB0:
|
||||
pop {r4, pc}
|
||||
.align 2, 0
|
||||
.syntax divided
|
||||
@@ -1,90 +0,0 @@
|
||||
.syntax unified
|
||||
push {r4, lr}
|
||||
adds r4, r0, #0
|
||||
ldrb r0, [r4, #0xc]
|
||||
cmp r0, #0
|
||||
beq _0805BDF4
|
||||
cmp r0, #1
|
||||
beq _0805BE2C
|
||||
ldrh r0, [r4, #0x22]
|
||||
subs r0, #1
|
||||
strh r0, [r4, #0x22]
|
||||
lsls r0, r0, #0x10
|
||||
cmp r0, #0
|
||||
bne _0805BE58
|
||||
movs r1, #0x38
|
||||
ldrsh r0, [r4, r1]
|
||||
movs r2, #0x3a
|
||||
ldrsh r1, [r4, r2]
|
||||
ldrb r2, [r4, #0xb]
|
||||
bl CreateDustAt
|
||||
ldrh r0, [r4, #0x3e]
|
||||
bl ClearFlag
|
||||
ldrh r0, [r4, #0x20]
|
||||
ldrb r1, [r4, #0xb]
|
||||
bl sub_0807BA8C
|
||||
ldrb r0, [r4, #0xe]
|
||||
rsbs r0, r0, #0
|
||||
bl sub_0805308C
|
||||
b _0805BE26
|
||||
_0805BDF4:
|
||||
ldrh r0, [r4, #0x3e]
|
||||
bl CheckFlags
|
||||
cmp r0, #0
|
||||
bne _0805BE08
|
||||
ldrh r0, [r4, #0x3c]
|
||||
bl CheckFlags
|
||||
cmp r0, #0
|
||||
beq _0805BE0E
|
||||
_0805BE08:
|
||||
adds r0, r4, #0
|
||||
bl sub_0805BE94
|
||||
_0805BE0E:
|
||||
ldrh r1, [r4, #0x38]
|
||||
lsls r1, r1, #0x10
|
||||
asrs r1, r1, #0x14
|
||||
movs r2, #0x3f
|
||||
ands r1, r2
|
||||
ldrh r0, [r4, #0x3a]
|
||||
lsls r0, r0, #0x10
|
||||
asrs r0, r0, #0x14
|
||||
ands r0, r2
|
||||
lsls r0, r0, #6
|
||||
orrs r1, r0
|
||||
strh r1, [r4, #0x20]
|
||||
_0805BE26:
|
||||
movs r0, #1
|
||||
strb r0, [r4, #0xc]
|
||||
b _0805BE6C
|
||||
_0805BE2C:
|
||||
ldrh r0, [r4, #0x20]
|
||||
ldrb r1, [r4, #0xb]
|
||||
bl GetTileType
|
||||
cmp r0, #0x76
|
||||
bne _0805BE6C
|
||||
ldrh r0, [r4, #0x3e]
|
||||
bl SetFlag
|
||||
ldrb r0, [r4, #0xe]
|
||||
bl sub_0805308C
|
||||
movs r0, #2
|
||||
strb r0, [r4, #0xc]
|
||||
adds r0, r4, #0
|
||||
adds r0, #0x36
|
||||
ldrb r1, [r0]
|
||||
lsls r0, r1, #4
|
||||
subs r0, r0, r1
|
||||
lsls r0, r0, #2
|
||||
strh r0, [r4, #0x22]
|
||||
b _0805BE6C
|
||||
_0805BE58:
|
||||
ldrh r0, [r4, #0x3c]
|
||||
bl CheckFlags
|
||||
cmp r0, #0
|
||||
beq _0805BE6C
|
||||
adds r0, r4, #0
|
||||
bl sub_0805BEC4
|
||||
bl DeleteThisEntity
|
||||
_0805BE6C:
|
||||
pop {r4, pc}
|
||||
.align 2, 0
|
||||
.syntax divided
|
||||
@@ -1,19 +0,0 @@
|
||||
.syntax unified
|
||||
push {r4, lr}
|
||||
adds r4, r1, #0
|
||||
ldrh r1, [r0, #0x38]
|
||||
lsls r1, r1, #0x10
|
||||
asrs r1, r1, #0x14
|
||||
movs r3, #0x3f
|
||||
ands r1, r3
|
||||
ldrh r2, [r0, #0x3a]
|
||||
lsls r2, r2, #0x10
|
||||
asrs r2, r2, #0x14
|
||||
ands r2, r3
|
||||
lsls r2, r2, #6
|
||||
orrs r1, r2
|
||||
ldrb r2, [r0, #0xb]
|
||||
adds r0, r4, #0
|
||||
bl SetTileType
|
||||
pop {r4, pc}
|
||||
.syntax divided
|
||||
@@ -1,23 +0,0 @@
|
||||
.syntax unified
|
||||
push {r4, lr}
|
||||
adds r4, r0, #0
|
||||
ldrh r1, [r4, #0x38]
|
||||
lsls r1, r1, #0x10
|
||||
asrs r1, r1, #0x14
|
||||
movs r2, #0x3f
|
||||
ands r1, r2
|
||||
ldrh r0, [r4, #0x3a]
|
||||
lsls r0, r0, #0x10
|
||||
asrs r0, r0, #0x14
|
||||
ands r0, r2
|
||||
lsls r0, r0, #6
|
||||
orrs r1, r0
|
||||
ldrb r2, [r4, #0xb]
|
||||
movs r0, #0x76
|
||||
bl SetTileType
|
||||
ldrb r0, [r4, #0xe]
|
||||
bl sub_0805308C
|
||||
bl DeleteThisEntity
|
||||
pop {r4, pc}
|
||||
.align 2, 0
|
||||
.syntax divided
|
||||
@@ -1,43 +0,0 @@
|
||||
.syntax unified
|
||||
push {r4, lr}
|
||||
adds r4, r0, #0
|
||||
movs r0, #0x2a
|
||||
movs r1, #1
|
||||
movs r2, #0
|
||||
bl CreateObject
|
||||
adds r2, r0, #0
|
||||
cmp r2, #0
|
||||
beq _0805BF10
|
||||
ldrb r1, [r2, #0x11]
|
||||
movs r0, #0x10
|
||||
rsbs r0, r0, #0
|
||||
ands r0, r1
|
||||
movs r1, #3
|
||||
orrs r0, r1
|
||||
strb r0, [r2, #0x11]
|
||||
ldr r1, _0805BF14 @ =gRoomControls
|
||||
ldrh r0, [r1, #6]
|
||||
ldrh r3, [r4, #0x38]
|
||||
adds r0, r0, r3
|
||||
strh r0, [r2, #0x2e]
|
||||
ldrh r0, [r1, #8]
|
||||
ldrh r1, [r4, #0x3a]
|
||||
adds r0, r0, r1
|
||||
strh r0, [r2, #0x32]
|
||||
ldrb r1, [r4, #0xb]
|
||||
adds r0, r2, #0
|
||||
adds r0, #0x38
|
||||
strb r1, [r0]
|
||||
adds r2, #0x29
|
||||
ldrb r1, [r2]
|
||||
movs r0, #8
|
||||
rsbs r0, r0, #0
|
||||
ands r0, r1
|
||||
movs r1, #2
|
||||
orrs r0, r1
|
||||
strb r0, [r2]
|
||||
_0805BF10:
|
||||
pop {r4, pc}
|
||||
.align 2, 0
|
||||
_0805BF14: .4byte gRoomControls
|
||||
.syntax divided
|
||||
+2
-1
@@ -32,7 +32,8 @@ typedef struct {
|
||||
u16 _22;
|
||||
u16 _24;
|
||||
u16 _26;
|
||||
u8 _28[0x4];
|
||||
u16 _28;
|
||||
u8 _2a[0x2];
|
||||
void* _2c;
|
||||
u8 _30[0x20];
|
||||
WStruct _50;
|
||||
|
||||
+151
-8
@@ -1,18 +1,161 @@
|
||||
|
||||
#include "manager.h"
|
||||
#include "room.h"
|
||||
#include "functions.h"
|
||||
#include "flags.h"
|
||||
#include "object.h"
|
||||
|
||||
ASM_FUNC("asm/non_matching/manager23/Manager23_Main.inc", void Manager23_Main())
|
||||
extern void (*const gUnk_08108CCC[])(Manager*);
|
||||
|
||||
ASM_FUNC("asm/non_matching/manager23/sub_0805BC8C.inc", void sub_0805BC8C())
|
||||
typedef struct {
|
||||
Manager manager;
|
||||
u16 field_0x20;
|
||||
u16 field_0x22;
|
||||
u8 field_0x24[0x12];
|
||||
u8 field_0x36;
|
||||
u8 field_0x37;
|
||||
u16 field_0x38;
|
||||
u16 field_0x3a;
|
||||
u16 field_0x3c;
|
||||
u16 field_0x3e;
|
||||
} Manager23;
|
||||
|
||||
ASM_FUNC("asm/non_matching/manager23/sub_0805BCD4.inc", void sub_0805BCD4())
|
||||
void sub_0805BE94(Manager23*);
|
||||
void sub_0805BEC4(Manager23*);
|
||||
|
||||
ASM_FUNC("asm/non_matching/manager23/sub_0805BD5C.inc", void sub_0805BD5C())
|
||||
void sub_0805BE70(Manager23*, u32);
|
||||
|
||||
ASM_FUNC("asm/non_matching/manager23/sub_0805BDB4.inc", void sub_0805BDB4())
|
||||
extern void CreateDustAt(s32, s32, u32);
|
||||
|
||||
ASM_FUNC("asm/non_matching/manager23/sub_0805BE70.inc", void sub_0805BE70())
|
||||
void Manager23_Main(Manager* this) {
|
||||
gUnk_08108CCC[this->unk_0a](this);
|
||||
}
|
||||
|
||||
ASM_FUNC("asm/non_matching/manager23/sub_0805BE94.inc", void sub_0805BE94())
|
||||
void sub_0805BC8C(Manager23* this) {
|
||||
if (this->manager.action == 0) {
|
||||
this->manager.action = 1;
|
||||
this->manager.unk_0f = 0x1e;
|
||||
if (CheckFlags(this->field_0x3e) != 0) {
|
||||
sub_0805BE94(this);
|
||||
}
|
||||
}
|
||||
if ((CheckFlags(this->field_0x3e) != 0) && (--this->manager.unk_0f == 0)) {
|
||||
sub_0805BEC4(this);
|
||||
sub_0805BE94(this);
|
||||
}
|
||||
}
|
||||
|
||||
ASM_FUNC("asm/non_matching/manager23/sub_0805BEC4.inc", void sub_0805BEC4())
|
||||
void sub_0805BCD4(Manager23* this) {
|
||||
switch(this->manager.action) {
|
||||
case 0:
|
||||
this->manager.action = 1;
|
||||
this->manager.unk_0f = 0x1e;
|
||||
if (CheckFlags(this->field_0x3e) != 0) {
|
||||
sub_0805BE70(this, 0x75);
|
||||
this->manager.action = 2;
|
||||
}
|
||||
break;
|
||||
case 1:
|
||||
if (CheckFlags(this->field_0x3e) != 0 && --this->manager.unk_0f == 0) {
|
||||
this->manager.unk_0f = 0x1e;
|
||||
sub_0805BEC4(this);
|
||||
sub_0805BE70(this, 0x76);
|
||||
}
|
||||
break;
|
||||
case 2:
|
||||
if (CheckFlags(this->field_0x3e) == 0 && --this->manager.unk_0f == 0) {
|
||||
this->manager.unk_0f = 0x1e;
|
||||
sub_0805BE70(this, 0x75);
|
||||
}
|
||||
break;
|
||||
}
|
||||
}
|
||||
|
||||
void sub_0805BD5C(Manager23* this) {
|
||||
if (this->manager.action == 0) {
|
||||
if (CheckFlags(this->field_0x3e) != 0) {
|
||||
sub_0805BE94(this);
|
||||
}
|
||||
this->field_0x20 = ((s16)this->field_0x38 >> 4 & 0x3fU) |
|
||||
((s32)((this->field_0x3a << 0x10) >> 0x14 & 0x3fU) << 6);
|
||||
this->manager.action = 1;
|
||||
} else {
|
||||
if (GetTileType(this->field_0x20, this->manager.unk_0b) == 0x76) {
|
||||
SetFlag(this->field_0x3e);
|
||||
sub_0805308C(this->manager.unk_0e);
|
||||
DeleteThisEntity();
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
void sub_0805BDB4(Manager23* this) {
|
||||
u8 bVar1;
|
||||
u16 uVar2;
|
||||
u32 uVar3;
|
||||
|
||||
switch (this->manager.action) {
|
||||
case 0:
|
||||
if (CheckFlags(this->field_0x3e) != 0 || CheckFlags(this->field_0x3c) != 0) {
|
||||
sub_0805BE94(this);
|
||||
}
|
||||
this->field_0x20 = ((s16)this->field_0x38 >> 4 & 0x3fU) |
|
||||
(((s32)(this->field_0x3a << 0x10) >> 0x14 & 0x3fU) << 6);
|
||||
this->manager.action = 1;
|
||||
break;
|
||||
|
||||
case 1:
|
||||
if (GetTileType(this->field_0x20, this->manager.unk_0b) != 0x76) {
|
||||
return;
|
||||
}
|
||||
SetFlag(this->field_0x3e);
|
||||
sub_0805308C(this->manager.unk_0e);
|
||||
this->manager.action = 2;
|
||||
this->field_0x22 = this->field_0x36 * 0x3c;
|
||||
return;
|
||||
break;
|
||||
|
||||
default:
|
||||
if (--this->field_0x22 == 0) {
|
||||
CreateDustAt(*(s16*)&this->field_0x38, *(s16*)&this->field_0x3a, this->manager.unk_0b);
|
||||
ClearFlag(this->field_0x3e);
|
||||
sub_0807BA8C(this->field_0x20, this->manager.unk_0b);
|
||||
sub_0805308C(-this->manager.unk_0e);
|
||||
this->manager.action = 1;
|
||||
} else {
|
||||
if (CheckFlags(this->field_0x3c) == 0) {
|
||||
return;
|
||||
}
|
||||
sub_0805BEC4(this);
|
||||
DeleteThisEntity();
|
||||
}
|
||||
break;
|
||||
}
|
||||
}
|
||||
|
||||
void sub_0805BE70(Manager23* this, u32 param_2) {
|
||||
SetTileType(param_2,
|
||||
((this->field_0x38 << 0x10) >> 0x14 & 0x3fU) |
|
||||
((this->field_0x3a << 0x10) >> 0x14 & 0x3fU) << 6,
|
||||
this->manager.unk_0b);
|
||||
}
|
||||
|
||||
void sub_0805BE94(Manager23* this) {
|
||||
SetTileType(0x76,
|
||||
((this->field_0x38 << 0x10) >> 0x14 & 0x3fU) |
|
||||
((this->field_0x3a << 0x10) >> 0x14 & 0x3fU) << 6,
|
||||
this->manager.unk_0b);
|
||||
sub_0805308C(this->manager.unk_0e);
|
||||
DeleteThisEntity();
|
||||
}
|
||||
|
||||
void sub_0805BEC4(Manager23* this) {
|
||||
Entity* object = CreateObject(OBJECT_2A, 1, 0);
|
||||
if (object != NULL) {
|
||||
*(s8*)(&object->flags+1) = ((*(s8*)(&object->flags+1)) & (-0x10)) | 3;
|
||||
object->x.HALF.HI = this->field_0x38 + gRoomControls.roomOriginX;
|
||||
object->y.HALF.HI = this->field_0x3a + gRoomControls.roomOriginY;
|
||||
object->collisionLayer = this->manager.unk_0b;
|
||||
object->spritePriority.b0 = 2;
|
||||
}
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user