From 1e4f1902c05abbe57932f27e7469e91c74812ce9 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?L=C3=A9o=20Lam?= Date: Fri, 12 Mar 2021 01:17:24 +0100 Subject: [PATCH] ksys/act: Fix pre-delete function signature Tiny differences you only notice when doing matching decomp. --- data/uking_functions.csv | 6 +++--- src/KingSystem/ActorSystem/actBaseProc.cpp | 12 ++++++------ src/KingSystem/ActorSystem/actBaseProc.h | 13 +++++++++---- 3 files changed, 18 insertions(+), 13 deletions(-) diff --git a/data/uking_functions.csv b/data/uking_functions.csv index b398c134..117f8bb3 100644 --- a/data/uking_functions.csv +++ b/data/uking_functions.csv @@ -116,7 +116,7 @@ 0x0000007100001690,Armor::m1,36, 0x00000071000016b4,Armor::m2,8, 0x00000071000016bc,Armor::m3,92, -0x0000007100001718,ActorBase::preDelete2,4,_ZN4ksys3act8BaseProc11preDelete2_EPb +0x0000007100001718,ActorBase::preDelete2,4,_ZN4ksys3act8BaseProc11preDelete2_ERKNS1_12PreDeleteArgE 0x000000710000171c,ArmorBase::m31,4, 0x0000007100001720,Actor::m36,56, 0x0000007100001758,Actor::m48,8, @@ -73639,7 +73639,7 @@ 0x0000007100d39f7c,ActorBase::shouldClearStateFlag4000,8,_ZN4ksys3act8BaseProc25shouldClearStateFlag4000_Ev 0x0000007100d39f84,ActorBase::onEnterDelete,4,_ZN4ksys3act8BaseProc14onEnterDelete_Ev 0x0000007100d39f88,ActorBase::onEnterSleep,4,_ZN4ksys3act8BaseProc13onEnterSleep_Ev -0x0000007100d39f8c,ActorBase::preDelete3,4,_ZN4ksys3act8BaseProc11preDelete3_EPb +0x0000007100d39f8c,ActorBase::preDelete3,4,_ZN4ksys3act8BaseProc11preDelete3_ERKNS1_12PreDeleteArgE 0x0000007100d39f90,ActorBase::preDelete1,4,_ZN4ksys3act8BaseProc11preDelete1_Ev 0x0000007100d39f94,ActorBase::prePushJob1,4,_ZN4ksys3act8BaseProc11onJobPush1_ENS0_7JobTypeE 0x0000007100d39f98,j__ZdlPv_844,4, @@ -91707,7 +91707,7 @@ 0x00000071011bab34,ActorBase::acquire,196,_ZN4ksys3act8BaseProc7acquireERNS0_24ActorLinkConstDataAccessE 0x00000071011babf8,ActorBase::release,36,_ZN4ksys3act8BaseProc7releaseEv 0x00000071011bac1c,ActorBase::doDelete,244,_ZN4ksys3act8BaseProc12startDelete_Ev -0x00000071011bad10,ActorBase::preDelete,164,_ZN4ksys3act8BaseProc11doPreDeleteEPb +0x00000071011bad10,ActorBase::preDelete,164,_ZN4ksys3act8BaseProc11doPreDeleteERKNS1_12PreDeleteArgE 0x00000071011badb4,ActorBase::setJobPriority,288,_ZN4ksys3act8BaseProc14setJobPriorityEhNS0_7JobTypeE 0x00000071011baed4,ActorBase::setJobPriority2,288,_ZN4ksys3act8BaseProc15setJobPriority2EhNS0_7JobTypeE 0x00000071011baff4,ActorBase::sleep,308,_ZN4ksys3act8BaseProc5sleepENS1_15SleepWakeReasonE diff --git a/src/KingSystem/ActorSystem/actBaseProc.cpp b/src/KingSystem/ActorSystem/actBaseProc.cpp index 6e1bea55..4342a9d9 100644 --- a/src/KingSystem/ActorSystem/actBaseProc.cpp +++ b/src/KingSystem/ActorSystem/actBaseProc.cpp @@ -189,7 +189,7 @@ void BaseProc::onEnterDelete_() {} void BaseProc::onEnterSleep_() {} -void BaseProc::preDelete3_(bool*) {} +void BaseProc::preDelete3_(const PreDeleteArg& arg) {} bool BaseProc::prepareInit_(sead::Heap*, BaseProc::PrepareArg&) { return true; @@ -197,7 +197,7 @@ bool BaseProc::prepareInit_(sead::Heap*, BaseProc::PrepareArg&) { void BaseProc::onPreDeleteStart_(PrepareArg&) {} -void BaseProc::preDelete2_(bool*) {} +void BaseProc::preDelete2_(const PreDeleteArg& arg) {} void BaseProc::preDelete1_() {} @@ -475,12 +475,12 @@ void BaseProc::freeLinkData() { BaseProcLinkDataMgr::instance()->releaseLink(this); } -void BaseProc::doPreDelete(bool* do_not_destruct_immediately) { +void BaseProc::doPreDelete(const PreDeleteArg& arg) { preDelete1_(); - preDelete2_(do_not_destruct_immediately); - preDelete3_(do_not_destruct_immediately); + preDelete2_(arg); + preDelete3_(arg); - if (*do_not_destruct_immediately) + if (arg.do_not_destruct_immediately) return; mFlags.set(Flags::Destructed); diff --git a/src/KingSystem/ActorSystem/actBaseProc.h b/src/KingSystem/ActorSystem/actBaseProc.h index ae81149c..34847d13 100644 --- a/src/KingSystem/ActorSystem/actBaseProc.h +++ b/src/KingSystem/ActorSystem/actBaseProc.h @@ -69,6 +69,10 @@ public: }; KSYS_CHECK_SIZE_NX150(CreateArg, 0x28); + struct PreDeleteArg { + bool do_not_destruct_immediately = false; + }; + explicit BaseProc(const CreateArg& arg); virtual ~BaseProc(); @@ -127,6 +131,9 @@ public: onJobPush2_(type); } + /// Actually pre-delete the actor. Called from BaseProcDeleter. + void doPreDelete(const PreDeleteArg& arg); + protected: friend class BaseProcLinkDataMgr; friend class BaseProcMgr; @@ -232,14 +239,14 @@ protected: virtual void onEnterSleep_(); /// Called to actually pre-delete (third and final callback). - virtual void preDelete3_(bool* do_not_destruct_immediately); + virtual void preDelete3_(const PreDeleteArg& arg); virtual bool prepareInit_(sead::Heap* heap, PrepareArg& arg); /// Called when pre-delete actually starts (after preparation, before requesting it). virtual void onPreDeleteStart_(PrepareArg&); /// Called to actually pre-delete (second callback). - virtual void preDelete2_(bool* do_not_destruct_immediately); + virtual void preDelete2_(const PreDeleteArg& arg); /// Called to actually pre-delete (first callback). virtual void preDelete1_(); @@ -258,8 +265,6 @@ protected: bool processStateUpdate(u8 counter); void processPreDelete(); - /// Actually pre-delete the actor. Called from BaseProcDeleter. - void doPreDelete(bool* do_not_destruct_immediately); void startDelete_(); /// Called from BaseProcMgr when a job for this process is invoked.