Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

nifxml spec formalization #75

Merged
merged 86 commits into from
Sep 18, 2019
Merged

nifxml spec formalization #75

merged 86 commits into from
Sep 18, 2019

Commits on May 15, 2018

  1. Configuration menu
    Copy the full SHA
    4034c3f View commit details
    Browse the repository at this point in the history

Commits on May 16, 2018

  1. NiPSFieldForce decoding

    hexabits committed May 16, 2018
    Configuration menu
    Copy the full SHA
    b8adcdd View commit details
    Browse the repository at this point in the history
  2. Configuration menu
    Copy the full SHA
    46c95e2 View commit details
    Browse the repository at this point in the history
  3. Configuration menu
    Copy the full SHA
    e137e0c View commit details
    Browse the repository at this point in the history
  4. NiPhysXScene, NiPhysXSceneDesc, NiPhysX particles

    Scene/SceneDesc were relatively old and unused and also quite complex to implement so they never got ported to XML from the 010 templates.
    
    Note:  Half the files that actually use Scene/SceneDesc are in Empire Earth III, which its version 20.2.0.8 behaves differently for these blocks than other 20.2.0.8 versions.  The only way to tell the difference is by the file extension, which is .nifcache.   This is beyond the scope of nif.xml, and so only the game files that match the version conditions of Gamebryo proper are supported.
    hexabits committed May 16, 2018
    Configuration menu
    Copy the full SHA
    c9334fe View commit details
    Browse the repository at this point in the history

Commits on May 17, 2018

  1. NiPSCurveEmitter

    hexabits committed May 17, 2018
    Configuration menu
    Copy the full SHA
    138594e View commit details
    Browse the repository at this point in the history
  2. Use NiBound where necessary

    Several objects used separate center/radius when it's actually an NiBound object.  This was apparent with the addition of additional data to NiBound for custom 20.3.0.9 versions for Divinity 2.
    hexabits committed May 17, 2018
    Configuration menu
    Copy the full SHA
    be3ce67 View commit details
    Browse the repository at this point in the history
  3. Fixes for 20.3.0.9 custom versions

    Only MdlManBinary.nif cannot be read for Divinity 2, and it appears to be some kind of rig filled with custom classes serialized to NIF.  There is no desire to decode this single NIF with 10 custom classes.
    
    Also the Divinity 2 XML files that have a Gamebryo header are ignored as they appear to just contain XML strings in more custom classes.
    hexabits committed May 17, 2018
    Configuration menu
    Copy the full SHA
    fcf42db View commit details
    Browse the repository at this point in the history
  4. "union" can be a reserved keyword

    In C++ and other langs, this compound member gets generated to "union" which clashes with the reserved keyword.
    hexabits committed May 17, 2018
    Configuration menu
    Copy the full SHA
    ed01a5b View commit details
    Browse the repository at this point in the history
  5. Fixes for 10.2.0.1/10.3.0.1/10.4.0.1 custom versions

    Enhanced support for WorldShift.
    
    In order to not complicate the objects, I fudged the official version conditions slightly to accommodate 10.4.0.1 given that no official versions exist between 10.2 and 20.0.
    
    Aside from the new custom block, only modified the conditions that were already there.
    hexabits committed May 17, 2018
    Configuration menu
    Copy the full SHA
    af2a5b8 View commit details
    Browse the repository at this point in the history

Commits on May 18, 2018

  1. Initial implementation for niftools#69

    Made `<version>` mean distinct combination of header values which produce identical block layouts.  This meant splitting up several main Versions into many based on User Version or Bethesda  Version.
    
    id = Used to uniquely identify this collection of NIF versions. Can also be used for enum generation, map/dictionary keys.
    
    user = List of User Versions which are functionally equivalent
    
    bsver = List of Bethesda Versions which are functionally equivalent
    
    custom = If user/bsver are default but the Version is actually specific to a developer and not an official Gamebryo version
    
    supported = Whether or not the XML fully supports reading/writing of this version.
    
    ext = List of custom file extensions associated with this version.
    hexabits committed May 18, 2018
    Configuration menu
    Copy the full SHA
    eb4dfe6 View commit details
    Browse the repository at this point in the history
  2. Correct NiBoneLODController

    The attempt here was to exclude Bethesda from several rows on NiBoneLODController, since in the XML it inherits from NiBoneLODController for its own custom block that does not have those rows.  The reasoning is actually that it does *not* inherit from NiBoneLODController in the engine,  but the inheritance will stay fudged here for now.
    hexabits committed May 18, 2018
    Configuration menu
    Copy the full SHA
    cfe82da View commit details
    Browse the repository at this point in the history
  3. Invalid member name fixes

    Formalization of what makes type and member name strings valid requires the removal of non-alphanumerics with the exception of the colon.
    hexabits committed May 18, 2018
    Configuration menu
    Copy the full SHA
    3268ab6 View commit details
    Browse the repository at this point in the history

