/* * This Source Code Form is subject to the terms of the Mozilla Public * License, v. 2.0.If a copy of the MPL was not distributed with this * file, You can obtain one at http ://mozilla.org/MPL/2.0/. */ #include "ESPReader.h" #define LE(x) (((x >> 24) & 0x000000ffu) | ((x >> 8) & 0x0000ff00u) | \ ((x << 8) & 0x00ff0000u) | ((x << 24) & 0xff000000u)) #define CP(x) ((rfs_inner *const)x) const enum record_type group_order[GO_SIZE] = { GMST, KYWD, LCRT, AACT, TXST, GLOB, CLAS, FACT, HDPT, HAIR, EYES, RACE, SOUN, ASPC, MGEF, SCPT, LTEX, ENCH, SPEL, SCRL, ACTI, TACT, ARMO, BOOK, CONT, DOOR, INGR, LIGH, MISC, APPA, STAT, SCOL, MSTT, PWAT, GRAS, TREE, CLDC, FLOR, FURN, WEAP, AMMO, NPC_, LVLN, KEYM, ALCH, IDLM, COBJ, PROJ, HAZD, SLGM, LVLI, WTHR, CLMT, SPGD, RFCT, REGN, NAVI, CELL, WRLD, DIAL, QUST, IDLE, PACK, CSTY, LSCR, LVSP, ANIO, WATR, EFSH, EXPL, DEBR, IMGS, IMAD, FLST, PERK, BPTD, ADDN, AVIF, CAMS, CPTH, VTYP, MATT, IPCT, IPDS, ARMA, ECZN, LCTN, MESG, RGDL, DOBJ, LGTM, MUSC, FSTP, FSTS, SMBN, SMQN, SMEN, DLBR, MUST, DLVW, WOOP, SHOU, EQUP, RELA, SCEN, ASTP, OTFT, ARTO, MATO, MOVT, HAZD, SNDR, DUAL, SNCT, SOPM, COLL, CLFM, REVB }; // record type to record type value const uint32_t rt[RT_SIZE] = { [AACT] = LE('AACT'),[ACHR] = LE('ACHR'),[ACTI] = LE('ACTI'), [ADDN] = LE('ADDN'),[ALCH] = LE('ALCH'),[AMMO] = LE('AMMO'), [ANIO] = LE('ANIO'),[APPA] = LE('APPA'),[ARMA] = LE('ARMA'), [ARMO] = LE('ARMO'),[ARTO] = LE('ARTO'),[ASPC] = LE('ASPC'), [ASTP] = LE('ASTP'),[AVIF] = LE('AVIF'),[BOOK] = LE('BOOK'), [BPTD] = LE('BPTD'),[CAMS] = LE('CAMS'),[CELL] = LE('CELL'), [CLAS] = LE('CLAS'),[CLDC] = LE('CLDC'),[CLFM] = LE('CLFM'), [CLMT] = LE('CLMT'),[COBJ] = LE('COBJ'),[COLL] = LE('COLL'), [CONT] = LE('CONT'),[CPTH] = LE('CPTH'),[CSTY] = LE('CSTY'), [DEBR] = LE('DEBR'),[DIAL] = LE('DIAL'),[DLBR] = LE('DLBR'), [DLVW] = LE('DLVW'),[DOBJ] = LE('DOBJ'),[DOOR] = LE('DOOR'), [DUAL] = LE('DUAL'),[ECZN] = LE('ECZN'),[EFSH] = LE('EFSH'), [ENCH] = LE('ENCH'),[EQUP] = LE('EQUP'),[EXPL] = LE('EXPL'), [EYES] = LE('EYES'),[FACT] = LE('FACT'),[FLOR] = LE('FLOR'), [FLST] = LE('FLST'),[FSTP] = LE('FSTP'),[FSTS] = LE('FSTS'), [FURN] = LE('FURN'),[GLOB] = LE('GLOB'),[GMST] = LE('GMST'), [GRAS] = LE('GRAS'),[GRUP] = LE('GRUP'),[HAIR] = LE('HAIR'), [HAZD] = LE('HAZD'),[HDPT] = LE('HDPT'),[IDLE] = LE('IDLE'), [IDLM] = LE('IDLM'),[IMAD] = LE('IMAD'),[IMGS] = LE('IMGS'), [INFO] = LE('INFO'),[INGR] = LE('INGR'),[IPCT] = LE('IPCT'), [IPDS] = LE('IPDS'),[KEYM] = LE('KEYM'),[KYWD] = LE('KYWD'), [LAND] = LE('LAND'),[LCRT] = LE('LCRT'),[LCTN] = LE('LCTN'), [LGTM] = LE('LGTM'),[LIGH] = LE('LIGH'),[LSCR] = LE('LSCR'), [LTEX] = LE('LTEX'),[LVLI] = LE('LVLI'),[LVLN] = LE('LVLN'), [LVSP] = LE('LVSP'),[MATO] = LE('MATO'),[MATT] = LE('MATT'), [MESG] = LE('MESG'),[MGEF] = LE('MGEF'),[MISC] = LE('MISC'), [MOVT] = LE('MOVT'),[MSTT] = LE('MSTT'),[MUSC] = LE('MUSC'), [MUST] = LE('MUST'),[NAVI] = LE('NAVI'),[NAVM] = LE('NAVM'), [NOTE] = LE('NOTE'),[NPC_] = LE('NPC_'),[OTFT] = LE('OTFT'), [PACK] = LE('PACK'),[PERK] = LE('PERK'),[PGRE] = LE('PGRE'), [PHZD] = LE('PHZD'),[PROJ] = LE('PROJ'),[PWAT] = LE('PWAT'), [QUST] = LE('QUST'),[RACE] = LE('RACE'),[REFR] = LE('REFR'), [REGN] = LE('REGN'),[RELA] = LE('RELA'),[REVB] = LE('REVB'), [RFCT] = LE('RFCT'),[RGDL] = LE('RGDL'),[SCEN] = LE('SCEN'), [SCOL] = LE('SCOL'),[SCPT] = LE('SCPT'),[SCRL] = LE('SCRL'), [SHOU] = LE('SHOU'),[SLGM] = LE('SLGM'),[SMBN] = LE('SMBN'), [SMEN] = LE('SMEN'),[SMQN] = LE('SMQN'),[SNCT] = LE('SNCT'), [SNDR] = LE('SNDR'),[SOPM] = LE('SOPM'),[SOUN] = LE('SOUN'), [SPEL] = LE('SPEL'),[SPGD] = LE('SPGD'),[STAT] = LE('STAT'), [TACT] = LE('TACT'),[TES4] = LE('TES4'),[TREE] = LE('TREE'), [TXST] = LE('TXST'),[VTYP] = LE('VTYP'),[WATR] = LE('WATR'), [WEAP] = LE('WEAP'),[WOOP] = LE('WOOP'),[WRLD] = LE('WRLD'), [WTHR] = LE('WTHR'), }; // Enums of perfect hash values enum record_type_hash { RT_AACT = 496, RT_ACHR = 249, RT_ACTI = 293, RT_ADDN = 316, RT_ALCH = 312, RT_AMMO = 157, RT_ANIO = 297, RT_APPA = 230, RT_ARMA = 222, RT_ARMO = 218, RT_ARTO = 328, RT_ASPC = 252, RT_ASTP = 384, RT_AVIF = 309, RT_BOOK = 318, RT_BPTD = 454, RT_CAMS = 319, RT_CELL = 18, RT_CLAS = 16, RT_CLDC = 68, RT_CLFM = 389, RT_CLMT = 497, RT_COBJ = 422, RT_COLL = 140, RT_CONT = 169, RT_CPTH = 30, RT_CSTY = 193, RT_DEBR = 460, RT_DIAL = 304, RT_DLBR = 340, RT_DLVW = 434, RT_DOBJ = 437, RT_DOOR = 347, RT_DUAL = 246, RT_ECZN = 229, RT_EFSH = 509, RT_ENCH = 194, RT_EQUP = 57, RT_EXPL = 153, RT_EYES = 181, RT_FACT = 62, RT_FLOR = 137, RT_FLST = 199, RT_FSTP = 462, RT_FSTS = 388, RT_FURN = 105, RT_GLOB = 376, RT_GMST = 125, RT_GRAS = 49, RT_GRUP = 511, RT_HAIR = 481, RT_HAZD = 21, RT_HDPT = 100, RT_IDLE = 204, RT_IDLM = 348, RT_IMAD = 390, RT_IMGS = 187, RT_INFO = 82, RT_INGR = 463, RT_IPCT = 292, RT_IPDS = 89, RT_KEYM = 54, RT_KYWD = 123, RT_LAND = 261, RT_LCRT = 138, RT_LCTN = 172, RT_LGTM = 177, RT_LIGH = 13, RT_LSCR = 288, RT_LTEX = 447, RT_LVLI = 235, RT_LVLN = 453, RT_LVSP = 343, RT_MATO = 2, RT_MATT = 220, RT_MESG = 66, RT_MGEF = 32, RT_MISC = 145, RT_MOVT = 378, RT_MSTT = 132, RT_MUSC = 87, RT_MUST = 9, RT_NAVI = 50, RT_NAVM = 122, RT_NOTE = 366, RT_NPC_ = 440, RT_OTFT = 365, RT_PACK = 441, RT_PERK = 243, RT_PGRE = 210, RT_PHZD = 26, RT_PROJ = 120, RT_PWAT = 397, RT_QUST = 71, RT_RACE = 108, RT_REFR = 449, RT_REGN = 320, RT_RELA = 182, RT_REVB = 266, RT_RFCT = 311, RT_RGDL = 19, RT_SCEN = 119, RT_SCOL = 276, RT_SCPT = 363, RT_SCRL = 104, RT_SHOU = 115, RT_SLGM = 70, RT_SMBN = 413, RT_SMEN = 240, RT_SMQN = 63, RT_SNCT = 117, RT_SNDR = 280, RT_SOPM = 306, RT_SOUN = 165, RT_SPEL = 190, RT_SPGD = 443, RT_STAT = 202, RT_TACT = 282, RT_TES4 = 474, RT_TREE = 27, RT_TXST = 359, RT_VTYP = 335, RT_WATR = 84, RT_WEAP = 10, RT_WOOP = 352, RT_WRLD = 38, RT_WTHR = 83, }; const uint16_t rt2rth[RT_SIZE] = { [AACT] = RT_AACT,[ACHR] = RT_ACHR,[ACTI] = RT_ACTI, [ADDN] = RT_ADDN,[ALCH] = RT_ALCH,[AMMO] = RT_AMMO, [ANIO] = RT_ANIO,[APPA] = RT_APPA,[ARMA] = RT_ARMA, [ARMO] = RT_ARMO,[ARTO] = RT_ARTO,[ASPC] = RT_ASPC, [ASTP] = RT_ASTP,[AVIF] = RT_AVIF,[BOOK] = RT_BOOK, [BPTD] = RT_BPTD,[CAMS] = RT_CAMS,[CELL] = RT_CELL, [CLAS] = RT_CLAS,[CLDC] = RT_CLDC,[CLFM] = RT_CLFM, [CLMT] = RT_CLMT,[COBJ] = RT_COBJ,[COLL] = RT_COLL, [CONT] = RT_CONT,[CPTH] = RT_CPTH,[CSTY] = RT_CSTY, [DEBR] = RT_DEBR,[DIAL] = RT_DIAL,[DLBR] = RT_DLBR, [DLVW] = RT_DLVW,[DOBJ] = RT_DOBJ,[DOOR] = RT_DOOR, [DUAL] = RT_DUAL,[ECZN] = RT_ECZN,[EFSH] = RT_EFSH, [ENCH] = RT_ENCH,[EQUP] = RT_EQUP,[EXPL] = RT_EXPL, [EYES] = RT_EYES,[FACT] = RT_FACT,[FLOR] = RT_FLOR, [FLST] = RT_FLST,[FSTP] = RT_FSTP,[FSTS] = RT_FSTS, [FURN] = RT_FURN,[GLOB] = RT_GLOB,[GMST] = RT_GMST, [GRAS] = RT_GRAS,[GRUP] = RT_GRUP,[HAIR] = RT_HAIR, [HAZD] = RT_HAZD,[HDPT] = RT_HDPT,[IDLE] = RT_IDLE, [IDLM] = RT_IDLM,[IMAD] = RT_IMAD,[IMGS] = RT_IMGS, [INFO] = RT_INFO,[INGR] = RT_INGR,[IPCT] = RT_IPCT, [IPDS] = RT_IPDS,[KEYM] = RT_KEYM,[KYWD] = RT_KYWD, [LAND] = RT_LAND,[LCRT] = RT_LCRT,[LCTN] = RT_LCTN, [LGTM] = RT_LGTM,[LIGH] = RT_LIGH,[LSCR] = RT_LSCR, [LTEX] = RT_LTEX,[LVLI] = RT_LVLI,[LVLN] = RT_LVLN, [LVSP] = RT_LVSP,[MATO] = RT_MATO,[MATT] = RT_MATT, [MESG] = RT_MESG,[MGEF] = RT_MGEF,[MISC] = RT_MISC, [MOVT] = RT_MOVT,[MSTT] = RT_MSTT,[MUSC] = RT_MUSC, [MUST] = RT_MUST,[NAVI] = RT_NAVI,[NAVM] = RT_NAVM, [NOTE] = RT_NOTE,[NPC_] = RT_NPC_,[OTFT] = RT_OTFT, [PACK] = RT_PACK,[PERK] = RT_PERK,[PGRE] = RT_PGRE, [PHZD] = RT_PHZD,[PROJ] = RT_PROJ,[PWAT] = RT_PWAT, [QUST] = RT_QUST,[RACE] = RT_RACE,[REFR] = RT_REFR, [REGN] = RT_REGN,[RELA] = RT_RELA,[REVB] = RT_REVB, [RFCT] = RT_RFCT,[RGDL] = RT_RGDL,[SCEN] = RT_SCEN, [SCOL] = RT_SCOL,[SCPT] = RT_SCPT,[SCRL] = RT_SCRL, [SHOU] = RT_SHOU,[SLGM] = RT_SLGM,[SMBN] = RT_SMBN, [SMEN] = RT_SMEN,[SMQN] = RT_SMQN,[SNCT] = RT_SNCT, [SNDR] = RT_SNDR,[SOPM] = RT_SOPM,[SOUN] = RT_SOUN, [SPEL] = RT_SPEL,[SPGD] = RT_SPGD,[STAT] = RT_STAT, [TACT] = RT_TACT,[TES4] = RT_TES4,[TREE] = RT_TREE, [TXST] = RT_TXST,[VTYP] = RT_VTYP,[WATR] = RT_WATR, [WEAP] = RT_WEAP,[WOOP] = RT_WOOP,[WRLD] = RT_WRLD, [WTHR] = RT_WTHR, }; const uint8_t rth2rt[RT_HASH_SIZE] = { [RT_AACT] = AACT,[RT_ACHR] = ACHR,[RT_ACTI] = ACTI, [RT_ADDN] = ADDN,[RT_ALCH] = ALCH,[RT_AMMO] = AMMO, [RT_ANIO] = ANIO,[RT_APPA] = APPA,[RT_ARMA] = ARMA, [RT_ARMO] = ARMO,[RT_ARTO] = ARTO,[RT_ASPC] = ASPC, [RT_ASTP] = ASTP,[RT_AVIF] = AVIF,[RT_BOOK] = BOOK, [RT_BPTD] = BPTD,[RT_CAMS] = CAMS,[RT_CELL] = CELL, [RT_CLAS] = CLAS,[RT_CLDC] = CLDC,[RT_CLFM] = CLFM, [RT_CLMT] = CLMT,[RT_COBJ] = COBJ,[RT_COLL] = COLL, [RT_CONT] = CONT,[RT_CPTH] = CPTH,[RT_CSTY] = CSTY, [RT_DEBR] = DEBR,[RT_DIAL] = DIAL,[RT_DLBR] = DLBR, [RT_DLVW] = DLVW,[RT_DOBJ] = DOBJ,[RT_DOOR] = DOOR, [RT_DUAL] = DUAL,[RT_ECZN] = ECZN,[RT_EFSH] = EFSH, [RT_ENCH] = ENCH,[RT_EQUP] = EQUP,[RT_EXPL] = EXPL, [RT_EYES] = EYES,[RT_FACT] = FACT,[RT_FLOR] = FLOR, [RT_FLST] = FLST,[RT_FSTP] = FSTP,[RT_FSTS] = FSTS, [RT_FURN] = FURN,[RT_GLOB] = GLOB,[RT_GMST] = GMST, [RT_GRAS] = GRAS,[RT_GRUP] = GRUP,[RT_HAIR] = HAIR, [RT_HAZD] = HAZD,[RT_HDPT] = HDPT,[RT_IDLE] = IDLE, [RT_IDLM] = IDLM,[RT_IMAD] = IMAD,[RT_IMGS] = IMGS, [RT_INFO] = INFO,[RT_INGR] = INGR,[RT_IPCT] = IPCT, [RT_IPDS] = IPDS,[RT_KEYM] = KEYM,[RT_KYWD] = KYWD, [RT_LAND] = LAND,[RT_LCRT] = LCRT,[RT_LCTN] = LCTN, [RT_LGTM] = LGTM,[RT_LIGH] = LIGH,[RT_LSCR] = LSCR, [RT_LTEX] = LTEX,[RT_LVLI] = LVLI,[RT_LVLN] = LVLN, [RT_LVSP] = LVSP,[RT_MATO] = MATO,[RT_MATT] = MATT, [RT_MESG] = MESG,[RT_MGEF] = MGEF,[RT_MISC] = MISC, [RT_MOVT] = MOVT,[RT_MSTT] = MSTT,[RT_MUSC] = MUSC, [RT_MUST] = MUST,[RT_NAVI] = NAVI,[RT_NAVM] = NAVM, [RT_NOTE] = NOTE,[RT_NPC_] = NPC_,[RT_OTFT] = OTFT, [RT_PACK] = PACK,[RT_PERK] = PERK,[RT_PGRE] = PGRE, [RT_PHZD] = PHZD,[RT_PROJ] = PROJ,[RT_PWAT] = PWAT, [RT_QUST] = QUST,[RT_RACE] = RACE,[RT_REFR] = REFR, [RT_REGN] = REGN,[RT_RELA] = RELA,[RT_REVB] = REVB, [RT_RFCT] = RFCT,[RT_RGDL] = RGDL,[RT_SCEN] = SCEN, [RT_SCOL] = SCOL,[RT_SCPT] = SCPT,[RT_SCRL] = SCRL, [RT_SHOU] = SHOU,[RT_SLGM] = SLGM,[RT_SMBN] = SMBN, [RT_SMEN] = SMEN,[RT_SMQN] = SMQN,[RT_SNCT] = SNCT, [RT_SNDR] = SNDR,[RT_SOPM] = SOPM,[RT_SOUN] = SOUN, [RT_SPEL] = SPEL,[RT_SPGD] = SPGD,[RT_STAT] = STAT, [RT_TACT] = TACT,[RT_TES4] = TES4,[RT_TREE] = TREE, [RT_TXST] = TXST,[RT_VTYP] = VTYP,[RT_WATR] = WATR, [RT_WEAP] = WEAP,[RT_WOOP] = WOOP,[RT_WRLD] = WRLD, [RT_WTHR] = WTHR, }; const char *const group_type_strings[GTS_SIZE] = { "Top Type", "World Children", "Interior Cell Block", "Interior Cell Sub-Block", "Exterior Cell", "Exterior Cell Sub-Block", "Cell Children", "Topic Children", "Cell Persistent Children", "Cell Temporary Children", }; // Non-REFR flags rfs_inner achr = { [9] = "Starts Dead", [10] = "Persistent", [11] = "Initially Disabled", [25] = "No AI Acquire", [29] = "Don't Havok Settle", [30] = "ACHR Unknown 30", }; rfs_inner acti = { [6] = "Has Tree LOD", [8] = "Must Update Anims", [9] = "Hidden From Local Map", [15] = "Has Distant LOD", [16] = "Random Anim Start", [17] = "Dangerous", [20] = "Ignore Object Interaction", [23] = "Is Marker", [25] = "Obstacle", [26] = "NavMesh Generation - Filter", [27] = "NavMesh Generation - Bounding Box", [29] = "Child Can Use", [30] = "NavMesh Generation - Ground", }; rfs_inner tact = { [9] = "Hidden From Local Map", [16] = "Random Anim Start", [17] = "Radio Station", }; rfs_inner alch = { [29] = "Medicine", }; rfs_inner ammo = { [2] = "Non-Playable", }; rfs_inner anio = { [9] = "ANIO Unknown 9", }; rfs_inner armo = { [2] = "Non-Playable", [6] = "Shield", [10] = "ARMO Unknown 10", [15] = "ARMO Unknown 15", }; #define REFERENCE_RECORD { \ [7] = "Turn Off Fire", \ [10] = "Persistent", \ [11] = "Initially Disabled", \ [28] = "Reflected by Auto Water", \ [30] = "No Respawn", \ } rfs_inner parw = REFERENCE_RECORD; rfs_inner pbar = REFERENCE_RECORD; rfs_inner pbea = REFERENCE_RECORD; rfs_inner pcon = REFERENCE_RECORD; rfs_inner pfla = REFERENCE_RECORD; rfs_inner pgre = REFERENCE_RECORD; rfs_inner phzd = REFERENCE_RECORD; rfs_inner pmis = REFERENCE_RECORD; #undef REFERENCE_RECORD rfs_inner cell = { [10] = "Persistent", [17] = "Off Limits", [18] = "Compressed", [19] = "Can't Wait", }; rfs_inner cont = { [15] = "Has Distant LOD", [16] = "Random Anim Start", [25] = "Obstacle", [26] = "NavMesh Generation - Filter", [27] = "NavMesh Generation - Bounding Box", [30] = "NavMesh Generation - Ground", }; rfs_inner csty = { [19] = "Allow Dual Wielding", }; rfs_inner door = { [15] = "Has Distant LOD", [16] = "Random Anim Start", [23] = "Is Marker", }; rfs_inner eyes = { [2] = "Non-Playable", }; rfs_inner furn = { [7] = "Is Perch", [16] = "Has Distant LOD", [23] = "Is Marker", [28] = "Must Exit To Talk", [29] = "Child Can Use", }; rfs_inner glob = { [6] = "Constant", }; rfs_inner hdpt = { [2] = "Non-Playable", }; rfs_inner mstt = { [8] = "Must Update Anims", [9] = "Hidden From Local Map", [15] = "Has Distant LOD", [16] = "Random Anim Start", [19] = "Has Currents", [25] = "Obstacle", [26] = "NavMesh Generation - Filter", [27] = "NavMesh Generation - Bounding Box", [30] = "NavMesh Generation - Ground", }; rfs_inner idlm = { [29] = "Child Can Use", }; rfs_inner slgm = { [17] = "Can Hold NPC Soul", }; rfs_inner navm = { [18] = "Compressed", [26] = "AutoGen", [31] = "NavmeshGenCell", }; rfs_inner perk = { [2] = "Non-Playable", }; rfs_inner shou = { [7] = "Treat Spells As Powers", }; rfs_inner rela = { [6] = "Secret", }; rfs_inner clfm = { [2] = "Non-Playable", }; rfs_inner info = { [13] = "Actor Changed", }; rfs_inner keym = { [2] = "Non-Playable", }; rfs_inner land = { [18] = "Compressed", }; rfs_inner ligh = { [16] = "Random Anim Start", [17] = "Portal-strict", [25] = "Obstacle", }; rfs_inner lscr = { [10] = "Displays In Main Menu", }; rfs_inner misc = { [2] = "Non-Playable", }; rfs_inner npc_ = { [10] = "NPC_ Unknown 10", [18] = "Compressed", [19] = "NPC_ Unknown 19", [29] = "Bleedout Override", }; rfs_inner race = { [19] = "Critter (?)", }; // these are generic refr flags for any reference type not handled by the refr // specific flag lut rfs_inner refr = { [10] = "Persistent", [11] = "Initially Disabled", [16] = "Is Full LOD", [26] = "Filter (Collision Geometry)", [27] = "Bounding Box (Collision Geometry)", [30] = "Ground", [31] = "Multibound", }; rfs_inner regn = { [6] = "Border Region", }; rfs_inner stat = { [2] = "Never Fades", [5] = "Deleted", [6] = "Has Tree LOD", [7] = "Add-On LOD Object", [9] = "Hidden From Local Map", [11] = "STAT Unknown 11", [15] = "Has Distant LOD", [16] = "STAT Unknown 16", [17] = "Uses HD LOD Texture", [19] = "Has Currents", [23] = "Is Marker", [25] = "Obstacle", [26] = "NavMesh Generation - Filter", [27] = "NavMesh Generation - Bounding Box", [28] = "Show In World Map", [30] = "NavMesh Generation - Ground", }; rfs_inner tes4 = { [0] = "ESM", [1] = "Altered", [2] = "Checked", [3] = "Active", [4] = "Optimized File", [5] = "Temp ID Owner", [7] = "Localized", [8] = "Precalc Data Only", [9] = "ESL", }; rfs_inner tree = { [15] = "Has Distant LOD", }; rfs_inner weap = { [2] = "Non-Playable", }; rfs_inner wrld = { [19] = "Can't Wait", }; rfs_inner *const rfs[RT_SIZE] = { [AACT] = CP(NULL),[ACHR] = CP(achr),[ACTI] = CP(acti), [ADDN] = CP(NULL),[ALCH] = CP(alch),[AMMO] = CP(ammo), [ANIO] = CP(anio),[APPA] = CP(NULL),[ARMA] = CP(NULL), [ARMO] = CP(armo),[ARTO] = CP(NULL),[ASPC] = CP(NULL), [ASTP] = CP(NULL),[AVIF] = CP(NULL),[BOOK] = CP(NULL), [BPTD] = CP(NULL),[CAMS] = CP(NULL),[CELL] = CP(cell), [CLAS] = CP(NULL),[CLDC] = CP(NULL),[CLFM] = CP(clfm), [CLMT] = CP(NULL),[COBJ] = CP(NULL),[COLL] = CP(NULL), [CONT] = CP(cont),[CPTH] = CP(NULL),[CSTY] = CP(csty), [DEBR] = CP(NULL),[DIAL] = CP(NULL),[DLBR] = CP(NULL), [DLVW] = CP(NULL),[DOBJ] = CP(NULL),[DOOR] = CP(door), [DUAL] = CP(NULL),[ECZN] = CP(NULL),[EFSH] = CP(NULL), [ENCH] = CP(NULL),[EQUP] = CP(NULL),[EXPL] = CP(NULL), [EYES] = CP(eyes),[FACT] = CP(NULL),[FLOR] = CP(NULL), [FLST] = CP(NULL),[FSTP] = CP(NULL),[FSTS] = CP(NULL), [FURN] = CP(furn),[GLOB] = CP(glob),[GMST] = CP(NULL), [GRAS] = CP(NULL),[GRUP] = CP(NULL),[HAIR] = CP(NULL), [HAZD] = CP(NULL),[HDPT] = CP(hdpt),[IDLE] = CP(NULL), [IDLM] = CP(idlm),[IMAD] = CP(NULL),[IMGS] = CP(NULL), [INFO] = CP(info),[INGR] = CP(NULL),[IPCT] = CP(NULL), [IPDS] = CP(NULL),[KEYM] = CP(keym),[KYWD] = CP(NULL), [LAND] = CP(land),[LCRT] = CP(NULL),[LCTN] = CP(NULL), [LGTM] = CP(NULL),[LIGH] = CP(ligh),[LSCR] = CP(lscr), [LTEX] = CP(NULL),[LVLI] = CP(NULL),[LVLN] = CP(NULL), [LVSP] = CP(NULL),[MATO] = CP(NULL),[MATT] = CP(NULL), [MESG] = CP(NULL),[MGEF] = CP(NULL),[MISC] = CP(misc), [MOVT] = CP(NULL),[MSTT] = CP(mstt),[MUSC] = CP(NULL), [MUST] = CP(NULL),[NAVI] = CP(NULL),[NAVM] = CP(navm), [NOTE] = CP(NULL),[NPC_] = CP(npc_),[OTFT] = CP(NULL), [PACK] = CP(NULL),[PERK] = CP(perk),[PGRE] = CP(pgre), [PHZD] = CP(phzd),[PROJ] = CP(NULL),[PWAT] = CP(NULL), [QUST] = CP(NULL),[RACE] = CP(race),[REFR] = CP(refr), [REGN] = CP(regn),[RELA] = CP(rela),[REVB] = CP(NULL), [RFCT] = CP(NULL),[RGDL] = CP(NULL),[SCEN] = CP(NULL), [SCOL] = CP(NULL),[SCPT] = CP(NULL),[SCRL] = CP(NULL), [SHOU] = CP(shou),[SLGM] = CP(slgm),[SMBN] = CP(NULL), [SMEN] = CP(NULL),[SMQN] = CP(NULL),[SNCT] = CP(NULL), [SNDR] = CP(NULL),[SOPM] = CP(NULL),[SOUN] = CP(NULL), [SPEL] = CP(NULL),[SPGD] = CP(NULL),[STAT] = CP(stat), [TACT] = CP(tact),[TES4] = CP(tes4),[TREE] = CP(tree), [TXST] = CP(NULL),[VTYP] = CP(NULL),[WATR] = CP(NULL), [WEAP] = CP(weap),[WOOP] = CP(NULL),[WRLD] = CP(wrld), [WTHR] = CP(NULL), }; // REFR flags depend on what its NAME field references #define REFR_GROUP1 { \ [9] = "Hidden From Local Map", \ [10] = "Persistent", \ [11] = "Initially Disabled", \ [13] = "Sky Marker", \ [15] = "Visible When Distant", \ [16] = "Is Full LOD", \ [26] = "Filter (Collision Geometry)", \ [27] = "Bounding Box (Collision Geometry)", \ [28] = "Reflected By Auto Water", \ [29] = "Don't Havok Settle", \ [30] = "No Respawn", \ [31] = "Multibound", \ } rfs_inner r_acti = REFR_GROUP1; rfs_inner r_stat = REFR_GROUP1; rfs_inner r_tree = REFR_GROUP1; rfs_inner r_flor = REFR_GROUP1; #undef REFR_GROUP1 rfs_inner r_cont = { [10] = "Persistent", [11] = "Initially Disabled", [16] = "Is Full LOD", [25] = "No AI Acquire", [26] = "Filter (Collision Geometry)", [27] = "Bounding Box (Collision Geometry)", [28] = "Reflected By Auto Water", [29] = "Don't Havok Settle", [30] = "Ground", [31] = "Multibound", }; rfs_inner r_door = { [6] = "Hidden From Local Map", [8] = "Inaccessible", [10] = "Persistent", [11] = "Initially Disabled", [16] = "Is Full LOD", [26] = "Filter (Collision Geometry)", [27] = "Bounding Box (Collision Geometry)", [28] = "Reflected By Auto Water", [29] = "Don't Havok Settle", [30] = "No Respawn", [31] = "Multibound", }; rfs_inner r_ligh = { [8] = "Doesn't Light Water", [9] = "Casts Shadows", [10] = "Persistent", [11] = "Initially Disabled", [16] = "Never Fades", [17] = "Doesn't Light Landscape", [25] = "No AI Acquire", [28] = "Reflected By Auto Water", [29] = "Don't Havok Settle", [30] = "No Respawn", [31] = "Multibound", }; rfs_inner r_mstt = { [9] = "Motion Blur", [10] = "Persistent", [11] = "Initially Disabled", [16] = "Is Full LOD", [26] = "Filter (Collision Geometry)", [27] = "Bounding Box (Collision Geometry)", [28] = "Reflected By Auto Water", [29] = "Don't Havok Settle", [30] = "No Respawn", [31] = "Multibound", }; rfs_inner r_addn = { [10] = "Persistent", [11] = "Initially Disabled", [16] = "Is Full LOD", [28] = "Reflected By Auto Water", [29] = "Don't Havok Settle", [30] = "No Respawn", [31] = "Multibound", }; #define REFR_GROUP2 { \ [10] = "Persistent", \ [11] = "Initially Disabled", \ [16] = "Is Full LOD", \ [25] = "No AI Acquire", \ [28] = "Reflected By Auto Water", \ [29] = "Don't Havok Settle", \ [30] = "No Respawn", \ [31] = "Multibound", \ } rfs_inner r_alch = REFR_GROUP2; rfs_inner r_scrl = REFR_GROUP2; rfs_inner r_ammo = REFR_GROUP2; rfs_inner r_armo = REFR_GROUP2; rfs_inner r_ingr = REFR_GROUP2; rfs_inner r_keym = REFR_GROUP2; rfs_inner r_misc = REFR_GROUP2; rfs_inner r_slgm = REFR_GROUP2; rfs_inner r_weap = REFR_GROUP2; rfs_inner *const rfs_r[RT_SIZE] = { [AACT] = CP(NULL ),[ACHR] = CP(NULL ),[ACTI] = CP(r_acti), [ADDN] = CP(r_addn),[ALCH] = CP(r_alch),[AMMO] = CP(r_ammo), [ANIO] = CP(NULL ),[APPA] = CP(NULL ),[ARMA] = CP(NULL ), [ARMO] = CP(r_armo),[ARTO] = CP(NULL ),[ASPC] = CP(NULL ), [ASTP] = CP(NULL ),[AVIF] = CP(NULL ),[BOOK] = CP(NULL ), [BPTD] = CP(NULL ),[CAMS] = CP(NULL ),[CELL] = CP(NULL ), [CLAS] = CP(NULL ),[CLDC] = CP(NULL ),[CLFM] = CP(NULL ), [CLMT] = CP(NULL ),[COBJ] = CP(NULL ),[COLL] = CP(NULL ), [CONT] = CP(r_cont),[CPTH] = CP(NULL ),[CSTY] = CP(NULL ), [DEBR] = CP(NULL ),[DIAL] = CP(NULL ),[DLBR] = CP(NULL ), [DLVW] = CP(NULL ),[DOBJ] = CP(NULL ),[DOOR] = CP(r_door), [DUAL] = CP(NULL ),[ECZN] = CP(NULL ),[EFSH] = CP(NULL ), [ENCH] = CP(NULL ),[EQUP] = CP(NULL ),[EXPL] = CP(NULL ), [EYES] = CP(NULL ),[FACT] = CP(NULL ),[FLOR] = CP(r_flor), [FLST] = CP(NULL ),[FSTP] = CP(NULL ),[FSTS] = CP(NULL ), [FURN] = CP(NULL ),[GLOB] = CP(NULL ),[GMST] = CP(NULL ), [GRAS] = CP(NULL ),[GRUP] = CP(NULL ),[HAIR] = CP(NULL ), [HAZD] = CP(NULL ),[HDPT] = CP(NULL ),[IDLE] = CP(NULL ), [IDLM] = CP(NULL ),[IMAD] = CP(NULL ),[IMGS] = CP(NULL ), [INFO] = CP(NULL ),[INGR] = CP(r_ingr),[IPCT] = CP(NULL ), [IPDS] = CP(NULL ),[KEYM] = CP(r_keym),[KYWD] = CP(NULL ), [LAND] = CP(NULL ),[LCRT] = CP(NULL ),[LCTN] = CP(NULL ), [LGTM] = CP(NULL ),[LIGH] = CP(r_ligh),[LSCR] = CP(NULL ), [LTEX] = CP(NULL ),[LVLI] = CP(NULL ),[LVLN] = CP(NULL ), [LVSP] = CP(NULL ),[MATO] = CP(NULL ),[MATT] = CP(NULL ), [MESG] = CP(NULL ),[MGEF] = CP(NULL ),[MISC] = CP(r_misc), [MOVT] = CP(NULL ),[MSTT] = CP(r_mstt),[MUSC] = CP(NULL ), [MUST] = CP(NULL ),[NAVI] = CP(NULL ),[NAVM] = CP(NULL ), [NOTE] = CP(NULL ),[NPC_] = CP(NULL ),[OTFT] = CP(NULL ), [PACK] = CP(NULL ),[PERK] = CP(NULL ),[PGRE] = CP(NULL ), [PHZD] = CP(NULL ),[PROJ] = CP(NULL ),[PWAT] = CP(NULL ), [QUST] = CP(NULL ),[RACE] = CP(NULL ),[REFR] = CP(NULL ), [REGN] = CP(NULL ),[RELA] = CP(NULL ),[REVB] = CP(NULL ), [RFCT] = CP(NULL ),[RGDL] = CP(NULL ),[SCEN] = CP(NULL ), [SCOL] = CP(NULL ),[SCPT] = CP(NULL ),[SCRL] = CP(r_scrl), [SHOU] = CP(NULL ),[SLGM] = CP(r_slgm),[SMBN] = CP(NULL ), [SMEN] = CP(NULL ),[SMQN] = CP(NULL ),[SNCT] = CP(NULL ), [SNDR] = CP(NULL ),[SOPM] = CP(NULL ),[SOUN] = CP(NULL ), [SPEL] = CP(NULL ),[SPGD] = CP(NULL ),[STAT] = CP(r_stat), [TACT] = CP(NULL ),[TES4] = CP(NULL ),[TREE] = CP(r_tree), [TXST] = CP(NULL ),[VTYP] = CP(NULL ),[WATR] = CP(NULL ), [WEAP] = CP(r_weap),[WOOP] = CP(NULL ),[WRLD] = CP(NULL ), [WTHR] = CP(NULL ), };