From 6a5c86654f18de22164083055e85def940b7ac2b Mon Sep 17 00:00:00 2001 From: jonwd7 <jon.wd7@gmail.com> Date: Tue, 30 May 2017 22:30:37 -0400 Subject: [PATCH] FO4/SSE changes Split BSVertexData into two versions, one for FO4 and one for SSE. This uncomplicates some of the conditions and lowers the row count for each vertex compound so will be faster to parse. Also some misc name/type changes for FO4 blocks. --- nif.xml | 53 +++++++++++++++++++++++++++++++---------------------- 1 file changed, 31 insertions(+), 22 deletions(-) diff --git a/nif.xml b/nif.xml index 80f0ded..c6a19ed 100644 --- a/nif.xml +++ b/nif.xml @@ -1488,19 +1488,30 @@ </bitflags> <compound name="BSVertexData"> - <add name="Vertex" type="Vector3" userver2="100" cond="((ARG & 16) != 0)" /> - <add name="Bitangent X" type="float" userver2="100" cond="((ARG & 256) != 0)" /> - <add name="Unknown Int" type="int" userver2="100" cond="(ARG & 256) == 0" /> + <add name="Vertex" type="HalfVector3" cond="((ARG & 16) != 0) && ((ARG & 16384) == 0)" /> + <add name="Bitangent X" type="hfloat" cond="((ARG & 16) != 0) && ((ARG & 256) != 0) && ((ARG & 16384) == 0)" /> + <add name="Unknown Short" type="ushort" cond="((ARG & 16) != 0) && ((ARG & 256) == 0) && ((ARG & 16384) == 0)" /> - <add name="Vertex" type="HalfVector3" userver2="130" cond="((ARG & 16) != 0) && ((ARG & 16384) == 0)" /> - <add name="Bitangent X" type="hfloat" userver2="130" cond="((ARG & 256) != 0) && ((ARG & 16384) == 0)" /> - <add name="Unknown Short" type="ushort" userver2="130" cond="((ARG & 256) == 0) && ((ARG & 16384) == 0)" /> + <add name="Vertex" type="Vector3" cond="((ARG & 16) != 0) && ((ARG & 16384) != 0)" /> + <add name="Bitangent X" type="float" cond="((ARG & 16) != 0) && ((ARG & 256) != 0) && ((ARG & 16384) != 0)" /> + <add name="Unknown Int" type="uint" cond="((ARG & 16) != 0) && ((ARG & 256) == 0) && ((ARG & 16384) != 0)" /> - <add name="Vertex" type="Vector3" userver2="130" cond="((ARG & 16) != 0) && ((ARG & 16384) != 0)" /> - <add name="Bitangent X" type="float" userver2="130" cond="((ARG & 256) != 0) && ((ARG & 16384) != 0)" /> - <add name="Unknown Int" type="uint" userver2="130" cond="((ARG & 256) == 0) && ((ARG & 16384) != 0)" /> - - <add name="UV" type="HalfTexCoord" cond="(((ARG & 16) != 0) && ((ARG & 32) != 0))" /> + <add name="UV" type="HalfTexCoord" cond="((ARG & 32) != 0)" /> + <add name="Normal" type="ByteVector3" cond="(ARG & 128) != 0" /> + <add name="Bitangent Y" type="byte" cond="(ARG & 128) != 0" /> + <add name="Tangent" type="ByteVector3" cond="((ARG & 128) != 0) && ((ARG & 256) != 0)" /> + <add name="Bitangent Z" type="byte" cond="((ARG & 128) != 0) && ((ARG & 256) != 0)" /> + <add name="Vertex Colors" type="ByteColor4" cond="(ARG & 512) != 0" /> + <add name="Bone Weights" type="hfloat" arr1="4" cond="(ARG & 1024) != 0" /> + <add name="Bone Indices" type="byte" arr1="4" cond="(ARG & 1024) != 0" /> + <add name="Unknown Int 2" type="uint" cond="(ARG & 4096) != 0" /> + </compound> + + <compound name="BSVertexDataSSE"> + <add name="Vertex" type="Vector3" cond="((ARG & 16) != 0)" /> + <add name="Bitangent X" type="float" cond="((ARG & 16) != 0) && ((ARG & 256) != 0)" /> + <add name="Unknown Int" type="int" cond="((ARG & 16) != 0) && (ARG & 256) == 0" /> + <add name="UV" type="HalfTexCoord" cond="((ARG & 32) != 0)" /> <add name="Normal" type="ByteVector3" cond="(ARG & 128) != 0" /> <add name="Bitangent Y" type="byte" cond="(ARG & 128) != 0" /> <add name="Tangent" type="ByteVector3" cond="((ARG & 128) != 0) && ((ARG & 256) != 0)" /> @@ -4238,7 +4249,7 @@ <add name="VF5" type="byte" ver="20.2.0.7" userver2="100" /> <add name="VF" type="VertexFlags" ver="20.2.0.7" userver2="100" /> <add name="VF8" type="byte" ver="20.2.0.7" userver2="100" /> - <add name="Vertex Data" type="BSVertexData" arg="VF" arr1="Data Size / Vertex Size" cond="Data Size > 0" ver="20.2.0.7" userver2="100" /> + <add name="Vertex Data" type="BSVertexDataSSE" arg="VF" arr1="Data Size / Vertex Size" cond="Data Size > 0" ver="20.2.0.7" userver2="100" /> <add name="Partition" type="SkinPartition" arr1="Num Skin Partition Blocks" ver="20.2.0.7" userver2="100" /> </niobject> @@ -6543,7 +6554,8 @@ <add name="Num Triangles" type="ushort" vercond="User Version 2 < 130" /> <add name="Num Vertices" type="ushort" /> <add name="Data Size" type="uint" /> - <add name="Vertex Data" type="BSVertexData" arr1="Num Vertices" arg="VF" cond="Data Size > 0" /> + <add name="Vertex Data" type="BSVertexData" arr1="Num Vertices" arg="VF" cond="Data Size > 0" userver2="130" /> + <add name="Vertex Data" type="BSVertexDataSSE" arr1="Num Vertices" arg="VF" cond="Data Size > 0" userver2="100" /> <add name="Triangles" type="Triangle" arr1="Num Triangles" cond="Data Size > 0" /> <add name="Particle Data Size" type="uint" userver2="100" /> <add name="Vertices" type="Vector3" arr1="Num Vertices" cond="Particle Data Size > 0" userver2="100" /> @@ -6618,14 +6630,12 @@ <niobject name="bhkPhysicsSystem" inherit="bhkSystem"> Fallout 4 Collision System - <add name="Size" type="uint" /> - <add name="Data" type="byte" binary="1" arr1="Size" /> + <add name="Binary Data" type="ByteArray" /> </niobject> <niobject name="bhkRagdollSystem" inherit="bhkSystem"> Fallout 4 Ragdoll System - <add name="Size" type="uint" /> - <add name="Data" type="byte" binary="1" arr1="Size" /> + <add name="Binary Data" type="ByteArray" /> </niobject> <niobject name="BSExtraData" inherit="NiExtraData"> @@ -6634,8 +6644,7 @@ <niobject name="BSClothExtraData" inherit="BSExtraData"> Fallout 4 Cloth data - <add name="Size" type="uint" /> - <add name="Data" type="byte" binary="1" arr1="Size" /> + <add name="Binary Data" type="ByteArray" /> </niobject> <!-- Fallout 4 Skeleton --> @@ -6650,8 +6659,8 @@ <niobject name="BSSkin::Instance" inherit="NiObject"> Fallout 4 Skin Instance - <add name="Root Parent" type="Ptr" template="NiAVObject" /> - <add name="Bone Data" type="Ref" template="BSSkin::BoneData" /> + <add name="Skeleton Root" type="Ptr" template="NiAVObject" /> + <add name="Data" type="Ref" template="BSSkin::BoneData" /> <add name="Num Bones" type="uint" /> <add name="Bones" type="Ptr" arr1="Num Bones" /> <add name="Num Unknown" type="uint" /> @@ -6661,7 +6670,7 @@ <niobject name="BSSkin::BoneData" inherit="NiObject"> Fallout 4 Bone Data <add name="Num Bones" type="uint" /> - <add name="Bones" type="BSSkinBoneTrans" arr1="Num Bones" /> + <add name="Bone List" type="BSSkinBoneTrans" arr1="Num Bones" /> </niobject> <niobject name="BSPositionData" inherit="NiExtraData"> -- GitLab