Commits on May 27, 2018

  1. Simplifying BSVertexData conds

    They were kept separate for clarity in actual code using the enumerations; clarity that doesn't transfer over to XML which is using the raw integers.
    
    ```
    (A & X) != 0 && (A & Y) != 0 && (A & Z) == 0
    ```
    Is the same as
    ```
    (A & (X|Y|Z)) == (X|Y)
    ```
    Basically != 0 you want that particular bit on the RHS of the expression, and == 0 you do not.
    Anything tested you put on the LHS.
    
    Also switched the order of HalfVector3/Vector3 as the larger type should come first.
    hexabits committed May 27, 2018
    Configuration menu
    Copy the full SHA
    2f1101f View commit details
    Browse the repository at this point in the history
  2. Primary version indicators for niftools#69

    A concise way of listing which versions are most important to each game.
    
    Each game should have only one set of `{{}}`.
    
    Note:  In the case of Oblivion, there are two "primary" versions..  20.0.0.4 (10) is used for KF and 20.0.0.5 is used for NIF.  Thus I changed the "game name" to `{{Oblivion KF}}` for 20.0.0.4 (10).
    hexabits committed May 27, 2018
    Configuration menu
    Copy the full SHA
    8bc5416 View commit details
    Browse the repository at this point in the history

Commits on May 28, 2018

  1. Configuration menu
    Copy the full SHA
    01f2b1d View commit details
    Browse the repository at this point in the history

Commits on May 31, 2018

  1. Initial linting fixes for niftools#74

    First batch of fixed issues detected by the new linter.
    
    Also some slight cleanup, plus an interitance fix a Bethesda particle class.
    hexabits committed May 31, 2018
    Configuration menu
    Copy the full SHA
    08d7323 View commit details
    Browse the repository at this point in the history
  2. Initial Commit for niftools#71

    First-pass implementation of `since`/`until` and `versions`.  Avoided nearly all Bethesda blocks for now, as they require the token system or would become absurdly repetitious.
    hexabits committed May 31, 2018
    Configuration menu
    Copy the full SHA
    1d62f16 View commit details
    Browse the repository at this point in the history
  3. NiMesh DEM cleanup and decoding

    Moved all the DEM specific stuff out of NiMesh and into compounds.  Did some decoding while I was at it.   There are many small customizations to other blocks for DEM, but I am not including them in this commit.  Regardless, the existing XML only worked for DEM1 and now at least some DEM2 will load fully.
    hexabits committed May 31, 2018
    Configuration menu
    Copy the full SHA
    74c1aac View commit details
    Browse the repository at this point in the history
  4. Added custom version 10.2.0.0, 1

    Added V10_2_0_0__1 and scoped NiFurSpringController to it since it is a custom block only for that game.
    hexabits committed May 31, 2018
    Configuration menu
    Copy the full SHA
    986bbc8 View commit details
    Browse the repository at this point in the history

Commits on Jun 1, 2018

  1. [Linting] Inherited duplicates

    Fixed inherited duplicate names, as well as the layout of BSTriShape for Particle emitter geometry data in SSE.
    
    Left the name for Dynamic Data as "Vertices" though it is technically just called "Dynamic Data" in engine.  It contains the vertices and bitangent X for any BSDynamicTriShape, so the naming is apt.
    hexabits committed Jun 1, 2018
    Configuration menu
    Copy the full SHA
    90330d0 View commit details
    Browse the repository at this point in the history

