diff --git a/data/uking_functions.csv b/data/uking_functions.csv index 854d7db1..902d3694 100644 --- a/data/uking_functions.csv +++ b/data/uking_functions.csv @@ -213,33 +213,33 @@ Address,Quality,Size,Name 0x0000007100003f48,U,000164,DamageMgrBow::m54 0x0000007100003fec,U,000132,DamageMgrBow::m0 0x0000007100004070,U,000092,DamageMgrBow::m1 -0x00000071000040cc,O,000004,_ZN5uking3dmg17DamageManagerBaseD2Ev +0x00000071000040cc,O,000004,_ZN5uking3act17DamageManagerBaseD2Ev 0x00000071000040d0,U,000004,j__ZdlPv_0 -0x00000071000040d4,O,000008,_ZN5uking3dmg17DamageManagerBase10getField48Ev -0x00000071000040dc,O,000008,_ZN5uking3dmg17DamageManagerBase9getMinDmgEv -0x00000071000040e4,O,000008,_ZN5uking3dmg17DamageManagerBase10getField50Ev -0x00000071000040ec,O,000008,_ZN5uking3dmg17DamageManagerBase16checkDamageFlagsEv -0x00000071000040f4,O,000008,_ZN5uking3dmg17DamageManagerBase9getFlags2Ev -0x00000071000040fc,O,000008,_ZN5uking3dmg17DamageManagerBase3m13Ev -0x0000007100004104,O,000008,_ZN5uking3dmg17DamageManagerBase3m14Ev -0x000000710000410c,O,000008,_ZN5uking3dmg17DamageManagerBase3m16Ev -0x0000007100004114,O,000004,_ZN5uking3dmg17DamageManagerBase28accumulateStasisBlowVelocityEv +0x00000071000040d4,O,000008,_ZN5uking3act17DamageManagerBase10getField48Ev +0x00000071000040dc,O,000008,_ZN5uking3act17DamageManagerBase9getMinDmgEv +0x00000071000040e4,O,000008,_ZN5uking3act17DamageManagerBase10getField50Ev +0x00000071000040ec,O,000008,_ZN5uking3act17DamageManagerBase16checkDamageFlagsEv +0x00000071000040f4,O,000008,_ZN5uking3act17DamageManagerBase9getFlags2Ev +0x00000071000040fc,O,000008,_ZN5uking3act17DamageManagerBase3m13Ev +0x0000007100004104,O,000008,_ZN5uking3act17DamageManagerBase21getStasisBlowVelocityEPN4sead7Vector3IfEE +0x000000710000410c,O,000008,_ZN5uking3act17DamageManagerBase3m16Ev +0x0000007100004114,O,000004,_ZN5uking3act17DamageManagerBase28accumulateStasisBlowVelocityEv 0x0000007100004118,U,000008,DamageMgrBow::m18 -0x0000007100004120,O,000008,_ZN5uking3dmg17DamageManagerBase13initCallbacksEPN4sead4HeapE -0x0000007100004128,O,000004,_ZN5uking3dmg17DamageManagerBase10preDelete2Ev -0x000000710000412c,O,000008,_ZN5uking3dmg17DamageManagerBase3m25Ev -0x0000007100004134,O,000008,_ZN5uking3dmg17DamageManagerBase3m26Ev -0x000000710000413c,O,000008,_ZN5uking3dmg17DamageManagerBase3m31Ev -0x0000007100004144,O,000008,_ZN5uking3dmg17DamageManagerBase3m32Ev -0x000000710000414c,O,000008,_ZN5uking3dmg17DamageManagerBase26tgSensorMaterialOnHitMaybeEv -0x0000007100004154,O,000008,_ZN5uking3dmg17DamageManagerBase3m35Ev -0x000000710000415c,O,000008,_ZN5uking3dmg17DamageManagerBase3m38Ev -0x0000007100004164,O,000008,_ZN5uking3dmg17DamageManagerBase3m40Ev -0x000000710000416c,O,000008,_ZN5uking3dmg17DamageManagerBase3m41Ev -0x0000007100004174,O,000008,_ZN5uking3dmg17DamageManagerBase3m42Ev -0x000000710000417c,O,000004,_ZN5uking3dmg17DamageManagerBase3m43Ev +0x0000007100004120,O,000008,_ZN5uking3act17DamageManagerBase13initCallbacksEPN4sead4HeapE +0x0000007100004128,O,000004,_ZN5uking3act17DamageManagerBase10preDelete2Ev +0x000000710000412c,O,000008,_ZN5uking3act17DamageManagerBase3m25Ev +0x0000007100004134,O,000008,_ZN5uking3act17DamageManagerBase3m26Ev +0x000000710000413c,O,000008,_ZN5uking3act17DamageManagerBase3m31Ev +0x0000007100004144,O,000008,_ZN5uking3act17DamageManagerBase3m32Ev +0x000000710000414c,O,000008,_ZN5uking3act17DamageManagerBase26tgSensorMaterialOnHitMaybeEv +0x0000007100004154,O,000008,_ZN5uking3act17DamageManagerBase3m35Ev +0x000000710000415c,O,000008,_ZN5uking3act17DamageManagerBase3m38Ev +0x0000007100004164,O,000008,_ZN5uking3act17DamageManagerBase3m40Ev +0x000000710000416c,O,000008,_ZN5uking3act17DamageManagerBase3m41Ev +0x0000007100004174,O,000008,_ZN5uking3act17DamageManagerBase3m42Ev +0x000000710000417c,O,000004,_ZN5uking3act17DamageManagerBase3m43Ev 0x0000007100004180,U,000008,DamageMgr::m44 -0x0000007100004188,O,000004,_ZN5uking3dmg17DamageManagerBase13onApplyDamageEv +0x0000007100004188,O,000004,_ZN5uking3act17DamageManagerBase13onApplyDamageEv 0x000000710000418c,U,000008,DamageMgrBow::m51 0x0000007100004194,U,000008,DamageMgrBow::m52 0x000000710000419c,U,000008,DamageMgrBow::m53 @@ -249,7 +249,7 @@ Address,Quality,Size,Name 0x0000007100004324,U,000140,_ZNK4sead15RuntimeTypeInfo6DeriveINS_13ControlDeviceEE9isDerivedEPKNS0_9InterfaceE 0x00000071000043b0,U,000140, 0x000000710000443c,U,000140, -0x00000071000044c8,U,000140, +0x00000071000044c8,O,000140,_ZNK4sead15RuntimeTypeInfo6DeriveIN4ksys3act14IDamageManagerEE9isDerivedEPKNS0_9InterfaceE 0x0000007100004554,O,000140,_ZNK4sead15RuntimeTypeInfo6DeriveINS_18LogicalFrameBufferEE9isDerivedEPKNS0_9InterfaceE 0x00000071000045e0,U,000344,Bullet::construct 0x0000007100004738,U,000196,Bullet::m31 @@ -643,11 +643,11 @@ Address,Quality,Size,Name 0x000000710001bd9c,U,000288,DamageMgrWeapon::rtti1 0x000000710001bebc,U,000092, 0x000000710001bf18,U,000004,j__ZdlPv_12 -0x000000710001bf1c,O,000008,_ZN5uking3dmg17DamageManagerBase15getNumCallbacksEv -0x000000710001bf24,O,000004,_ZN5uking3dmg17DamageManagerBase3m22Ev -0x000000710001bf28,O,000008,_ZN5uking3dmg17DamageManagerBase11getPositionEv -0x000000710001bf30,O,000008,_ZN5uking3dmg17DamageManagerBase3m28Ev -0x000000710001bf38,O,000008,_ZN5uking3dmg17DamageManagerBase3m33Ev +0x000000710001bf1c,O,000008,_ZN5uking3act17DamageManagerBase15getNumCallbacksEv +0x000000710001bf24,O,000004,_ZN5uking3act17DamageManagerBase3m22Ev +0x000000710001bf28,O,000008,_ZN5uking3act17DamageManagerBase11getPositionEv +0x000000710001bf30,O,000008,_ZN5uking3act17DamageManagerBase3m28Ev +0x000000710001bf38,O,000008,_ZN5uking3act17DamageManagerBase3m33Ev 0x000000710001bf40,U,000004,nullsub_55 0x000000710001bf44,U,000008, 0x000000710001bf4c,U,000008,DamageMgrWeapon::m52 @@ -40357,9 +40357,9 @@ Address,Quality,Size,Name 0x0000007100670fe4,U,000960,IceBlockMgr::x_0 0x00000071006713a4,U,000656,IceBlockMgr::x_1 0x0000007100671634,U,000008,IceBlockMgr::x_2 -0x000000710067163c,O,000100,_ZN5uking3dmg13DamageInfoMgr18SingletonDisposer_D1Ev -0x00000071006716a0,O,000108,_ZN5uking3dmg13DamageInfoMgr18SingletonDisposer_D0Ev -0x000000710067170c,O,000136,_ZN5uking3dmg13DamageInfoMgr14createInstanceEPN4sead4HeapE +0x000000710067163c,O,000100,_ZN5uking3act13DamageInfoMgr18SingletonDisposer_D1Ev +0x00000071006716a0,O,000108,_ZN5uking3act13DamageInfoMgr18SingletonDisposer_D0Ev +0x000000710067170c,O,000136,_ZN5uking3act13DamageInfoMgr14createInstanceEPN4sead4HeapE 0x0000007100671794,U,000684, 0x0000007100671a40,U,000036, 0x0000007100671a64,U,000016, @@ -40391,7 +40391,7 @@ Address,Quality,Size,Name 0x0000007100673444,U,000492, 0x0000007100673630,U,000184, 0x00000071006736e8,U,000268, -0x00000071006737f4,U,000732,_ZN5uking3dmg13DamageInfoMgrC1Ev +0x00000071006737f4,U,000732,_ZN5uking3act13DamageInfoMgrC1Ev 0x0000007100673ad0,U,000268, 0x0000007100673bdc,U,000396, 0x0000007100673d68,U,000036, @@ -40407,7 +40407,7 @@ Address,Quality,Size,Name 0x000000710067446c,U,000664, 0x0000007100674704,U,000044, 0x0000007100674730,U,000044, -0x000000710067475c,O,000008,_ZN5uking3dmg13DamageInfoMgr26enableBoomerangRemoteBombsEv +0x000000710067475c,O,000008,_ZN5uking3act13DamageInfoMgr26enableBoomerangRemoteBombsEv 0x0000007100674764,U,000008, 0x000000710067476c,U,000008, 0x0000007100674774,U,000008, @@ -40415,11 +40415,11 @@ Address,Quality,Size,Name 0x0000007100674788,U,000008, 0x0000007100674790,U,000012, 0x000000710067479c,U,000008, -0x00000071006747a4,O,000048,_ZN5uking3dmg13DamageInfoMgr22getShieldRideBaseFrameEv -0x00000071006747d4,O,000048,_ZN5uking3dmg13DamageInfoMgr26getShieldRideHitBaseDamageEv +0x00000071006747a4,O,000048,_ZN5uking3act13DamageInfoMgr22getShieldRideBaseFrameEv +0x00000071006747d4,O,000048,_ZN5uking3act13DamageInfoMgr26getShieldRideHitBaseDamageEv 0x0000007100674804,U,000008,get10 -0x000000710067480c,O,000036,_ZN5uking3dmg13DamageInfoMgr22getCriticalAttackRatioEv -0x0000007100674830,O,000612,_ZNK5uking3dmg13DamageInfoMgr21isTrueFormMasterSwordEv +0x000000710067480c,O,000036,_ZN5uking3act13DamageInfoMgr22getCriticalAttackRatioEv +0x0000007100674830,O,000612,_ZNK5uking3act13DamageInfoMgr21isTrueFormMasterSwordEv 0x0000007100674a94,U,000156, 0x0000007100674b30,U,000144, 0x0000007100674bc0,U,000100, @@ -45188,14 +45188,14 @@ Address,Quality,Size,Name 0x00000071006d8520,U,000020,DamageMgr::m49 0x00000071006d8534,U,000024, 0x00000071006d854c,U,000028,DamageMgr::m13 -0x00000071006d8568,U,000064,DamageMgr::m14 +0x00000071006d8568,U,000064,DamageMgr::getStasisBlowVelocity 0x00000071006d85a8,U,000740,uking::act::DamageMgr::applyRequestedDamage 0x00000071006d888c,U,000456, 0x00000071006d8a54,U,000400,DamageMgr::m54 0x00000071006d8be4,U,000516,DamageMgr::m55 0x00000071006d8de8,U,000148, 0x00000071006d8e7c,U,000068, -0x00000071006d8ec0,O,000244,_ZN5uking3dmg10Struct20_212combineMaybeEPNS0_12Struct20BaseE +0x00000071006d8ec0,O,000244,_ZN5uking3act10Struct20_212combineMaybeEPN4ksys3act12Struct20BaseE 0x00000071006d8fb4,U,000288,DamageMgr::rtti0 0x00000071006d90d4,U,000092,DamageMgr::rtti2 0x00000071006d9130,U,000212,DamageMgr::m2 @@ -45207,10 +45207,10 @@ Address,Quality,Size,Name 0x00000071006d9310,U,000008,DamageMgr::m53 0x00000071006d9318,U,000212, 0x00000071006d93ec,U,000224, -0x00000071006d94cc,O,000288,_ZNK5uking3dmg10Struct20_227checkDerivedRuntimeTypeInfoEPKN4sead15RuntimeTypeInfo9InterfaceE -0x00000071006d95ec,O,000092,_ZNK5uking3dmg10Struct20_218getRuntimeTypeInfoEv -0x00000071006d9648,O,000004,_ZN5uking3dmg10Struct20_2D0Ev -0x00000071006d964c,O,000024,_ZN5uking3dmg10Struct20_25resetEv +0x00000071006d94cc,O,000288,_ZNK5uking3act10Struct20_227checkDerivedRuntimeTypeInfoEPKN4sead15RuntimeTypeInfo9InterfaceE +0x00000071006d95ec,O,000092,_ZNK5uking3act10Struct20_218getRuntimeTypeInfoEv +0x00000071006d9648,O,000004,_ZN5uking3act10Struct20_2D0Ev +0x00000071006d964c,O,000024,_ZN5uking3act10Struct20_25resetEv 0x00000071006d9664,U,000004,j__ZdlPv_293 0x00000071006d9668,U,000008, 0x00000071006d9670,U,000004,j__ZdlPv_294 @@ -45219,12 +45219,12 @@ Address,Quality,Size,Name 0x00000071006d9748,U,000092, 0x00000071006d97a4,U,000112, 0x00000071006d9814,U,000092, -0x00000071006d9870,O,000020,_ZN5uking3dmg8Struct20D2Ev +0x00000071006d9870,O,000020,_ZN5uking3act8Struct20D2Ev 0x00000071006d9884,U,000004,j__ZdlPv_295 0x00000071006d9888,U,000004,nullsub_2287 0x00000071006d988c,U,000004,nullsub_2288 -0x00000071006d9890,O,000140,_ZNK4sead15RuntimeTypeInfo6DeriveIN5uking3dmg8Struct20EE9isDerivedEPKNS0_9InterfaceE -0x00000071006d991c,O,000140,_ZNK4sead15RuntimeTypeInfo6DeriveIN5uking3dmg12Struct20BaseEE9isDerivedEPKNS0_9InterfaceE +0x00000071006d9890,O,000140,_ZNK4sead15RuntimeTypeInfo6DeriveIN5uking3act8Struct20EE9isDerivedEPKNS0_9InterfaceE +0x00000071006d991c,O,000140,_ZNK4sead15RuntimeTypeInfo6DeriveIN4ksys3act12Struct20BaseEE9isDerivedEPKNS0_9InterfaceE 0x00000071006d99a8,U,000076, 0x00000071006d99f4,U,000048, 0x00000071006d9a24,U,000268, @@ -45359,21 +45359,21 @@ Address,Quality,Size,Name 0x00000071006dfcb0,U,000004,nullsub_2297 0x00000071006dfcb4,U,000004,nullsub_2298 0x00000071006dfcb8,U,000004,nullsub_2299 -0x00000071006dfcbc,O,000132,_ZN5uking3dmg17DamageManagerBase13allocStruct20EPN4sead4HeapE -0x00000071006dfd40,O,000076,_ZN5uking3dmg17DamageManagerBase10preDelete1Ev -0x00000071006dfd8c,m,000076,_ZN5uking3dmg17DamageManagerBaseC1EPN4ksys3act5ActorE +0x00000071006dfcbc,O,000132,_ZN5uking3act17DamageManagerBase13allocStruct20EPN4sead4HeapE +0x00000071006dfd40,O,000076,_ZN5uking3act17DamageManagerBase10preDelete1Ev +0x00000071006dfd8c,m,000076,_ZN5uking3act17DamageManagerBaseC1EPN4ksys3act5ActorE 0x00000071006dfdd8,U,000096,DamageMgrBase::m20 0x00000071006dfe38,U,000020,DamageMgrBase::resetStuff -0x00000071006dfe4c,O,000500,_ZN5uking3dmg17DamageManagerBase11applyDamageERi -0x00000071006e0040,O,000204,_ZN5uking3dmg17DamageManagerBase21handleDamageForPlayerEPjS2_S2_S2_S2_ -0x00000071006e010c,O,000072,_ZN5uking3dmg17DamageManagerBase9addDamageEliiiiii -0x00000071006e0154,U,000004,_ZN5uking3dmg17DamageManagerBase10isSlowTimeEv +0x00000071006dfe4c,O,000500,_ZN5uking3act17DamageManagerBase11applyDamageERi +0x00000071006e0040,O,000204,_ZN5uking3act17DamageManagerBase21handleDamageForPlayerEPjS2_S2_S2_S2_ +0x00000071006e010c,O,000072,_ZN5uking3act17DamageManagerBase9addDamageEliiiiii +0x00000071006e0154,U,000004,_ZN5uking3act17DamageManagerBase10isSlowTimeEv 0x00000071006e0158,U,000324,DamageMgrBase::m29 0x00000071006e029c,U,002296,DamageMgrBase::m30 -0x00000071006e0b94,O,000056,_ZN5uking3dmg17DamageManagerBase9getDamageEv -0x00000071006e0bcc,O,000008,_ZN5uking3dmg17DamageManagerBase10getField54Ev +0x00000071006e0b94,O,000056,_ZN5uking3act17DamageManagerBase9getDamageEv +0x00000071006e0bcc,O,000008,_ZN5uking3act17DamageManagerBase10getField54Ev 0x00000071006e0bd4,U,000100, -0x00000071006e0c38,O,000136,_ZN5uking3dmg17DamageManagerBase13canTakeDamageEv +0x00000071006e0c38,O,000136,_ZN5uking3act17DamageManagerBase13canTakeDamageEv 0x00000071006e0cc0,U,000100, 0x00000071006e0d24,U,000196, 0x00000071006e0de8,U,000144, @@ -45383,21 +45383,21 @@ Address,Quality,Size,Name 0x00000071006e1050,U,000128, 0x00000071006e10d0,U,000292, 0x00000071006e11f4,U,000128, -0x00000071006e1274,O,000004,_ZN5uking3dmg17DamageManagerBase20applyRequestedDamageEv -0x00000071006e1278,O,000016,_ZN5uking3dmg17DamageManagerBase3m49Ei +0x00000071006e1274,O,000004,_ZN5uking3act17DamageManagerBase20applyRequestedDamageEv +0x00000071006e1278,O,000016,_ZN5uking3act17DamageManagerBase3m49Ei 0x00000071006e1288,U,000028,DamageMgr::getActorDamageParam -0x00000071006e12a4,O,000208,_ZN5uking3dmg8Struct2012combineMaybeEPNS0_12Struct20BaseE +0x00000071006e12a4,O,000208,_ZN5uking3act8Struct2012combineMaybeEPN4ksys3act12Struct20BaseE 0x00000071006e1374,U,000020,DamageMgrBase::m36 0x00000071006e1388,U,000020,DamageMgrBase::m37 -0x00000071006e139c,U,000204,DamageMgrBase::rtti1 -0x00000071006e1468,U,000092,DamageMgrBase::rtti2 -0x00000071006e14c4,O,000004,_ZN5uking3dmg17DamageManagerBaseD0Ev -0x00000071006e14c8,O,000004,_ZThn56_N5uking3dmg17DamageManagerBaseD1Ev -0x00000071006e14cc,O,000008,_ZThn56_N5uking3dmg17DamageManagerBaseD0Ev -0x00000071006e14d4,O,000204,_ZNK5uking3dmg8Struct2027checkDerivedRuntimeTypeInfoEPKN4sead15RuntimeTypeInfo9InterfaceE -0x00000071006e15a0,O,000092,_ZNK5uking3dmg8Struct2018getRuntimeTypeInfoEv -0x00000071006e15fc,O,000004,_ZN5uking3dmg8Struct20D0Ev -0x00000071006e1600,O,000020,_ZN5uking3dmg8Struct205resetEv +0x00000071006e139c,U,000204,uking::act::DamageManagerBase::checkDerivedRuntimeTypeInfo +0x00000071006e1468,U,000092,uking::act::DamageManagerBase::getRuntimeTypeInfo +0x00000071006e14c4,O,000004,_ZN5uking3act17DamageManagerBaseD0Ev +0x00000071006e14c8,O,000004,_ZThn56_N5uking3act17DamageManagerBaseD1Ev +0x00000071006e14cc,O,000008,_ZThn56_N5uking3act17DamageManagerBaseD0Ev +0x00000071006e14d4,O,000204,_ZNK5uking3act8Struct2027checkDerivedRuntimeTypeInfoEPKN4sead15RuntimeTypeInfo9InterfaceE +0x00000071006e15a0,O,000092,_ZNK5uking3act8Struct2018getRuntimeTypeInfoEv +0x00000071006e15fc,O,000004,_ZN5uking3act8Struct20D0Ev +0x00000071006e1600,O,000020,_ZN5uking3act8Struct205resetEv 0x00000071006e1614,U,000112, 0x00000071006e1684,U,000120, 0x00000071006e16fc,U,000084,Player::RideInfo::x @@ -73715,8 +73715,8 @@ Address,Quality,Size,Name 0x0000007100d2d370,U,000180,DamageMgrBase::calcMaybe 0x0000007100d2d424,U,000160, 0x0000007100d2d4c4,U,000152,DamageMgrBase::callDamageCallbacks -0x0000007100d2d55c,O,000080,_ZN5uking3dmg17DamageManagerBase17addDamageCallbackEiPNS0_14DamageCallbackE -0x0000007100d2d5ac,O,000220,_ZN5uking3dmg17DamageManagerBase20removeDamageCallbackEPNS0_14DamageCallbackE +0x0000007100d2d55c,O,000080,_ZN4ksys3act14IDamageManager17addDamageCallbackEiPNS0_14DamageCallbackE +0x0000007100d2d5ac,O,000220,_ZN4ksys3act14IDamageManager20removeDamageCallbackEPNS0_14DamageCallbackE 0x0000007100d2d688,O,000020,_ZN4ksys3act22getSystemIsGetItemSelfEPNS0_8InfoDataEPKc 0x0000007100d2d69c,O,000020,_ZN4ksys3act22getSystemIsGetItemSelfERKN2al9ByamlIterE 0x0000007100d2d6b0,O,000020,_ZN4ksys3act14getGeneralLifeEPNS0_8InfoDataEPKc diff --git a/src/Game/Actor/Damage/CMakeLists.txt b/src/Game/Actor/Damage/CMakeLists.txt index 1a590388..b9910e99 100644 --- a/src/Game/Actor/Damage/CMakeLists.txt +++ b/src/Game/Actor/Damage/CMakeLists.txt @@ -1,9 +1,8 @@ target_sources(uking PRIVATE - dmgDamageCallback.h - dmgDamageManagerBase.h - dmgDamageManagerBase.cpp - dmgInfoManager.cpp - dmgInfoManager.h - dmgStruct20.h - dmgStruct20.cpp + actDamageInfoMgr.cpp + actDamageInfoMgr.h + actDamageManagerBase.cpp + actDamageManagerBase.h + actDamageMgr.cpp + actStruct20.h ) diff --git a/src/Game/Actor/Damage/dmgInfoManager.cpp b/src/Game/Actor/Damage/actDamageInfoMgr.cpp similarity index 95% rename from src/Game/Actor/Damage/dmgInfoManager.cpp rename to src/Game/Actor/Damage/actDamageInfoMgr.cpp index 0b220990..e794326a 100644 --- a/src/Game/Actor/Damage/dmgInfoManager.cpp +++ b/src/Game/Actor/Damage/actDamageInfoMgr.cpp @@ -1,10 +1,10 @@ -#include "Game/Actor/Damage/dmgInfoManager.h" +#include "Game/Actor/Damage/actDamageInfoMgr.h" #include "Game/Scene/gameScene.h" #include "KingSystem/ActorSystem/actGlobalParameter.h" #include "KingSystem/GameData/gdtCommonFlagsUtils.h" #include "KingSystem/Resource/GeneralParamList/resGParamListObjectGlobal.h" -namespace uking::dmg { +namespace uking::act { SEAD_SINGLETON_DISPOSER_IMPL(DamageInfoMgr) @@ -66,4 +66,4 @@ bool DamageInfoMgr::isTrueFormMasterSword() const { return mMasterSwordDetectedEvil; } -} // namespace uking::dmg +} // namespace uking::act diff --git a/src/Game/Actor/Damage/dmgInfoManager.h b/src/Game/Actor/Damage/actDamageInfoMgr.h similarity index 97% rename from src/Game/Actor/Damage/dmgInfoManager.h rename to src/Game/Actor/Damage/actDamageInfoMgr.h index 773e190d..60cf1f88 100644 --- a/src/Game/Actor/Damage/dmgInfoManager.h +++ b/src/Game/Actor/Damage/actDamageInfoMgr.h @@ -8,7 +8,7 @@ #include "KingSystem/ActorSystem/actBaseProcLink.h" #include "KingSystem/Resource/resHandle.h" -namespace uking::dmg { +namespace uking::act { // FIXME: incomplete class DamageInfoMgr { @@ -59,4 +59,4 @@ private: }; KSYS_CHECK_SIZE_NX150(DamageInfoMgr, 0x12F0); -} // namespace uking::dmg +} // namespace uking::act diff --git a/src/Game/Actor/Damage/dmgDamageManagerBase.cpp b/src/Game/Actor/Damage/actDamageManagerBase.cpp similarity index 67% rename from src/Game/Actor/Damage/dmgDamageManagerBase.cpp rename to src/Game/Actor/Damage/actDamageManagerBase.cpp index 26e8876b..ab634ec4 100644 --- a/src/Game/Actor/Damage/dmgDamageManagerBase.cpp +++ b/src/Game/Actor/Damage/actDamageManagerBase.cpp @@ -1,6 +1,5 @@ -#include "Game/Actor/Damage/dmgDamageManagerBase.h" +#include "Game/Actor/Damage/actDamageManagerBase.h" #include "Game/AOC/aocHardModeManager.h" -#include "Game/Actor/Damage/dmgDamageCallback.h" #include "KingSystem/ActorSystem/actActor.h" #include "KingSystem/ActorSystem/actActorLinkConstDataAccess.h" #include "KingSystem/ActorSystem/actActorParam.h" @@ -9,18 +8,14 @@ #include "KingSystem/Resource/Actor/resResourceGParamList.h" #include "KingSystem/Resource/GeneralParamList/resGParamListObjectGeneral.h" -namespace uking::dmg { - -DamageManagerBase_UnknownBase1::DamageManagerBase_UnknownBase1(ksys::act::Actor* actor) - : mActor(actor) {} +namespace uking::act { // Compiler seems to combine zero(0) writes to (0x0 ,0x8) and (0x10, 0x18) // when writing the vtable and Actor. // The original Compiler writes (0x8, 0x10) in one 'stp', and writes 0x0 and 0x18 individually with // 'str'. The rest seems to fall out of sync due to that, but it's otherwise functionally the same. // NON_MATCHING: Incorrect order. -DamageManagerBase::DamageManagerBase(ksys::act::Actor* actor) - : DamageManagerBase_UnknownBase1(actor) {} +DamageManagerBase::DamageManagerBase(ksys::act::Actor* actor) : IDamageManager(actor) {} u32 DamageManagerBase::getDamage() { u32 result; @@ -32,81 +27,6 @@ u32 DamageManagerBase::getDamage() { return result; } -void DamageManagerBase::addDamageCallback(s32 eventId, DamageCallback* callback) { - if (mCallbacks.isBufferReady() && !callback->mDamageManager) { - DamageCallback* next = mCallbacks[eventId]; - if (next) { - DamageCallback* prev; - while (next) { - prev = next; - next = next->mNext; - } - - prev->mNext = callback; - callback->mPrev = prev; - } else { - mCallbacks[eventId] = callback; - } - - callback->mDamageManager = this; - callback->mEventId = eventId; - } -} - -void DamageManagerBase::removeDamageCallback(DamageCallback* callback) { - if (!mCallbacks.isBufferReady() || callback->mDamageManager != this) { - return; - } - - u32 event_id = callback->mEventId; - DamageCallback* current_callback = mCallbacks[event_id]; - if (!current_callback) { - if (mActor) { - // Logging about trying to remove missing callback? - mActor->nullsub_4649(); - } - - callback->mDamageManager = nullptr; - callback->mEventId = -1; -#ifdef MATCHING_HACK_NX_CLANG - asm(""); // Stop optimizing with the other clear below -#endif - return; - } - - if (current_callback == callback) { - mCallbacks[event_id] = callback->mNext; - current_callback = mCallbacks[event_id]; - if (current_callback) { - current_callback->mPrev = nullptr; - } -#ifdef MATCHING_HACK_NX_CLANG - asm(""); // Stop re-using variables, generating an extra register -#endif - } else { - do { - if (current_callback == callback) { - DamageCallback* prev = callback->mPrev; - if (prev) { - prev->mNext = callback->mNext; - } - DamageCallback* next = callback->mNext; - if (next) { - next->mPrev = callback->mPrev; - } - } - current_callback = current_callback->mNext; - } while (current_callback); - } - callback->mNext = nullptr; -#ifdef MATCHING_HACK_NX_CLANG - asm(""); // Stop combining the mNext and mDamageManager -#endif - callback->mDamageManager = nullptr; - callback->mEventId = -1; - callback->mPrev = nullptr; -} - bool DamageManagerBase::applyDamage(s32& life) { auto* param_list = mActor->getParam()->getRes().mGParamList; @@ -276,4 +196,19 @@ s32 DamageManagerBase::m49(s32 damageTypeMaybe) { return 0; } -} // namespace uking::dmg +void Struct20::combineMaybe(ksys::act::Struct20Base* other) { + Struct20* otherStruct = sead::DynamicCast(other); + if (!otherStruct) { + return; + } + + mField_8 += otherStruct->mField_8; + mField_C += otherStruct->mField_C; + mField_10 += otherStruct->mField_10; + if (mField_18 < otherStruct->mField_18) { + mField_14 = otherStruct->mField_14; + mField_18 = otherStruct->mField_18; + } +} + +} // namespace uking::act diff --git a/src/Game/Actor/Damage/dmgDamageManagerBase.h b/src/Game/Actor/Damage/actDamageManagerBase.h similarity index 67% rename from src/Game/Actor/Damage/dmgDamageManagerBase.h rename to src/Game/Actor/Damage/actDamageManagerBase.h index dc92804c..3df0fe90 100644 --- a/src/Game/Actor/Damage/dmgDamageManagerBase.h +++ b/src/Game/Actor/Damage/actDamageManagerBase.h @@ -3,39 +3,20 @@ #include #include #include +#include #include -#include "Game/Actor/Damage/dmgInfoManager.h" -#include "Game/Actor/Damage/dmgStruct20.h" +#include "Game/Actor/Damage/actDamageInfoMgr.h" +#include "Game/Actor/Damage/actStruct20.h" #include "KingSystem/ActorSystem/actBaseProcLink.h" +#include "KingSystem/ActorSystem/actIDamageManager.h" namespace ksys::act { class Actor; class ActorParam; } // namespace ksys::act -namespace uking::dmg { - -class DamageCallback; - -// FIXME: Unknown base. This base seems to handle callbacks and messaging, so maybe a shared base? -class DamageManagerBase_UnknownBase1 { -public: - explicit DamageManagerBase_UnknownBase1(ksys::act::Actor* WeaponActor); - virtual ~DamageManagerBase_UnknownBase1() = default; - - // Sturct20 for Damage receive/send? - Struct20Base* mStruct20_a = nullptr; - Struct20Base* mStruct20_b = nullptr; - - ksys::act::Actor* mActor = nullptr; - - sead::Buffer mCallbacks{}; - - // Callback status flags? - s32 mField_30 = 0; - s8 mField_34 = 0; -}; +namespace uking::act { // FIXME: Unknown base 2. Helper functions maybe? Might also contain some of the fields from // DamageManagerBase. @@ -44,25 +25,22 @@ public: virtual ~DamageManagerBase_UnknownBase2() = default; }; -class DamageManagerBase : public DamageManagerBase_UnknownBase1, - public DamageManagerBase_UnknownBase2 { +class DamageManagerBase : public ksys::act::IDamageManager, public DamageManagerBase_UnknownBase2 { public: explicit DamageManagerBase(ksys::act::Actor* actor); ~DamageManagerBase() override = default; - SEAD_RTTI_BASE(DamageManagerBase) + SEAD_RTTI_OVERRIDE(DamageManagerBase, ksys::act::IDamageManager) - virtual u32 getDamage(); - virtual s32 getField48() { return mField_48; } - virtual s32 getMinDmg() { return mMinDmg; } - virtual s32 getField50() { return mField_50; } - virtual s32 getField54() { return mField_54; } - virtual bool checkDamageFlags() { return false; } - virtual s32 getFlags2() { return mFlags2; } - virtual void addDamageCallback(s32 eventId, DamageCallback* callback); - virtual void removeDamageCallback(DamageCallback* callback); + u32 getDamage() override; + s32 getField48() override { return mField_48; } + s32 getMinDmg() override { return mMinDmg; } + s32 getField50() override { return mField_50; } + s32 getField54() override { return mField_54; } + bool checkDamageFlags() override { return false; } + s32 getFlags2() override { return mFlags2; } virtual f32 m13() { return 0.0f; } - virtual bool m14() { return false; } + virtual bool getStasisBlowVelocity(sead::Vector3f* velocity) { return false; } virtual bool applyDamage(s32& life); virtual bool m16() { return false; } virtual void accumulateStasisBlowVelocity() {} @@ -140,4 +118,4 @@ private: }; KSYS_CHECK_SIZE_NX150(DamageManagerBase, 0x68); -} // namespace uking::dmg +} // namespace uking::act diff --git a/src/Game/Actor/Damage/actDamageMgr.cpp b/src/Game/Actor/Damage/actDamageMgr.cpp new file mode 100644 index 00000000..22a478b4 --- /dev/null +++ b/src/Game/Actor/Damage/actDamageMgr.cpp @@ -0,0 +1,30 @@ +#include "Game/Actor/Damage/actStruct20.h" + +namespace uking::act { + +void Struct20_2::reset() { + mField_1C = 0; + mField_30 = false; + + Struct20::reset(); +} + +void Struct20_2::combineMaybe(ksys::act::Struct20Base* other) { + Struct20_2* otherStruct = sead::DynamicCast(other); + if (!otherStruct) { + Struct20::combineMaybe(other); + return; + } + + mField_1C |= otherStruct->mField_1C; + Struct20::combineMaybe(other); + if (mField_18 == otherStruct->mField_18 && otherStruct->mField_30) { + mField_30 = true; + mField_20 = otherStruct->mField_20; + mField_24 = otherStruct->mField_24; + mField_28 = otherStruct->mField_28; + mField_2C = otherStruct->mField_2C; + } +} + +} // namespace uking::act diff --git a/src/Game/Actor/Damage/dmgStruct20.h b/src/Game/Actor/Damage/actStruct20.h similarity index 68% rename from src/Game/Actor/Damage/dmgStruct20.h rename to src/Game/Actor/Damage/actStruct20.h index e3601caf..7c341311 100644 --- a/src/Game/Actor/Damage/dmgStruct20.h +++ b/src/Game/Actor/Damage/actStruct20.h @@ -3,9 +3,10 @@ #include #include +#include "KingSystem/ActorSystem/actIDamageManager.h" #include "KingSystem/Utils/Types.h" -namespace uking::dmg { +namespace uking::act { // What exactly Struct20 is, isn't known yet. // It is used by the Damage Managers, especially DamageManager and up, not so much in @@ -14,25 +15,15 @@ namespace uking::dmg { // TODO: Figure out exactly what Struct20 does and rename struct + variables to fit. -class Struct20Base { - SEAD_RTTI_BASE(Struct20Base) - -public: - virtual ~Struct20Base() = default; - - virtual void reset(); - virtual void combineMaybe(Struct20Base* other); -}; - -class Struct20 : public Struct20Base { - SEAD_RTTI_OVERRIDE(Struct20, Struct20Base) +class Struct20 : public ksys::act::Struct20Base { + SEAD_RTTI_OVERRIDE(Struct20, ksys::act::Struct20Base) public: ~Struct20() override { ; } void reset() override; - __attribute__((noinline)) void combineMaybe(Struct20Base* other) override; + __attribute__((noinline)) void combineMaybe(ksys::act::Struct20Base* other) override; // Unknown which fields belong in Struct20 vs Struct20Base u32 mField_8 = 0; @@ -44,6 +35,14 @@ public: }; KSYS_CHECK_SIZE_NX150(Struct20, 0x20); +inline void Struct20::reset() { + mField_8 = 0; + mField_C = 0; + mField_10 = 0; + mField_14 = -1; + mField_18 = -1; +} + class Struct20_2 : public Struct20 { SEAD_RTTI_OVERRIDE(Struct20_2, Struct20) @@ -51,7 +50,7 @@ public: ~Struct20_2() override { ; } void reset() override; - void combineMaybe(Struct20Base* other) override; + void combineMaybe(ksys::act::Struct20Base* other) override; f32 mField_20; f32 mField_24; @@ -61,4 +60,4 @@ public: }; KSYS_CHECK_SIZE_NX150(Struct20_2, 0x38); -} // namespace uking::dmg +} // namespace uking::act diff --git a/src/Game/Actor/Damage/dmgDamageCallback.h b/src/Game/Actor/Damage/dmgDamageCallback.h deleted file mode 100644 index b62e2658..00000000 --- a/src/Game/Actor/Damage/dmgDamageCallback.h +++ /dev/null @@ -1,21 +0,0 @@ -#pragma once - -#include - -namespace uking::dmg { - -class DamageManagerBase; - -// FIXME: incomplete -class DamageCallback { -public: - virtual ~DamageCallback() {} - virtual void call(u32* a1, s32* a2, u32* a3, u32* a4, u32* a5, u64 a6); - - DamageCallback* mPrev; - DamageCallback* mNext; - DamageManagerBase* mDamageManager; // Might be a different base class(Interface?) - u32 mEventId; -}; - -} // namespace uking::dmg diff --git a/src/Game/Actor/Damage/dmgStruct20.cpp b/src/Game/Actor/Damage/dmgStruct20.cpp deleted file mode 100644 index d52eb3a6..00000000 --- a/src/Game/Actor/Damage/dmgStruct20.cpp +++ /dev/null @@ -1,53 +0,0 @@ -#include "Game/Actor/Damage/dmgStruct20.h" - -namespace uking::dmg { - -void Struct20::reset() { - mField_8 = 0; - mField_C = 0; - mField_10 = 0; - mField_14 = -1; - mField_18 = -1; -} - -void Struct20::combineMaybe(Struct20Base* other) { - Struct20* otherStruct = sead::DynamicCast(other); - if (!otherStruct) { - return; - } - - mField_8 += otherStruct->mField_8; - mField_C += otherStruct->mField_C; - mField_10 += otherStruct->mField_10; - if (mField_18 < otherStruct->mField_18) { - mField_14 = otherStruct->mField_14; - mField_18 = otherStruct->mField_18; - } -} - -void Struct20_2::reset() { - mField_1C = 0; - mField_30 = false; - - Struct20::reset(); -} - -void Struct20_2::combineMaybe(Struct20Base* other) { - Struct20_2* otherStruct = sead::DynamicCast(other); - if (!otherStruct) { - Struct20::combineMaybe(other); - return; - } - - mField_1C |= otherStruct->mField_1C; - Struct20::combineMaybe(other); - if (mField_18 == otherStruct->mField_18 && otherStruct->mField_30) { - mField_30 = true; - mField_20 = otherStruct->mField_20; - mField_24 = otherStruct->mField_24; - mField_28 = otherStruct->mField_28; - mField_2C = otherStruct->mField_2C; - } -} - -} // namespace uking::dmg diff --git a/src/Game/UI/uiUtils.cpp b/src/Game/UI/uiUtils.cpp index 3d4e4979..839f3336 100644 --- a/src/Game/UI/uiUtils.cpp +++ b/src/Game/UI/uiUtils.cpp @@ -1,6 +1,6 @@ #include "Game/UI/uiUtils.h" #include "Game/AOC/aocHardModeManager.h" -#include "Game/Actor/Damage/dmgInfoManager.h" +#include "Game/Actor/Damage/actDamageInfoMgr.h" #include "Game/Actor/actPlayerCreateMgr.h" #include "Game/Actor/actWeapon.h" #include "Game/UI/uiPauseMenuDataMgr.h" @@ -56,7 +56,7 @@ void getWeaponStats(const PouchItem& item, WeaponStats* stats) { } else if (isMasterSwordItem(item)) { int power = 0; if (item.getValue() > 0) { - const bool is_true_form = dmg::DamageInfoMgr::instance()->isTrueFormMasterSword(); + const bool is_true_form = act::DamageInfoMgr::instance()->isTrueFormMasterSword(); auto* info_ = ksys::act::InfoData::instance(); const char* name = item.getName().cstr(); if (is_true_form) { @@ -69,7 +69,7 @@ void getWeaponStats(const PouchItem& item, WeaponStats* stats) { stats->power = power; } else if (isOneHitObliteratorActorName(item.getName())) { - stats->power = dmg::DamageInfoMgr::instance()->isOneHitObliteratorActive() ? 99999 : 1; + stats->power = act::DamageInfoMgr::instance()->isOneHitObliteratorActive() ? 99999 : 1; } else { stats->power = ksys::act::getAttackPower(ksys::act::InfoData::instance(), item.getName().cstr()); diff --git a/src/KingSystem/ActorSystem/CMakeLists.txt b/src/KingSystem/ActorSystem/CMakeLists.txt index b3f0e0da..c83f97de 100644 --- a/src/KingSystem/ActorSystem/CMakeLists.txt +++ b/src/KingSystem/ActorSystem/CMakeLists.txt @@ -101,6 +101,8 @@ target_sources(uking PRIVATE actDebug.h actGlobalParameter.cpp actGlobalParameter.h + actIDamageManager.cpp + actIDamageManager.h actInfoCommon.cpp actInfoCommon.h actInfoData.cpp diff --git a/src/KingSystem/ActorSystem/actActor.h b/src/KingSystem/ActorSystem/actActor.h index d9b2952b..2749d091 100644 --- a/src/KingSystem/ActorSystem/actActor.h +++ b/src/KingSystem/ActorSystem/actActor.h @@ -23,10 +23,6 @@ namespace gsys { class Model; } // namespace gsys -namespace uking::dmg { -class DamageManagerBase; -} // namespace uking::dmg - namespace ksys { namespace as { @@ -74,6 +70,7 @@ class BaseProcLink; class BoneControl; class Chemical; class ImpulseBaseProcLink; +class IDamageManager; class ModelBindInfo; class Schedule; @@ -270,7 +267,7 @@ public: virtual void onPlacementObjReset(); virtual void getAtk(); virtual void m126(); - virtual uking::dmg::DamageManagerBase* getDamageMgr(); + virtual IDamageManager* getDamageMgr(); virtual void m128(); virtual void m129(); virtual void getPlayerRideInfo(); diff --git a/src/KingSystem/ActorSystem/actIDamageManager.cpp b/src/KingSystem/ActorSystem/actIDamageManager.cpp new file mode 100644 index 00000000..fd4f09a6 --- /dev/null +++ b/src/KingSystem/ActorSystem/actIDamageManager.cpp @@ -0,0 +1,81 @@ +#include "KingSystem/ActorSystem/actIDamageManager.h" +#include "KingSystem/ActorSystem/actActor.h" + +namespace ksys::act { + +void IDamageManager::addDamageCallback(s32 eventId, DamageCallback* callback) { + if (mCallbacks.isBufferReady() && !callback->mDamageManager) { + DamageCallback* next = mCallbacks[eventId]; + if (next) { + DamageCallback* prev; + while (next) { + prev = next; + next = next->mNext; + } + + prev->mNext = callback; + callback->mPrev = prev; + } else { + mCallbacks[eventId] = callback; + } + + callback->mDamageManager = this; + callback->mEventId = eventId; + } +} + +void IDamageManager::removeDamageCallback(DamageCallback* callback) { + if (!mCallbacks.isBufferReady() || callback->mDamageManager != this) { + return; + } + + u32 event_id = callback->mEventId; + DamageCallback* current_callback = mCallbacks[event_id]; + if (!current_callback) { + if (mActor) { + // Logging about trying to remove missing callback? + mActor->nullsub_4649(); + } + + callback->mDamageManager = nullptr; + callback->mEventId = -1; +#ifdef MATCHING_HACK_NX_CLANG + asm(""); // Stop optimizing with the other clear below +#endif + return; + } + + if (current_callback == callback) { + mCallbacks[event_id] = callback->mNext; + current_callback = mCallbacks[event_id]; + if (current_callback) { + current_callback->mPrev = nullptr; + } +#ifdef MATCHING_HACK_NX_CLANG + asm(""); // Stop re-using variables, generating an extra register +#endif + } else { + do { + if (current_callback == callback) { + DamageCallback* prev = callback->mPrev; + if (prev) { + prev->mNext = callback->mNext; + } + DamageCallback* next = callback->mNext; + if (next) { + next->mPrev = callback->mPrev; + } + } + current_callback = current_callback->mNext; + } while (current_callback); + } + callback->mNext = nullptr; +#ifdef MATCHING_HACK_NX_CLANG + asm(""); // Stop combining the mNext and mDamageManager +#endif + callback->mDamageManager = nullptr; + callback->mEventId = -1; + callback->mPrev = nullptr; +} + +} // namespace ksys::act diff --git a/src/KingSystem/ActorSystem/actIDamageManager.h b/src/KingSystem/ActorSystem/actIDamageManager.h new file mode 100644 index 00000000..4a5b77fa --- /dev/null +++ b/src/KingSystem/ActorSystem/actIDamageManager.h @@ -0,0 +1,64 @@ +#pragma once + +#include +#include +#include + +namespace ksys::act { + +class Actor; +class IDamageManager; + +class DamageCallback { +public: + virtual ~DamageCallback() {} + virtual void call(u32* a1, s32* a2, u32* a3, u32* a4, u32* a5, u64 a6); + + DamageCallback* mPrev; + DamageCallback* mNext; + IDamageManager* mDamageManager; + u32 mEventId; +}; + +class Struct20Base { + SEAD_RTTI_BASE(Struct20Base) + +public: + virtual ~Struct20Base() = default; + + virtual void reset(); + virtual void combineMaybe(Struct20Base* other); +}; + +class IDamageManager { +public: + explicit IDamageManager(Actor* actor) : mActor(actor) {} + + SEAD_RTTI_BASE(IDamageManager) + + virtual ~IDamageManager() = default; + + virtual u32 getDamage() = 0; + virtual s32 getField48() = 0; + virtual s32 getMinDmg() = 0; + virtual s32 getField50() = 0; + virtual s32 getField54() = 0; + virtual bool checkDamageFlags() = 0; + virtual s32 getFlags2() = 0; + virtual void addDamageCallback(s32 eventId, DamageCallback* callback); + virtual void removeDamageCallback(DamageCallback* callback); + + // Sturct20 for Damage receive/send? + Struct20Base* mStruct20_a = nullptr; + Struct20Base* mStruct20_b = nullptr; + + Actor* mActor = nullptr; + + sead::Buffer mCallbacks{}; + + // Callback status flags? + s32 mField_30 = 0; + s8 mField_34 = 0; +}; + +} // namespace ksys::act