Files
tmc/src/manager/manager2E.c
T
2021-10-05 17:24:13 +02:00

112 lines
2.7 KiB
C

#include "global.h"
#include "entity.h"
#include "manager.h"
#include "flags.h"
#include "functions.h"
#include "audio.h"
typedef struct {
Manager manager;
u8 field_0x20[0x18];
s16 field_0x38;
u8 field_0x3a;
u8 field_0x3b;
u16 field_0x3c;
u16 field_0x3e;
} Manager2E;
extern void (*const gUnk_08108D3C[])(Manager2E*);
extern void (*const gUnk_08108D44[])(Manager2E*);
void sub_0805D2F4(Manager2E*);
extern void (*const gUnk_08108D50[])(Manager2E*);
void Manager2E_Main(Manager2E* this) {
gUnk_08108D3C[this->manager.unk_0a](this);
}
void sub_0805D268(Manager2E* this) {
gUnk_08108D44[this->manager.action](this);
}
void sub_0805D280(Manager2E* this) {
if (CheckFlags(this->field_0x3c) != 0) {
DeleteThisEntity();
}
if (CheckFlags(this->field_0x3e) != 0) {
SetFlag(this->field_0x3c);
DeleteThisEntity();
}
this->manager.action = 1;
if (this->manager.unk_0e == 0) {
this->manager.unk_0e = 0x1e;
}
sub_0805E3A0(this, 6);
}
void sub_0805D2C0(Manager2E* this) {
if ((CheckFlags(this->field_0x3e) != 0) && (gUnk_03003DC0.unk_0xc < 2)) {
this->manager.action = 2;
if (this->manager.unk_0e == 1) {
sub_0805D2F4(this);
}
sub_0805E4E0((Entity*)this, this->manager.unk_0e);
}
}
void sub_0805D2F4(Manager2E* this) {
if (gUnk_03003DC0.unk_0xc == 0) {
if (this->field_0x38 != SFX_NONE) {
SoundReq(this->field_0x38);
} else {
SoundReq(SFX_SECRET);
}
if (this->field_0x3c != 0) {
SetFlag(this->field_0x3c);
}
DeleteThisEntity();
}
}
void sub_0805D32C(Manager2E* this) {
gUnk_08108D50[this->manager.action](this);
}
void sub_0805D344(Manager2E* this) {
CheckFlags(this->field_0x3e);
this->manager.action = 1;
if (this->manager.unk_0e == 0) {
this->manager.unk_0e = 0x1e;
}
this->manager.unk_0f = this->manager.unk_0e;
sub_0805E3A0(this, 6);
}
void sub_0805D36C(Manager2E* this) {
if (CheckFlags(this->field_0x3e) != 0) {
this->manager.action = 2;
this->manager.unk_0e = this->manager.unk_0f;
}
}
void sub_0805D384(Manager2E* this) {
if (this->manager.unk_0e != 0) {
if (--this->manager.unk_0e == 0) {
Sound sound;
if (this->field_0x38 != SFX_NONE) {
sound = this->field_0x38;
} else {
sound = SFX_SECRET;
}
SoundReq(sound);
SetFlag(this->field_0x3c);
}
} else {
if (CheckFlags(this->field_0x3e) == 0) {
this->manager.action = 1;
ClearFlag(this->field_0x3c);
}
}
}