Updated names in particles, added effects collections in YptFile

This commit is contained in:
dexy 2020-02-05 03:13:06 +11:00
parent 147b230082
commit c88c0e96e5
3 changed files with 278 additions and 226 deletions

View File

@ -1,5 +1,6 @@
using System; using System;
using System.Collections.Generic; using System.Collections.Generic;
using System.ComponentModel;
using System.IO; using System.IO;
using System.Linq; using System.Linq;
using System.Text; using System.Text;
@ -8,12 +9,16 @@ using System.Xml;
namespace CodeWalker.GameFiles namespace CodeWalker.GameFiles
{ {
[TypeConverter(typeof(ExpandableObjectConverter))]
public class YptFile : GameFile, PackedFile public class YptFile : GameFile, PackedFile
{ {
public ParticleEffectsList PtfxList { get; set; } public ParticleEffectsList PtfxList { get; set; }
public Dictionary<uint, DrawableBase> DrawableDict { get; set; } public Dictionary<uint, DrawableBase> DrawableDict { get; set; }
public Dictionary<MetaHash, ParticleEffectRule> EffectDict { get; set; }
public ParticleEffectRule[] AllEffects { get; set; }
public string ErrorMessage { get; set; } public string ErrorMessage { get; set; }
@ -53,7 +58,7 @@ namespace CodeWalker.GameFiles
BuildDrawableDict(); BuildDrawableDict();
BuildParticleDict();
Loaded = true; Loaded = true;
@ -108,6 +113,28 @@ namespace CodeWalker.GameFiles
} }
private void BuildParticleDict()
{
var pdict = PtfxList?.EffectRuleDictionary;
if (pdict?.EffectRules?.data_items != null)
{
EffectDict = new Dictionary<MetaHash, ParticleEffectRule>();
var elist = new List<ParticleEffectRule>();
foreach (var e in pdict.EffectRules.data_items)
{
EffectDict[e.NameHash] = e;
elist.Add(e);
}
elist.Sort((a, b) => { return (a.Name?.Value ?? "").CompareTo(b.Name?.Value ?? ""); });
AllEffects = elist.ToArray();
}
}
} }

View File

@ -3870,7 +3870,18 @@ namespace CodeWalker.GameFiles
weather_wind_foliage = 480273725, weather_wind_foliage = 480273725,
// particles ShaderVars names from Siprus
diffusetex2 = 234123336,
softnesscurve = 415919122,
directionalmult = 1250560552,
normalmapmult = 2008564461,
superalpha = 2445226024,
normalspecmap = 3009619921,
normalarc = 3063280732,
shadowamount = 3218705437,
refractionmap = 3749494808,
camerabias = 4030385036,
ambientmult = 4164128389,

View File

