// hex structure library for NIF Format 0x14000005 #pragma maxarray(65536); // Increase the max array length #pragma enumsize(4) enum AlphaFormat { ALPHA_NONE = 0, ALPHA_BINARY = 1, ALPHA_SMOOTH = 2, ALPHA_DEFAULT = 3 }; #pragma enumsize(4) enum ApplyMode { APPLY_REPLACE = 0, APPLY_DECAL = 1, APPLY_MODULATE = 2, APPLY_HILIGHT = 3, APPLY_HILIGHT2 = 4 }; #pragma enumsize(4) enum TexType { BASE_MAP = 0, DARK_MAP = 1, DETAIL_MAP = 2, GLOSS_MAP = 3, GLOW_MAP = 4, BUMP_MAP = 5, DECAL_0_MAP = 6, DECAL_1_MAP = 7 }; #pragma enumsize(4) enum KeyType { LINEAR_KEY = 1, QUADRATIC_KEY = 2, TBC_KEY = 3, XYZ_ROTATION_KEY = 4, UNKNOWN_KEY = 5 }; #pragma enumsize(4) enum LightMode { LIGHT_MODE_EMISSIVE = 0, LIGHT_MODE_EMI_AMB_DIF = 1 }; #pragma enumsize(4) enum HavokMaterial { HAV_MAT_STONE = 0, HAV_MAT_CLOTH = 1, HAV_MAT_DIRT = 2, HAV_MAT_GLASS = 3, HAV_MAT_GRASS = 4, HAV_MAT_METAL = 5, HAV_MAT_ORGANIC = 6, HAV_MAT_SKIN = 7, HAV_MAT_WATER = 8, HAV_MAT_WOOD = 9, HAV_MAT_HEAVY_STONE = 10, HAV_MAT_HEAVY_METAL = 11, HAV_MAT_HEAVY_WOOD = 12, HAV_MAT_CHAIN = 13, HAV_MAT_SNOW = 14, HAV_MAT_STONE_STAIRS = 15, HAV_MAT_CLOTH_STAIRS = 16, HAV_MAT_DIRT_STAIRS = 17, HAV_MAT_GLASS_STAIRS = 18, HAV_MAT_GRASS_STAIRS = 19, HAV_MAT_METAL_STAIRS = 20, HAV_MAT_ORGANIC_STAIRS = 21, HAV_MAT_SKIN_STAIRS = 22, HAV_MAT_WATER_STAIRS = 23, HAV_MAT_WOOD_STAIRS = 24, HAV_MAT_HEAVY_STONE_STAIRS = 25, HAV_MAT_HEAVY_METAL_STAIRS = 26, HAV_MAT_HEAVY_WOOD_STAIRS = 27, HAV_MAT_CHAIN_STAIRS = 28, HAV_MAT_SNOW_STAIRS = 29, HAV_MAT_ELEVATOR = 30 }; #pragma enumsize(1) enum OblivionLayer { OL_UNIDENTIFIED = 0, OL_STATIC = 1, OL_ANIM_STATIC = 2, OL_TRANSPARENT = 3, OL_CLUTTER = 4, OL_WEAPON = 5, OL_PROJECTILE = 6, OL_SPELL = 7, OL_BIPED = 8, OL_TREES = 9, OL_PROPS = 10, OL_WATER = 11, OL_TRIGGER = 12, OL_TERRAIN = 13, OL_TRAP = 14, OL_NONCOLLIDABLE = 15, OL_CLOUD_TRAP = 16, OL_GROUND = 17, OL_PORTAL = 18, OL_STAIRS = 19, OL_CHAR_CONTROLLER = 20, OL_AVOID_BOX = 21, OL_UNKNOWN1 = 22, OL_UNKNOWN2 = 23, OL_CAMERA_PICK = 24, OL_ITEM_PICK = 25, OL_LINE_OF_SIGHT = 26, OL_PATH_PICK = 27, OL_CUSTOM_PICK_1 = 28, OL_CUSTOM_PICK_2 = 29, OL_SPELL_EXPLOSION = 30, OL_DROPPING_PICK = 31, OL_OTHER = 32, OL_HEAD = 33, OL_BODY = 34, OL_SPINE1 = 35, OL_SPINE2 = 36, OL_L_UPPER_ARM = 37, OL_L_FOREARM = 38, OL_L_HAND = 39, OL_L_THIGH = 40, OL_L_CALF = 41, OL_L_FOOT = 42, OL_R_UPPER_ARM = 43, OL_R_FOREARM = 44, OL_R_HAND = 45, OL_R_THIGH = 46, OL_R_CALF = 47, OL_R_FOOT = 48, OL_TAIL = 49, OL_SIDE_WEAPON = 50, OL_SHEILD = 51, OL_QUIVER = 52, OL_BACK_WEAPON = 53, OL_BACK_WEAPON2 = 54, OL_PONYTAIL = 55, OL_WING = 56, OL_NULL = 57 }; #pragma enumsize(4) enum MipMapFormat { MIP_FMT_NO = 0, MIP_FMT_YES = 1, MIP_FMT_DEFAULT = 2 }; #pragma enumsize(4) enum PixelFormat { PX_FMT_RGB8 = 0, PX_FMT_RGBA8 = 1, PX_FMT_PAL8 = 2 }; #pragma enumsize(4) enum PixelLayout { PIX_LAY_PALETTISED = 0, PIX_LAY_HIGH_COLOR_16 = 1, PIX_LAY_TRUE_COLOR_32 = 2, PIX_LAY_COMPRESSED = 3, PIX_LAY_BUMPMAP = 4, PIX_LAY_DEFAULT = 5 }; #pragma enumsize(4) enum TexClampMode { CLAMP_S_CLAMP_T = 0, CLAMP_S_WRAP_T = 1, WRAP_S_CLAMP_T = 2, WRAP_S_WRAP_T = 3 }; #pragma enumsize(4) enum TexFilterMode { FILTER_NEAREST = 0, FILTER_BILERP = 1, FILTER_TRILERP = 2, FILTER_NEAREST_MIPNEAREST = 3, FILTER_NEAREST_MIPLERP = 4, FILTER_BILERP_MIPNEAREST = 5 }; #pragma enumsize(4) enum VertMode { VERT_MODE_SRC_IGNORE = 0, VERT_MODE_SRC_EMISSIVE = 1, VERT_MODE_SRC_AMB_DIF = 2 }; #pragma enumsize(4) enum CycleType { CYCLE_LOOP = 0, CYCLE_REVERSE = 1, CYCLE_CLAMP = 2 }; #pragma enumsize(4) enum FieldType { FIELD_WIND = 0, FIELD_POINT = 1 }; #pragma enumsize(2) enum BillboardMode { ALWAYS_FACE_CAMERA = 0, ROTATE_ABOUT_UP = 1, RIGID_FACE_CAMERA = 2, ALWAYS_FACE_CENTER = 3, RIGID_FACE_CENTER = 4 }; #pragma enumsize(4) enum CompareMode { TEST_NEVER = 0, TEST_LESS = 1, TEST_EQUAL = 2, TEST_LESSEQUAL = 3, TEST_GREATER = 4, TEST_GREATEREQUAL = 5, TEST_ALWAYS = 6 }; #pragma enumsize(4) enum StencilAction { ACTION_KEEP = 0, ACTION_ZERO = 1, ACTION_REPLACE = 2, ACTION_INCREMENT = 3, ACTION_DECREMENT = 4, ACTION_INVERT = 5 }; #pragma enumsize(4) enum FaceDrawMode { DRAW_CCW_OR_BOTH = 0, DRAW_CCW = 1, DRAW_CW = 2, DRAW_BOTH = 3 }; #pragma enumsize(1) enum MotionSystem { MO_SYS_BOX = 4, MO_SYS_KEYFRAMED = 7 }; #pragma enumsize(1) enum MotionQuality { MO_QUAL_MOVING = 0, MO_QUAL_FIXED = 1, MO_QUAL_KEYFRAMED = 2, MO_QUAL_MOVING2 = 3, MO_QUAL_MOVING3 = 4, MO_QUAL_CRITICAL = 5, MO_QUAL_BULLET = 6, MO_QUAL_USER = 7, MO_QUAL_NULL = 8 }; #pragma enumsize(4) enum ForceType { FORCE_PLANAR = 0, FORCE_SPHERICAL = 1, FORCE_UNKNOWN = 2 }; struct ByteArray { unsigned __int32 dataSize; unsigned __int8 data[dataSize]; }; struct Color3 { double r; double g; double b; }; struct ByteColor3 { unsigned __int8 r; unsigned __int8 g; unsigned __int8 b; }; struct Color4 { double r; double g; double b; double a; }; struct ByteColor4 { unsigned __int8 r; unsigned __int8 g; unsigned __int8 b; unsigned __int8 a; }; struct FilePath { unsigned __int32 length; char value[length]; }; struct Footer { unsigned __int32 numRoots; signed __int32 roots[numRoots]; }; struct LODRange { double nearExtent; double farExtent; }; struct MatchGroup { unsigned __int16 numVertices; unsigned __int16 vertexIndices[numVertices]; }; struct Matrix22 { double m11; double m21; double m12; double m22; }; struct Matrix33 { double m11; double m21; double m31; double m12; double m22; double m32; double m13; double m23; double m33; }; struct Matrix44 { double m11; double m21; double m31; double m41; double m12; double m22; double m32; double m42; double m13; double m23; double m33; double m43; double m14; double m24; double m34; double m44; }; struct MipMap { unsigned __int32 width; unsigned __int32 height; unsigned __int32 offset; }; struct NodeGroup { unsigned __int32 numNodes; signed __int32 nodes[numNodes]; }; struct Quaternion { double w; double x; double y; double z; }; struct QuaternionXYZW { double x; double y; double z; double w; }; struct ShortString { unsigned __int8 length; char value[length]; }; struct SkinShape { signed __int32 shape; signed __int32 skinInstance; }; struct SkinShapeGroup { unsigned __int32 numLinkPairs; SkinShape linkPairs[numLinkPairs]; }; struct SkinWeight { unsigned __int16 index; double weight; }; struct string { unsigned __int32 length; char value[length]; }; struct AVObject { String name; signed __int32 avObject; }; struct ControllerLink { signed __int32 interpolator; signed __int32 controller; unsigned __int8 priority?; unsigned __int8 priority?; signed __int32 stringPalette; unsigned __int32 nodeNameOffset; unsigned __int32 propertyTypeOffset; unsigned __int32 controllerTypeOffset; unsigned __int32 variableOffset1; unsigned __int32 variableOffset2; }; struct ExportInfo { ShortString creator; ShortString exportInfo1; ShortString exportInfo2; }; struct Header { HeaderString headerString; FileVersion version; unsigned __int8 endianType; unsigned __int32 userVersion; unsigned __int32 numBlocks; unsigned __int32 userVersion2; ExportInfo exportInfo; unsigned __int16 numBlockTypes; String blockTypes[numBlockTypes]; unsigned __int16 blockTypeIndex[numBlocks]; unsigned __int32 unknownInt2; }; struct StringPalette { String palette; unsigned __int32 length; }; struct TBC { double t; double b; double c; }; struct Key_Byte { double time; unsigned __int8 value; unsigned __int8 forward; unsigned __int8 backward; TBC tbc; }; struct Key_String { double time; String value; String forward; String backward; TBC tbc; }; struct Key_Quaternion { double time; Quaternion value; Quaternion forward; Quaternion backward; TBC tbc; }; struct Key_Vector3 { double time; Vector3 value; Vector3 forward; Vector3 backward; TBC tbc; }; struct Key_Float { double time; double value; double forward; double backward; TBC tbc; }; struct Key_Color4 { double time; Color4 value; Color4 forward; Color4 backward; TBC tbc; }; struct KeyGroup_Byte { unsigned __int32 numKeys; KeyType interpolation; Key_Byte keys[numKeys]; }; struct KeyGroup_String { unsigned __int32 numKeys; KeyType interpolation; Key_String keys[numKeys]; }; struct KeyGroup_Quaternion { unsigned __int32 numKeys; KeyType interpolation; Key_Quaternion keys[numKeys]; }; struct KeyGroup_Vector3 { unsigned __int32 numKeys; KeyType interpolation; Key_Vector3 keys[numKeys]; }; struct KeyGroup_Float { unsigned __int32 numKeys; KeyType interpolation; Key_Float keys[numKeys]; }; struct KeyGroup_Color4 { unsigned __int32 numKeys; KeyType interpolation; Key_Color4 keys[numKeys]; }; struct QuatKey_Byte { double time; unsigned __int8 value; TBC tbc; }; struct QuatKey_String { double time; String value; TBC tbc; }; struct QuatKey_Quaternion { double time; Quaternion value; TBC tbc; }; struct QuatKey_Vector3 { double time; Vector3 value; TBC tbc; }; struct QuatKey_Float { double time; double value; TBC tbc; }; struct QuatKey_Color4 { double time; Color4 value; TBC tbc; }; struct RotationKeyArray_Byte { unsigned __int32 numKeys; KeyType keyType; QuatKey_Byte keys[numKeys]; }; struct RotationKeyArray_String { unsigned __int32 numKeys; KeyType keyType; QuatKey_String keys[numKeys]; }; struct RotationKeyArray_Quaternion { unsigned __int32 numKeys; KeyType keyType; QuatKey_Quaternion keys[numKeys]; }; struct RotationKeyArray_Vector3 { unsigned __int32 numKeys; KeyType keyType; QuatKey_Vector3 keys[numKeys]; }; struct RotationKeyArray_Float { unsigned __int32 numKeys; KeyType keyType; QuatKey_Float keys[numKeys]; }; struct RotationKeyArray_Color4 { unsigned __int32 numKeys; KeyType keyType; QuatKey_Color4 keys[numKeys]; }; struct TexCoord { double u; double v; }; struct TexDesc { signed __int32 source; TexClampMode clampMode; TexFilterMode filterMode; unsigned __int32 uvSet; unsigned __int8 hasTextureTransform; TexCoord translation; TexCoord tiling; double wRotation; unsigned __int32 transformType?; TexCoord centerOffset; }; struct ShaderTexDesc { unsigned __int8 isUsed; TexDesc textureData; unsigned __int32 unknownInt; }; struct TexSource { unsigned __int8 useExternal; String fileName; signed __int32 unknownLink; String originalFileName?; signed __int32 pixelData; }; struct Triangle { unsigned __int16 v1; unsigned __int16 v2; unsigned __int16 v3; }; struct SkinPartition { unsigned __int16 numVertices; unsigned __int16 numTriangles; unsigned __int16 numBones; unsigned __int16 numStrips; unsigned __int16 numWeightsPerVertex; unsigned __int16 bones[numBones]; unsigned __int8 hasVertexMap; unsigned __int16 vertexMap[numVertices]; unsigned __int8 hasVertexWeights; double vertexWeights[numVertices * numWeightsPerVertex]; unsigned __int16 stripLengths[numStrips]; unsigned __int8 hasStrips; unsigned __int16 strips[numStrips * stripLengths]; Triangle triangles[numTriangles]; unsigned __int8 hasBoneIndices; unsigned __int8 boneIndices[numVertices * numWeightsPerVertex]; }; struct Vector3 { double x; double y; double z; }; struct BoundingBox { unsigned __int32 unknownInt; Vector3 translation; Matrix33 rotation; Vector3 radius; }; struct FurniturePosition { Vector3 offset; unsigned __int16 orientation; unsigned __int8 positionRef1; unsigned __int8 positionRef2; }; struct hkTriangle { Triangle triangle; unsigned __int16 unknownShort; Vector3 normal; }; struct Morph { String frameName; Vector3 vectors[arg]; }; struct Particle { Vector3 velocity; Vector3 unknownVector; double lifetime; double lifespan; double timestamp; unsigned __int16 unknownShort; unsigned __int16 vertexId; }; struct SkinData { Matrix33 rotation; Vector3 translation; double scale; Vector3 boundingSphereOffset; double boundingSphereRadius; unsigned __int16 numVertices; SkinWeight vertexWeights[numVertices]; }; struct Vector4 { double x; double y; double z; double w; }; struct Sphere { Vector3 center; double radius; }; struct OblivionColFilter { OblivionLayer layer; unsigned __int8 colFilter; unsigned __int16 unknownShort; }; struct OblivionSubShape { OblivionLayer layer; unsigned __int8 colFilter; unsigned __int16 unknownShort; unsigned __int32 vertexCount(?); HavokMaterial material; }; struct RagdollDescriptor { Vector4 pivotA; Vector4 planeA; Vector4 twistA; Vector4 pivotB; Vector4 planeB; Vector4 twistB; double coneMinAngle; double planeMinAngle; double planeMaxAngle; double twistMinAngle; double twistMaxAngle; double maxFriction; }; struct LimitedHingeDescriptor { Vector4 pivotA; Vector4 axleA; Vector4 perp2axleina1; Vector4 perp2axleina2; Vector4 pivotB; Vector4 axleB; Vector4 perp2axleinb2; double minAngle; double maxAngle; double maxFriction; }; struct OldSkinData { double vertexWeight; unsigned __int16 vertexIndex; Vector3 unknownVector; }; struct MultiTextureElement { unsigned __int8 hasImage; signed __int32 image; unsigned __int32 unknownInt1; unsigned __int32 unknownInt2; unsigned __int32 unknownInt3; signed __int16 unknownShort1; signed __int16 unknownShort2; signed __int16 unknownShort3; }; struct NiObject { }; struct AParticleModifier { signed __int32 nextModifier; signed __int32 controller; }; struct NiPSysCollider { double bounce; unsigned __int8 spawnOnCollide; unsigned __int8 dieOnCollide; signed __int32 spawnModifier; signed __int32 parent; signed __int32 nextCollider; signed __int32 colliderObject; }; struct bhkRefObject { }; struct bhkSerializable { }; struct bhkWorldObject { signed __int32 shape; OblivionLayer layer; unsigned __int8 colFilter; unsigned __int16 unknownShort; }; struct bhkPhantom { signed __int32 shape; OblivionLayer layer; unsigned __int8 colFilter; unsigned __int16 unknownShort; }; struct bhkShapePhantom { signed __int32 shape; OblivionLayer layer; unsigned __int8 colFilter; unsigned __int16 unknownShort; }; struct bhkSimpleShapePhantom { signed __int32 shape; OblivionLayer layer; unsigned __int8 colFilter; unsigned __int16 unknownShort; double unkownFloats[7]; double unknownFloats2[3 * 5]; double unknownFloat; }; struct bhkEntity { signed __int32 shape; OblivionLayer layer; unsigned __int8 colFilter; unsigned __int16 unknownShort; }; struct bhkRigidBody { signed __int32 shape; OblivionLayer layer; unsigned __int8 colFilter; unsigned __int16 unknownShort; double unknown5Floats[5]; unsigned __int16 unknown4Shorts[4]; OblivionLayer layerCopy; unsigned __int8 colFilterCopy; unsigned __int16 unknown7Shorts[7]; Vector3 translation; double unknownFloat00; QuaternionXYZW rotation; Vector3 linearVelocity; double unknownFloat01; Vector3 angularVelocity; double unknownFloat02; double inertia[12]; Vector3 center; double unknownFloat03; double mass; double linearDamping; double angularDamping; double friction; double restitution; double maxLinearVelocity; double maxAngularVelocity; double penetrationDepth; MotionSystem motionSystem; unsigned __int8 unknownByte1; unsigned __int8 unknownByte2; MotionQuality qualityType; unsigned __int32 unknownInt6; unsigned __int32 unknownInt7; unsigned __int32 unknownInt8; unsigned __int32 numConstraints; signed __int32 constraints[numConstraints]; unsigned __int32 unknownInt6; }; struct bhkRigidBodyT { signed __int32 shape; OblivionLayer layer; unsigned __int8 colFilter; unsigned __int16 unknownShort; double unknown5Floats[5]; unsigned __int16 unknown4Shorts[4]; OblivionLayer layerCopy; unsigned __int8 colFilterCopy; unsigned __int16 unknown7Shorts[7]; Vector3 translation; double unknownFloat00; QuaternionXYZW rotation; Vector3 linearVelocity; double unknownFloat01; Vector3 angularVelocity; double unknownFloat02; double inertia[12]; Vector3 center; double unknownFloat03; double mass; double linearDamping; double angularDamping; double friction; double restitution; double maxLinearVelocity; double maxAngularVelocity; double penetrationDepth; MotionSystem motionSystem; unsigned __int8 unknownByte1; unsigned __int8 unknownByte2; MotionQuality qualityType; unsigned __int32 unknownInt6; unsigned __int32 unknownInt7; unsigned __int32 unknownInt8; unsigned __int32 numConstraints; signed __int32 constraints[numConstraints]; unsigned __int32 unknownInt6; }; struct bhkConstraint { unsigned __int32 numEntities; signed __int32 entities[numEntities]; unsigned __int32 priority; }; struct bhkLimitedHingeConstraint { unsigned __int32 numEntities; signed __int32 entities[numEntities]; unsigned __int32 priority; LimitedHingeDescriptor limitedHinge; }; struct bhkMalleableConstraint { unsigned __int32 numEntities; signed __int32 entities[numEntities]; unsigned __int32 priority; unsigned __int32 type; unsigned __int32 unknownInt2; signed __int32 unknownLink1; signed __int32 unknownLink2; unsigned __int32 unknownInt3; RagdollDescriptor ragdoll; LimitedHingeDescriptor limitedHinge; double tau; double damping; }; struct bhkStiffSpringConstraint { unsigned __int32 numEntities; signed __int32 entities[numEntities]; unsigned __int32 priority; Vector4 pivotA; Vector4 pivotB; double length; }; struct bhkRagdollConstraint { unsigned __int32 numEntities; signed __int32 entities[numEntities]; unsigned __int32 priority; RagdollDescriptor ragdoll; }; struct bhkPrismaticConstraint { unsigned __int32 numEntities; signed __int32 entities[numEntities]; unsigned __int32 priority; Vector4 unknownVectors[8]; double unknownFloats2[3]; }; struct bhkHingeConstraint { unsigned __int32 numEntities; signed __int32 entities[numEntities]; unsigned __int32 priority; Vector4 pivotA; Vector4 perp2axleina1; Vector4 perp2axleina2; Vector4 pivotB; Vector4 axleB; }; struct bhkShape { }; struct bhkTransformShape { signed __int32 shape; HavokMaterial material; double unknownFloat1; unsigned __int8 unknown8Bytes[8]; Matrix44 transform; }; struct bhkSphereRepShape { HavokMaterial material; double radius; }; struct bhkConvexShape { HavokMaterial material; double radius; }; struct bhkSphereShape { HavokMaterial material; double radius; }; struct bhkCapsuleShape { HavokMaterial material; double radius; unsigned __int16 unknownShort1; unsigned __int16 unknownShort2; unsigned __int16 unknownShort3; unsigned __int16 unknownShort4; Vector3 firstPoint; double radius1; Vector3 secondPoint; double radius2; }; struct bhkBoxShape { HavokMaterial material; double radius; unsigned __int16 unknownShort1; unsigned __int16 unknownShort2; unsigned __int16 unknownShort3; unsigned __int16 unknownShort4; Vector3 dimensions; double min.Size; }; struct bhkConvexVerticesShape { HavokMaterial material; double radius; double unknown6Floats[6]; unsigned __int32 numVertices; Vector4 vertices[numVertices]; unsigned __int32 numNormals; Vector4 normals[numNormals]; }; struct bhkConvexTransformShape { signed __int32 shape; HavokMaterial material; double unknownFloat1; unsigned __int8 unknown8Bytes[8]; Matrix44 transform; }; struct bhkMultiSphereShape { HavokMaterial material; double radius; double unknownFloat1; double unknownFloat2; unsigned __int32 numSpheres; Sphere spheres[numSpheres]; }; struct bhkBvTreeShape { }; struct bhkMoppBvTreeShape { signed __int32 shape; HavokMaterial material; unsigned __int8 unknown8Bytes[8]; double unknownFloat; unsigned __int32 moppDataSize; Vector3 objectCorner; double scalingFactor; unsigned __int8 moppData[moppDataSize]; }; struct bhkShapeCollection { }; struct bhkListShape { unsigned __int32 numSubShapes; signed __int32 subShapes[numSubShapes]; HavokMaterial material; double unknownFloats[6]; unsigned __int32 numUnknownInts; unsigned __int32 unknownInts[numUnknownInts]; }; struct bhkPackedNiTriStripsShape { unsigned __int16 numSubShapes; OblivionSubShape subShapes[numSubShapes]; double unknownFloats[9]; double scale; double unknownFloats2[3]; signed __int32 data; }; struct bhkNiTriStripsShape { HavokMaterial material; double unknownFloat1; unsigned __int32 unknownInt1; unsigned __int32 unknownInts1[4]; unsigned __int32 unknownInt2; Vector3 scale; unsigned __int32 unknownInt3; unsigned __int32 numStripsData; signed __int32 stripsData[numStripsData]; unsigned __int32 numDataLayers; OblivionColFilter dataLayers[numDataLayers]; }; struct NiExtraData { String name; }; struct NiInterpolator { }; struct NiKeyBasedInterpolator { }; struct NiFloatInterpolator { double floatValue; signed __int32 data; }; struct NiTransformInterpolator { Vector3 translation; Quaternion rotation; double scale; signed __int32 data; }; struct NiPoint3Interpolator { Vector3 point3Value; signed __int32 data; }; struct NiPathInterpolator { unsigned __int16 unknownShort; unsigned __int32 unknownInt; double unknownFloat1; double unknownFloat2; unsigned __int16 unknownShort2; signed __int32 posData; signed __int32 floatData; }; struct NiBoolInterpolator { unsigned __int8 boolValue; signed __int32 data; }; struct NiBoolTimelineInterpolator { unsigned __int8 boolValue; signed __int32 data; }; struct NiBlendInterpolator { unsigned __int16 unknownShort; unsigned __int32 unknownInt; }; struct NiBSplineInterpolator { double startTime; double stopTime; signed __int32 splineData; signed __int32 basisData; }; struct NiObjectNET { String name; unsigned __int32 numExtraDataList; signed __int32 extraDataList[numExtraDataList]; signed __int32 controller; }; struct NiCollisionObject { signed __int32 target; unsigned __int16 unknownShort; signed __int32 body; }; struct NiCollisionData { signed __int32 target; unsigned __int16 unknownShort; signed __int32 body; unsigned __int32 unknownInt1; unsigned __int8 unknownByte; unsigned __int32 collisionType; unsigned __int32 unknownInt2; Vector3 unknownVector; double unknownFloat1[8]; double unknownFloat2[15]; }; struct bhkNiCollisionObject { signed __int32 target; unsigned __int16 unknownShort; signed __int32 body; }; struct bhkCollisionObject { signed __int32 target; unsigned __int16 unknownShort; signed __int32 body; }; struct bhkBlendCollisionObject { signed __int32 target; unsigned __int16 unknownShort; signed __int32 body; double unknownFloat1; double unknownFloat2; }; struct bhkPCollisionObject { signed __int32 target; unsigned __int16 unknownShort; signed __int32 body; }; struct bhkSPCollisionObject { signed __int32 target; unsigned __int16 unknownShort; signed __int32 body; }; struct NiAVObject { String name; unsigned __int32 numExtraDataList; signed __int32 extraDataList[numExtraDataList]; signed __int32 controller; Flags flags; Vector3 translation; Matrix33 rotation; double scale; unsigned __int32 numProperties; signed __int32 properties[numProperties]; signed __int32 collisionObject; }; struct NiDynamicEffect { String name; unsigned __int32 numExtraDataList; signed __int32 extraDataList[numExtraDataList]; signed __int32 controller; Flags flags; Vector3 translation; Matrix33 rotation; double scale; unsigned __int32 numProperties; signed __int32 properties[numProperties]; signed __int32 collisionObject; unsigned __int8 switchState; unsigned __int32 numAffectedNodes; signed __int32 affectedNodes[numAffectedNodes]; }; struct NiLight { String name; unsigned __int32 numExtraDataList; signed __int32 extraDataList[numExtraDataList]; signed __int32 controller; Flags flags; Vector3 translation; Matrix33 rotation; double scale; unsigned __int32 numProperties; signed __int32 properties[numProperties]; signed __int32 collisionObject; unsigned __int8 switchState; unsigned __int32 numAffectedNodes; signed __int32 affectedNodes[numAffectedNodes]; double dimmer; Color3 ambientColor; Color3 diffuseColor; Color3 specularColor; }; struct NiProperty { String name; unsigned __int32 numExtraDataList; signed __int32 extraDataList[numExtraDataList]; signed __int32 controller; }; struct NiPSysModifier { String name; unsigned __int32 order; signed __int32 target; unsigned __int8 active; }; struct NiPSysEmitter { String name; unsigned __int32 order; signed __int32 target; unsigned __int8 active; double speed; double speedVariation; double declination; double declinationVariation; double planarAngle; double planarAngleVariation; Color4 initialColor; double initialRadius; double radiusVariation; double lifeSpan; double lifeSpanVariation; }; struct NiPSysVolumeEmitter { String name; unsigned __int32 order; signed __int32 target; unsigned __int8 active; double speed; double speedVariation; double declination; double declinationVariation; double planarAngle; double planarAngleVariation; Color4 initialColor; double initialRadius; double radiusVariation; double lifeSpan; double lifeSpanVariation; signed __int32 emitterObject; }; struct NiTimeController { signed __int32 nextController; Flags flags; double frequency; double phase; double startTime; double stopTime; signed __int32 target; }; struct NiInterpController { signed __int32 nextController; Flags flags; double frequency; double phase; double startTime; double stopTime; signed __int32 target; }; struct NiMultiTargetTransformController { signed __int32 nextController; Flags flags; double frequency; double phase; double startTime; double stopTime; signed __int32 target; unsigned __int16 numExtraTargets; signed __int32 extraTargets[numExtraTargets]; }; struct NiGeomMorpherController { signed __int32 nextController; Flags flags; double frequency; double phase; double startTime; double stopTime; signed __int32 target; unsigned __int16 unknown; signed __int32 data; unsigned __int8 unknownByte; unsigned __int32 numInterpolators; signed __int32 interpolators[numInterpolators]; unsigned __int32 numUnknownInts; unsigned __int32 unknownInts[numUnknownInts]; }; struct NiSingleInterpController { signed __int32 nextController; Flags flags; double frequency; double phase; double startTime; double stopTime; signed __int32 target; signed __int32 interpolator; }; struct NiTransformController { signed __int32 nextController; Flags flags; double frequency; double phase; double startTime; double stopTime; signed __int32 target; signed __int32 interpolator; }; struct NiPSysModifierCtlr { signed __int32 nextController; Flags flags; double frequency; double phase; double startTime; double stopTime; signed __int32 target; signed __int32 interpolator; String modifierName; }; struct NiPSysEmitterCtlr { signed __int32 nextController; Flags flags; double frequency; double phase; double startTime; double stopTime; signed __int32 target; signed __int32 interpolator; String modifierName; signed __int32 visibilityInterpolator; }; struct NiPSysModifierBoolCtlr { signed __int32 nextController; Flags flags; double frequency; double phase; double startTime; double stopTime; signed __int32 target; signed __int32 interpolator; String modifierName; }; struct NiPSysModifierActiveCtlr { signed __int32 nextController; Flags flags; double frequency; double phase; double startTime; double stopTime; signed __int32 target; signed __int32 interpolator; String modifierName; }; struct NiPSysModifierFloatCtlr { signed __int32 nextController; Flags flags; double frequency; double phase; double startTime; double stopTime; signed __int32 target; signed __int32 interpolator; String modifierName; }; struct NiPSysEmitterDeclinationCtlr { signed __int32 nextController; Flags flags; double frequency; double phase; double startTime; double stopTime; signed __int32 target; signed __int32 interpolator; String modifierName; }; struct NiPSysEmitterDeclinationVarCtlr { signed __int32 nextController; Flags flags; double frequency; double phase; double startTime; double stopTime; signed __int32 target; signed __int32 interpolator; String modifierName; }; struct NiPSysEmitterInitialRadiusCtlr { signed __int32 nextController; Flags flags; double frequency; double phase; double startTime; double stopTime; signed __int32 target; signed __int32 interpolator; String modifierName; }; struct NiPSysEmitterLifeSpanCtlr { signed __int32 nextController; Flags flags; double frequency; double phase; double startTime; double stopTime; signed __int32 target; signed __int32 interpolator; String modifierName; }; struct NiPSysEmitterSpeedCtlr { signed __int32 nextController; Flags flags; double frequency; double phase; double startTime; double stopTime; signed __int32 target; signed __int32 interpolator; String modifierName; }; struct NiPSysGravityStrengthCtlr { signed __int32 nextController; Flags flags; double frequency; double phase; double startTime; double stopTime; signed __int32 target; signed __int32 interpolator; String modifierName; }; struct NiFloatInterpController { signed __int32 nextController; Flags flags; double frequency; double phase; double startTime; double stopTime; signed __int32 target; signed __int32 interpolator; }; struct NiFlipController { signed __int32 nextController; Flags flags; double frequency; double phase; double startTime; double stopTime; signed __int32 target; signed __int32 interpolator; unsigned __int32 textureSlot; unsigned __int32 numSources; signed __int32 sources[numSources]; }; struct NiAlphaController { signed __int32 nextController; Flags flags; double frequency; double phase; double startTime; double stopTime; signed __int32 target; signed __int32 interpolator; }; struct NiTextureTransformController { signed __int32 nextController; Flags flags; double frequency; double phase; double startTime; double stopTime; signed __int32 target; signed __int32 interpolator; unsigned __int8 unknown2; TexType textureSlot; unsigned __int32 operation; }; struct NiLightDimmerController { signed __int32 nextController; Flags flags; double frequency; double phase; double startTime; double stopTime; signed __int32 target; signed __int32 interpolator; }; struct NiBoolInterpController { signed __int32 nextController; Flags flags; double frequency; double phase; double startTime; double stopTime; signed __int32 target; signed __int32 interpolator; }; struct NiVisController { signed __int32 nextController; Flags flags; double frequency; double phase; double startTime; double stopTime; signed __int32 target; signed __int32 interpolator; }; struct NiPoint3InterpController { signed __int32 nextController; Flags flags; double frequency; double phase; double startTime; double stopTime; signed __int32 target; signed __int32 interpolator; unsigned __int16 targetColor; }; struct NiMaterialColorController { signed __int32 nextController; Flags flags; double frequency; double phase; double startTime; double stopTime; signed __int32 target; signed __int32 interpolator; unsigned __int16 targetColor; }; struct NiLightColorController { signed __int32 nextController; Flags flags; double frequency; double phase; double startTime; double stopTime; signed __int32 target; signed __int32 interpolator; unsigned __int16 targetColor; }; struct NiExtraDataController { signed __int32 nextController; Flags flags; double frequency; double phase; double startTime; double stopTime; signed __int32 target; signed __int32 interpolator; }; struct NiFloatExtraDataController { signed __int32 nextController; Flags flags; double frequency; double phase; double startTime; double stopTime; signed __int32 target; signed __int32 interpolator; String controllerData; }; struct NiBoneLODController { signed __int32 nextController; Flags flags; double frequency; double phase; double startTime; double stopTime; signed __int32 target; unsigned __int32 unknownInt1; unsigned __int32 numNodeGroups; unsigned __int32 numNodeGroups2; NodeGroup nodeGroups[numNodeGroups]; }; struct NiBSBoneLODController { signed __int32 nextController; Flags flags; double frequency; double phase; double startTime; double stopTime; signed __int32 target; unsigned __int32 unknownInt1; unsigned __int32 numNodeGroups; unsigned __int32 numNodeGroups2; NodeGroup nodeGroups[numNodeGroups]; }; struct NiGeometry { String name; unsigned __int32 numExtraDataList; signed __int32 extraDataList[numExtraDataList]; signed __int32 controller; Flags flags; Vector3 translation; Matrix33 rotation; double scale; unsigned __int32 numProperties; signed __int32 properties[numProperties]; signed __int32 collisionObject; signed __int32 data; signed __int32 skinInstance; unsigned __int8 hasShader; String shaderName; signed __int32 unknownLink; }; struct NiTriBasedGeom { String name; unsigned __int32 numExtraDataList; signed __int32 extraDataList[numExtraDataList]; signed __int32 controller; Flags flags; Vector3 translation; Matrix33 rotation; double scale; unsigned __int32 numProperties; signed __int32 properties[numProperties]; signed __int32 collisionObject; signed __int32 data; signed __int32 skinInstance; unsigned __int8 hasShader; String shaderName; signed __int32 unknownLink; }; struct NiGeometryData { String name; unsigned __int16 numVertices; unsigned __int16 unknownShort1; unsigned __int8 hasVertices; Vector3 vertices[numVertices]; unsigned __int16 numUvSets; unsigned __int8 hasNormals; Vector3 normals[numVertices]; Vector3 unknownVectors1[numVertices]; Vector3 unknownVectors2[numVertices]; Vector3 center; double radius; unsigned __int8 hasVertexColors; Color4 vertexColors[numVertices]; TexCoord uvSets[numUvSets * numVertices] // WARNING - should be [numUvSets & 63 * numVertices]; unsigned __int16 unknownShort2; signed __int32 unknownLink1; }; struct NiTriBasedGeomData { String name; unsigned __int16 numVertices; unsigned __int16 unknownShort1; unsigned __int8 hasVertices; Vector3 vertices[numVertices]; unsigned __int16 numUvSets; unsigned __int8 hasNormals; Vector3 normals[numVertices]; Vector3 unknownVectors1[numVertices]; Vector3 unknownVectors2[numVertices]; Vector3 center; double radius; unsigned __int8 hasVertexColors; Color4 vertexColors[numVertices]; TexCoord uvSets[numUvSets * numVertices] // WARNING - should be [numUvSets & 63 * numVertices]; unsigned __int16 unknownShort2; signed __int32 unknownLink1; unsigned __int16 numTriangles; }; struct bhkBlendController { signed __int32 nextController; Flags flags; double frequency; double phase; double startTime; double stopTime; signed __int32 target; unsigned __int32 unknownInt; }; struct BSBound { String name; Vector3 center; Vector3 dimensions; }; struct BSFurnitureMarker { String name; unsigned __int32 numPositions; FurniturePosition positions[numPositions]; }; struct BSParentVelocityModifier { String name; unsigned __int32 order; signed __int32 target; unsigned __int8 active; double unknownFloat; }; struct BSPSysArrayEmitter { String name; unsigned __int32 order; signed __int32 target; unsigned __int8 active; double speed; double speedVariation; double declination; double declinationVariation; double planarAngle; double planarAngleVariation; Color4 initialColor; double initialRadius; double radiusVariation; double lifeSpan; double lifeSpanVariation; signed __int32 emitterObject; }; struct BSWindModifier { String name; unsigned __int32 order; signed __int32 target; unsigned __int8 active; double unknownFloat; }; struct hkPackedNiTriStripsData { unsigned __int32 numTriangles; hkTriangle triangles[numTriangles]; unsigned __int32 numVertices; Vector3 vertices[numVertices]; }; struct NiAlphaProperty { String name; unsigned __int32 numExtraDataList; signed __int32 extraDataList[numExtraDataList]; signed __int32 controller; Flags flags; unsigned __int8 threshold; }; struct NiAmbientLight { String name; unsigned __int32 numExtraDataList; signed __int32 extraDataList[numExtraDataList]; signed __int32 controller; Flags flags; Vector3 translation; Matrix33 rotation; double scale; unsigned __int32 numProperties; signed __int32 properties[numProperties]; signed __int32 collisionObject; unsigned __int8 switchState; unsigned __int32 numAffectedNodes; signed __int32 affectedNodes[numAffectedNodes]; double dimmer; Color3 ambientColor; Color3 diffuseColor; Color3 specularColor; }; struct NiParticlesData { String name; unsigned __int16 numVertices; unsigned __int16 unknownShort1; unsigned __int8 hasVertices; Vector3 vertices[numVertices]; unsigned __int16 numUvSets; unsigned __int8 hasNormals; Vector3 normals[numVertices]; Vector3 unknownVectors1[numVertices]; Vector3 unknownVectors2[numVertices]; Vector3 center; double radius; unsigned __int8 hasVertexColors; Color4 vertexColors[numVertices]; TexCoord uvSets[numUvSets * numVertices] // WARNING - should be [numUvSets & 63 * numVertices]; unsigned __int16 unknownShort2; signed __int32 unknownLink1; unsigned __int8 hasSizes; double sizes[numVertices]; unsigned __int16 numActive; unsigned __int8 hasUnknownFloats1; double unknownFloats1[numVertices]; unsigned __int8 hasRotations1; Quaternion rotations1[numVertices]; }; struct NiRotatingParticlesData { String name; unsigned __int16 numVertices; unsigned __int16 unknownShort1; unsigned __int8 hasVertices; Vector3 vertices[numVertices]; unsigned __int16 numUvSets; unsigned __int8 hasNormals; Vector3 normals[numVertices]; Vector3 unknownVectors1[numVertices]; Vector3 unknownVectors2[numVertices]; Vector3 center; double radius; unsigned __int8 hasVertexColors; Color4 vertexColors[numVertices]; TexCoord uvSets[numUvSets * numVertices] // WARNING - should be [numUvSets & 63 * numVertices]; unsigned __int16 unknownShort2; signed __int32 unknownLink1; unsigned __int8 hasSizes; double sizes[numVertices]; unsigned __int16 numActive; unsigned __int8 hasUnknownFloats1; double unknownFloats1[numVertices]; unsigned __int8 hasRotations1; Quaternion rotations1[numVertices]; }; struct NiAutoNormalParticlesData { String name; unsigned __int16 numVertices; unsigned __int16 unknownShort1; unsigned __int8 hasVertices; Vector3 vertices[numVertices]; unsigned __int16 numUvSets; unsigned __int8 hasNormals; Vector3 normals[numVertices]; Vector3 unknownVectors1[numVertices]; Vector3 unknownVectors2[numVertices]; Vector3 center; double radius; unsigned __int8 hasVertexColors; Color4 vertexColors[numVertices]; TexCoord uvSets[numUvSets * numVertices] // WARNING - should be [numUvSets & 63 * numVertices]; unsigned __int16 unknownShort2; signed __int32 unknownLink1; unsigned __int8 hasSizes; double sizes[numVertices]; unsigned __int16 numActive; unsigned __int8 hasUnknownFloats1; double unknownFloats1[numVertices]; unsigned __int8 hasRotations1; Quaternion rotations1[numVertices]; }; struct NiPSysData { String name; unsigned __int16 numVertices; unsigned __int16 unknownShort1; unsigned __int8 hasVertices; Vector3 vertices[numVertices]; unsigned __int16 numUvSets; unsigned __int8 hasNormals; Vector3 normals[numVertices]; Vector3 unknownVectors1[numVertices]; Vector3 unknownVectors2[numVertices]; Vector3 center; double radius; unsigned __int8 hasVertexColors; Color4 vertexColors[numVertices]; TexCoord uvSets[numUvSets * numVertices] // WARNING - should be [numUvSets & 63 * numVertices]; unsigned __int16 unknownShort2; signed __int32 unknownLink1; unsigned __int8 hasSizes; double sizes[numVertices]; unsigned __int16 numActive; unsigned __int8 hasUnknownFloats1; double unknownFloats1[numVertices]; unsigned __int8 hasRotations1; Quaternion rotations1[numVertices]; unsigned __int8 hasUnknownFloats3; double unknownFloats1[numVertices]; unsigned __int8 hasUnknownFloats4; double unknownFloats4[numVertices * 4]; double unknownFloats5[numVertices * 7]; unsigned __int8 hasUnknownFloats6; double unknownFloats6[numVertices]; unsigned __int32 unknownInt1; }; struct NiMeshPSysData { String name; unsigned __int16 numVertices; unsigned __int16 unknownShort1; unsigned __int8 hasVertices; Vector3 vertices[numVertices]; unsigned __int16 numUvSets; unsigned __int8 hasNormals; Vector3 normals[numVertices]; Vector3 unknownVectors1[numVertices]; Vector3 unknownVectors2[numVertices]; Vector3 center; double radius; unsigned __int8 hasVertexColors; Color4 vertexColors[numVertices]; TexCoord uvSets[numUvSets * numVertices] // WARNING - should be [numUvSets & 63 * numVertices]; unsigned __int16 unknownShort2; signed __int32 unknownLink1; unsigned __int8 hasSizes; double sizes[numVertices]; unsigned __int16 numActive; unsigned __int8 hasUnknownFloats1; double unknownFloats1[numVertices]; unsigned __int8 hasRotations1; Quaternion rotations1[numVertices]; unsigned __int8 hasUnknownFloats3; double unknownFloats1[numVertices]; unsigned __int8 hasUnknownFloats4; double unknownFloats4[numVertices * 4]; double unknownFloats5[numVertices * 7]; unsigned __int8 hasUnknownFloats6; double unknownFloats6[numVertices]; unsigned __int32 unknownInt1; unsigned __int32 numVertices2; unsigned __int8 unknownByte3; unsigned __int32 unknownInt2; unsigned __int32 numVertices3; signed __int32 unknownLink2; }; struct NiBinaryExtraData { String name; ByteArray binaryData; }; struct NiBinaryVoxelExtraData { String name; unsigned __int32 unknownInt; signed __int32 data; }; struct NiBinaryVoxelData { unsigned __int16 unknownShort1; unsigned __int16 unknownShort2; unsigned __int16 unknownShort3; double unknown7Floats[7]; unsigned __int8 unknownBytes1[7 * 12]; unsigned __int32 numUnknownVectors; Vector4 unknownVectors[numUnknownVectors]; unsigned __int32 numUnknownBytes2; unsigned __int8 unknownBytes2[numUnknownBytes2]; unsigned __int32 unknown5Ints[5]; }; struct NiBlendBoolInterpolator { unsigned __int16 unknownShort; unsigned __int32 unknownInt; unsigned __int8 boolValue; }; struct NiBlendFloatInterpolator { unsigned __int16 unknownShort; unsigned __int32 unknownInt; double floatValue; }; struct NiBlendPoint3Interpolator { unsigned __int16 unknownShort; unsigned __int32 unknownInt; Vector3 pointValue; }; struct NiBlendTransformInterpolator { unsigned __int16 unknownShort; unsigned __int32 unknownInt; }; struct NiBoolData { KeyGroup_Byte data; }; struct NiBooleanExtraData { String name; unsigned __int8 booleanData; }; struct NiBSplineBasisData { unsigned __int32 numControlPt; }; struct NiBSplineFloatInterpolator { double startTime; double stopTime; signed __int32 splineData; signed __int32 basisData; }; struct NiBSplineCompFloatInterpolator { double startTime; double stopTime; signed __int32 splineData; signed __int32 basisData; double unknownFloats[4]; }; struct NiBSplinePoint3Interpolator { double startTime; double stopTime; signed __int32 splineData; signed __int32 basisData; double unknownFloats[6]; }; struct NiBSplineCompPoint3Interpolator { double startTime; double stopTime; signed __int32 splineData; signed __int32 basisData; double unknownFloats[6]; double unknownFloats[6]; }; struct NiBSplineTransformInterpolator { double startTime; double stopTime; signed __int32 splineData; signed __int32 basisData; }; struct NiBSplineCompTransformInterpolator { double startTime; double stopTime; signed __int32 splineData; signed __int32 basisData; Vector3 translation; Quaternion rotation; double scale; unsigned __int32 translateOffset; unsigned __int32 rotateOffset; unsigned __int32 scaleOffset; double translateBias; double translateMultiplier; double rotationBias; double rotationMultiplier; double scaleBias; double scaleMultiplier; }; struct NiBSplineData { unsigned __int32 unknownInt; unsigned __int32 count; signed __int16 controlPoints[count]; }; struct NiCamera { String name; unsigned __int32 numExtraDataList; signed __int32 extraDataList[numExtraDataList]; signed __int32 controller; Flags flags; Vector3 translation; Matrix33 rotation; double scale; unsigned __int32 numProperties; signed __int32 properties[numProperties]; signed __int32 collisionObject; unsigned __int16 unknownShort; double frustumLeft; double frustumRight; double frustumTop; double frustumBottom; double frustumNear; double frustumFar; unsigned __int8 useOrthographicProjection; double viewportLeft; double viewportRight; double viewportTop; double viewportBottom; double lodAdjust; signed __int32 unknownLink?; unsigned __int32 unknownInt; unsigned __int32 unknownInt2; }; struct NiColorData { KeyGroup_Color4 data; }; struct NiColorExtraData { String name; Color4 data; }; struct NiControllerManager { signed __int32 nextController; Flags flags; double frequency; double phase; double startTime; double stopTime; signed __int32 target; unsigned __int8 cumulative; unsigned __int32 numControllerSequences; signed __int32 controllerSequences[numControllerSequences]; signed __int32 objectPalette; }; struct NiSequence { String name; unsigned __int32 numControlledBlocks; unsigned __int32 unknownInt1; ControllerLink controlledBlocks[numControlledBlocks]; }; struct NiControllerSequence { String name; unsigned __int32 numControlledBlocks; unsigned __int32 unknownInt1; ControllerLink controlledBlocks[numControlledBlocks]; double weight; signed __int32 textKeys; CycleType cycleType; double frequency; double startTime; double stopTime; signed __int32 manager; String targetName; signed __int32 stringPalette; }; struct NiAVObjectPalette { }; struct NiDefaultAVObjectPalette { unsigned __int32 unknownInt; unsigned __int32 numObjs; AVObject objs[numObjs]; }; struct NiDirectionalLight { String name; unsigned __int32 numExtraDataList; signed __int32 extraDataList[numExtraDataList]; signed __int32 controller; Flags flags; Vector3 translation; Matrix33 rotation; double scale; unsigned __int32 numProperties; signed __int32 properties[numProperties]; signed __int32 collisionObject; unsigned __int8 switchState; unsigned __int32 numAffectedNodes; signed __int32 affectedNodes[numAffectedNodes]; double dimmer; Color3 ambientColor; Color3 diffuseColor; Color3 specularColor; }; struct NiDitherProperty { String name; unsigned __int32 numExtraDataList; signed __int32 extraDataList[numExtraDataList]; signed __int32 controller; Flags flags; }; struct NiRollController { signed __int32 nextController; Flags flags; double frequency; double phase; double startTime; double stopTime; signed __int32 target; signed __int32 interpolator; signed __int32 data; }; struct NiFloatData { KeyGroup_Float data; }; struct NiFloatExtraData { String name; double floatData; }; struct NiFloatsExtraData { String name; unsigned __int32 numFloats; double data[numFloats]; }; struct NiFogProperty { String name; unsigned __int32 numExtraDataList; signed __int32 extraDataList[numExtraDataList]; signed __int32 controller; Flags flags; double fogDepth; Color3 fogColor; }; struct NiGravity { signed __int32 nextModifier; signed __int32 controller; double unknownFloat1; double force; FieldType type; Vector3 position; Vector3 direction; }; struct NiIntegerExtraData { String name; unsigned __int32 integerData; }; struct BSXFlags { String name; unsigned __int32 integerData; }; struct NiIntegersExtraData { String name; unsigned __int32 numIntegers; unsigned __int32 data[numIntegers]; }; struct NiKeyframeController { signed __int32 nextController; Flags flags; double frequency; double phase; double startTime; double stopTime; signed __int32 target; signed __int32 data; }; struct BSKeyframeController { signed __int32 nextController; Flags flags; double frequency; double phase; double startTime; double stopTime; signed __int32 target; signed __int32 data; signed __int32 data2; }; struct NiKeyframeData { unsigned __int32 numRotationKeys; KeyType rotationType; QuatKey_Quaternion quaternionKeys[numRotationKeys]; KeyGroup_Float xyzRotations[3]; KeyGroup_Vector3 translations; KeyGroup_Float scales; }; struct NiLookAtController { signed __int32 nextController; Flags flags; double frequency; double phase; double startTime; double stopTime; signed __int32 target; unsigned __int16 unknown1; signed __int32 lookAtNode; }; struct NiLookAtInterpolator { unsigned __int16 unknownShort; signed __int32 lookAt; double unknownFloat; Vector3 translation; Quaternion rotation; double scale; signed __int32 unknownLink1; signed __int32 unknownLink2; signed __int32 unknownLink3; }; struct NiMaterialProperty { String name; unsigned __int32 numExtraDataList; signed __int32 extraDataList[numExtraDataList]; signed __int32 controller; Color3 ambientColor; Color3 diffuseColor; Color3 specularColor; Color3 emissiveColor; double glossiness; double alpha; }; struct NiMorphData { unsigned __int32 numMorphs; unsigned __int32 numVertices; unsigned __int8 unknownByte; Morph morphs[numMorphs]; }; struct NiNode { String name; unsigned __int32 numExtraDataList; signed __int32 extraDataList[numExtraDataList]; signed __int32 controller; Flags flags; Vector3 translation; Matrix33 rotation; double scale; unsigned __int32 numProperties; signed __int32 properties[numProperties]; signed __int32 collisionObject; unsigned __int32 numChildren; signed __int32 children[numChildren]; unsigned __int32 numEffects; signed __int32 effects[numEffects]; }; struct NiBone { String name; unsigned __int32 numExtraDataList; signed __int32 extraDataList[numExtraDataList]; signed __int32 controller; Flags flags; Vector3 translation; Matrix33 rotation; double scale; unsigned __int32 numProperties; signed __int32 properties[numProperties]; signed __int32 collisionObject; unsigned __int32 numChildren; signed __int32 children[numChildren]; unsigned __int32 numEffects; signed __int32 effects[numEffects]; }; struct AvoidNode { String name; unsigned __int32 numExtraDataList; signed __int32 extraDataList[numExtraDataList]; signed __int32 controller; Flags flags; Vector3 translation; Matrix33 rotation; double scale; unsigned __int32 numProperties; signed __int32 properties[numProperties]; signed __int32 collisionObject; unsigned __int32 numChildren; signed __int32 children[numChildren]; unsigned __int32 numEffects; signed __int32 effects[numEffects]; }; struct FxWidget { String name; unsigned __int32 numExtraDataList; signed __int32 extraDataList[numExtraDataList]; signed __int32 controller; Flags flags; Vector3 translation; Matrix33 rotation; double scale; unsigned __int32 numProperties; signed __int32 properties[numProperties]; signed __int32 collisionObject; unsigned __int32 numChildren; signed __int32 children[numChildren]; unsigned __int32 numEffects; signed __int32 effects[numEffects]; unsigned __int8 unknown1; unsigned __int8 unknown292Bytes[292]; }; struct FxButton { String name; unsigned __int32 numExtraDataList; signed __int32 extraDataList[numExtraDataList]; signed __int32 controller; Flags flags; Vector3 translation; Matrix33 rotation; double scale; unsigned __int32 numProperties; signed __int32 properties[numProperties]; signed __int32 collisionObject; unsigned __int32 numChildren; signed __int32 children[numChildren]; unsigned __int32 numEffects; signed __int32 effects[numEffects]; unsigned __int8 unknown1; unsigned __int8 unknown292Bytes[292]; }; struct FxRadioButton { String name; unsigned __int32 numExtraDataList; signed __int32 extraDataList[numExtraDataList]; signed __int32 controller; Flags flags; Vector3 translation; Matrix33 rotation; double scale; unsigned __int32 numProperties; signed __int32 properties[numProperties]; signed __int32 collisionObject; unsigned __int32 numChildren; signed __int32 children[numChildren]; unsigned __int32 numEffects; signed __int32 effects[numEffects]; unsigned __int8 unknown1; unsigned __int8 unknown292Bytes[292]; unsigned __int32 unknownInt1; unsigned __int32 unknownInt2; unsigned __int32 unknownInt3; unsigned __int32 numButtons; signed __int32 buttons[numButtons]; }; struct NiBillboardNode { String name; unsigned __int32 numExtraDataList; signed __int32 extraDataList[numExtraDataList]; signed __int32 controller; Flags flags; Vector3 translation; Matrix33 rotation; double scale; unsigned __int32 numProperties; signed __int32 properties[numProperties]; signed __int32 collisionObject; unsigned __int32 numChildren; signed __int32 children[numChildren]; unsigned __int32 numEffects; signed __int32 effects[numEffects]; BillboardMode billboardMode; }; struct NiBSAnimationNode { String name; unsigned __int32 numExtraDataList; signed __int32 extraDataList[numExtraDataList]; signed __int32 controller; Flags flags; Vector3 translation; Matrix33 rotation; double scale; unsigned __int32 numProperties; signed __int32 properties[numProperties]; signed __int32 collisionObject; unsigned __int32 numChildren; signed __int32 children[numChildren]; unsigned __int32 numEffects; signed __int32 effects[numEffects]; }; struct NiBSParticleNode { String name; unsigned __int32 numExtraDataList; signed __int32 extraDataList[numExtraDataList]; signed __int32 controller; Flags flags; Vector3 translation; Matrix33 rotation; double scale; unsigned __int32 numProperties; signed __int32 properties[numProperties]; signed __int32 collisionObject; unsigned __int32 numChildren; signed __int32 children[numChildren]; unsigned __int32 numEffects; signed __int32 effects[numEffects]; }; struct NiSwitchNode { String name; unsigned __int32 numExtraDataList; signed __int32 extraDataList[numExtraDataList]; signed __int32 controller; Flags flags; Vector3 translation; Matrix33 rotation; double scale; unsigned __int32 numProperties; signed __int32 properties[numProperties]; signed __int32 collisionObject; unsigned __int32 numChildren; signed __int32 children[numChildren]; unsigned __int32 numEffects; signed __int32 effects[numEffects]; }; struct NiLODNode { String name; unsigned __int32 numExtraDataList; signed __int32 extraDataList[numExtraDataList]; signed __int32 controller; Flags flags; Vector3 translation; Matrix33 rotation; double scale; unsigned __int32 numProperties; signed __int32 properties[numProperties]; signed __int32 collisionObject; unsigned __int32 numChildren; signed __int32 children[numChildren]; unsigned __int32 numEffects; signed __int32 effects[numEffects]; unsigned __int8 unknown4Bytes[4]; unsigned __int16 unknownShort; signed __int32 lodLevelData; }; struct NiPalette { unsigned __int8 unknownByte; unsigned __int32 numEntries?; unsigned __int8 palette[256 * 4]; }; struct NiParticleBomb { signed __int32 nextModifier; signed __int32 controller; double unknownFloat1; double unknownFloat2; double unknownFloat3; double unknownFloat4; unsigned __int32 unknownInt1; unsigned __int32 unknownInt2; double unknownFloat5; double unknownFloat6; double unknownFloat7; double unknownFloat8; double unknownFloat9; double unknownFloat10; }; struct NiParticleColorModifier { signed __int32 nextModifier; signed __int32 controller; signed __int32 colorData; }; struct NiParticleGrowFade { signed __int32 nextModifier; signed __int32 controller; double grow; double fade; }; struct NiParticleMeshModifier { signed __int32 nextModifier; signed __int32 controller; unsigned __int32 numParticleMeshes; signed __int32 particleMeshes[numParticleMeshes]; }; struct NiParticleRotation { signed __int32 nextModifier; signed __int32 controller; unsigned __int8 unknownByte; double unknownFloat1; double unknownFloat2; double unknownFloat3; double unknownFloat4; }; struct NiParticles { String name; unsigned __int32 numExtraDataList; signed __int32 extraDataList[numExtraDataList]; signed __int32 controller; Flags flags; Vector3 translation; Matrix33 rotation; double scale; unsigned __int32 numProperties; signed __int32 properties[numProperties]; signed __int32 collisionObject; signed __int32 data; signed __int32 skinInstance; unsigned __int8 hasShader; String shaderName; signed __int32 unknownLink; }; struct NiAutoNormalParticles { String name; unsigned __int32 numExtraDataList; signed __int32 extraDataList[numExtraDataList]; signed __int32 controller; Flags flags; Vector3 translation; Matrix33 rotation; double scale; unsigned __int32 numProperties; signed __int32 properties[numProperties]; signed __int32 collisionObject; signed __int32 data; signed __int32 skinInstance; unsigned __int8 hasShader; String shaderName; signed __int32 unknownLink; }; struct NiParticleMeshes { String name; unsigned __int32 numExtraDataList; signed __int32 extraDataList[numExtraDataList]; signed __int32 controller; Flags flags; Vector3 translation; Matrix33 rotation; double scale; unsigned __int32 numProperties; signed __int32 properties[numProperties]; signed __int32 collisionObject; signed __int32 data; signed __int32 skinInstance; unsigned __int8 hasShader; String shaderName; signed __int32 unknownLink; }; struct NiParticleMeshesData { String name; unsigned __int16 numVertices; unsigned __int16 unknownShort1; unsigned __int8 hasVertices; Vector3 vertices[numVertices]; unsigned __int16 numUvSets; unsigned __int8 hasNormals; Vector3 normals[numVertices]; Vector3 unknownVectors1[numVertices]; Vector3 unknownVectors2[numVertices]; Vector3 center; double radius; unsigned __int8 hasVertexColors; Color4 vertexColors[numVertices]; TexCoord uvSets[numUvSets * numVertices] // WARNING - should be [numUvSets & 63 * numVertices]; unsigned __int16 unknownShort2; signed __int32 unknownLink1; unsigned __int8 hasSizes; double sizes[numVertices]; unsigned __int16 numActive; unsigned __int8 hasUnknownFloats1; double unknownFloats1[numVertices]; unsigned __int8 hasRotations1; Quaternion rotations1[numVertices]; signed __int32 unknownLink2; }; struct NiParticleSystem { String name; unsigned __int32 numExtraDataList; signed __int32 extraDataList[numExtraDataList]; signed __int32 controller; Flags flags; Vector3 translation; Matrix33 rotation; double scale; unsigned __int32 numProperties; signed __int32 properties[numProperties]; signed __int32 collisionObject; signed __int32 data; signed __int32 skinInstance; unsigned __int8 hasShader; String shaderName; signed __int32 unknownLink; unsigned __int8 unknownBool; unsigned __int32 numModifiers; signed __int32 modifiers[numModifiers]; }; struct NiMeshParticleSystem { String name; unsigned __int32 numExtraDataList; signed __int32 extraDataList[numExtraDataList]; signed __int32 controller; Flags flags; Vector3 translation; Matrix33 rotation; double scale; unsigned __int32 numProperties; signed __int32 properties[numProperties]; signed __int32 collisionObject; signed __int32 data; signed __int32 skinInstance; unsigned __int8 hasShader; String shaderName; signed __int32 unknownLink; unsigned __int8 unknownBool; unsigned __int32 numModifiers; signed __int32 modifiers[numModifiers]; }; struct NiParticleSystemController { signed __int32 nextController; Flags flags; double frequency; double phase; double startTime; double stopTime; signed __int32 target; double speed; double speedRandom; double verticalDirection; double verticalAngle; double horizontalDirection; double horizontalAngle; double unknownFloat5; double unknownFloat6; double unknownFloat7; double unknownFloat8; double unknownFloat9; double unknownFloat10; double unknownFloat11; double size; double emitStartTime; double emitStopTime; unsigned __int8 unknownByte; double emitRate; double lifetime; double lifetimeRandom; unsigned __int16 emitFlags; Vector3 startRandom; signed __int32 emitter; unsigned __int16 unknownShort2?; double unknownFloat13?; unsigned __int32 unknownInt1?; unsigned __int32 unknownInt2?; unsigned __int16 unknownShort3?; unsigned __int16 numParticles; unsigned __int16 numValid; Particle particles[numParticles]; signed __int32 unknownLink; signed __int32 particleExtra; signed __int32 unknownLink2; unsigned __int8 trailer; }; struct NiBSPArrayController { signed __int32 nextController; Flags flags; double frequency; double phase; double startTime; double stopTime; signed __int32 target; double speed; double speedRandom; double verticalDirection; double verticalAngle; double horizontalDirection; double horizontalAngle; double unknownFloat5; double unknownFloat6; double unknownFloat7; double unknownFloat8; double unknownFloat9; double unknownFloat10; double unknownFloat11; double size; double emitStartTime; double emitStopTime; unsigned __int8 unknownByte; double emitRate; double lifetime; double lifetimeRandom; unsigned __int16 emitFlags; Vector3 startRandom; signed __int32 emitter; unsigned __int16 unknownShort2?; double unknownFloat13?; unsigned __int32 unknownInt1?; unsigned __int32 unknownInt2?; unsigned __int16 unknownShort3?; unsigned __int16 numParticles; unsigned __int16 numValid; Particle particles[numParticles]; signed __int32 unknownLink; signed __int32 particleExtra; signed __int32 unknownLink2; unsigned __int8 trailer; }; struct NiPathController { signed __int32 nextController; Flags flags; double frequency; double phase; double startTime; double stopTime; signed __int32 target; unsigned __int16 unknownShort2; unsigned __int32 unknownInt1; unsigned __int32 unknownInt2; unsigned __int32 unknownInt3; unsigned __int16 unknownShort; signed __int32 posData; signed __int32 floatData; }; struct NiPixelData { PixelFormat pixelFormat; unsigned __int8 unknown54Bytes[54]; signed __int32 palette; unsigned __int32 numMipmaps; unsigned __int32 bytesPerPixel; MipMap mipmaps[numMipmaps]; ByteArray pixelData; unsigned __int32 unknownInt2; }; struct NiPlanarCollider { signed __int32 nextModifier; signed __int32 controller; unsigned __int16 unknownShort; double unknownFloat1; double unknownFloat2; double unknownFloat3; double unknownFloat4; double unknownFloat5; double unknownFloat6; double unknownFloat7; double unknownFloat8; double unknownFloat9; double unknownFloat10; double unknownFloat11; double unknownFloat12; double unknownFloat13; double unknownFloat14; double unknownFloat15; double unknownFloat16; }; struct NiPointLight { String name; unsigned __int32 numExtraDataList; signed __int32 extraDataList[numExtraDataList]; signed __int32 controller; Flags flags; Vector3 translation; Matrix33 rotation; double scale; unsigned __int32 numProperties; signed __int32 properties[numProperties]; signed __int32 collisionObject; unsigned __int8 switchState; unsigned __int32 numAffectedNodes; signed __int32 affectedNodes[numAffectedNodes]; double dimmer; Color3 ambientColor; Color3 diffuseColor; Color3 specularColor; double constantAttenuation; double linearAttenuation; double quadraticAttenuation; }; struct NiPosData { KeyGroup_Vector3 data; }; struct NiPSysAgeDeathModifier { String name; unsigned __int32 order; signed __int32 target; unsigned __int8 active; unsigned __int8 spawnOnDeath; signed __int32 spawnModifier; }; struct NiPSysBombModifier { String name; unsigned __int32 order; signed __int32 target; unsigned __int8 active; signed __int32 unknownLink; unsigned __int32 unknownInts1[2]; double unknownFloats[3]; unsigned __int32 unknownInts2[2]; }; struct NiPSysBoundUpdateModifier { String name; unsigned __int32 order; signed __int32 target; unsigned __int8 active; unsigned __int16 updateSkip; }; struct NiPSysBoxEmitter { String name; unsigned __int32 order; signed __int32 target; unsigned __int8 active; double speed; double speedVariation; double declination; double declinationVariation; double planarAngle; double planarAngleVariation; Color4 initialColor; double initialRadius; double radiusVariation; double lifeSpan; double lifeSpanVariation; signed __int32 emitterObject; double width; double height; double depth; }; struct NiPSysColliderManager { String name; unsigned __int32 order; signed __int32 target; unsigned __int8 active; signed __int32 collider; }; struct NiPSysColorModifier { String name; unsigned __int32 order; signed __int32 target; unsigned __int8 active; signed __int32 data; }; struct NiPSysCylinderEmitter { String name; unsigned __int32 order; signed __int32 target; unsigned __int8 active; double speed; double speedVariation; double declination; double declinationVariation; double planarAngle; double planarAngleVariation; Color4 initialColor; double initialRadius; double radiusVariation; double lifeSpan; double lifeSpanVariation; signed __int32 emitterObject; double radius; double height; }; struct NiPSysDragModifier { String name; unsigned __int32 order; signed __int32 target; unsigned __int8 active; signed __int32 parent; Vector3 dragAxis; double percentage; double range; double rangeFalloff; }; struct NiPSysEmitterCtlrData { KeyGroup_Float floatKeys?; unsigned __int32 numVisibilityKeys?; Key_Byte visibilityKeys?[numVisibilityKeys?]; }; struct NiPSysGravityModifier { String name; unsigned __int32 order; signed __int32 target; unsigned __int8 active; signed __int32 gravityObject; Vector3 gravityAxis; double decay; double strength; ForceType forceType; double turbulence; double turbulenceScale; }; struct NiPSysGrowFadeModifier { String name; unsigned __int32 order; signed __int32 target; unsigned __int8 active; double growTime; unsigned __int16 growGeneration; double fadeTime; unsigned __int16 fadeGeneration; }; struct NiPSysMeshEmitter { String name; unsigned __int32 order; signed __int32 target; unsigned __int8 active; double speed; double speedVariation; double declination; double declinationVariation; double planarAngle; double planarAngleVariation; Color4 initialColor; double initialRadius; double radiusVariation; double lifeSpan; double lifeSpanVariation; unsigned __int32 numEmitterMeshes; signed __int32 emitterMeshes[numEmitterMeshes]; unsigned __int32 initialVelocityType; unsigned __int32 emissionType; Vector3 emissionAxis; }; struct NiPSysMeshUpdateModifier { String name; unsigned __int32 order; signed __int32 target; unsigned __int8 active; unsigned __int32 numMeshes; signed __int32 meshes[numMeshes]; }; struct NiPSysPlanarCollider { double bounce; unsigned __int8 spawnOnCollide; unsigned __int8 dieOnCollide; signed __int32 spawnModifier; signed __int32 parent; signed __int32 nextCollider; signed __int32 colliderObject; double width; double height; Vector3 xAxis; Vector3 yAxis; }; struct NiPSysSphericalCollider { double bounce; unsigned __int8 spawnOnCollide; unsigned __int8 dieOnCollide; signed __int32 spawnModifier; signed __int32 parent; signed __int32 nextCollider; signed __int32 colliderObject; double radius; }; struct NiPSysPositionModifier { String name; unsigned __int32 order; signed __int32 target; unsigned __int8 active; }; struct NiPSysResetOnLoopCtlr { signed __int32 nextController; Flags flags; double frequency; double phase; double startTime; double stopTime; signed __int32 target; }; struct NiPSysRotationModifier { String name; unsigned __int32 order; signed __int32 target; unsigned __int8 active; double initialRotationSpeed; double initialRotationSpeedVariation; double initialRotationAngle; double initialRotationAngleVariation; unsigned __int8 randomRotSpeedSign; unsigned __int8 randomInitialAxis; Vector3 initialAxis; }; struct NiPSysSpawnModifier { String name; unsigned __int32 order; signed __int32 target; unsigned __int8 active; unsigned __int16 numSpawnGenerations; double percentageSpawned; unsigned __int16 minNumToSpawn; unsigned __int16 maxNumToSpawn; double spawnSpeedChaos; double spawnDirChaos; double lifeSpan; double lifeSpanVariation; }; struct NiPSysSphereEmitter { String name; unsigned __int32 order; signed __int32 target; unsigned __int8 active; double speed; double speedVariation; double declination; double declinationVariation; double planarAngle; double planarAngleVariation; Color4 initialColor; double initialRadius; double radiusVariation; double lifeSpan; double lifeSpanVariation; signed __int32 emitterObject; double radius; }; struct NiPSysUpdateCtlr { signed __int32 nextController; Flags flags; double frequency; double phase; double startTime; double stopTime; signed __int32 target; }; struct NiLODData { }; struct NiRangeLODData { Vector3 lodCenter; unsigned __int32 numLodLevels; LODRange lodLevels[numLodLevels]; }; struct NiScreenLODData { Vector3 boundCenter; double boundRadius; Vector3 worldCenter; double worldRadius; unsigned __int32 proportionCount; double proportionLevels[proportionCount]; }; struct NiRotatingParticles { String name; unsigned __int32 numExtraDataList; signed __int32 extraDataList[numExtraDataList]; signed __int32 controller; Flags flags; Vector3 translation; Matrix33 rotation; double scale; unsigned __int32 numProperties; signed __int32 properties[numProperties]; signed __int32 collisionObject; signed __int32 data; signed __int32 skinInstance; unsigned __int8 hasShader; String shaderName; signed __int32 unknownLink; }; struct NiSequenceStreamHelper { String name; unsigned __int32 numExtraDataList; signed __int32 extraDataList[numExtraDataList]; signed __int32 controller; }; struct NiShadeProperty { String name; unsigned __int32 numExtraDataList; signed __int32 extraDataList[numExtraDataList]; signed __int32 controller; Flags flags; }; struct NiSkinData { Matrix33 rotation; Vector3 translation; double scale; unsigned __int32 numBones; unsigned __int8 hasVertexWeights; SkinData boneList[numBones]; }; struct NiSkinInstance { signed __int32 data; signed __int32 skinPartition; signed __int32 skeletonRoot; unsigned __int32 numBones; signed __int32 bones[numBones]; }; struct NiTriShapeSkinController { signed __int32 nextController; Flags flags; double frequency; double phase; double startTime; double stopTime; signed __int32 target; unsigned __int32 numBones; unsigned __int32 vertexCounts[numBones]; signed __int32 bones[numBones]; OldSkinData boneData[numBones * vertexCounts]; }; struct NiClodSkinInstance { signed __int32 data; signed __int32 skinPartition; signed __int32 skeletonRoot; unsigned __int32 numBones; signed __int32 bones[numBones]; }; struct NiSkinPartition { unsigned __int32 numSkinPartitionBlocks; SkinPartition skinPartitionBlocks[numSkinPartitionBlocks]; }; struct NiTexture { String name; unsigned __int32 numExtraDataList; signed __int32 extraDataList[numExtraDataList]; signed __int32 controller; }; struct NiSourceTexture { String name; unsigned __int32 numExtraDataList; signed __int32 extraDataList[numExtraDataList]; signed __int32 controller; unsigned __int8 useExternal; String fileName; signed __int32 unknownLink; String originalFileName?; signed __int32 pixelData; PixelLayout pixelLayout; MipMapFormat useMipmaps; AlphaFormat alphaFormat; unsigned __int8 unknownByte; unsigned __int8 unknownByte2; }; struct NiSpecularProperty { String name; unsigned __int32 numExtraDataList; signed __int32 extraDataList[numExtraDataList]; signed __int32 controller; Flags flags; }; struct NiSphericalCollider { signed __int32 nextModifier; signed __int32 controller; double unknownFloat1; unsigned __int16 unknownShort1; double unknownFloat2; double unknownFloat3; double unknownFloat4; double unknownFloat5; }; struct NiSpotLight { String name; unsigned __int32 numExtraDataList; signed __int32 extraDataList[numExtraDataList]; signed __int32 controller; Flags flags; Vector3 translation; Matrix33 rotation; double scale; unsigned __int32 numProperties; signed __int32 properties[numProperties]; signed __int32 collisionObject; unsigned __int8 switchState; unsigned __int32 numAffectedNodes; signed __int32 affectedNodes[numAffectedNodes]; double dimmer; Color3 ambientColor; Color3 diffuseColor; Color3 specularColor; double constantAttenuation; double linearAttenuation; double quadraticAttenuation; double cutoffAngle; double exponent; }; struct NiStencilProperty { String name; unsigned __int32 numExtraDataList; signed __int32 extraDataList[numExtraDataList]; signed __int32 controller; unsigned __int8 stencilEnabled; CompareMode stencilFunction; unsigned __int32 stencilRef; unsigned __int32 stencilMask; StencilAction failAction; StencilAction zFailAction; StencilAction passAction; FaceDrawMode drawMode; }; struct NiStringExtraData { String name; String stringData; }; struct NiStringPalette { StringPalette palette; }; struct NiStringsExtraData { String name; unsigned __int32 numStrings; String data[numStrings]; }; struct NiTextKeyExtraData { String name; unsigned __int32 numTextKeys; Key_String textKeys[numTextKeys]; }; struct NiTextureEffect { String name; unsigned __int32 numExtraDataList; signed __int32 extraDataList[numExtraDataList]; signed __int32 controller; Flags flags; Vector3 translation; Matrix33 rotation; double scale; unsigned __int32 numProperties; signed __int32 properties[numProperties]; signed __int32 collisionObject; unsigned __int8 switchState; unsigned __int32 numAffectedNodes; signed __int32 affectedNodes[numAffectedNodes]; Matrix33 modelProjectionMatrix; Vector3 modelProjectionTransform; TexFilterMode textureFiltering; TexClampMode textureClamping; unsigned __int32 textureType; unsigned __int32 coordinateGenerationType; signed __int32 sourceTexture; unsigned __int8 clippingPlane; Vector3 unknownVector; double unknownFloat; }; struct NiTextureModeProperty { String name; unsigned __int32 numExtraDataList; signed __int32 extraDataList[numExtraDataList]; signed __int32 controller; signed __int16 unknownShort; signed __int16 unknown2Shorts[2]; }; struct NiImage { unsigned __int8 external; String fileName; signed __int32 imageData; unsigned __int32 unknownInt1; unsigned __int32 unknownInt2; }; struct NiTextureProperty { String name; unsigned __int32 numExtraDataList; signed __int32 extraDataList[numExtraDataList]; signed __int32 controller; Flags flags; signed __int32 image; }; struct NiMultiTextureProperty { String name; unsigned __int32 numExtraDataList; signed __int32 extraDataList[numExtraDataList]; signed __int32 controller; Flags flags; unsigned __int32 unknownInt; MultiTextureElement textureElements[5]; }; struct NiTexturingProperty { String name; unsigned __int32 numExtraDataList; signed __int32 extraDataList[numExtraDataList]; signed __int32 controller; ApplyMode applyMode; unsigned __int32 textureCount; unsigned __int8 hasBaseTexture; TexDesc baseTexture; unsigned __int8 hasDarkTexture; TexDesc darkTexture; unsigned __int8 hasDetailTexture; TexDesc detailTexture; unsigned __int8 hasGlossTexture; TexDesc glossTexture; unsigned __int8 hasGlowTexture; TexDesc glowTexture; unsigned __int8 hasBumpMapTexture; TexDesc bumpMapTexture; double bumpMapLumaScale; double bumpMapLumaOffset; Matrix22 bumpMapMatrix; unsigned __int8 hasDecal0Texture; TexDesc decal0Texture; unsigned __int8 hasDecal1Texture; TexDesc decal1Texture; unsigned __int8 hasDecal2Texture; TexDesc decal2Texture; unsigned __int8 hasDecal3Texture; TexDesc decal3Texture; unsigned __int32 numShaderTextures; ShaderTexDesc shaderTextures[numShaderTextures]; }; struct NiTransformData { unsigned __int32 numRotationKeys; KeyType rotationType; QuatKey_Quaternion quaternionKeys[numRotationKeys]; KeyGroup_Float xyzRotations[3]; KeyGroup_Vector3 translations; KeyGroup_Float scales; }; struct NiTriShape { String name; unsigned __int32 numExtraDataList; signed __int32 extraDataList[numExtraDataList]; signed __int32 controller; Flags flags; Vector3 translation; Matrix33 rotation; double scale; unsigned __int32 numProperties; signed __int32 properties[numProperties]; signed __int32 collisionObject; signed __int32 data; signed __int32 skinInstance; unsigned __int8 hasShader; String shaderName; signed __int32 unknownLink; }; struct NiTriShapeData { String name; unsigned __int16 numVertices; unsigned __int16 unknownShort1; unsigned __int8 hasVertices; Vector3 vertices[numVertices]; unsigned __int16 numUvSets; unsigned __int8 hasNormals; Vector3 normals[numVertices]; Vector3 unknownVectors1[numVertices]; Vector3 unknownVectors2[numVertices]; Vector3 center; double radius; unsigned __int8 hasVertexColors; Color4 vertexColors[numVertices]; TexCoord uvSets[numUvSets * numVertices] // WARNING - should be [numUvSets & 63 * numVertices]; unsigned __int16 unknownShort2; signed __int32 unknownLink1; unsigned __int16 numTriangles; unsigned __int32 numTrianglePoints; unsigned __int8 hasTriangles; Triangle triangles[numTriangles]; unsigned __int16 numMatchGroups; MatchGroup matchGroups[numMatchGroups]; }; struct NiTriStrips { String name; unsigned __int32 numExtraDataList; signed __int32 extraDataList[numExtraDataList]; signed __int32 controller; Flags flags; Vector3 translation; Matrix33 rotation; double scale; unsigned __int32 numProperties; signed __int32 properties[numProperties]; signed __int32 collisionObject; signed __int32 data; signed __int32 skinInstance; unsigned __int8 hasShader; String shaderName; signed __int32 unknownLink; }; struct NiTriStripsData { String name; unsigned __int16 numVertices; unsigned __int16 unknownShort1; unsigned __int8 hasVertices; Vector3 vertices[numVertices]; unsigned __int16 numUvSets; unsigned __int8 hasNormals; Vector3 normals[numVertices]; Vector3 unknownVectors1[numVertices]; Vector3 unknownVectors2[numVertices]; Vector3 center; double radius; unsigned __int8 hasVertexColors; Color4 vertexColors[numVertices]; TexCoord uvSets[numUvSets * numVertices] // WARNING - should be [numUvSets & 63 * numVertices]; unsigned __int16 unknownShort2; signed __int32 unknownLink1; unsigned __int16 numTriangles; unsigned __int16 numStrips; unsigned __int16 stripLengths[numStrips]; unsigned __int8 hasPoints; unsigned __int16 points[numStrips * stripLengths]; }; struct NiClod { String name; unsigned __int32 numExtraDataList; signed __int32 extraDataList[numExtraDataList]; signed __int32 controller; Flags flags; Vector3 translation; Matrix33 rotation; double scale; unsigned __int32 numProperties; signed __int32 properties[numProperties]; signed __int32 collisionObject; signed __int32 data; signed __int32 skinInstance; unsigned __int8 hasShader; String shaderName; signed __int32 unknownLink; }; struct NiClodData { String name; unsigned __int16 numVertices; unsigned __int16 unknownShort1; unsigned __int8 hasVertices; Vector3 vertices[numVertices]; unsigned __int16 numUvSets; unsigned __int8 hasNormals; Vector3 normals[numVertices]; Vector3 unknownVectors1[numVertices]; Vector3 unknownVectors2[numVertices]; Vector3 center; double radius; unsigned __int8 hasVertexColors; Color4 vertexColors[numVertices]; TexCoord uvSets[numUvSets * numVertices] // WARNING - should be [numUvSets & 63 * numVertices]; unsigned __int16 unknownShort2; signed __int32 unknownLink1; unsigned __int16 numTriangles; unsigned __int16 unknownShorts; unsigned __int16 unknownCount1; unsigned __int16 unknownCount2; unsigned __int16 unknownCount3; double unknownFloat; unsigned __int16 unknownShort; unsigned __int16 unknownClodShorts1[unknownCount1 * 6]; unsigned __int16 unknownClodShorts2[unknownCount2]; unsigned __int16 unknownClodShorts3[unknownCount3 * 6]; }; struct NiUVController { signed __int32 nextController; Flags flags; double frequency; double phase; double startTime; double stopTime; signed __int32 target; unsigned __int16 unknownShort; signed __int32 data; }; struct NiUVData { KeyGroup_Float uvGroups[4]; }; struct NiVectorExtraData { String name; Vector3 vectorData; double unknownFloat; }; struct NiVertexColorProperty { String name; unsigned __int32 numExtraDataList; signed __int32 extraDataList[numExtraDataList]; signed __int32 controller; Flags flags; VertMode vertexMode; LightMode lightingMode; }; struct NiVertWeightsExtraData { String name; unsigned __int32 numBytes; unsigned __int16 numVertices; double weight[numVertices]; }; struct NiVisData { unsigned __int32 numVisKeys; Key_Byte visKeys[numVisKeys]; }; struct NiWireframeProperty { String name; unsigned __int32 numExtraDataList; signed __int32 extraDataList[numExtraDataList]; signed __int32 controller; Flags flags; }; struct NiZBufferProperty { String name; unsigned __int32 numExtraDataList; signed __int32 extraDataList[numExtraDataList]; signed __int32 controller; Flags flags; CompareMode function; }; struct RootCollisionNode { String name; unsigned __int32 numExtraDataList; signed __int32 extraDataList[numExtraDataList]; signed __int32 controller; Flags flags; Vector3 translation; Matrix33 rotation; double scale; unsigned __int32 numProperties; signed __int32 properties[numProperties]; signed __int32 collisionObject; unsigned __int32 numChildren; signed __int32 children[numChildren]; unsigned __int32 numEffects; signed __int32 effects[numEffects]; }; struct NiRawImageData { unsigned __int32 width; unsigned __int32 height; unsigned __int32 imageType; ByteColor3 rgbImageData[width * height]; ByteColor4 rgbaImageData[width * height]; };