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 +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 sFactories{{ + makeFactory("Line"), + makeFactory("Screen"), + makeFactory("AreaSphere"), + makeFactory("AreaFan"), + makeFactory("AreaCylinderFan"), + makeFactory("AreaBox"), + makeFactory("EachOtherArea"), + makeFactory("Angle"), + makeFactory("Weight"), + makeFactory("RideHorse"), + makeFactory("RideSpace"), + makeFactory("Swim"), + makeFactory("Carry"), + makeFactory("NoCarry"), + makeFactory("Grab"), + makeFactory("BootFirstTower"), + makeFactory("FireContact"), + makeFactory("CharacterOn"), + makeFactory("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(); + 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 +#include +#include +#include +#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 mRadius; + agl::utl::Parameter 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 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 mForceEditModelArea; + agl::utl::Parameter mRadius; + agl::utl::Parameter mFixedRadius; + agl::utl::Parameter mForceEditMargin; + agl::utl::Parameter 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 mAngleCheckIgnoreLockOn; + agl::utl::Parameter mForceEditModelArea; + agl::utl::Parameter mRadius; + agl::utl::Parameter mAngle; + agl::utl::Parameter mTop; + agl::utl::Parameter mBottom; + agl::utl::Parameter mMarginRadius; + agl::utl::Parameter mMarginTop; + agl::utl::Parameter mMarginBottom; + agl::utl::Parameter mForceEditMargin; + agl::utl::Parameter mFixedRadius; + agl::utl::Parameter mFixedTop; + agl::utl::Parameter 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 mAngleCheckIgnoreLockOn; + agl::utl::Parameter mForceEditModelArea; + agl::utl::Parameter mRadius; + agl::utl::Parameter mTop; + agl::utl::Parameter mBottom; + agl::utl::Parameter mAngle; + agl::utl::Parameter mFixedRadiusCylinder; + agl::utl::Parameter mFixedRadiusFan; + agl::utl::Parameter mFixedTop; + agl::utl::Parameter mFixedBottom; + agl::utl::Parameter mForceEditMargin; + agl::utl::Parameter mMarginRadiusCylinder; + agl::utl::Parameter mMarginRadiusFan; + agl::utl::Parameter mMarginTop; + agl::utl::Parameter 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 mForceEditModelArea; + agl::utl::Parameter mMin; + agl::utl::Parameter mMax; + agl::utl::Parameter mFixedMin; + agl::utl::Parameter mFixedMax; + agl::utl::Parameter mForceEditMargin; + agl::utl::Parameter mMarginMin; + agl::utl::Parameter 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 mForceEditModelArea; + agl::utl::Parameter mRadius; + agl::utl::Parameter mTop; + agl::utl::Parameter mBottom; + agl::utl::Parameter mForceEditMargin; + agl::utl::Parameter mMarginRadius; + agl::utl::Parameter mMarginTop; + agl::utl::Parameter mMarginBottom; + agl::utl::Parameter mFixedRadius; + agl::utl::Parameter mFixedTop; + agl::utl::Parameter mFixedBottom; + agl::utl::Parameter mOffsetTop; + agl::utl::Parameter 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 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 +#include #include #include #include @@ -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 node; + agl::utl::Parameter offset; + agl::utl::Parameter rotate; + agl::utl::Parameter 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& 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 name; + agl::utl::Parameter file_name; + agl::utl::Parameter 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& 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 mForceEdit; + sead::Buffer 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 -#include -#include -#include -#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 _0; - agl::utl::Parameter _28; - agl::utl::Parameter _50; - agl::utl::Parameter _78; - }; - KSYS_CHECK_SIZE_NX150(AttPos, 0x98); - - struct Client { - const char* getFileName() const { return file_name.ref().cstr(); } - - agl::utl::Parameter name; - agl::utl::Parameter file_name; - agl::utl::Parameter 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& 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 mForceEdit; - sead::Buffer mClients; -}; -KSYS_CHECK_SIZE_NX150(AttClientList, 0x3f0); - -} // namespace ksys::res