F4MP/tiltedcode/Code/client/Games/Skyrim/Forms/TESForm.h
Jous99 37b16f1547 code upload
codigo original de f4mp y tilted para referencias
2026-01-06 18:45:00 +01:00

127 lines
3.4 KiB
C

#pragma once
#include <Components/BaseFormComponent.h>
#include <Misc/BSFixedString.h>
enum class FormType : uint8_t
{
Armor = 26,
Book = 27,
Container = 28,
Door = 29,
Ingredient = 30,
Weapon = 41,
Ammo = 42,
Npc = 43,
LeveledCharacter = 44,
Alchemy = 46,
LeveledItem = 53,
Character = 62,
QuestItem = 77,
Count = 0x87
};
struct BGSSaveFormBuffer;
struct BGSLoadFormBuffer;
struct TESForm : BaseFormComponent
{
struct ChangeFlags
{
uint32_t flags{};
uint64_t unk4{};
uint32_t unkC{};
};
enum FormFlags
{
DISABLED = 1 << 0xB,
IGNORE_FRIENDLY_HITS = 1 << 0x14,
};
static TESForm* GetById(uint32_t aId);
virtual void sub_4();
virtual void sub_5();
virtual void sub_6();
virtual void sub_7();
virtual void sub_8();
virtual void sub_9();
virtual bool MarkChanged(uint32_t aChangeFlag);
virtual bool UnsetChanged(uint32_t aChangeFlag);
virtual void sub_C();
virtual void sub_D();
virtual void Save(BGSSaveFormBuffer* apBuffer) const noexcept;
virtual void Load(BGSLoadFormBuffer* apBuffer);
virtual void sub_10();
virtual void sub_11();
virtual void sub_12();
virtual void InitializeComponents(); // Called after Load
virtual void sub_14();
virtual FormType GetFormType();
virtual void sub_16();
virtual void sub_17();
virtual void sub_18();
virtual void sub_19();
virtual void sub_1A();
virtual void sub_1B();
virtual void sub_1C();
virtual void sub_1D();
virtual void sub_1E();
virtual void sub_1F();
virtual void sub_20();
virtual void sub_21();
virtual void sub_22();
virtual void sub_23();
virtual void sub_24();
virtual void sub_25();
virtual void sub_26();
virtual void sub_27();
virtual void sub_28();
virtual void sub_29();
virtual void sub_2A();
virtual void sub_2B();
virtual void sub_2C();
virtual void sub_2D();
// Actual function name is `GetTextForParsedSubTag`; passing an empty tag gets the full name of this form
virtual const char* GetName(const BSFixedString& acTag = {}) const noexcept;
virtual void CopyFrom(TESForm* apForm);
virtual void sub_30();
virtual void sub_31();
virtual const char* GetFormEditorID();
virtual void sub_33();
virtual void sub_34();
virtual void sub_35();
virtual void sub_36();
virtual void ActivateReference();
virtual void sub_38();
virtual void unk_39();
virtual void unk_3A();
// void CopyFromEx(TESForm* rhs);
void Save_Reversed(uint32_t aChangeFlags, Buffer::Writer& aWriter);
void SetSkipSaveFlag(bool aSet) noexcept;
uint32_t GetChangeFlags() const noexcept;
bool GetIgnoreFriendlyHit() const noexcept { return (flags & IGNORE_FRIENDLY_HITS) != 0; }
void SetIgnoreFriendlyHit(bool aSet) noexcept
{
if (aSet)
flags |= IGNORE_FRIENDLY_HITS;
else
flags &= ~IGNORE_FRIENDLY_HITS;
}
bool IsDisabled() const noexcept { return (flags & DISABLED) != 0; }
bool IsTemporary() const noexcept { return formID >= 0xFF000000; }
bool IsConsumable() const noexcept { return formType == FormType::Ingredient || formType == FormType::Alchemy; }
uintptr_t unk4;
uint32_t flags;
uint32_t formID;
uint16_t unk10;
FormType formType;
uint8_t padForm;
};
static_assert(sizeof(TESForm) == 0x20);