From 089611d0fcfc617c98bddceea714c7283b5357a7 Mon Sep 17 00:00:00 2001 From: jonwd7 Date: Wed, 2 Aug 2017 12:26:16 -0400 Subject: [PATCH 01/49] 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 02/49] 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 03/49] 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 04/49] 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 05/49] 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 06/49] 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 07/49] 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 08/49] 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 09/49] 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 10/49] 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 11/49] 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 12/49] 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 13/49] 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 14/49] 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 15/49] 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. - - - - - - - - - - - + + Used to make an object follow a predefined spline path. @@ -2760,7 +2734,6 @@ 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. - The translation vector. The rotation part of the transformation matrix. Scaling part (only uniform scaling is supported). @@ -3606,33 +3579,28 @@ Scale keys. - - Should be a bitfield for flip toggle. - - - - - + + + + + DEPRECATED (10.2), REMOVED (20.5) Replaced by NiTransformController and NiLookAtInterpolator. - Unknown. - Link to the node to look at? + + NiLookAtInterpolator rotates an object so that it always faces a target object. - Refers to a Node to focus on. - Target node name. - - Translate. - Rotation. - Scale. - Refers to NiPoint3Interpolator. - Refers to a NiFloatInterpolator. - Refers to a NiFloatInterpolator. + + + + + + @@ -4332,7 +4300,7 @@ Skinning data. - Offset of the skin from this bone in bind position. + Offset of the skin from this bone in bind position. Number of bones. This optionally links a NiSkinPartition for hardware-acceleration information. Enables Vertex Weights for this NiSkinData. @@ -4480,11 +4448,10 @@ The method that will be used to generate UV coordinates for the texture effect. Image index. Source texture index. - Determines whether a clipping plane is used. 0 means that a plane is not used. - Unknown: (1,0,0)? - Unknown. 0? - 0? - -75? + Determines whether a clipping plane is used. + + + Unknown: 0. @@ -4598,16 +4565,6 @@ unknown - Holds mesh data using a list of singular triangles. @@ -5167,14 +5124,14 @@ 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 - Number of portals into room - Number of doors out of room - Number of portals out of room - Number of unknowns - All geometry associated with room. + + + + The portals which see into the room. + + The portals which see out of the room. + + All geometry associated with the room. @@ -5841,19 +5798,11 @@ - - Bethesda-specific node. - - Translation. - Rotation. - Scale (usually float_min). - - Bethesda-specific compound. - Name of affected node? - Transform data. - Transform data. + + + @@ -6348,10 +6297,10 @@ 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 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 16/49] 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 17/49] 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 18/49] 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 19/49] 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 20/49] 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 21/49] 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 22/49] 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 23/49] 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 24/49] 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 39/49] 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 40/49] 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 41/49] 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 42/49] 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 43/49] 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 44/49] 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 45/49] 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 46/49] [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 47/49] 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 48/49] 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 49/49] 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 @@ - +