- [Core] fix parsing issues [LoD]
This commit is contained in:
@@ -842,6 +842,49 @@ namespace AssetStudio
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
public class AclTransformTrackIDToBindingCurveID
|
||||||
|
{
|
||||||
|
public uint rotationIDToBindingCurveID;
|
||||||
|
public uint positionIDToBindingCurveID;
|
||||||
|
public uint scaleIDToBindingCurveID;
|
||||||
|
public AclTransformTrackIDToBindingCurveID(ObjectReader reader)
|
||||||
|
{
|
||||||
|
rotationIDToBindingCurveID = reader.ReadUInt32();
|
||||||
|
positionIDToBindingCurveID = reader.ReadUInt32();
|
||||||
|
scaleIDToBindingCurveID = reader.ReadUInt32();
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
public class LnDACLClip : ACLClip
|
||||||
|
{
|
||||||
|
public uint m_CurveCount;
|
||||||
|
public byte[] m_ClipData;
|
||||||
|
|
||||||
|
public override bool IsSet => !m_ClipData.IsNullOrEmpty();
|
||||||
|
public override uint CurveCount => m_CurveCount;
|
||||||
|
public override void Read(ObjectReader reader)
|
||||||
|
{
|
||||||
|
m_CurveCount = reader.ReadUInt32();
|
||||||
|
var compressedTransformTracksSize = reader.ReadUInt32();
|
||||||
|
var compressedScalarTracksSize = reader.ReadUInt32();
|
||||||
|
var aclTransformCount = reader.ReadUInt32();
|
||||||
|
var aclScalarCount = reader.ReadUInt32();
|
||||||
|
|
||||||
|
var compressedTransformTracksCount = reader.ReadInt32() * 0x10;
|
||||||
|
var compressedTransformTracks = reader.ReadBytes(compressedTransformTracksCount);
|
||||||
|
var compressedScalarTracksCount = reader.ReadInt32() * 0x10;
|
||||||
|
var compressedScalarTracks = reader.ReadBytes(compressedScalarTracksCount);
|
||||||
|
|
||||||
|
int numaclTransformTrackIDToBindingCurveID = reader.ReadInt32();
|
||||||
|
var aclTransformTrackIDToBindingCurveID = new List<AclTransformTrackIDToBindingCurveID>();
|
||||||
|
for (int i = 0; i < numaclTransformTrackIDToBindingCurveID; i++)
|
||||||
|
{
|
||||||
|
aclTransformTrackIDToBindingCurveID.Add(new AclTransformTrackIDToBindingCurveID(reader));
|
||||||
|
}
|
||||||
|
var aclScalarTrackIDToBindingCurveID = reader.ReadUInt32Array();
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
public class GIACLClip : ACLClip
|
public class GIACLClip : ACLClip
|
||||||
{
|
{
|
||||||
public uint m_CurveCount;
|
public uint m_CurveCount;
|
||||||
@@ -1278,6 +1321,11 @@ namespace AssetStudio
|
|||||||
m_ACLClip = new MHYACLClip();
|
m_ACLClip = new MHYACLClip();
|
||||||
m_ACLClip.Read(reader);
|
m_ACLClip.Read(reader);
|
||||||
}
|
}
|
||||||
|
if (reader.Game.Type.IsLoveAndDeepspace())
|
||||||
|
{
|
||||||
|
m_ACLClip = new LnDACLClip();
|
||||||
|
m_ACLClip.Read(reader);
|
||||||
|
}
|
||||||
if (version[0] < 2018 || (version[0] == 2018 && version[1] < 3)) //2018.3 down
|
if (version[0] < 2018 || (version[0] == 2018 && version[1] < 3)) //2018.3 down
|
||||||
{
|
{
|
||||||
m_Binding = new ValueArrayConstant(reader);
|
m_Binding = new ValueArrayConstant(reader);
|
||||||
@@ -1400,18 +1448,29 @@ namespace AssetStudio
|
|||||||
public ClipMuscleConstant(ObjectReader reader)
|
public ClipMuscleConstant(ObjectReader reader)
|
||||||
{
|
{
|
||||||
var version = reader.version;
|
var version = reader.version;
|
||||||
m_DeltaPose = new HumanPose(reader);
|
if (reader.Game.Type.IsLoveAndDeepspace())
|
||||||
m_StartX = reader.ReadXForm();
|
|
||||||
if (version[0] > 5 || (version[0] == 5 && version[1] >= 5))//5.5 and up
|
|
||||||
{
|
{
|
||||||
m_StopX = reader.ReadXForm();
|
m_StartX = reader.ReadXForm();
|
||||||
|
if (version[0] > 5 || (version[0] == 5 && version[1] >= 5))//5.5 and up
|
||||||
|
{
|
||||||
|
m_StopX = reader.ReadXForm();
|
||||||
|
}
|
||||||
}
|
}
|
||||||
m_LeftFootStartX = reader.ReadXForm();
|
else
|
||||||
m_RightFootStartX = reader.ReadXForm();
|
|
||||||
if (version[0] < 5)//5.0 down
|
|
||||||
{
|
{
|
||||||
m_MotionStartX = reader.ReadXForm();
|
m_DeltaPose = new HumanPose(reader);
|
||||||
m_MotionStopX = reader.ReadXForm();
|
m_StartX = reader.ReadXForm();
|
||||||
|
if (version[0] > 5 || (version[0] == 5 && version[1] >= 5))//5.5 and up
|
||||||
|
{
|
||||||
|
m_StopX = reader.ReadXForm();
|
||||||
|
}
|
||||||
|
m_LeftFootStartX = reader.ReadXForm();
|
||||||
|
m_RightFootStartX = reader.ReadXForm();
|
||||||
|
if (version[0] < 5)//5.0 down
|
||||||
|
{
|
||||||
|
m_MotionStartX = reader.ReadXForm();
|
||||||
|
m_MotionStopX = reader.ReadXForm();
|
||||||
|
}
|
||||||
}
|
}
|
||||||
m_AverageSpeed = version[0] > 5 || (version[0] == 5 && version[1] >= 4) ? reader.ReadVector3() : (Vector3)reader.ReadVector4();//5.4 and up
|
m_AverageSpeed = version[0] > 5 || (version[0] == 5 && version[1] >= 4) ? reader.ReadVector3() : (Vector3)reader.ReadVector4();//5.4 and up
|
||||||
m_Clip = new Clip(reader);
|
m_Clip = new Clip(reader);
|
||||||
@@ -1774,6 +1833,19 @@ namespace AssetStudio
|
|||||||
{
|
{
|
||||||
m_Legacy = true;
|
m_Legacy = true;
|
||||||
}
|
}
|
||||||
|
if (reader.Game.Type.IsLoveAndDeepspace())
|
||||||
|
{
|
||||||
|
reader.AlignStream();
|
||||||
|
var m_aclTransformCache = reader.ReadUInt8Array();
|
||||||
|
var m_aclScalarCache = reader.ReadUInt8Array();
|
||||||
|
int numaclTransformTrackId2CurveId = reader.ReadInt32();
|
||||||
|
var m_aclTransformTrackId2CurveId = new List<AclTransformTrackIDToBindingCurveID>();
|
||||||
|
for (int i = 0; i < numaclTransformTrackId2CurveId; i++)
|
||||||
|
{
|
||||||
|
m_aclTransformTrackId2CurveId.Add(new AclTransformTrackIDToBindingCurveID(reader));
|
||||||
|
}
|
||||||
|
var m_aclScalarTrackId2CurveId = reader.ReadUInt32Array();
|
||||||
|
}
|
||||||
m_Compressed = reader.ReadBoolean();
|
m_Compressed = reader.ReadBoolean();
|
||||||
if (version[0] > 4 || (version[0] == 4 && version[1] >= 3))//4.3 and up
|
if (version[0] > 4 || (version[0] == 4 && version[1] >= 3))//4.3 and up
|
||||||
{
|
{
|
||||||
|
|||||||
@@ -71,6 +71,10 @@ namespace AssetStudio
|
|||||||
m_StateMachineMotionSetIndex = reader.ReadUInt32();
|
m_StateMachineMotionSetIndex = reader.ReadUInt32();
|
||||||
m_BodyMask = new HumanPoseMask(reader);
|
m_BodyMask = new HumanPoseMask(reader);
|
||||||
m_SkeletonMask = new SkeletonMask(reader);
|
m_SkeletonMask = new SkeletonMask(reader);
|
||||||
|
if (reader.Game.Type.IsLoveAndDeepspace())
|
||||||
|
{
|
||||||
|
var m_GenericMask = new SkeletonMask(reader);
|
||||||
|
}
|
||||||
m_Binding = reader.ReadUInt32();
|
m_Binding = reader.ReadUInt32();
|
||||||
m_LayerBlendingMode = reader.ReadInt32();
|
m_LayerBlendingMode = reader.ReadInt32();
|
||||||
if (version[0] > 4 || (version[0] == 4 && version[1] >= 2)) //4.2 and up
|
if (version[0] > 4 || (version[0] == 4 && version[1] >= 2)) //4.2 and up
|
||||||
|
|||||||
@@ -110,6 +110,11 @@ namespace AssetStudio
|
|||||||
var m_CustomRenderQueue = reader.ReadInt32();
|
var m_CustomRenderQueue = reader.ReadInt32();
|
||||||
}
|
}
|
||||||
|
|
||||||
|
if (reader.Game.Type.IsLoveAndDeepspace())
|
||||||
|
{
|
||||||
|
var m_MaterialType = reader.ReadUInt32();
|
||||||
|
}
|
||||||
|
|
||||||
if (version[0] > 5 || (version[0] == 5 && version[1] >= 1)) //5.1 and up
|
if (version[0] > 5 || (version[0] == 5 && version[1] >= 1)) //5.1 and up
|
||||||
{
|
{
|
||||||
var stringTagMapSize = reader.ReadInt32();
|
var stringTagMapSize = reader.ReadInt32();
|
||||||
|
|||||||
@@ -313,7 +313,7 @@ namespace AssetStudio
|
|||||||
}
|
}
|
||||||
hasNormals = reader.ReadBoolean();
|
hasNormals = reader.ReadBoolean();
|
||||||
hasTangents = reader.ReadBoolean();
|
hasTangents = reader.ReadBoolean();
|
||||||
if (version[0] > 4 || (version[0] == 4 && version[1] >= 3)) //4.3 and up
|
if (!reader.Game.Type.IsLoveAndDeepspace() && version[0] > 4 || (version[0] == 4 && version[1] >= 3)) //4.3 and up
|
||||||
{
|
{
|
||||||
reader.AlignStream();
|
reader.AlignStream();
|
||||||
}
|
}
|
||||||
@@ -371,6 +371,11 @@ namespace AssetStudio
|
|||||||
}
|
}
|
||||||
|
|
||||||
fullWeights = reader.ReadSingleArray();
|
fullWeights = reader.ReadSingleArray();
|
||||||
|
if (reader.Game.Type.IsLoveAndDeepspace())
|
||||||
|
{
|
||||||
|
var varintVertices = reader.ReadUInt8Array();
|
||||||
|
reader.AlignStream();
|
||||||
|
}
|
||||||
}
|
}
|
||||||
else
|
else
|
||||||
{
|
{
|
||||||
|
|||||||
@@ -272,6 +272,15 @@ namespace AssetStudio
|
|||||||
gpuProgramID = reader.ReadInt32();
|
gpuProgramID = reader.ReadInt32();
|
||||||
m_Tags = new SerializedTagMap(reader);
|
m_Tags = new SerializedTagMap(reader);
|
||||||
m_LOD = reader.ReadInt32();
|
m_LOD = reader.ReadInt32();
|
||||||
|
if (reader.Game.Type.IsLoveAndDeepspace())
|
||||||
|
{
|
||||||
|
int numOverrideKeywordAndStage = reader.ReadInt32();
|
||||||
|
var m_OverrideKeywordAndStage = new List<KeyValuePair<string, uint>>();
|
||||||
|
for (int i = 0; i < numOverrideKeywordAndStage; i++)
|
||||||
|
{
|
||||||
|
m_OverrideKeywordAndStage.Add(new KeyValuePair<string, uint>(reader.ReadAlignedString(), reader.ReadUInt32()));
|
||||||
|
}
|
||||||
|
}
|
||||||
lighting = reader.ReadBoolean();
|
lighting = reader.ReadBoolean();
|
||||||
reader.AlignStream();
|
reader.AlignStream();
|
||||||
}
|
}
|
||||||
@@ -585,6 +594,11 @@ namespace AssetStudio
|
|||||||
{
|
{
|
||||||
var version = reader.version;
|
var version = reader.version;
|
||||||
|
|
||||||
|
if (reader.Game.Type.IsLoveAndDeepspace())
|
||||||
|
{
|
||||||
|
var m_CodeHash = new Hash128(reader);
|
||||||
|
}
|
||||||
|
|
||||||
m_BlobIndex = reader.ReadUInt32();
|
m_BlobIndex = reader.ReadUInt32();
|
||||||
m_Channels = new ParserBindChannels(reader);
|
m_Channels = new ParserBindChannels(reader);
|
||||||
|
|
||||||
@@ -1074,6 +1088,15 @@ namespace AssetStudio
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
if (reader.Game.Type.IsLoveAndDeepspace())
|
||||||
|
{
|
||||||
|
var codeOffsets = reader.ReadUInt32ArrayArray();
|
||||||
|
var codeCompressedLengths = reader.ReadUInt32ArrayArray();
|
||||||
|
var codeDecompressedLengths = reader.ReadUInt32ArrayArray();
|
||||||
|
var codeCompressedBlob = reader.ReadUInt8Array();
|
||||||
|
reader.AlignStream();
|
||||||
|
}
|
||||||
|
|
||||||
if ((version[0] == 2021 && version[1] > 3) ||
|
if ((version[0] == 2021 && version[1] > 3) ||
|
||||||
version[0] == 2021 && version[1] == 3 && version[2] >= 12 || //2021.3.12f1 and up
|
version[0] == 2021 && version[1] == 3 && version[2] >= 12 || //2021.3.12f1 and up
|
||||||
(version[0] == 2022 && version[1] > 1) ||
|
(version[0] == 2022 && version[1] > 1) ||
|
||||||
|
|||||||
@@ -190,6 +190,7 @@ namespace AssetStudio
|
|||||||
public static bool IsOPFP(this GameType type) => type == GameType.OPFP;
|
public static bool IsOPFP(this GameType type) => type == GameType.OPFP;
|
||||||
public static bool IsNetEase(this GameType type) => type == GameType.NetEase;
|
public static bool IsNetEase(this GameType type) => type == GameType.NetEase;
|
||||||
public static bool IsArknightsEndfield(this GameType type) => type == GameType.ArknightsEndfield;
|
public static bool IsArknightsEndfield(this GameType type) => type == GameType.ArknightsEndfield;
|
||||||
|
public static bool IsLoveAndDeepspace(this GameType type) => type == GameType.LoveAndDeepspace;
|
||||||
public static bool IsGIGroup(this GameType type) => type switch
|
public static bool IsGIGroup(this GameType type) => type switch
|
||||||
{
|
{
|
||||||
GameType.GI or GameType.GI_Pack or GameType.GI_CB1 or GameType.GI_CB2 or GameType.GI_CB3 or GameType.GI_CB3Pre => true,
|
GameType.GI or GameType.GI_Pack or GameType.GI_CB1 or GameType.GI_CB2 or GameType.GI_CB3 or GameType.GI_CB3Pre => true,
|
||||||
|
|||||||
Reference in New Issue
Block a user