From ad32d1abe0fc202354042d46db924e227d7c26f6 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?L=C3=A9o=20Lam?= Date: Wed, 9 Dec 2020 16:08:12 +0100 Subject: [PATCH] ksys/act: Start adding Behavior --- data/uking_functions.csv | 30 ++++++------ src/KingSystem/ActorSystem/CMakeLists.txt | 2 + src/KingSystem/ActorSystem/actAiBehavior.cpp | 8 ++++ src/KingSystem/ActorSystem/actAiBehavior.h | 48 ++++++++++++++++++++ 4 files changed, 73 insertions(+), 15 deletions(-) create mode 100644 src/KingSystem/ActorSystem/actAiBehavior.cpp create mode 100644 src/KingSystem/ActorSystem/actAiBehavior.h diff --git a/data/uking_functions.csv b/data/uking_functions.csv index a40fe985..89c96cb3 100644 --- a/data/uking_functions.csv +++ b/data/uking_functions.csv @@ -37218,11 +37218,11 @@ 0x0000007100615afc,AI_Behavior_AcceptLSwordDamageDCCallback::dtorDelete,96, 0x0000007100615b5c,AI_Behavior_AcceptLSwordDamageDCCallback::rtti1,288, 0x0000007100615c7c,AI_Behavior_AcceptLSwordDamageDCCallback::rtti2,92, -0x0000007100615cd8,AI_BehaviorBase::m4,8, -0x0000007100615ce0,AI_BehaviorBase::m5,8, -0x0000007100615ce8,AI_BehaviorBase::m11_null,4, -0x0000007100615cec,AI_BehaviorBase::m12,8, -0x0000007100615cf4,AI_BehaviorBase::m13_null,4, +0x0000007100615cd8,AI_BehaviorBase::m4,8,_ZN4ksys3act2ai8Behavior2m4Ev +0x0000007100615ce0,AI_BehaviorBase::m5,8,_ZN4ksys3act2ai8Behavior2m5Ev +0x0000007100615ce8,AI_BehaviorBase::m11_null,4,_ZN4ksys3act2ai8Behavior3m11Ev +0x0000007100615cec,AI_BehaviorBase::m12,8,_ZN4ksys3act2ai8Behavior3m12Ev +0x0000007100615cf4,AI_BehaviorBase::m13_null,4,_ZN4ksys3act2ai8Behavior3m13Ev 0x0000007100615cf8,AI_Behavior_AcceptLSwordDamageDCCallback::m14,8, 0x0000007100615d00,sub_7100615D00,140, 0x0000007100615d8c,sub_7100615D8C,140, @@ -37254,10 +37254,10 @@ 0x0000007100616700,sub_7100616700,64, 0x0000007100616740,AI_Behavior_AirWallCollisionSpecify::rtti1,204, 0x000000710061680c,AI_Behavior_AirWallCollisionSpecify::rtti2,92, -0x0000007100616868,AI_BehaviorBase::dtor,4, +0x0000007100616868,AI_BehaviorBase::dtor,4,_ZN4ksys3act2ai8BehaviorD2Ev 0x000000710061686c,j__ZdlPv_141,4, -0x0000007100616870,AI_BehaviorBase::m6,8, -0x0000007100616878,AI_BehaviorBase::m9_null,4, +0x0000007100616870,AI_BehaviorBase::m6,8,_ZN4ksys3act2ai8Behavior2m6Ev +0x0000007100616878,AI_BehaviorBase::m9_null,4,_ZN4ksys3act2ai8Behavior2m9Ev 0x000000710061687c,sub_710061687C,48, 0x00000071006168ac,sub_71006168AC,92, 0x0000007100616908,sub_7100616908,8, @@ -37268,8 +37268,8 @@ 0x0000007100616ac0,AI_Behavior_AirWallMaterialSpecify::rtti1,204, 0x0000007100616b8c,AI_Behavior_AirWallMaterialSpecify::rtti2,92, 0x0000007100616be8,j__ZdlPv_142,4, -0x0000007100616bec,AI_BehaviorBase::m7_null,4, -0x0000007100616bf0,AI_BehaviorBase::m10_null,4, +0x0000007100616bec,AI_BehaviorBase::m7_null,4,_ZN4ksys3act2ai8Behavior2m7Ev +0x0000007100616bf0,AI_BehaviorBase::m10_null,4,_ZN4ksys3act2ai8Behavior3m10Ev 0x0000007100616bf4,sub_7100616BF4,48, 0x0000007100616c24,sub_7100616C24,92, 0x0000007100616c80,AI_Behavior_AnimalAttack::ctor,84, @@ -73123,7 +73123,7 @@ 0x0000007100d24400,PlacementStruct1::postPlaceActors1,156, 0x0000007100d2449c,PlacementStruct1::x_0,412, 0x0000007100d24638,sinitPlacementStruct1,684, -0x0000007100d248e4,AI_BehaviorBase::ctor,44, +0x0000007100d248e4,AI_BehaviorBase::ctor,44,_ZN4ksys3act2ai8BehaviorC1ERKNS2_7InitArgE 0x0000007100d24910,sub_7100D24910,256, 0x0000007100d24a10,sub_7100D24A10,176, 0x0000007100d24ac0,sub_7100D24AC0,212, @@ -73141,10 +73141,10 @@ 0x0000007100d24dc0,sub_7100D24DC0,12, 0x0000007100d24dcc,sub_7100D24DCC,12, 0x0000007100d24dd8,sub_7100D24DD8,12, -0x0000007100d24de4,AI_BehaviorBase::m0,112, -0x0000007100d24e54,AI_BehaviorBase::m1,92, -0x0000007100d24eb0,AI_BehaviorBase::dtorDelete,4, -0x0000007100d24eb4,AI_BehaviorBase::m8_null,4, +0x0000007100d24de4,AI_BehaviorBase::m0,112,_ZNK4ksys3act2ai8Behavior27checkDerivedRuntimeTypeInfoEPKN4sead15RuntimeTypeInfo9InterfaceE +0x0000007100d24e54,AI_BehaviorBase::m1,92,_ZNK4ksys3act2ai8Behavior18getRuntimeTypeInfoEv +0x0000007100d24eb0,AI_BehaviorBase::dtorDelete,4,_ZN4ksys3act2ai8BehaviorD0Ev +0x0000007100d24eb4,AI_BehaviorBase::m8_null,4,_ZN4ksys3act2ai8Behavior2m8Ev 0x0000007100d24eb8,ai::Behaviors::ctor,28, 0x0000007100d24ed4,sub_7100D24ED4,4, 0x0000007100d24ed8,sub_7100D24ED8,200, diff --git a/src/KingSystem/ActorSystem/CMakeLists.txt b/src/KingSystem/ActorSystem/CMakeLists.txt index dd7a62b8..2d47558e 100644 --- a/src/KingSystem/ActorSystem/CMakeLists.txt +++ b/src/KingSystem/ActorSystem/CMakeLists.txt @@ -27,6 +27,8 @@ target_sources(uking PRIVATE actAiActionBase.h actAiAi.cpp actAiAi.h + actAiBehavior.cpp + actAiBehavior.h actAiClassDef.cpp actAiClassDef.h actAiParam.cpp diff --git a/src/KingSystem/ActorSystem/actAiBehavior.cpp b/src/KingSystem/ActorSystem/actAiBehavior.cpp new file mode 100644 index 00000000..ea86c732 --- /dev/null +++ b/src/KingSystem/ActorSystem/actAiBehavior.cpp @@ -0,0 +1,8 @@ +#include "KingSystem/ActorSystem/actAiBehavior.h" + +namespace ksys::act::ai { + +Behavior::Behavior(const InitArg& arg) + : mActor(arg.actor), mDefIdx(static_cast(arg.def_idx)) {} + +} // namespace ksys::act::ai diff --git a/src/KingSystem/ActorSystem/actAiBehavior.h b/src/KingSystem/ActorSystem/actAiBehavior.h new file mode 100644 index 00000000..e65e6db9 --- /dev/null +++ b/src/KingSystem/ActorSystem/actAiBehavior.h @@ -0,0 +1,48 @@ +#pragma once + +#include +#include +#include "KingSystem/Utils/Types.h" + +namespace ksys::act { +class Actor; +} + +namespace ksys::act::ai { + +class Behavior { + SEAD_RTTI_BASE(Behavior) + +public: + struct InitArg { + Actor* actor; + /// The index of the behavior definition in the actor's AI program. + s32 def_idx; + }; + KSYS_CHECK_SIZE_NX150(InitArg, 0x10); + + explicit Behavior(const InitArg& arg); + virtual ~Behavior() = default; + + virtual bool m4() { return false; } + virtual bool m5() { return false; } + virtual bool m6() { return true; } + virtual void m7() {} + virtual void m8() {} + virtual void m9() {} + virtual void m10() {} + virtual void m11() {} + virtual bool m12() { return true; } + virtual void m13() {} + +protected: + Actor* mActor{}; + u16 mDefIdx{}; + u8 _12{}; + u8 _13{}; + void* _18{}; + void* _20{}; +}; +KSYS_CHECK_SIZE_NX150(Behavior, 0x28); + +} // namespace ksys::act::ai