Commits on Jun 2, 2018

  1. Configuration menu
    Copy the full SHA
    1ee21f2 View commit details
    Browse the repository at this point in the history
  2. Rest of DEM block extensions

    Added additional decoding from DEM decoding in 74c1aac since I erroneously added some of the decoding to NiPSParticleSystem in 1d62f16 anyway.
    
    Did not decode any completely custom blocks.
    hexabits committed Jun 2, 2018
    Configuration menu
    Copy the full SHA
    dfaa8fc View commit details
    Browse the repository at this point in the history
  3. [Linting] Unknown comments, descriptions

    Removed redundant descriptions for unknown values, removed incorrect descriptions for previously unknown values.  Any custom extension unknowns were prefixed with their relevant game.  Anything that was "Unk" was changed to "Unknown" for consistency.
    
    A few inherited duplicates were also fixed in the process.
    hexabits committed Jun 2, 2018
    Configuration menu
    Copy the full SHA
    437817a View commit details
    Browse the repository at this point in the history
  4. Configuration menu
    Copy the full SHA
    7631ae4 View commit details
    Browse the repository at this point in the history
  5. [Linting] Inherited duplicate name from 7631ae4

    Hey look at that, linting helped immediately.  Too bad I forgot to lint before committing the last commit.
    hexabits committed Jun 2, 2018
    Configuration menu
    Copy the full SHA
    d6da9e6 View commit details
    Browse the repository at this point in the history

Commits on Jun 4, 2018

  1. Remove ver/userver/userver2 for niftools#76

    The `ver` attribute was never actually formalized and just meant as a shorcut for using both ver1/ver2 on the same version.  `userver` was almost never used and `userver2` was becoming increasingly uncommon as most comparisons were switched to inequalities.
    
    To make things easier, these should just be part of the expression.
    hexabits committed Jun 4, 2018
    Configuration menu
    Copy the full SHA
    513d223 View commit details
    Browse the repository at this point in the history

Commits on Jun 5, 2018

  1. Initial commit for niftools#70

    Tokens are grouped by name and associated with a list of attributes.  Only listed attributes should be processed for tokens of that name.
    
    Order of token groups matters.  Token strings can themselves include tokens, so any token group used in other tokens needs to come after.
    hexabits committed Jun 5, 2018
    Configuration menu
    Copy the full SHA
    9c7061f View commit details
    Browse the repository at this point in the history
  2. Bethesda block versioning

    Using tokens from niftools#70 it is now feasible to version the Bethesda blocks.
    hexabits committed Jun 5, 2018
    Configuration menu
    Copy the full SHA
    fd66c97 View commit details
    Browse the repository at this point in the history
  3. Use tokens for defaults

    hexabits committed Jun 5, 2018
    Configuration menu
    Copy the full SHA
    30010df View commit details
    Browse the repository at this point in the history
  4. Use tokens for verconds

    hexabits committed Jun 5, 2018
    Configuration menu
    Copy the full SHA
    d886631 View commit details
    Browse the repository at this point in the history
  5. Remove cond for type checking, add onlyT and excludeT for nifto…

    …ols#76
    
    The `cond` attribute was being overloaded with multiple functions.  Conditions should be actual expressions, using local or inherited data.  Type checking inside of `cond` would also mean that you could do both in one expression, such as `cond="NiParticleSystem && Num Vertices > 0"` which doesn't make any sense.
    
    So, `onlyT` and `excludeT` were made to serve that function.  Two attributes also means not having to use the unary not (!) in order negate the meaning.
    
    Existing logic can simply alias the attributes to cond if need be.
    hexabits committed Jun 5, 2018
    Configuration menu
    Copy the full SHA
    fe3b87c View commit details
    Browse the repository at this point in the history
  6. Rename count to countable, add size to basic

    For niftools#76
    
    `bool` type is something that has to be dealt with as it changes size.  Also it's marked as countable which should probably be analyzed... It shouldn't be used in array counts.
    hexabits committed Jun 5, 2018
    Configuration menu
    Copy the full SHA
    120f476 View commit details
    Browse the repository at this point in the history
  7. Add size to compounds

    hexabits committed Jun 5, 2018
    Configuration menu
    Copy the full SHA
    04fe24d View commit details
    Browse the repository at this point in the history
  8. Configuration menu
    Copy the full SHA
    f023ad3 View commit details
    Browse the repository at this point in the history

