mirror of
https://github.com/zeldaret/botw
synced 2026-10-14 07:01:24 -04:00
Merge pull request #221 from leoetlino/stack/03d1-damage-handler
ksys/act: split IDamageManager out of DamageManagerBase
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