From 6e9afd0f7d6f8e037fd71e91dfdad4b45f8e7e2f Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?L=C3=A9o=20Lam?= Date: Sun, 11 Oct 2026 04:13:20 +0200 Subject: [PATCH] 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) --- data/uking_functions.csv | 166 +++---- src/Game/AOC/aocHardModeManager.cpp | 4 +- src/Game/AOC/aocHardModeManager.h | 4 +- src/Game/Actor/AI/aiAirOctaFlyUp.cpp | 6 +- .../Actor/Damage/dmgDamageManagerBase.cpp | 4 +- src/Game/Actor/Player/actPlayerInfo.cpp | 5 +- src/Game/Actor/actPlayerCreateMgr.cpp | 3 +- src/Game/Actor/actWeapon.cpp | 8 +- src/Game/Actor/actWeapon.h | 6 +- src/Game/UI/uiPauseMenuDataMgr.cpp | 4 +- src/KingSystem/ActorSystem/CMakeLists.txt | 4 +- .../ActorSystem/actActorConstDataAccess.cpp | 420 ----------------- .../ActorSystem/actActorConstDataAccess.h | 131 ------ .../ActorSystem/actActorLimiter.cpp | 4 +- .../actActorLinkConstDataAccess.cpp | 437 ++++++++++++++++-- .../ActorSystem/actActorLinkConstDataAccess.h | 167 +++++-- src/KingSystem/ActorSystem/actActorSystem.h | 4 +- src/KingSystem/ActorSystem/actActorUtil.cpp | 44 +- src/KingSystem/ActorSystem/actActorUtil.h | 34 +- src/KingSystem/ActorSystem/actBaseProc.cpp | 4 +- src/KingSystem/ActorSystem/actBaseProc.h | 8 +- .../ActorSystem/actBaseProcAccessor.cpp | 48 ++ .../ActorSystem/actBaseProcAccessor.h | 50 ++ .../ActorSystem/actBaseProcHandle.cpp | 8 +- .../ActorSystem/actBaseProcLink.cpp | 6 +- src/KingSystem/ActorSystem/actBaseProcLink.h | 8 +- .../ActorSystem/actPhysicsUserTag.cpp | 6 +- .../ActorSystem/actPhysicsUserTag.h | 6 +- src/KingSystem/Map/mapObject.cpp | 2 +- src/KingSystem/Map/mapObject.h | 4 +- src/KingSystem/Map/mapObjectLink.cpp | 6 +- src/KingSystem/Map/mapObjectLink.h | 4 +- src/KingSystem/World/worldManager.cpp | 4 +- src/KingSystem/World/worldTimeMgr.cpp | 4 +- 34 files changed, 806 insertions(+), 817 deletions(-) delete mode 100644 src/KingSystem/ActorSystem/actActorConstDataAccess.cpp delete mode 100644 src/KingSystem/ActorSystem/actActorConstDataAccess.h create mode 100644 src/KingSystem/ActorSystem/actBaseProcAccessor.cpp create mode 100644 src/KingSystem/ActorSystem/actBaseProcAccessor.h diff --git a/data/uking_functions.csv b/data/uking_functions.csv index 1ad99334..854d7db1 100644 --- a/data/uking_functions.csv +++ b/data/uking_functions.csv @@ -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 diff --git a/src/Game/AOC/aocHardModeManager.cpp b/src/Game/AOC/aocHardModeManager.cpp index 479fef42..9af17016 100644 --- a/src/Game/AOC/aocHardModeManager.cpp +++ b/src/Game/AOC/aocHardModeManager.cpp @@ -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); diff --git a/src/Game/AOC/aocHardModeManager.h b/src/Game/AOC/aocHardModeManager.h index 375438a2..c6c51db2 100644 --- a/src/Game/AOC/aocHardModeManager.h +++ b/src/Game/AOC/aocHardModeManager.h @@ -4,7 +4,7 @@ #include #include #include -#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; diff --git a/src/Game/Actor/AI/aiAirOctaFlyUp.cpp b/src/Game/Actor/AI/aiAirOctaFlyUp.cpp index 2c6afbbb..40c27583 100644 --- a/src/Game/Actor/AI/aiAirOctaFlyUp.cpp +++ b/src/Game/Actor/AI/aiAirOctaFlyUp.cpp @@ -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, diff --git a/src/Game/Actor/Damage/dmgDamageManagerBase.cpp b/src/Game/Actor/Damage/dmgDamageManagerBase.cpp index 08557ba6..26e8876b 100644 --- a/src/Game/Actor/Damage/dmgDamageManagerBase.cpp +++ b/src/Game/Actor/Damage/dmgDamageManagerBase.cpp @@ -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); diff --git a/src/Game/Actor/Player/actPlayerInfo.cpp b/src/Game/Actor/Player/actPlayerInfo.cpp index ec44523f..83bf2f8a 100644 --- a/src/Game/Actor/Player/actPlayerInfo.cpp +++ b/src/Game/Actor/Player/actPlayerInfo.cpp @@ -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"); diff --git a/src/Game/Actor/actPlayerCreateMgr.cpp b/src/Game/Actor/actPlayerCreateMgr.cpp index f053b40d..51c9b122 100644 --- a/src/Game/Actor/actPlayerCreateMgr.cpp +++ b/src/Game/Actor/actPlayerCreateMgr.cpp @@ -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); diff --git a/src/Game/Actor/actWeapon.cpp b/src/Game/Actor/actWeapon.cpp index c4281c19..f54e47ba 100644 --- a/src/Game/Actor/actWeapon.cpp +++ b/src/Game/Actor/actWeapon.cpp @@ -1,7 +1,7 @@ #include "Game/Actor/actWeapon.h" #include #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)) { diff --git a/src/Game/Actor/actWeapon.h b/src/Game/Actor/actWeapon.h index 56631ab1..6a5ffb81 100644 --- a/src/Game/Actor/actWeapon.h +++ b/src/Game/Actor/actWeapon.h @@ -5,7 +5,7 @@ #include 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)); diff --git a/src/Game/UI/uiPauseMenuDataMgr.cpp b/src/Game/UI/uiPauseMenuDataMgr.cpp index ec352d31..8b146430 100644 --- a/src/Game/UI/uiPauseMenuDataMgr.cpp +++ b/src/Game/UI/uiPauseMenuDataMgr.cpp @@ -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; diff --git a/src/KingSystem/ActorSystem/CMakeLists.txt b/src/KingSystem/ActorSystem/CMakeLists.txt index 1a549493..b3f0e0da 100644 --- a/src/KingSystem/ActorSystem/CMakeLists.txt +++ b/src/KingSystem/ActorSystem/CMakeLists.txt @@ -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 diff --git a/src/KingSystem/ActorSystem/actActorConstDataAccess.cpp b/src/KingSystem/ActorSystem/actActorConstDataAccess.cpp deleted file mode 100644 index c3061e90..00000000 --- a/src/KingSystem/ActorSystem/actActorConstDataAccess.cpp +++ /dev/null @@ -1,420 +0,0 @@ -#include "KingSystem/ActorSystem/actActorConstDataAccess.h" -#include -#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(proc)) - return proc; - return nullptr; -} - -inline Actor* ActorConstDataAccess::getActor() const { - return static_cast(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(proc->getConnectedCalcParent())); - return accessor->mProc != nullptr; -} - -bool ActorConstDataAccess::acquireConnectedCalcChild(ActorLinkConstDataAccess* accessor) const { - auto* proc = getActor(); - if (!proc) - return false; - - accessor->acquire(sead::DynamicCast(proc->getConnectedCalcChild())); - return accessor->mProc != nullptr; -} - -bool ActorConstDataAccess::hasConnectedCalcParent() const { - auto* proc = getActor(); - return proc && sead::DynamicCast(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->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(proc)); - }); -} - -} // namespace ksys::act diff --git a/src/KingSystem/ActorSystem/actActorConstDataAccess.h b/src/KingSystem/ActorSystem/actActorConstDataAccess.h deleted file mode 100644 index b78e9fbc..00000000 --- a/src/KingSystem/ActorSystem/actActorConstDataAccess.h +++ /dev/null @@ -1,131 +0,0 @@ -#pragma once - -#include -#include -#include -#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 - bool isDerivedFrom() const { - return sead::IsDerivedFrom(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 diff --git a/src/KingSystem/ActorSystem/actActorLimiter.cpp b/src/KingSystem/ActorSystem/actActorLimiter.cpp index 94531c96..fdc7b348 100644 --- a/src/KingSystem/ActorSystem/actActorLimiter.cpp +++ b/src/KingSystem/ActorSystem/actActorLimiter.cpp @@ -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. diff --git a/src/KingSystem/ActorSystem/actActorLinkConstDataAccess.cpp b/src/KingSystem/ActorSystem/actActorLinkConstDataAccess.cpp index 06694bbf..591df49e 100644 --- a/src/KingSystem/ActorSystem/actActorLinkConstDataAccess.cpp +++ b/src/KingSystem/ActorSystem/actActorLinkConstDataAccess.cpp @@ -1,64 +1,419 @@ #include "KingSystem/ActorSystem/actActorLinkConstDataAccess.h" #include #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(proc)) + return proc; + return nullptr; } -bool ActorLinkConstDataAccess::acquire(BaseProc* proc) { - if (mProc) { - if (mAcquired) - mProc->release(); +inline Actor* ActorLinkConstDataAccess::getActor() const { + return static_cast(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(proc->getConnectedCalcParent())); + return accessor->mProc != nullptr; +} + +bool ActorLinkConstDataAccess::acquireConnectedCalcChild(BaseProcAccessor* accessor) const { + auto* proc = getActor(); + if (!proc) + return false; + + accessor->acquire(sead::DynamicCast(proc->getConnectedCalcChild())); + return accessor->mProc != nullptr; +} + +bool ActorLinkConstDataAccess::hasConnectedCalcParent() const { + auto* proc = getActor(); + return proc && sead::DynamicCast(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(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->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(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 diff --git a/src/KingSystem/ActorSystem/actActorLinkConstDataAccess.h b/src/KingSystem/ActorSystem/actActorLinkConstDataAccess.h index 4c67c686..cd10f9ad 100644 --- a/src/KingSystem/ActorSystem/actActorLinkConstDataAccess.h +++ b/src/KingSystem/ActorSystem/actActorLinkConstDataAccess.h @@ -1,62 +1,149 @@ #pragma once -#include #include -#include +#include +#include +#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 + bool isDerivedFrom() const { + return sead::IsDerivedFrom(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(proc)); + }); +} -} // namespace act - -} // namespace ksys +} // namespace ksys::act diff --git a/src/KingSystem/ActorSystem/actActorSystem.h b/src/KingSystem/ActorSystem/actActorSystem.h index b147658b..ba09ecc7 100644 --- a/src/KingSystem/ActorSystem/actActorSystem.h +++ b/src/KingSystem/ActorSystem/actActorSystem.h @@ -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; diff --git a/src/KingSystem/ActorSystem/actActorUtil.cpp b/src/KingSystem/ActorSystem/actActorUtil.cpp index 3f5e3a74..3b85c7d3 100644 --- a/src/KingSystem/ActorSystem/actActorUtil.cpp +++ b/src/KingSystem/ActorSystem/actActorUtil.cpp @@ -4,7 +4,7 @@ #include #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); diff --git a/src/KingSystem/ActorSystem/actActorUtil.h b/src/KingSystem/ActorSystem/actActorUtil.h index 2e0a576e..44210f1f 100644 --- a/src/KingSystem/ActorSystem/actActorUtil.h +++ b/src/KingSystem/ActorSystem/actActorUtil.h @@ -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); diff --git a/src/KingSystem/ActorSystem/actBaseProc.cpp b/src/KingSystem/ActorSystem/actBaseProc.cpp index ea4f8884..cce31c21 100644 --- a/src/KingSystem/ActorSystem/actBaseProc.cpp +++ b/src/KingSystem/ActorSystem/actBaseProc.cpp @@ -1,7 +1,7 @@ #include "KingSystem/ActorSystem/actBaseProc.h" #include #include