diff --git a/NavmeshList/main.c b/NavmeshList/main.c index 94c9d96..c396c37 100644 --- a/NavmeshList/main.c +++ b/NavmeshList/main.c @@ -11,38 +11,38 @@ #include int main(void) { - FILE *fp; - errno_t ret = fopen_s(&fp, "Skyrim.esm", "rb"); + FILE *fp; + errno_t ret = fopen_s(&fp, "Skyrim.esm", "rb"); - if (ret || !fp) - return ret; + if (ret || !fp) + return ret; - fseek(fp, 0L, SEEK_END); - size_t size = ftell(fp); - rewind(fp); + fseek(fp, 0L, SEEK_END); + size_t size = ftell(fp); + rewind(fp); - char *buffer = malloc(size); - if (!buffer) - return errno; + char *buffer = malloc(size); + if (!buffer) + return errno; - size_t read = fread(buffer, sizeof(char), size, fp); - assert(read == size); + size_t read = fread(buffer, sizeof(char), size, fp); + assert(read == size); - struct esp_stats stats = espr_stats(buffer, size); + struct esp_stats stats = espr_stats(buffer, size); - char *decompressed = malloc(stats.decompressed_size); - if (!decompressed) - return errno; + char *decompressed = malloc(stats.decompressed_size); + if (!decompressed) + return errno; - // espr_print(buffer, size); + // espr_print(buffer, size); - espr_decompress(buffer, size, decompressed, stats.decompressed_size); + espr_decompress(buffer, size, decompressed, stats.decompressed_size); - free(buffer); + free(buffer); - espr_print(decompressed, stats.decompressed_size); + espr_print(decompressed, stats.decompressed_size); - free(decompressed); + free(decompressed); - return 0; + return 0; } diff --git a/espReader/ESPReader.h b/espReader/ESPReader.h index 77e2d04..afa891b 100644 --- a/espReader/ESPReader.h +++ b/espReader/ESPReader.h @@ -37,13 +37,13 @@ extern "C" { // There are 127 record types + a NONE type used for sanity checks #define RT_SIZE 128 -/* RT hash seed was externally calculated s.t. the fourcc codes perfectly hash - * into indices between 0 and 511. That is, there are no hashing collisions. - * This allows for hard coded lookup tables for the fourcc codes in a relatively +/* RT hash seed was externally calculated s.t. the fourcc codes perfectly hash + * into indices between 0 and 511. That is, there are no hashing collisions. + * This allows for hard coded lookup tables for the fourcc codes in a relatively * small space. * - * A minimal perfect hash is also possible with an intermediate seed table, - * though I'm not sure which is faster, if it's worth trying to speed this up, + * A minimal perfect hash is also possible with an intermediate seed table, + * though I'm not sure which is faster, if it's worth trying to speed this up, * etc. */ #define RT_HASH_SIZE 512 @@ -62,220 +62,229 @@ extern "C" { #define STR_LIT(L) { .lit = L , .size = sizeof( L ) - 1 } - // - // === FORWARD DEFS === - // + // + // === FORWARD DEFS === + // - typedef union type4 Type4; - typedef struct timestamp Timestamp; - typedef struct group Group; - typedef struct record Record; - typedef struct field Field; - typedef struct meta_node MetaNode; + typedef union type4 Type4; + typedef struct timestamp Timestamp; + typedef struct group Group; + typedef struct record Record; + typedef struct field Field; + typedef struct meta_node MetaNode; - // - // === SIMPLE TYPES === - // + // + // === SIMPLE TYPES === + // - // 3 byte ID, upper byte is determined at run time and is used to reference - // across esp/esm files - typedef uint32_t formid; + // 3 byte ID, upper byte is determined at run time and is used to + // reference across esp/esm files + typedef uint32_t formid; - // char[4] with uint32_t access, used to access fourcc values - union type4 { - char bytes[4]; - uint32_t uint; - }; + // char[4] with uint32_t access, used to access fourcc values + union type4 { + char bytes[4]; + uint32_t uint; + }; - struct str_lit { - const char *const lit; - const int size; - const char _pad[4]; - }; + struct str_lit { + const char *const lit; + const int size; + const char _pad[4]; + }; - // Inner type for Record Flag String LUT. Indexed by flag bit. - typedef const struct str_lit rfs_inner[RFS_INNER_SIZE]; + // Inner type for Record Flag String LUT. Indexed by flag bit. + typedef const struct str_lit rfs_inner[RFS_INNER_SIZE]; - struct esp_stats { - size_t decompressed_size; - uint32_t group_count; - uint32_t record_count; - }; + struct esp_stats { + size_t decompressed_size; + uint32_t group_count; + uint32_t record_count; + }; - struct str_buf { - char *buf; - int size; - char _pad[4]; - }; + struct str_buf { + char *buf; + int size; + char _pad[4]; + }; - struct sized_buf { - char *data; - size_t size; - }; + struct sized_buf { + char *data; + size_t size; + }; - // - // === ENUMS === - // + // + // === ENUMS === + // - // Tag for generic node tagged union - enum node_type { - NT_GROUP, - NT_RECORD, - }; + // Tag for generic node tagged union + enum node_type { + NT_GROUP, + NT_RECORD, + }; - // Record type enum - enum record_type { - NONE, - AACT, ACHR, ACTI, ADDN, ALCH, AMMO, - ANIO, APPA, ARMA, ARMO, ARTO, ASPC, - ASTP, AVIF, BOOK, BPTD, CAMS, CELL, - CLAS, CLDC, CLFM, CLMT, COBJ, COLL, - CONT, CPTH, CSTY, DEBR, DIAL, DLBR, - DLVW, DOBJ, DOOR, DUAL, ECZN, EFSH, - ENCH, EQUP, EXPL, EYES, FACT, FLOR, - FLST, FSTP, FSTS, FURN, GLOB, GMST, - GRAS, GRUP, HAIR, HAZD, HDPT, IDLE, - IDLM, IMAD, IMGS, INFO, INGR, IPCT, - IPDS, KEYM, KYWD, LAND, LCRT, LCTN, - LGTM, LIGH, LSCR, LTEX, LVLI, LVLN, - LVSP, MATO, MATT, MESG, MGEF, MISC, - MOVT, MSTT, MUSC, MUST, NAVI, NAVM, - NOTE, NPC_, OTFT, PACK, PERK, PGRE, - PHZD, PROJ, PWAT, QUST, RACE, REFR, - REGN, RELA, REVB, RFCT, RGDL, SCEN, - SCOL, SCPT, SCRL, SHOU, SLGM, SMBN, - SMEN, SMQN, SNCT, SNDR, SOPM, SOUN, - SPEL, SPGD, STAT, TACT, TES4, TREE, - TXST, VTYP, WATR, WEAP, WOOP, WRLD, - WTHR, - }; + // Record type enum + enum record_type { + NONE, + AACT, ACHR, ACTI, ADDN, ALCH, AMMO, + ANIO, APPA, ARMA, ARMO, ARTO, ASPC, + ASTP, AVIF, BOOK, BPTD, CAMS, CELL, + CLAS, CLDC, CLFM, CLMT, COBJ, COLL, + CONT, CPTH, CSTY, DEBR, DIAL, DLBR, + DLVW, DOBJ, DOOR, DUAL, ECZN, EFSH, + ENCH, EQUP, EXPL, EYES, FACT, FLOR, + FLST, FSTP, FSTS, FURN, GLOB, GMST, + GRAS, GRUP, HAIR, HAZD, HDPT, IDLE, + IDLM, IMAD, IMGS, INFO, INGR, IPCT, + IPDS, KEYM, KYWD, LAND, LCRT, LCTN, + LGTM, LIGH, LSCR, LTEX, LVLI, LVLN, + LVSP, MATO, MATT, MESG, MGEF, MISC, + MOVT, MSTT, MUSC, MUST, NAVI, NAVM, + NOTE, NPC_, OTFT, PACK, PERK, PGRE, + PHZD, PROJ, PWAT, QUST, RACE, REFR, + REGN, RELA, REVB, RFCT, RGDL, SCEN, + SCOL, SCPT, SCRL, SHOU, SLGM, SMBN, + SMEN, SMQN, SNCT, SNDR, SOPM, SOUN, + SPEL, SPGD, STAT, TACT, TES4, TREE, + TXST, VTYP, WATR, WEAP, WOOP, WRLD, + WTHR, + }; - // Group type enum - enum group_type { - GT_TOP = 0, - GT_WORLD_CHILDREN = 1, - GT_INTERIOR_CELL_BLOCK = 2, - GT_INTERIOR_CELL_SUBBLOCK = 3, - GT_EXTERIOR_CELL_BLOCK = 4, - GT_EXTERIOR_CELL_SUBBLOCK = 5, - GT_CELL_CHILDREN = 6, - GT_TOPIC_CHILDREN = 7, - GT_CELL_PERSISTENT_CHILDREN = 8, - GT_CELL_TEMPORARY_CHILDREN = 9, - }; + // Group type enum + enum group_type { + GT_TOP = 0, + GT_WORLD_CHILDREN = 1, + GT_INTERIOR_CELL_BLOCK = 2, + GT_INTERIOR_CELL_SUBBLOCK = 3, + GT_EXTERIOR_CELL_BLOCK = 4, + GT_EXTERIOR_CELL_SUBBLOCK = 5, + GT_CELL_CHILDREN = 6, + GT_TOPIC_CHILDREN = 7, + GT_CELL_PERSISTENT_CHILDREN = 8, + GT_CELL_TEMPORARY_CHILDREN = 9, + }; - // - // === COMPOSITE TYPES === - // + // + // === COMPOSITE TYPES === + // - // Generic node in the esp/esm tree - typedef struct node Node; - struct node { - union { - Group *group; - Record *record; - } header; - char *data; - enum node_type type; - uint32_t _pad; - }; + // Generic node in the esp/esm tree + typedef struct node Node; + struct node { + union { + Group *group; + Record *record; + } header; + char *data; + enum node_type type; + uint32_t _pad; + }; - // Used for passing around parsed timestamps - struct timestamp { - uint16_t year; - uint8_t month; - uint8_t day; - }; + // Used for passing around parsed timestamps + struct timestamp { + uint16_t year; + uint8_t month; + uint8_t day; + }; - /* Given to espr_walk. - * - * pre is called before the children of the current node have been walked - * post is called after the children of the current node have been walked - * - * carry_out and carry_in is a pointer to a void * on the stack that can be - * used for passing data between pre and post for a node. - * - * data is a pointer that the user can supply when calling espr_walk that - * will be passed to pre and post when they are called. - */ - struct walker_callbacks { - void (*pre)(Node n, void *data, void **carry_out, void *from_parent, void **to_children); - void (*post)(Node n, void *data, void *carry_in); - void *data; - }; + /* Given to espr_walk. + * + * pre is called before the children of the current node have been + * walked post is called after the children of the current node have + * been walked + * + * carry_out and carry_in is a pointer to a void * on the stack that can + * be used for passing data between pre and post for a node. + * + * data is a pointer that the user can supply when calling espr_walk + * that will be passed to pre and post when they are called. + */ + struct walker_callbacks { + void (*pre)( + Node n, + void *data, + void **carry_out, + void *from_parent, + void **to_children + ); + void (*post)(Node n, void *data, void *carry_in); + void *data; + }; - /* Meta Nodes are used for constructing a more flexible tree structure - * on top of the natural structure of ESP/ESM files. - * - * Meta Nodes do not create a pure tree structure, rather they have pointers to - * their parent and first child, and children have pointers backwards and - * forward through a linked list of all of the children of the parent node. - * - * There is no root node as such, rather there is a root linked list for which - * all of the Meta Nodes have no parents. - * - * While the ESP/ESM buffer can be modified in-place, any modification that - * changes the size of the stored data cannot be directly written to the buffer - * without first shifting all of the data after the point of modification. - * - * Modifications that change data size are: - * - Adding or deleting a group or record - * - Adding or deleting a field in a record - * - Changing a variable length field with data of different length - * - * With a Meta Node you can instead allocate new, arbitrarily sized memory for - * the node data. The Meta Node tree can then be walked to reconstruct a - * contiguous view of discontiguous memory. - */ - struct meta_node { - Node n; - MetaNode *parent; - MetaNode *first_child; - MetaNode *last_child; - MetaNode *prev; - MetaNode *next; - }; + /* Meta Nodes are used for constructing a more flexible tree structure + * on top of the natural structure of ESP/ESM files. + * + * Meta Nodes do not create a pure tree structure, rather they have + * pointers to their parent and first child, and children have pointers + * backwards and forward through a linked list of all of the children of + * the parent node. + * + * There is no root node as such, rather there is a root linked list for + * which all of the Meta Nodes have no parents. + * + * While the ESP/ESM buffer can be modified in-place, any modification + * that changes the size of the stored data cannot be directly written + * to the buffer without first shifting all of the data after the point + * of modification. + * + * Modifications that change data size are: + * - Adding or deleting a group or record + * - Adding or deleting a field in a record + * - Changing a variable length field with data of different length + * + * With a Meta Node you can instead allocate new, arbitrarily sized + * memory for the node data. The Meta Node tree can then be walked to + * reconstruct a contiguous view of discontiguous memory. + */ + struct meta_node { + Node n; + MetaNode *parent; + MetaNode *first_child; + MetaNode *last_child; + MetaNode *prev; + MetaNode *next; + }; - // - // === BINARY DATA OVERLAYS === - // + // + // === BINARY DATA OVERLAYS === + // #pragma pack(push, 1) // Group header overlay - struct group { - Type4 grup; // always RT_GRUP - uint32_t size; // uncludes the 24 byte group header - union { - Type4 type; // this may be mangled and should not be relied on - formid formid; - int32_t number; - int16_t coord[2]; - } label; // access determined by the `type` below - int32_t type; // group_type enum - uint16_t timestamp; - uint16_t vcinfo; - uint32_t unknown; - }; + struct group { + Type4 grup; // always RT_GRUP + uint32_t size; // uncludes the 24 byte group header + union { + Type4 type; // this may be mangled, do not rely on + formid formid; + int32_t number; + int16_t coord[2]; + } label; // access determined by the `type` below + int32_t type; // group_type enum + uint16_t timestamp; + uint16_t vcinfo; + uint32_t unknown; + }; - // Record header overlay - struct record { - Type4 type; - uint32_t size; - uint32_t flags; - uint32_t formid; - uint16_t timestamp; - uint16_t vcinfo; - uint16_t version; - uint16_t unknown; - }; + // Record header overlay + struct record { + Type4 type; + uint32_t size; + uint32_t flags; + uint32_t formid; + uint16_t timestamp; + uint16_t vcinfo; + uint16_t version; + uint16_t unknown; + }; - // Field header overlay - struct field { - Type4 type; - uint16_t size; - }; + // Field header overlay + struct field { + Type4 type; + uint16_t size; + }; #pragma pack(pop) @@ -284,77 +293,78 @@ extern "C" { // // record type enum to fourcc value - extern const uint32_t rt[RT_SIZE]; + extern const uint32_t rt[RT_SIZE]; - // for converting between record_type and record_type_hash enums - extern const uint16_t rt2rth[RT_SIZE]; - extern const uint8_t rth2rt[RT_HASH_SIZE]; + // for converting between record_type and record_type_hash enums + extern const uint16_t rt2rth[RT_SIZE]; + extern const uint8_t rth2rt[RT_HASH_SIZE]; - // type -> flag mappings - // NULL table pointers indicate no flags - // NULL string pointers indicate invalid flag - extern rfs_inner *const rfs[RT_SIZE]; - extern rfs_inner *const rfs_refr[RT_SIZE]; + // type -> flag mappings + // NULL table pointers indicate no flags + // NULL string pointers indicate invalid flag + extern rfs_inner *const rfs[RT_SIZE]; + extern rfs_inner *const rfs_refr[RT_SIZE]; - // Expected (probably) order of top level groups in an esp/esm - extern const enum record_type group_order[GO_SIZE]; + // Expected (probably) order of top level groups in an esp/esm + extern const enum record_type group_order[GO_SIZE]; - // Printable strings for group types - extern const struct str_lit group_type_strings[GTS_SIZE]; + // Printable strings for group types + extern const struct str_lit group_type_strings[GTS_SIZE]; - // - // === FUNCTIONS === - // + // + // === FUNCTIONS === + // - // hashes type value into a record type enum value - inline uint32_t rt_hash(uint32_t type) { - return rth2rt[uint32_t_msh(type, RT_HASH_BITS, RT_HASH_SEED)]; - } + // hashes type value into a record type enum value + inline uint32_t rt_hash(uint32_t type) { + return rth2rt[uint32_t_msh(type, RT_HASH_BITS, RT_HASH_SEED)]; + } - /* `espr_walk` walks through the tree structure of the esp/esm binary data - * starting at `data` of `size` bytes. - * - * `cb` is a callback that takes a `Node` to process. `pt` is a pointer to - * arbitrary data that is passed on to `cb` whenever it is called. - * - * Data is walked sequentially. Nodes passed to `cb` will be strictly - * increasing in terms of memory location within the buffer. - */ - void espr_walk(char *data, size_t size, struct walker_callbacks cb); + /* `espr_walk` walks through the tree structure of the esp/esm binary + * data starting at `data` of `size` bytes. + * + * `cb` is a callback that takes a `Node` to process. `pt` is a pointer + * to arbitrary data that is passed on to `cb` whenever it is called. + * + * Data is walked sequentially. Nodes passed to `cb` will be strictly + * increasing in terms of memory location within the buffer. + */ + void espr_walk(char *data, size_t size, struct walker_callbacks cb); - /* `espr_print` prints the header of every group and record in the given - * esp/esm binary data. - */ - void espr_print(char *data, size_t size); + /* `espr_print` prints the header of every group and record in the given + * esp/esm binary data. + */ + void espr_print(char *data, size_t size); - /* Calculates the number of groups and records in the esp/esm file and the - * size of the esp/esm if all of the compressed records were decompressed. - */ - struct esp_stats espr_stats(char *data, size_t size); + /* Calculates the number of groups and records in the esp/esm file and + * the size of the esp/esm if all of the compressed records were + * decompressed. + */ + struct esp_stats espr_stats(char *data, size_t size); - // Calculates the number of formid's in an esm/esp from the stats - inline uint32_t espr_formid_count(struct esp_stats stats) { - return stats.record_count; - } + // Calculates the number of formid's in an esm/esp from the stats + inline uint32_t espr_formid_count(struct esp_stats stats) { + return stats.record_count; + } - // Calculates the number of nodes in the esp/esm from the stats - inline uint32_t espr_node_count(struct esp_stats stats) { - return stats.record_count + stats.group_count; - } + // Calculates the number of nodes in the esp/esm from the stats + inline uint32_t espr_node_count(struct esp_stats stats) { + return stats.record_count + stats.group_count; + } - // Calculates the size of a MetaNode tree constructed over the esp/esm for - // which the stats were generated. - inline size_t espr_tree_size(struct esp_stats stats) { - return sizeof(MetaNode) * espr_node_count(stats); - } + // Calculates the size of a MetaNode tree constructed over the esp/esm + // for which the stats were generated. + inline size_t espr_tree_size(struct esp_stats stats) { + return sizeof(MetaNode) * espr_node_count(stats); + } - /* Copies the data from `data` to `buf` decompressing compressed fields as - * it does so. buf_size should be the value returned from - * `espr_decompressed_size`, and `buf` should be at least of that size. - */ - void espr_decompress(char *data, size_t size, char *buf, size_t buf_size); + /* Copies the data from `data` to `buf` decompressing compressed fields + * as it does so. buf_size should be the value returned from + * `espr_decompressed_size`, and `buf` should be at least of that size. + */ + void espr_decompress(char *data, size_t size, char *buf, size_t buf_size); - MetaNode *espr_create_tree(struct sized_buf in, struct sized_buf tree); + MetaNode *espr_create_tree(struct sized_buf in, struct sized_buf tree); // End C++ guard #ifdef __cplusplus diff --git a/espReader/LUT.c b/espReader/LUT.c index f6aaccf..7af5519 100644 --- a/espReader/LUT.c +++ b/espReader/LUT.c @@ -12,273 +12,273 @@ 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 + 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'), + [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, + 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, + [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, + [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 struct str_lit group_type_strings[GTS_SIZE] = { - STR_LIT("Top Type"), - STR_LIT("World Children"), - STR_LIT("Interior Cell Block"), - STR_LIT("Interior Cell Sub-Block"), - STR_LIT("Exterior Cell"), - STR_LIT("Exterior Cell Sub-Block"), - STR_LIT("Cell Children"), - STR_LIT("Topic Children"), - STR_LIT("Cell Persistent Children"), - STR_LIT("Cell Temporary Children"), + STR_LIT("Top Type"), + STR_LIT("World Children"), + STR_LIT("Interior Cell Block"), + STR_LIT("Interior Cell Sub-Block"), + STR_LIT("Exterior Cell"), + STR_LIT("Exterior Cell Sub-Block"), + STR_LIT("Cell Children"), + STR_LIT("Topic Children"), + STR_LIT("Cell Persistent Children"), + STR_LIT("Cell Temporary Children"), }; // Non-REFR flags rfs_inner achr = { - [9] = STR_LIT("Starts Dead"), - [10] = STR_LIT("Persistent"), - [11] = STR_LIT("Initially Disabled"), - [25] = STR_LIT("No AI Acquire"), - [29] = STR_LIT("Don't Havok Settle"), - [30] = STR_LIT("ACHR Unknown 30"), + [9] = STR_LIT("Starts Dead"), + [10] = STR_LIT("Persistent"), + [11] = STR_LIT("Initially Disabled"), + [25] = STR_LIT("No AI Acquire"), + [29] = STR_LIT("Don't Havok Settle"), + [30] = STR_LIT("ACHR Unknown 30"), }; rfs_inner acti = { - [6] = STR_LIT("Has Tree LOD"), - [8] = STR_LIT("Must Update Anims"), - [9] = STR_LIT("Hidden From Local Map"), - [15] = STR_LIT("Has Distant LOD"), - [16] = STR_LIT("Random Anim Start"), - [17] = STR_LIT("Dangerous"), - [20] = STR_LIT("Ignore Object Interaction"), - [23] = STR_LIT("Is Marker"), - [25] = STR_LIT("Obstacle"), - [26] = STR_LIT("NavMesh Generation - Filter"), - [27] = STR_LIT("NavMesh Generation - Bounding Box"), - [29] = STR_LIT("Child Can Use"), - [30] = STR_LIT("NavMesh Generation - Ground"), + [6] = STR_LIT("Has Tree LOD"), + [8] = STR_LIT("Must Update Anims"), + [9] = STR_LIT("Hidden From Local Map"), + [15] = STR_LIT("Has Distant LOD"), + [16] = STR_LIT("Random Anim Start"), + [17] = STR_LIT("Dangerous"), + [20] = STR_LIT("Ignore Object Interaction"), + [23] = STR_LIT("Is Marker"), + [25] = STR_LIT("Obstacle"), + [26] = STR_LIT("NavMesh Generation - Filter"), + [27] = STR_LIT("NavMesh Generation - Bounding Box"), + [29] = STR_LIT("Child Can Use"), + [30] = STR_LIT("NavMesh Generation - Ground"), }; rfs_inner tact = { - [9] = STR_LIT("Hidden From Local Map"), - [16] = STR_LIT("Random Anim Start"), - [17] = STR_LIT("Radio Station"), + [9] = STR_LIT("Hidden From Local Map"), + [16] = STR_LIT("Random Anim Start"), + [17] = STR_LIT("Radio Station"), }; rfs_inner alch = { - [29] = STR_LIT("Medicine"), + [29] = STR_LIT("Medicine"), }; rfs_inner ammo = { - [2] = STR_LIT("Non-Playable"), + [2] = STR_LIT("Non-Playable"), }; rfs_inner anio = { - [9] = STR_LIT("ANIO Unknown 9"), + [9] = STR_LIT("ANIO Unknown 9"), }; rfs_inner armo = { - [2] = STR_LIT("Non-Playable"), - [6] = STR_LIT("Shield"), - [10] = STR_LIT("ARMO Unknown 10"), - [15] = STR_LIT("ARMO Unknown 15"), + [2] = STR_LIT("Non-Playable"), + [6] = STR_LIT("Shield"), + [10] = STR_LIT("ARMO Unknown 10"), + [15] = STR_LIT("ARMO Unknown 15"), }; #define REFERENCE_RECORD { \ - [7] = STR_LIT("Turn Off Fire"), \ - [10] = STR_LIT("Persistent"), \ - [11] = STR_LIT("Initially Disabled"), \ - [28] = STR_LIT("Reflected by Auto Water"), \ - [30] = STR_LIT("No Respawn"), \ + [7] = STR_LIT("Turn Off Fire"), \ + [10] = STR_LIT("Persistent"), \ + [11] = STR_LIT("Initially Disabled"), \ + [28] = STR_LIT("Reflected by Auto Water"), \ + [30] = STR_LIT("No Respawn"), \ } rfs_inner parw = REFERENCE_RECORD; @@ -293,249 +293,249 @@ rfs_inner pmis = REFERENCE_RECORD; #undef REFERENCE_RECORD rfs_inner cell = { - [10] = STR_LIT("Persistent"), - [17] = STR_LIT("Off Limits"), - [18] = STR_LIT("Compressed"), - [19] = STR_LIT("Can't Wait"), + [10] = STR_LIT("Persistent"), + [17] = STR_LIT("Off Limits"), + [18] = STR_LIT("Compressed"), + [19] = STR_LIT("Can't Wait"), }; rfs_inner cont = { - [15] = STR_LIT("Has Distant LOD"), - [16] = STR_LIT("Random Anim Start"), - [25] = STR_LIT("Obstacle"), - [26] = STR_LIT("NavMesh Generation - Filter"), - [27] = STR_LIT("NavMesh Generation - Bounding Box"), - [30] = STR_LIT("NavMesh Generation - Ground"), + [15] = STR_LIT("Has Distant LOD"), + [16] = STR_LIT("Random Anim Start"), + [25] = STR_LIT("Obstacle"), + [26] = STR_LIT("NavMesh Generation - Filter"), + [27] = STR_LIT("NavMesh Generation - Bounding Box"), + [30] = STR_LIT("NavMesh Generation - Ground"), }; rfs_inner csty = { - [19] = STR_LIT("Allow Dual Wielding"), + [19] = STR_LIT("Allow Dual Wielding"), }; rfs_inner door = { - [15] = STR_LIT("Has Distant LOD"), - [16] = STR_LIT("Random Anim Start"), - [23] = STR_LIT("Is Marker"), + [15] = STR_LIT("Has Distant LOD"), + [16] = STR_LIT("Random Anim Start"), + [23] = STR_LIT("Is Marker"), }; rfs_inner eyes = { - [2] = STR_LIT("Non-Playable"), + [2] = STR_LIT("Non-Playable"), }; rfs_inner furn = { - [7] = STR_LIT("Is Perch"), - [16] = STR_LIT("Has Distant LOD"), - [23] = STR_LIT("Is Marker"), - [28] = STR_LIT("Must Exit To Talk"), - [29] = STR_LIT("Child Can Use"), + [7] = STR_LIT("Is Perch"), + [16] = STR_LIT("Has Distant LOD"), + [23] = STR_LIT("Is Marker"), + [28] = STR_LIT("Must Exit To Talk"), + [29] = STR_LIT("Child Can Use"), }; rfs_inner glob = { - [6] = STR_LIT("Constant"), + [6] = STR_LIT("Constant"), }; rfs_inner hdpt = { - [2] = STR_LIT("Non-Playable"), + [2] = STR_LIT("Non-Playable"), }; rfs_inner mstt = { - [8] = STR_LIT("Must Update Anims"), - [9] = STR_LIT("Hidden From Local Map"), - [15] = STR_LIT("Has Distant LOD"), - [16] = STR_LIT("Random Anim Start"), - [19] = STR_LIT("Has Currents"), - [25] = STR_LIT("Obstacle"), - [26] = STR_LIT("NavMesh Generation - Filter"), - [27] = STR_LIT("NavMesh Generation - Bounding Box"), - [30] = STR_LIT("NavMesh Generation - Ground"), + [8] = STR_LIT("Must Update Anims"), + [9] = STR_LIT("Hidden From Local Map"), + [15] = STR_LIT("Has Distant LOD"), + [16] = STR_LIT("Random Anim Start"), + [19] = STR_LIT("Has Currents"), + [25] = STR_LIT("Obstacle"), + [26] = STR_LIT("NavMesh Generation - Filter"), + [27] = STR_LIT("NavMesh Generation - Bounding Box"), + [30] = STR_LIT("NavMesh Generation - Ground"), }; rfs_inner idlm = { - [29] = STR_LIT("Child Can Use"), + [29] = STR_LIT("Child Can Use"), }; rfs_inner slgm = { - [17] = STR_LIT("Can Hold NPC Soul"), + [17] = STR_LIT("Can Hold NPC Soul"), }; rfs_inner navm = { - [18] = STR_LIT("Compressed"), - [26] = STR_LIT("AutoGen"), - [31] = STR_LIT("NavmeshGenCell"), + [18] = STR_LIT("Compressed"), + [26] = STR_LIT("AutoGen"), + [31] = STR_LIT("NavmeshGenCell"), }; rfs_inner perk = { - [2] = STR_LIT("Non-Playable"), + [2] = STR_LIT("Non-Playable"), }; rfs_inner shou = { - [7] = STR_LIT("Treat Spells As Powers"), + [7] = STR_LIT("Treat Spells As Powers"), }; rfs_inner rela = { - [6] = STR_LIT("Secret"), + [6] = STR_LIT("Secret"), }; rfs_inner clfm = { - [2] = STR_LIT("Non-Playable"), + [2] = STR_LIT("Non-Playable"), }; rfs_inner info = { - [13] = STR_LIT("Actor Changed"), + [13] = STR_LIT("Actor Changed"), }; rfs_inner keym = { - [2] = STR_LIT("Non-Playable"), + [2] = STR_LIT("Non-Playable"), }; rfs_inner land = { - [18] = STR_LIT("Compressed"), + [18] = STR_LIT("Compressed"), }; rfs_inner ligh = { - [16] = STR_LIT("Random Anim Start"), - [17] = STR_LIT("Portal-strict"), - [25] = STR_LIT("Obstacle"), + [16] = STR_LIT("Random Anim Start"), + [17] = STR_LIT("Portal-strict"), + [25] = STR_LIT("Obstacle"), }; rfs_inner lscr = { - [10] = STR_LIT("Displays In Main Menu"), + [10] = STR_LIT("Displays In Main Menu"), }; rfs_inner misc = { - [2] = STR_LIT("Non-Playable"), + [2] = STR_LIT("Non-Playable"), }; rfs_inner npc_ = { - [10] = STR_LIT("NPC_ Unknown 10"), - [18] = STR_LIT("Compressed"), - [19] = STR_LIT("NPC_ Unknown 19"), - [29] = STR_LIT("Bleedout Override"), + [10] = STR_LIT("NPC_ Unknown 10"), + [18] = STR_LIT("Compressed"), + [19] = STR_LIT("NPC_ Unknown 19"), + [29] = STR_LIT("Bleedout Override"), }; rfs_inner race = { - [19] = STR_LIT("Critter (?)"), + [19] = STR_LIT("Critter (?)"), }; // these are generic refr flags for any reference type not handled by the refr // specific flag lut rfs_inner refr = { - [10] = STR_LIT("Persistent"), - [11] = STR_LIT("Initially Disabled"), - [16] = STR_LIT("Is Full LOD"), - [26] = STR_LIT("Filter (Collision Geometry)"), - [27] = STR_LIT("Bounding Box (Collision Geometry)"), - [30] = STR_LIT("Ground"), - [31] = STR_LIT("Multibound"), + [10] = STR_LIT("Persistent"), + [11] = STR_LIT("Initially Disabled"), + [16] = STR_LIT("Is Full LOD"), + [26] = STR_LIT("Filter (Collision Geometry)"), + [27] = STR_LIT("Bounding Box (Collision Geometry)"), + [30] = STR_LIT("Ground"), + [31] = STR_LIT("Multibound"), }; rfs_inner regn = { - [6] = STR_LIT("Border Region"), + [6] = STR_LIT("Border Region"), }; rfs_inner stat = { - [2] = STR_LIT("Never Fades"), - [5] = STR_LIT("Deleted"), - [6] = STR_LIT("Has Tree LOD"), - [7] = STR_LIT("Add-On LOD Object"), - [9] = STR_LIT("Hidden From Local Map"), - [11] = STR_LIT("STAT Unknown 11"), - [15] = STR_LIT("Has Distant LOD"), - [16] = STR_LIT("STAT Unknown 16"), - [17] = STR_LIT("Uses HD LOD Texture"), - [19] = STR_LIT("Has Currents"), - [23] = STR_LIT("Is Marker"), - [25] = STR_LIT("Obstacle"), - [26] = STR_LIT("NavMesh Generation - Filter"), - [27] = STR_LIT("NavMesh Generation - Bounding Box"), - [28] = STR_LIT("Show In World Map"), - [30] = STR_LIT("NavMesh Generation - Ground"), + [2] = STR_LIT("Never Fades"), + [5] = STR_LIT("Deleted"), + [6] = STR_LIT("Has Tree LOD"), + [7] = STR_LIT("Add-On LOD Object"), + [9] = STR_LIT("Hidden From Local Map"), + [11] = STR_LIT("STAT Unknown 11"), + [15] = STR_LIT("Has Distant LOD"), + [16] = STR_LIT("STAT Unknown 16"), + [17] = STR_LIT("Uses HD LOD Texture"), + [19] = STR_LIT("Has Currents"), + [23] = STR_LIT("Is Marker"), + [25] = STR_LIT("Obstacle"), + [26] = STR_LIT("NavMesh Generation - Filter"), + [27] = STR_LIT("NavMesh Generation - Bounding Box"), + [28] = STR_LIT("Show In World Map"), + [30] = STR_LIT("NavMesh Generation - Ground"), }; rfs_inner tes4 = { - [0] = STR_LIT("ESM"), - [1] = STR_LIT("Altered"), - [2] = STR_LIT("Checked"), - [3] = STR_LIT("Active"), - [4] = STR_LIT("Optimized File"), - [5] = STR_LIT("Temp ID Owner"), - [7] = STR_LIT("Localized"), - [8] = STR_LIT("Precalc Data Only"), - [9] = STR_LIT("ESL"), + [0] = STR_LIT("ESM"), + [1] = STR_LIT("Altered"), + [2] = STR_LIT("Checked"), + [3] = STR_LIT("Active"), + [4] = STR_LIT("Optimized File"), + [5] = STR_LIT("Temp ID Owner"), + [7] = STR_LIT("Localized"), + [8] = STR_LIT("Precalc Data Only"), + [9] = STR_LIT("ESL"), }; rfs_inner tree = { - [15] = STR_LIT("Has Distant LOD"), + [15] = STR_LIT("Has Distant LOD"), }; rfs_inner weap = { - [2] = STR_LIT("Non-Playable"), + [2] = STR_LIT("Non-Playable"), }; rfs_inner wrld = { - [19] = STR_LIT("Can't Wait"), + [19] = STR_LIT("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), + [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] = STR_LIT("Hidden From Local Map"), \ - [10] = STR_LIT("Persistent"), \ - [11] = STR_LIT("Initially Disabled"), \ - [13] = STR_LIT("Sky Marker"), \ - [15] = STR_LIT("Visible When Distant"), \ - [16] = STR_LIT("Is Full LOD"), \ - [26] = STR_LIT("Filter (Collision Geometry)"), \ - [27] = STR_LIT("Bounding Box (Collision Geometry)"), \ - [28] = STR_LIT("Reflected By Auto Water"), \ - [29] = STR_LIT("Don't Havok Settle"), \ - [30] = STR_LIT("No Respawn"), \ - [31] = STR_LIT("Multibound"), \ + [9] = STR_LIT("Hidden From Local Map"), \ + [10] = STR_LIT("Persistent"), \ + [11] = STR_LIT("Initially Disabled"), \ + [13] = STR_LIT("Sky Marker"), \ + [15] = STR_LIT("Visible When Distant"), \ + [16] = STR_LIT("Is Full LOD"), \ + [26] = STR_LIT("Filter (Collision Geometry)"), \ + [27] = STR_LIT("Bounding Box (Collision Geometry)"), \ + [28] = STR_LIT("Reflected By Auto Water"), \ + [29] = STR_LIT("Don't Havok Settle"), \ + [30] = STR_LIT("No Respawn"), \ + [31] = STR_LIT("Multibound"), \ } rfs_inner r_acti = REFR_GROUP1; @@ -546,78 +546,78 @@ rfs_inner r_flor = REFR_GROUP1; #undef REFR_GROUP1 rfs_inner r_cont = { - [10] = STR_LIT("Persistent"), - [11] = STR_LIT("Initially Disabled"), - [16] = STR_LIT("Is Full LOD"), - [25] = STR_LIT("No AI Acquire"), - [26] = STR_LIT("Filter (Collision Geometry)"), - [27] = STR_LIT("Bounding Box (Collision Geometry)"), - [28] = STR_LIT("Reflected By Auto Water"), - [29] = STR_LIT("Don't Havok Settle"), - [30] = STR_LIT("Ground"), - [31] = STR_LIT("Multibound"), + [10] = STR_LIT("Persistent"), + [11] = STR_LIT("Initially Disabled"), + [16] = STR_LIT("Is Full LOD"), + [25] = STR_LIT("No AI Acquire"), + [26] = STR_LIT("Filter (Collision Geometry)"), + [27] = STR_LIT("Bounding Box (Collision Geometry)"), + [28] = STR_LIT("Reflected By Auto Water"), + [29] = STR_LIT("Don't Havok Settle"), + [30] = STR_LIT("Ground"), + [31] = STR_LIT("Multibound"), }; rfs_inner r_door = { - [6] = STR_LIT("Hidden From Local Map"), - [8] = STR_LIT("Inaccessible"), - [10] = STR_LIT("Persistent"), - [11] = STR_LIT("Initially Disabled"), - [16] = STR_LIT("Is Full LOD"), - [26] = STR_LIT("Filter (Collision Geometry)"), - [27] = STR_LIT("Bounding Box (Collision Geometry)"), - [28] = STR_LIT("Reflected By Auto Water"), - [29] = STR_LIT("Don't Havok Settle"), - [30] = STR_LIT("No Respawn"), - [31] = STR_LIT("Multibound"), + [6] = STR_LIT("Hidden From Local Map"), + [8] = STR_LIT("Inaccessible"), + [10] = STR_LIT("Persistent"), + [11] = STR_LIT("Initially Disabled"), + [16] = STR_LIT("Is Full LOD"), + [26] = STR_LIT("Filter (Collision Geometry)"), + [27] = STR_LIT("Bounding Box (Collision Geometry)"), + [28] = STR_LIT("Reflected By Auto Water"), + [29] = STR_LIT("Don't Havok Settle"), + [30] = STR_LIT("No Respawn"), + [31] = STR_LIT("Multibound"), }; rfs_inner r_ligh = { - [8] = STR_LIT("Doesn't Light Water"), - [9] = STR_LIT("Casts Shadows"), - [10] = STR_LIT("Persistent"), - [11] = STR_LIT("Initially Disabled"), - [16] = STR_LIT("Never Fades"), - [17] = STR_LIT("Doesn't Light Landscape"), - [25] = STR_LIT("No AI Acquire"), - [28] = STR_LIT("Reflected By Auto Water"), - [29] = STR_LIT("Don't Havok Settle"), - [30] = STR_LIT("No Respawn"), - [31] = STR_LIT("Multibound"), + [8] = STR_LIT("Doesn't Light Water"), + [9] = STR_LIT("Casts Shadows"), + [10] = STR_LIT("Persistent"), + [11] = STR_LIT("Initially Disabled"), + [16] = STR_LIT("Never Fades"), + [17] = STR_LIT("Doesn't Light Landscape"), + [25] = STR_LIT("No AI Acquire"), + [28] = STR_LIT("Reflected By Auto Water"), + [29] = STR_LIT("Don't Havok Settle"), + [30] = STR_LIT("No Respawn"), + [31] = STR_LIT("Multibound"), }; rfs_inner r_mstt = { - [9] = STR_LIT("Motion Blur"), - [10] = STR_LIT("Persistent"), - [11] = STR_LIT("Initially Disabled"), - [16] = STR_LIT("Is Full LOD"), - [26] = STR_LIT("Filter (Collision Geometry)"), - [27] = STR_LIT("Bounding Box (Collision Geometry)"), - [28] = STR_LIT("Reflected By Auto Water"), - [29] = STR_LIT("Don't Havok Settle"), - [30] = STR_LIT("No Respawn"), - [31] = STR_LIT("Multibound"), + [9] = STR_LIT("Motion Blur"), + [10] = STR_LIT("Persistent"), + [11] = STR_LIT("Initially Disabled"), + [16] = STR_LIT("Is Full LOD"), + [26] = STR_LIT("Filter (Collision Geometry)"), + [27] = STR_LIT("Bounding Box (Collision Geometry)"), + [28] = STR_LIT("Reflected By Auto Water"), + [29] = STR_LIT("Don't Havok Settle"), + [30] = STR_LIT("No Respawn"), + [31] = STR_LIT("Multibound"), }; rfs_inner r_addn = { - [10] = STR_LIT("Persistent"), - [11] = STR_LIT("Initially Disabled"), - [16] = STR_LIT("Is Full LOD"), - [28] = STR_LIT("Reflected By Auto Water"), - [29] = STR_LIT("Don't Havok Settle"), - [30] = STR_LIT("No Respawn"), - [31] = STR_LIT("Multibound"), + [10] = STR_LIT("Persistent"), + [11] = STR_LIT("Initially Disabled"), + [16] = STR_LIT("Is Full LOD"), + [28] = STR_LIT("Reflected By Auto Water"), + [29] = STR_LIT("Don't Havok Settle"), + [30] = STR_LIT("No Respawn"), + [31] = STR_LIT("Multibound"), }; #define REFR_GROUP2 { \ - [10] = STR_LIT("Persistent"), \ - [11] = STR_LIT("Initially Disabled"), \ - [16] = STR_LIT("Is Full LOD"), \ - [25] = STR_LIT("No AI Acquire"), \ - [28] = STR_LIT("Reflected By Auto Water"), \ - [29] = STR_LIT("Don't Havok Settle"), \ - [30] = STR_LIT("No Respawn"), \ - [31] = STR_LIT("Multibound"), \ + [10] = STR_LIT("Persistent"), \ + [11] = STR_LIT("Initially Disabled"), \ + [16] = STR_LIT("Is Full LOD"), \ + [25] = STR_LIT("No AI Acquire"), \ + [28] = STR_LIT("Reflected By Auto Water"), \ + [29] = STR_LIT("Don't Havok Settle"), \ + [30] = STR_LIT("No Respawn"), \ + [31] = STR_LIT("Multibound"), \ } rfs_inner r_alch = REFR_GROUP2; @@ -633,48 +633,48 @@ rfs_inner r_weap = REFR_GROUP2; #undef 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 ), + [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 ), };