@ -2181,14 +2181,23 @@ namespace CodeWalker.GameFiles
this.UnknownData = reader.ReadBlockAt<ParticleUnknown1>(this.UnknownData1Pointer); this.UnknownData = reader.ReadBlockAt<ParticleUnknown1>(this.UnknownData1Pointer);
this.KeyframeProps = reader.ReadBlockAt<ResourcePointerArray64<ParticleKeyframeProp>>(this.KeyframePropsPointer, this.KeyframePropsCount1); this.KeyframeProps = reader.ReadBlockAt<ResourcePointerArray64<ParticleKeyframeProp>>(this.KeyframePropsPointer, this.KeyframePropsCount1);
#endregion
if (!string.IsNullOrEmpty(Name?.Value)) if (!string.IsNullOrEmpty(Name?.Value))
{ {
JenkIndex.Ensure(Name.Value); JenkIndex.Ensure(Name.Value);
NameHash = JenkHash.GenHash(Name.Value);
} }
#endregion
#region testing
//for (int i = 0; i < (EventEmitters?.data_items?.Length??0); i++)
//{
// if (EventEmitters.data_items[i].Index != i)
// { }//no hit
//}
//if (EventEmittersCount2 != 32) //if (EventEmittersCount2 != 32)
//{ }//no hit //{ }//no hit
//if (KeyframePropsCount2 != 16) //if (KeyframePropsCount2 != 16)
@ -2233,20 +2242,20 @@ namespace CodeWalker.GameFiles
// default: // default:
// break;//no hit // break;//no hit
//} //}
switch (Unknown_54h) //switch (Unknown_54h)
{ //{
case 0x01000000: // case 0x01000000:
case 0x01010001: // case 0x01010001:
case 0x01010200: // case 0x01010200:
case 0x01010000: // case 0x01010000:
case 0x01000200: // case 0x01000200:
case 0x01000001: // case 0x01000001:
case 0x01000201: // case 0x01000201:
case 0x01000100: // case 0x01000100:
break; // break;
default: // default:
break;//more // break;//more
} //}
//if (Unknown_58h != 0) //if (Unknown_58h != 0)
//{ }//no hit //{ }//no hit
//if (Unknown_60h != 0) //if (Unknown_60h != 0)
@ -2255,17 +2264,17 @@ namespace CodeWalker.GameFiles
//{ }//no hit //{ }//no hit
//if (Unknown_6Ch != 0x7f800001) //if (Unknown_6Ch != 0x7f800001)
//{ }//no hit //{ }//no hit
switch (Unknown_70h) //switch (Unknown_70h)
{ //{
case 0: // case 0:
case 1.0f: // case 1.0f:
case 0.5f: // case 0.5f:
case 0.2f: // case 0.2f:
case 0.1f: // case 0.1f:
break; // break;
default: // default:
break;//more // break;//more
} //}
//switch (Unknown_74h) //switch (Unknown_74h)
//{ //{
// case 0.25f: // case 0.25f:
@ -2276,42 +2285,42 @@ namespace CodeWalker.GameFiles
// default: // default:
// break;//no hit // break;//no hit
//} //}
switch (Unknown_78h) //switch (Unknown_78h)
{ //{
case 0.2f: // case 0.2f:
case 0.5f: // case 0.5f:
case 1.0f: // case 1.0f:
break; // break;
default: // default:
break;//more // break;//more
} //}
switch (Unknown_7Ch) //switch (Unknown_7Ch)
{ //{
case 0.2f: // case 0.2f:
case 0.5f: // case 0.5f:
case 1.0f: // case 1.0f:
break; // break;
default: // default:
break;//more // break;//more
} //}
switch (Unknown_80h) //switch (Unknown_80h)
{ //{
case 1.0f: // case 1.0f:
case 2.0f: // case 2.0f:
case 1.2f: // case 1.2f:
case 1.5f: // case 1.5f:
break; // break;
default: // default:
break;//more // break;//more
} //}
switch (Unknown_84h) //switch (Unknown_84h)
{ //{
case 1.0f: // case 1.0f:
case 2.0f: // case 2.0f:
break; // break;
default: // default:
break;//more // break;//more
} //}
//switch (Unknown_88h) //switch (Unknown_88h)
//{ //{
// case 0x01010100: // case 0x01010100:
@ -2338,127 +2347,127 @@ namespace CodeWalker.GameFiles
// default: // default:
// break;//no hit // break;//no hit
//} //}
switch (Unknown_90h) //switch (Unknown_90h)
{ //{
case 0: // case 0:
case 1.1f: // case 1.1f:
case 1.5f: // case 1.5f:
case 1.2f: // case 1.2f:
case 6.0f: // case 6.0f:
break; // break;
default: // default:
break;//more // break;//more
} //}
switch (Unknown_94h) //switch (Unknown_94h)
{ //{
case 0: // case 0:
case 1.8f: // case 1.8f:
case 10.0f: // case 10.0f:
case 0.4f: // case 0.4f:
case -1.0f: // case -1.0f:
case -9.0f: // case -9.0f:
break; // break;
default: // default:
break;//more // break;//more
} //}
switch (Unknown_98h) //switch (Unknown_98h)
{ //{
case 0: // case 0:
case 5.0f: // case 5.0f:
case 1.5f: // case 1.5f:
case -1.0f: // case -1.0f:
case 0.5f: // case 0.5f:
case 0.2f: // case 0.2f:
case 1.0f: // case 1.0f:
case 12.0f: // case 12.0f:
break; // break;
default: // default:
break;//more // break;//more
} //}
//if (Unknown_9Ch != 0x7f800001) //if (Unknown_9Ch != 0x7f800001)
//{ }//no hit //{ }//no hit
switch (Unknown_A0h) //switch (Unknown_A0h)
{ //{
case 0: // case 0:
case 4.5f: // case 4.5f:
case 11.0f: // case 11.0f:
case 5.0f: // case 5.0f:
break; // break;
default: // default:
break;//and more // break;//and more
} //}
switch (Unknown_A4h) //switch (Unknown_A4h)
{ //{
case 38.0f: // case 38.0f:
case 25.0f: // case 25.0f:
break; // break;
default: // default:
break;//and more // break;//and more
} //}
switch (Unknown_A8h) //switch (Unknown_A8h)
{ //{
case 40.0f: // case 40.0f:
case 30.0f: // case 30.0f:
break; // break;
default: // default:
break;//and more // break;//and more
} //}
switch (Unknown_ACh) //switch (Unknown_ACh)
{ //{
case 15.0f: // case 15.0f:
case 4.0f: // case 4.0f:
break; // break;
default: // default:
break;//and more // break;//and more
} //}
switch (Unknown_B0h) //switch (Unknown_B0h)
{ //{
case 40.0f: // case 40.0f:
case 12.0f: // case 12.0f:
break; // break;
default: // default:
break;//and more // break;//and more
} //}
switch (Unknown_B4h) //switch (Unknown_B4h)
{ //{
case 3.0f: // case 3.0f:
case 0: // case 0:
case 0.500002f: // case 0.500002f:
case 1.5f: // case 1.5f:
break; // break;
default: // default:
break;//more // break;//more
} //}
switch (Unknown_B8h) //switch (Unknown_B8h)
{ //{
case 2.0f: // case 2.0f:
case 0: // case 0:
case 1.5f: // case 1.5f:
case 1.0f: // case 1.0f:
case 3.0f: // case 3.0f:
case 5.0f: // case 5.0f:
case 9.0f: // case 9.0f:
break; // break;
default: // default:
break;//more // break;//more
} //}
switch (Unknown_BCh) //switch (Unknown_BCh)
{ //{
case 0x00010103: // case 0x00010103:
case 0: // case 0:
case 0x01000000: // case 0x01000000:
case 0x01010003: // case 0x01010003:
case 0x00000103: // case 0x00000103:
case 0x00000002: // case 0x00000002:
case 0x00000003: // case 0x00000003:
case 0x00010100: // case 0x00010100:
case 0x01000002: // case 0x01000002:
case 0x00010002: // case 0x00010002:
case 0x01010002: // case 0x01010002:
break; // break;
default: // default:
break;//more // break;//more
} //}
//if (Unknown_39Ch != 0) //if (Unknown_39Ch != 0)
//{ }//no hit //{ }//no hit
//switch (Unknown_3A0h) //switch (Unknown_3A0h)
@ -2471,7 +2480,7 @@ namespace CodeWalker.GameFiles
// case 0x00080000: // case 0x00080000:
// case 0x00090100: // case 0x00090100:
// case 0x000b0100: // case 0x000b0100:
// case 0x000c0100: // case 0x000c0100: //setting the 5th digit to C (eg 0x000C0000) for Unknown3A0 in EffectRuleDictionary enables damage for volumetric particles -Monika
// break; // break;
// default: // default:
// break;//no hit // break;//no hit
@ -2487,6 +2496,8 @@ namespace CodeWalker.GameFiles
//if (Unknown_3B8h != 0) //if (Unknown_3B8h != 0)
//{ }//no hit //{ }//no hit
#endregion
} }
public override void Write(ResourceDataWriter writer, params object[] parameters) public override void Write(ResourceDataWriter writer, params object[] parameters)
{ {
@ -2637,6 +2648,11 @@ namespace CodeWalker.GameFiles
for (int i = emlist.Count; i < 32; i++) emlist.Add(null); for (int i = emlist.Count; i < 32; i++) emlist.Add(null);
EventEmitters = new ResourcePointerArray64<ParticleEventEmitter>(); EventEmitters = new ResourcePointerArray64<ParticleEventEmitter>();
EventEmitters.data_items = emlist.ToArray(); EventEmitters.data_items = emlist.ToArray();
for (int i = 0; i < (EventEmitters.data_items?.Length ?? 0); i++)
{
EventEmitters.data_items[i].Index = (uint)i;
}
var kflist = XmlMeta.ReadItemArray<ParticleKeyframeProp>(node, "KeyframeProperties")?.ToList() ?? new List<ParticleKeyframeProp>(); var kflist = XmlMeta.ReadItemArray<ParticleKeyframeProp>(node, "KeyframeProperties")?.ToList() ?? new List<ParticleKeyframeProp>();
KeyframeProp0 = (kflist.Count > 0) ? kflist[0] : new ParticleKeyframeProp(); KeyframeProp0 = (kflist.Count > 0) ? kflist[0] : new ParticleKeyframeProp();
@ -2699,23 +2715,23 @@ namespace CodeWalker.GameFiles
// structure data // structure data
public uint VFT { get; set; } public uint VFT { get; set; }
public uint Unknown_4h = 1; // 0x00000001 public uint Unknown_4h = 1; // 0x00000001
public uint Unknown_8h { get; set; } // 0, 1, 2, 3, 4, 5, 6 -index? public uint Index { get; set; } // 0, 1, 2, 3, 4, 5, 6 -index?
public uint Unknown_Ch; // 0x00000000 public uint Unknown_Ch; // 0x00000000
public float Unknown_10h { get; set; } public float Unknown_10h { get; set; }
public float Unknown_14h { get; set; } public float Unknown_14h { get; set; }
public ulong UnknownDataPointer { get; set; } public ulong UnknownDataPointer { get; set; }
public ulong Unknown_20h; // 0x0000000000000000 public ulong Unknown_20h; // 0x0000000000000000
public ulong Unknown_28h; // 0x0000000000000000 public ulong Unknown_28h; // 0x0000000000000000
public ulong String1Pointer { get; set; } public ulong EmitterRuleNamePointer { get; set; }
public ulong String2Pointer { get; set; } public ulong ParticleRuleNamePointer { get; set; }
public ulong EmitterRulePointer { get; set; } public ulong EmitterRulePointer { get; set; }
public ulong ParticleRulePointer { get; set; } public ulong ParticleRulePointer { get; set; }
public float Unknown_50h { get; set; } public float Unknown_50h { get; set; }
public float Unknown_54h { get; set; } public float Unknown_54h { get; set; }
public float Unknown_58h { get; set; } public float Unknown_58h { get; set; }
public float Unknown_5Ch { get; set; } public float Unknown_5Ch { get; set; }
public uint Unknown_60h { get; set; } // eg. 0xfffafafa - colour? public uint Colour1 { get; set; } // eg. 0xfffafafa - colour?
public uint Unknown_64h { get; set; } // eg. 0x5affffff - colour? public uint Colour2 { get; set; } // eg. 0x5affffff - colour?
public ulong Unknown_68h; // 0x0000000000000000 public ulong Unknown_68h; // 0x0000000000000000
// reference data // reference data
@ -2731,29 +2747,29 @@ namespace CodeWalker.GameFiles
// read structure data // read structure data
this.VFT = reader.ReadUInt32(); this.VFT = reader.ReadUInt32();
this.Unknown_4h = reader.ReadUInt32(); this.Unknown_4h = reader.ReadUInt32();
this.Unknown_8h = reader.ReadUInt32(); this.Index = reader.ReadUInt32();
this.Unknown_Ch = reader.ReadUInt32(); this.Unknown_Ch = reader.ReadUInt32();
this.Unknown_10h = reader.ReadSingle(); this.Unknown_10h = reader.ReadSingle();
this.Unknown_14h = reader.ReadSingle(); this.Unknown_14h = reader.ReadSingle();
this.UnknownDataPointer = reader.ReadUInt64(); this.UnknownDataPointer = reader.ReadUInt64();
this.Unknown_20h = reader.ReadUInt64(); this.Unknown_20h = reader.ReadUInt64();
this.Unknown_28h = reader.ReadUInt64(); this.Unknown_28h = reader.ReadUInt64();
this.String1Pointer = reader.ReadUInt64(); this.EmitterRuleNamePointer = reader.ReadUInt64();
this.String2Pointer = reader.ReadUInt64(); this.ParticleRuleNamePointer = reader.ReadUInt64();
this.EmitterRulePointer = reader.ReadUInt64(); this.EmitterRulePointer = reader.ReadUInt64();
this.ParticleRulePointer = reader.ReadUInt64(); this.ParticleRulePointer = reader.ReadUInt64();
this.Unknown_50h = reader.ReadSingle(); this.Unknown_50h = reader.ReadSingle();
this.Unknown_54h = reader.ReadSingle(); this.Unknown_54h = reader.ReadSingle();
this.Unknown_58h = reader.ReadSingle(); this.Unknown_58h = reader.ReadSingle();
this.Unknown_5Ch = reader.ReadSingle(); this.Unknown_5Ch = reader.ReadSingle();
this.Unknown_60h = reader.ReadUInt32(); this.Colour1 = reader.ReadUInt32();
this.Unknown_64h = reader.ReadUInt32(); this.Colour2 = reader.ReadUInt32();
this.Unknown_68h = reader.ReadUInt64(); this.Unknown_68h = reader.ReadUInt64();
// read reference data // read reference data
this.UnknownData = reader.ReadBlockAt<ParticleUnknown1>(this.UnknownDataPointer); this.UnknownData = reader.ReadBlockAt<ParticleUnknown1>(this.UnknownDataPointer);
this.EmitterRuleName = reader.ReadBlockAt<string_r>(this.String1Pointer); this.EmitterRuleName = reader.ReadBlockAt<string_r>(this.EmitterRuleNamePointer);
this.ParticleRuleName = reader.ReadBlockAt<string_r>(this.String2Pointer); this.ParticleRuleName = reader.ReadBlockAt<string_r>(this.ParticleRuleNamePointer);
this.EmitterRule = reader.ReadBlockAt<ParticleEmitterRule>(this.EmitterRulePointer); this.EmitterRule = reader.ReadBlockAt<ParticleEmitterRule>(this.EmitterRulePointer);
this.ParticleRule = reader.ReadBlockAt<ParticleRule>(this.ParticleRulePointer); this.ParticleRule = reader.ReadBlockAt<ParticleRule>(this.ParticleRulePointer);
@ -2856,7 +2872,7 @@ namespace CodeWalker.GameFiles
default: default:
break;//more break;//more
} }
switch (Unknown_60h) switch (Colour1)
{ {
case 0xffffffff: case 0xffffffff:
case 0xfffafafa: case 0xfffafafa:
@ -2870,7 +2886,7 @@ namespace CodeWalker.GameFiles
default: default:
break;//more break;//more
} }
switch (Unknown_64h) switch (Colour2)
{ {
case 0xffffffff: case 0xffffffff:
case 0xffffefc2: case 0xffffefc2:
@ -2896,46 +2912,45 @@ namespace CodeWalker.GameFiles
{ {
// update structure data // update structure data
this.UnknownDataPointer = (ulong)(this.UnknownData != null ? this.UnknownData.FilePosition : 0); this.UnknownDataPointer = (ulong)(this.UnknownData != null ? this.UnknownData.FilePosition : 0);
this.String1Pointer = (ulong)(this.EmitterRuleName != null ? this.EmitterRuleName.FilePosition : 0); this.EmitterRuleNamePointer = (ulong)(this.EmitterRuleName != null ? this.EmitterRuleName.FilePosition : 0);
this.String2Pointer = (ulong)(this.ParticleRuleName != null ? this.ParticleRuleName.FilePosition : 0); this.ParticleRuleNamePointer = (ulong)(this.ParticleRuleName != null ? this.ParticleRuleName.FilePosition : 0);
this.EmitterRulePointer = (ulong)(this.EmitterRule != null ? this.EmitterRule.FilePosition : 0); this.EmitterRulePointer = (ulong)(this.EmitterRule != null ? this.EmitterRule.FilePosition : 0);
this.ParticleRulePointer = (ulong)(this.ParticleRule != null ? this.ParticleRule.FilePosition : 0); this.ParticleRulePointer = (ulong)(this.ParticleRule != null ? this.ParticleRule.FilePosition : 0);
// write structure data // write structure data
writer.Write(this.VFT); writer.Write(this.VFT);
writer.Write(this.Unknown_4h); writer.Write(this.Unknown_4h);
writer.Write(this.Unknown_8h); writer.Write(this.Index);
writer.Write(this.Unknown_Ch); writer.Write(this.Unknown_Ch);
writer.Write(this.Unknown_10h); writer.Write(this.Unknown_10h);
writer.Write(this.Unknown_14h); writer.Write(this.Unknown_14h);
writer.Write(this.UnknownDataPointer); writer.Write(this.UnknownDataPointer);
writer.Write(this.Unknown_20h); writer.Write(this.Unknown_20h);
writer.Write(this.Unknown_28h); writer.Write(this.Unknown_28h);
writer.Write(this.String1Pointer); writer.Write(this.EmitterRuleNamePointer);
writer.Write(this.String2Pointer); writer.Write(this.ParticleRuleNamePointer);
writer.Write(this.EmitterRulePointer); writer.Write(this.EmitterRulePointer);
writer.Write(this.ParticleRulePointer); writer.Write(this.ParticleRulePointer);
writer.Write(this.Unknown_50h); writer.Write(this.Unknown_50h);
writer.Write(this.Unknown_54h); writer.Write(this.Unknown_54h);
writer.Write(this.Unknown_58h); writer.Write(this.Unknown_58h);
writer.Write(this.Unknown_5Ch); writer.Write(this.Unknown_5Ch);
writer.Write(this.Unknown_60h); writer.Write(this.Colour1);
writer.Write(this.Unknown_64h); writer.Write(this.Colour2);
writer.Write(this.Unknown_68h); writer.Write(this.Unknown_68h);
} }
public void WriteXml(StringBuilder sb, int indent) public void WriteXml(StringBuilder sb, int indent)
{ {
YptXml.StringTag(sb, indent, "EmitterRule", YptXml.XmlEscape(EmitterRuleName?.Value ?? "")); YptXml.StringTag(sb, indent, "EmitterRule", YptXml.XmlEscape(EmitterRuleName?.Value ?? ""));
YptXml.StringTag(sb, indent, "ParticleRule", YptXml.XmlEscape(ParticleRuleName?.Value ?? "")); YptXml.StringTag(sb, indent, "ParticleRule", YptXml.XmlEscape(ParticleRuleName?.Value ?? ""));
YptXml.ValueTag(sb, indent, "Unknown8", Unknown_8h.ToString());
YptXml.ValueTag(sb, indent, "Unknown10", FloatUtil.ToString(Unknown_10h)); YptXml.ValueTag(sb, indent, "Unknown10", FloatUtil.ToString(Unknown_10h));
YptXml.ValueTag(sb, indent, "Unknown14", FloatUtil.ToString(Unknown_14h)); YptXml.ValueTag(sb, indent, "Unknown14", FloatUtil.ToString(Unknown_14h));
YptXml.ValueTag(sb, indent, "Unknown50", FloatUtil.ToString(Unknown_50h)); YptXml.ValueTag(sb, indent, "Unknown50", FloatUtil.ToString(Unknown_50h));
YptXml.ValueTag(sb, indent, "Unknown54", FloatUtil.ToString(Unknown_54h)); YptXml.ValueTag(sb, indent, "Unknown54", FloatUtil.ToString(Unknown_54h));
YptXml.ValueTag(sb, indent, "Unknown58", FloatUtil.ToString(Unknown_58h)); YptXml.ValueTag(sb, indent, "Unknown58", FloatUtil.ToString(Unknown_58h));
YptXml.ValueTag(sb, indent, "Unknown5C", FloatUtil.ToString(Unknown_5Ch)); YptXml.ValueTag(sb, indent, "Unknown5C", FloatUtil.ToString(Unknown_5Ch));
YptXml.ValueTag(sb, indent, "Unknown60", YptXml.UintString(Unknown_60h)); YptXml.ValueTag(sb, indent, "Colour1", YptXml.UintString(Colour1));
YptXml.ValueTag(sb, indent, "Unknown64", YptXml.UintString(Unknown_64h)); YptXml.ValueTag(sb, indent, "Colour2", YptXml.UintString(Colour2));
if (UnknownData != null) if (UnknownData != null)
{ {
YptXml.OpenTag(sb, indent, "UnknownData"); YptXml.OpenTag(sb, indent, "UnknownData");
@ -2947,15 +2962,14 @@ namespace CodeWalker.GameFiles
{ {
EmitterRuleName = (string_r)Xml.GetChildInnerText(node, "EmitterRule"); if (EmitterRuleName.Value == null) EmitterRuleName = null; EmitterRuleName = (string_r)Xml.GetChildInnerText(node, "EmitterRule"); if (EmitterRuleName.Value == null) EmitterRuleName = null;
ParticleRuleName = (string_r)Xml.GetChildInnerText(node, "ParticleRule"); if (ParticleRuleName.Value == null) ParticleRuleName = null; ParticleRuleName = (string_r)Xml.GetChildInnerText(node, "ParticleRule"); if (ParticleRuleName.Value == null) ParticleRuleName = null;
Unknown_8h = Xml.GetChildUIntAttribute(node, "Unknown8");
Unknown_10h = Xml.GetChildFloatAttribute(node, "Unknown10"); Unknown_10h = Xml.GetChildFloatAttribute(node, "Unknown10");
Unknown_14h = Xml.GetChildFloatAttribute(node, "Unknown14"); Unknown_14h = Xml.GetChildFloatAttribute(node, "Unknown14");
Unknown_50h = Xml.GetChildFloatAttribute(node, "Unknown50"); Unknown_50h = Xml.GetChildFloatAttribute(node, "Unknown50");
Unknown_54h = Xml.GetChildFloatAttribute(node, "Unknown54"); Unknown_54h = Xml.GetChildFloatAttribute(node, "Unknown54");
Unknown_58h = Xml.GetChildFloatAttribute(node, "Unknown58"); Unknown_58h = Xml.GetChildFloatAttribute(node, "Unknown58");
Unknown_5Ch = Xml.GetChildFloatAttribute(node, "Unknown5C"); Unknown_5Ch = Xml.GetChildFloatAttribute(node, "Unknown5C");
Unknown_60h = Xml.GetChildUIntAttribute(node, "Unknown60"); Colour1 = Xml.GetChildUIntAttribute(node, "Colour1");
Unknown_64h = Xml.GetChildUIntAttribute(node, "Unknown64"); Colour2 = Xml.GetChildUIntAttribute(node, "Colour2");
var udnode = node.SelectSingleNode("UnknownData"); var udnode = node.SelectSingleNode("UnknownData");
if (udnode != null) if (udnode != null)
{ {
@ -7767,29 +7781,29 @@ namespace CodeWalker.GameFiles
//{ }//no hit //{ }//no hit
//if (Unknown_8h != 0) //if (Unknown_8h != 0)
//{ }//no hit //{ }//no hit
switch (Name) //parameter name..? switch (Name) //parameter name
{ {
case 0xea057402: // case 0xea057402: //
case 0x0b3045be: // "softness" case 0x0b3045be: // softness
case 0x91bf3028: // case 0x91bf3028: // superalpha
case 0x4a8a0a28: // case 0x4a8a0a28: // directionalmult
case 0xf8338e85: // case 0xf8338e85: // ambientmult
case 0xbfd98c1d: // case 0xbfd98c1d: // shadowamount
case 0xc6fe034a: // case 0xc6fe034a: //
case 0xf03acb8c: // case 0xf03acb8c: // camerabias
case 0x81634888: // case 0x81634888: //
case 0xb695f45c: // case 0xb695f45c: // normalarc
case 0x403390ea: // case 0x403390ea: //
case 0x18ca6c12: // case 0x18ca6c12: // softnesscurve
case 0x1458f27b: // case 0x1458f27b: //
case 0xa781a38b: // case 0xa781a38b: //
case 0x77b842ed: // case 0x77b842ed: // normalmapmult
case 0x7b483bc5: // case 0x7b483bc5: //
case 0x6a1dbec3: // case 0x6a1dbec3: //
case 0xba5af058: // case 0xba5af058: //
case 0xdf7cc018: // case 0xdf7cc018: // refractionmap
case 0xb36327d1: // case 0xb36327d1: // normalspecmap
case 0x0df47048: // case 0x0df47048: // diffusetex2
break; break;
default: default:
break;//no hit break;//no hit