From dc6c8434011f3f7170c8bb9550db9f7651620e7a Mon Sep 17 00:00:00 2001 From: dexyfex Date: Mon, 25 Dec 2017 23:30:22 +1100 Subject: [PATCH] Slightly more robust FXC parsing. --- GameFiles/FileTypes/FxcFile.cs | 15 ++++++++++----- 1 file changed, 10 insertions(+), 5 deletions(-) diff --git a/GameFiles/FileTypes/FxcFile.cs b/GameFiles/FileTypes/FxcFile.cs index 561e4f7..b48a198 100644 --- a/GameFiles/FileTypes/FxcFile.cs +++ b/GameFiles/FileTypes/FxcFile.cs @@ -108,8 +108,8 @@ namespace CodeWalker.GameFiles if (!shader.Read(br, exbyteflag1)) { LastError += shader.LastError; - gindex = 6; //get outta the loop - break; + //gindex = 6; //get outta the loop? + //break; } shaders.Add(shader); shadergrp.Add(shader); @@ -134,7 +134,7 @@ namespace CodeWalker.GameFiles CBufferDict = new Dictionary(); FxcCBuffer cbtmp = null; - try //things can be undertain after this... + try //things can be uncertain after this... { byte cbCount1 = br.ReadByte(); @@ -531,6 +531,7 @@ namespace CodeWalker.GameFiles [TypeConverter(typeof(ExpandableObjectConverter))] public class FxcShader { + public long Offset { get; set; } public string Name { get; set; } public string[] Params { get; set; } public FxcShaderBufferRef[] Buffers { get; set; }//CBuffers @@ -544,6 +545,8 @@ namespace CodeWalker.GameFiles public bool Read(BinaryReader br, bool exbyteflag) { + Offset = br.BaseStream.Position; + Name = FxcFile.ReadString(br); if (Name.Length == 0) @@ -596,8 +599,6 @@ namespace CodeWalker.GameFiles ShaderProfile = ByteCodeObj.GetVersion(); - Disassembly = ByteCodeObj.Disassemble(); - switch (ShaderProfile.Version) { @@ -613,6 +614,10 @@ namespace CodeWalker.GameFiles break; } + + //do disassembly last, so any errors won't cause the file read to break + Disassembly = ByteCodeObj.Disassemble(); + } catch (Exception ex) {