Files
Navmesher/Navmesher/esx_reader_lut.cpp

688 lines
42 KiB
C++

#include "esx_reader.hpp"
using namespace esxr;
static constexpr std::pair<GroupType, std::string_view> group_type_name_map_builtin[] {
{GroupType::Top , "Top Type" },
{GroupType::WorldChildren , "World Children" },
{GroupType::InteriorCellBlock , "Interior Cell Block" },
{GroupType::InteriorCellSubBlock , "Interior Cell Sub-Block" },
{GroupType::ExteriorCellBlock , "Exterior Cell" },
{GroupType::ExteriorCellSubBlock , "Exterior Cell Sub-Block" },
{GroupType::CellChildren , "Cell Children" },
{GroupType::TopicChildren , "Topic Children" },
{GroupType::CellPersistentChildren, "Cell Persistent Children"},
{GroupType::CellTemporaryChildren , "Cell Temporary Children" },
};
static constexpr std::pair<RecordType, FourCC> record_type_fourcc_map_builtin[] {
{RecordType::AACT, fourcc_from_cstr("AACT")},
{RecordType::ACHR, fourcc_from_cstr("ACHR")},
{RecordType::ACTI, fourcc_from_cstr("ACTI")},
{RecordType::ADDN, fourcc_from_cstr("ADDN")},
{RecordType::ALCH, fourcc_from_cstr("ALCH")},
{RecordType::AMMO, fourcc_from_cstr("AMMO")},
{RecordType::ANIO, fourcc_from_cstr("ANIO")},
{RecordType::APPA, fourcc_from_cstr("APPA")},
{RecordType::ARMA, fourcc_from_cstr("ARMA")},
{RecordType::ARMO, fourcc_from_cstr("ARMO")},
{RecordType::ARTO, fourcc_from_cstr("ARTO")},
{RecordType::ASPC, fourcc_from_cstr("ASPC")},
{RecordType::ASTP, fourcc_from_cstr("ASTP")},
{RecordType::AVIF, fourcc_from_cstr("AVIF")},
{RecordType::BOOK, fourcc_from_cstr("BOOK")},
{RecordType::BPTD, fourcc_from_cstr("BPTD")},
{RecordType::CAMS, fourcc_from_cstr("CAMS")},
{RecordType::CELL, fourcc_from_cstr("CELL")},
{RecordType::CLAS, fourcc_from_cstr("CLAS")},
{RecordType::CLDC, fourcc_from_cstr("CLDC")},
{RecordType::CLFM, fourcc_from_cstr("CLFM")},
{RecordType::CLMT, fourcc_from_cstr("CLMT")},
{RecordType::COBJ, fourcc_from_cstr("COBJ")},
{RecordType::COLL, fourcc_from_cstr("COLL")},
{RecordType::CONT, fourcc_from_cstr("CONT")},
{RecordType::CPTH, fourcc_from_cstr("CPTH")},
{RecordType::CSTY, fourcc_from_cstr("CSTY")},
{RecordType::DEBR, fourcc_from_cstr("DEBR")},
{RecordType::DIAL, fourcc_from_cstr("DIAL")},
{RecordType::DLBR, fourcc_from_cstr("DLBR")},
{RecordType::DLVW, fourcc_from_cstr("DLVW")},
{RecordType::DOBJ, fourcc_from_cstr("DOBJ")},
{RecordType::DOOR, fourcc_from_cstr("DOOR")},
{RecordType::DUAL, fourcc_from_cstr("DUAL")},
{RecordType::ECZN, fourcc_from_cstr("ECZN")},
{RecordType::EFSH, fourcc_from_cstr("EFSH")},
{RecordType::ENCH, fourcc_from_cstr("ENCH")},
{RecordType::EQUP, fourcc_from_cstr("EQUP")},
{RecordType::EXPL, fourcc_from_cstr("EXPL")},
{RecordType::EYES, fourcc_from_cstr("EYES")},
{RecordType::FACT, fourcc_from_cstr("FACT")},
{RecordType::FLOR, fourcc_from_cstr("FLOR")},
{RecordType::FLST, fourcc_from_cstr("FLST")},
{RecordType::FSTP, fourcc_from_cstr("FSTP")},
{RecordType::FSTS, fourcc_from_cstr("FSTS")},
{RecordType::FURN, fourcc_from_cstr("FURN")},
{RecordType::GLOB, fourcc_from_cstr("GLOB")},
{RecordType::GMST, fourcc_from_cstr("GMST")},
{RecordType::GRAS, fourcc_from_cstr("GRAS")},
{RecordType::GRUP, fourcc_from_cstr("GRUP")},
{RecordType::HAIR, fourcc_from_cstr("HAIR")},
{RecordType::HAZD, fourcc_from_cstr("HAZD")},
{RecordType::HDPT, fourcc_from_cstr("HDPT")},
{RecordType::IDLE, fourcc_from_cstr("IDLE")},
{RecordType::IDLM, fourcc_from_cstr("IDLM")},
{RecordType::IMAD, fourcc_from_cstr("IMAD")},
{RecordType::IMGS, fourcc_from_cstr("IMGS")},
{RecordType::INFO, fourcc_from_cstr("INFO")},
{RecordType::INGR, fourcc_from_cstr("INGR")},
{RecordType::IPCT, fourcc_from_cstr("IPCT")},
{RecordType::IPDS, fourcc_from_cstr("IPDS")},
{RecordType::KEYM, fourcc_from_cstr("KEYM")},
{RecordType::KYWD, fourcc_from_cstr("KYWD")},
{RecordType::LAND, fourcc_from_cstr("LAND")},
{RecordType::LCRT, fourcc_from_cstr("LCRT")},
{RecordType::LCTN, fourcc_from_cstr("LCTN")},
{RecordType::LENS, fourcc_from_cstr("LENS")},
{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[] {
{RecordType::AACT, "Action" },
{RecordType::ACHR, "Placed NPC" },
{RecordType::ACTI, "Activator" },
{RecordType::ADDN, "Addon Node" },
{RecordType::ALCH, "Ingestible" },
{RecordType::AMMO, "Ammunition" },
{RecordType::ANIO, "Animated Object" },
{RecordType::APPA, "Alchemical Apparatus" },
{RecordType::ARMA, "Armor Addon" },
{RecordType::ARMO, "Armor" },
{RecordType::ARTO, "Art Object" },
{RecordType::ASPC, "Acoustic Space" },
{RecordType::ASTP, "Association Type" },
{RecordType::AVIF, "Actor Value Information" },
{RecordType::BOOK, "Book" },
{RecordType::BPTD, "Body Part Data" },
{RecordType::CAMS, "Camera Shot" },
{RecordType::CELL, "Cell" },
{RecordType::CLAS, "Class" },
{RecordType::CLDC, "CLDC" },
{RecordType::CLFM, "Color" },
{RecordType::CLMT, "Climate" },
{RecordType::COBJ, "Constructible Object" },
{RecordType::COLL, "Collision Layer" },
{RecordType::CONT, "Container" },
{RecordType::CPTH, "Camera Path" },
{RecordType::CSTY, "Combat Style" },
{RecordType::DEBR, "Debris" },
{RecordType::DIAL, "Dialog Topic" },
{RecordType::DLBR, "Dialog Branch" },
{RecordType::DLVW, "Dialog View" },
{RecordType::DOBJ, "Default Object Manager" },
{RecordType::DOOR, "Door" },
{RecordType::DUAL, "Dual Cast Data" },
{RecordType::ECZN, "Encounter Zone" },
{RecordType::EFSH, "Effect Shader" },
{RecordType::ENCH, "Object Effect" },
{RecordType::EQUP, "Equip Type" },
{RecordType::EXPL, "Explosion" },
{RecordType::EYES, "Eyes" },
{RecordType::FACT, "Faction" },
{RecordType::FLOR, "Flora" },
{RecordType::FLST, "FormID List" },
{RecordType::FSTP, "Footstep" },
{RecordType::FSTS, "Footstep Set" },
{RecordType::FURN, "Furniture" },
{RecordType::GLOB, "Global" },
{RecordType::GMST, "Game Setting" },
{RecordType::GRAS, "Grass" },
{RecordType::GRUP, "Group" },
{RecordType::HAIR, "HAIR" },
{RecordType::HAZD, "Hazard" },
{RecordType::HDPT, "Head Part" },
{RecordType::IDLE, "Idle Animation" },
{RecordType::IDLM, "Idle Marker" },
{RecordType::IMAD, "Image Space Adapter" },
{RecordType::IMGS, "Image Space" },
{RecordType::INFO, "Dialog response" },
{RecordType::INGR, "Ingredient" },
{RecordType::IPCT, "Impact" },
{RecordType::IPDS, "Impact Data Set" },
{RecordType::KEYM, "Key" },
{RecordType::KYWD, "Keyword" },
{RecordType::LAND, "Landscape" },
{RecordType::LCRT, "Location Reference Type" },
{RecordType::LCTN, "Location" },
{RecordType::LENS, "Lens Flare" },
{RecordType::LGTM, "Lighting Template" },
{RecordType::LIGH, "Light" },
{RecordType::LSCR, "Load Screen" },
{RecordType::LTEX, "Landscape Texture" },
{RecordType::LVLI, "Leveled Item" },
{RecordType::LVLN, "Leveled NPC" },
{RecordType::LVSP, "Leveled Spell" },
{RecordType::MATO, "Material Object" },
{RecordType::MATT, "Material Type" },
{RecordType::MESG, "Message" },
{RecordType::MGEF, "Magic Effect" },
{RecordType::MISC, "Misc. Item" },
{RecordType::MOVT, "Movement Type" },
{RecordType::MSTT, "Moveable Static" },
{RecordType::MUSC, "Music Type" },
{RecordType::MUST, "Music Track" },
{RecordType::NAVI, "Navigation Mesh Info Map" },
{RecordType::NAVM, "Navigation Mesh" },
{RecordType::NOTE, "Note" },
{RecordType::NPC_, "Non-Player Character (Actor)"},
{RecordType::OTFT, "Outfit" },
{RecordType::PACK, "Package" },
{RecordType::PARW, "Placed Arrow" },
{RecordType::PBAR, "Placed Barrier" },
{RecordType::PBEA, "Placed Beam" },
{RecordType::PCON, "Placed Cone/Voice" },
{RecordType::PERK, "Perk" },
{RecordType::PFLA, "Placed Flame" },
{RecordType::PGRE, "Placed Projectile" },
{RecordType::PHZD, "Placed Hazard" },
{RecordType::PLYR, "Player Reference" },
{RecordType::PMIS, "Placed Missile" },
{RecordType::PROJ, "Projectile" },
{RecordType::PWAT, "PWAT" },
{RecordType::QUST, "Quest" },
{RecordType::RACE, "Race" },
{RecordType::REFR, "Placed Object" },
{RecordType::REGN, "Region" },
{RecordType::RELA, "Relationship" },
{RecordType::REVB, "Reverb Parameters" },
{RecordType::RFCT, "Visual Effect" },
{RecordType::RGDL, "RGDL" },
{RecordType::SCEN, "Scene" },
{RecordType::SCOL, "Static Collection" },
{RecordType::SCPT, "SCPT" },
{RecordType::SCRL, "Scroll" },
{RecordType::SHOU, "Shout" },
{RecordType::SLGM, "Soul Gem" },
{RecordType::SMBN, "Story Manager Branch Node" },
{RecordType::SMEN, "Story Manager Event Node" },
{RecordType::SMQN, "Story Manager Quest Node" },
{RecordType::SNCT, "Sound Category" },
{RecordType::SNDR, "Sound Descriptor" },
{RecordType::SOPM, "Sound Output Model" },
{RecordType::SOUN, "Sound Marker" },
{RecordType::SPEL, "Spell" },
{RecordType::SPGD, "Shader Particle Geometry" },
{RecordType::STAT, "Static" },
{RecordType::TACT, "Talking Activator" },
{RecordType::TES4, "Main File Header" },
{RecordType::TREE, "Tree" },
{RecordType::TXST, "Texture Set" },
{RecordType::VOLI, "Volumetric Lighting" },
{RecordType::VTYP, "Voice Type" },
{RecordType::WATR, "Water" },
{RecordType::WEAP, "Weapon" },
{RecordType::WOOP, "Word of Power" },
{RecordType::WRLD, "Worldspace" },
{RecordType::WTHR, "Weather" },
};
static constexpr std::pair<Flag, std::string_view> flag_description_map_builtin[] {
{{RecordType::ACHR, 9}, "Starts Dead" },
{{RecordType::ACHR, 10}, "Persistent" },
{{RecordType::ACHR, 11}, "Initially Disabled" },
{{RecordType::ACHR, 25}, "No AI Acquire" },
{{RecordType::ACHR, 29}, "Don't Havok Settle" },
{{RecordType::ACTI, 6}, "Has Tree LOD" },
{{RecordType::ACTI, 8}, "Must Update Anims" },
{{RecordType::ACTI, 9}, "Hidden From Local Map" },
{{RecordType::ACTI, 15}, "Has Distant LOD" },
{{RecordType::ACTI, 16}, "Random Anim Start" },
{{RecordType::ACTI, 17}, "Dangerous" },
{{RecordType::ACTI, 20}, "Ignore Object Interaction" },
{{RecordType::ACTI, 23}, "Is Marker" },
{{RecordType::ACTI, 25}, "Obstacle" },
{{RecordType::ACTI, 26}, "NavMesh Generation - Filter" },
{{RecordType::ACTI, 27}, "NavMesh Generation - Bounding Box"},
{{RecordType::ACTI, 29}, "Child Can Use" },
{{RecordType::ACTI, 30}, "NavMesh Generation - Ground" },
{{RecordType::ALCH, 29}, "Medicine" },
{{RecordType::AMMO, 2}, "Non-Playable" },
{{RecordType::ANIO, 9}, "Unknown 9" },
{{RecordType::ARMO, 2}, "Non-Playable" },
{{RecordType::ARMO, 6}, "Shield" },
{{RecordType::ARMO, 10}, "Unknown 10" },
{{RecordType::ARMO, 15}, "Unknown 15" },
{{RecordType::CELL, 10}, "Persistent" },
{{RecordType::CELL, 17}, "Off Limits" },
{{RecordType::CELL, 18}, "Compressed" },
{{RecordType::CELL, 19}, "Can't Wait" },
{{RecordType::CLFM, 2}, "Non-Playable" },
{{RecordType::CONT, 15}, "Has Distant LOD" },
{{RecordType::CONT, 16}, "Random Anim Start" },
{{RecordType::CONT, 25}, "Obstacle" },
{{RecordType::CONT, 26}, "NavMesh Generation - Filter" },
{{RecordType::CONT, 27}, "NavMesh Generation - Bounding Box"},
{{RecordType::CONT, 30}, "NavMesh Generation - Ground" },
{{RecordType::CSTY, 19}, "Allow Dual Wielding" },
{{RecordType::DOOR, 15}, "Has Distant LOD" },
{{RecordType::DOOR, 16}, "Random Anim Start" },
{{RecordType::DOOR, 23}, "Is Marker" },
{{RecordType::EYES, 2}, "Non-Playable" },
{{RecordType::FURN, 7}, "Is Perch" },
{{RecordType::FURN, 15}, "Has Distant LOD" },
{{RecordType::FURN, 16}, "Random Anim Start" },
{{RecordType::FURN, 23}, "Is Marker" },
{{RecordType::FURN, 28}, "Must Exit To Talk" },
{{RecordType::FURN, 29}, "Child Can Use" },
{{RecordType::GLOB, 6}, "Constant" },
{{RecordType::HDPT, 2}, "Non-Playable" },
{{RecordType::IDLM, 29}, "Child Can Use" },
{{RecordType::INFO, 13}, "Actor Changed" },
{{RecordType::KEYM, 2}, "Non-Playable" },
{{RecordType::LAND, 18}, "Compressed" },
{{RecordType::LIGH, 16}, "Random Anim Start" },
{{RecordType::LIGH, 17}, "Portal-strict" },
{{RecordType::LIGH, 25}, "Obstacle" },
{{RecordType::LSCR, 10}, "Displays In Main Menu" },
{{RecordType::MISC, 2}, "Non-Playable" },
{{RecordType::MSTT, 8}, "Must Update Anims" },
{{RecordType::MSTT, 9}, "Hidden From Local Map" },
{{RecordType::MSTT, 15}, "Has Distant LOD" },
{{RecordType::MSTT, 16}, "Random Anim Start" },
{{RecordType::MSTT, 19}, "Has Currents" },
{{RecordType::MSTT, 25}, "Obstacle" },
{{RecordType::MSTT, 26}, "NavMesh Generation - Filter" },
{{RecordType::MSTT, 27}, "NavMesh Generation - Bounding Box"},
{{RecordType::MSTT, 30}, "NavMesh Generation - Ground" },
{{RecordType::NAVM, 18}, "Compressed" },
{{RecordType::NAVM, 26}, "AutoGen" },
{{RecordType::NAVM, 31}, "NavmeshGenCell" },
{{RecordType::NPC_, 10}, "Unknown 10" },
{{RecordType::NPC_, 18}, "Compressed" },
{{RecordType::NPC_, 19}, "Unknown 19" },
{{RecordType::NPC_, 29}, "Bleedout Override" },
{{RecordType::PARW, 7}, "Turn Off Fire" },
{{RecordType::PARW, 10}, "Persistent" },
{{RecordType::PARW, 11}, "Initially Disabled" },
{{RecordType::PARW, 28}, "Reflected By Auto Water" },
{{RecordType::PARW, 29}, "Don't Havok Settle" },
{{RecordType::PARW, 30}, "No Respawn" },
{{RecordType::PBAR, 7}, "Turn Off Fire" },
{{RecordType::PBAR, 10}, "Persistent" },
{{RecordType::PBAR, 11}, "Initially Disabled" },
{{RecordType::PBAR, 28}, "Reflected By Auto Water" },
{{RecordType::PBAR, 29}, "Don't Havok Settle" },
{{RecordType::PBAR, 30}, "No Respawn" },
{{RecordType::PBEA, 7}, "Turn Off Fire" },
{{RecordType::PBEA, 10}, "Persistent" },
{{RecordType::PBEA, 11}, "Initially Disabled" },
{{RecordType::PBEA, 28}, "Reflected By Auto Water" },
{{RecordType::PBEA, 29}, "Don't Havok Settle" },
{{RecordType::PBEA, 30}, "No Respawn" },
{{RecordType::PCON, 7}, "Turn Off Fire" },
{{RecordType::PCON, 10}, "Persistent" },
{{RecordType::PCON, 11}, "Initially Disabled" },
{{RecordType::PCON, 28}, "Reflected By Auto Water" },
{{RecordType::PCON, 29}, "Don't Havok Settle" },
{{RecordType::PCON, 30}, "No Respawn" },
{{RecordType::PERK, 2}, "Non-Playable" },
{{RecordType::PFLA, 7}, "Turn Off Fire" },
{{RecordType::PFLA, 10}, "Persistent" },
{{RecordType::PFLA, 11}, "Initially Disabled" },
{{RecordType::PFLA, 28}, "Reflected By Auto Water" },
{{RecordType::PFLA, 29}, "Don't Havok Settle" },
{{RecordType::PFLA, 30}, "No Respawn" },
{{RecordType::PGRE, 7}, "Turn Off Fire" },
{{RecordType::PGRE, 10}, "Persistent" },
{{RecordType::PGRE, 11}, "Initially Disabled" },
{{RecordType::PGRE, 28}, "Reflected By Auto Water" },
{{RecordType::PGRE, 29}, "Don't Havok Settle" },
{{RecordType::PGRE, 30}, "No Respawn" },
{{RecordType::PHZD, 7}, "Turn Off Fire" },
{{RecordType::PHZD, 10}, "Persistent" },
{{RecordType::PHZD, 11}, "Initially Disabled" },
{{RecordType::PHZD, 28}, "Reflected By Auto Water" },
{{RecordType::PHZD, 29}, "Don't Havok Settle" },
{{RecordType::PHZD, 30}, "No Respawn" },
{{RecordType::PMIS, 7}, "Turn Off Fire" },
{{RecordType::PMIS, 10}, "Persistent" },
{{RecordType::PMIS, 11}, "Initially Disabled" },
{{RecordType::PMIS, 28}, "Reflected By Auto Water" },
{{RecordType::PMIS, 29}, "Don't Havok Settle" },
{{RecordType::PMIS, 30}, "No Respawn" },
{{RecordType::RACE, 19}, "Critter?" },
{{RecordType::REFR, 10}, "Persistent" },
{{RecordType::REFR, 11}, "Initially Disabled" },
{{RecordType::REFR, 16}, "Is Full LOD" },
{{RecordType::REFR, 26}, "Filter (Collision Geometry)" },
{{RecordType::REFR, 27}, "Bounding Box (Collision Geometry)"},
{{RecordType::REFR, 28}, "Reflected By Auto Water" },
{{RecordType::REFR, 30}, "Ground" },
{{RecordType::REFR, 31}, "Multibound" },
{{RecordType::REGN, 6}, "Border Region" },
{{RecordType::RELA, 6}, "Secret" },
{{RecordType::SHOU, 7}, "Treat spells as powers" },
{{RecordType::SLGM, 17}, "Can Hold NPC Soul" },
{{RecordType::STAT, 2}, "Never Fades" },
{{RecordType::STAT, 5}, "Deleted" },
{{RecordType::STAT, 6}, "Has Tree LOD" },
{{RecordType::STAT, 7}, "Add-On LOD Object" },
{{RecordType::STAT, 9}, "Hidden From Local Map" },
{{RecordType::STAT, 11}, "Unknown 11" },
{{RecordType::STAT, 15}, "Has Distant LOD" },
{{RecordType::STAT, 16}, "Unknown 16" },
{{RecordType::STAT, 17}, "Uses HD LOD Texture" },
{{RecordType::STAT, 19}, "Has Currents" },
{{RecordType::STAT, 23}, "Is Marker" },
{{RecordType::STAT, 25}, "Obstacle" },
{{RecordType::STAT, 26}, "NavMesh Generation - Filter" },
{{RecordType::STAT, 27}, "NavMesh Generation - Bounding Box"},
{{RecordType::STAT, 28}, "Show In World Map" },
{{RecordType::STAT, 30}, "NavMesh Generation - Ground" },
{{RecordType::TACT, 9}, "Hidden From Local Map" },
{{RecordType::TACT, 16}, "Random Anim Start" },
{{RecordType::TACT, 17}, "Radio Station" },
{{RecordType::TES4, 0}, "ESM" },
{{RecordType::TES4, 1}, "Altered" },
{{RecordType::TES4, 2}, "Checked" },
{{RecordType::TES4, 3}, "Active" },
{{RecordType::TES4, 4}, "Optimized File" },
{{RecordType::TES4, 5}, "Temp ID Owner" },
{{RecordType::TES4, 7}, "Localized" },
{{RecordType::TES4, 8}, "Precalc Data Only" },
{{RecordType::TES4, 9}, "ESL" },
{{RecordType::TREE, 15}, "Has Distant LOD" },
{{RecordType::WEAP, 2}, "Non-Playable" },
{{RecordType::WRLD, 19}, "Can't Wait" },
};
static constexpr std::pair<RefrFlag, std::string_view> refr_flag_description_map_builtin[] {
{{RecordType::ACTI, 9}, "Hidden From Local Map" },
{{RecordType::ACTI, 10}, "Persistent" },
{{RecordType::ACTI, 11}, "Initially Disabled" },
{{RecordType::ACTI, 13}, "Sky Marker" },
{{RecordType::ACTI, 15}, "Visible when distant" },
{{RecordType::ACTI, 16}, "Is Full LOD" },
{{RecordType::ACTI, 26}, "Filter (Collision Geometry)" },
{{RecordType::ACTI, 27}, "Bounding Box (Collision Geometry)"},
{{RecordType::ACTI, 28}, "Reflected By Auto Water" },
{{RecordType::ACTI, 29}, "Don't Havok Settle" },
{{RecordType::ACTI, 30}, "No Respawn" },
{{RecordType::ACTI, 31}, "Multibound" },
{{RecordType::ADDN, 10}, "Persistent" },
{{RecordType::ADDN, 11}, "Initially Disabled" },
{{RecordType::ADDN, 16}, "Is Full LOD" },
{{RecordType::ADDN, 28}, "Reflected By Auto Water" },
{{RecordType::ADDN, 29}, "Don't Havok Settle" },
{{RecordType::ADDN, 30}, "No Respawn" },
{{RecordType::ADDN, 31}, "Multibound" },
{{RecordType::ALCH, 10}, "Persistent" },
{{RecordType::ALCH, 11}, "Initially Disabled" },
{{RecordType::ALCH, 16}, "Is Full LOD" },
{{RecordType::ALCH, 25}, "No AI Acquire" },
{{RecordType::ALCH, 28}, "Reflected By Auto Water" },
{{RecordType::ALCH, 29}, "Don't Havok Settle" },
{{RecordType::ALCH, 30}, "No Respawn" },
{{RecordType::ALCH, 31}, "Multibound" },
{{RecordType::AMMO, 10}, "Persistent" },
{{RecordType::AMMO, 11}, "Initially Disabled" },
{{RecordType::AMMO, 16}, "Is Full LOD" },
{{RecordType::AMMO, 25}, "No AI Acquire" },
{{RecordType::AMMO, 28}, "Reflected By Auto Water" },
{{RecordType::AMMO, 29}, "Don't Havok Settle" },
{{RecordType::AMMO, 30}, "No Respawn" },
{{RecordType::AMMO, 31}, "Multibound" },
{{RecordType::ARMO, 10}, "Persistent" },
{{RecordType::ARMO, 11}, "Initially Disabled" },
{{RecordType::ARMO, 16}, "Is Full LOD" },
{{RecordType::ARMO, 25}, "No AI Acquire" },
{{RecordType::ARMO, 28}, "Reflected By Auto Water" },
{{RecordType::ARMO, 29}, "Don't Havok Settle" },
{{RecordType::ARMO, 30}, "No Respawn" },
{{RecordType::ARMO, 31}, "Multibound" },
{{RecordType::BOOK, 10}, "Persistent" },
{{RecordType::BOOK, 11}, "Initially Disabled" },
{{RecordType::BOOK, 16}, "Is Full LOD" },
{{RecordType::BOOK, 25}, "No AI Acquire" },
{{RecordType::BOOK, 28}, "Reflected By Auto Water" },
{{RecordType::BOOK, 29}, "Don't Havok Settle" },
{{RecordType::BOOK, 30}, "No Respawn" },
{{RecordType::BOOK, 31}, "Multibound" },
{{RecordType::CONT, 10}, "Persistent" },
{{RecordType::CONT, 11}, "Initially Disabled" },
{{RecordType::CONT, 16}, "Is Full LOD" },
{{RecordType::CONT, 25}, "No AI Acquire" },
{{RecordType::CONT, 26}, "Filter (Collision Geometry)" },
{{RecordType::CONT, 27}, "Bounding Box (Collision Geometry)"},
{{RecordType::CONT, 28}, "Reflected By Auto Water" },
{{RecordType::CONT, 29}, "Don't Havok Settle" },
{{RecordType::CONT, 30}, "Ground" },
{{RecordType::CONT, 31}, "Multibound" },
{{RecordType::DOOR, 6}, "Hidden From Local Map" },
{{RecordType::DOOR, 8}, "Inaccessible" },
{{RecordType::DOOR, 10}, "Persistent" },
{{RecordType::DOOR, 11}, "Initially Disabled" },
{{RecordType::DOOR, 16}, "Is Full LOD" },
{{RecordType::DOOR, 26}, "Filter (Collision Geometry)" },
{{RecordType::DOOR, 27}, "Bounding Box (Collision Geometry)"},
{{RecordType::DOOR, 28}, "Reflected By Auto Water" },
{{RecordType::DOOR, 29}, "Don't Havok Settle" },
{{RecordType::DOOR, 30}, "No Respawn" },
{{RecordType::DOOR, 31}, "Multibound" },
{{RecordType::FLOR, 9}, "Hidden From Local Map" },
{{RecordType::FLOR, 10}, "Persistent" },
{{RecordType::FLOR, 11}, "Initially Disabled" },
{{RecordType::FLOR, 13}, "Sky Marker" },
{{RecordType::FLOR, 15}, "Visible when distant" },
{{RecordType::FLOR, 16}, "Is Full LOD" },
{{RecordType::FLOR, 26}, "Filter (Collision Geometry)" },
{{RecordType::FLOR, 27}, "Bounding Box (Collision Geometry)"},
{{RecordType::FLOR, 28}, "Reflected By Auto Water" },
{{RecordType::FLOR, 29}, "Don't Havok Settle" },
{{RecordType::FLOR, 30}, "No Respawn" },
{{RecordType::FLOR, 31}, "Multibound" },
{{RecordType::INGR, 10}, "Persistent" },
{{RecordType::INGR, 11}, "Initially Disabled" },
{{RecordType::INGR, 16}, "Is Full LOD" },
{{RecordType::INGR, 25}, "No AI Acquire" },
{{RecordType::INGR, 28}, "Reflected By Auto Water" },
{{RecordType::INGR, 29}, "Don't Havok Settle" },
{{RecordType::INGR, 30}, "No Respawn" },
{{RecordType::INGR, 31}, "Multibound" },
{{RecordType::KEYM, 10}, "Persistent" },
{{RecordType::KEYM, 11}, "Initially Disabled" },
{{RecordType::KEYM, 16}, "Is Full LOD" },
{{RecordType::KEYM, 25}, "No AI Acquire" },
{{RecordType::KEYM, 28}, "Reflected By Auto Water" },
{{RecordType::KEYM, 29}, "Don't Havok Settle" },
{{RecordType::KEYM, 30}, "No Respawn" },
{{RecordType::KEYM, 31}, "Multibound" },
{{RecordType::LIGH, 8}, "Doesn't Light Water" },
{{RecordType::LIGH, 9}, "Casts Shadows" },
{{RecordType::LIGH, 10}, "Persistent" },
{{RecordType::LIGH, 11}, "Initially Disabled" },
{{RecordType::LIGH, 16}, "Never Fades" },
{{RecordType::LIGH, 17}, "Doesn't Light Landscape" },
{{RecordType::LIGH, 25}, "No AI Acquire" },
{{RecordType::LIGH, 28}, "Reflected By Auto Water" },
{{RecordType::LIGH, 29}, "Don't Havok Settle" },
{{RecordType::LIGH, 30}, "No Respawn" },
{{RecordType::LIGH, 31}, "Multibound" },
{{RecordType::MISC, 10}, "Persistent" },
{{RecordType::MISC, 11}, "Initially Disabled" },
{{RecordType::MISC, 16}, "Is Full LOD" },
{{RecordType::MISC, 25}, "No AI Acquire" },
{{RecordType::MISC, 28}, "Reflected By Auto Water" },
{{RecordType::MISC, 29}, "Don't Havok Settle" },
{{RecordType::MISC, 30}, "No Respawn" },
{{RecordType::MISC, 31}, "Multibound" },
{{RecordType::MSTT, 9}, "Motion Blur" },
{{RecordType::MSTT, 10}, "Persistent" },
{{RecordType::MSTT, 11}, "Initially Disabled" },
{{RecordType::MSTT, 16}, "Is Full LOD" },
{{RecordType::MSTT, 26}, "Filter (Collision Geometry)" },
{{RecordType::MSTT, 27}, "Bounding Box (Collision Geometry)"},
{{RecordType::MSTT, 28}, "Reflected By Auto Water" },
{{RecordType::MSTT, 29}, "Don't Havok Settle" },
{{RecordType::MSTT, 30}, "No Respawn" },
{{RecordType::MSTT, 31}, "Multibound" },
{{RecordType::SCRL, 10}, "Persistent" },
{{RecordType::SCRL, 11}, "Initially Disabled" },
{{RecordType::SCRL, 16}, "Is Full LOD" },
{{RecordType::SCRL, 25}, "No AI Acquire" },
{{RecordType::SCRL, 28}, "Reflected By Auto Water" },
{{RecordType::SCRL, 29}, "Don't Havok Settle" },
{{RecordType::SCRL, 30}, "No Respawn" },
{{RecordType::SCRL, 31}, "Multibound" },
{{RecordType::SLGM, 10}, "Persistent" },
{{RecordType::SLGM, 11}, "Initially Disabled" },
{{RecordType::SLGM, 16}, "Is Full LOD" },
{{RecordType::SLGM, 25}, "No AI Acquire" },
{{RecordType::SLGM, 28}, "Reflected By Auto Water" },
{{RecordType::SLGM, 29}, "Don't Havok Settle" },
{{RecordType::SLGM, 30}, "No Respawn" },
{{RecordType::SLGM, 31}, "Multibound" },
{{RecordType::STAT, 9}, "Hidden From Local Map" },
{{RecordType::STAT, 10}, "Persistent" },
{{RecordType::STAT, 11}, "Initially Disabled" },
{{RecordType::STAT, 13}, "Sky Marker" },
{{RecordType::STAT, 15}, "Visible when distant" },
{{RecordType::STAT, 16}, "Is Full LOD" },
{{RecordType::STAT, 26}, "Filter (Collision Geometry)" },
{{RecordType::STAT, 27}, "Bounding Box (Collision Geometry)"},
{{RecordType::STAT, 28}, "Reflected By Auto Water" },
{{RecordType::STAT, 29}, "Don't Havok Settle" },
{{RecordType::STAT, 30}, "No Respawn" },
{{RecordType::STAT, 31}, "Multibound" },
{{RecordType::TREE, 9}, "Hidden From Local Map" },
{{RecordType::TREE, 10}, "Persistent" },
{{RecordType::TREE, 11}, "Initially Disabled" },
{{RecordType::TREE, 13}, "Sky Marker" },
{{RecordType::TREE, 15}, "Visible when distant" },
{{RecordType::TREE, 16}, "Is Full LOD" },
{{RecordType::TREE, 26}, "Filter (Collision Geometry)" },
{{RecordType::TREE, 27}, "Bounding Box (Collision Geometry)"},
{{RecordType::TREE, 28}, "Reflected By Auto Water" },
{{RecordType::TREE, 29}, "Don't Havok Settle" },
{{RecordType::TREE, 30}, "No Respawn" },
{{RecordType::TREE, 31}, "Multibound" },
{{RecordType::WEAP, 10}, "Persistent" },
{{RecordType::WEAP, 11}, "Initially Disabled" },
{{RecordType::WEAP, 16}, "Is Full LOD" },
{{RecordType::WEAP, 25}, "No AI Acquire" },
{{RecordType::WEAP, 28}, "Reflected By Auto Water" },
{{RecordType::WEAP, 29}, "Don't Havok Settle" },
{{RecordType::WEAP, 30}, "No Respawn" },
{{RecordType::WEAP, 31}, "Multibound" },
};
static constexpr auto group_type_name_map_std = utility::array_builtin_to_std(group_type_name_map_builtin);
static constexpr auto group_type_name_map = utility::map_to_soa(group_type_name_map_std);
static constexpr auto record_type_fourcc_map_std = utility::array_builtin_to_std(record_type_fourcc_map_builtin);
static constexpr auto record_type_fourcc_map = utility::map_to_soa(record_type_fourcc_map_std);
static constexpr auto record_type_name_map_std = utility::array_builtin_to_std(record_type_name_map_builtin);
static constexpr auto record_type_name_map = utility::map_to_soa(record_type_name_map_std);
static constexpr auto flag_description_map_std = utility::array_builtin_to_std(flag_description_map_builtin);
static constexpr auto flag_description_map = utility::map_to_soa(flag_description_map_std);
static constexpr auto refr_flag_description_map_std = utility::array_builtin_to_std(refr_flag_description_map_builtin);
static constexpr auto refr_flag_description_map = utility::map_to_soa(refr_flag_description_map_std);
[[nodiscard]] std::optional<std::string_view> esxr::group_type_to_name(GroupType group_type) noexcept
{
return utility::soa_first_to_second(group_type_name_map, group_type);
}
[[nodiscard]] std::optional<FourCC> esxr::record_type_to_fourcc(RecordType record_type) noexcept
{
return utility::soa_first_to_second(record_type_fourcc_map, record_type);
}
[[nodiscard]] std::optional<RecordType> esxr::fourcc_to_record_type(FourCC fourcc) noexcept
{
return utility::soa_second_to_first(record_type_fourcc_map, fourcc);
}
[[nodiscard]] std::optional<std::string_view> esxr::record_type_to_name(RecordType record_type) noexcept
{
return utility::soa_first_to_second(record_type_name_map, record_type);
}
[[nodiscard]] std::optional<std::string_view> esxr::flag_to_description(Flag flag) noexcept
{
return utility::soa_first_to_second(flag_description_map, flag);
}
[[nodiscard]] std::optional<std::string_view> esxr::refr_flag_to_description(RefrFlag refr_flag) noexcept
{
return utility::soa_first_to_second(refr_flag_description_map, refr_flag);
}