CommonLibSSE NG
Loading...
Searching...
No Matches
TESFile.h
Go to the documentation of this file.
1#pragma once
2
3#include "RE/B/BSString.h"
4#include "RE/B/BSTList.h"
5#include "RE/F/FORM.h"
6#include "RE/F/FormTypes.h"
7#include "RE/N/NiFile.h"
8
9namespace RE
10{
11 class BSFile;
12 struct TESBitArrayFile;
13
14 class TESFile
15 {
16 public:
17 enum class Error
18 {
19 kNone = 0,
20 kNotFound = 1,
21 kNoFile = 2,
22 kNoForm = 3,
23 kNoChunk = 4,
24 kNoID = 5,
25 kBadFile = 6,
26 kBadID = 7,
27 kFormOpen = 8,
28 kFileOpen = 9,
29 kWriteFailure = 10,
30 kInvalidFile = 11,
31 kFileInUse = 12,
33 };
34
35 enum class RecordFlag
36 {
37 kNone = 0,
38 kMaster = 1 << 0,
39 kAltered = 1 << 1,
40 kChecked = 1 << 2,
41 kActive = 1 << 3,
42 kOptimizedFile = 1 << 4,
43 kTempIDOwner = 1 << 5,
44 kDelocalized = 1 << 7,
45 kPrecalcDataOnly = 1 << 8,
46 kSmallFile = 1 << 9
47 };
48
49 bool CloseTES(bool a_force);
50 TESFile* Duplicate(std::uint32_t a_cacheSize = 0x4000);
51 [[nodiscard]] std::uint32_t GetCombinedIndex() const noexcept { return static_cast<std::uint32_t>(compileIndex + smallFileCompileIndex); }
52 [[nodiscard]] std::uint8_t GetCompileIndex() const noexcept { return compileIndex; }
53 std::uint32_t GetCurrentSubRecordType();
54 [[nodiscard]] constexpr std::uint32_t GetCurrentSubRecordSize() const noexcept { return actualChunkSize; }
55 [[nodiscard]] constexpr std::uint32_t GetCurrentChunkID() const noexcept { return currentchunkID; }
56 [[nodiscard]] std::string_view GetFilename() const noexcept { return { fileName }; }
58 [[nodiscard]] std::uint16_t GetSmallFileCompileIndex() const noexcept { return smallFileCompileIndex; }
59 [[nodiscard]] constexpr std::uint32_t GetPartialIndex() const noexcept { return !IsLight() ? compileIndex : (0xFE000 | smallFileCompileIndex); };
60 [[nodiscard]] bool IsFormInMod(FormID a_formID) const;
61 [[nodiscard]] constexpr bool IsLight() const noexcept { return recordFlags.all(RecordFlag::kSmallFile); };
62 [[nodiscard]] constexpr bool IsLocalized() const noexcept { return recordFlags.all(RecordFlag::kDelocalized); }
63 bool OpenTES(NiFile::OpenMode a_accessMode, bool a_lock);
64 bool ReadData(void* a_buf, std::uint32_t a_size);
65 bool Seek(std::uint32_t a_offset);
66 bool SeekNextForm(bool a_skipIgnored);
68
69 // members
71 std::uint32_t pad004; // 004
73 void* threadSafeFileMap; // 010 - NiTPointerMap<std::uint32_t, TESFile*>* - size == 0x20
74 std::uint64_t unk018; // 018
75 std::uint64_t unk020; // 020
76 std::uint8_t unk028; // 028
77 std::uint8_t unk029; // 029
78 std::uint16_t pad02A; // 02A
79 std::uint32_t pad02C; // 02C
81 BSFile* file; // 038
82 TESBitArrayFile* formUserDataBitArray; // 040
83 TESBitArrayFile* formVersionBitArray; // 048
84 TESBitArrayFile* formIDBitArray; // 050
85 char fileName[MAX_PATH]; // 058
86 char path[MAX_PATH]; // 15C
87 char* buffer; // 260
88 std::uint32_t bufferAllocSize; // 268
89 std::uint32_t firstCellOffset; // 26C
90 std::uint32_t currCellOffset; // 270
91 std::uint32_t unk274; // 274
93 std::uint32_t currRefOffset; // 280
95 std::uint32_t currentchunkID; // 29C
96 std::uint32_t actualChunkSize; // 2A0
97 std::uint32_t filesize; // 2A4
98 std::uint32_t fileOffset; // 2A8
99 std::uint32_t formoffset; // 2AC
100 std::uint32_t chunkoffset; // 2B0
102 std::uint32_t saveFormOffset; // 2CC
103 std::uint64_t saveChunkOffset; // 2D0
104 std::uint64_t unk2D8; // 2D8
105 std::uint64_t unk2E0; // 2E0
106 std::uint8_t unk2E8; // 2E8
107 bool isBigEndian; // 2E9
108 std::uint8_t unk2EA; // 2EA
109 std::uint8_t pad2EB; // 2EB
111 float unk42C; // 42C
112 std::uint32_t unk430; // 430
113 std::uint32_t flags; // 434
115 std::uint32_t pad43C; // 43C
118 std::uint32_t masterCount; // 460
119 std::uint32_t pad464; // 464
122 std::uint8_t compileIndex; // 478
123 std::uint8_t pad479; // 479
124 std::uint16_t smallFileCompileIndex; // 47A
125 std::uint32_t pad47C; // 47C
129 std::uint32_t decompressedFormBufferSize; // 4A8
130 std::uint32_t pad4AC; // 4AC
133 std::uint32_t pad4BC; // 4BC
134 void* unk4C0; // 4C0
135 };
136 static_assert(sizeof(TESFile) == 0x4C8);
137}
#define MAX_PATH
Definition WinAPI.h:574
Definition BSFile.h:8
Definition BSTList.h:10
OpenMode
Definition NiFile.h:13
Definition TESFile.h:15
bool SeekNextForm(bool a_skipIgnored)
std::uint64_t unk020
Definition TESFile.h:75
constexpr std::uint32_t GetCurrentChunkID() const noexcept
Definition TESFile.h:55
std::uint32_t GetCombinedIndex() const noexcept
Definition TESFile.h:51
void * reservedDecompressionBuffer
Definition TESFile.h:131
std::uint64_t unk2D8
Definition TESFile.h:104
std::uint8_t unk028
Definition TESFile.h:76
TESBitArrayFile * formIDBitArray
Definition TESFile.h:84
std::uint32_t currentchunkID
Definition TESFile.h:95
RecordFlag
Definition TESFile.h:36
std::uint32_t pad02C
Definition TESFile.h:79
bool SeekNextSubrecord()
constexpr bool IsLight() const noexcept
Definition TESFile.h:61
stl::enumeration< Error, std::uint32_t > lastError
Definition TESFile.h:70
void * unk4C0
Definition TESFile.h:134
std::uint32_t pad004
Definition TESFile.h:71
TESBitArrayFile * formUserDataBitArray
Definition TESFile.h:82
std::uint32_t unk430
Definition TESFile.h:112
constexpr bool IsLocalized() const noexcept
Definition TESFile.h:62
BSFile * file
Definition TESFile.h:81
BSString summary
Definition TESFile.h:127
BSFile * lockedFile
Definition TESFile.h:80
FORM saveform
Definition TESFile.h:101
FormType GetFormType()
std::uint32_t flags
Definition TESFile.h:113
stl::enumeration< RecordFlag, std::uint32_t > recordFlags
Definition TESFile.h:114
bool ReadData(void *a_buf, std::uint32_t a_size)
std::uint32_t fileOffset
Definition TESFile.h:98
TESFile * Duplicate(std::uint32_t a_cacheSize=0x4000)
std::string_view GetFilename() const noexcept
Definition TESFile.h:56
std::uint32_t decompressedFormBufferSize
Definition TESFile.h:129
std::uint32_t pad464
Definition TESFile.h:119
BSSimpleList< const char * > masters
Definition TESFile.h:116
bool isBigEndian
Definition TESFile.h:107
FORM currentform
Definition TESFile.h:94
std::uint64_t unk018
Definition TESFile.h:74
constexpr std::uint32_t GetPartialIndex() const noexcept
Definition TESFile.h:59
std::uint64_t saveChunkOffset
Definition TESFile.h:103
std::uint32_t formoffset
Definition TESFile.h:99
WinAPI::FILETIME deletedFormTime
Definition TESFile.h:121
std::uint32_t pad4BC
Definition TESFile.h:133
std::uint16_t pad02A
Definition TESFile.h:78
Error
Definition TESFile.h:18
bool CloseTES(bool a_force)
std::uint32_t currRefOffset
Definition TESFile.h:93
std::uint32_t firstCellOffset
Definition TESFile.h:89
constexpr std::uint32_t GetCurrentSubRecordSize() const noexcept
Definition TESFile.h:54
TESFile * threadSafeParent
Definition TESFile.h:72
TESObjectCELL * currCell
Definition TESFile.h:92
std::uint8_t unk029
Definition TESFile.h:77
std::uint32_t pad4AC
Definition TESFile.h:130
bool IsFormInMod(FormID a_formID) const
std::uint32_t saveFormOffset
Definition TESFile.h:102
char * decompressedFormBuffer
Definition TESFile.h:128
std::uint8_t pad2EB
Definition TESFile.h:109
std::uint8_t GetCompileIndex() const noexcept
Definition TESFile.h:52
std::uint32_t bufferAllocSize
Definition TESFile.h:88
std::uint32_t pad43C
Definition TESFile.h:115
BSString createdBy
Definition TESFile.h:126
char * buffer
Definition TESFile.h:87
void * threadSafeFileMap
Definition TESFile.h:73
std::uint32_t reservedDecompressionBufferSize
Definition TESFile.h:132
std::uint8_t compileIndex
Definition TESFile.h:122
std::uint32_t masterCount
Definition TESFile.h:118
std::uint32_t actualChunkSize
Definition TESFile.h:96
std::uint16_t GetSmallFileCompileIndex() const noexcept
Definition TESFile.h:58
std::uint32_t pad47C
Definition TESFile.h:125
std::uint64_t unk2E0
Definition TESFile.h:105
std::uint8_t pad479
Definition TESFile.h:123
std::uint32_t GetCurrentSubRecordType()
std::uint32_t currCellOffset
Definition TESFile.h:90
char fileName[MAX_PATH]
Definition TESFile.h:85
bool OpenTES(NiFile::OpenMode a_accessMode, bool a_lock)
WinAPI::WIN32_FIND_DATAA fileData
Definition TESFile.h:110
TESFile ** masterPtrs
Definition TESFile.h:120
float unk42C
Definition TESFile.h:111
std::uint16_t smallFileCompileIndex
Definition TESFile.h:124
char path[MAX_PATH]
Definition TESFile.h:86
BSSimpleList< std::uint64_t * > mastersData
Definition TESFile.h:117
TESBitArrayFile * formVersionBitArray
Definition TESFile.h:83
std::uint8_t unk2E8
Definition TESFile.h:106
std::uint32_t unk274
Definition TESFile.h:91
std::uint8_t unk2EA
Definition TESFile.h:108
bool Seek(std::uint32_t a_offset)
std::uint32_t filesize
Definition TESFile.h:97
std::uint32_t chunkoffset
Definition TESFile.h:100
Definition TESObjectCELL.h:116
Definition PCH.h:223
constexpr bool all(Args... a_args) const noexcept
Definition PCH.h:296
Definition AbsorbEffect.h:6
FormType
Definition FormTypes.h:139
std::uint32_t FormID
Definition BSCoreTypes.h:5
Definition FORM.h:6
Definition WinAPI.h:55
Definition WinAPI.h:87