Commits on Jun 6, 2018

  1. Remove arr3 from legacy object

    Was completely unsupported and undocumented and unused by any software.  Replaced with arithmetic even though the decoding is likely wrong anyway.
    
    For niftools#76
    hexabits committed Jun 6, 2018
    Configuration menu
    Copy the full SHA
    29d0245 View commit details
    Browse the repository at this point in the history
  2. Replaced global tokens and XML entity operators

    For niftools#70
    
    Have not decided on the non-escaped entities such as `==`, `|`, `||`, etc. yet, as at least `==` is much more readable than `#EQ#`.
    
    Replaced all Version, User Version, etc. with their global tokens.
    
    Also cleaned up NiTexturingProperty in the process.
    hexabits committed Jun 6, 2018
    Configuration menu
    Copy the full SHA
    4970fcb View commit details
    Browse the repository at this point in the history
  3. Move and Rename User Version 2, change ExportInfo to BSStreamHeader

    Now that any usage of `User Version 2` was actually just a `#BSVER#` token, reorganized the header information for Bethesda NIFs into the correct layout, and renamed the member to a more appropriate BS Version.
    
    The global for #BSVER# uses the member of operator `\`, but as it is a token now it is free to be used however one wishes.
    
    I split #BSSTREAMHEADER# into its own token in case the expression is ever reused (it used to be on multiple members before this reorganization).
    
    Also put `Max Filepath` into BSStreamHeader where it belonged.
    hexabits committed Jun 6, 2018
    Configuration menu
    Copy the full SHA
    bcd9413 View commit details
    Browse the repository at this point in the history

Commits on Jun 7, 2018

  1. Replace ARG and TEMPLATE

    For niftools#70 and niftools#76
    
    Adopting the token syntax of the other tokens, TEMPLATE and ARG can now be treated the same as other tokens and differentiated from regular identifiers in a generic manner.
    hexabits committed Jun 7, 2018
    Configuration menu
    Copy the full SHA
    f23d16f View commit details
    Browse the repository at this point in the history
  2. Add int64 and uint64

    For niftools#76
    
    Also reorganized the basic types to be in a logical order.
    hexabits committed Jun 7, 2018
    Configuration menu
    Copy the full SHA
    f64419a View commit details
    Browse the repository at this point in the history

Commits on Jun 8, 2018

  1. Add convertible, split countable

    For niftools#76
    
    The signed integeral types were marked as countable even though they should not be used for array sizes.  A negative value cannot be passed into an array size.   They are still integral though, so countable was split into `countable` and `integral`.
    
    In addition,  added `boolean` to designate types that can toggle the presence of another member.
    
    Also reordered items for `convertible` so that the referenced types come before the type referencing it, i.e. larger types first.
    hexabits committed Jun 8, 2018
    Configuration menu
    Copy the full SHA
    1aa013d View commit details
    Browse the repository at this point in the history
  2. [Linting] Types that cannot be used as array sizes

    For niftools#74
    
    Implemented thanks to changes done in niftools#76 for differentiating integral and "countable" i.e. can be used for sizes.
    
    Marking types as boolean was also in niftools#76, yet there were no errors for this lint; all the `cond` references that were not complex expressions were already boolean types.
    hexabits committed Jun 8, 2018
    Configuration menu
    Copy the full SHA
    70edce1 View commit details
    Browse the repository at this point in the history

Commits on Jun 14, 2018

  1. RSH and LSH operators

    For niftools#70
    
    Their use was discussed as being useful for shifting and masking values before sending as an ARG.
    hexabits committed Jun 14, 2018
    Configuration menu
    Copy the full SHA
    331d2c7 View commit details
    Browse the repository at this point in the history
  2. Add bitfield type, remove 'Flags'

    For niftools#3, niftools#76
    
    Replaces all Flags types with real enums (where there were only two options) or a new bitfield type.
    
    Bitfield mimics the bitfield syntax of C structs (Compounds), but also acts like Enum/Bitflags with the `storage` attribute in that the entire structure can simply be aliased to a basic type like `ushort`.
    
    The `type` on each Bitfield member does **NOT denote size**.  Each member only takes up the bits that are defined by `width` and `pos`.  The `type` information is for casting for getters and setters.  That means for C structs, code generation would not use the type on each member, but the storage type instead.
    hexabits committed Jun 14, 2018
    Configuration menu
    Copy the full SHA
    cd1af9c View commit details
    Browse the repository at this point in the history

