managerA.c ok

This commit is contained in:
Ibot02 2020-08-09 12:13:02 +02:00
parent b3dc734ad8
commit a609afcf83
4 changed files with 144 additions and 245 deletions

View File

@ -1,235 +0,0 @@
.include "asm/macros.inc"
.include "constants/constants.inc"
.syntax unified
.text
thumb_func_start sub_08058408
sub_08058408: @ 0x08058408
push {r4, r5, r6, lr}
adds r4, r0, #0
ldr r6, _0805843C @ =gLinkState
ldr r5, [r6, #0x30]
movs r0, #8
ands r5, r0
cmp r5, #0
bne _08058488
ldrh r0, [r4, #0x20]
ldrh r1, [r4, #0x22]
ldrh r2, [r4, #0x24]
ldrh r3, [r4, #0x26]
bl CheckPlayerInRegion
cmp r0, #0
beq _08058488
ldrb r0, [r4, #0xa]
cmp r0, #1
beq _08058488
cmp r0, #1
ble _08058450
cmp r0, #2
beq _08058440
cmp r0, #3
beq _0805847C
b _08058450
.align 2, 0
_0805843C: .4byte gLinkState
_08058440:
adds r0, r4, #0
bl sub_080585DC
ldr r0, [r6, #0x30]
movs r1, #0x80
ands r0, r1
cmp r0, #0
beq _08058488
_08058450:
adds r0, r4, #0
bl sub_080585DC
adds r0, r4, #0
bl sub_0805848C
cmp r0, #0
beq _08058488
movs r0, #3
bl sub_08078A90
bl sub_08078B48
bl sub_0805E544
movs r0, #0
movs r1, #3
strb r1, [r4, #0xc]
strb r0, [r4, #0xd]
movs r0, #0x1e
strb r0, [r4, #0xe]
b _08058488
_0805847C:
movs r0, #4
strb r0, [r4, #0xc]
strb r5, [r4, #0xd]
ldrh r0, [r4, #0x36]
bl sub_080186C0
_08058488:
pop {r4, r5, r6, pc}
.align 2, 0
thumb_func_start sub_0805848C
sub_0805848C: @ 0x0805848C
push {lr}
ldr r0, _080584A4 @ =gLinkState
adds r0, #0xa8
ldrb r0, [r0]
subs r0, #5
cmp r0, #0x17
bhi _08058510
lsls r0, r0, #2
ldr r1, _080584A8 @ =_080584AC
adds r0, r0, r1
ldr r0, [r0]
mov pc, r0
.align 2, 0
_080584A4: .4byte gLinkState
_080584A8: .4byte _080584AC
_080584AC: @ jump table
.4byte _0805850C @ case 0
.4byte _08058510 @ case 1
.4byte _0805850C @ case 2
.4byte _0805850C @ case 3
.4byte _08058510 @ case 4
.4byte _0805850C @ case 5
.4byte _0805850C @ case 6
.4byte _0805850C @ case 7
.4byte _0805850C @ case 8
.4byte _0805850C @ case 9
.4byte _0805850C @ case 10
.4byte _0805850C @ case 11
.4byte _0805850C @ case 12
.4byte _0805850C @ case 13
.4byte _0805850C @ case 14
.4byte _0805850C @ case 15
.4byte _0805850C @ case 16
.4byte _0805850C @ case 17
.4byte _0805850C @ case 18
.4byte _0805850C @ case 19
.4byte _08058510 @ case 20
.4byte _08058510 @ case 21
.4byte _0805850C @ case 22
.4byte _0805850C @ case 23
_0805850C:
movs r0, #0
b _08058512
_08058510:
movs r0, #1
_08058512:
pop {pc}
thumb_func_start sub_08058514
sub_08058514: @ 0x08058514
push {r4, lr}
adds r4, r0, #0
ldrb r0, [r4, #0xd]
cmp r0, #1
beq _08058532
cmp r0, #1
bgt _08058528
cmp r0, #0
beq _08058570
b _080585A6
_08058528:
cmp r0, #2
beq _08058570
cmp r0, #3
beq _08058584
b _080585A6
_08058532:
ldr r2, _08058564 @ =gLinkState
ldr r0, [r2, #0x30]
ldr r1, _08058568 @ =0x00001235
ands r0, r1
cmp r0, #0
bne _080585A6
ldr r0, _0805856C @ =gLinkEntity
movs r1, #0x36
ldrsh r0, [r0, r1]
cmp r0, #0
bne _080585A6
strb r0, [r2, #2]
ldrh r0, [r4, #0x36]
adds r1, r4, #0
adds r1, #0x35
ldrb r1, [r1]
bl sub_08078AA8
ldrb r0, [r4, #0xd]
adds r0, #1
strb r0, [r4, #0xd]
movs r0, #0x1e
strb r0, [r4, #0xe]
b _080585A6
.align 2, 0
_08058564: .4byte gLinkState
_08058568: .4byte 0x00001235
_0805856C: .4byte gLinkEntity
_08058570:
ldrb r0, [r4, #0xe]
subs r0, #1
strb r0, [r4, #0xe]
lsls r0, r0, #0x18
cmp r0, #0
bne _080585A6
ldrb r0, [r4, #0xd]
adds r0, #1
strb r0, [r4, #0xd]
b _080585A6
_08058584:
ldr r0, _080585A8 @ =gLinkEntity
ldrb r0, [r0, #0xc]
cmp r0, #1
beq _08058590
cmp r0, #9
bne _080585A6
_08058590:
ldr r0, _080585AC @ =gLinkState
adds r0, #0x8b
movs r1, #1
strb r1, [r0]
bl UnfreezeTime
ldrh r0, [r4, #0x3c]
bl SetFlag
bl DeleteThisEntity
_080585A6:
pop {r4, pc}
.align 2, 0
_080585A8: .4byte gLinkEntity
_080585AC: .4byte gLinkState
thumb_func_start sub_080585B0
sub_080585B0: @ 0x080585B0
push {r4, lr}
adds r4, r0, #0
ldr r0, _080585D8 @ =gArea
adds r0, #0x28
ldrb r0, [r0]
cmp r0, #0xff
beq _080585C2
bl DeleteThisEntity
_080585C2:
ldrh r0, [r4, #0x3c]
bl CheckFlags
cmp r0, #0
beq _080585D4
bl sub_0801855C
bl DeleteThisEntity
_080585D4:
pop {r4, pc}
.align 2, 0
_080585D8: .4byte gArea
thumb_func_start sub_080585DC
sub_080585DC: @ 0x080585DC
push {lr}
ldrh r0, [r0, #0x3c]
bl CheckFlags
cmp r0, #0
beq _080585EC
bl DeleteThisEntity
_080585EC:
pop {pc}
.align 2, 0

View File

@ -4,14 +4,20 @@
#include "global.h"
typedef struct {
u8 unk_00[0x0c];
u8 unk_00[0x0a];
u8 unk_0a;
u8 unk_0b;
u8 unk_0c;
u8 unk_0d[0x13];
u8 unk_0d;
u8 unk_0e;
u8 unk_0f[0x11];
u16 unk_20;
u16 unk_22;
u16 unk_24;
u16 unk_26;
u8 unk_28[0x10];
u8 unk_28[0x0D];
u8 unk_35;
u16 unk_36;
u8 unk_38;
u8 unk_39;
u8 unk_3a;

View File

@ -477,7 +477,6 @@ SECTIONS {
asm/manager8.o(.text);
asm/manager9.o(.text);
src/manager/managerA.o(.text);
asm/managerA.o(.text);
asm/managerB.o(.text);
asm/managerC.o(.text);
asm/managerD.o(.text);

View File

@ -1,15 +1,19 @@
#include "global.h"
#include "entity.h"
#include "link.h"
#include "manager.h"
#include "flags.h"
#include "area.h"
extern void (*gUnk_081081F4[])(Entity*);
void sub_08058380(Entity* this) {
gUnk_081081F4[this->action](this);
extern void (*gUnk_081081F4[])(Manager*);
void sub_08058380(Manager* this) {
gUnk_081081F4[this->unk_0c](this);
}
extern u32 CheckFlags(u32);
extern void DeleteThisEntity();
extern void sub_0805E3A0(Manager*, u32);
void sub_08058398(Manager* this) {
@ -29,7 +33,8 @@ void sub_08058398(Manager* this) {
}
}
extern void sub_08058408(Manager* this);
void sub_08058408(Manager*);
void sub_080583EC(Manager* this) {
if (CheckFlags(this->unk_3e) != 0) {
@ -37,3 +42,127 @@ void sub_080583EC(Manager* this) {
sub_08058408(this);
}
}
extern u32 CheckPlayerInRegion(u32, u32, u32, u32);
extern void sub_0805E544(void);
extern void sub_08078A90(u32);
extern void sub_08078AA8(u32, u32);
extern void sub_080186C0(u16);
extern void sub_08078B48(void);
u32 sub_0805848C(Manager*);
void sub_080585DC(Manager*);
void sub_08058408(Manager* this){
u32 tmp2;
tmp2 = (gLinkState.flags.all & 0x08);
if (tmp2 != 0) return;
if (!CheckPlayerInRegion(this->unk_20, this->unk_22, this->unk_24, this->unk_26)) return;
switch (this->unk_0a) {
case 1:
return;
case 2:
sub_080585DC(this);
if ((gLinkState.flags.all & 0x80) == 0) return;
case 0:
default:
sub_080585DC(this);
if (sub_0805848C(this) == 0) return;
sub_08078A90(3);
sub_08078B48();
sub_0805E544();
this->unk_0c = 3;
this->unk_0d = 0;
this->unk_0e = 0x1e;
return;
case 3:
this->unk_0c = 4;
this->unk_0d = tmp2;
sub_080186C0(this->unk_36);
return;
}
}
u32 sub_0805848C(Manager* this) {
switch (gLinkState.field_0xa8[0]-5) {
case 0:
case 2:
case 3:
case 5:
case 6:
case 7:
case 8:
case 9:
case 10:
case 11:
case 12:
case 13:
case 14:
case 15:
case 16:
case 17:
case 18:
case 19:
case 22:
case 23:
return 0;
case 1:
case 4:
case 20:
case 21:
default:
return 1;
}
}
extern void UnfreezeTime(void);
void sub_08058514(Manager* this) {
switch (this->unk_0d) {
case 1:
if ((gLinkState.flags.all & 0x1235) != 0)
return;
if (gLinkEntity.height.HALF.HI != 0)
return;
gLinkState.jumpStatus = 0;
sub_08078AA8(this->unk_36, this->unk_35);
this->unk_0d++;
this->unk_0e = 0x1E;
return;
case 0:
case 2:
if (((--this->unk_0e)<<0x18) == 0) {
this->unk_0d++;
}
return;
case 3:
if (gLinkEntity.action != 1 && gLinkEntity.action != 9) return;
gLinkState.field_0x8b = 1;
UnfreezeTime();
SetFlag(this->unk_3c);
DeleteThisEntity();
return;
default:
return;
}
}
extern void sub_0801855C(void);
void sub_080585B0(Manager* this) {
if (gArea.filler4[0] != 0xFF) {
DeleteThisEntity();
}
if (CheckFlags(this->unk_3c)) {
sub_0801855C();
DeleteThisEntity();
}
}
void sub_080585DC(Manager* this) {
if (CheckFlags(this->unk_3c)) {
DeleteThisEntity();
}
}