mirror of
https://github.com/zeldaret/tmc
synced 2026-05-30 08:56:48 -04:00
112 lines
2.7 KiB
C
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);
|
|
}
|
|
}
|
|
}
|