Commits on Jun 17, 2018

  1. bhk cleanup, new primitives

    Finally added bhkPlaneShape, used once in SSE.  Added bhkCylinderShape which is possible to export from the official FO4 exporter.
    
    Cleaned up much of the class descriptions and also added `binary="true"` to the padding bytes.
    hexabits committed Jun 17, 2018
    Configuration menu
    Copy the full SHA
    24b6ce0 View commit details
    Browse the repository at this point in the history
  2. Clean up and remove unnecessary XML comments

    Try to use element text whenever possible, and remove any unnecessary XML comments.  Soon the XML will be regenerated and so the XML comments need to be well formed and in predictable locations.
    hexabits committed Jun 17, 2018
    Configuration menu
    Copy the full SHA
    a58bd61 View commit details
    Browse the repository at this point in the history
  3. Improved NiAdditionalGeometryData

    Named the compounds correctly after the actual structs,  separated the "Has Data" bool from the compound as it's not actually part of the struct, but before it in a for loop during (de)serialize.
    
    Combined NiAdditionalGeometryData and the BS version into one compound when possible.  But the block can actually no longer be found in any official files, so the BS version is not very important.
    hexabits committed Jun 17, 2018
    Configuration menu
    Copy the full SHA
    83df1e5 View commit details
    Browse the repository at this point in the history
  4. Configuration menu
    Copy the full SHA
    8f3b2d0 View commit details
    Browse the repository at this point in the history
  5. Add NiPhysXClothDesc

    hexabits committed Jun 17, 2018
    Configuration menu
    Copy the full SHA
    34ae18e View commit details
    Browse the repository at this point in the history
  6. Rename binary/abstract booleans from 1 to true

    For niftools#76
    
    For reduced ambiguity.  Adapting for this in Python is as easy as
    
    ```py
    # XML Booleans
    XML_TRUE = ["true", "1"]
    XML_FALSE = ["false", "0"]
    
    # Example
    self.is_abstract = get('abstract') in XML_TRUE
    ```
    
    Note "True" and "False" are not valid booleans in XML.  Only lowercase.
    hexabits committed Jun 17, 2018
    Configuration menu
    Copy the full SHA
    7fb1233 View commit details
    Browse the repository at this point in the history

Commits on Jun 19, 2018

  1. bhk block cleanup, decoding, inheritance fixes

    Havok serialization is separate from inheritance and so certain shapes that are actually convex were not considered such by nif.xml, which in turn excludes them from uses of `template="bhkConvexShape"`.
    
    Created a fake base class to fix these issues.  Also, bhkConvexTransformShape no longer inheriting bhkTransformShape was more correct anyway, as the Ref type could be made more specific (bhkConvexShape).
    
    Did some comment/description cleanup and some minor decoding.
    hexabits committed Jun 19, 2018
    Configuration menu
    Copy the full SHA
    285b1cb View commit details
    Browse the repository at this point in the history
  2. BSLightingShader decoding

    FO4 DLC uses BSLightingShaderPropertyUShortController in 2 NIFs, but according to the CK it is not actually a functional block and spits out constant warnings. It is still needed in nif.xml for serialization though.
    
    FO4 also adds two booleans for Env Map shader type for SSR.  These were previously marked as an Unknown Short.  These booleans are *not* synced with their values in the BGSM files except for generated meshes such as SCOL and precombined.
    hexabits committed Jun 19, 2018
    Configuration menu
    Copy the full SHA
    639bea6 View commit details
    Browse the repository at this point in the history

Commits on Jun 25, 2018

  1. Replace calculated with calc

    For niftools#76.  `calc` does not need to be supported and is only used for pre-serialization preparation of the data.  This can also be done by hand.
    
    Some revisions also need to be made for niftools#70 and niftools#73 to account for another attribute with its own expression grammar and tokens.
    
    However, the tokens introduced for `calc` will not be added to the tokens in the XML and will need to be explicitly supported if supporting `calc`.  They are:
    
    1D array size (uses regex): `#LEN[(.*?)]#`
    2D array size (uses regex): `#LEN2[(.*?)]#`
    
    Ternary `?`: `#THEN#`
    Ternary `:`: `#ELSE#`
    
    Also removes any unnecessary `calculated` without replacement.
    
    Additionally, `calc` is used to limit array size for the time being, though it's possible this should be done with its own attribute, such as `maxlen`.
    hexabits committed Jun 25, 2018
    Configuration menu
    Copy the full SHA
    121ba5f View commit details
    Browse the repository at this point in the history
  2. NiSkinPartition (Bethesda) decoding and cleanup

    Unknown Short for FO3+ was two values, a byte and a bool.
    
    Renamed "Num Skin Partition Blocks" and "Skin Partition Blocks" and combined the Partitions array into one row, as having a row separate for SSE was unnecessary.
    hexabits committed Jun 25, 2018
    Configuration menu
    Copy the full SHA
    61d2b79 View commit details
    Browse the repository at this point in the history
  3. Explicit ver1/ver2 for BS 20.2

    Specifying ver1/ver2 even for `vercond="#BS...` for FO3 and later allows early rejection of that member for any non-BS 20.2 NIFs.
    hexabits committed Jun 25, 2018
    Configuration menu
    Copy the full SHA
    8d73ad0 View commit details
    Browse the repository at this point in the history

