mirror of
https://github.com/zeldaret/botw
synced 2026-10-12 14:29:41 -04:00
ksys/act: split IDamageManager out of DamageManagerBase
DamageManagerBase's root base class (previously DamageManagerBase_UnknownBase1) holds the damage callback list, and its code is linked among the ActorSystem objects rather than with the Game/Actor/Damage files. It appears to be an engine-side abstract base, so let's move it to KingSystem/ActorSystem as ksys::act::IDamageManager (unofficial name, following the ksys IManager/Manager pattern and Actor::getDamageMgr), together with DamageCallback and Struct20Base, and have Actor::getDamageMgr return it. DamageManagerBase now overrides its getters and inherits addDamageCallback/removeDamageCallback from it. The rest of the damage code stays in Game/Actor/Damage but is regrouped to match link order: Struct20::combineMaybe moves into actDamageManagerBase.cpp, Struct20::reset becomes inline and dmgStruct20.cpp becomes actDamageMgr.cpp. The uking::dmg namespace is merged into uking::act, so the files there take the act prefix too, and dmgInfoManager becomes actDamageInfoMgr after the class it holds. (AI assisted using Claude Fable 5.1 and Claude Opus 5.5)
This commit is contained in:
+72
-72
@@ -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
|
||||
|
||||
|
Can't render this file because it is too large.
|
@@ -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
|
||||
)
|
||||
|
||||
+3
-3
@@ -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
|
||||
@@ -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
|
||||
+19
-84
@@ -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<Struct20>(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
|
||||
+16
-38
@@ -3,39 +3,20 @@
|
||||
#include <basis/seadTypes.h>
|
||||
#include <container/seadBuffer.h>
|
||||
#include <heap/seadExpHeap.h>
|
||||
#include <math/seadVector.h>
|
||||
#include <prim/seadRuntimeTypeInfo.h>
|
||||
|
||||
#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<DamageCallback*> 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
|
||||
@@ -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<Struct20_2>(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
|
||||
@@ -3,9 +3,10 @@
|
||||
#include <basis/seadTypes.h>
|
||||
#include <prim/seadRuntimeTypeInfo.h>
|
||||
|
||||
#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
|
||||
@@ -1,21 +0,0 @@
|
||||
#pragma once
|
||||
|
||||
#include <basis/seadTypes.h>
|
||||
|
||||
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
|
||||
@@ -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<Struct20>(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<Struct20_2>(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
|
||||
@@ -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());
|
||||
|
||||
@@ -101,6 +101,8 @@ target_sources(uking PRIVATE
|
||||
actDebug.h
|
||||
actGlobalParameter.cpp
|
||||
actGlobalParameter.h
|
||||
actIDamageManager.cpp
|
||||
actIDamageManager.h
|
||||
actInfoCommon.cpp
|
||||
actInfoCommon.h
|
||||
actInfoData.cpp
|
||||
|
||||
@@ -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();
|
||||
|
||||
@@ -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
|
||||
@@ -0,0 +1,64 @@
|
||||
#pragma once
|
||||
|
||||
#include <basis/seadTypes.h>
|
||||
#include <container/seadBuffer.h>
|
||||
#include <prim/seadRuntimeTypeInfo.h>
|
||||
|
||||
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<DamageCallback*> mCallbacks{};
|
||||
|
||||
// Callback status flags?
|
||||
s32 mField_30 = 0;
|
||||
s8 mField_34 = 0;
|
||||
};
|
||||
|
||||
} // namespace ksys::act
|
||||
Reference in New Issue
Block a user