Removed constructor from FourCC, made free function. Modified codegen to match, and fixed a small formatting issue. Created UnknownHeader for use in a single read approach.
This commit is contained in:
@@ -1,5 +1,5 @@
|
|||||||
#ifndef ESX_READER_H
|
#ifndef ESX_READER_HPP
|
||||||
#define ESX_READER_H
|
#define ESX_READER_HPP
|
||||||
|
|
||||||
#include <memory>
|
#include <memory>
|
||||||
#include <variant>
|
#include <variant>
|
||||||
@@ -62,24 +62,11 @@ enum class RecordType {
|
|||||||
WEAP, WOOP, WRLD, WTHR,
|
WEAP, WOOP, WRLD, WTHR,
|
||||||
};
|
};
|
||||||
|
|
||||||
//
|
|
||||||
// Type aliases
|
|
||||||
//
|
|
||||||
|
|
||||||
using Node = std::variant<GroupNode, RecordNode>;
|
|
||||||
|
|
||||||
//
|
//
|
||||||
// Aggregate types
|
// Aggregate types
|
||||||
//
|
//
|
||||||
|
|
||||||
#pragma warning( push )
|
struct FourCC : utility::Store<uint32_t> { };
|
||||||
#pragma warning( disable : 4514 )
|
|
||||||
struct FourCC : utility::Store<uint32_t> {
|
|
||||||
constexpr FourCC() noexcept = default;
|
|
||||||
explicit constexpr FourCC(const char(&str)[5]) noexcept : Store{ utility::fourcc_lit_to_val(str) } { }
|
|
||||||
};
|
|
||||||
#pragma warning( pop )
|
|
||||||
|
|
||||||
struct FormID : utility::Store<uint32_t> { };
|
struct FormID : utility::Store<uint32_t> { };
|
||||||
struct Timestamp : utility::Store<uint16_t> { };
|
struct Timestamp : utility::Store<uint16_t> { };
|
||||||
struct VCInfo : utility::Store<uint16_t> { };
|
struct VCInfo : utility::Store<uint16_t> { };
|
||||||
@@ -96,6 +83,11 @@ struct RefrFlag {
|
|||||||
friend constexpr auto operator<=>(const RefrFlag &, const RefrFlag &) noexcept = default;
|
friend constexpr auto operator<=>(const RefrFlag &, const RefrFlag &) noexcept = default;
|
||||||
};
|
};
|
||||||
|
|
||||||
|
struct UnknownHeader {
|
||||||
|
FourCC type;
|
||||||
|
std::array<char, 20> reserved;
|
||||||
|
};
|
||||||
|
|
||||||
struct GroupHeader {
|
struct GroupHeader {
|
||||||
struct Coord {
|
struct Coord {
|
||||||
int16_t y, x;
|
int16_t y, x;
|
||||||
@@ -121,7 +113,7 @@ struct GroupHeader {
|
|||||||
ParentDialogue parent_dialogue;
|
ParentDialogue parent_dialogue;
|
||||||
};
|
};
|
||||||
|
|
||||||
RecordType grup;
|
FourCC grup;
|
||||||
uint32_t size;
|
uint32_t size;
|
||||||
GroupLabel label;
|
GroupLabel label;
|
||||||
GroupType type;
|
GroupType type;
|
||||||
@@ -134,7 +126,7 @@ struct RecordHeader {
|
|||||||
struct Flags : utility::Store<uint32_t> { };
|
struct Flags : utility::Store<uint32_t> { };
|
||||||
struct Version : utility::Store<uint16_t> { };
|
struct Version : utility::Store<uint16_t> { };
|
||||||
|
|
||||||
RecordType type;
|
FourCC type;
|
||||||
uint32_t size;
|
uint32_t size;
|
||||||
Flags flags;
|
Flags flags;
|
||||||
FormID formid;
|
FormID formid;
|
||||||
@@ -152,19 +144,20 @@ template <typename T, size_t N>
|
|||||||
concept packed = sizeof(T) == N;
|
concept packed = sizeof(T) == N;
|
||||||
|
|
||||||
template <typename T>
|
template <typename T>
|
||||||
concept is_header = std::is_same_v<T, GroupHeader> || std::is_same_v<T, RecordHeader>;
|
concept header = std::is_same_v<T, GroupHeader> || std::is_same_v<T, RecordHeader> || std::is_same_v<T, UnknownHeader>;
|
||||||
|
|
||||||
template <typename T>
|
template <typename T>
|
||||||
concept packed_header = is_header<T> && packed<T, static_cast<std::size_t>(header_size)>;
|
concept packed_header = header<T> && packed<T, static_cast<std::size_t>(header_size)>;
|
||||||
|
|
||||||
template <typename T>
|
template <typename T>
|
||||||
concept directly_readable_header = packed_header<T> && same_endianness;
|
concept directly_readable_header = packed_header<T> && same_endianness;
|
||||||
|
|
||||||
|
|
||||||
//
|
//
|
||||||
// Classes
|
// Classes
|
||||||
//
|
//
|
||||||
|
|
||||||
|
using Node = std::variant<GroupNode, RecordNode>;
|
||||||
|
|
||||||
class GroupNode {
|
class GroupNode {
|
||||||
private:
|
private:
|
||||||
GroupHeader m_header;
|
GroupHeader m_header;
|
||||||
@@ -188,7 +181,15 @@ private:
|
|||||||
[[nodiscard]] std::optional<std::string_view> flag_to_description(Flag flag) noexcept;
|
[[nodiscard]] std::optional<std::string_view> flag_to_description(Flag flag) noexcept;
|
||||||
[[nodiscard]] std::optional<std::string_view> refr_flag_to_description(RefrFlag refr_flag) noexcept;
|
[[nodiscard]] std::optional<std::string_view> refr_flag_to_description(RefrFlag refr_flag) noexcept;
|
||||||
|
|
||||||
void read_header(std::ifstream &in, directly_readable_header auto &out)
|
|
||||||
|
// Convert a compatible C string to a FourCC (e.g. "LITR")
|
||||||
|
constexpr FourCC fourcc_from_cstr(const char(&a)[5]) noexcept
|
||||||
|
{
|
||||||
|
char temp[4] = { a[0], a[1], a[2], a[3] };
|
||||||
|
return std::bit_cast<FourCC, char[4]>(temp);
|
||||||
|
}
|
||||||
|
|
||||||
|
inline void read_header(std::ifstream &in, directly_readable_header auto &out)
|
||||||
{
|
{
|
||||||
auto char_ptr = reinterpret_cast<char *>(&out);
|
auto char_ptr = reinterpret_cast<char *>(&out);
|
||||||
in.read(char_ptr, header_size);
|
in.read(char_ptr, header_size);
|
||||||
@@ -196,4 +197,4 @@ void read_header(std::ifstream &in, directly_readable_header auto &out)
|
|||||||
|
|
||||||
}
|
}
|
||||||
|
|
||||||
#endif
|
#endif // ESX_READER_HPP
|
||||||
|
|||||||
@@ -16,74 +16,142 @@ static constexpr std::pair<GroupType, std::string_view> group_type_name_map_buil
|
|||||||
};
|
};
|
||||||
|
|
||||||
static constexpr std::pair<RecordType, FourCC> record_type_fourcc_map_builtin[] {
|
static constexpr std::pair<RecordType, FourCC> record_type_fourcc_map_builtin[] {
|
||||||
{RecordType::AACT, FourCC("AACT")}, {RecordType::ACHR, FourCC("ACHR")},
|
{RecordType::AACT, fourcc_from_cstr("AACT")},
|
||||||
{RecordType::ACTI, FourCC("ACTI")}, {RecordType::ADDN, FourCC("ADDN")},
|
{RecordType::ACHR, fourcc_from_cstr("ACHR")},
|
||||||
{RecordType::ALCH, FourCC("ALCH")}, {RecordType::AMMO, FourCC("AMMO")},
|
{RecordType::ACTI, fourcc_from_cstr("ACTI")},
|
||||||
{RecordType::ANIO, FourCC("ANIO")}, {RecordType::APPA, FourCC("APPA")},
|
{RecordType::ADDN, fourcc_from_cstr("ADDN")},
|
||||||
{RecordType::ARMA, FourCC("ARMA")}, {RecordType::ARMO, FourCC("ARMO")},
|
{RecordType::ALCH, fourcc_from_cstr("ALCH")},
|
||||||
{RecordType::ARTO, FourCC("ARTO")}, {RecordType::ASPC, FourCC("ASPC")},
|
{RecordType::AMMO, fourcc_from_cstr("AMMO")},
|
||||||
{RecordType::ASTP, FourCC("ASTP")}, {RecordType::AVIF, FourCC("AVIF")},
|
{RecordType::ANIO, fourcc_from_cstr("ANIO")},
|
||||||
{RecordType::BOOK, FourCC("BOOK")}, {RecordType::BPTD, FourCC("BPTD")},
|
{RecordType::APPA, fourcc_from_cstr("APPA")},
|
||||||
{RecordType::CAMS, FourCC("CAMS")}, {RecordType::CELL, FourCC("CELL")},
|
{RecordType::ARMA, fourcc_from_cstr("ARMA")},
|
||||||
{RecordType::CLAS, FourCC("CLAS")}, {RecordType::CLDC, FourCC("CLDC")},
|
{RecordType::ARMO, fourcc_from_cstr("ARMO")},
|
||||||
{RecordType::CLFM, FourCC("CLFM")}, {RecordType::CLMT, FourCC("CLMT")},
|
{RecordType::ARTO, fourcc_from_cstr("ARTO")},
|
||||||
{RecordType::COBJ, FourCC("COBJ")}, {RecordType::COLL, FourCC("COLL")},
|
{RecordType::ASPC, fourcc_from_cstr("ASPC")},
|
||||||
{RecordType::CONT, FourCC("CONT")}, {RecordType::CPTH, FourCC("CPTH")},
|
{RecordType::ASTP, fourcc_from_cstr("ASTP")},
|
||||||
{RecordType::CSTY, FourCC("CSTY")}, {RecordType::DEBR, FourCC("DEBR")},
|
{RecordType::AVIF, fourcc_from_cstr("AVIF")},
|
||||||
{RecordType::DIAL, FourCC("DIAL")}, {RecordType::DLBR, FourCC("DLBR")},
|
{RecordType::BOOK, fourcc_from_cstr("BOOK")},
|
||||||
{RecordType::DLVW, FourCC("DLVW")}, {RecordType::DOBJ, FourCC("DOBJ")},
|
{RecordType::BPTD, fourcc_from_cstr("BPTD")},
|
||||||
{RecordType::DOOR, FourCC("DOOR")}, {RecordType::DUAL, FourCC("DUAL")},
|
{RecordType::CAMS, fourcc_from_cstr("CAMS")},
|
||||||
{RecordType::ECZN, FourCC("ECZN")}, {RecordType::EFSH, FourCC("EFSH")},
|
{RecordType::CELL, fourcc_from_cstr("CELL")},
|
||||||
{RecordType::ENCH, FourCC("ENCH")}, {RecordType::EQUP, FourCC("EQUP")},
|
{RecordType::CLAS, fourcc_from_cstr("CLAS")},
|
||||||
{RecordType::EXPL, FourCC("EXPL")}, {RecordType::EYES, FourCC("EYES")},
|
{RecordType::CLDC, fourcc_from_cstr("CLDC")},
|
||||||
{RecordType::FACT, FourCC("FACT")}, {RecordType::FLOR, FourCC("FLOR")},
|
{RecordType::CLFM, fourcc_from_cstr("CLFM")},
|
||||||
{RecordType::FLST, FourCC("FLST")}, {RecordType::FSTP, FourCC("FSTP")},
|
{RecordType::CLMT, fourcc_from_cstr("CLMT")},
|
||||||
{RecordType::FSTS, FourCC("FSTS")}, {RecordType::FURN, FourCC("FURN")},
|
{RecordType::COBJ, fourcc_from_cstr("COBJ")},
|
||||||
{RecordType::GLOB, FourCC("GLOB")}, {RecordType::GMST, FourCC("GMST")},
|
{RecordType::COLL, fourcc_from_cstr("COLL")},
|
||||||
{RecordType::GRAS, FourCC("GRAS")}, {RecordType::GRUP, FourCC("GRUP")},
|
{RecordType::CONT, fourcc_from_cstr("CONT")},
|
||||||
{RecordType::HAIR, FourCC("HAIR")}, {RecordType::HAZD, FourCC("HAZD")},
|
{RecordType::CPTH, fourcc_from_cstr("CPTH")},
|
||||||
{RecordType::HDPT, FourCC("HDPT")}, {RecordType::IDLE, FourCC("IDLE")},
|
{RecordType::CSTY, fourcc_from_cstr("CSTY")},
|
||||||
{RecordType::IDLM, FourCC("IDLM")}, {RecordType::IMAD, FourCC("IMAD")},
|
{RecordType::DEBR, fourcc_from_cstr("DEBR")},
|
||||||
{RecordType::IMGS, FourCC("IMGS")}, {RecordType::INFO, FourCC("INFO")},
|
{RecordType::DIAL, fourcc_from_cstr("DIAL")},
|
||||||
{RecordType::INGR, FourCC("INGR")}, {RecordType::IPCT, FourCC("IPCT")},
|
{RecordType::DLBR, fourcc_from_cstr("DLBR")},
|
||||||
{RecordType::IPDS, FourCC("IPDS")}, {RecordType::KEYM, FourCC("KEYM")},
|
{RecordType::DLVW, fourcc_from_cstr("DLVW")},
|
||||||
{RecordType::KYWD, FourCC("KYWD")}, {RecordType::LAND, FourCC("LAND")},
|
{RecordType::DOBJ, fourcc_from_cstr("DOBJ")},
|
||||||
{RecordType::LCRT, FourCC("LCRT")}, {RecordType::LCTN, FourCC("LCTN")},
|
{RecordType::DOOR, fourcc_from_cstr("DOOR")},
|
||||||
{RecordType::LENS, FourCC("LENS")}, {RecordType::LGTM, FourCC("LGTM")},
|
{RecordType::DUAL, fourcc_from_cstr("DUAL")},
|
||||||
{RecordType::LIGH, FourCC("LIGH")}, {RecordType::LSCR, FourCC("LSCR")},
|
{RecordType::ECZN, fourcc_from_cstr("ECZN")},
|
||||||
{RecordType::LTEX, FourCC("LTEX")}, {RecordType::LVLI, FourCC("LVLI")},
|
{RecordType::EFSH, fourcc_from_cstr("EFSH")},
|
||||||
{RecordType::LVLN, FourCC("LVLN")}, {RecordType::LVSP, FourCC("LVSP")},
|
{RecordType::ENCH, fourcc_from_cstr("ENCH")},
|
||||||
{RecordType::MATO, FourCC("MATO")}, {RecordType::MATT, FourCC("MATT")},
|
{RecordType::EQUP, fourcc_from_cstr("EQUP")},
|
||||||
{RecordType::MESG, FourCC("MESG")}, {RecordType::MGEF, FourCC("MGEF")},
|
{RecordType::EXPL, fourcc_from_cstr("EXPL")},
|
||||||
{RecordType::MISC, FourCC("MISC")}, {RecordType::MOVT, FourCC("MOVT")},
|
{RecordType::EYES, fourcc_from_cstr("EYES")},
|
||||||
{RecordType::MSTT, FourCC("MSTT")}, {RecordType::MUSC, FourCC("MUSC")},
|
{RecordType::FACT, fourcc_from_cstr("FACT")},
|
||||||
{RecordType::MUST, FourCC("MUST")}, {RecordType::NAVI, FourCC("NAVI")},
|
{RecordType::FLOR, fourcc_from_cstr("FLOR")},
|
||||||
{RecordType::NAVM, FourCC("NAVM")}, {RecordType::NOTE, FourCC("NOTE")},
|
{RecordType::FLST, fourcc_from_cstr("FLST")},
|
||||||
{RecordType::NPC_, FourCC("NPC_")}, {RecordType::OTFT, FourCC("OTFT")},
|
{RecordType::FSTP, fourcc_from_cstr("FSTP")},
|
||||||
{RecordType::PACK, FourCC("PACK")}, {RecordType::PARW, FourCC("PARW")},
|
{RecordType::FSTS, fourcc_from_cstr("FSTS")},
|
||||||
{RecordType::PBAR, FourCC("PBAR")}, {RecordType::PBEA, FourCC("PBEA")},
|
{RecordType::FURN, fourcc_from_cstr("FURN")},
|
||||||
{RecordType::PCON, FourCC("PCON")}, {RecordType::PERK, FourCC("PERK")},
|
{RecordType::GLOB, fourcc_from_cstr("GLOB")},
|
||||||
{RecordType::PFLA, FourCC("PFLA")}, {RecordType::PGRE, FourCC("PGRE")},
|
{RecordType::GMST, fourcc_from_cstr("GMST")},
|
||||||
{RecordType::PHZD, FourCC("PHZD")}, {RecordType::PLYR, FourCC("PLYR")},
|
{RecordType::GRAS, fourcc_from_cstr("GRAS")},
|
||||||
{RecordType::PMIS, FourCC("PMIS")}, {RecordType::PROJ, FourCC("PROJ")},
|
{RecordType::GRUP, fourcc_from_cstr("GRUP")},
|
||||||
{RecordType::PWAT, FourCC("PWAT")}, {RecordType::QUST, FourCC("QUST")},
|
{RecordType::HAIR, fourcc_from_cstr("HAIR")},
|
||||||
{RecordType::RACE, FourCC("RACE")}, {RecordType::REFR, FourCC("REFR")},
|
{RecordType::HAZD, fourcc_from_cstr("HAZD")},
|
||||||
{RecordType::REGN, FourCC("REGN")}, {RecordType::RELA, FourCC("RELA")},
|
{RecordType::HDPT, fourcc_from_cstr("HDPT")},
|
||||||
{RecordType::REVB, FourCC("REVB")}, {RecordType::RFCT, FourCC("RFCT")},
|
{RecordType::IDLE, fourcc_from_cstr("IDLE")},
|
||||||
{RecordType::RGDL, FourCC("RGDL")}, {RecordType::SCEN, FourCC("SCEN")},
|
{RecordType::IDLM, fourcc_from_cstr("IDLM")},
|
||||||
{RecordType::SCOL, FourCC("SCOL")}, {RecordType::SCPT, FourCC("SCPT")},
|
{RecordType::IMAD, fourcc_from_cstr("IMAD")},
|
||||||
{RecordType::SCRL, FourCC("SCRL")}, {RecordType::SHOU, FourCC("SHOU")},
|
{RecordType::IMGS, fourcc_from_cstr("IMGS")},
|
||||||
{RecordType::SLGM, FourCC("SLGM")}, {RecordType::SMBN, FourCC("SMBN")},
|
{RecordType::INFO, fourcc_from_cstr("INFO")},
|
||||||
{RecordType::SMEN, FourCC("SMEN")}, {RecordType::SMQN, FourCC("SMQN")},
|
{RecordType::INGR, fourcc_from_cstr("INGR")},
|
||||||
{RecordType::SNCT, FourCC("SNCT")}, {RecordType::SNDR, FourCC("SNDR")},
|
{RecordType::IPCT, fourcc_from_cstr("IPCT")},
|
||||||
{RecordType::SOPM, FourCC("SOPM")}, {RecordType::SOUN, FourCC("SOUN")},
|
{RecordType::IPDS, fourcc_from_cstr("IPDS")},
|
||||||
{RecordType::SPEL, FourCC("SPEL")}, {RecordType::SPGD, FourCC("SPGD")},
|
{RecordType::KEYM, fourcc_from_cstr("KEYM")},
|
||||||
{RecordType::STAT, FourCC("STAT")}, {RecordType::TACT, FourCC("TACT")},
|
{RecordType::KYWD, fourcc_from_cstr("KYWD")},
|
||||||
{RecordType::TES4, FourCC("TES4")}, {RecordType::TREE, FourCC("TREE")},
|
{RecordType::LAND, fourcc_from_cstr("LAND")},
|
||||||
{RecordType::TXST, FourCC("TXST")}, {RecordType::VOLI, FourCC("VOLI")},
|
{RecordType::LCRT, fourcc_from_cstr("LCRT")},
|
||||||
{RecordType::VTYP, FourCC("VTYP")}, {RecordType::WATR, FourCC("WATR")},
|
{RecordType::LCTN, fourcc_from_cstr("LCTN")},
|
||||||
{RecordType::WEAP, FourCC("WEAP")}, {RecordType::WOOP, FourCC("WOOP")},
|
{RecordType::LENS, fourcc_from_cstr("LENS")},
|
||||||
{RecordType::WRLD, FourCC("WRLD")}, {RecordType::WTHR, FourCC("WTHR")},
|
{RecordType::LGTM, fourcc_from_cstr("LGTM")},
|
||||||
|
{RecordType::LIGH, fourcc_from_cstr("LIGH")},
|
||||||
|
{RecordType::LSCR, fourcc_from_cstr("LSCR")},
|
||||||
|
{RecordType::LTEX, fourcc_from_cstr("LTEX")},
|
||||||
|
{RecordType::LVLI, fourcc_from_cstr("LVLI")},
|
||||||
|
{RecordType::LVLN, fourcc_from_cstr("LVLN")},
|
||||||
|
{RecordType::LVSP, fourcc_from_cstr("LVSP")},
|
||||||
|
{RecordType::MATO, fourcc_from_cstr("MATO")},
|
||||||
|
{RecordType::MATT, fourcc_from_cstr("MATT")},
|
||||||
|
{RecordType::MESG, fourcc_from_cstr("MESG")},
|
||||||
|
{RecordType::MGEF, fourcc_from_cstr("MGEF")},
|
||||||
|
{RecordType::MISC, fourcc_from_cstr("MISC")},
|
||||||
|
{RecordType::MOVT, fourcc_from_cstr("MOVT")},
|
||||||
|
{RecordType::MSTT, fourcc_from_cstr("MSTT")},
|
||||||
|
{RecordType::MUSC, fourcc_from_cstr("MUSC")},
|
||||||
|
{RecordType::MUST, fourcc_from_cstr("MUST")},
|
||||||
|
{RecordType::NAVI, fourcc_from_cstr("NAVI")},
|
||||||
|
{RecordType::NAVM, fourcc_from_cstr("NAVM")},
|
||||||
|
{RecordType::NOTE, fourcc_from_cstr("NOTE")},
|
||||||
|
{RecordType::NPC_, fourcc_from_cstr("NPC_")},
|
||||||
|
{RecordType::OTFT, fourcc_from_cstr("OTFT")},
|
||||||
|
{RecordType::PACK, fourcc_from_cstr("PACK")},
|
||||||
|
{RecordType::PARW, fourcc_from_cstr("PARW")},
|
||||||
|
{RecordType::PBAR, fourcc_from_cstr("PBAR")},
|
||||||
|
{RecordType::PBEA, fourcc_from_cstr("PBEA")},
|
||||||
|
{RecordType::PCON, fourcc_from_cstr("PCON")},
|
||||||
|
{RecordType::PERK, fourcc_from_cstr("PERK")},
|
||||||
|
{RecordType::PFLA, fourcc_from_cstr("PFLA")},
|
||||||
|
{RecordType::PGRE, fourcc_from_cstr("PGRE")},
|
||||||
|
{RecordType::PHZD, fourcc_from_cstr("PHZD")},
|
||||||
|
{RecordType::PLYR, fourcc_from_cstr("PLYR")},
|
||||||
|
{RecordType::PMIS, fourcc_from_cstr("PMIS")},
|
||||||
|
{RecordType::PROJ, fourcc_from_cstr("PROJ")},
|
||||||
|
{RecordType::PWAT, fourcc_from_cstr("PWAT")},
|
||||||
|
{RecordType::QUST, fourcc_from_cstr("QUST")},
|
||||||
|
{RecordType::RACE, fourcc_from_cstr("RACE")},
|
||||||
|
{RecordType::REFR, fourcc_from_cstr("REFR")},
|
||||||
|
{RecordType::REGN, fourcc_from_cstr("REGN")},
|
||||||
|
{RecordType::RELA, fourcc_from_cstr("RELA")},
|
||||||
|
{RecordType::REVB, fourcc_from_cstr("REVB")},
|
||||||
|
{RecordType::RFCT, fourcc_from_cstr("RFCT")},
|
||||||
|
{RecordType::RGDL, fourcc_from_cstr("RGDL")},
|
||||||
|
{RecordType::SCEN, fourcc_from_cstr("SCEN")},
|
||||||
|
{RecordType::SCOL, fourcc_from_cstr("SCOL")},
|
||||||
|
{RecordType::SCPT, fourcc_from_cstr("SCPT")},
|
||||||
|
{RecordType::SCRL, fourcc_from_cstr("SCRL")},
|
||||||
|
{RecordType::SHOU, fourcc_from_cstr("SHOU")},
|
||||||
|
{RecordType::SLGM, fourcc_from_cstr("SLGM")},
|
||||||
|
{RecordType::SMBN, fourcc_from_cstr("SMBN")},
|
||||||
|
{RecordType::SMEN, fourcc_from_cstr("SMEN")},
|
||||||
|
{RecordType::SMQN, fourcc_from_cstr("SMQN")},
|
||||||
|
{RecordType::SNCT, fourcc_from_cstr("SNCT")},
|
||||||
|
{RecordType::SNDR, fourcc_from_cstr("SNDR")},
|
||||||
|
{RecordType::SOPM, fourcc_from_cstr("SOPM")},
|
||||||
|
{RecordType::SOUN, fourcc_from_cstr("SOUN")},
|
||||||
|
{RecordType::SPEL, fourcc_from_cstr("SPEL")},
|
||||||
|
{RecordType::SPGD, fourcc_from_cstr("SPGD")},
|
||||||
|
{RecordType::STAT, fourcc_from_cstr("STAT")},
|
||||||
|
{RecordType::TACT, fourcc_from_cstr("TACT")},
|
||||||
|
{RecordType::TES4, fourcc_from_cstr("TES4")},
|
||||||
|
{RecordType::TREE, fourcc_from_cstr("TREE")},
|
||||||
|
{RecordType::TXST, fourcc_from_cstr("TXST")},
|
||||||
|
{RecordType::VOLI, fourcc_from_cstr("VOLI")},
|
||||||
|
{RecordType::VTYP, fourcc_from_cstr("VTYP")},
|
||||||
|
{RecordType::WATR, fourcc_from_cstr("WATR")},
|
||||||
|
{RecordType::WEAP, fourcc_from_cstr("WEAP")},
|
||||||
|
{RecordType::WOOP, fourcc_from_cstr("WOOP")},
|
||||||
|
{RecordType::WRLD, fourcc_from_cstr("WRLD")},
|
||||||
|
{RecordType::WTHR, fourcc_from_cstr("WTHR")},
|
||||||
};
|
};
|
||||||
|
|
||||||
static constexpr std::pair<RecordType, std::string_view> record_type_name_map_builtin[] {
|
static constexpr std::pair<RecordType, std::string_view> record_type_name_map_builtin[] {
|
||||||
@@ -405,14 +473,14 @@ static constexpr std::pair<RefrFlag, std::string_view> refr_flag_description_map
|
|||||||
{{RecordType::ACTI, 26}, "Filter (Collision Geometry)" },
|
{{RecordType::ACTI, 26}, "Filter (Collision Geometry)" },
|
||||||
{{RecordType::ACTI, 27}, "Bounding Box (Collision Geometry)"},
|
{{RecordType::ACTI, 27}, "Bounding Box (Collision Geometry)"},
|
||||||
{{RecordType::ACTI, 28}, "Reflected By Auto Water" },
|
{{RecordType::ACTI, 28}, "Reflected By Auto Water" },
|
||||||
{{RecordType::ACTI, 29}, "Don''t Havok Settle" },
|
{{RecordType::ACTI, 29}, "Don't Havok Settle" },
|
||||||
{{RecordType::ACTI, 30}, "No Respawn" },
|
{{RecordType::ACTI, 30}, "No Respawn" },
|
||||||
{{RecordType::ACTI, 31}, "Multibound" },
|
{{RecordType::ACTI, 31}, "Multibound" },
|
||||||
{{RecordType::ADDN, 10}, "Persistent" },
|
{{RecordType::ADDN, 10}, "Persistent" },
|
||||||
{{RecordType::ADDN, 11}, "Initially Disabled" },
|
{{RecordType::ADDN, 11}, "Initially Disabled" },
|
||||||
{{RecordType::ADDN, 16}, "Is Full LOD" },
|
{{RecordType::ADDN, 16}, "Is Full LOD" },
|
||||||
{{RecordType::ADDN, 28}, "Reflected By Auto Water" },
|
{{RecordType::ADDN, 28}, "Reflected By Auto Water" },
|
||||||
{{RecordType::ADDN, 29}, "Don''t Havok Settle" },
|
{{RecordType::ADDN, 29}, "Don't Havok Settle" },
|
||||||
{{RecordType::ADDN, 30}, "No Respawn" },
|
{{RecordType::ADDN, 30}, "No Respawn" },
|
||||||
{{RecordType::ADDN, 31}, "Multibound" },
|
{{RecordType::ADDN, 31}, "Multibound" },
|
||||||
{{RecordType::ALCH, 10}, "Persistent" },
|
{{RecordType::ALCH, 10}, "Persistent" },
|
||||||
@@ -420,7 +488,7 @@ static constexpr std::pair<RefrFlag, std::string_view> refr_flag_description_map
|
|||||||
{{RecordType::ALCH, 16}, "Is Full LOD" },
|
{{RecordType::ALCH, 16}, "Is Full LOD" },
|
||||||
{{RecordType::ALCH, 25}, "No AI Acquire" },
|
{{RecordType::ALCH, 25}, "No AI Acquire" },
|
||||||
{{RecordType::ALCH, 28}, "Reflected By Auto Water" },
|
{{RecordType::ALCH, 28}, "Reflected By Auto Water" },
|
||||||
{{RecordType::ALCH, 29}, "Don''t Havok Settle" },
|
{{RecordType::ALCH, 29}, "Don't Havok Settle" },
|
||||||
{{RecordType::ALCH, 30}, "No Respawn" },
|
{{RecordType::ALCH, 30}, "No Respawn" },
|
||||||
{{RecordType::ALCH, 31}, "Multibound" },
|
{{RecordType::ALCH, 31}, "Multibound" },
|
||||||
{{RecordType::AMMO, 10}, "Persistent" },
|
{{RecordType::AMMO, 10}, "Persistent" },
|
||||||
@@ -428,7 +496,7 @@ static constexpr std::pair<RefrFlag, std::string_view> refr_flag_description_map
|
|||||||
{{RecordType::AMMO, 16}, "Is Full LOD" },
|
{{RecordType::AMMO, 16}, "Is Full LOD" },
|
||||||
{{RecordType::AMMO, 25}, "No AI Acquire" },
|
{{RecordType::AMMO, 25}, "No AI Acquire" },
|
||||||
{{RecordType::AMMO, 28}, "Reflected By Auto Water" },
|
{{RecordType::AMMO, 28}, "Reflected By Auto Water" },
|
||||||
{{RecordType::AMMO, 29}, "Don''t Havok Settle" },
|
{{RecordType::AMMO, 29}, "Don't Havok Settle" },
|
||||||
{{RecordType::AMMO, 30}, "No Respawn" },
|
{{RecordType::AMMO, 30}, "No Respawn" },
|
||||||
{{RecordType::AMMO, 31}, "Multibound" },
|
{{RecordType::AMMO, 31}, "Multibound" },
|
||||||
{{RecordType::ARMO, 10}, "Persistent" },
|
{{RecordType::ARMO, 10}, "Persistent" },
|
||||||
@@ -436,7 +504,7 @@ static constexpr std::pair<RefrFlag, std::string_view> refr_flag_description_map
|
|||||||
{{RecordType::ARMO, 16}, "Is Full LOD" },
|
{{RecordType::ARMO, 16}, "Is Full LOD" },
|
||||||
{{RecordType::ARMO, 25}, "No AI Acquire" },
|
{{RecordType::ARMO, 25}, "No AI Acquire" },
|
||||||
{{RecordType::ARMO, 28}, "Reflected By Auto Water" },
|
{{RecordType::ARMO, 28}, "Reflected By Auto Water" },
|
||||||
{{RecordType::ARMO, 29}, "Don''t Havok Settle" },
|
{{RecordType::ARMO, 29}, "Don't Havok Settle" },
|
||||||
{{RecordType::ARMO, 30}, "No Respawn" },
|
{{RecordType::ARMO, 30}, "No Respawn" },
|
||||||
{{RecordType::ARMO, 31}, "Multibound" },
|
{{RecordType::ARMO, 31}, "Multibound" },
|
||||||
{{RecordType::BOOK, 10}, "Persistent" },
|
{{RecordType::BOOK, 10}, "Persistent" },
|
||||||
@@ -444,7 +512,7 @@ static constexpr std::pair<RefrFlag, std::string_view> refr_flag_description_map
|
|||||||
{{RecordType::BOOK, 16}, "Is Full LOD" },
|
{{RecordType::BOOK, 16}, "Is Full LOD" },
|
||||||
{{RecordType::BOOK, 25}, "No AI Acquire" },
|
{{RecordType::BOOK, 25}, "No AI Acquire" },
|
||||||
{{RecordType::BOOK, 28}, "Reflected By Auto Water" },
|
{{RecordType::BOOK, 28}, "Reflected By Auto Water" },
|
||||||
{{RecordType::BOOK, 29}, "Don''t Havok Settle" },
|
{{RecordType::BOOK, 29}, "Don't Havok Settle" },
|
||||||
{{RecordType::BOOK, 30}, "No Respawn" },
|
{{RecordType::BOOK, 30}, "No Respawn" },
|
||||||
{{RecordType::BOOK, 31}, "Multibound" },
|
{{RecordType::BOOK, 31}, "Multibound" },
|
||||||
{{RecordType::CONT, 10}, "Persistent" },
|
{{RecordType::CONT, 10}, "Persistent" },
|
||||||
@@ -454,7 +522,7 @@ static constexpr std::pair<RefrFlag, std::string_view> refr_flag_description_map
|
|||||||
{{RecordType::CONT, 26}, "Filter (Collision Geometry)" },
|
{{RecordType::CONT, 26}, "Filter (Collision Geometry)" },
|
||||||
{{RecordType::CONT, 27}, "Bounding Box (Collision Geometry)"},
|
{{RecordType::CONT, 27}, "Bounding Box (Collision Geometry)"},
|
||||||
{{RecordType::CONT, 28}, "Reflected By Auto Water" },
|
{{RecordType::CONT, 28}, "Reflected By Auto Water" },
|
||||||
{{RecordType::CONT, 29}, "Don''t Havok Settle" },
|
{{RecordType::CONT, 29}, "Don't Havok Settle" },
|
||||||
{{RecordType::CONT, 30}, "Ground" },
|
{{RecordType::CONT, 30}, "Ground" },
|
||||||
{{RecordType::CONT, 31}, "Multibound" },
|
{{RecordType::CONT, 31}, "Multibound" },
|
||||||
{{RecordType::DOOR, 6}, "Hidden From Local Map" },
|
{{RecordType::DOOR, 6}, "Hidden From Local Map" },
|
||||||
@@ -465,7 +533,7 @@ static constexpr std::pair<RefrFlag, std::string_view> refr_flag_description_map
|
|||||||
{{RecordType::DOOR, 26}, "Filter (Collision Geometry)" },
|
{{RecordType::DOOR, 26}, "Filter (Collision Geometry)" },
|
||||||
{{RecordType::DOOR, 27}, "Bounding Box (Collision Geometry)"},
|
{{RecordType::DOOR, 27}, "Bounding Box (Collision Geometry)"},
|
||||||
{{RecordType::DOOR, 28}, "Reflected By Auto Water" },
|
{{RecordType::DOOR, 28}, "Reflected By Auto Water" },
|
||||||
{{RecordType::DOOR, 29}, "Don''t Havok Settle" },
|
{{RecordType::DOOR, 29}, "Don't Havok Settle" },
|
||||||
{{RecordType::DOOR, 30}, "No Respawn" },
|
{{RecordType::DOOR, 30}, "No Respawn" },
|
||||||
{{RecordType::DOOR, 31}, "Multibound" },
|
{{RecordType::DOOR, 31}, "Multibound" },
|
||||||
{{RecordType::FLOR, 9}, "Hidden From Local Map" },
|
{{RecordType::FLOR, 9}, "Hidden From Local Map" },
|
||||||
@@ -477,7 +545,7 @@ static constexpr std::pair<RefrFlag, std::string_view> refr_flag_description_map
|
|||||||
{{RecordType::FLOR, 26}, "Filter (Collision Geometry)" },
|
{{RecordType::FLOR, 26}, "Filter (Collision Geometry)" },
|
||||||
{{RecordType::FLOR, 27}, "Bounding Box (Collision Geometry)"},
|
{{RecordType::FLOR, 27}, "Bounding Box (Collision Geometry)"},
|
||||||
{{RecordType::FLOR, 28}, "Reflected By Auto Water" },
|
{{RecordType::FLOR, 28}, "Reflected By Auto Water" },
|
||||||
{{RecordType::FLOR, 29}, "Don''t Havok Settle" },
|
{{RecordType::FLOR, 29}, "Don't Havok Settle" },
|
||||||
{{RecordType::FLOR, 30}, "No Respawn" },
|
{{RecordType::FLOR, 30}, "No Respawn" },
|
||||||
{{RecordType::FLOR, 31}, "Multibound" },
|
{{RecordType::FLOR, 31}, "Multibound" },
|
||||||
{{RecordType::INGR, 10}, "Persistent" },
|
{{RecordType::INGR, 10}, "Persistent" },
|
||||||
@@ -485,7 +553,7 @@ static constexpr std::pair<RefrFlag, std::string_view> refr_flag_description_map
|
|||||||
{{RecordType::INGR, 16}, "Is Full LOD" },
|
{{RecordType::INGR, 16}, "Is Full LOD" },
|
||||||
{{RecordType::INGR, 25}, "No AI Acquire" },
|
{{RecordType::INGR, 25}, "No AI Acquire" },
|
||||||
{{RecordType::INGR, 28}, "Reflected By Auto Water" },
|
{{RecordType::INGR, 28}, "Reflected By Auto Water" },
|
||||||
{{RecordType::INGR, 29}, "Don''t Havok Settle" },
|
{{RecordType::INGR, 29}, "Don't Havok Settle" },
|
||||||
{{RecordType::INGR, 30}, "No Respawn" },
|
{{RecordType::INGR, 30}, "No Respawn" },
|
||||||
{{RecordType::INGR, 31}, "Multibound" },
|
{{RecordType::INGR, 31}, "Multibound" },
|
||||||
{{RecordType::KEYM, 10}, "Persistent" },
|
{{RecordType::KEYM, 10}, "Persistent" },
|
||||||
@@ -493,18 +561,18 @@ static constexpr std::pair<RefrFlag, std::string_view> refr_flag_description_map
|
|||||||
{{RecordType::KEYM, 16}, "Is Full LOD" },
|
{{RecordType::KEYM, 16}, "Is Full LOD" },
|
||||||
{{RecordType::KEYM, 25}, "No AI Acquire" },
|
{{RecordType::KEYM, 25}, "No AI Acquire" },
|
||||||
{{RecordType::KEYM, 28}, "Reflected By Auto Water" },
|
{{RecordType::KEYM, 28}, "Reflected By Auto Water" },
|
||||||
{{RecordType::KEYM, 29}, "Don''t Havok Settle" },
|
{{RecordType::KEYM, 29}, "Don't Havok Settle" },
|
||||||
{{RecordType::KEYM, 30}, "No Respawn" },
|
{{RecordType::KEYM, 30}, "No Respawn" },
|
||||||
{{RecordType::KEYM, 31}, "Multibound" },
|
{{RecordType::KEYM, 31}, "Multibound" },
|
||||||
{{RecordType::LIGH, 8}, "Doesn''t Light Water" },
|
{{RecordType::LIGH, 8}, "Doesn't Light Water" },
|
||||||
{{RecordType::LIGH, 9}, "Casts Shadows" },
|
{{RecordType::LIGH, 9}, "Casts Shadows" },
|
||||||
{{RecordType::LIGH, 10}, "Persistent" },
|
{{RecordType::LIGH, 10}, "Persistent" },
|
||||||
{{RecordType::LIGH, 11}, "Initially Disabled" },
|
{{RecordType::LIGH, 11}, "Initially Disabled" },
|
||||||
{{RecordType::LIGH, 16}, "Never Fades" },
|
{{RecordType::LIGH, 16}, "Never Fades" },
|
||||||
{{RecordType::LIGH, 17}, "Doesn''t Light Landscape" },
|
{{RecordType::LIGH, 17}, "Doesn't Light Landscape" },
|
||||||
{{RecordType::LIGH, 25}, "No AI Acquire" },
|
{{RecordType::LIGH, 25}, "No AI Acquire" },
|
||||||
{{RecordType::LIGH, 28}, "Reflected By Auto Water" },
|
{{RecordType::LIGH, 28}, "Reflected By Auto Water" },
|
||||||
{{RecordType::LIGH, 29}, "Don''t Havok Settle" },
|
{{RecordType::LIGH, 29}, "Don't Havok Settle" },
|
||||||
{{RecordType::LIGH, 30}, "No Respawn" },
|
{{RecordType::LIGH, 30}, "No Respawn" },
|
||||||
{{RecordType::LIGH, 31}, "Multibound" },
|
{{RecordType::LIGH, 31}, "Multibound" },
|
||||||
{{RecordType::MISC, 10}, "Persistent" },
|
{{RecordType::MISC, 10}, "Persistent" },
|
||||||
@@ -512,7 +580,7 @@ static constexpr std::pair<RefrFlag, std::string_view> refr_flag_description_map
|
|||||||
{{RecordType::MISC, 16}, "Is Full LOD" },
|
{{RecordType::MISC, 16}, "Is Full LOD" },
|
||||||
{{RecordType::MISC, 25}, "No AI Acquire" },
|
{{RecordType::MISC, 25}, "No AI Acquire" },
|
||||||
{{RecordType::MISC, 28}, "Reflected By Auto Water" },
|
{{RecordType::MISC, 28}, "Reflected By Auto Water" },
|
||||||
{{RecordType::MISC, 29}, "Don''t Havok Settle" },
|
{{RecordType::MISC, 29}, "Don't Havok Settle" },
|
||||||
{{RecordType::MISC, 30}, "No Respawn" },
|
{{RecordType::MISC, 30}, "No Respawn" },
|
||||||
{{RecordType::MISC, 31}, "Multibound" },
|
{{RecordType::MISC, 31}, "Multibound" },
|
||||||
{{RecordType::MSTT, 9}, "Motion Blur" },
|
{{RecordType::MSTT, 9}, "Motion Blur" },
|
||||||
@@ -522,7 +590,7 @@ static constexpr std::pair<RefrFlag, std::string_view> refr_flag_description_map
|
|||||||
{{RecordType::MSTT, 26}, "Filter (Collision Geometry)" },
|
{{RecordType::MSTT, 26}, "Filter (Collision Geometry)" },
|
||||||
{{RecordType::MSTT, 27}, "Bounding Box (Collision Geometry)"},
|
{{RecordType::MSTT, 27}, "Bounding Box (Collision Geometry)"},
|
||||||
{{RecordType::MSTT, 28}, "Reflected By Auto Water" },
|
{{RecordType::MSTT, 28}, "Reflected By Auto Water" },
|
||||||
{{RecordType::MSTT, 29}, "Don''t Havok Settle" },
|
{{RecordType::MSTT, 29}, "Don't Havok Settle" },
|
||||||
{{RecordType::MSTT, 30}, "No Respawn" },
|
{{RecordType::MSTT, 30}, "No Respawn" },
|
||||||
{{RecordType::MSTT, 31}, "Multibound" },
|
{{RecordType::MSTT, 31}, "Multibound" },
|
||||||
{{RecordType::SCRL, 10}, "Persistent" },
|
{{RecordType::SCRL, 10}, "Persistent" },
|
||||||
@@ -530,7 +598,7 @@ static constexpr std::pair<RefrFlag, std::string_view> refr_flag_description_map
|
|||||||
{{RecordType::SCRL, 16}, "Is Full LOD" },
|
{{RecordType::SCRL, 16}, "Is Full LOD" },
|
||||||
{{RecordType::SCRL, 25}, "No AI Acquire" },
|
{{RecordType::SCRL, 25}, "No AI Acquire" },
|
||||||
{{RecordType::SCRL, 28}, "Reflected By Auto Water" },
|
{{RecordType::SCRL, 28}, "Reflected By Auto Water" },
|
||||||
{{RecordType::SCRL, 29}, "Don''t Havok Settle" },
|
{{RecordType::SCRL, 29}, "Don't Havok Settle" },
|
||||||
{{RecordType::SCRL, 30}, "No Respawn" },
|
{{RecordType::SCRL, 30}, "No Respawn" },
|
||||||
{{RecordType::SCRL, 31}, "Multibound" },
|
{{RecordType::SCRL, 31}, "Multibound" },
|
||||||
{{RecordType::SLGM, 10}, "Persistent" },
|
{{RecordType::SLGM, 10}, "Persistent" },
|
||||||
@@ -538,7 +606,7 @@ static constexpr std::pair<RefrFlag, std::string_view> refr_flag_description_map
|
|||||||
{{RecordType::SLGM, 16}, "Is Full LOD" },
|
{{RecordType::SLGM, 16}, "Is Full LOD" },
|
||||||
{{RecordType::SLGM, 25}, "No AI Acquire" },
|
{{RecordType::SLGM, 25}, "No AI Acquire" },
|
||||||
{{RecordType::SLGM, 28}, "Reflected By Auto Water" },
|
{{RecordType::SLGM, 28}, "Reflected By Auto Water" },
|
||||||
{{RecordType::SLGM, 29}, "Don''t Havok Settle" },
|
{{RecordType::SLGM, 29}, "Don't Havok Settle" },
|
||||||
{{RecordType::SLGM, 30}, "No Respawn" },
|
{{RecordType::SLGM, 30}, "No Respawn" },
|
||||||
{{RecordType::SLGM, 31}, "Multibound" },
|
{{RecordType::SLGM, 31}, "Multibound" },
|
||||||
{{RecordType::STAT, 9}, "Hidden From Local Map" },
|
{{RecordType::STAT, 9}, "Hidden From Local Map" },
|
||||||
@@ -550,7 +618,7 @@ static constexpr std::pair<RefrFlag, std::string_view> refr_flag_description_map
|
|||||||
{{RecordType::STAT, 26}, "Filter (Collision Geometry)" },
|
{{RecordType::STAT, 26}, "Filter (Collision Geometry)" },
|
||||||
{{RecordType::STAT, 27}, "Bounding Box (Collision Geometry)"},
|
{{RecordType::STAT, 27}, "Bounding Box (Collision Geometry)"},
|
||||||
{{RecordType::STAT, 28}, "Reflected By Auto Water" },
|
{{RecordType::STAT, 28}, "Reflected By Auto Water" },
|
||||||
{{RecordType::STAT, 29}, "Don''t Havok Settle" },
|
{{RecordType::STAT, 29}, "Don't Havok Settle" },
|
||||||
{{RecordType::STAT, 30}, "No Respawn" },
|
{{RecordType::STAT, 30}, "No Respawn" },
|
||||||
{{RecordType::STAT, 31}, "Multibound" },
|
{{RecordType::STAT, 31}, "Multibound" },
|
||||||
{{RecordType::TREE, 9}, "Hidden From Local Map" },
|
{{RecordType::TREE, 9}, "Hidden From Local Map" },
|
||||||
@@ -562,7 +630,7 @@ static constexpr std::pair<RefrFlag, std::string_view> refr_flag_description_map
|
|||||||
{{RecordType::TREE, 26}, "Filter (Collision Geometry)" },
|
{{RecordType::TREE, 26}, "Filter (Collision Geometry)" },
|
||||||
{{RecordType::TREE, 27}, "Bounding Box (Collision Geometry)"},
|
{{RecordType::TREE, 27}, "Bounding Box (Collision Geometry)"},
|
||||||
{{RecordType::TREE, 28}, "Reflected By Auto Water" },
|
{{RecordType::TREE, 28}, "Reflected By Auto Water" },
|
||||||
{{RecordType::TREE, 29}, "Don''t Havok Settle" },
|
{{RecordType::TREE, 29}, "Don't Havok Settle" },
|
||||||
{{RecordType::TREE, 30}, "No Respawn" },
|
{{RecordType::TREE, 30}, "No Respawn" },
|
||||||
{{RecordType::TREE, 31}, "Multibound" },
|
{{RecordType::TREE, 31}, "Multibound" },
|
||||||
{{RecordType::WEAP, 10}, "Persistent" },
|
{{RecordType::WEAP, 10}, "Persistent" },
|
||||||
@@ -570,7 +638,7 @@ static constexpr std::pair<RefrFlag, std::string_view> refr_flag_description_map
|
|||||||
{{RecordType::WEAP, 16}, "Is Full LOD" },
|
{{RecordType::WEAP, 16}, "Is Full LOD" },
|
||||||
{{RecordType::WEAP, 25}, "No AI Acquire" },
|
{{RecordType::WEAP, 25}, "No AI Acquire" },
|
||||||
{{RecordType::WEAP, 28}, "Reflected By Auto Water" },
|
{{RecordType::WEAP, 28}, "Reflected By Auto Water" },
|
||||||
{{RecordType::WEAP, 29}, "Don''t Havok Settle" },
|
{{RecordType::WEAP, 29}, "Don't Havok Settle" },
|
||||||
{{RecordType::WEAP, 30}, "No Respawn" },
|
{{RecordType::WEAP, 30}, "No Respawn" },
|
||||||
{{RecordType::WEAP, 31}, "Multibound" },
|
{{RecordType::WEAP, 31}, "Multibound" },
|
||||||
};
|
};
|
||||||
|
|||||||
@@ -24,7 +24,7 @@ static constexpr auto esm_name = "Skyrim.esm";
|
|||||||
int main()
|
int main()
|
||||||
{
|
{
|
||||||
auto esm_fs = open_esm();
|
auto esm_fs = open_esm();
|
||||||
esxr::RecordHeader header{};
|
esxr::UnknownHeader header{};
|
||||||
esxr::read_header(esm_fs, header);
|
esxr::read_header(esm_fs, header);
|
||||||
return static_cast<int>(header.type);
|
return static_cast<int>(esxr::fourcc_to_record_type(header.type).value());
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -1,4 +1,5 @@
|
|||||||
#pragma once
|
#ifndef UTILITY_HPP
|
||||||
|
#define UTILITY_HPP
|
||||||
|
|
||||||
#include <array>
|
#include <array>
|
||||||
#include <optional>
|
#include <optional>
|
||||||
@@ -6,6 +7,14 @@
|
|||||||
|
|
||||||
namespace utility {
|
namespace utility {
|
||||||
|
|
||||||
|
// iterator distance as size type, provided iterator must be dereferencable
|
||||||
|
template <typename T>
|
||||||
|
T::size_type index_of(const T &container, typename T::const_iterator &iter)
|
||||||
|
{
|
||||||
|
auto distance = std::distance(std::cbegin(container), iter);
|
||||||
|
return static_cast<T::size_type>(distance);
|
||||||
|
}
|
||||||
|
|
||||||
// This is a base class for a generic store for some value that can be represented by
|
// This is a base class for a generic store for some value that can be represented by
|
||||||
// type T but should not be type checked as type T, but rather some more constrained class.
|
// type T but should not be type checked as type T, but rather some more constrained class.
|
||||||
template <class T>
|
template <class T>
|
||||||
@@ -15,13 +24,6 @@ struct Store {
|
|||||||
friend constexpr auto operator<=>(const Store &, const Store &) noexcept = default;
|
friend constexpr auto operator<=>(const Store &, const Store &) noexcept = default;
|
||||||
};
|
};
|
||||||
|
|
||||||
// Convert a fourcc literal (e.g. "LITR") to a uint32_t
|
|
||||||
constexpr uint32_t fourcc_lit_to_val(const char(&a)[5]) noexcept
|
|
||||||
{
|
|
||||||
char temp[4] = { a[0], a[1], a[2], a[3] };
|
|
||||||
return std::bit_cast<uint32_t, char[4]>(temp);
|
|
||||||
}
|
|
||||||
|
|
||||||
// Convert a builtin array to a std::array
|
// Convert a builtin array to a std::array
|
||||||
template <typename T, std::size_t N>
|
template <typename T, std::size_t N>
|
||||||
constexpr std::array<T, N> array_builtin_to_std(const T(&builtin)[N]) noexcept
|
constexpr std::array<T, N> array_builtin_to_std(const T(&builtin)[N]) noexcept
|
||||||
@@ -50,8 +52,8 @@ constexpr std::optional<Second> soa_first_to_second(const std::pair<std::array<F
|
|||||||
auto lhs = std::find(soa.first.cbegin(), soa.first.cend(), first);
|
auto lhs = std::find(soa.first.cbegin(), soa.first.cend(), first);
|
||||||
if (lhs == soa.first.cend())
|
if (lhs == soa.first.cend())
|
||||||
return {};
|
return {};
|
||||||
auto index = std::distance(soa.first.cbegin(), lhs);
|
auto index = index_of(soa.first, lhs);
|
||||||
return { soa.second[static_cast<size_t>(index)] };
|
return { soa.second[index] };
|
||||||
}
|
}
|
||||||
|
|
||||||
template <typename First, typename Second, std::size_t N>
|
template <typename First, typename Second, std::size_t N>
|
||||||
@@ -60,8 +62,8 @@ constexpr std::optional<First> soa_second_to_first(const std::pair<std::array<Fi
|
|||||||
auto lhs = std::find(soa.second.cbegin(), soa.second.cend(), second);
|
auto lhs = std::find(soa.second.cbegin(), soa.second.cend(), second);
|
||||||
if (lhs == soa.second.cend())
|
if (lhs == soa.second.cend())
|
||||||
return {};
|
return {};
|
||||||
auto index = std::distance(soa.second.cbegin(), lhs);
|
auto index = index_of(soa.second, lhs);
|
||||||
return { soa.first[static_cast<size_t>(index)] };
|
return { soa.first[index] };
|
||||||
}
|
}
|
||||||
|
|
||||||
// Used to inspect type sizes and values at compile time. Example:
|
// Used to inspect type sizes and values at compile time. Example:
|
||||||
@@ -79,3 +81,4 @@ class TD;
|
|||||||
|
|
||||||
}
|
}
|
||||||
|
|
||||||
|
#endif // UTILITY_HPP
|
||||||
|
|||||||
@@ -16,74 +16,142 @@ static constexpr std::pair<GroupType, std::string_view> group_type_name_map_buil
|
|||||||
};
|
};
|
||||||
|
|
||||||
static constexpr std::pair<RecordType, FourCC> record_type_fourcc_map_builtin[] {
|
static constexpr std::pair<RecordType, FourCC> record_type_fourcc_map_builtin[] {
|
||||||
{RecordType::AACT, FourCC("AACT")}, {RecordType::ACHR, FourCC("ACHR")},
|
{RecordType::AACT, fourcc_from_cstr("AACT")},
|
||||||
{RecordType::ACTI, FourCC("ACTI")}, {RecordType::ADDN, FourCC("ADDN")},
|
{RecordType::ACHR, fourcc_from_cstr("ACHR")},
|
||||||
{RecordType::ALCH, FourCC("ALCH")}, {RecordType::AMMO, FourCC("AMMO")},
|
{RecordType::ACTI, fourcc_from_cstr("ACTI")},
|
||||||
{RecordType::ANIO, FourCC("ANIO")}, {RecordType::APPA, FourCC("APPA")},
|
{RecordType::ADDN, fourcc_from_cstr("ADDN")},
|
||||||
{RecordType::ARMA, FourCC("ARMA")}, {RecordType::ARMO, FourCC("ARMO")},
|
{RecordType::ALCH, fourcc_from_cstr("ALCH")},
|
||||||
{RecordType::ARTO, FourCC("ARTO")}, {RecordType::ASPC, FourCC("ASPC")},
|
{RecordType::AMMO, fourcc_from_cstr("AMMO")},
|
||||||
{RecordType::ASTP, FourCC("ASTP")}, {RecordType::AVIF, FourCC("AVIF")},
|
{RecordType::ANIO, fourcc_from_cstr("ANIO")},
|
||||||
{RecordType::BOOK, FourCC("BOOK")}, {RecordType::BPTD, FourCC("BPTD")},
|
{RecordType::APPA, fourcc_from_cstr("APPA")},
|
||||||
{RecordType::CAMS, FourCC("CAMS")}, {RecordType::CELL, FourCC("CELL")},
|
{RecordType::ARMA, fourcc_from_cstr("ARMA")},
|
||||||
{RecordType::CLAS, FourCC("CLAS")}, {RecordType::CLDC, FourCC("CLDC")},
|
{RecordType::ARMO, fourcc_from_cstr("ARMO")},
|
||||||
{RecordType::CLFM, FourCC("CLFM")}, {RecordType::CLMT, FourCC("CLMT")},
|
{RecordType::ARTO, fourcc_from_cstr("ARTO")},
|
||||||
{RecordType::COBJ, FourCC("COBJ")}, {RecordType::COLL, FourCC("COLL")},
|
{RecordType::ASPC, fourcc_from_cstr("ASPC")},
|
||||||
{RecordType::CONT, FourCC("CONT")}, {RecordType::CPTH, FourCC("CPTH")},
|
{RecordType::ASTP, fourcc_from_cstr("ASTP")},
|
||||||
{RecordType::CSTY, FourCC("CSTY")}, {RecordType::DEBR, FourCC("DEBR")},
|
{RecordType::AVIF, fourcc_from_cstr("AVIF")},
|
||||||
{RecordType::DIAL, FourCC("DIAL")}, {RecordType::DLBR, FourCC("DLBR")},
|
{RecordType::BOOK, fourcc_from_cstr("BOOK")},
|
||||||
{RecordType::DLVW, FourCC("DLVW")}, {RecordType::DOBJ, FourCC("DOBJ")},
|
{RecordType::BPTD, fourcc_from_cstr("BPTD")},
|
||||||
{RecordType::DOOR, FourCC("DOOR")}, {RecordType::DUAL, FourCC("DUAL")},
|
{RecordType::CAMS, fourcc_from_cstr("CAMS")},
|
||||||
{RecordType::ECZN, FourCC("ECZN")}, {RecordType::EFSH, FourCC("EFSH")},
|
{RecordType::CELL, fourcc_from_cstr("CELL")},
|
||||||
{RecordType::ENCH, FourCC("ENCH")}, {RecordType::EQUP, FourCC("EQUP")},
|
{RecordType::CLAS, fourcc_from_cstr("CLAS")},
|
||||||
{RecordType::EXPL, FourCC("EXPL")}, {RecordType::EYES, FourCC("EYES")},
|
{RecordType::CLDC, fourcc_from_cstr("CLDC")},
|
||||||
{RecordType::FACT, FourCC("FACT")}, {RecordType::FLOR, FourCC("FLOR")},
|
{RecordType::CLFM, fourcc_from_cstr("CLFM")},
|
||||||
{RecordType::FLST, FourCC("FLST")}, {RecordType::FSTP, FourCC("FSTP")},
|
{RecordType::CLMT, fourcc_from_cstr("CLMT")},
|
||||||
{RecordType::FSTS, FourCC("FSTS")}, {RecordType::FURN, FourCC("FURN")},
|
{RecordType::COBJ, fourcc_from_cstr("COBJ")},
|
||||||
{RecordType::GLOB, FourCC("GLOB")}, {RecordType::GMST, FourCC("GMST")},
|
{RecordType::COLL, fourcc_from_cstr("COLL")},
|
||||||
{RecordType::GRAS, FourCC("GRAS")}, {RecordType::GRUP, FourCC("GRUP")},
|
{RecordType::CONT, fourcc_from_cstr("CONT")},
|
||||||
{RecordType::HAIR, FourCC("HAIR")}, {RecordType::HAZD, FourCC("HAZD")},
|
{RecordType::CPTH, fourcc_from_cstr("CPTH")},
|
||||||
{RecordType::HDPT, FourCC("HDPT")}, {RecordType::IDLE, FourCC("IDLE")},
|
{RecordType::CSTY, fourcc_from_cstr("CSTY")},
|
||||||
{RecordType::IDLM, FourCC("IDLM")}, {RecordType::IMAD, FourCC("IMAD")},
|
{RecordType::DEBR, fourcc_from_cstr("DEBR")},
|
||||||
{RecordType::IMGS, FourCC("IMGS")}, {RecordType::INFO, FourCC("INFO")},
|
{RecordType::DIAL, fourcc_from_cstr("DIAL")},
|
||||||
{RecordType::INGR, FourCC("INGR")}, {RecordType::IPCT, FourCC("IPCT")},
|
{RecordType::DLBR, fourcc_from_cstr("DLBR")},
|
||||||
{RecordType::IPDS, FourCC("IPDS")}, {RecordType::KEYM, FourCC("KEYM")},
|
{RecordType::DLVW, fourcc_from_cstr("DLVW")},
|
||||||
{RecordType::KYWD, FourCC("KYWD")}, {RecordType::LAND, FourCC("LAND")},
|
{RecordType::DOBJ, fourcc_from_cstr("DOBJ")},
|
||||||
{RecordType::LCRT, FourCC("LCRT")}, {RecordType::LCTN, FourCC("LCTN")},
|
{RecordType::DOOR, fourcc_from_cstr("DOOR")},
|
||||||
{RecordType::LENS, FourCC("LENS")}, {RecordType::LGTM, FourCC("LGTM")},
|
{RecordType::DUAL, fourcc_from_cstr("DUAL")},
|
||||||
{RecordType::LIGH, FourCC("LIGH")}, {RecordType::LSCR, FourCC("LSCR")},
|
{RecordType::ECZN, fourcc_from_cstr("ECZN")},
|
||||||
{RecordType::LTEX, FourCC("LTEX")}, {RecordType::LVLI, FourCC("LVLI")},
|
{RecordType::EFSH, fourcc_from_cstr("EFSH")},
|
||||||
{RecordType::LVLN, FourCC("LVLN")}, {RecordType::LVSP, FourCC("LVSP")},
|
{RecordType::ENCH, fourcc_from_cstr("ENCH")},
|
||||||
{RecordType::MATO, FourCC("MATO")}, {RecordType::MATT, FourCC("MATT")},
|
{RecordType::EQUP, fourcc_from_cstr("EQUP")},
|
||||||
{RecordType::MESG, FourCC("MESG")}, {RecordType::MGEF, FourCC("MGEF")},
|
{RecordType::EXPL, fourcc_from_cstr("EXPL")},
|
||||||
{RecordType::MISC, FourCC("MISC")}, {RecordType::MOVT, FourCC("MOVT")},
|
{RecordType::EYES, fourcc_from_cstr("EYES")},
|
||||||
{RecordType::MSTT, FourCC("MSTT")}, {RecordType::MUSC, FourCC("MUSC")},
|
{RecordType::FACT, fourcc_from_cstr("FACT")},
|
||||||
{RecordType::MUST, FourCC("MUST")}, {RecordType::NAVI, FourCC("NAVI")},
|
{RecordType::FLOR, fourcc_from_cstr("FLOR")},
|
||||||
{RecordType::NAVM, FourCC("NAVM")}, {RecordType::NOTE, FourCC("NOTE")},
|
{RecordType::FLST, fourcc_from_cstr("FLST")},
|
||||||
{RecordType::NPC_, FourCC("NPC_")}, {RecordType::OTFT, FourCC("OTFT")},
|
{RecordType::FSTP, fourcc_from_cstr("FSTP")},
|
||||||
{RecordType::PACK, FourCC("PACK")}, {RecordType::PARW, FourCC("PARW")},
|
{RecordType::FSTS, fourcc_from_cstr("FSTS")},
|
||||||
{RecordType::PBAR, FourCC("PBAR")}, {RecordType::PBEA, FourCC("PBEA")},
|
{RecordType::FURN, fourcc_from_cstr("FURN")},
|
||||||
{RecordType::PCON, FourCC("PCON")}, {RecordType::PERK, FourCC("PERK")},
|
{RecordType::GLOB, fourcc_from_cstr("GLOB")},
|
||||||
{RecordType::PFLA, FourCC("PFLA")}, {RecordType::PGRE, FourCC("PGRE")},
|
{RecordType::GMST, fourcc_from_cstr("GMST")},
|
||||||
{RecordType::PHZD, FourCC("PHZD")}, {RecordType::PLYR, FourCC("PLYR")},
|
{RecordType::GRAS, fourcc_from_cstr("GRAS")},
|
||||||
{RecordType::PMIS, FourCC("PMIS")}, {RecordType::PROJ, FourCC("PROJ")},
|
{RecordType::GRUP, fourcc_from_cstr("GRUP")},
|
||||||
{RecordType::PWAT, FourCC("PWAT")}, {RecordType::QUST, FourCC("QUST")},
|
{RecordType::HAIR, fourcc_from_cstr("HAIR")},
|
||||||
{RecordType::RACE, FourCC("RACE")}, {RecordType::REFR, FourCC("REFR")},
|
{RecordType::HAZD, fourcc_from_cstr("HAZD")},
|
||||||
{RecordType::REGN, FourCC("REGN")}, {RecordType::RELA, FourCC("RELA")},
|
{RecordType::HDPT, fourcc_from_cstr("HDPT")},
|
||||||
{RecordType::REVB, FourCC("REVB")}, {RecordType::RFCT, FourCC("RFCT")},
|
{RecordType::IDLE, fourcc_from_cstr("IDLE")},
|
||||||
{RecordType::RGDL, FourCC("RGDL")}, {RecordType::SCEN, FourCC("SCEN")},
|
{RecordType::IDLM, fourcc_from_cstr("IDLM")},
|
||||||
{RecordType::SCOL, FourCC("SCOL")}, {RecordType::SCPT, FourCC("SCPT")},
|
{RecordType::IMAD, fourcc_from_cstr("IMAD")},
|
||||||
{RecordType::SCRL, FourCC("SCRL")}, {RecordType::SHOU, FourCC("SHOU")},
|
{RecordType::IMGS, fourcc_from_cstr("IMGS")},
|
||||||
{RecordType::SLGM, FourCC("SLGM")}, {RecordType::SMBN, FourCC("SMBN")},
|
{RecordType::INFO, fourcc_from_cstr("INFO")},
|
||||||
{RecordType::SMEN, FourCC("SMEN")}, {RecordType::SMQN, FourCC("SMQN")},
|
{RecordType::INGR, fourcc_from_cstr("INGR")},
|
||||||
{RecordType::SNCT, FourCC("SNCT")}, {RecordType::SNDR, FourCC("SNDR")},
|
{RecordType::IPCT, fourcc_from_cstr("IPCT")},
|
||||||
{RecordType::SOPM, FourCC("SOPM")}, {RecordType::SOUN, FourCC("SOUN")},
|
{RecordType::IPDS, fourcc_from_cstr("IPDS")},
|
||||||
{RecordType::SPEL, FourCC("SPEL")}, {RecordType::SPGD, FourCC("SPGD")},
|
{RecordType::KEYM, fourcc_from_cstr("KEYM")},
|
||||||
{RecordType::STAT, FourCC("STAT")}, {RecordType::TACT, FourCC("TACT")},
|
{RecordType::KYWD, fourcc_from_cstr("KYWD")},
|
||||||
{RecordType::TES4, FourCC("TES4")}, {RecordType::TREE, FourCC("TREE")},
|
{RecordType::LAND, fourcc_from_cstr("LAND")},
|
||||||
{RecordType::TXST, FourCC("TXST")}, {RecordType::VOLI, FourCC("VOLI")},
|
{RecordType::LCRT, fourcc_from_cstr("LCRT")},
|
||||||
{RecordType::VTYP, FourCC("VTYP")}, {RecordType::WATR, FourCC("WATR")},
|
{RecordType::LCTN, fourcc_from_cstr("LCTN")},
|
||||||
{RecordType::WEAP, FourCC("WEAP")}, {RecordType::WOOP, FourCC("WOOP")},
|
{RecordType::LENS, fourcc_from_cstr("LENS")},
|
||||||
{RecordType::WRLD, FourCC("WRLD")}, {RecordType::WTHR, FourCC("WTHR")},
|
{RecordType::LGTM, fourcc_from_cstr("LGTM")},
|
||||||
|
{RecordType::LIGH, fourcc_from_cstr("LIGH")},
|
||||||
|
{RecordType::LSCR, fourcc_from_cstr("LSCR")},
|
||||||
|
{RecordType::LTEX, fourcc_from_cstr("LTEX")},
|
||||||
|
{RecordType::LVLI, fourcc_from_cstr("LVLI")},
|
||||||
|
{RecordType::LVLN, fourcc_from_cstr("LVLN")},
|
||||||
|
{RecordType::LVSP, fourcc_from_cstr("LVSP")},
|
||||||
|
{RecordType::MATO, fourcc_from_cstr("MATO")},
|
||||||
|
{RecordType::MATT, fourcc_from_cstr("MATT")},
|
||||||
|
{RecordType::MESG, fourcc_from_cstr("MESG")},
|
||||||
|
{RecordType::MGEF, fourcc_from_cstr("MGEF")},
|
||||||
|
{RecordType::MISC, fourcc_from_cstr("MISC")},
|
||||||
|
{RecordType::MOVT, fourcc_from_cstr("MOVT")},
|
||||||
|
{RecordType::MSTT, fourcc_from_cstr("MSTT")},
|
||||||
|
{RecordType::MUSC, fourcc_from_cstr("MUSC")},
|
||||||
|
{RecordType::MUST, fourcc_from_cstr("MUST")},
|
||||||
|
{RecordType::NAVI, fourcc_from_cstr("NAVI")},
|
||||||
|
{RecordType::NAVM, fourcc_from_cstr("NAVM")},
|
||||||
|
{RecordType::NOTE, fourcc_from_cstr("NOTE")},
|
||||||
|
{RecordType::NPC_, fourcc_from_cstr("NPC_")},
|
||||||
|
{RecordType::OTFT, fourcc_from_cstr("OTFT")},
|
||||||
|
{RecordType::PACK, fourcc_from_cstr("PACK")},
|
||||||
|
{RecordType::PARW, fourcc_from_cstr("PARW")},
|
||||||
|
{RecordType::PBAR, fourcc_from_cstr("PBAR")},
|
||||||
|
{RecordType::PBEA, fourcc_from_cstr("PBEA")},
|
||||||
|
{RecordType::PCON, fourcc_from_cstr("PCON")},
|
||||||
|
{RecordType::PERK, fourcc_from_cstr("PERK")},
|
||||||
|
{RecordType::PFLA, fourcc_from_cstr("PFLA")},
|
||||||
|
{RecordType::PGRE, fourcc_from_cstr("PGRE")},
|
||||||
|
{RecordType::PHZD, fourcc_from_cstr("PHZD")},
|
||||||
|
{RecordType::PLYR, fourcc_from_cstr("PLYR")},
|
||||||
|
{RecordType::PMIS, fourcc_from_cstr("PMIS")},
|
||||||
|
{RecordType::PROJ, fourcc_from_cstr("PROJ")},
|
||||||
|
{RecordType::PWAT, fourcc_from_cstr("PWAT")},
|
||||||
|
{RecordType::QUST, fourcc_from_cstr("QUST")},
|
||||||
|
{RecordType::RACE, fourcc_from_cstr("RACE")},
|
||||||
|
{RecordType::REFR, fourcc_from_cstr("REFR")},
|
||||||
|
{RecordType::REGN, fourcc_from_cstr("REGN")},
|
||||||
|
{RecordType::RELA, fourcc_from_cstr("RELA")},
|
||||||
|
{RecordType::REVB, fourcc_from_cstr("REVB")},
|
||||||
|
{RecordType::RFCT, fourcc_from_cstr("RFCT")},
|
||||||
|
{RecordType::RGDL, fourcc_from_cstr("RGDL")},
|
||||||
|
{RecordType::SCEN, fourcc_from_cstr("SCEN")},
|
||||||
|
{RecordType::SCOL, fourcc_from_cstr("SCOL")},
|
||||||
|
{RecordType::SCPT, fourcc_from_cstr("SCPT")},
|
||||||
|
{RecordType::SCRL, fourcc_from_cstr("SCRL")},
|
||||||
|
{RecordType::SHOU, fourcc_from_cstr("SHOU")},
|
||||||
|
{RecordType::SLGM, fourcc_from_cstr("SLGM")},
|
||||||
|
{RecordType::SMBN, fourcc_from_cstr("SMBN")},
|
||||||
|
{RecordType::SMEN, fourcc_from_cstr("SMEN")},
|
||||||
|
{RecordType::SMQN, fourcc_from_cstr("SMQN")},
|
||||||
|
{RecordType::SNCT, fourcc_from_cstr("SNCT")},
|
||||||
|
{RecordType::SNDR, fourcc_from_cstr("SNDR")},
|
||||||
|
{RecordType::SOPM, fourcc_from_cstr("SOPM")},
|
||||||
|
{RecordType::SOUN, fourcc_from_cstr("SOUN")},
|
||||||
|
{RecordType::SPEL, fourcc_from_cstr("SPEL")},
|
||||||
|
{RecordType::SPGD, fourcc_from_cstr("SPGD")},
|
||||||
|
{RecordType::STAT, fourcc_from_cstr("STAT")},
|
||||||
|
{RecordType::TACT, fourcc_from_cstr("TACT")},
|
||||||
|
{RecordType::TES4, fourcc_from_cstr("TES4")},
|
||||||
|
{RecordType::TREE, fourcc_from_cstr("TREE")},
|
||||||
|
{RecordType::TXST, fourcc_from_cstr("TXST")},
|
||||||
|
{RecordType::VOLI, fourcc_from_cstr("VOLI")},
|
||||||
|
{RecordType::VTYP, fourcc_from_cstr("VTYP")},
|
||||||
|
{RecordType::WATR, fourcc_from_cstr("WATR")},
|
||||||
|
{RecordType::WEAP, fourcc_from_cstr("WEAP")},
|
||||||
|
{RecordType::WOOP, fourcc_from_cstr("WOOP")},
|
||||||
|
{RecordType::WRLD, fourcc_from_cstr("WRLD")},
|
||||||
|
{RecordType::WTHR, fourcc_from_cstr("WTHR")},
|
||||||
};
|
};
|
||||||
|
|
||||||
static constexpr std::pair<RecordType, std::string_view> record_type_name_map_builtin[] {
|
static constexpr std::pair<RecordType, std::string_view> record_type_name_map_builtin[] {
|
||||||
@@ -405,14 +473,14 @@ static constexpr std::pair<RefrFlag, std::string_view> refr_flag_description_map
|
|||||||
{{RecordType::ACTI, 26}, "Filter (Collision Geometry)" },
|
{{RecordType::ACTI, 26}, "Filter (Collision Geometry)" },
|
||||||
{{RecordType::ACTI, 27}, "Bounding Box (Collision Geometry)"},
|
{{RecordType::ACTI, 27}, "Bounding Box (Collision Geometry)"},
|
||||||
{{RecordType::ACTI, 28}, "Reflected By Auto Water" },
|
{{RecordType::ACTI, 28}, "Reflected By Auto Water" },
|
||||||
{{RecordType::ACTI, 29}, "Don''t Havok Settle" },
|
{{RecordType::ACTI, 29}, "Don't Havok Settle" },
|
||||||
{{RecordType::ACTI, 30}, "No Respawn" },
|
{{RecordType::ACTI, 30}, "No Respawn" },
|
||||||
{{RecordType::ACTI, 31}, "Multibound" },
|
{{RecordType::ACTI, 31}, "Multibound" },
|
||||||
{{RecordType::ADDN, 10}, "Persistent" },
|
{{RecordType::ADDN, 10}, "Persistent" },
|
||||||
{{RecordType::ADDN, 11}, "Initially Disabled" },
|
{{RecordType::ADDN, 11}, "Initially Disabled" },
|
||||||
{{RecordType::ADDN, 16}, "Is Full LOD" },
|
{{RecordType::ADDN, 16}, "Is Full LOD" },
|
||||||
{{RecordType::ADDN, 28}, "Reflected By Auto Water" },
|
{{RecordType::ADDN, 28}, "Reflected By Auto Water" },
|
||||||
{{RecordType::ADDN, 29}, "Don''t Havok Settle" },
|
{{RecordType::ADDN, 29}, "Don't Havok Settle" },
|
||||||
{{RecordType::ADDN, 30}, "No Respawn" },
|
{{RecordType::ADDN, 30}, "No Respawn" },
|
||||||
{{RecordType::ADDN, 31}, "Multibound" },
|
{{RecordType::ADDN, 31}, "Multibound" },
|
||||||
{{RecordType::ALCH, 10}, "Persistent" },
|
{{RecordType::ALCH, 10}, "Persistent" },
|
||||||
@@ -420,7 +488,7 @@ static constexpr std::pair<RefrFlag, std::string_view> refr_flag_description_map
|
|||||||
{{RecordType::ALCH, 16}, "Is Full LOD" },
|
{{RecordType::ALCH, 16}, "Is Full LOD" },
|
||||||
{{RecordType::ALCH, 25}, "No AI Acquire" },
|
{{RecordType::ALCH, 25}, "No AI Acquire" },
|
||||||
{{RecordType::ALCH, 28}, "Reflected By Auto Water" },
|
{{RecordType::ALCH, 28}, "Reflected By Auto Water" },
|
||||||
{{RecordType::ALCH, 29}, "Don''t Havok Settle" },
|
{{RecordType::ALCH, 29}, "Don't Havok Settle" },
|
||||||
{{RecordType::ALCH, 30}, "No Respawn" },
|
{{RecordType::ALCH, 30}, "No Respawn" },
|
||||||
{{RecordType::ALCH, 31}, "Multibound" },
|
{{RecordType::ALCH, 31}, "Multibound" },
|
||||||
{{RecordType::AMMO, 10}, "Persistent" },
|
{{RecordType::AMMO, 10}, "Persistent" },
|
||||||
@@ -428,7 +496,7 @@ static constexpr std::pair<RefrFlag, std::string_view> refr_flag_description_map
|
|||||||
{{RecordType::AMMO, 16}, "Is Full LOD" },
|
{{RecordType::AMMO, 16}, "Is Full LOD" },
|
||||||
{{RecordType::AMMO, 25}, "No AI Acquire" },
|
{{RecordType::AMMO, 25}, "No AI Acquire" },
|
||||||
{{RecordType::AMMO, 28}, "Reflected By Auto Water" },
|
{{RecordType::AMMO, 28}, "Reflected By Auto Water" },
|
||||||
{{RecordType::AMMO, 29}, "Don''t Havok Settle" },
|
{{RecordType::AMMO, 29}, "Don't Havok Settle" },
|
||||||
{{RecordType::AMMO, 30}, "No Respawn" },
|
{{RecordType::AMMO, 30}, "No Respawn" },
|
||||||
{{RecordType::AMMO, 31}, "Multibound" },
|
{{RecordType::AMMO, 31}, "Multibound" },
|
||||||
{{RecordType::ARMO, 10}, "Persistent" },
|
{{RecordType::ARMO, 10}, "Persistent" },
|
||||||
@@ -436,7 +504,7 @@ static constexpr std::pair<RefrFlag, std::string_view> refr_flag_description_map
|
|||||||
{{RecordType::ARMO, 16}, "Is Full LOD" },
|
{{RecordType::ARMO, 16}, "Is Full LOD" },
|
||||||
{{RecordType::ARMO, 25}, "No AI Acquire" },
|
{{RecordType::ARMO, 25}, "No AI Acquire" },
|
||||||
{{RecordType::ARMO, 28}, "Reflected By Auto Water" },
|
{{RecordType::ARMO, 28}, "Reflected By Auto Water" },
|
||||||
{{RecordType::ARMO, 29}, "Don''t Havok Settle" },
|
{{RecordType::ARMO, 29}, "Don't Havok Settle" },
|
||||||
{{RecordType::ARMO, 30}, "No Respawn" },
|
{{RecordType::ARMO, 30}, "No Respawn" },
|
||||||
{{RecordType::ARMO, 31}, "Multibound" },
|
{{RecordType::ARMO, 31}, "Multibound" },
|
||||||
{{RecordType::BOOK, 10}, "Persistent" },
|
{{RecordType::BOOK, 10}, "Persistent" },
|
||||||
@@ -444,7 +512,7 @@ static constexpr std::pair<RefrFlag, std::string_view> refr_flag_description_map
|
|||||||
{{RecordType::BOOK, 16}, "Is Full LOD" },
|
{{RecordType::BOOK, 16}, "Is Full LOD" },
|
||||||
{{RecordType::BOOK, 25}, "No AI Acquire" },
|
{{RecordType::BOOK, 25}, "No AI Acquire" },
|
||||||
{{RecordType::BOOK, 28}, "Reflected By Auto Water" },
|
{{RecordType::BOOK, 28}, "Reflected By Auto Water" },
|
||||||
{{RecordType::BOOK, 29}, "Don''t Havok Settle" },
|
{{RecordType::BOOK, 29}, "Don't Havok Settle" },
|
||||||
{{RecordType::BOOK, 30}, "No Respawn" },
|
{{RecordType::BOOK, 30}, "No Respawn" },
|
||||||
{{RecordType::BOOK, 31}, "Multibound" },
|
{{RecordType::BOOK, 31}, "Multibound" },
|
||||||
{{RecordType::CONT, 10}, "Persistent" },
|
{{RecordType::CONT, 10}, "Persistent" },
|
||||||
@@ -454,7 +522,7 @@ static constexpr std::pair<RefrFlag, std::string_view> refr_flag_description_map
|
|||||||
{{RecordType::CONT, 26}, "Filter (Collision Geometry)" },
|
{{RecordType::CONT, 26}, "Filter (Collision Geometry)" },
|
||||||
{{RecordType::CONT, 27}, "Bounding Box (Collision Geometry)"},
|
{{RecordType::CONT, 27}, "Bounding Box (Collision Geometry)"},
|
||||||
{{RecordType::CONT, 28}, "Reflected By Auto Water" },
|
{{RecordType::CONT, 28}, "Reflected By Auto Water" },
|
||||||
{{RecordType::CONT, 29}, "Don''t Havok Settle" },
|
{{RecordType::CONT, 29}, "Don't Havok Settle" },
|
||||||
{{RecordType::CONT, 30}, "Ground" },
|
{{RecordType::CONT, 30}, "Ground" },
|
||||||
{{RecordType::CONT, 31}, "Multibound" },
|
{{RecordType::CONT, 31}, "Multibound" },
|
||||||
{{RecordType::DOOR, 6}, "Hidden From Local Map" },
|
{{RecordType::DOOR, 6}, "Hidden From Local Map" },
|
||||||
@@ -465,7 +533,7 @@ static constexpr std::pair<RefrFlag, std::string_view> refr_flag_description_map
|
|||||||
{{RecordType::DOOR, 26}, "Filter (Collision Geometry)" },
|
{{RecordType::DOOR, 26}, "Filter (Collision Geometry)" },
|
||||||
{{RecordType::DOOR, 27}, "Bounding Box (Collision Geometry)"},
|
{{RecordType::DOOR, 27}, "Bounding Box (Collision Geometry)"},
|
||||||
{{RecordType::DOOR, 28}, "Reflected By Auto Water" },
|
{{RecordType::DOOR, 28}, "Reflected By Auto Water" },
|
||||||
{{RecordType::DOOR, 29}, "Don''t Havok Settle" },
|
{{RecordType::DOOR, 29}, "Don't Havok Settle" },
|
||||||
{{RecordType::DOOR, 30}, "No Respawn" },
|
{{RecordType::DOOR, 30}, "No Respawn" },
|
||||||
{{RecordType::DOOR, 31}, "Multibound" },
|
{{RecordType::DOOR, 31}, "Multibound" },
|
||||||
{{RecordType::FLOR, 9}, "Hidden From Local Map" },
|
{{RecordType::FLOR, 9}, "Hidden From Local Map" },
|
||||||
@@ -477,7 +545,7 @@ static constexpr std::pair<RefrFlag, std::string_view> refr_flag_description_map
|
|||||||
{{RecordType::FLOR, 26}, "Filter (Collision Geometry)" },
|
{{RecordType::FLOR, 26}, "Filter (Collision Geometry)" },
|
||||||
{{RecordType::FLOR, 27}, "Bounding Box (Collision Geometry)"},
|
{{RecordType::FLOR, 27}, "Bounding Box (Collision Geometry)"},
|
||||||
{{RecordType::FLOR, 28}, "Reflected By Auto Water" },
|
{{RecordType::FLOR, 28}, "Reflected By Auto Water" },
|
||||||
{{RecordType::FLOR, 29}, "Don''t Havok Settle" },
|
{{RecordType::FLOR, 29}, "Don't Havok Settle" },
|
||||||
{{RecordType::FLOR, 30}, "No Respawn" },
|
{{RecordType::FLOR, 30}, "No Respawn" },
|
||||||
{{RecordType::FLOR, 31}, "Multibound" },
|
{{RecordType::FLOR, 31}, "Multibound" },
|
||||||
{{RecordType::INGR, 10}, "Persistent" },
|
{{RecordType::INGR, 10}, "Persistent" },
|
||||||
@@ -485,7 +553,7 @@ static constexpr std::pair<RefrFlag, std::string_view> refr_flag_description_map
|
|||||||
{{RecordType::INGR, 16}, "Is Full LOD" },
|
{{RecordType::INGR, 16}, "Is Full LOD" },
|
||||||
{{RecordType::INGR, 25}, "No AI Acquire" },
|
{{RecordType::INGR, 25}, "No AI Acquire" },
|
||||||
{{RecordType::INGR, 28}, "Reflected By Auto Water" },
|
{{RecordType::INGR, 28}, "Reflected By Auto Water" },
|
||||||
{{RecordType::INGR, 29}, "Don''t Havok Settle" },
|
{{RecordType::INGR, 29}, "Don't Havok Settle" },
|
||||||
{{RecordType::INGR, 30}, "No Respawn" },
|
{{RecordType::INGR, 30}, "No Respawn" },
|
||||||
{{RecordType::INGR, 31}, "Multibound" },
|
{{RecordType::INGR, 31}, "Multibound" },
|
||||||
{{RecordType::KEYM, 10}, "Persistent" },
|
{{RecordType::KEYM, 10}, "Persistent" },
|
||||||
@@ -493,18 +561,18 @@ static constexpr std::pair<RefrFlag, std::string_view> refr_flag_description_map
|
|||||||
{{RecordType::KEYM, 16}, "Is Full LOD" },
|
{{RecordType::KEYM, 16}, "Is Full LOD" },
|
||||||
{{RecordType::KEYM, 25}, "No AI Acquire" },
|
{{RecordType::KEYM, 25}, "No AI Acquire" },
|
||||||
{{RecordType::KEYM, 28}, "Reflected By Auto Water" },
|
{{RecordType::KEYM, 28}, "Reflected By Auto Water" },
|
||||||
{{RecordType::KEYM, 29}, "Don''t Havok Settle" },
|
{{RecordType::KEYM, 29}, "Don't Havok Settle" },
|
||||||
{{RecordType::KEYM, 30}, "No Respawn" },
|
{{RecordType::KEYM, 30}, "No Respawn" },
|
||||||
{{RecordType::KEYM, 31}, "Multibound" },
|
{{RecordType::KEYM, 31}, "Multibound" },
|
||||||
{{RecordType::LIGH, 8}, "Doesn''t Light Water" },
|
{{RecordType::LIGH, 8}, "Doesn't Light Water" },
|
||||||
{{RecordType::LIGH, 9}, "Casts Shadows" },
|
{{RecordType::LIGH, 9}, "Casts Shadows" },
|
||||||
{{RecordType::LIGH, 10}, "Persistent" },
|
{{RecordType::LIGH, 10}, "Persistent" },
|
||||||
{{RecordType::LIGH, 11}, "Initially Disabled" },
|
{{RecordType::LIGH, 11}, "Initially Disabled" },
|
||||||
{{RecordType::LIGH, 16}, "Never Fades" },
|
{{RecordType::LIGH, 16}, "Never Fades" },
|
||||||
{{RecordType::LIGH, 17}, "Doesn''t Light Landscape" },
|
{{RecordType::LIGH, 17}, "Doesn't Light Landscape" },
|
||||||
{{RecordType::LIGH, 25}, "No AI Acquire" },
|
{{RecordType::LIGH, 25}, "No AI Acquire" },
|
||||||
{{RecordType::LIGH, 28}, "Reflected By Auto Water" },
|
{{RecordType::LIGH, 28}, "Reflected By Auto Water" },
|
||||||
{{RecordType::LIGH, 29}, "Don''t Havok Settle" },
|
{{RecordType::LIGH, 29}, "Don't Havok Settle" },
|
||||||
{{RecordType::LIGH, 30}, "No Respawn" },
|
{{RecordType::LIGH, 30}, "No Respawn" },
|
||||||
{{RecordType::LIGH, 31}, "Multibound" },
|
{{RecordType::LIGH, 31}, "Multibound" },
|
||||||
{{RecordType::MISC, 10}, "Persistent" },
|
{{RecordType::MISC, 10}, "Persistent" },
|
||||||
@@ -512,7 +580,7 @@ static constexpr std::pair<RefrFlag, std::string_view> refr_flag_description_map
|
|||||||
{{RecordType::MISC, 16}, "Is Full LOD" },
|
{{RecordType::MISC, 16}, "Is Full LOD" },
|
||||||
{{RecordType::MISC, 25}, "No AI Acquire" },
|
{{RecordType::MISC, 25}, "No AI Acquire" },
|
||||||
{{RecordType::MISC, 28}, "Reflected By Auto Water" },
|
{{RecordType::MISC, 28}, "Reflected By Auto Water" },
|
||||||
{{RecordType::MISC, 29}, "Don''t Havok Settle" },
|
{{RecordType::MISC, 29}, "Don't Havok Settle" },
|
||||||
{{RecordType::MISC, 30}, "No Respawn" },
|
{{RecordType::MISC, 30}, "No Respawn" },
|
||||||
{{RecordType::MISC, 31}, "Multibound" },
|
{{RecordType::MISC, 31}, "Multibound" },
|
||||||
{{RecordType::MSTT, 9}, "Motion Blur" },
|
{{RecordType::MSTT, 9}, "Motion Blur" },
|
||||||
@@ -522,7 +590,7 @@ static constexpr std::pair<RefrFlag, std::string_view> refr_flag_description_map
|
|||||||
{{RecordType::MSTT, 26}, "Filter (Collision Geometry)" },
|
{{RecordType::MSTT, 26}, "Filter (Collision Geometry)" },
|
||||||
{{RecordType::MSTT, 27}, "Bounding Box (Collision Geometry)"},
|
{{RecordType::MSTT, 27}, "Bounding Box (Collision Geometry)"},
|
||||||
{{RecordType::MSTT, 28}, "Reflected By Auto Water" },
|
{{RecordType::MSTT, 28}, "Reflected By Auto Water" },
|
||||||
{{RecordType::MSTT, 29}, "Don''t Havok Settle" },
|
{{RecordType::MSTT, 29}, "Don't Havok Settle" },
|
||||||
{{RecordType::MSTT, 30}, "No Respawn" },
|
{{RecordType::MSTT, 30}, "No Respawn" },
|
||||||
{{RecordType::MSTT, 31}, "Multibound" },
|
{{RecordType::MSTT, 31}, "Multibound" },
|
||||||
{{RecordType::SCRL, 10}, "Persistent" },
|
{{RecordType::SCRL, 10}, "Persistent" },
|
||||||
@@ -530,7 +598,7 @@ static constexpr std::pair<RefrFlag, std::string_view> refr_flag_description_map
|
|||||||
{{RecordType::SCRL, 16}, "Is Full LOD" },
|
{{RecordType::SCRL, 16}, "Is Full LOD" },
|
||||||
{{RecordType::SCRL, 25}, "No AI Acquire" },
|
{{RecordType::SCRL, 25}, "No AI Acquire" },
|
||||||
{{RecordType::SCRL, 28}, "Reflected By Auto Water" },
|
{{RecordType::SCRL, 28}, "Reflected By Auto Water" },
|
||||||
{{RecordType::SCRL, 29}, "Don''t Havok Settle" },
|
{{RecordType::SCRL, 29}, "Don't Havok Settle" },
|
||||||
{{RecordType::SCRL, 30}, "No Respawn" },
|
{{RecordType::SCRL, 30}, "No Respawn" },
|
||||||
{{RecordType::SCRL, 31}, "Multibound" },
|
{{RecordType::SCRL, 31}, "Multibound" },
|
||||||
{{RecordType::SLGM, 10}, "Persistent" },
|
{{RecordType::SLGM, 10}, "Persistent" },
|
||||||
@@ -538,7 +606,7 @@ static constexpr std::pair<RefrFlag, std::string_view> refr_flag_description_map
|
|||||||
{{RecordType::SLGM, 16}, "Is Full LOD" },
|
{{RecordType::SLGM, 16}, "Is Full LOD" },
|
||||||
{{RecordType::SLGM, 25}, "No AI Acquire" },
|
{{RecordType::SLGM, 25}, "No AI Acquire" },
|
||||||
{{RecordType::SLGM, 28}, "Reflected By Auto Water" },
|
{{RecordType::SLGM, 28}, "Reflected By Auto Water" },
|
||||||
{{RecordType::SLGM, 29}, "Don''t Havok Settle" },
|
{{RecordType::SLGM, 29}, "Don't Havok Settle" },
|
||||||
{{RecordType::SLGM, 30}, "No Respawn" },
|
{{RecordType::SLGM, 30}, "No Respawn" },
|
||||||
{{RecordType::SLGM, 31}, "Multibound" },
|
{{RecordType::SLGM, 31}, "Multibound" },
|
||||||
{{RecordType::STAT, 9}, "Hidden From Local Map" },
|
{{RecordType::STAT, 9}, "Hidden From Local Map" },
|
||||||
@@ -550,7 +618,7 @@ static constexpr std::pair<RefrFlag, std::string_view> refr_flag_description_map
|
|||||||
{{RecordType::STAT, 26}, "Filter (Collision Geometry)" },
|
{{RecordType::STAT, 26}, "Filter (Collision Geometry)" },
|
||||||
{{RecordType::STAT, 27}, "Bounding Box (Collision Geometry)"},
|
{{RecordType::STAT, 27}, "Bounding Box (Collision Geometry)"},
|
||||||
{{RecordType::STAT, 28}, "Reflected By Auto Water" },
|
{{RecordType::STAT, 28}, "Reflected By Auto Water" },
|
||||||
{{RecordType::STAT, 29}, "Don''t Havok Settle" },
|
{{RecordType::STAT, 29}, "Don't Havok Settle" },
|
||||||
{{RecordType::STAT, 30}, "No Respawn" },
|
{{RecordType::STAT, 30}, "No Respawn" },
|
||||||
{{RecordType::STAT, 31}, "Multibound" },
|
{{RecordType::STAT, 31}, "Multibound" },
|
||||||
{{RecordType::TREE, 9}, "Hidden From Local Map" },
|
{{RecordType::TREE, 9}, "Hidden From Local Map" },
|
||||||
@@ -562,7 +630,7 @@ static constexpr std::pair<RefrFlag, std::string_view> refr_flag_description_map
|
|||||||
{{RecordType::TREE, 26}, "Filter (Collision Geometry)" },
|
{{RecordType::TREE, 26}, "Filter (Collision Geometry)" },
|
||||||
{{RecordType::TREE, 27}, "Bounding Box (Collision Geometry)"},
|
{{RecordType::TREE, 27}, "Bounding Box (Collision Geometry)"},
|
||||||
{{RecordType::TREE, 28}, "Reflected By Auto Water" },
|
{{RecordType::TREE, 28}, "Reflected By Auto Water" },
|
||||||
{{RecordType::TREE, 29}, "Don''t Havok Settle" },
|
{{RecordType::TREE, 29}, "Don't Havok Settle" },
|
||||||
{{RecordType::TREE, 30}, "No Respawn" },
|
{{RecordType::TREE, 30}, "No Respawn" },
|
||||||
{{RecordType::TREE, 31}, "Multibound" },
|
{{RecordType::TREE, 31}, "Multibound" },
|
||||||
{{RecordType::WEAP, 10}, "Persistent" },
|
{{RecordType::WEAP, 10}, "Persistent" },
|
||||||
@@ -570,7 +638,7 @@ static constexpr std::pair<RefrFlag, std::string_view> refr_flag_description_map
|
|||||||
{{RecordType::WEAP, 16}, "Is Full LOD" },
|
{{RecordType::WEAP, 16}, "Is Full LOD" },
|
||||||
{{RecordType::WEAP, 25}, "No AI Acquire" },
|
{{RecordType::WEAP, 25}, "No AI Acquire" },
|
||||||
{{RecordType::WEAP, 28}, "Reflected By Auto Water" },
|
{{RecordType::WEAP, 28}, "Reflected By Auto Water" },
|
||||||
{{RecordType::WEAP, 29}, "Don''t Havok Settle" },
|
{{RecordType::WEAP, 29}, "Don't Havok Settle" },
|
||||||
{{RecordType::WEAP, 30}, "No Respawn" },
|
{{RecordType::WEAP, 30}, "No Respawn" },
|
||||||
{{RecordType::WEAP, 31}, "Multibound" },
|
{{RecordType::WEAP, 31}, "Multibound" },
|
||||||
};
|
};
|
||||||
|
|||||||
@@ -164,7 +164,7 @@ record_fourcc_map = Map(
|
|||||||
first_name = "record_type",
|
first_name = "record_type",
|
||||||
second_name = "fourcc",
|
second_name = "fourcc",
|
||||||
reverse = True,
|
reverse = True,
|
||||||
formats = ["RecordType::{0}", ", FourCC(\"{0}\")"],
|
formats = ["RecordType::{0}", ", fourcc_from_cstr(\"{0}\")"],
|
||||||
data = [(x['fourcc'], ) for x in record_data]
|
data = [(x['fourcc'], ) for x in record_data]
|
||||||
)
|
)
|
||||||
flag_desc_map = Map(
|
flag_desc_map = Map(
|
||||||
|
|||||||
@@ -66,7 +66,9 @@ for index, flist in enumerate(flag_lists):
|
|||||||
for line in flist.strip().split('\n'):
|
for line in flist.strip().split('\n'):
|
||||||
match = re_flag_line.match(line).groups()
|
match = re_flag_line.match(line).groups()
|
||||||
assert len(match) == 2, "Could not parse flag line."
|
assert len(match) == 2, "Could not parse flag line."
|
||||||
flags += [Flag(int(match[0]), match[1])]
|
# fix pascal '' in string literal oddity
|
||||||
|
desc = match[1].replace("''", "'")
|
||||||
|
flags += [Flag(int(match[0]), desc)]
|
||||||
index_to_flag_list[index] = flags
|
index_to_flag_list[index] = flags
|
||||||
|
|
||||||
# create list of records
|
# create list of records
|
||||||
|
|||||||
@@ -40,7 +40,7 @@
|
|||||||
},
|
},
|
||||||
{
|
{
|
||||||
"bit": 29,
|
"bit": 29,
|
||||||
"description": "Don''t Havok Settle"
|
"description": "Don't Havok Settle"
|
||||||
},
|
},
|
||||||
{
|
{
|
||||||
"bit": 30,
|
"bit": 30,
|
||||||
@@ -73,7 +73,7 @@
|
|||||||
},
|
},
|
||||||
{
|
{
|
||||||
"bit": 29,
|
"bit": 29,
|
||||||
"description": "Don''t Havok Settle"
|
"description": "Don't Havok Settle"
|
||||||
},
|
},
|
||||||
{
|
{
|
||||||
"bit": 30,
|
"bit": 30,
|
||||||
@@ -110,7 +110,7 @@
|
|||||||
},
|
},
|
||||||
{
|
{
|
||||||
"bit": 29,
|
"bit": 29,
|
||||||
"description": "Don''t Havok Settle"
|
"description": "Don't Havok Settle"
|
||||||
},
|
},
|
||||||
{
|
{
|
||||||
"bit": 30,
|
"bit": 30,
|
||||||
@@ -147,7 +147,7 @@
|
|||||||
},
|
},
|
||||||
{
|
{
|
||||||
"bit": 29,
|
"bit": 29,
|
||||||
"description": "Don''t Havok Settle"
|
"description": "Don't Havok Settle"
|
||||||
},
|
},
|
||||||
{
|
{
|
||||||
"bit": 30,
|
"bit": 30,
|
||||||
@@ -184,7 +184,7 @@
|
|||||||
},
|
},
|
||||||
{
|
{
|
||||||
"bit": 29,
|
"bit": 29,
|
||||||
"description": "Don''t Havok Settle"
|
"description": "Don't Havok Settle"
|
||||||
},
|
},
|
||||||
{
|
{
|
||||||
"bit": 30,
|
"bit": 30,
|
||||||
@@ -221,7 +221,7 @@
|
|||||||
},
|
},
|
||||||
{
|
{
|
||||||
"bit": 29,
|
"bit": 29,
|
||||||
"description": "Don''t Havok Settle"
|
"description": "Don't Havok Settle"
|
||||||
},
|
},
|
||||||
{
|
{
|
||||||
"bit": 30,
|
"bit": 30,
|
||||||
@@ -266,7 +266,7 @@
|
|||||||
},
|
},
|
||||||
{
|
{
|
||||||
"bit": 29,
|
"bit": 29,
|
||||||
"description": "Don''t Havok Settle"
|
"description": "Don't Havok Settle"
|
||||||
},
|
},
|
||||||
{
|
{
|
||||||
"bit": 30,
|
"bit": 30,
|
||||||
@@ -315,7 +315,7 @@
|
|||||||
},
|
},
|
||||||
{
|
{
|
||||||
"bit": 29,
|
"bit": 29,
|
||||||
"description": "Don''t Havok Settle"
|
"description": "Don't Havok Settle"
|
||||||
},
|
},
|
||||||
{
|
{
|
||||||
"bit": 30,
|
"bit": 30,
|
||||||
@@ -368,7 +368,7 @@
|
|||||||
},
|
},
|
||||||
{
|
{
|
||||||
"bit": 29,
|
"bit": 29,
|
||||||
"description": "Don''t Havok Settle"
|
"description": "Don't Havok Settle"
|
||||||
},
|
},
|
||||||
{
|
{
|
||||||
"bit": 30,
|
"bit": 30,
|
||||||
@@ -405,7 +405,7 @@
|
|||||||
},
|
},
|
||||||
{
|
{
|
||||||
"bit": 29,
|
"bit": 29,
|
||||||
"description": "Don''t Havok Settle"
|
"description": "Don't Havok Settle"
|
||||||
},
|
},
|
||||||
{
|
{
|
||||||
"bit": 30,
|
"bit": 30,
|
||||||
@@ -442,7 +442,7 @@
|
|||||||
},
|
},
|
||||||
{
|
{
|
||||||
"bit": 29,
|
"bit": 29,
|
||||||
"description": "Don''t Havok Settle"
|
"description": "Don't Havok Settle"
|
||||||
},
|
},
|
||||||
{
|
{
|
||||||
"bit": 30,
|
"bit": 30,
|
||||||
@@ -459,7 +459,7 @@
|
|||||||
"flags": [
|
"flags": [
|
||||||
{
|
{
|
||||||
"bit": 8,
|
"bit": 8,
|
||||||
"description": "Doesn''t Light Water"
|
"description": "Doesn't Light Water"
|
||||||
},
|
},
|
||||||
{
|
{
|
||||||
"bit": 9,
|
"bit": 9,
|
||||||
@@ -479,7 +479,7 @@
|
|||||||
},
|
},
|
||||||
{
|
{
|
||||||
"bit": 17,
|
"bit": 17,
|
||||||
"description": "Doesn''t Light Landscape"
|
"description": "Doesn't Light Landscape"
|
||||||
},
|
},
|
||||||
{
|
{
|
||||||
"bit": 25,
|
"bit": 25,
|
||||||
@@ -491,7 +491,7 @@
|
|||||||
},
|
},
|
||||||
{
|
{
|
||||||
"bit": 29,
|
"bit": 29,
|
||||||
"description": "Don''t Havok Settle"
|
"description": "Don't Havok Settle"
|
||||||
},
|
},
|
||||||
{
|
{
|
||||||
"bit": 30,
|
"bit": 30,
|
||||||
@@ -528,7 +528,7 @@
|
|||||||
},
|
},
|
||||||
{
|
{
|
||||||
"bit": 29,
|
"bit": 29,
|
||||||
"description": "Don''t Havok Settle"
|
"description": "Don't Havok Settle"
|
||||||
},
|
},
|
||||||
{
|
{
|
||||||
"bit": 30,
|
"bit": 30,
|
||||||
@@ -573,7 +573,7 @@
|
|||||||
},
|
},
|
||||||
{
|
{
|
||||||
"bit": 29,
|
"bit": 29,
|
||||||
"description": "Don''t Havok Settle"
|
"description": "Don't Havok Settle"
|
||||||
},
|
},
|
||||||
{
|
{
|
||||||
"bit": 30,
|
"bit": 30,
|
||||||
@@ -610,7 +610,7 @@
|
|||||||
},
|
},
|
||||||
{
|
{
|
||||||
"bit": 29,
|
"bit": 29,
|
||||||
"description": "Don''t Havok Settle"
|
"description": "Don't Havok Settle"
|
||||||
},
|
},
|
||||||
{
|
{
|
||||||
"bit": 30,
|
"bit": 30,
|
||||||
@@ -647,7 +647,7 @@
|
|||||||
},
|
},
|
||||||
{
|
{
|
||||||
"bit": 29,
|
"bit": 29,
|
||||||
"description": "Don''t Havok Settle"
|
"description": "Don't Havok Settle"
|
||||||
},
|
},
|
||||||
{
|
{
|
||||||
"bit": 30,
|
"bit": 30,
|
||||||
@@ -700,7 +700,7 @@
|
|||||||
},
|
},
|
||||||
{
|
{
|
||||||
"bit": 29,
|
"bit": 29,
|
||||||
"description": "Don''t Havok Settle"
|
"description": "Don't Havok Settle"
|
||||||
},
|
},
|
||||||
{
|
{
|
||||||
"bit": 30,
|
"bit": 30,
|
||||||
@@ -753,7 +753,7 @@
|
|||||||
},
|
},
|
||||||
{
|
{
|
||||||
"bit": 29,
|
"bit": 29,
|
||||||
"description": "Don''t Havok Settle"
|
"description": "Don't Havok Settle"
|
||||||
},
|
},
|
||||||
{
|
{
|
||||||
"bit": 30,
|
"bit": 30,
|
||||||
@@ -790,7 +790,7 @@
|
|||||||
},
|
},
|
||||||
{
|
{
|
||||||
"bit": 29,
|
"bit": 29,
|
||||||
"description": "Don''t Havok Settle"
|
"description": "Don't Havok Settle"
|
||||||
},
|
},
|
||||||
{
|
{
|
||||||
"bit": 30,
|
"bit": 30,
|
||||||
|
|||||||
Reference in New Issue
Block a user