Commits on Jun 26, 2018

  1. NiGeometryData flags bitfield

    Use a correct bitfield for NiGeometryData flags now that we know what the unknown values are for Bethesda bhk data. (NiGeometryData that gets used in a bhk shape)
    hexabits committed Jun 26, 2018
    Configuration menu
    Copy the full SHA
    086024b View commit details
    Browse the repository at this point in the history

Commits on Jun 28, 2018

  1. Configuration menu
    Copy the full SHA
    1d26f7a View commit details
    Browse the repository at this point in the history

Commits on Jun 29, 2018

  1. bhk Emulate Havok CInfo for World Obj, Entity, Rigid Body

    Split up the Rigid Body CInfo into multiple compounds for each Havok version (though left 550/660 combined).  Followed suit with bhkWorldObject and bhkEntity.
    
    Having each in their own CInfo simplifies both naming and versioning at the cost of repetition.
    
    The bhkRigidBodyCInfo variants will need some kind of shared parent, but compound inheritance is currently not part of the XML spec.  It would have to be done with custom types in niflib.  The shared parent will be needed for getting/setting the same info on different CInfo versions.
    hexabits committed Jun 29, 2018
    Configuration menu
    Copy the full SHA
    12e7286 View commit details
    Browse the repository at this point in the history
  2. NiBound naming consistency

    For Name-based APIs, naming all NiBound fields consistently helps with generic treatment of NiBound getting and setting for any NiObject.
    hexabits committed Jun 29, 2018
    Configuration menu
    Copy the full SHA
    8d8a4ae View commit details
    Browse the repository at this point in the history
  3. FO4 skin instance and shader decoding

    FO4 changed the Color3 to a Color4 for Skin Tint.  Leaving as separate Alpha for now however.
    
    Also found out the point of the BSSkin::Instance array which is non-uniform scaling.
    hexabits committed Jun 29, 2018
    Configuration menu
    Copy the full SHA
    20dab6b View commit details
    Browse the repository at this point in the history
  4. Default Values Pass 1

    Added `default` to a large number of members, as well as `calc` to a few members to enforce array sizes based on other data.
    
    Also fixed a few `type` issues.
    
    This is a first pass in a much larger effort,  using data analysis to gather the most commonly used values.
    hexabits committed Jun 29, 2018
    Configuration menu
    Copy the full SHA
    7887f4e View commit details
    Browse the repository at this point in the history

Commits on Jul 1, 2018

  1. BSWaterShaderProperty flags correction

    The previous decoding was all guesswork, though did align somewhat.  Enough to know that the decoding from FO4 applies to Skyrim as well.
    hexabits committed Jul 1, 2018
    Configuration menu
    Copy the full SHA
    847607f View commit details
    Browse the repository at this point in the history

Commits on Jul 2, 2018

  1. Configuration menu
    Copy the full SHA
    c76b429 View commit details
    Browse the repository at this point in the history

Commits on Jul 16, 2018

  1. Bethesda Havok major refactor

    Cleaned up class naming e.g. Descriptor->CInfo to match the engine and other classes already named that way.  Added hk/bhk to front of type names where appropriate.
    
    Changed Info/Property names to be consistent e.g.  "Rigid Body Info", "Entity Info" instead of CInfo.
    
    Changed all "Unused" fields to a consistent naming scheme, using byte array types and binary="true".
    
    Class hierarchy fixes.  Class documentation complete overhaul.
    
    Some existing naming collides with new naming of different fields, e.g. bhkMoppBvTreeShape "Scale" used to be "Shape Scale" and now "Scale" is  "MOPP Code" -> "Scale".
    hexabits committed Jul 16, 2018
    Configuration menu
    Copy the full SHA
    111598d View commit details
    Browse the repository at this point in the history
  2. BSVertexDesc correct bitfield

    Made a correct bitfield using `uint64` as the underlying type, split into nibbles for the sizes and offsets of the vertex attributes.
    
    Changed VertexFlags to VertexAttributes and it no longer has the empty nibble in front.
    
    ARG passing of the BSVertexDesc is treated as the underlying numeric value of the bitfield, so that the attributes can be passed into BSVertexData using `#RSH# 44` instead of the member accessor syntax.
    
    This makes the first use of the basic `uint64` type, so (de)serialization now requires support of 64-bit values.
    hexabits committed Jul 16, 2018
    Configuration menu
    Copy the full SHA
    2954bb4 View commit details
    Browse the repository at this point in the history

