From 95c475b8212cbf30c6a0008e0f3d2be183bddcfe Mon Sep 17 00:00:00 2001 From: ttl269 Date: Thu, 13 Mar 2014 22:50:39 +0100 Subject: [PATCH 001/164] removal of SkyrimMaterial Replaced "SkyrimMaterial" by "Unknown Int" in NiGeometryData (how it got there?) and bhkCompressedMeshShape as both seems not be havok material definitions. --- nif.xml | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/nif.xml b/nif.xml index e23b28d..c0acc2b 100644 --- a/nif.xml +++ b/nif.xml @@ -2701,7 +2701,7 @@ The mesh vertices. Flag for tangents and bitangents in upper byte. Texture flags in lower byte. Bethesda's version of this field for nif versions 20.2.0.7 and up. Only a single bit denotes whether uv's are present. For example, see meshes/architecture/megaton/megatonrampturn45sml.nif in Fallout 3. - Material + Unknown, seen in Skyrim. Do we have lighting normals? These are essential for proper lighting: if not present, the model will only be influenced by ambient light. The lighting normals. Tangent vectors. @@ -5994,10 +5994,10 @@ Compressed collision mesh. Points to root node? - The shape's material. + Unknown. Unknown. Unknown. - Unknown + Unknown A shell with that radius is added around the shape. Scale Unknown From 6236ea83d5c5aae1b3e8d99704894840644006ee Mon Sep 17 00:00:00 2001 From: ttl269 Date: Fri, 14 Mar 2014 22:08:27 +0100 Subject: [PATCH 002/164] material remove from bhkMoppBvTreeShape Removed material definition and replaced by Unknown Int. --- nif.xml | 3 +-- 1 file changed, 1 insertion(+), 2 deletions(-) diff --git a/nif.xml b/nif.xml index c0acc2b..36e5df9 100644 --- a/nif.xml +++ b/nif.xml @@ -2175,8 +2175,7 @@ Memory optimized partial polytope bounding volume tree shape (not an entity). The shape. - The shape's material. - The shape's material. + Unknown. Unknown bytes. Unknown float, might be scale. Number of bytes for MOPP data. From bbd0d5e2511e4c6f8cc31fd2e84905ff6233a9e4 Mon Sep 17 00:00:00 2001 From: ttl269 Date: Thu, 10 Apr 2014 20:59:37 +0200 Subject: [PATCH 003/164] Modify of Num UV Sets Changed definition of "Num UV Sets" (for >= 10.0.1.0 only) and get rid of "BS Num UV Sets". "Num UV Sets" defined as byte containing number of UV texture sets. Added definition of "Extra Vectors Flags" stored in byte. Only known function of that flags by that time is 4th bit representing flag for Tangents/Bitangents arrays - this is defined in bitflags type "ExtraVectorsFlags". As there is no certainity that number of UV Sets can be stored in all 8 bits, I have left AND function on line 2731 where "arr1" is getting a number of UV Sets only from lower 6 bits (i.e. max number of UV Sets is 63). There is a note about that on line 2725 (although it is for old version 4.0.0.2). --- nif.xml | 16 +++++++++++----- 1 file changed, 11 insertions(+), 5 deletions(-) diff --git a/nif.xml b/nif.xml index 36e5df9..53d65d4 100644 --- a/nif.xml +++ b/nif.xml @@ -915,6 +915,10 @@ + + + + @@ -2698,13 +2702,15 @@ Unknown. Is the vertex array present? (Always non-zero.) The mesh vertices. - Flag for tangents and bitangents in upper byte. Texture flags in lower byte. - Bethesda's version of this field for nif versions 20.2.0.7 and up. Only a single bit denotes whether uv's are present. For example, see meshes/architecture/megaton/megatonrampturn45sml.nif in Fallout 3. + Number of UV texture sets. + + Fallout3/Skyrim: can't be higher than 1. + Bit 4: Has Tangents/Bitangents Unknown, seen in Skyrim. Do we have lighting normals? These are essential for proper lighting: if not present, the model will only be influenced by ambient light. The lighting normals. - Tangent vectors. - Bitangent vectors. + Tangent vectors. + Bitangent vectors. Center of the bounding box (smallest box that contains all vertices) of the mesh. Radius of the mesh: maximal Euclidean distance between the center and all vertices. Unknown, always 0? @@ -2722,7 +2728,7 @@ Note: for compatibility with NifTexture, set this value to either 0x00000000 or 0xFFFFFFFF. - The UV texture coordinates. They follow the OpenGL standard: some programs may require you to flip the second coordinate. + The UV texture coordinates. They follow the OpenGL standard: some programs may require you to flip the second coordinate. Consistency Flags Consistency Flags Unknown. From eadc47a19206f053d82baa5ebf8e6a551b80e762 Mon Sep 17 00:00:00 2001 From: ttl269 Date: Sun, 20 Apr 2014 09:42:26 +0200 Subject: [PATCH 004/164] changed type of ExtraVectorFlags component Changed type of ExtraVectorFlags from `bitflags` to `enum`. --- nif.xml | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/nif.xml b/nif.xml index 53d65d4..81e78f7 100644 --- a/nif.xml +++ b/nif.xml @@ -915,9 +915,9 @@ - - - + + + - + - + Translation. From 2b63fb07ec7f6d7c481c363ed5a25654d421688a Mon Sep 17 00:00:00 2001 From: jonwd7 Date: Sun, 29 Jun 2014 22:51:04 -0400 Subject: [PATCH 007/164] Change `Unknown Float 2` to `Refraction Strength` See: http://niftools.sourceforge.net/forum/viewtopic.php?f=8&t=5847 --- nif.xml | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/nif.xml b/nif.xml index eb01d1c..b65fc02 100644 --- a/nif.xml +++ b/nif.xml @@ -4849,8 +4849,8 @@ Glow color and alpha Multiplied emissive colors How to handle texture borders. - The materials opacity (1=non-transparent). - Unknown + The material's opacity (1=non-transparent). + The amount of distortion. **Not based on physically accurate refractive index** (0=none) (0-1) The material's specular power, or glossiness (0-999). Adds a colored highlight. Brightness of specular highlight. (0=not visible) (0-999) From 143c4ce88c9725fbfe9a5e41bde9a2373d8f91fe Mon Sep 17 00:00:00 2001 From: jonwd7 Date: Mon, 30 Jun 2014 18:37:49 -0400 Subject: [PATCH 008/164] Change to `LightingShaderControlledVariable` also --- nif.xml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/nif.xml b/nif.xml index b65fc02..526712c 100644 --- a/nif.xml +++ b/nif.xml @@ -898,7 +898,7 @@ An unsigned 32-bit integer, describing which float variable in BSLightingShaderProperty to animate. - + From 0b74bba81ff3746d8c13ace73b0522e3036130c9 Mon Sep 17 00:00:00 2001 From: ttl269 Date: Sat, 5 Jul 2014 22:22:06 +0200 Subject: [PATCH 009/164] Fallout3 Shader Properties update Updated BSShaderProperty, BSShaderLightingProperty, BSShaderNoLightingProperty, BSShaderPPLightingProperty and SkyShaderProperty blocks for Fallout3. Added BSShaderFlags2 and their meanings. --- nif.xml | 86 ++++++++++++++++++++++++++++++++++++++++----------------- 1 file changed, 61 insertions(+), 25 deletions(-) diff --git a/nif.xml b/nif.xml index 36e5df9..8e366f4 100644 --- a/nif.xml +++ b/nif.xml @@ -4618,39 +4618,76 @@ + + + Shader Property Flags 2 + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + Bethesda-specific Property node - Unknown + Unknown. + 0: smooth no + 1: smooth yes + Unknown (Set to 0x21 for NoLighting, 0x11 for Water) Shader Property Flags - Unknown + Shader Property Flags 2 Unknown Bethesda-specific property. - Unknown + How to handle texture borders. Bethesda-specific property. The texture glow map. - Unknown - - Normally what appears to be a junk value (0xB33BBD2E). Appears to be related to glow when Unk Flags is (0x82000148). - - Unknown - Unknown + At this cosine of angle falloff will be equal to Falloff Start Opacity + At this cosine of angle falloff will be equal to Falloff Stop Opacity + Alpha falloff multiplier at start angle + Alpha falloff multiplier at end angle Bethesda-specific Shade node. Texture Set - Unknown - Rate of texture movement for refraction shader. - Unknown - Unknown + The amount of distortion. **Not based on physically accurate refractive index** (0=none) (0-1) + Rate of texture movement for refraction shader. + Unknown + Unknown Glow color and alpha @@ -4723,11 +4760,19 @@ Bethesda-specific node? Found in Fallout3 - + + Sets what sky function this object fulfills in BSSkyShaderProperty or SkyShaderProperty. + + + + + + + + Bethesda-specific node? Found in Fallout3 - Unknown The texture. - Unknown + Sky Object Type @@ -4906,15 +4951,6 @@ Unknown, flag? - - Skyrim, sets what sky function this object fulfills in BSSkyShaderProperty. - - - - - - - Skyrim Sky shader block. From e70a70ca1e45627e9a36b04100214f972b105eae Mon Sep 17 00:00:00 2001 From: ttl269 Date: Sun, 6 Jul 2014 12:30:32 +0200 Subject: [PATCH 010/164] Reverted names of Unknowns Reverted names of two Unknowns in BSShaderPPLightingProperty to "Unknown Float 4" and "Unknown Float 5". Also renamed "Envmap Scale" in BSShaderProperty to "Environment Map Scale" and added its description of funtionality - it is same as "Environment Map Scale" in BSLightingShaderProperty - controls the intesity of the environment map. --- nif.xml | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/nif.xml b/nif.xml index 8e366f4..b609536 100644 --- a/nif.xml +++ b/nif.xml @@ -4664,7 +4664,7 @@ Unknown (Set to 0x21 for NoLighting, 0x11 for Water) Shader Property Flags Shader Property Flags 2 - Unknown + Scales the intensity of the environment/cube map. @@ -4686,8 +4686,8 @@ Texture Set The amount of distortion. **Not based on physically accurate refractive index** (0=none) (0-1) Rate of texture movement for refraction shader. - Unknown - Unknown + Unknown + Unknown Glow color and alpha From b14b409d17922e9cbbb814cdcaab025ae104b711 Mon Sep 17 00:00:00 2001 From: ttl269 Date: Sun, 20 Apr 2014 10:03:56 +0200 Subject: [PATCH 011/164] Havok Material a Layer update 1. Added havok material definitions for Fallout 3. Only basic 31 materials defined. Function of other bits included in description. 2. Removed game prefix from havok material definitions. 3. Added havok layer definitions for Fallout 3. Conflicts: nif.xml --- nif.xml | 639 +++++++++++++++++++++++++++++++------------------------- 1 file changed, 352 insertions(+), 287 deletions(-) diff --git a/nif.xml b/nif.xml index 0bf83b8..b21b177 100644 --- a/nif.xml +++ b/nif.xml @@ -186,8 +186,8 @@ - - A material, used by havok shape objects. + + A material, used by havok shape objects in Oblivion. @@ -222,231 +222,296 @@ + + A material, used by havok shape objects in Fallout 3. + Bit 5: flag for PLATFORM (for values 32-63 substract 32 to know material number) + Bit 6: flag for STAIRS (for values 64-95 substract 64 to know material number) + Bit 5+6: flag for STAIRS+PLATFORM (for values 96-127 substract 96 to know material number) + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - + A material, used by havok shape objects in Skyrim. + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + Sets mesh color in Oblivion Construction Set. Anything higher than 57 is also null. - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + - - Physical purpose of collision object? The setting affects objetct's havok behavior in game. Anything higher than 47 is also null. - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - + + Sets mesh color in Fallout 3 GECK. Anything higher than 72 is also null. + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + - + Physical purpose of collision object? The setting affects objetct's havok behavior in game. Anything higher than 47 is also null. - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + @@ -531,6 +596,7 @@ + @@ -1488,18 +1554,63 @@ The sphere's radius. - - Oblivion's ColFilter property for Havok. - Sets mesh color in Oblivion Construction Set. - The first bit sets the LINK property and controls whether this body is physically linked to others. The next bit turns collision off. Then, the next bit sets the SCALED property in Oblivion. The next five bits make up the number of this part in a linked body list. + + ColFilter property for Havok. It contains Layer, Flags and Part Number + Sets mesh color in Oblivion Construction Set. + Sets mesh color in Fallout 3 GECK. + Physical purpose of collision object? The setting affects objetct's havok behavior in game. + + FLAGS are stored in highest 3 bits: + Bit 7: sets the LINK property and controls whether this body is physically linked to others. + Bit 6: turns collision off (not used for Layer BIPED). + Bit 5: sets the SCALED property. + + PART NUMBER is stored in bits 0-4. Used only when Layer is set to BIPED. + + Part Numbers for Oblivion, Fallout 3, Skyrim: + 0 - OTHER + 1 - HEAD + 2 - BODY + 3 - SPINE1 + 4 - SPINE2 + 5 - LUPPERARM + 6 - LFOREARM + 7 - LHAND + 8 - LTHIGH + 9 - LCALF + 10 - LFOOT + 11 - RUPPERARM + 12 - RFOREARM + 13 - RHAND + 14 - RTHIGH + 15 - RCALF + 16 - RFOOT + 17 - TAIL + 18 - SHIELD + 19 - QUIVER + 20 - WEAPON + 21 - PONYTAIL + 22 - WING + 23 - PACK + 24 - CHAIN + 25 - ADDONHEAD + 26 - ADDONCHEST + 27 - ADDONARM + 28 - ADDONLEG + 29-31 - NULL + Unknown. + + The material of the shape. + The material of the shape. + The material of the shape. + + Havok Information for packed TriStrip shapes. - Sets mesh color in Oblivion Construction Set. - The first bit sets the LINK property and controls whether this body is physically linked to others. The next bit turns collision off. Then, the next bit sets the SCALED property in Oblivion. The next five bits make up the number of this part in a linked body list. - Unknown. Perhaps the vertex wielding type? + The number of vertices that form this sub shape. The material of the subshape. @@ -1745,9 +1856,11 @@ - per-chunk material, used in bhkCompressedMeshShapeData - Material. - Copy of Skyrim Layer from bhkRigidBody. The value is stored as 32-bit integer. + Per-chunk material, used in bhkCompressedMeshShapeData + Material. + Copy of Layer from bhkRigidBody. The value is stored as 32-bit integer. + Always set to 0. It is only remainder of "Layer" 32-bit integer above. + Always set to 0. It is only remainder of "Layer" 32-bit integer above. @@ -1883,47 +1996,7 @@ Havok objects that have a position in the world? Link to the body for this collision object. - Sets mesh color in Oblivion Construction Set. - The first bit sets the LINK property and controls whether this body is physically linked to others. The next bit turns collision off. Then, the next bit sets the SCALED property in Oblivion. The next five bits make up the number of this part in a linked body list. - Physical purpose of collision object? The setting affects objetct's havok behavior in game. - FLAGS are stored in highest 3 bits: - Bit 7: sets the LINK property and controls whether this body is physically linked to others. - Bit 6: turns collision off (not used for Layer SKYL_BIPED). - Bit 5: sets the SCALED property. - - PART NUMBER in a linked body list is stored in lowest 5 bits (used only when Skyrim Layer is set to SKYL_BIPED): - 0 - OTHER - 1 - HEAD - 2 - BODY - 3 - SPINE1 - 4 - SPINE2 - 5 - LUPPERARM - 6 - LFOREARM - 7 - LHAND - 8 - LTHIGH - 9 - LCALF - 10 - LFOOT - 11 - RUPPERARM - 12 - RFOREARM - 13 - RHAND - 14 - RTHIGH - 15 - RCALF - 16 - RFOOT - 17 - TAIL - 18 - SHIELD - 19 - QUIVER - 20 - WEAPON - 21 - PONYTAIL - 22 - WING - 23 - PACK - 24 - CHAIN - 25 - ADDONHEAD - 26 - ADDONCHEST - 27 - ADDONARM - 28 - ADDONLEG - 29-31 - NULL - - Unknown. + @@ -1957,14 +2030,11 @@ Unknown Lowers the frequency for processContactCallbacks. A value of 5 means that a callback is raised every 5th frame. Unknown. - Copy of Layer value? - Copy of Col Filter value? - Copy of Skyrim Layer value? - Copy of Flags & Part number? - + Copy of Havok Col Filter + Unknown. - Oblivion defaults: 0 21280 2481 62977 65535 44 0 - Skyrim defaults: 0 56896 1343 0 0 1 65535 (fourth and fifth element *must* be zero) + Oblivion defaults: 21280 2481 62977 65535 44 0 + Skyrim defaults: 56896 1343 0 0 1 65535 (third and fourth element *must* be zero) A vector that moves the body by the specified amount. Only enabled in bhkRigidBodyT objects. The rotation Yaw/Pitch/Roll to apply to the body. Only enabled in bhkRigidBodyT objects. @@ -2110,8 +2180,7 @@ Transforms a shape. The shape that this object transforms. - The shape's material. - The shape's material. + The material of the shape. Unknown. Unknown. A transform matrix. @@ -2119,8 +2188,7 @@ A havok shape, perhaps with a bounding sphere for quick rejection in addition to more detailed shape data? - The shape's material. - The shape's material. + The material of the shape. The radius of the sphere that encloses the shape. @@ -2206,8 +2274,7 @@ walking noise, so only use it for non-walkable objects. The number of sub shapes referenced. List of shapes. - The shape's material. - The shape's material. + The material of the shape. Unknown. Set to (0.0,0.0,-0.0,0.0,0.0,-0.0), where -0.0 is 0x80000000 in hex. Count. Unknown. @@ -2248,8 +2315,7 @@ A shape constructed from a bunch of strips. - The shape's material. - The shape's material. + The material of the shape. Unknown. Unknown. Unknown. @@ -2259,7 +2325,7 @@ The number of strips data objects referenced. Refers to a bunch of NiTriStripsData objects that make up this shape. Number of Havok Layers, equal to Number of strips data objects. - Havok Layers for each strip data. + Havok Layers for each strip data. @@ -2367,7 +2433,7 @@ Havok related collision object? - Set to 1 for most objects, and to 41 for animated objects (OL_ANIM_STATIC). Bits: 0=Active 2=Notify 3=Set Local 6=Reset. + Set to 1 for most objects, and to 41 for animated objects (ANIM_STATIC). Bits: 0=Active 2=Notify 3=Set Local 6=Reset. Links to the collision object data @@ -5088,8 +5154,7 @@ walking noise, so only use it for non-walkable objects. The number of sub shapes referenced. List of shapes. - The shape's material. - The shape's material. + The material of the shape. Unknown. Set to (0.0,0.0,-0.0,0.0,0.0,-0.0), where -0.0 is 0x80000000 in hex. Unknown Flag Unknown Flag From ccda9b2fc22761276ea88ae714c0be9b1137d144 Mon Sep 17 00:00:00 2001 From: ttl269 Date: Tue, 25 Nov 2014 22:08:48 +0000 Subject: [PATCH 012/164] Correction of Skyrim materials order Corrected order of materials in list of Skyrim materials to be sorted ascending. --- nif.xml | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/nif.xml b/nif.xml index b21b177..700a12a 100644 --- a/nif.xml +++ b/nif.xml @@ -263,8 +263,8 @@ A material, used by havok shape objects in Skyrim. - + @@ -276,9 +276,9 @@ - + From 5e906ace3db8b1b177a06db83d4389bde69aca4e Mon Sep 17 00:00:00 2001 From: ttl269 Date: Sat, 24 May 2014 21:34:21 +0200 Subject: [PATCH 013/164] Corrected spelling mistake - object --- nif.xml | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/nif.xml b/nif.xml index 700a12a..00b1765 100644 --- a/nif.xml +++ b/nif.xml @@ -463,7 +463,7 @@ - Physical purpose of collision object? The setting affects objetct's havok behavior in game. Anything higher than 47 is also null. + Physical purpose of collision object? The setting affects object's havok behavior in game. Anything higher than 47 is also null. @@ -1558,7 +1558,7 @@ ColFilter property for Havok. It contains Layer, Flags and Part Number Sets mesh color in Oblivion Construction Set. Sets mesh color in Fallout 3 GECK. - Physical purpose of collision object? The setting affects objetct's havok behavior in game. + Physical purpose of collision object? The setting affects object's havok behavior in game. FLAGS are stored in highest 3 bits: Bit 7: sets the LINK property and controls whether this body is physically linked to others. From d31e19bc4bbbb917b9596fb078c8d0e1294ce44b Mon Sep 17 00:00:00 2001 From: ttl269 Date: Sun, 16 Mar 2014 21:24:42 +0100 Subject: [PATCH 014/164] added support for bhkRagdollTemplate (.rdt files) Added support for bhkRagdollTemplate block based on two .rdt files (.rdt file is a .nif file) located in Fallout3 directory "meshes/ragdollconstraint". It seems that game uses only file "Default.rdt". Second file "stiff.rdt" is unused and suspicious because in NiHeader it has User Version 2 set to 16 instead of 34 as all Fallout3 files (and also Default.rdt) have. Can anybody check Fallout New Vegas files if there are present any .rdt files? It would be good to have more than 2 files for decoding. Or exists other games with these files? --- nif.xml | 146 +++++++++++++++++++++++++++++++++----------------------- 1 file changed, 85 insertions(+), 61 deletions(-) diff --git a/nif.xml b/nif.xml index cf2062b..4bec2b2 100644 --- a/nif.xml +++ b/nif.xml @@ -1636,24 +1636,32 @@ Central directed axis of the cone in which the object can rotate. Orthogonal on Plane B. - Central directed axis of the cone in which the object can rotate. Orthogonal on Plane A. - Defines the orthogonal plane in which the body can move, the orthogonal directions in which the shape can be controlled (the direction orthogonal on this one and Twist A). - Defines the orthogonal directions in which the shape can be controlled (namely in this direction, and in the direction orthogonal on this one and Twist A). - Point around which the object will rotate. Defines the orthogonal directions in which the shape can be controlled (namely in this direction, and in the direction orthogonal on this one and Twist A). - Central directed axis of the cone in which the object can rotate. Orthogonal on Plane B. - Defines the orthogonal plane in which the body can move, the orthogonal directions in which the shape can be controlled (the direction orthogonal on this one and Twist A). - Defines the orthogonal directions in which the shape can be controlled (namely in this direction, and in the direction orthogonal on this one and Twist A). - Defines the orthogonal directions in which the shape can be controlled (namely in this direction, and in the direction orthogonal on this one and Twist A). - - Maximum angle the object can rotate around the vector orthogonal on Plane A and Twist A relative to the Twist A vector. Note that Cone Min Angle is not stored, but is simply minus this angle. + Central directed axis of the cone in which the object can rotate. Orthogonal on Plane A. + Defines the orthogonal plane in which the body can move, the orthogonal directions in which the shape can be controlled (the direction orthogonal on this one and Twist A). + Defines the orthogonal directions in which the shape can be controlled (namely in this direction, and in the direction orthogonal on this one and Twist A). + Point around which the object will rotate. Defines the orthogonal directions in which the shape can be controlled (namely in this direction, and in the direction orthogonal on this one and Twist A). + Central directed axis of the cone in which the object can rotate. Orthogonal on Plane B. + Defines the orthogonal plane in which the body can move, the orthogonal directions in which the shape can be controlled (the direction orthogonal on this one and Twist A). + Defines the orthogonal directions in which the shape can be controlled (namely in this direction, and in the direction orthogonal on this one and Twist A). + Defines the orthogonal directions in which the shape can be controlled (namely in this direction, and in the direction orthogonal on this one and Twist A). + + + Point around which the object will rotate. Defines the orthogonal directions in which the shape can be controlled (namely in this direction, and in the direction orthogonal on this one and Twist A). + Defines the orthogonal plane in which the body can move, the orthogonal directions in which the shape can be controlled (the direction orthogonal on this one and Twist A). + Central directed axis of the cone in which the object can rotate. Orthogonal on Plane A. + Defines the orthogonal directions in which the shape can be controlled (namely in this direction, and in the direction orthogonal on this one and Twist A). + Defines the orthogonal plane in which the body can move, the orthogonal directions in which the shape can be controlled (the direction orthogonal on this one and Twist A). + Central directed axis of the cone in which the object can rotate. Orthogonal on Plane B. + + Maximum angle the object can rotate around the vector orthogonal on Plane A and Twist A relative to the Twist A vector. Note that Cone Min Angle is not stored, but is simply minus this angle. Minimum angle the object can rotate around Plane A, relative to Twist A. Maximum angle the object can rotate around Plane A, relative to Twist A. Minimum angle the object can rotate around Twist A, relative to Plane A. Maximum angle the object can rotate around Twist A, relative to Plane A. - Maximum friction, typically 0 or 10. In Fallout 3, typically 100. + Maximum friction, typically 0 or 10. In Fallout 3, typically 100. - Unknown - + Unknown + @@ -1669,21 +1677,30 @@ Perp2 Axle In A2 in second entity coordinate system. - Axis of rotation. - Vector in the rotation plane which defines the zero angle. - Vector in the rotation plane, orthogonal on the previous one, which defines the positive direction of rotation. This is always the vector product of Axle A and Perp2 Axle In A1. - Pivot point around which the object will rotate. - Axle A in second entity coordinate system. - Perp2 Axle In A1 in second entity coordinate system. - Perp2 Axle In A2 in second entity coordinate system. - Pivot A in second entity coordinate system. + Axis of rotation. + Vector in the rotation plane which defines the zero angle. + Vector in the rotation plane, orthogonal on the previous one, which defines the positive direction of rotation. This is always the vector product of Axle A and Perp2 Axle In A1. + Pivot point around which the object will rotate. + Axle A in second entity coordinate system. + Perp2 Axle In A1 in second entity coordinate system. + Perp2 Axle In A2 in second entity coordinate system. + Pivot A in second entity coordinate system. + + + Pivot point around which the object will rotate. + Axis of rotation. + Vector in the rotation plane, orthogonal on the previous one, which defines the positive direction of rotation. This is always the vector product of Axle A and Perp2 Axle In A1. + Vector in the rotation plane which defines the zero angle. + Pivot A in second entity coordinate system. + Axle A in second entity coordinate system. + Perp2 Axle In A1 in second entity coordinate system. Minimum rotation angle. Maximum rotation angle. Maximum friction, typically either 0 or 10. In Fallout 3, typically 100. - Unknown - + Unknown + @@ -1894,26 +1911,29 @@ Compressed - + + Type of constraint. + 7 = RagDoll Constraint? + 13 = Malleable Constraint? + Unknown. Usually 2. + Entity A in this constraint. + Entity B in this constraint. + Usually 1. Higher values indicate higher priority of this constraint? + + + + + A malleable constraint. + Type of constraint. + Unknown. Usually 2. + Usually -1? + Usually -1? + Usually 1. Higher values indicate higher priority of this constraint? + + + + + + + Found in Fallout 3, more ragdoll info? (meshes\ragdollconstraint\*.rdt) + + Number of target bones + Bones in index + + + + Data for bhkRagdollTemplate + + Probably a Mass for bhkRigidBody linked to this bone node. + Probably a Restitution for bhkRigidBody linked to this bone node. + Probably a Friction for bhkRigidBody linked to this bone node. + Probably a Radius for collision object shape of bhkRigidBody linked to this bone node. + Unknown. Dependent on value of User Version 2? + Value 7 found in Fallout3 meshes\ragdollconstraint\default.rdt. This file has User Version 2 = 34. + Value 0 found in Fallout3 meshes\ragdollconstraint\stiff.rdt. This file has User Version 2 = 16. + Either a flag or a number of constraints. + 0: no Constraint is present. + 1: a Constraint is present. + Unknown + A range of indices, which make up a region (such as a submesh). From b9d010902d448f334fd9058203a019c542d26d1c Mon Sep 17 00:00:00 2001 From: ttl269 Date: Sat, 22 Nov 2014 18:11:51 +0100 Subject: [PATCH 015/164] bhkBreakableConstraint update Added structure of bhkBreakableConstraint. It seems that it is (and also bhkMalleableConstraint) some kind of "parent descriptor" for behavior for their "children" constraint which must be inserted within it. This inserted constraint in named "Sub Constraint", its type is determined by "Constraint Type" integer value. After this integer there is inserted complete constraint - one of allowed "common" constraints. And then there are inserted parameters specific for parent constrains (for example breakable one has "Threshold" and "Remove if Broken"). From vanilla nifs it seems that this "Sub Constraint" has always set its "Num Entities" to 2 but also both references to "Entities" are set to None. I think that this is probably because the relation between two rigid bodies this constraint is affecting is determined earlier - in "Entities" of parent constraint (bhkBreakableConstraint or bhkMalleableConstraint) and therefore it is not necessary (or it is forbidden?) to set references to entities also in "Sub Constraint". --- nif.xml | 76 ++++++++++++++++++++++++++++++++++----------------------- 1 file changed, 45 insertions(+), 31 deletions(-) diff --git a/nif.xml b/nif.xml index 4bec2b2..72680da 100644 --- a/nif.xml +++ b/nif.xml @@ -986,6 +986,16 @@ + + The type of constraint. + + + + + + + + @@ -1726,6 +1736,19 @@ + + Unknown + Unknown + Unknown + Unknown + + + + Pivot A. + Pivot B. + Length. + + Used to store skin weights in NiTriShapeSkinController. The amount that this bone affects the vertex. @@ -1911,6 +1934,18 @@ Compressed + + Type of constraint. + Usually 2. Number of bodies affected by this constraint. + Usually NONE. The entities affected by this constraint. + Usually 1. Higher values indicate higher priority of this constraint? + + + + + + + Type of constraint. 7 = RagDoll Constraint? @@ -2113,23 +2148,15 @@ A malleable constraint. - Type of constraint. - Unknown. - Usually -1? - Usually -1? - Unknown. 1? - - - - - + Constraint within constraint. + + + A spring constraint. - Pivot A. - Pivot B. - Length. + Stiff Spring constraint. @@ -2172,10 +2199,7 @@ A Ball and Socket Constraint. - Unknown - Unknown - Unknown - Unknown + Describes a ball and socket constraint @@ -5337,20 +5361,10 @@ - Bethesda-Specific node. - - Unknown - A count or flag? - Number of bodies affected by this constraint. - The entities affected by this constraint. - Usually 1. Higher values indicate higher priority of this constraint? - Unknown - Unknown - Unknown - Unknown - Unknown - Unknown - Unknown + A breakable constraint. + Constraint within constraint. + Amount of force to break the rigid bodies apart? + Unknown From 87b8f9e91efaf3c74bd436fa3a3e751a7d6b00d0 Mon Sep 17 00:00:00 2001 From: ttl269 Date: Sat, 22 Nov 2014 18:57:08 +0100 Subject: [PATCH 016/164] added PrismaticConstraint to SubConstraints 1. Added PrismaticConstraint to list of available constraints in SubConstraint 2. Previously added enum "ConstraintType" renamed to "hkConstraintType" --- nif.xml | 57 +++++++++++++++++++++++++++++++-------------------------- 1 file changed, 31 insertions(+), 26 deletions(-) diff --git a/nif.xml b/nif.xml index 72680da..fcf535d 100644 --- a/nif.xml +++ b/nif.xml @@ -986,11 +986,12 @@ - + The type of constraint. + @@ -1743,6 +1744,32 @@ Unknown + + + Pivot A. + 4x4 rotation matrix, rotates the child entity. + Pivot B. + Describes the axis the object is able to travel along. Unit vector. + Plane normal. Describes the plane the object is able to move on. + + + Describes the axis the object is able to travel along. Unit vector. + Rotation axis. + Plane normal. Describes the plane the object is able to move on. + Pivot. + Describes the axis the object is able to travel along in B coordinates. Unit vector. + Rotation axis. + Plane normal. Describes the plane the object is able to move on in B coordinates. + Pivot in B coordinates. + + Describe the min distance the object is able to travel. + + Describe the max distance the object is able to travel. + Friction. + + Unknown. Do not set this to anything over 0 as it will crash the game. + + Pivot A. Pivot B. @@ -1935,13 +1962,14 @@ - Type of constraint. + Type of constraint. Usually 2. Number of bodies affected by this constraint. Usually NONE. The entities affected by this constraint. Usually 1. Higher values indicate higher priority of this constraint? + @@ -2166,30 +2194,7 @@ A prismatic constraint. - - - Pivot A. - 4x4 rotation matrix, rotates the child entity. - Pivot B. - Describes the axis the object is able to travel along. Unit vector. - Plane normal. Describes the plane the object is able to move on. - - - Describes the axis the object is able to travel along. Unit vector. - Rotation axis. - Plane normal. Describes the plane the object is able to move on. - Pivot. - Describes the axis the object is able to travel along in B coordinates. Unit vector. - Rotation axis. - Plane normal. Describes the plane the object is able to move on in B coordinates. - Pivot in B coordinates. - - Describe the min distance the object is able to travel. - - Describe the max distance the object is able to travel. - Friction. - - Unknown. Do not set this to anything over 0 as it will crash the game. + Describes a prismatic constraint From bbe7e979e8fcb10e14fe6573a6c00b3e3fa74df3 Mon Sep 17 00:00:00 2001 From: ttl269 Date: Sun, 8 Feb 2015 19:15:54 +0100 Subject: [PATCH 017/164] NiTimeController, BSBehaviorGraphExtraData update NiTimeController: - Added documentation for bit 5 and bit 6 of Flags. - Corrected documentation of bit 0 of Flags. - Added default value 1.0 to Frequency. BSBehaviorGraphExtraData - Changed type of "Controls Base Skeleton" from byte to bool. --- nif.xml | 10 ++++++---- 1 file changed, 6 insertions(+), 4 deletions(-) diff --git a/nif.xml b/nif.xml index fcf535d..c81dfdb 100644 --- a/nif.xml +++ b/nif.xml @@ -2581,13 +2581,15 @@ A generic time controller object. Index of the next controller. - Controller flags (usually 0x000C). Probably controls loops. + Controller flags. Bit 0 : Anim type, 0=APP_TIME 1=APP_INIT - Bit 1-2 : Cycle type 00=Loop 01=Reverse 10=Loop + Bit 1-2 : Cycle type, 00=Loop 01=Reverse 10=Clamp Bit 3 : Active Bit 4 : Play backwards + Bit 5 : Is manager controlled + Bit 6 : Always seems to be set in Skyrim and Fallout NIFs, unknown function - Frequency (is usually 1.0). + Frequency (is usually 1.0). Phase (usually 0.0). Controller start time. Controller stop time. @@ -6208,7 +6210,7 @@ Links a nif with a Havok Behavior .hkx animation file Name of the hkx file. - Unknown, has to do with blending appended bones onto an actor. + Unknown, has to do with blending appended bones onto an actor. From 2dc30d1de54c5651d84de1f79105aeac79fde9bb Mon Sep 17 00:00:00 2001 From: Ghost Date: Sat, 23 May 2015 13:43:22 -0500 Subject: [PATCH 018/164] Add zero option to ExtraVectorsFlags to allow blender plugin to set the value during export. --- nif.xml | 1 + 1 file changed, 1 insertion(+) diff --git a/nif.xml b/nif.xml index fcf535d..c51ee62 100644 --- a/nif.xml +++ b/nif.xml @@ -983,6 +983,7 @@ + From 24ba465090325f6a9753caa6dbdf89acd267b828 Mon Sep 17 00:00:00 2001 From: Ghost Date: Wed, 24 Jun 2015 10:03:27 -0500 Subject: [PATCH 019/164] Increment version number to 0.7.1.1 --- nif.xml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/nif.xml b/nif.xml index c51ee62..3956251 100644 --- a/nif.xml +++ b/nif.xml @@ -1,6 +1,6 @@ - + + Links to meshes used for emitting. The way the particles get their initial direction and speed. The parts of the mesh that the particles emit from. The emission axis. @@ -4861,7 +4886,8 @@ Unknown Unknown Unknown - Unknown, unsure if this is actually another interpolator link. + + Unknown, unsure if this is actually another interpolator link. @@ -5009,6 +5035,7 @@ Texture Set, can have override in an esm/esp Glow color and alpha Multiplied emissive colors + How to handle texture borders. The material's opacity (1=non-transparent). The amount of distortion. **Not based on physically accurate refractive index** (0=none) (0-1) @@ -5017,8 +5044,11 @@ Brightness of specular highlight. (0=not visible) (0-999) Controls strength for envmap/backlight/rim/softlight lighting effect? Controls strength for envmap/backlight/rim/softlight lighting effect? + Scales the intensity of the environment/cube map. (0-1) + Tints the base texture. Overridden by game settings. + Tints the base texture. Overridden by game settings. Max Passes Scale @@ -5040,15 +5070,20 @@ Offset UV Scale to repeat tiling textures points to an external texture. How to handle texture borders. - - At this cosine of angle falloff will be equal to Falloff Start Opacity - At this cosine of angle falloff will be equal to Falloff Stop Opacity - Alpha falloff multiplier at start angle - Alpha falloff multiplier at end angle - Emissive color - Multiplier for Emissive Color (RGB part) - - Points to an external texture, used as palette for SLSF1_Greyscale_To_PaletteColor/SLSF1_Greyscale_To_PaletteAlpha. + At this cosine of angle falloff will be equal to Falloff Start Opacity + At this cosine of angle falloff will be equal to Falloff Stop Opacity + Alpha falloff multiplier at start angle + Alpha falloff multiplier at end angle + Emissive color + Multiplier for Emissive Color (RGB part) + + Points to an external texture, used as palette for SLSF1_Greyscale_To_PaletteColor/SLSF1_Greyscale_To_PaletteAlpha. + + + + + + @@ -6243,4 +6278,184 @@ + + + + + + + + + + + + + + + + + Fallout 4 Tri Shape + + + + + + + + + + + + + + + + + + + + Fallout 4 LOD Tri Shape + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + Fallout 4 Sub-Index Tri Shape + + + + + + + + + + + + + Fallout 4 Collision Object + Unknown. + + + + Fallout 4 Extra Data + + + + Fallout 4 Collision System + + + + + + Fallout 4 Ragdoll System + + + + + + Fallout 4 Cloth data + + + + + + + + Fallout 4 Bone Transform + + + + + + + + + Fallout 4 Skin Instance + + + + + + + + + Fallout 4 Bone Data + + + + + + Fallout 4 Positional Data + + + + + + + + + + + + + + Fallout 4 Item Slot Parent + + + + + + Fallout 4 Item Slot Child + + + + + + + Fallout 4 Eye Center Data + + + + + + + + + + From 916753fd80ed054a36d68c5435851858ab7d9dfb Mon Sep 17 00:00:00 2001 From: jonwd7 Date: Sun, 15 Nov 2015 22:32:43 -0500 Subject: [PATCH 021/164] [FO4] Data Size fix Affects mostly particle/FX NIFs which can't really be edited anyway. --- nif.xml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/nif.xml b/nif.xml index 41981cf..ddc7f19 100644 --- a/nif.xml +++ b/nif.xml @@ -6309,7 +6309,7 @@ - + From 63906e311cb96272c323ab211ea64a3ea131ef7d Mon Sep 17 00:00:00 2001 From: jonwd7 Date: Sun, 15 Nov 2015 23:20:45 -0500 Subject: [PATCH 022/164] [FO4] Additional Fixes --- nif.xml | 9 +++++---- 1 file changed, 5 insertions(+), 4 deletions(-) diff --git a/nif.xml b/nif.xml index ddc7f19..9f51026 100644 --- a/nif.xml +++ b/nif.xml @@ -2396,7 +2396,7 @@ Havok Layers for each strip data. - + A generic extra data object. Name of this object. Block number of the next extra data object. @@ -6406,11 +6406,12 @@ Fallout 4 Skin Instance - + - - + + + From ab6c8079c5fad40c4ea2b48b77f66813b45d6769 Mon Sep 17 00:00:00 2001 From: jonwd7 Date: Mon, 16 Nov 2015 12:10:44 -0500 Subject: [PATCH 023/164] [FO4] Export Info 3 caused earlier NIFs to fail in NifSkope --- nif.xml | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/nif.xml b/nif.xml index 9f51026..aff0c78 100644 --- a/nif.xml +++ b/nif.xml @@ -1279,7 +1279,8 @@ Unknown. Possibly User Version 2? - + + Number of object types in this NIF file. List of all object types used in this NIF file. Maps file objects on their corresponding type: first file object is of type object_types[object_type_index[0]], the second of object_types[object_type_index[1]], etc. From c536b5f6a735402024e2669855774ced7f18aec3 Mon Sep 17 00:00:00 2001 From: jonwd7 Date: Mon, 16 Nov 2015 21:12:21 -0500 Subject: [PATCH 024/164] [FO4] Found normals and tangents --- nif.xml | 9 ++++++++- 1 file changed, 8 insertions(+), 1 deletion(-) diff --git a/nif.xml b/nif.xml index aff0c78..01900cf 100644 --- a/nif.xml +++ b/nif.xml @@ -6285,7 +6285,14 @@ - + + + + + + + + From f556956ce22acce35012496d8559cd8e56d4155c Mon Sep 17 00:00:00 2001 From: jonwd7 Date: Mon, 16 Nov 2015 22:10:16 -0500 Subject: [PATCH 025/164] [FO4] Another fix for Export Info 3 --- nif.xml | 3 +-- 1 file changed, 1 insertion(+), 2 deletions(-) diff --git a/nif.xml b/nif.xml index 01900cf..e979a90 100644 --- a/nif.xml +++ b/nif.xml @@ -1279,8 +1279,7 @@ Unknown. Possibly User Version 2? - - + Number of object types in this NIF file. List of all object types used in this NIF file. Maps file objects on their corresponding type: first file object is of type object_types[object_type_index[0]], the second of object_types[object_type_index[1]], etc. From 19d0728385370649e86566f8a8595ba0e01652b6 Mon Sep 17 00:00:00 2001 From: jonwd7 Date: Tue, 17 Nov 2015 18:30:18 -0500 Subject: [PATCH 026/164] [FO4] Cleanup Removed outdated comment, added Fallout 4 to version nums. --- nif.xml | 6 ++---- 1 file changed, 2 insertions(+), 4 deletions(-) diff --git a/nif.xml b/nif.xml index e979a90..83d3bae 100644 --- a/nif.xml +++ b/nif.xml @@ -29,7 +29,7 @@ Civilization IV, Oblivion, Sid Meier's Railroads Oblivion Megami Tensei: Imagine - Emerge, Empire Earth III, Fallout 3, Skyrim + Emerge, Empire Earth III, Fallout 3, Skyrim, Fallout 4 Emerge, Empire Earth III, Atlantica Emerge @@ -6355,8 +6355,8 @@ + - @@ -6365,9 +6365,7 @@ - - From 0d5e6c1f71ce6d2c4769598112f3feaf96fc9ac5 Mon Sep 17 00:00:00 2001 From: jonwd7 Date: Thu, 19 Nov 2015 13:31:48 -0500 Subject: [PATCH 027/164] [FO4] Conditional and type fixes --- nif.xml | 38 ++++++++++++++++++-------------------- 1 file changed, 18 insertions(+), 20 deletions(-) diff --git a/nif.xml b/nif.xml index 83d3bae..49c0899 100644 --- a/nif.xml +++ b/nif.xml @@ -1086,7 +1086,7 @@ The vertex indices. - + A vector in 3D space (x,y,z). First coordinate. Second coordinate. @@ -5035,7 +5035,7 @@ Texture Set, can have override in an esm/esp Glow color and alpha Multiplied emissive colors - + How to handle texture borders. The material's opacity (1=non-transparent). The amount of distortion. **Not based on physically accurate refractive index** (0=none) (0-1) @@ -6282,22 +6282,21 @@ - - - - - - - - - - - - - - - - + + + + + + + + + + + + + + + @@ -6344,8 +6343,7 @@ - - + From 302fb048a247441d160a17ce8a951e476e5fe278 Mon Sep 17 00:00:00 2001 From: jonwd7 Date: Thu, 19 Nov 2015 14:46:32 -0500 Subject: [PATCH 028/164] [FO4] ByteVector3 type --- nif.xml | 15 +++++++++------ 1 file changed, 9 insertions(+), 6 deletions(-) diff --git a/nif.xml b/nif.xml index 49c0899..1bef181 100644 --- a/nif.xml +++ b/nif.xml @@ -1086,6 +1086,13 @@ The vertex indices. + + A vector in 3D space (x,y,z). + First coordinate. + Second coordinate. + Third coordinate. + + A vector in 3D space (x,y,z). First coordinate. @@ -6285,13 +6292,9 @@ - - - + - - - + From aa266468ac00944096addf48c2d127c3d4846c4d Mon Sep 17 00:00:00 2001 From: jonwd7 Date: Thu, 19 Nov 2015 20:18:23 -0500 Subject: [PATCH 029/164] [FO4] Fixes for Vertex Flags == 6 --- nif.xml | 14 +++++++------- 1 file changed, 7 insertions(+), 7 deletions(-) diff --git a/nif.xml b/nif.xml index 1bef181..624f1a8 100644 --- a/nif.xml +++ b/nif.xml @@ -6292,13 +6292,13 @@ - - - - - - - + + + + + + + From cc0207e9fcd738b1b725d02fb270e0223ca390b6 Mon Sep 17 00:00:00 2001 From: jonwd7 Date: Thu, 19 Nov 2015 21:17:31 -0500 Subject: [PATCH 030/164] [FO4] More fixes for Vertex Flags --- nif.xml | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/nif.xml b/nif.xml index 624f1a8..5446a1c 100644 --- a/nif.xml +++ b/nif.xml @@ -6289,7 +6289,8 @@ - + + From 68164250781f9d9aa9a73b9d8c33521e88412b07 Mon Sep 17 00:00:00 2001 From: jonwd7 Date: Sun, 22 Nov 2015 02:04:57 -0500 Subject: [PATCH 031/164] [FO4] Fixes and nifskopetype for HalfTexCoord --- nif.xml | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/nif.xml b/nif.xml index 5446a1c..24c2d04 100644 --- a/nif.xml +++ b/nif.xml @@ -1391,7 +1391,7 @@ Second coordinate. - + Texture coordinates (u,v). First coordinate. Second coordinate. @@ -6358,8 +6358,8 @@ - - + + From 5a50b8069e042ad053582f635593141957c4c298 Mon Sep 17 00:00:00 2001 From: jonwd7 Date: Sun, 22 Nov 2015 20:02:41 -0500 Subject: [PATCH 032/164] [FO4] Optimized Compounds Running XML Checker on 755 armors went from 75s to 9s. There is definitely a problem with ARG speed that needs to be fixed. --- nif.xml | 34 +++++++++++++++++++++++++++++++++- 1 file changed, 33 insertions(+), 1 deletion(-) diff --git a/nif.xml b/nif.xml index 24c2d04..8bb1093 100644 --- a/nif.xml +++ b/nif.xml @@ -6287,7 +6287,34 @@ + + Rigid Vertex Data compound + + + + + + + + + + + + Skinned Vertex Data compound + + + + + + + + + + + + + Catch all Vertex Data compound, SLOW @@ -6319,7 +6346,12 @@ - + + + From 30c2bcf16f11280fca23b022c158bd410c25843f Mon Sep 17 00:00:00 2001 From: jonwd7 Date: Tue, 24 Nov 2015 04:10:26 -0500 Subject: [PATCH 033/164] [FO4] Vertex Data update --- nif.xml | 18 +++++++++--------- 1 file changed, 9 insertions(+), 9 deletions(-) diff --git a/nif.xml b/nif.xml index 8bb1093..22235e7 100644 --- a/nif.xml +++ b/nif.xml @@ -6290,24 +6290,24 @@ Rigid Vertex Data compound - + - + - + Skinned Vertex Data compound - + - + - + @@ -6316,14 +6316,14 @@ Catch all Vertex Data compound, SLOW - + - + - + From 2079e97717e0026b3824d351e7d172088952e65a Mon Sep 17 00:00:00 2001 From: jonwd7 Date: Wed, 25 Nov 2015 03:36:45 -0500 Subject: [PATCH 034/164] [FO4] ByteColor4 nifskopetype --- nif.xml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/nif.xml b/nif.xml index 22235e7..b82e6fc 100644 --- a/nif.xml +++ b/nif.xml @@ -1053,7 +1053,7 @@ Alpha. - + A color with alpha (red, green, blue, alpha). Red color component. Green color component. From c7492c234f9b79768488553e5c315cfa9ddd462c Mon Sep 17 00:00:00 2001 From: jonwd7 Date: Thu, 26 Nov 2015 03:47:06 -0500 Subject: [PATCH 035/164] [FO4] BSSITS naming changes --- nif.xml | 22 +++++++++++----------- 1 file changed, 11 insertions(+), 11 deletions(-) diff --git a/nif.xml b/nif.xml index b82e6fc..3f3de20 100644 --- a/nif.xml +++ b/nif.xml @@ -6362,19 +6362,19 @@ - + + + + - - - - - - - - - + + + + + + @@ -6399,7 +6399,7 @@ - + From 343f283587221b7aeb5a01214d5700a609b1f6de Mon Sep 17 00:00:00 2001 From: jonwd7 Date: Wed, 2 Dec 2015 05:30:29 -0500 Subject: [PATCH 036/164] [FO4] Unknown Floats for BSLSP --- nif.xml | 16 +++++++++++++--- 1 file changed, 13 insertions(+), 3 deletions(-) diff --git a/nif.xml b/nif.xml index 3f3de20..d308799 100644 --- a/nif.xml +++ b/nif.xml @@ -5049,9 +5049,19 @@ The material's specular power, or glossiness (0-999). Adds a colored highlight. Brightness of specular highlight. (0=not visible) (0-999) - Controls strength for envmap/backlight/rim/softlight lighting effect? - Controls strength for envmap/backlight/rim/softlight lighting effect? - + Controls strength for envmap/backlight/rim/softlight lighting effect? + Controls strength for envmap/backlight/rim/softlight lighting effect? + + + + + + + + + + + Scales the intensity of the environment/cube map. (0-1) Tints the base texture. Overridden by game settings. From ca4328f17b988c061193593b71b7f63008f2f984 Mon Sep 17 00:00:00 2001 From: jonwd7 Date: Wed, 2 Dec 2015 08:08:01 -0500 Subject: [PATCH 037/164] [FO4] BSConnectPoint decoding Not positive about the Scale but it seems likely. --- nif.xml | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/nif.xml b/nif.xml index d308799..d8002aa 100644 --- a/nif.xml +++ b/nif.xml @@ -6478,9 +6478,9 @@ - - - + + + From facb525ba3fd68be515460b41d6660f5b694af68 Mon Sep 17 00:00:00 2001 From: jonwd7 Date: Wed, 9 Dec 2015 19:23:05 -0500 Subject: [PATCH 038/164] [FO4] Bounding Spheres for BSTriShape and bones --- nif.xml | 5 ++--- 1 file changed, 2 insertions(+), 3 deletions(-) diff --git a/nif.xml b/nif.xml index d8002aa..b66bf0c 100644 --- a/nif.xml +++ b/nif.xml @@ -6342,7 +6342,7 @@ Fallout 4 Tri Shape - + @@ -6446,8 +6446,7 @@ Fallout 4 Bone Transform - - + From 4e461d48116cdc03cf0c41a29703455ea0296b35 Mon Sep 17 00:00:00 2001 From: jonwd7 Date: Wed, 9 Dec 2015 22:57:07 -0500 Subject: [PATCH 039/164] [FO4] BSEffectShaderProperty update Very little actually changed, just the addition of 3 textures + env map scale. --- nif.xml | 24 +++++++++++------------- 1 file changed, 11 insertions(+), 13 deletions(-) diff --git a/nif.xml b/nif.xml index b66bf0c..1e2f877 100644 --- a/nif.xml +++ b/nif.xml @@ -5087,20 +5087,18 @@ Offset UV Scale to repeat tiling textures points to an external texture. How to handle texture borders. - At this cosine of angle falloff will be equal to Falloff Start Opacity - At this cosine of angle falloff will be equal to Falloff Stop Opacity - Alpha falloff multiplier at start angle - Alpha falloff multiplier at end angle - Emissive color - Multiplier for Emissive Color (RGB part) - - Points to an external texture, used as palette for SLSF1_Greyscale_To_PaletteColor/SLSF1_Greyscale_To_PaletteAlpha. - - + At this cosine of angle falloff will be equal to Falloff Start Opacity + At this cosine of angle falloff will be equal to Falloff Stop Opacity + Alpha falloff multiplier at start angle + Alpha falloff multiplier at end angle + Emissive color + Multiplier for Emissive Color (RGB part) + + Points to an external texture, used as palette for SLSF1_Greyscale_To_PaletteColor/SLSF1_Greyscale_To_PaletteAlpha. + - - - + + From aec814a5ff9ea81c3176e6d1faf3e26efbb2bfd8 Mon Sep 17 00:00:00 2001 From: jonwd7 Date: Mon, 14 Dec 2015 07:14:24 -0500 Subject: [PATCH 040/164] [FO4] Improved Vertex Format support Supports several edge cases at the cost of being more complicated since the XML is not set up to allow testing of multiple flags in compounds. Now loads SCOL with crashing NifSkope and without any errors. The PreCombined folder now at least opens but with errors as BSPackedCombinedSharedGeomDataExtra is not decoded. Much wider support of meshes overall, without any NaN issues stemming from misassignment of half float types. --- nif.xml | 87 +++++++++++++++++++++++++++++++++++++++++++++------------ 1 file changed, 69 insertions(+), 18 deletions(-) diff --git a/nif.xml b/nif.xml index 1e2f877..ddad486 100644 --- a/nif.xml +++ b/nif.xml @@ -6319,15 +6319,15 @@ + Catch all Vertex Data compound, SLOW - - - - + + + @@ -6337,29 +6337,76 @@ + + + Rigid Vertex Data compound + + + + + + + + + + + + + + TODO: Temporary + + + + + + + + + TODO: Temporary + + + + + + + Fallout 4 Tri Shape - - - - - - - - + + + + + + + + - - - + + + + + + + + + + + + + + @@ -6499,6 +6546,10 @@ + + Fallout 4 Packed Combined Geometry Data + + From c3a4d0428e01cacd7c0a20f7eee8bfdcad2035cb Mon Sep 17 00:00:00 2001 From: jonwd7 Date: Tue, 15 Dec 2015 11:54:15 -0500 Subject: [PATCH 041/164] [FO4] BSPackedCombinedSharedGeomDataExtra Correct data length in all cases, but not decoded. --- nif.xml | 23 +++++++++++++++++++++++ 1 file changed, 23 insertions(+) diff --git a/nif.xml b/nif.xml index ddad486..2bb93e5 100644 --- a/nif.xml +++ b/nif.xml @@ -6545,9 +6545,32 @@ + + + + + + + + Fallout 4 Packed Combined Geometry Data + + + + + + + + + + + + + + + From bd87dac76e2a411eff37b91076b09fc440c34b49 Mon Sep 17 00:00:00 2001 From: jonwd7 Date: Tue, 15 Dec 2015 11:56:20 -0500 Subject: [PATCH 042/164] [FO4] Whitespace fix --- nif.xml | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/nif.xml b/nif.xml index 2bb93e5..80aa550 100644 --- a/nif.xml +++ b/nif.xml @@ -6546,13 +6546,13 @@ - + - + Fallout 4 Packed Combined Geometry Data From 5c4c4614a83c7c1a0571ac229e7198c39897b5e1 Mon Sep 17 00:00:00 2001 From: jonwd7 Date: Thu, 17 Dec 2015 02:04:30 -0500 Subject: [PATCH 043/164] [FO4] BSPackedCombinedSharedGeomDataExtra decoding --- nif.xml | 34 +++++++++++++++++++++++++++------- 1 file changed, 27 insertions(+), 7 deletions(-) diff --git a/nif.xml b/nif.xml index 80aa550..8fc1142 100644 --- a/nif.xml +++ b/nif.xml @@ -6546,13 +6546,33 @@ + + + + + + + + + + + + + - - - + + + + + + + + + + Fallout 4 Packed Combined Geometry Data @@ -6566,11 +6586,11 @@ - - + + - - + + From fa533979166f2e719503e281a374e6f708986e9d Mon Sep 17 00:00:00 2001 From: jonwd7 Date: Mon, 21 Dec 2015 11:07:48 -0500 Subject: [PATCH 044/164] [FO4] BSPackedCombinedSharedGeomDataExtra decoding --- nif.xml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/nif.xml b/nif.xml index 8fc1142..37c9203 100644 --- a/nif.xml +++ b/nif.xml @@ -6547,8 +6547,8 @@ + - From d69e464999bd7d1e676b9a0f59e78cf900eb4844 Mon Sep 17 00:00:00 2001 From: jonwd7 Date: Thu, 28 Jan 2016 13:32:52 -0500 Subject: [PATCH 045/164] [FO4] Missing template attribute (PyFFI fix) PyFFI does not like missing template attributes for Ref/Ptr despite the documentation saying the attribute is optional. Validation for "Skin" on BSTriShape is set only to NiObject for the time being. Setting it to BSSkin::Instance would require moving around the blocks. --- nif.xml | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/nif.xml b/nif.xml index 37c9203..91661c9 100644 --- a/nif.xml +++ b/nif.xml @@ -6374,7 +6374,7 @@ Fallout 4 Tri Shape - + @@ -6499,7 +6499,7 @@ Fallout 4 Skin Instance - + From 478e4582f8f014eed3ad87c8bea2183b3d1061bf Mon Sep 17 00:00:00 2001 From: jonwd7 Date: Tue, 29 Mar 2016 12:43:07 -0400 Subject: [PATCH 046/164] [FO4] Parsing fixes --- nif.xml | 12 +++++++----- 1 file changed, 7 insertions(+), 5 deletions(-) diff --git a/nif.xml b/nif.xml index 91661c9..531eb62 100644 --- a/nif.xml +++ b/nif.xml @@ -2814,10 +2814,12 @@ Describes a visible scene element with vertices like a mesh, a particle system, lines, etc. - Data index (NiTriShapeData/NiTriStripData). - Data index (NiTriShapeData/NiTriStripData). - Skin instance index. - Skin instance index. + Data index (NiTriShapeData/NiTriStripData). + Data index (NiTriShapeData/NiTriStripData). + Data index (NiTriShapeData/NiTriStripData). + Skin instance index. + Skin instance index. + Skin instance index. Num Materials Unknown string. Shader? Unknown integer; often -1. (Is this a link, array index?) @@ -5042,7 +5044,7 @@ Texture Set, can have override in an esm/esp Glow color and alpha Multiplied emissive colors - + How to handle texture borders. The material's opacity (1=non-transparent). The amount of distortion. **Not based on physically accurate refractive index** (0=none) (0-1) From 1030e8e762d0c069ec85b4d267c69e193c8434bd Mon Sep 17 00:00:00 2001 From: jonwd7 Date: Tue, 29 Mar 2016 12:45:57 -0400 Subject: [PATCH 047/164] [FO4] Vertex Format Overhaul Combined VF6 and VF7, created after rigorous testing. Rigorous catch-all compound instead of the mess before. Removed edge case compounds as they are no longer needed. Left optimized compounds for NifSkope speed issues. --- nif.xml | 117 +++++++++++++++++++++++++++----------------------------- 1 file changed, 56 insertions(+), 61 deletions(-) diff --git a/nif.xml b/nif.xml index 531eb62..8ea8f42 100644 --- a/nif.xml +++ b/nif.xml @@ -6297,6 +6297,25 @@ + + + Rigid Vertex Data compound @@ -6306,7 +6325,7 @@ - + @@ -6318,26 +6337,28 @@ - + - Catch all Vertex Data compound, SLOW - - - - - - - - - - - - + + + + + + + + + + + + + + + @@ -6349,28 +6370,9 @@ - - - - - - - TODO: Temporary - - - - - - - - - TODO: Temporary - - - - - - + + + @@ -6378,37 +6380,30 @@ - - + + - - + - - - - - - - - - - - - - - + + + + + + + + + + From dab2fea0913cab464040ef25450df8e0ec8d57fd Mon Sep 17 00:00:00 2001 From: jonwd7 Date: Sat, 2 Apr 2016 12:22:33 -0400 Subject: [PATCH 048/164] [FO4] Removal of optimized BSVertexData variants After changes to NifSkope parsing there is no longer a huge benefit to bypassing all the cond="" / ARG checking on the BSVertexData. The other programs did not have this issue, so the variants can be removed. --- nif.xml | 56 +------------------------------------------------------- 1 file changed, 1 insertion(+), 55 deletions(-) diff --git a/nif.xml b/nif.xml index 8ea8f42..21b5eed 100644 --- a/nif.xml +++ b/nif.xml @@ -6316,34 +6316,7 @@ - - Rigid Vertex Data compound - - - - - - - - - - - - Skinned Vertex Data compound - - - - - - - - - - - - - Catch all Vertex Data compound, SLOW @@ -6360,20 +6333,6 @@ - - - Rigid Vertex Data compound - - - - - - - - - - - Fallout 4 Tri Shape @@ -6390,20 +6349,7 @@ - - - - - - - - - - + From f306de7141e30e5ad183ca5a1053977e1e9c499a Mon Sep 17 00:00:00 2001 From: jonwd7 Date: Tue, 5 Apr 2016 13:37:56 -0400 Subject: [PATCH 049/164] [FO4] Version Increment --- nif.xml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/nif.xml b/nif.xml index 21b5eed..0615ec5 100644 --- a/nif.xml +++ b/nif.xml @@ -1,6 +1,6 @@ - + At this cosine of angle falloff will be equal to Falloff Start Opacity At this cosine of angle falloff will be equal to Falloff Stop Opacity Alpha falloff multiplier at start angle @@ -6512,10 +6513,10 @@ - - - - + + + + Fallout 4 Packed Combined Geometry Data From 752ae20de5b3d71e0805b8644b90132a00b18e88 Mon Sep 17 00:00:00 2001 From: jonwd7 Date: Fri, 8 Apr 2016 02:58:04 -0400 Subject: [PATCH 051/164] [FO4] BSSITS name changes Changed to match the names found in the engine. --- nif.xml | 40 ++++++++++++++++++++-------------------- 1 file changed, 20 insertions(+), 20 deletions(-) diff --git a/nif.xml b/nif.xml index fa0f448..98e645c 100644 --- a/nif.xml +++ b/nif.xml @@ -6362,32 +6362,32 @@ - - - + + + - - - - - + + + + + - - + + If Unknown Int 2 is 0xffffffff, this value refers to the Segment at the listed index. - - - - - + + + + + @@ -6395,11 +6395,11 @@ Fallout 4 Sub-Index Tri Shape - - - - - + + + + + From beceea2fb6b3bc2644380e52b88412642b369fac Mon Sep 17 00:00:00 2001 From: jonwd7 Date: Sun, 10 Apr 2016 01:21:00 -0400 Subject: [PATCH 052/164] [FO4] Additional name changes Also changed inheritance for bhkNPCollisionObject because the Flags are different now. Also bhk*System aren't actually extra data so I changed the inheritance there. Names were again changed to mimic what they are called in the engine. Some previously unknowns were clarified as well. --- nif.xml | 49 +++++++++++++++++++++++++++++-------------------- 1 file changed, 29 insertions(+), 20 deletions(-) diff --git a/nif.xml b/nif.xml index 98e645c..3b4b956 100644 --- a/nif.xml +++ b/nif.xml @@ -6404,31 +6404,40 @@ - - Fallout 4 Collision Object - Unknown. + + Fallout 4 Physics System - - - Fallout 4 Extra Data + + + Fallout 4 Collision Object + + Due to inaccurate reporting in the CK the Reset and Sync On Update positions are a guess. + Bits: 0=Reset, 2=Notify, 3=SetLocal, 7=SyncOnUpdate, 10=AnimTargeted + + + - + Fallout 4 Collision System - - + + - + Fallout 4 Ragdoll System - - + + + + + + Fallout 4 Extra Data Fallout 4 Cloth data - - + + @@ -6443,7 +6452,7 @@ Fallout 4 Skin Instance - + @@ -6464,8 +6473,8 @@ - - + + @@ -6479,9 +6488,9 @@ Fallout 4 Item Slot Child - - - + + + From 3088914c1db3e076d8013ad16889e8726cf3b8a8 Mon Sep 17 00:00:00 2001 From: jonwd7 Date: Sun, 10 Apr 2016 23:58:52 -0400 Subject: [PATCH 053/164] [FO4] New shader flags There were 16 changed shader flags between game versions. This creates a new set of enums for FO4 so that the proper descriptions can be shown for the bits. Also, the original vercond for Shader Flags 1/2 was unnecessary. The Skyrim NIFs that are User Version == 11 are actually structured like FO3 NIFs and use different shader blocks. So changing the condition like I did is a sound change, and I've already scanned all vanilla Skyrim NIFs. --- nif.xml | 88 +++++++++++++++++++++++++++++++++++++++++++++++++++++---- 1 file changed, 82 insertions(+), 6 deletions(-) diff --git a/nif.xml b/nif.xml index 3b4b956..d5f8f1c 100644 --- a/nif.xml +++ b/nif.xml @@ -5035,10 +5035,84 @@ + + Fallout 4 Shader Property Flags 1 + + + + Fallout 4 Shader Property Flags 2 + + - Skyrim PP shader for assigning material/shader/texture. - Skyrim Shader Flags for setting render/shader options. - Skyrim Shader Flags for setting render/shader options. + Bethesda shader property for Skyrim and later. + Skyrim Shader Flags for setting render/shader options. + Skyrim Shader Flags for setting render/shader options. + Fallout 4 Shader Flags. Mostly overridden if "Name" is a path to a BGSM/BGEM file. + Fallout 4 Shader Flags. Mostly overridden if "Name" is a path to a BGSM/BGEM file. Offset UVs Offset UV Scale to repeat tiling textures, see above. Texture Set, can have override in an esm/esp @@ -5082,9 +5156,11 @@ - Skyrim non-PP shader model, used primarily for transparency effects, often as decal. - - + Bethesda effect shader property for Skyrim and later. + + + + Offset UVs Offset UV Scale to repeat tiling textures points to an external texture. From 826f67c9d6a4da31f87945cd2a7dc4d55b23dcdd Mon Sep 17 00:00:00 2001 From: jonwd7 Date: Tue, 12 Apr 2016 17:02:42 -0400 Subject: [PATCH 054/164] Removal of nifskopetype In and the nifskopetype attribute was used as an alias system to remap types to internal types. NifSkope now handles the remapping internally. One single downside to this is that new basic/compound cannot be remapped to an internal type via XML alone, it must be added to NifSkope. However, if this proves to ever be an issue, NifSkope can house another file in the installation where the remapping can be done. Additionally, nifskopetype was used in some rows to denote that the data was a binary blob. I have instead replaced this with a more generic `binary="1"`. This is also more informative as generally these rows are actually embedded files. Lastly I removed a lot of custom "ns" compounds which NifSkope no longer seems to use. It would seem these compounds were even pre-nifskopetype attribute. --- nif.xml | 164 ++++++++++++++++++-------------------------------------- 1 file changed, 51 insertions(+), 113 deletions(-) diff --git a/nif.xml b/nif.xml index d5f8f1c..0a34885 100644 --- a/nif.xml +++ b/nif.xml @@ -46,44 +46,44 @@ - + A boolean; 32-bit from 4.0.0.2, and 8-bit from 4.1.0.1 on. - + An unsigned 8-bit integer. - + An unsigned 32-bit integer. - + A litte-endian unsigned 32-bit integer. - + An unsigned 16-bit integer. - + A signed 32-bit integer. - + A signed 16-bit integer. - + A 16-bit (signed?) integer, which is used in the header to refer to a particular object type in a object type string array. The upper bit appears to be a flag used for PhysX block types. - + An 8-bit character. - + A 32-bit integer that stores the version in hexadecimal format with each byte representing a number in the version string. Some widely-used versions and their hex representation: @@ -99,42 +99,42 @@ 20.0.0.5: 0x14000005 - + A 16-bit integer, used for bit flags. Function varies by object type. - + A standard 32-bit floating point number. - + A 16-bit floating point number. - + A variable length string that ends with a newline character (0x0A). The string starts as follows depending on the version: Version <= 10.0.1.0: 'NetImmerse File Format' Version >= 10.1.0.0: 'Gamebryo File Format' - + A variable length string that ends with a newline character (0x0A). - + A signed 32-bit integer, referring to a object before this one in the hierarchy. Examples: Bones, gravity objects. - + A signed 32-bit integer, used to refer to another object; -1 means no reference. These should always point down the hierarchy. Other types are used for indexes that point to objects higher up. - + A 32-bit unsigned integer, used to refer to strings in a NiStringPalette. - + A 32-bit unsigned integer, used to refer to strings in the header. @@ -1006,46 +1006,46 @@ These are like C structures and are used as sub-parts of more complex classes when there are multiple pieces of data repeated in an array.--> - + A string of given length. The string length. The string itself. - + A string type. The normal string. The string index. - + An array of bytes. The number of bytes in this array The bytes which make up the array - + An array of bytes. The number of bytes in this array The number of bytes in this array The bytes which make up the array - + A color without alpha (red, green, blue). Red color component. Green color component. Blue color component. - + A color without alpha (red, green, blue). Red color component. Green color component. Blue color component. - + A color with alpha (red, green, blue, alpha). Red component. Green component. @@ -1053,7 +1053,7 @@ Alpha. - + A color with alpha (red, green, blue, alpha). Red color component. Green color component. @@ -1061,7 +1061,7 @@ Alpha color component. - + A string that contains the path to a file. The normal string. The string index. @@ -1086,28 +1086,28 @@ The vertex indices. - + A vector in 3D space (x,y,z). First coordinate. Second coordinate. Third coordinate. - + A vector in 3D space (x,y,z). First coordinate. Second coordinate. Third coordinate. - + A vector in 3D space (x,y,z). First coordinate. Second coordinate. Third coordinate. - + A 4-dimensional vector. First coordinate. Second coordinate. @@ -1115,7 +1115,7 @@ Fourth coordinate. - + A quaternion. The w-coordinate. The x-coordinate. @@ -1123,7 +1123,7 @@ The z-coordinate. - + A quaternion as it appears in the havok objects. The x-coordinate. The y-coordinate. @@ -1139,7 +1139,7 @@ Member 2,2 (bottom right) - + A 3x3 rotation matrix; M^T M=identity, det(M)=1. Stored in OpenGL column-major format. Member 1,1 (top left) Member 2,1 @@ -1152,7 +1152,7 @@ Member 3,3 (bottom left) - + A 4x4 transformation matrix. The (1,1) element. The (2,1) element. @@ -1185,27 +1185,7 @@ The list of NiNode references. - - Linear key type (!!! for NifSkope optimizer only, use key, keyrot, or keyvec for regular use). - Key time. - The key value. - - - - Array of keys, not interpolated (!!! for NifSkope only, use keyarray for regular use). - Number of keys. - The keys. - - - - Key with tangents (!!! for NifSkope only, use keyvec instead for regular purposes). - The key time. - The key value. - Forward tangent. - Backward tangent. - - - + Another string format, for short strings. Specific to Bethesda-specific header tags. The string length. The string itself, null terminated (the null terminator is taken into account in the length byte). @@ -1297,13 +1277,13 @@ Unknown. - + A list of \\0 terminated strings. A bunch of 0x00 seperated strings. Length of the palette string is repeated here. - + Tension, bias, continuity. Tension. Bias. @@ -1326,48 +1306,6 @@ The keys. - - A TBC key (!!! for NifSkope only, use keyvec for regular purposes). - The key time. - The key value. - Tension, bias, continuity. - - - - Array of interpolable keys (!!! for NifSkope only, use keyvecarray for regular use). - Number of keys. - The key type (1, 2, or 3). - Linearly interpolated keys. - Interpolated keys, using tangents. - Keys, interpolated with tension, bias, continuity. - Another type of linear key? - - - - Rotation subkey (!!! Nifskope only). - Time. - The sub keys, one for every axis. - - - - Array of rotation keys (!!! for NifSkope only, use keyrotarray for regular use). - Number of rotation keys. - The key type (1, 2, 3, or 4). - Linear keys. - Linear keys (yes, rotations don't have type 2 tangent keys!). - TBC keys. - Special rotation keys (3 float arrays, one for each axis). - - - - Array of interpolable keys (!!! for NifSkope only, use keyvecarraytyp for regular use) - Number of keys - The key type (1, 2, 3) - Linearly interpolated keys. - Interpolated keys, using tangents. - Keys, interpolated with tension, bias, continuity. - - A special version of the key type used for quaternions. Never has tangents. Time the key applies. @@ -1385,13 +1323,13 @@ --> - + Texture coordinates (u,v). As in OpenGL; image origin is in the lower left corner. First coordinate. Second coordinate. - + Texture coordinates (u,v). First coordinate. Second coordinate. @@ -1437,7 +1375,7 @@ Pixel data object index. - + List of three vertex indices. First vertex index. Second vertex index. @@ -2329,9 +2267,9 @@ Number of bytes for MOPP data. Origin of the object in mopp coordinates. This is the minimum of all vertices in the packed shape along each axis, minus 0.1. The scaling factor to quantize the MOPP: the quantization factor is equal to 256*256 divided by this number. In Oblivion files, scale is taken equal to 256*256*254 / (size + 0.2) where size is the largest dimension of the bounding box of the packed shape. - The tree of bounding volume data (old style, contains more than just the mopp script). + The tree of bounding volume data (old style, contains more than just the mopp script). Tells if MOPP Data was organized into smaller chunks (PS3) or not (PC) - The tree of bounding volume data. + The tree of bounding volume data. @@ -3658,15 +3596,15 @@ Unknown, same as the number of pixels? / number of blocks? Unknown Unknown - Raw pixel data holding the mipmaps. Mipmap zero is the full-size texture and they get smaller by half as the number increases. + Raw pixel data holding the mipmaps. Mipmap zero is the full-size texture and they get smaller by half as the number increases. A texture. Total number of pixels Unknown - Raw pixel data holding the mipmaps. Mipmap zero is the full-size texture and they get smaller by half as the number increases. - Raw pixel data holding the mipmaps. Mipmap zero is the full-size texture and they get smaller by half as the number increases. + Raw pixel data holding the mipmaps. Mipmap zero is the full-size texture and they get smaller by half as the number increases. + Raw pixel data holding the mipmaps. Mipmap zero is the full-size texture and they get smaller by half as the number increases. @@ -5650,7 +5588,7 @@ Number of components of the data (matches corresponding field in MeshData). The format of each component in this data stream. - + @@ -6497,13 +6435,13 @@ Fallout 4 Collision System - + Fallout 4 Ragdoll System - + @@ -6513,7 +6451,7 @@ Fallout 4 Cloth data - + From 7cb1dbc9a0c8c3bba958fe2abe5b6a307a3ce46e Mon Sep 17 00:00:00 2001 From: jonwd7 Date: Mon, 8 May 2017 06:45:17 -0400 Subject: [PATCH 055/164] Version Increment --- nif.xml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/nif.xml b/nif.xml index 0a34885..5d630ec 100644 --- a/nif.xml +++ b/nif.xml @@ -1,6 +1,6 @@ - + + From cd1e026497cf5cbc26c31b6806043c11624dca2b Mon Sep 17 00:00:00 2001 From: jonwd7 Date: Mon, 8 May 2017 16:43:06 -0400 Subject: [PATCH 057/164] [SSE] Version Increment --- nif.xml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/nif.xml b/nif.xml index 4fd49a3..9333802 100644 --- a/nif.xml +++ b/nif.xml @@ -1,6 +1,6 @@ - + + + --> Texture coordinates (u,v). As in OpenGL; image origin is in the lower left corner. @@ -1453,7 +1453,7 @@ - - + --> Array of Vectors for Decal placement in BSDecalPlacementVectorExtraData. @@ -5531,8 +5531,7 @@ - + --> Found in Fallout 3, more ragdoll info? (meshes\ragdollconstraint\*.rdt) @@ -5911,7 +5910,7 @@ - + The mesh modifier that performs all particle system simulation. The number of simulation steps in this modifier. Links to the simulation steps. From 44755b5c624f519cb136abbaf2adefcd80ad1df1 Mon Sep 17 00:00:00 2001 From: ousnius Date: Sun, 28 May 2017 23:21:24 +0200 Subject: [PATCH 066/164] Decoding for animation blocks Changes to: - NiPathInterpolator - NiBlendInterpolator - NiBoneLODController - bhkBlendController - NiSequence - NiLookAtInterpolator - BSProceduralLightningController - BSAnimNotes New objects: - BSAnimNote New enums: - PathFlags - InterpBlendFlags - LookAtFlags - AnimNoteType New compounds: - InterpBlendItem --- nif.xml | 153 +++++++++++++++++++++++++++++++++++++++----------------- 1 file changed, 106 insertions(+), 47 deletions(-) diff --git a/nif.xml b/nif.xml index bdd9094..73d2a42 100644 --- a/nif.xml +++ b/nif.xml @@ -2451,15 +2451,25 @@ Reference to NiPosData. + + + + + + + + + + Unknown interpolator. - Unknown. - Unknown. - Unknown. - Unknown. - Unknown. Zero. - Links to NiPosData. - Links to NiFloatData. + + + + + Unknown. Zero. + Refers to NiPosData. + Refers to NiFloatData. @@ -2472,10 +2482,33 @@ Unknown. + + + + + + Interpolator item for array in NiBlendInterpolator. + Reference to an interpolator. + + + + + + An extended type of interpolater. - Unknown. - Unknown. + + + + + + + + + + + + @@ -2804,10 +2837,10 @@ Level of detail controller for bones. Priority is arranged from low to high. - Unknown. - Number of node groups. - Number of node groups. - A list of node groups (each group a sequence of bones). + Unknown. + Number of LODs. + Number of node arrays. + A list of node groups (each group a sequence of bones). Number of shape groups. Number of shape groups. List of shape groups. @@ -2905,7 +2938,7 @@ Unknown. Is apparently only used in skeleton.nif files. - Seems to be always zero. + Seems to be always zero. @@ -3219,7 +3252,7 @@ Unknown Unknown Number of controlled objects. - Unknown. + Unknown. Refers to controlled objects. @@ -3237,18 +3270,19 @@ Refers to NiControllerManager which references this object, if any. Name of target node Controller acts on. Refers to NiStringPalette. - Unknown - Unknown + Unknown + Number of anim notes objects. + Indices of anim notes objects. Unknown, found in some Lazeska and Krazy Rain .KFs (seems to be 64 when present). - Unknown. + Abstract type for object palettes. - Unknown. Refers to a list of objects. Used by NiControllerManager. - Unknown. + Refers to a list of objects. Used by NiControllerManager. + Scene root of the object palette. Number of objects. The objects. @@ -3346,6 +3380,14 @@ Scale keys. + + Should be a bitfield for flip toggle. + + + + + + Unknown. Start time is 3.4e+38 and stop time is -3.4e+38. Unknown. @@ -3354,16 +3396,16 @@ Unknown. - Unknown. + Refers to a Node to focus on. - Target node name. + Target node name. Translate. Rotation. Scale. - Refers to NiPoint3Interpolator. - Refers to a NiFloatInterpolator. - Refers to a NiFloatInterpolator. + Refers to NiPoint3Interpolator. + Refers to a NiFloatInterpolator. + Refers to a NiFloatInterpolator. @@ -4897,30 +4939,30 @@ Unkown - + Skyrim, Paired with dummy TriShapes, this controller generates lightning shapes for special effects. First interpolator controls Generation. + References generation interpolator. References interpolator for Mutation of strips - Unknown - Unknown - Unknown - Unknown - Unknown - Unknown - References interpolator for Amplitutde control. 0=straight, 50=wide - Unknown - Unknown - Unknown - How far lightning will stretch to. - Unknown - How wide the bolt will be - Influences forking behavior - Unknown - Unknown - Unknown - Unknown - - Unknown, unsure if this is actually another interpolator link. + References subdivision interpolator. + References branches interpolator. + References branches variation interpolator. + References length interpolator. + References length variation interpolator. + References width interpolator. + References interpolator for amplitude control. 0=straight, 50=wide + Unknown + Unknown + Unknown + How far lightning will stretch to. + How far lightning variation will stretch to. + How wide the bolt will be. + Influences forking behavior with a multiplier. + Unknown + Unknown + Unknown + Unknown + Reference to a shader property. @@ -5385,9 +5427,26 @@ Unknown float data. + + Anim note types. + + + + + + + Bethesda-specific node. + Type of this note. + Location in time. + Unknown. + Unknown. + Unknown. + + Bethesda-specific node. - Unknown + Number of BSAnimNote objects. + BSAnimNote objects. From 97cf79edd2e8c3dbfec42edabf77821d2ad81502 Mon Sep 17 00:00:00 2001 From: ousnius Date: Sun, 28 May 2017 23:58:11 +0200 Subject: [PATCH 067/164] Decoding for extra data blocks Changes to: - BSDecalPlacementVectorExtraData - BSDistantObjectLargeRefExtraData --- nif.xml | 7 +++---- 1 file changed, 3 insertions(+), 4 deletions(-) diff --git a/nif.xml b/nif.xml index 73d2a42..323f3dc 100644 --- a/nif.xml +++ b/nif.xml @@ -5286,9 +5286,8 @@ Unknown - + Bethesda-specific node. (for dynamic decal projection?) - Unknown Number of groups Number of Blocks @@ -6687,8 +6686,8 @@ - Extra integer data. - The value of the extra data. + Large ref flag. + From 7b52470cd7de782787be20a4cd488f9cb0103b2d Mon Sep 17 00:00:00 2001 From: ousnius Date: Mon, 29 May 2017 01:48:55 +0200 Subject: [PATCH 068/164] Decoding for bhk blocks Mesh changed require adjustment in codebases (e.g. NifSkope). Changes to: - bhkCMSDBigTris - bhkCMSDChunk - bhkSimpleShapePhantom - bhkBallSocketConstraintChain - bhkCapsuleShape - bhkBoxShape - bhkConvexVerticesShape - bhkListShape - bhkPackedNiTriStripsShape - bhkNiTriStripsShape - bhkBlendCollisionObject - BSEffectShaderProperty (split values from clamp mode) - bhkConvexListShape - bhkLiquidAction - bhkAabbPhantom - bhkOrientHingedBodyAction - bhkCompressedMeshShapeData New objects: - bhkPoseArray (uncommented) New compounds: - hkWorldObjCinfoProperty - PivotAB --- nif.xml | 174 +++++++++++++++++++++++++++++++------------------------- 1 file changed, 97 insertions(+), 77 deletions(-) diff --git a/nif.xml b/nif.xml index 323f3dc..5bb25da 100644 --- a/nif.xml +++ b/nif.xml @@ -1907,26 +1907,16 @@ Zero - Array of Vectors for Decal placement in BSDecalPlacementVectorExtraData. @@ -1973,8 +1963,8 @@ - Always 0? - + Always 0? + @@ -1987,7 +1977,7 @@ Defines subshape chunks in bhkCompressedMeshShapeData Local translation Index of material in bhkCompressedMeshShapeData::Chunk Materials - Always 65535? + Always 65535? Index of transformation in bhkCompressedMeshShapeData::Chunk Transforms Number of compressed vertices Compressed vertices @@ -2106,6 +2096,12 @@ Links to a NiNode that will define where in object space the collider is located/oriented. + + + + + + The base type of most Bethesda-specific Havok-related NIF objects. @@ -2130,9 +2126,8 @@ Unknown shape. - Unknown. - Unknown. (1,0,0,0,0) x 3. - Unknown. + Not used. + @@ -2245,19 +2240,26 @@ Describes a ball and socket constraint + + Two Vector4 for pivot in A and B. + + + + A Ball and Socket Constraint chain. - Unknown - Unknown - Unknown - Unknown - Unknown - Unknown - Number of links in the chain - Unknown - Number of links in the chain - Unknown - Unknown + + + + + + + Number of links in the chain + + Hardcoded to 2. Don't change. + + + @@ -2285,12 +2287,11 @@ A sphere. - A capsule. - Unknown. + Not used. The following wants to be aligned at 16 bytes. First point on the capsule's axis. Matches first capsule radius. Second point on the capsule's axis. @@ -2299,16 +2300,17 @@ A box. - Unknown. + Not used. The following wants to be aligned at 16 bytes. Looks like this could be the box size. - The smallest of the three sizes. Might be used for optimization. + The smallest of the three sizes. Might be used for optimization. A convex shape built from vertices. Note that if the shape is used in a non-static object (such as clutter), then they will simply fall through ground when they are under a bhkListShape. - Unknown. Must be (0.0,0.0,-0.0,0.0,0.0,-0.0) for arrow detection to work (mind the minus signs, -0.0 is 0x80000000 in hex). + + Number of vertices. Vertices. Fourth component is 0. Lexicographically sorted. The number of half spaces. @@ -2362,7 +2364,8 @@ The number of sub shapes referenced. List of shapes. The material of the shape. - Unknown. Set to (0.0,0.0,-0.0,0.0,0.0,-0.0), where -0.0 is 0x80000000 in hex. + + Count. Unknown. @@ -2388,27 +2391,27 @@ A shape constructed from strips data. Number of subparts. The subparts. - Unknown. - Unknown. Looks like a memory pointer and may be garbage. - Unknown. Same as Unknown Float 3 - Unknown. Sometimes 0.0f or -1. but sometimes really large number. Suspect its garbage. - Unknown. Same as scale below? - Unknown. Usually 0.0 but sometimes 1.0. Same as Unknown Float 4 - Unknown. Same as Unknown Float 1 - Scale. - Unknown. Usually 0.0 but sometimes 1.0. Same as Unknown Float 2 + + Looks like a memory pointer and may be garbage. + + Looks like a memory pointer and may be garbage. + + Same as radius + Same as scale. A link to the shape's NiTriStripsData. A shape constructed from a bunch of strips. The material of the shape. - Unknown. - Unknown. - Unknown. - Unknown - Scale. Usually (1.0, 1.0, 1.0). - Unknown. + + + + MaxSize + Size + eSize + + Scale. Usually (1.0, 1.0, 1.0, 0.0). The number of strips data objects referenced. Refers to a bunch of NiTriStripsData objects that make up this shape. Number of Havok Layers, equal to Number of strips data objects. @@ -2564,8 +2567,8 @@ Unknown. - Blending parameter? - Another blending parameter? + + @@ -5205,7 +5208,7 @@ Scales the intensity of the environment/cube map. (0-1) - + Tints the base texture. Overridden by game settings. Tints the base texture. Overridden by game settings. @@ -5230,8 +5233,10 @@ Offset UVs Offset UV Scale to repeat tiling textures points to an external texture. - How to handle texture borders. - + How to handle texture borders. + + + At this cosine of angle falloff will be equal to Falloff Start Opacity At this cosine of angle falloff will be equal to Falloff Stop Opacity Alpha falloff multiplier at start angle @@ -5399,9 +5404,12 @@ The number of sub shapes referenced. List of shapes. The material of the shape. - Unknown. Set to (0.0,0.0,-0.0,0.0,0.0,-0.0), where -0.0 is 0x80000000 in hex. - Unknown Flag - Unknown Flag + + + + + + @@ -5450,13 +5458,13 @@ Bethesda-specific node. - Unknown Flag + Unknown Flag Unknown Flag - Unknown Flag - Unknown Flag - Unknown Flag - Unknown Flag + + + + @@ -5563,7 +5571,9 @@ Bethesda-specific node. - + + + @@ -5586,10 +5596,17 @@ Bethesda-Specific node. - + + + + + + + + + - + Found in Fallout 3, more ragdoll info? (meshes\ragdollconstraint\*.rdt) @@ -6376,11 +6393,14 @@ The radius of the storage mesh shape? Quantization error? The minimum boundary of the AABB (the coordinates of the corner with the lowest numerical values) The maximum boundary of the AABB (the coordinates of the corner with the highest numerical values) - Unknown - Unknown - Unknown - Unknown - Unknown + + + + Does not appear to be used. + + Does not appear to be used. + + Does not appear to be used. Number of chunk materials Table (array) with sets of materials. Chunks refers to this table by index. Unknown @@ -6392,7 +6412,7 @@ Unknown Unknown - Unknown, end of block. + Does not appear to be used. Needs array. From 1c076d1896959787377135b66268184a978e9101 Mon Sep 17 00:00:00 2001 From: jonwd7 Date: Mon, 29 May 2017 10:16:27 -0400 Subject: [PATCH 069/164] Additions and fixes for bhk Did bhkRigidBody and added the correct rows to bhkWorldObject for correct bhkSimpleShapePhantom size. --- nif.xml | 59 +++++++++++++++++++++++++++++---------------------------- 1 file changed, 30 insertions(+), 29 deletions(-) diff --git a/nif.xml b/nif.xml index 5bb25da..0fe172e 100644 --- a/nif.xml +++ b/nif.xml @@ -1619,7 +1619,7 @@ 28 - ADDONLEG 29-31 - NULL - Unknown. + Unknown. @@ -2097,9 +2097,9 @@ - - - + + + @@ -2114,6 +2114,10 @@ Havok objects that have a position in the world? Link to the body for this collision object. + Garbage data from memory. + + + @@ -2126,7 +2130,7 @@ Unknown shape. - Not used. + Garbage data from memory. @@ -2139,32 +2143,30 @@ marks this body as active for translation and rotation, a normal bhkRigidBody ignores those properties. Because the properties are equal, a bhkRigidBody may be renamed into a bhkRigidBodyT and vice-versa. - Unknown. Could be 2 shorts corresponding to Unknown 7 Shorts[1] and [2]. - Unknown. - Unknown. Could be 3 floats. - The collision response. See hkResponseType for hkpWorld default implementations. - Unknown - Lowers the frequency for processContactCallbacks. A value of 5 means that a callback is raised every 5th frame. - Unknown. + The collision response. See hkResponseType for hkpWorld default implementations. + Skipped over when writing Collision Response and Callback Delay. + Lowers the frequency for processContactCallbacks. A value of 5 means that a callback is raised every 5th frame. + Unknown. Copy of Havok Col Filter - - Unknown. - Oblivion defaults: 21280 2481 62977 65535 44 0 - Skyrim defaults: 56896 1343 0 0 1 65535 (third and fourth element *must* be zero) - + Garbage data from memory. Matches previous Unused value. + + + Skipped over when writing Collision Response and Callback Delay. + + A vector that moves the body by the specified amount. Only enabled in bhkRigidBodyT objects. The rotation Yaw/Pitch/Roll to apply to the body. Only enabled in bhkRigidBodyT objects. Linear velocity. Angular velocity. - Defines how the mass is distributed among the body. + Defines how the mass is distributed among the body. This seems to be used to relocate the object's center of mass. Useful for balancing objects in contraints. The body's mass in kg. A mass of zero represents an immovable object. Damping value for linear movement. A value that is too small fixes the object in place. Damping value for angular movement. - - + + The body's friction. - + The body's restitution (elasticity). If the restitution is not 0.0 the object will need extra CPU for all new collisions. @@ -2178,17 +2180,16 @@ A good choice is 5% - 20% of the smallest diameter of the object. Motion system? Overrides Quality when on Keyframed? - The initial deactivator type of the body. + The initial deactivator type of the body. + Usually set to 1 for fixed objects, or set to 2 for moving ones. Seems to always be same as Unknown Byte 1. The motion type. Determines quality of motion? - Unknown. - Unknown. - Unknown. - Unknown. Skyrim only. + Unknown. + Unknown. Skyrim only. The number of constraints this object is bound to. Unknown. - 0 = do not respond to wind, 1 = respond to wind (?) - + 1 = respond to wind + 1 = respond to wind @@ -5596,7 +5597,7 @@ Bethesda-Specific node. - + From f3d0490718609e9b5e97c28cdfe44b2c960b4dfa Mon Sep 17 00:00:00 2001 From: jonwd7 Date: Mon, 29 May 2017 10:38:48 -0400 Subject: [PATCH 070/164] bhkCompressedMeshShape --- nif.xml | 15 ++++++--------- 1 file changed, 6 insertions(+), 9 deletions(-) diff --git a/nif.xml b/nif.xml index 0fe172e..aec4b00 100644 --- a/nif.xml +++ b/nif.xml @@ -6373,16 +6373,13 @@ Compressed collision mesh. Points to root node? - Unknown. + Unknown. + A shell that is added around the shape. Unknown. - Unknown. - Unknown - A shell with that radius is added around the shape. - Scale - Unknown - Unknown - Unknown - The collision mesh data. + Scale + A shell that is added around the shape. + Scale + The collision mesh data. From f9d999cf226b8abb12952fe6e49d5bee96fe1cce Mon Sep 17 00:00:00 2001 From: jonwd7 Date: Mon, 29 May 2017 10:56:42 -0400 Subject: [PATCH 071/164] bhkRigidBody defaults --- nif.xml | 12 ++++++------ 1 file changed, 6 insertions(+), 6 deletions(-) diff --git a/nif.xml b/nif.xml index aec4b00..0fe7aa4 100644 --- a/nif.xml +++ b/nif.xml @@ -2163,17 +2163,17 @@ The body's mass in kg. A mass of zero represents an immovable object. Damping value for linear movement. A value that is too small fixes the object in place. Damping value for angular movement. - - - The body's friction. + + + The body's friction. - + The body's restitution (elasticity). If the restitution is not 0.0 the object will need extra CPU for all new collisions. Try to set restitution to 0 for maximum performance (e.g. collapsing buildings) - Maximal linear velocity. - Maximal angular velocity. Pi x 10? + Maximal linear velocity. + Maximal angular velocity. The maximum allowed penetration for this object. This is a hint to the engine to see how much CPU the engine should invest to keep this object from penetrating. From 74da87bfdc8bd2e43d33a7f22df39d09a877b41e Mon Sep 17 00:00:00 2001 From: jonwd7 Date: Mon, 29 May 2017 10:57:30 -0400 Subject: [PATCH 072/164] bhkMoppBvTreeShape The phrase "Shape Scale" was used as "Scale" was already taken for the MOPP Scaling Factor and is referred to by code. --- nif.xml | 5 ++--- 1 file changed, 2 insertions(+), 3 deletions(-) diff --git a/nif.xml b/nif.xml index 0fe7aa4..3ab6205 100644 --- a/nif.xml +++ b/nif.xml @@ -2338,9 +2338,8 @@ Memory optimized partial polytope bounding volume tree shape (not an entity). The shape. - Unknown. - Unknown bytes. - Unknown float, might be scale. + Garbage data from memory. Referred to as User Data, Shape Collection, and Code. + Scale. Number of bytes for MOPP data. Origin of the object in mopp coordinates. This is the minimum of all vertices in the packed shape along each axis, minus 0.1. The scaling factor to quantize the MOPP: the quantization factor is equal to 256*256 divided by this number. In Oblivion files, scale is taken equal to 256*256*254 / (size + 0.2) where size is the largest dimension of the bounding box of the packed shape. From 9c069eaf741fe6dedea7d0a9da17c1c645b6d5c3 Mon Sep 17 00:00:00 2001 From: jonwd7 Date: Mon, 29 May 2017 11:37:29 -0400 Subject: [PATCH 073/164] Unused/Padding consistency --- nif.xml | 20 ++++++++------------ 1 file changed, 8 insertions(+), 12 deletions(-) diff --git a/nif.xml b/nif.xml index 3ab6205..fedc4ef 100644 --- a/nif.xml +++ b/nif.xml @@ -2271,8 +2271,8 @@ Transforms a shape. The shape that this object transforms. The material of the shape. - Unknown. - Unknown. + + Garbage data from memory. A transform matrix. @@ -2292,7 +2292,7 @@ A capsule. - Not used. The following wants to be aligned at 16 bytes. + Not used. The following wants to be aligned at 16 bytes. First point on the capsule's axis. Matches first capsule radius. Second point on the capsule's axis. @@ -2301,7 +2301,7 @@ A box. - Not used. The following wants to be aligned at 16 bytes. + Not used. The following wants to be aligned at 16 bytes. Looks like this could be the box size. The smallest of the three sizes. Might be used for optimization. @@ -2405,11 +2405,7 @@ A shape constructed from a bunch of strips. The material of the shape. - - - MaxSize - Size - eSize + Garbage data from memory though the last 3 are referred to as maxSize, size, and eSize. Scale. Usually (1.0, 1.0, 1.0, 0.0). The number of strips data objects referenced. @@ -5571,7 +5567,7 @@ Bethesda-specific node. - + @@ -5599,12 +5595,12 @@ - + - + From c9ed29818c5c0c7c6797395ffada3c1d73142c42 Mon Sep 17 00:00:00 2001 From: ousnius Date: Mon, 29 May 2017 22:21:16 +0200 Subject: [PATCH 074/164] More block decoding Changes to: - BallAndSocketDescriptor - NiAVObject (uint flags) - NiCamera - NiSwitchNode - NiPSysGravityModifier - BSPSysInheritVelocityModifier - BSPSysRecycleBoundModifier - BSPSysLODModifier - BSValueNode - BSStripPSysData - BSPSysMultiTargetEmitterCtlr - BSOrderedNode - BSDebrisNode - BSBlastNode - BSDamageStage - BSMultiBoundNode - BSMultiBound - BSMultiBoundSphere New objects: - BSRangeNode New bitflags: - NiSwitchFlags - BSValueNodeFlags New enums: - BSCPCullingType --- nif.xml | 122 +++++++++++++++++++++++++++++++------------------------- 1 file changed, 67 insertions(+), 55 deletions(-) diff --git a/nif.xml b/nif.xml index fedc4ef..9b81e4c 100644 --- a/nif.xml +++ b/nif.xml @@ -1776,10 +1776,8 @@ - Unknown - Unknown - Unknown - Unknown + + @@ -2576,9 +2574,9 @@ - Generic node object. - Some flags; commonly 0x000C or 0x000A. - Unknown Flag + Base audiovisual object. + Basic flags for AV objects; commonly 0x000C or 0x000A. + Basic flags for AV objects. The translation vector. The rotation part of the transformation matrix. @@ -3206,7 +3204,7 @@ Camera object. - Unknown. + Obsolete flags. Frustrum left. Frustrum right. Frustrum top. @@ -3219,10 +3217,10 @@ Viewport top. Viewport bottom. Level of detail adjust. - Unknown. - Unknown. Changing value crashes viewer. - Unknown. Changing value crashes viewer. - Unknown. + + Deprecated. Array is always zero length on disk write. + Deprecated. Array is always zero length on disk write. + Unknown. @@ -3492,11 +3490,17 @@ Unknown. + + + Flags for NiSwitchNode. + + + A node used to switch between branches, such as for LOD levels? - Flags - Index? + + @@ -3826,7 +3830,7 @@ Planar or Spherical type Adds a degree of randomness. Range for turbulence. - Unknown + @@ -3855,10 +3859,10 @@ - Unknown - Unknown - Unknown - Unknown + + + + @@ -3868,13 +3872,9 @@ - Unknown - Unknown - Unknown - Unknown - Unknown - Unknown - Unknown + + + @@ -3973,10 +3973,10 @@ - Unknown - Unknown - Unknown - Unknown + + + + @@ -5305,10 +5305,16 @@ + + Flags for BSValueNode. + + + + Bethesda-Specific node. Found on fxFire effects - Value - Unknown + Value + Value node flags. @@ -5319,10 +5325,10 @@ Bethesda-Specific (mesh?) Particle System Data. - Unknown - Unknown - Unknown - Unknown + + + + @@ -5351,8 +5357,8 @@ Particle system (multi?) emitter controller. This controller's data Links to a bool interpolator. Controls emitter's visibility status? - Unknown - Unknown + + @@ -5364,21 +5370,23 @@ Bethesda-Specific node. Unknown - Unknown + Unknown - + Bethesda-Specific node. - Unknown - Unknown + Min + Max + Current + + Bethesda-Specific node. + - + Bethesda-Specific node. - Unknown - Unknown @@ -5463,17 +5471,25 @@ + + Culling modes for multi bound nodes. + + + + + + + Bethesda-specific node. - Unknown. - Unknown + + Bethesda-specific node. - Unknown. + - Abstract base type for bounding data. @@ -5488,9 +5504,7 @@ Bethesda-specific node. - Unknown Flag - Unknown Flag - Unknown Flag + Center Radius @@ -5577,10 +5591,8 @@ Frustrum field of view animation interpolater and data. - + Bethesda-Specific node. - Unknown - Unknown From 49b50b78bf9479726d31562cc30f3470ee2b63a1 Mon Sep 17 00:00:00 2001 From: jonwd7 Date: Tue, 30 May 2017 14:28:26 -0400 Subject: [PATCH 075/164] Num UV Sets fix This is a redo of #51 since I did not seem to have permission to rebase the PR. These changes work for all games and fix all FO3 UV Sets regressions. The only downside is for UV Sets > 1 in non-Bethesda games the UV Sets count now becomes a combination of flags. UV_1 + UV_2 = 3 UV Sets, and UV_1 + UV_4 = 5 UV Sets and so on. This was the only way to treat the field as a single ushort which is necessary for endianness changes when reading the field 16 bytes at once because the value is read/written 16 bytes at once and uses bitmasking to retrieve the UV count. --- nif.xml | 50 +++++++++++++++++++++++++++++++++++++++++++------- 1 file changed, 43 insertions(+), 7 deletions(-) diff --git a/nif.xml b/nif.xml index 790551f..8082cc9 100644 --- a/nif.xml +++ b/nif.xml @@ -2851,6 +2851,44 @@ Describes a mesh, built from triangles. + + + + + + Mesh data: vertices, vertex normals, etc. Unknown identifier. Always 0. @@ -2862,15 +2900,13 @@ Unknown. Is the vertex array present? (Always non-zero.) The mesh vertices. - Number of UV texture sets. - - Fallout3/Skyrim: can't be higher than 1. - Bit 4: Has Tangents/Bitangents + + Unknown, seen in Skyrim. Do we have lighting normals? These are essential for proper lighting: if not present, the model will only be influenced by ambient light. The lighting normals. - Tangent vectors. - Bitangent vectors. + Tangent vectors. + Bitangent vectors. Center of the bounding box (smallest box that contains all vertices) of the mesh. Radius of the mesh: maximal Euclidean distance between the center and all vertices. Unknown, always 0? @@ -2888,7 +2924,7 @@ Note: for compatibility with NifTexture, set this value to either 0x00000000 or 0xFFFFFFFF. - The UV texture coordinates. They follow the OpenGL standard: some programs may require you to flip the second coordinate. + The UV texture coordinates. They follow the OpenGL standard: some programs may require you to flip the second coordinate. Consistency Flags Consistency Flags Unknown. From bf0247c1d9bf042dde8b740a7748e6ca45e8fa62 Mon Sep 17 00:00:00 2001 From: jonwd7 Date: Tue, 30 May 2017 14:32:49 -0400 Subject: [PATCH 076/164] Remove old vector flags enum --- nif.xml | 5 ----- 1 file changed, 5 deletions(-) diff --git a/nif.xml b/nif.xml index 8082cc9..62f221c 100644 --- a/nif.xml +++ b/nif.xml @@ -981,11 +981,6 @@ - - - - - The type of constraint. From 1625b41f624e35d518da89d44063a6f1b784226f Mon Sep 17 00:00:00 2001 From: jonwd7 Date: Tue, 30 May 2017 14:33:16 -0400 Subject: [PATCH 077/164] Version increment --- nif.xml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/nif.xml b/nif.xml index 62f221c..85dcc97 100644 --- a/nif.xml +++ b/nif.xml @@ -1,6 +1,6 @@ - + + + A sphere. + The sphere's center. + The sphere's radius. + + Translation. Rotation. @@ -1659,12 +1665,6 @@ The vertex weights. - - A sphere. - The sphere's center. - The sphere's radius. - - ColFilter property for Havok. It contains Layer, Flags and Part Number Sets mesh color in Oblivion Construction Set. @@ -1956,7 +1956,7 @@ Type of collision data. - Sphere + Sphere Box Capsule Union @@ -2416,7 +2416,7 @@ Unknown. Unknown. The number of spheres in this multi sphere shape. - This array holds the spheres which make up the multi sphere shape. + This array holds the spheres which make up the multi sphere shape. @@ -5913,7 +5913,7 @@ The number of submeshes contained in this mesh. Sets whether hardware instancing is being used. - The combined bounding volume of all submeshes. + The combined bounding volume of all submeshes. @@ -5977,7 +5977,7 @@ The number of bones referenced by this mesh modifier. Pointers to the bone nodes that affect this skin. The transforms that go from bind-pose space to bone space. - The bounds of the bones. Only stored if the RECOMPUTE_BOUNDS bit is set. + The bounds of the bones. Only stored if the RECOMPUTE_BOUNDS bit is set. @@ -6529,7 +6529,7 @@ Fallout 4 Tri Shape - + @@ -6642,7 +6642,7 @@ Fallout 4 Bone Transform - + @@ -6702,7 +6702,7 @@ - + From b941cffc15f6acc2e1a35053f71cfd8d8e82002d Mon Sep 17 00:00:00 2001 From: jonwd7 Date: Tue, 30 May 2017 22:17:21 -0400 Subject: [PATCH 081/164] FO3 shader property unknowns --- nif.xml | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/nif.xml b/nif.xml index b34ba84..80f0ded 100644 --- a/nif.xml +++ b/nif.xml @@ -4996,8 +4996,8 @@ Texture Set The amount of distortion. **Not based on physically accurate refractive index** (0=none) (0-1) Rate of texture movement for refraction shader. - Unknown - Unknown + The number of passes the parallax shader can apply. + The strength of the parallax. Glow color and alpha From 6a5c86654f18de22164083055e85def940b7ac2b Mon Sep 17 00:00:00 2001 From: jonwd7 Date: Tue, 30 May 2017 22:30:37 -0400 Subject: [PATCH 082/164] FO4/SSE changes Split BSVertexData into two versions, one for FO4 and one for SSE. This uncomplicates some of the conditions and lowers the row count for each vertex compound so will be faster to parse. Also some misc name/type changes for FO4 blocks. --- nif.xml | 53 +++++++++++++++++++++++++++++++---------------------- 1 file changed, 31 insertions(+), 22 deletions(-) diff --git a/nif.xml b/nif.xml index 80f0ded..c6a19ed 100644 --- a/nif.xml +++ b/nif.xml @@ -1488,19 +1488,30 @@ - - - + + + - - - + + + - - - - - + + + + + + + + + + + + + + + + @@ -4238,7 +4249,7 @@ - + @@ -6543,7 +6554,8 @@ - + + @@ -6618,14 +6630,12 @@ Fallout 4 Collision System - - + Fallout 4 Ragdoll System - - + @@ -6634,8 +6644,7 @@ Fallout 4 Cloth data - - + @@ -6650,8 +6659,8 @@ Fallout 4 Skin Instance - - + + @@ -6661,7 +6670,7 @@ Fallout 4 Bone Data - + From 82b62d42171321c727e4420ef48a1e9794a0350a Mon Sep 17 00:00:00 2001 From: jonwd7 Date: Tue, 30 May 2017 22:35:51 -0400 Subject: [PATCH 083/164] BSXFlags documentation --- nif.xml | 10 +++++++--- 1 file changed, 7 insertions(+), 3 deletions(-) diff --git a/nif.xml b/nif.xml index c6a19ed..a587210 100644 --- a/nif.xml +++ b/nif.xml @@ -3457,11 +3457,15 @@ Bit 2 : is skeleton nif?, bRagdoll(Skyrim) Bit 3 : enable animation, bComplex(Skyrim) Bit 4 : FlameNodes present, bAddon(Skyrim) - Bit 5 : EditorMarkers present + Bit 5 : EditorMarkers present, bEditorMarker(Skyrim) Bit 6 : bDynamic(Skyrim) Bit 7 : bArticulated(Skyrim) - Bit 8 : bIKTarget(Skyrim) - Bit 9 : Unknown(Skyrim) + Bit 8 : bIKTarget(Skyrim)/needsTransformUpdates + Bit 9 : bExternalEmit(Skyrim) + Bit 10: bMagicShaderParticles(Skyrim) + Bit 11: bLights(Skyrim) + Bit 12: bBreakable(Skyrim) + Bit 13: bSearchedBreakable(Skyrim) .. Runtime only? From 7adaae91b1375c1c28c37435967295553cd831b8 Mon Sep 17 00:00:00 2001 From: ousnius Date: Wed, 31 May 2017 22:40:28 +0200 Subject: [PATCH 084/164] Added defaults and descriptions Changes to: - BallAndSocketDescriptor - Renamed PivotAB to ConstraintInfo - bhkBallSocketConstraintChain - bhkPoseArray --- nif.xml | 31 ++++++++++++++++--------------- 1 file changed, 16 insertions(+), 15 deletions(-) diff --git a/nif.xml b/nif.xml index 97f747f..d9b908b 100644 --- a/nif.xml +++ b/nif.xml @@ -1776,8 +1776,8 @@ - - + Pivot point in the local space of entity A. + Pivot point in the local space of entity B. @@ -2239,7 +2239,7 @@ Describes a ball and socket constraint - + Two Vector4 for pivot in A and B. @@ -2247,12 +2247,12 @@ A Ball and Socket Constraint chain. - - - - - - + Number of pivot points. Divide by 2 to get the number of constraints. + Two pivot points A and B for each constraint. + High values are harder and more reactive, lower values are smoother. + Defines damping strength for the current velocity. + Restitution (amount of elasticity) of constraints. Added to the diagonal of the constraint matrix. A value of 0.0 can result in a division by zero with some chain configurations. + Maximum distance error in constraints allowed before stabilization algorithm kicks in. A smaller distance causes more resistance. Number of links in the chain Hardcoded to 2. Don't change. @@ -5599,7 +5599,7 @@ A breakable constraint. Constraint within constraint. Amount of force to break the rigid bodies apart? - Unknown + No: Constraint stays active. Yes: Constraint gets removed when breaking threshold is exceeded. @@ -5616,11 +5616,12 @@ - Found in Fallout 3, extra ragdoll info for NPCs/creatures. (usually idleanims\deathposes.psa) - Number of target bones - Bones in index - Unknown - Unknown + Found in Fallout 3, extra ragdoll info for NPCs/creatures (usually idleanims\deathposes.psa). + Defines different kill poses that are selected randomly after death. + Number of target bones. + Array of bone names. + Number of poses. + Array of poses. From e67cacaccca56dc518c317eac3f0c443fec90ebd Mon Sep 17 00:00:00 2001 From: ousnius Date: Wed, 31 May 2017 22:43:26 +0200 Subject: [PATCH 085/164] Whitespace fixes --- nif.xml | 52 ++++++++++++++++++++++++++-------------------------- 1 file changed, 26 insertions(+), 26 deletions(-) diff --git a/nif.xml b/nif.xml index d9b908b..3c28e28 100644 --- a/nif.xml +++ b/nif.xml @@ -1905,16 +1905,16 @@ Zero - - Matrix for deathposes.psa - - + + Matrix for deathposes.psa + + - - + + - + Array of Vectors for Decal placement in BSDecalPlacementVectorExtraData. @@ -1948,35 +1948,35 @@ The bones name - - Per-chunk material, used in bhkCompressedMeshShapeData - Material. - Copy of Layer from bhkRigidBody. The value is stored as 32-bit integer. + + Per-chunk material, used in bhkCompressedMeshShapeData + Material. + Copy of Layer from bhkRigidBody. The value is stored as 32-bit integer. Always set to 0. It is only remainder of "Layer" 32-bit integer above. Always set to 0. It is only remainder of "Layer" 32-bit integer above. - + - Triangle indices used in pair with "Big Verts" in a bhkCompressedMeshShapeData. + Triangle indices used in pair with "Big Verts" in a bhkCompressedMeshShapeData. - Always 0? + Always 0? - A set of transformation data: translation and rotation + A set of transformation data: translation and rotation A vector that moves the chunk by the specified amount. W is not used. Rotation. Reference point for rotation is bhkRigidBody translation. - Defines subshape chunks in bhkCompressedMeshShapeData - Local translation - Index of material in bhkCompressedMeshShapeData::Chunk Materials - Always 65535? - Index of transformation in bhkCompressedMeshShapeData::Chunk Transforms + Defines subshape chunks in bhkCompressedMeshShapeData + Local translation + Index of material in bhkCompressedMeshShapeData::Chunk Materials + Always 65535? + Index of transformation in bhkCompressedMeshShapeData::Chunk Transforms Number of compressed vertices Compressed vertices @@ -2012,7 +2012,7 @@ - A malleable constraint. + A malleable constraint. Type of constraint. Unknown. Usually 2. Usually -1? @@ -5615,14 +5615,14 @@ - - Found in Fallout 3, extra ragdoll info for NPCs/creatures (usually idleanims\deathposes.psa). + + Found in Fallout 3, extra ragdoll info for NPCs/creatures (usually idleanims\deathposes.psa). Defines different kill poses that are selected randomly after death. - Number of target bones. + Number of target bones. Array of bone names. Number of poses. - Array of poses. - + Array of poses. + Found in Fallout 3, more ragdoll info? (meshes\ragdollconstraint\*.rdt) From 2bb9bc16f0257af858943c36efef12ab5fee7b1e Mon Sep 17 00:00:00 2001 From: jonwd7 Date: Wed, 31 May 2017 23:22:09 -0400 Subject: [PATCH 086/164] Go back to type for Inertia Tensor Seems niflib wants that row to be a special type, so fix "InertiaMatrix" to be the real type, `hkMatrix3` and use it for the Inertia Tensor. --- nif.xml | 19 +++++-------------- 1 file changed, 5 insertions(+), 14 deletions(-) diff --git a/nif.xml b/nif.xml index 3c28e28..f4c6aae 100644 --- a/nif.xml +++ b/nif.xml @@ -1889,20 +1889,11 @@ - + An inertia matrix. - - - - Zero - - - - Zero - - - - Zero + W is unused as hkMatrix3 is only 4x3 because of memory alignment. + W is unused as hkMatrix3 is only 4x3 because of memory alignment. + W is unused as hkMatrix3 is only 4x3 because of memory alignment. @@ -2156,7 +2147,7 @@ The rotation Yaw/Pitch/Roll to apply to the body. Only enabled in bhkRigidBodyT objects. Linear velocity. Angular velocity. - Defines how the mass is distributed among the body. + Defines how the mass is distributed among the body. This seems to be used to relocate the object's center of mass. Useful for balancing objects in contraints. The body's mass in kg. A mass of zero represents an immovable object. Damping value for linear movement. A value that is too small fixes the object in place. From fc68c1edc59d8773ff5b24db28a3e2912ce98463 Mon Sep 17 00:00:00 2001 From: jonwd7 Date: Wed, 31 May 2017 23:23:54 -0400 Subject: [PATCH 087/164] Fix up bhkBonePoseArray Pull in some of the documentation from #39 and fix the type names and the bone transform layout. --- nif.xml | 23 +++++++++++++---------- 1 file changed, 13 insertions(+), 10 deletions(-) diff --git a/nif.xml b/nif.xml index f4c6aae..890a44d 100644 --- a/nif.xml +++ b/nif.xml @@ -1896,15 +1896,17 @@ W is unused as hkMatrix3 is only 4x3 because of memory alignment. - - Matrix for deathposes.psa - - + + Transformation data for the bone at this index in bhkPoseArray. + + + - - - + + A list of transforms for each bone in bhkPoseArray. + + @@ -5607,12 +5609,13 @@ - Found in Fallout 3, extra ragdoll info for NPCs/creatures (usually idleanims\deathposes.psa). - Defines different kill poses that are selected randomly after death. + Found in Fallout 3 .psa files, extra ragdoll info for NPCs/creatures. (usually idleanims\deathposes.psa) + Defines different kill poses. The game selects the pose randomly and applies it to a skeleton immediately upon ragdolling. + Poses can be previewed in GECK Object Window-Actor Data-Ragdoll and selecting Pose Matching tab. Number of target bones. Array of bone names. Number of poses. - Array of poses. + Array of poses. From fd8ea3f4e76d3ee9c681b17a6a9076d85f9e81f5 Mon Sep 17 00:00:00 2001 From: jonwd7 Date: Thu, 1 Jun 2017 01:03:07 -0400 Subject: [PATCH 088/164] Simplify HavokMaterial conditions This was necessary so that Fallout3HavokMaterial actually applied to all FO3 NIF versions (e.g. User Version 2 == 16) --- nif.xml | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/nif.xml b/nif.xml index 890a44d..fc92a15 100644 --- a/nif.xml +++ b/nif.xml @@ -1623,9 +1623,9 @@ - The material of the shape. - The material of the shape. - The material of the shape. + The material of the shape. + The material of the shape. + The material of the shape. From 083f25fd7156fddeda97305e24ea095fdce6474e Mon Sep 17 00:00:00 2001 From: jonwd7 Date: Thu, 1 Jun 2017 01:25:33 -0400 Subject: [PATCH 089/164] Fix Malleable and RDT Removed compounds: bhkRDTConstraint, bhkRDTMalleableConstraint. Renamed compound: SubConstraint->ConstraintData (to reflect hkpConstraintData*) Created: MalleableDescriptor (to reflect other Descriptor compounds) Corrected bhkRagdollTemplate inheritance. Fully decoded bhkRagdollTemplateData. bhkRDT now load without error or link validation warnings. --- nif.xml | 64 ++++++++++++++++++++++----------------------------------- 1 file changed, 25 insertions(+), 39 deletions(-) diff --git a/nif.xml b/nif.xml index fc92a15..3a242d2 100644 --- a/nif.xml +++ b/nif.xml @@ -995,6 +995,7 @@ + + + - - Type of constraint. - 7 = RagDoll Constraint? - 13 = Malleable Constraint? - Unknown. Usually 2. - Entity A in this constraint. - Entity B in this constraint. - Usually 1. Higher values indicate higher priority of this constraint? - - - - - A malleable constraint. - Type of constraint. - Unknown. Usually 2. - Usually -1? - Usually -1? + + Type of constraint. + Usually 2. Number of bodies affected by this constraint. + Usually NONE. The entities affected by this constraint. Usually 1. Higher values indicate higher priority of this constraint? + - - + + + + - - + Constraint within constraint. @@ -5590,7 +5581,7 @@ A breakable constraint. - Constraint within constraint. + Constraint within constraint. Amount of force to break the rigid bodies apart? No: Constraint stays active. Yes: Constraint gets removed when breaking threshold is exceeded. @@ -5618,27 +5609,22 @@ Array of poses. - + Found in Fallout 3, more ragdoll info? (meshes\ragdollconstraint\*.rdt) - Number of target bones Bones in index Data for bhkRagdollTemplate - - Probably a Mass for bhkRigidBody linked to this bone node. - Probably a Restitution for bhkRigidBody linked to this bone node. - Probably a Friction for bhkRigidBody linked to this bone node. - Probably a Radius for collision object shape of bhkRigidBody linked to this bone node. - Unknown. Dependent on value of User Version 2? - Value 7 found in Fallout3 meshes\ragdollconstraint\default.rdt. This file has User Version 2 = 34. - Value 0 found in Fallout3 meshes\ragdollconstraint\stiff.rdt. This file has User Version 2 = 16. - Either a flag or a number of constraints. - 0: no Constraint is present. - 1: a Constraint is present. - Unknown + + + + + + + + From abf267bdbae1cc84eb2db7d706ed7be58f32d447 Mon Sep 17 00:00:00 2001 From: jonwd7 Date: Thu, 1 Jun 2017 01:42:00 -0400 Subject: [PATCH 090/164] Add Broad Phase enum --- nif.xml | 9 ++++++++- 1 file changed, 8 insertions(+), 1 deletion(-) diff --git a/nif.xml b/nif.xml index 3a242d2..9bcb16b 100644 --- a/nif.xml +++ b/nif.xml @@ -2081,6 +2081,13 @@ Links to a NiNode that will define where in object space the collider is located/oriented. + + + @@ -2100,7 +2107,7 @@ Link to the body for this collision object. Garbage data from memory. - + From b54f5272ffc6081a672314b8079f4a1ea07d92ed Mon Sep 17 00:00:00 2001 From: jonwd7 Date: Thu, 1 Jun 2017 16:47:13 -0400 Subject: [PATCH 091/164] Change hxMatrix3 yet again --- nif.xml | 23 ++++++++++++++++------- 1 file changed, 16 insertions(+), 7 deletions(-) diff --git a/nif.xml b/nif.xml index 9bcb16b..f906070 100644 --- a/nif.xml +++ b/nif.xml @@ -1168,6 +1168,22 @@ The (4,4) element. + + A 3x3 Havok matrix stored in 4x3 due to memory alignment. + + + + Unused + + + + Unused + + + + Unused + + Description of a MipMap within a NiPixelData object. Width of the mipmap image. @@ -1890,13 +1906,6 @@ - - An inertia matrix. - W is unused as hkMatrix3 is only 4x3 because of memory alignment. - W is unused as hkMatrix3 is only 4x3 because of memory alignment. - W is unused as hkMatrix3 is only 4x3 because of memory alignment. - - Transformation data for the bone at this index in bhkPoseArray. From b3e71353511635b920ce8ea0ac0a5ef2b16fc396 Mon Sep 17 00:00:00 2001 From: jonwd7 Date: Thu, 1 Jun 2017 17:40:13 -0400 Subject: [PATCH 092/164] bhkBoxShape fixes --- nif.xml | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/nif.xml b/nif.xml index f906070..03e177f 100644 --- a/nif.xml +++ b/nif.xml @@ -2300,8 +2300,8 @@ A box. Not used. The following wants to be aligned at 16 bytes. - Looks like this could be the box size. - The smallest of the three sizes. Might be used for optimization. + A cube stored in Half Extents. A unit cube (1.0, 1.0, 1.0) would be stored as 0.5, 0.5, 0.5. + Unused as Havok stores the Half Extents as hkVector4 with the W component unused. From 3ea5130b5214132b0deecd0d8e56342989690b52 Mon Sep 17 00:00:00 2001 From: jonwd7 Date: Thu, 1 Jun 2017 18:33:31 -0400 Subject: [PATCH 093/164] HavokMaterial update For a couple Oblivion NIFs which are pre-Havok version yet somehow use Havok.. --- nif.xml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/nif.xml b/nif.xml index 03e177f..3bb4ded 100644 --- a/nif.xml +++ b/nif.xml @@ -1640,7 +1640,7 @@ - The material of the shape. + The material of the shape. The material of the shape. The material of the shape. From 7ac67b30c3c33c47eb208d485b9d31a0df577a0b Mon Sep 17 00:00:00 2001 From: jonwd7 Date: Thu, 1 Jun 2017 18:47:58 -0400 Subject: [PATCH 094/164] SkyrimHavokMaterial additions Picked from #39 --- nif.xml | 3 +++ 1 file changed, 3 insertions(+) diff --git a/nif.xml b/nif.xml index a587210..1df90bc 100644 --- a/nif.xml +++ b/nif.xml @@ -371,6 +371,7 @@ + @@ -400,6 +401,7 @@ + @@ -420,6 +422,7 @@ + From ceb8b3cca2d772de6747b21756669271e759aced Mon Sep 17 00:00:00 2001 From: jonwd7 Date: Thu, 1 Jun 2017 19:08:18 -0400 Subject: [PATCH 095/164] Partial revert of #26 to unbreak niflib support Niflib requires enum names be unique or it simply can't compile. Until a system is in place to compensate for this #26 needs to have these changes reverted. --- nif.xml | 800 ++++++++++++++++++++++++++++---------------------------- 1 file changed, 400 insertions(+), 400 deletions(-) diff --git a/nif.xml b/nif.xml index 1df90bc..be6b5a0 100644 --- a/nif.xml +++ b/nif.xml @@ -192,38 +192,38 @@ A material, used by havok shape objects in Oblivion. - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + @@ -231,390 +231,390 @@ Bit 5: flag for PLATFORM (for values 32-63 substract 32 to know material number) Bit 6: flag for STAIRS (for values 64-95 substract 64 to know material number) Bit 5+6: flag for STAIRS+PLATFORM (for values 96-127 substract 96 to know material number) - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + A material, used by havok shape objects in Skyrim. - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + Sets mesh color in Oblivion Construction Set. Anything higher than 57 is also null. - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + Sets mesh color in Fallout 3 GECK. Anything higher than 72 is also null. - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + Physical purpose of collision object? The setting affects object's havok behavior in game. Anything higher than 47 is also null. - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + From 33aa3133803e60c45d3eb186811739275ade1eea Mon Sep 17 00:00:00 2001 From: jonwd7 Date: Thu, 1 Jun 2017 21:11:11 -0400 Subject: [PATCH 096/164] bhkNiCollisionObject flags --- nif.xml | 18 +++++++++++++++++- 1 file changed, 17 insertions(+), 1 deletion(-) diff --git a/nif.xml b/nif.xml index 3bb4ded..8ebad98 100644 --- a/nif.xml +++ b/nif.xml @@ -2547,9 +2547,25 @@ Collision data. + + bhkNiCollisionObject flags. The flags 0x2, 0x100, and 0x200 are not seen in any NIF nor get/set by the engine. + + Havok related collision object? - + Set to 1 for most objects, and to 41 for animated objects (ANIM_STATIC). Bits: 0=Active 2=Notify 3=Set Local 6=Reset. Links to the collision object data From 0011ca38d6097e001e855ca3b5d62e340bb94595 Mon Sep 17 00:00:00 2001 From: jonwd7 Date: Fri, 9 Jun 2017 06:03:18 -0400 Subject: [PATCH 097/164] NiPathInterpolator flags fix Remove leading zeroes and add name prefix. --- nif.xml | 14 +++++++------- 1 file changed, 7 insertions(+), 7 deletions(-) diff --git a/nif.xml b/nif.xml index 8ebad98..b1a18bf 100644 --- a/nif.xml +++ b/nif.xml @@ -2449,13 +2449,13 @@ - - - - - - - + + + + + + + From 1608c061029a74ddc41c05601f5520c97f99c186 Mon Sep 17 00:00:00 2001 From: jonwd7 Date: Fri, 9 Jun 2017 06:06:20 -0400 Subject: [PATCH 098/164] Tag whitespace --- nif.xml | 52 ++++++++++++++++++++++++++-------------------------- 1 file changed, 26 insertions(+), 26 deletions(-) diff --git a/nif.xml b/nif.xml index b1a18bf..b212613 100644 --- a/nif.xml +++ b/nif.xml @@ -1902,7 +1902,7 @@ - + @@ -2460,10 +2460,10 @@ Unknown interpolator. - - - - + + + + Unknown. Zero. Refers to NiPosData. Refers to NiFloatData. @@ -2486,26 +2486,26 @@ Interpolator item for array in NiBlendInterpolator. Reference to an interpolator. - - - - + + + + An extended type of interpolater. - - - - - - - - - - - - + + + + + + + + + + + + @@ -3409,7 +3409,7 @@ Unknown. - + Refers to a Node to focus on. Target node name. @@ -4220,9 +4220,9 @@ Selects the compare mode function (see: glStencilFunc). Unknown. Default is 0. A bit mask. The default is 0xffffffff. - - - + + + Used to enabled double sided faces. Default is 3 (DRAW_BOTH). Property flags: @@ -6725,7 +6725,7 @@ Large ref flag. - + From 7993fe067bd78ea1c015f39e40cfcabd4db8533f Mon Sep 17 00:00:00 2001 From: jonwd7 Date: Fri, 9 Jun 2017 06:16:46 -0400 Subject: [PATCH 099/164] Version bump --- nif.xml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/nif.xml b/nif.xml index 65da471..147b360 100644 --- a/nif.xml +++ b/nif.xml @@ -1,6 +1,6 @@ - + - Sets mesh color in Fallout 3 GECK. - Physical purpose of collision object? The setting affects object's havok behavior in game. + The layer the collision belongs to. + The layer the collision belongs to. + The layer the collision belongs to. FLAGS are stored in highest 3 bits: Bit 7: sets the LINK property and controls whether this body is physically linked to others. From 6dab6eeb9fc7680adb8402a9cd532e784eee338c Mon Sep 17 00:00:00 2001 From: "@perture" Date: Tue, 13 Jun 2017 10:04:05 +0400 Subject: [PATCH 101/164] Update nif.xml Redefinition value="8" --- nif.xml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/nif.xml b/nif.xml index 251c086..330fa34 100644 --- a/nif.xml +++ b/nif.xml @@ -519,7 +519,7 @@ - + From 22fa884d26b6264a523480003d36c155f4a0e72e Mon Sep 17 00:00:00 2001 From: "@perture" Date: Tue, 13 Jun 2017 10:20:14 +0400 Subject: [PATCH 102/164] Update nif.xml --- nif.xml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/nif.xml b/nif.xml index 330fa34..72d28a9 100644 --- a/nif.xml +++ b/nif.xml @@ -554,7 +554,7 @@ - + From 2e6553e26111520bd8e37180268e73d66c4049b6 Mon Sep 17 00:00:00 2001 From: "@perture" Date: Tue, 13 Jun 2017 13:19:28 +0400 Subject: [PATCH 103/164] Correction EffectShaderControlledVariable Incorrect compile with gen_niflib.py --- nif.xml | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/nif.xml b/nif.xml index 251c086..4ade832 100644 --- a/nif.xml +++ b/nif.xml @@ -1044,11 +1044,11 @@ An unsigned 32-bit integer, describing which float variable in BSEffectShaderProperty to animate. - - + + - + From 9b45d8a4bf0fb5818ee15851776953e23e153524 Mon Sep 17 00:00:00 2001 From: "@perture" Date: Tue, 13 Jun 2017 15:09:49 +0400 Subject: [PATCH 104/164] Correction enum Override of enumerators --- nif.xml | 104 ++++++++++++++++++++++++++++---------------------------- 1 file changed, 52 insertions(+), 52 deletions(-) diff --git a/nif.xml b/nif.xml index 4ade832..009b19e 100644 --- a/nif.xml +++ b/nif.xml @@ -1043,16 +1043,16 @@ An unsigned 32-bit integer, describing which float variable in BSEffectShaderProperty to animate. - - - - - - - - - - + + + + + + + + + + @@ -1062,16 +1062,16 @@ An unsigned 32-bit integer, describing which float variable in BSLightingShaderProperty to animate. - - - - - - - - - - + + + + + + + + + + @@ -3005,41 +3005,41 @@ - - From 6c97056a3d72166b7b109b20875a040ea21bb130 Mon Sep 17 00:00:00 2001 From: "@perture" Date: Tue, 13 Jun 2017 15:19:15 +0400 Subject: [PATCH 105/164] Correction enum Override of enumerators --- nif.xml | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/nif.xml b/nif.xml index 009b19e..1f0fe5f 100644 --- a/nif.xml +++ b/nif.xml @@ -1057,7 +1057,7 @@ An unsigned 32-bit integer, describing which color in BSEffectShaderProperty to animate. - + @@ -1076,8 +1076,8 @@ An unsigned 32-bit integer, describing which color in BSLightingShaderProperty to animate. - - + + From 804133d557d0e5b366886f81d5be43414434876a Mon Sep 17 00:00:00 2001 From: "@perture" Date: Tue, 13 Jun 2017 22:13:42 +0400 Subject: [PATCH 106/164] Update NiControllerSequence "Anim Note Arrays" size is "Num Anim Note Arrays" ??? --- nif.xml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/nif.xml b/nif.xml index 1f0fe5f..41e0e5f 100644 --- a/nif.xml +++ b/nif.xml @@ -3428,7 +3428,7 @@ Refers to NiStringPalette. Unknown Number of anim notes objects. - Indices of anim notes objects. + Indices of anim notes objects. Unknown, found in some Lazeska and Krazy Rain .KFs (seems to be 64 when present). From 32aaf8e3a0e649aec8408ecaeb23b608e00888cb Mon Sep 17 00:00:00 2001 From: "@perture" Date: Tue, 13 Jun 2017 22:33:28 +0400 Subject: [PATCH 107/164] Update BSSubIndexTriShape Override Segment --- nif.xml | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/nif.xml b/nif.xml index 41e0e5f..d9b19eb 100644 --- a/nif.xml +++ b/nif.xml @@ -6708,10 +6708,10 @@ - + - + From f3583d0307c52a0e1da32883399634e97a4e44e1 Mon Sep 17 00:00:00 2001 From: jonwd7 Date: Tue, 13 Jun 2017 15:55:13 -0400 Subject: [PATCH 108/164] Fix Fallout3Layer Removed BIPED_PART enum values from end of Fallout3Layer. These are actually a different enum for the next byte (Flags and Part Number). Max layers is 64 so we know this to be a mistake. There were also no usages of Fallout3Layer in FO3/NV above FOL_NULL (43). Renamed value 29 to be more accurate. --- nif.xml | 31 +------------------------------ 1 file changed, 1 insertion(+), 30 deletions(-) diff --git a/nif.xml b/nif.xml index 72d28a9..ac59f32 100644 --- a/nif.xml +++ b/nif.xml @@ -519,7 +519,7 @@ - + @@ -534,35 +534,6 @@ - - - - - - - - - - - - - - - - - - - - - - - - - - - - - From 9eb4c2ac29605fbc69a33a69c9ad4df7cde7ace7 Mon Sep 17 00:00:00 2001 From: jonwd7 Date: Wed, 14 Jun 2017 13:30:15 -0400 Subject: [PATCH 109/164] Re-unify BSVertexData for niflib Also updated definitions for Eye Data (missed during decoding from #58) --- nif.xml | 64 +++++++++++++++++++++++---------------------------------- 1 file changed, 26 insertions(+), 38 deletions(-) diff --git a/nif.xml b/nif.xml index 62ee6a3..0e17772 100644 --- a/nif.xml +++ b/nif.xml @@ -1472,46 +1472,35 @@ @@ -6627,8 +6616,7 @@ - - + From 6b50e083dd3d5e894c549da908736c38db9c93a6 Mon Sep 17 00:00:00 2001 From: jonwd7 Date: Wed, 14 Jun 2017 13:38:58 -0400 Subject: [PATCH 110/164] Enum Prefixes Adopted proposal from #63. Only the enums with collisions will be updated for this PR. --- nif.xml | 122 ++++++++++++++++++++++++++++---------------------------- 1 file changed, 61 insertions(+), 61 deletions(-) diff --git a/nif.xml b/nif.xml index 0e17772..68d66bc 100644 --- a/nif.xml +++ b/nif.xml @@ -1012,43 +1012,43 @@ - + An unsigned 32-bit integer, describing which float variable in BSEffectShaderProperty to animate. - - - - - - - - - - + + + + + + + + + + - + An unsigned 32-bit integer, describing which color in BSEffectShaderProperty to animate. - + - + An unsigned 32-bit integer, describing which float variable in BSLightingShaderProperty to animate. - - - - - - - - - - + + + + + + + + + + - + An unsigned 32-bit integer, describing which color in BSLightingShaderProperty to animate. - - + + @@ -2964,42 +2964,42 @@ Describes a mesh, built from triangles. - - - + From 089611d0fcfc617c98bddceea714c7283b5357a7 Mon Sep 17 00:00:00 2001 From: jonwd7 Date: Wed, 2 Aug 2017 12:26:16 -0400 Subject: [PATCH 116/164] Fix additional niflib compilation issues --- nif.xml | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/nif.xml b/nif.xml index de112a2..8227463 100644 --- a/nif.xml +++ b/nif.xml @@ -5772,7 +5772,7 @@ - + @@ -6735,7 +6735,7 @@ - + From 254893b8d235d74040ac1bda98d598a11e49c206 Mon Sep 17 00:00:00 2001 From: jonwd7 Date: Wed, 2 Aug 2017 12:35:05 -0400 Subject: [PATCH 117/164] Relaxed suffix enforcement for niflib Duplicate name avoidance was too strict and unnecessary in these cases. Nifdocsys will now attempt to cast subsequent duplicate names to the correct types in order to ensure correct read/write size. As such the first type should always be the largest, so the "Flags" fields on NiAVObject were switched. So in the case of Flags and Body Flags, a uint data member will be created on the class and will be read/written to with a cast during I/O. The suffix is still required when the types are not castable between one another. --- nif.xml | 10 +++++----- 1 file changed, 5 insertions(+), 5 deletions(-) diff --git a/nif.xml b/nif.xml index 8227463..9767a1a 100644 --- a/nif.xml +++ b/nif.xml @@ -2265,8 +2265,8 @@ Unknown. Skyrim only. The number of constraints this object is bound to. Unknown. - 1 = respond to wind - 1 = respond to wind + 1 = respond to wind + 1 = respond to wind @@ -2667,8 +2667,8 @@ Base audiovisual object. + Basic flags for AV objects. Basic flags for AV objects; commonly 0x000C or 0x000A. - Basic flags for AV objects. The translation vector. The rotation part of the transformation matrix. @@ -2951,10 +2951,10 @@ Describes a visible scene element with vertices like a mesh, a particle system, lines, etc. Data index (NiTriShapeData/NiTriStripData). - Data index (NiTriShapeData/NiTriStripData). + Data index (NiTriShapeData/NiTriStripData). Data index (NiTriShapeData/NiTriStripData). Skin instance index. - Skin instance index. + Skin instance index. Skin instance index. Num Materials Unknown string. Shader? From 009c8c2ef95ed1a2cf82192b729e3588efe3ef8c Mon Sep 17 00:00:00 2001 From: jonwd7 Date: Mon, 14 Aug 2017 09:45:15 -0400 Subject: [PATCH 118/164] Header compound overhaul Almost completely redone with correct version ranges, fixed names, fixed types, and corrections for 30.x NIFs. 30.x NIFs with embedded thumbnail metadata would not load before these fixes. Also, BSStreamHeader was annotated but a compound for it was not feasible for several reasons, namely the nesting of `User Version 2` which would break existing parsers. This also leads to the ugly repetition of the cond expression for it. --- nif.xml | 47 ++++++++++++++++++++++++----------------------- 1 file changed, 24 insertions(+), 23 deletions(-) diff --git a/nif.xml b/nif.xml index 9767a1a..adf59e8 100644 --- a/nif.xml +++ b/nif.xml @@ -1322,36 +1322,37 @@ Offset in the string palette where some variable string starts (so far only 'EmitterActive' and 'BirthRate' have been observed in official files, used for particle system controllers). Usually, -1. - + Information about how the file was exported - Probably the number of strings that follow. - Could be the name of the creator of the NIF file? - Unknown. Can be something like 'TriStrip Process Script'. - Unknown. Possibly the selected option of the export script. Can be something like 'Default Export Script'. + + + The NIF file header. 'NetImmerse File Format x.x.x.x' (versions <= 10.0.1.2) or 'Gamebryo File Format x.x.x.x' (versions >= 10.1.0.0), with x.x.x.x the version written out. Ends with a newline character (0x0A). - - The NIF version, in hexadecimal notation: 0x04000002, 0x0401000C, 0x04020002, 0x04020100, 0x04020200, 0x0A000100, 0x0A010000, 0x0A020000, 0x14000004, ... - Determines the endianness of the data in the file. - An extra version number, for companies that decide to modify the file format. - Number of file objects. - This also appears to be the extra user version number and must be set in some circumstances. Probably used by Bethesda to denote the Havok version. - Unknown. Possibly User Version 2? - - - - Number of object types in this NIF file. - List of all object types used in this NIF file. - Maps file objects on their corresponding type: first file object is of type object_types[object_type_index[0]], the second of object_types[object_type_index[1]], etc. - Array of block sizes? - Number of strings. - Maximum string length. - Strings. - Unknown. + + The NIF version, in hexadecimal notation: 0x04000002, 0x0401000C, 0x04020002, 0x04020100, 0x04020200, 0x0A000100, 0x0A010000, 0x0A020000, 0x14000004, ... + Determines the endianness of the data in the file. + An extra version number, for companies that decide to modify the file format. + Number of file objects. + + + + + + + Number of object types in this NIF file. + List of all object types used in this NIF file. + Maps file objects on their corresponding type: first file object is of type object_types[object_type_index[0]], the second of object_types[object_type_index[1]], etc. + Array of block sizes? + Number of strings. + Maximum string length. + Strings. + + From 3d0d554e51115ca2179a3ce5b5df7331486df8f2 Mon Sep 17 00:00:00 2001 From: jonwd7 Date: Wed, 16 Aug 2017 05:42:42 -0400 Subject: [PATCH 119/164] NiPhysX block decoding The blocks were almost entirely undecoded before, with incomplete linkage (Ref fields). They are now completely decoded and I do not believe there were any regressions for past NIF versions, but it would be hard to test as I do not have NIFs before 30.1 with these blocks. However the version conditions were all maintained and corrected on the fields that were already decoded for 20.x. --- nif.xml | 399 ++++++++++++++++++++++++++++++++++++++++++-------------- 1 file changed, 298 insertions(+), 101 deletions(-) diff --git a/nif.xml b/nif.xml index adf59e8..a0c2b21 100644 --- a/nif.xml +++ b/nif.xml @@ -4672,129 +4672,326 @@ - Unknown PhysX node. - Unknown - Unknown - Unknown - Number of NiPhysXTransformDest references - Unknown - Unknown - Unknown - PhysX Property Description. - + A PhysX prop which holds information about PhysX actors in a Gamebryo scene + + + + + + + + + + + + + + + + - - Unknown - Unknown - PhysX Material Description + + + - Unknown PhysX node. - Number of NiPhysXActorDesc references - Unknown - Unknown - PhysX Joint Descriptions - Unknown - Unknown - PhysX Material Descriptions - Unknown - Unknown - Unknown - Unknown - Unknown + For serialization of PhysX objects and to attach them to the scene. + + + + + + + + + + + + - Unknown PhysX node. - Unknown - Unknown - Unknown - Unknown - Unknown - Unknown - Unknown - Unknown - Unknown - Unknown - Unknown - PhysX Shape Description - Unknown - Unknown - Unknown - + For serializing NxActor objects. + + + + + + + + + + + + + + + + + + + + + + + - Unknown PhysX node. - Unknown - + For serializing NxBodyDesc objects. + + + + + + + + + + + + + + + + + + + + + - - Unknown PhysX node. - Unknown - + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + A PhysX Joint abstract base class. + + + + + + + + + + + + + + + A 6DOF (6 degrees of freedom) joint. + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + - Unknown PhysX node. - Unknown - Unknown - Unknown - Unknown - Unknown - Unknown - Unknown - Unknown - Unknown - Unknown - Unknown - Unknown - Unknown - Unknown - Unknown - - PhysX Mesh Description - + For serializing NxShapeDesc objects + + + + + + + + + + + + + + + + - Unknown PhysX node. - Unknown - Unknown - Unknown - NXS - Unknown - MESH - Unknown - Unknown - Unknown - Unknown - Number of mesh vertices - Unknown - Vertices - Unknown - Unknown - Unknown - Unknown - + Holds mesh data for streaming. + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + - Unknown node. - Unknown - Unknown - Unknown + For serializing NxMaterialDesc objects. + + + - - Unknown PhysX node. - Unknown + + A destination is a link between a PhysX actor and a Gamebryo object being driven by the physics. + + - - Unknown PhysX node. - Unknown. =1? - Unknown. =0 - Affected node? + + Base for destinations that set a rigid body state. + + + + Connects PhysX rigid body actors to a scene node. + + + + + A source is a link between a Gamebryo object and a PhysX actor. + + + + + + Sets state of a rigid body PhysX actor. + + + + + Sets state of kinematic PhysX actor. + + + Sends Gamebryo scene state to a PhysX dynamic actor. From 0d42df6f0ddcd67e72df8959fbaf1a6a5fd9efeb Mon Sep 17 00:00:00 2001 From: jonwd7 Date: Wed, 16 Aug 2017 05:43:04 -0400 Subject: [PATCH 120/164] NiPSAlignedQuadGenerator decoding --- nif.xml | 21 +++++++++++++++++++++ 1 file changed, 21 insertions(+) diff --git a/nif.xml b/nif.xml index a0c2b21..be74233 100644 --- a/nif.xml +++ b/nif.xml @@ -6322,6 +6322,27 @@ + + + + + + + + + + + + + + + + + + + + + The mesh modifier that performs all particle system simulation. The number of simulation steps in this modifier. From a90db44d4b23b03abc79547d01ccfd203419763a Mon Sep 17 00:00:00 2001 From: jonwd7 Date: Wed, 16 Aug 2017 05:46:32 -0400 Subject: [PATCH 121/164] Add 30.2.0.3 --- nif.xml | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/nif.xml b/nif.xml index be74233..da7de27 100644 --- a/nif.xml +++ b/nif.xml @@ -43,7 +43,8 @@ Epic Mickey Emerge Rocksmith, Rocksmith 2014 - + + From 53403abc1dc0a5c94780878c4ebe442603e30c89 Mon Sep 17 00:00:00 2001 From: jonwd7 Date: Wed, 16 Aug 2017 07:07:19 -0400 Subject: [PATCH 122/164] Matrix34 type --- nif.xml | 16 ++++++++++++++++ 1 file changed, 16 insertions(+) diff --git a/nif.xml b/nif.xml index da7de27..399690d 100644 --- a/nif.xml +++ b/nif.xml @@ -1214,6 +1214,22 @@ Member 3,3 (bottom left) + + A 4x4 transformation matrix. + The (1,1) element. + The (2,1) element. + The (3,1) element. + The (1,2) element. + The (2,2) element. + The (3,2) element. + The (1,3) element. + The (2,3) element. + The (3,3) element. + The (1,4) element. + The (2,4) element. + The (3,4) element. + + A 4x4 transformation matrix. The (1,1) element. From 490d0156266178a706071f0541d87241c5e38463 Mon Sep 17 00:00:00 2001 From: jonwd7 Date: Wed, 6 Sep 2017 09:59:37 -0400 Subject: [PATCH 123/164] NiPhysX version fix --- nif.xml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/nif.xml b/nif.xml index 399690d..8a99bed 100644 --- a/nif.xml +++ b/nif.xml @@ -4772,7 +4772,7 @@ - + From 5cdf543f0b241cc20f96922a84a821fa451860a6 Mon Sep 17 00:00:00 2001 From: jonwd7 Date: Wed, 6 Sep 2017 10:15:38 -0400 Subject: [PATCH 124/164] NiPS* block decoding NiPS blocks replaced NiPSys blocks but were never decoded, so no new NIFs could be loaded. --- nif.xml | 532 ++++++++++++++++++++++---------------------------------- 1 file changed, 210 insertions(+), 322 deletions(-) diff --git a/nif.xml b/nif.xml index 8a99bed..dcd8d83 100644 --- a/nif.xml +++ b/nif.xml @@ -6285,59 +6285,58 @@ - - - - - 0? - - -1? - 0? - - 256? - 0? - 0? - 0? - 0? - 0? - Counter? - Simulator? - Generator? - Simulator? - Updater? - 1? - Emitter? - 0? - Spawner? - Unknown - Unknown - - - - - - - - - - -1? - + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + - - Unknown - may or may not be emitted mesh? - - + + + + - - + - - - - + @@ -6360,6 +6359,8 @@ + + The mesh modifier that performs all particle system simulation. The number of simulation steps in this modifier. @@ -6380,25 +6381,19 @@ Encapsulates a floodgate kernel that updates particle size, colors, and rotations. - - The number of size animation keys. - The particle size keys. - The loop behavior for the size keys. - - - - - - The number of color animation keys. - The particle color keys. - The loop behavior for the color keys. - The number of rotatoin animation keys. - The particle rotation keys. - The loop behavior for the rotation keys. - The the amount of time over which a particle's size is ramped from 0.0 to 1.0 in seconds - The the amount of time over which a particle's size is ramped from 1.0 to 0.0 in seconds - Specifies the particle generation to which the grow effect should be applied. This is usually generation 0, so that newly created particles will grow. - Specifies the particle generation to which the shrink effect should be applied. This is usually the highest supported generation for the particle system, so that particles will shrink immediately before getting killed. + The number of size animation keys. + The particle size keys. + The loop behavior for the size keys. + The number of color animation keys. + The particle color keys. + The loop behavior for the color keys. + The number of rotation animation keys. + The particle rotation keys. + The loop behavior for the rotation keys. + The the amount of time over which a particle's size is ramped from 0.0 to 1.0 in seconds + The the amount of time over which a particle's size is ramped from 1.0 to 0.0 in seconds + Specifies the particle generation to which the grow effect should be applied. This is usually generation 0, so that newly created particles will grow. + Specifies the particle generation to which the shrink effect should be applied. This is usually the highest supported generation for the particle system, so that particles will shrink immediately before getting killed. @@ -6424,294 +6419,187 @@ Encapsulates a floodgate kernel that updates particle positions and ages. As indicated by its name, this step should be attached last in the NiPSSimulator mesh modifier. - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - + Number of particle bounds to skip updating every frame. Higher = more updates each frame. - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - Gravity node? - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - + + + + - - + - - - - - - + + - - - + + + + + + - - - - + + + + + + + + - - + + + + + + + - - - - - - - - - - - - - - - - - - - - - - Target node? - + + + + + + + + + + + + + + + + + + + + + + + + - - - + + + - - + + + + + - - + + + - - + + + + - - + + + + + + + + - - + + + + + - - + + + + + - - + + + - + + + + + + + + + + + + + + + + + + + + + + + + + + + + + - + + + + + + - - - - - - - - - - - - - - - - - - - - - - + + + - + + + + + + + + + + + From e9774641e40acdb357dba39fe910ac977e7411bc Mon Sep 17 00:00:00 2001 From: jonwd7 Date: Wed, 6 Sep 2017 10:21:04 -0400 Subject: [PATCH 125/164] NiMesh animation, NiShadowGenerator decoding --- nif.xml | 40 +++++++++++++++++++++++++++++++++++++--- 1 file changed, 37 insertions(+), 3 deletions(-) diff --git a/nif.xml b/nif.xml index dcd8d83..2ffa578 100644 --- a/nif.xml +++ b/nif.xml @@ -6279,11 +6279,34 @@ The bounds of the bones. Only stored if the RECOMPUTE_BOUNDS bit is set. + + + + + - + + + + + + + + + + + + + + + + + + + @@ -6612,8 +6635,19 @@ - - + + + + + + + + + + + + + From 062a7308fde136288f89290aeee5acd5408cc6c7 Mon Sep 17 00:00:00 2001 From: jonwd7 Date: Fri, 8 Sep 2017 09:52:24 -0400 Subject: [PATCH 126/164] Redone texturing property and image data blocks Redid most of NiPixelData and NiPersistentSrcTextureRendererData. Cleaned up NiTexturingProperty naming and versions, merged NiMultiTextureProperty with NiTexturingProperty as the separate declarations were unnecessary and repetitive. Filled out incomplete enums. --- nif.xml | 276 +++++++++++++++++++++++++++++++++----------------------- 1 file changed, 162 insertions(+), 114 deletions(-) diff --git a/nif.xml b/nif.xml index 2ffa578..518c4d7 100644 --- a/nif.xml +++ b/nif.xml @@ -169,7 +169,7 @@ - + @@ -603,25 +603,96 @@ - + + + + + + + Specifies the pixel format used by the NiPixelData object to store a texture. - - - - - - + + + + + + + + + + + + + + Specifies the pixel format used by the NiPixelData object to store a texture. + + + + - + An unsigned 32-bit integer, describing the color depth of a texture. - - - - - - - + + + + + + + @@ -1432,11 +1503,12 @@ Texture description. - NiSourceTexture object index. + Link to the texture image. + NiSourceTexture object index. 0=clamp S clamp T, 1=clamp S wrap T, 2=wrap S clamp T, 3=wrap S wrap T 0=nearest, 1=bilinear, 2=trilinear, 3=..., 4=..., 5=... Texture mode flags; clamp and filter mode stored in upper byte with 0xYZ00 = clamp mode Y, filter mode Z. - Unknown, seems to always be 1 + The texture coordinate set in NiGeometryData that this texture slot will use. PS2 only; from the Freedom Force docs, "L values can range from 0 to 3 and are used to specify how fast a texture gets blurry". PS2 only; from the Freedom Force docs, "The K value is used as an offset into the mipmap levels and can range from -2047 to 2047. Positive values push the mipmap towards being blurry and negative values make the mipmap sharper." -75 for most v4.0.0.2 meshes. @@ -1930,17 +2002,6 @@ Unknown. Perhaps some sort of offset? - - Looks like a memory address, so probably a bool. - Link to the texture image. - May be texture clamp mode. - May be texture filter mode. - This may be the UV set counting from 1 instead of zero. - 0? - -75? - Unknown. Usually 0 but sometimes 257 - - Determines how the raw image data is stored in NiRawImageData. @@ -3810,73 +3871,64 @@ Path controller data index (float data). ? - - - - - - - - - - - - - - - - - - - Channel data - Channel Type - Data Storage Convention - Bits per channel - Unknown + + Component Type + Data Storage Convention + Bits per component + - + + The format of the pixels in this internally stored image. - 0x000000ff (for 24bpp and 32bpp) or 0x00000000 (for 8bpp) - 0x0000ff00 (for 24bpp and 32bpp) or 0x00000000 (for 8bpp) - 0x00ff0000 (for 24bpp and 32bpp) or 0x00000000 (for 8bpp) - 0xff000000 (for 32bpp) or 0x00000000 (for 24bpp and 8bpp) - Bits per pixel, 0 (?), 8, 24 or 32. - Zero? - + 0x000000ff (for 24bpp and 32bpp) or 0x00000000 (for 8bpp) + 0x0000ff00 (for 24bpp and 32bpp) or 0x00000000 (for 8bpp) + 0x00ff0000 (for 24bpp and 32bpp) or 0x00000000 (for 8bpp) + 0xff000000 (for 32bpp) or 0x00000000 (for 24bpp and 8bpp) + Bits per pixel, 0 (Compressed), 8, 24 or 32. + [96,8,130,0,0,65,0,0] if 24 bits per pixel [129,8,130,32,0,65,12,0] if 32 bits per pixel [34,0,0,0,0,0,0,0] if 8 bits per pixel - [4,0,0,0,0,0,0,0] if 0 (?) bits per pixel + [X,0,0,0,0,0,0,0] if 0 (Compressed) bits per pixel where X = PixelFormat - Seems to always be zero. - Bits per pixel, 0 (?), 8, 24 or 32. - Unknown. Could be reference pointer. - Seems to always be zero. - Flags - Unkown. Often zero. - Unknown. - Channel Data - Link to NiPalette, for 8-bit textures. - Number of mipmaps in the texture. - Bytes per pixel (Bits Per Pixel / 8). - Mipmap descriptions (width, height, offset). - - - - Unknown - Unknown, same as the number of pixels? / number of blocks? - Unknown - Unknown - Raw pixel data holding the mipmaps. Mipmap zero is the full-size texture and they get smaller by half as the number increases. - - - + Seems to always be zero. + Bits per pixel, 0 (Compressed), 8, 24 or 32. + + + Flags + + + Channel Data + + + + + + + + + + + + + + + + A texture. - Total number of pixels - Unknown - Raw pixel data holding the mipmaps. Mipmap zero is the full-size texture and they get smaller by half as the number increases. - Raw pixel data holding the mipmaps. Mipmap zero is the full-size texture and they get smaller by half as the number increases. + + + + + + + + @@ -4317,13 +4369,13 @@ Unknown. Unknown. Seems to be set if Pixel Data is present? The original source filename of the image embedded by the referred NiPixelData object. - Pixel data object index. NiPixelData or NiPersistentSrcTextureRendererData + Pixel data object index. NiPixelData or NiPersistentSrcTextureRendererData Specifies the way the image will be stored. Specifies whether mip maps are used. Note: the NiTriShape linked to this object must have a NiAlphaProperty in its list of properties to enable material and/or texture transparency. Is Static? - Load direct to renderer - Render data is persistant + Load direct to renderer + Render data is persistant @@ -4440,19 +4492,12 @@ Unknown. 0? - - (note: not quite complete yet... but already reads most of the DAoC ones) - Property flags. - Unknown. Always 5 for DAoC files, and always 6 for Bridge Commander. Seems to have nothing to do with the number of Texture Element slots that follow. - Describes the various textures used by this mutli-texture property. Each slot probably has special meaning like thoes in NiTexturingProperty. - - Describes an object's textures. Property flags. - Property flags. - Determines how the texture will be applied. Seems to have special functions in Oblivion. - Number of textures. Always 7 in versions < 20.0.0.4. Can also be 8 in >= 20.0.0.4. + Property flags. + Determines how the texture will be applied. Seems to have special functions in Oblivion. + Number of textures. Do we have a base texture? The base texture. Do we have a dark texture? @@ -4463,31 +4508,34 @@ The gloss texture. Do we have a glow texture? The glowing texture. - Do we have a bump map texture? + Do we have a bump map texture? The bump map texture. Unknown. Unknown. Unknown. - Do we have a normal texture? (Noraml guess based on file suffix in sample files) - Normal texture. - Do we have a unknown texture 2? - Unknown texture 2. - Unknown. - Do we have a decal 0 texture? + Do we have a normal texture? + Normal texture. + + + + Do we have a decal 0 texture? + Do we have a decal 0 texture? The decal texture. - Do we have a decal 1 texture? - Do we have a decal 1 texture? + Do we have a decal 1 texture? + Do we have a decal 1 texture? Another decal texture. - Do we have a decal 2 texture? - Do we have a decal 2 texture? + Do we have a decal 2 texture? + Do we have a decal 2 texture? Another decal texture. - Do we have a decal 3 texture? - Do we have a decal 3 texture? + Do we have a decal 3 texture? + Do we have a decal 3 texture? Another decal texture. Who knows the limit. Number of Shader textures that follow. Shader textures. + + Mesh animation keyframe data. From 6ddfaceb212209e0a6f41b3a9ddcc2f50117d0a7 Mon Sep 17 00:00:00 2001 From: jonwd7 Date: Fri, 8 Sep 2017 11:48:24 -0400 Subject: [PATCH 127/164] Update PixelLayout --- nif.xml | 14 ++++++++++++-- 1 file changed, 12 insertions(+), 2 deletions(-) diff --git a/nif.xml b/nif.xml index 518c4d7..a2ffcb5 100644 --- a/nif.xml +++ b/nif.xml @@ -686,13 +686,23 @@ An unsigned 32-bit integer, describing the color depth of a texture. - + - + + From c33e60cf48122e405125e5d220e7964be6da10f0 Mon Sep 17 00:00:00 2001 From: jonwd7 Date: Fri, 8 Sep 2017 12:47:41 -0400 Subject: [PATCH 128/164] Fix Bethesda ShaderType names Also added an enum value from FO4. --- nif.xml | 29 +++++++++++++++-------------- 1 file changed, 15 insertions(+), 14 deletions(-) diff --git a/nif.xml b/nif.xml index a2ffcb5..781fa40 100644 --- a/nif.xml +++ b/nif.xml @@ -1070,28 +1070,29 @@ - + Values for configuring the shader type in a BSLightingShaderProperty - + - - + + - - - - + + - - + - + - - - + From 05cc84918b2db77faecb8e834e23013e194daefb Mon Sep 17 00:00:00 2001 From: jonwd7 Date: Sun, 10 Sep 2017 16:50:53 -0400 Subject: [PATCH 129/164] Block-level documentation changes Major cleanup to the niobject documentation as well as addition of deprecation and removal info where applicable. --- nif.xml | 341 +++++++++++++++++++++++++++++--------------------------- 1 file changed, 179 insertions(+), 162 deletions(-) diff --git a/nif.xml b/nif.xml index 781fa40..e72779b 100644 --- a/nif.xml +++ b/nif.xml @@ -738,7 +738,7 @@ - The force field's type. + The force field type. @@ -2240,7 +2240,7 @@ - A particle system modifier. + LEGACY (pre-10.1). Abstract base class for particle system modifiers. Next particle modifier. Points to the particle system controller parent. @@ -2360,7 +2360,7 @@ - Unknown. + The "T" suffix marks this body as active for translation and rotation. @@ -2585,15 +2585,15 @@ - Interpolator objects - function unknown. + Abstract base class for all interpolators of bool, float, NiQuaternion, NiPoint3, NiColorA, and NiQuatTransform data. - Interpolator objects that use keys? + Abstract base class for interpolators that use NiAnimationKeys (Key, KeyGrp) for interpolation. - Unknown. + Uses NiFloatKeys to animate a float value over time. Value when posed? At time 0? Float data? @@ -2609,7 +2609,7 @@ - Unknown. + Uses NiPosKeys to animate an NiPoint3 value over time. Value when posed? Value at time 0? Reference to NiPosData. @@ -2625,7 +2625,7 @@ - Unknown interpolator. + Used to make an object follow a predefined spline path. @@ -2636,13 +2636,14 @@ - Unknown. + Uses NiBoolKeys to animate a bool value over time. Value when posed? At time 0? Refers to a NiBoolData object. - Unknown. + Uses NiBoolKeys to animate a bool value over time. + Unlike NiBoolInterpolator, it ensures that keys have not been missed between two updates. @@ -2659,7 +2660,7 @@ - An extended type of interpolater. + Abstract base class for all NiInterpolators that blend the results of sub-interpolators together to compute a final weighted value. @@ -2675,7 +2676,7 @@ - For interpolators storing data via a B-spline. + Abstract base class for interpolators storing data via a B-spline. Animation start time. Animation stop time. Refers to NiBSplineData. @@ -2683,7 +2684,7 @@ - An object that can be controlled by a controller. + Abstract base class for NiObjects that support names, extra data, and time controllers. Configures the main shader path Name of this controllable object, used to refer to the object in .kf files. Extra data for pre-3.0 versions. @@ -2756,7 +2757,7 @@ - Base audiovisual object. + Abstract audio-visual base class from which all of Gamebryo's scene graph objects inherit. Basic flags for AV objects. Basic flags for AV objects; commonly 0x000C or 0x000A. @@ -2774,7 +2775,7 @@ - A dynamic effect such as a light or environment map. + Abstract base class for dynamic effects such as NiLights or projected texture effects. Turns effect on and off? Switches list to list of unaffected nodes? The number of affected nodes referenced. This is probably the list of affected nodes. For some reason i do not know the max exporter seems to write pointers instead of links. But it doesn't matter because at least in version 4.0.0.2 the list is automagically updated by the engine during the load stage. @@ -2783,7 +2784,7 @@ - Light source. + Abstract base class that represents light sources in a scene graph. Dimmer. Ambient color. Diffuse color. @@ -2791,7 +2792,7 @@ - A generic property object. + Abstract base class representing all rendering properties. Subclasses are attached to NiAVObjects to control their rendering. @@ -2800,7 +2801,7 @@ - Generic particle system modifier object. + Abstract base class for all particle system modifiers. The object name. Modifier ID in the particle modifier chain (always a multiple of 1000)? NiParticleSystem parent of this modifier. @@ -2808,7 +2809,7 @@ - A particle emitter? + Abstract base class for all particle system emitters. Speed / Inertia of particle movement. Adds an amount of randomness to Speed. Declination / First axis. @@ -2823,12 +2824,12 @@ - An emitter that emits meshes? + Abstract base class for particle emitters that emit particles from a volume. Node parent of this modifier? - A generic time controller object. + Abstract base class that provides the base timing and update functionality for all the Gamebryo animation controllers. Index of the next controller. Controller flags. @@ -2849,16 +2850,17 @@ - A controller capable of interpolation? + Abstract base class for all NiTimeController objects using NiInterpolator objects to animate their target objects. - Unknown. + DEPRECATED (20.6) The number of target pointers that follow. NiNode Targets to be controlled. + DEPRECATED (20.5), replaced by NiMorphMeshModifier. Time controller for geometry morphing. Unknown. Unknown. @@ -2881,17 +2883,18 @@ - A controller referring to a single interpolator. + Uses a single NiInterpolator to animate its target value. Link to interpolator. + DEPRECATED (10.2), RENAMED (10.2) to NiTransformController A time controller object for animation key frames. Keyframe controller data index. - NiTransformController replaces the NiKeyframeController. + NiTransformController replaces NiKeyframeController. @@ -2906,16 +2909,16 @@ - A particle system modifier controller that deals with boolean data? + A particle system modifier controller that animates a boolean value for particles. - Unknown. + A particle system modifier controller that animates active/inactive state for particles. This controller's data. - A particle system modifier controller that deals with floating point data? + A particle system modifier controller that animates a floating point value for particles. This controller's data. @@ -2945,11 +2948,12 @@ - A controller that interpolates floating point numbers? + Abstract base class for all NiInterpControllers that use an NiInterpolator to animate their target float value. - Texture flipping controller. + Changes the image a Map (TexDesc) will use. Uses a float interpolator to animate the texture index. + Often used for performing flipbook animation. Target texture slot (0=base, 4=glow). 0? @@ -2962,7 +2966,7 @@ - Time controller for transparency. + Animates the alpha value of a property using an interpolator. Alpha controller data index. @@ -2979,16 +2983,16 @@ - A controller that interpolates floating point numbers? + Abstract base class for all NiInterpControllers that use a NiInterpolator to animate their target boolean value. - Time controller for visibility. + Animates the visibility of an NiAVObject. Visibility controller data object index. - A controller that interpolates point 3 data? + Abstract base class for all NiInterpControllers that use a NiInterpolator to animate their target NiPoint3 value. Selects which color to control. Material color controller data object index. Points to NiPosData. @@ -3000,16 +3004,16 @@ - Light color animation controller. + Animates the ambient, diffuse and specular colors of an NiLight. - An controller for extra data. + Abstract base class for all extra data controllers. - Unknown. + Animates an NiFloatExtraData object attached to an NiAVObject. Refers to a NiFloatExtraData name. Number of extra bytes. Unknown. @@ -3017,6 +3021,7 @@ + DEPRECATED (20.5), Replaced by NiSkinningLODController. Level of detail controller for bones. Priority is arranged from low to high. Unknown. Number of LODs. @@ -3334,26 +3339,26 @@ - An interpolator for a bool. + Blends bool values together. The interpolated bool? - An interpolator for a float. + Blends float values together. The interpolated float? - Interpolates a point? + Blends NiPoint3 values together. The interpolated point? - Unknown. + Blends NiQuatTransform values together. - Timed boolean data. + Wrapper for boolean animation keys. The boolean keys. @@ -3363,16 +3368,16 @@ - Stores the number of control points of a B-spline. + Contains an NiBSplineBasis for use in interpolation of open, uniform B-Splines. The number of control points of the B-spline (number of frames of animation plus degree of B-spline minus one). - Unknown. + Uses B-Splines to animate a float value over time. - Unknown. + NiBSplineFloatInterpolator plus the information required for using compact control points. Base value when curve not defined. Starting offset for the data. (USHRT_MAX for no data.) Bias @@ -3380,16 +3385,17 @@ - Unknown. + Uses B-Splines to animate an NiPoint3 value over time. Unknown. - Unknown. + NiBSplinePoint3Interpolator plus the information required for using compact control points. - An interpolator for storing transform keyframes via a B-spline. + Supports the animation of position, rotation, and scale using an NiQuatTransform. + The NiQuatTransform can be an unchanging pose or interpolated from B-Spline control point channels. Base translation when translate curve not defined. Base rotation when rotation curve not defined. @@ -3400,9 +3406,7 @@ - An interpolator for storing transform keyframes via a compressed - B-spline (that is, using shorts rather than floats in the B-spline - data). + NiBSplineTransformInterpolator plus the information required for using compact control points. Translation Bias Translation Multiplier Rotation Bias @@ -3415,7 +3419,7 @@ - B-spline data points as floats, or as shorts for compressed B-splines. + Contains one or more sets of control points for use in interpolation of open, uniform B-Splines, stored as either float or compact. Number of Float Data Points Float values representing the control data. Number of Short Data Points @@ -3444,17 +3448,17 @@ - Color data for material color controller. + Wrapper for color animation keys. The color keys. - Unknown. + Extra data in the form of NiColorA (red, green, blue, alpha). RGBA Color? - Unknown. Root of all controllers? + Controls animation sequences on a specific branch of the scene graph. Designates whether animation sequences are cumulative? The number of controller sequence objects. Refers to a list of NiControllerSequence object. @@ -3494,11 +3498,11 @@ - Abstract type for object palettes. + Abstract base class for indexing NiAVObject by name. - Refers to a list of objects. Used by NiControllerManager. + NiAVObjectPalette implementation. Used to quickly look up objects by name. Scene root of the object palette. Number of objects. The objects. @@ -3509,33 +3513,33 @@ - Unknown. + NiDitherProperty allows the application to turn the dithering of interpolated colors and fog values on and off. 1's Bit: Enable dithering - Unknown. + DEPRECATED (10.2), REMOVED (20.5). Replaced by NiTransformController and NiLookAtInterpolator. The data for the controller. - Possibly the 1D position along a 3D path. + Wrapper for 1D (one-dimensional) floating point animation keys. The keys. - Float extra data. + Extra float data. The float data. - Unknown. + Extra float array data. Number of floats in the next field. Float data. - Describes... fog? + NiFogProperty allows the application to enable, disable and control the appearance of fog. 1's bit: Enables Fog 2's bit: Sets Fog Function to FOG_RANGE_SQ @@ -3548,7 +3552,7 @@ - A particle modifier; applies a gravitational field on the particles. + LEGACY (pre-10.1) particle modifier. Applies a gravitational field on the particles. Unknown. The strength/force of this gravity. The force field's type. @@ -3580,7 +3584,7 @@ - Integers data. + Extra integer array data. Number of integers. Integers. @@ -3591,7 +3595,8 @@ - Keyframes for mesh animation. + DEPRECATED (10.2), RENAMED (10.2) to NiTransformData. + Wrapper for transformation animation keys. The number of quaternion rotation keys. If the rotation type is XYZ (type 4) then this *must* be set to 1, and in this case the actual number of keys is stored in the XYZ Rotations field. The type of interpolation to use for rotation. Can also be 4 to indicate that separate X, Y, and Z values are used for the rotation instead of Quaternions. The rotation keys if Quaternion rotation is used. @@ -3610,13 +3615,14 @@ - Unknown. Start time is 3.4e+38 and stop time is -3.4e+38. + DEPRECATED (10.2), REMOVED (20.5) + Replaced by NiTransformController and NiLookAtInterpolator. Unknown. Link to the node to look at? - Unknown. + NiLookAtInterpolator rotates an object so that it always faces a target object. Refers to a Node to focus on. Target node name. @@ -3630,7 +3636,7 @@ - Describes the material shading properties. + Describes the surface properties of an object e.g. translucency, ambient color, diffuse color, emissive color, and specular color. Property flags. How much the material reflects ambient light. How much the material reflects diffuse light. @@ -3642,6 +3648,7 @@ + DEPRECATED (20.5), replaced by NiMorphMeshModifier. Geometry morphing data. Number of morphing object. Number of vertices. @@ -3662,7 +3669,7 @@ - Morrowind specific? + Morrowind specific. @@ -3722,7 +3729,7 @@ - A node used to switch between branches, such as for LOD levels? + Represents groups of multiple scenegraph subtrees, only one of which (the "active child") is drawn at any given time. @@ -3738,14 +3745,14 @@ - A color palette. + NiPalette objects represent mappings from 8-bit indices to 24-bit RGB or 32-bit RGBA colors. Unknown, Usually = 0. The number of palette entries. Always = 256. The color palette. - A particle modifier. + LEGACY (pre-10.1) particle modifier. Unknown. Unknown. Unknown. @@ -3757,24 +3764,24 @@ - Unknown. + LEGACY (pre-10.1) particle modifier. Color data index. - This particle system modifier controls the particle size. If it is present the particles start with size 0.0 . Then they grow to their original size and stay there until they fade to zero size again at the end of their lifetime cycle. + LEGACY (pre-10.1) particle modifier. The time from the beginning of the particle lifetime during which the particle grows. The time from the end of the particle lifetime during which the particle fades. - Unknown. + LEGACY (pre-10.1) particle modifier. The number of particle mesh references that follow. Links to nodes of particle meshes? - Unknown. + LEGACY (pre-10.1) particle modifier. Unknown. Unknown. Unknown. @@ -3785,15 +3792,15 @@ - Unknown. + LEGACY (pre-10.1). NiParticles which do not house normals and generate them at runtime. - Mesh particle node? + LEGACY (pre-10.1). Particle meshes. - Particle meshes data. + LEGACY (pre-10.1). Particle meshes data. Refers to the mesh that makes up a particle? @@ -3872,6 +3879,7 @@ + DEPRECATED (10.2), REMOVED (20.5). Replaced by NiTransformController and NiPathInterpolator. Time controller for a path. Unknown. Unknown, always 1? @@ -3943,7 +3951,7 @@ - Unknown. + LEGACY (pre-10.1) particle modifier. Usually 0? Unknown. Unknown. @@ -3972,18 +3980,18 @@ - Position data. + Wrapper for position animation keys. The position keys. - Unknown particle modifier. + Particle modifier that controls and updates the age of particles in the system. Unknown. Link to NiPSysSpawnModifier object? - Particle modifier that uses a NiNode to use as a "Bomb Object" to alter the path of particles. + Particle modifier that applies an explosive force to particles. Link to a NiNode for bomb to function. Orientation of bomb object. Falloff rate of the bomb object. @@ -3993,12 +4001,12 @@ - Unknown particle system modifier. + Particle modifier that creates and updates bound volumes. Unknown. - Particle emitter that uses points within a defined Box shape to emit from.. + Particle emitter that uses points within a defined Box shape to emit from. Defines the Width of the box area. Defines the Height of the box area. Defines the Depth of the box area. @@ -4021,7 +4029,7 @@ - Unknown. + Particle modifier that applies a linear drag force to particles. Parent reference. The drag axis. Drag percentage. @@ -4030,14 +4038,14 @@ - Particle system emitter controller data. + DEPRECATED (10.2). Particle system emitter controller data. Unknown. Number of keys. Unknown. - Adds gravity to a particle system, when linked to a NiNode to use as a Gravity Object. + Particle modifier that applies a gravitational force to particles. Refers to a NiNode for gravity location. Orientation of gravity. Falloff range. @@ -4068,7 +4076,7 @@ - Unknown. + Particle modifier that updates mesh particles using the age of each particle. The number of object references that follow. Group of target NiNodes or NiTriShapes? @@ -4093,7 +4101,7 @@ - Similar to a Flip Controller, this handles particle texture animation on a single texture atlas + Similar to a Flip Controller, this handles particle texture animation on a single texture atlas Starting frame/position on atlas Random chance to start on a different frame? Ending frame/position on atlas @@ -4117,11 +4125,11 @@ - Unknown particle system modifier. + Particle modifier that updates the particle positions based on velocity and last update time. - Unknown. + Particle modifier that calls reset on a target upon looping. @@ -4136,7 +4144,7 @@ - Unknown particle modifier. + Particle modifier that spawns additional copies of a particle. Unknown. Unknown. Unknown. @@ -4154,7 +4162,7 @@ - Particle system controller, used for ???. + Particle system controller, tells the system to update its simulation. @@ -4167,23 +4175,23 @@ - Particle system modifier, used for controlling the particle velocity in force field. + Particle system modifier, implements a vortex field force for particles. Direction of the particle velocity - Particle system modifier, used for controlling the particle velocity in gravity field. + Particle system modifier, implements a gravity field force for particles. Direction of the particle velocity - Particle system modifier, used for controlling the particle velocity in drag space warp. + Particle system modifier, implements a drag field force for particles. Whether to use the direction field? Direction of the particle velocity - Particle system modifier, used for controlling the particle velocity in drag space warp. + Particle system modifier, implements a turbulence field force for particles. Frequency of the update. @@ -4249,7 +4257,7 @@ - Particle system modifier, used for controlling the particle velocity in a field like wind. + Particle system modifier, updates the particle velocity to simulate the effects of air movements like wind, fans, or wake. Direction of the particle velocity Unknown Unknown @@ -4279,8 +4287,7 @@ - Particle system modifier, used for controlling the particle - velocity in force field. + Particle system modifier, updates the particle velocity to simulate the effects of point gravity. Unknown Enums? @@ -4289,14 +4296,14 @@ - Describes levels of detail based on distance of object from camera. + NiRangeLODData controls switching LOD levels based on Z depth from the camera to the NiLODNode. ? Number of levels of detail. The ranges of distance that each level of detail applies in. - Describes levels of detail based on size of object on screen? + NiScreenLODData controls switching LOD levels based on proportion of the screen that a bound would include. The center of the bounding sphere? The radius of the bounding sphere? The center of the bounding sphere in world space? @@ -4310,6 +4317,7 @@ + DEPRECATED (pre-10.1), REMOVED (20.3). Keyframe animation root node, in .kf files. @@ -4395,7 +4403,7 @@ - Unknown. + LEGACY (pre-10.1) particle modifier. Unknown. Unknown. Unknown. @@ -4462,7 +4470,7 @@ - Enables environment mapping. Should be in both the children list and effects list of the NiTriShape object. For Morrowind: the bump map can be used to bump the environment map (note that the bump map is ignored if no NiTextureEffect object is present). + Represents an effect that uses projected textures such as projected lights (gobos), environment maps, and fog maps. Model projection matrix. Always identity? Model projection transform. Always (0,0,0)? Texture Filtering mode. @@ -4481,7 +4489,7 @@ - Unknown + LEGACY (pre-10.1) Unknown. Either 210 or 194. 0? @@ -4489,6 +4497,7 @@ + LEGACY (pre-10.1) 0 if the texture is internal to the NIF file. The filepath to the texture. Link to the internally stored image data. @@ -4497,6 +4506,7 @@ + LEGACY (pre-10.1) Property flags. Property flags. Link to the texture image. @@ -4504,7 +4514,7 @@ - Describes an object's textures. + Describes how a fragment shader should be configured for a given piece of geometry. Property flags. Property flags. Determines how the texture will be applied. Seems to have special functions in Oblivion. @@ -4548,7 +4558,7 @@ - Mesh animation keyframe data. + Wrapper for transformation animation keys. @@ -4603,6 +4613,7 @@ + LEGACY (pre-10.1) Sub data of NiBezierMesh unknown unknown @@ -4616,6 +4627,7 @@ + LEGACY (pre-10.1) Unknown references. unknown @@ -4642,7 +4654,6 @@ Pesumably a progressive mesh with triangles specified by edge splits. Seems to be specific to Freedom Force. The structure of this is uncertain and highly experimental at this point. - No file with this data can currently be read properly. @@ -4655,12 +4666,14 @@ + DEPRECATED (pre-10.1), REMOVED (20.3). Time controller for texture coordinates. Always 0? Texture coordinate controller data index. + DEPRECATED (pre-10.1), REMOVED (20.3) Texture coordinate data. Four UV data groups. Appear to be U translation, V translation, U scaling/tiling, V scaling/tiling. @@ -4668,7 +4681,8 @@ - Extra vector data. + DEPRECATED (20.5). + Extra data in the form of a vector (as x, y, z, w components). The vector data. Not sure whether this comes before or after the vector data. @@ -4691,6 +4705,7 @@ + DEPRECATED (10.x), REMOVED (?) Not used in skinning. Unsure of use - perhaps for morphing animation or gravity. Number of bytes in this data object. @@ -4699,13 +4714,14 @@ + DEPRECATED (10.2), REMOVED (?), Replaced by NiBoolData. Visibility data for a controller. The number of visibility keys that follow. The visibility keys. - Unknown. + Allows applications to switch between drawing solid geometry or wireframe outlines. Property flags. 0 - Wireframe Mode Disabled @@ -4714,7 +4730,7 @@ - This Property controls the Z buffer (OpenGL: depth buffer). + Allows applications to set the test and write modes of the renderer's Z-buffer and to set the comparison function used for the Z-buffer test. Bit 0 enables the z test Bit 1 controls wether the Z buffer is read only (0) or read/write (1) @@ -4729,6 +4745,7 @@ + LEGACY (pre-10.1) Raw image data. Image width Image height @@ -4738,13 +4755,13 @@ - Unknown node. Found in Loki. + Used to turn sorting off for individual subtrees in a scene. Useful if objects must be drawn in a fixed order. Sorting Unknown. - Unknown node. Found in Emerge Demo. + Represents cube maps that are created from either a set of six image files, six blocks of pixel data, or a single pixel data with six faces. @@ -5123,6 +5140,7 @@ + DEPRECATED (20.5), functionality included in NiMeshScreenElements. Two dimensional screen elements. Maximum number of polygons? Polygons @@ -5136,18 +5154,19 @@ + DEPRECATED (20.5), replaced by NiMeshScreenElements. Two dimensional screen elements. - Grouping node for nodes in a Portal + NiRoomGroup represents a set of connected rooms i.e. a game level. Outer Shell Geometry Node? Number of rooms in this group Rooms associated with this group. - Grouping node for nodes in a Portal + NiRoom objects represent cells in a cell-portal culling system. Number of walls in a room? Face normal and unknown value. Number of doors into room @@ -5159,7 +5178,8 @@ - A Portal + NiPortal objects are grouping nodes that support aggressive visibility culling. + They represent flat polygonal regions through which a part of a scene graph can be viewed. Unknown flags. Unknown Number of vertices in this polygon @@ -5286,7 +5306,7 @@ - Bethesda-specific Property node + Bethesda-specific property. Unknown. 0: smooth no 1: smooth yes @@ -5312,7 +5332,7 @@ - Bethesda-specific Shade node. + Bethesda-specific property. Texture Set The amount of distortion. **Not based on physically accurate refractive index** (0=none) (0-1) Rate of texture movement for refraction shader. @@ -5323,28 +5343,26 @@ - This controller is used to animate float variables in BSEffectShaderProperty. + This controller is used to animate float variables in BSEffectShaderProperty. Which float variable in BSEffectShaderProperty to animate: - This controller is used to animate colors in BSEffectShaderProperty. + This controller is used to animate colors in BSEffectShaderProperty. Which color in BSEffectShaderProperty to animate: - This controller is used to animate float variables in BSLightingShaderProperty. + This controller is used to animate float variables in BSLightingShaderProperty. Which float variable in BSLightingShaderProperty to animate: - This controller is used to animate colors in BSLightingShaderProperty. + This controller is used to animate colors in BSLightingShaderProperty. Which color in BSLightingShaderProperty to animate: - - Unkown - + Skyrim, Paired with dummy TriShapes, this controller generates lightning shapes for special effects. @@ -5388,7 +5406,7 @@ - Bethesda-specific node? Found in Fallout3 + Bethesda-specific property. Found in Fallout3 @@ -5401,39 +5419,39 @@ - Bethesda-specific node? Found in Fallout3 + Bethesda-specific property. Found in Fallout3 The texture. Sky Object Type - Bethesda-specific node. + Bethesda-specific property. Texture file name - Bethesda-specific node. + Bethesda-specific property. - Bethesda-specific node. + Bethesda-specific property. - Bethesda-specific node. + Bethesda-specific property. Texture file name - Bethesda-specific node. + Bethesda-specific property. - Bethesda-specific node. + Bethesda-specific property. - Bethesda-specific node. + Bethesda-specific property. @@ -5689,20 +5707,20 @@ - Bethesda-specific node. + Bethesda-specific skin instance. Unknown Unknown - Bethesda-specific node. (for dynamic decal projection?) + Bethesda-specific extra data. (for dynamic decal projection?) Number of groups Number of Blocks - Bethesda-Specific Particle node. + Bethesda-specific particle modifier. Unknown Unknown Unknown @@ -5720,7 +5738,7 @@ - Bethesda-Specific node. Found on fxFire effects + Bethesda-specific node. Found on fxFire effects Value Value node flags. @@ -5747,13 +5765,13 @@ - Bethesda-Specific node. + Bethesda-Specific time controller. - Bethesda-Specific node. + Bethesda-Specific particle system. Unknown Unknown Unknown @@ -5771,7 +5789,7 @@ - Bethesda-Specific node. + Bethesda-Specific time controller. @@ -5799,8 +5817,7 @@ - Bethesda-specific node. - + Bethesda-specific time controller. Link to Interpolator. @@ -5833,14 +5850,14 @@ - Bethesda-specific node. + Bethesda-specific compound. Name of affected node? Transform data. Transform data. - Bethesda-specific node. + Bethesda-specific interpolator. Unknown. Unknown. Unknown float data. @@ -5854,7 +5871,7 @@ - Bethesda-specific node. + Bethesda-specific object. Type of this note. Location in time. Unknown. @@ -5863,13 +5880,13 @@ - Bethesda-specific node. + Bethesda-specific object. Number of BSAnimNote objects. BSAnimNote objects. - Bethesda-specific node. + Bethesda-specific Havok serializable. Unknown Flag Unknown Flag @@ -5895,7 +5912,7 @@ - Bethesda-specific node. + Bethesda-specific object. @@ -5911,19 +5928,19 @@ - Bethesda-specific node. + Bethesda-specific object. Center Radius - Bethesda-specific node. + Bethesda-specific AV object. Number of segments in the square grid Configuration of each segment - Bethesda-specific node. + Bethesda-specific object. Position of the AABB's center Extent of the AABB in all directions @@ -5982,20 +5999,20 @@ - Bethesda-specific node. + Bethesda-specific extra data. Unknown Unknown - Bethesda-specific node. + Bethesda-specific Havok serializable. - Bethesda-specific node. + Bethesda-specific time controller. Frustrum field of view animation interpolater and data. @@ -6011,7 +6028,7 @@ - Bethesda-Specific node. + Bethesda-Specific Havok serializable. @@ -6803,22 +6820,22 @@ - A variation on NiTriShape, for visibility control over vertex groups. + A variation on NiTriShape, for visibility control over vertex groups. Unknown Unknown Unknown - Furniture Marker for actors + Furniture Marker for actors - Unknown, related to trees. + Unknown, related to trees. - Node for handling Trees, Switches branch configurations for variation? + Node for handling Trees, Switches branch configurations for variation? Unknown Unknown Unknown From 844160d2ea6aaa3ffe2d7921c0b38d464949994f Mon Sep 17 00:00:00 2001 From: jonwd7 Date: Mon, 11 Sep 2017 21:07:19 -0400 Subject: [PATCH 130/164] Enum and Compound changes Fixed a few enum types to bitflags. Renamed some compounds to match the types in engine. Removed MTransform because it doesn't exist. The NiAVObject transform is simply an NiTransform written out of order. Switched types to use NiQuatTransform where applicable. Made an NiPlane compound to match the type used in engine. Switched types to use NiPlane where applicable. Removed some unused compounds and commented code. --- nif.xml | 205 +++++++++++++++++++++----------------------------------- 1 file changed, 77 insertions(+), 128 deletions(-) diff --git a/nif.xml b/nif.xml index e72779b..d00ed7e 100644 --- a/nif.xml +++ b/nif.xml @@ -1491,15 +1491,6 @@ The TBC of the key. - - Texture coordinates (u,v). As in OpenGL; image origin is in the lower left corner. First coordinate. @@ -1511,6 +1502,12 @@ First coordinate. Second coordinate. + + + Texture description. @@ -1528,7 +1525,7 @@ The amount to translate the texture coordinates in each direction? The number of times the texture is tiled in each direction? 2D Rotation of texture image around third W axis after U and V. - The texture transform type? Doesn't seem to do anything. + Depending on the source, scaling can occur before or after rotation. The offset from the origin? @@ -1539,20 +1536,6 @@ Map Index - - A texture source. - Is the texture external? - - The external texture file name. - - Note: all original morrowind nifs use name.ext only for addressing the textures, but most mods use something like textures/[subdir/]name.ext. This is due to a feature in Morrowind resource manager: it loads name.ext, textures/name.ext and textures/subdir/name.ext but NOT subdir/name.ext. - - Unknown. - Unknown. - The original source filename of the image embedded by the referred NiPixelData object. - Pixel data object index. - - List of three vertex indices. First vertex index. @@ -1560,23 +1543,20 @@ Third vertex index. - - The root bone of the skeleton. - The transform that takes the root bone parent coordinate system into the skin coordinate system. + The transform that takes the root bone parent coordinate system into the skin coordinate system. The number of bones referenced by this mesh modifier. Pointers to the bone nodes that affect this skin. - The transforms that go from bind-pose space to bone space. + The transforms that go from bind-pose space to bone space. The bounds of the bones. Only stored if the RECOMPUTE_BOUNDS bit is set. From 3e57fbbec3d95acd9cd0dbc9a4e0795189d2a38c Mon Sep 17 00:00:00 2001 From: jonwd7 Date: Wed, 13 Sep 2017 12:08:03 -0400 Subject: [PATCH 131/164] NiBSpline* type, name, and doc fixes Offset and Half Range are the correct names for the compact control point data used to decompress the compact control points. Beware for NiBSplineTransformInterpolator and NiBSplineCompTransformInterpolator the naming has shifted for "Offset". "Offset" is now "Handle" and "Bias" is now "Offset". This means the same names still exist but for different rows. Also shifted some types around to the correct classes and filled out some unknowns. --- nif.xml | 42 +++++++++++++++++++++--------------------- 1 file changed, 21 insertions(+), 21 deletions(-) diff --git a/nif.xml b/nif.xml index d00ed7e..f4dfce0 100644 --- a/nif.xml +++ b/nif.xml @@ -3347,45 +3347,45 @@ Uses B-Splines to animate a float value over time. + Base value when curve not defined. + Handle into the data. (USHRT_MAX for invalid handle.) NiBSplineFloatInterpolator plus the information required for using compact control points. - Base value when curve not defined. - Starting offset for the data. (USHRT_MAX for no data.) - Bias - Multiplier + + Uses B-Splines to animate an NiPoint3 value over time. - Unknown. + Base value when curve not defined. + Handle into the data. (USHRT_MAX for invalid handle.) NiBSplinePoint3Interpolator plus the information required for using compact control points. + + Supports the animation of position, rotation, and scale using an NiQuatTransform. The NiQuatTransform can be an unchanging pose or interpolated from B-Spline control point channels. - - Base translation when translate curve not defined. - Base rotation when rotation curve not defined. - Base scale when scale curve not defined. - Starting offset for the translation data. (USHRT_MAX for no data.) - Starting offset for the rotation data. (USHRT_MAX for no data.) - Starting offset for the scale data. (USHRT_MAX for no data.) + + Handle into the translation data. (USHRT_MAX for invalid handle.) + Handle into the rotation data. (USHRT_MAX for invalid handle.) + Handle into the scale data. (USHRT_MAX for invalid handle.) NiBSplineTransformInterpolator plus the information required for using compact control points. - Translation Bias - Translation Multiplier - Rotation Bias - Rotation Multiplier - Scale Bias - Scale Multiplier + + + + + + @@ -3393,10 +3393,10 @@ Contains one or more sets of control points for use in interpolation of open, uniform B-Splines, stored as either float or compact. - Number of Float Data Points + Float values representing the control data. - Number of Short Data Points - Signed shorts representing the data from 0 to 1 (scaled by SHRT_MAX). + + Signed shorts representing the data from 0 to 1 (scaled by SHRT_MAX). From d078a171c34c61755732c95c0d3742ff396e5c95 Mon Sep 17 00:00:00 2001 From: jonwd7 Date: Wed, 13 Sep 2017 20:42:55 -0400 Subject: [PATCH 132/164] NiPS and NiPSys further block documentation --- nif.xml | 120 ++++++++++++++++++++++++++++++++++++++++++++------------ 1 file changed, 96 insertions(+), 24 deletions(-) diff --git a/nif.xml b/nif.xml index f4dfce0..728505d 100644 --- a/nif.xml +++ b/nif.xml @@ -2896,27 +2896,27 @@ - Unknown. + Animates the declination value on an NiPSysEmitter object. - Unknown. + Animates the declination variation value on an NiPSysEmitter object. - Unknown. + Animates the size value on an NiPSysEmitter object. - Unknown. + Animates the lifespan value on an NiPSysEmitter object. - Unknown. + Animates the speed value on an NiPSysEmitter object. - Unknown. + Animates the strength value of an NiPSysGravityModifier. @@ -6352,6 +6352,7 @@ + Represents a particle system. @@ -6376,6 +6377,7 @@ + Represents a particle system that uses mesh particles instead of sprite-based particles. @@ -6384,9 +6386,12 @@ - + + A mesh modifier that uses particle system data to generate camera-facing quads. + + A mesh modifier that uses particle system data to generate aligned quads for each particle. @@ -6468,6 +6473,7 @@ + Updates the bounding volume for an NiPSParticleSystem object. Number of particle bounds to skip updating every frame. Higher = more updates each frame. @@ -6486,12 +6492,14 @@ + Abstract base class for all particle forces. + Applies a linear drag force to particles. @@ -6500,6 +6508,7 @@ + Applies a gravitational force to particles. @@ -6510,6 +6519,7 @@ + Applies an explosive force to particles. @@ -6521,6 +6531,7 @@ + Abstract base class for all particle emitters. @@ -6545,25 +6556,30 @@ + Abstract base class for particle emitters that emit particles from a volume. + A particle emitter that emits particles from a rectangular volume. + A particle emitter that emits particles from a spherical volume. + A particle emitter that emits particles from a cylindrical volume. + Emits particles from one or more NiMesh objects. A random mesh emitter is selected for each particle emission. @@ -6575,35 +6591,87 @@ + Abstract base class for all particle emitter time controllers. - + + Abstract base class for controllers that animate a floating point value on an NiPSEmitter object. + + Animates particle emission and birth rate. + Abstract base class for all particle force time controllers. - - - - - - - - - - - - - - - - + + Abstract base class for controllers that animate a Boolean value on an NiPSForce object. + + + + Abstract base class for controllers that animate a floating point value on an NiPSForce object. + + + + Animates whether or not an NiPSForce object is active. + + + + Animates the strength value of an NiPSGravityForce object. + + + + Animates the speed value on an NiPSEmitter object. + + + + Animates the size value on an NiPSEmitter object. + + + + Animates the declination value on an NiPSEmitter object. + + + + Animates the declination variation value on an NiPSEmitter object. + + + + Animates the planar angle value on an NiPSEmitter object. + + + + Animates the planar angle variation value on an NiPSEmitter object. + + + + Animates the rotation angle value on an NiPSEmitter object. + + + + Animates the rotation angle variation value on an NiPSEmitter object. + + + + Animates the rotation speed value on an NiPSEmitter object. + + + + Animates the rotation speed variation value on an NiPSEmitter object. + + + + Animates the lifespan value on an NiPSEmitter object. + + + + Calls ResetParticleSystem on an NiPSParticleSystem target upon looping. + @@ -6613,6 +6681,7 @@ + Abstract base class for all particle colliders. @@ -6622,6 +6691,7 @@ + A planar collider for particles. @@ -6630,11 +6700,13 @@ + A spherical collider for particles. + Creates a new particle whose initial parameters are based on an existing particle. From 65578b6ca3687ba874044a5d4129bb4a54140b51 Mon Sep 17 00:00:00 2001 From: jonwd7 Date: Wed, 13 Sep 2017 21:33:49 -0400 Subject: [PATCH 133/164] Misc type changes, unknown decoding, version fixes --- nif.xml | 104 ++++++++++++++++++++++++++------------------------------ 1 file changed, 49 insertions(+), 55 deletions(-) diff --git a/nif.xml b/nif.xml index 728505d..b53a044 100644 --- a/nif.xml +++ b/nif.xml @@ -2007,14 +2007,10 @@ Capsule Bounding Volume - Center - Origin - - - Unknown. - Unknown. + + + + @@ -2838,7 +2834,7 @@ Unknown. Unknown. Geometry morphing data index. - Always Update + The number of interpolator objects. List of interpolators. Weighted Interpolators? @@ -2928,8 +2924,8 @@ Changes the image a Map (TexDesc) will use. Uses a float interpolator to animate the texture index. Often used for performing flipbook animation. Target texture slot (0=base, 4=glow). - 0? - + + Time between two flips. delta = (start_time - stop_time) / sources.num_indices @@ -2945,7 +2941,7 @@ Texture transformation controller. The target texture slot should have "Has Texture Transform" enabled. - Unknown. + Is the target map a shader map? The target texture slot. Determines how this controller animates the UV Coordinates. Link to NiFloatData. @@ -3033,7 +3029,7 @@ Unknown value, usually -1. (Not a link) Cyanide extension (only in version 10.2.0.0?). Unknown. - Dirty Flag? + Dirty Flag? Dirty Flag? Dirty Flag? Two property links, used by Bethesda. @@ -3258,7 +3254,7 @@ Unknown. - + Particle system data. Unknown. Unknown. @@ -3526,7 +3522,7 @@ LEGACY (pre-10.1) particle modifier. Applies a gravitational field on the particles. - Unknown. + Unknown. The strength/force of this gravity. The force field's type. The position of the mass point relative to the particle system. (TODO: check for versions <= 3.1) @@ -3573,7 +3569,7 @@ The number of quaternion rotation keys. If the rotation type is XYZ (type 4) then this *must* be set to 1, and in this case the actual number of keys is stored in the XYZ Rotations field. The type of interpolation to use for rotation. Can also be 4 to indicate that separate X, Y, and Z values are used for the rotation instead of Quaternions. The rotation keys if Quaternion rotation is used. - Possibly a vestigial time value? Doesn't appear to be significant. + Individual arrays of keys for rotating X, Y, and Z individually. Translation keys. Scale keys. @@ -3714,9 +3710,10 @@ NiPalette objects represent mappings from 8-bit indices to 24-bit RGB or 32-bit RGBA colors. - Unknown, Usually = 0. - The number of palette entries. Always = 256. - The color palette. + + The number of palette entries. Always 256 but can also be 16. + The color palette. + The color palette. @@ -3849,13 +3846,13 @@ DEPRECATED (10.2), REMOVED (20.5). Replaced by NiTransformController and NiPathInterpolator. Time controller for a path. - Unknown. - Unknown, always 1? - Unknown, often 0? - Unknown, often 0? - Unknown, always 0? - Path controller data index (position data). ? - Path controller data index (float data). ? + + -1 = Negative, 1 = Positive + Max angle in radians. + + 0, 1, or 2 representing X, Y, or Z. + + @@ -4227,12 +4224,12 @@ Particle system modifier, updates the particle velocity to simulate the effects of air movements like wind, fans, or wake. Direction of the particle velocity - Unknown - Unknown - Unknown - Unknown - Unknown - Unknown + How quickly particles will accelerate to the magnitude of the air field. + How much of the air field velocity will be added to the particle velocity. + + + + The angle of the air field cone if Enable Spread is true. @@ -4272,12 +4269,10 @@ NiScreenLODData controls switching LOD levels based on proportion of the screen that a bound would include. - The center of the bounding sphere? - The radius of the bounding sphere? - The center of the bounding sphere in world space? - The radius of the bounding sphere in world space? - The number of screen size based LOD levels. - The LOD levels based on proportion of screen size? + + + + @@ -4383,8 +4378,8 @@ A spot. - The opening angle of the spot. - Unknown + + Describes the distribution of light. (see: glLight) @@ -4442,8 +4437,8 @@ Model projection matrix. Always identity? Model projection transform. Always (0,0,0)? Texture Filtering mode. + Texture Clamp mode. - The type of effect that the texture is used for. The method that will be used to generate UV coordinates for the texture effect. Image index. @@ -4640,8 +4635,7 @@ DEPRECATED (20.5). Extra data in the form of a vector (as x, y, z, w components). - The vector data. - Not sure whether this comes before or after the vector data. + The vector data. @@ -4714,7 +4708,7 @@ Used to turn sorting off for individual subtrees in a scene. Useful if objects must be drawn in a fixed order. Sorting - Unknown. + @@ -5099,15 +5093,15 @@ DEPRECATED (20.5), functionality included in NiMeshScreenElements. Two dimensional screen elements. - Maximum number of polygons? - Polygons - Polygon Indices - Unknown - Number of Polygons actually in use - Number of in-use vertices - Unknown - Number of in-use triangles - Maximum number of faces + + + + + + + + + @@ -5137,8 +5131,8 @@ NiPortal objects are grouping nodes that support aggressive visibility culling. They represent flat polygonal regions through which a part of a scene graph can be viewed. - Unknown flags. - Unknown + + Unused in 20.x, possibly also 10.x. Number of vertices in this polygon Vertices Target portal or room From 0cc1f4deaf1516fc165e4cd1c72857c3f7b910c0 Mon Sep 17 00:00:00 2001 From: jonwd7 Date: Fri, 15 Sep 2017 10:46:31 -0400 Subject: [PATCH 134/164] Enum and compound doc, type, and naming changes Filled out and fixed enum and some compound documentation, changed names to match engine types. Started marking some enums/compounds as Bethesda-specific. Also shifted NiPoint3InterpController members to NiMaterialColorController where they belonged. --- nif.xml | 384 +++++++++++++++++++++++++++++--------------------------- 1 file changed, 197 insertions(+), 187 deletions(-) diff --git a/nif.xml b/nif.xml index b53a044..94f48d3 100644 --- a/nif.xml +++ b/nif.xml @@ -143,16 +143,9 @@ These are like C enums and consist of a list of options. They can appear as parts of compounds or niobjects.--> - - An unsigned 32-bit integer, describing how transparency is handled in a texture. - - - - - - An unsigned 32-bit integer, describing the apply mode of a texture. + Describes how the vertex colors are blended with the filtered texture color. @@ -185,14 +178,8 @@ - - An unsigned 32-bit integer, describing how vertex colors influence lighting. - - - - - A material, used by havok shape objects in Oblivion. + Bethesda Havok. Material descriptor for a Havok shape in Oblivion. @@ -228,10 +215,7 @@ - A material, used by havok shape objects in Fallout 3. - Bit 5: flag for PLATFORM (for values 32-63 substract 32 to know material number) - Bit 6: flag for STAIRS (for values 64-95 substract 64 to know material number) - Bit 5+6: flag for STAIRS+PLATFORM (for values 96-127 substract 96 to know material number) + Bethesda Havok. Material descriptor for a Havok shape in Fallout 3 and Fallout NV. @@ -363,7 +347,7 @@ - A material, used by havok shape objects in Skyrim. + Bethesda Havok. Material descriptor for a Havok shape in Skyrim. @@ -428,7 +412,7 @@ - Sets mesh color in Oblivion Construction Set. Anything higher than 57 is also null. + Bethesda Havok. Describes the collision layer a body belongs to in Oblivion. @@ -490,7 +474,7 @@ - Sets mesh color in Fallout 3 GECK. Anything higher than 72 is also null. + Bethesda Havok. Describes the collision layer a body belongs to in Fallout 3 and Fallout NV. @@ -538,7 +522,7 @@ - Physical purpose of collision object? The setting affects object's havok behavior in game. Anything higher than 47 is also null. + Bethesda Havok. Describes the collision layer a body belongs to in Skyrim. @@ -590,20 +574,15 @@ + Bethesda Havok. A byte describing if MOPP Data is organized into chunks (PS3) or not (PC) - - An unsigned 32-bit integer, describing how mipmaps are handled in a texture. - - - - - + Target platform for NiPersistentSrcTextureRendererData (later than 30.1). + Target renderer for NiPersistentSrcTextureRendererData (until 30.1). - Specifies the pixel format used by the NiPixelData object to store a texture. - - - - + + + - - + + + + + + + + + Describes whether pixels have been tiled from their standard row-major format to a format optimized for a particular platform. - Specifies the pixel format used by the NiPixelData object to store a texture. + Describes the pixel format used by the NiPixelData object to store a texture. + Describes how each pixel should be accessed on NiPixelFormat. - An unsigned 32-bit integer, describing the color depth of a texture. + Describes the color depth in an NiTexture. @@ -705,8 +687,23 @@ + + Describes how mipmaps are handled in an NiTexture. + + + + + + + Describes how transparency is handled in an NiTexture. + + + + + + - Specifies the availiable texture clamp modes. That is, the behavior of pixels outside the range of the texture. + Describes the availiable texture clamp modes, i.e. the behavior of UV mapping outside the [0,1] range. @@ -714,20 +711,27 @@ - Specifies the availiable texture filter modes. That is, the way pixels within a texture are blended together when textures are displayed on the screen at a size other than their original dimentions. - - - - - - + Describes the availiable texture filter modes, i.e. the way the pixels in a texture are displayed on screen. + + + + + + + - An unsigned 32-bit integer, which describes how to apply vertex colors. - - - + Describes how to apply vertex colors for NiVertexColorProperty. + + + + + + + Describes which lighting equation components influence the final vertex color for NiVertexColorProperty. + + @@ -746,61 +750,62 @@ Determines the way the billboard will react to the camera. Billboard mode is stored in lowest 3 bits although Oblivion vanilla nifs uses values higher than 7. - - - - - + + + + + + - This enum contains the options for doing stencil buffer tests. - - - - - - - - + Describes stencil buffer test modes for NiStencilProperty. + + + + + + + + - - This enum contains the options for doing z buffer tests. - - - - - - - - + + Describes the actions which can occur as a result of tests for NiStencilProperty. + + + + + + - - This enum defines the various actions used in conjunction with the stencil buffer. - For a detailed description of the individual options please refer to the OpenGL docs. - - A 4x4 transformation matrix. + A 3x4 transformation matrix. The (1,1) element. The (2,1) element. The (3,1) element. @@ -1349,14 +1362,14 @@ - Description of a MipMap within a NiPixelData object. + Description of a mipmap within an NiPixelData object. Width of the mipmap image. Height of the mipmap image. Offset into the pixel data array where this mipmap starts. - - A group of NiNodes references. + + A set of NiNode references. Number of node references that follow. The list of NiNode references. @@ -1367,23 +1380,20 @@ The string itself, null terminated (the null terminator is taken into account in the length byte). - - Reference to shape and skin instance. - The shape. - Skinning instance for the shape? + + NiBoneLODController::SkinInfo. Reference to shape and skin instance. + + - - Unknown. - Counts unknown. - - First link is a NiTriShape object. - Second link is a NiSkinInstance object. - + + A set of NiBoneLODController::SkinInfo. + + - - A weighted vertex. + + NiSkinData::BoneVertData. A vertex and its weight. The vertex index, in the mesh. The vertex weight - between 0.0 and 1.0 @@ -1504,13 +1514,15 @@ - + + - Texture description. + NiTexturingProperty::Map. Texture description. Link to the texture image. NiSourceTexture object index. 0=clamp S clamp T, 1=clamp S wrap T, 2=wrap S clamp T, 3=wrap S wrap T @@ -1529,11 +1541,11 @@ The offset from the origin? - - An extended texture description for shader textures. - Is it used? - The texture data. - Map Index + + NiTexturingProperty::ShaderMap. Shader texture description. + + + Unique identifier for the Gamebryo shader system. @@ -1681,7 +1693,7 @@ - Furniture entry points. It specifies the direction(s) from where the actor is able to enter (and leave) the position. + Bethesda Animation. Furniture entry points. It specifies the direction(s) from where the actor is able to enter (and leave) the position. @@ -1690,14 +1702,14 @@ - Animation type used on this position. This specifies the function of this position. + Bethesda Animation. Animation type used on this position. This specifies the function of this position. - Describes a furniture position? + Bethesda Animation. Describes a furniture position? Offset of furniture marker. Furniture marker orientation. Refers to a furnituremarkerxx.nif file. Always seems to be the same as Position Ref 2. @@ -1708,7 +1720,7 @@ - A triangle with extra data used for physics. + Bethesda Havok. A triangle with extra data used for physics. The triangle. Additional havok information on how triangles are welded. This is the triangle's normal. @@ -1736,19 +1748,19 @@ Particle/vertex index matches array index - - Skinning data component. + + NiSkinData::BoneData. Skinning data component. Offset of the skin from this bone in bind position. Translation offset of a bounding sphere holding all vertices. (Note that its a Sphere Containing Axis Aligned Box not a minimum volume Sphere) Radius for bounding sphere holding all vertices. Unknown, always 0? Number of weighted vertices. - The vertex weights. - The vertex weights. + The vertex weights. + The vertex weights. - - ColFilter property for Havok. It contains Layer, Flags and Part Number + + Bethesda Havok. Collision filter info representing Layer, Flags, Part Number, and Group all combined into one uint. The layer the collision belongs to. The layer the collision belongs to. The layer the collision belongs to. @@ -1796,14 +1808,15 @@ + Bethesda Havok. Material wrapper for varying material enums by game. The material of the shape. The material of the shape. The material of the shape. - Havok Information for packed TriStrip shapes. - + Bethesda Havok. Havok Information for packed TriStrip shapes. + The number of vertices that form this sub shape. The material of the subshape. @@ -2093,10 +2106,8 @@ Per-chunk material, used in bhkCompressedMeshShapeData - Material. - Copy of Layer from bhkRigidBody. The value is stored as 32-bit integer. - Always set to 0. It is only remainder of "Layer" 32-bit integer above. - Always set to 0. It is only remainder of "Layer" 32-bit integer above. + + @@ -2254,7 +2265,7 @@ Havok objects that have a position in the world? Link to the body for this collision object. - + Garbage data from memory. @@ -2288,7 +2299,7 @@ Skipped over when writing Collision Response and Callback Delay. Lowers the frequency for processContactCallbacks. A value of 5 means that a callback is raised every 5th frame. Unknown. - Copy of Havok Col Filter + Copy of Havok Filter Garbage data from memory. Matches previous Unused value. @@ -2549,7 +2560,7 @@ The number of strips data objects referenced. Refers to a bunch of NiTriStripsData objects that make up this shape. Number of Havok Layers, equal to Number of strips data objects. - Havok Layers for each strip data. + Havok Layers for each strip data. @@ -2940,11 +2951,11 @@ - Texture transformation controller. The target texture slot should have "Has Texture Transform" enabled. + Used to animate a single member of an NiTextureTransform. Is the target map a shader map? - The target texture slot. - Determines how this controller animates the UV Coordinates. - Link to NiFloatData. + The target texture slot. + Controls which aspect of the texture transform to modify. + @@ -2961,18 +2972,17 @@ - Abstract base class for all NiInterpControllers that use a NiInterpolator to animate their target NiPoint3 value. - Selects which color to control. - Material color controller data object index. Points to NiPosData. + Abstract base class for all NiInterpControllers that use an NiInterpolator to animate their target NiPoint3 value. Time controller for material color. Flags are used for color selection in versions below 10.1.0.0. - Bits 4-5: Target Color (00 = Ambient, 01 = Diffuse, 10 = Specular, 11 = Emissive) + Selects which color to control. + Material color controller data object index. Points to NiPosData. - + Animates the ambient, diffuse and specular colors of an NiLight. @@ -2995,11 +3005,11 @@ Unknown. Number of LODs. Number of node arrays. - A list of node groups (each group a sequence of bones). + A list of node sets (each set a sequence of bones). Number of shape groups. Number of shape groups. - List of shape groups. - List of shape groups. + List of shape groups. + List of shape groups. The size of the second list of shape groups. The size of the second list of shape groups. Group of NiTriShape indices. @@ -4299,7 +4309,7 @@ Number of bones. This optionally links a NiSkinPartition for hardware-acceleration information. Enables Vertex Weights for this NiSkinData. - Contains offset data for each node that this skin is influenced by. + Contains offset data for each node that this skin is influenced by. @@ -4393,7 +4403,7 @@ - Used to enabled double sided faces. Default is 3 (DRAW_BOTH). + Used to enabled double sided faces. Default is 3 (DRAW_BOTH). Property flags: Bit 0: Stencil Enable @@ -4439,7 +4449,7 @@ Texture Filtering mode. Texture Clamp mode. - The type of effect that the texture is used for. + The type of effect that the texture is used for. The method that will be used to generate UV coordinates for the texture effect. Image index. Source texture index. From 40310161510156aa077430897fa0821b87b3452b Mon Sep 17 00:00:00 2001 From: jonwd7 Date: Sat, 16 Sep 2017 04:07:13 -0400 Subject: [PATCH 135/164] NiControllerSequence complete redo, other ctlr changes Corrected naming, filled unknowns, and redid documentation for NiControllerSequence/NiSequence incl the ControlledBlock compound. Added documentation regarding Controller ID and Interpolator ID (previously "Variable 1" and "Variable 2"). Added a few missing controllers. Fixed NiLightColorController to not be related to NiMaterialColorController. Fixed BSPSysMultiTargetEmitterCtlr inheritance. --- nif.xml | 195 +++++++++++++++++++++++++++++++++++++------------------- 1 file changed, 128 insertions(+), 67 deletions(-) diff --git a/nif.xml b/nif.xml index 94f48d3..d7675dd 100644 --- a/nif.xml +++ b/nif.xml @@ -143,6 +143,19 @@ These are like C enums and consist of a list of options. They can appear as parts of compounds or niobjects.--> + + Describes the options for the accum root on NiControllerSequence. + + + + + + + + + + + Describes how the vertex colors are blended with the filtered texture color. @@ -924,7 +937,7 @@ - + Used by NiMaterialColorControllers to select which type of color in the controlled object that will be animated. @@ -932,6 +945,12 @@ + + Used by NiLightColorControllers to select which type of color in the controlled object that will be animated. + + + + Used by NiGeometryData to control the volatility of the mesh. Consistency Type is masked to only the upper 4 bits (0xF000). Dirty mask is the lower 12 (0x0FFF) but only used at runtime. @@ -1404,31 +1423,39 @@ Object reference. - + In a .kf file, this links to a controllable object, via its name (or for version 10.2.0.0 and up, a link and offset to a NiStringPalette that contains the name), and a sequence of interpolators that apply to this controllable object, via links. - Name of a controllable object in another NIF file. - Link to a controller. - Link to an interpolator. - Unknown link. Usually -1. - Unknown. - Unknown. - Idle animations tend to have low values for this, and NIF objects that have high values tend to correspond with the important parts of the animation. - Refers to the NiStringPalette which contains the name of the controlled NIF object. - The name of the animated node. - The name of the animated node. - Offset in the string palette where the name of the controlled node (NiNode, NiTriShape, ...) starts. - Name of the property (NiMaterialProperty, ...), if this controller controls a property. - Name of the property (NiMaterialProperty, ...), if this controller controls a property. - Offset in the string palette where the property (NiMaterialProperty, ...) starts, if this controller controls a property. Otherwise, -1. - Probably the object type name of the controller in the NIF file that is child of the controlled object. - Probably the object type name of the controller in the NIF file that is child of the controlled object. - Apparently the offset in the string palette of some type of controller related to Interpolator (for example, a 'NiTransformInterpolator' will have here a 'NiTransformController', etc.). Sometimes the type of controller that links to the interpolator. Probably it refers to the controller in the NIF file that is child of the controlled object, via its type name. - Some variable string (such as 'SELF_ILLUM', '0-0-TT_TRANSLATE_U', 'tongue_out', etc.). - Some variable string (such as 'SELF_ILLUM', '0-0-TT_TRANSLATE_U', 'tongue_out', etc.). - Offset in the string palette where some variable string starts (such as 'SELF_ILLUM', '0-0-TT_TRANSLATE_U', 'tongue_out', etc.). Usually, -1. - Another variable string, apparently used for particle system controllers. - Another variable string, apparently used for particle system controllers. - Offset in the string palette where some variable string starts (so far only 'EmitterActive' and 'BirthRate' have been observed in official files, used for particle system controllers). Usually, -1. + For Controller ID, NiInterpController::GetCtlrID() virtual function returns a string formatted specifically for the derived type. + For Interpolator ID, NiInterpController::GetInterpolatorID() virtual function returns a string formatted specifically for the derived type. + The string formats are documented on the relevant niobject blocks. + Name of a controllable object in another NIF file. + + + + + + + Idle animations tend to have low values for this, and high values tend to correspond with the important parts of the animations. + + + The name of the animated NiAVObject. + The RTTI type of the NiProperty the controller is attached to, if applicable. + The RTTI type of the NiTimeController. + An ID that can uniquely identify the controller among others of the same type on the same NiObjectNET. + An ID that can uniquely identify the interpolator among others of the same type on the same NiObjectNET. + + Refers to the NiStringPalette which contains the name of the controlled NIF object. + Offset in NiStringPalette to the name of the animated NiAVObject. + Offset in NiStringPalette to the RTTI type of the NiProperty the controller is attached to, if applicable. + Offset in NiStringPalette to the RTTI type of the NiTimeController. + Offset in NiStringPalette to an ID that can uniquely identify the controller among others of the same type on the same NiObjectNET. + Offset in NiStringPalette to an ID that can uniquely identify the interpolator among others of the same type on the same NiObjectNET. + + The name of the animated NiAVObject. + The RTTI type of the NiProperty the controller is attached to, if applicable. + The RTTI type of the NiTimeController. + An ID that can uniquely identify the controller among others of the same type on the same NiObjectNET. + An ID that can uniquely identify the interpolator among others of the same type on the same NiObjectNET. @@ -2870,7 +2897,7 @@ DEPRECATED (10.2), RENAMED (10.2) to NiTransformController A time controller object for animation key frames. - Keyframe controller data index. + @@ -2879,13 +2906,18 @@ A particle system modifier controller. - Refers to modifier object by its name? + NiInterpController::GetCtlrID() string format: + '%s' + Where %s = Value of "Modifier Name" + Used to find the modifier pointer. Particle system emitter controller. - This controller's data - Links to a bool interpolator. Controls emitter's visibility status? + NiInterpController::GetInterpolatorID() string format: + ['BirthRate', 'EmitterActive'] (for "Interpolator" and "Visibility Interpolator" respectively) + + @@ -2894,12 +2926,12 @@ A particle system modifier controller that animates active/inactive state for particles. - This controller's data. + A particle system modifier controller that animates a floating point value for particles. - This controller's data. + @@ -2947,15 +2979,18 @@ Animates the alpha value of a property using an interpolator. - Alpha controller data index. + Used to animate a single member of an NiTextureTransform. + NiInterpController::GetCtlrID() string formats: + ['%1-%2-TT_TRANSLATE_U', '%1-%2-TT_TRANSLATE_V', '%1-%2-TT_ROTATE', '%1-%2-TT_SCALE_U', '%1-%2-TT_SCALE_V'] + (Depending on "Operation" enumeration, %1 = Value of "Shader Map", Value of %2 = "Texture Slot") Is the target map a shader map? The target texture slot. Controls which aspect of the texture transform to modify. - + @@ -2968,7 +3003,7 @@ Animates the visibility of an NiAVObject. - Visibility controller data object index. + @@ -2978,25 +3013,53 @@ Time controller for material color. Flags are used for color selection in versions below 10.1.0.0. Bits 4-5: Target Color (00 = Ambient, 01 = Diffuse, 10 = Specular, 11 = Emissive) - Selects which color to control. - Material color controller data object index. Points to NiPosData. + NiInterpController::GetCtlrID() string formats: + ['AMB', 'DIFF', 'SPEC', 'SELF_ILLUM'] (Depending on "Target Color") + Selects which color to control. + - + Animates the ambient, diffuse and specular colors of an NiLight. + NiInterpController::GetCtlrID() string formats: + ['Diffuse', 'Ambient'] (Depending on "Target Color") + + Abstract base class for all extra data controllers. + NiInterpController::GetCtlrID() string format: + '%s' + Where %s = Value of "Extra Data Name" + Animates an NiFloatExtraData object attached to an NiAVObject. - Refers to a NiFloatExtraData name. + NiInterpController::GetCtlrID() string format is same as parent. Number of extra bytes. Unknown. Unknown. + + + + + Animates an NiFloatsExtraData object attached to an NiAVObject. + NiInterpController::GetCtlrID() string format: + '%s[%d]' + Where %s = Value of "Extra Data Name", %d = Value of "Floats Extra Data Index" + + + + + + Animates an NiFloatsExtraData object attached to an NiAVObject. + NiInterpController::GetCtlrID() string format: + '%s[%d]' + Where %s = Value of "Extra Data Name", %d = Value of "Floats Extra Data Index" + @@ -3445,35 +3508,35 @@ - Root node used in some Empire Earth II .kf files (version 4.2.2.0). - Name of this object. This is also the name of the action associated with this file. For instance, if the original NIF file is called "demon.nif" and this animation file contains an attack sequence, then the file would be called "demon_attack1.kf" and this field would contain the string "attack1". - Name of following referenced NiTextKeyExtraData class. - Link to NiTextKeyExtraData. - Unknown - Unknown - Number of controlled objects. - Unknown. - Refers to controlled objects. + Root node in NetImmerse .kf files (until version 10.0). + The sequence name by which the animation system finds and manages this sequence. + The name of the NiAVObject serving as the accumulation root. This is where all accumulated translations, scales, and rotations are applied. + + Divinity 2 + Divinity 2 + + + - Root node in .kf files (version 10.0.1.0 and up). - Weight/priority of animation? - Link to NiTextKeyExtraData. Replaces the other Text Keys field in versions 10.1.0.106 and up. - Anim cycle type? Is part of "Flags" in other objects? - Unknown. - The animation frequency. - The controller sequence start time? - Unknown. - The controller sequence stop time? - Unknown. - Refers to NiControllerManager which references this object, if any. - Name of target node Controller acts on. - Refers to NiStringPalette. - Unknown - Number of anim notes objects. - Indices of anim notes objects. - Unknown, found in some Lazeska and Krazy Rain .KFs (seems to be 64 when present). + Root node in Gamebryo .kf files (version 10.0.1.0 and up). + The weight of a sequence describes how it blends with other sequences at the same priority. + + + + + + + + The owner of this sequence. + The name of the NiAVObject serving as the accumulation root. This is where all accumulated translations, scales, and rotations are applied. + + + + + + @@ -5740,10 +5803,8 @@ - + Particle system (multi?) emitter controller. - This controller's data - Links to a bool interpolator. Controls emitter's visibility status? From bb01c192b7cd300daf5241851befd7c8c2872e1d Mon Sep 17 00:00:00 2001 From: jonwd7 Date: Tue, 19 Sep 2017 04:42:13 -0400 Subject: [PATCH 136/164] NiDynamicEffect changes Fixed the nodes list to be more correct. Documented NiLight changes in FO4. --- nif.xml | 20 +++++++++++--------- 1 file changed, 11 insertions(+), 9 deletions(-) diff --git a/nif.xml b/nif.xml index d7675dd..dfab753 100644 --- a/nif.xml +++ b/nif.xml @@ -2783,19 +2783,21 @@ Abstract base class for dynamic effects such as NiLights or projected texture effects. - Turns effect on and off? Switches list to list of unaffected nodes? - The number of affected nodes referenced. - This is probably the list of affected nodes. For some reason i do not know the max exporter seems to write pointers instead of links. But it doesn't matter because at least in version 4.0.0.2 the list is automagically updated by the engine during the load stage. - The number of affected nodes referenced. - The list of affected nodes? + If true, then the dynamic effect is applied to affected nodes during rendering. + + If a node appears in this list, then its entire subtree will be affected by the effect. + As of 4.0 the pointer hash is no longer stored alongside each NiObject on disk, yet this node list still refers to the pointer hashes. Cannot leave the type as Ptr because the link will be invalid. + + If a node appears in this list, then its entire subtree will be affected by the effect. Abstract base class that represents light sources in a scene graph. - Dimmer. - Ambient color. - Diffuse color. - Specular color. + For Bethesda Stream 130 (FO4), NiLight now directly inherits from NiAVObject. + Scales the overall brightness of all light components. + + + From 5749bcff32480acd3029032d50e228d0606ec627 Mon Sep 17 00:00:00 2001 From: jonwd7 Date: Tue, 19 Sep 2017 04:45:54 -0400 Subject: [PATCH 137/164] NiSourceTexture changes Created a compound for NiTexture::FormatPrefs to mimic Gamebryo and in order to more correctly document the intent of the FormatPrefs. --- nif.xml | 19 ++++++++++++------- 1 file changed, 12 insertions(+), 7 deletions(-) diff --git a/nif.xml b/nif.xml index dfab753..51ab0ab 100644 --- a/nif.xml +++ b/nif.xml @@ -4419,6 +4419,13 @@ A texture. + + NiTexture::FormatPrefs. These preferences are a request to the renderer to use a format the most closely matches the settings and may be ignored. + Requests the way the image will be stored. + Requests if mipmaps are used or not. + Requests no alpha, 1-bit alpha, or + + Describes texture source and properties. Is the texture external? @@ -4426,13 +4433,11 @@ Unknown. Unknown. Seems to be set if Pixel Data is present? The original source filename of the image embedded by the referred NiPixelData object. - Pixel data object index. NiPixelData or NiPersistentSrcTextureRendererData - Specifies the way the image will be stored. - Specifies whether mip maps are used. - Note: the NiTriShape linked to this object must have a NiAlphaProperty in its list of properties to enable material and/or texture transparency. - Is Static? - Load direct to renderer - Render data is persistant + NiPixelData or NiPersistentSrcTextureRendererData + A set of preferences for the texture format. They are a request only and the renderer may ignore them. + If set, then the application cannot assume that any dynamic changes to the pixel data will show in the rendered image. + A hint to the renderer that the texture can be loaded directly from a texture file into a renderer-specific resource, bypassing the NiPixelData object. + Pixel Data is NiPersistentSrcTextureRendererData instead of NiPixelData. From e75f2dec029db09892234196d430d8a7bcfdf721 Mon Sep 17 00:00:00 2001 From: jonwd7 Date: Sat, 23 Sep 2017 10:03:51 -0400 Subject: [PATCH 138/164] Havok type changes Prefix actual Havok lib types with 'hk', remove 'hk' from TriangleData as it is a Bethesda type. --- nif.xml | 81 ++++++++++++++++++++++++++++++--------------------------- 1 file changed, 42 insertions(+), 39 deletions(-) diff --git a/nif.xml b/nif.xml index 51ab0ab..0795fce 100644 --- a/nif.xml +++ b/nif.xml @@ -816,14 +816,13 @@ - - Bethesda Havok. - The motion system. 4 (Box) is used for everything movable. 7 (Keyframed) is used on statics and animated stuff. + + Bethesda Havok, based on hkpMotion::MotionType. Motion type of a rigid body determines what happens when it is simulated. - - - + + + @@ -838,34 +837,38 @@ - - Bethesda Havok. - A list of possible solver deactivation settings. This value defines how the - solver deactivates objects. The solver works on a per object basis. - Note: Solver deactivation does not save CPU, but reduces creeping of - movable objects in a pile quite dramatically. + + Bethesda Havok, based on hkpRigidBodyCinfo::SolverDeactivation. + A list of possible solver deactivation settings. This value defines how aggressively the solver deactivates objects. + Note: Solver deactivation does not save CPU, but reduces creeping of movable objects in a pile quite dramatically. - + - - - + + + - - Bethesda Havok. - The motion type. Determines quality of motion? + + Bethesda Havok, based on hkpCollidableQualityType. Describes the priority and quality of collisions for a body, + e.g. you may expect critical game play objects to have solid high-priority collisions so that they never sink into ground, + or may allow penetrations for visual debris objects. + Notes: + - Fixed and keyframed objects cannot interact with each other. + - Debris can interpenetrate but still responds to Bullet hits. + - Critical objects are forced to not interpenetrate. + - Moving objects can interpenetrate slightly with other Moving or Debris objects but nothing else. - - - - - - + + + + + + - + @@ -1299,7 +1302,7 @@ The z-coordinate. - + A quaternion as it appears in the havok objects. The x-coordinate. The y-coordinate. @@ -1746,7 +1749,7 @@ Unknown/unused in nif? - + Bethesda Havok. A triangle with extra data used for physics. The triangle. Additional havok information on how triangles are welded. @@ -2089,7 +2092,7 @@ Transformation data for the bone at this index in bhkPoseArray. - + @@ -2149,7 +2152,7 @@ A set of transformation data: translation and rotation A vector that moves the chunk by the specified amount. W is not used. - Rotation. Reference point for rotation is bhkRigidBody translation. + Rotation. Reference point for rotation is bhkRigidBody translation. @@ -2334,7 +2337,7 @@ A vector that moves the body by the specified amount. Only enabled in bhkRigidBodyT objects. - The rotation Yaw/Pitch/Roll to apply to the body. Only enabled in bhkRigidBodyT objects. + The rotation Yaw/Pitch/Roll to apply to the body. Only enabled in bhkRigidBodyT objects. Linear velocity. Angular velocity. Defines how the mass is distributed among the body. @@ -2358,11 +2361,11 @@ This is a hint to the engine to see how much CPU the engine should invest to keep this object from penetrating. A good choice is 5% - 20% of the smallest diameter of the object. - Motion system? Overrides Quality when on Keyframed? - The initial deactivator type of the body. + Motion system? Overrides Quality when on Keyframed? + The initial deactivator type of the body. - Usually set to 1 for fixed objects, or set to 2 for moving ones. Seems to always be same as Unknown Byte 1. - The motion type. Determines quality of motion? + How aggressively the engine will try to zero the velocity for slow objects. This does not save CPU. + The type of interaction with other objects. Unknown. Unknown. Skyrim only. The number of constraints this object is bound to. @@ -3235,9 +3238,9 @@ NiTriStripsData for havok data? - Number of triangles? - The physics triangles? - Number of vertices. + + + Unknown. The vertices? Number of subparts. From 30e10f61529d4d3800a0d97f5144b67a8a4d641f Mon Sep 17 00:00:00 2001 From: jonwd7 Date: Wed, 4 Oct 2017 17:06:35 -0400 Subject: [PATCH 139/164] Major cleanup Removal of extraneous or inaccurate "Unknown" descriptions, removal of unhelpful, repetitive and unnecessary descriptions. Clarification of many descriptions. Clarification of some names. Focus on more useful descriptions for particle system blocks. --- nif.xml | 760 ++++++++++++++++++++++++++++---------------------------- 1 file changed, 377 insertions(+), 383 deletions(-) diff --git a/nif.xml b/nif.xml index 0795fce..2f22a6a 100644 --- a/nif.xml +++ b/nif.xml @@ -115,8 +115,8 @@ A variable length string that ends with a newline character (0x0A). The string starts as follows depending on the version: - Version <= 10.0.1.0: 'NetImmerse File Format' - Version >= 10.1.0.0: 'Gamebryo File Format' + Version <= 10.0.1.0: 'NetImmerse File Format' + Version >= 10.1.0.0: 'Gamebryo File Format' @@ -830,8 +830,9 @@ - - Bethesda Havok. + + Bethesda Havok, based on hkpRigidBodyDeactivator::DeactivatorType. + Deactivator Type determines which mechanism Havok will use to classify the body as deactivated. @@ -1471,7 +1472,7 @@ The NIF file header. - 'NetImmerse File Format x.x.x.x' (versions <= 10.0.1.2) or 'Gamebryo File Format x.x.x.x' (versions >= 10.1.0.0), with x.x.x.x the version written out. Ends with a newline character (0x0A). + 'NetImmerse File Format x.x.x.x' (versions <= 10.0.1.2) or 'Gamebryo File Format x.x.x.x' (versions >= 10.1.0.0), with x.x.x.x the version written out. Ends with a newline character (0x0A). The NIF version, in hexadecimal notation: 0x04000002, 0x0401000C, 0x04020002, 0x04020100, 0x04020200, 0x0A000100, 0x0A010000, 0x0A020000, 0x14000004, ... Determines the endianness of the data in the file. @@ -1513,7 +1514,7 @@ The key value. Key forward tangent. The key backward tangent. - The key's TBC. + The TBC of the key. @@ -1560,15 +1561,16 @@ Texture mode flags; clamp and filter mode stored in upper byte with 0xYZ00 = clamp mode Y, filter mode Z. The texture coordinate set in NiGeometryData that this texture slot will use. - PS2 only; from the Freedom Force docs, "L values can range from 0 to 3 and are used to specify how fast a texture gets blurry". - PS2 only; from the Freedom Force docs, "The K value is used as an offset into the mipmap levels and can range from -2047 to 2047. Positive values push the mipmap towards being blurry and negative values make the mipmap sharper." -75 for most v4.0.0.2 meshes. + L can range from 0 to 3 and are used to specify how fast a texture gets blurry. + K is used as an offset into the mipmap levels and can range from -2047 to 2047. Positive values push the mipmap towards being blurry and negative values make the mipmap sharper. Unknown, 0 or 0x0101? - Determines whether or not the texture's coordinates are transformed. - The amount to translate the texture coordinates in each direction? - The number of times the texture is tiled in each direction? - 2D Rotation of texture image around third W axis after U and V. + + Whether or not the texture coordinates are transformed. + The UV translation. + The UV scale. + The W axis rotation in texture space. Depending on the source, scaling can occur before or after rotation. - The offset from the origin? + The origin around which the texture rotates. @@ -1657,7 +1659,7 @@ The triangles. The triangles. Do we have bone indices? - Bone indices, they index into 'Bones'. + Bone indices, they index into 'Bones'. Unknown @@ -1771,7 +1773,7 @@ particle array entry Particle velocity Unknown - The particle's age. + The particle age. Maximum age of the particle. Timestamp of the last update. Unknown short @@ -1800,9 +1802,9 @@ Bit 6: turns collision off (not used for Layer BIPED). Bit 5: sets the SCALED property. - PART NUMBER is stored in bits 0-4. Used only when Layer is set to BIPED. + PART NUMBER is stored in bits 0-4. Used only when Layer is set to BIPED. - Part Numbers for Oblivion, Fallout 3, Skyrim: + Part Numbers for Oblivion, Fallout 3, Skyrim: 0 - OTHER 1 - HEAD 2 - BODY @@ -1834,7 +1836,7 @@ 28 - ADDONLEG 29-31 - NULL - Unknown. + @@ -1865,8 +1867,8 @@ Minimum motor force Maximum motor force Relative stiffness - Unknown - Unknown + + Is Motor enabled @@ -2023,9 +2025,9 @@ - Pivot A. - Pivot B. - Length. + + + @@ -2043,9 +2045,9 @@ Box Bounding Volume - Center - Axis - Extent + + + @@ -2063,21 +2065,21 @@ Type of collision data. - Sphere - Box - Capsule - Union - Half Space + + + + + - Number of Bounding Volumes. - Bounding Volume. + + - Interpolator - Weight + + @@ -2104,7 +2106,7 @@ Array of Vectors for Decal placement in BSDecalPlacementVectorExtraData. - Number of sets + Vector XYZ coords Vector Normals @@ -2130,8 +2132,8 @@ Stores Bone Level of Detail info in a BSBoneLODExtraData - Distance to cull? - The bones name + + @@ -2142,11 +2144,11 @@ Triangle indices used in pair with "Big Verts" in a bhkCompressedMeshShapeData. - - - + + + Always 0? - + @@ -2157,18 +2159,18 @@ Defines subshape chunks in bhkCompressedMeshShapeData - Local translation + Index of material in bhkCompressedMeshShapeData::Chunk Materials Always 65535? Index of transformation in bhkCompressedMeshShapeData::Chunk Transforms - Number of compressed vertices - Compressed vertices - - - Number of compressed strips - Compressed strips - Number of - Compressed + + + + + + + + @@ -2262,13 +2264,13 @@ Particle system collider. - Defines amount of bounce the collider object has. - Unknown. - Kill particles on impact if set to yes. - Link to NiPSysSpawnModifier object? + Amount of bounce for the collider. + Spawn particles on impact? + Kill particles on impact? + Spawner to use for the collider. Link to parent. The next collider. - Links to a NiNode that will define where in object space the collider is located/oriented. + The object whose position and orientation are the basis of the collider. @@ -2323,11 +2325,10 @@ This is the default body type for all "normal" usable and static world objects. The "T" suffix marks this body as active for translation and rotation, a normal bhkRigidBody ignores those - properties. Because the properties are equal, a bhkRigidBody may be renamed - into a bhkRigidBodyT and vice-versa. - The collision response. See hkResponseType for hkpWorld default implementations. + properties. Because the properties are equal, a bhkRigidBody may be renamed into a bhkRigidBodyT and vice-versa. + How the body reacts to collisions. See hkResponseType for hkpWorld default implementations. Skipped over when writing Collision Response and Callback Delay. - Lowers the frequency for processContactCallbacks. A value of 5 means that a callback is raised every 5th frame. + Lowers the frequency for processContactCallbacks. A value of 5 means that a callback is raised every 5th frame. The default is once every 65535 frames. Unknown. Copy of Havok Filter Garbage data from memory. Matches previous Unused value. @@ -2340,19 +2341,18 @@ The rotation Yaw/Pitch/Roll to apply to the body. Only enabled in bhkRigidBodyT objects. Linear velocity. Angular velocity. - Defines how the mass is distributed among the body. - This seems to be used to relocate the object's center of mass. Useful for balancing objects in contraints. + Defines how the mass is distributed among the body, i.e. how difficult it is to rotate around any given axis. + The body's center of mass. The body's mass in kg. A mass of zero represents an immovable object. - Damping value for linear movement. A value that is too small fixes the object in place. - Damping value for angular movement. + Reduces the movement of the body over time. A value of 0.1 will remove 10% of the linear velocity every second. + Reduces the movement of the body over time. A value of 0.05 will remove 5% of the angular velocity every second. - The body's friction. + How smooth its surfaces is and how easily it will slide along other bodies. - The body's restitution (elasticity). + How "bouncy" the body is, i.e. how much energy it has after colliding. Less than 1.0 loses energy, greater than 1.0 gains energy. If the restitution is not 0.0 the object will need extra CPU for all new collisions. - Try to set restitution to 0 for maximum performance (e.g. collapsing buildings) Maximal linear velocity. Maximal angular velocity. @@ -2368,8 +2368,8 @@ The type of interaction with other objects. Unknown. Unknown. Skyrim only. - The number of constraints this object is bound to. - Unknown. + + 1 = respond to wind 1 = respond to wind @@ -2568,8 +2568,8 @@ A shape constructed from strips data. - Number of subparts. - The subparts. + + Looks like a memory pointer and may be garbage. @@ -2577,7 +2577,7 @@ Same as radius Same as scale. - A link to the shape's NiTriStripsData. + @@ -2609,20 +2609,20 @@ Uses NiFloatKeys to animate a float value over time. - Value when posed? At time 0? - Float data? + Value if lacking NiFloatData. + An interpolator for transform keyframes. - Refers to NiTransformData. + Uses NiPosKeys to animate an NiPoint3 value over time. - Value when posed? Value at time 0? - Reference to NiPosData. + Value if lacking NiPosData. + @@ -2638,18 +2638,18 @@ Used to make an object follow a predefined spline path. - - + -1 = Negative, 1 = Positive + Max angle in radians. - Unknown. Zero. - Refers to NiPosData. - Refers to NiFloatData. + 0, 1, or 2 representing X, Y, or Z. + + Uses NiBoolKeys to animate a bool value over time. - Value when posed? At time 0? - Refers to a NiBoolData object. + Value if lacking NiBoolData. + @@ -2690,8 +2690,8 @@ Abstract base class for interpolators storing data via a B-spline. Animation start time. Animation stop time. - Refers to NiBSplineData. - Refers to NiBSPlineBasisData. + + @@ -2719,10 +2719,10 @@ Collision box. - Propagation Mode - Collision Mode + + Use Alternate Bounding Volume. - Collision data. + @@ -2746,7 +2746,7 @@ Set to 1 for most objects, and to 41 for animated objects (ANIM_STATIC). Bits: 0=Active 2=Notify 3=Set Local 6=Reset. - Links to the collision object data + @@ -2769,19 +2769,19 @@ Abstract audio-visual base class from which all of Gamebryo's scene graph objects inherit. - Basic flags for AV objects. + Basic flags for AV objects. For Bethesda streams above 26 only. Basic flags for AV objects; commonly 0x000C or 0x000A. The translation vector. The rotation part of the transformation matrix. Scaling part (only uniform scaling is supported). Unknown function. Always seems to be (0, 0, 0) - The number of property objects referenced. - List of node properties. + + All rendering properties attached to this object. Always 2,0,2,0. 0 or 1. - Do we have a bounding box? - The bounding box. - Refers to NiCollisionObject, which is usually a bounding box or other simple collision shape. In Oblivion this links the Havok objects. + + + @@ -2814,10 +2814,10 @@ Abstract base class for all particle system modifiers. - The object name. + Used to locate the modifier. Modifier ID in the particle modifier chain (always a multiple of 1000)? NiParticleSystem parent of this modifier. - Whether the modifier is currently in effect? Usually true. + Whether or not the modifier is active. @@ -2874,14 +2874,14 @@ DEPRECATED (20.5), replaced by NiMorphMeshModifier. Time controller for geometry morphing. - Unknown. + 1 = UPDATE NORMALS Unknown. Geometry morphing data index. - The number of interpolator objects. - List of interpolators. - Weighted Interpolators? - A count. + + + + Unknown. @@ -2896,7 +2896,7 @@ Uses a single NiInterpolator to animate its target value. - Link to interpolator. + @@ -2977,7 +2977,7 @@ Time between two flips. delta = (start_time - stop_time) / sources.num_indices - The number of source objects. + The texture sources. The image sources @@ -2991,7 +2991,7 @@ Used to animate a single member of an NiTextureTransform. NiInterpController::GetCtlrID() string formats: ['%1-%2-TT_TRANSLATE_U', '%1-%2-TT_TRANSLATE_V', '%1-%2-TT_ROTATE', '%1-%2-TT_SCALE_U', '%1-%2-TT_SCALE_V'] - (Depending on "Operation" enumeration, %1 = Value of "Shader Map", Value of %2 = "Texture Slot") + (Depending on "Operation" enumeration, %1 = Value of "Shader Map", %2 = Value of "Texture Slot") Is the target map a shader map? The target texture slot. Controls which aspect of the texture transform to modify. @@ -3242,7 +3242,7 @@ Unknown. - The vertices? + Number of subparts. The subparts. @@ -3292,7 +3292,7 @@ Generic rotating particles data object. The maximum number of particles (matches the number of vertices). - The particles' size. + The particles' size. Is the particle size array present? The individual particel sizes. The number of active particles at the time the system was saved. This is also the number of valid entries in the following arrays. @@ -3506,10 +3506,10 @@ Controls animation sequences on a specific branch of the scene graph. - Designates whether animation sequences are cumulative? - The number of controller sequence objects. - Refers to a list of NiControllerSequence object. - Refers to a NiDefaultAVObjectPalette. + Whether transformation accumulation is enabled. If accumulation is not enabled, the manager will treat all sequence data on the accumulation root as absolute data instead of relative delta values. + + + @@ -3561,7 +3561,7 @@ NiDitherProperty allows the application to turn the dithering of interpolated colors and fog values on and off. - 1's Bit: Enable dithering + 1 = Enable dithering @@ -3588,13 +3588,13 @@ NiFogProperty allows the application to enable, disable and control the appearance of fog. - 1's bit: Enables Fog - 2's bit: Sets Fog Function to FOG_RANGE_SQ - 4's bit: Sets Fog Function to FOG_VERTEX_ALPHA + Bit 0: Enables Fog + Bit 1: Sets Fog Function to FOG_RANGE_SQ + Bit 2: Sets Fog Function to FOG_VERTEX_ALPHA - If 2's and 4's bit are not set, but fog is enabled, Fog function is FOG_Z_LINEAR. + If Bit 1 and Bit 2 are not set, but fog is enabled, Fog function is FOG_Z_LINEAR. - The thickness of the fog? Default is 1.0 + Depth of the fog in normalized units. 1.0 = begins at near plane. 0.5 = begins halfway between the near and far planes. The color of the fog. @@ -3602,8 +3602,8 @@ LEGACY (pre-10.1) particle modifier. Applies a gravitational field on the particles. Unknown. The strength/force of this gravity. - The force field's type. - The position of the mass point relative to the particle system. (TODO: check for versions <= 3.1) + The force field type. + The position of the mass point relative to the particle system. The direction of the applied acceleration. @@ -3684,8 +3684,8 @@ How much the material reflects diffuse light. How much light the material reflects in a specular manner. How much light the material emits. - The material's glossiness. - The material transparency (1=non-transparant). Refer to a NiAlphaProperty object in this material's parent NiTriShape object, when alpha is not 1. + The material glossiness. + The material transparency (1=non-transparant). Refer to a NiAlphaProperty object in this material's parent NiTriShape object, when alpha is not 1. Unknown @@ -3778,12 +3778,10 @@ Level of detail selector. Links to different levels of detail of the same model, used to switch a geometry at a specified distance. - - Point to calculate distance from for switching? - Number of levels of detail. - The ranges of distance that each level of detail applies in. - - Refers to LOD level information, either distance or screen size based. + + + + @@ -3796,19 +3794,19 @@ LEGACY (pre-10.1) particle modifier. - Unknown. - Unknown. - Unknown. - Unknown. - Unknown. - Unknown. - The position of the mass point relative to the particle system? - The direction of the applied acceleration? + + + + + + + The position of the mass point relative to the particle system? + The direction of the applied acceleration? LEGACY (pre-10.1) particle modifier. - Color data index. + @@ -3819,15 +3817,15 @@ LEGACY (pre-10.1) particle modifier. - The number of particle mesh references that follow. - Links to nodes of particle meshes? + + LEGACY (pre-10.1) particle modifier. - Unknown. - Unknown. - Unknown. + + + @@ -3875,9 +3873,9 @@ 1.6 : horizontal 3.1416 : down - emitter's vertical opening angle [radians] + emitter's vertical opening angle [radians] horizontal emit direction - emitter's horizontal opening angle + emitter's horizontal opening angle Unknown. Unknown. Particle size @@ -3899,7 +3897,7 @@ Particle velocity Unknown - The particle's age. + The particle's age. Timestamp of the last update. Unknown short @@ -3962,7 +3960,7 @@ Bits per pixel, 0 (Compressed), 8, 24 or 32. - Flags + Channel Data @@ -4017,111 +4015,110 @@ A point light. - Constant Attenuation - Linear Attenuation - Quadratic Attenuation (see glLight) + + + Wrapper for position animation keys. - The position keys. + Particle modifier that controls and updates the age of particles in the system. - Unknown. - Link to NiPSysSpawnModifier object? + Should the particles spawn on death? + The spawner to use on death. Particle modifier that applies an explosive force to particles. - Link to a NiNode for bomb to function. - Orientation of bomb object. - Falloff rate of the bomb object. - DeltaV / Strength? - Decay type - Shape/symmetry of the bomb object. + The object whose position and orientation are the basis of the force. + The local direction of the force. + How the bomb force will decrease with distance. + The acceleration the bomb will apply to particles. + + Particle modifier that creates and updates bound volumes. - Unknown. + Optimize by only computing the bound of (1 / Update Skip) of the total particles each frame. Particle emitter that uses points within a defined Box shape to emit from. - Defines the Width of the box area. - Defines the Height of the box area. - Defines the Depth of the box area. + + + Particle modifier that adds a defined shape to act as a collision object for particles to interact with. - Link to a NiPSysPlanarCollider or NiPSysSphericalCollider. + Particle modifier that adds keyframe data to modify color/alpha values of particles over time. - Refers to NiColorData object. + Particle emitter that uses points within a defined Cylinder shape to emit from. - Radius of the cylinder shape. - Height of the cylinders shape. + + Particle modifier that applies a linear drag force to particles. - Parent reference. - The drag axis. - Drag percentage. - The range. - The range falloff. + The object whose position and orientation are the basis of the force. + The local direction of the force. + The amount of drag to apply to particles. + The distance up to which particles are fully affected. + The distance at which particles cease to be affected. DEPRECATED (10.2). Particle system emitter controller data. - Unknown. - Number of keys. - Unknown. + + + Particle modifier that applies a gravitational force to particles. - Refers to a NiNode for gravity location. - Orientation of gravity. - Falloff range. - The strength of gravity. - Planar or Spherical type + The object whose position and orientation are the basis of the force. + The local direction of the force. + How the force diminishes by distance. + The acceleration of the force. + The type of gravitational force. Adds a degree of randomness. - Range for turbulence. + Scale for turbulence. - Particle modifier that controls the time it takes to grow a particle from Size=0 to the specified Size in the emitter, and then back to 0. This modifer has no control over alpha settings. - Time in seconds to fade in. - Unknown. - Time in seconds to fade out. - Unknown. - Unknown + Particle modifier that controls the time it takes to grow and shrink a particle. + The time taken to grow from 0 to their specified size. + Specifies the particle generation to which the grow effect should be applied. This is usually generation 0, so that newly created particles will grow. + The time taken to shrink from their specified size to 0. + Specifies the particle generation to which the shrink effect should be applied. This is usually the highest supported generation for the particle system. + A multiplier on the base particle scale. Particle emitter that uses points on a specified mesh to emit from. - The number of references to emitter meshes that follow. - - Links to meshes used for emitting. - The way the particles get their initial direction and speed. - The parts of the mesh that the particles emit from. - The emission axis. + + The meshes which are emitted from. + The method by which the initial particle velocity will be computed. + The manner in which particles are emitted from the Emitter Meshes. + The emission axis if VELOCITY_USE_DIRECTION. Particle modifier that updates mesh particles using the age of each particle. - The number of object references that follow. - Group of target NiNodes or NiTriShapes? + + @@ -4132,9 +4129,9 @@ - Unknown - Group of target NiNodes? - Unknown + + + @@ -4149,22 +4146,22 @@ Random chance to start on a different frame? Ending frame/position on atlas Frame to start looping - - Unknown - Unknown + + + Particle Collider object which particles will interact with. - Defines the width of the plane. - Defines the height of the plane. - Defines Orientation. - Defines Orientation. + Width of the plane along the X Axis. + Height of the plane along the Y Axis. + Axis defining a plane, relative to Collider Object. + Axis defining a plane, relative to Collider Object. Particle Collider object which particles will interact with. - Defines the radius of the sphere object. + @@ -4177,31 +4174,31 @@ Particle modifier that adds rotations to particles. - The initial speed of rotation. - Adds a ranged randomness to rotation speed. - Sets the intial angle for particles to be birthed in. - Adds a random range to Initial angle. - Unknown - Unknown. - Unknown. + Initial Rotation Speed in radians per second. + Distributes rotation speed over the range [Speed - Variation, Speed + Variation]. + Initial Rotation Angle in radians. + Distributes rotation angle over the range [Angle - Variation, Angle + Variation]. + Randomly negate the initial rotation speed? + Assign a random axis to new particles? + Initial rotation axis. Particle modifier that spawns additional copies of a particle. - Unknown. - Unknown. - Unknown. - Unknown. - Unknown. - Unknown. - Unknown. - Unknown. - Unknown + Number of allowed generations for spawning. Particles whose generations are >= will not be spawned. + The likelihood of a particular particle being spawned. Must be between 0.0 and 1.0. + The minimum particles to spawn for any given original particle. + The maximum particles to spawn for any given original particle. + WorldShift + How much the spawned particle speed can vary. + How much the spawned particle direction can vary. + Lifespan assigned to spawned particles. + The amount the lifespan can vary. Particle emitter that uses points within a sphere shape to emit from. - The radius of the sphere shape + @@ -4210,32 +4207,32 @@ Base for all force field particle modifiers. - Force Field Object - Magnitude of the force - Controls how quick the field diminishes - Use maximum distance - Maximum distance + The object whose position and orientation are the basis of the field. + Magnitude of the force. + How the magnitude diminishes with distance from the Field Object. + Whether or not to use a distance from the Field Object after which there is no effect. + Maximum distance after which there is no effect. Particle system modifier, implements a vortex field force for particles. - Direction of the particle velocity + Direction of the vortex field in Field Object's space. Particle system modifier, implements a gravity field force for particles. - Direction of the particle velocity + Direction of the gravity field in Field Object's space. Particle system modifier, implements a drag field force for particles. - Whether to use the direction field? - Direction of the particle velocity + Whether or not the drag force applies only in the direction specified. + Direction in which the force applies if Use Direction is true. Particle system modifier, implements a turbulence field force for particles. - Frequency of the update. + How many turbulence updates per second. @@ -4246,8 +4243,8 @@ - - Unknown + + @@ -4331,18 +4328,18 @@ Particle system modifier, updates the particle velocity to simulate the effects of point gravity. - Unknown Enums? + If zero, no attenuation. - + Abstract class used for different types of LOD selections. NiRangeLODData controls switching LOD levels based on Z depth from the camera to the NiLODNode. - ? - Number of levels of detail. - The ranges of distance that each level of detail applies in. + + + @@ -4365,9 +4362,7 @@ Determines whether flat shading or smooth shading is used on a shape. - 1's Bit: Enable smooth phong shading on this shape. - - If 1's bit is not set, hard-edged flat shading will be used on this shape. + Bit 0: Enable smooth phong shading on this shape. Otherwise, hard-edged flat shading will be used on this shape. @@ -4403,7 +4398,7 @@ Skinning data, optimized for hardware skinning. The mesh is partitioned in submeshes such that each vertex of a submesh is influenced only by a limited and fixed number of bones. - Unknown. + Skin partition objects. @@ -4445,7 +4440,7 @@ Gives specularity to a shape. Flags 0x0001. - 1's Bit = Enable specular lighting on this shape. + Bit 0 = Enable specular lighting on this shape. @@ -4471,7 +4466,7 @@ Property flags. Enables or disables the stencil test. Selects the compare mode function (see: glStencilFunc). - Unknown. Default is 0. + A bit mask. The default is 0xffffffff. @@ -4486,7 +4481,7 @@ Bits 10-11: Draw Mode Bits 12-14: Stencil Function - Unknown. Default is 0. + A bit mask. The default is 0xffffffff. @@ -4576,9 +4571,9 @@ The glowing texture. Do we have a bump map texture? The bump map texture. - Unknown. - Unknown. - Unknown. + + + Do we have a normal texture? Normal texture. @@ -4724,18 +4719,12 @@ Property of vertex colors. This object is referred to by the root object of the NIF file whenever some NiTriShapeData object has vertex colors with non-default settings; if not present, vertex colors have vertex_mode=2 and lighting_mode=1. - Property flags. Appears to be unused until 20.1.0.3. - Bits 0-2: Unknown - Bit 3: Lighting Mode? - Bits 4-5: Vertex Mode? + Bit 3: Lighting Mode + Bits 4-5: Vertex Mode - - Determines how vertex and material colors are mixed. - related gl function: glColorMaterial - In Flags from version 20.1.0.3 onwards. - - The light mode. In Flags from 20.1.0.3 on. + In Flags from 20.1.0.3 on. + In Flags from 20.1.0.3 on. @@ -4750,8 +4739,8 @@ DEPRECATED (10.2), REMOVED (?), Replaced by NiBoolData. Visibility data for a controller. - The number of visibility keys that follow. - The visibility keys. + + @@ -5167,10 +5156,10 @@ Two dimensional screen elements. - Number of vertices in this polygon - Vertex Offset - Number of faces in this polygon - Triangle offset in shape + + Offset in vertex array. + + Offset in indices array. @@ -5194,9 +5183,9 @@ NiRoomGroup represents a set of connected rooms i.e. a game level. - Outer Shell Geometry Node? - Number of rooms in this group - Rooms associated with this group. + Object that represents the room group as seen from the outside. + + @@ -5216,9 +5205,9 @@ They represent flat polygonal regions through which a part of a scene graph can be viewed. Unused in 20.x, possibly also 10.x. - Number of vertices in this polygon - Vertices - Target portal or room + + + Root of the scenegraph which is to be seen through this portal. Has data Size of Block - Unknown - Unknown + + - Unknown - Unknown - Unknown + + + @@ -6000,7 +5988,7 @@ Number of atoms? The sum of all of these equal num total bytes per element, so this probably describes how each data element breaks down into smaller chunks (i.e. atoms). - Unknown + Unsure, but this seems to correspond again to the number of total bytes per element. @@ -6024,8 +6012,8 @@ Bethesda-specific extra data. - Unknown - Unknown + + @@ -6068,16 +6056,16 @@ Found in Fallout 3 .psa files, extra ragdoll info for NPCs/creatures. (usually idleanims\deathposes.psa) Defines different kill poses. The game selects the pose randomly and applies it to a skeleton immediately upon ragdolling. Poses can be previewed in GECK Object Window-Actor Data-Ragdoll and selecting Pose Matching tab. - Number of target bones. - Array of bone names. - Number of poses. - Array of poses. + + + + Found in Fallout 3, more ragdoll info? (meshes\ragdollconstraint\*.rdt) - Number of target bones - Bones in index + + @@ -6201,7 +6189,6 @@ The regions in the mesh. Regions can be used to mark off submeshes which are independent draw calls. Number of components of the data (matches corresponding field in MeshData). The format of each component in this data stream. - @@ -6243,15 +6230,15 @@ Data stored per-material by NiRenderObject The name of the material. - Extra data associated with the material? + Extra data associated with the material? An object that can be rendered. - The number of materials affecting this renderable object. + Per-material data. The index of the currently active material. - The initial value for the flag that determines if the internal cached shader is valid. + Whether the materials for this render object always needs to be updated before rendering with them. @@ -6264,23 +6251,23 @@ - Specifies the time when an application must syncronize for some reason. - + A sync point corresponds to a particular stage in per-frame processing. + - + Base class for mesh modifiers. - The number of submit points used by this mesh modifier. - The submit points used by this mesh modifier - The number of complete points used by this mesh modifier. - The complete points used by this mesh modifier + + The sync points supported by this mesh modifier for SubmitTasks. + + The sync points supported by this mesh modifier for CompleteTasks. @@ -6316,7 +6303,7 @@ - + Unknown. @@ -6338,11 +6325,11 @@ - - - - The number of morph targets. - Name of each morph target. + + + + + @@ -6371,20 +6358,22 @@ USE_SOFTWARE_SKINNING = 0x0001 RECOMPUTE_BOUNDS = 0x0002 - The root bone of the skeleton. - The transform that takes the root bone parent coordinate system into the skin coordinate system. + The root bone of the skeleton. + The transform that takes the root bone parent coordinate system into the skin coordinate system. The number of bones referenced by this mesh modifier. Pointers to the bone nodes that affect this skin. - The transforms that go from bind-pose space to bone space. + The transforms that go from bind-pose space to bone space. The bounds of the bones. Only stored if the RECOMPUTE_BOUNDS bit is set. - + An instance of a hardware-instanced mesh in a scene graph. + The instanced mesh this object represents. + Mesh modifier that provides per-frame instancing capabilities in Gamebryo. @@ -6400,6 +6389,7 @@ + Defines the levels of detail for a given character and dictates the character's current LOD. @@ -6418,6 +6408,7 @@ + Describes the various methods that may be used to specify the orientation of the particles. - + Shader Property Flags - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + - + Shader Property Flags 2 - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + @@ -5472,148 +5472,148 @@ Bethesda-specific property. - + Skyrim Shader Property Flags 1 - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + - + Skyrim Shader Property Flags 2 - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + - + Fallout 4 Shader Property Flags 1 - - + Fallout 4 Shader Property Flags 2 - From 7c539c0e8750eb5b46f46665cef71021f62ad73e Mon Sep 17 00:00:00 2001 From: jonwd7 Date: Thu, 19 Oct 2017 10:25:57 -0400 Subject: [PATCH 154/164] NiSkinningLODController fix Missed field when transferring decoding from 010 templates. --- nif.xml | 1 + 1 file changed, 1 insertion(+) diff --git a/nif.xml b/nif.xml index 7575bee..d8ae80b 100644 --- a/nif.xml +++ b/nif.xml @@ -6398,6 +6398,7 @@ + From 665a050d7906d8a0397a546fbbdbc63a0052c676 Mon Sep 17 00:00:00 2001 From: jonwd7 Date: Thu, 19 Oct 2017 15:26:22 -0400 Subject: [PATCH 155/164] Fix Bounding Box on NiAVObject for legacy types The type was actually Bounding Volume, with the "unknown int" being the bound type. This compound already existed in the XML for other blocks. --- nif.xml | 12 ++---------- 1 file changed, 2 insertions(+), 10 deletions(-) diff --git a/nif.xml b/nif.xml index d8ae80b..fefdc2c 100644 --- a/nif.xml +++ b/nif.xml @@ -1720,14 +1720,6 @@ Scaling part (only uniform scaling is supported). - - Bounding box. - Usually 1. - Translation vector. - Rotation matrix. - Radius, per direction. - - Bethesda Animation. Furniture entry points. It specifies the direction(s) from where the actor is able to enter (and leave) the position. @@ -2764,8 +2756,8 @@ All rendering properties attached to this object. Always 2,0,2,0. 0 or 1. - - + + From 2ecd23bed9d0548d584b2639d88449f694162dcb Mon Sep 17 00:00:00 2001 From: jonwd7 Date: Tue, 7 Nov 2017 14:29:10 -0500 Subject: [PATCH 156/164] Add proper defaults, initial pass Aids in proper creation of new blocks by having sound default values. Also splits Glossiness/Smoothness in BSLightingShaderProperty to have correct defaults and documentation on ranges. Unknown Float 1 was changed to Rimlight Power as well, and the next line, Backlight Power, relies on its value being FLT_MAX. So `Rimlight Power == 0x7F7FFFFF` is used as a `cond` for Backlight Power and this may require the parser to deal with a float to hex comparison. --- nif.xml | 153 ++++++++++++++++++++++++++++---------------------------- 1 file changed, 77 insertions(+), 76 deletions(-) diff --git a/nif.xml b/nif.xml index fefdc2c..2437632 100644 --- a/nif.xml +++ b/nif.xml @@ -2241,7 +2241,7 @@ Particle system collider. - Amount of bounce for the collider. + Amount of bounce for the collider. Spawn particles on impact? Kill particles on impact? Spawner to use for the collider. @@ -2586,7 +2586,7 @@ Uses NiFloatKeys to animate a float value over time. - Value if lacking NiFloatData. + Value if lacking NiFloatData. @@ -2598,7 +2598,7 @@ Uses NiPosKeys to animate an NiPoint3 value over time. - Value if lacking NiPosData. + Value if lacking NiPosData. @@ -2614,8 +2614,8 @@ Used to make an object follow a predefined spline path. - - -1 = Negative, 1 = Positive + + -1 = Negative, 1 = Positive Max angle in radians. 0, 1, or 2 representing X, Y, or Z. @@ -2625,7 +2625,7 @@ Uses NiBoolKeys to animate a bool value over time. - Value if lacking NiBoolData. + Value if lacking NiBoolData. @@ -2653,20 +2653,20 @@ - - - - - - - + + + + + + + Abstract base class for interpolators storing data via a B-spline. - Animation start time. - Animation stop time. + Animation start time. + Animation stop time. @@ -2763,7 +2763,7 @@ Abstract base class for dynamic effects such as NiLights or projected texture effects. - If true, then the dynamic effect is applied to affected nodes during rendering. + If true, then the dynamic effect is applied to affected nodes during rendering. If a node appears in this list, then its entire subtree will be affected by the effect. As of 4.0 the pointer hash is no longer stored alongside each NiObject on disk, yet this node list still refers to the pointer hashes. Cannot leave the type as Ptr because the link will be invalid. @@ -2774,10 +2774,10 @@ Abstract base class that represents light sources in a scene graph. For Bethesda Stream 130 (FO4), NiLight now directly inherits from NiAVObject. - Scales the overall brightness of all light components. - - - + Scales the overall brightness of all light components. + + + @@ -2794,7 +2794,7 @@ Used to locate the modifier. Modifier ID in the particle modifier chain (always a multiple of 1000)? NiParticleSystem parent of this modifier. - Whether or not the modifier is active. + Whether or not the modifier is active. @@ -2806,7 +2806,7 @@ Planar Angle / Second axis. Planar Angle randomness / Second axis . Defines color of a birthed particle. - Size of a birthed particle. + Size of a birthed particle. Particle Radius randomness. Duration until a particle dies. Adds randomness to Life Span. @@ -2831,8 +2831,8 @@ Frequency (is usually 1.0). Phase (usually 0.0). - Controller start time. - Controller stop time. + Controller start time. + Controller stop time. Controller target (object index of the first controllable ancestor of this object). Unknown integer. @@ -3243,7 +3243,7 @@ Transparency. Flags 0x00ED. - + Bit 0 : alpha blending enable Bits 1-4 : source blend mode Bits 5-8 : destination blend mode @@ -3274,7 +3274,7 @@ 110 GL_GEQUAL 111 GL_NEVER - Threshold for alpha testing (see: glAlphaFunc) + Threshold for alpha testing (see: glAlphaFunc) Unknown Unknown @@ -3521,10 +3521,10 @@ The weight of a sequence describes how it blends with other sequences at the same priority. - + - - + + The owner of this sequence. The name of the NiAVObject serving as the accumulation root. This is where all accumulated translations, scales, and rotations are applied. @@ -3586,7 +3586,7 @@ If Bit 1 and Bit 2 are not set, but fog is enabled, Fog function is FOG_Z_LINEAR. - Depth of the fog in normalized units. 1.0 = begins at near plane. 0.5 = begins halfway between the near and far planes. + Depth of the fog in normalized units. 1.0 = begins at near plane. 0.5 = begins halfway between the near and far planes. The color of the fog. @@ -3672,12 +3672,12 @@ Describes the surface properties of an object e.g. translucency, ambient color, diffuse color, emissive color, and specular color. Property flags. - How much the material reflects ambient light. - How much the material reflects diffuse light. - How much light the material reflects in a specular manner. - How much light the material emits. - The material glossiness. - The material transparency (1=non-transparant). Refer to a NiAlphaProperty object in this material's parent NiTriShape object, when alpha is not 1. + How much the material reflects ambient light. + How much the material reflects diffuse light. + How much light the material reflects in a specular manner. + How much light the material emits. + The material glossiness. + The material transparency (1=non-transparant). Refer to a NiAlphaProperty object in this material's parent NiTriShape object, when alpha is not 1. @@ -3847,7 +3847,7 @@ - If true, Particles are birthed into world space. If false, Particles are birthed into object space. + If true, Particles are birthed into world space. If false, Particles are birthed into object space. The number of modifier references. The list of particle modifiers. @@ -3917,7 +3917,7 @@ DEPRECATED (10.2), REMOVED (20.5). Replaced by NiTransformController and NiPathInterpolator. Time controller for a path. - -1 = Negative, 1 = Positive + -1 = Negative, 1 = Positive Max angle in radians. 0, 1, or 2 representing X, Y, or Z. @@ -4010,7 +4010,7 @@ A point light. - + @@ -4066,10 +4066,10 @@ Particle modifier that applies a linear drag force to particles. The object whose position and orientation are the basis of the force. - The local direction of the force. - The amount of drag to apply to particles. - The distance up to which particles are fully affected. - The distance at which particles cease to be affected. + The local direction of the force. + The amount of drag to apply to particles. + The distance up to which particles are fully affected. + The distance at which particles cease to be affected. @@ -4082,9 +4082,9 @@ Particle modifier that applies a gravitational force to particles. The object whose position and orientation are the basis of the force. - The local direction of the force. + The local direction of the force. How the force diminishes by distance. - The acceleration of the force. + The acceleration of the force. The type of gravitational force. Adds a degree of randomness. Scale for turbulence. @@ -4106,7 +4106,7 @@ The meshes which are emitted from. The method by which the initial particle velocity will be computed. The manner in which particles are emitted from the Emitter Meshes. - The emission axis if VELOCITY_USE_DIRECTION. + The emission axis if VELOCITY_USE_DIRECTION. @@ -4173,16 +4173,16 @@ Initial Rotation Angle in radians. Distributes rotation angle over the range [Angle - Variation, Angle + Variation]. Randomly negate the initial rotation speed? - Assign a random axis to new particles? - Initial rotation axis. + Assign a random axis to new particles? + Initial rotation axis. Particle modifier that spawns additional copies of a particle. - Number of allowed generations for spawning. Particles whose generations are >= will not be spawned. - The likelihood of a particular particle being spawned. Must be between 0.0 and 1.0. - The minimum particles to spawn for any given original particle. - The maximum particles to spawn for any given original particle. + Number of allowed generations for spawning. Particles whose generations are >= will not be spawned. + The likelihood of a particular particle being spawned. Must be between 0.0 and 1.0. + The minimum particles to spawn for any given original particle. + The maximum particles to spawn for any given original particle. WorldShift How much the spawned particle speed can vary. How much the spawned particle direction can vary. @@ -4215,7 +4215,7 @@ Particle system modifier, implements a gravity field force for particles. - Direction of the gravity field in Field Object's space. + Direction of the gravity field in Field Object's space. @@ -4230,10 +4230,10 @@ - - - - + + + + @@ -4292,7 +4292,7 @@ Particle system modifier, updates the particle velocity to simulate the effects of air movements like wind, fans, or wake. - Direction of the particle velocity + Direction of the particle velocity How quickly particles will accelerate to the magnitude of the air field. How much of the air field velocity will be added to the particle velocity. @@ -4446,7 +4446,7 @@ A spot. - Describes the distribution of light. (see: glLight) + Describes the distribution of light. (see: glLight) @@ -5613,33 +5613,34 @@ Skyrim Shader Flags for setting render/shader options. Skyrim Shader Flags for setting render/shader options. Fallout 4 Shader Flags. Mostly overridden if "Name" is a path to a BGSM/BGEM file. - Fallout 4 Shader Flags. Mostly overridden if "Name" is a path to a BGSM/BGEM file. + Fallout 4 Shader Flags. Mostly overridden if "Name" is a path to a BGSM/BGEM file. Offset UVs Offset UV Scale to repeat tiling textures, see above. Texture Set, can have override in an esm/esp - Glow color and alpha + Glow color and alpha Multiplied emissive colors - How to handle texture borders. + How to handle texture borders. The material opacity (1=non-transparent). The amount of distortion. **Not based on physically accurate refractive index** (0=none) (0-1) - The material specular power, or glossiness (0-999). + The material specular power, or glossiness (0-999). + The base roughness (0.0-1.0), multiplied by the smoothness map. Adds a colored highlight. Brightness of specular highlight. (0=not visible) (0-999) - Controls strength for envmap/backlight/rim/softlight lighting effect? - Controls strength for envmap/backlight/rim/softlight lighting effect? - - - + Controls strength for envmap/backlight/rim/softlight lighting effect? + Controls strength for envmap/backlight/rim/softlight lighting effect? + + + - - - - - - - - Scales the intensity of the environment/cube map. (0-1) + + + + + + + + Scales the intensity of the environment/cube map. (0-1) Tints the base texture. Overridden by game settings. From 0af6a1d75f6a69a99852b75dd378c2ac1fe14315 Mon Sep 17 00:00:00 2001 From: jonwd7 Date: Thu, 14 Dec 2017 02:49:03 -0500 Subject: [PATCH 157/164] Bethesda version fixes The header conditions did not apply to 20.0.0.4.10 which is apparently present in Steam distributions. The correct files are 20.0.0.5.11 which is a newer format. Fixed a condition in NiParticlesData that was accidentally applying to non-Bethesda NIFs. --- nif.xml | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/nif.xml b/nif.xml index 2437632..fb35005 100644 --- a/nif.xml +++ b/nif.xml @@ -1479,8 +1479,8 @@ An extra version number, for companies that decide to modify the file format. Number of file objects. - - + + @@ -3304,7 +3304,7 @@ How many quads to use in BSPSysSubTexModifier for texture atlasing - 2,4,8,16,32,64 are potential values. If "Has" was no then this should be 256, which represents a 16x16 framed image, which is invalid + 2,4,8,16,32,64 are potential values. If "Has" was no then this should be 256, which represents a 16x16 framed image, which is invalid Defines UV offsets Sets aspect ratio for Subtexture Offset UV quads From 460429a47b7ecee7f969bd614a9477e6377c837d Mon Sep 17 00:00:00 2001 From: jonwd7 Date: Thu, 14 Dec 2017 02:52:49 -0500 Subject: [PATCH 158/164] NiMesh/NiGeometry types cleanup Combined GeomMaterialData and MaterialData into one compound and changed NiRenderObject and NiGeometry to compensate, since they used the exact same format for material data. Moved more rows into MaterialData as well which simplified the conditioning/duplication on NiGeometry greatly. --- nif.xml | 56 ++++++++++++++++++++++++-------------------------------- 1 file changed, 24 insertions(+), 32 deletions(-) diff --git a/nif.xml b/nif.xml index fb35005..921f0c8 100644 --- a/nif.xml +++ b/nif.xml @@ -3067,14 +3067,19 @@ A simple LOD controller for bones. - + Shader. The shader name. - Unknown value, usually -1. (Not a link) - Num Materials - Unknown string. Shader? - Unknown integer; often -1. (Is this a link, array index?) - Active Material; often -1. (Is this a link, array index?) + Extra data associated with the shader. A value of -1 means the shader is the default implementation. + + The name of the material. + Extra data associated with the material. A value of -1 means the material is the default implementation. + The index of the currently active material. + + Cyanide extension (only in version 10.2.0.0?). + Unknown. + + Whether the materials for this object always needs to be updated before rendering with them. @@ -3091,14 +3096,8 @@ Data index (NiTriShapeData/NiTriStripData). - - - - Cyanide extension (only in version 10.2.0.0?). - Unknown. - - - + + @@ -6213,7 +6212,7 @@ - + Reference to a data stream object which holds the data used by this reference. @@ -6230,31 +6229,23 @@ A lookup table that maps submeshes to regions. - + Describes the semantic of each component. - - Data stored per-material by NiRenderObject - The name of the material. - Extra data associated with the material? - - - + An object that can be rendered. - - Per-material data. - The index of the currently active material. - Whether the materials for this render object always needs to be updated before rendering with them. + Per-material data. Describes the type of primitives stored in a mesh object. - - - + + + + @@ -6307,8 +6298,8 @@ The number of submeshes contained in this mesh. Sets whether hardware instancing is being used. The combined bounding volume of all submeshes. - - + + @@ -6332,6 +6323,7 @@ + Manipulates a mesh with the semantic MORPHWEIGHTS using an NiMorphMeshModifier. From a16466f12d02bcbe259df881dd4cba9c369c598c Mon Sep 17 00:00:00 2001 From: jonwd7 Date: Thu, 14 Dec 2017 03:46:21 -0500 Subject: [PATCH 159/164] BSPackedCombined CK version, cleanup and decoding. BSPackedCombinedGeomDataExtra is the version of precombined produced by the CK, whereas all vanilla precombined was BSPackedCombinedGeomDataExtra. The latter is much smaller because it only includes a reference to the geometry. The CK precombined bakes all geometry into the file. --- nif.xml | 45 ++++++++++++++++++++++++++------------------- 1 file changed, 26 insertions(+), 19 deletions(-) diff --git a/nif.xml b/nif.xml index 921f0c8..290ee7c 100644 --- a/nif.xml +++ b/nif.xml @@ -7085,44 +7085,51 @@ - - - + - - - - - - + - + + + + + + - - + + + - - + This appears to be a 64-bit hash but nif.xml does not have a 64-bit type. + + - - - Fallout 4 Packed Combined Geometry Data + + + Fallout 4 Packed Combined Geometry Data. + Geometry is baked into the file and given a list of transforms to position each copy. - + - + + + Fallout 4 Packed Combined Shared Geometry Data. + Geometry is NOT baked into the file. It is instead a reference to the shape via a Shape ID (currently undecoded) + which loads the geometry via the STAT form for the NIF. + + From 5e4be7633e68b6cf1a4d708540e40678f41b3a14 Mon Sep 17 00:00:00 2001 From: jonwd7 Date: Thu, 14 Dec 2017 15:46:32 -0500 Subject: [PATCH 160/164] NiEvaluator and 20.5+ KF support, better animation defaults. Added NiSequenceData and NiEvaluator for 20.5.0.0+. In 20.5.0.0 NiSequenceData is an alias for NiControllerSequence. The XML does not handle this and will defer to parser support. It does not seem to happen in practice. For 20.5.0.1, NiSequenceData is a hybrid of old and new, pre-NiEvaluator. For 20.5.0.2+, NiEvaluator replaces NiInterpolator for everything. Data wise they are almost exactly the same. Also improved the default values for Blend and BSpline interpolators. --- nif.xml | 215 ++++++++++++++++++++++++++++++++++++++++++++++++-------- 1 file changed, 184 insertions(+), 31 deletions(-) diff --git a/nif.xml b/nif.xml index 290ee7c..f56e118 100644 --- a/nif.xml +++ b/nif.xml @@ -1435,7 +1435,7 @@ Name of a controllable object in another NIF file. - + @@ -2586,7 +2586,7 @@ Uses NiFloatKeys to animate a float value over time. - Value if lacking NiFloatData. + Pose value if lacking NiFloatData. @@ -2598,7 +2598,7 @@ Uses NiPosKeys to animate an NiPoint3 value over time. - Value if lacking NiPosData. + Pose value if lacking NiPosData. @@ -2625,7 +2625,7 @@ Uses NiBoolKeys to animate a bool value over time. - Value if lacking NiBoolData. + Pose value if lacking NiBoolData. @@ -3378,17 +3378,17 @@ Blends bool values together. - The interpolated bool? + The pose value. Invalid if using data. Blends float values together. - The interpolated float? + The pose value. Invalid if using data. Blends NiPoint3 values together. - The interpolated point? + The pose value. Invalid if using data. @@ -3412,45 +3412,45 @@ Uses B-Splines to animate a float value over time. - Base value when curve not defined. - Handle into the data. (USHRT_MAX for invalid handle.) + Base value when curve not defined. + Handle into the data. (USHRT_MAX for invalid handle.) NiBSplineFloatInterpolator plus the information required for using compact control points. - - + + Uses B-Splines to animate an NiPoint3 value over time. - Base value when curve not defined. - Handle into the data. (USHRT_MAX for invalid handle.) + Base value when curve not defined. + Handle into the data. (USHRT_MAX for invalid handle.) NiBSplinePoint3Interpolator plus the information required for using compact control points. - - + + Supports the animation of position, rotation, and scale using an NiQuatTransform. The NiQuatTransform can be an unchanging pose or interpolated from B-Spline control point channels. - Handle into the translation data. (USHRT_MAX for invalid handle.) - Handle into the rotation data. (USHRT_MAX for invalid handle.) - Handle into the scale data. (USHRT_MAX for invalid handle.) + Handle into the translation data. (USHRT_MAX for invalid handle.) + Handle into the rotation data. (USHRT_MAX for invalid handle.) + Handle into the scale data. (USHRT_MAX for invalid handle.) NiBSplineTransformInterpolator plus the information required for using compact control points. - - - - - - + + + + + + @@ -3662,7 +3662,7 @@ - + @@ -4018,6 +4018,14 @@ + + Wrapper for rotation animation keys. + + + + + + Particle modifier that controls and updates the age of particles in the system. Should the particles spawn on death? @@ -6787,17 +6795,162 @@ + + The name of the animated NiAVObject. + The RTTI type of the NiProperty the controller is attached to, if applicable. + The RTTI type of the NiTimeController. + An ID that can uniquely identify the controller among others of the same type on the same NiObjectNET. + An ID that can uniquely identify the interpolator among others of the same type on the same NiObjectNET. + + Channel Indices are BASE/POS = 0, ROT = 1, SCALE = 2, FLAG = 3 + Channel Types are: + INVALID = 0, COLOR, BOOL, FLOAT, POINT3, ROT = 5 + Any channel may be | 0x40 which means POSED + The FLAG (3) channel flags affects the whole evaluator: + REFERENCED = 0x1, TRANSFORM = 0x2, ALWAYSUPDATE = 0x4, SHUTDOWN = 0x8 + + - - + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + - - + + - - + + + + + + + + + Handle into the data. (USHRT_MAX for invalid handle.) + + + + + + + + + Handle into the data. (USHRT_MAX for invalid handle.) + + + + + + + + + Handle into the data. (USHRT_MAX for invalid handle.) + + + + + + + + + + Handle into the translation data. (USHRT_MAX for invalid handle.) + Handle into the rotation data. (USHRT_MAX for invalid handle.) + Handle into the scale data. (USHRT_MAX for invalid handle.) + + + + + + + + + + + + + + + + + + + + + + + -1 = Negative, 1 = Positive + Max angle in radians. + + 0, 1, or 2 representing X, Y, or Z. + + + + + + Root node in Gamebryo .kf files (20.5.0.1 and up). + For 20.5.0.0, "NiSequenceData" is an alias for "NiControllerSequence" and this is not handled in nifxml. + This was not found in any 20.5.0.0 KFs available and they instead use NiControllerSequence directly. + + + + + + + + + + + + + The name of the NiAVObject serving as the accumulation root. This is where all accumulated translations, scales, and rotations are applied. + From f7402198799435ee5bcfd4f214800743c3104816 Mon Sep 17 00:00:00 2001 From: jonwd7 Date: Fri, 15 Dec 2017 06:53:04 -0500 Subject: [PATCH 161/164] [PARSER CHANGES REQUIRED] Use `\` as compound member accessor Instead of requiring all parsers to special-case the arg passing for BSVertexDesc, have just adopted the `\` syntax for compound member accessor. So at least for parsers that do not internalize BSVertexDesc to be `uint64_t` or equivalent to mirror the game, all you need to do is support `\`. For C++ this would go from `Vertex Desc\Vertex Attributes` to `vertexDesc.vertexAttributes` The period syntax was decided against because it is not very visible and `\` is familiar from filepaths / directory trees. --- nif.xml | 8 ++++---- 1 file changed, 4 insertions(+), 4 deletions(-) diff --git a/nif.xml b/nif.xml index f56e118..a92905a 100644 --- a/nif.xml +++ b/nif.xml @@ -4404,7 +4404,7 @@ - + @@ -7099,8 +7099,8 @@ - - + + @@ -7254,7 +7254,7 @@ - + From 454472c22c98a1b546a8e9a1016483d0ab05dc70 Mon Sep 17 00:00:00 2001 From: jonwd7 Date: Sun, 17 Dec 2017 16:38:55 -0500 Subject: [PATCH 162/164] Misc. fixes Rename LOD levels in BSLODTriShape to match BSMeshLODTriShape. Made NiMeshModifier abstract. Named NiGeometryData Group ID, which is never used but is at least known. --- nif.xml | 10 +++++----- 1 file changed, 5 insertions(+), 5 deletions(-) diff --git a/nif.xml b/nif.xml index a92905a..99c29da 100644 --- a/nif.xml +++ b/nif.xml @@ -3151,7 +3151,7 @@ "Num Vertices" is renamed to "BS Max Vertices" for Bethesda 20.2 because Vertices, Normals, Tangents, Colors, and UV arrays do not have length for NiPSysData regardless of "Num" or booleans. --> - Unknown identifier. Always 0. + Always zero. Number of vertices. Number of vertices. Bethesda uses this for max number of particles in NiPSysData. @@ -6268,7 +6268,7 @@ - + Base class for mesh modifiers. The sync points supported by this mesh modifier for SubmitTasks. @@ -7064,9 +7064,9 @@ A variation on NiTriShape, for visibility control over vertex groups. - - - + + + From c087455261f2f7d205cdf11fb70bfce647dda83f Mon Sep 17 00:00:00 2001 From: jonwd7 Date: Sun, 17 Dec 2017 17:39:16 -0500 Subject: [PATCH 163/164] Remove obsolete NiArk blocks The game, Entropia Universe, only used Gamebryo between 2004 and 2009, when it switched to CryEngine 2. http://www.entropiawiki.com/Info.aspx?chart=VU&name=10.0 --- nif.xml | 44 -------------------------------------------- 1 file changed, 44 deletions(-) diff --git a/nif.xml b/nif.xml index 99c29da..f16b0d9 100644 --- a/nif.xml +++ b/nif.xml @@ -2064,15 +2064,6 @@ - - A texture reference used by NiArkTextureExtraData. - - - - - - - Transformation data for the bone at this index in bhkPoseArray. @@ -5107,41 +5098,6 @@ Sends Gamebryo scene state to a PhysX dynamic actor. - - Unknown node. - - - - - - Unknown node. - - - Contains a string like "Gamebryo_1_1" or "4.1.0.12" - - - - - - Unknown node. - - - - - - - - - Unknown node. - - - - - Unknown node. - - - - Wireframe geometry. From c463e5cf043086c74bc7d0d6ea6c6916ea76c398 Mon Sep 17 00:00:00 2001 From: jonwd7 Date: Sun, 17 Dec 2017 17:42:49 -0500 Subject: [PATCH 164/164] Version increment --- nif.xml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/nif.xml b/nif.xml index f16b0d9..c3d1f22 100644 --- a/nif.xml +++ b/nif.xml @@ -1,6 +1,6 @@ - +