diff --git a/CommonLibSF/include/RE/A/Actor.h b/CommonLibSF/include/RE/A/Actor.h index ce642c0e..c8cf3dcd 100644 --- a/CommonLibSF/include/RE/A/Actor.h +++ b/CommonLibSF/include/RE/A/Actor.h @@ -1,36 +1,153 @@ #pragma once #include "RE/A/AIProcess.h" -#include "RE/A/ActorPackage.h" +#include "RE/A/ActorState.h" +#include "RE/I/IMovementStateStore.h" +#include "RE/I/IStoreAnimationActions.h" +#include "RE/M/MagicTarget.h" #include "RE/T/TESObjectREFR.h" namespace RE { + class AIProcess; + class CombatController; class CombatGroup; + class MovementMessageUpdateRequestImmediate; class TESFaction; - class AIProcess; + class TESRace; + + struct ActorCPMEvent; + struct ActorSprintEvent; + struct bhkCharacterMoveFinishEvent; + struct bhkCharacterStateChangeEvent; + struct bhkNonSupportContactEvent; + struct BSMovementDataChangedEvent; + struct BSNavmeshChangeEvent; + struct BSSubGraphActivationUpdate; + struct Perks; + + namespace PerkValueEvents + { + struct PerkValueChangedEvent; + struct PerkEntryUpdatedEvent; + } + + enum class ACTOR_CRITICAL_STAGE + { + kNone = 0, + kGooStart = 1, + kGooEnd = 2, + kDisintegrateStart = 3, + kDisintegrateEnd = 4, + kFreezeStart = 5, + kFreezeEnd = 6, + + kTotal + }; class Actor : - public TESObjectREFR // 110 - // ... + public TESObjectREFR, // 000 + public MagicTarget, // 110 + public ActorState, // 128 + public IMovementStateStore, // 138 + public IStoreAnimationActions, // 140 + public BSTEventSink, // 148 + public BSTEventSink, // 150 + public BSTEventSink, // 158 + public BSTEventSink, // 160 + public BSTEventSink, // 168 + public BSTEventSink, // 170 + public BSTEventSource, // 178 + public BSTEventSource, // 1A0 + public BSTEventSource, // 1C8 + public BSTEventSource, // 1F0 + public BSTEventSource // 218 { public: SF_RTTI_VTABLE(Actor); SF_FORMTYPE(ACHR); - ~Actor() override; // 00 + enum class BOOL_BITS + { + kNone = 0, + kDelayUpdateScenegraph = 1 << 0, + kProcessMe = 1 << 1, + kMurderAlarm = 1 << 2, + kHasSceneExtra = 1 << 3, + kHeadingFixed = 1 << 4, + kSpeakingDone = 1 << 5, + kIgnoreChangeAnimationCall = 1 << 6, + kSoundFileDone = 1 << 7, + kVoiceFileDone = 1 << 8, + kInTempChangeList = 1 << 9, + kDoNotRunSayToCallback = 1 << 10, + kDead = 1 << 11, + kForceGreetingPlayer = 1 << 12, + kForceUpdateQuestTarget = 1 << 13, + kSearchingInCombat = 1 << 14, + kAttackOnNextTheft = 1 << 15, + kEvpBuffered = 1 << 16, + kResetAI = 1 << 17, + kInWater = 1 << 18, + kSwimming = 1 << 19, + kVoicePausedByScript = 1 << 20, + kWasInFrustrum = 1 << 21, + kShouldRotateToTrack = 1 << 22, + kSetOnDeath = 1 << 23, + kDoNotPadVoice = 1 << 24, + kFootIKInRange = 1 << 25, + kPlayerTeammate = 1 << 26, + kGivePlayerXP = 1 << 27, + kSoundCallbackSuccess = 1 << 28, + kUseEmotion = 1 << 29, + kGuard = 1 << 30, + kParalyzed = 1 << 31 + }; - inline static Actor* PlayerCharacter() + enum class BOOL_FLAGS { - static REL::Relocation singleton{ REL::ID(865059) }; - return *singleton; - } + kNone = 0, + kScenePackage = 1 << 0, + kIsAMount = 1 << 1, + kIsMountPointClear = 1 << 2, + kIsGettingOnOffMount = 1 << 3, + kInRandomScene = 1 << 4, + kNoBleedoutRecovery = 1 << 5, + kInBleedoutAnimation = 1 << 6, + kCanDoFavor = 1 << 7, + kShouldAnimGraphUpdate = 1 << 8, + kCanSpeakToEssentialDown = 1 << 9, + kBribedByPlayer = 1 << 10, + kAngryWithPlayer = 1 << 11, + kIsTresspassing = 1 << 12, + kCanSpeak = 1 << 13, + kIsInKillMove = 1 << 14, + kAttackOnSight = 1 << 15, + kIsCommandedActor = 1 << 16, + kForceOneAnimGraphUpdate = 1 << 17, + kEssential = 1 << 18, + kProtected = 1 << 19, + kAttackingDisabled = 1 << 20, + kCastingDisabled = 1 << 21, + kSceneHeadtrackRotation = 1 << 22, + kForceIncMinBoneUpdate = 1 << 23, + kCrimeSearch = 1 << 24, + kMovingIntoLoadedArea = 1 << 25, + kDoNotShowOnStealthMeter = 1 << 26, + kMovementBlocked = 1 << 27, + kAllowInstantFurniturePopInPlayerCell = 1 << 28, + kForceAnimGraphUpdate = 1 << 29, + kCheckAddEffectDualCast = 1 << 30, + kUnderwater = 1 << 31, + }; - inline static bool IsPlayerCharacterInChargen() + enum class BOOL_FLAGS2 { - auto PC = PlayerCharacter(); - return *(stl::adjust_pointer(PC, 0xF24)); - } + kNone = 0, + kHasChargenSkeleton = 1 << 5, + }; + + ~Actor() override; // 00 // add virtual void PlayPickUpSound(TESBoundObject* a_boundObj, bool a_pickUp, bool a_use); // 130 @@ -95,14 +212,14 @@ namespace RE virtual void Unk_16B(); // 16B virtual bool IsInCombat() const; // 16C virtual void Unk_16D(); // 16D - virtual void Unk_16E(); // 16E + virtual void StopCombat(); // 16E virtual void Unk_16F(); // 16F virtual void SetLifeState(std::uint32_t a_state); // 170 virtual void Unk_171(); // 171 virtual void Unk_172(); // 172 virtual void Unk_173(); // 173 virtual void Unk_174(); // 174 - virtual void Unk_175(); // 175 + virtual bool IsInFaction(TESFaction* a_faction); // 175 virtual void Unk_176(); // 176 virtual void Unk_177(); // 177 virtual void Unk_178(); // 178 @@ -148,142 +265,110 @@ namespace RE virtual void Unk_1A0(); // 1A0 virtual void Unk_1A1(); // 1A1 - std::uint64_t unk110; // 110 - std::uint64_t unk118; // 118 - std::uint64_t unk120; // 120 - std::uint64_t unk128; // 128 - std::uint64_t unk130; // 130 - std::uint64_t unk138; // 138 - std::uint64_t unk140; // 140 - std::uint64_t unk148; // 148 - std::uint64_t unk150; // 150 - std::uint64_t unk158; // 158 - std::uint64_t unk160; // 160 - std::uint64_t unk168; // 168 - std::uint64_t unk170; // 170 - std::uint64_t unk178; // 178 - std::uint64_t unk180; // 180 - std::uint64_t unk188; // 188 - std::uint64_t unk190; // 190 - std::uint64_t unk198; // 198 - std::uint64_t unk1A0; // 1A0 - std::uint64_t unk1A8; // 1A8 - std::uint64_t unk1B0; // 1B0 - std::uint64_t unk1B8; // 1B8 - std::uint64_t unk1C0; // 1C0 - std::uint64_t unk1C8; // 1C8 - std::uint64_t unk1D0; // 1D0 - std::uint64_t unk1D8; // 1D8 - std::uint64_t unk1E0; // 1E0 - std::uint64_t unk1E8; // 1E8 - std::uint64_t unk1F0; // 1F0 - std::uint64_t unk1F8; // 1F8 - std::uint64_t unk200; // 200 - std::uint64_t unk208; // 208 - std::uint64_t unk210; // 210 - std::uint64_t unk218; // 218 - std::uint64_t unk220; // 220 - std::uint64_t unk228; // 228 - std::uint64_t unk230; // 230 - std::uint64_t unk238; // 238 - std::uint64_t unk240; // 240 - std::uint64_t unk248; // 248 - std::uint64_t unk250; // 250 - std::uint64_t unk258; // 258 - AIProcess* currentProcess; // 260 - std::uint64_t unk268; // 268 - std::uint64_t unk270; // 270 - std::uint64_t unk278; // 278 - std::uint64_t unk280; // 280 - std::uint64_t unk288; // 288 - std::uint64_t unk290; // 290 - std::uint64_t unk298; // 298 - std::uint64_t unk2A0; // 2A0 - std::uint64_t unk2A8; // 2A8 - std::uint64_t unk2B0; // 2B0 - std::uint64_t unk2B8; // 2B8 - std::uint64_t unk2C0; // 2C0 - std::uint64_t unk2C8; // 2C8 - std::uint64_t unk2D0; // 2D0 - std::uint64_t unk2D8; // 2D8 - std::uint64_t unk2E0; // 2E0 - std::uint64_t unk2E8; // 2E8 - std::uint64_t unk2F0; // 2F0 - std::uint64_t unk2F8; // 2F8 - std::uint64_t unk300; // 300 - std::uint64_t unk308; // 308 - std::uint64_t unk310; // 310 - std::uint64_t unk318; // 318 - std::uint64_t unk320; // 320 - std::uint64_t unk328; // 328 - std::uint64_t unk330; // 330 - std::uint64_t unk338; // 338 - std::uint64_t unk340; // 340 - std::uint64_t unk348; // 348 - std::uint64_t unk350; // 350 - std::uint64_t unk358; // 358 - std::uint64_t unk360; // 360 - std::uint64_t unk368; // 368 - std::uint64_t unk370; // 370 - std::uint64_t unk378; // 378 - std::uint64_t unk380; // 380 - std::uint64_t unk388; // 388 - std::uint64_t unk390; // 390 - std::uint64_t unk398; // 398 - std::uint64_t unk3A0; // 3A0 - std::uint64_t unk3A8; // 3A8 - std::uint64_t unk3B0; // 3B0 - std::uint64_t unk3B8; // 3B8 - std::uint64_t unk3C0; // 3C0 - std::uint64_t unk3C8; // 3C8 - std::uint64_t unk3D0; // 3D0 - std::uint64_t unk3D8; // 3D8 - std::uint64_t unk3E0; // 3E0 - std::uint64_t unk3E8; // 3E8 - std::uint64_t unk3F0; // 3F0 - std::uint64_t unk3F8; // 3F8 - std::uint64_t unk400; // 400 - std::uint64_t unk408; // 408 - std::uint64_t unk410; // 410 - std::uint64_t unk418; // 418 - std::uint64_t unk420; // 420 - std::uint64_t unk428; // 428 - std::uint64_t unk430; // 430 - std::uint64_t unk438; // 438 - std::uint64_t unk440; // 440 - std::uint64_t unk448; // 448 - std::uint64_t unk450; // 450 - std::uint64_t unk458; // 458 - std::uint64_t unk460; // 460 - std::uint64_t unk468; // 468 - std::uint64_t unk470; // 470 - std::uint64_t unk478; // 478 - std::uint64_t unk480; // 480 - std::uint64_t unk488; // 488 - std::uint64_t unk490; // 490 - std::uint64_t unk498; // 498 - std::uint64_t unk4A0; // 4A0 - std::uint64_t unk4A8; // 4A8 - std::uint64_t unk4B0; // 4B0 - std::uint64_t unk4B8; // 4B8 - std::uint64_t unk4C0; // 4C0 - std::uint64_t unk4C8; // 4C8 - std::uint64_t unk4D0; // 4D0 - std::uint64_t unk4D8; // 4D8 - std::uint64_t unk4E0; // 4E0 - std::uint64_t unk4E8; // 4E8 - std::uint64_t unk4F0; // 4F0 - std::uint64_t unk4F8; // 4F8 - std::uint64_t unk500; // 500 - std::uint64_t unk508; // 508 - std::uint64_t unk510; // 510 - std::uint64_t unk518; // 518 - std::uint64_t unk520; // 520 - std::uint64_t unk528; // 528 - std::uint64_t unk530; // 530 - std::uint64_t unk538; // 538 - std::uint64_t unk540; // 540 - std::uint64_t unk548; // 548 + // members + stl::enumeration boolBits; // 240 + std::uint32_t unk244; // 244 + std::uint64_t unk248; // 248 + std::uint64_t unk250; // 250 + std::uint64_t unk258; // 258 + AIProcess* currentProcess; // 260 + std::uint64_t unk268; // 268 + std::uint64_t unk270; // 270 + std::uint64_t unk278; // 278 + std::uint64_t unk280; // 280 + CombatController* combatController; // 288 + std::uint64_t unk290; // 290 + std::uint64_t unk298; // 298 + std::uint64_t unk2A0; // 2A0 + std::uint64_t unk2A8; // 2A8 + std::uint64_t unk2B0; // 2B0 + std::uint64_t unk2B8; // 2B8 + std::uint64_t unk2C0; // 2C0 + stl::enumeration criticalStage; // 2C8 + std::uint32_t dialogueItemTarget; // 2CC - TESPointerHandle + std::uint32_t currentCombatTarget; // 2D0 - TESPointerHandle + std::uint32_t myKiller; // 2D4 - TESPointerHandle + std::uint64_t unk2D8; // 2D8 + std::uint64_t unk2E0; // 2E0 + std::uint64_t unk2E8; // 2E8 + std::uint64_t unk2F0; // 2F0 + std::uint32_t intimidateBribeDayStamp; // 2F8 + std::uint32_t unk2FC; // 2FC + std::uint64_t unk300; // 300 + std::uint64_t unk308; // 308 + std::uint64_t unk310; // 310 + std::uint64_t unk318; // 318 + std::uint64_t unk320; // 320 + std::uint64_t unk328; // 328 + std::uint64_t unk330; // 330 + std::uint64_t unk338; // 338 + std::uint64_t unk340; // 340 + std::uint64_t unk348; // 348 + std::uint64_t unk350; // 350 + std::uint64_t unk358; // 358 + std::uint64_t unk360; // 360 + std::uint64_t unk368; // 368 + std::uint64_t unk370; // 370 + std::uint64_t unk378; // 378 + std::uint64_t unk380; // 380 + TESRace* race; // 388 + Perks* perks; // 390 + std::uint64_t unk398; // 398 + std::uint64_t unk3A0; // 3A0 + stl::enumeration boolFlags; // 3A8 + stl::enumeration boolFlags2; // 3AC + std::uint64_t unk3B0; // 3B0 + std::uint64_t unk3B8; // 3B8 + std::uint64_t unk3C0; // 3C0 + std::uint64_t unk3C8; // 3C8 + std::uint64_t unk3D0; // 3D0 + std::uint64_t unk3D8; // 3D8 + std::uint64_t unk3E0; // 3E0 + std::uint64_t unk3E8; // 3E8 + std::uint64_t unk3F0; // 3F0 + std::uint64_t unk3F8; // 3F8 + std::uint64_t unk400; // 400 + std::uint64_t unk408; // 408 + std::uint64_t unk410; // 410 + std::uint64_t unk418; // 418 + std::uint64_t unk420; // 420 + std::uint64_t unk428; // 428 + std::uint64_t unk430; // 430 + std::uint64_t unk438; // 438 + std::uint64_t unk440; // 440 + std::uint64_t unk448; // 448 + std::uint64_t unk450; // 450 + std::uint64_t unk458; // 458 + std::uint64_t unk460; // 460 + std::uint64_t unk468; // 468 + std::uint64_t unk470; // 470 + std::uint64_t unk478; // 478 + std::uint64_t unk480; // 480 + std::uint64_t unk488; // 488 + std::uint64_t unk490; // 490 + std::uint64_t unk498; // 498 + std::uint64_t unk4A0; // 4A0 + std::uint64_t unk4A8; // 4A8 + std::uint64_t unk4B0; // 4B0 + std::uint64_t unk4B8; // 4B8 + std::uint64_t unk4C0; // 4C0 + std::uint64_t unk4C8; // 4C8 + std::uint64_t unk4D0; // 4D0 + std::uint64_t unk4D8; // 4D8 + std::uint64_t unk4E0; // 4E0 + std::uint64_t unk4E8; // 4E8 + std::uint64_t unk4F0; // 4F0 + std::uint64_t unk4F8; // 4F8 + std::uint64_t unk500; // 500 + std::uint64_t unk508; // 508 + std::uint64_t unk510; // 510 + std::uint64_t unk518; // 518 + std::uint64_t unk520; // 520 + std::uint64_t unk528; // 528 + std::uint64_t unk530; // 530 + std::uint64_t unk538; // 538 + std::uint64_t unk540; // 540 + std::uint64_t unk548; // 548 }; static_assert(sizeof(Actor) == 0x550); } diff --git a/CommonLibSF/include/RE/A/ActorState.h b/CommonLibSF/include/RE/A/ActorState.h new file mode 100644 index 00000000..f0ee733e --- /dev/null +++ b/CommonLibSF/include/RE/A/ActorState.h @@ -0,0 +1,25 @@ +#pragma once + +#include "RE/I/IMovementState.h" + +namespace RE +{ + class ActorState : public IMovementState + { + public: + SF_RTTI(ActorState); + + ~ActorState() override; // 00 + + // add + virtual void Unk_31(); // 31 + virtual void Unk_32(); // 32 + virtual void Unk_33(); // 33 + virtual void Unk_34(); // 34 + + // members + std::uint32_t actorState1; // 08 + std::uint32_t actorState2; // 0C + }; + static_assert(sizeof(ActorState) == 0x10); +} diff --git a/CommonLibSF/include/RE/I/IMovementPlayerControlsFilter.h b/CommonLibSF/include/RE/I/IMovementPlayerControlsFilter.h new file mode 100644 index 00000000..cbd58d63 --- /dev/null +++ b/CommonLibSF/include/RE/I/IMovementPlayerControlsFilter.h @@ -0,0 +1,29 @@ +#pragma once + +#include "RE/I/IMovementInterface.h" + +namespace RE +{ + class IMovementPlayerControlsFilter : public IMovementInterface + { + public: + SF_RTTI(IMovementPlayerControlsFilter); + + ~IMovementPlayerControlsFilter() override; // 00 + + // add + virtual void Unk_01(); // 01 + virtual void Unk_02(); // 02 + virtual void Unk_03(); // 03 + virtual void Unk_04(); // 04 + virtual void Unk_05(); // 05 + virtual void Unk_06(); // 06 + virtual void Unk_07(); // 07 + virtual void Unk_08(); // 08 + virtual void Unk_09(); // 09 + virtual void Unk_0A(); // 0A + virtual void Unk_0B(); // 0B + virtual void Unk_0C(); // 0C + }; + static_assert(sizeof(IMovementPlayerControlsFilter) == 0x8); +} diff --git a/CommonLibSF/include/RE/I/IMovementState.h b/CommonLibSF/include/RE/I/IMovementState.h new file mode 100644 index 00000000..a5870188 --- /dev/null +++ b/CommonLibSF/include/RE/I/IMovementState.h @@ -0,0 +1,65 @@ +#pragma once + +#include "RE/I/IMovementInterface.h" + +namespace RE +{ + class IMovementState : public IMovementInterface + { + public: + SF_RTTI(IMovementState); + + ~IMovementState() override; // 00 + + // add + virtual void Unk_01(); // 01 + virtual void Unk_02(); // 02 + virtual void Unk_03(); // 03 + virtual void Unk_04(); // 04 + virtual void Unk_05(); // 05 + virtual void Unk_06(); // 06 + virtual void Unk_07(); // 07 + virtual void Unk_08(); // 08 + virtual void Unk_09(); // 09 + virtual void Unk_0A(); // 0A + virtual void Unk_0B(); // 0B + virtual void Unk_0C(); // 0C + virtual void Unk_0D(); // 0D + virtual void Unk_0E(); // 0E + virtual void Unk_0F(); // 0F + virtual void Unk_10(); // 10 + virtual void Unk_11(); // 11 + virtual void Unk_12(); // 12 + virtual void Unk_13(); // 13 + virtual void Unk_14(); // 14 + virtual void Unk_15(); // 15 + virtual void Unk_16(); // 16 + virtual void Unk_17(); // 17 + virtual void Unk_18(); // 18 + virtual void Unk_19(); // 19 + virtual void Unk_1A(); // 1A + virtual void Unk_1B(); // 1B + virtual void Unk_1C(); // 1C + virtual void Unk_1D(); // 1D + virtual void Unk_1E(); // 1E + virtual void Unk_1F(); // 1F + virtual void Unk_20(); // 20 + virtual void Unk_21(); // 21 + virtual void Unk_22(); // 22 + virtual void Unk_23(); // 23 + virtual void Unk_24(); // 24 + virtual void Unk_25(); // 25 + virtual void Unk_26(); // 26 + virtual void Unk_27(); // 27 + virtual void Unk_28(); // 28 + virtual void Unk_29(); // 29 + virtual void Unk_2A(); // 2A + virtual void Unk_2B(); // 2B + virtual void Unk_2C(); // 2C + virtual void Unk_2D(); // 2D + virtual void Unk_2E(); // 2E + virtual void Unk_2F(); // 2F + virtual void Unk_30(); // 30 + }; + static_assert(sizeof(IMovementState) == 0x8); +} diff --git a/CommonLibSF/include/RE/I/IMovementStateStore.h b/CommonLibSF/include/RE/I/IMovementStateStore.h new file mode 100644 index 00000000..410ce261 --- /dev/null +++ b/CommonLibSF/include/RE/I/IMovementStateStore.h @@ -0,0 +1,18 @@ +#pragma once + +#include "RE/I/IMovementInterface.h" + +namespace RE +{ + struct IMovementStateStore : public IMovementInterface + { + public: + SF_RTTI(IMovementStateStore); + + ~IMovementStateStore() override; // 00 + + // add + virtual void Unk_01(); // 01 + }; + static_assert(sizeof(IMovementStateStore) == 0x8); +} diff --git a/CommonLibSF/include/RE/I/IStoreAnimationActions.h b/CommonLibSF/include/RE/I/IStoreAnimationActions.h new file mode 100644 index 00000000..9b7eb2a2 --- /dev/null +++ b/CommonLibSF/include/RE/I/IStoreAnimationActions.h @@ -0,0 +1,20 @@ +#pragma once + +#include "RE/I/IMovementInterface.h" + +namespace RE +{ + class IStoreAnimationActions : public IMovementInterface + { + public: + SF_RTTI(IStoreAnimationActions); + + ~IStoreAnimationActions() override; // 00 + + // add + virtual void Unk_01(); // 01 + virtual void Unk_02(); // 02 + virtual void Unk_03(); // 03 + }; + static_assert(sizeof(IStoreAnimationActions) == 0x8); +} diff --git a/CommonLibSF/include/RE/M/MagicTarget.h b/CommonLibSF/include/RE/M/MagicTarget.h new file mode 100644 index 00000000..15f9bebf --- /dev/null +++ b/CommonLibSF/include/RE/M/MagicTarget.h @@ -0,0 +1,45 @@ +#pragma once + +namespace RE +{ + class ActiveEffect; + class Actor; + class EffectItem; + class MagicItem; + class TESBoundObject; + class TESObjectREFR; + + struct AddTargetData; + struct SpellDispelData; + + class MagicTarget + { + public: + SF_RTTI_VTABLE(MagicTarget); + + virtual ~MagicTarget(); // 00 + + // add + virtual bool AddTarget(AddTargetData& a_targetData); // 01 + virtual TESObjectREFR* GetTargetStatsObject(); // 02 + [[nodiscard]] virtual bool MagicTargetIsActor() const; // 03 + virtual bool IsInvulnerable(); // 04 + virtual void Unk_05(); // 05 + virtual bool CanAddActiveEffect() = 0; // 06 + virtual void Unk_07(); // 07 - GetActiveEffectList? + virtual void Unk_08(); // 08 - GetActiveEffectList const? + virtual float CheckResistance(MagicItem* a_spell, EffectItem* a_effect, TESBoundObject* a_source) const; // 09 + virtual void EffectAdded(ActiveEffect* a_effect); // 0A + virtual void EffectRemoved(ActiveEffect* a_effect); // 0B + virtual void EffectActiveStatusChanged(ActiveEffect* a_effect); // 0C + virtual bool CheckAbsorb(Actor* a_caster, MagicItem* a_spell, const EffectItem* a_effectItem); // 0D + + // members + SpellDispelData* postUpdateDispelList; // 08 + std::uint8_t flags; // 10 + std::uint8_t pad11; // 11 + std::uint16_t pad12; // 12 + std::uint32_t pad14; // 14 + }; + static_assert(sizeof(MagicTarget) == 0x18); +} diff --git a/CommonLibSF/include/RE/P/PlayerCharacter.h b/CommonLibSF/include/RE/P/PlayerCharacter.h new file mode 100644 index 00000000..7ffc6d56 --- /dev/null +++ b/CommonLibSF/include/RE/P/PlayerCharacter.h @@ -0,0 +1,421 @@ +#pragma once + +#include "RE/A/Actor.h" +#include "RE/I/IMovementPlayerControlsFilter.h" + +namespace RE +{ + class MenuModeChangeEvent; + class MenuOpenCloseEvent; + class OtherEventEnabledEvent; + class TESFormDeleteEvent; + class TESHitEvent; + class UserEventEnabledEvent; + + struct AnimationGraphDependentEvent; + struct BGSActorCellEvent; + struct BGSActorDeathEvent; + struct PickRefUpdateEvent; + struct PositionPlayerEvent; + struct TargetHitEvent; + + struct QuestStatus + { + struct Event; + }; + + struct TESQuestEvent + { + struct Event; + }; + + namespace PerkValueEvents + { + struct PerkEntryUpdatedEvent; + } + + class PlayerCharacter : + public Actor, // 000 + public BSTEventSource, // 550 + public BSTEventSource, // 578 + public BSTEventSource, // 5A0 + public BSTEventSource, // 5C8 + public BSTEventSource, // 5F0 + public BSTEventSink, // 618 + public BSTEventSink, // 620 + public BSTEventSink, // 628 + public BSTEventSink, // 630 + public BSTEventSink, // 638 + public BSTEventSink, // 640 + public BSTEventSink, // 648 + public BSTEventSink, // 650 + public BSTEventSink, // 658 + public BSTEventSink, // 660 + public IMovementPlayerControlsFilter // 668 + { + public: + SF_RTTI_VTABLE(PlayerCharacter); + SF_FORMTYPE(ACHR); + + ~PlayerCharacter() override; // 00 + + // add + virtual void Unk_1A2(); // 1A2 + virtual void Unk_1A3(); // 1A3 + virtual void Unk_1A4(); // 1A4 + virtual void Unk_1A5(); // 1A5 + + [[nodiscard]] static PlayerCharacter* GetSingleton() + { + static REL::Relocation singleton{ REL::ID(865059) }; + return *singleton; + } + + bool IsInChargen() + { + return *(stl::adjust_pointer(this, 0xF24)); + } + + // members + std::uint64_t unk0670; // 0670 + std::uint64_t unk0678; // 0678 + std::uint64_t unk0680; // 0680 + std::uint64_t unk0688; // 0688 + std::uint64_t unk0690; // 0690 + std::uint64_t unk0698; // 0698 + std::uint64_t unk06A0; // 06A0 + std::uint64_t unk06A8; // 06A8 + std::uint64_t unk06B0; // 06B0 + std::uint64_t unk06B8; // 06B8 + std::uint64_t unk06C0; // 06C0 + std::uint64_t unk06C8; // 06C8 + std::uint64_t unk06D0; // 06D0 + std::uint64_t unk06D8; // 06D8 + std::uint64_t unk06E0; // 06E0 + std::uint64_t unk06E8; // 06E8 + std::uint64_t unk06F0; // 06F0 + std::uint64_t unk06F8; // 06F8 + std::uint64_t unk0700; // 0700 + std::uint64_t unk0708; // 0708 + std::uint64_t unk0710; // 0710 + std::uint64_t unk0718; // 0718 + std::uint64_t unk0720; // 0720 + std::uint64_t unk0728; // 0728 + std::uint64_t unk0730; // 0730 + std::uint64_t unk0738; // 0738 + std::uint64_t unk0740; // 0740 + std::uint64_t unk0748; // 0748 + std::uint64_t unk0750; // 0750 + std::uint64_t unk0758; // 0758 + std::uint64_t unk0760; // 0760 + std::uint64_t unk0768; // 0768 + std::uint64_t unk0770; // 0770 + std::uint64_t unk0778; // 0778 + std::uint64_t unk0780; // 0780 + std::uint64_t unk0788; // 0788 + std::uint64_t unk0790; // 0790 + std::uint64_t unk0798; // 0798 + std::uint64_t unk07A0; // 07A0 + std::uint64_t unk07A8; // 07A8 + std::uint64_t unk07B0; // 07B0 + std::uint64_t unk07B8; // 07B8 + std::uint64_t unk07C0; // 07C0 + std::uint64_t unk07C8; // 07C8 + std::uint64_t unk07D0; // 07D0 + std::uint64_t unk07D8; // 07D8 + std::uint64_t unk07E0; // 07E0 + std::uint64_t unk07E8; // 07E8 + std::uint64_t unk07F0; // 07F0 + std::uint64_t unk07F8; // 07F8 + std::uint64_t unk0800; // 0800 + std::uint64_t unk0808; // 0808 + std::uint64_t unk0810; // 0810 + std::uint64_t unk0818; // 0818 + std::uint64_t unk0820; // 0820 + std::uint64_t unk0828; // 0828 + std::uint64_t unk0830; // 0830 + std::uint64_t unk0838; // 0838 + std::uint64_t unk0840; // 0840 + std::uint64_t unk0848; // 0848 + std::uint64_t unk0850; // 0850 + std::uint64_t unk0858; // 0858 + std::uint64_t unk0860; // 0860 + std::uint64_t unk0868; // 0868 + std::uint64_t unk0870; // 0870 + std::uint64_t unk0878; // 0878 + std::uint64_t unk0880; // 0880 + std::uint64_t unk0888; // 0888 + std::uint64_t unk0890; // 0890 + std::uint64_t unk0898; // 0898 + std::uint64_t unk08A0; // 08A0 + std::uint64_t unk08A8; // 08A8 + std::uint64_t unk08B0; // 08B0 + std::uint64_t unk08B8; // 08B8 + std::uint64_t unk08C0; // 08C0 + std::uint64_t unk08C8; // 08C8 + std::uint64_t unk08D0; // 08D0 + std::uint64_t unk08D8; // 08D8 + std::uint64_t unk08E0; // 08E0 + std::uint64_t unk08E8; // 08E8 + std::uint64_t unk08F0; // 08F0 + std::uint64_t unk08F8; // 08F8 + std::uint64_t unk0900; // 0900 + std::uint64_t unk0908; // 0908 + std::uint64_t unk0910; // 0910 + std::uint64_t unk0918; // 0918 + std::uint64_t unk0920; // 0920 + std::uint64_t unk0928; // 0928 + std::uint64_t unk0930; // 0930 + std::uint64_t unk0938; // 0938 + std::uint64_t unk0940; // 0940 + std::uint64_t unk0948; // 0948 + std::uint64_t unk0950; // 0950 + std::uint64_t unk0958; // 0958 + std::uint64_t unk0960; // 0960 + std::uint64_t unk0968; // 0968 + std::uint64_t unk0970; // 0970 + std::uint64_t unk0978; // 0978 + std::uint64_t unk0980; // 0980 + std::uint64_t unk0988; // 0988 + std::uint64_t unk0990; // 0990 + std::uint64_t unk0998; // 0998 + std::uint64_t unk09A0; // 09A0 + std::uint64_t unk09A8; // 09A8 + std::uint64_t unk09B0; // 09B0 + std::uint64_t unk09B8; // 09B8 + std::uint64_t unk09C0; // 09C0 + std::uint64_t unk09C8; // 09C8 + std::uint64_t unk09D0; // 09D0 + std::uint64_t unk09D8; // 09D8 + std::uint64_t unk09E0; // 09E0 + std::uint64_t unk09E8; // 09E8 + std::uint64_t unk09F0; // 09F0 + std::uint64_t unk09F8; // 09F8 + std::uint64_t unk0A00; // 0A00 + std::uint64_t unk0A08; // 0A08 + std::uint64_t unk0A10; // 0A10 + std::uint64_t unk0A18; // 0A18 + std::uint64_t unk0A20; // 0A20 + std::uint64_t unk0A28; // 0A28 + std::uint64_t unk0A30; // 0A30 + std::uint64_t unk0A38; // 0A38 + std::uint64_t unk0A40; // 0A40 + std::uint64_t unk0A48; // 0A48 + std::uint64_t unk0A50; // 0A50 + std::uint64_t unk0A58; // 0A58 + std::uint64_t unk0A60; // 0A60 + std::uint64_t unk0A68; // 0A68 + std::uint64_t unk0A70; // 0A70 + std::uint64_t unk0A78; // 0A78 + std::uint64_t unk0A80; // 0A80 + std::uint64_t unk0A88; // 0A88 + std::uint64_t unk0A90; // 0A90 + std::uint64_t unk0A98; // 0A98 + std::uint64_t unk0AA0; // 0AA0 + std::uint64_t unk0AA8; // 0AA8 + std::uint64_t unk0AB0; // 0AB0 + std::uint64_t unk0AB8; // 0AB8 + std::uint64_t unk0AC0; // 0AC0 + std::uint64_t unk0AC8; // 0AC8 + std::uint64_t unk0AD0; // 0AD0 + std::uint64_t unk0AD8; // 0AD8 + std::uint64_t unk0AE0; // 0AE0 + std::uint64_t unk0AE8; // 0AE8 + std::uint64_t unk0AF0; // 0AF0 + std::uint64_t unk0AF8; // 0AF8 + std::uint64_t unk0B00; // 0B00 + std::uint64_t unk0B08; // 0B08 + std::uint64_t unk0B10; // 0B10 + std::uint64_t unk0B18; // 0B18 + std::uint64_t unk0B20; // 0B20 + std::uint64_t unk0B28; // 0B28 + std::uint64_t unk0B30; // 0B30 + std::uint64_t unk0B38; // 0B38 + std::uint64_t unk0B40; // 0B40 + std::uint64_t unk0B48; // 0B48 + std::uint64_t unk0B50; // 0B50 + std::uint64_t unk0B58; // 0B58 + std::uint64_t unk0B60; // 0B60 + std::uint64_t unk0B68; // 0B68 + std::uint64_t unk0B70; // 0B70 + std::uint64_t unk0B78; // 0B78 + std::uint64_t unk0B80; // 0B80 + std::uint64_t unk0B88; // 0B88 + std::uint64_t unk0B90; // 0B90 + std::uint64_t unk0B98; // 0B98 + std::uint64_t unk0BA0; // 0BA0 + std::uint64_t unk0BA8; // 0BA8 + std::uint64_t unk0BB0; // 0BB0 + std::uint64_t unk0BB8; // 0BB8 + std::uint64_t unk0BC0; // 0BC0 + std::uint64_t unk0BC8; // 0BC8 + std::uint64_t unk0BD0; // 0BD0 + std::uint64_t unk0BD8; // 0BD8 + std::uint64_t unk0BE0; // 0BE0 + std::uint64_t unk0BE8; // 0BE8 + std::uint64_t unk0BF0; // 0BF0 + std::uint64_t unk0BF8; // 0BF8 + std::uint64_t unk0C00; // 0C00 + std::uint64_t unk0C08; // 0C08 + std::uint64_t unk0C10; // 0C10 + std::uint64_t unk0C18; // 0C18 + std::uint64_t unk0C20; // 0C20 + std::uint64_t unk0C28; // 0C28 + std::uint64_t unk0C30; // 0C30 + std::uint64_t unk0C38; // 0C38 + std::uint64_t unk0C40; // 0C40 + std::uint64_t unk0C48; // 0C48 + std::uint64_t unk0C50; // 0C50 + std::uint64_t unk0C58; // 0C58 + std::uint64_t unk0C60; // 0C60 + std::uint64_t unk0C68; // 0C68 + std::uint64_t unk0C70; // 0C70 + std::uint64_t unk0C78; // 0C78 + std::uint64_t unk0C80; // 0C80 + std::uint64_t unk0C88; // 0C88 + std::uint64_t unk0C90; // 0C90 + std::uint64_t unk0C98; // 0C98 + std::uint64_t unk0CA0; // 0CA0 + std::uint64_t unk0CA8; // 0CA8 + std::uint64_t unk0CB0; // 0CB0 + std::uint64_t unk0CB8; // 0CB8 + std::uint64_t unk0CC0; // 0CC0 + std::uint64_t unk0CC8; // 0CC8 + std::uint64_t unk0CD0; // 0CD0 + std::uint64_t unk0CD8; // 0CD8 + std::uint64_t unk0CE0; // 0CE0 + std::uint64_t unk0CE8; // 0CE8 + std::uint64_t unk0CF0; // 0CF0 + std::uint64_t unk0CF8; // 0CF8 + std::uint64_t unk0D00; // 0D00 + std::uint64_t unk0D08; // 0D08 + std::uint64_t unk0D10; // 0D10 + std::uint64_t unk0D18; // 0D18 + std::uint64_t unk0D20; // 0D20 + std::uint64_t unk0D28; // 0D28 + std::uint64_t unk0D30; // 0D30 + std::uint64_t unk0D38; // 0D38 + std::uint64_t unk0D40; // 0D40 + std::uint64_t unk0D48; // 0D48 + std::uint64_t unk0D50; // 0D50 + std::uint64_t unk0D58; // 0D58 + std::uint64_t unk0D60; // 0D60 + std::uint64_t unk0D68; // 0D68 + std::uint64_t unk0D70; // 0D70 + std::uint64_t unk0D78; // 0D78 + std::uint64_t unk0D80; // 0D80 + std::uint64_t unk0D88; // 0D88 + std::uint64_t unk0D90; // 0D90 + std::uint64_t unk0D98; // 0D98 + std::uint64_t unk0DA0; // 0DA0 + std::uint64_t unk0DA8; // 0DA8 + std::uint64_t unk0DB0; // 0DB0 + std::uint64_t unk0DB8; // 0DB8 + std::uint64_t unk0DC0; // 0DC0 + std::uint64_t unk0DC8; // 0DC8 + std::uint64_t unk0DD0; // 0DD0 + std::uint64_t unk0DD8; // 0DD8 + std::uint64_t unk0DE0; // 0DE0 + std::uint64_t unk0DE8; // 0DE8 + std::uint64_t unk0DF0; // 0DF0 + std::uint64_t unk0DF8; // 0DF8 + std::uint64_t unk0E00; // 0E00 + std::uint64_t unk0E08; // 0E08 + std::uint64_t unk0E10; // 0E10 + std::uint64_t unk0E18; // 0E18 + std::uint64_t unk0E20; // 0E20 + std::uint64_t unk0E28; // 0E28 + std::uint64_t unk0E30; // 0E30 + std::uint64_t unk0E38; // 0E38 + std::uint64_t unk0E40; // 0E40 + std::uint64_t unk0E48; // 0E48 + std::uint64_t unk0E50; // 0E50 + std::uint64_t unk0E58; // 0E58 + std::uint64_t unk0E60; // 0E60 + std::uint64_t unk0E68; // 0E68 + std::uint64_t unk0E70; // 0E70 + std::uint64_t unk0E78; // 0E78 + std::uint64_t unk0E80; // 0E80 + std::uint64_t unk0E88; // 0E88 + std::uint64_t unk0E90; // 0E90 + std::uint64_t unk0E98; // 0E98 + std::uint64_t unk0EA0; // 0EA0 + std::uint64_t unk0EA8; // 0EA8 + std::uint64_t unk0EB0; // 0EB0 + std::uint64_t unk0EB8; // 0EB8 + std::uint64_t unk0EC0; // 0EC0 + std::uint64_t unk0EC8; // 0EC8 + std::uint64_t unk0ED0; // 0ED0 + std::uint64_t unk0ED8; // 0ED8 + std::uint64_t unk0EE0; // 0EE0 + std::uint64_t unk0EE8; // 0EE8 + std::uint64_t unk0EF0; // 0EF0 + std::uint64_t unk0EF8; // 0EF8 + std::uint64_t unk0F00; // 0F00 + std::uint64_t unk0F08; // 0F08 + std::uint64_t unk0F10; // 0F10 + std::uint64_t unk0F18; // 0F18 + std::uint64_t unk0F20; // 0F20 + std::uint64_t unk0F28; // 0F28 + std::uint64_t unk0F30; // 0F30 + std::uint64_t unk0F38; // 0F38 + std::uint64_t unk0F40; // 0F40 + std::uint64_t unk0F48; // 0F48 + std::uint64_t unk0F50; // 0F50 + std::uint64_t unk0F58; // 0F58 + std::uint64_t unk0F60; // 0F60 + std::uint64_t unk0F68; // 0F68 + std::uint64_t unk0F70; // 0F70 + std::uint64_t unk0F78; // 0F78 + std::uint64_t unk0F80; // 0F80 + std::uint64_t unk0F88; // 0F88 + std::uint64_t unk0F90; // 0F90 + std::uint64_t unk0F98; // 0F98 + std::uint64_t unk0FA0; // 0FA0 + std::uint64_t unk0FA8; // 0FA8 + std::uint64_t unk0FB0; // 0FB0 + std::uint64_t unk0FB8; // 0FB8 + std::uint64_t unk0FC0; // 0FC0 + std::uint64_t unk0FC8; // 0FC8 + std::uint64_t unk0FD0; // 0FD0 + std::uint64_t unk0FD8; // 0FD8 + std::uint64_t unk0FE0; // 0FE0 + std::uint64_t unk0FE8; // 0FE8 + std::uint64_t unk0FF0; // 0FF0 + std::uint64_t unk0FF8; // 0FF8 + std::uint64_t unk1000; // 1000 + std::uint64_t unk1008; // 1008 + std::uint64_t unk1010; // 1010 + std::uint64_t unk1018; // 1018 + std::uint64_t unk1020; // 1020 + std::uint64_t unk1028; // 1028 + std::uint64_t unk1030; // 1030 + std::uint64_t unk1038; // 1038 + std::uint64_t unk1040; // 1040 + std::uint64_t unk1048; // 1048 + std::uint64_t unk1050; // 1050 + std::uint64_t unk1058; // 1058 + std::uint64_t unk1060; // 1060 + std::uint64_t unk1068; // 1068 + std::uint64_t unk1070; // 1070 + std::uint64_t unk1078; // 1078 + std::uint64_t unk1080; // 1080 + std::uint64_t unk1088; // 1088 + std::uint64_t unk1090; // 1090 + std::uint64_t unk1098; // 1098 + std::uint64_t unk10A0; // 10A0 + std::uint64_t unk10A8; // 10A8 + std::uint64_t unk10B0; // 10B0 + std::uint64_t unk10B8; // 10B8 + std::uint64_t unk10C0; // 10C0 + std::uint64_t unk10C8; // 10C8 + std::uint64_t unk10D0; // 10D0 + std::uint64_t unk10D8; // 10D8 + std::uint64_t unk10E0; // 10E0 + std::uint64_t unk10E8; // 10E8 + float playerGravity; // 10F0 + std::uint32_t unk10F4; // 10F4 + std::uint64_t unk10F8; // 10F8 + }; + static_assert(sizeof(PlayerCharacter) == 0x1100); +} diff --git a/CommonLibSF/include/RE/T/TESObjectREFR.h b/CommonLibSF/include/RE/T/TESObjectREFR.h index 666dcd34..1e2c8388 100644 --- a/CommonLibSF/include/RE/T/TESObjectREFR.h +++ b/CommonLibSF/include/RE/T/TESObjectREFR.h @@ -17,6 +17,7 @@ namespace RE class BSAnimationGraphEvent; class BSTransformDeltaEvent; class TESBoundObject; + class TESModel; class TESObjectCELL; class TESRace; class TESTopicInfo; @@ -94,7 +95,7 @@ namespace RE virtual void Unk_75(); // 075 virtual void Unk_76(); // 076 virtual void Unk_77(); // 077 - virtual void Unk_78(); // 078 + virtual bool IsInZeroGravity(); // 078 virtual void Unk_79(); // 079 virtual BGSScene* GetCurrentScene() const; // 07A virtual void Unk_7B(); // 07B @@ -149,7 +150,7 @@ namespace RE virtual void Unk_AC(); // 0AC - Get3D(NiPointer&)? virtual void Unk_AD(); // 0AD virtual void Unk_AE(); // 0AE - virtual void Unk_AF(); // 0AF + virtual TESModel* GetTESModel() const; // 0AF virtual TESRace* GetVisualsRace() const; // 0B0 virtual void Unk_B1(); // 0B1 virtual void Unk_B2(); // 0B2 @@ -242,7 +243,7 @@ namespace RE virtual void Unk_109(); // 109 virtual void Unk_10A(); // 10A virtual void Unk_10B(); // 10B - virtual void Unk_10C(); // 10C + virtual void SetParentCell(TESObjectCELL* a_cell); // 10C virtual bool IsDead(bool a_notEssential) const; // 10D virtual bool ProcessInWater(std::uint32_t a_bodyID, float a_waterHeight, float a_deltaTime); // 10E virtual void Unk_10F(); // 10F