CommonLibSSE NG
TESObjectLAND.h
Go to the documentation of this file.
1 #pragma once
2 
3 #include "RE/B/BSTriShape.h"
4 #include "RE/F/FormTypes.h"
5 #include "RE/H/hkpMoppCode.h"
6 #include "RE/N/NiPoint2.h"
7 #include "RE/N/NiSmartPointer.h"
8 #include "RE/T/TESChildCell.h"
9 #include "RE/T/TESForm.h"
10 
11 namespace RE
12 {
13  class NiNode;
14  class QueuedFile;
15 
16  struct OBJ_LAND
17  {
18  public:
19  enum class Flag
20  {
21  kNone = 0,
22  kVertexNormals_HeightMap = 1 << 0,
23  kVertexColors = 1 << 1,
24  kLayers = 1 << 2,
25  kMPCD = 1 << 10
26  };
27 
28  // members
30  };
31  static_assert(sizeof(OBJ_LAND) == 0x4);
32 
33  struct CHAR_NORM
34  {
35  public:
36  // members
37  std::int8_t x; // 0
38  std::int8_t y; // 1
39  std::int8_t z; // 2
40  };
41  static_assert(sizeof(CHAR_NORM) == 0x3);
42 
43  class TESObjectLAND :
44  public TESForm, // 00
45  public TESChildCell // 20
46  {
47  public:
48  inline static constexpr auto RTTI = RTTI_TESObjectLAND;
49  inline static constexpr auto VTABLE = VTABLE_TESObjectLAND;
50  inline static constexpr auto FORMTYPE = FormType::Land;
51 
52  struct RecordFlags
53  {
54  enum RecordFlag : std::uint32_t
55  {
56  kDeleted = 1 << 5,
57  kIgnored = 1 << 12,
58  kCompressed = 1 << 18
59  };
60  };
61 
63  {
64  public:
65  // members
66  NiNode* mesh[4]; // 0000
67  float heights[4][289]; // 0020
68  std::int8_t percents[4][289][6]; // 1230
69  std::int8_t colors[4][289][3]; // 2D48
70  CHAR_NORM normals[4][289]; // 3AD4
75  TESLandTexture* quadTextures[4][6]; // 48B0
77  std::uint64_t unk49B0; // 49B0
78  std::uint64_t unk49B8; // 49B8
79  std::uint64_t unk49C0; // 49C0
80  std::uint64_t unk49C8; // 49C8
81  };
82  static_assert(sizeof(LoadedLandData) == 0x49D0);
83 
84  ~TESObjectLAND() override; // 00
85 
86  // override (TESForm)
87  bool Load(TESFile* a_mod) override; // 06 - { return true; }
88  TESForm* CreateDuplicateForm(bool a_createEditorID, void* a_arg2) override; // 09
89  void SetAltered(bool a_set) override; // 24
90  bool BelongsInGroup(FORM* a_form, bool a_allowParentGroups, bool a_currentOnly) override; // 30
91  void CreateGroupData(FORM* a_form, FORM_GROUP* a_group) override; // 31
92 
93  // override (TESChildCell)
94  [[nodiscard]] TESObjectCELL* GetSaveParentCell() override; // 01 - { return parentCell; }
95 
96  // members
97  OBJ_LAND data; // 28 - DATA
98  std::uint32_t pad2C; // 2C
102  };
103  static_assert(sizeof(TESObjectLAND) == 0x48);
104 }
Definition: NiNode.h:12
Definition: NiPoint2.h:6
Definition: NiSmartPointer.h:9
Definition: TESChildCell.h:6
Definition: TESFile.h:17
Definition: TESForm.h:36
Definition: TESLandTexture.h:17
Definition: TESObjectCELL.h:116
Definition: TESObjectLAND.h:46
NiPointer< QueuedFile > queuedTextures
Definition: TESObjectLAND.h:100
bool BelongsInGroup(FORM *a_form, bool a_allowParentGroups, bool a_currentOnly) override
static constexpr auto RTTI
Definition: TESObjectLAND.h:48
void CreateGroupData(FORM *a_form, FORM_GROUP *a_group) override
TESForm * CreateDuplicateForm(bool a_createEditorID, void *a_arg2) override
void SetAltered(bool a_set) override
LoadedLandData * loadedData
Definition: TESObjectLAND.h:101
~TESObjectLAND() override
OBJ_LAND data
Definition: TESObjectLAND.h:97
static constexpr auto FORMTYPE
Definition: TESObjectLAND.h:50
TESObjectCELL * parentCell
Definition: TESObjectLAND.h:99
TESObjectCELL * GetSaveParentCell() override
static constexpr auto VTABLE
Definition: TESObjectLAND.h:49
std::uint32_t pad2C
Definition: TESObjectLAND.h:98
bool Load(TESFile *a_mod) override
Definition: hkpMoppCode.h:10
Definition: AbsorbEffect.h:6
constexpr REL::VariantID RTTI_TESObjectLAND(513985, 392895, 0x1ee0160)
constexpr std::array< REL::VariantID, 2 > VTABLE_TESObjectLAND
Definition: Offsets_VTABLE.h:607
Definition: TESObjectLAND.h:34
std::int8_t z
Definition: TESObjectLAND.h:39
std::int8_t y
Definition: TESObjectLAND.h:38
std::int8_t x
Definition: TESObjectLAND.h:37
Definition: FORM.h:20
Definition: FORM.h:6
Definition: TESObjectLAND.h:17
stl::enumeration< Flag, std::uint32_t > flags
Definition: TESObjectLAND.h:29
Flag
Definition: TESObjectLAND.h:20
Definition: TESObjectLAND.h:63
TESLandTexture * defQuadTextures[4]
Definition: TESObjectLAND.h:74
NiNode * mesh[4]
Definition: TESObjectLAND.h:66
std::uint64_t unk49C8
Definition: TESObjectLAND.h:80
std::uint64_t unk49B0
Definition: TESObjectLAND.h:77
NiPoint2 heightExtents
Definition: TESObjectLAND.h:73
NiPointer< BSTriShape > geom[4]
Definition: TESObjectLAND.h:71
hkpMoppCode moppCode
Definition: TESObjectLAND.h:76
std::uint64_t unk49B8
Definition: TESObjectLAND.h:78
float heights[4][289]
Definition: TESObjectLAND.h:67
std::uint64_t unk49C0
Definition: TESObjectLAND.h:79
std::int8_t colors[4][289][3]
Definition: TESObjectLAND.h:69
TESLandTexture * quadTextures[4][6]
Definition: TESObjectLAND.h:75
NiPointer< BSTriShape > border
Definition: TESObjectLAND.h:72
CHAR_NORM normals[4][289]
Definition: TESObjectLAND.h:70
std::int8_t percents[4][289][6]
Definition: TESObjectLAND.h:68
Definition: TESObjectLAND.h:53
RecordFlag
Definition: TESObjectLAND.h:55
@ kCompressed
Definition: TESObjectLAND.h:58
@ kIgnored
Definition: TESObjectLAND.h:57
@ kDeleted
Definition: TESObjectLAND.h:56