#include "esx_reader.hpp" using namespace esxr; static constexpr std::pair 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 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 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_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 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 esxr::group_type_to_name(GroupType group_type) noexcept { return utility::soa_first_to_second(group_type_name_map, group_type); } [[nodiscard]] std::optional esxr::record_type_to_fourcc(RecordType record_type) noexcept { return utility::soa_first_to_second(record_type_fourcc_map, record_type); } [[nodiscard]] std::optional esxr::fourcc_to_record_type(FourCC fourcc) noexcept { return utility::soa_second_to_first(record_type_fourcc_map, fourcc); } [[nodiscard]] std::optional esxr::record_type_to_name(RecordType record_type) noexcept { return utility::soa_first_to_second(record_type_name_map, record_type); } [[nodiscard]] std::optional esxr::flag_to_description(Flag flag) noexcept { return utility::soa_first_to_second(flag_description_map, flag); } [[nodiscard]] std::optional esxr::refr_flag_to_description(RefrFlag refr_flag) noexcept { return utility::soa_first_to_second(refr_flag_description_map, refr_flag); }