ksys/act: rename the actor accessor to ActorLinkConstDataAccess

The 0x18-sized accessor appears to be named ActorLinkConstDataAccess
based on a source path string in the Wii U build. The 0x10-sized
base class (which we had given the name to) only holds a BaseProc and
its dtor/acquire functions live in a separate TU so let's rename it
BaseProcAccessor (unofficial name).

acquireActor is a header inline whose one copy landed in the BeamBase
object. Nothing in BeamBase calls it, so the BeamBase function that used
it was probably dead-stripped by the linker.

(AI assisted using Claude Opus 5.5)
This commit is contained in:
Léo Lam
2026-10-11 04:13:20 +02:00
parent 49c6b5c183
commit 6e9afd0f7d
34 changed files with 806 additions and 817 deletions
+83 -83
View File
@@ -190,7 +190,7 @@ Address,Quality,Size,Name
0x0000007100003140,U,000852,BeamBase::reflectMaybe
0x0000007100003494,U,000880,
0x0000007100003804,U,000096,
0x0000007100003864,O,000248,_ZN4ksys3act12acquireActorEPNS0_12BaseProcLinkEPNS0_20ActorConstDataAccessE
0x0000007100003864,O,000248,_ZN4ksys3act12acquireActorEPNS0_12BaseProcLinkEPNS0_24ActorLinkConstDataAccessE
0x000000710000395c,U,000132,
0x00000071000039e0,U,000316,
0x0000007100003b1c,U,000280,
@@ -19767,9 +19767,9 @@ Address,Quality,Size,Name
0x00000071002df93c,O,000128,_ZN5uking3act18WeaponModifierInfo30pickRandomYellowModifierAmiiboERKN4sead14SafeStringBaseIcEE
0x00000071002df9bc,M,000480,_ZN5uking3act18WeaponModifierInfo26pickRandomBlueModifierTboxERKN4sead14SafeStringBaseIcEE
0x00000071002dfb9c,O,000628,_ZN5uking3act18WeaponModifierInfo18pickRandomModifierERKNS0_20WeaponModifierRangesE
0x00000071002dfe10,m,000292,_ZN5uking3act18WeaponModifierInfo27pickRandomBlueModifierActorERKN4ksys3act20ActorConstDataAccessE
0x00000071002dfe10,m,000292,_ZN5uking3act18WeaponModifierInfo27pickRandomBlueModifierActorERKN4ksys3act24ActorLinkConstDataAccessE
0x00000071002dff34,M,000480,_ZN5uking3act18WeaponModifierInfo28pickRandomYellowModifierTboxERKN4sead14SafeStringBaseIcEE
0x00000071002e0114,M,000516,_ZN5uking3act18WeaponModifierInfo29pickRandomYellowModifierActorERKN4ksys3act20ActorConstDataAccessE
0x00000071002e0114,M,000516,_ZN5uking3act18WeaponModifierInfo29pickRandomYellowModifierActorERKN4ksys3act24ActorLinkConstDataAccessE
0x00000071002e0318,U,000404,weaponBonusStuff_0
0x00000071002e04ac,U,000876,Weapon::ctor
0x00000071002e0818,U,000108,Weapon::invokedEmitBlinkEffect
@@ -73289,74 +73289,74 @@ Address,Quality,Size,Name
0x0000007100d0da88,O,000096,_ZN4ksys7Account4initEPN4sead4HeapE
0x0000007100d0dae8,O,000008,_ZNK4ksys7Account13getUserHandleEv
0x0000007100d0daf0,O,000028,_ZNK4ksys7Account9getUserIdEPN2nn7account3UidE
0x0000007100d0db0c,O,000144,_ZN4ksys3act20ActorConstDataAccess12acquireActorERKNS0_24ActorLinkConstDataAccessE
0x0000007100d0db9c,O,000016,_ZNK4ksys3act20ActorConstDataAccess7hasProcEPNS0_8BaseProcE
0x0000007100d0dbac,O,000144,_ZNK4ksys3act20ActorConstDataAccess7hasProcERKNS0_12BaseProcLinkE
0x0000007100d0dc3c,O,000168,_ZNK4ksys3act20ActorConstDataAccess11linkAcquireEPNS0_12BaseProcLinkE
0x0000007100d0dce4,O,000168,_ZNK4ksys3act20ActorConstDataAccess22linkAcquireImmediatelyEPNS0_12BaseProcLinkE
0x0000007100d0db0c,O,000144,_ZN4ksys3act24ActorLinkConstDataAccess12acquireActorERKNS0_16BaseProcAccessorE
0x0000007100d0db9c,O,000016,_ZNK4ksys3act24ActorLinkConstDataAccess7hasProcEPNS0_8BaseProcE
0x0000007100d0dbac,O,000144,_ZNK4ksys3act24ActorLinkConstDataAccess7hasProcERKNS0_12BaseProcLinkE
0x0000007100d0dc3c,O,000168,_ZNK4ksys3act24ActorLinkConstDataAccess11linkAcquireEPNS0_12BaseProcLinkE
0x0000007100d0dce4,O,000168,_ZNK4ksys3act24ActorLinkConstDataAccess22linkAcquireImmediatelyEPNS0_12BaseProcLinkE
0x0000007100d0dd8c,U,000160,act::acc::Actor::getMessageTransceiverId
0x0000007100d0de2c,O,000136,_ZNK4ksys3act20ActorConstDataAccess15isPlayerProfileEv
0x0000007100d0deb4,O,000136,_ZNK4ksys3act20ActorConstDataAccess15isWeaponProfileEv
0x0000007100d0df3c,O,000136,_ZNK4ksys3act20ActorConstDataAccess12isNPCProfileEv
0x0000007100d0dfc4,O,000136,_ZNK4ksys3act20ActorConstDataAccess14isEnemyProfileEv
0x0000007100d0e04c,O,000156,_ZNK4ksys3act20ActorConstDataAccess10getProfileEv
0x0000007100d0e0e8,O,000156,_ZNK4ksys3act20ActorConstDataAccess7getNameEv
0x0000007100d0e184,O,000176,_ZNK4ksys3act20ActorConstDataAccess11getLiftTypeEv
0x0000007100d0e234,O,000180,_ZNK4ksys3act20ActorConstDataAccess19isDisableFreezeLiftEv
0x0000007100d0e2e8,O,000180,_ZNK4ksys3act20ActorConstDataAccess17isDisableBurnLiftEv
0x0000007100d0de2c,O,000136,_ZNK4ksys3act24ActorLinkConstDataAccess15isPlayerProfileEv
0x0000007100d0deb4,O,000136,_ZNK4ksys3act24ActorLinkConstDataAccess15isWeaponProfileEv
0x0000007100d0df3c,O,000136,_ZNK4ksys3act24ActorLinkConstDataAccess12isNPCProfileEv
0x0000007100d0dfc4,O,000136,_ZNK4ksys3act24ActorLinkConstDataAccess14isEnemyProfileEv
0x0000007100d0e04c,O,000156,_ZNK4ksys3act24ActorLinkConstDataAccess10getProfileEv
0x0000007100d0e0e8,O,000156,_ZNK4ksys3act24ActorLinkConstDataAccess7getNameEv
0x0000007100d0e184,O,000176,_ZNK4ksys3act24ActorLinkConstDataAccess11getLiftTypeEv
0x0000007100d0e234,O,000180,_ZNK4ksys3act24ActorLinkConstDataAccess19isDisableFreezeLiftEv
0x0000007100d0e2e8,O,000180,_ZNK4ksys3act24ActorLinkConstDataAccess17isDisableBurnLiftEv
0x0000007100d0e39c,U,000160,
0x0000007100d0e43c,O,000160,_ZNK4ksys3act20ActorConstDataAccess6hasTagEPKc
0x0000007100d0e4dc,O,000160,_ZNK4ksys3act20ActorConstDataAccess6hasTagEj
0x0000007100d0e57c,O,000148,_ZNK4ksys3act20ActorConstDataAccess13getUniqueNameEv
0x0000007100d0e610,O,000140,_ZNK4ksys3act20ActorConstDataAccess5getIdEv
0x0000007100d0e69c,O,000280,_ZNK4ksys3act20ActorConstDataAccess26acquireConnectedCalcParentEPNS0_24ActorLinkConstDataAccessE
0x0000007100d0e7b4,O,000280,_ZNK4ksys3act20ActorConstDataAccess25acquireConnectedCalcChildEPNS0_24ActorLinkConstDataAccessE
0x0000007100d0e8cc,O,000152,_ZNK4ksys3act20ActorConstDataAccess11checkFlag2BEv
0x0000007100d0e964,O,000156,_ZNK4ksys3act20ActorConstDataAccess11deleteLaterENS0_8BaseProc12DeleteReasonE
0x0000007100d0ea00,O,000164,_ZNK4ksys3act20ActorConstDataAccess8deleteExENS0_8BaseProc12DeleteReasonE
0x0000007100d0e43c,O,000160,_ZNK4ksys3act24ActorLinkConstDataAccess6hasTagEPKc
0x0000007100d0e4dc,O,000160,_ZNK4ksys3act24ActorLinkConstDataAccess6hasTagEj
0x0000007100d0e57c,O,000148,_ZNK4ksys3act24ActorLinkConstDataAccess13getUniqueNameEv
0x0000007100d0e610,O,000140,_ZNK4ksys3act24ActorLinkConstDataAccess5getIdEv
0x0000007100d0e69c,O,000280,_ZNK4ksys3act24ActorLinkConstDataAccess26acquireConnectedCalcParentEPNS0_16BaseProcAccessorE
0x0000007100d0e7b4,O,000280,_ZNK4ksys3act24ActorLinkConstDataAccess25acquireConnectedCalcChildEPNS0_16BaseProcAccessorE
0x0000007100d0e8cc,O,000152,_ZNK4ksys3act24ActorLinkConstDataAccess11checkFlag2BEv
0x0000007100d0e964,O,000156,_ZNK4ksys3act24ActorLinkConstDataAccess11deleteLaterENS0_8BaseProc12DeleteReasonE
0x0000007100d0ea00,O,000164,_ZNK4ksys3act24ActorLinkConstDataAccess8deleteExENS0_8BaseProc12DeleteReasonE
0x0000007100d0eaa4,U,000188,
0x0000007100d0eb60,O,000156,_ZNK4ksys3act20ActorConstDataAccess5sleepENS0_8BaseProc15SleepWakeReasonE
0x0000007100d0ebfc,O,000156,_ZNK4ksys3act20ActorConstDataAccess6wakeUpENS0_8BaseProc15SleepWakeReasonE
0x0000007100d0ec98,O,000244,_ZNK4ksys3act20ActorConstDataAccess13setPropertiesEiRKN4sead8Matrix34IfEERKNS2_7Vector3IfEESA_SA_bii
0x0000007100d0ed8c,O,000240,_ZNK4ksys3act20ActorConstDataAccess13setPropertiesERKN4sead8Matrix34IfEERKNS2_7Vector3IfEESA_SA_bii
0x0000007100d0ee7c,O,000148,_ZNK4ksys3act20ActorConstDataAccess12isStateSleepEv
0x0000007100d0ef10,O,000148,_ZNK4ksys3act20ActorConstDataAccess11isStateCalcEv
0x0000007100d0eb60,O,000156,_ZNK4ksys3act24ActorLinkConstDataAccess5sleepENS0_8BaseProc15SleepWakeReasonE
0x0000007100d0ebfc,O,000156,_ZNK4ksys3act24ActorLinkConstDataAccess6wakeUpENS0_8BaseProc15SleepWakeReasonE
0x0000007100d0ec98,O,000244,_ZNK4ksys3act24ActorLinkConstDataAccess13setPropertiesEiRKN4sead8Matrix34IfEERKNS2_7Vector3IfEESA_SA_bii
0x0000007100d0ed8c,O,000240,_ZNK4ksys3act24ActorLinkConstDataAccess13setPropertiesERKN4sead8Matrix34IfEERKNS2_7Vector3IfEESA_SA_bii
0x0000007100d0ee7c,O,000148,_ZNK4ksys3act24ActorLinkConstDataAccess12isStateSleepEv
0x0000007100d0ef10,O,000148,_ZNK4ksys3act24ActorLinkConstDataAccess11isStateCalcEv
0x0000007100d0efa4,U,000164,
0x0000007100d0f048,U,000148,
0x0000007100d0f0dc,O,000164,_ZNK4ksys3act20ActorConstDataAccess19isDeletedOrDeletingEv
0x0000007100d0f0dc,O,000164,_ZNK4ksys3act24ActorLinkConstDataAccess19isDeletedOrDeletingEv
0x0000007100d0f180,U,000148,
0x0000007100d0f214,U,000140,ActorAccessor::getField568
0x0000007100d0f2a0,U,000152,act::acc::Actor::getHorseOptions
0x0000007100d0f338,U,000152,act::acc::Actor::getHorseRideStuff
0x0000007100d0f3d0,U,000140,act::acc::Actor::getQuestLink
0x0000007100d0f45c,O,000144,_ZNK4ksys3act20ActorConstDataAccess13getGParamListEv
0x0000007100d0f4ec,O,000144,_ZNK4ksys3act20ActorConstDataAccess11getShopDataEv
0x0000007100d0f45c,O,000144,_ZNK4ksys3act24ActorLinkConstDataAccess13getGParamListEv
0x0000007100d0f4ec,O,000144,_ZNK4ksys3act24ActorLinkConstDataAccess11getShopDataEv
0x0000007100d0f57c,U,000184,
0x0000007100d0f634,O,000176,_ZNK4ksys3act20ActorConstDataAccess19getAttackSpHitActorEv
0x0000007100d0f6e4,O,000176,_ZNK4ksys3act20ActorConstDataAccess17getAttackSpHitTagEv
0x0000007100d0f794,O,000176,_ZNK4ksys3act20ActorConstDataAccess19getAttackWeakHitTagEv
0x0000007100d0f844,O,000180,_ZNK4ksys3act20ActorConstDataAccess19getAttackSpHitRatioEv
0x0000007100d0f8f8,O,000172,_ZNK4ksys3act20ActorConstDataAccess14getAttackPowerEv
0x0000007100d0f9a4,O,000148,_ZNK4ksys3act20ActorConstDataAccess20getMapObjectLinkDataEv
0x0000007100d0fa38,O,000140,_ZNK4ksys3act20ActorConstDataAccess12getMapObjectEv
0x0000007100d0fac4,O,000180,_ZNK4ksys3act20ActorConstDataAccess12getEnemyRankEv
0x0000007100d0fb78,O,000256,_ZNK4ksys3act20ActorConstDataAccess21getSameGroupActorNameEPN4sead14SafeStringBaseIcEE
0x0000007100d0f634,O,000176,_ZNK4ksys3act24ActorLinkConstDataAccess19getAttackSpHitActorEv
0x0000007100d0f6e4,O,000176,_ZNK4ksys3act24ActorLinkConstDataAccess17getAttackSpHitTagEv
0x0000007100d0f794,O,000176,_ZNK4ksys3act24ActorLinkConstDataAccess19getAttackWeakHitTagEv
0x0000007100d0f844,O,000180,_ZNK4ksys3act24ActorLinkConstDataAccess19getAttackSpHitRatioEv
0x0000007100d0f8f8,O,000172,_ZNK4ksys3act24ActorLinkConstDataAccess14getAttackPowerEv
0x0000007100d0f9a4,O,000148,_ZNK4ksys3act24ActorLinkConstDataAccess20getMapObjectLinkDataEv
0x0000007100d0fa38,O,000140,_ZNK4ksys3act24ActorLinkConstDataAccess12getMapObjectEv
0x0000007100d0fac4,O,000180,_ZNK4ksys3act24ActorLinkConstDataAccess12getEnemyRankEv
0x0000007100d0fb78,O,000256,_ZNK4ksys3act24ActorLinkConstDataAccess21getSameGroupActorNameEPN4sead14SafeStringBaseIcEE
0x0000007100d0fc78,U,000220,act::acc::Actor::getAabb
0x0000007100d0fd54,U,000164,act::acc::Actor::getAabb_0
0x0000007100d0fdf8,U,000180,
0x0000007100d0feac,U,000156,
0x0000007100d0ff48,U,000148,
0x0000007100d0ffdc,U,000196,
0x0000007100d100a0,O,000152,_ZNK4ksys3act20ActorConstDataAccess11checkFlag18Ev
0x0000007100d10138,O,000248,_ZNK4ksys3act20ActorConstDataAccess22hasConnectedCalcParentEv
0x0000007100d10230,O,000368,_ZNK4ksys3act20ActorConstDataAccess26isPlayerTheConnectedParentEv
0x0000007100d100a0,O,000152,_ZNK4ksys3act24ActorLinkConstDataAccess11checkFlag18Ev
0x0000007100d10138,O,000248,_ZNK4ksys3act24ActorLinkConstDataAccess22hasConnectedCalcParentEv
0x0000007100d10230,O,000368,_ZNK4ksys3act24ActorLinkConstDataAccess26isPlayerTheConnectedParentEv
0x0000007100d103a0,U,000168,act::acc::Actor::x
0x0000007100d10448,U,000168,
0x0000007100d104f0,U,000184,act::acc::Actor::getHomeMtx
0x0000007100d105a8,U,000188,act::acc::Actor::getHomePos
0x0000007100d10664,U,000156,act::acc::Actor::getFieldBodyGroup
0x0000007100d10700,O,000156,_ZN4ksys3act24ActorLinkConstDataAccess11getActorMtxEv
0x0000007100d1079c,O,000004,_ZNK4ksys3act20ActorConstDataAccess8debugLogEiRKN4sead14SafeStringBaseIcEE
0x0000007100d1079c,O,000004,_ZNK4ksys3act24ActorLinkConstDataAccess8debugLogEiRKN4sead14SafeStringBaseIcEE
0x0000007100d107a0,U,000148,ActorAccessor::getPosition2
0x0000007100d10834,U,000156,act::acc::getPreviousPos2
0x0000007100d108d0,U,000156,act::acc::getField440_Vec3
@@ -73390,8 +73390,8 @@ Address,Quality,Size,Name
0x0000007100d11fb0,U,000180,
0x0000007100d12064,U,000156,act::actor::getField418
0x0000007100d12100,U,000148,act::actor::getScaleX
0x0000007100d12194,O,000172,_ZN4ksys3act20ActorConstDataAccess20setThisActorAsParentEPNS0_8BaseProcEb
0x0000007100d12240,O,000172,_ZN4ksys3act20ActorConstDataAccess19setThisActorAsChildEPNS0_8BaseProcEb
0x0000007100d12194,O,000172,_ZN4ksys3act24ActorLinkConstDataAccess20setThisActorAsParentEPNS0_8BaseProcEb
0x0000007100d12240,O,000172,_ZN4ksys3act24ActorLinkConstDataAccess19setThisActorAsChildEPNS0_8BaseProcEb
0x0000007100d122ec,U,000180,
0x0000007100d123a0,U,000672,act::acc::Actor::navmeshStuff
0x0000007100d12640,U,000280,
@@ -73413,7 +73413,7 @@ Address,Quality,Size,Name
0x0000007100d1370c,U,000180,
0x0000007100d137c0,U,000160,
0x0000007100d13860,U,000152,
0x0000007100d138f8,U,000156,_ZNK4ksys3act20ActorConstDataAccess18isAttClientEnabledERKN4sead14SafeStringBaseIcEE
0x0000007100d138f8,U,000156,_ZNK4ksys3act24ActorLinkConstDataAccess18isAttClientEnabledERKN4sead14SafeStringBaseIcEE
0x0000007100d13994,U,000168,
0x0000007100d13a3c,U,000168,
0x0000007100d13ae4,U,000212,
@@ -73435,12 +73435,12 @@ Address,Quality,Size,Name
0x0000007100d1463c,U,000156,
0x0000007100d146d8,U,000168,
0x0000007100d14780,U,000180,
0x0000007100d14834,O,000208,_ZNK4ksys3act20ActorConstDataAccess15isFlyingBalloonEv
0x0000007100d14904,O,000200,_ZNK4ksys3act20ActorConstDataAccess29getBalloonHungActorBaseProcIDEv
0x0000007100d149cc,O,000152,_ZNK4ksys3act20ActorConstDataAccess11checkFlag25Ev
0x0000007100d14a64,O,000180,_ZNK4ksys3act20ActorConstDataAccess18getHorseMoveRadiusEv
0x0000007100d14b18,O,000180,_ZNK4ksys3act20ActorConstDataAccess19getHorseAvoidOffsetEv
0x0000007100d14bcc,O,000180,_ZNK4ksys3act20ActorConstDataAccess33horseTargetedIsCircularMoveAlwaysEv
0x0000007100d14834,O,000208,_ZNK4ksys3act24ActorLinkConstDataAccess15isFlyingBalloonEv
0x0000007100d14904,O,000200,_ZNK4ksys3act24ActorLinkConstDataAccess29getBalloonHungActorBaseProcIDEv
0x0000007100d149cc,O,000152,_ZNK4ksys3act24ActorLinkConstDataAccess11checkFlag25Ev
0x0000007100d14a64,O,000180,_ZNK4ksys3act24ActorLinkConstDataAccess18getHorseMoveRadiusEv
0x0000007100d14b18,O,000180,_ZNK4ksys3act24ActorLinkConstDataAccess19getHorseAvoidOffsetEv
0x0000007100d14bcc,O,000180,_ZNK4ksys3act24ActorLinkConstDataAccess33horseTargetedIsCircularMoveAlwaysEv
0x0000007100d14c80,U,000192,
0x0000007100d14d40,U,000204,
0x0000007100d14e0c,U,000152,
@@ -74202,8 +74202,8 @@ Address,Quality,Size,Name
0x0000007100d403e4,O,000036,_ZN4ksys3act14PhysicsUserTagC1EPNS0_5ActorE
0x0000007100d40408,O,000004,_ZN4ksys3act14PhysicsUserTagD1Ev
0x0000007100d4040c,O,000004,_ZN4ksys3act14PhysicsUserTagD0Ev
0x0000007100d40410,O,000144,_ZNK4ksys3act14PhysicsUserTag8getActorEPNS0_24ActorLinkConstDataAccessEPNS0_5ActorE
0x0000007100d404a0,O,000016,_ZNK4ksys3act14PhysicsUserTag12acquireActorEPNS0_24ActorLinkConstDataAccessE
0x0000007100d40410,O,000144,_ZNK4ksys3act14PhysicsUserTag8getActorEPNS0_16BaseProcAccessorEPNS0_5ActorE
0x0000007100d404a0,O,000016,_ZNK4ksys3act14PhysicsUserTag12acquireActorEPNS0_16BaseProcAccessorE
0x0000007100d404b0,U,000016,act::PhysicsUserTag::m2
0x0000007100d404c0,U,000352,act::PhysicsUserTag::stopTimerNoDisplayStuff
0x0000007100d40620,U,000112,act::PhysicsUserTag::m5
@@ -74301,7 +74301,7 @@ Address,Quality,Size,Name
0x0000007100d4a1f8,O,000132,_ZN4ksys3map6Object10tryGetProcEb
0x0000007100d4a27c,O,000244,_ZN4ksys3map6Object11tryGetActorEb
0x0000007100d4a370,U,000244,PlacementObj::x_10
0x0000007100d4a464,O,000088,_ZN4ksys3map6Object20getActorWithAccessorERNS_3act24ActorLinkConstDataAccessE
0x0000007100d4a464,O,000088,_ZN4ksys3map6Object20getActorWithAccessorERNS_3act16BaseProcAccessorE
0x0000007100d4a4bc,O,000140,_ZN4ksys3map6Object8getActorEv
0x0000007100d4a548,O,000320,_ZN4ksys3map6Object16registerBaseProcEPNS_3act8BaseProcE
0x0000007100d4a688,O,000008,_ZN4ksys3map6Object17setBaseProcDirectEPNS_3act8BaseProcE
@@ -74369,7 +74369,7 @@ Address,Quality,Size,Name
0x0000007100d4e140,O,000096,_ZN4ksys3map10ObjectLink21getDescriptionForTypeENS0_14MapLinkDefTypeE
0x0000007100d4e1a0,O,000324,_ZN4ksys3map10ObjectLink14getTypeForNameERKN4sead14SafeStringBaseIcEE
0x0000007100d4e2e4,O,000020,_ZNK4ksys3map10ObjectLink14getObjectActorEv
0x0000007100d4e2f8,O,000024,_ZNK4ksys3map10ObjectLink25getObjectProcWithAccessorERNS_3act24ActorLinkConstDataAccessE
0x0000007100d4e2f8,O,000024,_ZNK4ksys3map10ObjectLink25getObjectProcWithAccessorERNS_3act16BaseProcAccessorE
0x0000007100d4e310,m,000028,_ZN4ksys3map10ObjectLink14sub_7100D4E310ENS0_14MapLinkDefTypeE
0x0000007100d4e32c,O,000024,_ZN4ksys3map10ObjectLink27isPlacementLODOrForSaleLinkENS0_14MapLinkDefTypeE
0x0000007100d4e344,O,000044,_ZN4ksys3map14ObjectLinkDataC1Ev
@@ -74627,7 +74627,7 @@ Address,Quality,Size,Name
0x0000007100d5d43c,U,000020,DebugMsg::dtor
0x0000007100d5d450,U,000112,ActorSystem::allocEmergencyHeap
0x0000007100d5d4c0,U,000024,ActorSystem::getPlayer
0x0000007100d5d4d8,U,000032,_ZN4ksys3act11ActorSystem9getPlayerEPNS0_20ActorConstDataAccessE
0x0000007100d5d4d8,U,000032,_ZN4ksys3act11ActorSystem9getPlayerEPNS0_24ActorLinkConstDataAccessE
0x0000007100d5d4f8,U,000172,ActorSystem::getPlayerPosition
0x0000007100d5d5a4,U,000116,ActorSystem::insertActiveActor
0x0000007100d5d618,U,000112,ActorSystem::eraseFromActiveActorList
@@ -74935,7 +74935,7 @@ Address,Quality,Size,Name
0x0000007100d6d394,O,000064,_ZNK5uking3aoc15HardModeManager13nerfHpRestoreEPi
0x0000007100d6d3d4,O,000060,_ZNK5uking3aoc15HardModeManager25modifyEnemyNoticeDurationEPf
0x0000007100d6d410,O,000304,_ZN5uking3aoc15HardModeManager27shouldCreateLifeRecoverInfoEPN4ksys3act5ActorE
0x0000007100d6d540,O,006164,_ZN5uking3aoc15HardModeManager37shouldApplyMasterModeDamageMultiplierERKN4ksys3act20ActorConstDataAccessE
0x0000007100d6d540,O,006164,_ZN5uking3aoc15HardModeManager37shouldApplyMasterModeDamageMultiplierERKN4ksys3act24ActorLinkConstDataAccessE
0x0000007100d6ed54,O,000040,_ZN5uking3aoc15HardModeManager10buffDamageERi
0x0000007100d6ed7c,O,000172,_ZN5uking3aoc15HardModeManager26loadIsLastPlayHardModeFlagEv
0x0000007100d6ee28,O,000172,_ZN5uking3aoc15HardModeManager18loadIsHardModeFlagEv
@@ -76367,9 +76367,9 @@ Address,Quality,Size,Name
0x0000007100dca3b4,m,000196,_ZN4ksys3act13InstParamPack6Buffer3addEPN4sead10IDelegate1IPNS0_8BaseProcEEERKNS3_14SafeStringBaseIcEE
0x0000007100dca478,M,000604,_ZN4ksys3act13InstParamPack6Buffer3popEPiPNS1_5EntryE
0x0000007100dca6d4,O,000056,_ZN4ksys3act13InstParamPack6BufferaSERKS2_
0x0000007100dca70c,O,000056,_ZN4ksys3act24ActorLinkConstDataAccessD1Ev
0x0000007100dca744,O,000088,_ZN4ksys3act24ActorLinkConstDataAccess7acquireEPNS0_8BaseProcE
0x0000007100dca79c,O,000256,_ZN4ksys3act11acquireProcEPNS0_24ActorLinkConstDataAccessEPNS0_8BaseProcERKN4sead14SafeStringBaseIcEEi
0x0000007100dca70c,O,000056,_ZN4ksys3act16BaseProcAccessorD1Ev
0x0000007100dca744,O,000088,_ZN4ksys3act16BaseProcAccessor7acquireEPNS0_8BaseProcE
0x0000007100dca79c,O,000256,_ZN4ksys3act11acquireProcEPNS0_16BaseProcAccessorEPNS0_8BaseProcERKN4sead14SafeStringBaseIcEEi
0x0000007100dca89c,U,000096,GameFramework::ctor
0x0000007100dca8fc,U,000064,GameFramework::dtor
0x0000007100dca93c,U,000072,GameFramework::dtorDelete
@@ -80730,7 +80730,7 @@ Address,Quality,Size,Name
0x0000007100edd4e4,O,000104,_ZN4ksys3act6hasTagERKN4sead14SafeStringBaseIcEEj
0x0000007100edd54c,O,001160,_ZN4ksys3act16hasOneTagAtLeastEPNS0_5ActorERKN4sead14SafeStringBaseIcEE
0x0000007100edd9d4,O,000724,_ZN4ksys3act16hasOneTagAtLeastEPNS0_12BaseProcLinkERKN4sead14SafeStringBaseIcEE
0x0000007100eddca8,O,000688,_ZN4ksys3act16hasOneTagAtLeastERKNS0_20ActorConstDataAccessERKN4sead14SafeStringBaseIcEE
0x0000007100eddca8,O,000688,_ZN4ksys3act16hasOneTagAtLeastERKNS0_24ActorLinkConstDataAccessERKN4sead14SafeStringBaseIcEE
0x0000007100eddf58,m,000108,_ZN4ksys3act26shouldSkipSpawnWhenRainingEPNS_3map6ObjectE
0x0000007100eddfc4,O,000148,_ZN4ksys3act29shouldSkipSpawnIfGodForestOffEPNS_3map6ObjectE
0x0000007100ede058,O,000256,_ZN4ksys3act29shouldSkipSpawnGodForestActorEPNS_3map6ObjectE
@@ -80747,47 +80747,47 @@ Address,Quality,Size,Name
0x0000007100ede8c0,O,000212,_ZN4ksys3act12getZukanTypeEPN2al9ByamlIterE
0x0000007100ede994,O,000200,_ZN4ksys3act12getZukanTypeEPNS0_5ActorE
0x0000007100edea5c,U,000080,
0x0000007100edeaac,O,000168,_ZN4ksys3act15isPlayerProfileERKNS0_20ActorConstDataAccessE
0x0000007100edeaac,O,000168,_ZN4ksys3act15isPlayerProfileERKNS0_24ActorLinkConstDataAccessE
0x0000007100edeb54,O,000204,_ZN4ksys3act15isPlayerProfileEPNS0_5ActorE
0x0000007100edec20,O,000196,_ZN4ksys3act15isPlayerProfileEPNS0_12BaseProcLinkE
0x0000007100edece4,O,000204,_ZN4ksys3act15isCameraProfileEPNS0_5ActorE
0x0000007100ededb0,O,000168,_ZN4ksys3act12isNPCProfileERKNS0_20ActorConstDataAccessE
0x0000007100ededb0,O,000168,_ZN4ksys3act12isNPCProfileERKNS0_24ActorLinkConstDataAccessE
0x0000007100edee58,O,000204,_ZN4ksys3act12isNPCProfileEPNS0_5ActorE
0x0000007100edef24,O,000196,_ZN4ksys3act12isNPCProfileEPNS0_12BaseProcLinkE
0x0000007100edefe8,O,000076,_ZN4ksys3act21isNPCOffPodFromWeaponEPNS0_5ActorE
0x0000007100edf034,O,000204,_ZN4ksys3act16isDemoNPCProfileEPNS0_5ActorE
0x0000007100edf100,O,001180,_ZN4ksys3act14isEnemyProfileERKNS0_20ActorConstDataAccessE
0x0000007100edf100,O,001180,_ZN4ksys3act14isEnemyProfileERKNS0_24ActorLinkConstDataAccessE
0x0000007100edf59c,O,000084,_ZN4ksys3act14isEnemyProfileEPNS0_5ActorE
0x0000007100edf5f0,O,000076,_ZN4ksys3act14isEnemyProfileEPNS0_12BaseProcLinkE
0x0000007100edf63c,O,000304,_ZN4ksys3act17isGuardianProfileEPNS0_12BaseProcLinkE
0x0000007100edf76c,O,000544,_ZN4ksys3act12isLargeEnemyERKNS0_20ActorConstDataAccessE
0x0000007100edf76c,O,000544,_ZN4ksys3act12isLargeEnemyERKNS0_24ActorLinkConstDataAccessE
0x0000007100edf98c,O,000084,_ZN4ksys3act12isLargeEnemyEPNS0_5ActorE
0x0000007100edf9e0,O,000168,_ZN4ksys3act12isGanonBeastERKNS0_20ActorConstDataAccessE
0x0000007100edf9e0,O,000168,_ZN4ksys3act12isGanonBeastERKNS0_24ActorLinkConstDataAccessE
0x0000007100edfa88,O,000196,_ZN4ksys3act12isGanonBeastEPNS0_12BaseProcLinkE
0x0000007100edfb4c,O,000084,_ZN4ksys3act19isNotLivingCreatureEPNS0_5ActorE
0x0000007100edfba0,O,000624,_ZN4ksys3act19isNotLivingCreatureERKNS0_20ActorConstDataAccessE
0x0000007100edfba0,O,000624,_ZN4ksys3act19isNotLivingCreatureERKNS0_24ActorLinkConstDataAccessE
0x0000007100edfe10,O,000076,_ZN4ksys3act19isNotLivingCreatureEPNS0_12BaseProcLinkE
0x0000007100edfe5c,O,000188,_ZN4ksys3act15isWeaponProfileERKNS0_20ActorConstDataAccessE
0x0000007100edfe5c,O,000188,_ZN4ksys3act15isWeaponProfileERKNS0_24ActorLinkConstDataAccessE
0x0000007100edff18,O,000168,_ZN4ksys3act15isWeaponProfileERKN4sead14SafeStringBaseIcEE
0x0000007100edffc0,O,000224,_ZN4ksys3act15isWeaponProfileEPNS0_5ActorE
0x0000007100ee00a0,O,000216,_ZN4ksys3act15isWeaponProfileEPNS0_12BaseProcLinkE
0x0000007100ee0178,O,000332,_ZN4ksys3act15isWeaponOrArmorERKNS0_20ActorConstDataAccessE
0x0000007100ee0178,O,000332,_ZN4ksys3act15isWeaponOrArmorERKNS0_24ActorLinkConstDataAccessE
0x0000007100ee02c4,O,000084,_ZN4ksys3act15isWeaponOrArmorEPNS0_5ActorE
0x0000007100ee0318,O,000168,_ZN4ksys3act15isBulletProfileERKNS0_20ActorConstDataAccessE
0x0000007100ee0318,O,000168,_ZN4ksys3act15isBulletProfileERKNS0_24ActorLinkConstDataAccessE
0x0000007100ee03c0,O,000204,_ZN4ksys3act15isBulletProfileEPNS0_5ActorE
0x0000007100ee048c,O,000196,_ZN4ksys3act15isBulletProfileEPNS0_12BaseProcLinkE
0x0000007100ee0550,O,000168,_ZN4ksys3act14isHorseProfileERKNS0_20ActorConstDataAccessE
0x0000007100ee0550,O,000168,_ZN4ksys3act14isHorseProfileERKNS0_24ActorLinkConstDataAccessE
0x0000007100ee05f8,O,000204,_ZN4ksys3act14isHorseProfileEPNS0_5ActorE
0x0000007100ee06c4,O,000196,_ZN4ksys3act14isHorseProfileEPNS0_12BaseProcLinkE
0x0000007100ee0788,U,000024,isAttClientEnabled
0x0000007100ee07a0,O,000116,_ZN4ksys3act22isGrabAttClientEnabledEPvPNS0_12BaseProcLinkE
0x0000007100ee0814,O,000100,_ZN4ksys3act14isStalfosPartsEPNS0_12BaseProcLinkE
0x0000007100ee0878,O,000028,_ZN4ksys3act6isDoorERKNS0_20ActorConstDataAccessE
0x0000007100ee0878,O,000028,_ZN4ksys3act6isDoorERKNS0_24ActorLinkConstDataAccessE
0x0000007100ee0894,O,000100,_ZN4ksys3act6isDoorEPNS0_12BaseProcLinkE
0x0000007100ee08f8,O,000260,_ZN4ksys3act13isPreyOrSwarmERKNS0_20ActorConstDataAccessE
0x0000007100ee08f8,O,000260,_ZN4ksys3act13isPreyOrSwarmERKNS0_24ActorLinkConstDataAccessE
0x0000007100ee09fc,O,000312,_ZN4ksys3act13isPreyOrSwarmEPNS0_5ActorE
0x0000007100ee0b34,O,000304,_ZN4ksys3act13isPreyOrSwarmEPNS0_12BaseProcLinkE
0x0000007100ee0c64,O,000092,_ZN4ksys3act12isWolfOrBearERKNS0_20ActorConstDataAccessE
0x0000007100ee0c64,O,000092,_ZN4ksys3act12isWolfOrBearERKNS0_24ActorLinkConstDataAccessE
0x0000007100ee0cc0,O,000136,_ZN4ksys3act12isWolfOrBearEPNS0_5ActorE
0x0000007100ee0d48,O,000128,_ZN4ksys3act12isWolfOrBearEPNS0_12BaseProcLinkE
0x0000007100ee0dc8,U,000136,
@@ -92292,7 +92292,7 @@ Address,Quality,Size,Name
0x00000071011ba9cc,O,000048,_ZN4ksys3act8BaseProc17afterUpdateState_Ev
0x00000071011ba9fc,O,000188,_ZN4ksys3act8BaseProc17x00000071011ba9fcEv
0x00000071011baab8,O,000124,_ZN4ksys3act8BaseProc12setStateFlagEj
0x00000071011bab34,O,000196,_ZN4ksys3act8BaseProc7acquireERNS0_24ActorLinkConstDataAccessE
0x00000071011bab34,O,000196,_ZN4ksys3act8BaseProc7acquireERNS0_16BaseProcAccessorE
0x00000071011babf8,O,000036,_ZN4ksys3act8BaseProc7releaseEv
0x00000071011bac1c,O,000244,_ZN4ksys3act8BaseProc12startDelete_Ev
0x00000071011bad10,O,000164,_ZN4ksys3act8BaseProc11doPreDeleteERKNS1_12PreDeleteArgE
@@ -92343,10 +92343,10 @@ Address,Quality,Size,Name
0x00000071011bc42c,O,000056,_ZN4ksys3act14BaseProcHandleD2Ev
0x00000071011bc464,O,000172,_GLOBAL__sub_I_actBaseProcHandle.cpp
0x00000071011bc510,O,000020,_ZN4ksys3act12BaseProcLinkC1Ev
0x00000071011bc524,O,000308,_ZNK4ksys3act12BaseProcLink7getProcEPNS0_24ActorLinkConstDataAccessEPNS0_8BaseProcE
0x00000071011bc524,O,000308,_ZNK4ksys3act12BaseProcLink7getProcEPNS0_16BaseProcAccessorEPNS0_8BaseProcE
0x00000071011bc658,O,000068,_ZN4ksys3act16BaseProcLinkData12lockIfNeededEv
0x00000071011bc69c,O,000052,_ZNK4ksys3act16BaseProcLinkData7getProcEjb
0x00000071011bc6d0,O,000276,_ZNK4ksys3act12BaseProcLink7getProcEPNS0_24ActorLinkConstDataAccessE
0x00000071011bc6d0,O,000276,_ZNK4ksys3act12BaseProcLink7getProcEPNS0_16BaseProcAccessorE
0x00000071011bc7e4,O,000040,_ZNK4ksys3act12BaseProcLink11hasProcByIdEPNS0_8BaseProcE
0x00000071011bc80c,O,000152,_ZNK4ksys3act12BaseProcLinkeqERKS1_
0x00000071011bc8a4,O,000100,_ZNK4ksys3act12BaseProcLink7hasProcEv
Can't render this file because it is too large.
+2 -2
View File
@@ -98,11 +98,11 @@ bool HardModeManager::shouldCreateLifeRecoverInfo(ksys::act::Actor* actor) {
}
bool HardModeManager::shouldApplyMasterModeDamageMultiplier(
const ksys::act::ActorConstDataAccess& accessor) {
const ksys::act::ActorLinkConstDataAccess& accessor) {
if (!accessor.hasProc())
return false;
ksys::act::ActorConstDataAccess parent;
ksys::act::ActorLinkConstDataAccess parent;
if (accessor.hasConnectedCalcParent() && accessor.acquireConnectedCalcParent(&parent))
return shouldApplyMasterModeDamageMultiplier(parent);
+2 -2
View File
@@ -4,7 +4,7 @@
#include <prim/seadBitFlag.h>
#include <prim/seadEnum.h>
#include <prim/seadSafeString.h>
#include "KingSystem/ActorSystem/actActorConstDataAccess.h"
#include "KingSystem/ActorSystem/actActorLinkConstDataAccess.h"
#include "KingSystem/GameData/gdtManager.h"
#include "KingSystem/Map/mapObject.h"
#include "KingSystem/Resource/resHandle.h"
@@ -42,7 +42,7 @@ public:
static bool shouldCreateLifeRecoverInfo(ksys::act::Actor* actor);
static bool
shouldApplyMasterModeDamageMultiplier(const ksys::act::ActorConstDataAccess& accessor);
shouldApplyMasterModeDamageMultiplier(const ksys::act::ActorLinkConstDataAccess& accessor);
static void buffDamage(s32& damage);
bool isTestOfStrengthShrine() const;
+3 -3
View File
@@ -3,7 +3,7 @@
#include "Game/Actor/AI/aiAirOctaRoot.h"
#include "KingSystem/ActorSystem/AS/ASList.h"
#include "KingSystem/ActorSystem/actActor.h"
#include "KingSystem/ActorSystem/actActorConstDataAccess.h"
#include "KingSystem/ActorSystem/actActorLinkConstDataAccess.h"
#include "KingSystem/ActorSystem/actAiAi.h"
#include "KingSystem/ActorSystem/actBaseProcLink.h"
#include "KingSystem/System/VFR.h"
@@ -49,7 +49,7 @@ void AirOctaFlyUp::calc_() {
}
if ((fly_up_multiplier * 0.5f >= 1.f && y >= getDataMgr()->vec_F8.y) ||
mElapsedTime >= (*mFlyUpDuration_s * 3.0f)) {
ksys::act::ActorConstDataAccess linkData;
ksys::act::ActorLinkConstDataAccess linkData;
if (ksys::act::acquireActor(&getDataMgr()->mBaseProcLink, &linkData)) {
mUserData = 3;
getActor()->sendMessage(*linkData.getMessageTransceiverId(), 0x80000C8, &mUserData,
@@ -58,7 +58,7 @@ void AirOctaFlyUp::calc_() {
}
} else if (y - AirOctaY >= *mTargetDistance_d * 0.9f ||
mElapsedTime >= (*mFlyUpDuration_s * 3.0f)) {
ksys::act::ActorConstDataAccess linkData;
ksys::act::ActorLinkConstDataAccess linkData;
if (ksys::act::acquireActor(&getDataMgr()->mBaseProcLink, &linkData)) {
mUserData = 2;
getActor()->sendMessage(*linkData.getMessageTransceiverId(), 0x80000C8, &mUserData,
@@ -2,7 +2,7 @@
#include "Game/AOC/aocHardModeManager.h"
#include "Game/Actor/Damage/dmgDamageCallback.h"
#include "KingSystem/ActorSystem/actActor.h"
#include "KingSystem/ActorSystem/actActorConstDataAccess.h"
#include "KingSystem/ActorSystem/actActorLinkConstDataAccess.h"
#include "KingSystem/ActorSystem/actActorParam.h"
#include "KingSystem/ActorSystem/actActorUtil.h"
#include "KingSystem/ActorSystem/actLifeRecoveryInfo.h"
@@ -152,7 +152,7 @@ void DamageManagerBase::tryBuffDamage(s32& damage) {
return;
}
ksys::act::ActorConstDataAccess acc;
ksys::act::ActorLinkConstDataAccess acc;
ksys::act::acquireActor(getAttacker(), &acc);
if (aoc::HardModeManager::shouldApplyMasterModeDamageMultiplier(acc)) {
aoc::HardModeManager::buffDamage(damage);
+2 -3
View File
@@ -1,6 +1,5 @@
#include "Game/Actor/Player/actPlayerInfo.h"
#include "Game/Actor/Player/actPlayerBase.h"
#include "KingSystem/ActorSystem/actActorConstDataAccess.h"
#include "KingSystem/ActorSystem/actActorLinkConstDataAccess.h"
#include "KingSystem/ActorSystem/actBaseProc.h"
#include "KingSystem/ActorSystem/actBaseProcMgr.h"
@@ -116,7 +115,7 @@ PlayerBase* PlayerInfo::getPlayerUnchecked() {
}
sead::Vector3f& PlayerInfo::getPlayerPos() {
ksys::act::ActorConstDataAccess accessor;
ksys::act::ActorLinkConstDataAccess accessor;
ksys::act::acquireActor(&mPlayerLink, &accessor);
accessor.debugLog(1, "getPlayerPos");
@@ -124,7 +123,7 @@ sead::Vector3f& PlayerInfo::getPlayerPos() {
}
sead::Vector3f& PlayerInfo::getPlayerPosForPostCalc() {
ksys::act::ActorConstDataAccess accessor;
ksys::act::ActorLinkConstDataAccess accessor;
ksys::act::acquireActor(&mPlayerLink, &accessor);
accessor.debugLog(0, "getPlayerPosForPostCalc");
+1 -2
View File
@@ -7,7 +7,6 @@
#include "Game/Actor/actWeapon.h"
#include "Game/UI/uiPauseMenuDataMgr.h"
#include "KingSystem/ActorSystem/Profiles/actWeaponBase.h"
#include "KingSystem/ActorSystem/actActorConstDataAccess.h"
#include "KingSystem/ActorSystem/actActorCreator.h"
#include "KingSystem/ActorSystem/actActorHeapUtil.h"
#include "KingSystem/ActorSystem/actActorLinkConstDataAccess.h"
@@ -212,7 +211,7 @@ void CreatePlayerEquipActorMgr::requestCreateArmor(s32 slot_idx, const sead::Saf
}
{
ksys::act::ActorConstDataAccess access;
ksys::act::ActorLinkConstDataAccess access;
ksys::act::acquireActor(&PlayerInfo::instance()->getPlayerLink(), &access);
sead::Vector3f pos;
access.getActorMtx().getTranslation(pos);
+5 -3
View File
@@ -1,7 +1,7 @@
#include "Game/Actor/actWeapon.h"
#include <random/seadGlobalRandom.h>
#include "Game/UI/uiPauseMenuDataMgr.h"
#include "KingSystem/ActorSystem/actActorConstDataAccess.h"
#include "KingSystem/ActorSystem/actActorLinkConstDataAccess.h"
#include "KingSystem/ActorSystem/actGlobalParameter.h"
#include "KingSystem/ActorSystem/actInfoCommon.h"
#include "KingSystem/ActorSystem/actInfoData.h"
@@ -409,7 +409,8 @@ bool WeaponModifierRanges::loadTierBlue(const ksys::res::GParamList& gparamlist)
}
// NON_MATCHING: isConfigValid() somehow does not match when inlined (but matches the Wii U version)
bool WeaponModifierInfo::pickRandomBlueModifierActor(const ksys::act::ActorConstDataAccess& acc) {
bool WeaponModifierInfo::pickRandomBlueModifierActor(
const ksys::act::ActorLinkConstDataAccess& acc) {
WeaponModifierRanges ranges;
const auto& gparamlist = *acc.getGParamList();
if (ranges.loadTierBlue(gparamlist)) {
@@ -460,7 +461,8 @@ bool WeaponModifierRanges::loadTierYellow(const ksys::res::GParamList& gparamlis
}
// NON_MATCHING: isConfigValid() somehow does not match when inlined (but matches the Wii U version)
bool WeaponModifierInfo::pickRandomYellowModifierActor(const ksys::act::ActorConstDataAccess& acc) {
bool WeaponModifierInfo::pickRandomYellowModifierActor(
const ksys::act::ActorLinkConstDataAccess& acc) {
WeaponModifierRanges ranges;
const auto& gparamlist = *acc.getGParamList();
if (ranges.loadTierYellow(gparamlist)) {
+3 -3
View File
@@ -5,7 +5,7 @@
#include <prim/seadTypedBitFlag.h>
namespace ksys::act {
class ActorConstDataAccess;
class ActorLinkConstDataAccess;
class InstParamPack;
namespace ai {
struct InlineParamPack;
@@ -94,8 +94,8 @@ struct WeaponModifierInfo {
bool pickRandomBlueModifierTbox(const sead::SafeString& actor);
bool pickRandomYellowModifierTbox(const sead::SafeString& actor);
bool pickRandomBlueModifierActor(const ksys::act::ActorConstDataAccess& acc);
bool pickRandomYellowModifierActor(const ksys::act::ActorConstDataAccess& acc);
bool pickRandomBlueModifierActor(const ksys::act::ActorLinkConstDataAccess& acc);
bool pickRandomYellowModifierActor(const ksys::act::ActorLinkConstDataAccess& acc);
void setModifier(WeaponModifier modifier, s32 value_) {
flags.setDirect((flags.getDirect() & u32(WeaponModifier::IsYellow)) | u32(modifier));
+2 -2
View File
@@ -14,8 +14,8 @@
#include "Game/UI/uiUtils.h"
#include "Game/gameItemUtils.h"
#include "KingSystem/AOC/aocManager.h"
#include "KingSystem/ActorSystem/actActorConstDataAccess.h"
#include "KingSystem/ActorSystem/actActorHeapUtil.h"
#include "KingSystem/ActorSystem/actActorLinkConstDataAccess.h"
#include "KingSystem/ActorSystem/actActorUtil.h"
#include "KingSystem/ActorSystem/actBaseProcLink.h"
#include "KingSystem/ActorSystem/actInfoCommon.h"
@@ -1610,7 +1610,7 @@ void PauseMenuDataMgr::removeGrabbedItems() {
bool PauseMenuDataMgr::removeGrabbedItem(ksys::act::BaseProcLink* link) {
bool found = false;
if (link && link->hasProc()) {
ksys::act::ActorConstDataAccess accessor;
ksys::act::ActorLinkConstDataAccess accessor;
ksys::act::acquireActor(link, &accessor);
const auto name = accessor.getName();
auto& cs = mCritSection;
+2 -2
View File
@@ -25,8 +25,6 @@ target_sources(uking PRIVATE
actActor.h
actActorCaptureMgr.cpp
actActorCaptureMgr.h
actActorConstDataAccess.cpp
actActorConstDataAccess.h
actActorCreator.cpp
actActorCreator.h
actActorEditorNode.cpp
@@ -70,6 +68,8 @@ target_sources(uking PRIVATE
actASSetting.h
actBaseProc.cpp
actBaseProc.h
actBaseProcAccessor.cpp
actBaseProcAccessor.h
actBaseProcCreateTask.cpp
actBaseProcCreateTask.h
actBaseProcCreateTaskSelector.cpp
@@ -1,420 +0,0 @@
#include "KingSystem/ActorSystem/actActorConstDataAccess.h"
#include <prim/seadRuntimeTypeInfo.h>
#include "KingSystem/ActorSystem/actActor.h"
#include "KingSystem/ActorSystem/actActorParam.h"
#include "KingSystem/ActorSystem/actActorUtil.h"
#include "KingSystem/ActorSystem/actAiRoot.h"
#include "KingSystem/Map/mapObject.h"
#include "KingSystem/Resource/Actor/resResourceGParamList.h"
#include "KingSystem/Resource/GeneralParamList/resGParamListObjectAttack.h"
#include "KingSystem/Resource/GeneralParamList/resGParamListObjectEnemy.h"
#include "KingSystem/Resource/GeneralParamList/resGParamListObjectHorseTargetedInfo.h"
#include "KingSystem/Resource/GeneralParamList/resGParamListObjectLiftable.h"
#include "KingSystem/Resource/GeneralParamList/resGParamListObjectSystem.h"
namespace ksys::act {
static BaseProc* getProcIfActor(BaseProc* proc) {
if (proc && sead::IsDerivedFrom<Actor>(proc))
return proc;
return nullptr;
}
inline Actor* ActorConstDataAccess::getActor() const {
return static_cast<Actor*>(getProcIfActor(mProc));
}
bool ActorConstDataAccess::acquireActor(const ActorLinkConstDataAccess& other) {
return acquire(getProcIfActor(other.mProc));
}
bool ActorConstDataAccess::hasProc(BaseProc* proc) const {
return mProc == proc;
}
bool ActorConstDataAccess::hasProc(const BaseProcLink& link) const {
return link.hasProcById(getActor());
}
bool ActorConstDataAccess::linkAcquire(BaseProcLink* link) const {
auto* proc = getActor();
if (proc)
return link->acquire(proc, false);
link->reset();
return false;
}
bool ActorConstDataAccess::linkAcquireImmediately(BaseProcLink* link) const {
auto* proc = getActor();
if (proc)
return link->acquire(proc, true);
link->reset();
return false;
}
bool ActorConstDataAccess::isPlayerProfile() const {
return act::isPlayerProfile(getActor());
}
bool ActorConstDataAccess::isWeaponProfile() const {
return act::isWeaponProfile(getActor());
}
bool ActorConstDataAccess::isNPCProfile() const {
return act::isNPCProfile(getActor());
}
bool ActorConstDataAccess::isEnemyProfile() const {
return act::isEnemyProfile(getActor());
}
const sead::SafeString& ActorConstDataAccess::getProfile() const {
auto* actor = getActor();
return actor && actor->getParam() ? actor->getProfile() : sead::SafeString::cEmptyString;
}
void ActorConstDataAccess::debugLog(s32, const sead::SafeString&) const {
// Intentionally left empty.
}
const sead::SafeString& ActorConstDataAccess::getName() const {
auto* proc = getProcIfActor(mProc);
if (!proc)
return sead::SafeString::cEmptyString;
return proc->getName();
}
const sead::SafeString& ActorConstDataAccess::getLiftType() const {
auto* actor = getActor();
if (!actor)
return sead::SafeString::cEmptyString;
return actor->getParam()->getRes().mGParamList->getLiftable()->mLiftType.ref();
}
bool ActorConstDataAccess::isDisableFreezeLift() const {
auto* actor = getActor();
if (!actor)
return false;
return actor->getParam()->getRes().mGParamList->getLiftable()->mDisableFreezeLift.ref();
}
bool ActorConstDataAccess::isDisableBurnLift() const {
auto* actor = getActor();
if (!actor)
return false;
return actor->getParam()->getRes().mGParamList->getLiftable()->mDisableBurnLift.ref();
}
bool ActorConstDataAccess::hasTag(const char* tag) const {
auto* actor = getActor();
if (!actor)
return false;
return actor->getParam()->getRes().mActorLink->hasTag(tag);
}
bool ActorConstDataAccess::hasTag(u32 tag) const {
auto* actor = getActor();
if (!actor)
return false;
return actor->getParam()->getRes().mActorLink->hasTag(tag);
}
const char* ActorConstDataAccess::getUniqueName() const {
auto* actor = getActor();
if (!actor)
return nullptr;
return actor->getUniqueName();
}
u32 ActorConstDataAccess::getId() const {
auto* proc = getActor();
if (!proc)
return 0xffffffff;
return proc->getId();
}
bool ActorConstDataAccess::acquireConnectedCalcParent(ActorLinkConstDataAccess* accessor) const {
auto* proc = getActor();
if (!proc)
return false;
accessor->acquire(sead::DynamicCast<Actor>(proc->getConnectedCalcParent()));
return accessor->mProc != nullptr;
}
bool ActorConstDataAccess::acquireConnectedCalcChild(ActorLinkConstDataAccess* accessor) const {
auto* proc = getActor();
if (!proc)
return false;
accessor->acquire(sead::DynamicCast<Actor>(proc->getConnectedCalcChild()));
return accessor->mProc != nullptr;
}
bool ActorConstDataAccess::hasConnectedCalcParent() const {
auto* proc = getActor();
return proc && sead::DynamicCast<Actor>(proc->getConnectedCalcParent()) != nullptr;
}
bool ActorConstDataAccess::checkFlag2B() const {
auto* actor = getActor();
if (!actor)
return false;
return actor->checkFlag(Actor::ActorFlag::_2b);
}
bool ActorConstDataAccess::deleteLater(BaseProc::DeleteReason reason) const {
auto* actor = getActor();
if (!actor)
return false;
return actor->deleteLater(reason);
}
bool ActorConstDataAccess::deleteEx(BaseProc::DeleteReason reason) const {
auto* actor = getActor();
if (!actor)
return false;
return actor->deleteEx(Actor::DeleteType::_1, reason);
}
bool ActorConstDataAccess::sleep(BaseProc::SleepWakeReason reason) const {
auto* actor = getActor();
if (!actor)
return false;
actor->sleep(reason);
return true;
}
bool ActorConstDataAccess::wakeUp(BaseProc::SleepWakeReason reason) const {
auto* actor = getActor();
if (!actor)
return false;
actor->wakeUp(reason);
return true;
}
bool ActorConstDataAccess::setProperties(int x, const sead::Matrix34f& mtx,
const sead::Vector3f& vel, const sead::Vector3f& ang_vel,
const sead::Vector3f& scale, bool is_life_infinite, int i,
int life) const {
auto* actor = getActor();
if (!actor)
return false;
actor->setProperties(x, mtx, vel, ang_vel, scale, is_life_infinite, i, life);
return true;
}
bool ActorConstDataAccess::setProperties(const sead::Matrix34f& mtx, const sead::Vector3f& vel,
const sead::Vector3f& ang_vel, const sead::Vector3f& scale,
bool is_life_infinite, int i, int life) const {
return setProperties(0, mtx, vel, ang_vel, scale, is_life_infinite, i, life);
}
bool ActorConstDataAccess::isStateSleep() const {
auto* actor = getActor();
return actor && actor->isSleep();
}
bool ActorConstDataAccess::isStateCalc() const {
auto* actor = getActor();
return actor && actor->isCalc();
}
bool ActorConstDataAccess::isDeletedOrDeleting() const {
auto* actor = getActor();
return actor && actor->isDeletedOrDeleting();
}
res::GParamList* ActorConstDataAccess::getGParamList() const {
auto* actor = getActor();
if (!actor)
return nullptr;
return actor->getParam()->getRes().mGParamList;
}
res::Shop* ActorConstDataAccess::getShopData() const {
auto* actor = getActor();
if (!actor)
return nullptr;
return actor->getParam()->getRes().mShopData;
}
const sead::SafeString& ActorConstDataAccess::getAttackSpHitActor() const {
auto* actor = getActor();
if (!actor)
return sead::SafeString::cEmptyString;
return actor->getParam()->getRes().mGParamList->getAttack()->mSpHitActor.ref();
}
const sead::SafeString& ActorConstDataAccess::getAttackSpHitTag() const {
auto* actor = getActor();
if (!actor)
return sead::SafeString::cEmptyString;
return actor->getParam()->getRes().mGParamList->getAttack()->mSpHitTag.ref();
}
const sead::SafeString& ActorConstDataAccess::getAttackWeakHitTag() const {
auto* actor = getActor();
if (!actor)
return sead::SafeString::cEmptyString;
return actor->getParam()->getRes().mGParamList->getAttack()->mSpWeakHitActor.ref();
}
f32 ActorConstDataAccess::getAttackSpHitRatio() const {
auto* actor = getActor();
if (!actor)
return 1.0f;
return actor->getParam()->getRes().mGParamList->getAttack()->mSpHitRatio.ref();
}
s32 ActorConstDataAccess::getAttackPower() const {
auto* actor = getActor();
if (!actor)
return 0;
return actor->getParam()->getRes().mGParamList->getAttack()->mPower.ref();
}
map::ObjectLinkData* ActorConstDataAccess::getMapObjectLinkData() const {
auto* actor = getActor();
if (!actor)
return nullptr;
auto* object = actor->getMapObject();
if (!object)
return nullptr;
return object->getLinkData();
}
map::Object* ActorConstDataAccess::getMapObject() const {
auto* actor = getActor();
if (!actor)
return nullptr;
return actor->getMapObject();
}
s32 ActorConstDataAccess::getEnemyRank() const {
auto* actor = getActor();
if (!actor)
return 0;
auto* gparam = actor->getParam()->getRes().mGParamList;
if (!gparam || !gparam->getEnemy())
return 0;
return gparam->getEnemy()->mRank.ref();
}
bool ActorConstDataAccess::getSameGroupActorName(sead::SafeString* name) const {
auto* actor = getActor();
if (!actor) {
*name = sead::SafeString::cEmptyString;
return false;
}
auto* gparam = actor->getParam()->getRes().mGParamList;
if (!gparam || !gparam->getSystem()) {
*name = actor->getName();
return false;
}
const auto& group_name = gparam->getSystem()->mSameGroupActorName.ref();
if (group_name.isEmpty()) {
*name = actor->getName();
return false;
}
*name = group_name;
return true;
}
bool ActorConstDataAccess::checkFlag18() const {
auto* actor = getActor();
return actor && actor->checkFlag(Actor::ActorFlag::_18);
}
bool ActorConstDataAccess::isPlayerTheConnectedParent() const {
auto* actor = getActor();
if (!actor)
return false;
auto* parent = sead::DynamicCast<Actor>(actor->getConnectedCalcParent());
if (!parent)
return false;
return parent->getProfile() == "Player";
}
void ActorConstDataAccess::setThisActorAsParent(BaseProc* child, bool delete_parent_on_delete) {
auto* actor = getActor();
if (!actor)
return;
child->setConnectedCalcParent(actor, delete_parent_on_delete);
}
void ActorConstDataAccess::setThisActorAsChild(BaseProc* parent, bool delete_child_on_delete) {
auto* actor = getActor();
if (!actor)
return;
parent->setConnectedCalcChild(actor, delete_child_on_delete);
}
bool ActorConstDataAccess::isFlyingBalloon() const {
auto* actor = getActor();
if (!actor)
return false;
bool* value;
return actor->getRootAi()->getAITreeVariable(&value, "IsFlyingBalloon") && *value;
}
u32 ActorConstDataAccess::getBalloonHungActorBaseProcID() const {
auto* actor = getActor();
if (!actor)
return -1;
int* value;
if (!actor->getRootAi()->getAITreeVariable(&value, "BalloonHungActorBaseProcID"))
return -1;
return *value;
}
bool ActorConstDataAccess::checkFlag25() const {
auto* actor = getActor();
return actor && actor->checkFlag(Actor::ActorFlag::_25);
}
f32 ActorConstDataAccess::getHorseMoveRadius() const {
auto* actor = getActor();
if (!actor)
return -1.0;
return actor->getParam()->getRes().mGParamList->getHorseTargetedInfo()->mHorseMoveRadius.ref();
}
f32 ActorConstDataAccess::getHorseAvoidOffset() const {
auto* actor = getActor();
if (!actor)
return -1.0;
return actor->getParam()->getRes().mGParamList->getHorseTargetedInfo()->mHorseAvoidOffset.ref();
}
bool ActorConstDataAccess::horseTargetedIsCircularMoveAlways() const {
auto* actor = getActor();
if (!actor)
return false;
auto* gparam = actor->getParam()->getRes().mGParamList;
return gparam->getHorseTargetedInfo()->mIsCircularMoveAlways.ref();
}
bool acquireActor(BaseProcLink* link, ActorConstDataAccess* accessor) {
return link->getProcInContext([accessor](BaseProc* proc, bool valid) {
if (!proc) {
if (!valid)
accessor->acquire(nullptr);
return false;
}
return accessor->acquire(sead::DynamicCast<Actor>(proc));
});
}
} // namespace ksys::act
@@ -1,131 +0,0 @@
#pragma once
#include <math/seadMatrix.h>
#include <math/seadVector.h>
#include <prim/seadRuntimeTypeInfo.h>
#include "KingSystem/ActorSystem/actActorLinkConstDataAccess.h"
#include "KingSystem/ActorSystem/actBaseProc.h"
#include "KingSystem/ActorSystem/actBaseProcLink.h"
#include "KingSystem/Utils/Types.h"
namespace ksys::map {
class Object;
class ObjectLinkData;
} // namespace ksys::map
namespace ksys::res {
class GParamList;
class Shop;
} // namespace ksys::res
namespace ksys::act {
class Actor;
class ActorConstDataAccess : public ActorLinkConstDataAccess {
public:
ActorConstDataAccess() = default;
explicit ActorConstDataAccess(BaseProc* proc) : ActorLinkConstDataAccess(proc) {}
bool acquireActor(const ActorLinkConstDataAccess& other);
bool hasProc() const { return ActorLinkConstDataAccess::hasProc(); }
/// Checks whether the acquired BaseProc is `proc`.
bool hasProc(BaseProc* proc) const;
/// Checks whether the acquired BaseProc and the BaseProcLink's actor are the same
/// by comparing the IDs.
bool hasProc(const BaseProcLink& link) const;
template <typename T>
bool isDerivedFrom() const {
return sead::IsDerivedFrom<T>(mProc);
}
bool linkAcquire(BaseProcLink* link) const;
bool linkAcquireImmediately(BaseProcLink* link) const;
void debugLog(s32, const sead::SafeString& method_name) const;
bool isPlayerProfile() const;
bool isWeaponProfile() const;
bool isNPCProfile() const;
bool isEnemyProfile() const;
const sead::SafeString& getProfile() const;
const sead::SafeString& getName() const;
const sead::SafeString& getLiftType() const;
bool isDisableFreezeLift() const;
bool isDisableBurnLift() const;
bool hasTag(const char* tag) const;
bool hasTag(u32 tag) const;
const char* getUniqueName() const;
u32 getId() const;
bool acquireConnectedCalcParent(ActorLinkConstDataAccess* accessor) const;
bool acquireConnectedCalcChild(ActorLinkConstDataAccess* accessor) const;
bool hasConnectedCalcParent() const;
bool checkFlag2B() const;
bool deleteLater(BaseProc::DeleteReason reason) const;
bool deleteEx(BaseProc::DeleteReason reason) const;
bool sleep(BaseProc::SleepWakeReason reason) const;
bool wakeUp(BaseProc::SleepWakeReason reason) const;
bool setProperties(int x, const sead::Matrix34f& mtx, const sead::Vector3f& vel,
const sead::Vector3f& ang_vel, const sead::Vector3f& scale,
bool is_life_infinite, int i, int life) const;
bool setProperties(const sead::Matrix34f& mtx, const sead::Vector3f& vel,
const sead::Vector3f& ang_vel, const sead::Vector3f& scale,
bool is_life_infinite, int i, int life) const;
bool isStateSleep() const;
bool isStateCalc() const;
bool isDeletedOrDeleting() const;
res::GParamList* getGParamList() const;
res::Shop* getShopData() const;
const sead::SafeString& getAttackSpHitActor() const;
const sead::SafeString& getAttackSpHitTag() const;
const sead::SafeString& getAttackWeakHitTag() const;
f32 getAttackSpHitRatio() const;
s32 getAttackPower() const;
bool checkLinkTagActivated(bool a, bool b);
map::ObjectLinkData* getMapObjectLinkData() const;
map::Object* getMapObject() const;
s32 getEnemyRank() const;
bool getSameGroupActorName(sead::SafeString* name) const;
bool checkFlag18() const;
bool isPlayerTheConnectedParent() const;
const sead::Vector3f& getPreviousPos() const;
void setThisActorAsParent(BaseProc* child, bool delete_parent_on_delete);
void setThisActorAsChild(BaseProc* parent, bool delete_child_on_delete);
bool isAttClientEnabled(const sead::SafeString& client) const;
bool isFlyingBalloon() const;
u32 getBalloonHungActorBaseProcID() const;
bool checkFlag25() const;
f32 getHorseMoveRadius() const;
f32 getHorseAvoidOffset() const;
bool horseTargetedIsCircularMoveAlways() const;
private:
Actor* getActor() const;
u8 _10 = 0;
};
KSYS_CHECK_SIZE_NX150(ActorConstDataAccess, 0x18);
bool acquireActor(BaseProcLink* link, ActorConstDataAccess* accessor);
} // namespace ksys::act
@@ -1,5 +1,5 @@
#include "KingSystem/ActorSystem/actActorLimiter.h"
#include "KingSystem/ActorSystem/actActorConstDataAccess.h"
#include "KingSystem/ActorSystem/actActorLinkConstDataAccess.h"
#include "KingSystem/ActorSystem/actTag.h"
namespace ksys::act {
@@ -35,7 +35,7 @@ bool ActorLimiter::List::addActor(BaseProc* proc, bool allow_evicting_old_actors
target_node = mActorList.popFront();
if (target_node) {
ActorConstDataAccess acc;
ActorLinkConstDataAccess acc;
acquireActor(&target_node->proc_link, &acc);
// Priority material actors will not be evicted if possible.
@@ -1,64 +1,419 @@
#include "KingSystem/ActorSystem/actActorLinkConstDataAccess.h"
#include <prim/seadRuntimeTypeInfo.h>
#include "KingSystem/ActorSystem/actActor.h"
#include "KingSystem/ActorSystem/actActorParam.h"
#include "KingSystem/ActorSystem/actActorUtil.h"
#include "KingSystem/ActorSystem/actAiRoot.h"
#include "KingSystem/ActorSystem/actBaseProc.h"
#include "KingSystem/ActorSystem/actBaseProcMgr.h"
#include "KingSystem/Utils/Debug.h"
#include "KingSystem/Map/mapObject.h"
#include "KingSystem/Resource/Actor/resResourceGParamList.h"
#include "KingSystem/Resource/GeneralParamList/resGParamListObjectAttack.h"
#include "KingSystem/Resource/GeneralParamList/resGParamListObjectEnemy.h"
#include "KingSystem/Resource/GeneralParamList/resGParamListObjectHorseTargetedInfo.h"
#include "KingSystem/Resource/GeneralParamList/resGParamListObjectLiftable.h"
#include "KingSystem/Resource/GeneralParamList/resGParamListObjectSystem.h"
namespace ksys::act {
ActorLinkConstDataAccess::~ActorLinkConstDataAccess() {
if (mAcquired && mProc)
mProc->release();
mAcquired = false;
mProc = nullptr;
static BaseProc* getProcIfActor(BaseProc* proc) {
if (proc && sead::IsDerivedFrom<Actor>(proc))
return proc;
return nullptr;
}
bool ActorLinkConstDataAccess::acquire(BaseProc* proc) {
if (mProc) {
if (mAcquired)
mProc->release();
inline Actor* ActorLinkConstDataAccess::getActor() const {
return static_cast<Actor*>(getProcIfActor(mProc));
}
mAcquired = false;
mProc = nullptr;
bool ActorLinkConstDataAccess::acquireActor(const BaseProcAccessor& other) {
return acquire(getProcIfActor(other.mProc));
}
bool ActorLinkConstDataAccess::hasProc(BaseProc* proc) const {
return mProc == proc;
}
bool ActorLinkConstDataAccess::hasProc(const BaseProcLink& link) const {
return link.hasProcById(getActor());
}
bool ActorLinkConstDataAccess::linkAcquire(BaseProcLink* link) const {
auto* proc = getActor();
if (proc)
return link->acquire(proc, false);
link->reset();
return false;
}
bool ActorLinkConstDataAccess::linkAcquireImmediately(BaseProcLink* link) const {
auto* proc = getActor();
if (proc)
return link->acquire(proc, true);
link->reset();
return false;
}
bool ActorLinkConstDataAccess::isPlayerProfile() const {
return act::isPlayerProfile(getActor());
}
bool ActorLinkConstDataAccess::isWeaponProfile() const {
return act::isWeaponProfile(getActor());
}
bool ActorLinkConstDataAccess::isNPCProfile() const {
return act::isNPCProfile(getActor());
}
bool ActorLinkConstDataAccess::isEnemyProfile() const {
return act::isEnemyProfile(getActor());
}
const sead::SafeString& ActorLinkConstDataAccess::getProfile() const {
auto* actor = getActor();
return actor && actor->getParam() ? actor->getProfile() : sead::SafeString::cEmptyString;
}
void ActorLinkConstDataAccess::debugLog(s32, const sead::SafeString&) const {
// Intentionally left empty.
}
const sead::SafeString& ActorLinkConstDataAccess::getName() const {
auto* proc = getProcIfActor(mProc);
if (!proc)
return sead::SafeString::cEmptyString;
return proc->getName();
}
const sead::SafeString& ActorLinkConstDataAccess::getLiftType() const {
auto* actor = getActor();
if (!actor)
return sead::SafeString::cEmptyString;
return actor->getParam()->getRes().mGParamList->getLiftable()->mLiftType.ref();
}
bool ActorLinkConstDataAccess::isDisableFreezeLift() const {
auto* actor = getActor();
if (!actor)
return false;
return actor->getParam()->getRes().mGParamList->getLiftable()->mDisableFreezeLift.ref();
}
bool ActorLinkConstDataAccess::isDisableBurnLift() const {
auto* actor = getActor();
if (!actor)
return false;
return actor->getParam()->getRes().mGParamList->getLiftable()->mDisableBurnLift.ref();
}
bool ActorLinkConstDataAccess::hasTag(const char* tag) const {
auto* actor = getActor();
if (!actor)
return false;
return actor->getParam()->getRes().mActorLink->hasTag(tag);
}
bool ActorLinkConstDataAccess::hasTag(u32 tag) const {
auto* actor = getActor();
if (!actor)
return false;
return actor->getParam()->getRes().mActorLink->hasTag(tag);
}
const char* ActorLinkConstDataAccess::getUniqueName() const {
auto* actor = getActor();
if (!actor)
return nullptr;
return actor->getUniqueName();
}
u32 ActorLinkConstDataAccess::getId() const {
auto* proc = getActor();
if (!proc)
return 0xffffffff;
return proc->getId();
}
bool ActorLinkConstDataAccess::acquireConnectedCalcParent(BaseProcAccessor* accessor) const {
auto* proc = getActor();
if (!proc)
return false;
accessor->acquire(sead::DynamicCast<Actor>(proc->getConnectedCalcParent()));
return accessor->mProc != nullptr;
}
bool ActorLinkConstDataAccess::acquireConnectedCalcChild(BaseProcAccessor* accessor) const {
auto* proc = getActor();
if (!proc)
return false;
accessor->acquire(sead::DynamicCast<Actor>(proc->getConnectedCalcChild()));
return accessor->mProc != nullptr;
}
bool ActorLinkConstDataAccess::hasConnectedCalcParent() const {
auto* proc = getActor();
return proc && sead::DynamicCast<Actor>(proc->getConnectedCalcParent()) != nullptr;
}
bool ActorLinkConstDataAccess::checkFlag2B() const {
auto* actor = getActor();
if (!actor)
return false;
return actor->checkFlag(Actor::ActorFlag::_2b);
}
bool ActorLinkConstDataAccess::deleteLater(BaseProc::DeleteReason reason) const {
auto* actor = getActor();
if (!actor)
return false;
return actor->deleteLater(reason);
}
bool ActorLinkConstDataAccess::deleteEx(BaseProc::DeleteReason reason) const {
auto* actor = getActor();
if (!actor)
return false;
return actor->deleteEx(Actor::DeleteType::_1, reason);
}
bool ActorLinkConstDataAccess::sleep(BaseProc::SleepWakeReason reason) const {
auto* actor = getActor();
if (!actor)
return false;
actor->sleep(reason);
return true;
}
bool ActorLinkConstDataAccess::wakeUp(BaseProc::SleepWakeReason reason) const {
auto* actor = getActor();
if (!actor)
return false;
actor->wakeUp(reason);
return true;
}
bool ActorLinkConstDataAccess::setProperties(int x, const sead::Matrix34f& mtx,
const sead::Vector3f& vel,
const sead::Vector3f& ang_vel,
const sead::Vector3f& scale, bool is_life_infinite,
int i, int life) const {
auto* actor = getActor();
if (!actor)
return false;
actor->setProperties(x, mtx, vel, ang_vel, scale, is_life_infinite, i, life);
return true;
}
bool ActorLinkConstDataAccess::setProperties(const sead::Matrix34f& mtx, const sead::Vector3f& vel,
const sead::Vector3f& ang_vel,
const sead::Vector3f& scale, bool is_life_infinite,
int i, int life) const {
return setProperties(0, mtx, vel, ang_vel, scale, is_life_infinite, i, life);
}
bool ActorLinkConstDataAccess::isStateSleep() const {
auto* actor = getActor();
return actor && actor->isSleep();
}
bool ActorLinkConstDataAccess::isStateCalc() const {
auto* actor = getActor();
return actor && actor->isCalc();
}
bool ActorLinkConstDataAccess::isDeletedOrDeleting() const {
auto* actor = getActor();
return actor && actor->isDeletedOrDeleting();
}
res::GParamList* ActorLinkConstDataAccess::getGParamList() const {
auto* actor = getActor();
if (!actor)
return nullptr;
return actor->getParam()->getRes().mGParamList;
}
res::Shop* ActorLinkConstDataAccess::getShopData() const {
auto* actor = getActor();
if (!actor)
return nullptr;
return actor->getParam()->getRes().mShopData;
}
const sead::SafeString& ActorLinkConstDataAccess::getAttackSpHitActor() const {
auto* actor = getActor();
if (!actor)
return sead::SafeString::cEmptyString;
return actor->getParam()->getRes().mGParamList->getAttack()->mSpHitActor.ref();
}
const sead::SafeString& ActorLinkConstDataAccess::getAttackSpHitTag() const {
auto* actor = getActor();
if (!actor)
return sead::SafeString::cEmptyString;
return actor->getParam()->getRes().mGParamList->getAttack()->mSpHitTag.ref();
}
const sead::SafeString& ActorLinkConstDataAccess::getAttackWeakHitTag() const {
auto* actor = getActor();
if (!actor)
return sead::SafeString::cEmptyString;
return actor->getParam()->getRes().mGParamList->getAttack()->mSpWeakHitActor.ref();
}
f32 ActorLinkConstDataAccess::getAttackSpHitRatio() const {
auto* actor = getActor();
if (!actor)
return 1.0f;
return actor->getParam()->getRes().mGParamList->getAttack()->mSpHitRatio.ref();
}
s32 ActorLinkConstDataAccess::getAttackPower() const {
auto* actor = getActor();
if (!actor)
return 0;
return actor->getParam()->getRes().mGParamList->getAttack()->mPower.ref();
}
map::ObjectLinkData* ActorLinkConstDataAccess::getMapObjectLinkData() const {
auto* actor = getActor();
if (!actor)
return nullptr;
auto* object = actor->getMapObject();
if (!object)
return nullptr;
return object->getLinkData();
}
map::Object* ActorLinkConstDataAccess::getMapObject() const {
auto* actor = getActor();
if (!actor)
return nullptr;
return actor->getMapObject();
}
s32 ActorLinkConstDataAccess::getEnemyRank() const {
auto* actor = getActor();
if (!actor)
return 0;
auto* gparam = actor->getParam()->getRes().mGParamList;
if (!gparam || !gparam->getEnemy())
return 0;
return gparam->getEnemy()->mRank.ref();
}
bool ActorLinkConstDataAccess::getSameGroupActorName(sead::SafeString* name) const {
auto* actor = getActor();
if (!actor) {
*name = sead::SafeString::cEmptyString;
return false;
}
return proc && proc->acquire(*this);
auto* gparam = actor->getParam()->getRes().mGParamList;
if (!gparam || !gparam->getSystem()) {
*name = actor->getName();
return false;
}
const auto& group_name = gparam->getSystem()->mSameGroupActorName.ref();
if (group_name.isEmpty()) {
*name = actor->getName();
return false;
}
*name = group_name;
return true;
}
const Actor* ActorLinkConstDataAccess::getActor() const {
if (!mProc)
return nullptr;
return sead::DynamicCast<Actor>(mProc);
bool ActorLinkConstDataAccess::checkFlag18() const {
auto* actor = getActor();
return actor && actor->checkFlag(Actor::ActorFlag::_18);
}
bool ActorLinkConstDataAccess::isPlayerTheConnectedParent() const {
auto* actor = getActor();
if (!actor)
return false;
auto* parent = sead::DynamicCast<Actor>(actor->getConnectedCalcParent());
if (!parent)
return false;
return parent->getProfile() == "Player";
}
void ActorLinkConstDataAccess::setThisActorAsParent(BaseProc* child, bool delete_parent_on_delete) {
auto* actor = getActor();
if (!actor)
return;
child->setConnectedCalcParent(actor, delete_parent_on_delete);
}
void ActorLinkConstDataAccess::setThisActorAsChild(BaseProc* parent, bool delete_child_on_delete) {
auto* actor = getActor();
if (!actor)
return;
parent->setConnectedCalcChild(actor, delete_child_on_delete);
}
bool ActorLinkConstDataAccess::isFlyingBalloon() const {
auto* actor = getActor();
if (!actor)
return false;
bool* value;
return actor->getRootAi()->getAITreeVariable(&value, "IsFlyingBalloon") && *value;
}
u32 ActorLinkConstDataAccess::getBalloonHungActorBaseProcID() const {
auto* actor = getActor();
if (!actor)
return -1;
int* value;
if (!actor->getRootAi()->getAITreeVariable(&value, "BalloonHungActorBaseProcID"))
return -1;
return *value;
}
bool ActorLinkConstDataAccess::checkFlag25() const {
auto* actor = getActor();
return actor && actor->checkFlag(Actor::ActorFlag::_25);
}
f32 ActorLinkConstDataAccess::getHorseMoveRadius() const {
auto* actor = getActor();
if (!actor)
return -1.0;
return actor->getParam()->getRes().mGParamList->getHorseTargetedInfo()->mHorseMoveRadius.ref();
}
f32 ActorLinkConstDataAccess::getHorseAvoidOffset() const {
auto* actor = getActor();
if (!actor)
return -1.0;
return actor->getParam()->getRes().mGParamList->getHorseTargetedInfo()->mHorseAvoidOffset.ref();
}
bool ActorLinkConstDataAccess::horseTargetedIsCircularMoveAlways() const {
auto* actor = getActor();
if (!actor)
return false;
auto* gparam = actor->getParam()->getRes().mGParamList;
return gparam->getHorseTargetedInfo()->mIsCircularMoveAlways.ref();
}
const sead::Matrix34f& ActorLinkConstDataAccess::getActorMtx() {
const Actor* actor = getActor();
const Actor* actor = mProc ? sead::DynamicCast<Actor>(mProc) : nullptr;
if (actor)
return actor->getMtx();
return sead::Matrix34f::ident;
}
bool acquireProc(ActorLinkConstDataAccess* accessor, BaseProc* proc, const sead::SafeString& from,
s32) {
bool acquired = false;
if (accessor) {
acquired = accessor->acquire(proc);
if (!acquired)
return false;
}
if (acquired || BaseProcMgr::instance()->isHighPriorityThread())
return true;
sead::FixedSafeString<256> message;
// (%s)Acquiring from a low priority thread. Please change via ActorLinkConstDataAccess
message.format("(%s)低スレッドからの取得です。ActorLinkConstDataAccess経由に変更お願いします",
from.cstr());
util::PrintDebug(message);
return false;
}
} // namespace ksys::act
@@ -1,62 +1,149 @@
#pragma once
#include <basis/seadTypes.h>
#include <math/seadMatrix.h>
#include <prim/seadSafeString.h>
#include <math/seadVector.h>
#include <prim/seadRuntimeTypeInfo.h>
#include "KingSystem/ActorSystem/actActor.h"
#include "KingSystem/ActorSystem/actBaseProc.h"
#include "KingSystem/ActorSystem/actBaseProcAccessor.h"
#include "KingSystem/ActorSystem/actBaseProcLink.h"
#include "KingSystem/Utils/Types.h"
namespace ksys {
struct MesTransceiverId;
namespace act {
} // namespace ksys
namespace ksys::map {
class Object;
class ObjectLinkData;
} // namespace ksys::map
namespace ksys::res {
class GParamList;
class Shop;
} // namespace ksys::res
namespace ksys::act {
class Actor;
class BaseProc;
/// Provides read-only access to actor data for safe, multi-threaded access.
class ActorLinkConstDataAccess {
class ActorLinkConstDataAccess : public BaseProcAccessor {
public:
ActorLinkConstDataAccess() = default;
explicit ActorLinkConstDataAccess(BaseProc* proc) { acquire(proc); }
/// Destructor that automatically releases any acquired BaseProc.
~ActorLinkConstDataAccess();
explicit ActorLinkConstDataAccess(BaseProc* proc) : BaseProcAccessor(proc) {}
ActorLinkConstDataAccess(const ActorLinkConstDataAccess&) = delete;
ActorLinkConstDataAccess& operator=(const ActorLinkConstDataAccess&) = delete;
ActorLinkConstDataAccess(ActorLinkConstDataAccess&& other) noexcept {
*this = std::move(other);
bool acquireActor(const BaseProcAccessor& other);
bool hasProc() const { return BaseProcAccessor::hasProc(); }
/// Checks whether the acquired BaseProc is `proc`.
bool hasProc(BaseProc* proc) const;
/// Checks whether the acquired BaseProc and the BaseProcLink's actor are the same
/// by comparing the IDs.
bool hasProc(const BaseProcLink& link) const;
template <typename T>
bool isDerivedFrom() const {
return sead::IsDerivedFrom<T>(mProc);
}
ActorLinkConstDataAccess& operator=(ActorLinkConstDataAccess&& other) noexcept {
std::swap(mAcquired, other.mAcquired);
std::swap(mProc, other.mProc);
return *this;
}
/// Acquire a BaseProc. This increments its reference count.
/// If an actor was already acquired, it is released.
bool acquire(BaseProc* proc);
void release() { acquire(nullptr); }
bool hasProc() const { return mProc != nullptr; }
const MesTransceiverId* getMessageTransceiverId() const;
const Actor* getActor() const;
const sead::Matrix34f& getActorMtx();
protected:
friend class ActorConstDataAccess;
friend class BaseProc;
friend class BaseProcHandle;
friend class BaseProcUnit;
bool linkAcquire(BaseProcLink* link) const;
bool linkAcquireImmediately(BaseProcLink* link) const;
bool mAcquired = false;
BaseProc* mProc = nullptr;
void debugLog(s32, const sead::SafeString& method_name) const;
bool isPlayerProfile() const;
bool isWeaponProfile() const;
bool isNPCProfile() const;
bool isEnemyProfile() const;
const sead::SafeString& getProfile() const;
const sead::SafeString& getName() const;
const sead::SafeString& getLiftType() const;
bool isDisableFreezeLift() const;
bool isDisableBurnLift() const;
bool hasTag(const char* tag) const;
bool hasTag(u32 tag) const;
const char* getUniqueName() const;
u32 getId() const;
bool acquireConnectedCalcParent(BaseProcAccessor* accessor) const;
bool acquireConnectedCalcChild(BaseProcAccessor* accessor) const;
bool hasConnectedCalcParent() const;
bool checkFlag2B() const;
bool deleteLater(BaseProc::DeleteReason reason) const;
bool deleteEx(BaseProc::DeleteReason reason) const;
bool sleep(BaseProc::SleepWakeReason reason) const;
bool wakeUp(BaseProc::SleepWakeReason reason) const;
bool setProperties(int x, const sead::Matrix34f& mtx, const sead::Vector3f& vel,
const sead::Vector3f& ang_vel, const sead::Vector3f& scale,
bool is_life_infinite, int i, int life) const;
bool setProperties(const sead::Matrix34f& mtx, const sead::Vector3f& vel,
const sead::Vector3f& ang_vel, const sead::Vector3f& scale,
bool is_life_infinite, int i, int life) const;
bool isStateSleep() const;
bool isStateCalc() const;
bool isDeletedOrDeleting() const;
res::GParamList* getGParamList() const;
res::Shop* getShopData() const;
const sead::SafeString& getAttackSpHitActor() const;
const sead::SafeString& getAttackSpHitTag() const;
const sead::SafeString& getAttackWeakHitTag() const;
f32 getAttackSpHitRatio() const;
s32 getAttackPower() const;
bool checkLinkTagActivated(bool a, bool b);
map::ObjectLinkData* getMapObjectLinkData() const;
map::Object* getMapObject() const;
s32 getEnemyRank() const;
bool getSameGroupActorName(sead::SafeString* name) const;
bool checkFlag18() const;
bool isPlayerTheConnectedParent() const;
const sead::Vector3f& getPreviousPos() const;
void setThisActorAsParent(BaseProc* child, bool delete_parent_on_delete);
void setThisActorAsChild(BaseProc* parent, bool delete_child_on_delete);
bool isAttClientEnabled(const sead::SafeString& client) const;
bool isFlyingBalloon() const;
u32 getBalloonHungActorBaseProcID() const;
bool checkFlag25() const;
f32 getHorseMoveRadius() const;
f32 getHorseAvoidOffset() const;
bool horseTargetedIsCircularMoveAlways() const;
private:
Actor* getActor() const;
u8 _10 = 0;
};
KSYS_CHECK_SIZE_NX150(ActorLinkConstDataAccess, 0x18);
/// Acquire the specified BaseProc using `accessor`. Using ActorLinkConstDataAccess is mandatory
/// when acquiring from a low priority thread (see BaseProcMgr for a definition).
bool acquireProc(ActorLinkConstDataAccess* accessor, BaseProc* proc, const sead::SafeString& from,
s32 = 2);
inline bool acquireActor(BaseProcLink* link, ActorLinkConstDataAccess* accessor) {
return link->getProcInContext([accessor](BaseProc* proc, bool valid) {
if (!proc) {
if (!valid)
accessor->acquire(nullptr);
return false;
}
return accessor->acquire(sead::DynamicCast<Actor>(proc));
});
}
} // namespace act
} // namespace ksys
} // namespace ksys::act
+2 -2
View File
@@ -6,7 +6,7 @@
namespace ksys::act {
class ActorConstDataAccess;
class ActorLinkConstDataAccess;
// TODO: incomplete
class ActorSystem {
@@ -16,7 +16,7 @@ class ActorSystem {
public:
void onBaseProcMgrCalc();
bool getPlayer(ActorConstDataAccess* accessor);
bool getPlayer(ActorLinkConstDataAccess* accessor);
bool getAutoPlacementActorPos(const sead::SafeString& name, sead::Vector3f* pos) const;
+22 -22
View File
@@ -4,7 +4,7 @@
#include <random/seadGlobalRandom.h>
#include "KingSystem/ActorSystem/Profiles/actRopeBase.h"
#include "KingSystem/ActorSystem/actActor.h"
#include "KingSystem/ActorSystem/actActorConstDataAccess.h"
#include "KingSystem/ActorSystem/actActorLinkConstDataAccess.h"
#include "KingSystem/ActorSystem/actActorParam.h"
#include "KingSystem/ActorSystem/actBaseProcLink.h"
#include "KingSystem/ActorSystem/actInfoData.h"
@@ -23,14 +23,14 @@ namespace ksys::act {
namespace {
ActorConstDataAccess getAccessor(BaseProcLink* link) {
ActorConstDataAccess accessor;
ActorLinkConstDataAccess getAccessor(BaseProcLink* link) {
ActorLinkConstDataAccess accessor;
acquireActor(link, &accessor);
return accessor;
}
ActorConstDataAccess getAccessor(Actor* actor) {
ActorConstDataAccess accessor{actor};
ActorLinkConstDataAccess getAccessor(Actor* actor) {
ActorLinkConstDataAccess accessor{actor};
return accessor;
}
@@ -59,7 +59,7 @@ bool hasTag(BaseProcLink* link, const sead::SafeString& tag) {
return hasTag(getAccessor(link), tag);
}
bool hasTag(const ActorConstDataAccess& accessor, const sead::SafeString& tag) {
bool hasTag(const ActorLinkConstDataAccess& accessor, const sead::SafeString& tag) {
return accessor.hasTag(tag.cstr());
}
@@ -76,7 +76,7 @@ bool hasTag(BaseProcLink* link, u32 tag) {
return hasTag(getAccessor(link), tag);
}
bool hasTag(const ActorConstDataAccess& accessor, u32 tag) {
bool hasTag(const ActorLinkConstDataAccess& accessor, u32 tag) {
return accessor.hasTag(tag);
}
@@ -105,7 +105,7 @@ bool hasOneTagAtLeast(BaseProcLink* link, const sead::SafeString& tags) {
return false;
}
bool hasOneTagAtLeast(const ActorConstDataAccess& accessor, const sead::SafeString& tags) {
bool hasOneTagAtLeast(const ActorLinkConstDataAccess& accessor, const sead::SafeString& tags) {
sead::FixedSafeString<32> tag;
for (auto it = tags.tokenBegin(","); tags.tokenEnd(",") != it; ++it) {
it.get(&tag);
@@ -268,11 +268,11 @@ ZukanType getZukanType(Actor* actor) {
return ZukanType::Invalid;
}
static bool isProfile(const ActorConstDataAccess& accessor, const sead::SafeString& profile) {
static bool isProfile(const ActorLinkConstDataAccess& accessor, const sead::SafeString& profile) {
return accessor.hasProc() && accessor.getProfile() == profile;
}
bool isPlayerProfile(const ActorConstDataAccess& accessor) {
bool isPlayerProfile(const ActorLinkConstDataAccess& accessor) {
return isProfile(accessor, "Player");
}
@@ -292,7 +292,7 @@ bool isCameraProfile(Actor* actor) {
return isProfile(getAccessor(actor), "Camera");
}
bool isNPCProfile(const ActorConstDataAccess& accessor) {
bool isNPCProfile(const ActorLinkConstDataAccess& accessor) {
return isProfile(accessor, "NPC");
}
@@ -320,7 +320,7 @@ bool isDemoNPCProfile(Actor* actor) {
return isProfile(getAccessor(actor), "DemoNPC");
}
bool isEnemyProfile(const ActorConstDataAccess& accessor) {
bool isEnemyProfile(const ActorLinkConstDataAccess& accessor) {
if (!accessor.hasProc())
return false;
@@ -349,7 +349,7 @@ bool isGuardianProfile(BaseProcLink* link) {
return profile == "Guardian" || profile == "GuardianComponent";
}
bool isLargeEnemy(const ActorConstDataAccess& accessor) {
bool isLargeEnemy(const ActorLinkConstDataAccess& accessor) {
if (!accessor.hasProc())
return false;
@@ -362,7 +362,7 @@ bool isLargeEnemy(Actor* actor) {
return isLargeEnemy(getAccessor(actor));
}
bool isGanonBeast(const ActorConstDataAccess& accessor) {
bool isGanonBeast(const ActorLinkConstDataAccess& accessor) {
return accessor.hasProc() && accessor.getName() == "Enemy_GanonBeast";
}
@@ -374,7 +374,7 @@ bool isNotLivingCreature(Actor* actor) {
return isNotLivingCreature(getAccessor(actor));
}
bool isNotLivingCreature(const ActorConstDataAccess& accessor) {
bool isNotLivingCreature(const ActorLinkConstDataAccess& accessor) {
if (isPlayerProfile(accessor))
return false;
if (isNPCProfile(accessor))
@@ -392,7 +392,7 @@ bool isNotLivingCreature(BaseProcLink* link) {
return isNotLivingCreature(getAccessor(link));
}
bool isWeaponProfile(const ActorConstDataAccess& accessor) {
bool isWeaponProfile(const ActorLinkConstDataAccess& accessor) {
if (!accessor.hasProc())
return false;
return isWeaponProfile(accessor.getName());
@@ -412,7 +412,7 @@ bool isWeaponProfile(BaseProcLink* link) {
return isWeaponProfile(getAccessor(link));
}
bool isWeaponOrArmor(const ActorConstDataAccess& accessor) {
bool isWeaponOrArmor(const ActorLinkConstDataAccess& accessor) {
if (!accessor.hasProc())
return false;
@@ -429,7 +429,7 @@ bool isWeaponOrArmor(Actor* actor) {
return isWeaponOrArmor(getAccessor(actor));
}
bool isBulletProfile(const ActorConstDataAccess& accessor) {
bool isBulletProfile(const ActorLinkConstDataAccess& accessor) {
return isProfile(accessor, "Bullet");
}
@@ -441,7 +441,7 @@ bool isBulletProfile(BaseProcLink* link) {
return isBulletProfile(getAccessor(link));
}
bool isHorseProfile(const ActorConstDataAccess& accessor) {
bool isHorseProfile(const ActorLinkConstDataAccess& accessor) {
return isProfile(accessor, "Horse");
}
@@ -462,7 +462,7 @@ bool isStalfosParts(BaseProcLink* link) {
return accessor.hasProc() && accessor.hasTag(tags::StalfosParts);
}
bool isDoor(const ActorConstDataAccess& accessor) {
bool isDoor(const ActorLinkConstDataAccess& accessor) {
return accessor.hasProc() && accessor.hasTag(tags::Door);
}
@@ -470,7 +470,7 @@ bool isDoor(BaseProcLink* link) {
return isDoor(getAccessor(link));
}
bool isPreyOrSwarm(const ActorConstDataAccess& accessor) {
bool isPreyOrSwarm(const ActorLinkConstDataAccess& accessor) {
if (!accessor.hasProc())
return false;
const auto& profile = accessor.getProfile();
@@ -485,7 +485,7 @@ bool isPreyOrSwarm(BaseProcLink* link) {
return isPreyOrSwarm(getAccessor(link));
}
bool isWolfOrBear(const ActorConstDataAccess& accessor) {
bool isWolfOrBear(const ActorLinkConstDataAccess& accessor) {
if (!accessor.hasProc())
return false;
return accessor.hasTag(tags::AnimalTypeWolf) || accessor.hasTag(tags::AnimalTypeBear);
+17 -17
View File
@@ -18,7 +18,7 @@ class Object;
namespace ksys::act {
class Actor;
class ActorConstDataAccess;
class ActorLinkConstDataAccess;
class BaseProcLink;
enum class ArrowType {
@@ -51,19 +51,19 @@ enum class ZukanType {
bool hasTag(Actor* actor, const sead::SafeString& tag);
bool hasTag(BaseProcLink* link, const sead::SafeString& tag);
bool hasTag(const ActorConstDataAccess& accessor, const sead::SafeString& tag);
bool hasTag(const ActorLinkConstDataAccess& accessor, const sead::SafeString& tag);
bool hasTag(const sead::SafeString& actor, const sead::SafeString& tag);
bool hasTag(Actor* actor, u32 tag);
bool hasTag(BaseProcLink* link, u32 tag);
bool hasTag(const ActorConstDataAccess& accessor, u32 tag);
bool hasTag(const ActorLinkConstDataAccess& accessor, u32 tag);
bool hasTag(const sead::SafeString& actor, u32 tag);
/// Checks whether the actor has at least one of the specified tags.
/// @param tags A comma separated list of tags.
bool hasOneTagAtLeast(Actor* actor, const sead::SafeString& tags);
bool hasOneTagAtLeast(BaseProcLink* link, const sead::SafeString& tags);
bool hasOneTagAtLeast(const ActorConstDataAccess& accessor, const sead::SafeString& tags);
bool hasOneTagAtLeast(const ActorLinkConstDataAccess& accessor, const sead::SafeString& tags);
bool shouldSkipSpawnWhenRaining(map::Object* obj);
bool shouldSkipSpawnIfGodForestOff(map::Object* obj);
@@ -88,48 +88,48 @@ ArrowType arrowTypeFromString(const sead::SafeString& name);
ZukanType getZukanType(al::ByamlIter* iter);
ZukanType getZukanType(Actor* actor);
bool isPlayerProfile(const ActorConstDataAccess& accessor);
bool isPlayerProfile(const ActorLinkConstDataAccess& accessor);
bool isPlayerProfile(Actor* actor);
bool isPlayerProfile(BaseProcLink* link);
bool isCameraProfile(Actor* actor);
bool isNPCProfile(const ActorConstDataAccess& accessor);
bool isNPCProfile(const ActorLinkConstDataAccess& accessor);
bool isNPCProfile(Actor* actor);
bool isNPCProfile(BaseProcLink* link);
bool isNPCOffPodFromWeapon(Actor* actor);
bool isDemoNPCProfile(Actor* actor);
bool isEnemyProfile(const ActorConstDataAccess& accessor);
bool isEnemyProfile(const ActorLinkConstDataAccess& accessor);
bool isEnemyProfile(Actor* actor);
bool isEnemyProfile(BaseProcLink* link);
bool isGuardianProfile(BaseProcLink* link);
bool isLargeEnemy(const ActorConstDataAccess& accessor);
bool isLargeEnemy(const ActorLinkConstDataAccess& accessor);
bool isLargeEnemy(Actor* actor);
bool isGanonBeast(const ActorConstDataAccess& accessor);
bool isGanonBeast(const ActorLinkConstDataAccess& accessor);
bool isGanonBeast(BaseProcLink* link);
bool isNotLivingCreature(Actor* actor);
bool isNotLivingCreature(const ActorConstDataAccess& accessor);
bool isNotLivingCreature(const ActorLinkConstDataAccess& accessor);
bool isNotLivingCreature(BaseProcLink* link);
bool isWeaponProfile(const ActorConstDataAccess& accessor);
bool isWeaponProfile(const ActorLinkConstDataAccess& accessor);
bool isWeaponProfile(const sead::SafeString& actor);
bool isWeaponProfile(Actor* actor);
bool isWeaponProfile(BaseProcLink* link);
bool isWeaponOrArmor(const ActorConstDataAccess& accessor);
bool isWeaponOrArmor(const ActorLinkConstDataAccess& accessor);
bool isWeaponOrArmor(Actor* actor);
bool isBulletProfile(const ActorConstDataAccess& accessor);
bool isBulletProfile(const ActorLinkConstDataAccess& accessor);
bool isBulletProfile(Actor* actor);
bool isBulletProfile(BaseProcLink* link);
bool isHorseProfile(const ActorConstDataAccess& accessor);
bool isHorseProfile(const ActorLinkConstDataAccess& accessor);
bool isHorseProfile(Actor* actor);
bool isHorseProfile(BaseProcLink* link);
@@ -138,14 +138,14 @@ bool isGrabAttClientEnabled(void* x, BaseProcLink* link);
bool isStalfosParts(BaseProcLink* link);
bool isDoor(const ActorConstDataAccess& accessor);
bool isDoor(const ActorLinkConstDataAccess& accessor);
bool isDoor(BaseProcLink* link);
bool isPreyOrSwarm(const ActorConstDataAccess& accessor);
bool isPreyOrSwarm(const ActorLinkConstDataAccess& accessor);
bool isPreyOrSwarm(Actor* actor);
bool isPreyOrSwarm(BaseProcLink* link);
bool isWolfOrBear(const ActorConstDataAccess& accessor);
bool isWolfOrBear(const ActorLinkConstDataAccess& accessor);
bool isWolfOrBear(Actor* actor);
bool isWolfOrBear(BaseProcLink* link);
+2 -2
View File
@@ -1,7 +1,7 @@
#include "KingSystem/ActorSystem/actBaseProc.h"
#include <thread/seadThread.h>
#include <time/seadTickSpan.h>
#include "KingSystem/ActorSystem/actActorLinkConstDataAccess.h"
#include "KingSystem/ActorSystem/actBaseProcAccessor.h"
#include "KingSystem/ActorSystem/actBaseProcHandle.h"
#include "KingSystem/ActorSystem/actBaseProcJobHandler.h"
#include "KingSystem/ActorSystem/actBaseProcLink.h"
@@ -595,7 +595,7 @@ bool BaseProc::setStateFlag(u32 flag_bit) {
return BaseProcMgr::instance()->setProcFlag(*this, flag_bit);
}
bool BaseProc::acquire(ActorLinkConstDataAccess& accessor) {
bool BaseProc::acquire(BaseProcAccessor& accessor) {
if (mState == State::Delete)
return false;
+4 -4
View File
@@ -16,7 +16,7 @@
namespace ksys::act {
class ActorLinkConstDataAccess;
class BaseProcAccessor;
class BaseProc;
class BaseProcLinkData;
class BaseProcJobHandler;
@@ -103,10 +103,10 @@ public:
}
bool isDeleteOrInvalid() const { return mState >= act::BaseProc::State::Delete; }
/// For BaseProcLink or ActorLinkConstDataAccess.
bool acquire(ActorLinkConstDataAccess& accessor);
/// For BaseProcLink or BaseProcAccessor.
bool acquire(BaseProcAccessor& accessor);
BaseProcLinkData* getBaseProcLinkData() const { return mBaseProcLinkData; }
/// For BaseProcLink or ActorLinkConstDataAccess.
/// For BaseProcLink or BaseProcAccessor.
void release();
BaseProc* getConnectedCalcParent() const;
@@ -0,0 +1,48 @@
#include "KingSystem/ActorSystem/actBaseProcAccessor.h"
#include "KingSystem/ActorSystem/actBaseProc.h"
#include "KingSystem/ActorSystem/actBaseProcMgr.h"
#include "KingSystem/Utils/Debug.h"
namespace ksys::act {
BaseProcAccessor::~BaseProcAccessor() {
if (mAcquired && mProc)
mProc->release();
mAcquired = false;
mProc = nullptr;
}
bool BaseProcAccessor::acquire(BaseProc* proc) {
if (mProc) {
if (mAcquired)
mProc->release();
mAcquired = false;
mProc = nullptr;
}
return proc && proc->acquire(*this);
}
bool acquireProc(BaseProcAccessor* accessor, BaseProc* proc, const sead::SafeString& from, s32) {
bool acquired = false;
if (accessor) {
acquired = accessor->acquire(proc);
if (!acquired)
return false;
}
if (acquired || BaseProcMgr::instance()->isHighPriorityThread())
return true;
sead::FixedSafeString<256> message;
// (%s)Acquiring from a low priority thread. Please change via ActorLinkConstDataAccess
message.format("(%s)低スレッドからの取得です。ActorLinkConstDataAccess経由に変更お願いします",
from.cstr());
util::PrintDebug(message);
return false;
}
} // namespace ksys::act
@@ -0,0 +1,50 @@
#pragma once
#include <basis/seadTypes.h>
#include <prim/seadSafeString.h>
#include <utility>
namespace ksys::act {
class BaseProc;
/// Holds a reference to a BaseProc for safe, multi-threaded access.
class BaseProcAccessor {
public:
BaseProcAccessor() = default;
explicit BaseProcAccessor(BaseProc* proc) { acquire(proc); }
/// Destructor that automatically releases any acquired BaseProc.
~BaseProcAccessor();
BaseProcAccessor(const BaseProcAccessor&) = delete;
BaseProcAccessor& operator=(const BaseProcAccessor&) = delete;
BaseProcAccessor(BaseProcAccessor&& other) noexcept { *this = std::move(other); }
BaseProcAccessor& operator=(BaseProcAccessor&& other) noexcept {
std::swap(mAcquired, other.mAcquired);
std::swap(mProc, other.mProc);
return *this;
}
/// Acquire a BaseProc. This increments its reference count.
/// If an actor was already acquired, it is released.
bool acquire(BaseProc* proc);
void release() { acquire(nullptr); }
bool hasProc() const { return mProc != nullptr; }
protected:
friend class ActorLinkConstDataAccess;
friend class BaseProc;
friend class BaseProcHandle;
friend class BaseProcUnit;
bool mAcquired = false;
BaseProc* mProc = nullptr;
};
/// Acquire the specified BaseProc using `accessor`. Using ActorLinkConstDataAccess is mandatory
/// when acquiring from a low priority thread (see BaseProcMgr for a definition).
bool acquireProc(BaseProcAccessor* accessor, BaseProc* proc, const sead::SafeString& from, s32 = 2);
} // namespace ksys::act
@@ -1,7 +1,7 @@
#include "KingSystem/ActorSystem/actBaseProcHandle.h"
#include <prim/seadScopedLock.h>
#include "KingSystem/ActorSystem/actActorLinkConstDataAccess.h"
#include "KingSystem/ActorSystem/actBaseProc.h"
#include "KingSystem/ActorSystem/actBaseProcAccessor.h"
#include "KingSystem/Utils/Debug.h"
namespace ksys::act {
@@ -80,7 +80,7 @@ BaseProc* BaseProcHandle::releaseProc() {
BaseProc* proc = nullptr;
{
ActorLinkConstDataAccess accessor;
BaseProcAccessor accessor;
{
const auto lock = sead::makeScopedLock(unit->getCS());
if (unit->compareExchangeHandle(this, &gDummyProcHandle)) {
@@ -106,7 +106,7 @@ BaseProc* BaseProcHandle::releaseAndWakeProc() {
BaseProc* proc = nullptr;
{
ActorLinkConstDataAccess accessor;
BaseProcAccessor accessor;
{
const auto lock = sead::makeScopedLock(unit->getCS());
if (unit->compareExchangeHandle(this, &gDummyProcHandle)) {
@@ -172,7 +172,7 @@ bool BaseProcUnit::deleteProc([[maybe_unused]] u32 x, BaseProcHandle* handle) {
__builtin_assume(x);
#endif
ActorLinkConstDataAccess accessor;
BaseProcAccessor accessor;
{
const auto lock = sead::makeScopedLock(mCS);
@@ -1,8 +1,8 @@
#include "KingSystem/ActorSystem/actBaseProcLink.h"
#include <prim/seadScopedLock.h>
#include <thread/seadThread.h>
#include "KingSystem/ActorSystem/actActorLinkConstDataAccess.h"
#include "KingSystem/ActorSystem/actBaseProc.h"
#include "KingSystem/ActorSystem/actBaseProcAccessor.h"
#include "KingSystem/ActorSystem/actBaseProcMgr.h"
namespace ksys::act {
@@ -39,7 +39,7 @@ bool BaseProcLink::hasProcById(BaseProc* proc) const {
return proc != nullptr & mId != cInvalidId && mId == proc->getId();
}
BaseProc* BaseProcLink::getProc(ActorLinkConstDataAccess* accessor, BaseProc* other_proc) const {
BaseProc* BaseProcLink::getProc(BaseProcAccessor* accessor, BaseProc* other_proc) const {
return getProcInContext([&](BaseProc* proc, bool) -> BaseProc* {
if (proc && acquireProc(accessor, proc, "frm::BaseProcLink") &&
BaseProcMgr::instance()->isAccessingProcSafe(proc, other_proc)) {
@@ -49,7 +49,7 @@ BaseProc* BaseProcLink::getProc(ActorLinkConstDataAccess* accessor, BaseProc* ot
});
}
BaseProc* BaseProcLink::getProc(ActorLinkConstDataAccess* accessor) const {
BaseProc* BaseProcLink::getProc(BaseProcAccessor* accessor) const {
return getProcInContext([&](BaseProc* proc, bool) -> BaseProc* {
if (proc && acquireProc(accessor, proc, "frm::BaseProcLink"))
return proc;
+4 -4
View File
@@ -11,7 +11,7 @@
namespace ksys::act {
class ActorLinkConstDataAccess;
class BaseProcAccessor;
class BaseProc;
class BaseProcLinkData;
@@ -29,8 +29,8 @@ public:
bool hasProcInCalcState() const;
bool hasProcById(BaseProc* proc) const;
BaseProc* getProc(ActorLinkConstDataAccess* accessor, BaseProc* other_proc) const;
BaseProc* getProc(ActorLinkConstDataAccess* accessor) const;
BaseProc* getProc(BaseProcAccessor* accessor, BaseProc* other_proc) const;
BaseProc* getProc(BaseProcAccessor* accessor) const;
/// Acquire the specified BaseProc.
/// If a BaseProc has already been specified, it is released.
@@ -44,7 +44,7 @@ public:
bool isAccessingSpecifiedProcUnsafe(BaseProc* other) const;
template <typename Function>
auto getProcInContext(const Function& function) const;
KSYS_ALWAYS_INLINE auto getProcInContext(const Function& function) const;
private:
static constexpr u32 cInvalidId = -1;
@@ -1,6 +1,6 @@
#include "KingSystem/ActorSystem/actPhysicsUserTag.h"
#include "KingSystem/ActorSystem/actActor.h"
#include "KingSystem/ActorSystem/actActorLinkConstDataAccess.h"
#include "KingSystem/ActorSystem/actBaseProcAccessor.h"
#include "KingSystem/ActorSystem/actBaseProcMgr.h"
namespace ksys::act {
@@ -9,7 +9,7 @@ PhysicsUserTag::PhysicsUserTag(Actor* actor) : mActor(actor) {}
PhysicsUserTag::~PhysicsUserTag() = default;
Actor* PhysicsUserTag::getActor(ActorLinkConstDataAccess* accessor, Actor* other_actor) const {
Actor* PhysicsUserTag::getActor(BaseProcAccessor* accessor, Actor* other_actor) const {
if (mActor != nullptr) {
if (mActor != other_actor && !BaseProcMgr::instance()->isAccessingProcSafe(mActor, nullptr))
return mActor;
@@ -19,7 +19,7 @@ Actor* PhysicsUserTag::getActor(ActorLinkConstDataAccess* accessor, Actor* other
return mActor;
}
bool PhysicsUserTag::acquireActor(ActorLinkConstDataAccess* accessor) const {
bool PhysicsUserTag::acquireActor(BaseProcAccessor* accessor) const {
return accessor->acquire(mActor);
}
@@ -6,7 +6,7 @@
namespace ksys::act {
class Actor;
class ActorLinkConstDataAccess;
class BaseProcAccessor;
class PhysicsUserTag : public phys::UserTag {
SEAD_RTTI_OVERRIDE(PhysicsUserTag, phys::UserTag)
@@ -15,8 +15,8 @@ public:
explicit PhysicsUserTag(Actor* actor);
~PhysicsUserTag() override;
Actor* getActor(ActorLinkConstDataAccess* accessor, Actor* other_actor) const;
bool acquireActor(ActorLinkConstDataAccess* accessor) const;
Actor* getActor(BaseProcAccessor* accessor, Actor* other_actor) const;
bool acquireActor(BaseProcAccessor* accessor) const;
Actor* getActor() const { return mActor; }
+1 -1
View File
@@ -125,7 +125,7 @@ act::Actor* Object::tryGetActor(bool force) {
return sead::DynamicCast<act::Actor>(proc);
}
bool Object::getActorWithAccessor(act::ActorLinkConstDataAccess& accessor) {
bool Object::getActorWithAccessor(act::BaseProcAccessor& accessor) {
act::BaseProcMgr* instance = act::BaseProcMgr::instance();
if (instance == nullptr || !instance->isHighPriorityThread() || mProc == nullptr)
+2 -2
View File
@@ -3,7 +3,7 @@
#include <basis/seadTypes.h>
#include <heap/seadHeap.h>
#include <prim/seadTypedBitFlag.h>
#include "KingSystem/ActorSystem/actActorLinkConstDataAccess.h"
#include "KingSystem/ActorSystem/actBaseProcAccessor.h"
#include "KingSystem/ActorSystem/actDebug.h"
#include "KingSystem/GameData/gdtFlagHandle.h"
#include "KingSystem/Map/mapDebug.h"
@@ -103,7 +103,7 @@ public:
act::BaseProc* tryGetProc(bool force);
void unlinkProc(bool force);
bool getActorWithAccessor(act::ActorLinkConstDataAccess& accessor);
bool getActorWithAccessor(act::BaseProcAccessor& accessor);
act::Actor* tryGetActor(bool force);
act::Actor* getActor();
+3 -3
View File
@@ -1,6 +1,6 @@
#include "KingSystem/Map/mapObjectLink.h"
#include <container/seadBuffer.h>
#include "KingSystem/ActorSystem/actActorConstDataAccess.h"
#include "KingSystem/ActorSystem/actActorLinkConstDataAccess.h"
#include "KingSystem/Map/mapObject.h"
#include "KingSystem/Map/mapObjectGenGroup.h"
#include "KingSystem/Map/mapRail.h"
@@ -129,7 +129,7 @@ act::Actor* ObjectLink::getObjectActor() const {
return other_obj->tryGetActor(false);
}
bool ObjectLink::getObjectProcWithAccessor(act::ActorLinkConstDataAccess& accessor) const {
bool ObjectLink::getObjectProcWithAccessor(act::BaseProcAccessor& accessor) const {
if (other_obj == nullptr)
return accessor.acquire(nullptr);
else
@@ -208,7 +208,7 @@ bool ObjectLinkArray::checkLink(MapLinkDefType t, bool b) {
return false;
done:
act::ActorConstDataAccess acc{};
act::ActorLinkConstDataAccess acc{};
if (link->other_obj != nullptr)
link->other_obj->getActorWithAccessor(acc);
+2 -2
View File
@@ -7,7 +7,7 @@
namespace ksys::act {
class Actor;
class ActorLinkConstDataAccess;
class BaseProcAccessor;
} // namespace ksys::act
namespace ksys::map {
@@ -65,7 +65,7 @@ enum class MapLinkDefType {
struct ObjectLink {
~ObjectLink() {}
act::Actor* getObjectActor() const;
bool getObjectProcWithAccessor(act::ActorLinkConstDataAccess& accessor) const;
bool getObjectProcWithAccessor(act::BaseProcAccessor& accessor) const;
const char* getDescription() const;
static const char* getDescriptionForType(MapLinkDefType t);
static MapLinkDefType getTypeForName(const sead::SafeString& name);
+2 -2
View File
@@ -4,7 +4,7 @@
#include <gfx/seadCamera.h>
#include <math/seadMathCalcCommon.h>
#include <mc/seadWorkerMgr.h>
#include "KingSystem/ActorSystem/actActorConstDataAccess.h"
#include "KingSystem/ActorSystem/actActorLinkConstDataAccess.h"
#include "KingSystem/ActorSystem/actActorSystem.h"
#include "KingSystem/Camera/CameraMgr.h"
#include "KingSystem/Ecosystem/ecoSystem.h"
@@ -409,7 +409,7 @@ void Manager::onStageInit(StageType stage_type, bool is_demo, bool is_main_field
mPrevCameraPos = mCameraPos;
mPrevCameraPos.y += 200.0f;
mCurrentClimate = getClimate(mCameraPos);
act::ActorConstDataAccess accessor;
act::ActorLinkConstDataAccess accessor;
act::ActorSystem::instance()->getPlayer(&accessor);
if (accessor.hasProc()) {
mPlayerPos = accessor.getPreviousPos();
+2 -2
View File
@@ -1,6 +1,6 @@
#include "KingSystem/World/worldTimeMgr.h"
#include <random/seadGlobalRandom.h>
#include "KingSystem/ActorSystem/actActorConstDataAccess.h"
#include "KingSystem/ActorSystem/actActorLinkConstDataAccess.h"
#include "KingSystem/ActorSystem/actActorSystem.h"
#include "KingSystem/ActorSystem/actActorUtil.h"
#include "KingSystem/Event/evtManager.h"
@@ -570,7 +570,7 @@ void TimeMgr::calc_() {
void TimeMgr::AnimalMasterController::calc() {
const auto num_days = Manager::instance()->getTimeMgr()->getNumberOfDays();
act::ActorConstDataAccess player_accessor;
act::ActorLinkConstDataAccess player_accessor;
act::ActorSystem::instance()->getPlayer(&player_accessor);
const int day_of_week = num_days % 7;