Files
Navmesher_old/espReader/LUT.c
2022-09-07 09:39:13 +10:00

679 lines
25 KiB
C

/*
* 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_HASH_SIZE] = {
[RT_AACT] = CP(NULL),[RT_ACHR] = CP(achr),[RT_ACTI] = CP(acti),
[RT_ADDN] = CP(NULL),[RT_ALCH] = CP(alch),[RT_AMMO] = CP(ammo),
[RT_ANIO] = CP(anio),[RT_APPA] = CP(NULL),[RT_ARMA] = CP(NULL),
[RT_ARMO] = CP(armo),[RT_ARTO] = CP(NULL),[RT_ASPC] = CP(NULL),
[RT_ASTP] = CP(NULL),[RT_AVIF] = CP(NULL),[RT_BOOK] = CP(NULL),
[RT_BPTD] = CP(NULL),[RT_CAMS] = CP(NULL),[RT_CELL] = CP(cell),
[RT_CLAS] = CP(NULL),[RT_CLDC] = CP(NULL),[RT_CLFM] = CP(clfm),
[RT_CLMT] = CP(NULL),[RT_COBJ] = CP(NULL),[RT_COLL] = CP(NULL),
[RT_CONT] = CP(cont),[RT_CPTH] = CP(NULL),[RT_CSTY] = CP(csty),
[RT_DEBR] = CP(NULL),[RT_DIAL] = CP(NULL),[RT_DLBR] = CP(NULL),
[RT_DLVW] = CP(NULL),[RT_DOBJ] = CP(NULL),[RT_DOOR] = CP(door),
[RT_DUAL] = CP(NULL),[RT_ECZN] = CP(NULL),[RT_EFSH] = CP(NULL),
[RT_ENCH] = CP(NULL),[RT_EQUP] = CP(NULL),[RT_EXPL] = CP(NULL),
[RT_EYES] = CP(eyes),[RT_FACT] = CP(NULL),[RT_FLOR] = CP(NULL),
[RT_FLST] = CP(NULL),[RT_FSTP] = CP(NULL),[RT_FSTS] = CP(NULL),
[RT_FURN] = CP(furn),[RT_GLOB] = CP(glob),[RT_GMST] = CP(NULL),
[RT_GRAS] = CP(NULL),[RT_GRUP] = CP(NULL),[RT_HAIR] = CP(NULL),
[RT_HAZD] = CP(NULL),[RT_HDPT] = CP(hdpt),[RT_IDLE] = CP(NULL),
[RT_IDLM] = CP(idlm),[RT_IMAD] = CP(NULL),[RT_IMGS] = CP(NULL),
[RT_INFO] = CP(info),[RT_INGR] = CP(NULL),[RT_IPCT] = CP(NULL),
[RT_IPDS] = CP(NULL),[RT_KEYM] = CP(keym),[RT_KYWD] = CP(NULL),
[RT_LAND] = CP(land),[RT_LCRT] = CP(NULL),[RT_LCTN] = CP(NULL),
[RT_LGTM] = CP(NULL),[RT_LIGH] = CP(ligh),[RT_LSCR] = CP(lscr),
[RT_LTEX] = CP(NULL),[RT_LVLI] = CP(NULL),[RT_LVLN] = CP(NULL),
[RT_LVSP] = CP(NULL),[RT_MATO] = CP(NULL),[RT_MATT] = CP(NULL),
[RT_MESG] = CP(NULL),[RT_MGEF] = CP(NULL),[RT_MISC] = CP(misc),
[RT_MOVT] = CP(NULL),[RT_MSTT] = CP(mstt),[RT_MUSC] = CP(NULL),
[RT_MUST] = CP(NULL),[RT_NAVI] = CP(NULL),[RT_NAVM] = CP(navm),
[RT_NOTE] = CP(NULL),[RT_NPC_] = CP(npc_),[RT_OTFT] = CP(NULL),
[RT_PACK] = CP(NULL),[RT_PERK] = CP(perk),[RT_PGRE] = CP(pgre),
[RT_PHZD] = CP(phzd),[RT_PROJ] = CP(NULL),[RT_PWAT] = CP(NULL),
[RT_QUST] = CP(NULL),[RT_RACE] = CP(race),[RT_REFR] = CP(refr),
[RT_REGN] = CP(regn),[RT_RELA] = CP(rela),[RT_REVB] = CP(NULL),
[RT_RFCT] = CP(NULL),[RT_RGDL] = CP(NULL),[RT_SCEN] = CP(NULL),
[RT_SCOL] = CP(NULL),[RT_SCPT] = CP(NULL),[RT_SCRL] = CP(NULL),
[RT_SHOU] = CP(shou),[RT_SLGM] = CP(slgm),[RT_SMBN] = CP(NULL),
[RT_SMEN] = CP(NULL),[RT_SMQN] = CP(NULL),[RT_SNCT] = CP(NULL),
[RT_SNDR] = CP(NULL),[RT_SOPM] = CP(NULL),[RT_SOUN] = CP(NULL),
[RT_SPEL] = CP(NULL),[RT_SPGD] = CP(NULL),[RT_STAT] = CP(stat),
[RT_TACT] = CP(tact),[RT_TES4] = CP(tes4),[RT_TREE] = CP(tree),
[RT_TXST] = CP(NULL),[RT_VTYP] = CP(NULL),[RT_WATR] = CP(NULL),
[RT_WEAP] = CP(weap),[RT_WOOP] = CP(NULL),[RT_WRLD] = CP(wrld),
[RT_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_HASH_SIZE] = {
[RT_AACT] = CP(NULL ),[RT_ACHR] = CP(NULL ),[RT_ACTI] = CP(r_acti),
[RT_ADDN] = CP(r_addn),[RT_ALCH] = CP(r_alch),[RT_AMMO] = CP(r_ammo),
[RT_ANIO] = CP(NULL ),[RT_APPA] = CP(NULL ),[RT_ARMA] = CP(NULL ),
[RT_ARMO] = CP(r_armo),[RT_ARTO] = CP(NULL ),[RT_ASPC] = CP(NULL ),
[RT_ASTP] = CP(NULL ),[RT_AVIF] = CP(NULL ),[RT_BOOK] = CP(NULL ),
[RT_BPTD] = CP(NULL ),[RT_CAMS] = CP(NULL ),[RT_CELL] = CP(NULL ),
[RT_CLAS] = CP(NULL ),[RT_CLDC] = CP(NULL ),[RT_CLFM] = CP(NULL ),
[RT_CLMT] = CP(NULL ),[RT_COBJ] = CP(NULL ),[RT_COLL] = CP(NULL ),
[RT_CONT] = CP(r_cont),[RT_CPTH] = CP(NULL ),[RT_CSTY] = CP(NULL ),
[RT_DEBR] = CP(NULL ),[RT_DIAL] = CP(NULL ),[RT_DLBR] = CP(NULL ),
[RT_DLVW] = CP(NULL ),[RT_DOBJ] = CP(NULL ),[RT_DOOR] = CP(r_door),
[RT_DUAL] = CP(NULL ),[RT_ECZN] = CP(NULL ),[RT_EFSH] = CP(NULL ),
[RT_ENCH] = CP(NULL ),[RT_EQUP] = CP(NULL ),[RT_EXPL] = CP(NULL ),
[RT_EYES] = CP(NULL ),[RT_FACT] = CP(NULL ),[RT_FLOR] = CP(r_flor),
[RT_FLST] = CP(NULL ),[RT_FSTP] = CP(NULL ),[RT_FSTS] = CP(NULL ),
[RT_FURN] = CP(NULL ),[RT_GLOB] = CP(NULL ),[RT_GMST] = CP(NULL ),
[RT_GRAS] = CP(NULL ),[RT_GRUP] = CP(NULL ),[RT_HAIR] = CP(NULL ),
[RT_HAZD] = CP(NULL ),[RT_HDPT] = CP(NULL ),[RT_IDLE] = CP(NULL ),
[RT_IDLM] = CP(NULL ),[RT_IMAD] = CP(NULL ),[RT_IMGS] = CP(NULL ),
[RT_INFO] = CP(NULL ),[RT_INGR] = CP(r_ingr),[RT_IPCT] = CP(NULL ),
[RT_IPDS] = CP(NULL ),[RT_KEYM] = CP(r_keym),[RT_KYWD] = CP(NULL ),
[RT_LAND] = CP(NULL ),[RT_LCRT] = CP(NULL ),[RT_LCTN] = CP(NULL ),
[RT_LGTM] = CP(NULL ),[RT_LIGH] = CP(r_ligh),[RT_LSCR] = CP(NULL ),
[RT_LTEX] = CP(NULL ),[RT_LVLI] = CP(NULL ),[RT_LVLN] = CP(NULL ),
[RT_LVSP] = CP(NULL ),[RT_MATO] = CP(NULL ),[RT_MATT] = CP(NULL ),
[RT_MESG] = CP(NULL ),[RT_MGEF] = CP(NULL ),[RT_MISC] = CP(r_misc),
[RT_MOVT] = CP(NULL ),[RT_MSTT] = CP(r_mstt),[RT_MUSC] = CP(NULL ),
[RT_MUST] = CP(NULL ),[RT_NAVI] = CP(NULL ),[RT_NAVM] = CP(NULL ),
[RT_NOTE] = CP(NULL ),[RT_NPC_] = CP(NULL ),[RT_OTFT] = CP(NULL ),
[RT_PACK] = CP(NULL ),[RT_PERK] = CP(NULL ),[RT_PGRE] = CP(NULL ),
[RT_PHZD] = CP(NULL ),[RT_PROJ] = CP(NULL ),[RT_PWAT] = CP(NULL ),
[RT_QUST] = CP(NULL ),[RT_RACE] = CP(NULL ),[RT_REFR] = CP(NULL ),
[RT_REGN] = CP(NULL ),[RT_RELA] = CP(NULL ),[RT_REVB] = CP(NULL ),
[RT_RFCT] = CP(NULL ),[RT_RGDL] = CP(NULL ),[RT_SCEN] = CP(NULL ),
[RT_SCOL] = CP(NULL ),[RT_SCPT] = CP(NULL ),[RT_SCRL] = CP(r_scrl),
[RT_SHOU] = CP(NULL ),[RT_SLGM] = CP(r_slgm),[RT_SMBN] = CP(NULL ),
[RT_SMEN] = CP(NULL ),[RT_SMQN] = CP(NULL ),[RT_SNCT] = CP(NULL ),
[RT_SNDR] = CP(NULL ),[RT_SOPM] = CP(NULL ),[RT_SOUN] = CP(NULL ),
[RT_SPEL] = CP(NULL ),[RT_SPGD] = CP(NULL ),[RT_STAT] = CP(r_stat),
[RT_TACT] = CP(NULL ),[RT_TES4] = CP(NULL ),[RT_TREE] = CP(r_tree),
[RT_TXST] = CP(NULL ),[RT_VTYP] = CP(NULL ),[RT_WATR] = CP(NULL ),
[RT_WEAP] = CP(r_weap),[RT_WOOP] = CP(NULL ),[RT_WRLD] = CP(NULL ),
[RT_WTHR] = CP(NULL ),
};