YED parsing progress

This commit is contained in:
dexy 2020-03-03 21:27:49 +11:00
parent 97c5e806d8
commit 721b04aa2e

View File

@ -435,11 +435,21 @@ namespace CodeWalker.GameFiles
case 0x37: case 0x37:
case 0x1D: case 0x1D:
case 0x1E: case 0x1E:
return new ExpressionUnk1_Empty(); case 0x46:
case 0x1F:
case 0x3A:
case 0x22:
case 0x49:
case 0x3F:
case 0x1B:
case 0x40:
case 0x3C:
case 0x11:
return new ExpressionUnk1_Base();
case 0x45: case 0x45:
case 0x44: case 0x44:
return new ExpressionUnk1_S1S2T2(); return new ExpressionUnk1_S1();
case 0x07: case 0x07:
case 0x09: case 0x09:
@ -449,11 +459,16 @@ namespace CodeWalker.GameFiles
case 0x27: case 0x27:
case 0x28: case 0x28:
case 0x20: case 0x20:
case 0x42:
case 0x43:
case 0x2A:
case 0x06:
return new ExpressionUnk1_S2(); return new ExpressionUnk1_S2();
case 0x2B: case 0x2B:
case 0x2C: case 0x2C:
return new ExpressionUnk1_2B2C(); case 0x2D:
return new ExpressionUnk1_2B2C2D();
case 0x0B: return new ExpressionUnk1_0B(); case 0x0B: return new ExpressionUnk1_0B();
@ -462,7 +477,7 @@ namespace CodeWalker.GameFiles
case 0x0E: return new ExpressionUnk1_0E(); case 0x0E: return new ExpressionUnk1_0E();
} }
return new ExpressionUnk1_Empty(); return new ExpressionUnk1_Base();
} }
@ -475,47 +490,65 @@ namespace CodeWalker.GameFiles
[TypeConverter(typeof(ExpandableObjectConverter))] public class ExpressionUnk1_Base [TypeConverter(typeof(ExpandableObjectConverter))] public class ExpressionUnk1_Base
{ {
public byte Type { get; set; } public byte Type { get; set; }
public byte Type2 { get; set; } public string TypeStr { get => Type.ToString("X").PadLeft(2, '0'); }
public UnkStruct1 Struct1 { get; set; } public virtual void Read(DataReader r1, DataReader r2, DataReader r3)
public UnkStruct2 Struct2 { get; set; } { }
public class UnkStruct1 public override string ToString()
{
return TypeStr;
}
}
[TypeConverter(typeof(ExpandableObjectConverter))] public class ExpressionUnk1_S1 : ExpressionUnk1_Base
{ {
public uint Length { get; set; } public uint Length { get; set; }
public uint ItemCount { get; set; } public uint ItemCount { get; set; }//is this right?
public uint ItemType { get; set; } public uint ItemType { get; set; }//is this right?
public uint Unk1 { get; set; } public uint Unk1 { get; set; } // 0x00000000
public byte[] Data { get; set; } public byte[] Data { get; set; }
//public Matrix[] Matrices { get; set; }
public void Read(DataReader r) public override void Read(DataReader r1, DataReader r2, DataReader r3)
{ {
Length = r.ReadUInt32(); Length = r1.ReadUInt32();
ItemCount = r.ReadUInt32(); ItemCount = r1.ReadUInt32();
ItemType = r.ReadUInt32(); ItemType = r1.ReadUInt32();
Unk1 = r.ReadUInt32(); Unk1 = r1.ReadUInt32();
var len = Length; var len = Length;
//if (len == 0) len = 272;
var dlen = (int)len - 16; var dlen = (int)len - 16;
if (dlen > 0) if (dlen > 0)
{ {
Data = r.ReadBytes(dlen); Data = r1.ReadBytes(dlen);
}
else
{ }//no hit
var ib = (int)(ItemCount * ItemType * 32);
var idif = (int)Length - ib;
switch (idif)
{
case 16:
case 0:
case -16:
case 48:
case 80:
case 32:
case 112:
case 144:
case 64:
case -32:
case -64:
case -48:
case -80:
break;
default:
break;//no hit
} }
//if (ItemType > 1)
//{
// if (((ItemCount * ItemType * 32) + 16) != Length)
// { }
//}
//else
//{
// if (((ItemCount * ItemType * 32)) != Length)
// { }
//}
switch (ItemCount) switch (ItemCount)
{ {
@ -523,33 +556,43 @@ namespace CodeWalker.GameFiles
case 4: case 4:
case 8: case 8:
case 12: case 12:
case 20:
case 24:
case 48:
case 52:
case 76:
case 32:
case 16:
case 40:
case 44:
case 60:
case 72:
case 56:
case 28:
case 68:
break; break;
default: default:
break; break;//no hit
} }
switch (ItemType) switch (ItemType)
{ {
case 0:
case 1: case 1:
case 2: case 2:
case 3:
case 4:
break; break;
default: default:
break; break;//no hit
} }
if (Unk1 != 0)
{ }//no hit
} }
public void Write(DataWriter w)
{
}
public override string ToString() public override string ToString()
{ {
return Length.ToString() + ", " + ItemCount.ToString() + ", " + ItemType.ToString(); return TypeStr + ", 1: - " + Length.ToString() + ", " + ItemCount.ToString() + ", " + ItemType.ToString();
} }
} }
public class UnkStruct2 [TypeConverter(typeof(ExpandableObjectConverter))] public class ExpressionUnk1_S2 : ExpressionUnk1_Base
{ {
public ushort Unk00 { get; set; } public ushort Unk00 { get; set; }
public ushort Unk02 { get; set; } public ushort Unk02 { get; set; }
@ -558,95 +601,21 @@ namespace CodeWalker.GameFiles
public byte Unk06 { get; set; } public byte Unk06 { get; set; }
public byte Unk07 { get; set; } public byte Unk07 { get; set; }
public void Read(DataReader r)
{
Unk00 = r.ReadUInt16();
Unk02 = r.ReadUInt16();
Unk04 = r.ReadByte();
Unk05 = r.ReadByte();
Unk06 = r.ReadByte();
Unk07 = r.ReadByte();
}
public void Write(DataWriter w)
{
}
public override string ToString()
{
var str = Unk00.ToString() + ", " + Unk02.ToString() + ", " + Unk04.ToString() + ", " + Unk05.ToString() + ", " + Unk06.ToString() + ", " + Unk07.ToString();
return str;
}
}
public string TypeStr { get => Type.ToString("X").PadLeft(2, '0'); }
public string Type2Str { get => Type2.ToString("X").PadLeft(2, '0'); }
public virtual void Read(DataReader r1, DataReader r2, DataReader r3)
{ }
public UnkStruct1 ReadStruct1(DataReader r1)
{
Struct1 = new UnkStruct1();
Struct1.Read(r1);
return Struct1;
}
public UnkStruct2 ReadStruct2(DataReader r2)
{
Struct2 = new UnkStruct2();
Struct2.Read(r2);
return Struct2;
}
public override string ToString()
{
var str = TypeStr + ", " + Type2Str;
if (Struct2 != null)
{
str += " - " + Struct2.ToString();
}
if (Struct1 != null)
{
str += " - " + Struct1.ToString();
}
return str;
}
}
[TypeConverter(typeof(ExpandableObjectConverter))] public class ExpressionUnk1_Empty : ExpressionUnk1_Base
{
public override string ToString()
{
return TypeStr;
}
}
[TypeConverter(typeof(ExpandableObjectConverter))] public class ExpressionUnk1_S1S2T2 : ExpressionUnk1_Base
{
public override void Read(DataReader r1, DataReader r2, DataReader r3) public override void Read(DataReader r1, DataReader r2, DataReader r3)
{ {
ReadStruct1(r1); Unk00 = r2.ReadUInt16();
ReadStruct2(r2); Unk02 = r2.ReadUInt16();
Type2 = r3.ReadByte(); Unk04 = r2.ReadByte();
} Unk05 = r2.ReadByte();
} Unk06 = r2.ReadByte();
[TypeConverter(typeof(ExpandableObjectConverter))] public class ExpressionUnk1_S2 : ExpressionUnk1_Base Unk07 = r2.ReadByte();
{
public override void Read(DataReader r1, DataReader r2, DataReader r3)
{
ReadStruct2(r2);
} }
public override string ToString() public override string ToString()
{ {
var str = TypeStr; return TypeStr + ", 2: - " + Unk00.ToString() + ", " + Unk02.ToString() + ", " + Unk04.ToString() + ", " + Unk05.ToString() + ", " + Unk06.ToString() + ", " + Unk07.ToString();
if (Struct2 != null)
{
str += " - " + Struct2.ToString();
}
return str;
} }
} }
[TypeConverter(typeof(ExpandableObjectConverter))] public class ExpressionUnk1_2B2C : ExpressionUnk1_Base [TypeConverter(typeof(ExpandableObjectConverter))] public class ExpressionUnk1_2B2C2D : ExpressionUnk1_Base
{ {
public float UnkFloat1 { get; set; } public float UnkFloat1 { get; set; }
public uint UnkUint1 { get; set; } public uint UnkUint1 { get; set; }
@ -660,72 +629,21 @@ namespace CodeWalker.GameFiles
} }
public override string ToString() public override string ToString()
{ {
return TypeStr + " - " + UnkFloat1.ToString() + ", " + UnkUint1.ToString() + ", " + UnkUint2.ToString(); return TypeStr + ", 2: - " + UnkFloat1.ToString() + ", " + UnkUint1.ToString() + ", " + UnkUint2.ToString();
} }
} }
[TypeConverter(typeof(ExpandableObjectConverter))] public class ExpressionUnk1_0B : ExpressionUnk1_Base [TypeConverter(typeof(ExpandableObjectConverter))] public class ExpressionUnk1_0B : ExpressionUnk1_Base
{ {
public ExpressionUnk1_Base[] Children { get; set; }
public Vector4 UnkVec1 { get; set; } public Vector4 UnkVec1 { get; set; }
public List<ExpressionUnk1_Base[]> Sets { get; set; }
public void AddSet(ExpressionUnk1_Base[] set)
{
if (Sets == null) Sets = new List<ExpressionUnk1_Base[]>();
Sets.Add(set);
}
public override void Read(DataReader r1, DataReader r2, DataReader r3) public override void Read(DataReader r1, DataReader r2, DataReader r3)
{ {
var children = new List<ExpressionUnk1_Base>();
while (r3.Position < r3.Length)
{
var type = r3.ReadByte();
if (type == 0)
{ break; }
var child = ExpressionUnk1.CreateItem(type);
child.Type = type;
child.Read(r1, r2, r3);
children.Add(child);
if ((type == 0x28) || (type == 0x26)) // 40, 38
{
Type2 = type;
break;
}
if (type == 0x2E)
{
Type2 = type;
break;
}
//if ((type == 0x33) || (type == 0x3D))
//{
// AddSet(children.ToArray());
// children.Clear();
// //Type2 = type;
// //break;
//}
}
if (children.Count > 0)
{
Children = children.ToArray();
}
//if ((Type2 == 0x28) || (Type2 == 0x26)) // 40, 38
//{
// ReadStruct2(r2);
//}
UnkVec1 = r1.ReadVector4(); UnkVec1 = r1.ReadVector4();
} }
public override string ToString() public override string ToString()
{ {
var str = base.ToString() + " - " + UnkVec1.ToString() + " - " + (Children?.Length ?? 0).ToString() + " children"; var str = TypeStr + ", 1: - " + UnkVec1.ToString();
if (Sets != null) str += ", " + Sets.Count.ToString() + " sets";
return str; return str;
} }
} }
@ -740,7 +658,7 @@ namespace CodeWalker.GameFiles
public override string ToString() public override string ToString()
{ {
return TypeStr + " - " + UnkFloat.ToString(); return TypeStr + ", 2: - " + UnkFloat.ToString();
} }
} }
[TypeConverter(typeof(ExpandableObjectConverter))] public class ExpressionUnk1_3E : ExpressionUnk1_Base [TypeConverter(typeof(ExpandableObjectConverter))] public class ExpressionUnk1_3E : ExpressionUnk1_Base
@ -761,9 +679,7 @@ namespace CodeWalker.GameFiles
} }
public override string ToString() public override string ToString()
{ {
var str = TypeStr; return TypeStr + ", 1: - " + UnkVec1.ToString() + " - " + UnkUint1.ToString() + ", " + UnkUint2.ToString() + ", " + UnkUint3.ToString() + ", " + UnkUint4.ToString();
//return str + " - " + UnkVec1.ToString();
return str + " - " + UnkVec1.ToString() + " - " + UnkUint1.ToString() + ", " + UnkUint2.ToString() + ", " + UnkUint3.ToString() + ", " + UnkUint4.ToString();
} }
} }
[TypeConverter(typeof(ExpandableObjectConverter))] public class ExpressionUnk1_0E : ExpressionUnk1_Base [TypeConverter(typeof(ExpandableObjectConverter))] public class ExpressionUnk1_0E : ExpressionUnk1_Base
@ -822,12 +738,7 @@ namespace CodeWalker.GameFiles
} }
public override string ToString() public override string ToString()
{ {
var str = TypeStr; return TypeStr + ", 1: - " + UnkVec1.ToString() + ", " + UnkVec2.ToString() + ", " + UnkVec3.ToString() + ", " + UnkVec4.ToString() + " ...";
if (Struct1 != null)
{
str += " - " + Struct1.ToString();
}
return str;
} }
} }