diff --git a/data/status_action.yml b/data/status_action.yml index af4510be..09ae4cc4 100644 --- a/data/status_action.yml +++ b/data/status_action.yml @@ -1245,7 +1245,7 @@ action::ForceSystemFadeOut: action::ForestGiantWakeUp: status: pending action::Fork: - status: pending + status: done action::ForkAddCalcScaleMapUnit: status: pending action::ForkAddLinearImpulse: diff --git a/data/uking_functions.csv b/data/uking_functions.csv index 3b03e7ad..100bfba2 100644 --- a/data/uking_functions.csv +++ b/data/uking_functions.csv @@ -9369,11 +9369,11 @@ 0x00000071001627f0,_ZN5uking6action4ForkD1Ev,20,_ZN5uking6action4ForkD1Ev 0x0000007100162804,_ZN5uking6action4ForkD0Ev,52,_ZN5uking6action4ForkD0Ev 0x0000007100162838,_ZN5uking6action4Fork5init_EPN4sead4HeapE,8,_ZN5uking6action4Fork5init_EPN4sead4HeapE -0x0000007100162840,_ZN5uking6action4Fork6enter_EPN4ksys3act2ai15InlineParamPackE,28, +0x0000007100162840,_ZN5uking6action4Fork6enter_EPN4ksys3act2ai15InlineParamPackE,28,_ZN5uking6action4Fork6enter_EPN4ksys3act2ai15InlineParamPackE 0x000000710016285c,_ZN5uking6action4Fork5calc_Ev,4,_ZN5uking6action4Fork5calc_Ev 0x0000007100162860,_ZN5uking6action4Fork6leave_Ev,4,_ZN5uking6action4Fork6leave_Ev 0x0000007100162864,_ZN5uking6action4Fork11loadParams_Ev,100,_ZN5uking6action4Fork11loadParams_Ev -0x00000071001628c8,sub_71001628C8,52, +0x00000071001628c8,sub_71001628C8,52,_ZN5uking6action4Fork11setEndStateEv 0x00000071001628fc,_ZNK5uking6action4Fork27checkDerivedRuntimeTypeInfoEPKN4sead15RuntimeTypeInfo9InterfaceE,288,_ZNK5uking6action4Fork27checkDerivedRuntimeTypeInfoEPKN4sead15RuntimeTypeInfo9InterfaceE 0x0000007100162a1c,_ZNK5uking6action4Fork18getRuntimeTypeInfoEv,92,_ZNK5uking6action4Fork18getRuntimeTypeInfoEv 0x0000007100162a78,AI_Action_ForkSetJustAvoid::ctor,60, diff --git a/src/Game/AI/Action/actionFork.cpp b/src/Game/AI/Action/actionFork.cpp index d6aa53e2..917eb3fa 100644 --- a/src/Game/AI/Action/actionFork.cpp +++ b/src/Game/AI/Action/actionFork.cpp @@ -11,7 +11,8 @@ bool Fork::init_(sead::Heap* heap) { } void Fork::enter_(ksys::act::ai::InlineParamPack* params) { - ksys::act::ai::Action::enter_(params); + if (*mIsChangeable_s) + mFlags.set(Flag::_4); } void Fork::leave_() { @@ -27,4 +28,18 @@ void Fork::calc_() { ksys::act::ai::Action::calc_(); } +void Fork::setEndState() { + switch (*mEndState_s) { + case 0: + setFinished(); + break; + case 1: + setFailed(); + break; + case 2: + mFlags.set(ksys::act::ai::ActionBase::Flag::_4); + break; + } +} + } // namespace uking::action diff --git a/src/Game/AI/Action/actionFork.h b/src/Game/AI/Action/actionFork.h index ba7e186a..21616aee 100644 --- a/src/Game/AI/Action/actionFork.h +++ b/src/Game/AI/Action/actionFork.h @@ -16,6 +16,8 @@ public: void loadParams_() override; protected: + void setEndState(); + void calc_() override; // static_param at offset 0x20