diff --git a/NifSkope.pro b/NifSkope.pro index 1c0bc5a69..3502f7fbe 100644 --- a/NifSkope.pro +++ b/NifSkope.pro @@ -5,6 +5,8 @@ TEMPLATE = app TARGET = NifSkope +ICON = nifskope.icns + QT += xml opengl network widgets # Require Qt 5.7 or higher @@ -346,7 +348,7 @@ gli { } zlib { - !*msvc*:QMAKE_CFLAGS += -isystem ../nifskope/lib/zlib + !*msvc*:QMAKE_CFLAGS += -isystem ../nifskope/lib/zlib -DHAVE_UNISTD_H !*msvc*:QMAKE_CXXFLAGS += -isystem ../nifskope/lib/zlib else:INCLUDEPATH += lib/zlib HEADERS += $$files($$PWD/lib/zlib/*.h, false) @@ -498,7 +500,14 @@ win32:contains(QT_ARCH, i386) { copyDirs( $$SHADERS, shaders ) #copyDirs( $$LANG, lang ) + +unix:!macx { copyFiles( $$XML $$QSS ) +} + +macx { + copyFiles( $$XML $$QSS , "NifSkope.app/Contents/MacOS") +} # Copy Readmes and rename to TXT copyFiles( $$READMES,,,, md:txt ) diff --git a/NifSkope_targets.pri b/NifSkope_targets.pri index 05324c26b..e34f1d38d 100644 --- a/NifSkope_targets.pri +++ b/NifSkope_targets.pri @@ -119,9 +119,11 @@ exists($$qhgen):GENERATE_QHP = YES HAVE_DOT = NO DOT_PATH = " " # Using space because sed on Windows errors on s%@DOT_PATH@%%g for some reason -exists($$dot) { +if(!isEmpty(dot)) { + exists($$dot) { HAVE_DOT = YES DOT_PATH = $$re_escape($${dot}) + } } TAGS = $${PWD}/build/doxygen/tags diff --git a/kfm.xml b/kfm.xml new file mode 100644 index 000000000..e4ffdc757 --- /dev/null +++ b/kfm.xml @@ -0,0 +1,69 @@ + + + + + Civilization IV + Oblivion, Civilization IV, Pro Cycling Manager, The Guild 2, Prison Tycoon, Red Ocean, Loki + Civilization IV, Sid Meier's Railroads + Emerge, Megami Tensei: Imagine + Emerge + Dragonica + + + + + + + + Refers to another animation + + + + + + + + + + + + + + + + + + + + + + + + + + An index? + + Max = Num Animations -1? No transition from animation to itself. + + + + + + + + + + + + + + + + + + + + + + + diff --git a/nif.xml b/nif.xml new file mode 100644 index 000000000..c3d1f22b7 --- /dev/null +++ b/nif.xml @@ -0,0 +1,7260 @@ + + + + + + Dark Age of Camelot + Star Trek: Bridge Commander + Dark Age of Camelot + Dark Age of Camelot, Star Trek: Bridge Commander + Oblivion + Freedom Force + Morrowind, Freedom Force + Dark Age of Camelot + Civilization IV + Dark Age of Camelot, Civilization IV + Dark Age of Camelot, Civilization IV, Empire Earth II, Culpa Innata + Zoo Tycoon 2, Civilization IV, Oblivion + Oblivion + ? + Dark Age of Camelot, Civilization IV, Freedom Force vs. the 3rd Reich, Axis and Allies, Kohan 2, Entropia Universe, Wildlife Park 2, The Guild 2, NeoSteam, Empire Earth II + Oblivion + Oblivion + Civilization IV, Oblivion, Loki, Pro Cycling Manager, Prison Tycoon, Red Ocean, Wildlife Park 2 + Worldshift + Worldshift + Civilization IV, Oblivion, Sid Meier's Railroads + Oblivion + Megami Tensei: Imagine + Emerge, Empire Earth III, Fallout 3, Skyrim, Fallout 4 + Emerge, Empire Earth III, Atlantica + + Emerge + + Emerge + Emerge + Emerge + Warhammer, Lazeska, Divinity 2, Howling Sword, Bully SE + KrazyRain + KrazyRain + Epic Mickey + Emerge + Rocksmith, Rocksmith 2014 + Ghost In The Shell: First Assault, MapleStory 2 + + + + + A boolean; 32-bit from 4.0.0.2, and 8-bit from 4.1.0.1 on. + + + + An unsigned 8-bit integer. + + + + An unsigned 32-bit integer. + + + + A litte-endian unsigned 32-bit integer. + + + + An unsigned 16-bit integer. + + + + A signed 32-bit integer. + + + + A signed 16-bit integer. + + + + A 16-bit (signed?) integer, which is used in the header to refer to a particular object type in a object type string array. + The upper bit appears to be a flag used for PhysX block types. + + + + An 8-bit character. + + + + A 32-bit integer that stores the version in hexadecimal format with each byte representing a number in the version string. + + Some widely-used versions and their hex representation: + 4.0.0.2: 0x04000002 + 4.1.0.12: 0x0401000C + 4.2.0.2: 0x04020002 + 4.2.1.0: 0x04020100 + 4.2.2.0: 0x04020200 + 10.0.1.0: 0x0A000100 + 10.1.0.0: 0x0A010000 + 10.2.0.0: 0x0A020000 + 20.0.0.4: 0x14000004 + 20.0.0.5: 0x14000005 + + + + A 16-bit integer, used for bit flags. Function varies by object type. + + + + A standard 32-bit floating point number. + + + + A 16-bit floating point number. + + + + A variable length string that ends with a newline character (0x0A). The string starts as follows depending on the version: + + Version <= 10.0.1.0: 'NetImmerse File Format' + Version >= 10.1.0.0: 'Gamebryo File Format' + + + + A variable length string that ends with a newline character (0x0A). + + + + A signed 32-bit integer, referring to a object before this one in the hierarchy. Examples: Bones, gravity objects. + + + + A signed 32-bit integer, used to refer to another object; -1 means no reference. These should always point down the hierarchy. Other types are used for indexes that point to objects higher up. + + + + A 32-bit unsigned integer, used to refer to strings in a NiStringPalette. + + + + A 32-bit unsigned integer, used to refer to strings in the header. + + + + + + Describes the options for the accum root on NiControllerSequence. + + + + + + + + + + + + + + Describes how the vertex colors are blended with the filtered texture color. + + + + + + + + + The type of texture. + + + + + + + + + + + + + + + + The type of animation interpolation (blending) that will be used on the associated key frames. + + + + + + + + + Bethesda Havok. Material descriptor for a Havok shape in Oblivion. + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + Bethesda Havok. Material descriptor for a Havok shape in Fallout 3 and Fallout NV. + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + Bethesda Havok. Material descriptor for a Havok shape in Skyrim. + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + Bethesda Havok. Describes the collision layer a body belongs to in Oblivion. + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + Bethesda Havok. Describes the collision layer a body belongs to in Fallout 3 and Fallout NV. + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + Bethesda Havok. Describes the collision layer a body belongs to in Skyrim. + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + Bethesda Havok. + A byte describing if MOPP Data is organized into chunks (PS3) or not (PC) + + + + + + + Target platform for NiPersistentSrcTextureRendererData (later than 30.1). + + + + Target renderer for NiPersistentSrcTextureRendererData (until 30.1). + + + + Describes 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. + + + + Describes the pixel format used by the NiPixelData object to store a texture. + + + + Describes how each pixel should be accessed on NiPixelFormat. + + + + Describes the color depth in an NiTexture. + + + + + + + + + + + Describes how mipmaps are handled in an NiTexture. + + + + + + + Describes how transparency is handled in an NiTexture. + + + + + + + + Describes the availiable texture clamp modes, i.e. the behavior of UV mapping outside the [0,1] range. + + + + + + + + Describes the availiable texture filter modes, i.e. the way the pixels in a texture are displayed on screen. + + + + + + + + + + + Describes how to apply vertex colors for NiVertexColorProperty. + + + + + + + Describes which lighting equation components influence the final vertex color for NiVertexColorProperty. + + + + + + The animation cyle behavior. + + + + + + + The force field type. + + + + + + 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. + + + + + + + + + + + + Describes stencil buffer test modes for NiStencilProperty. + + + + + + + + + + + + Describes the actions which can occur as a result of tests for NiStencilProperty. + + + + + + + + + + Describes the face culling options for NiStencilProperty. + + + + + + + + Describes Z-buffer test modes for NiZBufferProperty. + "Less than" = closer to camera, "Greater than" = further from camera. + + + + + + + + + + + + Bethesda Havok, based on hkpMotion::MotionType. Motion type of a rigid body determines what happens when it is simulated. + + + + + + + + + + + + + + Bethesda Havok, based on hkpRigidBodyDeactivator::DeactivatorType. + Deactivator Type determines which mechanism Havok will use to classify the body as deactivated. + + + + + + + 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, 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. + + + + + + + + + + + + + + Describes the type of gravitational force. + + + + + + + Describes which aspect of the NiTextureTransform the NiTextureTransformController will modify. + + + + + + + + + Describes the decay function of bomb forces. + + + + + + + Describes the symmetry type of bomb forces. + + + + + + + Controls the way the a particle mesh emitter determines the starting speed and direction of the particles that are emitted. + + + + + + + Controls which parts of the mesh that the particles are emitted from. + + + + + + + + + The type of information that is stored in a texture used by an NiTextureEffect. + + + + + + + + Determines the way that UV texture coordinates are generated. + + + + + + + + + + + + + + Used by NiMaterialColorControllers to select which type of color in the controlled object that will be animated. + + + + + + + + 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. + + + + + + + Describes the way that NiSortAdjustNode modifies the sorting behavior for the subtree below it. + + + + + + The propagation mode controls scene graph traversal during collision detection operations for NiCollisionData. + + + + + + + + The collision mode controls the type of collision operation that is to take place for NiCollisionData. + + + + + + + + + + + + + + + + + + Bethesda Havok. + + + + + + + + Biped bodypart data used for visibility control of triangles. Options are Fallout 3, except where marked for Skyrim (uses SBP prefix) + Skyrim BP names are listed only for vanilla names, different creatures have different defnitions for naming. + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + Values for configuring the shader type in a BSLightingShaderProperty + + + + + + + + + + + + + + An unsigned 32-bit integer, describing which float variable in BSEffectShaderProperty to animate. + + + + + + + + + + + + + + An unsigned 32-bit integer, describing which color in BSEffectShaderProperty to animate. + + + + + An unsigned 32-bit integer, describing which float variable in BSLightingShaderProperty to animate. + + + + + + + + + + + + + + An unsigned 32-bit integer, describing which color in BSLightingShaderProperty to animate. + + + + + + Bethesda Havok. Describes the type of bhkConstraint. + + + + + + + + + + + + + + A string of given length. + The string length. + The string itself. + + + + A string type. + The normal string. + The string index. + + + + An array of bytes. + The number of bytes in this array + The bytes which make up the array + + + + An array of bytes. + The number of bytes in this array + The number of bytes in this array + The bytes which make up the array + + + + A color without alpha (red, green, blue). + Red color component. + Green color component. + Blue color component. + + + + A color without alpha (red, green, blue). + Red color component. + Green color component. + Blue color component. + + + + A color with alpha (red, green, blue, alpha). + Red component. + Green component. + Blue component. + Alpha. + + + + A color with alpha (red, green, blue, alpha). + Red color component. + Green color component. + Blue color component. + Alpha color component. + + + + A string that contains the path to a file. + The normal string. + The string index. + + + + The NIF file footer. + The number of root references. + List of root NIF objects. If there is a camera, for 1st person view, then this NIF object is referred to as well in this list, even if it is not a root object (usually we want the camera to be attached to the Bip Head node). + + + + The distance range where a specific level of detail applies. + Begining of range. + End of Range. + Unknown (0,0,0). + + + + Group of vertex indices of vertices that match. + Number of vertices in this group. + The vertex indices. + + + + A vector in 3D space (x,y,z). + First coordinate. + Second coordinate. + Third coordinate. + + + + A vector in 3D space (x,y,z). + First coordinate. + Second coordinate. + Third coordinate. + + + + A vector in 3D space (x,y,z). + First coordinate. + Second coordinate. + Third coordinate. + + + + A 4-dimensional vector. + First coordinate. + Second coordinate. + Third coordinate. + Fourth coordinate. + + + + A quaternion. + The w-coordinate. + The x-coordinate. + The y-coordinate. + The z-coordinate. + + + + A quaternion as it appears in the havok objects. + The x-coordinate. + The y-coordinate. + The z-coordinate. + The w-coordinate. + + + + A 2x2 matrix of float values. Stored in OpenGL column-major format. + Member 1,1 (top left) + Member 2,1 (bottom left) + Member 1,2 (top right) + Member 2,2 (bottom right) + + + + A 3x3 rotation matrix; M^T M=identity, det(M)=1. Stored in OpenGL column-major format. + Member 1,1 (top left) + Member 2,1 + Member 3,1 (bottom left) + Member 1,2 + Member 2,2 + Member 3,2 + Member 1,3 (top right) + Member 2,3 + Member 3,3 (bottom left) + + + + A 3x4 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. + The (2,1) element. + The (3,1) element. + The (4,1) element. + The (1,2) element. + The (2,2) element. + The (3,2) element. + The (4,2) element. + The (1,3) element. + The (2,3) element. + The (3,3) element. + The (4,3) element. + The (1,4) element. + The (2,4) element. + The (3,4) element. + The (4,4) element. + + + + A 3x3 Havok matrix stored in 4x3 due to memory alignment. + + + + Unused + + + + Unused + + + + Unused + + + + 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 set of NiNode references. + Number of node references that follow. + The list of NiNode references. + + + + Another string format, for short strings. Specific to Bethesda-specific header tags. + The string length. + The string itself, null terminated (the null terminator is taken into account in the length byte). + + + + NiBoneLODController::SkinInfo. Reference to shape and skin instance. + + + + + + A set of NiBoneLODController::SkinInfo. + + + + + + NiSkinData::BoneVertData. A vertex and its weight. + The vertex index, in the mesh. + The vertex weight - between 0.0 and 1.0 + + + + Used in NiDefaultAVObjectPalette. + Object name. + 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. + 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. + + + + Information about how the file was exported + + + + + + + + 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. + + + + + + + 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. + + + + + + A list of \\0 terminated strings. + A bunch of 0x00 seperated strings. + Length of the palette string is repeated here. + + + + Tension, bias, continuity. + Tension. + Bias. + Continuity. + + + + A generic key with support for interpolation. Type 1 is normal linear interpolation, type 2 has forward and backward tangents, and type 3 has tension, bias and continuity arguments. Note that color4 and byte always seem to be of type 1. + Time of the key. + The key value. + Key forward tangent. + The key backward tangent. + The TBC of the key. + + + + Array of vector keys (anything that can be interpolated, except rotations). + Number of keys in the array. + The key type. + The keys. + + + + A special version of the key type used for quaternions. Never has tangents. + Time the key applies. + Time the key applies. + Value of the key. + The TBC of the key. + + + + Texture coordinates (u,v). As in OpenGL; image origin is in the lower left corner. + First coordinate. + Second coordinate. + + + + Texture coordinates (u,v). + First coordinate. + Second coordinate. + + + + Describes the order of scaling and rotation matrices. Translate, Scale, Rotation, Center are from TexDesc. + Back = inverse of Center. FromMaya = inverse of the V axis with a positive translation along V of 1 unit. + + + + + + + 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 + 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. + + The texture coordinate set in NiGeometryData that this texture slot will use. + 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? + + 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 origin around which the texture rotates. + + + + NiTexturingProperty::ShaderMap. Shader texture description. + + + Unique identifier for the Gamebryo shader system. + + + + List of three vertex indices. + First vertex index. + Second vertex index. + Third vertex index. + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + Skinning data for a submesh, optimized for hardware skinning. Part of NiSkinPartition. + Number of vertices in this submesh. + Number of triangles in this submesh. + Number of bones influencing this submesh. + Number of strips in this submesh (zero if not stripped). + Number of weight coefficients per vertex. The Gamebryo engine seems to work well only if this number is equal to 4, even if there are less than 4 influences per vertex. + List of bones. + Do we have a vertex map? + Maps the weight/influence lists in this submesh to the vertices in the shape being skinned. + Maps the weight/influence lists in this submesh to the vertices in the shape being skinned. + Do we have vertex weights? + The vertex weights. + The vertex weights. + The strip lengths. + Do we have triangle or strip data? + The strips. + The strips. + The triangles. + The triangles. + Do we have bone indices? + Bone indices, they index into 'Bones'. + Unknown + + + + + + + + + + + A plane. + The plane normal. + The plane constant. + + + + A sphere. + The sphere's center. + The sphere's radius. + + + + + + + Whether each transform component is valid. + + + + The rotation part of the transformation matrix. + The translation vector. + Scaling part (only uniform scaling is supported). + + + + Bethesda Animation. Furniture entry points. It specifies the direction(s) from where the actor is able to enter (and leave) the position. + + + + + + + + + Bethesda Animation. Animation type used on this position. This specifies the function of this 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. + Refers to a furnituremarkerxx.nif file. Always seems to be the same as Position Ref 1. + Similar to Orientation, in float form. + Unknown + Unknown/unused in nif? + + + + 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. + + + + Geometry morphing data component. + Name of the frame. + The number of morph keys that follow. + Unlike most objects, the presense of this value is not conditional on there being keys. + The morph key frames. + Unknown. + Unknown. + Morph vectors. + + + + particle array entry + Particle velocity + Unknown + The particle age. + Maximum age of the particle. + Timestamp of the last update. + Unknown short + Particle/vertex index matches array index + + + + 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. + + + + 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. + + FLAGS are stored in highest 3 bits: + Bit 7: sets the LINK property and controls whether this body is physically linked to others. + Bit 6: turns collision off (not used for Layer BIPED). + Bit 5: sets the SCALED property. + + PART NUMBER is stored in bits 0-4. Used only when Layer is set to BIPED. + + Part Numbers for Oblivion, Fallout 3, Skyrim: + 0 - OTHER + 1 - HEAD + 2 - BODY + 3 - SPINE1 + 4 - SPINE2 + 5 - LUPPERARM + 6 - LFOREARM + 7 - LHAND + 8 - LTHIGH + 9 - LCALF + 10 - LFOOT + 11 - RUPPERARM + 12 - RFOREARM + 13 - RHAND + 14 - RTHIGH + 15 - RCALF + 16 - RFOOT + 17 - TAIL + 18 - SHIELD + 19 - QUIVER + 20 - WEAPON + 21 - PONYTAIL + 22 - WING + 23 - PACK + 24 - CHAIN + 25 - ADDONHEAD + 26 - ADDONCHEST + 27 - ADDONARM + 28 - ADDONLEG + 29-31 - NULL + + + + + + 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. + + + + Bethesda Havok. Havok Information for packed TriStrip shapes. + + The number of vertices that form this sub shape. + The material of the subshape. + + + + Minimum motor force + Maximum motor force + Relative stiffness + Motor damping value + A factor of the current error to calculate the recovery velocity + A constant velocity which is used to recover from errors + Is Motor enabled + + + + Minimum motor force + Maximum motor force + Relative stiffness + + + Is Motor enabled + + + + Minimum motor force + Maximum motor force + The spring constant in N/m + The spring damping in Nsec/m + Is Motor enabled + + + + + + + + + + + + + + This constraint defines a cone in which an object can rotate. The shape of the cone can be controlled in two (orthogonal) directions. + + The point where the constraint is attached to its parent rigidbody. + Defines the orthogonal plane in which the body can move, the orthogonal directions in which the shape can be controlled (the direction orthogonal on this one and Twist A). + Central directed axis of the cone in which the object can rotate. Orthogonal on Plane A. + The point where the constraint is attached to the other rigidbody. + Defines the orthogonal plane in which the shape can be controlled (the direction orthogonal on this one and Twist B). + Central directed axis of the cone in which the object can rotate. Orthogonal on Plane B. + + + Central directed axis of the cone in which the object can rotate. Orthogonal on Plane A. + Defines the orthogonal plane in which the body can move, the orthogonal directions in which the shape can be controlled (the direction orthogonal on this one and Twist A). + Defines the orthogonal directions in which the shape can be controlled (namely in this direction, and in the direction orthogonal on this one and Twist A). + Point around which the object will rotate. Defines the orthogonal directions in which the shape can be controlled (namely in this direction, and in the direction orthogonal on this one and Twist A). + Central directed axis of the cone in which the object can rotate. Orthogonal on Plane B. + Defines the orthogonal plane in which the body can move, the orthogonal directions in which the shape can be controlled (the direction orthogonal on this one and Twist A). + Defines the orthogonal directions in which the shape can be controlled (namely in this direction, and in the direction orthogonal on this one and Twist A). + Defines the orthogonal directions in which the shape can be controlled (namely in this direction, and in the direction orthogonal on this one and Twist A). + + Maximum angle the object can rotate around the vector orthogonal on Plane A and Twist A relative to the Twist A vector. Note that Cone Min Angle is not stored, but is simply minus this angle. + Minimum angle the object can rotate around Plane A, relative to Twist A. + Maximum angle the object can rotate around Plane A, relative to Twist A. + Minimum angle the object can rotate around Twist A, relative to Plane A. + Maximum angle the object can rotate around Twist A, relative to Plane A. + Maximum friction, typically 0 or 10. In Fallout 3, typically 100. + + + + + + This constraint allows rotation about a specified axis, limited by specified boundaries. + + + Pivot point around which the object will rotate. + Axis of rotation. + Vector in the rotation plane which defines the zero angle. + Vector in the rotation plane, orthogonal on the previous one, which defines the positive direction of rotation. This is always the vector product of Axle A and Perp2 Axle In A1. + Pivot A in second entity coordinate system. + Axle A in second entity coordinate system. + Perp2 Axle In A2 in second entity coordinate system. + + + Axis of rotation. + Vector in the rotation plane which defines the zero angle. + Vector in the rotation plane, orthogonal on the previous one, which defines the positive direction of rotation. This is always the vector product of Axle A and Perp2 Axle In A1. + Pivot point around which the object will rotate. + Axle A in second entity coordinate system. + Perp2 Axle In A1 in second entity coordinate system. + Perp2 Axle In A2 in second entity coordinate system. + Pivot A in second entity coordinate system. + + Minimum rotation angle. + Maximum rotation angle. + Maximum friction, typically either 0 or 10. In Fallout 3, typically 100. + + + + + + This constraint allows rotation about a specified axis. + + + Pivot point around which the object will rotate. + Vector in the rotation plane which defines the zero angle. + Vector in the rotation plane, orthogonal on the previous one, which defines the positive direction of rotation. + Pivot A in second entity coordinate system. + Axle A (vector orthogonal on Perp2 Axles) in second entity coordinate system. + + + Axis of rotation. + Vector in the rotation plane which defines the zero angle. + Vector in the rotation plane, orthogonal on the previous one, which defines the positive direction of rotation. This is always the vector product of Axle A and Perp2 Axle In A1. + Pivot point around which the object will rotate. + Axle A in second entity coordinate system. + Perp2 Axle In A1 in second entity coordinate system. + Perp2 Axle In A2 in second entity coordinate system. + Pivot A in second entity coordinate system. + + + + + + Pivot point in the local space of entity A. + Pivot point in the local space of entity B. + + + + + + Pivot. + Rotation axis. + Plane normal. Describes the plane the object is able to move on. + Describes the axis the object is able to travel along. Unit vector. + Pivot in B coordinates. + Rotation axis. + Plane normal. Describes the plane the object is able to move on in B coordinates. + Describes the axis the object is able to travel along in B coordinates. Unit vector. + + + Describes the axis the object is able to travel along. Unit vector. + Rotation axis. + Plane normal. Describes the plane the object is able to move on. + Pivot. + Describes the axis the object is able to travel along in B coordinates. Unit vector. + Rotation axis. + Plane normal. Describes the plane the object is able to move on in B coordinates. + Pivot in B coordinates. + + Describe the min distance the object is able to travel. + Describe the max distance the object is able to travel. + Friction. + + + + + + + + + + + + Used to store skin weights in NiTriShapeSkinController. + The amount that this bone affects the vertex. + The index of the vertex that this weight applies to. + Unknown. Perhaps some sort of offset? + + + + Determines how the raw image data is stored in NiRawImageData. + + + + + + Box Bounding Volume + + + + + + + Capsule Bounding Volume + + + + + + + + + + + + + Type of collision data. + + + + + + + + + + + + + + + + + + + Transformation data for the bone at this index in bhkPoseArray. + + + + + + + A list of transforms for each bone in bhkPoseArray. + + + + + + Array of Vectors for Decal placement in BSDecalPlacementVectorExtraData. + + Vector XYZ coords + Vector Normals + + + + Editor flags for the Body Partitions. + + + + + + Body part list for DismemberSkinInstance + Flags related to the Body Partition + Body Part Index + + + + Stores Bone Level of Detail info in a BSBoneLODExtraData + + + + + + Per-chunk material, used in bhkCompressedMeshShapeData + + + + + + Triangle indices used in pair with "Big Verts" in a bhkCompressedMeshShapeData. + + + + Always 0? + + + + + A set of transformation data: translation and rotation + A vector that moves the chunk by the specified amount. W is not used. + Rotation. Reference point for rotation is bhkRigidBody translation. + + + + Defines subshape chunks in bhkCompressedMeshShapeData + + Index of material in bhkCompressedMeshShapeData::Chunk Materials + Always 65535? + Index of transformation in bhkCompressedMeshShapeData::Chunk Transforms + + + + + + + + + + + + Type of constraint. + Always 2 (Hardcoded). Number of bodies affected by this constraint. + Usually NONE. The entity affected by this constraint. + Usually NONE. The entity affected by this constraint. + Usually 1. Higher values indicate higher priority of this constraint? + + + + + + + + + + + + + Type of constraint. + Always 2 (Hardcoded). Number of bodies affected by this constraint. + Usually NONE. The entity affected by this constraint. + Usually NONE. The entity affected by this constraint. + Usually 1. Higher values indicate higher priority of this constraint? + + + + + + + + + + + + + Abstract object type. + + + + Unknown. + Unknown. + The parent? + Unknown. + Unknown. + Unknown. + + + + Unknown. Only found in 2.3 nifs. + Name of this object. + Unknown. + Unknown. Matrix? + Unknown. + Child? + Unknown. + A count. + Unknown. + + + + Unknown! + Unknown. + + + + Unknown! + Unknown. + + + + Unknown! + Unknown. + + + + Unknown! + Unknown. + + + + + LEGACY (pre-10.1). Abstract base class for particle system modifiers. + Next particle modifier. + Points to the particle system controller parent. + + + + Particle system collider. + 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. + The object whose position and orientation are the basis of the collider. + + + + + + + + + + + + + The base type of most Bethesda-specific Havok-related NIF objects. + + + + Havok objects that can be saved and loaded from disk? + + + + Havok objects that have a position in the world? + Link to the body for this collision object. + + Garbage data from memory. + + + + + + + Havok object that do not react with other objects when they collide (causing deflection, etc.) but still trigger collision notifications to the game. Possible uses are traps, portals, AI fields, etc. + + + + A Havok phantom that uses a Havok shape object for its collision volume instead of just a bounding box. + + + + Unknown shape. + Garbage data from memory. + + + + + A havok node, describes physical properties. + + + + 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. + 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. The default is once every 65535 frames. + Unknown. + Copy of Havok Filter + Garbage data from memory. Matches previous Unused value. + + + Skipped over when writing Collision Response and Callback Delay. + + + A vector that moves the body by the specified amount. Only enabled in bhkRigidBodyT objects. + The rotation Yaw/Pitch/Roll to apply to the body. Only enabled in bhkRigidBodyT objects. + Linear velocity. + Angular velocity. + Defines how the mass is distributed among the body, 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. + 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. + + + How smooth its surfaces is and how easily it will slide along other bodies. + + + 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. + + Maximal linear velocity. + Maximal angular velocity. + + The maximum allowed penetration for this object. + This is a hint to the engine to see how much CPU the engine should invest to keep this object from penetrating. + 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. + + 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. + + + 1 = respond to wind + 1 = respond to wind + + + + The "T" suffix marks this body as active for translation and rotation. + + + + Describes a physical constraint. + Number of bodies affected by this constraint. + The entities affected by this constraint. + Usually 1. Higher values indicate higher priority of this constraint? + + + + Hinge constraint. + Describes a limited hinge constraint + + + + A malleable constraint. + Constraint within constraint. + + + + A spring constraint. + Stiff Spring constraint. + + + + Ragdoll constraint. + Ragdoll constraint. + + + + A prismatic constraint. + Describes a prismatic constraint + + + + A hinge constraint. + Hinge constraing. + + + + A Ball and Socket Constraint. + Describes a ball and socket constraint + + + + Two Vector4 for pivot in A and B. + + + + + + A Ball and Socket Constraint chain. + Number of pivot points. Divide by 2 to get the number of constraints. + Two pivot points A and B for each constraint. + High values are harder and more reactive, lower values are smoother. + Defines damping strength for the current velocity. + Restitution (amount of elasticity) of constraints. Added to the diagonal of the constraint matrix. A value of 0.0 can result in a division by zero with some chain configurations. + Maximum distance error in constraints allowed before stabilization algorithm kicks in. A smaller distance causes more resistance. + Number of links in the chain + + Hardcoded to 2. Don't change. + + + + + + + A Havok Shape? + + + + Transforms a shape. + The shape that this object transforms. + The material of the shape. + + Garbage data from memory. + A transform matrix. + + + + A havok shape, perhaps with a bounding sphere for quick rejection in addition to more detailed shape data? + The material of the shape. + The radius of the sphere that encloses the shape. + + + + A havok shape. + + + + A sphere. + + + + A capsule. + Not used. The following wants to be aligned at 16 bytes. + First point on the capsule's axis. + Matches first capsule radius. + Second point on the capsule's axis. + Matches second capsule radius. + + + + A box. + Not used. The following wants to be aligned at 16 bytes. + A cube stored in Half Extents. A unit cube (1.0, 1.0, 1.0) would be stored as 0.5, 0.5, 0.5. + Unused as Havok stores the Half Extents as hkVector4 with the W component unused. + + + + A convex shape built from vertices. Note that if the shape is used in + a non-static object (such as clutter), then they will simply fall + through ground when they are under a bhkListShape. + + + Number of vertices. + Vertices. Fourth component is 0. Lexicographically sorted. + The number of half spaces. + Half spaces as determined by the set of vertices above. First three components define the normal pointing to the exterior, fourth component is the signed distance of the separating plane to the origin: it is minus the dot product of v and n, where v is any vertex on the separating plane, and n is the normal. Lexicographically sorted. + + + + + A convex transformed shape? + + + + Unknown. + Unknown. + Unknown. + The number of spheres in this multi sphere shape. + This array holds the spheres which make up the multi sphere shape. + + + + A tree-like Havok data structure stored in an assembly-like binary code? + + + + Memory optimized partial polytope bounding volume tree shape (not an entity). + The shape. + Garbage data from memory. Referred to as User Data, Shape Collection, and Code. + Scale. + Number of bytes for MOPP data. + Origin of the object in mopp coordinates. This is the minimum of all vertices in the packed shape along each axis, minus 0.1. + The scaling factor to quantize the MOPP: the quantization factor is equal to 256*256 divided by this number. In Oblivion files, scale is taken equal to 256*256*254 / (size + 0.2) where size is the largest dimension of the bounding box of the packed shape. + The tree of bounding volume data (old style, contains more than just the mopp script). + Tells if MOPP Data was organized into smaller chunks (PS3) or not (PC) + The tree of bounding volume data. + + + + + Havok collision object that uses multiple shapes? + + + + A list of shapes. + + Do not put a bhkPackedNiTriStripsShape in the Sub Shapes. Use a + separate collision nodes without a list shape for those. + + Also, shapes collected in a bhkListShape may not have the correct + walking noise, so only use it for non-walkable objects. + The number of sub shapes referenced. + List of shapes. + The material of the shape. + + + Count. + Unknown. + + + + + + + + + The number of strips data objects referenced. + Refers to a bunch of NiTriStripsData objects that make up this shape. + + + + A shape constructed from strips data. + + + + Looks like a memory pointer and may be garbage. + + Looks like a memory pointer and may be garbage. + + Same as radius + Same as scale. + + + + + A shape constructed from a bunch of strips. + The material of the shape. + + Garbage data from memory though the last 3 are referred to as maxSize, size, and eSize. + + Scale. Usually (1.0, 1.0, 1.0, 0.0). + The number of strips data objects referenced. + 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. + + + + A generic extra data object. + Name of this object. + Block number of the next extra data object. + + + + Abstract base class for all interpolators of bool, float, NiQuaternion, NiPoint3, NiColorA, and NiQuatTransform data. + + + + Abstract base class for interpolators that use NiAnimationKeys (Key, KeyGrp) for interpolation. + + + + Uses NiFloatKeys to animate a float value over time. + Pose value if lacking NiFloatData. + + + + + An interpolator for transform keyframes. + + + + + + Uses NiPosKeys to animate an NiPoint3 value over time. + Pose value if lacking NiPosData. + + + + + + + + Used to make an object follow a predefined spline path. + + -1 = Negative, 1 = Positive + Max angle in radians. + + 0, 1, or 2 representing X, Y, or Z. + + + + + + Uses NiBoolKeys to animate a bool value over time. + Pose value if lacking NiBoolData. + + + + + Uses NiBoolKeys to animate a bool value over time. + Unlike NiBoolInterpolator, it ensures that keys have not been missed between two updates. + + + + + + + + Interpolator item for array in NiBlendInterpolator. + Reference to an interpolator. + + + + + + + + Abstract base class for all NiInterpolators that blend the results of sub-interpolators together to compute a final weighted value. + + + + + + + + + + + + + + + + Abstract base class for interpolators storing data via a B-spline. + Animation start time. + Animation stop time. + + + + + + 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. + (=NiStringExtraData) + ref + Extra string data. + Always 0. + Extra data object index. (The first in a chain) + The number of Extra Data objects referenced through the list. + List of extra data indices. + Controller object index. (The first in a chain) + + + + This is the most common collision object found in NIF files. It acts as a real object that + is visible and possibly (if the body allows for it) interactive. The node itself + is simple, it only has three properties. + For this type of collision object, bhkRigidBody or bhkRigidBodyT is generally used. + Index of the AV object referring to this collision object. + + + + Collision box. + + + Use Alternate Bounding Volume. + + + + + bhkNiCollisionObject flags. The flags 0x2, 0x100, and 0x200 are not seen in any NIF nor get/set by the engine. + + + + Havok related collision object? + + Set to 1 for most objects, and to 41 for animated objects (ANIM_STATIC). Bits: 0=Active 2=Notify 3=Set Local 6=Reset. + + + + + + Havok related collision object? + + + + Unknown. + + + + + + Unknown. + + + + Unknown. + + + + Abstract audio-visual base class from which all of Gamebryo's scene graph objects inherit. + 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) + + All rendering properties attached to this object. + Always 2,0,2,0. + 0 or 1. + + + + + + + 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 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. + For Bethesda Stream 130 (FO4), NiLight now directly inherits from NiAVObject. + Scales the overall brightness of all light components. + + + + + + + Abstract base class representing all rendering properties. Subclasses are attached to NiAVObjects to control their rendering. + + + + Unknown + Unknown. + + + + Abstract base class for all particle system modifiers. + 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. + + + + Abstract base class for all particle system emitters. + Speed / Inertia of particle movement. + Adds an amount of randomness to Speed. + Declination / First axis. + Declination randomness / First axis. + Planar Angle / Second axis. + Planar Angle randomness / Second axis . + Defines color of a birthed particle. + Size of a birthed particle. + Particle Radius randomness. + Duration until a particle dies. + Adds randomness to Life Span. + + + + Abstract base class for particle emitters that emit particles from a volume. + Node parent of this modifier? + + + + Abstract base class that provides the base timing and update functionality for all the Gamebryo animation controllers. + Index of the next controller. + + Controller flags. + Bit 0 : Anim type, 0=APP_TIME 1=APP_INIT + Bit 1-2 : Cycle type, 00=Loop 01=Reverse 10=Clamp + Bit 3 : Active + Bit 4 : Play backwards + Bit 5 : Is manager controlled + Bit 6 : Always seems to be set in Skyrim and Fallout NIFs, unknown function + + Frequency (is usually 1.0). + Phase (usually 0.0). + Controller start time. + Controller stop time. + Controller target (object index of the first controllable ancestor of this object). + Unknown integer. + + + + + Abstract base class for all NiTimeController objects using NiInterpolator objects to animate their target objects. + + + + 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. + 1 = UPDATE NORMALS + Unknown. + Geometry morphing data index. + + + + + + Unknown. + + + + Unknown! Used by Daoc->'healing.nif'. + + + + Unknown! Used by Daoc. + This controller's data. + + + + Uses a single NiInterpolator to animate its target value. + + + + + DEPRECATED (10.2), RENAMED (10.2) to NiTransformController + A time controller object for animation key frames. + + + + + NiTransformController replaces NiKeyframeController. + + + + A particle system modifier controller. + NiInterpController::GetCtlrID() string format: + '%s' + Where %s = Value of "Modifier Name" + Used to find the modifier pointer. + + + + Particle system emitter controller. + NiInterpController::GetInterpolatorID() string format: + ['BirthRate', 'EmitterActive'] (for "Interpolator" and "Visibility Interpolator" respectively) + + + + + + A particle system modifier controller that animates a boolean value for particles. + + + + A particle system modifier controller that animates active/inactive state for particles. + + + + + A particle system modifier controller that animates a floating point value for particles. + + + + + Animates the declination value on an NiPSysEmitter object. + + + + Animates the declination variation value on an NiPSysEmitter object. + + + + Animates the size value on an NiPSysEmitter object. + + + + Animates the lifespan value on an NiPSysEmitter object. + + + + Animates the speed value on an NiPSysEmitter object. + + + + Animates the strength value of an NiPSysGravityModifier. + + + + + Abstract base class for all NiInterpControllers that use an NiInterpolator to animate their target float value. + + + + 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). + + + Time between two flips. + delta = (start_time - stop_time) / sources.num_indices + + + The texture sources. + The image sources + + + + Animates the alpha value of a property using an interpolator. + + + + + 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", %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. + + + + + Unknown controller. + + + + Abstract base class for all NiInterpControllers that use a NiInterpolator to animate their target boolean value. + + + + Animates the visibility of an NiAVObject. + + + + + 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) + 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. + 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" + + + + + DEPRECATED (20.5), Replaced by NiSkinningLODController. + Level of detail controller for bones. Priority is arranged from low to high. + Unknown. + Number of LODs. + Number of node arrays. + 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. + The size of the second list of shape groups. + The size of the second list of shape groups. + Group of NiTriShape indices. + Group of NiTriShape indices. + Unknown. + Unknown. + + + + A simple LOD controller for bones. + + + + Shader. + The shader name. + 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. + + + + Describes a visible scene element with vertices like a mesh, a particle system, lines, etc. + + + + + + Data index (NiTriShapeData/NiTriStripData). + Data index (NiTriShapeData/NiTriStripData). + + + + + + + + + + + Describes a mesh, built from triangles. + + + + + + + + + + Mesh data: vertices, vertex normals, etc. + + Always zero. + Number of vertices. + Number of vertices. + Bethesda uses this for max number of particles in NiPSysData. + Used with NiCollision objects when OBB or TRI is set. + Unknown. + Is the vertex array present? (Always non-zero.) + The mesh vertices. + + + + Do we have lighting normals? These are essential for proper lighting: if not present, the model will only be influenced by ambient light. + The lighting normals. + Tangent vectors. + Bitangent vectors. + + Center of the bounding box (smallest box that contains all vertices) of the mesh. + Radius of the mesh: maximal Euclidean distance between the center and all vertices. + Unknown, always 0? + + + Do we have vertex colors? These are usually used to fine-tune the lighting of the model. + + Note: how vertex colors influence the model can be controlled by having a NiVertexColorProperty object as a property child of the root node. If this property object is not present, the vertex colors fine-tune lighting. + + Note 2: set to either 0 or 0xFFFFFFFF for NifTexture compatibility. + + The vertex colors. + The lower 6 (or less?) bits of this field represent the number of UV texture sets. The other bits are probably flag bits. For versions 10.1.0.0 and up, if bit 12 is set then extra vectors are present after the normals. + + Do we have UV coordinates? + + Note: for compatibility with NifTexture, set this value to either 0x00000000 or 0xFFFFFFFF. + + The UV texture coordinates. They follow the OpenGL standard: some programs may require you to flip the second coordinate. + Consistency Flags + Unknown. + + + + + + + Describes a mesh, built from triangles. + Number of triangles. + + + + Unknown. Is apparently only used in skeleton.nif files. + Seems to be always zero. + + + + Bethesda-specific collision bounding box for skeletons. + Center of the bounding box. + Dimensions of the bounding box from center. + + + + Unknown. Marks furniture sitting positions? + Number of positions. + Unknown. Probably has something to do with the furniture positions? + + + + Particle modifier that adds a blend of object space translation and rotation to particles born in world space. + Amount of blending? + + + + Particle emitter that uses a node, its children and subchildren to emit from. Emission will be evenly spread along points from nodes leading to their direct parents/children only. + + + + Particle Modifier that uses the wind value from the gamedata to alter the path of particles. + The amount of force wind will have on particles. + + + + NiTriStripsData for havok data? + + + + Unknown. + + Number of subparts. + The subparts. + + + + Transparency. Flags 0x00ED. + + Bit 0 : alpha blending enable + Bits 1-4 : source blend mode + Bits 5-8 : destination blend mode + Bit 9 : alpha test enable + Bit 10-12 : alpha test mode + Bit 13 : no sorter flag ( disables triangle sorting ) + + blend modes (glBlendFunc): + 0000 GL_ONE + 0001 GL_ZERO + 0010 GL_SRC_COLOR + 0011 GL_ONE_MINUS_SRC_COLOR + 0100 GL_DST_COLOR + 0101 GL_ONE_MINUS_DST_COLOR + 0110 GL_SRC_ALPHA + 0111 GL_ONE_MINUS_SRC_ALPHA + 1000 GL_DST_ALPHA + 1001 GL_ONE_MINUS_DST_ALPHA + 1010 GL_SRC_ALPHA_SATURATE + + test modes (glAlphaFunc): + 000 GL_ALWAYS + 001 GL_LESS + 010 GL_EQUAL + 011 GL_LEQUAL + 100 GL_GREATER + 101 GL_NOTEQUAL + 110 GL_GEQUAL + 111 GL_NEVER + + Threshold for alpha testing (see: glAlphaFunc) + Unknown + Unknown + + + + Ambient light source. + + + + Generic rotating particles data object. + + The maximum number of particles (matches the number of vertices). + The particles' size. + Is the particle size array present? + The individual particle 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. + Is the particle size array present? + The individual particle sizes. + Is the particle rotation array present? + The individual particle rotations. + Are the angles of rotation present? + Angles of rotation + Are axes of rotation present? + Axes of rotation. + + + 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 + Defines UV offsets + Sets aspect ratio for Subtexture Offset UV quads + + + + + + + + Rotating particles data object. + Is the particle rotation array present? + The individual particle rotations. + + + + Particle system data object (with automatic normals?). + + + + Particle Description. + Unknown. + Unknown. + Unknown. + Unknown. + Unknown. + Unknown. + + + + Particle system data. + + + + + + + + + + Particle meshes data. + + + + + + + + + Binary extra data object. Used to store tangents and bitangents in Oblivion. + The binary data. + + + + Voxel extra data object. + Unknown. 0? + Link to binary voxel data. + + + + Voxel data object. + Unknown. + Unknown. + Unknown. Is this^3 the Unknown Bytes 1 size? + Unknown. + Unknown. Always a multiple of 7. + Unknown. + Vectors on the unit sphere. + Unknown. + Unknown. + Unknown. + + + + Blends bool values together. + The pose value. Invalid if using data. + + + + Blends float values together. + The pose value. Invalid if using data. + + + + Blends NiPoint3 values together. + The pose value. Invalid if using data. + + + + Blends NiQuatTransform values together. + + + + Wrapper for boolean animation keys. + The boolean keys. + + + + Boolean extra data. + The boolean extra data value. + + + + 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). + + + + 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. + + + + + + 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.) + + + + 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.) + + + + NiBSplineTransformInterpolator plus the information required for using compact control points. + + + + + + + + + + + + + Contains one or more sets of control points for use in interpolation of open, uniform B-Splines, stored as either float or compact. + + Float values representing the control data. + + Signed shorts representing the data from 0 to 1 (scaled by SHRT_MAX). + + + + Camera object. + Obsolete flags. + Frustrum left. + Frustrum right. + Frustrum top. + Frustrum bottom. + Frustrum near. + Frustrum far. + Determines whether perspective is used. Orthographic means no perspective. + Viewport left. + Viewport right. + Viewport top. + Viewport bottom. + Level of detail adjust. + + Deprecated. Array is always zero length on disk write. + Deprecated. Array is always zero length on disk write. + Unknown. + + + + Wrapper for color animation keys. + The color keys. + + + + Extra data in the form of NiColorA (red, green, blue, alpha). + RGBA Color? + + + + Controls animation sequences on a specific branch of the scene graph. + 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. + + + + + + + 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 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. + + + + + + + + + + Abstract base class for indexing NiAVObject by name. + + + + NiAVObjectPalette implementation. Used to quickly look up objects by name. + Scene root of the object palette. + Number of objects. + The objects. + + + + Directional light source. + + + + NiDitherProperty allows the application to turn the dithering of interpolated colors and fog values on and off. + 1 = Enable dithering + + + + DEPRECATED (10.2), REMOVED (20.5). Replaced by NiTransformController and NiLookAtInterpolator. + The data for the controller. + + + + Wrapper for 1D (one-dimensional) floating point animation keys. + The keys. + + + + Extra float data. + The float data. + + + + Extra float array data. + Number of floats in the next field. + Float data. + + + + NiFogProperty allows the application to enable, disable and control the appearance of fog. + + Bit 0: Enables Fog + Bit 1: Sets Fog Function to FOG_RANGE_SQ + Bit 2: Sets Fog Function to FOG_VERTEX_ALPHA + + 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. + The color of the fog. + + + + LEGACY (pre-10.1) particle modifier. Applies a gravitational field on the particles. + Unknown. + The strength/force of this gravity. + The force field type. + The position of the mass point relative to the particle system. + The direction of the applied acceleration. + + + + Extra integer data. + The value of the extra data. + + + + Controls animation and collision. Integer holds flags: + Bit 0 : enable havok, bAnimated(Skyrim) + Bit 1 : enable collision, bHavok(Skyrim) + Bit 2 : is skeleton nif?, bRagdoll(Skyrim) + Bit 3 : enable animation, bComplex(Skyrim) + Bit 4 : FlameNodes present, bAddon(Skyrim) + Bit 5 : EditorMarkers present, bEditorMarker(Skyrim) + Bit 6 : bDynamic(Skyrim) + Bit 7 : bArticulated(Skyrim) + Bit 8 : bIKTarget(Skyrim)/needsTransformUpdates + Bit 9 : bExternalEmit(Skyrim) + Bit 10: bMagicShaderParticles(Skyrim) + Bit 11: bLights(Skyrim) + Bit 12: bBreakable(Skyrim) + Bit 13: bSearchedBreakable(Skyrim) .. Runtime only? + + + + Extra integer array data. + Number of integers. + Integers. + + + + An extended keyframe controller. + A link to more keyframe data. + + + + 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. + + Individual arrays of keys for rotating X, Y, and Z individually. + Translation keys. + Scale keys. + + + + + + + + + + DEPRECATED (10.2), REMOVED (20.5) + Replaced by NiTransformController and NiLookAtInterpolator. + + + + + + NiLookAtInterpolator rotates an object so that it always faces a target object. + + + + + + + + + + + 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. + + + + + DEPRECATED (20.5), replaced by NiMorphMeshModifier. + Geometry morphing data. + Number of morphing object. + Number of vertices. + This byte is always 1 in all official files. + The geometry morphing objects. + + + + Generic node object for grouping. + The number of child objects. + List of child node object indices. + The number of references to effect objects that follow. + List of node effects. ADynamicEffect? + + + + A NiNode used as a skeleton bone? + + + + Morrowind specific. + + + + Firaxis-specific UI widgets? + Unknown. + Looks like 9 links and some string data. + + + + Unknown. + + + + Unknown. + Unknown. + Unknown. + Unknown. + Number of unknown links. + Unknown pointers to other buttons. Maybe other buttons in a group so they can be switch off if this one is switched on? + + + + These nodes will always be rotated to face the camera creating a billboard effect for any attached objects. + + In pre-10.1.0.0 the Flags field is used for BillboardMode. + Bit 0: hidden + Bits 1-2: collision mode + Bit 3: unknown (set in most official meshes) + Bits 5-6: billboard mode + + Collision modes: + 00 NONE + 01 USE_TRIANGLES + 10 USE_OBBS + 11 CONTINUE + + Billboard modes: + 00 ALWAYS_FACE_CAMERA + 01 ROTATE_ABOUT_UP + 10 RIGID_FACE_CAMERA + 11 ALWAYS_FACE_CENTER + The way the billboard will react to the camera. + + + + Bethesda-specific extension of Node with animation properties stored in the flags, often 42? + + + + Unknown. + + + + Flags for NiSwitchNode. + + + + + + Represents groups of multiple scenegraph subtrees, only one of which (the "active child") is drawn at any given time. + + + + + + Level of detail selector. Links to different levels of detail of the same model, used to switch a geometry at a specified distance. + + + + + + + + NiPalette objects represent mappings from 8-bit indices to 24-bit RGB or 32-bit RGBA colors. + + The number of palette entries. Always 256 but can also be 16. + The color palette. + The color palette. + + + + LEGACY (pre-10.1) particle modifier. + + + + + + + The position of the mass point relative to the particle system? + The direction of the applied acceleration? + + + + LEGACY (pre-10.1) particle modifier. + + + + + 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. + + + + LEGACY (pre-10.1) particle modifier. + + + + + + LEGACY (pre-10.1) particle modifier. + + + + + + + Generic particle system node. + + + + + LEGACY (pre-10.1). NiParticles which do not house normals and generate them at runtime. + + + + LEGACY (pre-10.1). Particle meshes. + + + + LEGACY (pre-10.1). Particle meshes data. + Refers to the mesh that makes up a particle? + + + + A particle system. + + + + + + + + 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. + + + + Particle system. + + + + A generic particle system time controller object. + Particle speed in old files + Particle speed + Particle random speed modifier + + vertical emit direction [radians] + 0.0 : up + 1.6 : horizontal + 3.1416 : down + + emitter's vertical opening angle [radians] + horizontal emit direction + emitter's horizontal opening angle + Unknown. + Unknown. + Particle size + Particle emit start time + Particle emit stop time + Unknown byte, (=0) + Particle emission rate in old files + Particle emission rate (particles per second) + Particle lifetime + Particle lifetime random modifier + Bit 0: Emit Rate toggle bit (0 = auto adjust, 1 = use Emit Rate value) + Particle random start translation vector + This index targets the particle emitter object (TODO: find out what type of object this refers to). + ? short=0 ? + ? float=1.0 ? + ? int=1 ? + ? int=0 ? + ? short=0 ? + + Particle velocity + Unknown + The particle's age. + + Timestamp of the last update. + Unknown short + Particle/vertex index matches array index + + Size of the following array. (Maximum number of simultaneous active particles) + Number of valid entries in the following array. (Number of active particles at the time the system was saved) + Individual particle modifiers? + unknown int (=0xffffffff) + Link to some optional particle modifiers (NiGravity, NiParticleGrowFade, NiParticleBomb, ...) + Unknown int (=0xffffffff) + Trailing null byte + + + + + + + A particle system controller, used by BS in conjunction with NiBSParticleNode. + + + + DEPRECATED (10.2), REMOVED (20.5). Replaced by NiTransformController and NiPathInterpolator. + Time controller for a path. + + -1 = Negative, 1 = Positive + Max angle in radians. + + 0, 1, or 2 representing X, Y, or Z. + + + + + + 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 (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 + [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 (Compressed), 8, 24 or 32. + + + + + + Channel Data + + + + + + + + + + + + + + + + + A texture. + + + + + + + + + + + + LEGACY (pre-10.1) particle modifier. + Usually 0? + Unknown. + Unknown. + Unknown. + Unknown. + Unknown. + Unknown. + Unknown. + Unknown. + Unknown. + Unknown. + Unknown. + Unknown. + Unknown. + Unknown. + Unknown. + Unknown. + Unknown. + + + + A point light. + + + + + + + Wrapper for position animation keys. + + + + + Wrapper for rotation animation keys. + + + + + + + + Particle modifier that controls and updates the age of particles in the system. + Should the particles spawn on death? + The spawner to use on death. + + + + Particle modifier that applies an explosive force to particles. + 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. + 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. + + + + + + + Particle modifier that adds a defined shape to act as a collision object for particles to interact with. + + + + + Particle modifier that adds keyframe data to modify color/alpha values of particles over time. + + + + + Particle emitter that uses points within a defined Cylinder shape to emit from. + + + + + + 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. + + + + DEPRECATED (10.2). Particle system emitter controller data. + + + + + + + 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. + How the force diminishes by distance. + The acceleration of the force. + The type of gravitational force. + Adds a degree of randomness. + Scale for turbulence. + + + + + 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 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. + + + + + + + + + + + + + + + + + + + + + + + + + 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 + Frame to start looping + + + + + + + Particle Collider object which particles will interact with. + 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. + + + + + Particle modifier that updates the particle positions based on velocity and last update time. + + + + Particle modifier that calls reset on a target upon looping. + + + + Particle modifier that adds rotations to particles. + 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. + 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. + + + + + Particle system controller, tells the system to update its simulation. + + + + Base for all force field particle modifiers. + 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 vortex field in Field Object's space. + + + + Particle system modifier, implements a gravity field force for particles. + Direction of the gravity field in Field Object's space. + + + + Particle system modifier, implements a drag field force for particles. + 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. + How many turbulence updates per second. + + + + + + + + + + + + + + + + + Particle system controller for force field magnitude. + + + + Particle system controller for force field attenuation. + + + + Particle system controller for force field maximum distance. + + + + Particle system controller for air field air friction. + + + + Particle system controller for air field inherit velocity. + + + + Particle system controller for air field spread. + + + + Particle system controller for emitter initial rotation speed. + + + + Particle system controller for emitter initial rotation speed variation. + + + + Particle system controller for emitter initial rotation angle. + + + + Particle system controller for emitter initial rotation angle variation. + + + + Particle system controller for emitter planar angle. + + + + Particle system controller for emitter planar angle variation. + + + + Particle system modifier, updates the particle velocity to simulate the effects of air movements like wind, fans, or wake. + 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. + + + + The angle of the air field cone if Enable Spread is true. + + + + Guild 2-Specific node + Unknown + Unknown + Unknown + Unknown + Unknown + Unknown + Unknown + Unknown + Unknown + Unknown + Unknown + + + + Unknown controller + + + + Particle system modifier, updates the particle velocity to simulate the effects of point gravity. + 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. + + + + + + + NiScreenLODData controls switching LOD levels based on proportion of the screen that a bound would include. + + + + + + + + Unknown. + + + + DEPRECATED (pre-10.1), REMOVED (20.3). + Keyframe animation root node, in .kf files. + + + + Determines whether flat shading or smooth shading is used on a shape. + + Bit 0: Enable smooth phong shading on this shape. Otherwise, hard-edged flat shading will be used on this shape. + + + + + Skinning data. + 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. + Contains offset data for each node that this skin is influenced by. + + + + Skinning instance. + Skinning data reference. + Refers to a NiSkinPartition objects, which partitions the mesh such that every vertex is only influenced by a limited number of bones. + Armature root node. + The number of node bones referenced as influences. + List of all armature bones. + + + + Old version of skinning instance. + The number of node bones referenced as influences. + The number of vertex weights stored for each bone. + List of all armature bones. + Contains skin weight data for each node that this skin is influenced by. + + + + A copy of NISkinInstance for use with NiClod meshes. + + + + 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. + + Skin partition objects. + + + + + + + + + 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? + The external texture file name. + Unknown. + Unknown. Seems to be set if Pixel Data is present? + The original source filename of the image embedded by the referred NiPixelData object. + 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. + + + + Gives specularity to a shape. Flags 0x0001. + Bit 0 = Enable specular lighting on this shape. + + + + LEGACY (pre-10.1) particle modifier. + Unknown. + Unknown. + Unknown. + Unknown. + Unknown. + Unknown. + Unknown. + + + + A spot. + + + Describes the distribution of light. (see: glLight) + + + + Allows control of stencil testing. + Property flags. + Enables or disables the stencil test. + Selects the compare mode function (see: glStencilFunc). + + A bit mask. The default is 0xffffffff. + + + + Used to enabled double sided faces. Default is 3 (DRAW_BOTH). + + Property flags: + Bit 0: Stencil Enable + Bits 1-3: Fail Action + Bits 4-6: Z Fail Action + Bits 7-9: Pass Action + Bits 10-11: Draw Mode + Bits 12-14: Stencil Function + + + A bit mask. The default is 0xffffffff. + + + + Apparently commands for an optimizer instructing it to keep things it would normally discard. + Also refers to NiNode objects (through their name) in animation .kf files. + The number of bytes left in the record. Equals the length of the following string + 4. + The string. + + + + List of 0x00-seperated strings, which are names of controlled objects and controller types. Used in .kf files in conjunction with NiControllerSequence. + A bunch of 0x00 seperated strings. + + + + List of strings; for example, a list of all bone names. + Number of strings. + The strings. + + + + Extra data, used to name different animation sequences. + Unknown. Always equals zero in all official files. + The number of text keys that follow. + List of textual notes and at which time they take effect. Used for designating the start and stop of animations and the triggering of sounds. + + + + 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. + + 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. + Source texture index. + Determines whether a clipping plane is used. + + + + Unknown: 0. + + + + LEGACY (pre-10.1) + + Unknown. Either 210 or 194. + 0? + -75? + + + + 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. + Unknown. Often seems to be 7. Perhaps m_uiMipLevels? + Unknown. Perhaps fImageScale? + + + + LEGACY (pre-10.1) + Property flags. + Property flags. + Link to the texture image. + Unknown. 0? + + + + 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. + Number of textures. + Do we have a base texture? + The base texture. + Do we have a dark texture? + The dark texture. + Do we have a detail texture? + The detail texture. + Do we have a gloss texture? + The gloss texture. + Do we have a glow texture? + The glowing texture. + Do we have a bump map texture? + The bump map 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? + Another decal 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? + Another decal texture. Who knows the limit. + Number of Shader textures that follow. + Shader textures. + + + + + + Wrapper for transformation animation keys. + + + + A shape node that refers to singular triangle data. + + + + Holds mesh data using a list of singular triangles. + Num Triangles times 3. + Do we have triangle data? + Triangle data. + Triangle face data. + Number of shared normals groups. + The shared normals. + + + + A shape node that refers to data organized into strips of triangles + + + + Holds mesh data using strips of triangles. + Number of OpenGL triangle strips that are present. + The number of points in each triangle strip. + Do we have strip point data? + The points in the Triangle strips. Size is the sum of all entries in Strip Lengths. + The points in the Triangle strips. Size is the sum of all entries in Strip Lengths. + + + + Unknown + unknown (=4 - 5) + unknown + The number of child objects. + List of child node object indices. + unknown + unknown + + + + Holds mesh data using a list of singular triangles. + + + + LEGACY (pre-10.1) + Sub data of NiBezierMesh + unknown + unknown + unknown + unknown + unknown + unknown + unknown + unknown + unknown + + + + LEGACY (pre-10.1) + Unknown + references. + unknown + Unknown. + Data count. + Unknown. + data. + Unknown (illegal link?). + data. + unknown + data count 2. + data count. + + + + + + A shape node that holds continuous level of detail information. + Seems to be specific to Freedom Force. + + + + Holds mesh data for continuous level of detail shapes. + 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. + + + + + + + + + + + + + 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. + + + + + DEPRECATED (20.5). + Extra data in the form of a vector (as x, y, z, w components). + The vector data. + + + + 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. + + Bits 0-2: Unknown + Bit 3: Lighting Mode + Bits 4-5: Vertex Mode + + In Flags from 20.1.0.3 on. + In Flags from 20.1.0.3 on. + + + + DEPRECATED (10.x), REMOVED (?) + Not used in skinning. + Unsure of use - perhaps for morphing animation or gravity. + Number of bytes in this data object. + Number of vertices. + The vertex weights. + + + + DEPRECATED (10.2), REMOVED (?), Replaced by NiBoolData. + Visibility data for a controller. + + + + + + Allows applications to switch between drawing solid geometry or wireframe outlines. + + Property flags. + 0 - Wireframe Mode Disabled + 1 - Wireframe Mode Enabled + + + + + 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) + + + Z-Test function (see: glDepthFunc). In Flags from 20.1.0.3 on. + + + + + Morrowind-specific node for collision mesh. + + + + LEGACY (pre-10.1) + Raw image data. + Image width + Image height + The format of the raw image data. + Image pixel data. + Image pixel data. + + + + + + Used to turn sorting off for individual subtrees in a scene. Useful if objects must be drawn in a fixed order. + Sorting + + + + + 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. + + + + A PhysX prop which holds information about PhysX actors in a Gamebryo scene + + + + + + + + + + + + + + + + + + + + + + + + For serialization of PhysX objects and to attach them to the scene. + + + + + + + + + + + + + + + + For serializing NxActor objects. + + + + + + + + + + + + + + + + + + + + + + + + + + For serializing NxBodyDesc objects. + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + A PhysX Joint abstract base class. + + + + + + + + + + + + + + + A 6DOF (6 degrees of freedom) joint. + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + For serializing NxShapeDesc objects + + + + + + + + + + + + + + + + + + + + Holds mesh data for streaming. + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + For serializing NxMaterialDesc objects. + + + + + + + A destination is a link between a PhysX actor and a Gamebryo object being driven by the physics. + + + + + + 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. + + + + Wireframe geometry. + + + + Wireframe geometry data. + Is vertex connected to other (next?) vertex? + + + + Two dimensional screen elements. + + Offset in vertex array. + + Offset in indices array. + + + + DEPRECATED (20.5), functionality included in NiMeshScreenElements. + Two dimensional screen elements. + + + + + + + + + + + + + DEPRECATED (20.5), replaced by NiMeshScreenElements. + Two dimensional screen elements. + + + + NiRoomGroup represents a set of connected rooms i.e. a game level. + Object that represents the room group as seen from the outside. + + + + + + NiRoom objects represent cells in a cell-portal culling system. + + + + The portals which see into the room. + + The portals which see out of the room. + + All geometry associated with the room. + + + + 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. + + Unused in 20.x, possibly also 10.x. + + + Root of the scenegraph which is to be seen through this portal. + + + + + Bethesda-specific fade node. + + + + The type of animation interpolation (blending) that will be used on the associated key frames. + + + + + + + + + + + + Shader Property Flags + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + Shader Property Flags 2 + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + Bethesda-specific property. + + + + Scales the intensity of the environment/cube map. + + + + Bethesda-specific property. + How to handle texture borders. + + + + Bethesda-specific property. + The texture glow map. + At this cosine of angle falloff will be equal to Falloff Start Opacity + At this cosine of angle falloff will be equal to Falloff Stop Opacity + Alpha falloff multiplier at start angle + Alpha falloff multiplier at end angle + + + + Bethesda-specific 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. + The number of passes the parallax shader can apply. + The strength of the parallax. + + Glow color and alpha + + + + + 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. + Which color in BSEffectShaderProperty to animate: + + + + 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. + Which color in BSLightingShaderProperty to animate: + + + + + + Skyrim, Paired with dummy TriShapes, this controller generates lightning shapes for special effects. + First interpolator controls Generation. + References generation interpolator. + References interpolator for Mutation of strips + References subdivision interpolator. + References branches interpolator. + References branches variation interpolator. + References length interpolator. + References length variation interpolator. + References width interpolator. + References interpolator for amplitude control. 0=straight, 50=wide + + + + How far lightning will stretch to. + How far lightning variation will stretch to. + How wide the bolt will be. + Influences forking behavior with a multiplier. + + + + + Reference to a shader property. + + + + Bethesda-specific Texture Set. + + Textures. + 0: Diffuse + 1: Normal/Gloss + 2: Glow(SLSF2_Glow_Map)/Skin/Hair/Rim light(SLSF2_Rim_Lighting) + 3: Height/Parallax + 4: Environment + 5: Environment Mask + 6: Subsurface for Multilayer Parallax + 7: Back Lighting Map (SLSF2_Back_Lighting) + + + + + Bethesda-specific property. Found in Fallout3 + + + + Sets what sky function this object fulfills in BSSkyShaderProperty or SkyShaderProperty. + + + + + + + + + Bethesda-specific property. Found in Fallout3 + The texture. + Sky Object Type + + + + Bethesda-specific property. + Texture file name + + + + Bethesda-specific property. + + + + Bethesda-specific property. + + + + Bethesda-specific property. + Texture file name + + + + Bethesda-specific property. + + + + Bethesda-specific property. + + + + 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 + + + + Bethesda shader property for Skyrim and later. + Skyrim Shader Flags for setting render/shader options. + Skyrim Shader Flags for setting render/shader options. + Fallout 4 Shader Flags. Mostly overridden if "Name" is a path to a BGSM/BGEM file. + Fallout 4 Shader Flags. Mostly overridden if "Name" is a path to a BGSM/BGEM file. + Offset UVs + Offset UV Scale to repeat tiling textures, see above. + Texture Set, can have override in an esm/esp + Glow color and alpha + Multiplied emissive colors + + 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 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? + + + + + + + + + + + + Scales the intensity of the environment/cube map. (0-1) + + Tints the base texture. Overridden by game settings. + + Tints the base texture. Overridden by game settings. + Max Passes + Scale + How far from the surface the inner layer appears to be. + Depth of inner parallax layer effect. + Scales the inner parallax layer texture. + How strong the environment/cube map is. (0-??) + CK lists "snow material" when used. + Eye cubemap scale + Offset to set center for left eye cubemap + Offset to set center for right eye cubemap + + + + Bethesda effect shader property for Skyrim and later. + + + + + Offset UVs + Offset UV Scale to repeat tiling textures + points to an external texture. + How to handle texture borders. + + + + At this cosine of angle falloff will be equal to Falloff Start Opacity + At this cosine of angle falloff will be equal to Falloff Stop Opacity + Alpha falloff multiplier at start angle + Alpha falloff multiplier at end angle + Emissive color + Multiplier for Emissive Color (RGB part) + + Points to an external texture, used as palette for SLSF1_Greyscale_To_PaletteColor/SLSF1_Greyscale_To_PaletteAlpha. + + + + + + + + Skyrim water shader property flags + + + + + + + + + + + + Skyrim water shader property, different from "WaterShaderProperty" seen in Fallout. + + + Offset UVs. Seems to be unused, but it fits with the other Skyrim shader properties. + Offset UV Scale to repeat tiling textures, see above. + Defines attributes for the water shader (will use SkyrimWaterShaderFlags) + A bitflag, only the first/second bit controls water flow positive or negative along UVs. + Unknown, flag? + + + + Skyrim Sky shader block. + + + Offset UVs. Seems to be unused, but it fits with the other Skyrim shader properties. + Offset UV Scale to repeat tiling textures, see above. + points to an external texture. + + + + + Bethesda-specific skin instance. + + + + + + Bethesda-specific extra data. Lists locations and normals on a mesh that are appropriate for decal placement. + + + + + + Bethesda-specific particle modifier. + + + + + + + + + + + + Flags for BSValueNode. + + + + Bethesda-specific node. Found on fxFire effects + + + + + + + Bethesda-Specific (mesh?) Particle System. + + + + + Bethesda-Specific (mesh?) Particle System Data. + + + + + + + + + Bethesda-Specific (mesh?) Particle System Modifier. + + + + + + Bethesda-Specific time controller. + + + + + + Bethesda-Specific particle system. + + + + + + + + + Particle system (multi?) emitter controller. + + + + + + + Bethesda-Specific time controller. + + + + + Bethesda-Specific node. + + + + + + + Bethesda-Specific node. + + + + + + + Bethesda-Specific node. + + + + Bethesda-Specific node. + + + + + Bethesda-specific time controller. + + + + + A havok shape. + A list of convex shapes. + + Do not put a bhkPackedNiTriStripsShape in the Sub Shapes. Use a + separate collision nodes without a list shape for those. + + Also, shapes collected in a bhkListShape may not have the correct + walking noise, so only use it for non-walkable objects. + + List of shapes. + The material of the shape. + + + + + + + + + + Bethesda-specific compound. + + + + + + + Bethesda-specific interpolator. + + + + + + + Anim note types. + + + + + + + Bethesda-specific object. + Type of this note. + Location in time. + Unknown. + Unknown. + Unknown. + + + + Bethesda-specific object. + Number of BSAnimNote objects. + BSAnimNote objects. + + + + Bethesda-specific Havok serializable. + + Unknown + Unknown + + + + + + + + Culling modes for multi bound nodes. + + + + + + + + + Bethesda-specific node. + + + + + + Bethesda-specific object. + + + + + Abstract base type for bounding data. + + + + Oriented bounding box. + Center of the box. + Size of the box along each axis. + Rotation of the bounding box. + + + + Bethesda-specific object. + + + + + + This is only defined because of recursion issues. + + + + + + + + Bethesda-specific. Describes groups of triangles either segmented in a grid (for LOD) or by body part for skinned FO4 meshes. + + Index = previous Index + previous Num Tris in Segment * 3 + The number of triangles belonging to this segment + + + + + + + + + Bethesda-specific AV object. + Number of segments in the square grid + Configuration of each segment + + + + Bethesda-specific object. + Position of the AABB's center + Extent of the AABB in all directions + + + + Type of data in this channel + Number of bytes per element of this channel + Total number of bytes of this channel (num vertices times num bytes per element) + Number of bytes per element in all channels together. Sum of num channel bytes per element over all block infos. + Unsure. The block in which this channel is stored? Usually there is only one block, and so this is zero. + Offset (in bytes) of this channel. Sum of all num channel bytes per element of all preceeding block infos. + Unknown, usually equal to 2. + + + + + Has data + Size of Block + + + + + + + + + + + Has data + Total number of bytes (over all channels and all elements, equals num total bytes per element times num vertices). + Number of blocks? Usually equal to one. + Block offsets in the data? Usually equal to zero. + + 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). + + + Unsure, but this seems to correspond again to the number of total bytes per element. + + + + Number of vertices + Information about additional data blocks + Number of additional data blocks + Number of additional data blocks + Number of additional data blocks + + + + + + Information about additional data blocks + Number of additional data blocks + Number of additional data blocks. Usually there is exactly one block. + Number of additional data blocks + + + + Bethesda-specific extra data. + + + + + + Bethesda-specific Havok serializable. + + + + + + + Bethesda-specific time controller. + + + + Bethesda-Specific node. + + + + A breakable constraint. + Constraint within constraint. + Amount of force to break the rigid bodies apart? + No: Constraint stays active. Yes: Constraint gets removed when breaking threshold is exceeded. + + + + Bethesda-Specific Havok serializable. + + + + + + + + + + + + + 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. + + + + + + + + Found in Fallout 3, more ragdoll info? (meshes\ragdollconstraint\*.rdt) + + + + + + Data for bhkRagdollTemplate + + + + + + + + + + + + A range of indices, which make up a region (such as a submesh). + + + + + + Sets how objects are to be cloned. + + + + + + + The data format of components. + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + Determines how a data stream is used? + + + + + + + + Determines how the data stream is accessed? + + + + + + + + + + + + + + The size in bytes of this data stream. + + Number of regions (such as submeshes). + 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. + + + + + + + Type of data (POSITION, POSITION_BP, INDEX, NORMAL, NORMAL_BP, + TEXCOORD, BLENDINDICES, BLENDWEIGHT, BONE_PALETTE, COLOR, DISPLAYLIST, + MORPH_POSITION, BINORMAL_BP, TANGENT_BP). + + + An extra index of the data. For example, if there are 3 uv maps, + then the corresponding TEXCOORD data components would have indices + 0, 1, and 2, respectively. + + + + + + Reference to a data stream object which holds the data used by + this reference. + + + Sets whether this stream data is per-instance data for use in + hardware instancing. + + + The number of submesh-to-region mappings that this data stream + has. + + + + A lookup table that maps submeshes to regions. + + + Describes the semantic of each component. + + + + An object that can be rendered. + Per-material data. + + + + Describes the type of primitives stored in a mesh object. + + + + + + + + + + A sync point corresponds to a particular stage in per-frame processing. + + + + + + + + + + + + Base class for mesh modifiers. + + The sync points supported by this mesh modifier for SubmitTasks. + + The sync points supported by this mesh modifier for CompleteTasks. + + + + + + + + + + + + + + + + + + + The primitive type of the mesh, such as triangles or lines. + + + + + + + + + + + The number of submeshes contained in this mesh. + Sets whether hardware instancing is being used. + The combined bounding volume of all submeshes. + + + + + + + Unknown. + Unknown. + Size of additional data. + + + + + + + + + + + + + + + + + Manipulates a mesh with the semantic MORPHWEIGHTS using an NiMorphMeshModifier. + + + + + + + + + The element semantic. + Whether or not to normalize the data. + + + + Performs linear-weighted blending between a set of target data streams. + + FLAG_RELATIVETARGETS = 0x01 + FLAG_UPDATENORMALS = 0x02 + FLAG_NEEDSUPDATE = 0x04 + FLAG_ALWAYSUPDATE = 0x08 + FLAG_NEEDSCOMPLETION = 0x10 + FLAG_SKINNED = 0x20 + FLAG_SWSKINNED = 0x40 + + The number of morph targets. + The number of morphing data stream elements. + Semantics and normalization of the morphing data stream elements. + + + + + 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 number of bones referenced by this mesh modifier. + Pointers to the bone nodes that affect this skin. + The transforms that go from bind-pose space to bone space. + The bounds of the bones. Only stored if the RECOMPUTE_BOUNDS bit is set. + + + + 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. + + + + + + + + + + + + + + + + + Defines the levels of detail for a given character and dictates the character's current LOD. + + + + + + + + + + + + + + + + + + + Describes the various methods that may be used to specify the orientation of the particles. + + + + Represents a particle system. + + + + + + + + + + + + + + + + + + + + + + + + + Represents a particle system that uses mesh particles instead of sprite-based particles. + + + + + + + + + + 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. + + + + + + + + + + + + + + + + + + + + + + + + The mesh modifier that performs all particle system simulation. + + + + + + Abstract base class for a single step in the particle system simulation process. It has no seralized data. + + + + + + + + + + + + Encapsulates a floodgate kernel that updates particle size, colors, and rotations. + + The particle size keys. + The loop behavior for the size keys. + + The particle color keys. + The loop behavior for the color 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. + + + + Encapsulates a floodgate kernel that simulates particle forces. + + The forces affecting the particle system. + + + + Encapsulates a floodgate kernel that simulates particle colliders. + + The colliders affecting the particle system. + + + + Encapsulates a floodgate kernel that updates mesh particle alignment and transforms. + + The particle rotation keys. + The loop behavior for the rotation keys. + + + + 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. + + + + Updates the bounding volume for an NiPSParticleSystem object. + Number of particle bounds to skip updating every frame. Higher = more updates each frame. + + + + + + This is used by the Floodgate kernel to determine which NiPSForceHelpers functions to call. + + + + Abstract base class for all particle forces. + + + + + + + Applies a linear drag force to particles. + + + + + + + + + Applies a gravitational force to particles. + + + + + + + + + + + Applies an explosive force to particles. + + + + + + + + + + + + Abstract base class for all particle emitters. + + + + + + + + + + + + + + + + + + + + + + + + + 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. + + + + + + + + + + + + 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. + + + + + + This is used by the Floodgate kernel to determine which NiPSColliderHelpers functions to call. + + + + Abstract base class for all particle colliders. + + + + + + + + + + A planar collider for particles. + + + + + + + + + A spherical collider for particles. + + + + + + Creates a new particle whose initial parameters are based on an existing particle. + + + + + + + + + + + + + + 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. + + + + + An NiShadowGenerator object is attached to an NiDynamicEffect object to inform the shadowing system that the effect produces shadows. + + + + + + + + + + + + + + + + + + The number of node bones referenced as influences. + List of all armature bones. + The number of node bones referenced as influences. + List of all armature bones. + + + + + + + + + + + Compressed collision mesh. + Points to root node? + Unknown. + A shell that is added around the shape. + Unknown. + Scale + A shell that is added around the shape. + Scale + The collision mesh data. + + + + A compressed mesh shape for collision in Skyrim. + Number of bits in the shape-key reserved for a triangle index + Number of bits in the shape-key reserved for a triangle index and its winding + Mask used to get the triangle index and winding from a shape-key (common: 262143 = 0x3ffff) + Mask used to get the triangle index from a shape-key (common: 131071 = 0x1ffff) + The radius of the storage mesh shape? Quantization error? + The minimum boundary of the AABB (the coordinates of the corner with the lowest numerical values) + The maximum boundary of the AABB (the coordinates of the corner with the highest numerical values) + + + + Does not appear to be used. + + Does not appear to be used. + + Does not appear to be used. + Number of chunk materials + Table (array) with sets of materials. Chunks refers to this table by index. + + Number of chunk transformations + Table (array) with sets of transformations. Chunks refers to this table by index. + + Compressed Vertices? + + + + + Does not appear to be used. Needs array. + + + + + Orientation marker for Skyrim's inventory view. + How to show the nif in the player's inventory. + Typically attached to the root node of the nif tree. + If not present, then Skyrim will still show the nif in inventory, + using the default values. + Name should be 'INV' (without the quotes). + For rotations, a short of "4712" appears as "4.712" but "959" appears as "0.959" meshes\weapons\daedric\daedricbowskinned.nif + + + + Zoom factor. + + + + Unknown + Number of bone entries + Bone Entry + + + + Links a nif with a Havok Behavior .hkx animation file + Name of the hkx file. + Unknown, has to do with blending appended bones onto an actor. + + + + A controller that trails a bone behind an actor. + How long it takes to rotate about an actor back to rest position. + How the bone lags rotation + How far bone will tail an actor. + + + + A variation on NiTriShape, for visibility control over vertex groups. + + + + + + + Furniture Marker for actors + + + + Unknown, related to trees. + + + + Node for handling Trees, Switches branch configurations for variation? + + Unknown + + Unknown + + + + + + + Fallout 4 Tri Shape + + + + + + + + + + + + + + + + + + + Fallout 4 LOD Tri Shape + + + + + + + If Bone ID is 0xffffffff, this value refers to the Segment at the listed index. Otherwise this is the "Biped Object", which is like the body part types in Skyrim and earlier. + A hash of the bone name string. + Maximum of 8. + + + + + + + + + + + + + + + Fallout 4 Sub-Index Tri Shape + + + + + + + + + + + + + Fallout 4 Physics System + + + + Fallout 4 Collision Object + + Due to inaccurate reporting in the CK the Reset and Sync On Update positions are a guess. + Bits: 0=Reset, 2=Notify, 3=SetLocal, 7=SyncOnUpdate, 10=AnimTargeted + + + + + + + Fallout 4 Collision System + + + + + Fallout 4 Ragdoll System + + + + + Fallout 4 Extra Data + + + + Fallout 4 Cloth data + + + + + + + Fallout 4 Bone Transform + + + + + + + + Fallout 4 Skin Instance + + + + + + + + + + Fallout 4 Bone Data + + + + + + Fallout 4 Positional Data + + + + + + + + + + + + + + Fallout 4 Item Slot Parent + + + + + + Fallout 4 Item Slot Child + + + + + + + Fallout 4 Eye Center Data + + + + + + + + + + + + + + + + + + + + + + + + + + + + This appears to be a 64-bit hash but nif.xml does not have a 64-bit type. + + + + + + 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. + + + + + + + + + + + + + + + + + Large ref flag. + + + + diff --git a/nifskope.icns b/nifskope.icns new file mode 100644 index 000000000..85d1772c1 Binary files /dev/null and b/nifskope.icns differ diff --git a/src/ui/widgets/lightingwidget.cpp b/src/ui/widgets/lightingwidget.cpp index 5ccdbd993..7add83687 100644 --- a/src/ui/widgets/lightingwidget.cpp +++ b/src/ui/widgets/lightingwidget.cpp @@ -3,6 +3,8 @@ #include "glview.h" +#include + // Slider lambda auto sld = []( QSlider * slider, int min, int max, int val ) {