diff --git a/CommonLibSF/include/RE/B/BGSMovableStatic.h b/CommonLibSF/include/RE/B/BGSMovableStatic.h new file mode 100644 index 00000000..4aa17994 --- /dev/null +++ b/CommonLibSF/include/RE/B/BGSMovableStatic.h @@ -0,0 +1,35 @@ +#pragma once + +#include "RE/B/BGSDestructibleObjectForm.h" +#include "RE/B/BGSKeywordForm.h" +#include "RE/T/TESMagicTargetForm.h" +#include "RE/T/TESObjectSTAT.h" + +namespace RE +{ + struct MOVABLE_STATIC_DATA + { + public: + // members + std::uint8_t flags; // 0 + }; + static_assert(sizeof(MOVABLE_STATIC_DATA) == 0x1); + + class BGSMovableStatic : + public TESObjectSTAT, // 000 + public BGSDestructibleObjectForm, // 170 + public TESMagicTargetForm, // 180 + public BGSKeywordForm // 188 + { + public: + SF_RTTI_VTABLE(BGSMovableStatic); + SF_FORMTYPE(MSTT); + + ~BGSMovableStatic() override; // 00 + + // members + MOVABLE_STATIC_DATA data; // 1B8 + float unk1BC; // 1BC + }; + static_assert(sizeof(BGSMovableStatic) == 0x1C0); +} diff --git a/CommonLibSF/include/RE/B/BGSSnapTemplateNode.h b/CommonLibSF/include/RE/B/BGSSnapTemplateNode.h new file mode 100644 index 00000000..39099b1b --- /dev/null +++ b/CommonLibSF/include/RE/B/BGSSnapTemplateNode.h @@ -0,0 +1,36 @@ +#pragma once + +#include "RE/B/BGSKeywordForm.h" +#include "RE/B/BGSModelMaterialSwap.h" +#include "RE/N/NiPoint3.h" +#include "RE/T/TESBoundObject.h" + +namespace RE +{ + class BGSArtObject; + + class BGSSnapTemplateNode : + public TESBoundObject, // 000 + public BGSModelMaterialSwap, // 0E0 + public BGSKeywordForm // 108 + { + public: + SF_RTTI_VTABLE(BGSSnapTemplateNode); + SF_FORMTYPE(STND); + + ~BGSSnapTemplateNode() override; // 00 + + // members + NiPoint3 snapAngles; // 138 + std::uint32_t unk144; // 144 + std::uint32_t unk148; // 148 + std::uint32_t unk14C; // 14C + 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 + BGSArtObject* artObject; // 178 + }; + static_assert(sizeof(BGSSnapTemplateNode) == 0x180); +} diff --git a/CommonLibSF/include/RE/B/BGSSoundEcho.h b/CommonLibSF/include/RE/B/BGSSoundEcho.h new file mode 100644 index 00000000..9bf92895 --- /dev/null +++ b/CommonLibSF/include/RE/B/BGSSoundEcho.h @@ -0,0 +1,22 @@ +#pragma once + +#include "RE/B/BSTArray.h" +#include "RE/T/TESBoundAnimObject.h" +#include "RE/W/WWiseSoundHook.h" + +namespace RE +{ + class BGSSoundEcho : public TESBoundAnimObject + { + public: + SF_RTTI_VTABLE(BGSSoundEcho); + SF_FORMTYPE(SECH); + + ~BGSSoundEcho() override; // 00 + + // members + BSTArray unk0E0; // 0E0 + BGSAudio::WwiseSoundHook unk128; // 0F0 + }; + static_assert(sizeof(BGSSoundEcho) == 0x120); +} diff --git a/CommonLibSF/include/RE/B/BGSTalkingActivator.h b/CommonLibSF/include/RE/B/BGSTalkingActivator.h new file mode 100644 index 00000000..cc6c9c83 --- /dev/null +++ b/CommonLibSF/include/RE/B/BGSTalkingActivator.h @@ -0,0 +1,26 @@ +#pragma once + +#include "RE/T/TESObjectACTI.h" + +namespace RE +{ + class TESObjectREFR; + class BGSVoiceType; + + class BGSTalkingActivator : public TESObjectACTI + { + public: + SF_RTTI_VTABLE(BGSTalkingActivator); + SF_FORMTYPE(TACT); + + ~BGSTalkingActivator() override; // 00 + + // add + virtual bool GetReflectedByAutoWater(); // 82 - { return false; } + + // members + TESObjectREFR* tempRef; // 220 + BGSVoiceType* voiceType; // 228 + }; + static_assert(sizeof(BGSTalkingActivator) == 0x230); +} diff --git a/CommonLibSF/include/RE/B/BGSTerminal.h b/CommonLibSF/include/RE/B/BGSTerminal.h index 0359741a..225bcb38 100644 --- a/CommonLibSF/include/RE/B/BGSTerminal.h +++ b/CommonLibSF/include/RE/B/BGSTerminal.h @@ -1,10 +1,22 @@ #pragma once +#include "RE/T/TESFurniture.h" + namespace RE { - class BGSTerminal + class BGSTerminalMenu; + + class BGSTerminal : public TESFurniture { public: SF_RTTI_VTABLE(BGSTerminal); + SF_FORMTYPE(TERM); + + ~BGSTerminal() override; // 00 + + // members + BGSTerminalMenu* menu; // 280 + std::uint8_t unk288; // 288 }; + static_assert(sizeof(BGSTerminal) == 0x290); } diff --git a/CommonLibSF/include/RE/T/TESFlora.h b/CommonLibSF/include/RE/T/TESFlora.h new file mode 100644 index 00000000..c833d2c4 --- /dev/null +++ b/CommonLibSF/include/RE/T/TESFlora.h @@ -0,0 +1,34 @@ +#pragma once + +#include "RE/B/BGSAttachParentArray.h" +#include "RE/T/TESObjectACTI.h" +#include "RE/T/TESProduceForm.h" + +namespace RE +{ + class BGSExplosion; + class TESGlobal; + + class TESFlora : + public TESObjectACTI, // 000 + public TESProduceForm // 220 + { + public: + SF_RTTI_VTABLE(TESFlora); + SF_FORMTYPE(FLOR); + + ~TESFlora() override; // 00 + + // members + BGSAttachParentArray attachParents; // 268 + BGSAudio::WwiseSoundHook sound; // 288 + BGSKeyword* actionKeyword; // 2B8 + TESGlobal* maxGlobal; // 2C0 + TESGlobal* minGlobal; // 2C8 + BGSExplosion* explosion; // 2D0 + float unk2D8; // 2D8 + float unk2DC; // 2DC + std::uint32_t unk2E0; // 2E0 + }; + static_assert(sizeof(TESFlora) == 0x2E8); +} diff --git a/CommonLibSF/include/RE/T/TESFurniture.h b/CommonLibSF/include/RE/T/TESFurniture.h new file mode 100644 index 00000000..4d3a0aba --- /dev/null +++ b/CommonLibSF/include/RE/T/TESFurniture.h @@ -0,0 +1,77 @@ +#pragma once + +#include "RE/B/BGSAttachParentArray.h" +#include "RE/B/BSTArray.h" +#include "RE/T/TESObjectACTI.h" + +namespace RE +{ + struct WorkbenchData + { + public: + enum class Type + { + kNone = 0, + kCreateObject = 1, + kWeapons = 2, + kEnchanting = 3, + kEnchantingExperiment = 4, + kAlchemy = 5, + kAlchemyExperiment = 6, + kArmor = 7, + kPowerArmor = 8, + kRobotMod = 9, + kUnknown10 = 10, + kResearch = 11 + }; + + // members + stl::enumeration type; // 0 + }; + static_assert(sizeof(WorkbenchData) == 0x1); + + class BSFurnitureMarker + { + public: + // members + NiPoint3 position; // 00 + float rotationZ; // 0C + BGSKeyword* actorMustHaveKeyword; // 10 + float heading; // 18 + std::uint32_t allowedAnimations; // 1C + std::uint64_t unk20; // 20 + }; + static_assert(sizeof(BSFurnitureMarker) == 0x28); + + class TESFurniture : public TESObjectACTI + { + public: + SF_RTTI_VTABLE(TESFurniture); + SF_FORMTYPE(FURN); + + struct EntryPointData + { + public: + // members + std::uint32_t entryPoint; // 0 + std::uint32_t flags; // 4 + }; + static_assert(sizeof(EntryPointData) == 0x8); + + ~TESFurniture() override; // 00 + + // add + virtual bool AllowZeroGravityUse() const; // 82 + + // members + TESFurniture* furnitureTemplate; // 220 + BSTArray entryPointDataArray; // 228 + BGSAttachParentArray attachParents; // 248 + WorkbenchData workBenchData; // 258 + std::uint32_t furnFlags; // 25C + TESForm* associatedForm; // 260 + BSTArray markersArray; // 268 + std::uint32_t unk278; // 278 + }; + static_assert(sizeof(TESFurniture) == 0x280); +} diff --git a/CommonLibSF/include/RE/T/TESProduceForm.h b/CommonLibSF/include/RE/T/TESProduceForm.h new file mode 100644 index 00000000..2fa27a68 --- /dev/null +++ b/CommonLibSF/include/RE/T/TESProduceForm.h @@ -0,0 +1,41 @@ +#pragma once + +#include "RE/B/BaseFormComponent.h" +#include "RE/W/WwiseSoundHook.h" + +namespace RE +{ + class TESBoundObject; + + struct SEASON + { + enum : std::uint32_t + { + kNone = static_cast(-1), + kSpring = 0, + kSummer, + kFall, + kWinter, + + kTotal, + }; + }; + + class TESProduceForm : public BaseFormComponent + { + public: + SF_RTTI(TESProduceForm); + + ~TESProduceForm() override; // 00 + + // override (BaseFormComponent) + const BSFixedString& GetFormComponentType() const override; // 01 - { return "TESProduce_Component"; } + void InitializeDataComponent() override; // 02 + + // members + BGSAudio::WwiseSoundHook harvestSound; // 08 + TESBoundObject* produceItem; // 38 + std::int8_t produceChance[SEASON::kTotal]; // 40 + }; + static_assert(sizeof(TESProduceForm) == 0x48); +} diff --git a/CommonLibSF/include/RE/T/TESSound.h b/CommonLibSF/include/RE/T/TESSound.h new file mode 100644 index 00000000..469d9c25 --- /dev/null +++ b/CommonLibSF/include/RE/T/TESSound.h @@ -0,0 +1,24 @@ +#pragma once + +#include "RE/B/BGSKeywordForm.h" +#include "RE/T/TESBoundAnimObject.h" +#include "RE/W/WWiseSoundHook.h" + +namespace RE +{ + class TESSound : + public TESBoundAnimObject, // 00 + public BGSKeywordForm // E8 + { + public: + SF_RTTI_VTABLE(TESSound); + SF_FORMTYPE(SOUN); + + ~TESSound() override; // 00 + + // members + BGSAudio::WwiseSoundHook sound; // 110 - SMLS + std::uint64_t unk140; // 140 + }; + static_assert(sizeof(TESSound) == 0x148); +}