Commits on Jul 19, 2018

  1. Rename istemplate to generic

    Also use `true` instead of `1` to match other XML booleans.
    hexabits committed Jul 19, 2018
    Configuration menu
    Copy the full SHA
    b35b74b View commit details
    Browse the repository at this point in the history
  2. Rename StringIndex to NiFixedString, add NiTFixedStringMap

    The correct name for StringIndex is NiFixedString.  Also added NiTFixedStringMap which is used once in the NiPhysX module.
    hexabits committed Jul 19, 2018
    4 Configuration menu
    Copy the full SHA
    97a81c8 View commit details
    Browse the repository at this point in the history

Commits on Jul 24, 2018

  1. Default Values Pass 2

    Second default values pass, plus some general changes to accommodate them.
    hexabits committed Jul 24, 2018
    Configuration menu
    Copy the full SHA
    6091a89 View commit details
    Browse the repository at this point in the history

Commits on Jul 26, 2018

  1. Initial Module commit

    For niftools#72
    
    Renamed modules from Gamebryo:  NiParticle, NiPSParticle.
    
    As of Gamebryo 2.5, old NiParticle was renamed NiParticleOld and the new NiMesh-based particle system was named NiParticle.  I didn't like this naming scheme given NiParticleOld is more important to us.
    
    Ni Modules not in Gamebryo:  NiCustom, NiLegacy
    
    These are to handle third party blocks and blocks from NetImmerse (pre-Gamebryo).
    
    Ignored from Gamebryo:  NiCollision, NiPortal, NiPhysXParticle
    
    These were instead absorbed into other modules.
    
    Bethesda modules:  BSMain, BSAnimation, BSParticle, BSHavok, BSLegacy
    
    Animation, Particle, Havok, and Legacy are not modules used by Bethesda.  Legacy is for Morrowind-specific blocks (NetImmerse).  In addition,  BSShader is a module for all the shader related blocks and that has all been folded into BSMain.
    hexabits committed Jul 26, 2018
    Configuration menu
    Copy the full SHA
    b22220b View commit details
    Browse the repository at this point in the history
  2. Mark custom modules

    For niftools#72
    
    So that first party modules can be singled out if needed.
    hexabits committed Jul 26, 2018
    Configuration menu
    Copy the full SHA
    46370f8 View commit details
    Browse the repository at this point in the history

Commits on Jul 27, 2018

  1. bhkNiCollisionObject cleanup

    Improved class descriptions and fixed Flags values and defaults.
    hexabits committed Jul 27, 2018
    Configuration menu
    Copy the full SHA
    c885774 View commit details
    Browse the repository at this point in the history

Commits on Aug 1, 2018

  1. Default Values Pass 3, Subclass Defaults

    For niftools#76
    
    Implement initial subclass defaults.  Had to add additional attribute to deal with versioning of defaults, like block versioning.
    
    Added more defaults to normal fields.
    
    Added default to Vertex Color array, also enforcing that members with `arr1` can have a `default`.
    hexabits committed Aug 1, 2018
    Configuration menu
    Copy the full SHA
    0f0790f View commit details
    Browse the repository at this point in the history

Commits on Aug 4, 2018

  1. String type fixes

    Specify SizedString vs NiFixedString where appropriate.  The compound type `string` is an extra level of indirection in many cases, where the block can never be used on versions less than 20.1.0.3 where the CString to NiFixedString transition happened.
    
    NiFixedString is a basic type, so using it where possible is recommended over the `string` compound type.
    
    `string` could NOT be changed when dealing with multiple rows with the same name but version exclusive, such as "Accum Root Name".
    
    Changed ShortString to ExportString as it was already documented as being exclusive to the Bethesda stream header.
    
    Added SizedString with ushort length type, for the SSF File path.
    hexabits committed Aug 4, 2018
    Configuration menu
    Copy the full SHA
    8778358 View commit details
    Browse the repository at this point in the history

