summaryrefslogtreecommitdiff
path: root/src/KingSystem/ActorSystem
diff options
context:
space:
mode:
authorMichael Zhao <44533763+Pistonight@users.noreply.github.com>2026-05-31 14:26:22 -0700
committerGitHub <noreply@github.com>2026-05-31 14:26:22 -0700
commit77d70466690bf252d642dbdfa3fa689c00484ae0 (patch)
tree6327a04d99d525904d6dbf9f38674aa4201146c0 /src/KingSystem/ActorSystem
parentd10aef2b4fe55fa281572b24576f4cef8fef4c3e (diff)
parent3183601b597bff191f7805f0af18495554ede9e6 (diff)
Merge pull request #170 from Pistonight/fix/new_viking_mismatches
take new viking and update mismatches
Diffstat (limited to 'src/KingSystem/ActorSystem')
-rw-r--r--src/KingSystem/ActorSystem/Awareness/actAwareness.cpp4
-rw-r--r--src/KingSystem/ActorSystem/Awareness/actAwareness.h2
-rw-r--r--src/KingSystem/ActorSystem/Awareness/actAwarenessDefs.cpp5
-rw-r--r--src/KingSystem/ActorSystem/actAiActionBase.h56
-rw-r--r--src/KingSystem/ActorSystem/actAiParam.h4
5 files changed, 56 insertions, 15 deletions
diff --git a/src/KingSystem/ActorSystem/Awareness/actAwareness.cpp b/src/KingSystem/ActorSystem/Awareness/actAwareness.cpp
index 4d4e8d67..a06e3e67 100644
--- a/src/KingSystem/ActorSystem/Awareness/actAwareness.cpp
+++ b/src/KingSystem/ActorSystem/Awareness/actAwareness.cpp
@@ -231,6 +231,10 @@ void Awareness::calc() {
resetFlag(Flag::_0);
}
+u32 Awareness::calcHash(const sead::SafeString& key) {
+ return agl::utl::ParameterBase::calcHash(key);
+}
+
void Awareness::Links2::calc() {
count = 0;
}
diff --git a/src/KingSystem/ActorSystem/Awareness/actAwareness.h b/src/KingSystem/ActorSystem/Awareness/actAwareness.h
index 970ec635..5b13c5ef 100644
--- a/src/KingSystem/ActorSystem/Awareness/actAwareness.h
+++ b/src/KingSystem/ActorSystem/Awareness/actAwareness.h
@@ -35,6 +35,8 @@ public:
void setEventActive(bool active);
void calc();
+ static u32 calcHash(const sead::SafeString& key);
+
private:
friend class AwarenessInstance;
diff --git a/src/KingSystem/ActorSystem/Awareness/actAwarenessDefs.cpp b/src/KingSystem/ActorSystem/Awareness/actAwarenessDefs.cpp
index a6f3b30d..8c13c6fc 100644
--- a/src/KingSystem/ActorSystem/Awareness/actAwarenessDefs.cpp
+++ b/src/KingSystem/ActorSystem/Awareness/actAwarenessDefs.cpp
@@ -1,6 +1,7 @@
#include "KingSystem/ActorSystem/Awareness/actAwarenessDefs.h"
#include <container/seadSafeArray.h>
#include <utility/aglParameter.h>
+#include "KingSystem/ActorSystem/Awareness/actAwareness.h"
namespace ksys::act {
@@ -28,7 +29,7 @@ sead::SafeArray<const char*, 23> sAwarenessSensorTypes = sead::toArray({
u32 getAwarenessTerrorFlags(u32 hash) {
for (u32 i = 0; i < u32(sAwarenessTerrorTypes.size()); ++i) {
- if (agl::utl::ParameterBase::calcHash(sAwarenessTerrorTypes(i)) == hash)
+ if (Awareness::calcHash(sAwarenessTerrorTypes(i)) == hash)
return 1 << i;
}
@@ -38,7 +39,7 @@ u32 getAwarenessTerrorFlags(u32 hash) {
u32 getAwarenessSensorFlags(u32 hash) {
for (u32 i = 0; i < u32(sAwarenessSensorTypes.size()); ++i) {
- if (agl::utl::ParameterBase::calcHash(sAwarenessSensorTypes(i)) == hash)
+ if (Awareness::calcHash(sAwarenessSensorTypes(i)) == hash)
return 1 << i;
}
return 0xffffffff;
diff --git a/src/KingSystem/ActorSystem/actAiActionBase.h b/src/KingSystem/ActorSystem/actAiActionBase.h
index 88dd364f..e20cf06f 100644
--- a/src/KingSystem/ActorSystem/actAiActionBase.h
+++ b/src/KingSystem/ActorSystem/actAiActionBase.h
@@ -197,6 +197,35 @@ protected:
return false;
}
+ // likely duplicated by compiler?
+ template <typename T>
+ bool getDynamicParamImpl_2(T* value, const sead::SafeString& key,
+ bool (ParamPack::*getter)(T* value, const sead::SafeString& key)
+ const,
+ T* default_value) const {
+ auto* action = this;
+ while (action && action->mFlags.isOff(Flag::_80)) {
+ if ((action->mParams.*getter)(value, key))
+ return true;
+ if (action->mFlags.isOff(Flag::DynamicParamChild))
+ goto fail;
+ action = action->getCurrentChild();
+ if (!action)
+ goto fail;
+ }
+
+ for (s32 i = 0, n = action->getNumChildren(); i < n; ++i) {
+ auto* child = action->getChild(i);
+ if (child->getDynamicParamImpl_2<T>(value, key, getter, default_value))
+ return true;
+ }
+
+ fail:
+ logMissingParam(key);
+ *value = *default_value;
+ return false;
+ }
+
template <AIDefParamType Type, typename T>
bool getDynamicParamPtrImpl(T** value, const sead::SafeString& key, T* default_value) const {
return getDynamicParamImpl(value, key, &ParamPack::getPtrGeneric<T, Type>, &default_value);
@@ -246,26 +275,31 @@ protected:
value, key, static_cast<sead::SafeString*>(getDefaultString32()));
}
- // TODO: rename -- why do these exist?
+ // likely duplicated by compiler?
template <AIDefParamType Type, typename T>
- bool getDynamicParamPtrImpl2(T** value, const sead::SafeString& key, T* default_value) const {
- return getDynamicParamImpl(value, key, &ParamPack::getPtrGeneric2<T, Type>, &default_value);
+ bool getDynamicParamPtrImpl_2(T** value, const sead::SafeString& key, T* default_value) const {
+ return getDynamicParamImpl_2(value, key, &ParamPack::getPtrGeneric_2<T, Type>,
+ &default_value);
}
- bool getDynamicParam2(int** value, const sead::SafeString& key) const {
- return getDynamicParamPtrImpl2<AIDefParamType::Int>(value, key, getDefaultInt());
+ // likely duplicated by compiler?
+ bool getDynamicParam_2(int** value, const sead::SafeString& key) const {
+ return getDynamicParamPtrImpl_2<AIDefParamType::Int>(value, key, getDefaultInt());
}
- bool getDynamicParam2(float** value, const sead::SafeString& key) const {
- return getDynamicParamPtrImpl2<AIDefParamType::Float>(value, key, getDefaultFloat());
+ // likely duplicated by compiler?
+ bool getDynamicParam_2(float** value, const sead::SafeString& key) const {
+ return getDynamicParamPtrImpl_2<AIDefParamType::Float>(value, key, getDefaultFloat());
}
- bool getDynamicParam2(sead::Vector3f** value, const sead::SafeString& key) const {
- return getDynamicParamPtrImpl2<AIDefParamType::Vec3>(value, key, getDefaultVec3());
+ // likely duplicated by compiler?
+ bool getDynamicParam_2(sead::Vector3f** value, const sead::SafeString& key) const {
+ return getDynamicParamPtrImpl_2<AIDefParamType::Vec3>(value, key, getDefaultVec3());
}
- bool getDynamicParam2(bool** value, const sead::SafeString& key) const {
- return getDynamicParamPtrImpl2<AIDefParamType::Bool>(value, key, getDefaultBool());
+ // likely duplicated by compiler?
+ bool getDynamicParam_2(bool** value, const sead::SafeString& key) const {
+ return getDynamicParamPtrImpl_2<AIDefParamType::Bool>(value, key, getDefaultBool());
}
Actor* mActor;
diff --git a/src/KingSystem/ActorSystem/actAiParam.h b/src/KingSystem/ActorSystem/actAiParam.h
index e775f7fd..a39e30eb 100644
--- a/src/KingSystem/ActorSystem/actAiParam.h
+++ b/src/KingSystem/ActorSystem/actAiParam.h
@@ -104,9 +104,9 @@ public:
return ptr != nullptr;
}
- // TODO: rename this -- why does this exist?
+ // likely duplicated by compiler?
template <typename T, AIDefParamType Type>
- bool getPtrGeneric2(T** value, const sead::SafeString& key) const {
+ bool getPtrGeneric_2(T** value, const sead::SafeString& key) const {
auto* ptr = static_cast<T*>(getAITreeVariablePointer(key, Type));
*value = ptr;
return ptr != nullptr;