mirror of
https://github.com/zeldaret/st
synced 2026-06-22 08:35:42 -04:00
0de38e6933
* feat: match ActorProfileUnkFlen and ctor of ActorUnkFlen * feat: add function * feat: decompile function * feat: decompile function @ 020f8118 * feat: use break in each case * feat: almost fully decompiled actor * style: move external variable to top file * feat: update symbols * feat: better match * refactor: rename function and use ActorState over ActorUnkFLENState * style: cleanup code * review --------- Co-authored-by: Yanis002 <35189056+Yanis002@users.noreply.github.com>
101 lines
2.5 KiB
C++
101 lines
2.5 KiB
C++
#include "Actor/ActorUnkFLEN.hpp"
|
|
#include "System/SysNew.hpp"
|
|
|
|
extern "C" u16 data_ov031_02110b90[];
|
|
extern "C" ActorId data_ov031_02110b94[];
|
|
|
|
DECL_PROFILE(ActorProfileUnkFLEN);
|
|
|
|
Actor *ActorProfileUnkFLEN::Create() {
|
|
return new(HeapIndex_2) ActorUnkFLEN();
|
|
}
|
|
|
|
ActorProfileUnkFLEN::ActorProfileUnkFLEN() :
|
|
ActorProfile(ActorId_FLEN) {
|
|
this->mUnk_04.Init(FLOAT_TO_FX32(0.0f));
|
|
}
|
|
|
|
ActorUnkFLEN::ActorUnkFLEN() :
|
|
mUnk_94(0) {}
|
|
|
|
bool ActorUnkFLEN::vfunc_18(int param1) {
|
|
this->mUnk_94 = this->mUnk_5C.mParams[1];
|
|
|
|
if (this->mUnk_5C.mParams[1] >= (s16) 0x2) {
|
|
this->mUnk_94 = 0;
|
|
}
|
|
|
|
if (ActorProfile *profile = data_ov000_020b539c_eur.GetProfileFromId(data_ov031_02110b94[this->mUnk_5C.mParams[0]])) {
|
|
profile->vfunc_08();
|
|
}
|
|
|
|
this->SetState(ActorUnkFLENState_0);
|
|
return true;
|
|
}
|
|
|
|
void ActorUnkFLEN::vfunc_20() {
|
|
this->IsTimerOut();
|
|
|
|
switch (this->mState) {
|
|
case ActorUnkFLENState_0:
|
|
if (!this->func_ov000_02098a60(ActorUnkFLENState_0)) {
|
|
break;
|
|
}
|
|
|
|
this->SetState(ActorUnkFLENState_1);
|
|
break;
|
|
case ActorUnkFLENState_1:
|
|
this->SetState(ActorUnkFLENState_2);
|
|
break;
|
|
case ActorUnkFLENState_2:
|
|
if (!this->func_ov000_02098a60(0x0)) {
|
|
this->SetState(ActorUnkFLENState_0);
|
|
}
|
|
break;
|
|
default:
|
|
break;
|
|
}
|
|
}
|
|
|
|
void ActorUnkFLEN::SetState(ActorUnkFLENState state) {
|
|
this->mState = state;
|
|
|
|
switch (state) {
|
|
case ActorUnkFLENState_0:
|
|
break;
|
|
case ActorUnkFLENState_1:
|
|
this->func_ov031_020f81f8();
|
|
break;
|
|
case ActorUnkFLENState_2:
|
|
if (!this->mUnk_94) {
|
|
this->Kill();
|
|
}
|
|
break;
|
|
default:
|
|
break;
|
|
}
|
|
}
|
|
|
|
bool ActorUnkFLEN::func_ov031_020f81f8() {
|
|
ActorParams actorParams;
|
|
ActorRef actorRef;
|
|
|
|
actorParams.mUnk_28 = 0;
|
|
actorParams.func_ov000_020975f8();
|
|
actorParams.mUnk_28 = this->mRef;
|
|
actorParams.mInitialAngle = this->mAngle;
|
|
|
|
VecFx32_Copy(&this->mPos, &actorParams.mInitialPos);
|
|
actorParams.mInitialPos.y += 0x5000;
|
|
|
|
u16 index = this->mUnk_5C.mParams[0];
|
|
actorParams.mParams[0] = data_ov031_02110b90[index];
|
|
|
|
Actor::func_ov000_020973f4(&actorRef, &data_ov000_020b539c_eur, data_ov031_02110b94[index], &actorParams, 0x0);
|
|
|
|
return actorRef.type_index != 0;
|
|
}
|
|
|
|
ActorUnkFLEN::~ActorUnkFLEN() {}
|
|
ActorProfileUnkFLEN::~ActorProfileUnkFLEN() {}
|