Commits on Aug 13, 2018

  1. Type, Name, Comment fixes

    BSGeometrySegmentData - Combined rows which did not be separated by version.  Adopted better naming from FO4.
    
    AspectFlags type for NiParticlesData for BS.
    
    Changed the unused W component of what should be a Vector4 for Vertex to 'Unused W' for all rows.  Should seriously consider making these all Vector4s for endian correctness.
    
    Misc comment cleanup.
    hexabits committed Aug 13, 2018
    Configuration menu
    Copy the full SHA
    b0aafaa View commit details
    Browse the repository at this point in the history
  2. Ranges Pass 1

    For niftools#70 and niftools#76
    
    Added tokens for range attribute strings.
    
    Did initial pass of ranges, many from Bethesda's official export scripts for FO4, which limit the values in the UI. Also have begun using data analysis to find implied min/max ranges (as well as sane defaults).
    hexabits committed Aug 13, 2018
    Configuration menu
    Copy the full SHA
    aa05717 View commit details
    Browse the repository at this point in the history
  3. Add missing token for aa05717

    hexabits committed Aug 13, 2018
    Configuration menu
    Copy the full SHA
    a8a425b View commit details
    Browse the repository at this point in the history

Commits on Aug 31, 2018

  1. Configuration menu
    Copy the full SHA
    1889e4e View commit details
    Browse the repository at this point in the history
  2. BS PCD Shared decoding

    The way that BSPackedCombinedSharedGeomDataExtra refers to the shared geometry was decoded.  It stores the hash of the filename and the offset to the data.
    hexabits committed Aug 31, 2018
    Configuration menu
    Copy the full SHA
    218799a View commit details
    Browse the repository at this point in the history

Commits on Sep 1, 2018

  1. Legacy NiParticle decoding

    NetImmerse NiParticle (called NiOldParticle after Gamebryo 1.1) was severely undecoded.  This affects several NetImmerse games like Morrowind and Freedom Force.
    
    The per-particle info in NiOldParticle actually remained identical to the class in NiParticle, which is named "NiParticleInfo".  It did however have a different name in NetImmerse which was "NiPerParticleData".  Since they were the same data, the two compounds were merged and NiPSysData was updated.
    hexabits committed Sep 1, 2018
    Configuration menu
    Copy the full SHA
    fdcba77 View commit details
    Browse the repository at this point in the history

Commits on Sep 2, 2018

  1. Misc decoding, custom blocks for WorldShift, Guild 2

    Decoded some unknown fields and blocks for WorldShift and Guild 2.
    
    NiSourceTexture is now correctly decoded.  The unknown byte actually controls whether the image data Ref gets serialized or not, but it was always 1.  The addition of another conditional value increases the complexity for Pixel Data to 3 rows, all exclusive by version or condition.
    hexabits committed Sep 2, 2018
    Configuration menu
    Copy the full SHA
    63609e6 View commit details
    Browse the repository at this point in the history

Commits on Nov 2, 2018

  1. [Linting] Reorder defaults to keep ancestor types above children

    Even though in these cases it doesn't matter because of version exclusivity, keep them ordered by type instead of grouped by version.
    hexabits committed Nov 2, 2018
    Configuration menu
    Copy the full SHA
    6ca49fd View commit details
    Browse the repository at this point in the history

Commits on Dec 2, 2018

  1. Initial BSStream 155 commit

    Renamed BSLightingShaderPropertyShaderType and its associated name field ("Skyrim Shader Type" -> "Shader Type").
    
    BSDistantObjectInstancedNode is mostly undecoded but fully readable.
    
    Treatment of shader flags is preliminary and will change over time.
    hexabits committed Dec 2, 2018
    Configuration menu
    Copy the full SHA
    02799d8 View commit details
    Browse the repository at this point in the history

Commits on Apr 23, 2019

  1. Rename value to bit for bitflags

    So that "value" can be used for bit patterns (collections of individual bits).
    hexabits committed Apr 23, 2019
    Configuration menu
    Copy the full SHA
    7b15bfe View commit details
    Browse the repository at this point in the history
  2. Configuration menu
    Copy the full SHA
    eb53e98 View commit details
    Browse the repository at this point in the history
  3. Misc Fixes

    hexabits committed Apr 23, 2019
    Configuration menu
    Copy the full SHA
    cd92042 View commit details
    Browse the repository at this point in the history
  4. Rename 'add' to 'field'

    hexabits committed Apr 23, 2019
    Configuration menu
    Copy the full SHA
    45c15ad View commit details
    Browse the repository at this point in the history