summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorLéo Lam <leo@leolam.fr>2021-04-23 14:51:42 +0200
committerLéo Lam <leo@leolam.fr>2021-04-23 19:16:18 +0200
commitf98b6b0dbaf342ca8ae4ea0b4666ff0cb4e891c7 (patch)
tree712b284a9bc675121960ed2010a9e63caaecca86
parent6518fe5c73ab1e762361ea332325c59d9933e7b5 (diff)
ksys/res: Start adding AttCheck
Most of the check() functions are unimplemented because they require doing more physics/collision stuff.
-rw-r--r--data/uking_functions.csv124
-rw-r--r--src/KingSystem/ActorSystem/actActorParamMgr.cpp1
-rw-r--r--src/KingSystem/Resource/CMakeLists.txt4
-rw-r--r--src/KingSystem/Resource/resResourceAttCheck.cpp200
-rw-r--r--src/KingSystem/Resource/resResourceAttCheck.h326
-rw-r--r--src/KingSystem/Resource/resResourceAttClient.cpp21
-rw-r--r--src/KingSystem/Resource/resResourceAttClient.h59
-rw-r--r--src/KingSystem/Resource/resResourceAttClientList.cpp1
-rw-r--r--src/KingSystem/Resource/resResourceAttClientList.h65
9 files changed, 668 insertions, 133 deletions
diff --git a/data/uking_functions.csv b/data/uking_functions.csv
index c4318f1d..caaf385f 100644
--- a/data/uking_functions.csv
+++ b/data/uking_functions.csv
@@ -87690,45 +87690,45 @@
0x000000710108a4d0,sub_710108A4D0,240,_ZNK4ksys3act13ActorTemplate17getAttDefPriorityEPPKcS3_
0x000000710108a5c0,ActorTemplate::getNumEntries,8,_ZNK4ksys3act13ActorTemplate14getNumProfilesEv
0x000000710108a5c8,ActorTemplate::getKeyNameByIdx,76,_ZNK4ksys3act13ActorTemplate14getProfileNameEi
-0x000000710108a614,nullsub_4457,4,
-0x000000710108a618,sub_710108A618,8,
-0x000000710108a620,sub_710108A620,8,
+0x000000710108a614,nullsub_4457,4,_ZN4ksys3res8AttCheck2m4Ev
+0x000000710108a618,sub_710108A618,8,_ZN4ksys3res8AttCheck5checkEv
+0x000000710108a620,sub_710108A620,8,_ZN4ksys3res8AttCheck2m6Ev
0x000000710108a628,sub_710108A628,132,
-0x000000710108a6ac,sub_710108A6AC,192,
+0x000000710108a6ac,sub_710108A6AC,192,_ZN4ksys3res12AttCheckLine5parseERKNS0_8AttCheck9CreateArgE
0x000000710108a76c,sub_710108A76C,48,
0x000000710108a79c,sub_710108A79C,32,
0x000000710108a7bc,sub_710108A7BC,468,
0x000000710108a990,sub_710108A990,128,
0x000000710108aa10,sub_710108AA10,148,
-0x000000710108aaa4,sub_710108AAA4,164,
-0x000000710108ab48,sub_710108AB48,484,
+0x000000710108aaa4,sub_710108AAA4,164,_ZN4ksys3res12AttCheckArea5parseERKNS0_8AttCheck9CreateArgE
+0x000000710108ab48,sub_710108AB48,484,_ZN4ksys3res18AttCheckAreaSphere5parseERKNS0_8AttCheck9CreateArgE
0x000000710108ad2c,sub_710108AD2C,732,
0x000000710108b008,sub_710108B008,504,
0x000000710108b200,sub_710108B200,176,
0x000000710108b2b0,sub_710108B2B0,92,
-0x000000710108b30c,sub_710108B30C,956,
+0x000000710108b30c,sub_710108B30C,956,_ZN4ksys3res15AttCheckAreaFan5parseERKNS0_8AttCheck9CreateArgE
0x000000710108b6c8,sub_710108B6C8,1192,
0x000000710108bb70,sub_710108BB70,908,
0x000000710108befc,sub_710108BEFC,1200,
0x000000710108c3ac,sub_710108C3AC,144,
-0x000000710108c43c,sub_710108C43C,1068,
+0x000000710108c43c,sub_710108C43C,1068,_ZN4ksys3res23AttCheckAreaCylinderFan5parseERKNS0_8AttCheck9CreateArgE
0x000000710108c868,sub_710108C868,1384,
0x000000710108cdd0,sub_710108CDD0,1060,
-0x000000710108d1f4,sub_710108D1F4,820,
+0x000000710108d1f4,sub_710108D1F4,820,_ZN4ksys3res15AttCheckAreaBox5parseERKNS0_8AttCheck9CreateArgE
0x000000710108d528,sub_710108D528,1056,
0x000000710108d948,sub_710108D948,1020,
0x000000710108dd44,sub_710108DD44,616,
0x000000710108dfac,sub_710108DFAC,84,
-0x000000710108e000,sub_710108E000,304,
-0x000000710108e130,sub_710108E130,856,
-0x000000710108e488,sub_710108E488,8,
+0x000000710108e000,sub_710108E000,304,_ZN4ksys3res21AttCheckEachOtherAreaC1ENS0_12AttCheckTypeE
+0x000000710108e130,sub_710108E130,856,_ZN4ksys3res21AttCheckEachOtherArea5parseERKNS0_8AttCheck9CreateArgE
+0x000000710108e488,sub_710108E488,8,_ZN4ksys3res8AttCheck5parseERKNS1_9CreateArgE
0x000000710108e490,sub_710108E490,40,
0x000000710108e4b8,sub_710108E4B8,1264,
0x000000710108e9a8,sub_710108E9A8,784,
0x000000710108ecb8,sub_710108ECB8,1500,
0x000000710108f294,_ZN2nn3nex23AccountManagementClient18UpdateAccountEmailEPNS0_19ProtocolCallContextERKNS0_6StringE,20,
0x000000710108f2a8,sub_710108F2A8,512,
-0x000000710108f4a8,sub_710108F4A8,164,
+0x000000710108f4a8,sub_710108F4A8,164,_ZN4ksys3res13AttCheckAngle5parseERKNS0_8AttCheck9CreateArgE
0x000000710108f54c,sub_710108F54C,28,
0x000000710108f568,sub_710108F568,56,
0x000000710108f5a0,sub_710108F5A0,344,
@@ -87740,11 +87740,11 @@
0x000000710108f860,sub_710108F860,56,
0x000000710108f898,sub_710108F898,56,
0x000000710108f8d0,sub_710108F8D0,36,
-0x000000710108f8f4,sub_710108F8F4,588,
-0x000000710108fb40,sub_710108FB40,112,
-0x000000710108fbb0,sub_710108FBB0,92,
-0x000000710108fc0c,j__ZdlPv_1144,4,
-0x000000710108fc10,nullsub_4458,4,
+0x000000710108f8f4,sub_710108F8F4,588,_ZN4ksys3res8AttCheck4makeERKNS1_9CreateArgE
+0x000000710108fb40,sub_710108FB40,112,_ZNK4ksys3res8AttCheck27checkDerivedRuntimeTypeInfoEPKN4sead15RuntimeTypeInfo9InterfaceE
+0x000000710108fbb0,sub_710108FBB0,92,_ZNK4ksys3res8AttCheck18getRuntimeTypeInfoEv
+0x000000710108fc0c,j__ZdlPv_1144,4,_ZN4ksys3res8AttCheckD0Ev
+0x000000710108fc10,nullsub_4458,4,_ZN4ksys3res8AttCheck2m7Ev
0x000000710108fc14,sub_710108FC14,204,
0x000000710108fce0,sub_710108FCE0,92,
0x000000710108fd3c,sub_710108FD3C,72,
@@ -87758,23 +87758,23 @@
0x0000007101090030,j__ZdlPv_1147,4,
0x0000007101090034,sub_7101090034,8,
0x000000710109003c,sub_710109003C,8,
-0x0000007101090044,nullsub_4459,4,
-0x0000007101090048,sub_7101090048,288,
-0x0000007101090168,sub_7101090168,92,
-0x00000071010901c4,sub_71010901C4,104,
-0x000000710109022c,j__ZdlPv_1148,4,
-0x0000007101090230,sub_7101090230,288,
-0x0000007101090350,sub_7101090350,92,
-0x00000071010903ac,sub_71010903AC,136,
-0x0000007101090434,j__ZdlPv_1149,4,
-0x0000007101090438,sub_7101090438,288,
-0x0000007101090558,sub_7101090558,92,
-0x00000071010905b4,sub_71010905B4,144,
-0x0000007101090644,j__ZdlPv_1150,4,
-0x0000007101090648,sub_7101090648,288,
-0x0000007101090768,sub_7101090768,92,
-0x00000071010907c4,sub_71010907C4,116,
-0x0000007101090838,j__ZdlPv_1151,4,
+0x0000007101090044,nullsub_4459,4,_ZN4ksys3res12AttCheckArea3m11Ev
+0x0000007101090048,sub_7101090048,288,_ZNK4ksys3res18AttCheckAreaSphere27checkDerivedRuntimeTypeInfoEPKN4sead15RuntimeTypeInfo9InterfaceE
+0x0000007101090168,sub_7101090168,92,_ZNK4ksys3res18AttCheckAreaSphere18getRuntimeTypeInfoEv
+0x00000071010901c4,sub_71010901C4,104,_ZN4ksys3res18AttCheckAreaSphereD2Ev
+0x000000710109022c,j__ZdlPv_1148,4,_ZN4ksys3res18AttCheckAreaSphereD0Ev
+0x0000007101090230,sub_7101090230,288,_ZNK4ksys3res15AttCheckAreaFan27checkDerivedRuntimeTypeInfoEPKN4sead15RuntimeTypeInfo9InterfaceE
+0x0000007101090350,sub_7101090350,92,_ZNK4ksys3res15AttCheckAreaFan18getRuntimeTypeInfoEv
+0x00000071010903ac,sub_71010903AC,136,_ZN4ksys3res15AttCheckAreaFanD2Ev
+0x0000007101090434,j__ZdlPv_1149,4,_ZN4ksys3res15AttCheckAreaFanD0Ev
+0x0000007101090438,sub_7101090438,288,_ZNK4ksys3res23AttCheckAreaCylinderFan27checkDerivedRuntimeTypeInfoEPKN4sead15RuntimeTypeInfo9InterfaceE
+0x0000007101090558,sub_7101090558,92,_ZNK4ksys3res23AttCheckAreaCylinderFan18getRuntimeTypeInfoEv
+0x00000071010905b4,sub_71010905B4,144,_ZN4ksys3res23AttCheckAreaCylinderFanD2Ev
+0x0000007101090644,j__ZdlPv_1150,4,_ZN4ksys3res23AttCheckAreaCylinderFanD0Ev
+0x0000007101090648,sub_7101090648,288,_ZNK4ksys3res15AttCheckAreaBox27checkDerivedRuntimeTypeInfoEPKN4sead15RuntimeTypeInfo9InterfaceE
+0x0000007101090768,sub_7101090768,92,_ZNK4ksys3res15AttCheckAreaBox18getRuntimeTypeInfoEv
+0x00000071010907c4,sub_71010907C4,116,_ZN4ksys3res15AttCheckAreaBoxD2Ev
+0x0000007101090838,j__ZdlPv_1151,4,_ZN4ksys3res15AttCheckAreaBoxD0Ev
0x000000710109083c,sub_710109083C,204,
0x0000007101090908,sub_7101090908,92,
0x0000007101090964,sub_7101090964,116,
@@ -87800,7 +87800,7 @@
0x0000007101091134,j__ZdlPv_1158,4,
0x0000007101091138,sub_7101091138,204,
0x0000007101091204,sub_7101091204,92,
-0x0000007101091260,sub_7101091260,52,
+0x0000007101091260,sub_7101091260,52,_ZN4ksys3res8AttCheckD2Ev
0x0000007101091294,j__ZdlPv_1159,4,
0x0000007101091298,sub_7101091298,204,
0x0000007101091364,sub_7101091364,92,
@@ -87826,30 +87826,30 @@
0x000000710109188c,j__ZdlPv_1169,4,
0x0000007101091890,nullsub_4462,4,
0x0000007101091894,j__ZdlPv_1170,4,
-0x0000007101091898,sub_7101091898,180,
-0x000000710109194c,sub_710109194C,132,
-0x00000071010919d0,sub_71010919D0,260,
-0x0000007101091ad4,sub_7101091AD4,56,
-0x0000007101091b0c,sub_7101091B0C,56,
-0x0000007101091b44,sub_7101091B44,56,
-0x0000007101091b7c,sub_7101091B7C,56,
-0x0000007101091bb4,sub_7101091BB4,164,
-0x0000007101091c58,sub_7101091C58,132,
-0x0000007101091cdc,sub_7101091CDC,132,
-0x0000007101091d60,sub_7101091D60,132,
-0x0000007101091de4,sub_7101091DE4,132,
-0x0000007101091e68,sub_7101091E68,132,
-0x0000007101091eec,sub_7101091EEC,132,
-0x0000007101091f70,sub_7101091F70,132,
-0x0000007101091ff4,sub_7101091FF4,132,
-0x0000007101092078,sub_7101092078,132,
-0x00000071010920fc,sub_71010920FC,132,
-0x0000007101092180,sub_7101092180,132,
-0x0000007101092204,sub_7101092204,340,
-0x0000007101092358,sub_7101092358,364,
-0x00000071010924c4,sub_71010924C4,280,
-0x00000071010925dc,sub_71010925DC,140,
-0x0000007101092668,sub_7101092668,140,
+0x0000007101091898,sub_7101091898,180,_ZZN4ksys3res12_GLOBAL__N_1L11makeFactoryINS0_12AttCheckLineEEENS1_15AttCheckFactoryEPKcENUlNS0_12AttCheckTypeEPN4sead4HeapEE_8__invokeES7_SA_
+0x000000710109194c,sub_710109194C,132,_ZZN4ksys3res12_GLOBAL__N_1L11makeFactoryINS0_14AttCheckScreenEEENS1_15AttCheckFactoryEPKcENUlNS0_12AttCheckTypeEPN4sead4HeapEE_8__invokeES7_SA_
+0x00000071010919d0,sub_71010919D0,260,_ZZN4ksys3res12_GLOBAL__N_1L11makeFactoryINS0_18AttCheckAreaSphereEEENS1_15AttCheckFactoryEPKcENUlNS0_12AttCheckTypeEPN4sead4HeapEE_8__invokeES7_SA_
+0x0000007101091ad4,sub_7101091AD4,56,_ZZN4ksys3res12_GLOBAL__N_1L11makeFactoryINS0_15AttCheckAreaFanEEENS1_15AttCheckFactoryEPKcENUlNS0_12AttCheckTypeEPN4sead4HeapEE_8__invokeES7_SA_
+0x0000007101091b0c,sub_7101091B0C,56,_ZZN4ksys3res12_GLOBAL__N_1L11makeFactoryINS0_23AttCheckAreaCylinderFanEEENS1_15AttCheckFactoryEPKcENUlNS0_12AttCheckTypeEPN4sead4HeapEE_8__invokeES7_SA_
+0x0000007101091b44,sub_7101091B44,56,_ZZN4ksys3res12_GLOBAL__N_1L11makeFactoryINS0_15AttCheckAreaBoxEEENS1_15AttCheckFactoryEPKcENUlNS0_12AttCheckTypeEPN4sead4HeapEE_8__invokeES7_SA_
+0x0000007101091b7c,sub_7101091B7C,56,_ZZN4ksys3res12_GLOBAL__N_1L11makeFactoryINS0_21AttCheckEachOtherAreaEEENS1_15AttCheckFactoryEPKcENUlNS0_12AttCheckTypeEPN4sead4HeapEE_8__invokeES7_SA_
+0x0000007101091bb4,sub_7101091BB4,164,_ZZN4ksys3res12_GLOBAL__N_1L11makeFactoryINS0_13AttCheckAngleEEENS1_15AttCheckFactoryEPKcENUlNS0_12AttCheckTypeEPN4sead4HeapEE_8__invokeES7_SA_
+0x0000007101091c58,sub_7101091C58,132,_ZZN4ksys3res12_GLOBAL__N_1L11makeFactoryINS0_14AttCheckWeightEEENS1_15AttCheckFactoryEPKcENUlNS0_12AttCheckTypeEPN4sead4HeapEE_8__invokeES7_SA_
+0x0000007101091cdc,sub_7101091CDC,132,_ZZN4ksys3res12_GLOBAL__N_1L11makeFactoryINS0_17AttCheckRideHorseEEENS1_15AttCheckFactoryEPKcENUlNS0_12AttCheckTypeEPN4sead4HeapEE_8__invokeES7_SA_
+0x0000007101091d60,sub_7101091D60,132,_ZZN4ksys3res12_GLOBAL__N_1L11makeFactoryINS0_17AttCheckRideSpaceEEENS1_15AttCheckFactoryEPKcENUlNS0_12AttCheckTypeEPN4sead4HeapEE_8__invokeES7_SA_
+0x0000007101091de4,sub_7101091DE4,132,_ZZN4ksys3res12_GLOBAL__N_1L11makeFactoryINS0_12AttCheckSwimEEENS1_15AttCheckFactoryEPKcENUlNS0_12AttCheckTypeEPN4sead4HeapEE_8__invokeES7_SA_
+0x0000007101091e68,sub_7101091E68,132,_ZZN4ksys3res12_GLOBAL__N_1L11makeFactoryINS0_13AttCheckCarryEEENS1_15AttCheckFactoryEPKcENUlNS0_12AttCheckTypeEPN4sead4HeapEE_8__invokeES7_SA_
+0x0000007101091eec,sub_7101091EEC,132,_ZZN4ksys3res12_GLOBAL__N_1L11makeFactoryINS0_15AttCheckNoCarryEEENS1_15AttCheckFactoryEPKcENUlNS0_12AttCheckTypeEPN4sead4HeapEE_8__invokeES7_SA_
+0x0000007101091f70,sub_7101091F70,132,_ZZN4ksys3res12_GLOBAL__N_1L11makeFactoryINS0_12AttCheckGrabEEENS1_15AttCheckFactoryEPKcENUlNS0_12AttCheckTypeEPN4sead4HeapEE_8__invokeES7_SA_
+0x0000007101091ff4,sub_7101091FF4,132,_ZZN4ksys3res12_GLOBAL__N_1L11makeFactoryINS0_22AttCheckBootFirstTowerEEENS1_15AttCheckFactoryEPKcENUlNS0_12AttCheckTypeEPN4sead4HeapEE_8__invokeES7_SA_
+0x0000007101092078,sub_7101092078,132,_ZZN4ksys3res12_GLOBAL__N_1L11makeFactoryINS0_19AttCheckFireContactEEENS1_15AttCheckFactoryEPKcENUlNS0_12AttCheckTypeEPN4sead4HeapEE_8__invokeES7_SA_
+0x00000071010920fc,sub_71010920FC,132,_ZZN4ksys3res12_GLOBAL__N_1L11makeFactoryINS0_19AttCheckCharacterOnEEENS1_15AttCheckFactoryEPKcENUlNS0_12AttCheckTypeEPN4sead4HeapEE_8__invokeES7_SA_
+0x0000007101092180,sub_7101092180,132,_ZZN4ksys3res12_GLOBAL__N_1L11makeFactoryINS0_18AttCheckUnderWaterEEENS1_15AttCheckFactoryEPKcENUlNS0_12AttCheckTypeEPN4sead4HeapEE_8__invokeES7_SA_
+0x0000007101092204,sub_7101092204,340,_ZN4ksys3res15AttCheckAreaFanCI2NS0_8AttCheckEENS0_12AttCheckTypeE
+0x0000007101092358,sub_7101092358,364,_ZN4ksys3res23AttCheckAreaCylinderFanCI2NS0_8AttCheckEENS0_12AttCheckTypeE
+0x00000071010924c4,sub_71010924C4,280,_ZN4ksys3res15AttCheckAreaBoxC2ENS0_12AttCheckTypeE
+0x00000071010925dc,sub_71010925DC,140,_ZNK4sead15RuntimeTypeInfo6DeriveIN4ksys3res8AttCheckEE9isDerivedEPKNS0_9InterfaceE
+0x0000007101092668,sub_7101092668,140,_ZNK4sead15RuntimeTypeInfo6DeriveIN4ksys3res12AttCheckAreaEE9isDerivedEPKNS0_9InterfaceE
0x00000071010926f4,sub_71010926F4,248,
0x00000071010927ec,ResourceBatcllist::m2,248,
0x00000071010928e4,sub_71010928E4,252,
@@ -87901,8 +87901,8 @@
0x0000007101094cc0,j__ZdlPv_1172,4,
0x0000007101094cc4,_ZN4sead19FixedSafeStringBaseIcLi147EEaSERKNS_14SafeStringBaseIcEE,240,
0x0000007101094db4,sub_7101094DB4,372,
-0x0000007101094f28,sub_7101094F28,132,
-0x0000007101094fac,sub_7101094FAC,360,
+0x0000007101094f28,sub_7101094F28,132,_ZN4ksys3res6AttPosC1Ev
+0x0000007101094fac,sub_7101094FAC,360,_ZN4ksys3res6AttPos4initEPN3agl3utl13IParameterObjEPKcS7_S7_S7_
0x0000007101095114,sub_7101095114,396,
0x00000071010952a0,sub_71010952A0,536,
0x00000071010954b8,sub_71010954B8,624,
diff --git a/src/KingSystem/ActorSystem/actActorParamMgr.cpp b/src/KingSystem/ActorSystem/actActorParamMgr.cpp
index 9409ea15..55da4fcb 100644
--- a/src/KingSystem/ActorSystem/actActorParamMgr.cpp
+++ b/src/KingSystem/ActorSystem/actActorParamMgr.cpp
@@ -12,7 +12,6 @@
#include "KingSystem/Resource/resResourceAnimInfo.h"
#include "KingSystem/Resource/resResourceArchive.h"
#include "KingSystem/Resource/resResourceAttClient.h"
-#include "KingSystem/Resource/resResourceAttClientList.h"
#include "KingSystem/Resource/resResourceAwareness.h"
#include "KingSystem/Resource/resResourceBoneControl.h"
#include "KingSystem/Resource/resResourceChemical.h"
diff --git a/src/KingSystem/Resource/CMakeLists.txt b/src/KingSystem/Resource/CMakeLists.txt
index c9f063b9..07aa2d2f 100644
--- a/src/KingSystem/Resource/CMakeLists.txt
+++ b/src/KingSystem/Resource/CMakeLists.txt
@@ -148,10 +148,10 @@ target_sources(uking PRIVATE
resResourceASResourceExtension.h
resResourceASSetting.cpp
resResourceASSetting.h
+ resResourceAttCheck.cpp
+ resResourceAttCheck.h
resResourceAttClient.cpp
resResourceAttClient.h
- resResourceAttClientList.cpp
- resResourceAttClientList.h
resResourceArchive.cpp
resResourceArchive.h
resResourceAwareness.cpp
diff --git a/src/KingSystem/Resource/resResourceAttCheck.cpp b/src/KingSystem/Resource/resResourceAttCheck.cpp
new file mode 100644
index 00000000..033c338a
--- /dev/null
+++ b/src/KingSystem/Resource/resResourceAttCheck.cpp
@@ -0,0 +1,200 @@
+#include "KingSystem/Resource/resResourceAttCheck.h"
+
+namespace ksys::res {
+
+void AttCheck::m4() {}
+
+bool AttCheck::check() {
+ return true;
+}
+
+float AttCheck::m6() {
+ return -1.0;
+}
+
+bool AttCheckLine::parse(const CreateArg& arg) {
+ mRadius.init(0.0, "Radius", "半径", "Min=0,Max=10", &mObj);
+ mAsLineOfSight.init(false, "AsLineOfSight", "視線を透かすコリジョンを無視する", "", &mObj);
+ return true;
+}
+
+bool AttCheckArea::parse(const CreateArg& arg) {
+ mAttPos.init(&mObj);
+ mFromPlayer.init(false, "FromPlayer", "目標側基準", "", &mObj);
+ return true;
+}
+
+bool AttCheckAreaSphere::parse(const CreateArg& arg) {
+ mForceEditModelArea.init(false, "ForceEditModelArea", "(モデル範囲)強制編集", "", &mObj);
+ mRadius.init(0.0, "Radius", "(モデル範囲)半径", "Min=0.f,Max=100.f", &mObj);
+ mFixedRadius.init(-1.0, "FixedRadius", "(アテンション範囲)半径", "Min=-1.f,Max=100.f", &mObj);
+ mForceEditMargin.init(false, "ForceEditMargin", "(あそびの範囲)強制編集", "", &mObj);
+ mMarginRadius.init(1.0, "MarginRadius", "(あそびの範囲)半径", "Min=0.f,Max=100.f", &mObj);
+ return AttCheckArea::parse(arg);
+}
+
+bool AttCheckAreaFan::parse(const CreateArg& arg) {
+ mAngleCheckIgnoreLockOn.init(false, "AngleCheckIgnoreLockOn", "ロックオン時も角度チェック有効",
+ "", &mObj);
+ mForceEditModelArea.init(false, "ForceEditModelArea", "(モデル範囲)強制編集", "", &mObj);
+ mRadius.init(0.0, "Radius", "(モデル範囲)半径", "Min=0.f,Max=100.f", &mObj);
+ mTop.init(0.0, "Top", "(モデル範囲)上辺", "Min=-100.f,Max=100.f", &mObj);
+ mBottom.init(0.0, "Bottom", "(モデル範囲)下辺", "Min=-100.f,Max=100.f", &mObj);
+ mAngle.init(0.0, "Angle", "(アテンション範囲)角度", "Min=0.f,Max=3.1415f", &mObj);
+ mFixedRadius.init(-1.0, "FixedRadius", "(アテンション範囲)半径", "Min=-1.f,Max=100.f", &mObj);
+ mFixedTop.init(-1.0, "FixedTop", "(アテンション範囲)上辺", "Min=-1.f,Max=100.f", &mObj);
+ mFixedBottom.init(-1.0, "FixedBottom", "(アテンション範囲)下辺", "Min=-1.f,Max=100.f", &mObj);
+ mForceEditMargin.init(false, "ForceEditMargin", "(あそびの範囲)強制編集", "", &mObj);
+ mMarginRadius.init(1.0, "MarginRadius", "(あそびの範囲)半径", "Min=0.f,Max=100.f", &mObj);
+ mMarginTop.init(1.0, "MarginTop", "(あそびの範囲)上辺", "Min=0.f,Max=100.f", &mObj);
+ mMarginBottom.init(1.0, "MarginBottom", "(あそびの範囲)下辺", "Min=0.f,Max=100.f", &mObj);
+ return AttCheckArea::parse(arg);
+}
+
+bool AttCheckAreaCylinderFan::parse(const CreateArg& arg) {
+ mAngleCheckIgnoreLockOn.init(false, "AngleCheckIgnoreLockOn", "ロックオン時も角度チェック有効",
+ "", &mObj);
+ mForceEditModelArea.init(false, "ForceEditModelArea", "(モデル範囲)強制編集", "", &mObj);
+ mRadius.init(0.0, "Radius", "(モデル範囲)半径", "Min=0.f,Max=100.f", &mObj);
+ mTop.init(0.0, "Top", "(モデル範囲)上辺", "Min=-100.f,Max=100.f", &mObj);
+ mBottom.init(0.0, "Bottom", "(モデル範囲)下辺", "Min=-100.f,Max=100.f", &mObj);
+ mAngle.init(0.0, "Angle", "(アテンション範囲)角度", "Min=0.f,Max=3.1415f", &mObj);
+ mFixedRadiusCylinder.init(-1.0, "FixedRadiusCylinder", "(アテンション範囲)円柱の半径",
+ "Min=-1.f,Max=100.f", &mObj);
+ mFixedRadiusFan.init(-1.0, "FixedRadiusFan", "(アテンション範囲)扇形の半径",
+ "Min=-1.f,Max=100.f", &mObj);
+ mFixedTop.init(-1.0, "FixedTop", "(アテンション範囲)上辺", "Min=-1.f,Max=100.f", &mObj);
+ mFixedBottom.init(-1.0, "FixedBottom", "(アテンション範囲)下辺", "Min=-1.f,Max=100.f", &mObj);
+ mForceEditMargin.init(false, "ForceEditMargin", "(あそびの範囲)強制編集", "", &mObj);
+ mMarginRadiusCylinder.init(1.0, "MarginRadiusCylinder", "(あそびの範囲)円柱の半径",
+ "Min=0.f,Max=100.f", &mObj);
+ mMarginRadiusFan.init(1.0, "MarginRadiusFan", "(あそびの範囲)扇形の半径", "Min=0.f,Max=100.f",
+ &mObj);
+ mMarginTop.init(1.0, "MarginTop", "(あそびの範囲)上辺", "Min=0.f,Max=100.f", &mObj);
+ mMarginBottom.init(1.0, "MarginBottom", "(あそびの範囲)下辺", "Min=0.f,Max=100.f", &mObj);
+ return AttCheckArea::parse(arg);
+}
+
+bool AttCheckAreaBox::parse(const CreateArg& arg) {
+ mForceEditModelArea.init(false, "ForceEditModelArea", "(モデル範囲)強制編集", "", &mObj);
+ mMin.init(sead::Vector3f::zero, "Min", "(モデル範囲)最小", "Min=-100.f,Max=100.f", &mObj);
+ mMax.init(sead::Vector3f::zero, "Max", "(モデル範囲)最大", "Min=-100.f,Max=100.f", &mObj);
+ mFixedMin.init(-1 * sead::Vector3f::ones, "FixedMin", "(アテンション範囲)最小",
+ "Min=-1.f,Max=100.f", &mObj);
+ mFixedMax.init(-1 * sead::Vector3f::ones, "FixedMax", "(アテンション範囲)最大",
+ "Min=-1.f,Max=100.f", &mObj);
+ mForceEditMargin.init(false, "ForceEditMargin", "(あそびの範囲)強制編集", "", &mObj);
+ mMarginMin.init(sead::Vector3f::ones, "MarginMin", "(あそびの範囲)最小", "Min=-100.f,Max=100.f",
+ &mObj);
+ mMarginMax.init(sead::Vector3f::ones, "MarginMax", "(あそびの範囲)最大", "Min=-100.f,Max=100.f",
+ &mObj);
+ return AttCheckArea::parse(arg);
+}
+
+AttCheckEachOtherArea::AttCheckEachOtherArea(AttCheckType type) : AttCheck(type) {}
+
+bool AttCheckEachOtherArea::parse(const CreateArg& arg) {
+ mForceEditModelArea.init(false, "ForceEditModelArea", "(モデル範囲)強制編集", "", &mObj);
+ mRadius.init(0.0, "Radius", "(モデル範囲)半径", "Min=0.f,Max=100.f", &mObj);
+ mTop.init(0.0, "Top", "(モデル範囲)上辺", "Min=-100.f,Max=100.f", &mObj);
+ mBottom.init(0.0, "Bottom", "(モデル範囲)下辺", "Min=-100.f,Max=100.f", &mObj);
+ mFixedRadius.init(-1.0, "FixedRadius", "(アテンション範囲)半径", "Min=-1.f,Max=100.f", &mObj);
+ mFixedTop.init(-1.0, "FixedTop", "(アテンション範囲)上辺", "Min=-1.f,Max=100.f", &mObj);
+ mFixedBottom.init(-1.0, "FixedBottom", "(アテンション範囲)下辺", "Min=-1.f,Max=100.f", &mObj);
+ mForceEditMargin.init(false, "ForceEditMargin", "(あそびの範囲)強制編集", "", &mObj);
+ mMarginRadius.init(1.0, "MarginRadius", "(あそびの範囲)半径", "Min=0.f,Max=100.f", &mObj);
+ mMarginTop.init(1.0, "MarginTop", "(あそびの範囲)上辺", "Min=0.f,Max=100.f", &mObj);
+ mMarginBottom.init(1.0, "MarginBottom", "(あそびの範囲)下辺", "Min=0.f,Max=100.f", &mObj);
+ mOffsetTop.init(0.0, "OffsetTop", "(アテンションを出される側の範囲オフセット)上辺",
+ "Min=-100,Max=100", &mObj);
+ mOffsetBottom.init(0.0, "OffsetBottom", "(アテンションを出される側の範囲オフセット)下辺",
+ "Min=-100,Max=100", &mObj);
+ return AttCheck::parse(arg);
+}
+
+bool AttCheckAngle::parse(const CreateArg& arg) {
+ mAttPos.init(&mObj);
+ mAngle.init(0.0, "Angle", "角度", "Min=0.f,Max=3.1415f", &mObj);
+ return AttCheck::parse(arg);
+}
+
+bool AttCheck::parse(const CreateArg& arg) {
+ return true;
+}
+
+namespace {
+struct AttCheckFactory {
+ const char* name;
+ AttCheck* (*make)(AttCheckType type, sead::Heap* heap);
+};
+
+template <typename T>
+static constexpr AttCheckFactory makeFactory(const char* name) {
+ AttCheckFactory factory{};
+ factory.name = name;
+ factory.make = [](AttCheckType type, sead::Heap* heap) -> AttCheck* {
+ return new (heap) T(type);
+ };
+ return factory;
+}
+
+sead::SafeArray<AttCheckFactory, 19> sFactories{{
+ makeFactory<AttCheckLine>("Line"),
+ makeFactory<AttCheckScreen>("Screen"),
+ makeFactory<AttCheckAreaSphere>("AreaSphere"),
+ makeFactory<AttCheckAreaFan>("AreaFan"),
+ makeFactory<AttCheckAreaCylinderFan>("AreaCylinderFan"),
+ makeFactory<AttCheckAreaBox>("AreaBox"),
+ makeFactory<AttCheckEachOtherArea>("EachOtherArea"),
+ makeFactory<AttCheckAngle>("Angle"),
+ makeFactory<AttCheckWeight>("Weight"),
+ makeFactory<AttCheckRideHorse>("RideHorse"),
+ makeFactory<AttCheckRideSpace>("RideSpace"),
+ makeFactory<AttCheckSwim>("Swim"),
+ makeFactory<AttCheckCarry>("Carry"),
+ makeFactory<AttCheckNoCarry>("NoCarry"),
+ makeFactory<AttCheckGrab>("Grab"),
+ makeFactory<AttCheckBootFirstTower>("BootFirstTower"),
+ makeFactory<AttCheckFireContact>("FireContact"),
+ makeFactory<AttCheckCharacterOn>("CharacterOn"),
+ makeFactory<AttCheckUnderWater>("UnderWater"),
+}};
+} // namespace
+
+AttCheck* AttCheck::make(const CreateArg& arg) {
+ const auto Parameters = agl::utl::getResParameterObj(arg.res_list, "Parameters");
+ if (!Parameters)
+ return nullptr;
+
+ int type = sFactories.size();
+ const auto CheckType = agl::utl::getResParameter(Parameters, "CheckType");
+ const sead::SafeString check_type_str = CheckType.getData<char>();
+ for (int i = 0; i < sFactories.size(); ++i) {
+ if (check_type_str == sFactories[i].name) {
+ type = i;
+ break;
+ }
+ }
+
+ if (type == sFactories.size())
+ return nullptr;
+
+ auto* check = sFactories[type].make(AttCheckType(type), arg.heap);
+ if (!check)
+ return nullptr;
+
+ if (!check->init(arg)) {
+ delete check;
+ return nullptr;
+ }
+
+ return check;
+}
+
+bool AttCheck::init(const AttCheck::CreateArg& arg) {
+ mList.addObj(&mObj, "Parameters");
+ mUserData = arg.user_data;
+ return parse(arg);
+}
+
+} // namespace ksys::res
diff --git a/src/KingSystem/Resource/resResourceAttCheck.h b/src/KingSystem/Resource/resResourceAttCheck.h
new file mode 100644
index 00000000..e0d88375
--- /dev/null
+++ b/src/KingSystem/Resource/resResourceAttCheck.h
@@ -0,0 +1,326 @@
+#pragma once
+
+#include <agl/Utils/aglParameter.h>
+#include <agl/Utils/aglParameterList.h>
+#include <agl/Utils/aglParameterObj.h>
+#include <prim/seadRuntimeTypeInfo.h>
+#include "KingSystem/Resource/resResourceAttClient.h"
+
+namespace ksys::res {
+
+enum class AttCheckType {
+ Line,
+ Screen,
+ AreaSphere,
+ AreaFan,
+ AreaCylinderFan,
+ AreaBox,
+ EachOtherArea,
+ Angle,
+ Weight,
+ RideHorse,
+ RideSpace,
+ Swim,
+ Carry,
+ NoCarry,
+ Grab,
+ BootFirstTower,
+ FireContact,
+ CharacterOn,
+ UnderWater,
+};
+
+class AttCheck {
+ SEAD_RTTI_BASE(AttCheck)
+public:
+ struct CreateArg {
+ agl::utl::ResParameterList res_list;
+ sead::Heap* heap;
+ void* user_data;
+ };
+
+ static AttCheck* make(const CreateArg& arg);
+
+ explicit AttCheck(AttCheckType type) : mType{type} {}
+ virtual ~AttCheck() = default;
+
+ // FIXME: signatures and names
+ virtual void m4();
+ virtual bool check();
+ virtual float m6();
+ virtual void m7() {}
+
+ virtual bool parse(const CreateArg& arg);
+
+protected:
+ bool init(const CreateArg& arg);
+
+ void* mUserData = nullptr;
+ AttCheckType mType{};
+ agl::utl::ParameterObj mObj;
+ agl::utl::ParameterList mList;
+};
+
+class AttCheckLine : public AttCheck {
+ SEAD_RTTI_OVERRIDE(AttCheckLine, AttCheck)
+public:
+ using AttCheck::AttCheck;
+
+ bool check() override;
+ bool parse(const CreateArg& arg) override;
+
+private:
+ agl::utl::Parameter<float> mRadius;
+ agl::utl::Parameter<bool> mAsLineOfSight;
+};
+
+class AttCheckScreen : public AttCheck {
+ SEAD_RTTI_OVERRIDE(AttCheckScreen, AttCheck)
+public:
+ using AttCheck::AttCheck;
+
+ bool check() override;
+};
+
+class AttCheckArea : public AttCheck {
+ SEAD_RTTI_OVERRIDE(AttCheckArea, AttCheck)
+public:
+ using AttCheck::AttCheck;
+
+ void m4() override;
+ bool check() override;
+ float m6() override;
+ void m7() override;
+ bool parse(const CreateArg& arg) override;
+
+ virtual bool m9() { return true; }
+ virtual float m10() { return 0; }
+ virtual void m11() {}
+
+protected:
+ AttPos mAttPos;
+ agl::utl::Parameter<bool> mFromPlayer;
+};
+
+class AttCheckAreaSphere : public AttCheckArea {
+ SEAD_RTTI_OVERRIDE(AttCheckAreaSphere, AttCheckArea)
+public:
+ using AttCheckArea::AttCheckArea;
+
+ bool parse(const CreateArg& arg) override;
+ bool m9() override;
+ float m10() override;
+ void m11() override;
+
+private:
+ agl::utl::Parameter<bool> mForceEditModelArea;
+ agl::utl::Parameter<float> mRadius;
+ agl::utl::Parameter<float> mFixedRadius;
+ agl::utl::Parameter<bool> mForceEditMargin;
+ agl::utl::Parameter<float> mMarginRadius;
+};
+
+class AttCheckAreaFan : public AttCheckArea {
+ SEAD_RTTI_OVERRIDE(AttCheckAreaFan, AttCheckArea)
+public:
+ using AttCheckArea::AttCheckArea;
+
+ bool parse(const CreateArg& arg) override;
+ bool m9() override;
+ float m10() override;
+ void m11() override;
+
+private:
+ agl::utl::Parameter<bool> mAngleCheckIgnoreLockOn;
+ agl::utl::Parameter<bool> mForceEditModelArea;
+ agl::utl::Parameter<float> mRadius;
+ agl::utl::Parameter<float> mAngle;
+ agl::utl::Parameter<float> mTop;
+ agl::utl::Parameter<float> mBottom;
+ agl::utl::Parameter<float> mMarginRadius;
+ agl::utl::Parameter<float> mMarginTop;
+ agl::utl::Parameter<float> mMarginBottom;
+ agl::utl::Parameter<bool> mForceEditMargin;
+ agl::utl::Parameter<float> mFixedRadius;
+ agl::utl::Parameter<float> mFixedTop;
+ agl::utl::Parameter<float> mFixedBottom;
+};
+
+class AttCheckAreaCylinderFan : public AttCheckArea {
+ SEAD_RTTI_OVERRIDE(AttCheckAreaCylinderFan, AttCheckArea)
+public:
+ using AttCheckArea::AttCheckArea;
+
+ bool parse(const CreateArg& arg) override;
+ bool m9() override;
+ float m10() override;
+
+private:
+ agl::utl::Parameter<bool> mAngleCheckIgnoreLockOn;
+ agl::utl::Parameter<bool> mForceEditModelArea;
+ agl::utl::Parameter<float> mRadius;
+ agl::utl::Parameter<float> mTop;
+ agl::utl::Parameter<float> mBottom;
+ agl::utl::Parameter<float> mAngle;
+ agl::utl::Parameter<float> mFixedRadiusCylinder;
+ agl::utl::Parameter<float> mFixedRadiusFan;
+ agl::utl::Parameter<float> mFixedTop;
+ agl::utl::Parameter<float> mFixedBottom;
+ agl::utl::Parameter<bool> mForceEditMargin;
+ agl::utl::Parameter<float> mMarginRadiusCylinder;
+ agl::utl::Parameter<float> mMarginRadiusFan;
+ agl::utl::Parameter<float> mMarginTop;
+ agl::utl::Parameter<float> mMarginBottom;
+};
+
+class AttCheckAreaBox : public AttCheckArea {
+ SEAD_RTTI_OVERRIDE(AttCheckAreaBox, AttCheckArea)
+public:
+ explicit AttCheckAreaBox(AttCheckType type) : AttCheckArea(type) {}
+
+ bool parse(const CreateArg& arg) override;
+ bool m9() override;
+ float m10() override;
+ void m11() override;
+
+private:
+ agl::utl::Parameter<bool> mForceEditModelArea;
+ agl::utl::Parameter<sead::Vector3f> mMin;
+ agl::utl::Parameter<sead::Vector3f> mMax;
+ agl::utl::Parameter<sead::Vector3f> mFixedMin;
+ agl::utl::Parameter<sead::Vector3f> mFixedMax;
+ agl::utl::Parameter<bool> mForceEditMargin;
+ agl::utl::Parameter<sead::Vector3f> mMarginMin;
+ agl::utl::Parameter<sead::Vector3f> mMarginMax;
+};
+
+class AttCheckEachOtherArea : public AttCheck {
+ SEAD_RTTI_OVERRIDE(AttCheckEachOtherArea, AttCheck)
+public:
+ explicit AttCheckEachOtherArea(AttCheckType type);
+
+ void m4() override;
+ bool check() override;
+ float m6() override;
+ void m7() override;
+ bool parse(const CreateArg& arg) override;
+
+private:
+ agl::utl::Parameter<bool> mForceEditModelArea;
+ agl::utl::Parameter<float> mRadius;
+ agl::utl::Parameter<float> mTop;
+ agl::utl::Parameter<float> mBottom;
+ agl::utl::Parameter<bool> mForceEditMargin;
+ agl::utl::Parameter<float> mMarginRadius;
+ agl::utl::Parameter<float> mMarginTop;
+ agl::utl::Parameter<float> mMarginBottom;
+ agl::utl::Parameter<float> mFixedRadius;
+ agl::utl::Parameter<float> mFixedTop;
+ agl::utl::Parameter<float> mFixedBottom;
+ agl::utl::Parameter<float> mOffsetTop;
+ agl::utl::Parameter<float> mOffsetBottom;
+};
+
+class AttCheckAngle : public AttCheck {
+ SEAD_RTTI_OVERRIDE(AttCheckAngle, AttCheck)
+public:
+ using AttCheck::AttCheck;
+
+ void m4() override;
+ bool check() override;
+ bool parse(const CreateArg& arg) override;
+
+private:
+ AttPos mAttPos;
+ agl::utl::Parameter<float> mAngle;
+};
+
+class AttCheckWeight : public AttCheck {
+ SEAD_RTTI_OVERRIDE(AttCheckWeight, AttCheck)
+public:
+ using AttCheck::AttCheck;
+
+ bool check() override;
+};
+
+class AttCheckRideHorse : public AttCheck {
+ SEAD_RTTI_OVERRIDE(AttCheckRideHorse, AttCheck)
+public:
+ using AttCheck::AttCheck;
+
+ bool check() override;
+};
+
+class AttCheckRideSpace : public AttCheck {
+ SEAD_RTTI_OVERRIDE(AttCheckRideSpace, AttCheck)
+public:
+ using AttCheck::AttCheck;
+
+ bool check() override;
+};
+
+class AttCheckSwim : public AttCheck {
+ SEAD_RTTI_OVERRIDE(AttCheckSwim, AttCheck)
+public:
+ using AttCheck::AttCheck;
+
+ bool check() override;
+};
+
+class AttCheckCarry : public AttCheck {
+ SEAD_RTTI_OVERRIDE(AttCheckCarry, AttCheck)
+public:
+ using AttCheck::AttCheck;
+
+ bool check() override;
+};
+
+class AttCheckNoCarry : public AttCheck {
+ SEAD_RTTI_OVERRIDE(AttCheckNoCarry, AttCheck)
+public:
+ using AttCheck::AttCheck;
+
+ bool check() override;
+};
+
+class AttCheckGrab : public AttCheck {
+ SEAD_RTTI_OVERRIDE(AttCheckGrab, AttCheck)
+public:
+ using AttCheck::AttCheck;
+
+ bool check() override;
+};
+
+class AttCheckBootFirstTower : public AttCheck {
+ SEAD_RTTI_OVERRIDE(AttCheckBootFirstTower, AttCheck)
+public:
+ using AttCheck::AttCheck;
+
+ bool check() override;
+};
+
+class AttCheckFireContact : public AttCheck {
+ SEAD_RTTI_OVERRIDE(AttCheckFireContact, AttCheck)
+public:
+ using AttCheck::AttCheck;
+
+ bool check() override;
+};
+
+class AttCheckCharacterOn : public AttCheck {
+ SEAD_RTTI_OVERRIDE(AttCheckCharacterOn, AttCheck)
+public:
+ using AttCheck::AttCheck;
+
+ bool check() override;
+};
+
+class AttCheckUnderWater : public AttCheck {
+ SEAD_RTTI_OVERRIDE(AttCheckUnderWater, AttCheck)
+public:
+ using AttCheck::AttCheck;
+
+ bool check() override;
+};
+
+} // namespace ksys::res
diff --git a/src/KingSystem/Resource/resResourceAttClient.cpp b/src/KingSystem/Resource/resResourceAttClient.cpp
index 5038bfac..ab99bec3 100644
--- a/src/KingSystem/Resource/resResourceAttClient.cpp
+++ b/src/KingSystem/Resource/resResourceAttClient.cpp
@@ -1,3 +1,22 @@
#include "KingSystem/Resource/resResourceAttClient.h"
-namespace ksys::res {} // namespace ksys::res
+namespace ksys::res {
+
+AttClient::~AttClient() {
+ // TODO
+ mChecks.freeBuffer();
+}
+
+void AttClient::doCreate_(u8*, u32, sead::Heap*) {}
+
+AttPos::AttPos() = default;
+
+void AttPos::init(agl::utl::IParameterObj* obj, const char* node_key, const char* offset_key,
+ const char* rotate_key, const char* y_rot_only_key) {
+ node.init("", node_key, "ノード", "", obj);
+ offset.init(sead::Vector3f::zero, offset_key, "オフセット", "Min=-100.f,Max=100.f", obj);
+ rotate.init(sead::Vector3f::zero, rotate_key, "回転", "Min=-3.1415f,Max=3.1415f", obj);
+ y_rot_only.init(false, y_rot_only_key, "Y軸回転のみ有効", "", obj);
+}
+
+} // namespace ksys::res
diff --git a/src/KingSystem/Resource/resResourceAttClient.h b/src/KingSystem/Resource/resResourceAttClient.h
index a6b1f3b8..bd93e31e 100644
--- a/src/KingSystem/Resource/resResourceAttClient.h
+++ b/src/KingSystem/Resource/resResourceAttClient.h
@@ -1,6 +1,7 @@
#pragma once
#include <agl/Utils/aglParameter.h>
+#include <agl/Utils/aglParameterList.h>
#include <agl/Utils/aglParameterObj.h>
#include <container/seadBuffer.h>
#include <prim/seadSafeString.h>
@@ -11,6 +12,22 @@
namespace ksys::res {
+struct AttPos {
+ AttPos();
+
+ void init(agl::utl::IParameterObj* obj, const char* node_key = "Node",
+ const char* offset_key = "Offset", const char* rotate_key = "Rotate",
+ const char* y_rot_only_key = "YRotOnly");
+
+ // TODO: more functions
+
+ agl::utl::Parameter<sead::SafeString> node;
+ agl::utl::Parameter<sead::Vector3f> offset;
+ agl::utl::Parameter<sead::Vector3f> rotate;
+ agl::utl::Parameter<bool> y_rot_only;
+};
+KSYS_CHECK_SIZE_NX150(AttPos, 0x98);
+
class AttClient : public ParamIO, public Resource {
SEAD_RTTI_OVERRIDE(AttClient, Resource)
public:
@@ -25,7 +42,7 @@ public:
const sead::SafeString& getPriorityTypeStr() const { return mPriorityTypeStr; }
const sead::Buffer<Check*>& getChecks() const { return mChecks; }
- void doCreate_(u8*, u32, sead::Heap*) override {}
+ void doCreate_(u8*, u32, sead::Heap*) override;
bool needsParse() const override { return true; }
bool parse_(u8* data, size_t size, sead::Heap* heap) override;
@@ -42,4 +59,44 @@ private:
};
KSYS_CHECK_SIZE_NX150(AttClient, 0x428);
+class AttClientList : public ParamIO, public Resource {
+ SEAD_RTTI_OVERRIDE(AttClientList, Resource)
+public:
+ struct Client {
+ const char* getFileName() const { return file_name.ref().cstr(); }
+
+ agl::utl::Parameter<sead::SafeString> name;
+ agl::utl::Parameter<sead::SafeString> file_name;
+ agl::utl::Parameter<bool> is_valid;
+ agl::utl::ParameterObj obj;
+ AttClient* client;
+ };
+ KSYS_CHECK_SIZE_NX150(Client, 0xa8);
+
+ AttClientList() : ParamIO("atcllist", 0) {}
+ ~AttClientList() override;
+ AttClientList(const AttClientList&) = delete;
+ auto operator=(const AttClientList&) = delete;
+
+ const AttPos& getAttPos() const { return mAttPos; }
+ bool isForceEdit() const { return mForceEdit.ref(); }
+ const sead::Buffer<Client>& getClients() const { return mClients; }
+
+ void addClient_(s32 index, AttClient* client) { mClients[index].client = client; }
+
+ void doCreate_(u8* buffer, u32 buffer_size, sead::Heap* heap) override;
+ bool needsParse() const override { return true; }
+ bool parse_(u8* data, size_t size, sead::Heap* heap) override;
+ bool finishParsing_() override;
+ bool m7_() override;
+
+private:
+ agl::utl::ParameterList mAttClientsList;
+ agl::utl::ParameterObj mAttPosObj;
+ AttPos mAttPos;
+ agl::utl::Parameter<bool> mForceEdit;
+ sead::Buffer<Client> mClients;
+};
+KSYS_CHECK_SIZE_NX150(AttClientList, 0x3f0);
+
} // namespace ksys::res
diff --git a/src/KingSystem/Resource/resResourceAttClientList.cpp b/src/KingSystem/Resource/resResourceAttClientList.cpp
deleted file mode 100644
index c764ef74..00000000
--- a/src/KingSystem/Resource/resResourceAttClientList.cpp
+++ /dev/null
@@ -1 +0,0 @@
-#include "KingSystem/Resource/resResourceAttClientList.h"
diff --git a/src/KingSystem/Resource/resResourceAttClientList.h b/src/KingSystem/Resource/resResourceAttClientList.h
deleted file mode 100644
index d336fc7a..00000000
--- a/src/KingSystem/Resource/resResourceAttClientList.h
+++ /dev/null
@@ -1,65 +0,0 @@
-#pragma once
-
-#include <agl/Utils/aglParameter.h>
-#include <agl/Utils/aglParameterList.h>
-#include <agl/Utils/aglParameterObj.h>
-#include <container/seadBuffer.h>
-#include "KingSystem/Resource/resResource.h"
-#include "KingSystem/Utils/ParamIO.h"
-#include "KingSystem/Utils/Types.h"
-
-namespace ksys::res {
-
-class AttClient;
-
-class AttClientList : public ParamIO, public Resource {
- SEAD_RTTI_OVERRIDE(AttClientList, Resource)
-public:
- struct AttPos {
- AttPos();
-
- agl::utl::Parameter<sead::SafeString> _0;
- agl::utl::Parameter<sead::Vector3f> _28;
- agl::utl::Parameter<sead::Vector3f> _50;
- agl::utl::Parameter<bool> _78;
- };
- KSYS_CHECK_SIZE_NX150(AttPos, 0x98);
-
- struct Client {
- const char* getFileName() const { return file_name.ref().cstr(); }
-
- agl::utl::Parameter<sead::SafeString> name;
- agl::utl::Parameter<sead::SafeString> file_name;
- agl::utl::Parameter<bool> is_valid;
- agl::utl::ParameterObj obj;
- AttClient* client;
- };
- KSYS_CHECK_SIZE_NX150(Client, 0xa8);
-
- AttClientList() : ParamIO("atcllist", 0) {}
- ~AttClientList() override;
- AttClientList(const AttClientList&) = delete;
- auto operator=(const AttClientList&) = delete;
-
- const AttPos& getAttPos() const { return mAttPos; }
- bool isForceEdit() const { return mForceEdit.ref(); }
- const sead::Buffer<Client>& getClients() const { return mClients; }
-
- void addClient_(s32 index, AttClient* client) { mClients[index].client = client; }
-
- void doCreate_(u8* buffer, u32 buffer_size, sead::Heap* heap) override;
- bool needsParse() const override { return true; }
- bool parse_(u8* data, size_t size, sead::Heap* heap) override;
- bool finishParsing_() override;
- bool m7_() override;
-
-private:
- agl::utl::ParameterList mAttClientsList;
- agl::utl::ParameterObj mAttPosObj;
- AttPos mAttPos;
- agl::utl::Parameter<bool> mForceEdit;
- sead::Buffer<Client> mClients;
-};
-KSYS_CHECK_SIZE_NX150(AttClientList, 0x3f0);
-
-} // namespace ksys::res